Merge branch 'aureplop/clean_scroll' into 'master'

Misc UI

Closes #90 and #115

See merge request !225
This commit is contained in:
Martin Pepin 2017-05-25 23:03:40 +02:00
commit b13e992a30
53 changed files with 1636 additions and 1614 deletions

View file

@ -8,7 +8,7 @@ from django.core.exceptions import ValidationError
from django.core.validators import MinLengthValidator
from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.forms import modelformset_factory
from django.forms import modelformset_factory, widgets
from django.utils import timezone
from djconfig.forms import ConfigForm
@ -151,10 +151,24 @@ class UserGroupForm(forms.ModelForm):
fields = ['groups']
class KFetPermissionsField(forms.ModelMultipleChoiceField):
def __init__(self, *args, **kwargs):
queryset = Permission.objects.filter(
content_type__in=ContentType.objects.filter(app_label="kfet"),
)
super().__init__(
queryset=queryset,
widget=widgets.CheckboxSelectMultiple,
*args, **kwargs
)
def label_from_instance(self, obj):
return obj.name
class GroupForm(forms.ModelForm):
permissions = forms.ModelMultipleChoiceField(
queryset= Permission.objects.filter(content_type__in=
ContentType.objects.filter(app_label='kfet')))
permissions = KFetPermissionsField()
def clean_name(self):
name = self.cleaned_data['name']
@ -525,11 +539,7 @@ class OrderArticleForm(forms.Form):
self.category = kwargs['initial']['category']
self.category_name = kwargs['initial']['category__name']
self.box_capacity = kwargs['initial']['box_capacity']
self.v_s1 = kwargs['initial']['v_s1']
self.v_s2 = kwargs['initial']['v_s2']
self.v_s3 = kwargs['initial']['v_s3']
self.v_s4 = kwargs['initial']['v_s4']
self.v_s5 = kwargs['initial']['v_s5']
self.v_all = kwargs['initial']['v_all']
self.v_moy = kwargs['initial']['v_moy']
self.v_et = kwargs['initial']['v_et']
self.v_prev = kwargs['initial']['v_prev']

View file

@ -1,16 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from builtins import *
from django.contrib import messages
from django.contrib.auth.signals import user_logged_in
from django.core.urlresolvers import reverse
from django.dispatch import receiver
@receiver(user_logged_in)
def messages_on_login(sender, request, user, **kwargs):
if (not user.username == 'kfet_genericteam'
and user.has_perm('kfet.is_team')):
messages.info(request, '<a href="%s">Connexion en utilisateur partagé ?</a>' % reverse('kfet.login.genericteam'), extra_tags='safe')
if (not user.username == 'kfet_genericteam' and
user.has_perm('kfet.is_team') and
'k-fet' in request.GET.get('next', '')):
messages.info(
request,
('<a href="{}" target="_blank">Connexion en utilisateur partagé ?</a>'
.format(reverse('kfet.login.genericteam'))),
extra_tags='safe')

View file

@ -9,17 +9,20 @@
#history .day {
height:40px;
line-height:40px;
background-color:#c8102e;
background-color:rgba(200,16,46,0.9);
color:#fff;
padding-left:20px;
font-size:16px;
font-weight:bold;
position:sticky;
top:50px;
z-index:10;
}
#history .opegroup {
height:30px;
line-height:30px;
background-color:rgba(200,16,46,0.85);
background-color:rgba(200,16,46,0.75);
color:#fff;
font-weight:bold;
padding-left:20px;

View file

@ -33,10 +33,8 @@ textarea {
.table {
margin-bottom:0;
border-bottom:1px solid #ddd;
}
.table {
width:100%;
background-color: #FFF;
}
.table td {
@ -70,6 +68,16 @@ textarea {
padding:8px 30px;
}
.table-responsive {
border: 0;
margin-bottom: 0;
}
.btn {
transition: background-color, color;
transition-duration: 0.15s;
}
.btn, .btn-lg, .btn-group-lg>.btn {
border-radius:0;
}
@ -81,19 +89,30 @@ textarea {
border:0;
}
.btn-primary:hover, .btn-primary.focus, .btn-primary:focus {
background-color:#000;
.btn-primary:hover,
.btn-primary.focus, .btn-primary:focus,
.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover,
.btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover,
.nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover {
outline: 0;
background-color:rgba(200,16,46,1);
color:#FFF;
}
.buttons .nav-pills > li > a {
border-radius:0;
border:1px solid rgba(200,16,46,0.9);
.btn-primary[disabled]:hover,
.btn-primary[disabled]:focus {
background-color: #000;
color: #666;
}
.buttons .nav-pills > li.active > a {
background-color:rgba(200,16,46,0.9);
background-clip:padding-box;
.nav-pills>li>a {
border-radius:0;
}
.nav-pills>li>a:focus, .nav-pills>li>a:hover {
outline: 0;
background-color:rgba(200,16,46,1);
color:#FFF;
}
.row-page-header {
@ -114,26 +133,17 @@ textarea {
padding: 0 !important;
}
.panel-md-margin{
background-color: white;
overflow:hidden;
padding-left: 15px;
padding-right: 15px;
padding-bottom: 15px;
padding-top: 1px;
}
@media (min-width: 992px) {
.panel-md-margin{
margin:8px;
background-color: white;
}
}
.col-content-left, .col-content-right {
padding:0;
}
@media (min-width: 768px) {
.col-content-left {
position: sticky;
top:50px;
}
}
.content-left-top {
background:#fff;
padding:10px 30px;
@ -147,6 +157,14 @@ textarea {
display:block;
}
.content-left .buttons ul.nav-pills {
margin-bottom:5px;
}
.content-left .buttons ul.nav-pills li {
margin:0 0 -5px;
}
.content-left-top.frozen-account {
background:#000FBA;
color:#fff;
@ -179,25 +197,22 @@ textarea {
text-align:center;
}
.content-right {
margin:0 15px;
@media (min-width: 768px) {
.content-right {
margin: 15px;
}
}
.content-right-block {
padding-bottom:5px;
position:relative;
}
.content-right-block:last-child {
padding-bottom:15px;
.content-right-block > *:not(.buttons-title) {
background: #fff;
}
.content-right-block > div:not(.buttons-title) {
background:#fff;
}
.content-right-block-transparent > div:not(.buttons-title) {
background-color: transparent;
.content-right-block > h2 {
background: transparent !important;
}
.content-right-block .buttons-title {
@ -219,9 +234,8 @@ textarea {
.content-right-block h3 {
border-bottom: 1px solid #c8102e;
margin: 20px 15px 15px;
padding-bottom: 10px;
padding-left: 20px;
margin: 0px 15px 15px;
padding: 20px 20px 10px;
font-size:25px;
}
@ -229,20 +243,34 @@ textarea {
* Pages tableaux seuls
*/
.content-center > div {
background:#fff;
.content-center > *:not(.content-right-block) {
background: #fff;
}
@media (min-width: 992px) {
.content-center {
margin: 15px 0;
}
}
.content-center tbody tr:not(.section) td {
padding:0px 5px !important;
padding:0px 5px;
}
.content-center .table .form-control {
.table .form-control {
padding: 1px 12px ;
height:28px;
margin:3px 0px;
}
.content-center .auth-form {
.table-condensed input.form-control {
margin: 0 !important;
border-top: 0;
border-bottom: 0;
border-radius: 0;
}
.content-center .auth-form {
margin:15px;
}
@ -250,15 +278,12 @@ textarea {
* Pages formulaires seuls
*/
.form-only .content-form {
margin:15px;
background:#fff;
padding:15px;
.content-form {
background-color: #fff;
padding: 15px;
}
.form-only .account_create #id_trigramme {
.account_create #id_trigramme {
display:block;
width:200px;
height:80px;
@ -324,6 +349,10 @@ textarea {
* Messages
*/
.messages {
margin: 0;
}
.messages .alert {
padding:10px 15px;
margin:0;
@ -561,21 +590,67 @@ thead .tooltip {
}
}
.help-block {
padding-top: 15px;
}
/* Inventaires */
#inventoryform input[type=number] {
text-align: center;
}
.inventory_modified {
background:rgba(236,100,0,0.15);
}
.stock_diff {
padding-left: 5px;
color:#C8102E;
color:#C8102E;
}
.inventory_update {
display:none;
display: none;
width: 50px;
margin: 0 auto;
}
/* Multiple select customizations */
.ms-choice {
height: 34px !important;
line-height: 34px !important;
border: 1px solid #ccc !important;
box-shadow: inset 0 1px 1px rgba(0,0,0,.075) !important;
}
.ms-choice > div {
top: 4px !important;
}
/* Checkbox select multiple */
.checkbox-select-multiple label {
font-weight: normal;
margin-bottom: 0;
}
/* Statement creation */
.statement-create-summary table {
margin: 0 auto;
}
.statement-create-summary tr td {
text-align: right;
}
.statement-create-summary tr td:first-child {
padding-right: 15px;
font-weight: bold;
}
.statement-create-summary tr td:last-child {
width: 80px;
}
#detail_taken table td,
#detail_balance table td {
padding: 0;
}

View file

@ -143,7 +143,7 @@ input[type=number]::-webkit-outer-spin-button {
height:50px;
padding:0 15px;
background:#c8102e;
background:rgba(200,16,46,0.9);
color:#fff;
font-weight:bold;
@ -232,16 +232,21 @@ input[type=number]::-webkit-outer-spin-button {
float:left;
background:#c8102e;
background: rgba(200,16,46,0.9);
color:#FFF;
font-size:18px;
font-weight:bold;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
#special_operations button:focus, #special_operations button:hover {
#special_operations button:focus,
#special_operations button:hover {
outline:none;
background:#000;
background: rgba(200,16,46,1);
color:#fff;
}
@ -256,15 +261,14 @@ input[type=number]::-webkit-outer-spin-button {
height:100%;
float:left;
border:0;
border-right:1px solid #c8102e;
border-bottom:1px solid #c8102e;
border-radius:0;
border-bottom: 1px solid rgba(200,16,46,0.9);
font-size:16px;
font-weight:bold;
}
#article_selection input+input #article_selection input+span {
border-right:0;
#article_selection input:first-child {
border-right: 1px dashed rgba(200,16,46,0.9);
}
#article_autocomplete {
@ -319,7 +323,7 @@ input[type=number]::-webkit-outer-spin-button {
#articles_data table tr.category {
height:35px;
background-color:#c8102e;
background-color:rgba(200,16,46,0.9);
font-size:16px;
color:#FFF;
font-weight:bold;
@ -423,3 +427,7 @@ input[type=number]::-webkit-outer-spin-button {
.kpsul_middle_right_col {
overflow:auto;
}
.kpsul_middle_right_col #history .day {
top: 0;
}

View file

@ -1,67 +1,88 @@
nav {
background:#000;
color:#DDD;
font-family:Oswald;
.navbar {
background: #000;
color: #DDD;
font-family: Oswald;
border: 0;
}
.navbar-nav > li > .dropdown-menu {
border:0;
border-radius:0;
.navbar .navbar-brand {
padding: 3px 25px;
}
.navbar-fixed-top {
border:0;
.navbar .navbar-brand img {
height: 44px;
}
nav .navbar-brand {
padding:3px 25px;
}
nav .navbar-brand img {
height:44px;
}
nav .navbar-toggle .icon-bar {
background-color:#FFF;
}
nav a {
color:#DDD;
.navbar .navbar-toggle .icon-bar {
background-color: #FFF;
}
.navbar-nav {
font-weight:bold;
font-size:14px;
text-transform:uppercase;
font-weight: bold;
font-size: 14px;
text-transform: uppercase;
margin: 0 -15px;
}
.nav>li>a:focus, .nav>li>a:hover {
background-color:#C8102E;
color:#FFF;
}
.nav .open>a, .nav .open>a:focus, .nav .open>a:hover {
background-color:#C8102E;
}
.dropdown-menu {
padding:0;
}
.dropdown-menu>li>a {
padding:8px 20px;
}
.dropdown-menu .divider {
margin:0;
}
@media (max-width: 767px) {
.navbar-nav .open .dropdown-menu {
background-color:#FFF;
}
@media (min-width: 768px) {
.navbar-nav {
margin:0 -15px;
margin: 0px;
}
.navbar-right {
margin-right: -15px;
}
}
.navbar-nav a {
transition: background-color, box-shadow, color;
transition-duration: 0.15s;
}
.navbar-nav > li > a {
color: #FFF;
}
.navbar-nav > li:hover > a,
.navbar-nav > li > a:focus,
.nav .open > a:hover,
.nav .open > a:focus {
background-color: #C8102E;
color: #FFF;
box-shadow: inset 0 5px 5px -5px #000;
}
.navbar-nav .dropdown .dropdown-menu {
padding: 0;
border: 0;
border-radius: 0;
background-color: #FFF;
}
.navbar-nav .dropdown .dropdown-menu > li > a {
padding: 8px 20px;
color: #000;
}
.navbar-nav .dropdown .dropdown-menu > li > a:hover,
.navbar-nav .dropdown .dropdown-meny > li > a:focus {
color: #c8102e;
background-color: transparent;
}
.navbar-nav .dropdown .dropdown-menu .divider {
margin: 0;
}
@media (min-width: 768px) {
.navbar-nav .dropdown .dropdown-menu {
display: block;
visibility: hidden;
opacity: 0;
transition: opacity 0.15s;
}
.nav .dropdown:hover .dropdown-menu {
visibility: visible;
opacity: 1;
}
}

View file

@ -1,14 +1,4 @@
$(document).ready(function() {
$(window).scroll(function() {
if ($(window).width() >= 768 && $(this).scrollTop() > 72.6) {
$('.col-content-left').css({'position':'fixed', 'top':'50px'});
$('.col-content-right').addClass('col-sm-offset-4 col-md-offset-3');
} else {
$('.col-content-left').css({'position':'relative', 'top':'0'});
$('.col-content-right').removeClass('col-sm-offset-4 col-md-offset-3');
}
});
if (typeof Cookies !== 'undefined') {
// Retrieving csrf token
csrftoken = Cookies.get('csrftoken');

View file

@ -86,7 +86,10 @@ class Scale(object):
def get_labels(self, label_fmt=None):
if label_fmt is None:
label_fmt = self.label_fmt
return [begin.strftime(label_fmt) for begin, end in self]
return [
begin.strftime(label_fmt.format(i=i, rev_i=len(self)-i))
for i, (begin, end) in enumerate(self)
]
def chunkify_qs(self, qs, field=None):
if field is None:

View file

@ -1,67 +1,61 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Liste des comptes{% endblock %}
{% block content-header-title %}Comptes{% endblock %}
{% block header-title %}Comptes{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ accounts|length|add:-1 }}</div>
<div class="line line-bigsub">compte{{ accounts|length|add:-1|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.create' %}">Créer un compte</a>
{% if perms.kfet.manage_perms %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.group' %}">Permissions</a>
{% endif %}
{% if perms.kfet.view_negs %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.negative' %}">Négatifs</a>
{% endif %}
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des comptes</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Trigramme</td>
<td>Nom</td>
<td>Balance</td>
<td>COF</td>
<td>Dpt</td>
<td>Promo</td>
</tr>
</thead>
<tbody>
{% for account in accounts %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.account.read' account.trigramme %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ account.trigramme }}</td>
<td>{{ account.name }}</td>
<td class="text-right">{{ account.balance }}€</td>
<td>{{ account.is_cof }}</td>
<td>{{ account.departement }}</td>
<td>{{ account.promo|default_if_none:'' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="content-left-top">
<div class="line line-big">{{ accounts|length|add:-1 }}</div>
<div class="line line-bigsub">compte{{ accounts|length|add:-1|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.create' %}">Créer un compte</a>
{% if perms.kfet.manage_perms %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.group' %}">Permissions</a>
{% endif %}
{% if perms.kfet.view_negs %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.negative' %}">Négatifs</a>
{% endif %}
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des comptes</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Trigramme</td>
<td>Nom</td>
<td>Balance</td>
<td>COF</td>
<td>Dpt</td>
<td>Promo</td>
</tr>
</thead>
<tbody>
{% for account in accounts %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.account.read' account.trigramme %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ account.trigramme }}</td>
<td>{{ account.name }}</td>
<td class="text-right">{{ account.balance }}€</td>
<td>{{ account.is_cof|yesno:"Oui,Non" }}</td>
<td>{{ account.departement }}</td>
<td>{{ account.promo|default_if_none:'' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,45 +1,39 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_1.html" %}
{% load staticfiles %}
{% block title %}Nouveau compte{% endblock %}
{% block header-title %}Création d'un compte{% endblock %}
{% block extra_head %}
<script src="{% static "autocomplete_light/autocomplete.js" %}" type="text/javascript"></script>
{% endblock %}
{% block content-header-title %}Création d'un compte{% endblock %}
{% block main-class %}content-form{% endblock %}
{% block content %}
{% block main-content %}
{% include 'kfet/base_messages.html' %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form action="{% url "kfet.account.create" %}" method="post" class="account_create">
{% csrf_token %}
<div>
{{ trigramme_form.trigramme.errors }}
{{ trigramme_form.trigramme }}
</div>
<div id="trigramme_valid"></div>
<p class="help-block">Les mots contenant des caractères non alphanumériques seront ignorés</p>
<input type="text" name="q" id="search_autocomplete" spellcheck="false" placeholder="Chercher un utilisateur par nom, prénom ou identifiant clipper" class="form-control">
<div style="position:relative;">
<div id="search_results"></div>
</div>
<div class="form-horizontal">
<div id="form-placeholder">
{% include 'kfet/account_create_form.html' %}
</div>
{% if not perms.kfet.add_account %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
</div>
</form>
</div>
<form action="" method="post" class="account_create">
{% csrf_token %}
<div>
{{ trigramme_form.trigramme.errors }}
{{ trigramme_form.trigramme }}
</div>
</div>
<div id="trigramme_valid"></div>
<p class="help-block">Les mots contenant des caractères non alphanumériques seront ignorés</p>
<input type="text" name="q" id="search_autocomplete" spellcheck="false" placeholder="Chercher un utilisateur par nom, prénom ou identifiant clipper" class="form-control">
<div style="position:relative;">
<div id="search_results"></div>
</div>
<div class="form-horizontal">
<div id="form-placeholder">
{% include 'kfet/account_create_form.html' %}
</div>
{% if not perms.kfet.add_account %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
// Affichage des résultats d'autocomplétion

View file

@ -2,44 +2,37 @@
{% load staticfiles %}
{% block title %}Nouveau compte{% endblock %}
{% block header-title %}Création d'un compte{% endblock %}
{% block extra_head %}
<script src="{% static "autocomplete_light/autocomplete.js" %}" type="text/javascript"></script>
{% endblock %}
{% block content-header-title %}Création d'un compte{% endblock %}
{% block main-class %}content-form{% endblock %}
{% block content %}
{% block main-content %}
{% include 'kfet/base_messages.html' %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form action="{% url "kfet.account.create_special" %}" method="post" class="account_create">
{% csrf_token %}
<div>
{{ trigramme_form.trigramme.errors }}
{{ trigramme_form.trigramme }}
{{ balance_form }}
</div>
<div id="trigramme_valid"></div>
<input type="text" name="q" id="search_autocomplete" spellcheck="false" placeholder="Chercher un utilisateur par nom, prénom ou identifiant clipper" class="form-control">
<div style="position:relative;">
<div id="search_results"></div>
</div>
<div class="form-horizontal">
<div id="form-placeholder">
{% include 'kfet/account_create_form.html' %}
</div>
{% if not perms.kfet.add_account %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
</div>
</form>
</div>
<form action="" method="post" class="account_create">
{% csrf_token %}
<div>
{{ trigramme_form.trigramme.errors }}
{{ trigramme_form.trigramme }}
{{ balance_form }}
</div>
</div>
<div id="trigramme_valid"></div>
<input type="text" name="q" id="search_autocomplete" spellcheck="false" placeholder="Chercher un utilisateur par nom, prénom ou identifiant clipper" class="form-control">
<div style="position:relative;">
<div id="search_results"></div>
</div>
<div class="form-horizontal">
<div id="form-placeholder">
{% include 'kfet/account_create_form.html' %}
</div>
{% if not perms.kfet.add_account %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
// Affichage des résultats d'autocomplétion

View file

@ -1,54 +1,51 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Groupes de comptes{% endblock %}
{% block content-header-title %}Groupes de comptes{% endblock %}
{% block header-title %}Groupes de comptes{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top text-center">
<div class="line"></div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.group.create' %}">Créer un groupe</a>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
{% for group in groups %}
<div class="content-right-block">
<div class="buttons-title">
<a class="btn btn-primary" href="{% url 'kfet.account.group.update' group.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</div>
<h2>{{ group.name }}</h2>
<div class="row">
<div class="col-sm-6">
<h3>Permissions</h3>
<ul>
{% for perm in group.permissions.all %}
<li>{{ perm.name }}</li>
{% endfor %}
</ul>
</div>
<div class="col-sm-6">
<h3>Comptes</h3>
<ul>
{% for user in group.user_set.all %}
<li>{{ user.profile.account_kfet }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.group.create' %}">Créer un groupe</a>
</div>
{% endblock %}
{% block main-content %}
{% for group in groups %}
<div class="content-right-block">
<div class="buttons-title">
<a class="btn btn-primary" href="{% url 'kfet.account.group.update' group.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</div>
<h2>{{ group.name }}</h2>
<div class="row">
<div class="col-sm-6">
<h3>Permissions</h3>
{% regroup group.permissions.all by content_type as grouped_perms %}
<ul class="list-unstyled">
{% for perms_group in grouped_perms %}
<li><b>{{ perms_group.grouper|title }}</b>
<ul class="list-unstyled">
{% for perm in perms_group.list %}
<li style="padding-left: 20px">{{ perm.name }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
</div>
<div class="col-sm-6">
<h3>Comptes</h3>
<ul class="list-unstyled">
{% for user in group.user_set.all %}
<li>{{ user.profile.account_kfet }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endfor %}
{% endblock %}

View file

@ -1,37 +1,46 @@
{% extends 'kfet/base.html' %}
{% extends 'kfet/base_col_1.html' %}
{% load staticfiles %}
{% load widget_tweaks %}
{% block extra_head %}
<link rel="stylesheet" text="text/css" href="{% static 'kfet/css/multiple-select.css' %}">
<script src="{% static 'kfet/js/multiple-select.js' %}"></script>
{% endblock %}
{% block content %}
{% block title %}Permissions - Édition{% endblock %}
{% block header-title %}Modification des permissions{% endblock %}
<form action="" method="post">
{% block main-class %}content-form{% endblock %}
{% block main-content %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<div>
{{ form.name.errors }}
{{ form.name.label_tag }}
<div class="input-group">
<span class="input-group-addon">K-Fêt</span>
{{ form.name }}
<div class="form-group">
<label for="{{ form.name.id_for_label }}" class="col-sm-2 control-label">{{ form.name.label }}</label>
<div class="col-sm-10">
<div class="input-group">
<span class="input-group-addon">K-Fêt</span>
{{ form.name|add_class:"form-control" }}
</div>
{% if form.name.errors %}<span class="help-block">{{ form.name.errors }}</span>{% endif %}
{% if form.name.help_text %}<span class="help-block">{{ form.name.help_text }}</span>{% endif %}
</div>
</div>
<div>
{{ form.permissions.errors }}
{{ form.permissions.label_tag }}
{{ form.permissions }}
</div>
<input type="submit" value="Enregistrer">
{% include "kfet/form_field_snippet.html" with field=form.permissions %}
{% if not perms.kfet.manage_perms %}
{% include "kfet/form_authentication_snippet.html" %}
{% endif %}
{% include "kfet/form_submit_snippet.html" with value="Enregistrer" %}
</form>
<script type="text/javascript">
$(document).ready(function() {
$("select").multipleSelect({
width: 500,
filter: true,
});
let $name_input = $("#id_name");
let raw_name = $name_input.val();
let prefix = "K-Fêt ";
if (raw_name.startsWith(prefix))
$name_input.val(raw_name.substring(prefix.length));
});
</script>

View file

@ -1,79 +1,73 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Comptes en négatifs{% endblock %}
{% block content-header-title %}Comptes - Négatifs{% endblock %}
{% block title %}Comptes - Négatifs{% endblock %}
{% block header-title %}Comptes en négatifs{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ negatives|length }}</div>
<div class="line line-bigsub">compte{{ negatives|length|pluralize }} en négatif</div>
<div class="block">
<div class="line"><b>Total:</b> {{ negatives_sum|floatformat:2 }}€</div>
</div>
<div class="block">
<div class="line"><b>Découvert autorisé par défaut</b></div>
<div class="line">Montant: {{ kfet_config.overdraft_amount }}€</div>
<div class="line">Pendant: {{ kfet_config.overdraft_duration }}</div>
</div>
</div>
{% if perms.kfet.change_settings %}
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.settings' %}">Modifier les valeurs par défaut</a>
</div>
{% endif %}
</div>
<div class="content-left-top">
<div class="line line-big">{{ negatives|length }}</div>
<div class="line line-bigsub">compte{{ negatives|length|pluralize }} en négatif</div>
<div class="block">
<div class="line"><b>Total:</b> {{ negatives_sum|floatformat:2 }}€</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des comptes en négatifs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Tri</td>
<td>Nom</td>
<td>Balance</td>
<td>Réelle</td>
<td>Début</td>
<td>Découvert autorisé</td>
<td>Jusqu'au</td>
<td>Balance offset</td>
</tr>
</thead>
<tbody>
{% for neg in negatives %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.account.update' neg.account.trigramme %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ neg.account.trigramme }}</td>
<td>{{ neg.account.name }}</td>
<td class="text-right">{{ neg.account.balance|floatformat:2 }}€</td>
<td class="text-right">
{% if neg.balance_offset %}
{{ neg.account.real_balance|floatformat:2 }}€
{% endif %}
</td>
<td>{{ neg.start|date:'d/m/Y H:i:s'}}</td>
<td>{{ neg.authz_overdraft_amount|default_if_none:'' }}</td>
<td>{{ neg.authz_overdrafy_until|default_if_none:'' }}</td>
<td>{{ neg.balance_offset|default_if_none:'' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="block">
<div class="line"><b>Découvert autorisé par défaut</b></div>
<div class="line">Montant: {{ kfet_config.overdraft_amount }}€</div>
<div class="line">Pendant: {{ kfet_config.overdraft_duration }}</div>
</div>
</div>
{% if perms.kfet.change_settings %}
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.settings' %}">Modifier les valeurs par défaut</a>
</div>
{% endif %}
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des comptes en négatifs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Tri</td>
<td>Nom</td>
<td>Balance</td>
<td>Réelle</td>
<td>Début</td>
<td>Découvert autorisé</td>
<td>Jusqu'au</td>
<td>Balance offset</td>
</tr>
</thead>
<tbody>
{% for neg in negatives %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.account.update' neg.account.trigramme %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ neg.account.trigramme }}</td>
<td>{{ neg.account.name }}</td>
<td class="text-right">{{ neg.account.balance|floatformat:2 }}€</td>
<td class="text-right">
{% if neg.balance_offset %}
{{ neg.account.real_balance|floatformat:2 }}€
{% endif %}
</td>
<td>{{ neg.start|date:'d/m/Y H:i:s'}}</td>
<td>{{ neg.authz_overdraft_amount|default_if_none:'' }}</td>
<td>{{ neg.authz_overdrafy_until|default_if_none:'' }}</td>
<td>{{ neg.balance_offset|default_if_none:'' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,4 +1,4 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_2.html" %}
{% load staticfiles %}
{% load kfet_tags %}
{% load l10n %}
@ -23,20 +23,12 @@ $(document).ready(function() {
"{% url 'kfet.account.stat.balance.list' trigramme=account.trigramme %}",
$("#stat_balance")
);
});
});
</script>
{% endif %}
{% endblock %}
{% block title %}
{% if account.user == request.user %}
Mon compte
{% else %}
Informations du compte {{ account.trigramme }}
{% endif %}
{% endblock %}
{% block content-header-title %}
{% if account.user == request.user %}
Mon compte
{% else %}
@ -44,53 +36,47 @@ $(document).ready(function() {
{% endif %}
{% endblock %}
{% block content %}
{% block header-title %}
{% if account.user == request.user %}
Mon compte
{% else %}
Informations du compte {{ account.trigramme }}
{% endif %}
{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
{% include 'kfet/left_account.html' %}
{% block fixed-content %}
{% include "kfet/left_account.html" %}
{% endblock %}
{% block main-content %}
<div class="tab-content">
{% if account.user == request.user %}
<div class="content-right-block tab-pane fade in active" id="tab_stats">
<h2>Statistiques</h2>
<div>
<h3>Ma balance</h3>
<div id="stat_balance"></div>
<h3>Ma consommation</h3>
<div id="stat_last"></div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include "kfet/base_messages.html" %}
<div class="content-right">
<div class="content-right-block">
<div class="col-sm-12 nopadding">
{% if account.user == request.user %}
<div class='tab-content'>
<div class="tab-pane fade in active" id="tab_stats">
<h2>Statistiques</h2>
<div class="panel-md-margin">
<h3>Ma balance</h3>
<div id="stat_balance"></div>
<h3>Ma consommation</h3>
<div id="stat_last"></div>
</div>
</div>
<div class="tab-pane fade" id="tab_history">
{% endif %}
{% if addcosts %}
<h2>Gagné des majorations</h2>
<div>
<ul>
{% for addcost in addcosts %}
<li>{{ addcost.date|date:'l j F' }}: +{{ addcost.sum_addcosts }}€</li>
{% endfor %}
</ul>
</div>
{% endif %}
<h2>Historique</h2>
<div id="history"></div>
{% if account.user == request.user %}
</div>
</div><!-- tab-content -->
{% endif %}
</div><!-- col-sm-12 -->
</div><!-- content-right-block -->
</div><!-- content-right-->
</div>
</div>
</div><!-- content-right-block -->
{% endif %}
<div class="content-right-block tab-pane fade {% if account.user != request.user %}in active{% endif %}" id="tab_history">
{% if addcosts %}
<h2>Gagné des majorations</h2>
<div>
<ul>
{% for addcost in addcosts %}
<li>{{ addcost.date|date:'l j F' }}: +{{ addcost.sum_addcosts }}€</li>
{% endfor %}
</ul>
</div>
{% endif %}
<h2>Historique</h2>
<div id="history"></div>
</div><!-- content-right-block -->
</div><!-- tab-content -->
<script type="text/javascript">
$(document).ready(function() {

View file

@ -1,6 +1,4 @@
{% extends "kfet/base.html" %}
{% load widget_tweaks %}
{% load staticfiles %}
{% extends "kfet/base_col_1.html" %}
{% block extra_head %}
{{ negative_form.media }}
@ -14,7 +12,7 @@
{% endif %}
{% endblock %}
{% block content-header-title %}
{% block header-title %}
{% if account.user == request.user %}
Modification de mes informations
{% else %}
@ -22,29 +20,23 @@
{% endif %}
{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include "kfet/base_messages.html" %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form action="{% url 'kfet.account.update' account.trigramme %}" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=user_form %}
{% include 'kfet/form_snippet.html' with form=cof_form %}
{% include 'kfet/form_snippet.html' with form=account_form %}
{% include 'kfet/form_snippet.html' with form=group_form %}
{% include 'kfet/form_snippet.html' with form=pwd_form %}
{% include 'kfet/form_snippet.html' with form=negative_form %}
{% if perms.kfet.is_team %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Mettre à jour" %}
</form>
</div>
</div>
</div>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=user_form %}
{% include 'kfet/form_snippet.html' with form=cof_form %}
{% include 'kfet/form_snippet.html' with form=account_form %}
{% include 'kfet/form_snippet.html' with form=group_form %}
{% include 'kfet/form_snippet.html' with form=pwd_form %}
{% include 'kfet/form_snippet.html' with form=negative_form %}
{% if perms.kfet.is_team %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Mettre à jour" %}
</form>
<script type="text/javascript">

View file

@ -1,71 +1,64 @@
{% extends 'kfet/base.html' %}
{% extends 'kfet/base_col_2.html' %}
{% block title %}Articles{% endblock %}
{% block content-header-title %}Articles{% endblock %}
{% block header-title %}Articles{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ articles|length }}</div>
<div class="line line-bigsub">article{{ articles|length|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.article.create' %}">
Nouvel article
</a>
<a class="btn btn-primary btn-lg" href="{% url 'kfet.category' %}">
Catégories
</a>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des articles</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Prix</td>
<td class="text-right">Stock</td>
<td class="text-right">En vente</td>
<td class="text-right">Affiché</td>
<td class="text-right">Dernier inventaire</td>
</tr>
</thead>
<tbody>
{% for article in articles %}
{% ifchanged article.category %}
<tr class="section">
<td colspan="7">{{ article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.article.read' article.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ article.name }}</td>
<td class="text-right">{{ article.price }}€</td>
<td class="text-right">{{ article.stock }}</td>
<td class="text-right">{{ article.is_sold | yesno:"En vente,Non vendu"}}</td>
<td class="text-right">{{ article.hidden | yesno:"Caché,Affiché" }}</td>
<td class="text-right">{{ article.inventory.0.at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="content-left-top">
<div class="line line-big">{{ articles|length }}</div>
<div class="line line-bigsub">article{{ articles|length|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.article.create' %}">
Nouvel article
</a>
<a class="btn btn-primary btn-lg" href="{% url 'kfet.category' %}">
Catégories
</a>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des articles</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Prix</td>
<td class="text-right">Stock</td>
<td class="text-right">En vente</td>
<td class="text-right">Affiché</td>
<td class="text-right">Dernier inventaire</td>
</tr>
</thead>
<tbody>
{% for article in articles %}
{% ifchanged article.category %}
<tr class="section">
<td colspan="7">{{ article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.article.read' article.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ article.name }}</td>
<td class="text-right">{{ article.price }}€</td>
<td class="text-right">{{ article.stock }}</td>
<td class="text-right">{{ article.is_sold | yesno:"En vente,Non vendu"}}</td>
<td class="text-right">{{ article.hidden | yesno:"Caché,Affiché" }}</td>
<td class="text-right">{{ article.inventory.0.at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,27 +1,12 @@
{% extends 'kfet/base.html' %}
{% load widget_tweaks %}
{% load staticfiles %}
{% extends 'kfet/base_col_1.html' %}
{% block title %}Nouvel article{% endblock %}
{% block content-header-title %}Création d'un article{% endblock %}
{% block header-title %}Création d'un article{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include "kfet/base_messages.html" %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form submit="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.add_article %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Enregistrer" %}
</form>
</div>
</div>
</div>
{% include "kfet/base_form.html" with authz=perms.kfet.add_article submit_text="Enregistrer" %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends 'kfet/base.html' %}
{% extends 'kfet/base_col_2.html' %}
{% load staticfiles %}
{% block extra_head %}
@ -6,97 +6,89 @@
<script type="text/javascript" src="{% static 'kfet/js/statistic.js' %}"></script>
{% endblock %}
{% block title %}Informations sur l'article {{ article }}{% endblock %}
{% block content-header-title %}Article - {{ article.name }}{% endblock %}
{% block title %}Article - {{ article.name }}{% endblock %}
{% block header-title %}Informations sur l'article {{ article.name }}{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ article.name }}</div>
<div class="line line-bigsub">{{ article.category }}</div>
<div class="block">
<div class="line">Prix (hors réduc.): {{ article.price }}€</div>
<div class="line">Stock: {{ article.stock }}</div>
<div class="line">En vente: {{ article.is_sold | yesno:"Oui,Non" }}</div>
<div class="line">Affiché: {{ article.hidden | yesno:"Non,Oui" }}</div>
</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.article.update' article.pk %}">
Modifier
</a>
</div>
</div>
<div class="content-left-top">
<div class="line line-big">{{ article.name }}</div>
<div class="line line-bigsub">{{ article.category }}</div>
<div class="block">
<div class="line">Prix (hors réduc.): {{ article.price }}€</div>
<div class="line">Stock: {{ article.stock }}</div>
<div class="line">En vente: {{ article.is_sold | yesno:"Oui,Non" }}</div>
<div class="line">Affiché: {{ article.hidden | yesno:"Non,Oui" }}</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Historique</h2>
<div class="row">
<div class="col-sm-6">
<h3>Inventaires</h3>
<table class="table">
<thead>
<tr>
<td>Date</td>
<td>Stock</td>
<td>Erreur</td>
</tr>
</thead>
<tbody>
{% for inventoryart in inventoryarts %}
<tr>
<td>{{ inventoryart.inventory.at }}</td>
<td>{{ inventoryart.stock_new }}</td>
<td>{{ inventoryart.stock_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="col-sm-6">
<h3>Prix fournisseurs</h3>
<table class="table">
<thead>
<tr>
<td>Date</td>
<td>Fournisseur</td>
<td>HT</td>
<td>TVA</td>
<td>Droits</td>
</tr>
</thead>
<tbody>
{% for supplierart in supplierarts %}
<tr>
<td>{{ supplierart.at }}</td>
<td>{{ supplierart.supplier.name }}</td>
<td>{{ supplierart.price_HT }}</td>
<td>{{ supplierart.TVA }}</td>
<td>{{ supplierart.rights }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div><!-- /row-->
</div>
<div class="content-right-block content-right-block-transparent">
<h2>Statistiques</h2>
<div class="row">
<div class="col-sm-12 nopadding">
<div class="panel-md-margin">
<h3>Ventes de {{ article.name }}</h3>
<div id="stat_last"></div>
</div>
</div>
</div><!-- /row -->
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.article.update' article.pk %}">
Modifier
</a>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Historique</h2>
<div class="row" style="padding-bottom: 15px">
<div class="col-md-6">
<h3>Inventaires</h3>
<table class="table">
<thead>
<tr>
<td>Date</td>
<td>Stock</td>
<td>Erreur</td>
</tr>
</thead>
<tbody>
{% for inventoryart in inventoryarts %}
<tr>
<td>{{ inventoryart.inventory.at }}</td>
<td>{{ inventoryart.stock_new }}</td>
<td>{{ inventoryart.stock_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="col-md-6">
<h3>Prix fournisseurs</h3>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<td>Date</td>
<td>Fournisseur</td>
<td>HT</td>
<td>TVA</td>
<td>Droits</td>
</tr>
</thead>
<tbody>
{% for supplierart in supplierarts %}
<tr>
<td>{{ supplierart.at }}</td>
<td>{{ supplierart.supplier.name }}</td>
<td>{{ supplierart.price_HT }}</td>
<td>{{ supplierart.TVA }}</td>
<td>{{ supplierart.rights }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div><!-- /row-->
</div>
<div class="content-right-block">
<h2>Statistiques</h2>
<div>
<h3>Ventes</h3>
<div id="stat_last"></div>
</div>
</div>

View file

@ -1,27 +1,12 @@
{% extends 'kfet/base.html' %}
{% load widget_tweaks %}
{% load staticfiles %}
{% extends "kfet/base_col_1.html" %}
{% block title %}Édition de l'article {{ article.name }}{% endblock %}
{% block content-header-title %}Article {{ article.name }} - Édition{% endblock %}
{% block title %}{{ article.name }} - Édition{% endblock %}
{% block header-title %}Édition de l'article {{ article.name }}{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include "kfet/base_messages.html" %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.change_article %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Mettre à jour" %}
</form>
</div>
</div>
</div>
{% include "kfet/base_form.html" with authz=perms.kfet.change_article submit_text="Mettre à jour"%}
{% endblock %}

View file

@ -30,12 +30,12 @@
<body>
{% include "kfet/base_nav.html" %}
<div class="container-fluid">
{% block content-header %}
<div class="row row-page-header">
<div class="col-lg-12">
<h1 class="page-header">{% block content-header-title %}{% endblock %}</h1>
</div>
{% block header %}
<div class="row row-page-header">
<div class="col-lg-12">
<h1 class="page-header">{% block header-title %}{% endblock %}</h1>
</div>
</div>
{% endblock %}
{% block content %}{% endblock %}
{% include "kfet/base_footer.html" %}

View file

@ -0,0 +1,14 @@
{% extends "kfet/base.html" %}
{% block content %}
<div class="row">
<div class="nopadding {% block main-size %}col-md-8 col-md-offset-2{% endblock %}">
{% include "kfet/base_messages.html" %}
<div class="content-center {% block main-class %}{% endblock %}">
{% block main-content %}{% endblock %}
</div>
</div>
<div>
{% endblock %}

View file

@ -0,0 +1,19 @@
{% extends "kfet/base.html" %}
{% block content %}
<div class="row">
<div class="col-content-left {% block fixed-size %}col-sm-4 col-md-3{% endblock %}">
<div class="content-left">
{% block fixed-content %}{% endblock %}
</div>
</div>
<div class="col-content-right {% block main-size %}col-sm-8 col-md-9{% endblock %}">
{% include "kfet/base_messages.html" %}
<div class="content-right">
{% block main-content %}{% endblock %}
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,10 @@
{% load kfet_tags %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% include "kfet/form_snippet.html" %}
{% if not authz %}
{% include "kfet/form_authentication_snippet.html" %}
{% endif %}
{% include "kfet/form_submit_snippet.html" with value=submit_text %}
</form>

View file

@ -1,8 +1,8 @@
{% if messages %}
<div class="row messages">
{% for message in messages %}
<div class="col-sm-12 item">
<div class="alert alert-{{ message.level_tag }} alert-dismissible fade in{% if message.tags %} {{ message.tags }}{% endif %}">
<div class="col-sm-12 nopadding">
<div class="alert alert-{{ message.level_tag }} alert-dismissible fade in {{ message.tags }}">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span></button>
{% if 'safe' in message.tags %}
{{ message|safe }}

View file

@ -9,46 +9,50 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">
<a class="navbar-brand" href="{% url 'kfet.home' %}">
<img src="{% static 'kfet/img/logo3.png' %}">
</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="{% url 'kfet.home' %}">Home</a></li>
<li class="hidden-xs">
<a href="{% url 'kfet.home' %}">
<span class="glyphicon glyphicon-home"></span>
</a>
</li>
{% if user.profile.account_kfet %}
<li>
<a href="{% url 'kfet.account.read' user.profile.account_kfet.trigramme %}">Mon compte</a>
</li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if user.username == 'kfet_genericteam' %}
<li class="navbar-text">Équipe standard</li>
{% endif %}
{% if user.profile.account_kfet %}
<li>
<a href="{% url 'kfet.account.read' user.profile.account_kfet.trigramme %}">Mes infos</a>
</li>
<li class="navbar-text">Équipe standard</li>
{% endif %}
{% if perms.kfet.is_team %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Admin <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{% url 'kfet.kpsul' %}">K-Psul</a></li>
<li><a href="{% url 'kfet.history' %}">Historique</a></li>
<li><a href="{% url 'kfet.transfers' %}">Transferts</a></li>
<li class="divider"></li>
<li><a href="{% url 'kfet.account' %}">Comptes</a></li>
<li><a href="{% url 'kfet.checkout' %}">Caisses</a></li>
<li class="divider"></li>
<li><a href="{% url 'kfet.article' %}">Articles</a></li>
<li><a href="{% url 'kfet.inventory' %}">Inventaires</a></li>
<li><a href="{% url 'kfet.order' %}">Commandes</a></li>
{% if user.username != 'kfet_genericteam' %}
<li class="divider"></li>
<li><a href="{% url 'kfet.login.genericteam' %}" target="_blank" id="genericteam">Connexion standard</a></li>
{% endif %}
{% if perms.kfet.change_settings %}
<li><a href="{% url 'kfet.settings' %}">Paramètres</a></li>
{% endif %}
</ul>
</li>
<li><a href="{% url 'kfet.kpsul' %}">K-Psul</a></li>
<li><a href="{% url 'kfet.history' %}">Historique</a></li>
<li><a href="{% url 'kfet.transfers' %}">Transferts</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Admin <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="divider"></li>
<li><a href="{% url 'kfet.account' %}">Comptes</a></li>
<li><a href="{% url 'kfet.checkout' %}">Caisses</a></li>
<li class="divider"></li>
<li><a href="{% url 'kfet.article' %}">Articles</a></li>
<li><a href="{% url 'kfet.inventory' %}">Inventaires</a></li>
<li><a href="{% url 'kfet.order' %}">Commandes</a></li>
{% if user.username != 'kfet_genericteam' %}
<li class="divider"></li>
<li><a href="{% url 'kfet.login.genericteam' %}" target="_blank" id="genericteam">Connexion standard</a></li>
{% endif %}
{% if perms.kfet.change_settings %}
<li><a href="{% url 'kfet.settings' %}">Paramètres</a></li>
{% endif %}
</ul>
</li>
{% endif %}
{% if user.is_authenticated %}
<li><a href="{% url 'gestioncof.views.logout' %}?next=/k-fet/" title="Déconnexion"><span class="glyphicon glyphicon-log-out"></span></a></li>

View file

@ -1,52 +1,46 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Categories d'articles{% endblock %}
{% block content-header-title %}Categories d'articles{% endblock %}
{% block header-title %}Categories d'articles{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ categories|length }}</div>
<div class="line line-bigsub">catégorie{{ categories|length|pluralize }}</div>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des catégories</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Nombre d'articles</td>
<td class="text-right">Peut être majorée</td>
</tr>
</thead>
<tbody>
{% for category in categories %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.category.update' category.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ category.name }}</td>
<td class="text-right">{{ category.articles.all|length }}</td>
<td class="text-right">{{ category.has_addcost | yesno:"Oui,Non"}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="content-left-top">
<div class="line line-big">{{ categories|length }}</div>
<div class="line line-bigsub">catégorie{{ categories|length|pluralize }}</div>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des catégories</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Nombre d'articles</td>
<td class="text-right">Peut être majorée</td>
</tr>
</thead>
<tbody>
{% for category in categories %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.category.update' category.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ category.name }}</td>
<td class="text-right">{{ category.articles.all|length }}</td>
<td class="text-right">{{ category.has_addcost | yesno:"Oui,Non"}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,25 +1,12 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% block title %}Édition de la catégorie {{ category.name }}{% endblock %}
{% block content-header-title %}Catégorie {{ category.name }} - Édition{% endblock %}
{% block title %}{{ articlecategory.name }} - Édition{% endblock %}
{% block header-title %}Édition de la catégorie {{ articlecategory.name }}{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include "kfet/base_messages.html" %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.edit_articlecategory %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Enregistrer"%}
<form>
</div>
</div>
</div>
{% include "kfet/base_form.html" with authz=perms.kfet.edit_articlecategory submit_text="Enregistrer"%}
{% endblock %}

View file

@ -1,59 +1,53 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Liste des caisses{% endblock %}
{% block content-header-title %}Caisses{% endblock %}
{% block title %}Caisses{% endblock %}
{% block header-title %}Caisses{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top text-center">
<div class="line line-big">{{ checkouts|length }}</div>
<div class="line line-bigsub">caisse{{ checkouts|length|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.checkout.create' %}">Créer une caisse</a>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des caisses</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Balance</td>
<td class="text-right">Déb. valid.</td>
<td class="text-right">Fin valid.</td>
<td class="text-right">Protégée</td>
</tr>
</thead>
<tbody>
{% for checkout in checkouts %}
<tr>
<td>
<a href="{% url 'kfet.checkout.read' checkout.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ checkout.name }}</td>
<td class="text-right">{{ checkout.balance}}€</td>
<td class="text-right">{{ checkout.valid_from }}</td>
<td class="text-right">{{ checkout.valid_to }}</td>
<td class="text-right">{{ checkout.is_protected }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="content-left-top text-center">
<div class="line line-big">{{ checkouts|length }}</div>
<div class="line line-bigsub">caisse{{ checkouts|length|pluralize }}</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.checkout.create' %}">Créer une caisse</a>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des caisses</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Nom</td>
<td class="text-right">Balance</td>
<td class="text-right">Déb. valid.</td>
<td class="text-right">Fin valid.</td>
<td class="text-right">Protégée</td>
</tr>
</thead>
<tbody>
{% for checkout in checkouts %}
<tr>
<td>
<a href="{% url 'kfet.checkout.read' checkout.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ checkout.name }}</td>
<td class="text-right">{{ checkout.balance}}€</td>
<td class="text-right">{{ checkout.valid_from }}</td>
<td class="text-right">{{ checkout.valid_to }}</td>
<td class="text-right">{{ checkout.is_protected }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,28 +1,13 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_1.html" %}
{% block extra_head %}{{ form.media }}{% endblock %}
{% block title %}Nouvelle caisse{% endblock %}
{% block content-header-title %}Création d'une caisse{% endblock %}
{% block header-title %}Création d'une caisse{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% block main-content %}
{% include 'kfet/base_messages.html' %}
<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors}}
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }}
<div style="position:relative">{{ field }}</div>
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
{% endfor %}
{% if not perms.kfet.add_checkout %}
<input type="password" name="KFETPASSWORD">
{% endif %}
<input type="submit" value="Enregistrer">
</form>
{% include "kfet/base_form.html" with authz=perms.kfet.add_checkout submit_text="Enregistrer" %}
<script type="text/javascript">

View file

@ -1,50 +1,41 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Informations sur la caisse {{ checkout.name }}{% endblock %}
{% block content-header-title %}Caisse - {{ checkout.name }}{% endblock %}
{% block title %}Caisse - {{ checkout.name }}{% endblock %}
{% block header-title %}Informations sur la caisse {{ checkout.name }}{% endblock %}
{% block content %}
{% block fixed-content %}
{% include 'kfet/left_checkout.html' %}
{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
{% include 'kfet/left_checkout.html' %}
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include "kfet/base_messages.html" %}
<div class="content-right">
<div class="content-right-block">
<h2>Relevés</h2>
<div>
{% if not statements %}
Pas de relevé
{% else %}
<table class="table">
<thead>
<tr>
<td></td>
<td>Date/heure</td>
<td>Montant pris</td>
<td>Montant laissé</td>
<td>Erreur</td>
</thead>
<tbody>
{% for statement in statements %}
<tr>
<td><a href="{% url 'kfet.checkoutstatement.update' checkout.pk statement.pk %}"><span class="glyphicon glyphicon-cog"></span></a></td>
<td>{{ statement.at }}</td>
<td>{{ statement.amount_taken }}</td>
<td>{{ statement.balance_new }}</td>
<td>{{ statement.amount_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</div>
</div>
{% block main-content %}
<div class="content-right-block">
<h2>Relevés</h2>
<div class="table-responsive">
{% if not statements %}
Pas de relevé
{% else %}
<table class="table">
<thead>
<tr>
<td></td>
<td>Date/heure</td>
<td>Montant pris</td>
<td>Montant laissé</td>
<td>Erreur</td>
</thead>
<tbody>
{% for statement in statements %}
<tr>
<td><a href="{% url 'kfet.checkoutstatement.update' checkout.pk statement.pk %}"><span class="glyphicon glyphicon-cog"></span></a></td>
<td>{{ statement.at }}</td>
<td>{{ statement.amount_taken }}</td>
<td>{{ statement.balance_new }}</td>
<td>{{ statement.amount_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</div>

View file

@ -1,39 +1,18 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block extra_head %}{{ form.media }}{% endblock %}
{% block title %}Édition de la caisse {{ checkout.name }}{% endblock %}
{% block content-header-title %}Caisse {{ checkout.name }} - Édition{% endblock %}
{% block title %}Caisse {{ checkout.name }} - Édition{% endblock %}
{% block header-title %}Édition de la caisse {{ checkout.name }}{% endblock %}
{% block content %}
{% block fixed-content %}
{% include "kfet/left_checkout.html" %}
{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
{% include 'kfet/left_checkout.html' %}
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }}
<div style="position:relative">{{ field }}</div>
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
{% endfor %}
{% if not perms.kfet.add_checkout %}
<input type="password" name="KFETPASSWORD">
{% endif %}
<input type=submit value="Mettre à jour">
</form>
</div>
</div>
{% block main-content %}
<div class="content-right-block">
<div style="padding: 15px;">
{% include "kfet/base_form.html" with authz=perms.kfet.change_checkout submit_text="Mettre à jour" %}
</div>
</div>

View file

@ -1,139 +1,188 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_2.html" %}
{% load l10n %}
{% load widget_tweaks %}
{% block title %}Nouveau relevé{% endblock %}
{% block content-header-title %}Caisse {{ checkout.name }} - Nouveau relevé{% endblock %}
{% block title %}Nouveau relevé - {{ checkout.name }}{% endblock %}
{% block header-title %}Création d'un relevé pour la caisse {{ checkout.name }}{% endblock %}
{% block content %}
{% block fixed-content %}
{% include "kfet/left_checkout.html" %}
{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
{% include 'kfet/left_checkout.html' %}
{% block main-content %}
<form action="" method="post">
{% csrf_token %}
<div class="content-right-block">
<h2>Général</h2>
<div class="content-form statement-create-summary">
<table>
<tr>
<td>
<label for="{{ form.not_count.id_for_label }}" class="control-label">{{ form.not_count.label }}</label>
</td>
<td>{{ form.not_count }}</td>
</tr>
<tr>
<td>Ancienne balance</td>
<td>
<span id="balance_old">{{ checkout.balance|unlocalize }}</span>
</td>
</tr>
<tr>
<td>Nouvelle balance</td>
<td><span id="balance_new">0</span></td>
</tr>
<tr>
<td>Pris</td>
<td><span id="amount_taken">0</span></td>
</tr>
<tr>
<td>Erreur</td>
<td><span id="amount_error">0</span></td>
</tr>
</table>
{% if not perms.kfet.add_checkoutstatement %}
{% include "kfet/form_authentication_snippet.html" %}
{% endif %}
<br>
<div class="row text-center">
<input type="submit" value="Enregistrer" class="btn btn-lg btn-primary">
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include "kfet/base_messages.html" %}
<div class="content-right">
<form action="" method="post">
{% csrf_token %}
<div class="content-right-block">
<h2>Général</h2>
<div>
<label>
Ne pas compter la caisse
{{ form.not_count }}
</label><br>
Ancienne balance : <span id="balance_old">{{ checkout.balance|unlocalize }}</span><br>
Nouvelle balance : <span id="balance_new">0</span><br>
Pris : <span id="amount_taken">0</span><br>
Erreur : <span id="amount_error">0</span><br>
{% if not perms.kfet.add_checkoutstatement %}
<label for="password">Mot de passe:</label>
<input type="password" id="password" name="KFETPASSWORD">
{% endif %}
<input type="submit" value="Enregistrer">
</div>
</div>
<div class="content-right-block">
<h2>Pris</h2>
<div id="detail_taken">
<table class="table table-bordered">
<tr style="font-weight:bold;">
<td>5€</td>
<td>10€</td>
<td>20€</td>
<td>50€</td>
<td>100€</td>
<td>200€</td>
<td>500€</td>
<tr>
<tr>
<td><input id="id_taken_5" name="taken_5" data-value="5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_10" name="taken_10" data-value="10" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_20" name="taken_20" data-value="20" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_50" name="taken_50" data-value="50" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_100" name="taken_100" data-value="100" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_200" name="taken_200" data-value="200" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_500" name="taken_500" data-value="500" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</table>
<table class="table table-bordered">
<tr style="font-weight:bold;">
<td>2€</td>
<td>1€</td>
<td>0.50€</td>
<td>0.20€</td>
<td>0.10€</td>
<td>0.05€</td>
<td>0.02€</td>
<td>0.01€</td>
<tr>
<tr>
<td><input id="id_taken_2" name="taken_2" data-value="2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_1" name="taken_1" data-value="1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_05" name="taken_05" data-value="0.5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_02" name="taken_02" data-value="0.2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_01" name="taken_01" data-value="0.1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_005" name="taken_005" data-value="0.05" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_002" name="taken_002" data-value="0.02" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_001" name="taken_001" data-value="0.01" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</table>
<p style="font-weight:bold"> Chèque:</p> <input id="id_taken_cheque" name="taken_cheque" data-value="1" min="0" step="0.01" value="0" type="number" class="form-control" required>
</div>
</div>
<div class="content-right-block">
<h2>En caisse</h2>
<div id="detail_balance">
<table class="table table-bordered">
<tr style="font-weight:bold;">
<td>5€</td>
<td>10€</td>
<td>20€</td>
<td>50€</td>
<td>100€</td>
<td>200€</td>
<td>500€</td>
<tr>
<tr>
<td><input id="id_balance_5" name="balance_5" data-value="5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_10" name="balance_10" data-value="10" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_20" name="balance_20" data-value="20" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_50" name="balance_50" data-value="50" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_100" name="balance_100" data-value="100" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_200" name="balance_200" data-value="200" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_500" name="balance_500" data-value="500" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</table>
<table class="table table-bordered">
<tr style="font-weight:bold;">
<td>2€</td>
<td>1€</td>
<td>0.50€</td>
<td>0.20€</td>
<td>0.10€</td>
<td>0.05€</td>
<td>0.02€</td>
<td>0.01€</td>
<tr>
<tr>
<td><input id="id_balance_2" name="balance_2" data-value="2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_1" name="balance_1" data-value="1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_05" name="balance_05" data-value="0.5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_02" name="balance_02" data-value="0.2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_01" name="balance_01" data-value="0.1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_005" name="balance_005" data-value="0.05" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_002" name="balance_002" data-value="0.02" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_001" name="balance_001" data-value="0.01" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</table>
</div>
</div>
</form>
<div class="content-right-block">
<h2>Pris</h2>
<div id="detail_taken">
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>5€</td>
<td>10€</td>
<td>20€</td>
<td>50€</td>
<td>100€</td>
<td>200€</td>
<td>500€</td>
</tr>
</thead>
<tbody>
<tr>
<td><input id="id_taken_5" name="taken_5" data-value="5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_10" name="taken_10" data-value="10" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_20" name="taken_20" data-value="20" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_50" name="taken_50" data-value="50" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_100" name="taken_100" data-value="100" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_200" name="taken_200" data-value="200" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_500" name="taken_500" data-value="500" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</tbody>
</table>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>2€</td>
<td>1€</td>
<td>0.50€</td>
<td>0.20€</td>
<td>0.10€</td>
<td>0.05€</td>
<td>0.02€</td>
<td>0.01€</td>
</tr>
</thead>
<tbody>
<tr>
<td><input id="id_taken_2" name="taken_2" data-value="2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_1" name="taken_1" data-value="1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_05" name="taken_05" data-value="0.5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_02" name="taken_02" data-value="0.2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_01" name="taken_01" data-value="0.1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_005" name="taken_005" data-value="0.05" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_002" name="taken_002" data-value="0.02" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_taken_001" name="taken_001" data-value="0.01" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</tbody>
</table>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr><td>Chèques</td></tr>
</thead>
<tbody>
<tr>
<td>
<input id="id_taken_cheque" name="taken_cheque" data-value="1" min="0" step="0.01" value="0" type="number" class="form-control" required>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="content-right-block">
<h2>En caisse</h2>
<div id="detail_balance">
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>5€</td>
<td>10€</td>
<td>20€</td>
<td>50€</td>
<td>100€</td>
<td>200€</td>
<td>500€</td>
</tr>
</thead>
<tbody>
<tr>
<td><input id="id_balance_5" name="balance_5" data-value="5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_10" name="balance_10" data-value="10" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_20" name="balance_20" data-value="20" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_50" name="balance_50" data-value="50" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_100" name="balance_100" data-value="100" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_200" name="balance_200" data-value="200" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_500" name="balance_500" data-value="500" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</tbody>
</table>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>2€</td>
<td>1€</td>
<td>0.50€</td>
<td>0.20€</td>
<td>0.10€</td>
<td>0.05€</td>
<td>0.02€</td>
<td>0.01€</td>
</tr>
</thead>
<tbody>
<tr>
<td><input id="id_balance_2" name="balance_2" data-value="2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_1" name="balance_1" data-value="1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_05" name="balance_05" data-value="0.5" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_02" name="balance_02" data-value="0.2" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_01" name="balance_01" data-value="0.1" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_005" name="balance_005" data-value="0.05" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_002" name="balance_002" data-value="0.02" min="0" value="0" type="number" class="form-control" required></td>
<td><input id="id_balance_001" name="balance_001" data-value="0.01" min="0" value="0" type="number" class="form-control" required></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {

View file

@ -1,33 +1,15 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% block title %}Modification d'un relevé{% endblock %}
{% block content-header-title %}
Caisse {{ checkout.name }} - Modification relevé {{ checkoutstatement.at }}
{% block header-title %}
Caisse {{ checkout.name }}<br>
Modification du relevé {{ checkoutstatement.at }}
{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
{% include 'kfet/left_checkout.html' %}
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right form-only">
<div class="content-form">
<form submit="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.change_checkoutstatement %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Enregistrer" %}
</form>
</div>
</div>
</div>
</div>
{% block main-content %}
{% include "kfet/base_form.html" with authz=perms.kfet.change_checkoutstatement submit_text="Enregistrer"%}
{% endblock %}

View file

@ -3,7 +3,19 @@
<div class="form-group">
<label for="{{ field.id_for_label }}" class="col-sm-2 control-label">{{ field.label }}</label>
<div class="col-sm-10">
{{ field|add_class:'form-control' }}
{% if field|widget_type == "checkboxselectmultiple" %}
<ul class="list-unstyled checkbox-select-multiple">
{% for choice in form.permissions %}
<li class="col-sm-6 col-lg-4">
<label for="{{ choice.id_for_label }}">
{{ choice.tag }} {{ choice.choice_label }}
</label>
</li>
{% endfor %}
</ul>
{% else %}
{{ field|add_class:'form-control' }}
{% endif %}
{% if field.errors %}
<span class="help-block">{{field.errors}}</span>
{% endif %}

View file

@ -14,7 +14,6 @@
<script type="text/javascript" src="{% static 'kfet/js/moment-timezone-with-data-2010-2020.js' %}"></script>
<script type="text/javascript" src="{% static 'kfet/js/bootstrap-datetimepicker.min.js' %}"></script>
<script type="text/javascript" src="{% static 'kfet/js/multiple-select.js' %}"></script>
<script type="text/javascript" src="{% static 'kfet/js/kfet.js' %}"></script>
<script type="text/javascript" src="{% static 'kfet/js/history.js' %}"></script>
{% endblock %}
@ -30,7 +29,6 @@
<div class="line line-big" id="nb_opes"></div>
<div class="line line-bigsub">opérations</div>
<div class="block">
<h2>Filtres</h2>
<div class="line" style="position:relative"><b>De</b> <input type="text" id="from_date" class="form-control"></div>
<div class="line" style="position:relative"><b>à</b> <input type="text" id="to_date" class="form-control"></div>
<div class="line"><b>Caisses</b> {{ filter_form.checkouts }}</div>
@ -130,6 +128,9 @@ $(document).ready(function() {
$("select").multipleSelect({
width: '100%',
filter: true,
allSelected: " ",
selectAllText: "Tout-te-s",
countSelected: "# sur %"
});
$("input").on('dp.change change', function() {

View file

@ -1,65 +1,57 @@
{% extends "kfet/base.html" %}
{% extends "kfet/base_col_1.html" %}
{% load staticfiles %}
{% load kfet_tags %}
{% block title %}Accueil{% endblock %}
{% block content-header-title %}Accueil{% endblock %}
{% block header %}{% endblock %}
{% block extra_head %}
<link rel="stylesheet" type="text/css" href="{% static 'kfet/css/home.css' %}">
{% endblock %}
{% block content %}
{% block main-size %}col-md-10 col-md-offset-1{% endblock %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Carte</h2>
{% block main-content %}
<div class="content-right-block">
<h2>Carte</h2>
<div class="column-row">
<div class="column-sm-1 column-md-2 column-lg-3">
<div class="unbreakable carte-inverted">
{% if pressions %}
<h3>Pressions du moment</h3>
<ul class="carte">
{% for article in pressions %}
<li class="carte-line">
<div class="filler"></div>
<span class="carte-label">{{ article.name }}</span>
<span class="carte-ukf">{{ article.price | ukf:False}} UKF</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div><!-- endblock unbreakable -->
{% for article in articles %}
{% ifchanged article.category %}
{% if not forloop.first %}
</ul>
</div><!-- endblock unbreakable -->
{% endif %}
<div class="unbreakable">
<h3>{{ article.category.name }}</h3>
<ul class="carte">
{% endifchanged %}
<li class="carte-line">
<div class="filler"></div>
<span class="carte-label">{{ article.name }}</span>
<span class="carte-ukf">{{ article.price | ukf:False}} UKF</span>
</li>
{% if forloop.last %}
</ul>
</div><!-- endblock unbreakable -->
{% endif %}
{% endfor %}
</div>
</div>
<div class="column-sm-1 column-md-2 column-lg-3">
<div class="unbreakable carte-inverted">
{% if pressions %}
<h3>Pressions du moment</h3>
<ul class="carte">
{% for article in pressions %}
<li class="carte-line">
<div class="filler"></div>
<span class="carte-label">{{ article.name }}</span>
<span class="carte-ukf">{{ article.price | ukf:False}} UKF</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div><!-- endblock unbreakable -->
{% for article in articles %}
{% ifchanged article.category %}
{% if not forloop.first %}
</ul>
</div><!-- endblock unbreakable -->
{% endif %}
<div class="unbreakable">
<h3>{{ article.category.name }}</h3>
<ul class="carte">
{% endifchanged %}
<li class="carte-line">
<div class="filler"></div>
<span class="carte-label">{{ article.name }}</span>
<span class="carte-ukf">{{ article.price | ukf:False}} UKF</span>
</li>
{% if forloop.last %}
</ul>
</div><!-- endblock unbreakable -->
{% endif %}
{% endfor %}
</div>
</div>
</div>
</div>

View file

@ -1,63 +1,55 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Inventaires{% endblock %}
{% block content-header-title %}Inventaires{% endblock %}
{% block header-title %}Inventaires{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
</div>
<div class="buttons">
<a href="{% url 'kfet.inventory.create' %}" class="btn btn-primary btn-lg">
Nouveau
</a>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Liste des inventaires</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead class="thead-default">
<tr>
<td></td>
<td>Date</td>
<td>Par</td>
<td>Nb articles</td>
<td>Commande</td>
</tr>
</thead>
<tbody>
{% for inventory in inventories %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.inventory.read' inventory.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ inventory.at }}</td>
<td>{{ inventory.by.trigramme }}</td>
<td>{{ inventory.nb_articles }}</td>
<td>
{% if inventory.order %}
<a href="{% url 'kfet.order.read' inventory.order.pk %}">
#{{ inventory.order.pk }}
</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="buttons">
<a href="{% url 'kfet.inventory.create' %}" class="btn btn-primary btn-lg">
Nouveau
</a>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Liste des inventaires</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td>Date</td>
<td>Par</td>
<td>Nb articles</td>
<td>Commande</td>
</tr>
</thead>
<tbody>
{% for inventory in inventories %}
<tr>
<td class="text-center">
<a href="{% url 'kfet.inventory.read' inventory.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ inventory.at }}</td>
<td>{{ inventory.by.trigramme }}</td>
<td>{{ inventory.nb_articles }}</td>
<td>
{% if inventory.order %}
<a href="{% url 'kfet.order.read' inventory.order.pk %}">
#{{ inventory.order.pk }}
</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,4 +1,4 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% load staticfiles %}
{% load widget_tweaks %}
@ -8,75 +8,98 @@
{% endblock %}
{% block title %}Nouvel inventaire{% endblock %}
{% block content-header-title %}Nouvel inventaire{% endblock %}
{% block header-title %}Création d'un inventaire{% endblock %}
{% block content %}
{% block main-size %}col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2{% endblock %}
{% include 'kfet/base_messages.html' %}
<div class="content-center">
<div>
<form id='inventoryform' action="" method="post">
<table class="table text-center">
<thead>
<tr>
<td>Article</td>
<td>Quantité par caisse</td>
<td>Stock Théorique</td>
<td>Caisses en réserve</td>
<td>Caisses en arrière</td>
<td>Vrac</td>
<td>Stock total</td>
<td>Compte terminé</td>
</tr>
</thead>
<tbody>
{% for form in formset %}
{% ifchanged form.category %}
<tr class='section'>
<td>{{ form.category_name }}</td>
<td colspan="7"></td>
</tr>
{% endifchanged %}
<tr>
{{ form.article }}
<td class='name'>{{ form.name }}</td>
<td class='box_capacity'>{{ form.box_capacity }}</td>
<td><span class='current_stock'>{{ form.stock_old }}</span><span class='stock_diff'></span></td>
<td class='box_cellar'>
<div class='col-md-2'></div>
<div class='col-md-8'>
<input type='number' class='form-control' step='1'>
</div>
</td>
<td class='box_bar'>
<div class='col-md-offset-2 col-md-8'><input type='number' class='form-control' step='1'></div>
</td>
<td class='misc'>
<div class='col-md-offset-2 col-md-8'><input type='number' class='form-control' step='1'></div>
</td>
<td class='stock_new'>
<div class='col-md-offset-2 col-md-8'>{{ form.stock_new | attr:"readonly"| add_class:"form-control" }}</div>
<div class='col-md-2 inventory_update'><button type='button' class='btn-sm btn-primary'>MàJ</button></div>
</td>
<td class='finished'><input type='checkbox' class='form_control'></td>
</tr>
{% endfor %}
</tbody>
</table>
{{ formset.management_form }}
{% if not perms.kfet.add_inventory %}
<div class='auth-form form-horizontal'>
{% include "kfet/form_authentication_snippet.html" %}
</div>
{% endif %}
<input type="submit" value="Enregistrer" class="btn btn-primary btn-lg btn-block">
{% csrf_token %}
</form>
{% block main-content %}
<form id='inventoryform' action="" method="post">
<div class="table-responsive">
<table class="table table-condensed text-center">
<thead>
<tr>
<td>Article</td>
<td>Quantité par caisse</td>
<td>Stock théorique</td>
<td>Caisses en réserve</td>
<td>Caisses en arrière</td>
<td>Vrac</td>
<td>Stock total</td>
<td>Compte terminé</td>
</tr>
</thead>
<tbody>
{% for form in formset %}
{% ifchanged form.category %}
<tr class='section'>
<td>{{ form.category_name }}</td>
<td colspan="7"></td>
</tr>
{% endifchanged %}
<tr>
{{ form.article }}
<td class='name'>{{ form.name }}</td>
<td class='box_capacity'>{{ form.box_capacity }}</td>
<td>
<span class='current_stock'>{{ form.stock_old }}</span><span class='stock_diff'></span>
</td>
<td class='box_cellar nopadding'>
<input type='number' class='form-control' step='1'>
</td>
<td class='box_bar nopadding'>
<input type='number' class='form-control' step='1'>
</td>
<td class='misc nopadding'>
<input type='number' class='form-control' step='1'>
</td>
<td class='stock_new nopadding'>
{{ form.stock_new | attr:"readonly"| add_class:"form-control" }}
</td>
<td class='finished'>
<div class="inventory_update">
<button type='button' class='btn-sm btn-primary'>MàJ</button>
</div>
<div class="inventory_done">
<input type='checkbox' class='form_control'>
</div>
</td>
</tr>
{% endfor %}
<tr class="section">
<td>Totaux</td>
<td colspan="2"></td>
<td class="total_box_cellar"></td>
<td class="total_box_bar"></td>
<td colspan="3"></td>
</tr>
</tbody>
</table>
</div>
</div>
{{ formset.management_form }}
{% if not perms.kfet.add_inventory %}
<div class='auth-form form-horizontal'>
{% include "kfet/form_authentication_snippet.html" %}
</div>
{% endif %}
<input type="submit" value="Enregistrer" class="btn btn-primary btn-lg btn-block">
{% csrf_token %}
</form>
<script type="text/javascript">
function init_total(type) {
update_total(type);
$('.'+type+' input').on('input', () => update_total(type));
}
function update_total(type) {
var total = 0;
$('.'+type+' input').each(function() {
total += +$(this).val();
});
$('.total_'+type).text(total);
}
$(document).ready(function() {
'use strict';
@ -106,6 +129,7 @@ $(document).ready(function() {
function update_stock($line, update_count) {
$line.removeClass('inventory_modified');
$line.find('.inventory_update').hide();
$line.find('.inventory_done').show();
var old_stock = +$line.find('.current_stock').text()
var stock_diff = +$line.find('.stock_diff').text();
@ -117,9 +141,9 @@ $(document).ready(function() {
$line.find('.misc input').val(old_misc + stock_diff)
.trigger('input');
}
var id = $line.find('input[type="hidden"]').val();
conflicts.delete(parseInt(id));
conflicts.delete(parseInt(id));
}
$('.finished input').change(function() {
@ -132,6 +156,12 @@ $(document).ready(function() {
update_stock($line, true);
});
/**
* Total row
*/
init_total('box_cellar');
init_total('box_bar');
/**
* Websocket
@ -147,6 +177,7 @@ $(document).ready(function() {
//Realigning input and displaying update button
$line.find('.inventory_update').show();
$line.find('.inventory_done').hide();
//Displaying stock changes
var stock = $line.find('.current_stock').text();
@ -159,7 +190,7 @@ $(document).ready(function() {
});
$('input[type="submit"]').on("click", function(e) {
e.preventDefault();
e.preventDefault();
var content;

View file

@ -1,61 +1,55 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Inventaire #{{ inventory.pk }}{% endblock %}
{% block content-header-title %}Inventaire #{{ inventory.pk }}{% endblock %}
{% block header-title %}Inventaire #{{ inventory.pk }}{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line"><b>Date:</b> {{ inventory.at }}</div>
<div class="line"><b>Par:</b> {{ inventory.by.trigramme }}</div>
{% if inventory.order %}
<div class="line">
<b>Commande relative:</b>&nbsp;
<a href="{% url 'kfet.order.read' inventory.order.pk %}">
#{{ inventory.order.pk }}
</a>
</div>
{% endif %}
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Détails</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Article</td>
<td>Stock avant</td>
<td>Stock après</td>
<td>Erreur</td>
</tr>
</thead>
<tbody>
{% for inventoryart in inventoryarts %}
{% ifchanged inventoryart.article.category %}
<tr class="section">
<td colspan="4">{{ inventoryart.article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td>{{ inventoryart.article.name }}</td>
<td>{{ inventoryart.stock_old }}</td>
<td>{{ inventoryart.stock_new }}</td>
<td>{{ inventoryart.stock_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="content-left-top">
<div class="line"><b>Date:</b> {{ inventory.at }}</div>
<div class="line"><b>Par:</b> {{ inventory.by.trigramme }}</div>
{% if inventory.order %}
<div class="line">
<b>Commande relative:</b>&nbsp;
<a href="{% url 'kfet.order.read' inventory.order.pk %}">
#{{ inventory.order.pk }}
</a>
</div>
{% endif %}
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Détails</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Article</td>
<td>Stock avant</td>
<td>Stock après</td>
<td>Erreur</td>
</tr>
</thead>
<tbody>
{% for inventoryart in inventoryarts %}
{% ifchanged inventoryart.article.category %}
<tr class="section">
<td colspan="4">{{ inventoryart.article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td>{{ inventoryart.article.name }}</td>
<td>{{ inventoryart.stock_old }}</td>
<td>{{ inventoryart.stock_new }}</td>
<td>{{ inventoryart.stock_error }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -17,7 +17,7 @@
{% block title %}K-Psul{% endblock %}
{% block content-header %}{% endblock %}
{% block header %}{% endblock %}
{% block help %}

View file

@ -38,8 +38,8 @@
<div class="buttons">
{% if account.user == request.user %}
<ul class='nav nav-pills nav-justified'>
<li class="active"><a data-toggle="pill" href="#tab_stats">Statistiques</a></li>
<li><a data-toggle="pill" href="#tab_history">Historique</a></li>
<li class="active"><a class="btn btn-primary" data-toggle="pill" href="#tab_stats">Statistiques</a></li>
<li><a class="btn btn-primary" data-toggle="pill" href="#tab_history">Historique</a></li>
</ul>
{% endif %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.account.update' account.trigramme %}">

View file

@ -1,7 +1,7 @@
{% extends 'kfet/base.html' %}
{% block content %}
Connexion utilisateur K-Fêt générique réussie
{% block extra_head %}
<script type="text/javascript">
close();
</script>
{% endblock %}

View file

@ -1,105 +1,97 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Commandes{% endblock %}
{% block content-header-title %}Commandes{% endblock %}
{% block header-title %}Commandes{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line line-big">{{ orders|length }}</div>
<div class="line line-bigsub">commande{{ orders|length|pluralize }}</div>
</div>
<div class="buttons">
</div>
</div>
<div class="content-left-top">
<div class="line line-big">{{ orders|length }}</div>
<div class="line line-bigsub">commande{{ orders|length|pluralize }}</div>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Fournisseurs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td></td>
<td>Nom</td>
<td>Mail</td>
<td>Tél.</td>
<td>Adresse</td>
<td>Commentaire</td>
<tbody>
{% for supplier in suppliers %}
<tr>
<td class="no-padding">
<a href="{% url 'kfet.order.new' supplier.pk %}" class="btn btn-primary">
Passer une commande
</a>
</td>
<td class="text-center">
<a href="{% url 'kfet.order.supplier.update' supplier.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ supplier.name }}</td>
<td>{{ supplier.email }}</td>
<td>{{ supplier.phone }}</td>
<td>{{ supplier.address }}</td>
<td>{{ supplier.comment }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Fournisseurs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td></td>
<td>Nom</td>
<td>Mail</td>
<td>Tél.</td>
<td>Adresse</td>
<td>Commentaire</td>
<tbody>
{% for supplier in suppliers %}
<tr>
<td class="no-padding">
<a href="{% url 'kfet.order.new' supplier.pk %}" class="btn btn-primary">
Passer une commande
</a>
</td>
<td class="text-center">
<a href="{% url 'kfet.order.supplier.update' supplier.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ supplier.name }}</td>
<td>{{ supplier.email }}</td>
<td>{{ supplier.phone }}</td>
<td>{{ supplier.address }}</td>
<td>{{ supplier.comment }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="content-right-block">
<h2>Liste des commandes</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td></td>
<td>Date</td>
<td>Fournisseur</td>
<td>Inventaire</td>
</tr>
</thead>
<tbody>
{% for order in orders %}
<tr>
<td class="no-padding">
{% if not order.inventory %}
<a href="{% url 'kfet.order.to_inventory' order.pk %}" class="btn btn-primary">
Générer inventaire
</a>
{% endif %}
</td>
<td>
<a href="{% url 'kfet.order.read' order.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ order.at }}</td>
<td>{{ order.supplier }}</td>
<td>
{% if order.inventory %}
<a href="{% url 'kfet.inventory.read' order.inventory.pk %}">
#{{ order.inventory.pk }}
</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="content-right-block">
<h2>Liste des commandes</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td></td>
<td></td>
<td>Date</td>
<td>Fournisseur</td>
<td>Inventaire</td>
</tr>
</thead>
<tbody>
{% for order in orders %}
<tr>
<td class="no-padding">
{% if not order.inventory %}
<a href="{% url 'kfet.order.to_inventory' order.pk %}" class="btn btn-primary">
Générer inventaire
</a>
{% endif %}
</td>
<td>
<a href="{% url 'kfet.order.read' order.pk %}">
<span class="glyphicon glyphicon-cog"></span>
</a>
</td>
<td>{{ order.at }}</td>
<td>{{ order.supplier }}</td>
<td>
{% if order.inventory %}
<a href="{% url 'kfet.inventory.read' order.inventory.pk %}">
#{{ order.inventory.pk }}
</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,71 +1,72 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% load widget_tweaks %}
{% block title %}Nouvelle commande{% endblock %}
{% block content-header-title %}Nouvelle commande {{ supplier.name }}{% endblock %}
{% block header-title %}Création d'une commande {{ supplier.name }}{% endblock %}
{% block content %}
{% block main-size %}col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2{% endblock %}
{% block main-content %}
<div class="content-center">
<div>
<form action="" method="post">
{% csrf_token %}
<table class="table text-center">
<div class="table-responsive">
<table class="table table-condensed text-center">
<thead>
<tr>
<td rowspan="2">Article</td>
<td colspan="5">Ventes
<td colspan="{{ scale|length }}">Ventes
<span class='glyphicon glyphicon-question-sign' title="Ventes des 5 dernières semaines" data-placement="bottom"></span>
</td>
<td rowspan="2">V. moy.
<td rowspan="2">V. moy.<br>
<span class='glyphicon glyphicon-question-sign' title="Moyenne des ventes" data-placement="bottom"></span>
</td>
<td rowspan="2">E.T.
<td rowspan="2">E.T.<br>
<span class='glyphicon glyphicon-question-sign' title="Écart-type des ventes" data-placement="bottom"></span>
</td>
<td rowspan="2">Prév.
<td rowspan="2">Prév.<br>
<span class='glyphicon glyphicon-question-sign' title="Prévision de ventes" data-placement="bottom"></span>
</td>
<td rowspan="2">Stock</td>
<td rowspan="2">Rec.
<td rowspan="2">Box<br>
<span class='glyphicon glyphicon-question-sign' title="Capacité d'une boite" data-placement="bottom"></span>
</td>
<td rowspan="2">Rec.<br>
<span class='glyphicon glyphicon-question-sign' title="Quantité conseillée" data-placement="bottom"></span>
</td>
<td rowspan="2">Commande</td>
</tr>
<tr>
<td>S1</td>
<td>S2</td>
<td>S3</td>
<td>S4</td>
<td>S5</td>
{% for label in scale.get_labels %}
<td>{{ label }}</td>
{% endfor %}
</tr>
</thead>
<tbody>
{% for form in formset %}
{% ifchanged form.category %}
<tr class='section'>
<td> {{ form.category_name }}</td>
<td colspan="11"></td>
<tr class='section text-left'>
<td colspan="{{ scale|length|add:'8' }}">{{ form.category_name }}</td>
</tr>
{% endifchanged %}
<tr>
{{ form.article }}
<td>{{ form.name }}</td>
<td>{{ form.v_s1 }}</td>
<td>{{ form.v_s2 }}</td>
<td>{{ form.v_s3 }}</td>
<td>{{ form.v_s4 }}</td>
<td>{{ form.v_s5 }}</td>
{% for v_chunk in form.v_all %}
<td>{{ v_chunk }}</td>
{% endfor %}
<td>{{ form.v_moy }}</td>
<td>{{ form.v_et }}</td>
<td>{{ form.v_prev }}</td>
<td>{{ form.stock }}</td>
<td>{{ form.box_capacity|default:"" }}</td>
<td>{{ form.c_rec }}</td>
<td>{{ form.quantity_ordered | add_class:"form-control" }}</td>
<td class="nopadding">{{ form.quantity_ordered | add_class:"form-control" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{{ formset.management_form }}
{% if not perms.kfet.add_inventory %}
<div class='auth-form form-horizontal'>
@ -74,8 +75,6 @@
{% endif %}
<input type="submit" value="Enregistrer" class="btn btn-primary btn-lg btn-block">
</form>
</div>
</div>
<script type='text/javascript'>
$(document).ready(function () {

View file

@ -1,66 +1,67 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Commande #{{ order.pk }}{% endblock %}
{% block content-header-title %}Commande #{{ order.pk }}{% endblock %}
{% block header-title %}Commande #{{ order.pk }}{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="content-left-top">
<div class="line"><b>Créée le:</b> {{ order.at }}</div>
<div class="line"><b>Fournisseur:</b> {{ order.supplier.name }}</div>
</div>
</div>
<div class="content-left-top">
<div class="line"><b>Créée le:</b> {{ order.at }}</div>
<div class="line"><b>Fournisseur:</b> {{ order.supplier.name }}</div>
</div>
<div class="buttons">
{% if not order.inventory %}
<a class="btn btn-primary btn-lg" href="{% url 'kfet.order.to_inventory' order.pk %}">
Générer inventaire
</a>
{% endif %}
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Détails</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Article</td>
<td>Commandé</td>
<td>Commandé (#box)</td>
<td>Reçu</td>
</tr>
</thead>
<tbody>
{% for orderart in orderarts %}
{% ifchanged orderart.article.category %}
<tr class="section">
<td colspan="4">{{ orderart.article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td>{{ orderart.article.name }}</td>
<td>{{ orderart.quantity_ordered }}</td>
<td>
{% if orderart.article.box_capacity %}
{# c'est une division ! #}
{% widthratio orderart.quantity_ordered orderart.article.box_capacity 1 %}
{% endif %}
</td>
<td>
{{ orderart.quantity_received|default_if_none:'' }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Détails</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Article</td>
<td>Commandé</td>
<td>Commandé (#box)</td>
<td>Reçu</td>
</tr>
</thead>
<tbody>
{% for orderart in orderarts %}
{% ifchanged orderart.article.category %}
<tr class="section">
<td colspan="4">{{ orderart.article.category.name }}</td>
</tr>
{% endifchanged %}
<tr>
<td>{{ orderart.article.name }}</td>
<td>{{ orderart.quantity_ordered }}</td>
<td>
{% if orderart.article.box_capacity %}
{# c'est une division ! #}
{% widthratio orderart.quantity_ordered orderart.article.box_capacity 1 %}
{% endif %}
</td>
<td>
{{ orderart.quantity_received|default_if_none:'' }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="content-right-block">
<h2>Mail</h2>
<div>
<textarea class="form-control" style="height:500px;">{{ mail }}</textarea>
</div>
</div>
</div>
</div>
<div class="content-right-block">
<h2>Mail</h2>
<div>
<textarea class="form-control" style="height:500px;">{{ mail }}</textarea>
</div>
</div>

View file

@ -1,18 +1,17 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% load widget_tweaks %}
{% block title %}{% endblock %}
{% block content-header-title %}{% endblock %}
{% block title %}Nouvel inventaire{% endblock %}
{% block header-title %}Création d'inventaire depuis la commande #{{ order.pk }}{% endblock %}
{% block content %}
{% block main-size %}col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2{% endblock %}
{% include 'kfet/base_messages.html' %}
{% block main-content %}
<div class="content-center">
<div>
<form action="" method="post">
{% csrf_token %}
<table class='table text-center'>
<div class="table-responsive">
<table class='table table-condensed text-center'>
<thead>
<tr>
<td style="width:25%">Article</td>
@ -25,23 +24,24 @@
</thead>
<tbody>
{% for form in formset %}
{% ifchanged form.category %}
<tr class='section'>
<td>{{ form.category_name }}</td>
<td colspan="5"></td>
</tr>
{% endifchanged %}
<tr>
{{ form.article }}
<td>{{ form.name }}</td>
<td>{{ form.price_HT | add_class:"form-control" }}</td>
<td>{{ form.TVA | add_class:"form-control" }}</td>
<td>{{ form.rights | add_class:"form-control" }}</td>
<td>{{ form.quantity_ordered }}</td>
<td>{{ form.quantity_received | add_class:"form-control" }}</td>
{% ifchanged form.category %}
<tr class='section'>
<td>{{ form.category_name }}</td>
<td colspan="5"></td>
</tr>
{% endifchanged %}
<tr>
<td>{{ form.name }}</td>
<td class="nopadding">{{ form.price_HT | add_class:"form-control" }}</td>
<td class="nopadding">{{ form.TVA | add_class:"form-control" }}</td>
<td class="nopadding">{{ form.rights | add_class:"form-control" }}</td>
<td>{{ form.quantity_ordered }}</td>
<td class="nopadding">{{ form.quantity_received | add_class:"form-control" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{{ formset.management_form }}
{% if not perms.kfet.add_inventory %}
<div class='auth-form form-horizontal'>
@ -50,7 +50,5 @@
{% endif %}
<input type="submit" value="Enregistrer" class="btn btn-primary btn-lg btn-block">
</form>
</div>
</div>
{% endblock %}

View file

@ -1,45 +1,39 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_2.html" %}
{% block title %}Paramètres{% endblock %}
{% block content-header-title %}Paramètres{% endblock %}
{% block header-title %}Paramètres{% endblock %}
{% block content %}
{% block fixed-content %}
<div class="row">
<div class="col-sm-4 col-md-3 col-content-left">
<div class="content-left">
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.settings.update' %}">
Modifier
</a>
</div>
</div>
</div>
<div class="col-sm-8 col-md-9 col-content-right">
{% include 'kfet/base_messages.html' %}
<div class="content-right">
<div class="content-right-block">
<h2>Valeurs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Nom</td>
<td>Valeur</td>
</tr>
</thead>
<tbody>
{% for key, value in kfet_config.list %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="buttons">
<a class="btn btn-primary btn-lg" href="{% url 'kfet.settings.update' %}">
Modifier
</a>
</div>
{% endblock %}
{% block main-content %}
<div class="content-right-block">
<h2>Valeurs</h2>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<td>Nom</td>
<td>Valeur</td>
</tr>
</thead>
<tbody>
{% for key, value in kfet_config.list %}
<tr>
<td>{{ key }}</td>
<td>{{ value|default_if_none:"" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View file

@ -1,25 +1,12 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% block title %}Modification des paramètres{% endblock %}
{% block content-header-title %}Modification des paramètres{% endblock %}
{% block header-title %}Modification des paramètres{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include "kfet/base_messages.html" %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form submit="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.change_settings %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Mettre à jour" %}
</form>
</div>
</div>
</div>
{% include "kfet/base_form.html" with authz=perms.kfet.change_settings submit_text="Mettre à jour"%}
{% endblock %}

View file

@ -1,27 +1,12 @@
{% extends 'kfet/base.html' %}
{% load widget_tweaks %}
{% load staticfiles %}
{% extends "kfet/base_col_1.html" %}
{% block title %}Fournisseur - Modification{% endblock %}
{% block content-header-title %}Fournisseur - Modification{% endblock %}
{% block title %}{{ supplier.name }} - Édition{% endblock %}
{% block header-title %}Édition du fournisseur {{ supplier.name }}{% endblock %}
{% block content %}
{% block main-class %}content-form{% endblock %}
{% include 'kfet/base_messages.html' %}
{% block main-content %}
<div class="row form-only">
<div class="col-sm-12 col-md-8 col-md-offset-2">
<div class="content-form">
<form submit="" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'kfet/form_snippet.html' with form=form %}
{% if not perms.kfet.change_supplier %}
{% include 'kfet/form_authentication_snippet.html' %}
{% endif %}
{% include 'kfet/form_submit_snippet.html' with value="Mettre à jour" %}
</form>
</div>
</div>
</div>
{% include 'kfet/base_form.html' with authz=perms.kfet.change_supplier submit_text="Mettre à jour" %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends 'kfet/base.html' %}
{% extends "kfet/base_col_1.html" %}
{% load staticfiles %}
{% block extra_head %}
@ -7,13 +7,14 @@
{% endblock %}
{% block title %}Nouveaux transferts{% endblock %}
{% block content-header-title %}Nouveaux transferts{% endblock %}
{% block header-title %}Création de transferts{% endblock %}
{% block content %}
{% block main-size %}col-sm-12{% endblock %}
{% csrf_token %}
{% block main-content %}
<form id="transfers_form">
<form id="transfers_form" style="background-color: transparent;">
{% csrf_token %}
<div class="transfer_general text-center">
<input type="text" name="comment" id="comment" placeholder="Commentaire"><!--
--><button type="submit" id="submit" class="btn btn-primary btn-lg">Enregistrer</button>

View file

@ -28,7 +28,6 @@ def highlight_user(user, q):
return highlight_text(text, q)
@register.filter(is_safe=True)
def highlight_clipper(clipper, q):
if clipper.fullname:
@ -38,8 +37,12 @@ def highlight_clipper(clipper, q):
return highlight_text(text, q)
@register.filter()
def ukf(balance, is_cof):
grant = is_cof and (1 + kfet_config.subvention_cof / 100) or 1
return floor(balance * 10 * grant)
@register.filter()
def widget_type(field):
return field.field.widget.__class__.__name__

View file

@ -95,6 +95,8 @@ def login_genericteam(request):
user = authenticate(username="kfet_genericteam", token=token.token)
login(request, user)
messages.success(request, "Connecté en utilisateur partagé")
if need_cas_logout:
# Vue de déconnexion de CAS
return logout_cas
@ -553,7 +555,7 @@ class AccountGroupCreate(SuccessMessageMixin, CreateView):
success_message = 'Nouveau groupe : %(name)s'
success_url = reverse_lazy('kfet.account.group')
class AccountGroupUpdate(UpdateView):
class AccountGroupUpdate(SuccessMessageMixin, UpdateView):
queryset = Group.objects.filter(name__icontains='K-Fêt')
template_name = 'kfet/account_group_form.html'
form_class = GroupForm
@ -1908,9 +1910,12 @@ def order_create(request, pk):
else:
formset = cls_formset(initial=initial)
scale.label_fmt = "S -{rev_i}"
return render(request, 'kfet/order_create.html', {
'supplier': supplier,
'formset': formset,
'scale': scale,
})
@ -2057,6 +2062,7 @@ def order_to_inventory(request, pk):
return render(request, 'kfet/order_to_inventory.html', {
'formset': formset,
'order': order,
})
class SupplierUpdate(SuccessMessageMixin, UpdateView):