/core/promogest/ui/anagDocumenti/AnagraficaDocumentiEdit.py
Python | 1258 lines | 1211 code | 12 blank | 35 comment | 5 complexity | e1b3a712ec22a3a52f1b0928522b5404 MD5 | raw file
Possible License(s): GPL-2.0
Large files files are truncated, but you can click here to view the full file
- # -*- coding: utf-8 -*-
- # Copyright (C) 2005, 2006, 2007 2008, 2009, 2010, 2011 by Promotux
- # di Francesco Meloni snc - http://www.promotux.it/
- # Authors:
- # Andrea Argiolas <andrea@promotux.it>
- # JJDaNiMoTh <jjdanimoth@gmail.com>
- # Dr astico (Marco Pinna) <marco@promotux.it>
- # Francesco Meloni <francesco@promotux.it>
- # Francesco Marella <francesco.marella@gmail.com>
- # This file is part of Promogest.
- # Promogest is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 2 of the License, or
- # (at your option) any later version.
- # Promogest is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- # You should have received a copy of the GNU General Public License
- # along with Promogest. If not, see <http://www.gnu.org/licenses/>.
- from promogest.ui.gtk_compat import *
- import datetime
- from promogest import Environment
- from promogest.ui.AnagraficaComplessaEdit import AnagraficaEdit
- from promogest.ui.anagDocumenti.AnagraficaDocumentiEditUtils import *
- from promogest.dao.TestataDocumento import TestataDocumento
- from promogest.dao.TestataMovimento import TestataMovimento
- from promogest.dao.RigaDocumento import RigaDocumento
- from promogest.dao.ScontoRigaDocumento import ScontoRigaDocumento
- from promogest.dao.ScontoTestataDocumento import ScontoTestataDocumento
- from promogest.dao.ScontoVenditaDettaglio import ScontoVenditaDettaglio
- from promogest.dao.ScontoVenditaIngrosso import ScontoVenditaIngrosso
- from promogest.dao.Articolo import Articolo
- from promogest.dao.Magazzino import Magazzino
- from promogest.dao.Operazione import Operazione
- from promogest.dao.Cliente import Cliente
- from promogest.dao.Multiplo import Multiplo
- from promogest.dao.Pagamento import Pagamento
- from promogest.dao.AliquotaIva import AliquotaIva
- #from promogest.dao.RigaRitenutaAcconto import RigaRitenutaAcconto
- from promogest.modules.PrimaNota.dao.TestataPrimaNota import TestataPrimaNota
- from promogest.ui.DettaglioGiacenzaWindow import DettaglioGiacenzaWindow
- from promogest.ui.utils import *
- from promogest.ui.utilsCombobox import *
- from promogest.dao.DaoUtils import giacenzaArticolo
- if posso("PW"):
- from promogest.modules.PromoWear.ui import AnagraficaDocumentiEditPromoWearExt
- if posso("SM"):
- from promogest.modules.SuMisura.ui import AnagraficaDocumentiEditSuMisuraExt
- from promogest.modules.SuMisura.dao.MisuraPezzo import MisuraPezzo
- if posso("GN"):
- from promogest.modules.GestioneNoleggio.ui import AnagraficaDocumentiEditGestioneNoleggioExt
- if posso("PA"):
- from promogest.modules.Pagamenti.ui import AnagraficadocumentiPagamentExt
- if posso("ADR"):
- from promogest.modules.ADR.ui import AnagraficaDocumentiEditADRExt
- class AnagraficaDocumentiEdit(AnagraficaEdit):
- """ Modifica un record dei documenti """
- def __init__(self, anagrafica):
- AnagraficaEdit.__init__(self,
- anagrafica,
- 'anagrafica_documenti_detail_vbox',
- 'Dati Documento',
- 'anagrafica_documenti.glade')
- # self.placeWindow(self.getTopLevel())
- self._widgetFirstFocus = self.data_documento_entry
- # contenitore (dizionario) righe (riga 0 riservata per variazioni in corso)
- self._righe = []
- self._righe.append({})
- # numero riga corrente
- self._numRiga = 0
- self.noClean=False
- # iteratore riga corrente
- self._iteratorRiga = None
- # cliente o fornitore ?
- self._tipoPersonaGiuridica = None
- self._operazione = None
- self.mattu = False
- # prezzo vendita/acquisto, ivato/non ivato
- self._fonteValore = None
- # carico (+) o scarico (-)
- self._segno = None
- # pagamento preferenziale dell'intestatario
- self._id_pagamento = None
- # magazzino preferenziale dell'intestatario
- self._id_magazzino = None
- # listino preferenziale dell'intestatario
- self._id_listino = None
- # banca preferenziale dell'intestatario
- self._id_banca = None
- # caricamento documento (interrompe l'azione degli eventi on_changed nelle combobox)
- self._loading = False
- # risposta richiesta variazione listini per costo variato: 'yes', 'no', 'all', 'none'
- self._variazioneListiniResponse = ''
- # mostrare variazione listini ?
- self._variazioneListiniShow = True
- #campi controllo modifica
- self._controllo_data_documento = None
- self._controllo_numero_documento = None
- self.reuseDataRow = False
- self.NoRowUsableArticle = False
- self.noleggio = True
- self.oneshot = False
- self.tagliaColoreRigheList = None
- self.visualizza_prezzo_alternativo = False
- # Inizializziamo i moduli in interfaccia!
- #self.draw()
- self.completion = self.ricerca_articolo_entrycompletition
- if Environment.pg3:
- self.completion.set_match_func(self.match_func,None)
- else:
- self.completion.set_match_func(self.match_func)
- self.completion.set_text_column(0)
- self.articolo_entry.set_completion(self.completion)
- self.sepric = " ~ "
- self.articolo_matchato = None
- self.checkMAGAZZINO = True
- # self.completion.set_minimum_key_length(3)
- # if not posso("PA"):
- # self.notebook.remove_page(3)
- if posso("PW"):
- self.promowear_manager_taglia_colore_togglebutton.set_property("visible", True)
- self.promowear_manager_taglia_colore_togglebutton.set_sensitive(False)
- else:
- hidePromoWear(self)
- if not posso("SM"):
- hideSuMisura(self)
- if not posso("GN"):
- self.rent_checkbutton.destroy()
- self.hbox29.destroy()
- self.hbox30.destroy()
- self.arco_temporale_frame.destroy()
- self.noleggio_frame.destroy()
- self.noleggio = False
- self.prezzo_aquisto_entry.destroy()
- self.label38.destroy()
- self.label40.destroy()
- self.totale_periodo_label.destroy()
- if not posso("ADR"):
- hideADR(self)
- def draw(self, cplx=False):
- self.cplx = cplx
- drawPart (self)
- def on_scorporo_button_clicked(self, button):
- """ Bottone con una "s" minuscola, che permette di effettuare "al volo"
- lo scorporo di un valore finale nel campo prezzo """
- ivaobj = findStrFromCombobox(self.id_iva_customcombobox.combobox,0)
- if type(ivaobj) != type("CIAO"):
- iva = ivaobj.percentuale
- if iva == "" or iva == "0":
- messageInfo(msg="ATTENZIONE IVA a 0%")
- else:
- prezzoLordo = self.prezzo_lordo_entry.get_text()
- imponibile = float(prezzoLordo)/(1+float(iva)/100)
- self.prezzo_lordo_entry.set_text(str(mN(str(imponibile))))
- self.prezzo_lordo_entry.grab_focus()
- def on_switch_prezzo_button_clicked(self, button):
- idListino = findIdFromCombobox(self.id_listino_customcombobox.combobox)
- idArticolo = self._righe[0]["idArticolo"]
- prezzi = leggiListino(idListino, idArticolo)
- if not self.visualizza_prezzo_alternativo:
- self.prezzo_lordo_entry.set_text(str(prezzi["prezzoDettaglio"]))
- self.visualizza_prezzo_alternativo = True
- else:
- self.prezzo_lordo_entry.set_text(str(prezzi["prezzoIngrosso"]))
- self.visualizza_prezzo_alternativo = False
- def on_articolo_entry_focus_in_event(self, widget, event):
- """ controlliamo prima di effettuare una ricerca che il magazzino sia
- selezionato per rendere la ricerca possibile e corretta"""
- if not findIdFromCombobox(self.id_magazzino_combobox) and self.checkMAGAZZINO:
- messageInfo(msg="ATTENZIONE! \n SELEZIONARE UN MAGAZZINO\n PER UNA RICERCA CORRETTA")
- self.id_magazzino_combobox.grab_focus()
- self.checkMAGAZZINO = False
- def on_anagrafica_documenti_detail_vbox_key_press_event(self, widget=None, event=None):
- """ Mappiamo un po' di tasti su ana documenti"""
- keyname = gdk_keyval_name(event.keyval)
- if keyname == 'F4': # confermo e pulisco
- self.on_confirm_row_button_clicked(widget=None)
- elif keyname == 'F6': # confermo e non pulisco
- self.on_confirm_row_withoutclean_button_clicked(widget=None)
- def azzeraRiga(self, numero=0):
- """
- Azzera i campi del dizionario privato delle righe, alla riga
- indicata (o alla 0-esima)
- "ritAccPercentuale": 0,
- "rivalsaPercentuale": 0,
- "ritCaProvvigionale": False,
- "ritInarCassa":0
- """
- self._righe[numero] = {"idRiga": None,
- "idMagazzino": None,
- "magazzino": '',
- "idArticolo": None,
- "codiceArticolo": '',
- "descrizione": '',
- "percentualeIva": 0,
- "idAliquotaIva":None,
- "idUnitaBase": None,
- "unitaBase": '',
- "idMultiplo": None,
- "multiplo": '',
- "idListino": None,
- "listino": '',
- "quantita": 1,
- "moltiplicatore": 0,
- "prezzoLordo": 0,
- "applicazioneSconti": 'scalare',
- "sconti": [],
- "prezzoNetto": 0,
- "totale": 0,
- "codiceArticoloFornitore": '',
- "prezzoNettoUltimo": 0,
- "quantita_minima": None,
- "ritenute" : [],
- "numeroLottoArticoloFornitura":None,
- "dataScadenzaArticoloFornitura":None,
- "dataProduzioneArticoloFornitura":None,
- "dataPrezzoFornitura":None,
- "ordineMinimoFornitura":None,
- "tempoArrivoFornitura":None,
- }
- if posso("SM"):
- AnagraficaDocumentiEditSuMisuraExt.azzeraRiga(self,numero)
- if posso("PW"):
- AnagraficaDocumentiEditPromoWearExt.azzeraRiga(self,numero)
- if posso("GN"):
- AnagraficaDocumentiEditGestioneNoleggioExt.azzeraRiga(self,numero)
- def azzeraRigaPartial(self, numero = 0, rigatampone=None):
- """
- Azzera i campi del dizionario privato delle righe, alla riga
- indicata (o alla 0-esima)
- """
- self._righe[numero] = {"idRiga": None,
- "idMagazzino": rigatampone['idMagazzino'],
- "magazzino": rigatampone['magazzino'],
- "idArticolo": rigatampone['idArticolo'],
- "codiceArticolo": rigatampone['codiceArticolo'],
- "descrizione": rigatampone['descrizione'],
- "percentualeIva": rigatampone['percentualeIva'],
- "idAliquotaIva": rigatampone['idAliquotaIva'],
- "idUnitaBase": rigatampone['idUnitaBase'],
- "unitaBase": rigatampone['unitaBase'],
- "idMultiplo": rigatampone['idMultiplo'],
- "multiplo": rigatampone['multiplo'],
- "idListino": rigatampone['idListino'],
- "listino": rigatampone['listino'],
- "quantita": rigatampone['quantita'],
- "moltiplicatore": rigatampone['moltiplicatore'],
- "prezzoLordo": rigatampone['prezzoLordo'],
- "applicazioneSconti": 'scalare',
- "sconti": rigatampone['sconti'],
- "prezzoNetto": rigatampone['prezzoNetto'],
- "totale": rigatampone['totale'],
- "codiceArticoloFornitore": rigatampone['codiceArticoloFornitore'],
- "prezzoNettoUltimo": rigatampone['prezzoNettoUltimo'],
- "quantita_minima": rigatampone['quantita_minima'],
- "ritenute" : rigatampone['ritenute'],
- }
- if posso("SM"):
- AnagraficaDocumentiEditSuMisuraExt.azzeraRigaPartial(self,numero, rigatampone)
- def nuovaRiga(self):
- """
- Prepara per l'inserimento di una nuova riga
- """
- self._numRiga = 0
- self.azzeraRiga(0)
- self.articolo_entry.set_text('')
- self.unitaBaseLabel.set_text('')
- self.descrizione_entry.set_text('')
- self.codice_articolo_fornitore_entry.set_text('')
- self.numero_lotto_entry.set_text("")
- self.data_scadenza_datewidget.set_text('')
- self.data_produzione_datewidget.set_text('')
- self.ordine_minimo_entry.set_text('')
- self.tempo_arrivo_merce_entry.set_text('')
- self.data_prezzo_datewidget.set_text('')
- self.id_iva_customcombobox.combobox.set_active(-1)
- # self.percentuale_iva_entry.set_text('0')
- self.id_multiplo_customcombobox.combobox.clear()
- self.id_listino_customcombobox.combobox.clear()
- self.prezzo_lordo_entry.set_text('0')
- self.quantita_entry.set_text('1')
- self.prezzo_netto_label.set_text('0')
- self.sconti_widget.clearValues()
- self.totale_riga_label.set_text('0')
- self.giacenza_label.set_text('0')
- self.quantitaMinima_label.set_text('0')
- self.ritenuta_percentuale_entry.set_text('')
- self.rivalsa_percentuale_entry.set_text('')
- self.provvigionale_check.set_active(False)
- if posso("PW"):
- AnagraficaDocumentiEditPromoWearExt.setLabelInfo(self)
- if posso("SM"):
- AnagraficaDocumentiEditSuMisuraExt.setLabels(self)
- if posso("GN"):
- AnagraficaDocumentiEditGestioneNoleggioExt.setLabels(self)
- if posso("PA"):
- AnagraficadocumentiPagamentExt.nuovaRiga(self)
- AnagraficadocumentiPagamentExt.attiva_prima_scadenza(self,False, True)
- AnagraficadocumentiPagamentExt.attiva_seconda_scadenza(self,False, True)
- AnagraficadocumentiPagamentExt.attiva_terza_scadenza(self,False, True)
- AnagraficadocumentiPagamentExt.attiva_quarta_scadenza(self,False, True)
- if len(self._righe) > 1:
- self.data_documento_entry.set_sensitive(False)
- self.id_operazione_combobox.set_sensitive(False)
- self.id_persona_giuridica_customcombobox.set_sensitive(False)
- self.articolo_entry.grab_focus()
- else:
- self.data_documento_entry.set_sensitive(True)
- self.id_persona_giuridica_customcombobox.set_sensitive(self.id_operazione_combobox.get_active() != -1)
- self.id_operazione_combobox.set_sensitive(True)
- if self._anagrafica._magazzinoFissato:
- findComboboxRowFromId(self.id_magazzino_combobox, self._anagrafica._idMagazzino)
- elif self._id_magazzino is not None:
- findComboboxRowFromId(self.id_magazzino_combobox, self._id_magazzino)
- self.id_magazzino_combobox.grab_focus()
- def nuovaRigaNoClean(self, rigatampone=None):
- """ Prepara per l'inserimento di una nuova riga seza cancellare i campi
- TODO: aggiungere campi fornitura"""
- self._numRiga = 0
- self.azzeraRigaPartial(0, rigatampone=rigatampone)
- self.unitaBaseLabel.set_text(rigatampone['unitaBase'])
- self.codice_articolo_fornitore_entry.set_text(rigatampone['codiceArticoloFornitore'])
- def clearRows(self):
- """ pulisce i campi per il trattamento e la conservazione delle righe """
- self._righe = []
- self._righe.append({})
- self._numRiga = 0
- if posso("ADR"):
- self.dati_adr = {}
- AnagraficaDocumentiEditADRExt.setLabels(self)
- self.modelRiga.clear()
- self._iteratorRiga = None
- self.nuovaRiga()
- def refresh_combobox_listini(self):
- if self._righe[0]["idArticolo"] is None:
- self.id_listino_customcombobox.combobox.clear
- else:
- a = fillComboboxListiniFiltrati(self.id_listino_customcombobox.combobox,
- self._righe[0]["idArticolo"],
- self._righe[0]["idMagazzino"],
- self.id_persona_giuridica_customcombobox.getId())
- if self._id_listino:
- findComboboxRowFromId(self.id_listino_customcombobox.combobox, self._id_listino)
- def on_id_multiplo_customcombobox_button_clicked(self, widget, toggleButton):
- """ FIXME """
- on_id_multiplo_customcombobox_clicked(widget, toggleButton, self._righe[0]["idArticolo"])
- def on_id_multiplo_customcombobox_changed(self, combobox):
- """ FIXME """
- if self._loading:
- return
- self._righe[0]["idMultiplo"] = findIdFromCombobox(self.id_multiplo_customcombobox.combobox)
- #multiplo = leggiMultiplo(self._righe[0]["idMultiplo"])
- multiplo = Multiplo().getRecord(id=self._righe[0]["idMultiplo"])
- if multiplo:
- self._righe[0]["multiplo"] = multiplo.denominazione_breve + ' ( ' + str(multiplo.moltiplicatore) + ' X )'
- self._righe[0]["moltiplicatore"] = multiplo.moltiplicatore
- self.calcolaTotaleRiga()
- def getPrezzoVenditaLordo(self, idListino, idArticolo):
- """ cerca il prezzo di vendita """
- prezzoLordo = 0
- sconti = []
- applicazione = "scalare"
- if idListino is not None and idArticolo is not None:
- listino = leggiListino(idListino, idArticolo)
- self._righe[0]["listino"] = listino["denominazione"]
- if (self._fonteValore == "vendita_iva"):
- prezzoLordo = listino["prezzoDettaglio"]
- sconti = listino["scontiDettaglio"]
- applicazione = listino["applicazioneScontiDettaglio"]
- elif (self._fonteValore == "vendita_senza_iva"):
- prezzoLordo = listino["prezzoIngrosso"]
- sconti = listino["scontiIngrosso"]
- applicazione = listino["applicazioneScontiIngrosso"]
- self._righe[0]["prezzoLordo"] = prezzoLordo
- self._righe[0]["idListino"] = idListino
- self._righe[0]["sconti"] = sconti
- self._righe[0]["applicazioneSconti"] = applicazione
- def _getPrezzoAcquisto(self):
- """ Lettura del prezzo di acquisto netto che serve per i noleggi """
- fornitura = leggiFornitura(self._righe[0]["idArticolo"], data=datetime.datetime.now())
- prezzo = fornitura["prezzoNetto"]
- self.prezzo_aquisto_entry.set_text(str(prezzo) or "0")
- def on_sconti_widget_button_toggled(self, button):
- """ """
- if button.get_property('active') is True:
- return
- self._righe[0]["sconti"] = self.sconti_widget.getSconti()
- self._righe[0]["applicazioneSconti"] = self.sconti_widget.getApplicazione()
- self.on_show_totali_riga()
- def on_sconti_testata_widget_button_toggled(self, button):
- """ """
- if button.get_property('active') is True:
- return
- self.calcolaTotale()
- def on_notebook_select_page(self,notebook,move_focus=None, page=None, page_num=None):
- """ AL MOMENTO INUTILIZZATA"""
- return
- def on_notebook_switch_page(self, notebook, page, page_num):
- if page_num == 2:
- self.calcolaTotale()
- elif page_num ==3:
- if not posso("PA"):
- fencemsg()
- self.calcola_importi_scadenza_button.set_sensitive(False)
- self.controlla_rate_scadenza_button.set_sensitive(False)
- self.pulisci_scadenza_button.set_sensitive(False)
- else:
- id_pag = findIdFromCombobox(self.id_pagamento_customcombobox.combobox)
- pago = Pagamento().getRecord(id=id_pag)
- self.primanota_check.set_active(self.dao.ripartire_importo or False)
- if pago:
- self.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str(pago.denominazione)+'</span></b>')
- else:
- self.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str("NESSUNO?")+'</span></b>')
- self.on_aggiorna_pagamenti_button_clicked(self.aggiorna_pagamenti_button)
- if self.dao.documento_saldato:
- self.chiudi_pagamento_documento_button.set_sensitive(False)
- else:
- self.apri_pagamento_documento_button.set_sensitive(False)
- #print "passato al terzo tab"
- def on_rent_checkbutton_toggled(self, checkbutton=None):
- """ check button in schermata documenti relativa al noleggio """
- stato = self.rent_checkbutton.get_active()
- self.noleggio = stato
- if not self.noleggio:
- self.prezzo_aquisto_entry.set_sensitive(False)
- self.coeficente_noleggio_entry.set_sensitive(False)
- self.totale_periodo_label.set_sensitive(False)
- self.giorni_label.set_sensitive(False)
- self.label40.set_sensitive(False)
- self.label33.set_sensitive(False)
- self.label31.set_sensitive(False)
- else:
- self.prezzo_aquisto_entry.set_sensitive(True)
- self.coeficente_noleggio_entry.set_sensitive(True)
- self.totale_periodo_label.set_sensitive(True)
- self.giorni_label.set_sensitive(True)
- self.label40.set_sensitive(True)
- self.label33.set_sensitive(True)
- self.label31.set_sensitive(True)
- def _refresh(self):
- """ Funzione importantissima di "impianto" del documento nella UI"""
- self._loading = True
- self._tipoPersonaGiuridica = None
- self._operazione = None
- self._fonteValore = None
- self._segno = None
- self._variazioneListiniResponse = ''
- self._variazioneListiniShow = True
- self.data_documento_entry.set_sensitive(self.dao.id is None)
- self.edit_date_and_number_button.set_sensitive(self.dao.id is not None)
- self.numero_documento_entry.set_sensitive(False)
- self.id_operazione_combobox.set_sensitive(self.dao.id is None)
- self.id_persona_giuridica_customcombobox.set_sensitive(self.dao.id is None)
- self.id_operazione_combobox.set_active(-1)
- self.id_persona_giuridica_customcombobox.set_active(-1)
- self._operazione = self.dao.operazione
- findComboboxRowFromId(self.id_operazione_combobox, self.dao.operazione)
- self.on_id_operazione_combobox_changed(self.id_operazione_combobox)
- self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=False)
- if self._tipoPersonaGiuridica == "fornitore":
- self.id_persona_giuridica_customcombobox.setId(self.dao.id_fornitore)
- self.id_destinazione_merce_customcombobox.combobox.clear()
- self.id_destinazione_merce_customcombobox.set_sensitive(False)
- elif self._tipoPersonaGiuridica == "cliente":
- self.id_persona_giuridica_customcombobox.setId(self.dao.id_cliente)
- fillComboboxDestinazioniMerce(self.id_destinazione_merce_customcombobox.combobox,
- self.dao.id_cliente)
- findComboboxRowFromId(self.id_destinazione_merce_customcombobox.combobox,
- (self.dao.id_destinazione_merce or -1))
- self.id_destinazione_merce_customcombobox.combobox.set_sensitive(True)
- self.data_documento_entry.set_text(dateToString(self.dao.data_documento))
- self.numero_documento_entry.set_text(str(self.dao.numero or '0'))
- self.showDatiMovimento()
- if posso("GN"):
- self.start_rent_entry.set_text(dateTimeToString(self.dao.data_inizio_noleggio))
- self.end_rent_entry.set_text(dateTimeToString(self.dao.data_fine_noleggio))
- # self.on_end_rent_entry_focus_out_event()
- findComboboxRowFromId(self.id_pagamento_customcombobox.combobox, self.dao.id_pagamento)
- findComboboxRowFromId(self.id_banca_customcombobox.combobox, (self.dao.id_banca or -1) )
- findComboboxRowFromId(self.id_aliquota_iva_esenzione_customcombobox.combobox,
- (self.dao.id_aliquota_iva_esenzione or -1))
- self.id_agente_customcombobox.refresh(clear=True, filter=False)
- insertComboboxSearchAgente(self.id_agente_customcombobox,
- self.dao.id_agente)
- self.protocollo_entry1.set_text(self.dao.protocollo or '')
- self.note_pie_pagina_comboboxentry.get_child().set_text(self.dao.note_pie_pagina or '')
- textBuffer = self.note_interne_textview.get_buffer()
- if self.dao.note_interne is not None:
- textBuffer.set_text(self.dao.note_interne)
- else:
- textBuffer.set_text('')
- self.note_interne_textview.set_buffer(textBuffer)
- self.causale_trasporto_comboboxentry.get_child().set_text(self.dao.causale_trasporto or '')
- self.aspetto_esteriore_beni_comboboxentry.get_child().set_text(self.dao.aspetto_esteriore_beni or '')
- self.inizio_trasporto_entry.set_text(dateTimeToString(self.dao.inizio_trasporto))
- self.fine_trasporto_entry.set_text(dateTimeToString(self.dao.fine_trasporto))
- self.id_vettore_customcombobox.refresh(clear=True, filter=False)
- if self.dao.incaricato_trasporto == 'vettore':
- # Se l'incaricato e` un vettore, allora bisogna attivare il campo Porto
- self.vettore_radiobutton.set_active(True)
- insertComboboxSearchVettore(self.id_vettore_customcombobox,
- self.dao.id_vettore)
- self.porto_combobox.set_sensitive(True)
- if self.dao.porto == 'Franco':
- self.porto_combobox.set_active(1)
- elif self.dao.porto == 'Assegnato':
- self.porto_combobox.set_active(2)
- self.id_vettore_customcombobox.set_sensitive(True)
- if self.dao.incaricato_trasporto == 'destinatario':
- self.destinatario_radiobutton.set_active(True)
- self.id_vettore_customcombobox.set_sensitive(False)
- self.porto_combobox.set_sensitive(False)
- elif self.dao.incaricato_trasporto == 'mittente':
- self.mittente_radiobutton.set_active(True)
- self.id_vettore_customcombobox.set_sensitive(False)
- self.porto_combobox.set_sensitive(False)
- self.totale_colli_entry.set_text(str(self.dao.totale_colli or 0))
- self.totale_peso_entry.set_text(str(self.dao.totale_peso or 0))
- self.sconti_testata_widget.setValues(self.dao.sconti, self.dao.applicazione_sconti)
- # gestione righe documento in visualizzazione
- self.clearRows()
- scarta = False
- for riga in self.dao.righe:
- if posso("ADR"):
- # Scartiamo le righe di riepilogo ADR
- if "RIEPILOGO" in riga.descrizione:
- scarta = True
- continue
- if scarta:
- continue
- self.azzeraRiga(0)
- j = self.dao.righe.index(riga) + 1
- magazzino = leggiMagazzino(riga.id_magazzino)
- #magazzino = Magazzino().getRecord(id=riga.id_magazzino)
- articolo = leggiArticolo(riga.id_articolo)
- listino = leggiListino(riga.id_listino)
- multiplo = leggiMultiplo(riga.id_multiplo)
- (sconti, applicazione) = getScontiFromDao(
- riga.sconti, riga.applicazione_sconti)
- if posso("SM") and riga.misura_pezzo:
- altezza = (riga.misura_pezzo[-1].altezza)
- larghezza = (riga.misura_pezzo[-1].larghezza)
- moltiplicatore_pezzi = riga.misura_pezzo[-1].moltiplicatore
- else:
- altezza = ''
- larghezza = ''
- moltiplicatore_pezzi = ''
- self._righe[0]["idRiga"] = riga.id
- self._righe[0]["idMagazzino"] = riga.id_magazzino
- self._righe[0]["magazzino"] = magazzino['denominazione']
- self._righe[0]["idArticolo"] = riga.id_articolo
- self._righe[0]["codiceArticolo"] = articolo["codice"]
- self._righe[0]["descrizione"] = riga.descrizione
- self._righe[0]["percentualeIva"] = mN(riga.percentuale_iva,0)
- # Questo valore potrebbe essere a none per le righe
- #precedenti il 19/02/2011 , cerchiamo di derurre l'id e lo settiamo
- idiva = None
- if riga.id_iva == None:
- if riga.id_articolo is not None:
- #siamo di fronte ad un articolo "vecchio"
- art = Articolo().getRecord(id=riga.id_articolo)
- ivaart = art.id_aliquota_iva
- daoiva = AliquotaIva().select(percentuale=riga.percentuale_iva)
- if daoiva:
- idiva = daoiva[0].id
- else:
- if riga.percentuale_iva != 0:
- #riga descrittiva
- daoiva = AliquotaIva().select(percentuale=riga.percentuale_iva)
- if daoiva:
- idiva = daoiva[0].id
- else:
- idiva = riga.id_iva
- self._righe[0]["idAliquotaIva"] = idiva
- self._righe[0]["idUnitaBase"] = articolo["idUnitaBase"]
- self._righe[0]["unitaBase"] = articolo["unitaBase"]
- self._righe[0]["idMultiplo"] = riga.id_multiplo
- if multiplo["moltiplicatore"] != 0:
- self._righe[0]["multiplo"] = multiplo["denominazioneBreve"] + ' ( ' + str(mN(multiplo["moltiplicatore"],2)) + ' X )'
- else:
- self._righe[0]["multiplo"] = ''
- self._righe[0]["idListino"] = riga.id_listino
- self._righe[0]["listino"] = listino["denominazione"]
- self._righe[0]["quantita"] = mN(riga.quantita)
- self._righe[0]["moltiplicatore"] = mN(riga.moltiplicatore,2)
- self._righe[0]["prezzoLordo"] = mN(riga.valore_unitario_lordo)
- self._righe[0]["sconti"] = sconti
- self._righe[0]["applicazioneSconti"] = applicazione
- self._righe[0]["prezzoNetto"] = Decimal(riga.valore_unitario_netto)
- self._righe[0]["prezzoNettoUltimo"] = Decimal(riga.valore_unitario_netto)
- self._righe[0]["totale"] = 0
- if posso("ADR"):
- artADR = AnagraficaDocumentiEditADRExt.getADRArticolo(riga.id_articolo)
- if artADR:
- # Calcola se viene superato il limite massimo di esenzione
- AnagraficaDocumentiEditADRExt.calcolaLimiteTrasportoADR(self, artADR)
- if posso("SM"):
- self._righe[0]["altezza"] = mN(altezza)
- self._righe[0]["larghezza"] = mN(larghezza)
- self._righe[0]["molt_pezzi"] =mN(moltiplicatore_pezzi)
- if posso("GN"):
- print " ISRENT ",riga.isrent
- if riga.isrent :
- self._righe[0]["arco_temporale"] = self.giorni_label.get_text()
- else:
- self._righe[0]["arco_temporale"] = "NO"
- self._righe[0]["prezzo_acquisto"] = mN(riga.prezzo_acquisto_noleggio)
- self._righe[0]["divisore_noleggio"] = mN(riga.coeficente_noleggio)
- self.getTotaleRiga()
- if posso("GN") and self._righe[0]["arco_temporale"] != "NO" :
- totaleNoleggio = AnagraficaDocumentiEditGestioneNoleggioExt.totaleNoleggio(self)
- self.unitaBaseLabel.set_text(self._righe[0]["unitaBase"])
- if self._tipoPersonaGiuridica == "fornitore":
- fornitura = leggiFornitura(riga.id_articolo, self.dao.id_fornitore, self.dao.data_documento, True)
- self._righe[0]["codiceArticoloFornitore"] = fornitura["codiceArticoloFornitore"] #or articolo["codicearticolofornitore"]
- self._righe[0]["numeroLottoArticoloFornitura"] = fornitura["numeroLottoArticoloFornitura"]
- self._righe[0]["dataScadenzaArticoloFornitura"] = fornitura["dataScadenzaArticoloFornitura"]
- self._righe[0]["dataProduzioneArticoloFornitura"] = fornitura["dataProduzioneArticoloFornitura"]
- self._righe[0]["dataPrezzoFornitura"] = fornitura["dataPrezzoFornitura"]
- self._righe[0]["ordineMinimoFornitura"] = fornitura["ordineMinimoFornitura"]
- self._righe[0]["tempoArrivoFornitura"] = fornitura["tempoArrivoFornitura"]
- self._righe.append(self._righe[0])
- rigadoc= self._righe[j]
- if posso("SM"):
- altezza=rigadoc["altezza"]
- larghezza =rigadoc["larghezza"]
- molt_pezzi = rigadoc["molt_pezzi"]
- else:
- altezza = larghezza= molt_pezzi= ""
- #riempimento della treeview righe
- if posso("GN"):
- arc_temp = rigadoc["arco_temporale"]
- else:
- arc_temp = ""
- row = [j,
- rigadoc["magazzino"],
- rigadoc["codiceArticolo"],
- rigadoc["descrizione"],
- str(rigadoc["percentualeIva"]),
- str(altezza),
- str(larghezza),
- str(molt_pezzi),
- str(rigadoc["multiplo"]),
- rigadoc["listino"],
- rigadoc["unitaBase"],
- str(rigadoc["quantita"]),
- str(rigadoc["prezzoLordo"]),
- rigadoc["applicazioneSconti"] + ' ' + getStringaSconti(rigadoc["sconti"]),
- str(rigadoc["prezzoNetto"]),
- arc_temp,
- str(rigadoc["totale"])]
- self.modelRiga.append(row)
- self._loading = False
- if self.oneshot : self.persona_giuridica_changed()
- self.oneshot =False
- self.calcolaTotale()
- self.label_numero_righe.set_text(str(len(self.dao.righe)))
- #setto il notebook sulla prima pagina principale
- self.notebook.set_current_page(0)
- #imposto una nuova riga
- self.nuovaRiga()
- if self.dao.id is None or self.numero_documento_entry.get_text() == '0':
- self.id_operazione_combobox.grab_focus()
- else:
- self.id_magazzino_combobox.grab_focus()
- if posso("PA"):
- AnagraficadocumentiPagamentExt.getScadenze(self)
- def setDao(self, dao):
- """
- imposta un nuovo dao Testata documento
- """
- self.destinatario_radiobutton.set_active(True)
- self.id_vettore_customcombobox.set_sensitive(False)
- if dao is None:
- # Crea un nuovo Dao vuoto
- #Environment.tagliacoloretempdata = (False,[])
- self.dao = TestataDocumento()
- # Suggerisce la data odierna
- self.dao.data_documento = datetime.datetime.today()
- self._oldDaoRicreato = False #il dao č nuovo il controllo sul nuovo codice č necessario
- try:
- op = setconf("Documenti", "tipo_documento_predefinito")
- if op:
- self.dao.operazione = op
- except:
- pass
- # print "TIPO_DOCUMENTO_PREDEFINITO NON SETTATO"
- try:
- cli = setconf("Documenti", "cliente_predefinito")
- if cli:
- self.dao.id_cliente = int(cli)
- self.oneshot = True
- self.articolo_entry.grab_focus()
- except:
- pass
- # print "CLIENTE_PREDEFINITO NON SETTATO"
- try:
- forn = setconf("Documenti", "fornitore_predefinito")
- if forn:
- self.dao.id_fornitore = int(forn)
- self.oneshot = True
- self.articolo_entry.grab_focus()
- except:
- pass
- # print "FORNITORE_PREDEFINITO NON SETTATO"
- else:
- # Ricrea il Dao prendendolo dal DB
- self.dao = TestataDocumento().getRecord(id=dao.id)
- self._controllo_data_documento = dateToString(self.dao.data_documento)
- self._controllo_numero_documento = self.dao.numero
- self.oneshot = False
- self._oldDaoRicreato = True #il dao č nuovo il controllo sul nuovo codice non č necessario
- self._refresh()
- return self.dao
- def saveDao(self, tipo=None):
- """ Salvataggio del Dao
- """
- if posso("ADR") and tipo==GTK_RESPONSE_OK:
- AnagraficaDocumentiEditADRExt.sposta_sommario_in_tabella(self)
- scontiRigaDocumentoList = {}
- if not(len(self._righe) > 1):
- messageInfo(msg="TENTATIVO DI SALVATAGGIO DOCUMENTO SENZA RIGHE???")
- raise Exception, "ATTENZIONE, TENTATIVO DI SALVATAGGIO SENZA RIGHE?????"
- if (self.data_documento_entry.get_text() == ''):
- obligatoryField(self.dialogTopLevel,
- self.data_documento_entry,
- 'Inserire la data del documento !')
- if (findIdFromCombobox(self.id_operazione_combobox) is None):
- obligatoryField(self.dialogTopLevel,
- self.id_operazione_combobox,
- 'Inserire il tipo di documento !')
- if self.id_persona_giuridica_customcombobox.getId() is None:
- obligatoryField(self.dialogTopLevel,
- self.id_persona_giuridica_customcombobox,
- 'Inserire l\'intestatario del documento !')
- self.dao.data_documento = stringToDate(self.data_documento_entry.get_text())
- date = time.strftime("%Y")
- if date != Environment.workingYear:
- print "ATTENZIONE ANNO DI LAVORO DIVERSO QUALE PRENDERE??????"
- msg = """ ATTENZIONE!!
- L'anno di lavoro e l'anno di creazione documento non corrispondono.
- Vuoi che la DATA UTILIZZATA SIA 31/12/%s?
- """ %str(Environment.workingYear)
- if YesNoDialog(msg=msg, transient=None):
- self.dao.data_documento = stringToDate("31/12/"+Environment.workingYear)
- if self.dao.id is not None and self.numero_documento_entry.get_text() != '0':
- if self.data_documento_entry.get_text() != self._controllo_data_documento\
- or str(self.numero_documento_entry.get_text()) != str(self._controllo_numero_documento):
- numero = self.numero_documento_entry.get_text()
- idOperazione = findIdFromCombobox(self.id_operazione_combobox)
- daData, aData = getDateRange(self.data_documento_entry.get_text())
- docs = TestataDocumento().select(daNumero=numero,
- aNumero=numero,
- daData=daData, aData=aData,
- idOperazione=idOperazione,
- offset=None,
- batchSize=None)
- if len(docs) > 0:
- msg = """Attenzione!
- Esiste giŕ un documento numero %s per
- l'anno di esercizio indicato nella data
- del documento.
- Continuare comunque?""" % numero
- if YesNoDialog(msg=msg, transient=None):
- print """si č deciso di salvare un documento il cui numero
- č giŕ stato usato per un altro. questo comporterŕ
- l 'esistenza di due documenti con lo stesso numero!"""
- self.dao.numero = numero
- self.dao.operazione = self._operazione
- pbar(self.dialog.pbar,parziale=1, totale=4)
- if self._tipoPersonaGiuridica == "fornitore":
- self.dao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
- self.dao.id_cliente = None
- self.dao.id_destinazione_merce = None
- elif self._tipoPersonaGiuridica == "cliente":
- self.dao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
- self.dao.id_fornitore = None
- self.dao.id_destinazione_merce = findIdFromCombobox(self.id_destinazione_merce_customcombobox.combobox)
- self.dao.id_pagamento = findIdFromCombobox(self.id_pagamento_customcombobox.combobox)
- self.dao.id_banca = findIdFromCombobox(self.id_banca_customcombobox.combobox)
- self.dao.id_aliquota_iva_esenzione = findIdFromCombobox(self.id_aliquota_iva_esenzione_customcombobox.combobox)
- self.dao.id_agente = self.id_agente_customcombobox._id
- self.dao.protocollo = self.protocollo_entry1.get_text()
- self.dao.causale_trasporto = self.causale_trasporto_comboboxentry.get_child().get_text()
- self.dao.aspetto_esteriore_beni = self.aspetto_esteriore_beni_comboboxentry.get_child().get_text()
- self.dao.inizio_trasporto = stringToDateTime(self.inizio_trasporto_entry.get_text())
- self.dao.fine_trasporto = stringToDateTime(self.fine_trasporto_entry.get_text())
- if self.vettore_radiobutton.get_active():
- self.dao.id_vettore = self.id_vettore_customcombobox._id
- self.dao.incaricato_trasporto = 'vettore'
- if self.porto_combobox.get_active() == 1:
- self.dao.porto = 'Franco'
- elif self.porto_combobox.get_active() == 2:
- self.dao.porto = 'Assegnato'
- if not self.dao.id_vettore:
- obligatoryField(self.dialogTopLevel,
- self.id_vettore_customcombobox,
- 'Quando si seleziona vettore č obbligatorio settarne uno!')
- elif self.mittente_radiobutton.get_active():
- self.dao.id_vettore = None
- self.dao.incaricato_trasporto = 'mittente'
- self.dao.porto = 'Franco'
- elif self.destinatario_radiobutton.get_active():
- self.dao.id_vettore = None
- self.dao.incaricato_trasporto = 'destinatario'
- self.dao.porto = 'Assegnato'
- self.dao.totale_colli = float(self.totale_colli_entry.get_text() or 0)
- self.dao.totale_peso = self.totale_peso_entry.get_text()
- textBuffer = self.note_interne_textview.get_buffer()
- self.dao.note_interne = textBuffer.get_text(textBuffer.get_start_iter(), textBuffer.get_end_iter(),True)
- self.dao.note_pie_pagina = self.note_pie_pagina_comboboxentry.get_active_text()
- self.dao.applicazione_sconti = self.sconti_testata_widget.getApplicazione()
- if posso("GN"):
- self.dao.data_inizio_noleggio= self.start_rent_entry.get_text()
- self.dao.data_fine_noleggio = self.end_rent_entry.get_text()
- pbar(self.dialog.pbar,parziale=2, totale=4)
- scontiSuTotale = []
- res = self.sconti_testata_widget.getSconti()
- if res:
- for scrow in res:
- daoScontost = ScontoTestataDocumento()
- daoScontost.valore = scrow["valore"]
- daoScontost.tipo_sconto = scrow["tipo"]
- scontiSuTotale.append(daoScontost)
- self.dao.scontiSuTotale = scontiSuTotale
- scontiRigaDocumento=[]
- righeDocumento = []
- for i in range(1, len(self._righe)):
- pbar(self.dialog.pbar,parziale=(3+(i/100)), totale=4)
- daoRiga = RigaDocumento()
- daoRiga.id_testata_documento = self.dao.id
- daoRiga.id_articolo = self._righe[i]["idArticolo"]
- daoRiga.id_magazzino = self._righe[i]["idMagazzino"]
- daoRiga.descrizione = self._righe[i]["descrizione"]
- daoRiga.codiceArticoloFornitore = self._righe[i]["codiceArticoloFornitore"]
- #aggancio degli attributi all'oggetto riga per portarli in salvataggio
- # alla fornitura...
- setattr(daoRiga,"numero_lotto",self._righe[i]["numeroLottoArticoloFornitura"])
- setattr(daoRiga,"data_scadenza",self._righe[i]["dataScadenzaArticoloFornitura"])
- setattr(daoRiga,"data_produzione",self._righe[i]["dataProduzioneArticoloFornitura"])
- setattr(daoRiga,"data_prezzo",self._righe[i]["dataPrezzoFornitura"])
- setattr(daoRiga,"ordine_minimo",self._righe[i]["ordineMinimoFornitura"])
- setattr(daoRiga,"tempo_arrivo",self._righe[i]["tempoArrivoFornitura"])
- daoRiga.id_listino = self._righe[i]["idListino"]
- daoRiga.percentuale_iva = self._righe[i]["percentualeIva"]
- daoRiga.id_iva = self._righe[i]["idAliquotaIva"]
- daoRiga.applicazione_sconti = self._righe[i]["applicazioneSconti"]
- daoRiga.quantita = self._righe[i]["quantita"]
- daoRiga.id_multiplo = self._righe[i]["idMultiplo"]
- daoRiga.moltiplicatore = self._righe[i]["moltiplicatore"]
- daoRiga.valore_unitario_lordo = self._righe[i]["prezzoLordo"]
- daoRiga.valore_unitario_netto = self._righe[i]["prezzoNetto"]
- # pbar(self.dialog.pbar,pulse=True)
- if posso("GN"):
- daoRiga.prezzo_acquisto_noleggio = self._righe[i]["prezzo_acquisto"]
- daoRiga.coeficente_noleggio = self._righe[i]["divisore_noleggio"]
- if self._righe[i]["arco_temporale"] != "NO":
- daoRiga.isrent = "True"
- else:
- daoRiga.isrent = "False"
- sconti =[]
- listsco=[]
- if self._righe[i]["sconti"] is not None:
- for scon in self._righe[i]["sconti"]:
- daoSconto = ScontoRigaDocumento()
- daoSconto.valore = scon["valore"]
- daoSconto.tipo_sconto = scon["tipo"]
- scontiRigaDocumento.append(daoSconto)
- #scontiRigaDocumento[daoRiga] = sconti
- daoRiga.scontiRigaDocumento = scontiRigaDocumento
- scontiRigaDocumento =[]
- misure = []
- if posso("SM") and \
- self._righe[i]["altezza"] != '' and \
- self._righe[i]["larghezza"] != '':
- daoMisura = MisuraPezzo()
- daoMisura.altezza = float(self._righe[i]["altezza"] or 0)
- daoMisura.larghezza = float(self._righe[i]["larghezza"] or 0)
- daoMisura.moltiplicatore = float(self._righe[i]["molt_pezzi"] or 0)
- daoRiga.misura_pezzo = [daoMisura]
- #righe[i]=daoRiga
- ### Sezion dedicata alla gestione della ritenuta d'acconto
- ### della rivalsa e dela inarcassa
- #"ritAccPercentuale": 0, "rivalsaPercentuale": 0,
- #"ritCaProvvigionale": False, "ritInarCassa":0
- if self._righe[i]["ritenute"]:
- daoRiteAcc = RigaRitenutaAcconto()
- daoRiteAcc.provvigionale = self._righe[i]["ritenute"]["ritCaProvvigionale"]
- daoRiteAcc.ritenuta_percentuale = float(self._righe[i]["ritenute"]["ritAccPercentuale"] or 0)
- daoRiteAcc.rivalsa_percentuale = float(self._righe[i]["ritenute"]["rivalsaPercentuale"] or 0)
- daoRiteAcc.inarcassa_percentuale = float(self._righe[i]["ritenute"]["ritInarCassa"] or 0)
- daoRiga.ritenute = daoRiteAcc
- righeDocumento.append(daoRiga)
- self.dao.righeDocumento = righeDocumento
- if posso("PA"):
- #questa parte rimanda ai pagamenti
- AnagraficadocumentiPagamentExt.saveScadenze(self)
- tipoid = findIdFromCombobox(self.id_operazione_combobox)
- tipo = Operazione().getRecord(id=tipoid)
- if not self.dao.numero:
- valori = numeroRegistroGet(tipo=tipo.denominazione,
- date=self.data_documento_entry.get_text())
- self.dao.numero = valori[0]
- self.dao.registro_numerazione= valori[1]
- #porto in persist tre dizionari: uno per gli sconti sul totale, l'altro per gli sconti sulle righe e le righe stesse
- self.dao.persist()
- pbar(self.dialog.pbar,parziale=4, totale=4)
- self.label_numero_righe.hide()
- text = str(len(self.dao.righe))
- self.label_numero_righe.set_text(text)
- self.label_numero_righe.show()
- pbar(self.dialog.pbar,stop=True)
- def on_importo_da_ripartire_entry_changed(self, entry):
- return
- self.dao.removeDividedCost()
- # self.dao.ripartire_importo = False
- # self.ripartire_importo_checkbutton.set_active(self.dao.ripartire_importo)
- self.dao.costo_da_ripartire = Decimal(self.importo_da_ripartire_entry.get_text())
- self.importo_sovrapprezzo_label.set_te…
Large files files are truncated, but you can click here to view the full file