Gestion des factures dans gest_crans.

* Attention, c'est à utiliser avec précaution.
This commit is contained in:
Pierre-Elliott Bécue 2014-08-29 02:36:07 +02:00
parent 04a129f879
commit ad5e4e9d09
3 changed files with 226 additions and 17 deletions

View file

@ -1503,7 +1503,7 @@ class BaseProprietaire(BaseClasseCrans):
# On récupère sur les factures l'ensemble de celles comportant une adhésion.
adh_factures = self.factures_adh()
finAdh = max([0.0] + [fromGeneralizedTimeFormat(facture._data.get('finAdhesion', ["19700101000000Z"])[0]) for facture in adh_factures if facture.controle() != "FALSE"])
finAdh = max([0.0] + [fromGeneralizedTimeFormat(facture._data.get('finAdhesion', ["19700101000000Z"])[0]) for facture in adh_factures if facture.controle() != "FALSE" and facture.recuPaiement() is not None])
if update == False:
return finAdh
@ -1530,6 +1530,19 @@ class BaseProprietaire(BaseClasseCrans):
self._set("debutAdhesion", self._data.get("debutAdhesion", []) + [generalizedTimeFormat(thetime)])
return f
def update_adhesion(self):
"""Récupère les dates de début et fin d'adhésion dans les factures
de l'adhérent, et met à jour ses données."""
debutAdh = []
finAdh = []
for facture in self.factures_adh():
debutAdh.append(generalizedTimeFormat(facture._data['debutAdhesion'][0]))
finAdh.append(generalizedTimeFormat(facture._data['finAdhesion'][0]))
self._set('debutAdhesion', debutAdh)
self._set('finAdhesion', finAdh)
self._save()
def droits(self, droits=None, light=False):
""" Renvoie les droits courants. Non modifiable (sauf si surchargée dans classe enfant)"""
if droits <> None:
@ -2378,7 +2391,7 @@ class Adherent(BaseProprietaire):
# On récupère sur les factures l'ensemble de celles comportant une connexion.
conn_factures = self.factures_conn()
finConn = max([0.0] + [fromGeneralizedTimeFormat(facture._data.get('finConnexion', ["19700101000000Z"])[0]) for facture in conn_factures if facture.controle() != "FALSE"])
finConn = max([0.0] + [fromGeneralizedTimeFormat(facture._data.get('finConnexion', ["19700101000000Z"])[0]) for facture in conn_factures if facture.controle() != "FALSE" and facture.recuPaiement() is not None])
if mois is None:
return finConn
@ -2408,6 +2421,19 @@ class Adherent(BaseProprietaire):
self._set("debutConnexion", self._data.get("debutConnexion", []) + [generalizedTimeFormat(thetime)])
return f
def update_connexion(self):
"""Récupère les dates de début et fin de connexion dans les factures
de l'adhérent, et met à jour ses données."""
debutConn = []
finConn = []
for facture in self.factures_adh():
debutConn.append(generalizedTimeFormat(facture._data['debutConnexion'][0]))
finConn.append(generalizedTimeFormat(facture._data['finConnexion'][0]))
self._set('debutConnexion', debutConn)
self._set('finConnexion', finConn)
self._save()
def adherentPayant(self, valeur = None):
"""
L'adhérent paie sa cotisation (a droit au WiFi, à un compte Crans, ... True par défaut
@ -3946,7 +3972,7 @@ class Facture(BaseClasseCrans):
raise ValueError, u'Facture déja payée'
# modification de la valeur
if new != None:
if new is not None and new != False:
# on vérifie que la facture est modifiable
if not self._modifiable and new:
raise NotImplementedError, "La facture n'est pas modifiable"
@ -3960,6 +3986,17 @@ class Facture(BaseClasseCrans):
# modifie la base ldap
self._set("recuPaiement", [new])
elif new == False:
# on vérifie que la facture est modifiable
if not self._modifiable and new:
raise NotImplementedError, "La facture n'est pas modifiable"
# on crédite les articles, si c'est pas possible, la metode
# levera une exeption
self._vider()
# modifie la base ldap
self._set("recuPaiement", [])
# renvoie la valeur trouvée dans la base
return self._data.get("recuPaiement", [None])[0]
@ -3997,14 +4034,37 @@ class Facture(BaseClasseCrans):
# on crédite les articles
for art in self._articles():
# solde impression (on débite d'abord si jamais quelqu'un s'amuse à recharger son solde avec son solde)
if self.modePaiement() == 'solde':
proprio = self.proprietaire()
proprio.solde(operation=0.0 - self.total(), comment="Facture n°%s" % self.numero())
proprio.save()
if art["code"] == "SOLDE":
proprio = self.proprietaire()
proprio.solde(operation=art['nombre']*art["pu"], comment="Facture n°%s : %s" % (self.numero(), art['designation']))
proprio.save()
if self.modePaiement() == 'solde':
proprio = self.proprietaire()
proprio.solde(operation=0.0 - self.total(), comment="Facture n°%s" % self.numero())
proprio.save()
def _vider(self):
"""
Retire les articles à son propriétaire
"""
# on vérifie que le propriétaire est modifiable
if not self.proprietaire()._modifiable:
raise SystemError, u"Impossible de créditer les articles, le proprietaire n'est pas modifiable"
# on crédite les articles
for art in self._articles():
# solde impression (on débite d'abord si jamais quelqu'un s'amuse à recharger son solde avec son solde)
if art["code"] == "SOLDE":
proprio = self.proprietaire()
proprio.solde(operation=-art['nombre']*art["pu"], comment="Revert facture n°%s : %s" % (self.numero(), art['designation']))
proprio.save()
if art["code"] == "FRAIS":
self.supprime(art)
if self.modePaiement() == 'solde':
proprio = self.proprietaire()
proprio.solde(operation=0.0 + self.total(), comment="Revert facture n°%s" % self.numero())
proprio.save()
def _frais(self):
"""