PageRenderTime 62ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/core/promogest/ui/anagDocumenti/AnagraficaDocumentiEdit.py

http://promogest.googlecode.com/
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

  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. # Authors:
  5. # Andrea Argiolas <andrea@promotux.it>
  6. # JJDaNiMoTh <jjdanimoth@gmail.com>
  7. # Dr astico (Marco Pinna) <marco@promotux.it>
  8. # Francesco Meloni <francesco@promotux.it>
  9. # Francesco Marella <francesco.marella@gmail.com>
  10. # This file is part of Promogest.
  11. # Promogest is free software: you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation, either version 2 of the License, or
  14. # (at your option) any later version.
  15. # Promogest is distributed in the hope that it will be useful,
  16. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. # GNU General Public License for more details.
  19. # You should have received a copy of the GNU General Public License
  20. # along with Promogest. If not, see <http://www.gnu.org/licenses/>.
  21. from promogest.ui.gtk_compat import *
  22. import datetime
  23. from promogest import Environment
  24. from promogest.ui.AnagraficaComplessaEdit import AnagraficaEdit
  25. from promogest.ui.anagDocumenti.AnagraficaDocumentiEditUtils import *
  26. from promogest.dao.TestataDocumento import TestataDocumento
  27. from promogest.dao.TestataMovimento import TestataMovimento
  28. from promogest.dao.RigaDocumento import RigaDocumento
  29. from promogest.dao.ScontoRigaDocumento import ScontoRigaDocumento
  30. from promogest.dao.ScontoTestataDocumento import ScontoTestataDocumento
  31. from promogest.dao.ScontoVenditaDettaglio import ScontoVenditaDettaglio
  32. from promogest.dao.ScontoVenditaIngrosso import ScontoVenditaIngrosso
  33. from promogest.dao.Articolo import Articolo
  34. from promogest.dao.Magazzino import Magazzino
  35. from promogest.dao.Operazione import Operazione
  36. from promogest.dao.Cliente import Cliente
  37. from promogest.dao.Multiplo import Multiplo
  38. from promogest.dao.Pagamento import Pagamento
  39. from promogest.dao.AliquotaIva import AliquotaIva
  40. #from promogest.dao.RigaRitenutaAcconto import RigaRitenutaAcconto
  41. from promogest.modules.PrimaNota.dao.TestataPrimaNota import TestataPrimaNota
  42. from promogest.ui.DettaglioGiacenzaWindow import DettaglioGiacenzaWindow
  43. from promogest.ui.utils import *
  44. from promogest.ui.utilsCombobox import *
  45. from promogest.dao.DaoUtils import giacenzaArticolo
  46. if posso("PW"):
  47. from promogest.modules.PromoWear.ui import AnagraficaDocumentiEditPromoWearExt
  48. if posso("SM"):
  49. from promogest.modules.SuMisura.ui import AnagraficaDocumentiEditSuMisuraExt
  50. from promogest.modules.SuMisura.dao.MisuraPezzo import MisuraPezzo
  51. if posso("GN"):
  52. from promogest.modules.GestioneNoleggio.ui import AnagraficaDocumentiEditGestioneNoleggioExt
  53. if posso("PA"):
  54. from promogest.modules.Pagamenti.ui import AnagraficadocumentiPagamentExt
  55. if posso("ADR"):
  56. from promogest.modules.ADR.ui import AnagraficaDocumentiEditADRExt
  57. class AnagraficaDocumentiEdit(AnagraficaEdit):
  58. """ Modifica un record dei documenti """
  59. def __init__(self, anagrafica):
  60. AnagraficaEdit.__init__(self,
  61. anagrafica,
  62. 'anagrafica_documenti_detail_vbox',
  63. 'Dati Documento',
  64. 'anagrafica_documenti.glade')
  65. # self.placeWindow(self.getTopLevel())
  66. self._widgetFirstFocus = self.data_documento_entry
  67. # contenitore (dizionario) righe (riga 0 riservata per variazioni in corso)
  68. self._righe = []
  69. self._righe.append({})
  70. # numero riga corrente
  71. self._numRiga = 0
  72. self.noClean=False
  73. # iteratore riga corrente
  74. self._iteratorRiga = None
  75. # cliente o fornitore ?
  76. self._tipoPersonaGiuridica = None
  77. self._operazione = None
  78. self.mattu = False
  79. # prezzo vendita/acquisto, ivato/non ivato
  80. self._fonteValore = None
  81. # carico (+) o scarico (-)
  82. self._segno = None
  83. # pagamento preferenziale dell'intestatario
  84. self._id_pagamento = None
  85. # magazzino preferenziale dell'intestatario
  86. self._id_magazzino = None
  87. # listino preferenziale dell'intestatario
  88. self._id_listino = None
  89. # banca preferenziale dell'intestatario
  90. self._id_banca = None
  91. # caricamento documento (interrompe l'azione degli eventi on_changed nelle combobox)
  92. self._loading = False
  93. # risposta richiesta variazione listini per costo variato: 'yes', 'no', 'all', 'none'
  94. self._variazioneListiniResponse = ''
  95. # mostrare variazione listini ?
  96. self._variazioneListiniShow = True
  97. #campi controllo modifica
  98. self._controllo_data_documento = None
  99. self._controllo_numero_documento = None
  100. self.reuseDataRow = False
  101. self.NoRowUsableArticle = False
  102. self.noleggio = True
  103. self.oneshot = False
  104. self.tagliaColoreRigheList = None
  105. self.visualizza_prezzo_alternativo = False
  106. # Inizializziamo i moduli in interfaccia!
  107. #self.draw()
  108. self.completion = self.ricerca_articolo_entrycompletition
  109. if Environment.pg3:
  110. self.completion.set_match_func(self.match_func,None)
  111. else:
  112. self.completion.set_match_func(self.match_func)
  113. self.completion.set_text_column(0)
  114. self.articolo_entry.set_completion(self.completion)
  115. self.sepric = " ~ "
  116. self.articolo_matchato = None
  117. self.checkMAGAZZINO = True
  118. # self.completion.set_minimum_key_length(3)
  119. # if not posso("PA"):
  120. # self.notebook.remove_page(3)
  121. if posso("PW"):
  122. self.promowear_manager_taglia_colore_togglebutton.set_property("visible", True)
  123. self.promowear_manager_taglia_colore_togglebutton.set_sensitive(False)
  124. else:
  125. hidePromoWear(self)
  126. if not posso("SM"):
  127. hideSuMisura(self)
  128. if not posso("GN"):
  129. self.rent_checkbutton.destroy()
  130. self.hbox29.destroy()
  131. self.hbox30.destroy()
  132. self.arco_temporale_frame.destroy()
  133. self.noleggio_frame.destroy()
  134. self.noleggio = False
  135. self.prezzo_aquisto_entry.destroy()
  136. self.label38.destroy()
  137. self.label40.destroy()
  138. self.totale_periodo_label.destroy()
  139. if not posso("ADR"):
  140. hideADR(self)
  141. def draw(self, cplx=False):
  142. self.cplx = cplx
  143. drawPart (self)
  144. def on_scorporo_button_clicked(self, button):
  145. """ Bottone con una "s" minuscola, che permette di effettuare "al volo"
  146. lo scorporo di un valore finale nel campo prezzo """
  147. ivaobj = findStrFromCombobox(self.id_iva_customcombobox.combobox,0)
  148. if type(ivaobj) != type("CIAO"):
  149. iva = ivaobj.percentuale
  150. if iva == "" or iva == "0":
  151. messageInfo(msg="ATTENZIONE IVA a 0%")
  152. else:
  153. prezzoLordo = self.prezzo_lordo_entry.get_text()
  154. imponibile = float(prezzoLordo)/(1+float(iva)/100)
  155. self.prezzo_lordo_entry.set_text(str(mN(str(imponibile))))
  156. self.prezzo_lordo_entry.grab_focus()
  157. def on_switch_prezzo_button_clicked(self, button):
  158. idListino = findIdFromCombobox(self.id_listino_customcombobox.combobox)
  159. idArticolo = self._righe[0]["idArticolo"]
  160. prezzi = leggiListino(idListino, idArticolo)
  161. if not self.visualizza_prezzo_alternativo:
  162. self.prezzo_lordo_entry.set_text(str(prezzi["prezzoDettaglio"]))
  163. self.visualizza_prezzo_alternativo = True
  164. else:
  165. self.prezzo_lordo_entry.set_text(str(prezzi["prezzoIngrosso"]))
  166. self.visualizza_prezzo_alternativo = False
  167. def on_articolo_entry_focus_in_event(self, widget, event):
  168. """ controlliamo prima di effettuare una ricerca che il magazzino sia
  169. selezionato per rendere la ricerca possibile e corretta"""
  170. if not findIdFromCombobox(self.id_magazzino_combobox) and self.checkMAGAZZINO:
  171. messageInfo(msg="ATTENZIONE! \n SELEZIONARE UN MAGAZZINO\n PER UNA RICERCA CORRETTA")
  172. self.id_magazzino_combobox.grab_focus()
  173. self.checkMAGAZZINO = False
  174. def on_anagrafica_documenti_detail_vbox_key_press_event(self, widget=None, event=None):
  175. """ Mappiamo un po' di tasti su ana documenti"""
  176. keyname = gdk_keyval_name(event.keyval)
  177. if keyname == 'F4': # confermo e pulisco
  178. self.on_confirm_row_button_clicked(widget=None)
  179. elif keyname == 'F6': # confermo e non pulisco
  180. self.on_confirm_row_withoutclean_button_clicked(widget=None)
  181. def azzeraRiga(self, numero=0):
  182. """
  183. Azzera i campi del dizionario privato delle righe, alla riga
  184. indicata (o alla 0-esima)
  185. "ritAccPercentuale": 0,
  186. "rivalsaPercentuale": 0,
  187. "ritCaProvvigionale": False,
  188. "ritInarCassa":0
  189. """
  190. self._righe[numero] = {"idRiga": None,
  191. "idMagazzino": None,
  192. "magazzino": '',
  193. "idArticolo": None,
  194. "codiceArticolo": '',
  195. "descrizione": '',
  196. "percentualeIva": 0,
  197. "idAliquotaIva":None,
  198. "idUnitaBase": None,
  199. "unitaBase": '',
  200. "idMultiplo": None,
  201. "multiplo": '',
  202. "idListino": None,
  203. "listino": '',
  204. "quantita": 1,
  205. "moltiplicatore": 0,
  206. "prezzoLordo": 0,
  207. "applicazioneSconti": 'scalare',
  208. "sconti": [],
  209. "prezzoNetto": 0,
  210. "totale": 0,
  211. "codiceArticoloFornitore": '',
  212. "prezzoNettoUltimo": 0,
  213. "quantita_minima": None,
  214. "ritenute" : [],
  215. "numeroLottoArticoloFornitura":None,
  216. "dataScadenzaArticoloFornitura":None,
  217. "dataProduzioneArticoloFornitura":None,
  218. "dataPrezzoFornitura":None,
  219. "ordineMinimoFornitura":None,
  220. "tempoArrivoFornitura":None,
  221. }
  222. if posso("SM"):
  223. AnagraficaDocumentiEditSuMisuraExt.azzeraRiga(self,numero)
  224. if posso("PW"):
  225. AnagraficaDocumentiEditPromoWearExt.azzeraRiga(self,numero)
  226. if posso("GN"):
  227. AnagraficaDocumentiEditGestioneNoleggioExt.azzeraRiga(self,numero)
  228. def azzeraRigaPartial(self, numero = 0, rigatampone=None):
  229. """
  230. Azzera i campi del dizionario privato delle righe, alla riga
  231. indicata (o alla 0-esima)
  232. """
  233. self._righe[numero] = {"idRiga": None,
  234. "idMagazzino": rigatampone['idMagazzino'],
  235. "magazzino": rigatampone['magazzino'],
  236. "idArticolo": rigatampone['idArticolo'],
  237. "codiceArticolo": rigatampone['codiceArticolo'],
  238. "descrizione": rigatampone['descrizione'],
  239. "percentualeIva": rigatampone['percentualeIva'],
  240. "idAliquotaIva": rigatampone['idAliquotaIva'],
  241. "idUnitaBase": rigatampone['idUnitaBase'],
  242. "unitaBase": rigatampone['unitaBase'],
  243. "idMultiplo": rigatampone['idMultiplo'],
  244. "multiplo": rigatampone['multiplo'],
  245. "idListino": rigatampone['idListino'],
  246. "listino": rigatampone['listino'],
  247. "quantita": rigatampone['quantita'],
  248. "moltiplicatore": rigatampone['moltiplicatore'],
  249. "prezzoLordo": rigatampone['prezzoLordo'],
  250. "applicazioneSconti": 'scalare',
  251. "sconti": rigatampone['sconti'],
  252. "prezzoNetto": rigatampone['prezzoNetto'],
  253. "totale": rigatampone['totale'],
  254. "codiceArticoloFornitore": rigatampone['codiceArticoloFornitore'],
  255. "prezzoNettoUltimo": rigatampone['prezzoNettoUltimo'],
  256. "quantita_minima": rigatampone['quantita_minima'],
  257. "ritenute" : rigatampone['ritenute'],
  258. }
  259. if posso("SM"):
  260. AnagraficaDocumentiEditSuMisuraExt.azzeraRigaPartial(self,numero, rigatampone)
  261. def nuovaRiga(self):
  262. """
  263. Prepara per l'inserimento di una nuova riga
  264. """
  265. self._numRiga = 0
  266. self.azzeraRiga(0)
  267. self.articolo_entry.set_text('')
  268. self.unitaBaseLabel.set_text('')
  269. self.descrizione_entry.set_text('')
  270. self.codice_articolo_fornitore_entry.set_text('')
  271. self.numero_lotto_entry.set_text("")
  272. self.data_scadenza_datewidget.set_text('')
  273. self.data_produzione_datewidget.set_text('')
  274. self.ordine_minimo_entry.set_text('')
  275. self.tempo_arrivo_merce_entry.set_text('')
  276. self.data_prezzo_datewidget.set_text('')
  277. self.id_iva_customcombobox.combobox.set_active(-1)
  278. # self.percentuale_iva_entry.set_text('0')
  279. self.id_multiplo_customcombobox.combobox.clear()
  280. self.id_listino_customcombobox.combobox.clear()
  281. self.prezzo_lordo_entry.set_text('0')
  282. self.quantita_entry.set_text('1')
  283. self.prezzo_netto_label.set_text('0')
  284. self.sconti_widget.clearValues()
  285. self.totale_riga_label.set_text('0')
  286. self.giacenza_label.set_text('0')
  287. self.quantitaMinima_label.set_text('0')
  288. self.ritenuta_percentuale_entry.set_text('')
  289. self.rivalsa_percentuale_entry.set_text('')
  290. self.provvigionale_check.set_active(False)
  291. if posso("PW"):
  292. AnagraficaDocumentiEditPromoWearExt.setLabelInfo(self)
  293. if posso("SM"):
  294. AnagraficaDocumentiEditSuMisuraExt.setLabels(self)
  295. if posso("GN"):
  296. AnagraficaDocumentiEditGestioneNoleggioExt.setLabels(self)
  297. if posso("PA"):
  298. AnagraficadocumentiPagamentExt.nuovaRiga(self)
  299. AnagraficadocumentiPagamentExt.attiva_prima_scadenza(self,False, True)
  300. AnagraficadocumentiPagamentExt.attiva_seconda_scadenza(self,False, True)
  301. AnagraficadocumentiPagamentExt.attiva_terza_scadenza(self,False, True)
  302. AnagraficadocumentiPagamentExt.attiva_quarta_scadenza(self,False, True)
  303. if len(self._righe) > 1:
  304. self.data_documento_entry.set_sensitive(False)
  305. self.id_operazione_combobox.set_sensitive(False)
  306. self.id_persona_giuridica_customcombobox.set_sensitive(False)
  307. self.articolo_entry.grab_focus()
  308. else:
  309. self.data_documento_entry.set_sensitive(True)
  310. self.id_persona_giuridica_customcombobox.set_sensitive(self.id_operazione_combobox.get_active() != -1)
  311. self.id_operazione_combobox.set_sensitive(True)
  312. if self._anagrafica._magazzinoFissato:
  313. findComboboxRowFromId(self.id_magazzino_combobox, self._anagrafica._idMagazzino)
  314. elif self._id_magazzino is not None:
  315. findComboboxRowFromId(self.id_magazzino_combobox, self._id_magazzino)
  316. self.id_magazzino_combobox.grab_focus()
  317. def nuovaRigaNoClean(self, rigatampone=None):
  318. """ Prepara per l'inserimento di una nuova riga seza cancellare i campi
  319. TODO: aggiungere campi fornitura"""
  320. self._numRiga = 0
  321. self.azzeraRigaPartial(0, rigatampone=rigatampone)
  322. self.unitaBaseLabel.set_text(rigatampone['unitaBase'])
  323. self.codice_articolo_fornitore_entry.set_text(rigatampone['codiceArticoloFornitore'])
  324. def clearRows(self):
  325. """ pulisce i campi per il trattamento e la conservazione delle righe """
  326. self._righe = []
  327. self._righe.append({})
  328. self._numRiga = 0
  329. if posso("ADR"):
  330. self.dati_adr = {}
  331. AnagraficaDocumentiEditADRExt.setLabels(self)
  332. self.modelRiga.clear()
  333. self._iteratorRiga = None
  334. self.nuovaRiga()
  335. def refresh_combobox_listini(self):
  336. if self._righe[0]["idArticolo"] is None:
  337. self.id_listino_customcombobox.combobox.clear
  338. else:
  339. a = fillComboboxListiniFiltrati(self.id_listino_customcombobox.combobox,
  340. self._righe[0]["idArticolo"],
  341. self._righe[0]["idMagazzino"],
  342. self.id_persona_giuridica_customcombobox.getId())
  343. if self._id_listino:
  344. findComboboxRowFromId(self.id_listino_customcombobox.combobox, self._id_listino)
  345. def on_id_multiplo_customcombobox_button_clicked(self, widget, toggleButton):
  346. """ FIXME """
  347. on_id_multiplo_customcombobox_clicked(widget, toggleButton, self._righe[0]["idArticolo"])
  348. def on_id_multiplo_customcombobox_changed(self, combobox):
  349. """ FIXME """
  350. if self._loading:
  351. return
  352. self._righe[0]["idMultiplo"] = findIdFromCombobox(self.id_multiplo_customcombobox.combobox)
  353. #multiplo = leggiMultiplo(self._righe[0]["idMultiplo"])
  354. multiplo = Multiplo().getRecord(id=self._righe[0]["idMultiplo"])
  355. if multiplo:
  356. self._righe[0]["multiplo"] = multiplo.denominazione_breve + ' ( ' + str(multiplo.moltiplicatore) + ' X )'
  357. self._righe[0]["moltiplicatore"] = multiplo.moltiplicatore
  358. self.calcolaTotaleRiga()
  359. def getPrezzoVenditaLordo(self, idListino, idArticolo):
  360. """ cerca il prezzo di vendita """
  361. prezzoLordo = 0
  362. sconti = []
  363. applicazione = "scalare"
  364. if idListino is not None and idArticolo is not None:
  365. listino = leggiListino(idListino, idArticolo)
  366. self._righe[0]["listino"] = listino["denominazione"]
  367. if (self._fonteValore == "vendita_iva"):
  368. prezzoLordo = listino["prezzoDettaglio"]
  369. sconti = listino["scontiDettaglio"]
  370. applicazione = listino["applicazioneScontiDettaglio"]
  371. elif (self._fonteValore == "vendita_senza_iva"):
  372. prezzoLordo = listino["prezzoIngrosso"]
  373. sconti = listino["scontiIngrosso"]
  374. applicazione = listino["applicazioneScontiIngrosso"]
  375. self._righe[0]["prezzoLordo"] = prezzoLordo
  376. self._righe[0]["idListino"] = idListino
  377. self._righe[0]["sconti"] = sconti
  378. self._righe[0]["applicazioneSconti"] = applicazione
  379. def _getPrezzoAcquisto(self):
  380. """ Lettura del prezzo di acquisto netto che serve per i noleggi """
  381. fornitura = leggiFornitura(self._righe[0]["idArticolo"], data=datetime.datetime.now())
  382. prezzo = fornitura["prezzoNetto"]
  383. self.prezzo_aquisto_entry.set_text(str(prezzo) or "0")
  384. def on_sconti_widget_button_toggled(self, button):
  385. """ """
  386. if button.get_property('active') is True:
  387. return
  388. self._righe[0]["sconti"] = self.sconti_widget.getSconti()
  389. self._righe[0]["applicazioneSconti"] = self.sconti_widget.getApplicazione()
  390. self.on_show_totali_riga()
  391. def on_sconti_testata_widget_button_toggled(self, button):
  392. """ """
  393. if button.get_property('active') is True:
  394. return
  395. self.calcolaTotale()
  396. def on_notebook_select_page(self,notebook,move_focus=None, page=None, page_num=None):
  397. """ AL MOMENTO INUTILIZZATA"""
  398. return
  399. def on_notebook_switch_page(self, notebook, page, page_num):
  400. if page_num == 2:
  401. self.calcolaTotale()
  402. elif page_num ==3:
  403. if not posso("PA"):
  404. fencemsg()
  405. self.calcola_importi_scadenza_button.set_sensitive(False)
  406. self.controlla_rate_scadenza_button.set_sensitive(False)
  407. self.pulisci_scadenza_button.set_sensitive(False)
  408. else:
  409. id_pag = findIdFromCombobox(self.id_pagamento_customcombobox.combobox)
  410. pago = Pagamento().getRecord(id=id_pag)
  411. self.primanota_check.set_active(self.dao.ripartire_importo or False)
  412. if pago:
  413. self.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str(pago.denominazione)+'</span></b>')
  414. else:
  415. self.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str("NESSUNO?")+'</span></b>')
  416. self.on_aggiorna_pagamenti_button_clicked(self.aggiorna_pagamenti_button)
  417. if self.dao.documento_saldato:
  418. self.chiudi_pagamento_documento_button.set_sensitive(False)
  419. else:
  420. self.apri_pagamento_documento_button.set_sensitive(False)
  421. #print "passato al terzo tab"
  422. def on_rent_checkbutton_toggled(self, checkbutton=None):
  423. """ check button in schermata documenti relativa al noleggio """
  424. stato = self.rent_checkbutton.get_active()
  425. self.noleggio = stato
  426. if not self.noleggio:
  427. self.prezzo_aquisto_entry.set_sensitive(False)
  428. self.coeficente_noleggio_entry.set_sensitive(False)
  429. self.totale_periodo_label.set_sensitive(False)
  430. self.giorni_label.set_sensitive(False)
  431. self.label40.set_sensitive(False)
  432. self.label33.set_sensitive(False)
  433. self.label31.set_sensitive(False)
  434. else:
  435. self.prezzo_aquisto_entry.set_sensitive(True)
  436. self.coeficente_noleggio_entry.set_sensitive(True)
  437. self.totale_periodo_label.set_sensitive(True)
  438. self.giorni_label.set_sensitive(True)
  439. self.label40.set_sensitive(True)
  440. self.label33.set_sensitive(True)
  441. self.label31.set_sensitive(True)
  442. def _refresh(self):
  443. """ Funzione importantissima di "impianto" del documento nella UI"""
  444. self._loading = True
  445. self._tipoPersonaGiuridica = None
  446. self._operazione = None
  447. self._fonteValore = None
  448. self._segno = None
  449. self._variazioneListiniResponse = ''
  450. self._variazioneListiniShow = True
  451. self.data_documento_entry.set_sensitive(self.dao.id is None)
  452. self.edit_date_and_number_button.set_sensitive(self.dao.id is not None)
  453. self.numero_documento_entry.set_sensitive(False)
  454. self.id_operazione_combobox.set_sensitive(self.dao.id is None)
  455. self.id_persona_giuridica_customcombobox.set_sensitive(self.dao.id is None)
  456. self.id_operazione_combobox.set_active(-1)
  457. self.id_persona_giuridica_customcombobox.set_active(-1)
  458. self._operazione = self.dao.operazione
  459. findComboboxRowFromId(self.id_operazione_combobox, self.dao.operazione)
  460. self.on_id_operazione_combobox_changed(self.id_operazione_combobox)
  461. self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=False)
  462. if self._tipoPersonaGiuridica == "fornitore":
  463. self.id_persona_giuridica_customcombobox.setId(self.dao.id_fornitore)
  464. self.id_destinazione_merce_customcombobox.combobox.clear()
  465. self.id_destinazione_merce_customcombobox.set_sensitive(False)
  466. elif self._tipoPersonaGiuridica == "cliente":
  467. self.id_persona_giuridica_customcombobox.setId(self.dao.id_cliente)
  468. fillComboboxDestinazioniMerce(self.id_destinazione_merce_customcombobox.combobox,
  469. self.dao.id_cliente)
  470. findComboboxRowFromId(self.id_destinazione_merce_customcombobox.combobox,
  471. (self.dao.id_destinazione_merce or -1))
  472. self.id_destinazione_merce_customcombobox.combobox.set_sensitive(True)
  473. self.data_documento_entry.set_text(dateToString(self.dao.data_documento))
  474. self.numero_documento_entry.set_text(str(self.dao.numero or '0'))
  475. self.showDatiMovimento()
  476. if posso("GN"):
  477. self.start_rent_entry.set_text(dateTimeToString(self.dao.data_inizio_noleggio))
  478. self.end_rent_entry.set_text(dateTimeToString(self.dao.data_fine_noleggio))
  479. # self.on_end_rent_entry_focus_out_event()
  480. findComboboxRowFromId(self.id_pagamento_customcombobox.combobox, self.dao.id_pagamento)
  481. findComboboxRowFromId(self.id_banca_customcombobox.combobox, (self.dao.id_banca or -1) )
  482. findComboboxRowFromId(self.id_aliquota_iva_esenzione_customcombobox.combobox,
  483. (self.dao.id_aliquota_iva_esenzione or -1))
  484. self.id_agente_customcombobox.refresh(clear=True, filter=False)
  485. insertComboboxSearchAgente(self.id_agente_customcombobox,
  486. self.dao.id_agente)
  487. self.protocollo_entry1.set_text(self.dao.protocollo or '')
  488. self.note_pie_pagina_comboboxentry.get_child().set_text(self.dao.note_pie_pagina or '')
  489. textBuffer = self.note_interne_textview.get_buffer()
  490. if self.dao.note_interne is not None:
  491. textBuffer.set_text(self.dao.note_interne)
  492. else:
  493. textBuffer.set_text('')
  494. self.note_interne_textview.set_buffer(textBuffer)
  495. self.causale_trasporto_comboboxentry.get_child().set_text(self.dao.causale_trasporto or '')
  496. self.aspetto_esteriore_beni_comboboxentry.get_child().set_text(self.dao.aspetto_esteriore_beni or '')
  497. self.inizio_trasporto_entry.set_text(dateTimeToString(self.dao.inizio_trasporto))
  498. self.fine_trasporto_entry.set_text(dateTimeToString(self.dao.fine_trasporto))
  499. self.id_vettore_customcombobox.refresh(clear=True, filter=False)
  500. if self.dao.incaricato_trasporto == 'vettore':
  501. # Se l'incaricato e` un vettore, allora bisogna attivare il campo Porto
  502. self.vettore_radiobutton.set_active(True)
  503. insertComboboxSearchVettore(self.id_vettore_customcombobox,
  504. self.dao.id_vettore)
  505. self.porto_combobox.set_sensitive(True)
  506. if self.dao.porto == 'Franco':
  507. self.porto_combobox.set_active(1)
  508. elif self.dao.porto == 'Assegnato':
  509. self.porto_combobox.set_active(2)
  510. self.id_vettore_customcombobox.set_sensitive(True)
  511. if self.dao.incaricato_trasporto == 'destinatario':
  512. self.destinatario_radiobutton.set_active(True)
  513. self.id_vettore_customcombobox.set_sensitive(False)
  514. self.porto_combobox.set_sensitive(False)
  515. elif self.dao.incaricato_trasporto == 'mittente':
  516. self.mittente_radiobutton.set_active(True)
  517. self.id_vettore_customcombobox.set_sensitive(False)
  518. self.porto_combobox.set_sensitive(False)
  519. self.totale_colli_entry.set_text(str(self.dao.totale_colli or 0))
  520. self.totale_peso_entry.set_text(str(self.dao.totale_peso or 0))
  521. self.sconti_testata_widget.setValues(self.dao.sconti, self.dao.applicazione_sconti)
  522. # gestione righe documento in visualizzazione
  523. self.clearRows()
  524. scarta = False
  525. for riga in self.dao.righe:
  526. if posso("ADR"):
  527. # Scartiamo le righe di riepilogo ADR
  528. if "RIEPILOGO" in riga.descrizione:
  529. scarta = True
  530. continue
  531. if scarta:
  532. continue
  533. self.azzeraRiga(0)
  534. j = self.dao.righe.index(riga) + 1
  535. magazzino = leggiMagazzino(riga.id_magazzino)
  536. #magazzino = Magazzino().getRecord(id=riga.id_magazzino)
  537. articolo = leggiArticolo(riga.id_articolo)
  538. listino = leggiListino(riga.id_listino)
  539. multiplo = leggiMultiplo(riga.id_multiplo)
  540. (sconti, applicazione) = getScontiFromDao(
  541. riga.sconti, riga.applicazione_sconti)
  542. if posso("SM") and riga.misura_pezzo:
  543. altezza = (riga.misura_pezzo[-1].altezza)
  544. larghezza = (riga.misura_pezzo[-1].larghezza)
  545. moltiplicatore_pezzi = riga.misura_pezzo[-1].moltiplicatore
  546. else:
  547. altezza = ''
  548. larghezza = ''
  549. moltiplicatore_pezzi = ''
  550. self._righe[0]["idRiga"] = riga.id
  551. self._righe[0]["idMagazzino"] = riga.id_magazzino
  552. self._righe[0]["magazzino"] = magazzino['denominazione']
  553. self._righe[0]["idArticolo"] = riga.id_articolo
  554. self._righe[0]["codiceArticolo"] = articolo["codice"]
  555. self._righe[0]["descrizione"] = riga.descrizione
  556. self._righe[0]["percentualeIva"] = mN(riga.percentuale_iva,0)
  557. # Questo valore potrebbe essere a none per le righe
  558. #precedenti il 19/02/2011 , cerchiamo di derurre l'id e lo settiamo
  559. idiva = None
  560. if riga.id_iva == None:
  561. if riga.id_articolo is not None:
  562. #siamo di fronte ad un articolo "vecchio"
  563. art = Articolo().getRecord(id=riga.id_articolo)
  564. ivaart = art.id_aliquota_iva
  565. daoiva = AliquotaIva().select(percentuale=riga.percentuale_iva)
  566. if daoiva:
  567. idiva = daoiva[0].id
  568. else:
  569. if riga.percentuale_iva != 0:
  570. #riga descrittiva
  571. daoiva = AliquotaIva().select(percentuale=riga.percentuale_iva)
  572. if daoiva:
  573. idiva = daoiva[0].id
  574. else:
  575. idiva = riga.id_iva
  576. self._righe[0]["idAliquotaIva"] = idiva
  577. self._righe[0]["idUnitaBase"] = articolo["idUnitaBase"]
  578. self._righe[0]["unitaBase"] = articolo["unitaBase"]
  579. self._righe[0]["idMultiplo"] = riga.id_multiplo
  580. if multiplo["moltiplicatore"] != 0:
  581. self._righe[0]["multiplo"] = multiplo["denominazioneBreve"] + ' ( ' + str(mN(multiplo["moltiplicatore"],2)) + ' X )'
  582. else:
  583. self._righe[0]["multiplo"] = ''
  584. self._righe[0]["idListino"] = riga.id_listino
  585. self._righe[0]["listino"] = listino["denominazione"]
  586. self._righe[0]["quantita"] = mN(riga.quantita)
  587. self._righe[0]["moltiplicatore"] = mN(riga.moltiplicatore,2)
  588. self._righe[0]["prezzoLordo"] = mN(riga.valore_unitario_lordo)
  589. self._righe[0]["sconti"] = sconti
  590. self._righe[0]["applicazioneSconti"] = applicazione
  591. self._righe[0]["prezzoNetto"] = Decimal(riga.valore_unitario_netto)
  592. self._righe[0]["prezzoNettoUltimo"] = Decimal(riga.valore_unitario_netto)
  593. self._righe[0]["totale"] = 0
  594. if posso("ADR"):
  595. artADR = AnagraficaDocumentiEditADRExt.getADRArticolo(riga.id_articolo)
  596. if artADR:
  597. # Calcola se viene superato il limite massimo di esenzione
  598. AnagraficaDocumentiEditADRExt.calcolaLimiteTrasportoADR(self, artADR)
  599. if posso("SM"):
  600. self._righe[0]["altezza"] = mN(altezza)
  601. self._righe[0]["larghezza"] = mN(larghezza)
  602. self._righe[0]["molt_pezzi"] =mN(moltiplicatore_pezzi)
  603. if posso("GN"):
  604. print " ISRENT ",riga.isrent
  605. if riga.isrent :
  606. self._righe[0]["arco_temporale"] = self.giorni_label.get_text()
  607. else:
  608. self._righe[0]["arco_temporale"] = "NO"
  609. self._righe[0]["prezzo_acquisto"] = mN(riga.prezzo_acquisto_noleggio)
  610. self._righe[0]["divisore_noleggio"] = mN(riga.coeficente_noleggio)
  611. self.getTotaleRiga()
  612. if posso("GN") and self._righe[0]["arco_temporale"] != "NO" :
  613. totaleNoleggio = AnagraficaDocumentiEditGestioneNoleggioExt.totaleNoleggio(self)
  614. self.unitaBaseLabel.set_text(self._righe[0]["unitaBase"])
  615. if self._tipoPersonaGiuridica == "fornitore":
  616. fornitura = leggiFornitura(riga.id_articolo, self.dao.id_fornitore, self.dao.data_documento, True)
  617. self._righe[0]["codiceArticoloFornitore"] = fornitura["codiceArticoloFornitore"] #or articolo["codicearticolofornitore"]
  618. self._righe[0]["numeroLottoArticoloFornitura"] = fornitura["numeroLottoArticoloFornitura"]
  619. self._righe[0]["dataScadenzaArticoloFornitura"] = fornitura["dataScadenzaArticoloFornitura"]
  620. self._righe[0]["dataProduzioneArticoloFornitura"] = fornitura["dataProduzioneArticoloFornitura"]
  621. self._righe[0]["dataPrezzoFornitura"] = fornitura["dataPrezzoFornitura"]
  622. self._righe[0]["ordineMinimoFornitura"] = fornitura["ordineMinimoFornitura"]
  623. self._righe[0]["tempoArrivoFornitura"] = fornitura["tempoArrivoFornitura"]
  624. self._righe.append(self._righe[0])
  625. rigadoc= self._righe[j]
  626. if posso("SM"):
  627. altezza=rigadoc["altezza"]
  628. larghezza =rigadoc["larghezza"]
  629. molt_pezzi = rigadoc["molt_pezzi"]
  630. else:
  631. altezza = larghezza= molt_pezzi= ""
  632. #riempimento della treeview righe
  633. if posso("GN"):
  634. arc_temp = rigadoc["arco_temporale"]
  635. else:
  636. arc_temp = ""
  637. row = [j,
  638. rigadoc["magazzino"],
  639. rigadoc["codiceArticolo"],
  640. rigadoc["descrizione"],
  641. str(rigadoc["percentualeIva"]),
  642. str(altezza),
  643. str(larghezza),
  644. str(molt_pezzi),
  645. str(rigadoc["multiplo"]),
  646. rigadoc["listino"],
  647. rigadoc["unitaBase"],
  648. str(rigadoc["quantita"]),
  649. str(rigadoc["prezzoLordo"]),
  650. rigadoc["applicazioneSconti"] + ' ' + getStringaSconti(rigadoc["sconti"]),
  651. str(rigadoc["prezzoNetto"]),
  652. arc_temp,
  653. str(rigadoc["totale"])]
  654. self.modelRiga.append(row)
  655. self._loading = False
  656. if self.oneshot : self.persona_giuridica_changed()
  657. self.oneshot =False
  658. self.calcolaTotale()
  659. self.label_numero_righe.set_text(str(len(self.dao.righe)))
  660. #setto il notebook sulla prima pagina principale
  661. self.notebook.set_current_page(0)
  662. #imposto una nuova riga
  663. self.nuovaRiga()
  664. if self.dao.id is None or self.numero_documento_entry.get_text() == '0':
  665. self.id_operazione_combobox.grab_focus()
  666. else:
  667. self.id_magazzino_combobox.grab_focus()
  668. if posso("PA"):
  669. AnagraficadocumentiPagamentExt.getScadenze(self)
  670. def setDao(self, dao):
  671. """
  672. imposta un nuovo dao Testata documento
  673. """
  674. self.destinatario_radiobutton.set_active(True)
  675. self.id_vettore_customcombobox.set_sensitive(False)
  676. if dao is None:
  677. # Crea un nuovo Dao vuoto
  678. #Environment.tagliacoloretempdata = (False,[])
  679. self.dao = TestataDocumento()
  680. # Suggerisce la data odierna
  681. self.dao.data_documento = datetime.datetime.today()
  682. self._oldDaoRicreato = False #il dao č nuovo il controllo sul nuovo codice č necessario
  683. try:
  684. op = setconf("Documenti", "tipo_documento_predefinito")
  685. if op:
  686. self.dao.operazione = op
  687. except:
  688. pass
  689. # print "TIPO_DOCUMENTO_PREDEFINITO NON SETTATO"
  690. try:
  691. cli = setconf("Documenti", "cliente_predefinito")
  692. if cli:
  693. self.dao.id_cliente = int(cli)
  694. self.oneshot = True
  695. self.articolo_entry.grab_focus()
  696. except:
  697. pass
  698. # print "CLIENTE_PREDEFINITO NON SETTATO"
  699. try:
  700. forn = setconf("Documenti", "fornitore_predefinito")
  701. if forn:
  702. self.dao.id_fornitore = int(forn)
  703. self.oneshot = True
  704. self.articolo_entry.grab_focus()
  705. except:
  706. pass
  707. # print "FORNITORE_PREDEFINITO NON SETTATO"
  708. else:
  709. # Ricrea il Dao prendendolo dal DB
  710. self.dao = TestataDocumento().getRecord(id=dao.id)
  711. self._controllo_data_documento = dateToString(self.dao.data_documento)
  712. self._controllo_numero_documento = self.dao.numero
  713. self.oneshot = False
  714. self._oldDaoRicreato = True #il dao č nuovo il controllo sul nuovo codice non č necessario
  715. self._refresh()
  716. return self.dao
  717. def saveDao(self, tipo=None):
  718. """ Salvataggio del Dao
  719. """
  720. if posso("ADR") and tipo==GTK_RESPONSE_OK:
  721. AnagraficaDocumentiEditADRExt.sposta_sommario_in_tabella(self)
  722. scontiRigaDocumentoList = {}
  723. if not(len(self._righe) > 1):
  724. messageInfo(msg="TENTATIVO DI SALVATAGGIO DOCUMENTO SENZA RIGHE???")
  725. raise Exception, "ATTENZIONE, TENTATIVO DI SALVATAGGIO SENZA RIGHE?????"
  726. if (self.data_documento_entry.get_text() == ''):
  727. obligatoryField(self.dialogTopLevel,
  728. self.data_documento_entry,
  729. 'Inserire la data del documento !')
  730. if (findIdFromCombobox(self.id_operazione_combobox) is None):
  731. obligatoryField(self.dialogTopLevel,
  732. self.id_operazione_combobox,
  733. 'Inserire il tipo di documento !')
  734. if self.id_persona_giuridica_customcombobox.getId() is None:
  735. obligatoryField(self.dialogTopLevel,
  736. self.id_persona_giuridica_customcombobox,
  737. 'Inserire l\'intestatario del documento !')
  738. self.dao.data_documento = stringToDate(self.data_documento_entry.get_text())
  739. date = time.strftime("%Y")
  740. if date != Environment.workingYear:
  741. print "ATTENZIONE ANNO DI LAVORO DIVERSO QUALE PRENDERE??????"
  742. msg = """ ATTENZIONE!!
  743. L'anno di lavoro e l'anno di creazione documento non corrispondono.
  744. Vuoi che la DATA UTILIZZATA SIA 31/12/%s?
  745. """ %str(Environment.workingYear)
  746. if YesNoDialog(msg=msg, transient=None):
  747. self.dao.data_documento = stringToDate("31/12/"+Environment.workingYear)
  748. if self.dao.id is not None and self.numero_documento_entry.get_text() != '0':
  749. if self.data_documento_entry.get_text() != self._controllo_data_documento\
  750. or str(self.numero_documento_entry.get_text()) != str(self._controllo_numero_documento):
  751. numero = self.numero_documento_entry.get_text()
  752. idOperazione = findIdFromCombobox(self.id_operazione_combobox)
  753. daData, aData = getDateRange(self.data_documento_entry.get_text())
  754. docs = TestataDocumento().select(daNumero=numero,
  755. aNumero=numero,
  756. daData=daData, aData=aData,
  757. idOperazione=idOperazione,
  758. offset=None,
  759. batchSize=None)
  760. if len(docs) > 0:
  761. msg = """Attenzione!
  762. Esiste giŕ un documento numero %s per
  763. l'anno di esercizio indicato nella data
  764. del documento.
  765. Continuare comunque?""" % numero
  766. if YesNoDialog(msg=msg, transient=None):
  767. print """si č deciso di salvare un documento il cui numero
  768. č giŕ stato usato per un altro. questo comporterŕ
  769. l 'esistenza di due documenti con lo stesso numero!"""
  770. self.dao.numero = numero
  771. self.dao.operazione = self._operazione
  772. pbar(self.dialog.pbar,parziale=1, totale=4)
  773. if self._tipoPersonaGiuridica == "fornitore":
  774. self.dao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
  775. self.dao.id_cliente = None
  776. self.dao.id_destinazione_merce = None
  777. elif self._tipoPersonaGiuridica == "cliente":
  778. self.dao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
  779. self.dao.id_fornitore = None
  780. self.dao.id_destinazione_merce = findIdFromCombobox(self.id_destinazione_merce_customcombobox.combobox)
  781. self.dao.id_pagamento = findIdFromCombobox(self.id_pagamento_customcombobox.combobox)
  782. self.dao.id_banca = findIdFromCombobox(self.id_banca_customcombobox.combobox)
  783. self.dao.id_aliquota_iva_esenzione = findIdFromCombobox(self.id_aliquota_iva_esenzione_customcombobox.combobox)
  784. self.dao.id_agente = self.id_agente_customcombobox._id
  785. self.dao.protocollo = self.protocollo_entry1.get_text()
  786. self.dao.causale_trasporto = self.causale_trasporto_comboboxentry.get_child().get_text()
  787. self.dao.aspetto_esteriore_beni = self.aspetto_esteriore_beni_comboboxentry.get_child().get_text()
  788. self.dao.inizio_trasporto = stringToDateTime(self.inizio_trasporto_entry.get_text())
  789. self.dao.fine_trasporto = stringToDateTime(self.fine_trasporto_entry.get_text())
  790. if self.vettore_radiobutton.get_active():
  791. self.dao.id_vettore = self.id_vettore_customcombobox._id
  792. self.dao.incaricato_trasporto = 'vettore'
  793. if self.porto_combobox.get_active() == 1:
  794. self.dao.porto = 'Franco'
  795. elif self.porto_combobox.get_active() == 2:
  796. self.dao.porto = 'Assegnato'
  797. if not self.dao.id_vettore:
  798. obligatoryField(self.dialogTopLevel,
  799. self.id_vettore_customcombobox,
  800. 'Quando si seleziona vettore č obbligatorio settarne uno!')
  801. elif self.mittente_radiobutton.get_active():
  802. self.dao.id_vettore = None
  803. self.dao.incaricato_trasporto = 'mittente'
  804. self.dao.porto = 'Franco'
  805. elif self.destinatario_radiobutton.get_active():
  806. self.dao.id_vettore = None
  807. self.dao.incaricato_trasporto = 'destinatario'
  808. self.dao.porto = 'Assegnato'
  809. self.dao.totale_colli = float(self.totale_colli_entry.get_text() or 0)
  810. self.dao.totale_peso = self.totale_peso_entry.get_text()
  811. textBuffer = self.note_interne_textview.get_buffer()
  812. self.dao.note_interne = textBuffer.get_text(textBuffer.get_start_iter(), textBuffer.get_end_iter(),True)
  813. self.dao.note_pie_pagina = self.note_pie_pagina_comboboxentry.get_active_text()
  814. self.dao.applicazione_sconti = self.sconti_testata_widget.getApplicazione()
  815. if posso("GN"):
  816. self.dao.data_inizio_noleggio= self.start_rent_entry.get_text()
  817. self.dao.data_fine_noleggio = self.end_rent_entry.get_text()
  818. pbar(self.dialog.pbar,parziale=2, totale=4)
  819. scontiSuTotale = []
  820. res = self.sconti_testata_widget.getSconti()
  821. if res:
  822. for scrow in res:
  823. daoScontost = ScontoTestataDocumento()
  824. daoScontost.valore = scrow["valore"]
  825. daoScontost.tipo_sconto = scrow["tipo"]
  826. scontiSuTotale.append(daoScontost)
  827. self.dao.scontiSuTotale = scontiSuTotale
  828. scontiRigaDocumento=[]
  829. righeDocumento = []
  830. for i in range(1, len(self._righe)):
  831. pbar(self.dialog.pbar,parziale=(3+(i/100)), totale=4)
  832. daoRiga = RigaDocumento()
  833. daoRiga.id_testata_documento = self.dao.id
  834. daoRiga.id_articolo = self._righe[i]["idArticolo"]
  835. daoRiga.id_magazzino = self._righe[i]["idMagazzino"]
  836. daoRiga.descrizione = self._righe[i]["descrizione"]
  837. daoRiga.codiceArticoloFornitore = self._righe[i]["codiceArticoloFornitore"]
  838. #aggancio degli attributi all'oggetto riga per portarli in salvataggio
  839. # alla fornitura...
  840. setattr(daoRiga,"numero_lotto",self._righe[i]["numeroLottoArticoloFornitura"])
  841. setattr(daoRiga,"data_scadenza",self._righe[i]["dataScadenzaArticoloFornitura"])
  842. setattr(daoRiga,"data_produzione",self._righe[i]["dataProduzioneArticoloFornitura"])
  843. setattr(daoRiga,"data_prezzo",self._righe[i]["dataPrezzoFornitura"])
  844. setattr(daoRiga,"ordine_minimo",self._righe[i]["ordineMinimoFornitura"])
  845. setattr(daoRiga,"tempo_arrivo",self._righe[i]["tempoArrivoFornitura"])
  846. daoRiga.id_listino = self._righe[i]["idListino"]
  847. daoRiga.percentuale_iva = self._righe[i]["percentualeIva"]
  848. daoRiga.id_iva = self._righe[i]["idAliquotaIva"]
  849. daoRiga.applicazione_sconti = self._righe[i]["applicazioneSconti"]
  850. daoRiga.quantita = self._righe[i]["quantita"]
  851. daoRiga.id_multiplo = self._righe[i]["idMultiplo"]
  852. daoRiga.moltiplicatore = self._righe[i]["moltiplicatore"]
  853. daoRiga.valore_unitario_lordo = self._righe[i]["prezzoLordo"]
  854. daoRiga.valore_unitario_netto = self._righe[i]["prezzoNetto"]
  855. # pbar(self.dialog.pbar,pulse=True)
  856. if posso("GN"):
  857. daoRiga.prezzo_acquisto_noleggio = self._righe[i]["prezzo_acquisto"]
  858. daoRiga.coeficente_noleggio = self._righe[i]["divisore_noleggio"]
  859. if self._righe[i]["arco_temporale"] != "NO":
  860. daoRiga.isrent = "True"
  861. else:
  862. daoRiga.isrent = "False"
  863. sconti =[]
  864. listsco=[]
  865. if self._righe[i]["sconti"] is not None:
  866. for scon in self._righe[i]["sconti"]:
  867. daoSconto = ScontoRigaDocumento()
  868. daoSconto.valore = scon["valore"]
  869. daoSconto.tipo_sconto = scon["tipo"]
  870. scontiRigaDocumento.append(daoSconto)
  871. #scontiRigaDocumento[daoRiga] = sconti
  872. daoRiga.scontiRigaDocumento = scontiRigaDocumento
  873. scontiRigaDocumento =[]
  874. misure = []
  875. if posso("SM") and \
  876. self._righe[i]["altezza"] != '' and \
  877. self._righe[i]["larghezza"] != '':
  878. daoMisura = MisuraPezzo()
  879. daoMisura.altezza = float(self._righe[i]["altezza"] or 0)
  880. daoMisura.larghezza = float(self._righe[i]["larghezza"] or 0)
  881. daoMisura.moltiplicatore = float(self._righe[i]["molt_pezzi"] or 0)
  882. daoRiga.misura_pezzo = [daoMisura]
  883. #righe[i]=daoRiga
  884. ### Sezion dedicata alla gestione della ritenuta d'acconto
  885. ### della rivalsa e dela inarcassa
  886. #"ritAccPercentuale": 0, "rivalsaPercentuale": 0,
  887. #"ritCaProvvigionale": False, "ritInarCassa":0
  888. if self._righe[i]["ritenute"]:
  889. daoRiteAcc = RigaRitenutaAcconto()
  890. daoRiteAcc.provvigionale = self._righe[i]["ritenute"]["ritCaProvvigionale"]
  891. daoRiteAcc.ritenuta_percentuale = float(self._righe[i]["ritenute"]["ritAccPercentuale"] or 0)
  892. daoRiteAcc.rivalsa_percentuale = float(self._righe[i]["ritenute"]["rivalsaPercentuale"] or 0)
  893. daoRiteAcc.inarcassa_percentuale = float(self._righe[i]["ritenute"]["ritInarCassa"] or 0)
  894. daoRiga.ritenute = daoRiteAcc
  895. righeDocumento.append(daoRiga)
  896. self.dao.righeDocumento = righeDocumento
  897. if posso("PA"):
  898. #questa parte rimanda ai pagamenti
  899. AnagraficadocumentiPagamentExt.saveScadenze(self)
  900. tipoid = findIdFromCombobox(self.id_operazione_combobox)
  901. tipo = Operazione().getRecord(id=tipoid)
  902. if not self.dao.numero:
  903. valori = numeroRegistroGet(tipo=tipo.denominazione,
  904. date=self.data_documento_entry.get_text())
  905. self.dao.numero = valori[0]
  906. self.dao.registro_numerazione= valori[1]
  907. #porto in persist tre dizionari: uno per gli sconti sul totale, l'altro per gli sconti sulle righe e le righe stesse
  908. self.dao.persist()
  909. pbar(self.dialog.pbar,parziale=4, totale=4)
  910. self.label_numero_righe.hide()
  911. text = str(len(self.dao.righe))
  912. self.label_numero_righe.set_text(text)
  913. self.label_numero_righe.show()
  914. pbar(self.dialog.pbar,stop=True)
  915. def on_importo_da_ripartire_entry_changed(self, entry):
  916. return
  917. self.dao.removeDividedCost()
  918. # self.dao.ripartire_importo = False
  919. # self.ripartire_importo_checkbutton.set_active(self.dao.ripartire_importo)
  920. self.dao.costo_da_ripartire = Decimal(self.importo_da_ripartire_entry.get_text())
  921. self.importo_sovrapprezzo_label.set_te

Large files files are truncated, but you can click here to view the full file