PageRenderTime 31ms CodeModel.GetById 8ms RepoModel.GetById 1ms app.codeStats 0ms

/core/promogest/ui/AnagraficaMovimentiEdit.py

http://promogest.googlecode.com/
Python | 1315 lines | 1255 code | 14 blank | 46 comment | 3 complexity | 8012f9763cb81fc5e5da3826bb949f86 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. # Author: Francesco Meloni <francesco@promotux.it>
  5. # Author: Francesco Marella <francesco.marella@gmail.com>
  6. # This file is part of Promogest.
  7. # Promogest is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 2 of the License, or
  10. # (at your option) any later version.
  11. # Promogest is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. # You should have received a copy of the GNU General Public License
  16. # along with Promogest. If not, see <http://www.gnu.org/licenses/>.
  17. import datetime
  18. from promogest.ui.AnagraficaComplessaEdit import AnagraficaEdit
  19. from promogest.ui.anagDocumenti.AnagraficaDocumentiEditUtils import *
  20. from promogest import Environment
  21. from promogest.dao.TestataMovimento import TestataMovimento
  22. from promogest.dao.TestataDocumento import TestataDocumento
  23. from promogest.dao.RigaMovimento import RigaMovimento
  24. from promogest.dao.ScontoRigaMovimento import ScontoRigaMovimento
  25. from promogest.dao.Articolo import Articolo
  26. from promogest.dao.Fornitore import Fornitore
  27. from promogest.ui.utils import *
  28. from promogest.ui.utilsCombobox import *
  29. from promogest.ui.gtk_compat import *
  30. if posso("PW"):
  31. from promogest.modules.PromoWear.ui import AnagraficaDocumentiEditPromoWearExt
  32. class AnagraficaMovimentiEdit(AnagraficaEdit):
  33. def __init__(self, anagrafica):
  34. """
  35. Modifica un record dei movimenti
  36. """
  37. AnagraficaEdit.__init__(self,
  38. anagrafica,
  39. 'anagrafica_movimenti_detail_vbox',
  40. 'Dati movimento',
  41. gladeFile='_anagrafica_movimenti_elements.glade')
  42. self._widgetFirstFocus = self.data_movimento_entry
  43. #try:
  44. #if Environment.conf.Documenti.rosas =="yes":
  45. #pass
  46. #except:
  47. self.totale_spinbutton.destroy()
  48. self.prz_lordo_label1.hide()
  49. # contenitore (dizionario) righe (riga 0 riservata per
  50. # variazioni in corso)
  51. self._righe = []
  52. self._righe.append({})
  53. # numero riga corrente
  54. self._numRiga = 0
  55. # modello righe: magazzino, codice articolo,
  56. # descrizione, percentuale iva, unita base, multiplo, listino,
  57. # quantita, prezzo lordo, sconti, prezzo netto, totale
  58. self.modelRiga = gtk.ListStore(str, str, str, str, str, str, str,
  59. str, str, str, str, str)
  60. # iteratore riga corrente
  61. self._iteratorRiga = None
  62. # cliente o fornitore ?
  63. self._tipoPersonaGiuridica = None
  64. self._operazione = None
  65. # prezzo vendita/acquisto, ivato/non ivato
  66. self._fonteValore = None
  67. # carico (+) o scarico (-)
  68. self._segno = None
  69. # caricamento movimento (interrompe l'azione degli eventi on_changed nelle combobox)
  70. self._loading = False
  71. if posso("PW"):
  72. self.promowear_manager_taglia_colore_togglebutton.set_property("visible", True)
  73. self.promowear_manager_taglia_colore_togglebutton.set_sensitive(False)
  74. else:
  75. hidePromoWear(self)
  76. def azzeraRiga(self, numero = 0):
  77. """
  78. Azzera i campi del dizionario privato delle righe, alla riga
  79. indicata (o alla 0-esima)
  80. """
  81. self._righe[numero] = {"idRiga": None,
  82. "idMagazzino": None,
  83. "magazzino": '',
  84. "idArticolo": None,
  85. "codiceArticolo": '',
  86. "descrizione": '',
  87. "percentualeIva": 0,
  88. "idUnitaBase": None,
  89. "unitaBase": '',
  90. "idMultiplo": None,
  91. "multiplo": '',
  92. "idListino": None,
  93. "listino": '',
  94. "quantita": 0,
  95. "moltiplicatore": 0,
  96. "prezzoLordo": 0,
  97. "applicazioneSconti": '',
  98. "sconti": [],
  99. "prezzoNetto": 0,
  100. "totale": 0,
  101. "codiceArticoloFornitore": '',
  102. "prezzoNettoUltimo": 0}
  103. def nuovaRiga(self):
  104. """
  105. prepara per l'inserimento di una nuova riga
  106. """
  107. self._numRiga = 0
  108. self.azzeraRiga(0)
  109. self.articolo_entry.set_text('')
  110. self.descrizione_entry.set_text('')
  111. self.codice_articolo_fornitore_entry.set_text('')
  112. self.percentuale_iva_entry.set_text('0')
  113. self.id_multiplo_customcombobox.combobox.clear()
  114. self.id_listino_customcombobox.combobox.clear()
  115. self.prezzo_lordo_entry.set_text('0')
  116. self.quantita_entry.set_text('0')
  117. self.prezzo_netto_label.set_text('0')
  118. self.sconti_widget.clearValues()
  119. self.totale_riga_label.set_text('0')
  120. if len(self._righe) > 1:
  121. self.data_movimento_entry.set_sensitive(False)
  122. self.id_operazione_combobox.set_sensitive(False)
  123. self.id_persona_giuridica_customcombobox.set_sensitive(False)
  124. self.articolo_entry.grab_focus()
  125. else:
  126. self.data_movimento_entry.set_sensitive(True)
  127. self.id_persona_giuridica_customcombobox.set_sensitive(self.id_operazione_combobox.get_active() != -1)
  128. self.id_operazione_combobox.set_sensitive(True)
  129. if self._anagrafica._magazzinoFissato:
  130. findComboboxRowFromId(self.id_magazzino_combobox, self._anagrafica._idMagazzino)
  131. else:
  132. self.id_magazzino_combobox.set_active(-1)
  133. self.id_magazzino_combobox.grab_focus()
  134. def clearRows(self):
  135. """
  136. Pulisce i campi per il trattamento e la conservazione delle righe
  137. """
  138. self._righe = []
  139. self._righe.append({})
  140. self._numRiga = 0
  141. self.modelRiga.clear()
  142. self._iteratorRiga = None
  143. self.nuovaRiga()
  144. def draw(self, cplx=False):
  145. """
  146. Costruisce la treevew e gli altri widget dell'interfaccia
  147. """
  148. treeview = self.righe_treeview
  149. rendererSx = gtk.CellRendererText()
  150. rendererDx = gtk.CellRendererText()
  151. rendererDx.set_property('xalign', 1)
  152. column = gtk.TreeViewColumn('Magazzino', rendererSx, text=0)
  153. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  154. column.set_clickable(False)
  155. column.set_resizable(True)
  156. column.set_expand(False)
  157. treeview.append_column(column)
  158. column = gtk.TreeViewColumn('Codice articolo', rendererSx, text=1)
  159. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  160. column.set_clickable(False)
  161. column.set_resizable(True)
  162. column.set_expand(False)
  163. treeview.append_column(column)
  164. column = gtk.TreeViewColumn('Descrizione', rendererSx, text=2)
  165. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  166. column.set_clickable(False)
  167. column.set_resizable(True)
  168. column.set_expand(True)
  169. treeview.append_column(column)
  170. column = gtk.TreeViewColumn('% IVA', rendererDx, text=3)
  171. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  172. column.set_clickable(False)
  173. column.set_resizable(True)
  174. column.set_expand(False)
  175. treeview.append_column(column)
  176. column = gtk.TreeViewColumn('U.M.', rendererSx, text=4)
  177. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  178. column.set_clickable(False)
  179. column.set_resizable(True)
  180. column.set_expand(False)
  181. treeview.append_column(column)
  182. column = gtk.TreeViewColumn('Multiplo', rendererSx, text=5)
  183. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  184. column.set_clickable(False)
  185. column.set_resizable(True)
  186. column.set_expand(False)
  187. treeview.append_column(column)
  188. column = gtk.TreeViewColumn('Listino', rendererSx, text=6)
  189. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  190. column.set_clickable(False)
  191. column.set_resizable(True)
  192. column.set_expand(False)
  193. treeview.append_column(column)
  194. column = gtk.TreeViewColumn('Quantita''', rendererDx, text=7)
  195. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  196. column.set_clickable(False)
  197. column.set_resizable(True)
  198. column.set_expand(False)
  199. treeview.append_column(column)
  200. column = gtk.TreeViewColumn('Prezzo lordo', rendererDx, text=8)
  201. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  202. column.set_clickable(False)
  203. column.set_resizable(True)
  204. column.set_expand(False)
  205. treeview.append_column(column)
  206. column = gtk.TreeViewColumn('Sconti', rendererSx, text=9)
  207. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  208. column.set_clickable(False)
  209. column.set_resizable(True)
  210. column.set_expand(False)
  211. treeview.append_column(column)
  212. column = gtk.TreeViewColumn('Prezzo netto', rendererDx, text=10)
  213. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  214. column.set_clickable(False)
  215. column.set_resizable(True)
  216. column.set_expand(False)
  217. treeview.append_column(column)
  218. column = gtk.TreeViewColumn('Totale', rendererDx, text=11)
  219. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  220. column.set_clickable(False)
  221. column.set_resizable(True)
  222. column.set_expand(False)
  223. treeview.append_column(column)
  224. fillComboboxOperazioni(self.id_operazione_combobox, 'movimento')
  225. fillComboboxMagazzini(self.id_magazzino_combobox)
  226. self.nuovaRiga()
  227. # preferenza ricerca articolo ?
  228. if hasattr(Environment.conf,'Documenti'):
  229. if hasattr(Environment.conf.Documenti,'ricerca_per'):
  230. if Environment.conf.Documenti.ricerca_per == 'codice':
  231. self.ricerca_codice_button.set_active(True)
  232. elif Environment.conf.Documenti.ricerca_per == 'codice_a_barre':
  233. self.ricerca_codice_a_barre_button.set_active(True)
  234. elif Environment.conf.Documenti.ricerca_per == 'descrizione':
  235. self.ricerca_descrizione_button.set_active(True)
  236. elif Environment.conf.Documenti.ricerca_per == 'codice_articolo_fornitore':
  237. self.ricerca_codice_articolo_fornitore_button.set_active(True)
  238. self.id_operazione_combobox.connect('changed',
  239. self.on_id_operazione_combobox_changed)
  240. self.id_persona_giuridica_customcombobox.setSingleValue()
  241. self.id_persona_giuridica_customcombobox.setOnChangedCall(self.persona_giuridica_changed)
  242. self.id_magazzino_combobox.connect('changed',
  243. self.on_id_magazzino_combobox_changed)
  244. self.id_multiplo_customcombobox.connect('clicked',
  245. self.on_id_multiplo_customcombobox_button_clicked)
  246. self.id_multiplo_customcombobox.combobox.connect('changed',
  247. self.on_id_multiplo_customcombobox_changed)
  248. self.id_listino_customcombobox.connect('clicked',
  249. self.on_id_listino_customcombobox_button_clicked)
  250. self.id_listino_customcombobox.combobox.connect('changed',
  251. self.on_id_listino_customcombobox_changed)
  252. self.id_listino_customcombobox.button.connect('toggled',
  253. self.on_id_listino_customcombobox_button_toggled)
  254. self.sconti_widget.button.connect('toggled',
  255. self.on_sconti_widget_button_toggled)
  256. self.variazione_listini_button.connect('clicked',
  257. self.on_variazione_listini_button_clicked)
  258. self.storico_costi_button.connect('clicked',
  259. self.on_storico_costi_button_clicked)
  260. self.storico_listini_button.connect('clicked',
  261. self.on_storico_listini_button_clicked)
  262. self.edit_date_and_number_button.connect('clicked',
  263. self.on_edit_date_and_number_button_clicked)
  264. self.ricerca_codice_button.connect('clicked',
  265. self.on_ricerca_codice_button_clicked)
  266. self.ricerca_codice_a_barre_button.connect('clicked',
  267. self.on_ricerca_codice_a_barre_button_clicked)
  268. self.ricerca_descrizione_button.connect('clicked',
  269. self.on_ricerca_descrizione_button_clicked)
  270. self.ricerca_codice_articolo_fornitore_button.connect('clicked',
  271. self.on_ricerca_codice_articolo_fornitore_button_clicked)
  272. #Castelletto iva
  273. rendererText = gtk.CellRendererText()
  274. column = gtk.TreeViewColumn('Aliquota I.V.A.', rendererText, text=0)
  275. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  276. column.set_clickable(False)
  277. column.set_resizable(True)
  278. column.set_expand(True)
  279. self.riepiloghi_iva_treeview.append_column(column)
  280. rendererText = gtk.CellRendererText()
  281. rendererText.set_property('xalign', 1)
  282. column = gtk.TreeViewColumn('Imponibile', rendererText, text=1)
  283. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  284. column.set_clickable(False)
  285. column.set_resizable(True)
  286. column.set_expand(True)
  287. self.riepiloghi_iva_treeview.append_column(column)
  288. column = gtk.TreeViewColumn('Imposta', rendererText, text=2)
  289. column.set_sizing(GTK_COLUMN_GROWN_ONLY)
  290. column.set_clickable(False)
  291. column.set_resizable(True)
  292. column.set_expand(True)
  293. self.riepiloghi_iva_treeview.append_column(column)
  294. model = gtk.ListStore(str, str, str)
  295. self.riepiloghi_iva_treeview.set_model(model)
  296. def on_id_operazione_combobox_changed(self, combobox):
  297. """
  298. Setta l'operazione sul movimento corrente
  299. """
  300. self._operazione = findIdFromCombobox(self.id_operazione_combobox)
  301. operazione = leggiOperazione(self._operazione)
  302. if self._tipoPersonaGiuridica != operazione["tipoPersonaGiuridica"]:
  303. self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=False)
  304. self._tipoPersonaGiuridica = operazione["tipoPersonaGiuridica"]
  305. self._fonteValore = operazione["fonteValore"]
  306. self._segno = operazione["segno"]
  307. if (self._tipoPersonaGiuridica == "fornitore"):
  308. self.persona_giuridica_label.set_text('Fornitore')
  309. self.id_persona_giuridica_customcombobox.setType(self._tipoPersonaGiuridica)
  310. self.id_persona_giuridica_customcombobox.set_sensitive(True)
  311. self.label_listino.set_property('visible', False)
  312. self.id_listino_customcombobox.set_property('visible', False)
  313. self.prz_lordo_label.set_text('Costo')
  314. self.prz_netto_label.set_text('Costo netto')
  315. self.codice_articolo_fornitore_label.set_property('visible', True)
  316. self.codice_articolo_fornitore_entry.set_property('visible', True)
  317. elif (self._tipoPersonaGiuridica == "cliente"):
  318. self.persona_giuridica_label.set_text('Cliente')
  319. self.id_persona_giuridica_customcombobox.setType(self._tipoPersonaGiuridica)
  320. self.id_persona_giuridica_customcombobox.set_sensitive(True)
  321. self.label_listino.set_property('visible', True)
  322. self.id_listino_customcombobox.set_property('visible', True)
  323. self.prz_lordo_label.set_text('Prezzo')
  324. self.prz_netto_label.set_text('Prezzo netto')
  325. self.codice_articolo_fornitore_label.set_property('visible', False)
  326. self.codice_articolo_fornitore_entry.set_property('visible', False)
  327. else:
  328. self.persona_giuridica_label.set_text('Cliente/Fornitore ?')
  329. self.id_persona_giuridica_customcombobox.set_sensitive(False)
  330. self.label_listino.set_property('visible', True)
  331. self.id_listino_customcombobox.set_property('visible', True)
  332. self.prz_lordo_label.set_text('Prezzo')
  333. self.prz_netto_label.set_text('Prezzo netto')
  334. self.codice_articolo_fornitore_label.set_property('visible', False)
  335. self.codice_articolo_fornitore_entry.set_property('visible', False)
  336. self.persona_giuridica_changed()
  337. self.data_movimento_entry.grab_focus()
  338. def persona_giuridica_changed(self):
  339. """
  340. Gestisce il cambiamento di persona giuridica
  341. """
  342. if self._tipoPersonaGiuridica == "cliente":
  343. self.refresh_combobox_listini()
  344. def on_id_magazzino_combobox_changed(self, combobox):
  345. """
  346. Gestisce il cambiamento di magazzino nella combobox
  347. """
  348. if self._loading:
  349. return
  350. self._righe[0]["idMagazzino"] = findIdFromCombobox(self.id_magazzino_combobox)
  351. magazzino = leggiMagazzino(self._righe[0]["idMagazzino"])
  352. self._righe[0]["magazzino"] = magazzino["denominazione"]
  353. self.refresh_combobox_listini()
  354. def refresh_combobox_listini(self):
  355. """
  356. Gestisce i listini nella combobox
  357. """
  358. if self._righe[0]["idArticolo"] is None:
  359. self.id_listino_customcombobox.combobox.clear
  360. else:
  361. fillComboboxListiniFiltrati(self.id_listino_customcombobox.combobox,
  362. self._righe[0]["idArticolo"],
  363. self._righe[0]["idMagazzino"],
  364. self.id_persona_giuridica_customcombobox.getId())
  365. def on_id_multiplo_customcombobox_button_clicked(self, widget, toggleButton):
  366. """
  367. FIXME
  368. """
  369. on_id_multiplo_customcombobox_clicked(widget, toggleButton, self._righe[0]["idArticolo"])
  370. def on_id_multiplo_customcombobox_changed(self, combobox):
  371. """
  372. FIXME
  373. """
  374. if self._loading:
  375. return
  376. self._righe[0]["idMultiplo"] = findIdFromCombobox(self.id_multiplo_customcombobox.combobox)
  377. multiplo = leggiMultiplo(self._righe[0]["idMultiplo"])
  378. self._righe[0]["multiplo"] = multiplo["denominazioneBreve"] + ' ( ' + str('%.2f' % multiplo["moltiplicatore"]) + ' X )'
  379. self._righe[0]["moltiplicatore"] = multiplo["moltiplicatore"]
  380. self.calcolaTotaleRiga()
  381. def on_id_listino_customcombobox_button_clicked(self, widget, toggleButton):
  382. """
  383. FIXME
  384. """
  385. on_id_listino_customcombobox_clicked(widget, toggleButton, self._righe[0]["idArticolo"], None)
  386. def on_id_listino_customcombobox_button_toggled(self, button):
  387. """
  388. FIXME
  389. """
  390. if button.get_property('active') is True:
  391. return
  392. self.refresh_combobox_listini()
  393. def on_id_listino_customcombobox_changed(self, combobox):
  394. """
  395. Gestisce la combo ( custom ) dei listini
  396. """
  397. if self._loading:
  398. return
  399. idListino = findIdFromCombobox(self.id_listino_customcombobox.combobox)
  400. idArticolo = self._righe[0]["idArticolo"]
  401. self.getPrezzoVenditaLordo(idListino, idArticolo)
  402. self.prezzo_lordo_entry.set_text(str(mN(self._righe[0]["prezzoLordo"])))
  403. self.on_show_totali_riga()
  404. def getPrezzoVenditaLordo(self, idListino, idArticolo):
  405. """
  406. Cerca il prezzo di vendita
  407. """
  408. prezzoLordo = 0
  409. if idListino is not None and idArticolo is not None:
  410. listino = leggiListino(idListino, idArticolo)
  411. self._righe[0]["listino"] = listino["denominazione"]
  412. if (self._fonteValore == "vendita_iva"):
  413. prezzoLordo = listino["prezzoDettaglio"]
  414. elif (self._fonteValore == "vendita_senza_iva"):
  415. prezzoLordo = listino["prezzoIngrosso"]
  416. self._righe[0]["prezzoLordo"] = prezzoLordo
  417. self._righe[0]["idListino"] = idListino
  418. def getPrezzoNetto(self):
  419. """
  420. Calcola il prezzo netto dal prezzo lordo e dagli sconti
  421. """
  422. prezzoLordo = Decimal(str(self._righe[0]["prezzoLordo"]))
  423. prezzoNetto = Decimal(str(self._righe[0]["prezzoLordo"]))
  424. applicazione = self._righe[0]["applicazioneSconti"]
  425. sconti = self._righe[0]["sconti"]
  426. for s in sconti:
  427. if s["tipo"] == 'percentuale':
  428. if applicazione == 'scalare':
  429. prezzoNetto = prezzoNetto * (1 - Decimal(s["valore"]) / 100)
  430. elif applicazione == 'non scalare':
  431. prezzoNetto = prezzoNetto - prezzoLordo * Decimal(s["valore"]) / 100
  432. elif s["tipo"] == 'valore':
  433. prezzoNetto = prezzoNetto - Decimal(s["valore"])
  434. self._righe[0]["prezzoNetto"] = prezzoNetto
  435. def getTotaleRiga(self):
  436. """
  437. Calcola il totale della riga
  438. FIXME: verificare i float e portarlo ai Decimal
  439. """
  440. segnoIva = 1
  441. percentualeIva = Decimal(self._righe[0]["percentualeIva"])
  442. prezzoNetto = Decimal(self._righe[0]["prezzoNetto"])
  443. quantita = Decimal(self._righe[0]["quantita"])
  444. moltiplicatore = Decimal(self._righe[0]["moltiplicatore"])
  445. self._righe[0]["totale"] = prezzoNetto * quantita * moltiplicatore
  446. def on_sconti_widget_button_toggled(self, button):
  447. """
  448. Apre il custom widget degli sconti
  449. """
  450. if button.get_property('active') is True:
  451. return
  452. self._righe[0]["sconti"] = self.sconti_widget.getSconti()
  453. self._righe[0]["applicazioneSconti"] = self.sconti_widget.getApplicazione()
  454. self.on_show_totali_riga()
  455. def on_notebook_switch_page(self, notebook, page, page_num):
  456. """
  457. Gestisce il cambio di pagina nel notebook
  458. """
  459. if page_num == 2:
  460. self.calcolaTotale()
  461. def _refresh(self):
  462. """
  463. Riporta i valori corretti, carica all'inizio e rinfresca dopo alcune
  464. operazioni
  465. """
  466. self._loading = True
  467. self._tipoPersonaGiuridica = None
  468. self._operazione = None
  469. self._fonteValore = None
  470. self._segno = None
  471. self.data_movimento_entry.set_sensitive(self.dao.id is None)
  472. self.edit_date_and_number_button.set_sensitive(self.dao.id is not None)
  473. self.numero_movimento_entry.set_sensitive(False)
  474. self.id_operazione_combobox.set_sensitive(self.dao.id is None)
  475. self.id_persona_giuridica_customcombobox.set_sensitive(self.dao.id is None)
  476. self.id_operazione_combobox.set_active(-1)
  477. self.id_persona_giuridica_customcombobox.set_active(-1)
  478. self._operazione = self.dao.operazione
  479. findComboboxRowFromId(self.id_operazione_combobox, self.dao.operazione)
  480. self.on_id_operazione_combobox_changed(self.id_operazione_combobox)
  481. self.id_persona_giuridica_customcombobox.refresh(clear=True, filter=False)
  482. if self._tipoPersonaGiuridica == "fornitore":
  483. self.id_persona_giuridica_customcombobox.setId(self.dao.id_fornitore)
  484. elif self._tipoPersonaGiuridica == "cliente":
  485. self.id_persona_giuridica_customcombobox.setId(self.dao.id_cliente)
  486. self.data_movimento_entry.set_text(dateToString(self.dao.data_movimento))
  487. self.numero_movimento_entry.set_text(str(self.dao.numero or '0'))
  488. self.showDatiDocumento()
  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.clearRows()
  496. for riga in self.dao.righe:
  497. self.azzeraRiga(0)
  498. j = self.dao.righe.index(riga) + 1
  499. magazzino = leggiMagazzino(riga.id_magazzino)
  500. articolo = leggiArticolo(riga.id_articolo)
  501. listino = leggiListino(riga.id_listino)
  502. multiplo = leggiMultiplo(riga.id_multiplo)
  503. (sconti, applicazione) = getScontiFromDao(riga.sconti, riga.applicazione_sconti)
  504. self._righe[0]["idRiga"] = riga.id
  505. self._righe[0]["idMagazzino"] = riga.id_magazzino
  506. self._righe[0]["magazzino"] = magazzino["denominazione"]
  507. self._righe[0]["idArticolo"] = riga.id_articolo
  508. self._righe[0]["codiceArticolo"] = articolo["codice"]
  509. self._righe[0]["descrizione"] = riga.descrizione
  510. self._righe[0]["percentualeIva"] = riga.percentuale_iva
  511. self._righe[0]["idUnitaBase"] = articolo["idUnitaBase"]
  512. self._righe[0]["unitaBase"] = articolo["unitaBase"]
  513. self._righe[0]["idMultiplo"] = riga.id_multiplo
  514. if multiplo["moltiplicatore"] != 0:
  515. self._righe[0]["multiplo"] = multiplo["denominazioneBreve"] + ' ( ' + str('%.2f' % multiplo["moltiplicatore"]) + ' X )'
  516. else:
  517. self._righe[0]["multiplo"] = ''
  518. self._righe[0]["idListino"] = riga.id_listino
  519. self._righe[0]["listino"] = listino["denominazione"]
  520. self._righe[0]["quantita"] = riga.quantita
  521. self._righe[0]["moltiplicatore"] = riga.moltiplicatore
  522. self._righe[0]["prezzoLordo"] = riga.valore_unitario_lordo
  523. self._righe[0]["sconti"] = sconti
  524. self._righe[0]["applicazioneSconti"] = applicazione
  525. self._righe[0]["prezzoNetto"] = riga.valore_unitario_netto
  526. self._righe[0]["prezzoNettoUltimo"] = riga.valore_unitario_netto
  527. self._righe[0]["totale"] = 0
  528. self.getTotaleRiga()
  529. if self._tipoPersonaGiuridica == "fornitore":
  530. fornitura = leggiFornitura(riga.id_articolo, self.dao.id_fornitore, self.dao.data_movimento, True)
  531. self._righe[0]["codiceArticoloFornitore"] = fornitura["codiceArticoloFornitore"]
  532. self._righe.append(self._righe[0])
  533. rigatomodel = self._righe[j]
  534. self.modelRiga.append((rigatomodel["magazzino"],
  535. rigatomodel["codiceArticolo"],
  536. rigatomodel["descrizione"],
  537. str(mN(rigatomodel["percentualeIva"],2)),
  538. rigatomodel["unitaBase"],
  539. rigatomodel["multiplo"],
  540. rigatomodel["listino"],
  541. str(mN(rigatomodel["quantita"],3)),
  542. str(mN(rigatomodel["prezzoLordo"])),
  543. self._righe[j]["applicazioneSconti"] + ' ' + getStringaSconti(rigatomodel["sconti"]),
  544. str(mN((rigatomodel["prezzoNetto"]))),
  545. str(mN(rigatomodel["totale"],2))))
  546. self.righe_treeview.set_model(self.modelRiga)
  547. self._loading = False
  548. self.calcolaTotale()
  549. self.label_numero_righe.set_text(str(len(self.dao.righe)))
  550. self.notebook.set_current_page(0)
  551. self.nuovaRiga()
  552. if self.dao.id is None or self.numero_movimento_entry.get_text() == '0':
  553. self.id_operazione_combobox.grab_focus()
  554. else:
  555. self.id_magazzino_combobox.grab_focus()
  556. def setDao(self, dao):
  557. """
  558. Inizializza un Dao nuovo se None o usa quello passato Dalla anag Filter
  559. """
  560. if dao is None:
  561. # Crea un nuovo Dao vuoto
  562. self.dao = TestataMovimento()
  563. # Suggerisce la data odierna
  564. self.dao.data_movimento = datetime.datetime.today()
  565. try:
  566. if Environment.conf.Documenti.fornitore_predefinito:
  567. cli = Fornitore().select(codicesatto= Environment.conf.Documenti.fornitore_predefinito)
  568. if cli:
  569. self.dao.id_fornitore = cli[0].id
  570. self.oneshot = True
  571. except:
  572. print "FORNITORE_PREDEFINITO NON SETTATO"
  573. else:
  574. # Ricrea il Dao con una connessione al DBMS SQL
  575. self.dao = TestataMovimento().getRecord(id=dao.id)
  576. self._refresh()
  577. return self.dao
  578. def saveDao(self, tipo=None):
  579. """
  580. Salva il Dao nel Database
  581. """
  582. if not(len(self._righe) > 1):
  583. return
  584. if (self.data_movimento_entry.get_text() == ''):
  585. obligatoryField(self.dialogTopLevel,
  586. self.data_movimento_entry,
  587. 'Inserire la data del documento !')
  588. if (findIdFromCombobox(self.id_operazione_combobox) is None):
  589. obligatoryField(self.dialogTopLevel,
  590. self.id_operazione_combobox,
  591. 'Inserire il tipo di documento !')
  592. self.dao.data_movimento = stringToDate(self.data_movimento_entry.get_text())
  593. if self.dao.id is not None and self.numero_movimento_entry.get_text() != '0':
  594. self.dao.numero = self.numero_movimento_entry.get_text()
  595. self.dao.operazione = self._operazione
  596. pbar(self.dialog.pbar,parziale=1, totale=4)
  597. if self._tipoPersonaGiuridica == "fornitore":
  598. self.dao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
  599. self.dao.id_cliente = None
  600. elif self._tipoPersonaGiuridica == "cliente":
  601. self.dao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
  602. self.dao.id_fornitore = None
  603. textBuffer = self.note_interne_textview.get_buffer()
  604. self.dao.note_interne = textBuffer.get_text(textBuffer.get_start_iter(), textBuffer.get_end_iter(),True)
  605. righeMovimento = []
  606. scontiRigheMovimento= []
  607. #righe = []
  608. pbar(self.dialog.pbar,parziale=2, totale=4)
  609. for i in range(1, len(self._righe)):
  610. daoRiga = RigaMovimento()
  611. daoRiga.id_testata_movimento = self.dao.id
  612. daoRiga.id_articolo = self._righe[i]["idArticolo"]
  613. daoRiga.id_magazzino = self._righe[i]["idMagazzino"]
  614. daoRiga.descrizione = self._righe[i]["descrizione"]
  615. daoRiga.codiceArticoloFornitore = self._righe[i]["codiceArticoloFornitore"]
  616. daoRiga.id_listino = self._righe[i]["idListino"]
  617. daoRiga.percentuale_iva = self._righe[i]["percentualeIva"]
  618. daoRiga.applicazione_sconti = self._righe[i]["applicazioneSconti"]
  619. daoRiga.quantita = self._righe[i]["quantita"]
  620. daoRiga.id_multiplo = self._righe[i]["idMultiplo"]
  621. daoRiga.moltiplicatore = self._righe[i]["moltiplicatore"]
  622. daoRiga.valore_unitario_lordo = self._righe[i]["prezzoLordo"]
  623. daoRiga.valore_unitario_netto = self._righe[i]["prezzoNetto"]
  624. sconti = []
  625. if self._righe[i]["sconti"] is not None:
  626. for j in range(0, len(self._righe[i]["sconti"])):
  627. daoSconto = ScontoRigaMovimento()
  628. daoSconto.valore = Decimal(self._righe[i]["sconti"][j]["valore"])
  629. daoSconto.tipo_sconto = self._righe[i]["sconti"][j]["tipo"]
  630. scontiRigheMovimento.append(daoSconto)
  631. #scontiRigheMovimento[daoRiga] = sconti
  632. daoRiga.scontiRigheMovimento = scontiRigheMovimento
  633. #righeMovimento[i] = daoRiga
  634. righeMovimento.append(daoRiga)
  635. pbar(self.dialog.pbar,parziale=3, totale=4)
  636. self.dao.righeMovimento = righeMovimento
  637. self.dao.persist()
  638. pbar(self.dialog.pbar,parziale=4, totale=4)
  639. self.label_numero_righe.hide()
  640. text = str(len(self.dao.righe))
  641. self.label_numero_righe.set_text(text)
  642. self.label_numero_righe.show()
  643. pbar(self.dialog.pbar,stop=True)
  644. def on_righe_treeview_row_activated(self, treeview, path, column):
  645. """
  646. Riporta la riga selezionata in primo piano per la modifica
  647. """
  648. sel = treeview.get_selection()
  649. (model, self._iteratorRiga) = sel.get_selected()
  650. (selRow, ) = path
  651. self._numRiga = selRow + 1
  652. self.azzeraRiga(0)
  653. self._loading = True
  654. self._righe[0]["idRiga"] = self._righe[self._numRiga]["idRiga"]
  655. self._righe[0]["idMagazzino"] = self._righe[self._numRiga]["idMagazzino"]
  656. self._righe[0]["magazzino"] = self._righe[self._numRiga]["magazzino"]
  657. self._righe[0]["idArticolo"] = self._righe[self._numRiga]["idArticolo"]
  658. self._righe[0]["codiceArticolo"] = self._righe[self._numRiga]["codiceArticolo"]
  659. self._righe[0]["descrizione"] = self._righe[self._numRiga]["descrizione"]
  660. self._righe[0]["codiceArticoloFornitore"] = self._righe[self._numRiga]["codiceArticoloFornitore"]
  661. self._righe[0]["idUnitaBase"] = self._righe[self._numRiga]["idUnitaBase"]
  662. self._righe[0]["unitaBase"] = self._righe[self._numRiga]["unitaBase"]
  663. self._righe[0]["idMultiplo"] = self._righe[self._numRiga]["idMultiplo"]
  664. self._righe[0]["multiplo"] = self._righe[self._numRiga]["multiplo"]
  665. self._righe[0]["idListino"] = self._righe[self._numRiga]["idListino"]
  666. self._righe[0]["listino"] = self._righe[self._numRiga]["listino"]
  667. self._righe[0]["quantita"] = mN(self._righe[self._numRiga]["quantita"],3)
  668. self._righe[0]["moltiplicatore"] = mN(self._righe[self._numRiga]["moltiplicatore"],2)
  669. self._righe[0]["prezzoLordo"] = mN(self._righe[self._numRiga]["prezzoLordo"])
  670. self._righe[0]["percentualeIva"] = mN(self._righe[self._numRiga]["percentualeIva"],2)
  671. self._righe[0]["applicazioneSconti"] = self._righe[self._numRiga]["applicazioneSconti"]
  672. self._righe[0]["sconti"] = self._righe[self._numRiga]["sconti"]
  673. self._righe[0]["prezzoNetto"] = mN(self._righe[self._numRiga]["prezzoNetto"])
  674. self._righe[0]["totale"] = mN(self._righe[self._numRiga]["totale"],2)
  675. self._righe[0]["prezzoNettoUltimo"] = mN(self._righe[self._numRiga]["prezzoNettoUltimo"])
  676. findComboboxRowFromId(self.id_magazzino_combobox, self._righe[0]["idMagazzino"])
  677. fillComboboxMultipli(self.id_multiplo_customcombobox.combobox, self._righe[0]["idArticolo"], True)
  678. findComboboxRowFromId(self.id_multiplo_customcombobox.combobox, self._righe[0]["idMultiplo"])
  679. self.refresh_combobox_listini()
  680. findComboboxRowFromId(self.id_listino_customcombobox.combobox, self._righe[0]["idListino"])
  681. self.articolo_entry.set_text(self._righe[0]["codiceArticolo"])
  682. self.descrizione_entry.set_text(self._righe[0]["descrizione"])
  683. self.codice_articolo_fornitore_entry.set_text(self._righe[0]["codiceArticoloFornitore"])
  684. self.percentuale_iva_entry.set_text(str(mN(self._righe[0]["percentualeIva"],2)))
  685. self.sconti_widget.setValues(self._righe[0]["sconti"], self._righe[0]["applicazioneSconti"], False)
  686. self.quantita_entry.set_text(str(mN(self._righe[0]["quantita"],3)))
  687. self.prezzo_lordo_entry.set_text(str(mN(self._righe[0]["prezzoLordo"])))
  688. self.prezzo_netto_label.set_text(str(mN(self._righe[0]["prezzoNetto"])))
  689. self.totale_riga_label.set_text(str(mN(self._righe[0]["totale"],2)))
  690. self._loading = False
  691. self.articolo_entry.grab_focus()
  692. def on_new_row_button_clicked(self, widget):
  693. """
  694. Gestisce l'evento di creazione di una nuova riga
  695. """
  696. self.nuovaRiga()
  697. def on_confirm_row_button_clicked(self, widget):
  698. """
  699. Memorizza la riga inserita o modificata
  700. """
  701. self._righe[0]["idMagazzino"] = findIdFromCombobox(self.id_magazzino_combobox)
  702. magazzino = leggiMagazzino(self._righe[0]["idMagazzino"])
  703. self._righe[0]["magazzino"] = magazzino["denominazione"]
  704. if (self.data_movimento_entry.get_text() == ''):
  705. self.showMessage('Inserire da data del movimento !')
  706. return
  707. if (findIdFromCombobox(self.id_operazione_combobox) is None):
  708. self.showMessage('Inserire il tipo di movimento !')
  709. return
  710. if ((self._righe[0]["idMagazzino"] is not None) and
  711. (self._righe[0]["idArticolo"] is None)):
  712. self.showMessage('Inserire l''articolo !')
  713. return
  714. if ((self._righe[0]["idArticolo"] is not None) and
  715. (self._righe[0]["idMagazzino"] is None)):
  716. self.showMessage('Inserire il magazzino !')
  717. return
  718. costoVariato = (self._tipoPersonaGiuridica == "fornitore" and self._righe[0]["idArticolo"] is not None and
  719. (Decimal(self._righe[0]["prezzoNetto"]) != Decimal(self._righe[0]["prezzoNettoUltimo"])))
  720. if self._numRiga == 0:
  721. self._numRiga = len(self._righe)
  722. self._righe.append(self._righe[0])
  723. inserisci = True
  724. else:
  725. inserisci = False
  726. # memorizzazione delle parti descrittive (liberamente modificabili)
  727. self._righe[0]["descrizione"] = self.descrizione_entry.get_text()
  728. self._righe[0]["codiceArticoloFornitore"] = self.codice_articolo_fornitore_entry.get_text()
  729. self._righe[self._numRiga]["idRiga"] = self._righe[0]["idRiga"]
  730. self._righe[self._numRiga]["idMagazzino"] = self._righe[0]["idMagazzino"]
  731. self._righe[self._numRiga]["magazzino"] = self._righe[0]["magazzino"]
  732. self._righe[self._numRiga]["idArticolo"] = self._righe[0]["idArticolo"]
  733. self._righe[self._numRiga]["codiceArticolo"] = self._righe[0]["codiceArticolo"]
  734. self._righe[self._numRiga]["descrizione"] = self._righe[0]["descrizione"]
  735. self._righe[self._numRiga]["codiceArticoloFornitore"] = self._righe[0]["codiceArticoloFornitore"]
  736. self._righe[self._numRiga]["percentualeIva"] = mN(self._righe[0]["percentualeIva"],2)
  737. self._righe[self._numRiga]["idUnitaBase"] = self._righe[0]["idUnitaBase"]
  738. self._righe[self._numRiga]["unitaBase"] = self._righe[0]["unitaBase"]
  739. self._righe[self._numRiga]["idMultiplo"] = self._righe[0]["idMultiplo"]
  740. self._righe[self._numRiga]["multiplo"] = self._righe[0]["multiplo"]
  741. self._righe[self._numRiga]["idListino"] = self._righe[0]["idListino"]
  742. self._righe[self._numRiga]["listino"] = self._righe[0]["listino"]
  743. self._righe[self._numRiga]["quantita"] = mN(self._righe[0]["quantita"],3)
  744. self._righe[self._numRiga]["moltiplicatore"] = mN(self._righe[0]["moltiplicatore"],2)
  745. self._righe[self._numRiga]["prezzoLordo"] = mN(self._righe[0]["prezzoLordo"])
  746. self._righe[self._numRiga]["applicazioneSconti"] = self._righe[0]["applicazioneSconti"]
  747. self._righe[self._numRiga]["sconti"] = self._righe[0]["sconti"]
  748. self._righe[self._numRiga]["prezzoNetto"] = mN(self._righe[0]["prezzoNetto"])
  749. self._righe[self._numRiga]["totale"] = mN(self._righe[0]["totale"],2)
  750. if not inserisci:
  751. if self._iteratorRiga is None:
  752. return
  753. self.modelRiga.set_value(self._iteratorRiga, 0, self._righe[self._numRiga]["magazzino"])
  754. self.modelRiga.set_value(self._iteratorRiga, 1, self._righe[self._numRiga]["codiceArticolo"])
  755. self.modelRiga.set_value(self._iteratorRiga, 2, self._righe[self._numRiga]["descrizione"])
  756. self.modelRiga.set_value(self._iteratorRiga, 3, mN(self._righe[self._numRiga]["percentualeIva"],2))
  757. self.modelRiga.set_value(self._iteratorRiga, 4, self._righe[self._numRiga]["unitaBase"])
  758. self.modelRiga.set_value(self._iteratorRiga, 5, self._righe[self._numRiga]["multiplo"])
  759. self.modelRiga.set_value(self._iteratorRiga, 6, self._righe[self._numRiga]["listino"])
  760. self.modelRiga.set_value(self._iteratorRiga, 7, mN(self._righe[self._numRiga]["quantita"],3))
  761. self.modelRiga.set_value(self._iteratorRiga, 8, mN(self._righe[self._numRiga]["prezzoLordo"]))
  762. self.modelRiga.set_value(self._iteratorRiga, 9, self._righe[self._numRiga]["applicazioneSconti"] + ' ' + getStringaSconti(self._righe[self._numRiga]["sconti"]))
  763. self.modelRiga.set_value(self._iteratorRiga, 10, mN(self._righe[self._numRiga]["prezzoNetto"]))
  764. self.modelRiga.set_value(self._iteratorRiga, 11, mN(self._righe[self._numRiga]["totale"],2))
  765. else:
  766. self.modelRiga.append((self._righe[self._numRiga]["magazzino"],
  767. self._righe[self._numRiga]["codiceArticolo"],
  768. self._righe[self._numRiga]["descrizione"],
  769. str(mN(self._righe[self._numRiga]["percentualeIva"],2)),
  770. self._righe[self._numRiga]["unitaBase"],
  771. self._righe[self._numRiga]["multiplo"],
  772. self._righe[self._numRiga]["listino"],
  773. str(mN(self._righe[self._numRiga]["quantita"],3)),
  774. str(mN(self._righe[self._numRiga]["prezzoLordo"])),
  775. self._righe[self._numRiga]["applicazioneSconti"] + ' ' + getStringaSconti(self._righe[self._numRiga]["sconti"]),
  776. str(mN(self._righe[self._numRiga]["prezzoNetto"])),
  777. str(mN(self._righe[self._numRiga]["totale"],2))))
  778. self.calcolaTotale()
  779. if costoVariato:
  780. msg = "Il prezzo di acquisto e' stato variato:\n si desidera aggiornare i listini di vendita ?"
  781. if YesNoDialog(msg=msg, transient=self.dialogTopLevel):
  782. self.on_variazione_listini_button_clicked(self.variazione_listini_button)
  783. self._righe[self._numRiga]["prezzoNettoUltimo"] = mN(self._righe[0]["prezzoNetto"])
  784. self.nuovaRiga()
  785. def on_undo_row_button_clicked(self, widget):
  786. """
  787. Annulla l'inserimento o la modifica della riga in primo piano
  788. """
  789. self.nuovaRiga()
  790. def on_delete_row_button_clicked(self, widget):
  791. """
  792. Elimina la riga in primo piano
  793. """
  794. if not(self._numRiga == 0):
  795. del(self._righe[self._numRiga])
  796. self.modelRiga.remove(self._iteratorRiga)
  797. self.calcolaTotale()
  798. self.nuovaRiga()
  799. def on_ricerca_codice_button_clicked(self, widget):
  800. """
  801. Imposta la ricerca per codice Articolo
  802. """
  803. if self.ricerca_codice_button.get_active():
  804. self.ricercaArticolo()
  805. def on_ricerca_codice_a_barre_button_clicked(self, widget):
  806. """
  807. Imposta la ricerca per codice a barre
  808. """
  809. if self.ricerca_codice_a_barre_button.get_active():
  810. self.ricercaArticolo()
  811. def on_ricerca_descrizione_button_clicked(self, widget):
  812. """
  813. Imposta la ricerca per Descrizione
  814. """
  815. if self.ricerca_descrizione_button.get_active():
  816. self.ricercaArticolo()
  817. def on_ricerca_codice_articolo_fornitore_button_clicked(self, widget):
  818. """
  819. Imposta la ricerca per codice Articolo fornitore
  820. """
  821. if self.ricerca_codice_articolo_fornitore_button.get_active():
  822. self.ricercaArticolo()
  823. def on_articolo_entry_key_press_event(self, widget, event):
  824. """
  825. FIXME
  826. """
  827. keyname = gdk_keyval_name(event.keyval)
  828. if keyname == 'Return' or keyname == 'KP_Enter':
  829. self.ricercaArticolo()
  830. def on_search_row_button_clicked(self, widget):
  831. """
  832. FIXME
  833. """
  834. self.ricercaArticolo()
  835. def ricercaArticolo(self):
  836. """
  837. Gestisce la ricerca complessa Articolo secondo il parametro impostato
  838. """
  839. def on_ricerca_articolo_hide(anagWindow, anag):
  840. """
  841. Gestisce la chiusura della finestra di ricerca
  842. """
  843. if anag.dao is None:
  844. anagWindow.destroy()
  845. return
  846. anagWindow.destroy()
  847. self.mostraArticolo(anag.dao.id)
  848. if (self.data_movimento_entry.get_text() == ''):
  849. self.showMessage('Inserire da data del movimento !')
  850. return
  851. if (findIdFromCombobox(self.id_operazione_combobox) is None):
  852. self.showMessage('Inserire il tipo di movimento !')
  853. return
  854. if (findIdFromCombobox(self.id_magazzino_combobox) is None):
  855. self.showMessage('Inserire il magazzino !')
  856. return
  857. codice = None
  858. codiceABarre = None
  859. denominazione = None
  860. codiceArticoloFornitore = None
  861. join = None
  862. if self.ricerca_codice_button.get_active():
  863. codice = self.articolo_entry.get_text()
  864. if Environment.tipodb == "sqlite":
  865. orderBy = "articolo.codice"
  866. else:
  867. orderBy = Environment.params["schema"]+".articolo.codice"
  868. batchSize = setconf("Numbers", "batch_size")
  869. elif self.ricerca_codice_a_barre_button.get_active():
  870. codiceABarre = self.articolo_entry.get_text()
  871. join= Articolo.cod_barre
  872. if Environment.tipodb == "sqlite":
  873. orderBy = "codice_a_barre_articolo.codice"
  874. else:
  875. orderBy = Environment.params["schema"]+".codice_a_barre_articolo.codice"
  876. batchSize = setconf("Numbers", "batch_size")
  877. elif self.ricerca_descrizione_button.get_active():
  878. denominazione = self.articolo_entry.get_text()
  879. if Environment.tipodb == "sqlite":
  880. orderBy = "articolo.denominazione"
  881. else:
  882. orderBy = Environment.params["schema"]+".articolo.denominazione"
  883. elif self.ricerca_codice_articolo_fornitore_button.get_active():
  884. codiceArticoloFornitore = self.articolo_entry.get_text()
  885. join= Articolo.fornitur
  886. if Environment.tipodb == "sqlite":
  887. orderBy = "fornitura.codice_articolo_fornitore"
  888. else:
  889. orderBy = Environment.params["schema"]+".fornitura.codice_articolo_fornitore"
  890. batchSize = setconf("Numbers", "batch_size")
  891. arts = Articolo().select(orderBy=orderBy,
  892. join = join,
  893. denominazione=prepareFilterString(denominazione),
  894. codice=prepareFilterString(codice),
  895. codiceABarre=prepareFilterString(codiceABarre),
  896. codiceArticoloFornitore=prepareFilterString(codiceArticoloFornitore),
  897. idFamiglia=None,
  898. idCategoria=None,
  899. idStato=None,
  900. offset=None,
  901. batchSize=None)
  902. if (len(arts) == 1):
  903. self.mostraArticolo(arts[0].id)
  904. else:
  905. from RicercaComplessaArticoli import RicercaComplessaArticoli
  906. anag = RicercaComplessaArticoli(denominazione=denominazione,
  907. codice=codice,
  908. codiceABarre=codiceABarre,
  909. codiceArticoloFornitore=codiceArticoloFornitore)
  910. anag.setTreeViewSelectionType(GTK_SELECTIONMODE_SINGLE)
  911. anagWindow = anag.getTopLevel()
  912. anagWindow.connect("hide",
  913. on_ricerca_articolo_hide,
  914. anag)
  915. anagWindow.set_transient_for(self.dialogTopLevel)
  916. anagWindow.show_all()
  917. def mostraArticolo(self, id):
  918. """
  919. Riempie l'interfaccia con i dati relativi all'articolo
  920. """
  921. self.articolo_entry.set_text('')
  922. self.descrizione_entry.set_text('')
  923. self.codice_articolo_fornitore_entry.set_text('')
  924. self.percentuale_iva_entry.set_text('')
  925. self.id_multiplo_customcombobox.combobox.clear()
  926. self.id_listino_customcombobox.combobox.clear()
  927. self.prezzo_lordo_entry.set_text('0')
  928. self.quantita_entry.set_text('0')
  929. self.prezzo_netto_label.set_text('0')
  930. self.sconti_widget.clearValues()
  931. self._righe[0]["idArticolo"] = None
  932. self._righe[0]["codiceArticolo"] = ''
  933. self._righe[0]["descrizione"] = ''
  934. self._righe[0]["codiceArticoloFornitore"] = ''
  935. self._righe[0]["percentualeIva"] = 0
  936. self._righe[0]["idUnitaBase"] = None
  937. self._righe[0]["idMultiplo"] = None
  938. self._righe[0]["moltiplicatore"] = 1
  939. self._righe[0]["idListino"] = None
  940. self._righe[0]["prezzoLordo"] = 0
  941. self._righe[0]["prezzoNetto"] = 0
  942. self._righe[0]["sconti"] = []
  943. self._righe[0]["applicazioneSconti"] = 'scalare'
  944. data = stringToDate(self.data_movimento_entry.get_text())
  945. fillCombob

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