def fornitura_table(soup=None, op=None,dao=None, row=None, all=False): d = None if soup and not all: record = soup.fornitura.get(loads(row.object)) else: record = row if op =="DELETE": if all: d = Fornitura().getRecord(id=row.id) else: d = Fornitura().getRecord(id=loads(row.object)) if d: d.delete() return True elif op == "INSERT": if all: d = Fornitura() d.id = record.id else: d = Fornitura().getRecord(id=loads(row.object)) elif op == "UPDATE": if all: d = Fornitura().getRecord(id=row.id) else: d = Fornitura().getRecord(id=loads(row.object)) d.codice_articolo_fornitore = record.codice_articolo_fornitore d.prezzo_lordo = record.prezzo_lordo d.prezzo_netto = record.prezzo_netto d.applicazione_sconti = record.applicazione_sconti d.scorta_minima = record.scorta_minima d.tempo_arrivo_merce = record.tempo_arrivo_merce d.fornitore_preferenziale = record.fornitore_preferenziale d.percentuale_iva = record.percentuale_iva d.data_fornitura = record.data_fornitura d.data_prezzo = record.data_prezzo d.id_fornitore = record.id_fornitore d.id_articolo = record.id_articolo d.id_multiplo = record.id_multiplo d.persist() return True
def persist(self, cancellaRighe=True): """cancellazione righe associate alla testata conn.execStoredProcedure('RigheMovimentoDel',(self.id, ))""" if not self.numero: valori = numeroRegistroGet(tipo="Movimento", date=self.data_movimento) self.numero = valori[0] self.registro_numerazione= valori[1] params["session"].add(self) sm = posso("SM") if self.righeMovimento: if cancellaRighe: self.righeMovimentoDel(sm=sm) if self.operazione == "Carico da composizione kit": #print "DEVO AGGIUNGERE IN NEGATIVO LE RIGHE KIT" righeMov = [] for riga in self.righeMovimento: arto = Articolo().getRecord(id=riga.id_articolo) #print "KIT", arto.articoli_kit for art in arto.articoli_kit(): #print art.id_articolo_filler, art.quantita a = leggiArticolo(art.id_articolo_filler) r = RigaMovimento() r.valore_unitario_netto = 0 r.valore_unitario_lordo = 0 r.quantita = -1*(art.quantita*riga.quantita) r.moltiplicatore = 1 r.applicazione_sconti = riga.applicazione_sconti r.sconti = [] r.percentuale_iva = a["percentualeAliquotaIva"] r.descrizione = a["denominazione"] r.id_articolo = art.id_articolo_filler r.id_magazzino = riga.id_magazzino r.id_multiplo = riga.id_multiplo r.id_listino = riga.id_listino r.id_iva = a["idAliquotaIva"] r.id_riga_padre = riga.id_riga_padre r.scontiRigheMovimento = riga.scontiRigheMovimento righeMov.append(r) self.righeMovimento = self.righeMovimento+righeMov if self.operazione == "Scarico Scomposizione kit": #print "DEVO AGGIUNGERE IN NEGATIVO LE RIGHE KIT" righeMov = [] for riga in self.righeMovimento: arto = Articolo().getRecord(id=riga.id_articolo) #print "KIT", arto.articoli_kit for art in arto.articoli_kit(): print art.id_articolo_filler, art.quantita a = leggiArticolo(art.id_articolo_filler) r = RigaMovimento() r.valore_unitario_netto = 0 r.valore_unitario_lordo = 0 r.quantita = art.quantita*riga.quantita r.moltiplicatore = 1 r.applicazione_sconti = riga.applicazione_sconti r.sconti = [] r.percentuale_iva = a["percentualeAliquotaIva"] r.descrizione = a["denominazione"] +" $SSK$" r.id_articolo = art.id_articolo_filler r.id_magazzino = riga.id_magazzino r.id_multiplo = riga.id_multiplo r.id_listino = riga.id_listino r.id_iva = a["idAliquotaIva"] r.id_riga_padre = riga.id_riga_padre r.scontiRigheMovimento = riga.scontiRigheMovimento righeMov.append(r) riga.quantita = -1*riga.quantita self.righeMovimento = self.righeMovimento+righeMov if self.operazione == "Trasferimento merce magazzino" and self.id_to_magazzino: righeMov = [] for riga in self.righeMovimento: r = RigaMovimento() r.valore_unitario_netto = riga.valore_unitario_netto r.valore_unitario_lordo = riga.valore_unitario_lordo r.quantita = riga.quantita r.moltiplicatore = riga.moltiplicatore r.applicazione_sconti = riga.applicazione_sconti r.sconti = riga.sconti r.percentuale_iva = riga.percentuale_iva r.descrizione = riga.descrizione r.id_articolo = riga.id_articolo r.id_magazzino = self.id_to_magazzino r.id_multiplo = riga.id_multiplo r.id_listino = riga.id_listino r.id_iva = riga.id_iva r.id_riga_padre = riga.id_riga_padre r.scontiRigheMovimento = riga.scontiRigheMovimento righeMov.append(r) riga.quantita = -1*riga.quantita self.righeMovimento = self.righeMovimento+righeMov #sm = posso("SM") lt = setconf("Documenti", "lotto_temp") gl = setconf("General", "gestione_lotti") for riga in self.righeMovimento: if "RigaDocumento" in str(riga.__module__): riga.id_testata_documento = self.id_testata_documento riga.persist(sm=sm) else: #se non ho un id salvo il dao e me ne faccio dare uno if not self.id: params["session"].commit() riga.id_testata_movimento = self.id # vado a salvare le righe movimento riga.persist(sm=sm) datta = self.data_movimento if hasattr(riga,"data_prezzo") and riga.data_prezzo is not None: datta = stringToDateTime(riga.data_prezzo) if self.id_fornitore and riga.id_articolo: fors = Fornitura().select(idArticolo=riga.id_articolo, idFornitore=self.id_fornitore, dataPrezzo = datta, orderBy = 'data_fornitura DESC', batchSize = None) if fors: daoFornitura = fors[0] else: daoFornitura = Fornitura() if hasattr(riga,"data_prezzo") and riga.data_prezzo is not None and riga.data_prezzo != "": daoFornitura.data_prezzo = stringToDateTime(riga.data_prezzo) if hasattr(riga, "ordine_minimo") and riga.ordine_minimo is not None and riga.ordine_minimo != "": daoFornitura.scorta_minima = int(riga.ordine_minimo) if hasattr(riga, "tempo_arrivo") and riga.tempo_arrivo is not None and riga.tempo_arrivo != "": daoFornitura.tempo_arrivo_merce = int(riga.tempo_arrivo) if hasattr(riga,"numero_lotto"): daoFornitura.numero_lotto = riga.numero_lotto or "" if hasattr(riga, "data_scadenza"): daoFornitura.data_scadenza = stringToDate(riga.data_scadenza) or None if hasattr(riga, "data_produzione"): daoFornitura.data_produzione = stringToDate(riga.data_produzione) or None daoFornitura.data_fornitura = self.data_movimento daoFornitura.fornitore_preferenziale = True daoFornitura.id_fornitore = self.id_fornitore daoFornitura.id_articolo = riga.id_articolo if not daoFornitura.data_prezzo: daoFornitura.data_prezzo = self.data_movimento if "_RigaMovimento__codiceArticoloFornitore" in riga.__dict__: daoFornitura.codice_articolo_fornitore = riga.__dict__["_RigaMovimento__codiceArticoloFornitore"] daoFornitura.prezzo_lordo = riga.valore_unitario_lordo daoFornitura.prezzo_netto = riga.valore_unitario_netto daoFornitura.percentuale_iva = riga.percentuale_iva daoFornitura.applicazione_sconti = riga.applicazione_sconti sconti = [] for s in riga.sconti: daoSconto = ScontoFornitura() daoSconto.id_fornitura = daoFornitura.id daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoFornitura.sconti = sconti try: params["session"].add(daoFornitura) params["session"].commit() except: params["session"].rollback() if gl: #cambiata la logica, adesso le righe su rmf sono sempre e solo una #viene gestita invece un'altra tabella di raccordo per le quantità a = RigaMovimentoFornitura() a.id_articolo = riga.id_articolo a.id_riga_movimento_acquisto = riga.id a.id_fornitura = daoFornitura.id params["session"].add(a) #params["session"].commit() elif gl: if hasattr(riga,"righe_movimento_fornitura"): for g in riga.righe_movimento_fornitura: a = RigaMovimentoFornitura() a.id_articolo = riga.id_articolo a.id_riga_movimento_vendita = riga.id a.id_fornitura = g params["session"].add(a) #params["session"].commit() if lt and hasattr(riga,"lotto_temp") and riga.lotto_temp: # Salvare il lotto temporaneo n = NumeroLottoTemp() n.id_riga_movimento_vendita_temp = riga.id n.lotto_temp = riga.lotto_temp params["session"].add(n) params["session"].commit() self.init_on_load()
def fillDaos(self): """fillDaos method fills all Dao related to daoArticolo """ if posso("PW") and self.tipoArticolo == "SON": self.daoArticolo.codice = self.articoloPadre.codice + self.gruppo_taglia[0:3] + self.taglia + self.colore self.daoArticolo.denominazione = self.articoloPadre.denominazione + ' ' + self.taglia + ' ' + self.colore self.codice_articolo = self.articoloPadre else: if self.codice_articolo is None or self.codice_articolo == "None": self.codice_articolo = promogest.dao.Articolo.getNuovoCodiceArticolo() self.daoArticolo.codice = str(self.codice_articolo) if self.denominazione_articolo: self.daoArticolo.denominazione = str(self.denominazione_articolo) else: if not self.daoArticolo.denominazione: messageInfo(msg= "ATTENZIONE DESCRIZIONE MANCANTE\nIN INSERIMENTO NUOVO ARTICOLO %s" %str(self.codice_barre_articolo)) # raise NameError("ERRORE DESCRIZIONE MANCANTE") return # print "STO PER SALVARE ", self.daoArticolo.denominazione #families id_famiglia = None if self.famiglia_articolo is None: self.famiglia_articolo_id = int(self.defaults['Famiglia']) self.famiglia_articolo = FamigliaArticolo().getRecord(id=self.famiglia_articolo_id) id_famiglia = self.famiglia_articolo.id else: self._families = FamigliaArticolo().select(batchSize=None) code_list = [] for f in self._families: code_list.append(f.codice) if self.famiglia_articolo in (f.denominazione_breve, f.denominazione, f.codice, f.id): id_famiglia = f.id break if id_famiglia is None: family_code = self.famiglia_articolo[:4] if len(self._families) > 0: ind = 0 for code in code_list: if family_code == code[:4]: ind +=1 family_code = family_code+'/'+str(ind) daoFamiglia = FamigliaArticolo() daoFamiglia.codice = family_code daoFamiglia.denominazione_breve = self.famiglia_articolo[:10] daoFamiglia.denominazione = self.famiglia_articolo daoFamiglia.id_padre = None daoFamiglia.persist() id_famiglia = daoFamiglia.id self._families.append(daoFamiglia) self.daoArticolo.id_famiglia_articolo = id_famiglia #categories id_categoria = None if self.categoria_articolo is None: self.categoria_articolo_id = self.defaults['Categoria'] self.categoria_articolo = CategoriaArticolo().getRecord(id=self.categoria_articolo_id) id_categoria = self.categoria_articolo.id else: self._categories = CategoriaArticolo().select(batchSize=None) category_list = [] for c in self._categories: category_list.append(c.denominazione_breve) if self.categoria_articolo in (c.denominazione, c.denominazione_breve): id_categoria = c.id break if id_categoria == None: category_short_name = self.categoria_articolo[:7] if len(self._categories) > 0: ind = 0 for category in category_list: if category_short_name == category[:7]: ind +=1 category_short_name = category_short_name+'/'+str(ind) daoCategoria = CategoriaArticolo() daoCategoria.denominazione_breve = category_short_name daoCategoria.denominazione = self.categoria_articolo daoCategoria.persist() id_categoria = daoCategoria.id self._categories.append(daoCategoria) self.daoArticolo.id_categoria_articolo = id_categoria #IVA id_aliquota_iva = None if self.aliquota_iva is None: self.aliquota_iva_id = self.defaults['Aliquota iva'] self.aliquota_iva = AliquotaIva().getRecord(id=self.aliquota_iva_id) id_aliquota_iva = self.aliquota_iva.id else: self._vats = AliquotaIva().select(batchSize=None) for v in self._vats: if self.aliquota_iva.lower() in (v.denominazione_breve.lower(), v.denominazione.lower()) or\ int(str(self.aliquota_iva).replace('%', '') or 20) == int(v.percentuale): id_aliquota_iva = v.id break if id_aliquota_iva is None: self.aliquota_iva = str(self.aliquota_iva).replace('%', '') daoAliquotaIva = AliquotaIva() daoAliquotaIva.denominazione = 'ALIQUOTA '+ self.aliquota_iva +'%' daoAliquotaIva.denominazione_breve = self.aliquota_iva + '%' daoAliquotaIva.id_tipo = 1 daoAliquotaIva.percentuale = Decimal(self.aliquota_iva) daoAliquotaIva.persist() id_aliquota_iva = daoAliquotaIva.id self._vats.append(daoAliquotaIva) self.daoArticolo.id_aliquota_iva = id_aliquota_iva #UNITA BASE id_unita_base = None if self.unita_base is None: self.unita_base_id = self.defaults['Unita base'] #FIXME: promogest2 ----proviamo # La storedProcedure UnitaBaseGet NON esiste e la chiamta Dao #qui sotto fallisce con un errore!!! self.unita_base = UnitaBase().getRecord(id=self.unita_base_id) id_unita_base = self.unita_base_id else: unis = UnitaBase().select(batchSize=None) for u in unis: if self.unita_base.lower() in (u.denominazione.lower(), u.denominazione_breve.lower()): id_unita_base = u.id break if id_unita_base is None: self.unita_base = UnitaBase().select(denominazione='Pezzi', batchSize=None)[0] id_unita_base = self.unita_base.id self.daoArticolo.id_unita_base = id_unita_base self.daoArticolo.produttore = self.produttore or '' self.daoArticolo.cancellato = False self.daoArticolo.sospeso = False # print "PTIMA DEL PERSIT", self.daoArticolo.__dict__ self.daoArticolo.persist() product_id = self.daoArticolo.id #barcode if self.codice_barre_articolo is not None: self.codice_barre_articolo = str(self.codice_barre_articolo).strip() try: oldCodeBar= CodiceABarreArticolo().select(idArticolo=product_id) if oldCodeBar: for codes in oldCodeBar: codes.primario = False codes.persist() except: pass barCode = CodiceABarreArticolo().\ select(codiceEM=self.codice_barre_articolo, batchSize=None) if len(barCode) > 0: daoBarCode = CodiceABarreArticolo().getRecord(id=barCode[0].id) daoBarCode.id_articolo = product_id daoBarCode.primario = True daoBarCode.persist() else: daoBarCode = CodiceABarreArticolo() daoBarCode.id_articolo = product_id daoBarCode.codice = self.codice_barre_articolo daoBarCode.primario = True daoBarCode.persist() #price-list--> product decimalSymbol = self.PLModel._decimalSymbol if (self.prezzo_vendita_non_ivato is not None or \ self.prezzo_acquisto_non_ivato is not None or \ self.prezzo_acquisto_ivato is not None or \ self.prezzo_vendita_ivato is not None): try: daoPriceListProduct = ListinoArticolo().\ select(idListino=self.price_list_id, idArticolo=product_id, batchSize=None)[0] except: daoPriceListProduct = ListinoArticolo() daoPriceListProduct.id_articolo = product_id daoPriceListProduct.id_listino = self.price_list_id daoPriceListProduct.data_listino_articolo = self.dataListino daoPriceListProduct.listino_attuale = True if self.prezzo_vendita_ivato is not None: prezzo = self.sanitizer(self.prezzo_vendita_ivato) daoPriceListProduct.prezzo_dettaglio = mN(prezzo) else: daoPriceListProduct.prezzo_dettaglio = 0 if self.prezzo_vendita_non_ivato is not None: prezzo = self.sanitizer(self.prezzo_vendita_non_ivato) daoPriceListProduct.prezzo_ingrosso = mN(prezzo) else: daoPriceListProduct.prezzo_ingrosso = 0 sconti_ingrosso = [ScontoVenditaIngrosso(), ] sconti_dettaglio = [ScontoVenditaDettaglio(), ] if self.sconto_vendita_ingrosso is not None \ and str(self.sconto_vendita_ingrosso).strip() != "0" \ and str(self.sconto_vendita_ingrosso).strip() !="": self.sconto_vendita_ingrosso = self.sanitizer(self.sconto_vendita_ingrosso) sconti_ingrosso[0].valore = mN(self.sconto_vendita_ingrosso) sconti_ingrosso[0].tipo_sconto = 'percentuale' daoPriceListProduct.sconto_vendita_ingrosso = sconti_ingrosso if self.sconto_vendita_dettaglio and \ str(self.sconto_vendita_dettaglio).strip() != "0" and \ str(self.sconto_vendita_dettaglio).strip() !="": self.sconto_vendita_dettaglio = self.sanitizer(self.sconto_vendita_dettaglio) sconti_dettaglio[0].valore = mN(self.sconto_vendita_dettaglio) sconti_dettaglio[0].tipo_sconto = 'percentuale' daoPriceListProduct.sconto_vendita_dettaglio = sconti_dettaglio if self.prezzo_acquisto_non_ivato is not None and \ str(self.prezzo_acquisto_non_ivato).strip() != "0" and \ str(self.prezzo_acquisto_non_ivato).strip() !="": prezzo = self.sanitizer(self.prezzo_acquisto_non_ivato) daoPriceListProduct.ultimo_costo = mN(prezzo) elif self.prezzo_acquisto_ivato is not None and \ str(self.prezzo_acquisto_ivato).strip() != "0" and \ str(self.prezzo_acquisto_ivato).strip() !="": prezzo = self.sanitizer(self.prezzo_acquisto_ivato) self.aliquota_iva.percentuale = self.sanitizer(self.aliquota_iva.percentuale) daoPriceListProduct.ultimo_costo = mN(calcolaPrezzoIva(mN(prezzo), -1 * (mN(self.aliquota_iva.percentuale)))) else: daoPriceListProduct.ultimo_costo = 0 # print " QUSTNO NON VA BEEN ", daoPriceListProduct.__dict__ daoPriceListProduct.persist() # Fornitura daoFornitura = Fornitura().select(idFornitore=self.fornitore, idArticolo=self.daoArticolo.id, daDataPrezzo=self.dataListino, aDataPrezzo=self.dataListino, batchSize=None) if len(daoFornitura) == 0: daoFornitura = Fornitura() daoFornitura.prezzo_netto = prezzo or 0 daoFornitura.prezzo_lordo = prezzo or 0 daoFornitura.id_fornitore = self.fornitore daoFornitura.id_articolo = self.daoArticolo.id try: daoFornitura.percentuale_iva = Decimal(str(self.aliquota_iva.percentuale)) except: daoFornitura.percentuale_iva = Decimal(str(self.aliquota_iva)) daoFornitura.data_prezzo = self.dataListino daoFornitura.codice_articolo_fornitore = self.codice_fornitore daoFornitura.fornitore_preferenziale = True daoFornitura.persist() self.product = None
for riga in t.righe: # verifico che la riga abbia un id_articolo ed un fornitore (potrebbe non essere necessario) if t.id_fornitore and riga.id_articolo: fors = Fornitura().select( idArticolo=riga.id_articolo, idFornitore=t.id_fornitore, dataFornitura=t.data_movimento, batchSize=None ) daoFornitura = None if fors: daoFornitura = fors[0] v = "vecchia" else: daoFornitura = Fornitura() v = "nuova" daoFornitura.id_fornitore = t.id_fornitore daoFornitura.id_articolo = riga.id_articolo daoFornitura.data_fornitura = t.data_movimento if "_RigaMovimento__codiceArticoloFornitore" in riga.__dict__: daoFornitura.codice_articolo_fornitore = riga.__dict__["_RigaMovimento__codiceArticoloFornitore"] daoFornitura.prezzo_lordo = riga.valore_unitario_lordo daoFornitura.prezzo_netto = riga.valore_unitario_netto daoFornitura.percentuale_iva = riga.percentuale_iva daoFornitura.applicazione_sconti = riga.applicazione_sconti sconti = [] for s in riga.sconti: daoSconto = ScontoFornitura() daoSconto.id_fornitura = daoFornitura.id daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto)