예제 #1
0
def MajDepot(dlg, db, IDdepot):
    modes = ""
    mindte, maxdte = datetime.date(2999, 12, 31), datetime.date(2000, 1, 1)

    nb = len(dlg.ctrlOlv.modelObjects)
    for track in dlg.ctrlOlv.modelObjects:
        if track.mode and len(track.mode) > 0:
            if not track.mode[:3] in modes: modes += track.mode[:3] + ', '
        mindte = min(mindte, track.date)
        maxdte = max(maxdte, track.date)
    if mindte == maxdte:
        dates = "le %s" % (xformat.DatetimeToStr(mindte, iso=False))
    else:
        dates = "du %s au %s" % (xformat.DatetimeToStr(
            mindte, iso=False), xformat.DatetimeToStr(maxdte, iso=False))
    label = "Noelite: %d %s datés %s" % (nb, modes, dates)

    lstDonnees = [
        ("date", xformat.DateFrToSql(dlg.pnlParams.ctrlDate.GetValue())),
        ("nom", label),
        ("IDcompte", dlg.GetIDbanque()),
    ]
    # Mise à jour du libellé dépôt
    db.ReqMAJ('depots', lstDonnees, 'IDdepot', IDdepot, affichError=True)
    return
예제 #2
0
def SetDepot(dlg, db):
    # cas d'un nouveau depot à créer, retourne l'IDdepot
    IDdepot = None
    today = xformat.DatetimeToStr(datetime.date.today(), iso=False)
    if not 'userdomain' in dlg.dictUtilisateur.keys():
        dlg.dictUtilisateur['userdomain'] = '_'
        dlg.dictUtilisateur['config'] = '_'

    label = "saisie '%s' sur '%s' via '%s' le %s" % (
        dlg.dictUtilisateur['utilisateur'], dlg.dictUtilisateur['userdomain'],
        dlg.dictUtilisateur['config'], today)
    lstDonnees = [("date",
                   xformat.DateFrToSql(dlg.pnlParams.ctrlDate.GetValue())),
                  ("nom", "Saisie règlements via Noelite"),
                  ("verrouillage", 0), ("IDcompte", dlg.GetIDbanque()),
                  ("observations", label)]
    if not hasattr(dlg, "IDdepot"):
        ret = db.ReqInsert(
            "depots",
            lstDonnees=lstDonnees,
            mess="UTILS_Reglements.SetDepot",
        )
        if ret == 'ok':
            IDdepot = db.newID

    # affichage de l'IDdepot créé
    dlg.pnlParams.ctrlRef.SetValue(str(IDdepot))
    return IDdepot
예제 #3
0
    def ValideLigne(self, track):
        track.valide = True
        track.messageRefus = "Saisie incomplète\n\n"
        # vérification des éléments saisis
        try:
            track.conso = int(track.conso)
        except:
            track.conso = None
        if not track.conso or track.conso == 0:
            track.messageRefus += "Le nombre de km consommés est à zéro\n"

        # DateKmFin
        if not xformat.DateFrToSql(track.datekmfin) :
            track.messageRefus += "Vous devez obligatoirement saisir une date de début !\n"

        # véhicule
        if track.idvehicule == None:
            track.messageRefus += "Vous devez obligatoirement sélectionner un véhicle reconnu !\n"

        # activité
        if track.typetiers == 'A' and (not track.idactivite or len(str(track.idactivite))==0):
            track.messageRefus += "Vous devez obligatoirement sélectionner une activité !\n"
        if (not track.nomtiers or len(str(track.nomtiers))==0):
            track.messageRefus += "Vous devez obligatoirement sélectionner un nom de tiers ou d'activité !\n"

        # envoi de l'erreur
        if track.messageRefus != "Saisie incomplète\n\n":
            track.valide = False
        else:
            track.messageRefus = ""
        return
예제 #4
0
    def SetConsoKm(self,track):
        # --- Sauvegarde de la ligne consommation ---
        dteFacturation = self.GetParam('filtres','datefact')
        if track.observation == None: track.observation = ""
        if track.typetiers != 'A' and track.nomtiers and len(track.nomtiers.strip())>0:
            if not (track.nomtiers.strip() in track.observation):
                track.nomtiers = track.nomtiers.replace('/','-')
                track.observation = "%s / %s"%(track.nomtiers.strip(),track.observation.strip())
        if track.idactivite == None: track.idactivite = ''

        lstDonnees = [
            ("IDconso", track.IDconso),
            ("IDanalytique", track.idvehicule),
            ("cloture", xformat.DateFrToSql(self.cloture)),
            ("typeTiers", track.typetiers[:1]),
            ("IDtiers", track.idactivite),
            ("dteKmDeb", xformat.DateFrToSql(track.datekmdeb)),
            ("kmDeb", track.kmdeb),
            ("dteKmFin", xformat.DateFrToSql(track.datekmfin)),
            ("kmFin", track.kmfin),
            ("observation", track.observation),
            ("dtFact", xformat.DateFrToSql(dteFacturation)),
            ("dtMaj", xformat.DatetimeToStr(datetime.date.today(),iso=True)),
            ("user", self.GetUser()),
            ]

        if not track.IDconso or track.IDconso == 0:
            ret = self.db.ReqInsert("vehiculesConsos",lstDonnees= lstDonnees[1:], mess="UTILS_Noegest.SetConsoKm")
            track.IDconso = self.db.newID
            IDcategorie = 6
            categorie = ("Saisie")
        else:
            ret = self.db.ReqMAJ("vehiculesConsos", lstDonnees, "IDconso", track.IDconso)
            IDcategorie = 7
            categorie = "Modification"
        """
        # --- Mémorise l'action dans l'historique ---
        if ret == 'ok':
            nuh.InsertActions([{
                                "IDcategorie": IDcategorie,
                                "action": "Noelite %s de la conso ID%d : %s %s %s" % (
                                categorie, track.IDconso, track.nomvehicule,track.nomtiers,track.observation,),
                                }, ],db=self.db)
        """
        return ret
예제 #5
0
    def GetConsosKm(self):
        # appel des consommations de km sur écran Km_saisie
        dlg = self.parent
        box = dlg.pnlParams.GetBox('filtres')
        dateFact = xformat.DateFrToSql(box.GetOneValue('datefact'))
        vehicule = box.GetOneValue('vehicule')
        where =''
        if dateFact and len(dateFact) > 0:
            where += "\n            AND (consos.dtFact = '%s')"%dateFact
        if vehicule and len(vehicule) > 0 and not 'Tous' in vehicule:
            where += "\n            AND ( vehic.abrege = '%s')"%vehicule

        lstChamps = ['consos.'+x[0] for x in DB_TABLES["vehiculesConsos"]]
        lstChamps += ['vehic.abrege','vehic.nom','activ.nom']
        req = """   
            SELECT %s
            FROM (vehiculesConsos AS consos
            INNER JOIN cpta_analytiques AS vehic ON consos.IDanalytique = vehic.IDanalytique) 
            LEFT JOIN cpta_analytiques AS activ ON consos.IDtiers = activ.IDanalytique
            WHERE ((vehic.axe IS NULL OR vehic.axe='VEHICULES')
                    %s)
            ORDER BY consos.IDconso;
            """ % (",".join(lstChamps),where)
        lstDonnees = []
        retour = self.db.ExecuterReq(req, mess='UTILS_Noegest.GetConsosKm')
        if retour == "ok":
            recordset = self.db.ResultatReq()
            for record in recordset:
                dicDonnees = xformat.ListToDict(lstChamps,record)
                if dicDonnees["consos.typeTiers"] != 'A':
                    lstObs = dicDonnees["consos.observation"].split(" / ")
                    if len(lstObs) > 1:
                        dicDonnees["activ.nom"] = lstObs[0]
                        dicDonnees["consos.observation"] = ('-').join(lstObs[1:])
                donnees = [
                    dicDonnees["consos.IDconso"],
                    dicDonnees["consos.IDanalytique"],
                    dicDonnees["vehic.abrege"],
                    dicDonnees["consos.typeTiers"],
                    dicDonnees["consos.IDtiers"],
                    dicDonnees["activ.nom"],
                    dicDonnees["consos.dteKmDeb"],
                    dicDonnees["consos.kmDeb"],
                    dicDonnees["consos.dteKmFin"],
                    dicDonnees["consos.kmFin"],
                    dicDonnees["consos.kmFin"]-dicDonnees["consos.kmDeb"],
                    dicDonnees["consos.observation"],
                    ]
                lstDonnees.append(donnees)
        dlg.ctrlOlv.lstDonnees = lstDonnees
        dlg.ctrlOlv.MAJ()
        for object in dlg.ctrlOlv.modelObjects:
            self.ValideLigne(object)
        dlg.ctrlOlv._FormatAllRows()
        return
예제 #6
0
 def GetdicPrixVteKm(self):
     dicPrix = {}
     req = """   
             SELECT vehiculesCouts.IDanalytique, vehiculesCouts.prixKmVte 
             FROM vehiculesCouts 
             INNER JOIN cpta_analytiques ON vehiculesCouts.IDanalytique = cpta_analytiques.IDanalytique
             WHERE (((vehiculesCouts.cloture) = '%s') AND ((cpta_analytiques.axe)="VEHICULES"))
             ;"""%xformat.DateFrToSql(self.cloture)
     retour = self.db.ExecuterReq(req, mess='UTILS_Noegest.GetPrixVteKm')
     if retour == "ok":
         recordset = self.db.ResultatReq()
         for ID, cout in recordset:
             dicPrix[ID] = cout
     return dicPrix
예제 #7
0
    def majArticle(dicArt,dicMvt):

        # calcul de la correction quantités stock
        deltaQte = (track.qte * dlg.sensNum) - dicMvt['qte']
        oldQteStock = dicArt['qteStock']
        dicArt['qteStock'] += deltaQte
        # calcul du nouveau prix moyen
        if not dicArt or Nz(dicArt['prixMoyen']) <= 0:
            # non renseigné en double, pas de moyenne nécessaire
            prixMoyen = abs(track.prixTTC)
        elif dlg.sens == 'sorties' or track.qte < 0:
            # les sorties ou correctifs ne modifient pas la valeur unitaire du stock
            prixMoyen = dicArt['prixMoyen']
        else:
            # Nouvelle entrée en stock, il faut faire la moyenne geométrique
            oldValSt = oldQteStock * dicArt['prixMoyen']
            oldValMvt = dicMvt['qte'] * dicMvt['prixUnit']
            newValMvt = track.qte * track.prixTTC
            newValSt = oldValSt + newValMvt - oldValMvt
            if xformat.Nz(dicArt['qteStock']) == 0:
                prixMoyen = dicArticle['prixMoyen']
            else:
                prixMoyen = (newValSt / dicArt['qteStock'] )
            track.pxMoy = prixMoyen
            if dlg.ht_ttc == 'HT':
                track.pxMoy = prixMoyen / (1 + (dicArt['txTva'] / 100))

        # Maj dicMvt
        newDicMvt['IDmouvement'] = track.IDmouvement
        newDicMvt['prixUnit'] = track.pxUn
        newDicMvt['IDarticle'] = track.IDarticle
        dicArt['prixMoyen'] = prixMoyen
        lstDonnees = [('qteStock', dicArt['qteStock']),
                      ('prixMoyen', dicArt['prixMoyen']),
                      ('ordi', dlg.ordi),
                      ('dateSaisie', dlg.today), ]

        # prix actuel changé uniquement sur nouvelles entrées
        if 'achat' in dlg.origine and track.qte != 0:
            dicArt['prixActuel'] = track.prixTTC
            lstDonnees += [
                ('dernierAchat', xformat.DateFrToSql(dlg.date)),
                ('prixActuel', dicArt['prixActuel']), ]

        # enregistre l' article dans la bd
        ret = db.ReqMAJ("stArticles", lstDonnees, "IDarticle", dicArt['IDarticle'],
                        mess="UTILS_Stocks.MAJarticle Modif: %s" % dicArt['IDarticle'])
        return ret
예제 #8
0
 def OnDateDepot(self,evt):
     value = evt.EventObject.GetValue()
     evt.EventObject.SetValue(xformat.FmtDate(value))
     if hasattr(self.parent,'IDdepot') and self.parent.IDdepot:
         nur.SetDateDepot(self.parent.db,self.parent.IDdepot,xformat.DateFrToSql(value))
     evt.Skip()