예제 #1
0
    def save(self, product):
        self.tipoArticolo = None
        self.articoloPadre = None
        self.daoArticolo = None
        """Gets the existing Dao"""
        self.product = product
#        print "dissss", self.__dict__
        for key in possibleFieldsDict.keys():
            if key not in self.product.keys():
                setattr(self, possibleFieldsDict[key], None)
            else:
                setattr(self, possibleFieldsDict[key], self.product[key])
        print "SELF CODICE ARTICO", self.codice_articolo
        if self.codice_articolo:
            try:
                self.daoArticolo = Articolo().select(codiceEM=self.codice_articolo)[0]
                print "CODICE GIÀ PRESENTE NEL DATABASE"
            except:
                print "CODICE %s NON TROVATO" %self.codice_articolo

        elif self.codice_barre_articolo:
            daoCodiceABarre = CodiceABarreArticolo().select(codiceEM=self.codice_barre_articolo)
            if daoCodiceABarre:
                self.daoArticolo = Articolo().getRecord(id=daoCodiceABarre[0].id_articolo)
        elif self.codice_fornitore:
            daoFornitura = Fornitura().select(codiceArticoloFornitoreEM=self.codice_fornitore)
            if len(daoFornitura) == 1:
                self.daoArticolo = Articolo().getRecord(id=daoFornitura[0].id_articolo)
        #Non ho trovato un articolo esistente ne' come codice ne' come cbarre
        #o cod fornitore ne istanzio uno nuovo

        if not self.daoArticolo:
            print "ISTANZIO UN NUOVO ARTICOLO"
            self.daoArticolo = Articolo()
        if posso("PW"):
            if self.codice_padre and self.codice_articolo:
                print "ARTICOLO PADRE"
                self.tipoArticolo = "FATHER"
                self.addTagliaColoreData(tipo = self.tipoArticolo, articolo = self.daoArticolo)
                self.articoloPadre = None
            elif self.codice_padre and not self.codice_articolo:
                print "ARTICOLO FIGLIO", self.codice_padre
                padre = Articolo().select(codiceEM=self.codice_padre)
                if not padre:
                    print "ERROREEEEEEEEE  non può essere caricato un figlio senza il padre"
                else:
                    self.articoloPadre = padre[0]
                    self.tipoArticolo = "SON"
                    codice = self.articoloPadre.codice + self.gruppo_taglia[0:3] + self.taglia + self.colore
                    test = Articolo().select(codiceEM= codice)
                    if test:
                        self.daoArticolo = test[0]
                    self.addTagliaColoreData(tipo = self.tipoArticolo,
                                        articoloPadre=self.articoloPadre,
                                        articolo = self.daoArticolo)
            elif not self.codice_padre and self.codice_articolo:
                print "ARTICOLO NORMALE"

        self.fillDaos()
    def __init__(self):
        GladeWidget.__init__(self,
                    root='anagrafica_articoli_semplice_dialog',
                    path='anagrafica_articoli_semplice_dialog.glade')

        self.placeWindow(self.getTopLevel())
        self._loading = False
        self._codiceByFamiglia = promogest.dao.Articolo.isNuovoCodiceByFamiglia()

        # Crea un nuovo Dao vuoto
        self.daoArticolo = Articolo()
        self.daoCodiceABarreArticolo = None
        self.daoListinoArticolo = None

        # Assegna il codice se ne e' prevista la crazione automatica, ma non per famiglia
        if not self._codiceByFamiglia:
            self.daoArticolo.codice = promogest.dao.Articolo.getNuovoCodiceArticolo()

        self.draw()
예제 #3
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()
예제 #4
0
def articolo_table(soup=None, op=None, dao=None, row=None, all=False):
    d = None
    if soup and not all:
        record = soup.articolo.get(loads(row.object))
    else:
        record = row
    if op == "DELETE":
        if all:
            d = Articolo().getRecord(id=row.id)
        else:
            d = Articolo().getRecord(id=loads(row.object))
        if d:
            d.delete()
        return True
    elif op == "INSERT":
        if all:
            d = Articolo()
            d.id = record.id
        else:
            d = Articolo().getRecord(id=loads(row.object))
    elif op == "UPDATE":
        if all:
            d = Articolo().getRecord(id=row.id)
        else:
            d = Articolo().getRecord(id=loads(row.object))
        if not d:
            d = Articolo()
            d.id = record.id

    d.codice = record.codice
    d.denominazione = record.denominazione
    d.id_aliquota_iva = record.id_aliquota_iva
    d.id_famiglia_articolo = record.id_famiglia_articolo
    d.id_categoria_articolo = record.id_categoria_articolo
    d.id_immagine = record.id_immagine
    d.id_unita_base = record.id_unita_base
    d.id_stato_articolo = record.id_stato_articolo
    d.produttore = record.produttore
    d.unita_dimensioni = record.unita_dimensioni
    d.lunghezza = record.lunghezza
    d.larghezza = record.larghezza
    d.altezza = record.altezza
    d.unita_volume = record.unita_volume
    d.volume = record.volume
    d.unita_peso = record.unita_peso
    d.peso_lordo = record.peso_lordo
    d.id_imballaggio = record.id_imballaggio
    d.peso_imballaggio = record.peso_imballaggio
    d.stampa_etichetta = record.stampa_etichetta
    d.codice_etichetta = record.codice_etichetta
    d.descrizione_etichetta = record.descrizione_etichetta
    d.stampa_listino = record.stampa_listino
    d.descrizione_listino = record.descrizione_listino
    d.aggiornamento_listino_auto = record.aggiornamento_listino_auto
    d.timestamp_variazione = record.timestamp_variazione
    d.note = record.note
    d.contenuto = record.contenuto
    d.cancellato = record.cancellato
    d.sospeso = record.sospeso
    d.quantita_minima = record.quantita_minima
    a = d.persist()
    if not a:
        g = Articolo().select(codice=record.codice)
        if g:
            g = g[0]
            g.codice = g.codice + "BIS"
            b = g.persist()
            if not b:
                print "PROPRIO NON SO COSA FARE HO ANCHE  CAMBIATO IL CODICE"
            articolo_table(soup=soup, op=op, dao=dao, row=row, all=all)
    return True
class AnagraficaArticoliSemplice(GladeWidget):

    def __init__(self):
        GladeWidget.__init__(self,
                    root='anagrafica_articoli_semplice_dialog',
                    path='anagrafica_articoli_semplice_dialog.glade')

        self.placeWindow(self.getTopLevel())
        self._loading = False
        self._codiceByFamiglia = promogest.dao.Articolo.isNuovoCodiceByFamiglia()

        # Crea un nuovo Dao vuoto
        self.daoArticolo = Articolo()
        self.daoCodiceABarreArticolo = None
        self.daoListinoArticolo = None

        # Assegna il codice se ne e' prevista la crazione automatica, ma non per famiglia
        if not self._codiceByFamiglia:
            self.daoArticolo.codice = promogest.dao.Articolo.getNuovoCodiceArticolo()

        self.draw()


    def draw(self):
        #Popola combobox aliquote iva
        fillComboboxAliquoteIva(self.id_aliquota_iva_customcombobox.combobox)
        self.id_aliquota_iva_customcombobox.connect('clicked',
                                                    on_id_aliquota_iva_customcombobox_clicked)
        #Popola combobox categorie articolo
        fillComboboxCategorieArticoli(self.id_categoria_articolo_customcombobox.combobox)
        self.id_categoria_articolo_customcombobox.connect('clicked',
                                                          on_id_categoria_articolo_customcombobox_clicked)
        #Popola combobox famiglie articolo
        fillComboboxFamiglieArticoli(self.id_famiglia_articolo_customcombobox.combobox)
        self.id_famiglia_articolo_customcombobox.connect('clicked',
                                                         on_id_famiglia_articolo_customcombobox_clicked)
        if self._codiceByFamiglia:
            #Collega la creazione di un nuovo codice articolo al cambiamento della famiglia
            self.id_famiglia_articolo_customcombobox.combobox.connect('changed',
                                                                      self.on_id_famiglia_articolo_customcombobox_changed)
        #Popola combobox listini
        fillComboboxListini(self.id_listino_customcombobox.combobox)
        self.id_listino_customcombobox.connect('clicked',
                                               on_id_listino_customcombobox_clicked)
        self.id_listino_customcombobox.combobox.connect('changed',
                                                        self.on_id_listino_customcombobox_changed)

        #Popola combobox unita base
        fillComboboxUnitaBase(self.id_unita_base_combobox)

        # Seleziona Pezzi come unita' di default
        findComboboxRowFromId(self.id_unita_base_combobox, 1)

        # Seleziona il listino di default
        try:
            findComboboxRowFromStr(self.id_listino_customcombobox.combobox, Environment.conf.Dettaglio.listino, 2)
        except:
            pass

        if self._codiceByFamiglia:
            self.codice_a_barre_entry.grab_focus()
        else:
            self.codice_entry.set_text(self.daoArticolo.codice or '')
            if emptyStringToNone(self.daoArticolo.codice) is None:
                self.codice_entry.grab_focus()
            else:
                self.codice_a_barre_entry.grab_focus()

        self.getTopLevel().show_all()


    def on_confirm_button_clicked(self, button=None):
        if (self.codice_entry.get_text() == ''):
            obligatoryField(self.getTopLevel(), self.codice_entry)

        if (self.denominazione_entry.get_text() == ''):
            obligatoryField(self.getTopLevel(), self.denominazione_entry)

        if (self.produttore_entry.get_text() == ''):
            obligatoryField(self.getTopLevel(), self.produttore_entry)

        if findIdFromCombobox(self.id_famiglia_articolo_customcombobox.combobox) is None:
            obligatoryField(self.getTopLevel(), self.id_famiglia_articolo_customcombobox.combobox)

        if findIdFromCombobox(self.id_categoria_articolo_customcombobox.combobox) is None:
            obligatoryField(self.getTopLevel(), self.id_categoria_articolo_customcombobox.combobox)

        if findIdFromCombobox(self.id_aliquota_iva_customcombobox.combobox) is None:
            obligatoryField(self.getTopLevel(), self.id_aliquota_iva_customcombobox.combobox)

        if findIdFromCombobox(self.id_unita_base_combobox) is None:
            obligatoryField(self.getTopLevel(), self.id_unita_base_combobox)

        # controllo esistenza codice articolo
        arts = Articolo().select(codice = self.codice_entry.get_text(),
                                                        offset = None,
                                                        batchSize = None)

        if len(arts) > 0:
            messageInfo(msg="Codice articolo gia' assegnato: !")
            self.codice_entry.grab_focus()
            raise Exception, 'Operation aborted'

        # controllo esistenza codice a barre su altro articolo
        bars = CodiceABarreArticolo().select(idArticolo=None,
                                    codice=self.codice_a_barre_entry.get_text(),
                                    offset=None,
                                    batchSize=None)
        if len(bars) > 0:
            articolo = leggiArticolo(bars[0].id_articolo)
            msg = "Codice a barre gia' assegnato all'articolo: \n\nCod. " + articolo["codice"] + " (" + articolo["denominazione"] + ")"
            messageInfo(msg=msg)
            self.codice_a_barre_entry.grab_focus()
            raise Exception, 'Operation aborted'

        self.save()
        self.quit()


    def save(self):
        """ Salvataggio nuovo articolo """
        try:
            self.daoArticolo.codice = self.codice_entry.get_text()
            self.daoArticolo.denominazione = self.denominazione_entry.get_text()
            self.daoArticolo.id_aliquota_iva = findIdFromCombobox(self.id_aliquota_iva_customcombobox.combobox)
            self.daoArticolo.id_famiglia_articolo = findIdFromCombobox(self.id_famiglia_articolo_customcombobox.combobox)
            self.daoArticolo.id_categoria_articolo = findIdFromCombobox(self.id_categoria_articolo_customcombobox.combobox)
            self.daoArticolo.id_unita_base = findIdFromCombobox(self.id_unita_base_combobox)
            self.daoArticolo.produttore = self.produttore_entry.get_text()
            self.daoArticolo.cancellato = False
            self.daoArticolo.sospeso = False
            self.daoArticolo.url_immagine=None
            self.daoArticolo.id_immagine=None
            self.daoArticolo.persist()

            if self.codice_a_barre_entry.get_text() != '':
                self.daoCodiceABarreArticolo = CodiceABarreArticolo()
                self.daoCodiceABarreArticolo.codice = self.codice_a_barre_entry.get_text()
                self.daoCodiceABarreArticolo.id_articolo = self.daoArticolo.id
                self.daoCodiceABarreArticolo.primario = True
                self.daoCodiceABarreArticolo.persist()

            if findIdFromCombobox(self.id_listino_customcombobox.combobox) is not None:
                try:
                    prezzoDettaglio = float(self.prezzo_dettaglio_entry.get_text())
                except:
                    self.prezzo_dettaglio_entry.set_text('')
                    prezzoDettaglio = float(0)
                try:
                    prezzoIngrosso = float(self.prezzo_ingrosso_entry.get_text())
                except:
                    self.prezzo_ingrosso_entry.set_text('')
                    prezzoIngrosso = float(0)

                if prezzoDettaglio > 0 or prezzoIngrosso > 0:
                    self.daoListinoArticolo = ListinoArticolo()
                    self.daoListinoArticolo.id_listino = findIdFromCombobox(self.id_listino_customcombobox.combobox)
                    self.daoListinoArticolo.id_articolo = self.daoArticolo.id
                    self.daoListinoArticolo.prezzo_dettaglio = prezzoDettaglio
                    self.daoListinoArticolo.prezzo_ingrosso = prezzoIngrosso
                    self.daoListinoArticolo.ultimo_costo = float(0)
                    self.daoListinoArticolo.data_listino_articolo = datetime.datetime.today()
                    self.daoListinoArticolo.listino_attuale = True
                    self.daoListinoArticolo.persist()
        except:
            raise


    def on_id_famiglia_articolo_customcombobox_changed(self, combobox):
        """ Restituisce un nuovo codice articolo al cambiamento della famiglia """

        if self._loading:
            return

        if not self._codiceByFamiglia:
            return

        idFamiglia = findIdFromCombobox(self.id_famiglia_articolo_customcombobox.combobox)
        if idFamiglia is not None:
            self.daoArticolo.codice = promogest.dao.Articolo.getNuovoCodiceArticolo(idFamiglia)
            self.codice_entry.set_text(self.daoArticolo.codice)


    def on_id_listino_customcombobox_changed(self, combobox):
        """ Abilita/disabilita i campi prezzo """

        idListino = findIdFromCombobox(self.id_listino_customcombobox.combobox)
        self.prezzo_dettaglio_entry.set_sensitive(idListino is not None)
        self.prezzo_ingrosso_entry.set_sensitive(idListino is not None)


    def on_anagrafica_articoli_semplice_dialog_close(self, widget, event=None):
        self.quit()


    def quit(self):
        self.destroy()
        return None
예제 #6
0
class ProductFromCsv(object):
    """Takes a product from a generic price list and "translates" it in a
    promogest-compatible dao product, ListinoArticolo and Fornitura"""

    def __init__(self, listaRighe=None,
                    PLModel=None, promoPriceList=None,
                    idfornitore=None, dataListino=None, createData=False):
        self.PLModel = PLModel
        self.listaRighe = listaRighe
        self.promoPriceList = promoPriceList or None
        self.fornitore = idfornitore
        self.dataListino = dataListino
        self.daoArticolo = None
        if self.promoPriceList:
            liss = Listino().select(idListino=self.promoPriceList, batchSize=None)
            if liss:
                self.price_list_id = liss[0].id
            del self.promoPriceList
        self.defaults = self.PLModel._defaultAttributes
        if createData and posso("PW"):
            self.addGruppiTaglia()
        self.listaRighe = []

    def addGruppiTaglia(self):
        for riga in self.listaRighe:
            if "Gruppo Taglia" in riga and \
                    riga["Gruppo Taglia"] and \
                    "Taglia" in riga and\
                    riga["Taglia"] == "":
                gruppo_taglia = GruppoTaglia().select(denominazione = riga["Gruppo Taglia"])
                if not gruppo_taglia:
                    a = GruppoTaglia()
                    a.denominazione = riga["Gruppo Taglia"]
                    a.denominazione_breve = riga["Gruppo Taglia"]
                    a.persist()
            elif "Gruppo Taglia" in riga and \
                        riga["Gruppo Taglia"] and\
                        "Taglia" in riga and\
                        riga["Taglia"]:
                _taglia = Taglia().select(denominazione = riga["Taglia"])
                if not _taglia:
                    t = Taglia()
                    t.denominazione = riga["Taglia"]
                    t.denominazione_breve = riga["Taglia"]
                    t.persist()
                tid = Taglia().select(denominazione = riga["Taglia"])[0].id
                gtids = GruppoTaglia().select(denominazione = riga["Gruppo Taglia"])
                if gtids:
                    gtid =  gtids[0].id
                if tid and gtid:
                    gtt = GruppoTagliaTaglia().select(idGruppoTaglia= gtid,
                                                    idTaglia = tid)
                    if not gtt:
                        numero_taglie = GruppoTagliaTaglia().count(idGruppoTaglia= gtid)
                        gtt = GruppoTagliaTaglia()
                        gtt.id_gruppo_taglia = gtid
                        gtt.id_taglia = tid
                        gtt.ordine = (numero_taglie or 1) +1
                        gtt.persist()
            if "Modello" in riga and riga["Modello"]:
                mo = Modello().select(denominazione = riga["Modello"])
                if not mo:
                    mm = Modello()
                    mm.denominazione = riga["Modello"]
                    mm.denominazione_breve = riga["Modello"]
                    mm.persist()

            if "Colore" in riga and riga["Colore"]:
                co = Colore().select(denominazione = riga["Colore"])
                if not co:
                    c = Colore()
                    c.denominazione = riga["Colore"]
                    c.denominazione_breve = riga["Colore"]
                    c.persist()

    def save(self, product):
        self.tipoArticolo = None
        self.articoloPadre = None
        self.daoArticolo = None
        """Gets the existing Dao"""
        self.product = product
#        print "dissss", self.__dict__
        for key in possibleFieldsDict.keys():
            if key not in self.product.keys():
                setattr(self, possibleFieldsDict[key], None)
            else:
                setattr(self, possibleFieldsDict[key], self.product[key])
        print "SELF CODICE ARTICO", self.codice_articolo
        if self.codice_articolo:
            try:
                self.daoArticolo = Articolo().select(codiceEM=self.codice_articolo)[0]
                print "CODICE GIÀ PRESENTE NEL DATABASE"
            except:
                print "CODICE %s NON TROVATO" %self.codice_articolo

        elif self.codice_barre_articolo:
            daoCodiceABarre = CodiceABarreArticolo().select(codiceEM=self.codice_barre_articolo)
            if daoCodiceABarre:
                self.daoArticolo = Articolo().getRecord(id=daoCodiceABarre[0].id_articolo)
        elif self.codice_fornitore:
            daoFornitura = Fornitura().select(codiceArticoloFornitoreEM=self.codice_fornitore)
            if len(daoFornitura) == 1:
                self.daoArticolo = Articolo().getRecord(id=daoFornitura[0].id_articolo)
        #Non ho trovato un articolo esistente ne' come codice ne' come cbarre
        #o cod fornitore ne istanzio uno nuovo

        if not self.daoArticolo:
            print "ISTANZIO UN NUOVO ARTICOLO"
            self.daoArticolo = Articolo()
        if posso("PW"):
            if self.codice_padre and self.codice_articolo:
                print "ARTICOLO PADRE"
                self.tipoArticolo = "FATHER"
                self.addTagliaColoreData(tipo = self.tipoArticolo, articolo = self.daoArticolo)
                self.articoloPadre = None
            elif self.codice_padre and not self.codice_articolo:
                print "ARTICOLO FIGLIO", self.codice_padre
                padre = Articolo().select(codiceEM=self.codice_padre)
                if not padre:
                    print "ERROREEEEEEEEE  non può essere caricato un figlio senza il padre"
                else:
                    self.articoloPadre = padre[0]
                    self.tipoArticolo = "SON"
                    codice = self.articoloPadre.codice + self.gruppo_taglia[0:3] + self.taglia + self.colore
                    test = Articolo().select(codiceEM= codice)
                    if test:
                        self.daoArticolo = test[0]
                    self.addTagliaColoreData(tipo = self.tipoArticolo,
                                        articoloPadre=self.articoloPadre,
                                        articolo = self.daoArticolo)
            elif not self.codice_padre and self.codice_articolo:
                print "ARTICOLO NORMALE"

        self.fillDaos()

    def addTagliaColoreData(self, tipo =None, articolo=None, articoloPadre=None):
        """
        modello, genere, colore, gruppo taglia, taglia, stagione, anno
        """
        artTC = None
        if articolo and articolo.id and tipo == "FATHER":
            artTC = ArticoloTagliaColore().select(idArticolo = articolo.id)
        elif articolo and articolo.id and articoloPadre and tipo =="SON":
            artTC = ArticoloTagliaColore().select(idArticolo = articolo.id,
                                            idArticoloPadre=articoloPadre.id)

        if artTC:
            artTC = artTC[0]
        else:
            artTC = ArticoloTagliaColore()
            if tipo =="SON":
                artTC.id_articolo_padre = articoloPadre.id
        #MODELLO
        if self.modello:
            mode = Modello().select(denominazione = self.modello)
            artTC.id_modello = mode[0].id
        elif not self.modello:
            try:
                artTC.id_modello = articoloPadre.id_modello
            except:
                print " questo csv non ha modello"
        #ANNO
        if self.anno:
            anno = AnnoAbbigliamento().select(denominazione = self.anno)
            artTC.id_anno = anno[0].id
        elif not self.anno:
            artTC.id_annno = articoloPadre.id_anno
        #GENERE
        if self.genere:
            genere = GenereAbbigliamento().select(denominazione = self.genere.capitalize())
            artTC.id_genere = genere[0].id
        elif not self.genere:
            artTC.id_genere = articoloPadre.id_genere
        #GRUPPO TAGLIA
        if self.gruppo_taglia:
            gruppo_taglia = GruppoTaglia().select(denominazione = self.gruppo_taglia)[0].id
            artTC.id_gruppo_taglia = gruppo_taglia
        elif not self.gruppo_taglia:
            artTC.id_gruppo_taglia = articoloPadre.id_gruppo_taglia
        #TAGLIA
        if self.taglia:
            taglia = Taglia().select(denominazione = self.taglia)[0].id
            artTC.id_taglia = taglia
        #COLORE
        if self.colore:
            artTC.id_colore = Colore().select(denominazione = self.colore)[0].id
        #STAGIONE
        if self.stagione:
            stagione = StagioneAbbigliamento().select(denominazione = self.stagione)
            if stagione:
                artTC.id_stagione = stagione[0].id
        elif not self.stagione:
            artTC.id_stagione = articoloPadre.id_stagione
        self.daoArticolo.articoloTagliaColore = artTC
        artTC = None

    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

    def checkDecimalSymbol(self, number, symbol):
        """ adjust non decimal simbols """
        if number is None:
            return str(0)

        if symbol == '.':
            number = str(number).replace(',', '')
        elif symbol == ',':
            number = str(number).replace('.', '')
            number = str(number).replace(',', '.')
        return number

    def sanitizer(self, value):
        if value:
            value = value.strip()
            value = value.replace("€", "")
            value = value.replace("%", "")
            value = value.replace(",", ".")
        return value
예제 #7
0
    def on_ok_button_clicked(self, button):
        for dat in self.datas:
            codici = None
            articoloPadre = dat[0]
            if dat[1].__module__ =="promogest.modules.PromoWear.dao.Taglia":
                daoTaglia = dat[1]
                daoColore = dat[2]
            else:
                daoColore = dat[1]
                daoTaglia = dat[2]
            codiceabarre = dat[3]
            articoloFiglio = dat[4]
            if codiceabarre:
                if articoloFiglio:
                #verifico la correttezza del codice a barre della variante già esistente
                # in precedenza
                    if codiceabarre != articoloFiglio.codice_a_barre:
                        codici = CodiceABarreArticolo().select(codiceEM=codiceabarre,
                                                                offset=None,
                                                                batchSize=None)
                else:
                    codici = CodiceABarreArticolo().select(codiceEM=codiceabarre,
                                                                offset=None,
                                                                batchSize=None)
                if codici:
                        msg = """Attenzione !
Il codice a barre  %s è gia' presente nel Database, ricontrolla!""" % codiceabarre
                        dialog = gtk.MessageDialog(self.getTopLevel(), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                                       GTK_DIALOG_MESSAGE_QUESTION, GTK_BUTTON_OK, msg)
                        response = dialog.run()
                        dialog.destroy()
                        return
            if articoloFiglio:
                #aggiorno articoloesistenze può essere cambiato solo il codice a barre
                if codiceabarre and codiceabarre != articoloFiglio.codice_a_barre:
                    codici = CodiceABarreArticolo().select(codiceEM=codiceabarre,
                                                                    offset=None,
                                                                    batchSize=None)
                    if not codici:
                        cba = CodiceABarreArticolo()
                        cba.codice = codiceabarre
                        cba.id_articolo = articoloFiglio.id
                        cba.primario = True
                        cba.persist()
            else:
                #inserisco la nuova variazione articolo ed il relativo codice a barre
                articolo = Articolo()
                articolo.codice = articoloPadre.codice + articoloPadre.denominazione_gruppo_taglia[0:3] + daoTaglia.denominazione_breve + daoColore.denominazione_breve
                articolo.denominazione = articoloPadre.denominazione + ' ' + daoTaglia.denominazione_breve + ' ' + daoColore.denominazione
                articolo.id_aliquota_iva = articoloPadre.id_aliquota_iva
                articolo.id_famiglia_articolo = articoloPadre.id_famiglia_articolo
                articolo.id_categoria_articolo = articoloPadre.id_categoria_articolo
                articolo.id_unita_base = articoloPadre.id_unita_base
                articolo.id_stato_articolo = articoloPadre.id_stato_articolo
                articolo.id_imballaggio = articoloPadre.id_imballaggio
                articolo.produttore = articoloPadre.produttore
                articolo.unita_dimensioni = articoloPadre.unita_dimensioni
                articolo.unita_volume = articoloPadre.unita_volume
                articolo.unita_peso = articoloPadre.unita_peso
                articolo.lunghezza = articoloPadre.lunghezza
                articolo.larghezza = articoloPadre.larghezza
                articolo.altezza = articoloPadre.altezza
                articolo.volume = articoloPadre.volume
                articolo.peso_lordo = articoloPadre.peso_lordo
                articolo.peso_imballaggio = articoloPadre.peso_imballaggio
                articolo.stampa_etichetta = articoloPadre.stampa_etichetta
                articolo.codice_etichetta = articoloPadre.codice_etichetta
                articolo.descrizione_etichetta = articoloPadre.descrizione_etichetta
                articolo.stampa_listino = articoloPadre.stampa_listino
                articolo.descrizione_listino = articoloPadre.descrizione_listino
                articolo.note = articoloPadre.note
                articolo.sospeso = articoloPadre.sospeso
                articolo.cancellato = articoloPadre.cancellato
                articolo.aggiornamento_listino_auto = articoloPadre.aggiornamento_listino_auto
                articolo.persist()

                articoloTagliaColore = ArticoloTagliaColore()
                articoloTagliaColore.id_articolo = articolo.id
                articoloTagliaColore.id_articolo_padre = articoloPadre.id
                articoloTagliaColore.id_gruppo_taglia = articoloPadre.id_gruppo_taglia
                articoloTagliaColore.id_taglia = daoTaglia.id
                articoloTagliaColore.id_colore = daoColore.id
                if articoloPadre.id_anno == "":
                    articoloTagliaColore.id_anno = None
                else:
                    articoloTagliaColore.id_anno = articoloPadre.id_anno
                if articoloPadre.id_stagione == "":
                    articoloTagliaColore.id_stagione = None
                else:
                    articoloTagliaColore.id_stagione = articoloPadre.id_stagione
                if articoloPadre.id_genere == "":
                    articoloTagliaColore.id_genere = None
                else:
                    articoloTagliaColore.id_genere = articoloPadre.id_genere
                articoloTagliaColore.persist()
                if codiceabarre:
                    codici = CodiceABarreArticolo().select(codiceEM=codiceabarre,
                                                                    offset=None,
                                                                    batchSize=None)
                    if not codici:
                        cba = CodiceABarreArticolo()
                        cba.codice = codiceabarre
                        cba.id_articolo = articolo.id
                        cba.primario = True
                        cba.persist()
        self.destroy()