Old configuration(/settings), based on Settings model, system is
deleted: SettingsForm, Settings.
New system use `django-djconfig` module.
- `kfet.config` module provides `kfet_config` to access configuration concerning
kfet app.
- Views, forms, models, etc now use this object to retrieve conf values.
- Views no longer add config values to context, instead templates use
`kfet_config` provided by a new context_processor.
- Enhance list and update views of settings.
- Fix: settings can directly be used without having to visit a specific
page...
Misc
- Delete some py2/3 imports
- Delete unused imports in kfet.models and kfet.views
- Some PEP8 compliance
- no longer dictToArray where it isn't necessary (because already an
array)
- fix chart height:
- previous charts were causing bugs
- height is fixed (even with window resizing)
- clean whitespaces
kfet.statistic
- delete no longer used defs
- new mixin - ScaleMixin
- get scale args from GET params
- chunkify querysets according to a scale
Article stats
- use SingleResumeStat for manifest
- use ScaleMixin for sales
- update urls
- update permission required: teamkfet
Account stats
- update permission required: teamkfet
- operations use ScaleMixin
- fix manifests urls
K-Fêt - Statistics
New base class - StatScale
- create scale, given chunk size (timedelta), start and end times
- get labels of
- get start and end datetimes of chunks
DayStatScale: Scale whose chunks interval is 1 day
WeekStatScale: same with 1 week
MonthStatScale: same with 1 month
AccountStatOperationList: manifest of operations stats of an account
- renamed from AccountStatLastAll
- updated according to SingleResumeStat
AccountStatOperation:
- renamed from AccountStatLast
- remove scale logic with use of StatScale objects
- used scale is given by `scale` and `scale_args` GET params
- add filter on operations types with `types` GET param
AccountStatLast(Day,Week,Month) are deleted ("merged" in
AccountStatOperation)
- Use `data` arg of `$.getJSON` for `format` param
- Delete `dictToArray` call on data returned by `SingleResumeStat` class view since this view now returns stats manifest as an array
New mixin: PkUrlMixin
- use with SingleObjectMixin standard django mixin (used by
DetailView...)
- `get_object` use field declared in `pk_url_kwarg` to get... the object
SingleResumeStat
- clean (part of) py code
AccountStatBalanceList
- renamed from `AccountStatBalanceAll`
- url modified
- add permission checking (only the connected user can get balance
stats manifest)
- clean py code
AccountStatBalance
- cleaner filtering management
- merge urls using this class
- clean py code
Sometime `uid` is not set in the objects fetched from the LDAP. This
case has to be handled. Also, the `.uid` and `.cn` attributes of these
objects in the python abstractions have a `.value` method which we
should use.
L'erreur 403 est renvoyée dans ce cas par le décorateur
`@teamkfet_required`, donc sans data associé, ce qui faisait buguer
`getErrorsHtml`. On rajoute donc le cas correspondant.
K-Psul
Articles
- Ajout d'une surbrillance pour les articles dont le stock est bas
(entre -5 et 5)
Panier
- Ajout d'indications de stocks sur chaque ligne (stock, warning visuel)
- Les ajouts/retraits d'articles déjà dans le panier mettent à jour la
ligne associée à celui-ci déjà existante
- Les flèches haut/bas permettent de modifier la quantité d'un article
Fix#111
See merge request !133
Changement de son propre mot de passe
Permet à un K-Fêteux (disposant de la permission `kfet.is_team`) de modifier son propre mot de passe sur la page `account/XXX/edit`.
Accessoirement, la fonction `account_update` est maintenant conforme à PEP8.
Fix#121
See merge request !148
Corrige l'affichage du prix
!124 était overkill ; `amountToUKF` peut prendre en argument des valeurs positives ou négatives, et il me semble que le `round` ne sert quà corriger les erreurs de `float`, ce qui conduit à #128. Du coup, on revert une partie.
fixes#128
See merge request !163
Popup de recherche de compte
Quand on clique sur l'icone de recherche (ou qu'on appuie sur Ctrl+F depuis la zone de saisie de trigramme) un popup apparaît pour rechercher les comptes par prénom ou par nom, en utilisant `autocomplete`.
Fix#109
See merge request !153
Create fixtures for kfet application:
- Add a bunch of non-cof profiles whose "last_name" is "Romain";
- Add k-fet articles using the real ones as a template;
- Add LIQ account;
- Add groups K-fet Chef and K-fet Girl;
- Add "caisse".
We also added some template for future tests (well, actually it's the script
used to generate the fixtures…).
Rappel de l'opération précédente sur K-Psul
Rajoute un champ d'informations sur la précédente opération validée (sur
la machine, pas sur le serveur) : valeur du panier et solde restant dans
le cas d'un utilisateur, et valeur du panier et rendus de monnaie dans
le cas d'une opération en liquide.
Fix#110
See merge request !146
- Le trigramme est obtenu à partir de ``account_data`` qui contient les
données traitées et validées relatives au compte en train de commander.
- L'opération précédente disparaît en cas de ``hard reset``
- Arrondis cohérents des UKF lors des divers affichages
- Remplace les arrondis par des floor pour éviter les négatifs de quelques
centimes
Fix#92
See merge request !124
Create fixtures for kfet application:
- Add a bunch of non-cof profiles whose "last_name" is "Romain";
- Add k-fet articles using the real ones as a template;
- Add LIQ account;
- Add groups K-fet Chef and K-fet Girl;
- Add "caisse".
We also added some template for future tests (well, actually it's the script
used to generate the fixtures…).
K-Psul - Fix: Lien -> création/modification de comptes
Le javascript de K-Psul encode maintenant les caractères spéciaux (dont `, / ? : @ & = + $ # "`) afin de pouvoir avoir accès aux comptes en question sans bugs.
See merge request !131
Corrige le négatif total
Le système de `balance_offset` (assez obscur par ailleurs) était compté dans la mauvais sens dans le calcul du négatif total.
Prend aussi en compte maintenant le statut spécial de `#13`, pour ne pas le ranger avec les négatifs habituels.
Fix#104
See merge request !125
Indicateur capslock
Détecteur de capslock en js.
Détecte les incohérences du capslock (majuscule entrée quand shift non enfoncé) puis suit aussi la pression de la touche capslock.
Nécessite un caractère affecté par capslock pour commencer à fonctionner (au départ, l'état de la touche capslock est inconnu)
Fix#96
See merge request !119
Fix un freeze dans l'écran de tranfert
Vide l'input caché lorsque le trigramme correspondant est effacé ; effacer une ligne de transfert n'empêche plus de valider le groupe.
Note : ne fonctionne pas sur la première ligne ; à cause de la façon dont django gère le nombre minimal de forms, celle ci doit toujours être remplie.
Fix#98
See merge request !118
L'ajout automatique de "K-Fêt" dans le nom d'un groupe empêche de créer
un groupe sans "K-Fêt" et donc de ne pas le voir dans la liste des
groupes.
Une indication est ajouté dans le formulaire pour créer/modifier un
groupe pour indiquer que "K-Fêt" va être ajouté au début du nom du
groupe.
- Fix oublie de @staticmethod pour Settings.CANCEl_DURATION()
- Mise en cache de Settings.CANCEL_DURATION
- Fix sur cancel_operations : mauvais modèles et at
- Ajout de migrations manquantes dans `gestioncof` et `bda`.
- `kfet/migrations/0001_initial.py` requiert désormais une migration qui existe.
- Paquet manquant dans l'approvisionnement Vagrant.
- Via "F8", possible de faire des charges sans modifier la caisse si
l'utilisateur a la permission `kfet.edit_balance_account`. Un
commentaire est alors nécessaire sur la commande.
- `lock` limite à 1 le nombre de requêtes AJAX critiques (perform/cancel
operations) simultanées afin d'éviter de compter plusieurs la même
commande. Ce qui arrivait dans le cas où le panier était fait et en
tapant 2 fois enter rapidement (la 2nde requête était lancée avant que
la réponse de la 1ère ne revienne)
- Pour un compte qui n'est pas du tout déjà présent dans la BDD,
username doit faire 9 caractères minimum (ty @mpepin) et le champ cof
et login clipper ne sont plus modifiables
- Possible de générer un inventaire à partir d'une commande passée.
Préremplissage avec les valeurs commandées.
- Possible d'indiquer les prix d'achat pour avoir l'historique des prix
d'un article chez un fournisseur. Et bientôt, une proposition
automatique de prix.
- L'erreur sur le stock d'un article lors d'un inventaire n'est pas mise
à jour dans le cas où l'inventaire est généré à partir d'une commande.
- Ajout d'un champ `at` au modèle `SupplierArticle` afin de conserver
l'historique des prix d'achat
- Fix sur la vue `order_create`
- Possible de passer une livraison à un fournisseur
- Proposition de quantités générées à partir des ventes sur les 5
dernières semaines
- Mail généré à partir d'une commande (pas d'envoi auto)
- box_capacity et box_type passe de SupplierArticle à Article
- Liste des fournisseurs sur la page commande (`/orders/`)
- Possibilité d'éditer les infos d'un fournisseur depuis cette page
- Ajout vérification permission pour enregistrer un inventaire
- Fix messages sur vue inventaire create
- Le stock n'est pas modifié s'il y a eu un inventaire depuis la date de
la commande annulée
- La méthode save d'ArticleInventory calcule elle-même l'erreur à partir
de stock_old et stock_new
- Reprise en utilisant `history.js`
- Fix csrf_token sur ajax POST K-Psul
- Fix annulation K-Psul
- Ajouts de select_related pour économiser de la requête BDD
- Reprise du JS d'historique dans `kfet/static/kfet/js/history.js`
- Adapatation de K-Psul pour l'utiliser
- Création page historique avec filtres (dates, caisses, comptes)
- Ajout de paramètres à cette vue
- `opegroups` contient maintenant une liste de groupes d'opérations et
non plus un dictionnaire contenant `opegroup.pk` => `opegroup`
- Un commentaire est demandé. Une permission est nécessaire (afin
d'enregistrer la personne ayant enregistré la commande)
- Fix annulation K-Psul. Appuyer sur Suppr appelait tout le temps
`cancelOperations` même si aucune opération à supprimer n'était
sélectionné.
- Une opération annulée alors qu'il y a eu un relevé depuis ne modifie plus
la balance de la caisse
- Fix maj balance caisse lors d'une annulation sur LIQ
- Reprise de l'affichage
- Affichage en direct des totaux et erreurs
- Possibilité de ne pas compter la caisse ajoutée (et identifiée par
`not_count` dans le modèle Statement si tel est le cas)
Nouveau relevé:
Il faut donner le détail du nombre de chaque
pièces/billets pris et laissé en caisse pour calculer les valeurs
`balance_new` et `amount_taken` d'un relevé (`CheckoutStatement`).
L'erreur est directement calculée par rapport à la balance actuelle de
la caisse et ces 2 valeurs. Une erreur positive correspond à un surplus
d'argent et inversement.
Modification d'un relevé:
Il est possible de modifier les infos d'un ancien relevé. L'erreur est
ensuite recalculée à partir de ces infos.
Important: Dans le cas où `balance_new` est modifiée et qu'il s'agit du
relevé le plus récent sur cette caisse. Alors la balance de la caisse
est mise à jour en prenant en compte cette correction (et en conservant
les modifications s'il y a eu des mouvements sur la caisse)
- Les infos d'annulations apparaissent sur les historiques (K-Psul et
standard)
- Les infos de validation apparaissent sur l'historique standard si la
personne est de l'équipe
- Si la ligne contenant les données d'une opération est trop longue,
celle-ci est scrollable (exemple : opé annulée sur K-Psul)
- Le fond change de couleur lorsqu'il y a une majoration. La majoration
est indiquée dans le cadre sur la caisse (et clignote !)
- Meilleure prise en charge des paramètres sur K-Psul
En appuyant sur F9, il est possible de définir une majoration destinée à
un compte en donnant le trigramme du compte destinataire et la valeur en
euro de la majoration par article
- S'effectue en allant sur la page `Paramètres` (perm
`kfet.change_settings` nécessaires même pour voir les paramètres)
- Correction websocket perform operations lorsqu'il n'y avait pas de
majorations en cours
- Lors de la création ou modification d'un article, il est possible de
sélectionner une catégorie existante ou d'en créer une nouvelle.
- Autorisations pour la création/modif d'article prises en compte
correctement. Si l'utilisateur identifié n'a pas la permission
add(ou change)_accoount, input password apparait et l'utilisateur est
identifié temporairement pour la validation de l'ajout/modif.
- Le backend d'auth K-Fêt est étendu pour aussi identifier une personne
dans le cas dans d'un formulaire en récupérant le password contenu
dans l'input de nom `KFETPASSWORD`
- Le middleware d'auth K-Fêt enregistre l'utilisateur connecté de
manière normale dans `request.real_user`
- Ajout d'un processeurs de contextes `kfet.context_processors.auth` qui
qui remplace `user` et `perms` par l'utilisateur connecté de manière
normale (`request.real_user`) et non celui connecté temporairement
- Modification de la vue de modif d'un compte pour s'adapter à l'auth
- Modification du template de modification d'un compte pour utiliser ce
moyen d'authentification
- Séparation du JS conservant le côté gauche d'une page à l'écran
- Séparation de l'encart gauche contenant les infos d'un comtpe dans un
autre template (`left_account`) pour l'utiliser dans `account_read` et `account_update`
- `base_nav` utilise user (qui est donc le vrai utilisateur connecté) au
lieu de `request.user` qui peut aussi bien être le vrai utilisateur
qu'un utilisateur temporaire
- Un utilisateur ayant la perm `kfet.is_team` peut se déconnecter et
connecter à la place un utilisateur `kfet_genericteam` ne disposant
que de la permission `kfet.is_team`
- Backend et vue associée à cette connexion créés
Si une (des) permission(s) sont nécessaires pour enregistrer/annuler des
opérations, une demande d'authentification apparaît où l'utilisateur
doit mettre le mot de passe d'un compte ayant la (les) permission(s)
requise(s).
Ce mot de passe est envoyé dans la requête AJAX via le header
`KFetPassword`.
Le middleware `KFetAuthenticationPassword` est appelée à chaque requête.
Il appelle lui même le backend `KFetBackend` qui est chargé de
retrouver le user dont le compte K-Fêt correspond au mot de passe défini
dans le header `KFETPASSWORD`.
Si le header n'est pas présent ou
qu'aucun utilisateur ne correspond à ce mot de passe, le middleware ne
fait... rien !
Dans le cas où un user est trouvé, il est "chargé" dans
`request.user` permettant ainsi de connecter l'utilisateur pour ce cycle
requête/réponse sans déconnecter l'utilisateur connecté de manière
normale.
- Ajout style sur l'historique
- Style: Le gris passe en background, plus de rouge en avant
- Opacité plus importante pour le fond pendant les charges et retraits
- Correction sur l'affichage de LIQ. La couleur de fond indiquait
trigramme inexistant à cause de modifs récentes
- des parseFloat ont été ajoutés un peu de partout pour les problèmes de type
de JS (il a des jours avec et des jours sans...)
- Ajout des montants en euros des charges et des retraits (en plus de
ceux en UKF) dans le panier
- Les commandes sur LIQ dans l'historique n'affichent plus la diff de
balance (puisque ça n'a pas vraiment de sens) mais les montants en
euros
- Ajout de l'annulation depuis l'historique
- La view kpsul_perform_operations envoie le statut cof pour le
websocket. Cela sert à l'affichage de l'historique
- Ajout des infos panier en fonction du trigramme (LIQ ou compte)
- Mise à jour des infos panier si le compte sélectionné change
- Correction sur calcul d'un montant en UKF
statut COF)
- Possible de sélectionner des items (charges/retraits/achats) dans le
panier et de les en enlever en pressant "Suppr"
- Possibilité de quitter la fenêtre de charge/retrait avec Echap
(Correction effectuée dans jconfirm.js pour éviter le bug ou "Enter"
ajoutait 2 fois la charge/retrait)
- Ajout/Modif de raccourcis: Shift+F2 reset le panier, F2 le compte
sélectionné, F3 ouvre la fenêtre de charge, Shift+F3 celle de retrait
- JS : Clean des fonctions de reset/Renommage de fonctions pour être
plus clair/Un peu de réorganisation
- Ajouter une charge ou un retrait l'ajoute au formset
- Envoi du panier en appuyant sur "Enter" si le focus est sur l'autocomplétion d'article puis soft reset
- Ajout affichage panier
- Ajout possibilité d'ajouter des articles, charges et retraits au
panier
- Ajout de l'affichage des articles correspondants à l'autocomplétion
en cours
- Affichage compte + responsive
- Ajout raccourcis : F1 soft reset, F2 charge, F3 retrait, F10 hard
reset
- Ajout suite focus automatiques:
trigramme: si valide -> article sélection: si trouvé -> article nb: si
enter et valide -> article sélection....
- Création style kpsul.css
- Affichage trigramme et données du compte. Couleurs en fonction de
l'état du compte (négatif, pas beaucoup, gelé, ok)
- Affichage de la sélection et des données de la caisse
- Ajout des boutons pour les charges et retraits (juste les boutons)
- Ajout du champ d'autocomplétion pour les articles (et ça autocomplète bien)
- Correction css général
- K-Psul JS: utilisation de $.extend pour les données récupérées en
ajax/websocket pour utiliser les valeurs par défaut (plus joli)
- Ajout de la liste des articles dans K-Psul
- Synchro des stocks de cette liste avec les autres instances de K-Psul
- Utilisation des attributs "data-..." pour stocker les id des articles,
groupes d'opérations et opérations dans K-Psul
- Correction de la vue kpsul_cancel_operations sur le calcul des
nouvelles balances de caisses
- Même vue : multiples requêtes dans la récupération des nouveaux
montants de groupes d'opérations remplacées par 1 seule requête pour
le websocket
- Même vue : ajout des données de nouvelles balances de caisses pour le
websocket
- Ajoute l'affichage de l'historique dans K-Psul
- Ajoute la synchronisation du montant des caisses et de l'historique
entre les interfaces K-Psul ouvertes par le package 'channels' et
l'utilisation de websockets
- Corrige l'obligation de l'article sur K-Psul (pas d'article pour les
charges et retraits)
- Corrige type renvoyé par perms_to_perform_operations
- Rangement de js.cookie.js dans static/kfet/js/
- Ajout de dépendances
- Template: Ajout d'un style "Sogé" (couleurs de la K-Fêt...)
- K-Psul: Optimisation requête checkout data avec dernier relevé
- K-Psul: Rework JS account et checkout data
- Utilisations d'update pour les balances et autres afin d'éviter les
lost update
- Validation tout en un puis enregistrement tout en un
- Ajout du lien vers K-Psul dans le nav
- Les charges et retraits sur des comptes modifient la balance de la
caisse sélectionnée.
- Comportement particulier pour le compte LIQ :
Pas de charge, pas de retrait. La balance de LIQ n'est jamais
modifiée (donc pas d'entrée dans AccountNegative). Les achats sur LIQ
modifient la balance de lacaisse.
* Settings
- New: OVERDRAFT_AMOUNT
Découvert autorisé par défaut
- New: OVERDRAFT_DURATION
Durée maximum d'un découvert par défaut
* K-Psul : Gestion des commandes aboutissant à un négatif
- Si une commande aboutit à un nouveau solde négatif, demande la
permission 'kfet.perform_negative_operations'
- Si le total de la commande est négatif, vérifie que ni la
contrainte de temps de découvert, ni celle de montant maximum
n'est outrepassée. Si ce n'est pas le cas, la commande ne peut
être enregistrée jusqu'à définir des "règles de négatif" pour le compte
concerné.
La durée maximum d'un découvert est celle dans AccountNegative si
elle y est définie pour le compte concerné, sinon celle par défaut
(Settings.OVERDRAFT_DURATION).
Il en est de même pour le découvert maximum autorisé. Attention:
le découvert doit être exprimé sous forme de valeur positive aussi
bien dans AccountNegative que pour Settings.OVERDRAFT_AMOUNT.
- Si les permissions nécessaires sont présentes, qu'il
n'y a pas de blocage et que le compte n'a pas encore d'entrée dans
AccountNegative, création d'une entrée avec start=now()
- Si la balance d'un compte est positive après une commande, supprime
l'entrée dans AccountNegative associée au compte si le "décalage
de zéro" (donné par balance_offset) est nul. Sinon cela veut dire
que le compte n'est pas réellement en positif.
* Modèles
- Fix: Account.save() fonctionne dans le cas où data est vide
- Modif: AccountNegative - Valeurs par défaut, NULL...
- Empêche l'enregistrement de commande sur un compte gelé sans la
permission 'kfet.override_frozen_protection'
- Modifie les noms de deux permissions pour éviter d'avoir des 'can_...'
partout
- Corrige le code HTTP de 400 (BAD REQUEST) à 403 (FORBIDDEN) dans le
cas où l'utilisateur authentifié n'a pas les permissions nécessaires
pour enregistrer une commande K-Psul
- Ajout des paramètres (modèle Settings) "ADDCOST_AMOUNT" et
"ADDCOST_FOR" indiquant respectivement le montant et le compte sur lequel
compter la majoration. Définir l'un de ces paramètres à NULL indique
qu'il n'y a pas de majoration en cours
- Prise en compte de ces 2 paramètres lors de la validation et
l'enregistrement d'opérations d'achat (Operation.PURCHASE) dans K-Psul
- Modification du champ "addcost_amount" de Operation. S'il n'y a pas de
majoration, celui-ci est NULL.
- Correction sur l'enregistrement de "valid_by" dans K-Psul. Celui-ci
était systématiquement rempli par l'utilisateur connecté ce qui
n'était pas le comportement souhaité. Il est maintenant rempli
seulement si une permission autre que kfet.is_team était nécessaire
pour valider la commande.
- Suppression d'une exception non utilisée dans le modèle Settings
- Ajout d'une méthode sur Account pour connaître les permissions
nécessaires pour enregistrer des opérations en fonction du futur solde
du compte
- Ajout d'une permission pour effectuer une charge sur un compte
- Ajoute que l'utilisateur connecté doit avoir toutes les permissions
nécessaires pour enregistrer un groupe d'opérations. Si ce n'est pas
le cas, aucune opération n'est enregistrée et les permissions manquantes
sont envoyées en réponse.
- Dans le cas d'une charge ou d'un retrait, "article" et "article_nb" de
Operation sont définis à NULL
- Ajout d'un modèle settings
- Ajout de la prise en compte du statut COF dans le montant d'une
opération achat avec la majoration définie dans le modèle settings
(name="SUBVENTION_COF")