PageRenderTime 28ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/core/promogest/ui/anagDocumenti/AnagraficaDocumentiEditUtils.py

http://promogest.googlecode.com/
Python | 715 lines | 649 code | 31 blank | 35 comment | 37 complexity | 00c0ca34422b5e7e2cbd8231b89c99f1 MD5 | raw file
Possible License(s): GPL-2.0
  1. # -*- coding: utf-8 -*-
  2. # Copyright (C) 2005, 2006, 2007 2008, 2009, 2010 by Promotux
  3. # di Francesco Meloni snc - http://www.promotux.it/
  4. # Author: Francesco Meloni <francesco@promotux.it>
  5. # This file is part of Promogest.
  6. # Promogest is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 2 of the License, or
  9. # (at your option) any later version.
  10. # Promogest is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. # You should have received a copy of the GNU General Public License
  15. # along with Promogest. If not, see <http://www.gnu.org/licenses/>.
  16. from promogest.ui.gtk_compat import *
  17. from math import sqrt
  18. from promogest.ui.GladeWidget import GladeWidget
  19. from promogest import Environment
  20. from promogest.ui.utils import *
  21. from promogest.ui.utilsCombobox import *
  22. from promogest.dao.Articolo import Articolo
  23. from promogest.dao.AliquotaIva import AliquotaIva
  24. from promogest.dao.DaoUtils import giacenzaArticolo
  25. from promogest.dao.Pagamento import Pagamento
  26. from promogest.dao.Fornitura import Fornitura
  27. from promogest.dao.TestataMovimento import TestataMovimento
  28. if posso("PW"):
  29. from promogest.modules.PromoWear.ui import AnagraficaDocumentiEditPromoWearExt
  30. if posso("SM"):
  31. from promogest.modules.SuMisura.ui import AnagraficaDocumentiEditSuMisuraExt
  32. if posso("GN"):
  33. from promogest.modules.GestioneNoleggio.ui import AnagraficaDocumentiEditGestioneNoleggioExt
  34. if posso("PA"):
  35. from promogest.modules.Pagamenti.ui import AnagraficadocumentiPagamentExt
  36. if posso("ADR"):
  37. from promogest.modules.ADR.ui import AnagraficaDocumentiEditADRExt
  38. def drawPart(anaedit):
  39. treeview = anaedit.righe_treeview
  40. rendererSx = gtk.CellRendererText()
  41. rendererDx = gtk.CellRendererText()
  42. rendererDx.set_property('xalign', 1)
  43. column = gtk.TreeViewColumn('N°', rendererSx, text=0)
  44. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  45. column.set_clickable(False)
  46. column.set_resizable(True)
  47. column.set_expand(False)
  48. treeview.append_column(column)
  49. column = gtk.TreeViewColumn('Magazzino', rendererSx, text=1)
  50. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  51. column.set_clickable(False)
  52. column.set_resizable(True)
  53. column.set_expand(False)
  54. treeview.append_column(column)
  55. column = gtk.TreeViewColumn('Codice articolo', rendererSx, text=2)
  56. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  57. column.set_clickable(False)
  58. column.set_resizable(True)
  59. column.set_expand(False)
  60. treeview.append_column(column)
  61. column = gtk.TreeViewColumn('Descrizione', rendererSx, text=3)
  62. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  63. column.set_clickable(False)
  64. column.set_resizable(True)
  65. column.set_expand(True)
  66. treeview.append_column(column)
  67. column = gtk.TreeViewColumn('% IVA', rendererDx, text=4)
  68. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  69. column.set_clickable(False)
  70. column.set_resizable(True)
  71. column.set_expand(False)
  72. treeview.append_column(column)
  73. #treeview.set_reorderable(True)
  74. if posso("SM"):
  75. AnagraficaDocumentiEditSuMisuraExt.setTreeview(treeview, rendererSx)
  76. column = gtk.TreeViewColumn('Multiplo', rendererSx, text=8)
  77. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  78. column.set_clickable(False)
  79. column.set_resizable(True)
  80. column.set_expand(False)
  81. treeview.append_column(column)
  82. column = gtk.TreeViewColumn('Listino', rendererSx, text=9)
  83. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  84. column.set_clickable(False)
  85. column.set_resizable(True)
  86. column.set_expand(False)
  87. treeview.append_column(column)
  88. column = gtk.TreeViewColumn('U.M.', rendererSx, text=10)
  89. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  90. column.set_clickable(False)
  91. column.set_resizable(True)
  92. column.set_expand(False)
  93. treeview.append_column(column)
  94. column = gtk.TreeViewColumn('Quantita''', rendererDx, text=11)
  95. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  96. column.set_clickable(False)
  97. column.set_resizable(True)
  98. column.set_expand(False)
  99. treeview.append_column(column)
  100. column = gtk.TreeViewColumn('Prezzo lordo', rendererDx, text=12)
  101. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  102. column.set_clickable(False)
  103. column.set_resizable(True)
  104. column.set_expand(False)
  105. treeview.append_column(column)
  106. column = gtk.TreeViewColumn('Sconti', rendererSx, text=13)
  107. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  108. column.set_clickable(False)
  109. column.set_resizable(True)
  110. column.set_expand(False)
  111. treeview.append_column(column)
  112. column = gtk.TreeViewColumn('Prezzo netto', rendererDx, text=14)
  113. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  114. column.set_clickable(False)
  115. column.set_resizable(True)
  116. column.set_expand(False)
  117. treeview.append_column(column)
  118. if posso("GN"):
  119. AnagraficaDocumentiEditGestioneNoleggioExt.setTreeview(treeview, rendererSx)
  120. column = gtk.TreeViewColumn('Totale', rendererDx, text=16)
  121. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  122. column.set_clickable(False)
  123. column.set_resizable(True)
  124. column.set_expand(False)
  125. treeview.append_column(column)
  126. #treeview.set_reorderable(True)
  127. fillComboboxAliquoteIva(anaedit.id_iva_customcombobox.combobox)
  128. anaedit.id_iva_customcombobox.connect('clicked',
  129. on_id_aliquota_iva_customcombobox_clicked)
  130. fillComboboxOperazioni(anaedit.id_operazione_combobox, 'documento')
  131. fillComboboxMagazzini(anaedit.id_magazzino_combobox)
  132. fillComboboxPagamenti(anaedit.id_pagamento_customcombobox.combobox)
  133. fillComboboxBanche(anaedit.id_banca_customcombobox.combobox)
  134. fillComboboxAliquoteIva(anaedit.id_aliquota_iva_esenzione_customcombobox.combobox)
  135. fillComboboxCausaliTrasporto(anaedit.causale_trasporto_comboboxentry)
  136. fillComboboxAspettoEsterioreBeni(anaedit.aspetto_esteriore_beni_comboboxentry)
  137. anaedit.id_operazione_combobox.set_wrap_width(int(setconf("Numbers", "combo_column")))
  138. anaedit.porto_combobox.set_active(-1)
  139. anaedit.porto_combobox.set_sensitive(False)
  140. fillComboboxNotePiePaginaTestataDocumento(anaedit.note_pie_pagina_comboboxentry)
  141. """ modello righe: magazzino, codice articolo,
  142. descrizione, percentuale iva, unita base, multiplo, listino,
  143. quantita, prezzo lordo, sconti, prezzo netto, totale, altezza, larghezza,molt_pezzi
  144. """
  145. anaedit.modelRiga = gtk.ListStore(int, str, str, str, str, str, str, str,\
  146. str, str, str, str, str, str, str, str, str)
  147. anaedit.righe_treeview.set_model(anaedit.modelRiga)
  148. anaedit.ricerca = None
  149. anaedit.nuovaRiga()
  150. # preferenza ricerca articolo ?
  151. """ ATTENZIONE schifezza per tamponare il bug di gtk 2.17 numero :
  152. Bug 607492 - widget.get_name(): semirisolto!!!! """
  153. crit = setconf("Documenti", "ricerca_per")
  154. anaedit.ricerca = crit
  155. if crit == 'codice':
  156. anaedit.ricerca_criterio_combobox.set_active(0)
  157. elif crit == 'codice_a_barre':
  158. anaedit.ricerca_criterio_combobox.set_active(1)
  159. elif crit == 'descrizione':
  160. anaedit.ricerca_criterio_combobox.set_active(2)
  161. elif crit == 'codice_articolo_fornitore':
  162. anaedit.ricerca_criterio_combobox.set_active(3)
  163. if not anaedit.ricerca:
  164. anaedit.ricerca_criterio_combobox.set_active(2)
  165. anaedit.id_persona_giuridica_customcombobox.setSingleValue()
  166. anaedit.id_persona_giuridica_customcombobox.setOnChangedCall(anaedit.persona_giuridica_changed)
  167. anaedit.id_destinazione_merce_customcombobox.connect('clicked',
  168. anaedit.on_id_destinazione_merce_customcombobox_button_clicked)
  169. idHandler = anaedit.id_vettore_customcombobox.connect('changed',
  170. on_combobox_vettore_search_clicked)
  171. anaedit.id_multiplo_customcombobox.combobox.connect('changed',
  172. anaedit.on_id_multiplo_customcombobox_changed)
  173. anaedit.id_listino_customcombobox.combobox.connect('changed',
  174. anaedit.on_id_listino_customcombobox_changed)
  175. anaedit.id_listino_customcombobox.button.connect('toggled',
  176. anaedit.on_id_listino_customcombobox_button_toggled)
  177. anaedit.id_pagamento_customcombobox.connect('clicked',
  178. on_id_pagamento_customcombobox_clicked)
  179. anaedit.id_banca_customcombobox.connect('clicked',
  180. on_id_banca_customcombobox_clicked)
  181. anaedit.id_aliquota_iva_esenzione_customcombobox.connect('clicked',
  182. on_id_aliquota_iva_customcombobox_clicked)
  183. anaedit.id_vettore_customcombobox.setChangedHandler(idHandler)
  184. idHandler = anaedit.id_agente_customcombobox.connect('changed',
  185. on_combobox_agente_search_clicked)
  186. anaedit.sconti_widget.button.connect('toggled',
  187. anaedit.on_sconti_widget_button_toggled)
  188. anaedit.sconti_testata_widget.button.connect('toggled',
  189. anaedit.on_sconti_testata_widget_button_toggled)
  190. if posso("PA"):
  191. # Vado a popolare anche il tab dei pagamenti
  192. AnagraficadocumentiPagamentExt.connectEntryPag(anaedit)
  193. def calcolaTotalePart(anaedit, dao=None):
  194. """ calcola i totali documento """
  195. # FIXME: duplicated in TestataDocumenti.py
  196. totaleImponibile = Decimal(0)
  197. totaleImposta = Decimal(0)
  198. totaleNonScontato = Decimal(0)
  199. totaleImpostaScontata = Decimal(0)
  200. totaleImponibileScontato = Decimal(0)
  201. totaleEsclusoBaseImponibile = Decimal(0)
  202. totaleScontato = Decimal(0)
  203. castellettoIva = {}
  204. anaedit.avvertimento_sconti_button.set_sensitive(False)
  205. anaedit.avvertimento_sconti_button.hide()
  206. totaleEsclusoBaseImponibileRiga = 0
  207. totaleImponibileRiga = 0
  208. for riga in anaedit._righe[1:]:
  209. prezzoNetto = Decimal(riga["prezzoNetto"])
  210. quantita = Decimal(riga["quantita"])
  211. moltiplicatore = Decimal(riga["moltiplicatore"])
  212. percentualeIva = Decimal(riga["percentualeIva"])
  213. idAliquotaIva = riga["idAliquotaIva"]
  214. daoiva=None
  215. if idAliquotaIva:
  216. daoiva = AliquotaIva().getRecord(id=idAliquotaIva)
  217. totaleRiga = Decimal(prezzoNetto * quantita * moltiplicatore)
  218. # PARTE dedicata al modulo noleggio ...
  219. # TODO : Rivedere quanto prima
  220. if posso("GN") and anaedit.noleggio and str(riga["arco_temporale"]) != "NO":
  221. arco_temporale = Decimal(anaedit.giorni_label.get_text())
  222. if str(riga["divisore_noleggio"]) == "1":
  223. totaleRiga = mN(totaleRiga *Decimal(riga["arco_temporale"]))
  224. else:
  225. totaleRiga= mN(totaleRiga *Decimal(str(sqrt(int(riga["arco_temporale"])))))
  226. percentualeIvaRiga = percentualeIva
  227. if (anaedit._fonteValore == "vendita_iva" or anaedit._fonteValore == "acquisto_iva"):
  228. if daoiva and daoiva.tipo_ali_iva == "Non imponibile":
  229. totaleEsclusoBaseImponibileRiga = totaleRiga
  230. totaleImponibileRiga = 0
  231. else:
  232. totaleEsclusoBaseImponibileRiga = 0
  233. totaleImponibileRiga = calcolaPrezzoIva(totaleRiga, -1 * percentualeIvaRiga) or 0
  234. else:
  235. if daoiva and daoiva.tipo_ali_iva == "Non imponibile":
  236. totaleEsclusoBaseImponibileRiga = totaleRiga
  237. totaleImponibileRiga = 0
  238. totaleRiga = calcolaPrezzoIva(totaleRiga, percentualeIvaRiga)
  239. else:
  240. totaleEsclusoBaseImponibileRiga = 0
  241. totaleImponibileRiga = totaleRiga
  242. totaleRiga = calcolaPrezzoIva(totaleRiga, percentualeIvaRiga)
  243. totaleImpostaRiga = totaleRiga - (totaleImponibileRiga+totaleEsclusoBaseImponibileRiga)
  244. totaleNonScontato += totaleRiga
  245. totaleImponibile += totaleImponibileRiga
  246. totaleImposta += totaleImpostaRiga
  247. totaleEsclusoBaseImponibile += totaleEsclusoBaseImponibileRiga
  248. if percentualeIvaRiga not in castellettoIva.keys():
  249. castellettoIva[percentualeIvaRiga] = {'percentuale': percentualeIvaRiga,
  250. 'imponibile': totaleImponibileRiga,
  251. 'imposta': totaleImpostaRiga,
  252. 'totale': totaleRiga}
  253. else:
  254. castellettoIva[percentualeIvaRiga]['percentuale'] = percentualeIvaRiga
  255. castellettoIva[percentualeIvaRiga]['imponibile'] += totaleImponibileRiga
  256. castellettoIva[percentualeIvaRiga]['imposta'] += totaleImpostaRiga
  257. castellettoIva[percentualeIvaRiga]['totale'] += totaleRiga
  258. # totaleNonScontato = totaleNonScontato
  259. # totaleImponibile = totaleImponibile
  260. totaleImposta = totaleNonScontato - (totaleImponibile+totaleEsclusoBaseImponibile)
  261. # totaleEsclusoBaseImponibile = totaleEsclusoBaseImponibile
  262. # for percentualeIva in castellettoIva: #????????????????????????
  263. # castellettoIva[percentualeIva]['imponibile'] = castellettoIva[percentualeIva]['imponibile']
  264. # castellettoIva[percentualeIva]['imposta'] = castellettoIva[percentualeIva]['imposta']
  265. # castellettoIva[percentualeIva]['totale'] = castellettoIva[percentualeIva]['totale']
  266. totaleImponibileScontato = totaleImponibile
  267. totaleImpostaScontata = totaleImposta
  268. totaleScontato = totaleNonScontato
  269. scontiSuTotale = anaedit.sconti_testata_widget.getSconti()
  270. applicazioneSconti = anaedit.sconti_testata_widget.getApplicazione()
  271. if len(scontiSuTotale) > 0:
  272. anaedit.avvertimento_sconti_button.set_sensitive(True)
  273. anaedit.avvertimento_sconti_button.show()
  274. for s in scontiSuTotale:
  275. if s["tipo"] == 'percentuale':
  276. if applicazioneSconti == 'scalare':
  277. totaleImponibileScontato = totaleImponibileScontato * (1 - Decimal(s["valore"]) / 100)
  278. elif applicazioneSconti == 'non scalare':
  279. totaleImponibileScontato = totaleImponibileScontato - totaleImponibile * Decimal(s["valore"]) / 100
  280. else:
  281. raise Exception, ('BUG! Tipo di applicazione sconto '
  282. 'sconosciuto: %s' % s['tipo'])
  283. elif s["tipo"] == 'valore':
  284. totaleImponibileScontato = totaleImponibileScontato - Decimal(s["valore"])
  285. if totaleImponibileScontato <0:
  286. messageInfo(msg="TOTALE SCONTATO NON PUŇ ESSERE INFERIORE A ZERO")
  287. anaedit.sconti_testata_widget.setValues([])
  288. return
  289. # riporta l'insieme di sconti ad una percentuale globale
  290. if totaleScontato >0:
  291. percentualeScontoGlobale = (1 - totaleImponibileScontato / totaleImponibile) * 100
  292. else:
  293. percentualeScontoGlobale = 100
  294. totaleImpostaScontata = 0
  295. totaleImponibileScontato = 0
  296. # totaleScontato = 0
  297. # riproporzione del totale, dell'imponibile e dell'imposta
  298. for k in castellettoIva.keys():
  299. castellettoIva[k]['totale'] = Decimal(castellettoIva[k]['totale']) * (1 - Decimal(percentualeScontoGlobale) / 100)
  300. castellettoIva[k]['imponibile'] = Decimal(castellettoIva[k]['imponibile']) * (1 - Decimal(percentualeScontoGlobale) / 100)
  301. castellettoIva[k]['imposta'] = castellettoIva[k]['totale'] - castellettoIva[k]['imponibile']
  302. totaleImponibileScontato += Decimal(castellettoIva[k]['imponibile'])
  303. totaleImpostaScontata += Decimal(castellettoIva[k]['imposta'])
  304. totaleScontato = mN(totaleImponibileScontato,2) + mN(totaleImpostaScontata,2)
  305. anaedit.totale_generale_label.set_text(str(mN(totaleImponibile,2) + mN(totaleImposta,2)+mN(totaleEsclusoBaseImponibile,2) ))
  306. anaedit.totale_generale_riepiloghi_label.set_text(str(mN(totaleImponibile,2) + mN(totaleImposta,2)+mN(totaleEsclusoBaseImponibile,2)))
  307. anaedit.totale_imponibile_label.set_text(str(mN(totaleImponibileScontato, 2)))
  308. anaedit.totale_imponibile_riepiloghi_label.set_text(str(mN(totaleImponibile,2)))
  309. anaedit.totale_imposta_label.set_text(str(mN(totaleImpostaScontata, 2)))
  310. anaedit.totale_imposta_riepiloghi_label.set_text(str(mN(totaleImposta, 2)))
  311. anaedit.totale_imponibile_scontato_riepiloghi_label.set_text(str(mN(totaleImponibileScontato, 2)))
  312. anaedit.totale_imposta_scontata_riepiloghi_label.set_text(str(mN(totaleImpostaScontata, 2)))
  313. anaedit.totale_scontato_riepiloghi_label.set_text(str(mN(totaleImponibileScontato,2) + mN(totaleImpostaScontata,2)))
  314. anaedit.totale_in_pagamenti_label.set_markup('<b><span foreground="black" size="24000">'+str(mN(totaleScontato,2))+'</span></b>')
  315. anaedit.totale_non_base_imponibile_label.set_text(str(mN(totaleEsclusoBaseImponibile,2)))
  316. id_pag = anaedit._id_pagamento
  317. pago = Pagamento().getRecord(id=id_pag)
  318. if pago:
  319. anaedit.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str(pago.denominazione)+'</span></b>')
  320. else:
  321. anaedit.metodo_pagamento_label.set_markup('<b><span foreground="black" size="16000">'+str("NESSUNO?")+'</span></b>')
  322. anaedit.liststore_iva.clear()
  323. for k in castellettoIva.keys():
  324. if k !=0:
  325. anaedit.liststore_iva.append((str(mN(k,1)),
  326. (str(mN(castellettoIva[k]['imponibile'],2))),
  327. (str(mN(castellettoIva[k]['imposta'],2))),))
  328. def mostraArticoloPart(anaedit, id, art=None):
  329. """questa funzione viene chiamata da ricerca articolo e si occupa di
  330. riempire la riga[0] con i dati corretti presi dall'articolo
  331. """
  332. data = stringToDate(anaedit.data_documento_entry.get_text())
  333. # articolo c
  334. if id is not None:
  335. #anaedit.dettaglio_giacenza_togglebutton.set_property("sensible", True)
  336. fillComboboxMultipli(anaedit.id_multiplo_customcombobox.combobox, id, True)
  337. articolo = leggiArticolo(id)
  338. if posso("PW"):
  339. AnagraficaDocumentiEditPromoWearExt.fillLabelInfo(anaedit, articolo)
  340. artic = Articolo().getRecord(id=id)
  341. if articleType(artic) =="father":
  342. anaedit.ArticoloPadre = artic
  343. anaedit.promowear_manager_taglia_colore_togglebutton.set_property("visible", True)
  344. anaedit.promowear_manager_taglia_colore_togglebutton.set_sensitive(True)
  345. # anaedit.on_promowear_manager_taglia_colore_togglebutton_toggled(anaedit)
  346. anaedit.NoRowUsableArticle = True
  347. if art:
  348. # articolo proveninente da finestra taglia e colore ...
  349. anaedit.NoRowUsableArticle = False
  350. articolo = art
  351. anaedit._righe[0]["idArticolo"] = id
  352. anaedit._righe[0]["codiceArticolo"] = articolo["codice"]
  353. anaedit.articolo_entry.set_text(anaedit._righe[0]["codiceArticolo"])
  354. anaedit._righe[0]["descrizione"] = articolo["denominazione"]
  355. anaedit.descrizione_entry.set_text(anaedit._righe[0]["descrizione"])
  356. anaedit._righe[0]["percentualeIva"] = mN(articolo["percentualeAliquotaIva"],2)
  357. #ATTENZIONEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!
  358. anaedit._righe[0]["idAliquotaIva"] = articolo["idAliquotaIva"]
  359. findComboboxRowFromId(anaedit.id_iva_customcombobox.combobox,anaedit._righe[0]["idAliquotaIva"])
  360. # anaedit.percentuale_iva_entry.set_text(str(anaedit._righe[0]["percentualeIva"]))
  361. anaedit._righe[0]["idUnitaBase"] = articolo["idUnitaBase"]
  362. anaedit._righe[0]["unitaBase"] = articolo["unitaBase"]
  363. anaedit.unitaBaseLabel.set_text(anaedit._righe[0]["unitaBase"])
  364. print " FIN QUI SIAMO AL CAZZEGGIO "
  365. if ((anaedit._fonteValore == "acquisto_iva") or (anaedit._fonteValore == "acquisto_senza_iva")):
  366. costoLordo = str(articolo['valori']["prezzoLordo"])
  367. if costoLordo:
  368. costoLordo = costoLordo.replace(',', '.')
  369. costoNetto = str(articolo['valori']["prezzoNetto"])
  370. if costoNetto:
  371. costoNetto = costoNetto.replace(',', '.')
  372. if anaedit._fonteValore == "acquisto_iva":
  373. costoLordo = calcolaPrezzoIva(costoLordo, anaedit._righe[0]["percentualeIva"])
  374. costoNetto = calcolaPrezzoIva(costoNetto, anaedit._righe[0]["percentualeIva"])
  375. anaedit._righe[0]["prezzoLordo"] = mN(costoLordo)
  376. anaedit.prezzo_lordo_entry.set_text(str(anaedit._righe[0]["prezzoLordo"]))
  377. anaedit._righe[0]["prezzoNetto"] = mN(costoNetto)
  378. anaedit.prezzo_netto_label.set_text(str(anaedit._righe[0]["prezzoNetto"]))
  379. anaedit._righe[0]["prezzoNettoUltimo"] = mN(costoNetto)
  380. anaedit._righe[0]["sconti"] = articolo['valori']["sconti"]
  381. anaedit._righe[0]["applicazioneSconti"] = articolo['valori']["applicazioneSconti"]
  382. anaedit.sconti_widget.setValues(anaedit._righe[0]["sconti"], anaedit._righe[0]["applicazioneSconti"], False)
  383. anaedit._righe[0]["codiceArticoloFornitore"] = articolo['valori']["codiceArticoloFornitore"]
  384. anaedit.codice_articolo_fornitore_entry.set_text(anaedit._righe[0]["codiceArticoloFornitore"])
  385. quantita =articolo["quantita"]
  386. quantita = quantita.replace(',','.')
  387. anaedit._righe[0]["quantita"] = quantita
  388. anaedit.quantita_entry.set_text(anaedit._righe[0]["quantita"])
  389. if anaedit._righe[0]["quantita"]:
  390. anaedit.calcolaTotaleRiga()
  391. elif anaedit._fonteValore == "vendita_iva":
  392. costoLordo = str(articolo['valori']["prezzoDettaglio"])
  393. if costoLordo:
  394. costoLordo = costoLordo.replace(',','.')
  395. anaedit._righe[0]["prezzoLordo"] = mN(costoLordo)
  396. anaedit.prezzo_lordo_entry.set_text(str(anaedit._righe[0]["prezzoLordo"]))
  397. anaedit._righe[0]["sconti"] = articolo['valori']["scontiDettaglio"]
  398. anaedit._righe[0]["applicazioneSconti"] = articolo['valori']["applicazioneScontiDettaglio"]
  399. anaedit.sconti_widget.setValues(anaedit._righe[0]["sconti"], anaedit._righe[0]["applicazioneSconti"], False)
  400. quantita =articolo["quantita"]
  401. quantita = quantita.replace(',', '.')
  402. anaedit._righe[0]["quantita"] = quantita
  403. anaedit.quantita_entry.set_text(anaedit._righe[0]["quantita"])
  404. if anaedit._righe[0]["quantita"]:
  405. anaedit.calcolaTotaleRiga()
  406. anaedit.on_show_totali_riga()
  407. #anaedit.refresh_combobox_listini()
  408. elif anaedit._fonteValore == "vendita_senza_iva":
  409. costoLordo = str(articolo['valori']["prezzoIngrosso"])
  410. if costoLordo:
  411. costoLordo = costoLordo.replace(',','.')
  412. anaedit._righe[0]["prezzoLordo"] = mN(costoLordo)
  413. anaedit.prezzo_lordo_entry.set_text(str(anaedit._righe[0]["prezzoLordo"]))
  414. anaedit._righe[0]["sconti"] = articolo['valori']["scontiIngrosso"]
  415. anaedit._righe[0]["applicazioneSconti"] = articolo['valori']["applicazioneScontiIngrosso"]
  416. anaedit.sconti_widget.setValues(anaedit._righe[0]["sconti"], anaedit._righe[0]["applicazioneSconti"], False)
  417. quantita =articolo["quantita"]
  418. quantita = quantita.replace(',','.')
  419. anaedit._righe[0]["quantita"] = quantita
  420. anaedit.quantita_entry.set_text(anaedit._righe[0]["quantita"])
  421. if anaedit._righe[0]["quantita"]:
  422. anaedit.calcolaTotaleRiga()
  423. anaedit.on_show_totali_riga()
  424. anaedit.on_confirm_row_button_clicked(anaedit.dialogTopLevel)
  425. return
  426. #Eccoci all'articolo normale
  427. anaedit._righe[0]["idArticolo"] = id
  428. anaedit._righe[0]["codiceArticolo"] = articolo["codice"]
  429. anaedit.articolo_entry.set_text(anaedit._righe[0]["codiceArticolo"])
  430. anaedit._righe[0]["descrizione"] = articolo["denominazione"]
  431. #lottiDataScadenza(idArticolo = id, data=data)
  432. if posso("ADR"):
  433. artADR = AnagraficaDocumentiEditADRExt.getADRArticolo(id)
  434. if artADR:
  435. # Aggiorna la descrizione con alcuni dati ADR
  436. anaedit._righe[0]["descrizione"] += "\nUN {0},, {1},, {2}, {3}".format(artADR.numero_un,
  437. artADR.classe_pericolo,
  438. artADR.gruppo_imballaggio,
  439. artADR.galleria)
  440. anaedit.descrizione_entry.set_text(anaedit._righe[0]["descrizione"])
  441. anaedit._righe[0]["percentualeIva"] = mN(articolo["percentualeAliquotaIva"],2)
  442. anaedit._righe[0]["idAliquotaIva"] = articolo["idAliquotaIva"]
  443. findComboboxRowFromId(anaedit.id_iva_customcombobox.combobox,anaedit._righe[0]["idAliquotaIva"])
  444. # anaedit.percentuale_iva_entry.set_text(str(anaedit._righe[0]["percentualeIva"]))
  445. anaedit._righe[0]["idUnitaBase"] = articolo["idUnitaBase"]
  446. anaedit._righe[0]["unitaBase"] = articolo["unitaBase"]
  447. anaedit.unitaBaseLabel.set_text(anaedit._righe[0]["unitaBase"])
  448. anaedit._righe[0]["idMultiplo"] = None
  449. anaedit._righe[0]["moltiplicatore"] = 1
  450. if posso("GN") and anaedit.noleggio:
  451. anaedit._righe[0]["divisore_noleggio"] = artic.divisore_noleggio
  452. anaedit.coeficente_noleggio_entry.set_text(str(anaedit._righe[0]["divisore_noleggio"]))
  453. anaedit._getPrezzoAcquisto()
  454. anaedit._righe[0]["prezzoLordo"] = 0
  455. anaedit._righe[0]["prezzoNetto"] = 0
  456. anaedit._righe[0]["sconti"] = []
  457. anaedit._righe[0]["applicazioneSconti"] = 'scalare'
  458. anaedit._righe[0]["codiceArticoloFornitore"] = artic.codice_articolo_fornitore
  459. #inserisco dei dati nel frame delle informazioni
  460. anaedit.giacenza_label.set_text(str(giacenzaArticolo(year=Environment.workingYear,
  461. idMagazzino=findIdFromCombobox(anaedit.id_magazzino_combobox),
  462. idArticolo=anaedit._righe[0]["idArticolo"])))
  463. anaedit.quantitaMinima_label.set_text(str(artic.quantita_minima))
  464. # Acquisto
  465. if ((anaedit._fonteValore == "acquisto_iva") or (anaedit._fonteValore == "acquisto_senza_iva")):
  466. fornitura = leggiFornitura(id, anaedit.id_persona_giuridica_customcombobox.getId(), data)
  467. costoLordo = fornitura["prezzoLordo"]
  468. costoNetto = fornitura["prezzoNetto"]
  469. if anaedit._fonteValore == "acquisto_iva":
  470. costoLordo = calcolaPrezzoIva(costoLordo,
  471. anaedit._righe[0]["percentualeIva"])
  472. costoNetto = calcolaPrezzoIva(costoNetto,
  473. anaedit._righe[0]["percentualeIva"])
  474. anaedit._righe[0]["prezzoLordo"] = costoLordo
  475. anaedit.prezzo_lordo_entry.set_text(str(anaedit._righe[0]["prezzoLordo"]))
  476. anaedit._righe[0]["prezzoNetto"] = costoNetto
  477. anaedit.prezzo_netto_label.set_text(str(anaedit._righe[0]["prezzoNetto"]))
  478. anaedit._righe[0]["prezzoNettoUltimo"] = costoNetto
  479. anaedit._righe[0]["sconti"] = fornitura["sconti"]
  480. anaedit._righe[0]["applicazioneSconti"] = fornitura["applicazioneSconti"]
  481. anaedit.sconti_widget.setValues(anaedit._righe[0]["sconti"], anaedit._righe[0]["applicazioneSconti"], False)
  482. # anaedit._righe[0]["codiceArticoloFornitore"] = fornitura["codiceArticoloFornitore"]
  483. anaedit.codice_articolo_fornitore_entry.set_text(anaedit._righe[0]["codiceArticoloFornitore"] or "")
  484. #vendita
  485. elif ((anaedit._fonteValore == "vendita_iva") or (anaedit._fonteValore == "vendita_senza_iva")):
  486. anaedit.refresh_combobox_listini()
  487. else:
  488. anaedit.articolo_entry.set_text('')
  489. anaedit.descrizione_entry.set_text('')
  490. anaedit.codice_articolo_fornitore_entry.set_text('')
  491. anaedit.numero_lotto_entry.set_text("")
  492. anaedit.data_scadenza_datewidget.set_text('')
  493. anaedit.data_produzione_datewidget.set_text('')
  494. anaedit.data_prezzo_datewidget.set_text('')
  495. anaedit.ordine_minimo_entry.set_text('')
  496. anaedit.tempo_arrivo_merce_entry.set_text('')
  497. # anaedit.percentuale_iva_entry.set_text('0')
  498. anaedit.id_iva_customcombobox.combobox.set_active(-1)
  499. anaedit.id_multiplo_customcombobox.combobox.clear()
  500. anaedit.id_listino_customcombobox.combobox.clear()
  501. anaedit.prezzo_lordo_entry.set_text('0')
  502. anaedit.quantita_entry.set_text('0')
  503. anaedit.prezzo_netto_label.set_text('0')
  504. anaedit.sconti_widget.clearValues()
  505. anaedit.totale_riga_label.set_text('0')
  506. anaedit._righe[0]["idArticolo"] = None
  507. anaedit._righe[0]["codiceArticolo"] = ''
  508. anaedit._righe[0]["descrizione"] = ''
  509. anaedit._righe[0]["codiceArticoloFornitore"] = ''
  510. anaedit._righe[0]["percentualeIva"] = 0
  511. anaedit._righe[0]["idAliquotaIva"] = None
  512. anaedit._righe[0]["idUnitaBase"] = None
  513. anaedit._righe[0]["idMultiplo"] = None
  514. anaedit._righe[0]["moltiplicatore"] = 1
  515. anaedit._righe[0]["idListino"] = None
  516. anaedit._righe[0]["prezzoLordo"] = 0
  517. anaedit._righe[0]["quantita"] = 0
  518. anaedit._righe[0]["prezzoNetto"] = 0
  519. anaedit._righe[0]["divisore_noleggio"] = 0
  520. anaedit._righe[0]["sconti"] = []
  521. anaedit._righe[0]["applicazioneSconti"] = 'scalare'
  522. anaedit._righe[0]["totale"] = 0
  523. if anaedit._tipoPersonaGiuridica == "cliente":
  524. anaedit.id_listino_customcombobox.combobox.grab_focus()
  525. elif anaedit._tipoPersonaGiuridica == "fornitore":
  526. anaedit.codice_articolo_fornitore_entry.grab_focus()
  527. else:
  528. anaedit.descrizione_entry.grab_focus()
  529. def on_multi_line_button_clickedPart(anaedit, widget):
  530. """ widget per l'inserimento di righe "multiriga" """
  531. mleditor = GladeWidget('multi_linea_editor', callbacks_proxy=anaedit)
  532. mleditor.multi_linea_editor.set_modal(modal=True)#
  533. #mleditor.multi_linea_editor.set_transient_for(self)
  534. #self.placeWindow(mleditor.multi_linea_editor)
  535. desc = anaedit.descrizione_entry.get_text()
  536. textBuffer = mleditor.multi_line_editor_textview.get_buffer()
  537. textBuffer.set_text(desc)
  538. mleditor.multi_line_editor_textview.set_buffer(textBuffer)
  539. mleditor.multi_linea_editor.show_all()
  540. anaedit.a = 0
  541. anaedit.b = 0
  542. def test(widget, event):
  543. char_count = textBuffer.get_char_count()
  544. line_count = textBuffer.get_line_count()
  545. if char_count >= 500:
  546. on_ok_button_clicked(button)
  547. if anaedit.b != line_count:
  548. anaedit.b = line_count
  549. anaedit.a = -1
  550. anaedit.a += 1
  551. colonne = int(setconf("Multilinea","multilinealimite"))
  552. if anaedit.a <= (int(setconf("Multilinea","multilinealimite"))-1):
  553. pass
  554. else:
  555. textBuffer.insert_at_cursor("\n")
  556. anaedit.a = -1
  557. modified = textBuffer.get_modified()
  558. textStatusBar = "Tot. Caratteri = %s , Righe = %s, Limite= %s, Colonna=%s" %(char_count,line_count, colonne, anaedit.a)
  559. context_id = mleditor.multi_line_editor_statusbar.get_context_id("Multi Editor")
  560. mleditor.multi_line_editor_statusbar.push(context_id,textStatusBar)
  561. def on_ok_button_clicked(button):
  562. text = textBuffer.get_text(textBuffer.get_start_iter(),
  563. textBuffer.get_end_iter(),True)
  564. anaedit.descrizione_entry.set_text(text)
  565. vediamo = anaedit.descrizione_entry.get_text()
  566. mleditor.multi_linea_editor.hide()
  567. button = mleditor.ok_button
  568. button.connect("clicked", on_ok_button_clicked)
  569. mleditor.multi_line_editor_textview.connect("key-press-event", test)
  570. QMIN = False
  571. def on_moltiplicatore_entry_focus_out_eventPart(anaedit, entry, event):
  572. """ funzione di controllo per quantiŕ superiori a uno """
  573. from promogest.modules.SuMisura.ui.SuMisura import CalcolaArea, CalcolaPerimetro
  574. altezza = float(anaedit.altezza_entry.get_text() or 0)
  575. molti = float(anaedit.moltiplicatore_entry.get_text() or 1)
  576. larghezza = float(anaedit.larghezza_entry.get_text() or 0)
  577. quantita = None
  578. if anaedit._righe[0]["unitaBase"] == "Metri Quadri":
  579. quantita = CalcolaArea(altezza, larghezza)
  580. elif anaedit._righe[0]["unitaBase"] == "Metri":
  581. quantita = CalcolaPerimetro(altezza, larghezza)
  582. if quantita:
  583. da_stamp = molti * float(quantita)
  584. anaedit.quantita_entry.set_text(str(da_stamp))
  585. on_quantita_entry_focus_out_eventPart(anaedit, anaedit.quantita_entry, event=None)
  586. # anaedit.on_show_totali_riga(anaedit)
  587. def on_quantita_entry_focus_out_eventPart(anaedit, entry, event=None):
  588. """ Funzione di controllo della quantitŕ minima con dialog """
  589. quantita = float(anaedit.quantita_entry.get_text())
  590. id = anaedit._righe[0]["idArticolo"]
  591. if id is not None:
  592. articolo = Articolo().getRecord(id=id)
  593. else:
  594. return
  595. molti = anaedit.moltiplicatore_entry.get_text() #pezzi
  596. pezzi = 0
  597. if molti and float(molti) >0: #se pezzi č maggiore di uno o esiste vuol dire che suMisura č attivo
  598. pezzi = float(molti)
  599. if articolo:
  600. try:
  601. quantita_minima = float(articolo.quantita_minima) *pezzi
  602. except:
  603. quantita_minima = None
  604. else:
  605. if articolo:
  606. try:
  607. quantita_minima = float(articolo.quantita_minima)
  608. except:
  609. quantita_minima = None
  610. if quantita_minima and quantita < quantita_minima :
  611. msg = """Attenzione!
  612. La quantitŕ inserita: %s č inferiore
  613. a %s definita come minima di default.
  614. Inserire comunque?""" % (str(quantita), str(quantita_minima))
  615. if YesNoDialog(msg=msg, transient=None):
  616. anaedit.quantita_entry.set_text(str(quantita))
  617. QMIN = False
  618. else:
  619. anaedit.quantita_entry.set_text(str(quantita_minima))
  620. QMIN =True
  621. anaedit.on_show_totali_riga(anaedit)
  622. def hidePromoWear(ui):
  623. """ Hide and destroy labels and button if promowear is not present """
  624. ui.promowear_manager_taglia_colore_togglebutton.destroy()
  625. ui.promowear_manager_taglia_colore_image.hide()
  626. ui.anno_label.destroy()
  627. ui.label_anno.destroy()
  628. ui.stagione_label.destroy()
  629. ui.label15.destroy()
  630. ui.colore_label.destroy()
  631. ui.label14.destroy()
  632. ui.taglia_label.destroy()
  633. ui.label_taglia.destroy()
  634. ui.gruppo_taglia_label.destroy()
  635. ui.label_gruppo_taglia.destroy()
  636. ui.tipo_label.destroy()
  637. ui.label_tipo.destroy()
  638. def hideSuMisura(ui):
  639. """funzione per SuMisura .....rimuove dalla vista quando modulo č disattivato
  640. """
  641. ui.sumisura_hbox.destroy()
  642. ui.moltiplicatore_entry.destroy()
  643. ui.label_moltiplicatore.hide()
  644. def hideADR(ui):
  645. ui.adr_frame.destroy()