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 on_confirm_button_clicked(self, button=None): if (self.data_movimento_entry.get_text() == ''): obligatoryField(self.getTopLevel(), self.data_movimento_entry) if (findIdFromCombobox(self.id_operazione_combobox) is None): obligatoryField(self.getTopLevel(), self.id_operazione_combobox) note = "Rif. " + self.dao.operazione + " n. " + str(self.dao.numero) + " del " + dateToString(self.dao.data_movimento) newDao = TestataMovimento() newDao.data_movimento = stringToDate(self.data_movimento_entry.get_text()) # newDao.numero = self.dao.numero newDao.parte = self.dao.parte newDao.registro_numerazione = self.dao.registro_numerazione newDao.operazione = findIdFromCombobox(self.id_operazione_combobox) newDao.note_interne = self.dao.note_interne newDao.note_pie_pagina = self.dao.note_pie_pagina newDao.id_testata_documento = self.dao.id_testata_documento if self.personaGiuridicaCambiata: if not self.id_persona_giuridica_customcombobox.getId(): obligatoryField(self.getTopLevel(), self.id_persona_giuridica_customcombobox) if self.id_persona_giuridica_customcombobox.getType() == "cliente": newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId() newDao.id_fornitore = None else: newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId() newDao.id_cliente = None elif not self.persona_giuridica_sensitive: newDao.id_fornitore = None newDao.id_cliente = None else: newDao.id_fornitore = self.dao.id_fornitore newDao.id_cliente = self.dao.id_cliente righe = [] righeMovimento = [] rig = self.dao.righe for r in rig: daoRiga = RigaMovimento() daoRiga.id_testata_movimento = newDao.id daoRiga.id_articolo = r.id_articolo if self.id_magazzino_combobox.get_active() != -1: iddi = findIdFromCombobox(self.id_magazzino_combobox) daoRiga.id_magazzino = iddi else: daoRiga.id_magazzino = r.id_magazzino daoRiga.descrizione = r.descrizione daoRiga.id_listino = r.id_listino daoRiga.percentuale_iva = r.percentuale_iva daoRiga.applicazione_sconti = r.applicazione_sconti daoRiga.quantita = r.quantita daoRiga.id_multiplo = r.id_multiplo daoRiga.moltiplicatore = r.moltiplicatore #ricalcola prezzi listino = self.id_prezzo_combobox.get_model()[self.id_prezzo_combobox.get_active()][0] if listino is None: daoRiga.id_listino = r.id_listino daoRiga.valore_unitario_lordo = r.valore_unitario_lordo daoRiga.valore_unitario_netto = r.valore_unitario_netto else: #ricalcola prezzi listinoArticolo = Environment.params['session'].query(ListinoArticolo).filter(ListinoArticolo.id_listino == listino.id and r.id_articolo == ListinoArticolo.id_articolo).all() if len(listinoArticolo) > 0: daoRiga.id_listino = listinoArticolo[0].id_listino daoRiga.valore_unitario_lordo = listinoArticolo[0].prezzo_dettaglio daoRiga.valore_unitario_netto = listinoArticolo[0].prezzo_ingrosso else: daoRiga.id_listino = r.id_listino daoRiga.valore_unitario_lordo = r.valore_unitario_lordo daoRiga.valore_unitario_netto = r.valore_unitario_netto sconti = [] scontiRigaMovimento = [] sco = r.sconti if self.mantieni_sconti_checkbutton.get_active() : for s in sco: daoSconto = ScontoRigaMovimento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto scontiRigaMovimento.append(daoSconto) daoRiga.scontiRigheMovimento = scontiRigaMovimento righeMovimento.append(daoRiga) newDao.righeMovimento = righeMovimento newDao.persist() # res = TestataMovimento(newDao.id) msg = "Nuovo movimento creato !\n\nIl nuovo movimento e' il n. " + str(newDao.numero) + " del " + dateToString(newDao.data_movimento) + " (" + newDao.operazione + ")" messageInfo(msg=msg, transient=self.getTopLevel()) self.destroy()
def close_day(self, idMagazzino, data): # Seleziono scontrini della giornata datefirst = data OneDay = datetime.timedelta(days=1) aData= data+OneDay # Scontrini prodotti nella giornata odierna scontrini = TestataScontrino().select(daData=datefirst, aData=aData, idMagazzino=self.idMagazzino, idPuntoCassa=self.idPuntoCassa, offset=None, batchSize=None) # Environment.pg2log.info( "SCONTRINI PRODOTTI IN GIORNATA N° %s dettaglio: %s" ) %(str(len(scontrini)or""), str(scontrini)or"") # Creo nuovo movimento if self.idMagazzino: mag = Magazzino().getRecord(id=self.idMagazzino) if mag: nomeMagazzino = mag.denominazione else: nomeMagazzino = " " if self.idPuntoCassa: pos = Pos().getRecord(id= self.idPuntoCassa) if pos: nomePuntoCassa = pos.denominazione else: nomePuntoCassa = " " daoMovimento = TestataMovimento() daoMovimento.operazione = "Scarico venduto da cassa" daoMovimento.data_movimento = datefirst daoMovimento.note_interne = """Movimento chiusura fiscale magazzino: %s, punto cassa: %s """ %(str(nomeMagazzino),str(nomePuntoCassa)) righeMovimento = [] scontiRigheMovimento= [] dictRigheProv = {} for scontrino in scontrini[:]: for riga in scontrino.righe: cri = str(riga.id_articolo)+"_"+str(riga.prezzo_scontato) if cri in dictRigheProv: daoss = dictRigheProv[cri] daoss.append(riga) dictRigheProv[cri] = daoss else: daoss = [] daoss.append(riga) dictRigheProv[cri] = daoss listRighe = [] for k, v in dictRigheProv.iteritems(): if len(v) == 1: listRighe.append(v[0]) v[0].quantitaaa = v[0].quantita else: quantita = 0 for a in v: quantita += a.quantita v[0].quantitaaa = quantita listRighe.append(v[0]) for riga in listRighe: art = Articolo().getRecord(id=riga.id_articolo) # Cerco IVA iva = AliquotaIva().getRecord(id=art.id_aliquota_iva) daoRiga = RigaMovimento() daoRiga.valore_unitario_lordo = riga.prezzo daoRiga.valore_unitario_netto = riga.prezzo_scontato daoRiga.quantita = riga.quantitaaa daoRiga.moltiplicatore = 1 daoRiga.descrizione = riga.descrizione daoRiga.id_magazzino = self.idMagazzino daoRiga.id_articolo = riga.id_articolo daoRiga.percentuale_iva = iva.percentuale scontiRigheMovimento= [] if riga.sconti: for s in riga.sconti: daoScontoRigaMovimento = ScontoRigaMovimento() daoScontoRigaMovimento.valore = s.valore daoScontoRigaMovimento.tipo_sconto = s.tipo_sconto scontiRigheMovimento.append(daoScontoRigaMovimento) daoRiga.scontiRigheMovimento = scontiRigheMovimento scontiRigheMovimento= [] righeMovimento.append(daoRiga) daoMovimento.righeMovimento = righeMovimento daoMovimento.persist() # Creo nuova chiusura daoChiusura = ChiusuraFiscale() daoChiusura.data_chiusura = datefirst daoChiusura.id_magazzino = self.idMagazzino daoChiusura.id_pos = self.idPuntoCassa daoChiusura.persist() # Creo il file filechiusura = self.create_fiscal_close_file() if setconf("VenditaDettaglio", "disabilita_stampa_chiusura"): ret_value = 0 else: ret_value = 0 # Elimino il file #os.remove(filechiusura) if ret_value != 0: string_message = '' for s in message: string_message = string_message + s + "\n" # Mostro messaggio di errore messageError(msg=string_message, transient=self.gladeobj.getTopLevel()) # Elimino il movimento e la chiusura daoChiusura.delete() daoChiusura = None daoMovimento.delete() daoMovimento = None if daoMovimento is not None: # Associo movimento agli scontrini for scontrino in scontrini: daoScontrino = TestataScontrino().getRecord(id=scontrino.id) daoScontrino.id_testata_movimento = daoMovimento.id daoScontrino.persist(chiusura= True) # Svuoto transazione self.on_empty_button_clicked(self.gladeobj.empty_button) self.fineElaborazione()
def close_day(self, idMagazzino, data): # Seleziono scontrini della giornata datefirst = data OneDay = datetime.timedelta(days=1) aData= data+OneDay scontrini = TestataScontrino().select(daData = datefirst, aData = aData, # Scontrini prodotti nella giornata odierna idMagazzino = self.idMagazzino, idPuntoCassa = self.idPuntoCassa, offset = None, batchSize = None) ##Environment.pg2log.info( "SCONTRINI PRODOTTI IN GIORNATA N° %s dettaglio: %s" ) %(str(len(scontrini)or""), str(scontrini)or"") # Creo nuovo movimento if self.idMagazzino: mag = Magazzino().getRecord(id=self.idMagazzino) if mag: nomeMagazzino = mag.denominazione else: nomeMagazzino = " " if self.idPuntoCassa: pos = Pos().getRecord(id= self.idPuntoCassa) if pos: nomePuntoCassa = pos.denominazione else: nomePuntoCassa = " " daoMovimento = TestataMovimento() #if hasattr(Environment.conf, "VenditaDettaglio"): #daoMovimento.operazione = Environment.conf.VenditaDettaglio.operazione #else: #daoMovimento.operazione = setconf("VenditaDettaglio", "operazione") daoMovimento.operazione = "Scarico venduto da cassa" daoMovimento.data_movimento = datefirst daoMovimento.note_interne = """Movimento chiusura fiscale magazzino: %s, punto cassa: %s """ %(str(nomeMagazzino),str(nomePuntoCassa)) righeMovimento = [] scontiRigheMovimento= [] dictRigheProv = {} for scontrino in scontrini[:]: for riga in scontrino.righe: cri = str(riga.id_articolo)+"_"+str(riga.prezzo_scontato) if cri in dictRigheProv: daoss = dictRigheProv[cri] daoss.append(riga) dictRigheProv[cri] = daoss else: daoss = [] daoss.append(riga) dictRigheProv[cri] = daoss listRighe = [] for k,v in dictRigheProv.iteritems(): if len(v) ==1: listRighe.append(v[0]) #print " QUESTO é SOLO", v[0].quantita v[0].quantitaaa = v[0].quantita else: listPrezzi = [] quantita = 0 for a in v: #print "IN COMPAGNIA", a.id_articolo, a.prezzo_scontato, a.quantita quantita += a.quantita v[0].quantitaaa = quantita listRighe.append(v[0]) for riga in listRighe: # Istanzio articolo art = Articolo().getRecord(id=riga.id_articolo) # Cerco IVA iva = AliquotaIva().getRecord(id=art.id_aliquota_iva) daoRiga = RigaMovimento() daoRiga.valore_unitario_lordo = riga.prezzo daoRiga.valore_unitario_netto = riga.prezzo_scontato daoRiga.quantita = riga.quantitaaa daoRiga.moltiplicatore = 1 daoRiga.descrizione = riga.descrizione daoRiga.id_magazzino = self.idMagazzino daoRiga.id_articolo = riga.id_articolo daoRiga.percentuale_iva = iva.percentuale scontiRigheMovimento= [] if riga.sconti: for s in riga.sconti: daoScontoRigaMovimento = ScontoRigaMovimento() daoScontoRigaMovimento.valore = s.valore daoScontoRigaMovimento.tipo_sconto = s.tipo_sconto scontiRigheMovimento.append(daoScontoRigaMovimento) daoRiga.scontiRigheMovimento = scontiRigheMovimento scontiRigheMovimento= [] righeMovimento.append(daoRiga) daoMovimento.righeMovimento = righeMovimento daoMovimento.persist() # Creo nuova chiusura daoChiusura = ChiusuraFiscale() daoChiusura.data_chiusura = datefirst daoChiusura.id_magazzino = self.idMagazzino daoChiusura.id_pos = self.idPuntoCassa daoChiusura.persist() # Creo il file filechiusura = self.create_fiscal_close_file() # Mando comando alle casse #if hasattr(Environment.conf, "VenditaDettaglio"): #if not(hasattr(Environment.conf.VenditaDettaglio,'disabilita_stampa_chiusura') and \ #Environment.conf.VenditaDettaglio.disabilita_stampa_chiusura == 'yes'): #program_launch = Environment.conf.VenditaDettaglio.driver_command #program_params = (' ' + filechiusura + ' ' + #Environment.conf.VenditaDettaglio.serial_device) #if os.name == 'nt': #exportingProcessPid = os.spawnl(os.P_NOWAIT, program_launch, program_params) #id, ret_value = os.waitpid(exportingProcessPid, 0) #ret_value = ret_value >> 8 #else: #command = program_launch + program_params #process = popen2.Popen3(command, True) #message = process.childerr.readlines() #ret_value = process.wait() #else: #ret_value = 0 if setconf("VenditaDettaglio", "disabilita_stampa_chiusura"): ret_value = 0 else: ret_value = 0 # Elimino il file #os.remove(filechiusura) if ret_value != 0: string_message = '' for s in message: string_message = string_message + s + "\n" # Mostro messaggio di errore messageError(msg=string_message, transient=self.gladeobj.getTopLevel()) # Elimino il movimento e la chiusura daoChiusura.delete() daoChiusura = None daoMovimento.delete() daoMovimento = None if daoMovimento is not None: # Associo movimento agli scontrini for scontrino in scontrini: daoScontrino = TestataScontrino().getRecord(id=scontrino.id) daoScontrino.id_testata_movimento = daoMovimento.id daoScontrino.persist(chiusura= True) # Svuoto transazione self.on_empty_button_clicked(self.gladeobj.empty_button) self.fineElaborazione()