예제 #1
0
    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()
예제 #2
0
    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()
예제 #3
0
    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()
예제 #4
0
    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()