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
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
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
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
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
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
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
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()