PageRenderTime 53ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/core/promogest/modules/Pagamenti/ui/PagamentiUtils.py

http://promogest.googlecode.com/
Python | 641 lines | 587 code | 15 blank | 39 comment | 17 complexity | e70e78dfc8b97e715799cf66203a3c66 MD5 | raw file
Possible License(s): GPL-2.0
  1. # -*- coding: utf-8 -*-
  2. # Copyright (C) 2005, 2006, 2007 2008, 2009, 2010 by Promotux di Francesco Meloni snc - http://www.promotux.it/
  3. # Author: Andrea Argiolas <andrea@promotux.it>
  4. # Author: JJDaNiMoTh <jjdanimoth@gmail.com>
  5. # Author: Dr astico <zoccolodignu@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.dao.Pagamento import Pagamento
  18. from promogest.dao.TestataDocumento import TestataDocumento
  19. from promogest.modules.Pagamenti.dao.TestataDocumentoScadenza import TestataDocumentoScadenza
  20. from promogest.ui.utils import *
  21. class Pagamenti(object):
  22. def __init__(self, anagrafica):
  23. self.anagrafica = anagrafica
  24. def attiva_acconto(self, action, disable = True):
  25. """
  26. Attiva i campi relativi alla prima scadenza nella tab Pagamenti
  27. Se action e` False, disattiva e pulisce i campi riguardanti la prima scadenza.
  28. """
  29. if disable:
  30. self.anagrafica.data_acconto_entry.set_sensitive(action)
  31. self.anagrafica.importo_acconto_scadenza_entry.set_sensitive(action)
  32. if not action:
  33. self.anagrafica.data_acconto_entry.set_text("")
  34. self.anagrafica.importo_acconto_scadenza_entry.set_text("")
  35. def attiva_prima_scadenza(self, action, disable = True):
  36. """
  37. Attiva i campi relativi alla prima scadenza nella tab Pagamenti
  38. Se action e` False, disattiva e pulisce i campi riguardanti la prima scadenza.
  39. """
  40. if disable:
  41. self.anagrafica.data_acconto_entry.set_sensitive(action)
  42. self.anagrafica.data_prima_scadenza_entry.set_sensitive(action)
  43. # self.anagrafica.primo_pagamento_entry.set_sensitive(action)
  44. self.anagrafica.data_pagamento_prima_scadenza_entry.set_sensitive(action)
  45. self.anagrafica.importo_acconto_scadenza_entry.set_sensitive(action)
  46. self.anagrafica.importo_prima_scadenza_entry.set_sensitive(action)
  47. if not action:
  48. self.anagrafica.data_acconto_entry.set_text("")
  49. self.anagrafica.data_prima_scadenza_entry.set_text("")
  50. # self.anagrafica.primo_pagamento_entry.set_text("")
  51. self.anagrafica.data_pagamento_prima_scadenza_entry.set_text("")
  52. self.anagrafica.importo_acconto_scadenza_entry.set_text("")
  53. self.anagrafica.importo_prima_scadenza_entry.set_text("")
  54. def attiva_seconda_scadenza(self, action, disable = True):
  55. """
  56. Attiva i campi relativi alla prima e alla seconda scadenza nella tab Pagamenti
  57. Se action e` False, disattiva e pulisce i campi riguardanti la seconda scadenza.
  58. """
  59. if disable:
  60. self.anagrafica.data_seconda_scadenza_entry.set_sensitive(action)
  61. self.anagrafica.importo_seconda_scadenza_entry.set_sensitive(action)
  62. # self.anagrafica.secondo_pagamento_entry.set_sensitive(action)
  63. self.anagrafica.data_pagamento_seconda_scadenza_entry.set_sensitive(action)
  64. if not action:
  65. self.anagrafica.data_seconda_scadenza_entry.set_text("")
  66. self.anagrafica.importo_seconda_scadenza_entry.set_text("")
  67. # self.anagrafica.secondo_pagamento_entry.set_text("")
  68. self.anagrafica.data_pagamento_seconda_scadenza_entry.set_text("")
  69. def attiva_terza_scadenza(self, action, disable = True):
  70. """
  71. Attiva i campi relativi alla prima, alla seconda e alla terza scadenza nella tab Pagamenti
  72. Se action e` False, disattiva e pulisce i campi riguardanti la terza scadenza.
  73. """
  74. if disable:
  75. self.anagrafica.data_terza_scadenza_entry.set_sensitive(action)
  76. self.anagrafica.importo_terza_scadenza_entry.set_sensitive(action)
  77. # self.anagrafica.terzo_pagamento_entry.set_sensitive(action)
  78. self.anagrafica.data_pagamento_terza_scadenza_entry.set_sensitive(action)
  79. if not action:
  80. self.anagrafica.data_terza_scadenza_entry.set_text("")
  81. self.anagrafica.importo_terza_scadenza_entry.set_text("")
  82. # self.anagrafica.terzo_pagamento_entry.set_text("")
  83. self.anagrafica.data_pagamento_terza_scadenza_entry.set_text("")
  84. def attiva_quarta_scadenza(self, action, disable = True):
  85. """
  86. Attiva i campi relativi alla prima, seconda, terza e quarta scadenza nella tab Pagamenti.
  87. Se action e` False, disattiva e pulisce i campi riguardanti la quarta scadenza.
  88. """
  89. if disable:
  90. self.anagrafica.data_quarta_scadenza_entry.set_sensitive(action)
  91. self.anagrafica.importo_quarta_scadenza_entry.set_sensitive(action)
  92. # self.anagrafica.quarto_pagamento_entry.set_sensitive(action)
  93. self.anagrafica.data_pagamento_quarta_scadenza_entry.set_sensitive(action)
  94. if not action:
  95. self.anagrafica.data_quarta_scadenza_entry.set_text("")
  96. self.anagrafica.importo_quarta_scadenza_entry.set_text("")
  97. # self.anagrafica.quarto_pagamento_entry.set_text("")
  98. self.anagrafica.data_pagamento_quarta_scadenza_entry.set_text("")
  99. def dividi_importo(self):
  100. """
  101. Divide l'importo passato per il numero delle scadenze. Se viene passato un argomento, che indica
  102. il valore di una rata, ricalcola gli altri tenendo conto del valore modificato
  103. TODO: Passare i valori valuta a mN
  104. """
  105. importodoc = float(self.anagrafica.totale_scontato_riepiloghi_label.get_text() or 0)
  106. if importodoc == 0:
  107. return
  108. acconto = float(self.anagrafica.importo_acconto_scadenza_entry.get_text() or 0)
  109. importo_primo_doc = float(self.anagrafica.importo_primo_documento_entry.get_text() or 0)
  110. importo_secondo_doc = float(self.anagrafica.importo_secondo_documento_entry.get_text() or 0)
  111. importotot = importodoc - acconto - importo_primo_doc - importo_secondo_doc
  112. pagamenti = self.IsPagamentoMultiplo(self.anagrafica.id_pagamento_customcombobox.combobox)
  113. importorate = [0, 0, 0, 0]
  114. if type(pagamenti) == list:
  115. if pagamenti != None:
  116. n_pagamenti = (len(pagamenti) - 1) / 2
  117. importorate = dividi_in_rate(importotot, n_pagamenti)
  118. else:
  119. n_pagamenti = 1
  120. importorate[0] = importotot
  121. else:
  122. n_pagamenti = 1
  123. importorate[0] = importotot
  124. try:
  125. self.anagrafica.importo_prima_scadenza_entry.set_text("%.2f" % importorate[0])
  126. self.anagrafica.importo_seconda_scadenza_entry.set_text("%.2f" % importorate[1])
  127. self.anagrafica.importo_terza_scadenza_entry.set_text("%.2f" % importorate[2])
  128. self.anagrafica.importo_quarta_scadenza_entry.set_text("%.2f" % importorate[3])
  129. except IndexError:
  130. pass
  131. if n_pagamenti == 3:
  132. self.anagrafica.importo_quarta_scadenza_entry.set_text("")
  133. elif n_pagamenti == 2:
  134. self.anagrafica.importo_terza_scadenza_entry.set_text("")
  135. self.anagrafica.importo_quarta_scadenza_entry.set_text("")
  136. elif n_pagamenti == 1:
  137. self.anagrafica.importo_seconda_scadenza_entry.set_text("")
  138. self.anagrafica.importo_terza_scadenza_entry.set_text("")
  139. self.anagrafica.importo_quarta_scadenza_entry.set_text("")
  140. def controlla_rate_scadenza(self, messaggio):
  141. """
  142. Controlla che gli importi inseriti nelle scadenze siano corrispondenti
  143. al totale del documento. Ritorna False se c'e` un errore,
  144. True se e` tutto corretto.
  145. """
  146. importotot = float(self.anagrafica.totale_scontato_riepiloghi_label.get_text() or 0)
  147. if importotot == 0:
  148. return
  149. importo_immesso_acconto = float(self.anagrafica.importo_acconto_scadenza_entry.get_text() or 0)
  150. importo_immesso_prima = float(self.anagrafica.importo_prima_scadenza_entry.get_text() or 0)
  151. importo_immesso_seconda = float(self.anagrafica.importo_seconda_scadenza_entry.get_text() or 0)
  152. importo_immesso_terza = float(self.anagrafica.importo_terza_scadenza_entry.get_text() or 0)
  153. importo_immesso_quarta = float(self.anagrafica.importo_quarta_scadenza_entry.get_text() or 0)
  154. importo_primo_riferimento = float(self.anagrafica.importo_primo_documento_entry.get_text() or 0)
  155. importo_secondo_riferimento = float(self.anagrafica.importo_secondo_documento_entry.get_text() or 0)
  156. differenza_importi = (importo_immesso_acconto + importo_immesso_prima + importo_immesso_seconda +
  157. importo_immesso_terza + importo_immesso_quarta + importo_primo_riferimento +
  158. importo_secondo_riferimento) - importotot
  159. if differenza_importi == 0 - importotot:
  160. if messaggio:
  161. messageInfo(msg="Importo delle rate non inserite")
  162. return True
  163. elif differenza_importi != 0:
  164. if messaggio:
  165. messageInfo(msg="""ATTENZIONE!
  166. La somma degli importi che Lei ha inserito come rate nelle scadenze
  167. non corrisponde al totale del documento. La invitiamo a ricontrollare.
  168. Ricordiamo inoltre che allo stato attuale e` impossibile salvare il documento.
  169. Per l'esattezza, l'errore e` di %.2f""" % differenza_importi)
  170. return False
  171. else:
  172. if messaggio:
  173. messageInfo(msg="Gli importi inseriti come rate corrispondono con il totale del documento")
  174. return True
  175. def getDocumentoCollegato(self, numerodocumento):
  176. """
  177. Trova il documento in base al numero e ritorna un cursore al documento stesso.
  178. """
  179. if self.anagrafica._tipoPersonaGiuridica == "cliente":
  180. idCliente = self.anagrafica.id_persona_giuridica_customcombobox.getId()
  181. idFornitore = None
  182. tipoDocumento = "Nota di credito a cliente"
  183. elif self.anagrafica._tipoPersonaGiuridica == "fornitore":
  184. idCliente = None
  185. idFornitore = self.anagrafica.id_persona_giuridica_customcombobox.getId()
  186. tipoDocumento = "Nota di credito da fornitore"
  187. result = TestataDocumento().select(daNumero=numerodocumento,
  188. aNumero=numerodocumento,
  189. daParte=None,
  190. aParte=None,
  191. daData=None,
  192. aData=None,
  193. protocollo=None,
  194. idOperazione=tipoDocumento,
  195. idMagazzino=None,
  196. idCliente=idCliente,
  197. idFornitore=idFornitore)
  198. if len(result) > 1:
  199. messageInfo(msg= "Sono stati trovati piu` di un documento. Hai scovato un bug :D")
  200. return False
  201. elif len(result) == 0:
  202. messageInfo(msg="Non e' stato trovato nessun documento con il numero specificato")
  203. return False
  204. else:
  205. return result
  206. def impostaDocumentoCollegato(self, numerodocumento):
  207. """
  208. Imposta il documento indicato dall'utente come collegato al documento
  209. in creazione.
  210. """
  211. documento = self.getDocumentoCollegato(numerodocumento)
  212. if documento == False:
  213. return False
  214. daoTestata = TestataDocumento().getRecord(id=documento[0].id)
  215. tipo_documento = daoTestata.operazione
  216. totale_pagato = daoTestata.totale_pagato
  217. totale_sospeso = daoTestata.totale_sospeso
  218. numero_documento = daoTestata.numero
  219. data_documento = daoTestata.data_documento
  220. if totale_sospeso != 0:
  221. messageError(msg="""Attenzione. Risulta che il documento da Lei scelto abbia ancora
  222. un importo in sospeso. Il documento, per poter essere collegato, deve essere completamente saldato""")
  223. return False
  224. return totale_pagato
  225. def ricalcola_sospeso_e_pagato(self):
  226. """
  227. Ricalcola i totali sospeso e pagato in base alle
  228. scadenze ancora da saldare
  229. """
  230. if self.anagrafica.data_pagamento_prima_scadenza_entry.get_text() != "":
  231. totalepagato = float(self.anagrafica.importo_acconto_scadenza_entry.get_text() or '0')
  232. totalepagato = totalepagato + float(self.anagrafica.importo_prima_scadenza_entry.get_text() or '0')
  233. totalesospeso = float(0)
  234. else:
  235. totalepagato = float(self.anagrafica.importo_acconto_scadenza_entry.get_text() or '0')
  236. totalesospeso = float(self.anagrafica.importo_prima_scadenza_entry.get_text() or '0')
  237. self.anagrafica.stato_label.set_markup('<b><span foreground="#B40000" size="24000">APERTO</span></b>')
  238. if self.anagrafica.data_pagamento_seconda_scadenza_entry.get_text() != "":
  239. totalepagato = totalepagato + float(self.anagrafica.importo_seconda_scadenza_entry.get_text() or '0')
  240. else:
  241. totalesospeso = totalesospeso + float(self.anagrafica.importo_seconda_scadenza_entry.get_text() or '0')
  242. if self.anagrafica.data_pagamento_terza_scadenza_entry.get_text() != "":
  243. totalepagato = totalepagato + float(self.anagrafica.importo_terza_scadenza_entry.get_text() or '0')
  244. else:
  245. totalesospeso = totalesospeso + float(self.anagrafica.importo_terza_scadenza_entry.get_text() or '0')
  246. if self.anagrafica.data_pagamento_quarta_scadenza_entry.get_text() != "":
  247. totalepagato = totalepagato + float(self.anagrafica.importo_quarta_scadenza_entry.get_text() or '0')
  248. else:
  249. totalesospeso = totalesospeso + float(self.anagrafica.importo_quarta_scadenza_entry.get_text() or '0')
  250. totalepagato = totalepagato + float(self.anagrafica.importo_primo_documento_entry.get_text() or '0')
  251. totalepagato = totalepagato + float(self.anagrafica.importo_secondo_documento_entry.get_text() or '0')
  252. self.anagrafica.totale_pagato_scadenza_label.set_markup('<b><span foreground="#338000" size="24000">'+str(mN(totalepagato,2))+'</span></b>')
  253. if totalepagato ==0:
  254. totalesospeso = float(self.anagrafica.totale_in_pagamenti_label.get_text())
  255. if totalesospeso == 0:
  256. totalesospeso = float(self.anagrafica.totale_in_pagamenti_label.get_text()) - totalepagato
  257. self.anagrafica.totale_sospeso_scadenza_label.set_markup('<b><span foreground="#B40000" size="24000">'+str(mN(totalesospeso,2))+'</span></b>')
  258. if totalepagato == 0 and totalesospeso == 0:
  259. self.attiva_prima_scadenza(False, True)
  260. self.attiva_seconda_scadenza(False, True)
  261. self.attiva_terza_scadenza(False, True)
  262. self.attiva_quarta_scadenza(False, True)
  263. self.anagrafica.stato_label.set_markup('<b><span foreground="#B40000" size="24000">APERTO</span></b>')
  264. if totalepagato == float(self.anagrafica.totale_in_pagamenti_label.get_text()) and\
  265. self.anagrafica.stato_label.get_text() == "APERTO" and \
  266. self.anagrafica.notebook.get_current_page() ==3:
  267. msg = """Attenzione! L'importo in sospeso č pari a 0 e
  268. l'importo pagato č uguale al totale documento.
  269. Procedere con la "chiusura" del Pagamento?"""
  270. procedi = YesNoDialog(msg=msg, transient=None)
  271. if procedi:
  272. self.anagrafica.stato_label.set_markup('<b><span foreground="#338000" size="24000">PAGATO</span></b>')
  273. def attiva_scadenze(self):
  274. """
  275. Attiva le scadenze necessarie in base alle scadenze passate; il valore passato
  276. deve essere necessariamente ottenuto dalla funzione IsPagamentoMultiplo.
  277. Chiama inoltre apposite istanze di dividi_importo() per suddividere
  278. l'importo totale nelle varie rate.
  279. """
  280. if self.anagrafica.totale_scontato_riepiloghi_label.get_text() == "-":
  281. return 1
  282. scadenze = self.IsPagamentoMultiplo(self.anagrafica.id_pagamento_customcombobox.combobox)
  283. data_doc = stringToDate(self.anagrafica.data_documento_entry.get_text())
  284. importotot = float(self.anagrafica.totale_scontato_riepiloghi_label.get_text())
  285. if type(scadenze) == list:
  286. numeroscadenze = (len(scadenze) - 1) / 2 # Trovo il numero delle scadenze contando gli elementi
  287. # della variabile passata, sottraendo il caratteee di
  288. # Fine Mese e dividendo per due ( vedere la doc di
  289. # IsPagamentoMultiplo per maggiori informazioni )
  290. paga = findStrFromCombobox(self.anagrafica.id_pagamento_customcombobox.combobox,2)
  291. if scadenze[len(scadenze)-1] != "FM":
  292. fine_mese = False
  293. else:
  294. fine_mese = True
  295. # self.anagrafica.primo_pagamento_entry.set_text(scadenze[0] + scadenze[1] + " gg")
  296. findComboboxRowFromStr(self.anagrafica.id_pagamento_prima_scadenza_customcombobox.combobox, paga,2)
  297. if numeroscadenze == 1:
  298. self.attiva_prima_scadenza(True, True)
  299. self.attiva_seconda_scadenza(False, True)
  300. self.attiva_terza_scadenza(False, True)
  301. self.attiva_quarta_scadenza(False, True)
  302. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[1]), fine_mese)))
  303. elif numeroscadenze == 2:
  304. self.attiva_seconda_scadenza(True, True)
  305. self.attiva_prima_scadenza(True, True)
  306. self.attiva_terza_scadenza(False, True)
  307. self.attiva_quarta_scadenza(False, True)
  308. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[1]), fine_mese)))
  309. self.anagrafica.data_seconda_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[3]), fine_mese)))
  310. # self.anagrafica.secondo_pagamento_entry.set_text(scadenze[0] + scadenze[3] + " gg")
  311. findComboboxRowFromStr(self.anagrafica.id_pagamento_seconda_scadenza_customcombobox.combobox, paga,2)
  312. elif numeroscadenze == 3:
  313. self.attiva_terza_scadenza(True, True)
  314. self.attiva_seconda_scadenza(True, True)
  315. self.attiva_prima_scadenza(True, True)
  316. self.attiva_quarta_scadenza(False, True)
  317. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[1]), fine_mese)))
  318. self.anagrafica.data_seconda_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[3]), fine_mese)))
  319. self.anagrafica.data_terza_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[5]), fine_mese)))
  320. # self.anagrafica.secondo_pagamento_entry.set_text(scadenze[0] + scadenze[3] + " gg")
  321. findComboboxRowFromStr(self.anagrafica.id_pagamento_seconda_scadenza_customcombobox.combobox, paga,2)
  322. # self.anagrafica.terzo_pagamento_entry.set_text(scadenze[0] + scadenze[5] + " gg")
  323. findComboboxRowFromStr(self.anagrafica.id_pagamento_terza_scadenza_customcombobox.combobox, paga,2)
  324. elif numeroscadenze == 4:
  325. self.attiva_quarta_scadenza(True, True)
  326. self.attiva_seconda_scadenza(True, True)
  327. self.attiva_terza_scadenza(True, True)
  328. self.attiva_prima_scadenza(True, True)
  329. self.anagrafica.data_quarta_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[7]), fine_mese)))
  330. self.anagrafica.data_terza_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[5]), fine_mese)))
  331. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[1]), fine_mese)))
  332. self.anagrafica.data_seconda_scadenza_entry.set_text(dateToString(getScadenza(data_doc, int(scadenze[3]), fine_mese)))
  333. # self.anagrafica.secondo_pagamento_entry.set_text(scadenze[0] + scadenze[3] + " gg")
  334. findComboboxRowFromStr(self.anagrafica.id_pagamento_seconda_scadenza_customcombobox.combobox, paga,2)
  335. # self.anagrafica.terzo_pagamento_entry.set_text(scadenze[0] + scadenze[5] + " gg")
  336. findComboboxRowFromStr(self.anagrafica.id_pagamento_terza_scadenza_customcombobox.combobox, paga,2)
  337. # self.anagrafica.quarto_pagamento_entry.set_text(scadenze[0] + scadenze[7] + " gg")
  338. findComboboxRowFromStr(self.anagrafica.id_pagamento_quarta_scadenza_customcombobox.combobox, paga,2)
  339. else:
  340. print "Numero troppo alto di scadenze; Funzione non ancora implementata. Manda un bug report"
  341. else:
  342. self.attiva_prima_scadenza(True, True)
  343. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(data_doc))
  344. findComboboxRowFromStr(self.anagrafica.id_pagamento_prima_scadenza_customcombobox.combobox, scadenze,2)
  345. # self.anagrafica.primo_pagamento_entry.set_text(scadenze)
  346. def IsPagamentoMultiplo(self, combobox):
  347. """
  348. Controlla la scadenza contenuta nel combobox, restituendo una lista con questi valori:
  349. valore_di_ritorno = [ 'nome_pagamento', 'giorni_prima_scad', 'separatore', ..., 'FM']
  350. al posto di ... ci sono 3 ulteriori valori ( fino ad un totale di quattro scadenze )
  351. e 3 ulteriori separatori. Il valore dell'ultimo campo e` FM se e` una scadenza da
  352. intendersi a fine mese o '' se non e` da intendersi a fine mese. Nel caso in cui
  353. il pagamento non sia riconosciuto, o non contenga scadenze, ritorna solo il nome
  354. del pagamento.
  355. """
  356. stringaCombobox = findStrFromCombobox(combobox, 2)
  357. controllascadenza = re.compile('^.* [0-9]?(.[0-9]+)+.*$')
  358. r = controllascadenza.match(stringaCombobox)
  359. finemese = re.compile('^.* [(F|f).(M|m)]*.$')
  360. if r:
  361. var = re.split('([0-9]+)', stringaCombobox)
  362. p = finemese.match(var[len(var)-1])
  363. if p:
  364. var[len(var)-1] = "FM"
  365. return var
  366. else:
  367. return var
  368. else:
  369. return stringaCombobox
  370. def getScadenze(self):
  371. if self.anagrafica.dao.scadenze:
  372. for scadenza in self.anagrafica.dao.scadenze:
  373. if scadenza.numero_scadenza == 0:
  374. self.anagrafica.data_acconto_entry.set_text(dateToString(scadenza.data) or '')
  375. self.anagrafica.importo_acconto_scadenza_entry.set_text(str(scadenza.importo or ''))
  376. findComboboxRowFromStr(self.anagrafica.id_pagamento_acconto_customcombobox.combobox, scadenza.pagamento,2)
  377. self.anagrafica.data_pagamento_acconto_entry.set_text(dateToString
  378. (scadenza.data_pagamento or ''))
  379. elif scadenza.numero_scadenza == 1:
  380. self.anagrafica.data_prima_scadenza_entry.set_text(dateToString(scadenza.data) or '')
  381. self.anagrafica.importo_prima_scadenza_entry.set_text(str(scadenza.importo or ''))
  382. findComboboxRowFromStr(self.anagrafica.id_pagamento_prima_scadenza_customcombobox.combobox, scadenza.pagamento,2)
  383. self.anagrafica.data_pagamento_prima_scadenza_entry.set_text(dateToString
  384. (scadenza.data_pagamento or ''))
  385. elif scadenza.numero_scadenza == 2:
  386. self.anagrafica.data_seconda_scadenza_entry.set_text(dateToString
  387. (scadenza.data or ''))
  388. self.anagrafica.importo_seconda_scadenza_entry.set_text(str(scadenza.importo or ''))
  389. findComboboxRowFromStr(self.anagrafica.id_pagamento_seconda_scadenza_customcombobox.combobox, scadenza.pagamento,2)
  390. self.anagrafica.data_pagamento_seconda_scadenza_entry.set_text(dateToString
  391. (scadenza.data_pagamento or ''))
  392. elif scadenza.numero_scadenza == 3:
  393. self.anagrafica.data_terza_scadenza_entry.set_text(dateToString
  394. (scadenza.data or ''))
  395. self.anagrafica.importo_terza_scadenza_entry.set_text(str(scadenza.importo or ''))
  396. findComboboxRowFromStr(self.anagrafica.id_pagamento_terza_scadenza_customcombobox.combobox, scadenza.pagamento,2)
  397. self.anagrafica.data_pagamento_terza_scadenza_entry.set_text(dateToString
  398. (scadenza.data_pagamento or ''))
  399. elif scadenza.numero_scadenza == 4:
  400. self.anagrafica.data_quarta_scadenza_entry.set_text(dateToString
  401. (scadenza.data or ''))
  402. self.anagrafica.importo_quarta_scadenza_entry.set_text(str(scadenza.importo or ''))
  403. findComboboxRowFromStr(self.anagrafica.id_pagamento_quarta_scadenza_customcombobox.combobox, scadenza.pagamento,2)
  404. self.anagrafica.data_pagamento_quarta_scadenza_entry.set_text(dateToString
  405. (scadenza.data_pagamento or ''))
  406. if self.anagrafica.importo_acconto_scadenza_entry.get_text() != '':
  407. self.attiva_prima_scadenza(True,True)
  408. if self.anagrafica.importo_prima_scadenza_entry.get_text() != '':
  409. self.attiva_prima_scadenza(True,True)
  410. if self.anagrafica.importo_seconda_scadenza_entry.get_text() != '':
  411. self.attiva_seconda_scadenza(True,True)
  412. if self.anagrafica.importo_terza_scadenza_entry.get_text() != '':
  413. self.attiva_terza_scadenza(True,True)
  414. if self.anagrafica.importo_quarta_scadenza_entry.get_text() != '':
  415. self.attiva_quarta_scadenza(True,True)
  416. if self.anagrafica.dao.documento_saldato:
  417. self.anagrafica.stato_label.set_markup('<b><span foreground="#338000" size="24000">PAGATO</span></b>')
  418. else:
  419. self.anagrafica.stato_label.set_markup('<b><span foreground="#B40000" size="24000">APERTO</span></b>')
  420. self.anagrafica.totale_pagato_scadenza_label.set_markup('<b><span foreground="#338000" size="24000">'+str(
  421. self.anagrafica.dao.totale_pagato or 0)+'</span></b>')
  422. if (self.anagrafica.dao.totale_sospeso is None) or (self.anagrafica.dao.totale_sospeso == 0):
  423. totaleSospeso = Decimal(self.anagrafica.totale_scontato_riepiloghi_label.get_text()) - Decimal(self.anagrafica.dao.totale_pagato or 0)
  424. else:
  425. totaleSospeso = self.anagrafica.dao.totale_sospeso
  426. self.anagrafica.totale_sospeso_scadenza_label.set_markup('<b><span foreground="#B40000" size="24000">'+str(
  427. totaleSospeso)+'</span></b>')
  428. if self.anagrafica.dao.id_primo_riferimento != None:
  429. doc = TestataDocumento().getRecord(id=self.anagrafica.dao.id_primo_riferimento)
  430. self.anagrafica.importo_primo_documento_entry.set_text(str(doc.totale_pagato) or '')
  431. self.anagrafica.numero_primo_documento_entry.set_text(str(doc.numero) or '')
  432. self.anagrafica.importo_secondo_documento_entry.set_sensitive(True)
  433. self.anagrafica.numero_secondo_documento_entry.set_sensitive(True)
  434. self.anagrafica.seleziona_seconda_nota_button.set_sensitive(True)
  435. if self.anagrafica.dao.id_secondo_riferimento != None:
  436. doc = TestataDocumento().getRecord(id=self.anagrafica.dao.id_secondo_riferimento)
  437. self.anagrafica.importo_secondo_documento_entry.set_text(str(doc.totale_pagato) or '')
  438. self.anagrafica.numero_secondo_documento_entry.set_text(str(doc.numero) or '')
  439. else:
  440. self.anagrafica.importo_secondo_documento_entry.set_text('')
  441. self.anagrafica.numero_secondo_documento_entry.set_text('')
  442. else:
  443. self.anagrafica.importo_primo_documento_entry.set_text('')
  444. self.anagrafica.importo_secondo_documento_entry.set_text('')
  445. self.anagrafica.numero_primo_documento_entry.set_text('')
  446. self.anagrafica.numero_secondo_documento_entry.set_text('')
  447. def saveScadenze(self):
  448. """ Di fatto č la parte che gestisce il salvataggio dei dati
  449. di pagamento
  450. TODO: aggiungere la cancellazione se vengono trovate piů righe?"""
  451. self.anagrafica.dao.totale_pagato = float(self.anagrafica.totale_pagato_scadenza_label.get_text())
  452. self.anagrafica.dao.totale_sospeso = float(self.anagrafica.totale_sospeso_scadenza_label.get_text())
  453. if self.anagrafica.stato_label.get_text() == "PAGATO":
  454. self.anagrafica.dao.documento_saldato = True
  455. else:
  456. self.anagrafica.dao.documento_saldato = False
  457. self.anagrafica.dao.ripartire_importo = self.anagrafica.primanota_check.get_active()
  458. scadenze = []
  459. # accontoDao0= TestataDocumentoScadenza().select(idTestataDocumento=self.anagrafica.dao.id, numeroScadenza=0)
  460. if self.anagrafica.data_acconto_entry.get_text() != "":
  461. # if accontoDao0:
  462. # daoTestataDocumentoScadenza = accontoDao0[0]
  463. # else:
  464. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  465. daoTestataDocumentoScadenza.id_testata_documento = self.anagrafica.dao.id
  466. if stringToDate(self.anagrafica.data_acconto_entry.get_text()) =="":
  467. obligatoryField(self.anagrafica.dialogTopLevel,
  468. self.anagrafica.data_acconto_entry,
  469. 'Inserire una data acconto!')
  470. daoTestataDocumentoScadenza.data = stringToDate(self.anagrafica.data_acconto_entry.get_text())
  471. daoTestataDocumentoScadenza.importo = float(self.anagrafica.importo_acconto_scadenza_entry.get_text() or '0')
  472. idpag0 = findIdFromCombobox(self.anagrafica.id_pagamento_acconto_customcombobox.combobox)
  473. if idpag0:
  474. p0 = Pagamento().getRecord(id=idpag0)
  475. daoTestataDocumentoScadenza.pagamento = p0.denominazione
  476. else:
  477. obligatoryField(self.anagrafica.dialogTopLevel,
  478. self.anagrafica.id_pagamento_acconto_customcombobox.combobox,
  479. 'Inserire una forma di pagamento!')
  480. daoTestataDocumentoScadenza.data_pagamento = daoTestataDocumentoScadenza.data
  481. daoTestataDocumentoScadenza.numero_scadenza = 0
  482. scadenze.append(daoTestataDocumentoScadenza)
  483. if self.anagrafica.data_prima_scadenza_entry.get_text() != "":
  484. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  485. daoTestataDocumentoScadenza.id_testata_documento = self.anagrafica.dao.id
  486. if stringToDate(self.anagrafica.data_prima_scadenza_entry.get_text()) =="":
  487. obligatoryField(self.anagrafica.dialogTopLevel,
  488. self.anagrafica.data_prima_scadenza_entry,
  489. 'Inserire una data!')
  490. daoTestataDocumentoScadenza.data = stringToDate(self.anagrafica.data_prima_scadenza_entry.get_text())
  491. daoTestataDocumentoScadenza.importo = float(self.anagrafica.importo_prima_scadenza_entry.get_text() or '0')
  492. idpag1 = findIdFromCombobox(self.anagrafica.id_pagamento_prima_scadenza_customcombobox.combobox)
  493. if idpag1:
  494. p1 = Pagamento().getRecord(id=idpag1)
  495. daoTestataDocumentoScadenza.pagamento = p1.denominazione
  496. else:
  497. obligatoryField(self.anagrafica.dialogTopLevel,
  498. self.anagrafica.id_pagamento_acconto_customcombobox.combobox,
  499. 'Inserire una forma di pagamento!')
  500. daoTestataDocumentoScadenza.data_pagamento = stringToDate(
  501. self.anagrafica.data_pagamento_prima_scadenza_entry.get_text())
  502. daoTestataDocumentoScadenza.numero_scadenza = 1
  503. scadenze.append(daoTestataDocumentoScadenza)
  504. if self.anagrafica.data_seconda_scadenza_entry.get_text() != "":
  505. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  506. daoTestataDocumentoScadenza.id_testata_documento = self.anagrafica.dao.id
  507. if stringToDate(self.anagrafica.data_seconda_scadenza_entry.get_text()) =="":
  508. obligatoryField(self.anagrafica.dialogTopLevel,
  509. self.anagrafica.data_seconda_scadenza_entry,
  510. 'Inserire una data!')
  511. daoTestataDocumentoScadenza.data = stringToDate(
  512. self.anagrafica.data_seconda_scadenza_entry.get_text())
  513. daoTestataDocumentoScadenza.importo = float(
  514. self.anagrafica.importo_seconda_scadenza_entry.get_text() or '0')
  515. idpag2 = findIdFromCombobox(self.anagrafica.id_pagamento_seconda_scadenza_customcombobox.combobox)
  516. if idpag2:
  517. p2 = Pagamento().getRecord(id=idpag2)
  518. daoTestataDocumentoScadenza.pagamento = p2.denominazione
  519. else:
  520. obligatoryField(self.anagrafica.dialogTopLevel,
  521. self.anagrafica.id_pagamento_acconto_customcombobox.combobox,
  522. 'Inserire una forma di pagamento!')
  523. daoTestataDocumentoScadenza.data_pagamento = stringToDate(
  524. self.anagrafica.data_pagamento_seconda_scadenza_entry.get_text())
  525. daoTestataDocumentoScadenza.numero_scadenza = 2
  526. scadenze.append(daoTestataDocumentoScadenza)
  527. if self.anagrafica.data_terza_scadenza_entry.get_text() != "":
  528. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  529. daoTestataDocumentoScadenza.id_testata_documento = self.anagrafica.dao.id
  530. if stringToDate(self.anagrafica.data_terza_scadenza_entry.get_text()) =="":
  531. obligatoryField(self.anagrafica.dialogTopLevel,
  532. self.anagrafica.data_terza_scadenza_entry,
  533. 'Inserire una data!')
  534. daoTestataDocumentoScadenza.data = stringToDate(
  535. self.anagrafica.data_terza_scadenza_entry.get_text())
  536. daoTestataDocumentoScadenza.importo = float(
  537. self.anagrafica.importo_terza_scadenza_entry.get_text() or '0')
  538. idpag3 = findIdFromCombobox(self.anagrafica.id_pagamento_terza_scadenza_customcombobox.combobox)
  539. if idpag3:
  540. p3 = Pagamento().getRecord(id=idpag3)
  541. daoTestataDocumentoScadenza.pagamento = p3.denominazione
  542. else:
  543. obligatoryField(self.anagrafica.dialogTopLevel,
  544. self.anagrafica.id_pagamento_acconto_customcombobox.combobox,
  545. 'Inserire una forma di pagamento!')
  546. daoTestataDocumentoScadenza.data_pagamento = stringToDate(
  547. self.anagrafica.data_pagamento_terza_scadenza_entry.get_text())
  548. daoTestataDocumentoScadenza.numero_scadenza = 3
  549. scadenze.append(daoTestataDocumentoScadenza)
  550. if self.anagrafica.data_quarta_scadenza_entry.get_text() != "":
  551. daoTestataDocumentoScadenza = TestataDocumentoScadenza()
  552. daoTestataDocumentoScadenza.id_testata_documento = self.anagrafica.dao.id
  553. if stringToDate(self.anagrafica.data_quarta_scadenza_entry.get_text()) =="":
  554. obligatoryField(self.anagrafica.dialogTopLevel,
  555. self.anagrafica.data_quarta_scadenza_entry,
  556. 'Inserire una data!')
  557. daoTestataDocumentoScadenza.data = stringToDate(
  558. self.anagrafica.data_quarta_scadenza_entry.get_text())
  559. daoTestataDocumentoScadenza.importo = float(
  560. self.anagrafica.importo_quarta_scadenza_entry.get_text() or '0')
  561. idpag4 = findIdFromCombobox(self.anagrafica.id_pagamento_quarta_scadenza_customcombobox.combobox)
  562. if idpag4:
  563. p4 = Pagamento().getRecord(id=idpag4)
  564. daoTestataDocumentoScadenza.pagamento = p4.denominazione
  565. else:
  566. obligatoryField(self.anagrafica.dialogTopLevel,
  567. self.anagrafica.id_pagamento_acconto_customcombobox.combobox,
  568. 'Inserire una forma di pagamento!')
  569. daoTestataDocumentoScadenza.data_pagamento = stringToDate(
  570. self.anagrafica.data_pagamento_quarta_scadenza_entry.get_text())
  571. daoTestataDocumentoScadenza.numero_scadenza = 4
  572. scadenze.append(daoTestataDocumentoScadenza)
  573. self.anagrafica.dao.scadenze = scadenze
  574. #TODO: finire di sistemare questa parte ......
  575. doc = self.anagrafica.numero_primo_documento_entry.get_text()
  576. if doc != "" and doc != "0":
  577. documentocollegato = self.getDocumentoCollegato(int(doc))
  578. self.anagrafica.dao.id_primo_riferimento = documentocollegato[0].id
  579. doc2 = self.anagrafica.numero_secondo_documento_entry.get_text()
  580. if doc2 != "" and doc2 != "0":
  581. documentocollegato = self.getDocumentoCollegato(int(doc2))
  582. self.anagrafica.dao.id_secondo_riferimento = documentocollegato[0].id