Lier les lignes de factures fournisseur à un client/dossier/affaire
Besoin
Ce sont les lignes des commandes et in fine des factures fournisseurs qui doivent être liées aux clients, dossiers et affaires. comme on a pour les notes de frais. Pour calculer les coûts achats.
C'est similaire à ce qui est fait avec les notes de dépense.
une facture fournisseur sert potentiellement plusieurs affaires, dossier, clients.
On peut aussi imaginer retrouver les achats liés à une affaire mais un simple filtre dans les factures peut convenir a court terme
Comportements souhaités
- Sur la vue d'édition de ligne de facture fournisseur, on souhaite pouvoir renseigner le lien avec un·e client/dossier/affaire comme on peut déjà le faire pour les lignes de NDD.
Quand j'associe une Facture fournisseur à une commande fournisseur (à la création de facture fournisseur), je souhaite que les lignes qui sont importées depuis la commande recopient leurs éventuels liens avec des client/dossier/affaire depuis les lignes de la commande source, mais soient ensuite éditables indépendamment de la commande.- Une fois les documents (factures/commande) validés, ce lien reste éditable
Implémentation (grandes lignes)
Modèles (sqlalchemy, endi/models/supply)
- grouper les 3 champs nécessaires (customer_id, project_id, business_id) au sein d'un
BusinessLinkedMixin
(même logique que les autres QuelqueChoseMixin de modèles, avec des@declared_attr
). - l'utiliser pour les lignes de notes de dépense
Contrôleur (rest_api.py)
- intégrer les nouveaux champs à
__json__
- idem pour
__duplicable_attrs__
Lorsqu'on crée une facture qui reprend une ou plusieurs commandes, on clone déjà, actuellement, les lignes de la commande vers la facture. On veut également qu'un lien Affaire <-> Ligne de commande soit remplacé par un lien Affaire <-> Ligne de facture correspondant.- s'assurer que le changement de montant de frais sur une affaire, résultant d'un changement des lignes associées soit bien tracé en BDD cf #1342 (comment 502287)
Contrôleur (formulaires)
- En profiter pour blinder un peu la validation/clean pour les 3 champs, si possible d'une manière qui profite aux expenses aussi, ça me semble manquer de code de clean actuellement, ex:
- que se passe-t-il si je change de client mais que je ne touche pas au dossier ou à l'affaire ?
Typiquement, un candidat facile pour l'écriture de tests…
Vue (full JS, backbone, marionette)
- Utiliser
SelectBusinessWidget
qui est déjà présent pour les lignes de NDD, qui permet de choisir client ou dossier ou affaire en affichant successivement les 3 champs pour l'édition des lignes de NDD. Il semble suffisament indépendant du modèle pour pouvoir être utilisé ailleurs en l'état.
Le widget en question, tel qu'il existe actuellement dans l'édition des NDD :
- Afficher un avertissement pour décourager les associations/désassociations avec des affaires dont les factures ont été exportées en compta.
Edited by Jocelyn