Show
Ignore:
Timestamp:
03/10/10 10:42:23 (6 months ago)
Author:
francesco
Message:

ripristinato il duplica documento corretto di Enrico e Simone

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/core/promogest/ui/DuplicazioneDocumento.py

    r778 r867  
    66# Author: Francesco Meloni <francesco@promotux.it> 
    77 
     8import os 
     9import gtk, gobject 
    810import gtk 
    911from GladeWidget import GladeWidget 
     
    1113from promogest import Environment 
    1214from promogest.dao.TestataDocumento import TestataDocumento 
     15from promogest.dao.Magazzino import Magazzino 
     16from promogest.dao.Listino import Listino 
     17from promogest.dao.ListinoArticolo import ListinoArticolo 
    1318from promogest.dao.RigaDocumento import RigaDocumento 
    1419from promogest.dao.ScontoRigaDocumento import ScontoRigaDocumento 
    1520from promogest.dao.ScontoTestataDocumento import ScontoTestataDocumento 
    1621from promogest.dao.Operazione import Operazione 
     22from promogest.dao.Fornitura import Fornitura 
     23from AnagraficaDocumenti import * 
    1724if Environment.conf.hasPagamenti == True: 
    1825    import promogest.modules.Pagamenti.dao.TestataDocumentoScadenza 
     
    2128 
    2229 
     30 
    2331class DuplicazioneDocumento(GladeWidget): 
    2432 
    25     def __init__(self, daoDocumento): 
     33    def __init__(self, daoDocumento, anagraficaDocumenti): 
    2634 
    2735        self.dao = daoDocumento 
    28  
    29         GladeWidget.__init__(self, 'duplicazione_documento_window', 
    30                                         'duplicazione_documento.glade') 
     36        self.anagrafica_documenti = anagraficaDocumenti 
     37 
     38        GladeWidget.__init__(self, 'duplicazione_documento_window', 'duplicazione_documento.glade') 
    3139        self.placeWindow(self.getTopLevel()) 
    3240        self.draw() 
     41 
    3342 
    3443    def draw(self): 
    3544        # seleziona i tipi documento compatibili 
    3645        operazione = leggiOperazione(self.dao.operazione) 
    37         res = Environment.params['session']\ 
    38                 .query(Operazione)\ 
    39                 .filter(and_(or_(Operazione.tipo_operazione==None, 
    40                     Operazione.tipo_operazione =="documento"), 
    41                     (Operazione.fonte_valore == operazione["fonteValore"]), 
    42                     (Operazione.tipo_persona_giuridica == operazione["tipoPersonaGiuridica"])))\ 
    43                 .all() 
     46        self.tipoPersonaGiuridica = operazione['tipoPersonaGiuridica'] 
     47        self.persona_label.set_text(self.tipoPersonaGiuridica.capitalize()) 
     48        self.id_persona_giuridica_customcombobox.setType(self.tipoPersonaGiuridica) 
     49         
     50        res = Environment.params['session'].query(Operazione).filter(Operazione.tipo_persona_giuridica != '').all() 
     51         
    4452        model = gtk.ListStore(object, str, str) 
    4553        for o in res: 
     
    5765        #self.show_all() 
    5866 
     67        listini = Environment.params['session'].query(Listino) 
     68        model = gtk.ListStore(object, int, str) 
     69        model.append((None, 0, '<Invariato>')) 
     70        model.append((None, 1, '<Azzera>')) 
     71        model.append((None, 2, '<Prezzo d\'acquisto>')) 
     72        indice_prezzo = 3; 
     73        for l in listini: 
     74            model.append((l, indice_prezzo, (l.denominazione or '')[0:30])) 
     75            indice_prezzo += 1 
     76        self.id_prezzo_combobox.clear() 
     77        renderer = gtk.CellRendererText() 
     78        self.id_prezzo_combobox.pack_start(renderer, True) 
     79        self.id_prezzo_combobox.add_attribute(renderer, 'text', 2) 
     80        self.id_prezzo_combobox.set_model(model) 
     81        self.id_prezzo_combobox.set_active(0) 
     82         
     83        #controlla che nel documento ci sia un solo magazzino 
     84        nMags = Environment.params['session'].query(Magazzino).count() 
     85        if nMags > 1: 
     86          if self.dao.numeroMagazzini == 1: 
     87            mags = Environment.params['session'].query(Magazzino)#.filter(Magazzino.id != self.dao.righe[0].id_magazzino) 
     88            model = gtk.ListStore(object, str) 
     89            for m in mags: 
     90                model.append((m, (m.denominazione or '')[0:30]))                 
     91            self.id_magazzino_combobox.clear() 
     92            renderer = gtk.CellRendererText() 
     93            self.id_magazzino_combobox.pack_start(renderer, True) 
     94            self.id_magazzino_combobox.add_attribute(renderer, 'text', 1) 
     95            self.id_magazzino_combobox.set_model(model) 
     96          else: 
     97            #disabilito il cambio di magazzino 
     98            self.id_magazzino_combobox.set_sensitive(False) 
     99        else: 
     100          #disabilito il cambio di magazzino 
     101          self.id_magazzino_combobox.set_sensitive(False) 
     102 
    59103    def on_confirm_button_clicked(self, button=None): 
    60  
     104         
    61105        if (self.data_documento_entry.get_text() == ''): 
    62106            obligatoryField(self.getTopLevel(), self.data_documento_entry) 
     
    70114        newDao.data_documento = stringToDate(self.data_documento_entry.get_text()) 
    71115        newDao.operazione = findIdFromCombobox(self.id_operazione_combobox) 
    72         newDao.id_cliente = self.dao.id_cliente 
    73         newDao.id_fornitore = self.dao.id_fornitore 
     116        if self.personaGiuridicaCambiata: 
     117          if (self.id_persona_giuridica_customcombobox.getId() is None): 
     118            obligatoryField(self.getTopLevel(), self.id_persona_giuridica_customcombobox) 
     119          if self.id_persona_giuridica_customcombobox.getType() == "cliente": 
     120            newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId() 
     121            newDao.id_fornitore = None 
     122          else: 
     123            newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId() 
     124            newDao.id_cliente = None 
     125        else: 
     126          newDao.id_fornitore = self.dao.id_fornitore 
     127          newDao.id_cliente = self.dao.id_cliente 
    74128        newDao.id_destinazione_merce = self.dao.id_destinazione_merce 
    75129        newDao.id_pagamento = self.dao.id_pagamento 
    76130        newDao.id_banca = self.dao.id_banca 
     131        newDao.numero = self.dao.numero 
    77132        newDao.id_aliquota_iva_esenzione = self.dao.id_aliquota_iva_esenzione 
    78133        newDao.protocollo = self.dao.protocollo 
     
    107162            daoRiga.id_testata_documento = newDao.id 
    108163            daoRiga.id_articolo = r.id_articolo 
    109             daoRiga.id_magazzino = r.id_magazzino 
     164            if self.id_magazzino_combobox.get_active() != -1: 
     165                magazzino_model = self.id_magazzino_combobox.get_model() 
     166                magazzino_active = self.id_magazzino_combobox.get_active() 
     167                daoRiga.id_magazzino = magazzino_model[magazzino_active][0].id 
     168            else: 
     169                daoRiga.id_magazzino = r.id_magazzino 
    110170            daoRiga.descrizione = r.descrizione 
    111             daoRiga.id_listino = r.id_listino 
     171             
     172            #ricalcola prezzi 
     173            indice_prezzo_combobox = self.id_prezzo_combobox.get_model()[self.id_prezzo_combobox.get_active()][1] 
     174            if  indice_prezzo_combobox == 0: 
     175              daoRiga.id_listino = r.id_listino 
     176              daoRiga.valore_unitario_lordo = r.valore_unitario_lordo 
     177              daoRiga.valore_unitario_netto = r.valore_unitario_netto 
     178            elif indice_prezzo_combobox == 1: 
     179              daoRiga.id_listino = r.id_listino 
     180              daoRiga.valore_unitario_lordo = 0 
     181              daoRiga.valore_unitario_netto = 0 
     182            elif indice_prezzo_combobox == 2: 
     183              fornitura = Environment.params['session'].query(Fornitura).filter(Fornitura.id_articolo == r.id_articolo).order_by(Fornitura.data_prezzo.asc()).all()[0] 
     184              daoRiga.id_listino = r.id_listino 
     185              daoRiga.valore_unitario_lordo = fornitura.prezzo_lordo 
     186              daoRiga.valore_unitario_netto = fornitura.prezzo_netto 
     187            else: 
     188              #ricalcola prezzi 
     189              listino = self.id_prezzo_combobox.get_model()[indice_prezzo_combobox][0] 
     190              listinoArticolo = Environment.params['session'].query(ListinoArticolo).filter(ListinoArticolo.id_listino == listino.id and r.id_articolo == ListinoArticolo.id_articolo).all() 
     191              if len(listinoArticolo) > 0: 
     192                daoRiga.id_listino = listinoArticolo[0].id_listino 
     193                daoRiga.valore_unitario_lordo = listinoArticolo[0].prezzo_dettaglio 
     194                daoRiga.valore_unitario_netto = listinoArticolo[0].prezzo_ingrosso 
     195              else: 
     196                daoRiga.id_listino = r.id_listino 
     197                daoRiga.valore_unitario_lordo = r.valore_unitario_lordo 
     198                daoRiga.valore_unitario_netto = r.valore_unitario_netto 
     199             
    112200            daoRiga.percentuale_iva = r.percentuale_iva 
    113             daoRiga.applicazione_sconti = r.applicazione_sconti 
     201            daoRiga.applicazione_sconti = r.applicazione_sconti   
    114202            daoRiga.quantita = r.quantita 
    115203            daoRiga.id_multiplo = r.id_multiplo 
    116204            daoRiga.moltiplicatore = r.moltiplicatore 
    117             daoRiga.valore_unitario_lordo = r.valore_unitario_lordo 
    118             daoRiga.valore_unitario_netto = r.valore_unitario_netto 
    119205            #print "RIGA ARTICOLO", r.descrizione, r.id_articolo 
    120206            if "SuMisura" in Environment.modulesList: 
     
    136222            scontiRigaDocumento = [] 
    137223            sco = r.sconti 
    138             for s in sco: 
    139                 daoSconto = ScontoRigaDocumento() 
    140                 daoSconto.valore = s.valore 
    141                 daoSconto.tipo_sconto = s.tipo_sconto 
    142                 scontiRigaDocumento.append(daoSconto) 
     224            if self.mantieni_sconti_checkbutton.get_active() : 
     225              for s in sco: 
     226                  daoSconto = ScontoRigaDocumento() 
     227                  daoSconto.valore = s.valore 
     228                  daoSconto.tipo_sconto = s.tipo_sconto 
     229                  scontiRigaDocumento.append(daoSconto) 
    143230            daoRiga.scontiRigaDocumento = scontiRigaDocumento 
    144231            righeDocumento.append(daoRiga) 
     232             
    145233        newDao.righeDocumento = righeDocumento 
    146234        scadenze = [] 
     
    181269        tipoid = findIdFromCombobox(self.id_operazione_combobox) 
    182270        tipo = Operazione().getRecord(id=tipoid) 
    183         if not newDao.numero: 
    184             valori = numeroRegistroGet(tipo=tipo.denominazione, date=self.data_documento_entry.get_text()) 
    185             newDao.numero = valori[0] 
    186             newDao.registro_numerazione= valori[1] 
     271        #if not newDao.numero: 
     272        valori = numeroRegistroGet(tipo=tipo.denominazione, date=self.data_documento_entry.get_text()) 
     273        newDao.numero = valori[0] 
     274        newDao.registro_numerazione= valori[1] 
    187275 
    188276        newDao.persist() 
    189277 
     278        #se il segno dell'operazione non Ú cambiato duplico il documento, altrimenti duplico ma apro la finestra di new/modifica documento 
     279         
    190280        res = TestataDocumento().getRecord(id=newDao.id) 
    191281 
    192         msg = "Nuovo documento creato !\n\nIl nuovo documento e' il n. " + str(res.numero) + " del " + dateToString(res.data_documento) + " (" + newDao.operazione + ")" 
     282        msg = "Nuovo documento creato !\n\nIl nuovo documento e' il n. " + str(res.numero) + " del " + dateToString(res.data_documento) + " (" + newDao.operazione + ")\n" + "Lo vuoi modificare?" 
    193283        dialog = gtk.MessageDialog(self.getTopLevel(), gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 
    194                                    gtk.MESSAGE_INFO, gtk.BUTTONS_OK, msg) 
     284                                  gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, msg) 
    195285        response = dialog.run() 
     286         
     287        if response == gtk.RESPONSE_YES: 
     288          self.anagrafica_documenti.editElement.setVisible(True) 
     289          self.anagrafica_documenti.editElement.setDao(newDao) 
     290           
     291          self.anagrafica_documenti.editElement.id_persona_giuridica_customcombobox.set_sensitive(True) 
     292          self.anagrafica_documenti.editElement.setFocus() 
     293        
    196294        dialog.destroy() 
    197295        self.destroy() 
    198296 
     297    def on_id_operazione_combobox_changed(self, widget, event=None): 
     298        tipoPersonaGiuridica = self.id_operazione_combobox.get_model()[self.id_operazione_combobox.get_active()][0].tipo_persona_giuridica 
     299         
     300        if self.tipoPersonaGiuridica == tipoPersonaGiuridica: 
     301          self.personaGiuridicaCambiata = False 
     302        else: 
     303          self.personaGiuridicaCambiata = True 
     304           
     305        if self.id_persona_giuridica_customcombobox.getType() == "fornitore" and tipoPersonaGiuridica == 'cliente': 
     306          self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=True) 
     307        if self.id_persona_giuridica_customcombobox.getType() == "cliente" and tipoPersonaGiuridica == 'fornitore': 
     308          self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=True) 
     309         
     310        self.persona_label.set_text(tipoPersonaGiuridica.capitalize()) 
     311        self.id_persona_giuridica_customcombobox.setType(tipoPersonaGiuridica) 
     312         
    199313    def on_duplicazione_documento_window_close(self, widget, event=None): 
    200314        self.destroy()