PageRenderTime 28ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/core/promogest/ui/DuplicazioneDocumento.py

http://promogest.googlecode.com/
Python | 331 lines | 293 code | 21 blank | 17 comment | 8 complexity | a5be56cd76e988d75fea7eeba701294d MD5 | raw file
Possible License(s): GPL-2.0
  1. # -*- coding: utf-8 -*-
  2. # Copyright (C) 2005, 2006, 2007 2008, 2009, 2010, 2011 by Promotux
  3. # di Francesco Meloni snc - http://www.promotux.it/
  4. # Author: Francesco Meloni <francesco@promotux.it>
  5. # Author: Francesco Marella <francesco.marella@gmail.com>
  6. # This file is part of Promogest.
  7. # Promogest is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 2 of the License, or
  10. # (at your option) any later version.
  11. # Promogest is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. # You should have received a copy of the GNU General Public License
  16. # along with Promogest. If not, see <http://www.gnu.org/licenses/>.
  17. from promogest.ui.GladeWidget import GladeWidget
  18. from promogest import Environment
  19. from promogest.dao.TestataDocumento import TestataDocumento
  20. from promogest.dao.Magazzino import Magazzino
  21. from promogest.dao.Listino import Listino
  22. from promogest.dao.ListinoArticolo import ListinoArticolo
  23. from promogest.dao.RigaDocumento import RigaDocumento
  24. from promogest.dao.ScontoRigaDocumento import ScontoRigaDocumento
  25. from promogest.dao.ScontoTestataDocumento import ScontoTestataDocumento
  26. from promogest.dao.Operazione import Operazione
  27. from promogest.dao.Fornitura import Fornitura
  28. from promogest.ui.anagDocumenti.AnagraficaDocumenti import *
  29. if posso("PA"):
  30. import promogest.modules.Pagamenti.dao.TestataDocumentoScadenza
  31. from promogest.modules.Pagamenti.dao.TestataDocumentoScadenza import TestataDocumentoScadenza
  32. from promogest.ui.utils import *
  33. from promogest.ui.gtk_compat import *
  34. class DuplicazioneDocumento(GladeWidget):
  35. def __init__(self, daoDocumento, anagraficaDocumenti):
  36. self.dao = daoDocumento
  37. self.anagrafica_documenti = anagraficaDocumenti
  38. self.personaGiuridicaCambiata = False
  39. GladeWidget.__init__(self, 'duplicazione_documento_window',
  40. 'duplicazione_documento.glade')
  41. self.placeWindow(self.getTopLevel())
  42. self.draw()
  43. def draw(self):
  44. # seleziona i tipi documento compatibili
  45. operazione = leggiOperazione(self.dao.operazione)
  46. self.tipoPersonaGiuridica = operazione['tipoPersonaGiuridica']
  47. self.persona_label.set_text(self.tipoPersonaGiuridica.capitalize())
  48. self.id_persona_giuridica_customcombobox.setType(self.tipoPersonaGiuridica)
  49. res = Environment.params['session'].query(Operazione).filter(Operazione.tipo_persona_giuridica != '').all()
  50. model = gtk.ListStore(object, str, str)
  51. for o in res:
  52. model.append((o, o.denominazione, (o.denominazione or '')[0:30]))
  53. self.id_operazione_combobox.clear()
  54. renderer = gtk.CellRendererText()
  55. self.id_operazione_combobox.pack_start(renderer, True)
  56. self.id_operazione_combobox.add_attribute(renderer, 'text', 2)
  57. self.id_operazione_combobox.set_model(model)
  58. self.data_documento_entry.set_text(dateToString(datetime.datetime.today()))
  59. self.data_documento_entry.grab_focus()
  60. listini = Listino().select(batchSize=None)
  61. model = gtk.ListStore(object, int, str)
  62. model.append((None, 0, '<Invariato>'))
  63. model.append((None, 1, '<Azzera>'))
  64. model.append((None, 2, '<Prezzo d\'acquisto>'))
  65. indice_prezzo = 3;
  66. for l in listini:
  67. model.append((l, indice_prezzo, (l.denominazione or '')[0:30]))
  68. indice_prezzo += 1
  69. self.id_prezzo_combobox.clear()
  70. renderer = gtk.CellRendererText()
  71. self.id_prezzo_combobox.pack_start(renderer, True)
  72. self.id_prezzo_combobox.add_attribute(renderer, 'text', 2)
  73. self.id_prezzo_combobox.set_model(model)
  74. self.id_prezzo_combobox.set_active(0)
  75. #controlla che nel documento ci sia un solo magazzino
  76. if self.dao.numeroMagazzini == 1:
  77. fillComboboxMagazzini(self.id_magazzino_combobox)
  78. else:
  79. #disabilito il cambio di magazzino
  80. self.id_magazzino_combobox.set_sensitive(False)
  81. def on_confirm_button_clicked(self, button=None):
  82. if (self.data_documento_entry.get_text() == ''):
  83. obligatoryField(self.getTopLevel(), self.data_documento_entry)
  84. if (findIdFromCombobox(self.id_operazione_combobox) is None):
  85. obligatoryField(self.getTopLevel(), self.id_operazione_combobox)
  86. if self.note_check.get_active():
  87. note = "Rif. " + self.dao.operazione + " n. " + str(self.dao.numero) + " del " + dateToString(self.dao.data_documento)
  88. else:
  89. note = ""
  90. newDao = TestataDocumento()
  91. newDao.data_documento = stringToDate(self.data_documento_entry.get_text())
  92. newDao.operazione = findIdFromCombobox(self.id_operazione_combobox)
  93. if self.personaGiuridicaCambiata:
  94. if not self.id_persona_giuridica_customcombobox.getId():
  95. obligatoryField(self.getTopLevel(), self.id_persona_giuridica_customcombobox)
  96. if self.id_persona_giuridica_customcombobox.getType() == "cliente":
  97. newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
  98. newDao.id_fornitore = None
  99. else:
  100. newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
  101. newDao.id_cliente = None
  102. else:
  103. if not self.id_persona_giuridica_customcombobox.getId():
  104. newDao.id_fornitore = self.dao.id_fornitore
  105. newDao.id_cliente = self.dao.id_cliente
  106. else:
  107. if self.id_persona_giuridica_customcombobox.getType() == "cliente":
  108. newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
  109. newDao.id_fornitore = None
  110. else:
  111. newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
  112. newDao.id_cliente = None
  113. newDao.id_destinazione_merce = self.dao.id_destinazione_merce
  114. newDao.id_pagamento = self.dao.id_pagamento
  115. newDao.id_banca = self.dao.id_banca
  116. newDao.numero = self.dao.numero
  117. newDao.id_aliquota_iva_esenzione = self.dao.id_aliquota_iva_esenzione
  118. newDao.protocollo = self.dao.protocollo
  119. newDao.causale_trasporto = self.dao.causale_trasporto
  120. newDao.aspetto_esteriore_beni = self.dao.aspetto_esteriore_beni
  121. newDao.inizio_trasporto = self.dao.inizio_trasporto
  122. newDao.fine_trasporto = self.dao.fine_trasporto
  123. newDao.id_vettore =self.dao.id_vettore
  124. newDao.incaricato_trasporto = self.dao.incaricato_trasporto
  125. newDao.totale_colli = self.dao.totale_colli
  126. newDao.totale_peso = self.dao.totale_peso
  127. newDao.note_interne = self.dao.note_interne
  128. newDao.note_pie_pagina = self.dao.note_pie_pagina + " " + note
  129. newDao.applicazione_sconti = self.dao.applicazione_sconti
  130. newDao.ripartire_importo = self.dao.ripartire_importo
  131. newDao.costo_da_ripartire = self.dao.costo_da_ripartire
  132. #sconti = []
  133. sco = self.dao.sconti or []
  134. scontiRigaDocumento=[]
  135. scontiSuTotale=[]
  136. righeDocumento=[]
  137. for s in sco:
  138. daoSconto = ScontoTestataDocumento()
  139. daoSconto.valore = s.valore
  140. daoSconto.tipo_sconto = s.tipo_sconto
  141. scontiSuTotale.append(daoSconto)
  142. newDao.scontiSuTotale = scontiSuTotale
  143. #righe = []
  144. rig = self.dao.righe
  145. for r in rig:
  146. daoRiga = RigaDocumento()
  147. daoRiga.id_testata_documento = newDao.id
  148. daoRiga.id_articolo = r.id_articolo
  149. if self.id_magazzino_combobox.get_active() != -1 and r.id_magazzino !=None:
  150. iddi = findIdFromCombobox(self.id_magazzino_combobox)
  151. daoRiga.id_magazzino = iddi
  152. else:
  153. daoRiga.id_magazzino = r.id_magazzino
  154. daoRiga.descrizione = r.descrizione
  155. # Copia il campo iva
  156. daoRiga.id_iva = r.id_iva
  157. #ricalcola prezzi
  158. indice_prezzo_combobox = self.id_prezzo_combobox.get_model()[self.id_prezzo_combobox.get_active()][1]
  159. if indice_prezzo_combobox == 0:
  160. daoRiga.id_listino = r.id_listino
  161. daoRiga.valore_unitario_lordo = r.valore_unitario_lordo or 0
  162. daoRiga.valore_unitario_netto = r.valore_unitario_netto or 0
  163. elif indice_prezzo_combobox == 1:
  164. daoRiga.id_listino = r.id_listino
  165. daoRiga.valore_unitario_lordo = 0
  166. daoRiga.valore_unitario_netto = 0
  167. elif indice_prezzo_combobox == 2:
  168. fornitura = Environment.params['session'].query(Fornitura).filter(Fornitura.id_articolo == r.id_articolo).order_by(Fornitura.data_prezzo.asc()).all()
  169. if fornitura:
  170. fornitura = fornitura[0]
  171. daoRiga.valore_unitario_lordo = fornitura.prezzo_lordo
  172. daoRiga.valore_unitario_netto = fornitura.prezzo_netto
  173. daoRiga.id_listino = r.id_listino
  174. else:
  175. #ricalcola prezzi
  176. listino = self.id_prezzo_combobox.get_model()[indice_prezzo_combobox][0]
  177. listinoArticolo = Environment.params['session'].query(ListinoArticolo).filter(ListinoArticolo.id_listino == listino.id and r.id_articolo == ListinoArticolo.id_articolo).all()
  178. if len(listinoArticolo) > 0:
  179. daoRiga.id_listino = listinoArticolo[0].id_listino
  180. daoRiga.valore_unitario_lordo = listinoArticolo[0].prezzo_dettaglio
  181. daoRiga.valore_unitario_netto = listinoArticolo[0].prezzo_ingrosso
  182. else:
  183. daoRiga.id_listino = r.id_listino
  184. daoRiga.valore_unitario_lordo = r.valore_unitario_lordo
  185. daoRiga.valore_unitario_netto = r.valore_unitario_netto
  186. daoRiga.percentuale_iva = r.percentuale_iva
  187. daoRiga.applicazione_sconti = r.applicazione_sconti
  188. daoRiga.quantita = r.quantita
  189. daoRiga.id_multiplo = r.id_multiplo
  190. daoRiga.moltiplicatore = r.moltiplicatore
  191. #print "RIGA ARTICOLO", r.descrizione, r.id_articolo
  192. if posso("SM"):
  193. from promogest.modules.SuMisura.dao.MisuraPezzo import MisuraPezzo
  194. #try:
  195. daoMisuraPezzo = MisuraPezzo()
  196. if r.misura_pezzo:
  197. daoMisuraPezzo.altezza = r.misura_pezzo[0].altezza
  198. daoMisuraPezzo.larghezza = r.misura_pezzo[0].larghezza
  199. daoMisuraPezzo.moltiplicatore = r.misura_pezzo[0].moltiplicatore
  200. else:
  201. daoMisuraPezzo.altezza = 0
  202. daoMisuraPezzo.larghezza = 0
  203. daoMisuraPezzo.moltiplicatore = 0
  204. daoRiga.misura_pezzo = [daoMisuraPezzo]
  205. #except :
  206. #pass
  207. sconti = []
  208. scontiRigaDocumento = []
  209. sco = r.sconti
  210. if self.mantieni_sconti_checkbutton.get_active() :
  211. for s in sco:
  212. daoSconto = ScontoRigaDocumento()
  213. daoSconto.valore = s.valore
  214. daoSconto.tipo_sconto = s.tipo_sconto
  215. scontiRigaDocumento.append(daoSconto)
  216. daoRiga.scontiRigaDocumento = scontiRigaDocumento
  217. righeDocumento.append(daoRiga)
  218. newDao.righeDocumento = righeDocumento
  219. scadenze = []
  220. if posso("PA"):
  221. scad = self.dao.scadenze
  222. for s in scad:
  223. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  224. daoTestataDocumentoScadenza.id_testata_documento = newDao.id
  225. daoTestataDocumentoScadenza.data = s.data
  226. daoTestataDocumentoScadenza.importo = s.importo
  227. daoTestataDocumentoScadenza.pagamento = s.pagamento
  228. daoTestataDocumentoScadenza.data_pagamento= s.data_pagamento
  229. daoTestataDocumentoScadenza.numero_scadenza = s.numero_scadenza
  230. scadenze.append(daoTestataDocumentoScadenza)
  231. newDao.scadenze = scadenze
  232. newDao.totale_pagato = self.dao.totale_pagato
  233. newDao.totale_sospeso = self.dao.totale_sospeso
  234. newDao.documento_saldato = self.dao.documento_saldato
  235. newDao.id_primo_riferimento = self.dao.id_primo_riferimento
  236. newDao.id_secondo_riferimento = self.dao.id_secondo_riferimento
  237. newDao.totale_pagato = self.dao.totale_pagato
  238. newDao.totale_sospeso = self.dao.totale_sospeso
  239. newDao.documento_saldato = self.dao.documento_saldato
  240. newDao.id_primo_riferimento = self.dao.id_primo_riferimento
  241. newDao.id_secondo_riferimento = self.dao.id_secondo_riferimento
  242. scadenze = []
  243. scad = self.dao.scadenze
  244. for s in scad:
  245. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  246. daoTestataDocumentoScadenza.id_testata_documento = newDao.id
  247. daoTestataDocumentoScadenza.data = s.data
  248. daoTestataDocumentoScadenza.importo = s.importo
  249. daoTestataDocumentoScadenza.pagamento = s.pagamento
  250. daoTestataDocumentoScadenza.data_pagamento= s.data_pagamento
  251. daoTestataDocumentoScadenza.numero_scadenza = s.numero_scadenza
  252. scadenze.append(daoTestataDocumentoScadenza)
  253. newDao.scadenze = scadenze
  254. tipoid = findIdFromCombobox(self.id_operazione_combobox)
  255. tipo = Operazione().getRecord(id=tipoid)
  256. #if not newDao.numero:
  257. valori = numeroRegistroGet(tipo=tipo.denominazione, date=self.data_documento_entry.get_text())
  258. newDao.numero = valori[0]
  259. newDao.registro_numerazione= valori[1]
  260. newDao.persist()
  261. if posso("GN"):
  262. if self.dao.data_inizio_noleggio or self.dao.data_fine_noleggio:
  263. from promogest.modules.GestioneNoleggio.dao.TestataGestioneNoleggio import TestataGestioneNoleggio
  264. newTestataGestioneNoleggio = TestataGestioneNoleggio()
  265. newTestataGestioneNoleggio.data_inizio_noleggio = self.dao.data_inizio_noleggio
  266. newTestataGestioneNoleggio.data_fine_noleggio = self.dao.data_fine_noleggio
  267. newTestataGestioneNoleggio.id_testata_documento = newDao.id
  268. newTestataGestioneNoleggio.persist()
  269. #se il segno dell'operazione non ?ยจ cambiato duplico il documento, altrimenti duplico ma apro la finestra di new/modifica documento
  270. res = TestataDocumento().getRecord(id=newDao.id)
  271. 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?"
  272. if YesNoDialog(msg=msg, transient=self.getTopLevel()):
  273. self.anagrafica_documenti.editElement.setVisible(True)
  274. self.anagrafica_documenti.editElement.setDao(newDao)
  275. self.anagrafica_documenti.editElement.id_persona_giuridica_customcombobox.set_sensitive(True)
  276. self.anagrafica_documenti.editElement.setFocus()
  277. self.destroy()
  278. def on_id_operazione_combobox_changed(self, widget, event=None):
  279. tipoPersonaGiuridica = self.id_operazione_combobox.get_model()[self.id_operazione_combobox.get_active()][0].tipo_persona_giuridica
  280. if self.tipoPersonaGiuridica == tipoPersonaGiuridica:
  281. self.personaGiuridicaCambiata = False
  282. else:
  283. self.personaGiuridicaCambiata = True
  284. if self.id_persona_giuridica_customcombobox.getType() == "fornitore" and tipoPersonaGiuridica == 'cliente':
  285. self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=True)
  286. if self.id_persona_giuridica_customcombobox.getType() == "cliente" and tipoPersonaGiuridica == 'fornitore':
  287. self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=True)
  288. self.persona_label.set_text(tipoPersonaGiuridica.capitalize())
  289. self.id_persona_giuridica_customcombobox.setType(tipoPersonaGiuridica)
  290. def on_duplicazione_documento_window_close(self, widget, event=None):
  291. self.destroy()
  292. return None