|
|
@@ -6,60 +6,18 @@
|
|
|
'''
|
|
|
from datetime import datetime
|
|
|
import logging
|
|
|
-import string
|
|
|
import sys
|
|
|
|
|
|
from path import Path
|
|
|
|
|
|
from core import logconf
|
|
|
-from core.model import Model
|
|
|
-from core.pde import FacturesDb, AnalytiqueDb, CommunDb
|
|
|
+from core.pde import FacturesDb, AnalytiqueDb, CommunDb, EnTete, Ligne
|
|
|
+from core.sqlformatter import SqlFormatter
|
|
|
|
|
|
|
|
|
logger = logging.getLogger("analytique2facture")
|
|
|
logconf.start("analytique2facture", logging.DEBUG)
|
|
|
|
|
|
-class EnTete(Model):
|
|
|
- pass
|
|
|
-
|
|
|
-class Ligne(Model):
|
|
|
- def __init__(self):
|
|
|
- # Valeurs fixes
|
|
|
- self.bytNbDecQuantite = 2
|
|
|
- self.dblCnvUniteCoef = 1
|
|
|
- self.bytNbDecQuantiteConvertie = 2
|
|
|
- self.bytNbDecPU = 2
|
|
|
- self.bytLigneSousTotal = 1
|
|
|
- self.intLigneIdRattachement = 0
|
|
|
- self.blnLigneVisible = True
|
|
|
- self.blnLigneGeneree = False
|
|
|
- self.bytGenerateurId = 0
|
|
|
- self.bytClasseRemiseArticleId = 0
|
|
|
- self.bytTVAArticleId = 0
|
|
|
- self.bytTVAId = 0
|
|
|
- self.dblTVATaux = 0
|
|
|
- self.bytUniteIdQuantite = 0
|
|
|
- self.bytUniteIdPrix = 0
|
|
|
-
|
|
|
-class SqlFormatter(string.Formatter):
|
|
|
- def format_field(self, value, format_spec):
|
|
|
- if value is None:
|
|
|
- value = "Null"
|
|
|
- format_spec = ""
|
|
|
- if format_spec == "date":
|
|
|
- value = "#{:%Y-%m-%d %H:%M:%S}#".format(value)
|
|
|
- format_spec = ""
|
|
|
-
|
|
|
- formatted = super().format_field(value, "")
|
|
|
- formatted = formatted.replace("'", "''")
|
|
|
- formatted = formatted.replace("\"", "''")
|
|
|
- formatted = formatted.replace("\t", " ")
|
|
|
-
|
|
|
- if format_spec == "text":
|
|
|
- formatted = "'{}'".format(formatted)
|
|
|
-
|
|
|
- return formatted
|
|
|
-Sql = SqlFormatter()
|
|
|
|
|
|
# # POUR TESTER, décommenter les lignes suivantes
|
|
|
##-----------------------------------------------
|
|
|
@@ -80,6 +38,8 @@ facture_db = FacturesDb(autocommit=False)
|
|
|
# Connexion à CommunDb
|
|
|
commun_db = CommunDb(autocommit=False)
|
|
|
|
|
|
+Sql = SqlFormatter()
|
|
|
+
|
|
|
current = "{:%m/%Y}".format(datetime.now())
|
|
|
# mois_facturation = input("Veuillez renseigner le mois de facturation [defaut: {}] ('q' pour quitter): ".format(current)) # Format: voir avec jacky
|
|
|
# if mois_facturation == 'q':
|
|
|
@@ -174,14 +134,14 @@ for affaireId, interventions in a_facturer.items():
|
|
|
entete.dblCoursDevise = 1
|
|
|
entete.dtmCoursDevise = datetime(2002, 1, 1)
|
|
|
entete.bytTypeTarif = 1
|
|
|
- entete.strReglement = "POUR ACQUITTER CET ETAT DE REDEVANCE, ATTENDEZ IMPERATIVEMENT DE RECEVOIR LE TITRE DE PERCEPTION EMANANT DE LA PAIERIE DEPARTEMENTALE"
|
|
|
+ entete.strReglement = "POUR ACQUITTER CET ETAT DE REDEVANCE,\r\n ATTENDEZ IMPERATIVEMENT DE RECEVOIR LE TITRE DE PERCEPTION EMANANT DE LA PAIERIE DEPARTEMENTALE"
|
|
|
|
|
|
# Commentaires
|
|
|
- entete.memObsEntete = "[Mois : {mois_facturation}] " \
|
|
|
- "[Lieu de travail : ]{affaire.strLieux} " \
|
|
|
- "[V/Cde : ] {affaire.Ref} du {affaire.dtmCommande:%d/%m/%Y}" \
|
|
|
+ entete.memObsEntete = "[Mois : {mois_facturation}]\r\n" \
|
|
|
+ "[Lieu de travail : ]{affaire.strLieux}\r\n" \
|
|
|
+ "[V/Cde : ] {affaire.Ref} du {affaire.dtmCommande:%d/%m/%Y}\r\n" \
|
|
|
"".format(mois_facturation=mois_facturation,
|
|
|
- affaire=affaire).replace("'", "")
|
|
|
+ affaire=affaire)
|
|
|
|
|
|
entete.memObsInterne = "N° Affaire analytique : {}".format(affaire.strLiaisonControle)
|
|
|
|
|
|
@@ -225,7 +185,7 @@ for affaireId, interventions in a_facturer.items():
|
|
|
ligne.dblPThtNet = interv.dblPrixTotal
|
|
|
ligne.bytClasseRemiseArticleId = 1
|
|
|
ligne.dblPUSaisie = interv.dblPrixUnitaire
|
|
|
- ligne.strPUAff = "{} EUR/{}".format(interv.dblPrixUnitaire, interv.strUnite)
|
|
|
+ ligne.strPUAff = "{:03.02f} EUR/{}".format(interv.dblPrixUnitaire, interv.strUnite)
|
|
|
ligne.strQteAff = "{:03.02f} {}".format(interv.dblQuantite, interv.strUnite)
|
|
|
|
|
|
lignes.append(ligne)
|
|
|
@@ -242,6 +202,7 @@ for affaireId, interventions in a_facturer.items():
|
|
|
ligne_total_1.intLigneId = 32000
|
|
|
ligne_total_1.strArticleId = ""
|
|
|
ligne_total_1.strArticle = "Total H.T."
|
|
|
+ ligne_total_1.dblQte = 0
|
|
|
ligne_total_1.dblPThtNetDev = montant_ht
|
|
|
ligne_total_1.dblPTttcNetDev = montant_ttc
|
|
|
ligne_total_1.bytLigneSousTotal = 10
|
|
|
@@ -263,6 +224,7 @@ for affaireId, interventions in a_facturer.items():
|
|
|
montant_ht=montant_ht,
|
|
|
montant_tva=montant_tva,
|
|
|
montant_ttc=montant_ttc)
|
|
|
+ ligne_total_2.dblQte = 0
|
|
|
ligne_total_2.bytTVAId = lignes[0].bytTVAId
|
|
|
ligne_total_2.dblTVATaux = taux_tva
|
|
|
ligne_total_2.dblPThtNetDev = montant_ht
|
|
|
@@ -282,11 +244,12 @@ for affaireId, interventions in a_facturer.items():
|
|
|
ligne_total_3.intLigneId = 32500
|
|
|
ligne_total_3.strArticleId = ""
|
|
|
ligne_total_3.strArticle = "Total T.T.C."
|
|
|
+ ligne_total_3.dblQte = 0
|
|
|
ligne_total_3.dblPThtNetDev = montant_ht
|
|
|
ligne_total_3.dblPTttcNetDev = montant_ttc
|
|
|
ligne_total_3.bytLigneSousTotal = 12
|
|
|
ligne_total_3.blnLigneVisible = False
|
|
|
- ligne_total_3.dblPThtNet = montant_ttc
|
|
|
+ ligne_total_3.dblPThtNet = montant_ht
|
|
|
ligne_total_3.dblPTttcNet = round(montant_ttc, 2)
|
|
|
ligne_total_3.dblPUSaisie = round(montant_ttc, 2)
|
|
|
ligne_total_3.strPUAff = "{:03.02f} EUR".format(montant_ttc)
|
|
|
@@ -320,17 +283,6 @@ for affaireId, interventions in a_facturer.items():
|
|
|
|
|
|
for ligne in lignes:
|
|
|
|
|
|
- # Complete les champs manquants
|
|
|
- for field in ["bytTVAArticleId", "bytTVAId", "dblTVATaux", "dblQte", "bytUniteIdQuantite",
|
|
|
- "bytNbDecQuantite", "bytUniteIdPrix", "dblCnvUniteCoef", "bytNbDecQuantiteConvertie", "dblPUhtBrutDev", "dblPUttcBrutDev", "dblPUhtNetDev",
|
|
|
- "dblPUttcNetDev", "bytNbDecPU", "dblPThtBrutDev", "dblPTttcBrutDev", "dblPThtNetDev", "dblPTttcNetDev", "strStatArticle", "strStatDocLigne",
|
|
|
- "dblTauxRemise1", "dblTauxRemise2", "dblTauxRemise3", "blnPrestation", "strCompteComptable", "memObs", "memObsInterne", "bytLigneSousTotal",
|
|
|
- "intLigneIdRattachement", "blnLigneVisible", "blnLigneGeneree", "bytGenerateurId", "dblPUhtBrut", "dblPUttcBrut", "dblPUhtNet", "dblPUttcNet",
|
|
|
- "dblPThtBrut", "dblPTttcBrut", "dblPThtNet", "dblPTttcNet", "bytClasseRemiseArticleId", "dblPUSaisie", "strPUAff", "strQteAff"]:
|
|
|
- if not hasattr(ligne, field):
|
|
|
- setattr(ligne, field, None)
|
|
|
-
|
|
|
-
|
|
|
sql = Sql.format("""
|
|
|
INSERT INTO tblPieceLigne ( lngPieceId, intLigneId, strArticleId, strArticle, bytTVAArticleId, bytTVAId, dblTVATaux, dblQte, bytUniteIdQuantite,
|
|
|
bytNbDecQuantite, bytUniteIdPrix, dblCnvUniteCoef, bytNbDecQuantiteConvertie, dblPUhtBrutDev, dblPUttcBrutDev, dblPUhtNetDev,
|