LeenO computo metrico con LibreOffice  3.22.0
Il software libero per la gestione di computi metrici e contabilità lavori.
LeenoContab.py
Vai alla documentazione di questo file.
1 from datetime import date
2 from com.sun.star.table import CellRangeAddress
3 from com.sun.star.sheet.GeneralFunction import MAX
4 
5 import LeenoUtils
6 import SheetUtils
7 import LeenoSheetUtils
8 import LeenoComputo
9 import Dialogs
10 import LeenoDialogs as DLG
11 import pyleeno as PL
12 import LeenoEvents
13 import LeenoBasicBridge
14 import uno
15 import itertools
16 import operator
17 import LeenoConfig
19 
20 
21 def sbloccaContabilita(oSheet, lrow):
22  '''
23  Controlla che non ci siano atti contabili registrati e dà il consenso a procedere.
24  Ritorna True se il consenso è stato dato, False altrimenti
25  '''
26  if LeenoUtils.getGlobalVar('sblocca_computo') == 1:
27  return True
28  if oSheet.Name != 'CONTABILITA':
29  return True
30 
31  partenza = LeenoSheetUtils.cercaPartenza(oSheet, lrow)
32  if partenza[2] == '#reg':
33  res = Dialogs.YesNoCancel(
34  Title="Voce già registrata",
35  Text= "Lavorando in questo punto del foglio,\n"
36  "comprometterai la validità degli atti contabili già emessi.\n\n"
37  "Vuoi procedere?\n\n"
38  "SCEGLIENDO SI' SARAI COSTRETTO A RIGENERARLI!"
39  )
40  if res == 1:
41  LeenoUtils.setGlobalVar('sblocca_computo', 1)
42  return True
43  return False
44  return True
45 
46 
47 # ###############################################################
48 
49 
50 def insertVoceContabilita(oSheet, lrow):
51  '''
52  Inserisce una nuova voce in CONTABILITA.
53  '''
54  # controllo che non ci siano atti registrati
55  # se ci sono, chiede conferma per poter operare
56  if not sbloccaContabilita(oSheet, lrow):
57  return False
58 
59  stili_contab = LeenoUtils.getGlobalVar('stili_contab')
60  stile = oSheet.getCellByPosition(0, lrow).CellStyle
61  nSal = 0
62  if stile == 'comp Int_colonna_R_prima':
63  lrow += 1
64  elif stile == 'Ultimus_centro_bordi_lati':
65  i = lrow
66  while i != 0:
67  if oSheet.getCellByPosition(23, i).Value != 0:
68  nSal = int(oSheet.getCellByPosition(23, i).Value)
69  break
70  i -= 1
71  while oSheet.getCellByPosition(0, lrow).CellStyle == stile:
72  lrow += 1
73  if oSheet.getCellByPosition(0, lrow).CellStyle == 'uuuuu':
74  lrow += 1
75  # nSal += 1
76  # else
77  elif stile == 'Comp TOTALI':
78  pass
79  elif stile in stili_contab:
80  sStRange = LeenoComputo.circoscriveVoceComputo(oSheet, lrow)
81  nSal = int(oSheet.getCellByPosition(23, sStRange.RangeAddress.StartRow + 1).Value)
82  lrow = LeenoSheetUtils.prossimaVoce(oSheet, lrow)
83  else:
84  return
85 
86  oDoc = SheetUtils.getDocumentFromSheet(oSheet)
87  oSheetto = oDoc.getSheets().getByName('S5')
88  oRangeAddress = oSheetto.getCellRangeByPosition(0, 22, 48, 26).getRangeAddress()
89  oCellAddress = oSheet.getCellByPosition(0, lrow).getCellAddress()
90  # inserisco le righe
91  oSheet.getRows().insertByIndex(lrow, 5)
92  oSheet.copyRange(oCellAddress, oRangeAddress)
93  oSheet.getCellRangeByPosition(0, lrow, 48, lrow + 5).Rows.OptimalHeight = True
94 
95  # @@@ TO REMOVE !!!
96  #_gotoCella(1, lrow + 1)
97 
98  sStRange = LeenoComputo.circoscriveVoceComputo(oSheet, lrow)
99  sopra = sStRange.RangeAddress.StartRow
100  for n in reversed(range(0, sopra)):
101  if oSheet.getCellByPosition(1, n).CellStyle == 'Ultimus_centro_bordi_lati':
102  break
103  if oSheet.getCellByPosition(1, n).CellStyle == 'Data_bianca':
104  data = oSheet.getCellByPosition(1, n).Value
105  break
106  try:
107  oSheet.getCellByPosition(1, sopra + 2).Value = data
108  except Exception:
109  oSheet.getCellByPosition(1, sopra + 2).Value = date.today().toordinal() - 693594
110 
111  # raggruppo i righi di misura
112  iSheet = oSheet.RangeAddress.Sheet
113  oCellRangeAddr = CellRangeAddress()
114  oCellRangeAddr.Sheet = iSheet
115  oCellRangeAddr.StartColumn = 0
116  oCellRangeAddr.EndColumn = 0
117  oCellRangeAddr.StartRow = lrow + 2
118  oCellRangeAddr.EndRow = lrow + 2
119  oSheet.group(oCellRangeAddr, 1)
120 
121 
122  if oDoc.NamedRanges.hasByName('_Lib_' + str(nSal)):
123  if lrow - 1 == oSheet.getCellRangeByName('_Lib_' + str(nSal)).getRangeAddress().EndRow:
124  nSal += 1
125 
126  oSheet.getCellByPosition(23, sopra + 1).Value = nSal
127  oSheet.getCellByPosition(23, sopra + 1).CellStyle = 'Sal'
128 
129  oSheet.getCellByPosition(35, sopra + 4).Formula = '=B' + str(sopra + 2)
130  oSheet.getCellByPosition(36, sopra +4).Formula = (
131  '=IF(ISERROR(P' + str(sopra + 5) + ');"";IF(P' +
132  str(sopra + 5) + '<>"";P' + str(sopra + 5) + ';""))')
133  oSheet.getCellByPosition(36, sopra + 4).CellStyle = "comp -controolo"
134 
135  LeenoSheetUtils.numeraVoci(oSheet, 0, True)
136 
137  '''
138  @@@@ NOTA BENE : QUESTA PARTE È PER L'USO INTERATTIVO
139  VEDIAMO CHE FARNE IN SEGUITO
140  if cfg.read('Generale', 'pesca_auto') == '1':
141  if arg == 0:
142  return
143  pesca_cod()
144  '''
145 
146 # ###############################################################
147 
148 
150  oDoc = LeenoUtils.getDocument()
151  messaggio= """
152 Questa operazione svuoterà il foglio CONTABILITA e cancellerà
153 tutti gli elaborati contabili generati fino a questo momento.
154 
155 OPERAZIONE NON REVERSIBILE!
156 
157 VUOI PROCEDERE UGUALMENTE?"""
158  if Dialogs.YesNoDialog(Title='*** A T T E N Z I O N E ! ***',
159  Text= messaggio) == 1:
160  svuotaContabilita(oDoc)
161 
162 
164  '''
165  svuota_contabilita
166  Ricrea il foglio di contabilità partendo da zero.
167  '''
169  for n in range(1, 20):
170  if oDoc.NamedRanges.hasByName('_Lib_' + str(n)):
171  oDoc.NamedRanges.removeByName('_Lib_' + str(n))
172  oDoc.NamedRanges.removeByName('_SAL_' + str(n))
173  oDoc.NamedRanges.removeByName('_Reg_' + str(n))
174  for el in ('Registro', 'SAL', 'CONTABILITA'):
175  if oDoc.Sheets.hasByName(el):
176  oDoc.Sheets.removeByName(el)
177 
178  oDoc.Sheets.insertNewByName('CONTABILITA', 3)
179  PL.GotoSheet('CONTABILITA')
180  oSheet = oDoc.Sheets.getByName('CONTABILITA')
181 
182  SheetUtils.setTabColor(oSheet, 16757935)
183  oSheet.getCellRangeByName('C1').String = 'CONTABILITA'
184  oSheet.getCellRangeByName('C1').CellStyle = 'comp Int_colonna'
185  oSheet.getCellRangeByName('C1').CellBackColor = 16757935
186  oSheet.getCellByPosition(0, 2).String = 'N.'
187  oSheet.getCellByPosition(1, 2).String = 'Articolo\nData'
188  oSheet.getCellByPosition(2, 2).String = 'LAVORAZIONI\nO PROVVISTE'
189  oSheet.getCellByPosition(5, 2).String = 'P.U.\nCoeff.'
190  oSheet.getCellByPosition(6, 2).String = 'Lung.'
191  oSheet.getCellByPosition(7, 2).String = 'Larg.'
192  oSheet.getCellByPosition(8, 2).String = 'Alt.\nPeso'
193  oSheet.getCellByPosition(9, 2).String = 'Quantità\nPositive'
194  oSheet.getCellByPosition(11, 2).String = 'Quantità\nNegative'
195  oSheet.getCellByPosition(13, 2).String = 'Prezzo\nunitario'
196  oSheet.getCellByPosition(15, 2).String = 'Importi'
197  oSheet.getCellByPosition(16, 2).String = 'Incidenza\nsul totale'
198  oSheet.getCellByPosition(17, 2).String = 'Sicurezza\ninclusa'
199  oSheet.getCellByPosition(18, 2).String = 'importo totale\nsenza errori'
200  oSheet.getCellByPosition(19, 2).String = 'Lib.\nN.'
201  oSheet.getCellByPosition(20, 2).String = 'Lib.\nP.'
202  oSheet.getCellByPosition(22, 2).String = 'flag'
203  oSheet.getCellByPosition(23, 2).String = 'SAL\nN.'
204  oSheet.getCellByPosition(25, 2).String = 'Importi\nSAL parziali'
205  oSheet.getCellByPosition(27, 2).String = 'Sicurezza\nunitaria'
206  oSheet.getCellByPosition(28, 2).String = 'Materiali\ne Noli €'
207  oSheet.getCellByPosition(29, 2).String = 'Incidenza\nMdO %'
208  oSheet.getCellByPosition(30, 2).String = 'Importo\nMdO'
209  oSheet.getCellByPosition(31, 2).String = 'Super Cat'
210  oSheet.getCellByPosition(32, 2).String = 'Cat'
211  oSheet.getCellByPosition(33, 2).String = 'Sub Cat'
212  # oSheet.getCellByPosition(34,2).String = 'tag B'sub Scrivi_header_moduli
213  # oSheet.getCellByPosition(35,2).String = 'tag C'
214  oSheet.getCellByPosition(36, 2).String = 'Importi\nsenza errori'
215  oSheet.getCellByPosition(0, 2).Rows.Height = 800
216  # colore colonne riga di intestazione
217  oSheet.getCellRangeByPosition(0, 2, 36, 2).CellStyle = 'comp Int_colonna_R'
218  oSheet.getCellByPosition(0, 2).CellStyle = 'comp Int_colonna_R_prima'
219  oSheet.getCellByPosition(18, 2).CellStyle = 'COnt_noP'
220  oSheet.getCellRangeByPosition(0, 0, 0, 3).Rows.OptimalHeight = True
221  # riga di controllo importo
222  oSheet.getCellRangeByPosition(0, 1, 36, 1).CellStyle = 'comp In testa'
223  oSheet.getCellByPosition(2, 1).String = 'QUESTA RIGA NON VIENE STAMPATA'
224  oSheet.getCellRangeByPosition(0, 1, 1, 1).merge(True)
225  oSheet.getCellByPosition(13, 1).String = 'TOTALE:'
226  oSheet.getCellByPosition(20, 1).String = 'SAL SUCCESSIVO:'
227 
228  oSheet.getCellByPosition(25, 1).Formula = '=$P$2-SUBTOTAL(9;$P$2:$P$2)'
229 
230  oSheet.getCellByPosition(15,
231  1).Formula = '=SUBTOTAL(9;P3:P4)' # importo lavori
232  oSheet.getCellByPosition(0, 1).Formula = '=AK2' # importo lavori
233  oSheet.getCellByPosition(
234  17, 1).Formula = '=SUBTOTAL(9;R3:R4)' # importo sicurezza
235 
236  oSheet.getCellByPosition(
237  28, 1).Formula = '=SUBTOTAL(9;AC3:AC4)' # importo materiali
238  oSheet.getCellByPosition(29,
239  1).Formula = '=AE2/Z2' # Incidenza manodopera %
240  oSheet.getCellByPosition(29, 1).CellStyle = 'Comp TOTALI %'
241  oSheet.getCellByPosition(
242  30, 1).Formula = '=SUBTOTAL(9;AE3:AE4)' # importo manodopera
243  oSheet.getCellByPosition(
244  36, 1).Formula = '=SUBTOTAL(9;AK3:AK4)' # importo certo
245 
246  # riga del totale
247  oSheet.getCellByPosition(2, 3).String = 'T O T A L E'
248  oSheet.getCellByPosition(15,
249  3).Formula = '=SUBTOTAL(9;P3:P4)' # importo lavori
250  oSheet.getCellByPosition(
251  17, 3).Formula = '=SUBTOTAL(9;R3:R4)' # importo sicurezza
252  oSheet.getCellByPosition(
253  30, 3).Formula = '=SUBTOTAL(9;AE3:AE4)' # importo manodopera
254  oSheet.getCellRangeByPosition(0, 3, 36, 3).CellStyle = 'Comp TOTALI'
255  # riga rossa
256  oSheet.getCellByPosition(0, 4).String = 'Fine Computo'
257  oSheet.getCellRangeByPosition(0, 4, 36, 4).CellStyle = 'Riga_rossa_Chiudi'
258  PL._gotoCella(2, 2)
261 
262  return oSheet
263 
264 
265 # ###############################################################
266 
267 
269  '''
270  Mostra il foglio di contabilità, se presente
271  Altrimenti lo genera
272  '''
273  if oDoc.Sheets.hasByName('S1'):
274  oDoc.Sheets.getByName('S1').getCellByPosition(7, 327).Value = 1
275  if oDoc.Sheets.hasByName('CONTABILITA'):
276  oSheet = oDoc.Sheets.getByName('CONTABILITA')
277  else:
278  #oSheet = oDoc.Sheets.insertNewByName('CONTABILITA', 5)
279  oSheet = svuotaContabilita(oDoc)
280  insertVoceContabilita(oSheet, 0)
281 
284 
285  return oSheet
286 
287 
289 
290 
292  '''
293  Se presenti, attiva e visualizza le tabelle di contabilità
294  @@@ MODIFICA IN CORSO CON 'LeenoContab.generaContabilita'
295  '''
296  PL.chiudi_dialoghi()
297  oDoc = LeenoUtils.getDocument()
298  if oDoc.Sheets.hasByName('S1'):
299  oDoc.Sheets.getByName('S1').getCellByPosition(7, 327).Value = 1
300  if oDoc.Sheets.hasByName('CONTABILITA'):
301  for el in ('Registro', 'SAL', 'CONTABILITA'):
302  if oDoc.Sheets.hasByName(el):
303  PL.GotoSheet(el)
304  else:
305  oDoc.Sheets.insertNewByName('CONTABILITA', 5)
306  svuotaContabilita(oDoc)
307  PL.GotoSheet('CONTABILITA')
308  PL._gotoCella(0, 2)
309  PL.GotoSheet('CONTABILITA')
312 
313 
314 
315 def partita(testo):
316  '''
317  Aggiunge/detrae rigo di PARTITA PROVVISORIA
318  '''
319  oDoc = LeenoUtils.getDocument()
320  oSheet = oDoc.CurrentController.ActiveSheet
321  if oSheet.Name != "CONTABILITA":
322  return
323  x = PL.LeggiPosizioneCorrente()[1]
324  if oSheet.getCellByPosition(0, x).CellStyle == 'comp 10 s_R':
325  if oSheet.getCellByPosition(2, x).Type.value != 'EMPTY':
326  PL.Copia_riga_Ent()
327  x += 1
328  oSheet.getCellByPosition(2, x).String = testo
329  oSheet.getCellRangeByPosition(2, x, 8, x).CellBackColor = 16777113
330  PL._gotoCella(5, x)
331 
332 
334  '''
335  @@ DA DOCUMENTARE
336  '''
337  partita('PARTITA PROVVISORIA')
338 
339 
341  '''
342  @@ DA DOCUMENTARE
343  '''
344  partita('SI DETRAE PARTITA PROVVISORIA')
345 
346 
347 
349  '''
350  Visualizza in modalità struttura i documenti contabili
351  '''
352  oDoc = LeenoUtils.getDocument()
353  oSheet = oDoc.CurrentController.ActiveSheet
354  PL.struttura_off()
355  oRanges = oDoc.NamedRanges
356 
357  if oSheet.Name == 'CONTABILITA':
358  pref = "_Lib_"
359  y = 3
360  elif oSheet.Name == 'Registro':
361  pref = "_Reg_"
362  y = 1
363  elif oSheet.Name == 'SAL':
364  pref = "_SAL_"
365  y = 1
366 
367  for i in range(1, 50):
368  try:
369  oRange=oRanges.getByName(pref + str(i)).ReferredCells.RangeAddress
370  # ~oSheet.ungroup(oRange, 1)
371  oSheet.group(oRange, 1)
372  oSheet.getCellRangeByPosition(0, oRange.StartRow,
373  11, oRange.EndRow).Rows.IsVisible = False
374  except:
375  try:
376  oSheet.getCellRangeByPosition(0, oRange.StartRow,
377  11, oRange.EndRow).Rows.IsVisible = True
378  PL._gotoCella(0, oRange.StartRow -1)
379  oDoc.CurrentController.setFirstVisibleRow(y)
380  except:
381  # ~Dialogs.NotifyDialog(Image='Icons-Big/info.png',
382  # ~Title = 'Info',
383  # ~Text='''In questo Libretto delle Misure
384 # ~non ci sono misure registrate.''')
385  if oSheet.Name == 'CONTABILITA':
386  PL.struttura_ComputoM()
387  pass
388  return
389 
390 def GeneraLibretto(oDoc):
391  '''
392  CONTABILITA' - Si ottiene una riga gialla con l'indicazione delle
393  voci di misurazione registrate ed un parziale dell'importo del SAL a
394  cui segue la visualizzazione in struttura delle voci registrate nel
395  Libretto delle Misure.
396  '''
397 
398  # ~oDoc = LeenoUtils.getDocument()
399  # DLG.mri(oDoc.StyleFamilies.getByName("CellStyles").getByName('comp 1-a PU'))
400  # return
401  oSheet = oDoc.CurrentController.ActiveSheet
402  if oSheet.Name != 'CONTABILITA':
403  return
404  PL.numera_voci()
405  oRanges = oDoc.NamedRanges
406 
407  # ~try:
408  # ~oRanges.removeByName("_Lib_1")
409  # ~except:
410  # ~pass
411 
412  # ~return
413  #trovo il numero del nuovo sal
414  nSal = 0
415  idxsal = int(cfg.read('Contabilita', 'idxsal'))
416  for i in reversed(range(1, idxsal)):
417  if oRanges.hasByName("_Lib_" + str(i)) == True:
418  nSal = i +1
419  break
420  else:
421  nSal = 1
422  daVoce = 1
423  old_nPage = 1
424  # ~oColumn = oSheet.getColumns().getByName('X')
425  # ~nSal = 1 + int(oColumn.computeFunction(MAX))
426  libretti = SheetUtils.sStrColtoList('segue Libretto delle Misure n.', 2, oSheet, start=2)
427  try:
428  daVoce = int(oSheet.getCellByPosition(2, libretti[-1]
429  ).String.split('÷')[1]) + 1
430  except:
431  daVoce = 1
432  oCellRange = oSheet.getCellRangeByPosition(0, 3, 0,
433  SheetUtils.getUsedArea(oSheet).EndRow - 2)
434  if daVoce >= int(oCellRange.computeFunction(MAX)):
435  Dialogs.NotifyDialog(Image='Icons-Big/exclamation.png',
436  Title = 'ATTENZIONE!',
437  Text='Tutte le voci di questo Libretto delle Misure\n'
438  'sono già registrate.')
439  return
440 
441  nomearea="_Lib_" + str(nSal)
442 
443  # Recupero la prima riga non registrata
444 
445  daVoce = PL.InputBox(str(daVoce), "Registra Libretto, da voce n.")
446  if len(daVoce) ==0:
447  return
448 
449  try:
450  lrow = int(SheetUtils.uFindStringCol(daVoce, 0, oSheet))
451  except TypeError:
452  return
453  sStRange = LeenoComputo.circoscriveVoceComputo(oSheet, lrow)
454  primariga = sStRange.RangeAddress.StartRow
455 
456  # ULTIMA VOCE
457  oCellRange = oSheet.getCellRangeByPosition(
458  0, 3, 0, SheetUtils.getUsedArea(oSheet).EndRow - 2)
459  aVoce = int(oCellRange.computeFunction(MAX))
460 
461  aVoce = PL.InputBox(str(aVoce), "Registra Libretto, a voce n.")
462  # ~aVoce = str(int(daVoce) + 1)
463  if len(aVoce) == 0:
464  return
465  elif int(aVoce) < int(aVoce):
466  return
467 
468  try:
469  lrow = int(SheetUtils.uFindStringCol(aVoce, 0, oSheet))
470  except TypeError:
471  return
472  sStRange = LeenoComputo.circoscriveVoceComputo(oSheet, lrow)
473  ultimariga = sStRange.RangeAddress.EndRow
474  # attiva la progressbar
475  progress = Dialogs.Progress(Title='Generazione elaborato...', Text="Libretto delle Misure")
476  progress.setLimits(1, 6)
477  progress.setValue(0)
478  progress.show()
479  progress.setValue(1)
480 
481  # Recupero i dati per il SAL
482  # ottengo datiSAL = [art, desc, um, quant] in cui quant è la "somma a tutto il"
483  SAL = []
484  i = 5
485  while i < ultimariga + 1:
486  '''
487  SAL = (art, desc, um, quant, prezzo, importo)
488  EP = elenco articoli
489  '''
490  datiSAL = LeenoComputo.datiVoceComputo(oSheet, i)[1]
491  SAL.append(datiSAL)
492  i= LeenoSheetUtils.prossimaVoce(oSheet, i, saltaCat=True)
493  # ~i= LeenoSheetUtils.prossimaVoce(oSheet, i)
494  sic = []
495  mdo = []
496  for el in SAL:
497  sic.append(el[6])
498  mdo.append(el[7])
499  sic = sum(sic)
500  mdo = sum(mdo)
501 
502  datiSAL=list()
503  for k, g in itertools.groupby(sorted(SAL), operator.itemgetter(0,1,2)):
504  quant = sum(float(q[3]) for q in g)
505  k = list(k)
506  k.append(quant)
507  datiSAL.append(k)
508 
509  PL.comando ('DeletePrintArea')
510  # ~oSheet.removeAllManualPageBreaks()
512 
513  oSheet.getCellByPosition(25, ultimariga - 1).String = "SAL n." + str(nSal)
514  oSheet.getCellByPosition(25, ultimariga).Formula = (
515  "=SUBTOTAL(9;P" + str(primariga + 1) + ":P" + str(ultimariga+1) + ")" )
516  oSheet.getCellByPosition(25, ultimariga).CellStyle = "comp sotto Euro 3_R"
517 
518  # immetti le firme
519  inizioFirme = ultimariga + 1
520 
521  PL.MENU_firme_in_calce (inizioFirme) # riga di inserimento
522  fineFirme = inizioFirme + 10
523 
524  progress.setValue(2)
525  area="$A$" + str(primariga + 1) + ":$AJ$" + str(fineFirme + 1)
526  # ~LeenoBasicBridge.rifa_nomearea(oDoc, "CONTABILITA", area, nomearea)
527  # ~DLG.chi(nomearea)
528 
529  SheetUtils.NominaArea(oDoc, "CONTABILITA", area, nomearea)
530 
531 
532 
533  oSheet.getCellRangeByPosition(0, inizioFirme, 32, fineFirme).CellStyle = "Ultimus_centro_bordi_lati"
534  #applico gli stili corretti ad alcuni dati della firma
535  oSheet.getCellByPosition(2, inizioFirme + 1).CellStyle = "Ultimus_destra"
536 
537  oNamedRange=oRanges.getByName(nomearea).ReferredCells.RangeAddress
538 
539  #range del _Lib_
540  daRiga = oNamedRange.StartRow
541  aRiga = oNamedRange.EndRow
542  daColonna = oNamedRange.StartColumn
543  aColonna = oNamedRange.EndColumn
544 
545  iSheet = oSheet.RangeAddress.Sheet
546  # imposta area di stampa
547  # ~oCellRangeAddr = uno.createUnoStruct('com.sun.star.table.CellRangeAddress')
548  # ~oCellRangeAddr.Sheet = iSheet
549  # ~oCellRangeAddr.StartColumn = daColonna
550  # ~oCellRangeAddr.StartRow = daRiga
551  # ~oCellRangeAddr.EndColumn = 11
552  # ~oCellRangeAddr.EndRow = aRiga
553 
554  # imposta riga da ripetere
555  oTitles = uno.createUnoStruct('com.sun.star.table.CellRangeAddress')
556  oTitles.Sheet = iSheet
557  oTitles.StartColumn = 0
558  oTitles.StartRow = 2
559  oTitles.EndColumn = 11
560  oTitles.EndRow = 2
561  oSheet.setTitleRows(oTitles)
562  # ~oSheet.setPrintAreas((oCellRangeAddr,))
563  oNamedRange.EndColumn = 11
564  oSheet.setPrintAreas((oNamedRange,))
565  oSheet.setPrintTitleRows(True)
566 
567  oSheet.PageStyle = "Page_Style_Libretto_Misure2"
568 
569  progress.setValue(3)
570 
571  # sbianco l'area di stampa
572  oSheet.getCellRangeByPosition(daColonna, daRiga, 11, aRiga).CellBackColor = -1
573 
574  progress.setValue(4)
575 
576  for i in range(0, 50):
577  oSheet.getRows().insertByIndex(fineFirme, 1)
578  oSheet.getCellByPosition(2, fineFirme).String = "===================="
579  fineFirme += 1
580  if oSheet.getCellByPosition(1, fineFirme).Rows.IsStartOfNewPage == True:
581  fineFirme -= 1
582  oSheet.getRows().removeByIndex(fineFirme, 1)
583  break
584  # ~oSheet.getRows().removeByIndex(fineFirme, 1)
585  # ~fineFirme -=1
586 
587  oBordo = oSheet.getCellRangeByPosition(0, fineFirme, 32, fineFirme)
588  bordo = oBordo.BottomBorder
589  bordo.LineWidth = 2
590  bordo.OuterLineWidth = 2
591  oBordo.BottomBorder = bordo
592 
593  # ----------------------------------------------------------------------
594  # QUESTA DEVE DIVENTARE UN'OPZIONE A SCELTA DELL'UTENTE
595  # in caso di libretto unico questo if è da attivare
596  # in modo che la numerazione delle pagine non ricominci da capo
597  # ~if nSal > 1:
598  # ~nLib = 1
599  inumPag = 1 + old_nPage
600  nLib = nSal
601 
602 
604  oS2 = oDoc.getSheets().getByName('S2')
605  # trovo la posizione del titolo
606  oEnd=SheetUtils.uFindString("SITUAZIONE CONTABILE", oS2)
607  xS2=oEnd[1]
608  yS2=oEnd[0]
609 
610  oS2.getCellByPosition(yS2 + nSal, xS2 + 1).Value = nSal
611  oS2.getCellByPosition(yS2 + nSal, xS2 + 2).Value = date.today().toordinal() - 693594 #data
612  oS2.getCellByPosition(yS2 + nSal, xS2 + 24).Value = aVoce #ultima voce libretto
613  oS2.getCellByPosition(yS2 + nSal, xS2 + 25).Value = inumPag #ultima pagina libretto
614 
615 
616 # inumPag = 0'+ old_nPage 'SE IL LIBRETTO è UNICO
617 
618  #inserisco i dati
619  progress.setValue(5)
620  for i in range(primariga, fineFirme):
621  if oSheet.getCellByPosition(1, i).CellStyle == "comp Art-EP_R":
622  if primariga == 0:
624  primariga = sStRange.RangeAddress.StartRow
625  oSheet.getCellByPosition(19, i).Value= nLib #numero libretto
626  oSheet.getCellByPosition(22, i).String = "#reg" #flag registrato
627  oSheet.getCellByPosition(23, i).Value= nSal #numero SAL
628 
629  for nPag in range(0, len(oSheet.RowPageBreaks)):
630  if i < oSheet.RowPageBreaks[nPag].Position:
631  oSheet.getCellByPosition(20, i).Value = nPag #pagina
632  break
633 
634  progress.setValue(6)
635  # annoto ultimo numero di pagina
636  oSheet.getCellByPosition(20 , fineFirme).Value = nPag
637  oSheet.getCellByPosition(20 , fineFirme).CellStyle = "num centro"
638 # inumPag = nPag ' + old_nPage 'SE IL LIBRETTO è UNICO
639 
640  # ~SheetUtils.visualizza_PageBreak(False)
641 
642  # inserisco la prima riga GIALLA del LIBRETTO
643  oSheet.getRows().insertByIndex(daRiga, 1)
644  oSheet.getCellRangeByPosition (0, daRiga, 36, daRiga).CellStyle = "uuuuu"
645 
646  #range del _Lib_
647  oSheet.getCellByPosition(2, daRiga).String = (
648  "segue Libretto delle Misure n." + str(nSal) +
649  " - " + str(daVoce) + "÷" + str(aVoce)
650  )
651  oSheet.getCellByPosition(20, daRiga).Value = nPag #Pagina
652  oSheet.getCellByPosition(19, daRiga).Value= nLib #Libretto
653  oSheet.getCellByPosition(23, daRiga).Value= nSal #SAL
654  oSheet.getCellByPosition(15, daRiga).Formula =(
655  "=SUBTOTAL(9;$P$" + str(primariga + 2) + ":$P$" + str(
656  ultimariga + 2) + ")"
657  )
658  oSheet.getCellByPosition(15, daRiga).CellStyle = "comp sotto Euro 3_R"
659  oSheet.getCellByPosition(25, daRiga).Formula =(
660  "=SUBTOTAL(9;$P$" + str(primariga + 2) + ":$P$" + str(
661  ultimariga + 2) + ")"
662  )
663  oSheet.getCellByPosition(25, daRiga).CellStyle = "comp sotto Euro 3_R"
664 
665  # annoto il sal corrente sulla riga di intestazione
666  oSheet.getCellByPosition(25, 2).Value = nSal
667  oSheet.getCellByPosition(25, 2).CellStyle = "Menu_sfondo _input_grasBig"
668  oSheet.getCellByPosition(25, 1).Formula = (
669  "=$P$2-SUBTOTAL(9;$P$2:$P$" + str(ultimariga + 2) + ")"
670  )
671 
672  PL._gotoCella(0, daRiga)
673  # ~_gotoCella(0, inizioFirme)
674  progress.hide()
675 
676 # Protezione_area ("CONTABILITA",nomearea)
677 # Struttura_Contab ("_Lib_")
678 # Genera_REGISTRO
680  # ~for el in (nSal, daVoce, aVoce, primariga+1, ultimariga+1, datiSAL, sic, mdo):
681  # ~DLG.chi(el)
682  return nSal, daVoce, aVoce, primariga+1, ultimariga+1, datiSAL, sic, mdo
683 
684 
685 
691 def GeneraRegistro(oDoc):
692  '''
693  CONTABILITA' - genera un nuovo foglio 'Registro'. Si ottiene una riga
694  gialla con l'indicazione delle voci di misurazione registrate ed un
695  parziale dell'importo del SAL a cui segue la visualizzazione in
696  struttura delle relative voci registrate nel Libretto delle Misure.
697  '''
698 
699 
700  try:
701  nSal, daVoce, aVoce, primariga, ultimariga, datiSAL, sic, mdo = GeneraLibretto(oDoc)
702  except:
703  return
704 
705  progress = Dialogs.Progress(Title='Generazione elaborato...', Text="Registro di Contabilità")
706  progress.setLimits(1, 5)
707  progress.setValue(0)
708  progress.show()
709  progress.setValue(1)
710 
711  # Recupero i dati per il Registro
712  oSheet = oDoc.Sheets.getByName("CONTABILITA")
713  REG = []
714  i = primariga
715  while i < ultimariga:
716  '''
717  REG = ((num + '\n' + art + '\n' + data), desc, Nlib, Plib, um,
718  quantP, quantN, prezzo, importo)
719  '''
720  reg = LeenoComputo.datiVoceComputo(oSheet, i)[0]
721  REG.append(reg)
722  # ~i= LeenoSheetUtils.prossimaVoce(oSheet, i)
723  i= LeenoSheetUtils.prossimaVoce(oSheet, i, saltaCat=True)
724  try:
725  oDoc.getSheets().insertNewByName('Registro',5)
726  PL.GotoSheet('Registro')
727  oSheet = oDoc.Sheets.getByName('Registro')
728 
729  # riga di intestazione
730  oSheet.getCellRangeByPosition(0,0,9,0).CellStyle="An.1v-Att Start"
731  oSheet.getCellByPosition(0,0).String = ("N. ord.\nArticolo\nData")
732  oSheet.getCellByPosition(1,0).String = ("LAVORAZIONI\nE SOMMINISTRAZIONI")
733  oSheet.getCellByPosition(2,0).String = ("Lib.\nN.")
734  oSheet.getCellByPosition(3,0).String = ("Lib.\nP.")
735  oSheet.getCellByPosition(4,0).String = ("U.M.")
736  oSheet.getCellByPosition(5,0).String = ("Quantità\nPositive")
737  oSheet.getCellByPosition(6,0).String = ("Quantità\nNegative")
738  oSheet.getCellByPosition(7,0).String = ("Prezzo\nunitario")
739  oSheet.getCellByPosition(8,0).String = ("Importo\ndebito")
740  oSheet.getCellByPosition(9,0).String = ("Importo\npagamento")
741  # ~oSheet.getCellByPosition(10,0).String = ("Num.\nPag.")
742  # larghezza colonne
743  oSheet.getCellByPosition(0,0).Columns.Width = 1600 #'N. ord.
744  oSheet.getCellByPosition(1,0).Columns.Width = 6600 #'LAVORAZIONI
745  oSheet.getCellByPosition(2,0).Columns.Width = 650 #'Lib.N.
746  oSheet.getCellByPosition(3,0).Columns.Width = 650 #'Lib.P.
747  oSheet.getCellByPosition(4,0).Columns.Width = 1000 #'U.M.
748  oSheet.getCellByPosition(5,0).Columns.Width = 1600 #'Positive
749  oSheet.getCellByPosition(6,0).Columns.Width = 1600 #'Negative
750  oSheet.getCellByPosition(7,0).Columns.Width = 1400 #'Prezzo
751  oSheet.getCellByPosition(8,0).Columns.Width = 1950 #'debito
752  oSheet.getCellByPosition(9,0).Columns.Width = 1950 #'pagamento
753  # ~oSheet.getCellByPosition(0, 2).Rows.OptimalHeight = True
754  # ~oSheet.getCellByPosition(10,0).Columns.OptimalWidth = True #'n.pag.
755  insRow = 1 #'prima riga inserimento in Registro
756  except:
757  # recupera il registro precedente
758  PL.GotoSheet('Registro')
759  oSheet= oDoc.Sheets.getByName("Registro")
760  # ~DLG.chi("_Reg_" + str(nSal - 1))
761  oRanges = oDoc.NamedRanges
762  oPrevRange = oRanges.getByName("_Reg_" + str(nSal - 1)).ReferredCells.RangeAddress
763 
764  fRow = oPrevRange.StartRow
765  lRow = oPrevRange.EndRow
766  insRow = oPrevRange.EndRow + 1
767 
768  # chiudo il registro precedente
769  # ~oCell = oSheet.getCellRangeByPosition(0,fRow,11,lRow)
770  # ~oCell.Rows.IsVisible=False
771 
772  progress.setValue(2)
773 
774  oSheet.PageStyle = 'PageStyle_REGISTRO_A4'
775 
776  # compilo il Registro
777  lastRow = insRow + len(REG) -1
778  oRange = oSheet.getCellRangeByPosition(0, insRow, 8, lastRow)
779  # ~oDoc.CurrentController.select(oRange)
780  reg = tuple(REG)
781  # ~DLG.chi(insRow)
782  # ~DLG.chi(len (reg[0]))
783  oRange.setDataArray(reg)
785 
786 
787 # do gli stili al Registro
788  oSheet.getCellRangeByPosition(0, insRow, 1, lastRow).CellStyle = "List-stringa-sin"
789  oSheet.getCellRangeByPosition(2, insRow, 4, lastRow).CellStyle = "List-num-centro"
790  oSheet.getCellRangeByPosition(5, insRow, 6, lastRow).CellStyle = "comp 1a"
791  oSheet.getCellRangeByPosition(7, insRow, 9, lastRow).CellStyle = "List-num-euro"
792 
793 # inserisco la prima riga GIALLA nel REGISTRO
794  oSheet.getRows().insertByIndex(insRow, 1)
795  oSheet.getCellRangeByPosition (0, insRow, 9, insRow).CellStyle = "uuuuu"
796  PL.fissa()
797  # ci metto le informazioni
798  oSheet.getCellByPosition(1, insRow).String = "segue Registro n." + str(nSal) + " - " + str(daVoce) + "÷" + str(aVoce)
799  oSheet.getCellByPosition(2, insRow).Value= nSal #numero libretto
800  oSheet.getCellByPosition(3, insRow).Value = REG[-1][3] #ultimo numero pagina
801  # indico il parziale del SAL relativo:
802  oSheet.getCellByPosition(8, insRow).Formula = (
803  "=SUBTOTAL(9;I" + str(insRow +2) + ":I" + str(lastRow +2) + ")")
804  oSheet.getCellByPosition(8, insRow).CellStyle = "comp sotto Euro 3_R"
805 
806  # RIGA RIPORTO
807  insRow += 1
808  oSheet.getRows().insertByIndex(insRow, 1)
809  oSheet.getCellByPosition(1, insRow).String = "R I P O R T O"
810  #debito
811  oSheet.getCellByPosition(8, insRow).Formula = (
812  '=IF(SUBTOTAL(9;$I$2:$I$' + str(insRow) + ')=0;"";SUBTOTAL(9;$I$2:$I$' + str(insRow))
813  #pagamento
814  oSheet.getCellByPosition(9, insRow).Formula = (
815  '=IF(SUBTOTAL(9;$J$2:$J$' + str(insRow) + ')=0;"";SUBTOTAL(9;$J$2:$J$' + str(insRow))
816 
817  oSheet.getCellRangeByPosition (0, insRow, 9, insRow).CellStyle = "Ultimus_Bordo_sotto"
818 
819  insRow += 1
820  oSheet.getRows().insertByIndex(insRow, 1)
821 
822  oSheet.getCellByPosition(1, insRow).String = "LAVORI A MISURA"
823  oSheet.getCellRangeByPosition(0, insRow, 9, insRow).CellStyle = "Ultimus_centro_bordi_lati"
824  PL._gotoCella(1, insRow)
825 
826  lastRow = insRow + len(REG)
827 
828  inizioFirme = lastRow + 5
829  PL.MENU_firme_in_calce (inizioFirme) # riga di inserimento
830  fineFirme = inizioFirme + 18
831 
832  progress.setValue(3)
833 
834 # set area del REGISTRO
835  area="$A$" + str(insRow) + ":$J$" + str(fineFirme + 1)
836  nomearea = "_Reg_" + str(nSal)
837  LeenoBasicBridge.rifa_nomearea(oDoc, "Registro", area , nomearea)
838 
839  oRanges = oDoc.NamedRanges
840  oNamedRange=oRanges.getByName(nomearea).ReferredCells.RangeAddress
841 
842  #range del _Reg_
843  # ~daRiga = oNamedRange.StartRow
844  # ~aRiga = oNamedRange.EndRow
845  # ~daColonna = oNamedRange.StartColumn
846  # ~aColonna = oNamedRange.EndColumn
847 
848  iSheet = oSheet.RangeAddress.Sheet
849 
850  # imposta riga da ripetere
851  oTitles = uno.createUnoStruct('com.sun.star.table.CellRangeAddress')
852  oTitles.Sheet = iSheet
853  # ~oTitles.StartColumn = 0
854  oTitles.StartRow = 0
855  # ~oTitles.EndColumn = 9
856  # ~oTitles.EndRow = 0
857  oSheet.setTitleRows(oTitles)
858  # ~oSheet.setPrintAreas((oCellRangeAddr,))
859  oSheet.setPrintAreas((oNamedRange,))
860  oSheet.setPrintTitleRows(True)
861 
862  # ~oPrintArea = oSheet.getPrintAreas()
863  # ~oSheet.group(oPrintArea[0], 1)
864 
865  oSheet.getCellRangeByPosition(0, lastRow +1, 9, fineFirme).CellStyle = "Ultimus_centro_bordi_lati"
866 
867  #torno su a completare...
868  oSheet.getCellByPosition(1, lastRow + 2).String = "Parziale dei Lavori a Misura €"
869  oSheet.getCellByPosition(1, lastRow + 2).CellStyle = "Ultimus_destra"
870  oSheet.getCellByPosition(8, lastRow + 2).Formula = (
871  '=SUBTOTAL(9;$I$2:$I$' + str(inizioFirme))
872  oSheet.getCellByPosition(8, lastRow + 2).CellStyle = "Ultimus_destra_totali"
873 
874  oSheet.getCellByPosition(1, lastRow + 4).String = 'Lavori a tutto il ' + PL.oggi() + ' - T O T A L E €'
875  oSheet.getCellByPosition(1, lastRow + 4).CellStyle = "Ultimus_destra"
876  oSheet.getCellByPosition(8, lastRow + 4).Formula = (
877  '=SUBTOTAL(9;$I$2:$I$' + str(inizioFirme))
878  oSheet.getCellByPosition(8, lastRow + 4).CellStyle = "Ultimus_destra_totali"
879 
880  #applico gli stili corretti ad alcuni dati della firma
881  oSheet.getCellByPosition(1, lastRow + 6).CellStyle = "Ultimus_destra"
882  oSheet.getCellByPosition(1, lastRow + 16).CellStyle = "Ultimus_destra"
883 
884  progress.setValue(4)
885 
887  for i in range(0, 50):
888  oSheet.getRows().insertByIndex(fineFirme, 1)
889  oSheet.getCellByPosition(1, fineFirme).String = "===================="
890  fineFirme += 1
891  if oSheet.getCellByPosition(1, fineFirme).Rows.IsStartOfNewPage == True:
892  fineFirme -= 1
893  oSheet.getRows().removeByIndex(fineFirme, 1)
894  break
895  # ~oSheet.getCellRangeByPosition(0, fineFirme, 9, fineFirme).CellStyle = "comp Descr"
896  oSheet.getCellByPosition(1,fineFirme).String = "A R I P O R T A R E"
897  oSheet.getCellByPosition(8, fineFirme).Formula = (
898  '=IF(SUBTOTAL(9;$I$2:$I$' + str(inizioFirme) + ')=0;"";SUBTOTAL(9;$I$2:$I$' + str(inizioFirme))
899  oSheet.getCellByPosition(9, inizioFirme).Formula = (
900  '=IF(SUBTOTAL(9;$J$2:$J$' + str(inizioFirme) + ')=0;"";SUBTOTAL(9;$J$2:$J$' + str(inizioFirme))
901  oSheet.getCellRangeByPosition (0, fineFirme, 9, fineFirme).CellStyle = "Ultimus_Bordo_sotto"
902 
904 
905  progress.setValue(5)
906  progress.hide()
907 
908 # ~def GeneraSAL (oDoc):
909 
910  progress = Dialogs.Progress(Title='Generazione elaborato...', Text="Registro di Contabilità")
911  progress.setLimits(1, 6)
912  progress.setValue(0)
913  progress.show()
914  progress.setValue(1)
915 
916  try:
917  oDoc.getSheets().insertNewByName('SAL',6)
918  PL.GotoSheet('SAL')
919  oSheet = oDoc.Sheets.getByName('SAL')
920 
921  # riga di intestazione
922  oSheet.getCellRangeByPosition(0,0,6,0).CellStyle="An.1v-Att Start"
923  oSheet.getCellByPosition(0,0).String = ("N. ord.\nArticolo")
924  oSheet.getCellByPosition(1,0).String = ("LAVORAZIONI\nE SOMMINISTRAZIONI")
925  oSheet.getCellByPosition(2,0).String = ("U.M.")
926  oSheet.getCellByPosition(3,0).String = ("Quantità")
927  oSheet.getCellByPosition(4,0).String = ("Prezzo\nunitario")
928  oSheet.getCellByPosition(5,0).String = ("Importo")
929  oSheet.getCellByPosition(6,0).String = ("Pagine")
930  # larghezza colonne
931  oSheet.getCellByPosition(0,0).Columns.Width = 1600 #'N. ord.
932  oSheet.getCellByPosition(1,0).Columns.Width = 10100 #'LAVORAZIONI
933  oSheet.getCellByPosition(2,0).Columns.Width = 1500 #'U.M.
934  oSheet.getCellByPosition(3,0).Columns.Width = 1800 #'Quantità
935  oSheet.getCellByPosition(4,0).Columns.Width = 1400 #'Prezzo
936  oSheet.getCellByPosition(5,0).Columns.Width = 1900 #'Importo
937  oSheet.getCellByPosition(6,0).Columns.OptimalWidth = True #'n.pag.
938  oSheet.getCellByPosition(0, 2).Rows.OptimalHeight = True
939  insRow = 1 #'prima riga inserimento in Registro
940  except:
941  # recupera il registro precedente
942  PL.GotoSheet('SAL')
943  oSheet= oDoc.Sheets.getByName("SAL")
944  # ~DLG.chi("_SAL_" + str(nSal - 1))
945  oRanges = oDoc.NamedRanges
946  oPrevRange = oRanges.getByName("_SAL_" + str(nSal - 1)).ReferredCells.RangeAddress
947 
948  fRow = oPrevRange.StartRow
949  lRow = oPrevRange.EndRow
950  insRow = oPrevRange.EndRow + 1
951 
952  oSheet.PageStyle = 'PageStyle_REGISTRO_A4'
953 
954  progress.setValue(2)
955 
956  # compilo il SAL
957  lastRow = insRow + len(datiSAL) -1
958  oRange = oSheet.getCellRangeByPosition(0, insRow, 3, lastRow)
959  # ~oDoc.CurrentController.select(oRange)
960  sal = tuple(datiSAL)
961  # ~DLG.chi(insRow)
962  # ~DLG.chi(len (sal[0]))
963  oRange.setDataArray(sal)
964 
965  formule = []
966  for x in range(insRow, lastRow + 1):
967  formule.append(['=VLOOKUP(A' + str(x + 1) + ';elenco_prezzi;5;FALSE())',
968  '=D' + str(x + 1) + '*E' + str(x + 1)]
969  )
970 
971  progress.setValue(3)
972 
973 # do gli stili al SAL
974  oSheet.getCellRangeByPosition(0, insRow, 1, lastRow).CellStyle = "List-stringa-sin"
975  oSheet.getCellRangeByPosition(2, insRow, 2, lastRow).CellStyle = "List-num-centro"
976  oSheet.getCellRangeByPosition(3, insRow, 3, lastRow).CellStyle = "comp 1a"
977  oSheet.getCellRangeByPosition(4, insRow, 5, lastRow).CellStyle = "List-num-euro"
978 
979 # completo il SAL inserendo le formule
980  oRange = oSheet.getCellRangeByPosition(4, insRow, 5, lastRow)
981  formule = tuple(formule)
982  oRange.setFormulaArray(formule)
983 
984  nOrd = 1
985  for x in range(insRow, lastRow + 1):
986  oSheet.getCellByPosition(4, x).Value = oSheet.getCellByPosition(4, x).Value
987  oSheet.getCellByPosition(0, x).String = str(nOrd) \
988  + '\n' + oSheet.getCellByPosition(0, x).String
989  nOrd += 1
991 
992  progress.setValue(4)
993 
994 # inserisco la prima riga GIALLA nel SAL
995  oSheet.getRows().insertByIndex(insRow, 1)
996  oSheet.getCellRangeByPosition (0, insRow, 9, insRow).CellStyle = "uuuuu"
997  PL.fissa()
998  # ci metto le informazioni
999  # ~oSheet.getCellByPosition(1, insRow).String = "segue Stato di Avanzamento Lavori n." + str(nSal) + " - 1÷" + str(aVoce)
1000  oSheet.getCellByPosition(1, insRow).String = "segue Stato di Avanzamento Lavori n." + str(nSal) + " - " + str(daVoce) + "÷" + str(aVoce)
1001  # ~oSheet.getCellByPosition(2, insRow).Value = nSal #numero libretto
1002 
1003  # parziale del SAL relativo:
1004  oSheet.getCellByPosition(5, insRow).Formula = (
1005  "=SUBTOTAL(9;$F$" + str(insRow +2) + ":F" + str(lastRow +2) + ")")
1006  oSheet.getCellByPosition(5, insRow).CellStyle = "comp sotto Euro 3_R"
1007 
1008  lastRow = insRow + len(datiSAL)
1009 
1010 #torno su a completare...
1011  oSheet.getCellByPosition(1, lastRow + 2).String = "Parziale dei Lavori a Misura €"
1012  oSheet.getCellByPosition(5, lastRow + 2).Formula = (
1013  '=SUBTOTAL(9;$F$' + str(insRow) + ':$F$' + str(lastRow + 2))
1014  rigaPsal = lastRow + 2
1015 
1016  oSheet.getCellByPosition(1, lastRow + 4).String = 'Lavori a tutto il ' + PL.oggi() + ' - T O T A L E €'
1017  oSheet.getCellByPosition(5, lastRow + 4).Formula = (
1018  '=SUBTOTAL(9;$F$' + str(insRow) + ':$F$' + str(lastRow + 2))
1019 
1020  progress.setValue(5)
1021 
1022  fineFirme = lastRow + 6
1023  for i in range(0, 50):
1024  oSheet.getRows().insertByIndex(fineFirme, 1)
1025  oSheet.getCellByPosition(1, fineFirme).String = "===================="
1026  fineFirme += 1
1027 
1028 
1029 
1030  if oSheet.getCellByPosition(1, fineFirme).Rows.IsStartOfNewPage == True:
1031  oDoc.CurrentController.select(oSheet.getCellByPosition(1, fineFirme))
1032  # ~ DLG.chi(oSheet.getCellByPosition(1, fineFirme).Rows.IsStartOfNewPage)
1033  # ~fineFirme -= 1
1034  # ~oSheet.getRows().removeByIndex(fineFirme, 1)
1035  break
1036  # ~return
1037 #applico gli stili corretti ad alcuni dati della firma
1038  oSheet.getCellRangeByPosition(
1039  0, lastRow +1, 5, fineFirme).CellStyle = "Ultimus_centro_bordi_lati"
1040  oSheet.getCellRangeByPosition (0, fineFirme, 5, fineFirme).CellStyle = "comp Descr"
1041  oSheet.getCellByPosition(1, lastRow + 2).CellStyle = "Ultimus_destra"
1042  oSheet.getCellByPosition(1, lastRow + 4).CellStyle = "Ultimus_destra"
1043  oSheet.getCellByPosition(5, lastRow + 2).CellStyle = "Ultimus_destra_totali"
1044  oSheet.getCellByPosition(5, lastRow + 4).CellStyle = "Ultimus_destra_totali"
1045 
1046  lastRow = fineFirme + 1
1047 
1048  oSheet.getCellByPosition(1, lastRow + 1).String = "R I E P I L O G O S A L"
1049 
1050  oSheet.getCellByPosition(1, lastRow + 3).String = ("Appalto: a misura")
1051  oSheet.getCellByPosition(1, lastRow + 4).String = ("Offerta: unico ribasso")
1052 
1053  oSheet.getCellByPosition(1, lastRow + 6).String = ("Lavori a Misura €")
1054  oSheet.getCellByPosition(5, lastRow + 6).Formula = "=$F$" + str(rigaPsal + 1)
1055 
1056  oSheet.getCellByPosition(1, lastRow + 7).String = ("Di cui importo per la Sicurezza")
1057  oSheet.getCellByPosition(5, lastRow + 7).Value = - sic
1058 
1059  oSheet.getCellByPosition(1, lastRow + 8).String = ("Di cui importo per la Manodopera")
1060  oSheet.getCellByPosition(5, lastRow + 8).Value = - mdo
1061 
1062  oSheet.getCellByPosition(1, lastRow + 9).String = "Importo dei Lavori a Misura su cui applicare il ribasso"
1063  oSheet.getCellByPosition(5, lastRow + 9).Formula = "=SUM(F" + str(lastRow + 7) + ":F" + str(lastRow + 9) + ")"
1064 
1065  oSheet.getCellByPosition(1, lastRow + 10).Formula = (
1066  '''=CONCATENATE("RIBASSO del ";TEXT($S2.$C$78*100;"#.##0,00");"%")''')
1067  oSheet.getCellByPosition(5, lastRow + 10).Formula = "=-$F$" + str(lastRow + 10) + "*$S2.$C$78" # RIBASSO
1068 
1069  oSheet.getCellByPosition(1, lastRow + 11).String = ("Importo per la Sicurezza")
1070  oSheet.getCellByPosition(5, lastRow + 11).Value = sic
1071 
1072  oSheet.getCellByPosition(1, lastRow + 12).String = ("Importo per la Manodopera")
1073  oSheet.getCellByPosition(5, lastRow + 12).Value = mdo
1074 
1075  oSheet.getCellByPosition(1, lastRow + 13).String = "PER I LAVORI A MISURA €"
1076  oSheet.getCellByPosition(5, lastRow + 13).Formula = "=SUM($F$" + str(lastRow + 10) + ":$F$" + str(lastRow + 13) + ")"
1077 
1078 # IL TOTALE ANDRA' RISISTEMATO QUANDO SARANNO PRONTE LE ALTRE MODALITA' DI APPALTO: IN ECONOMIA E A CORPO
1079  oSheet.getCellByPosition(1, lastRow + 15).String = "T O T A L E €"
1080  oSheet.getCellByPosition(5, lastRow + 15).Formula = "=SUM($F$" + str(lastRow + 10) + ":$F$" + str(lastRow + 13) + ")"
1081 
1082  progress.setValue(6)
1083 
1084 # ~# le firme
1085  inizioFirme = lastRow + 17
1086  PL.MENU_firme_in_calce (inizioFirme) # riga di inserimento
1087  fineFirme = inizioFirme + 12
1088 
1089  oSheet.getCellRangeByPosition(
1090  0, lastRow, 5, fineFirme).CellStyle = "Ultimus_centro_bordi_lati"
1091  oSheet.getCellByPosition(1, lastRow + 1).CellStyle = "Ultimus_centro_Dsottolineato"
1092  oSheet.getCellRangeByPosition(1, lastRow + 3, 1, lastRow + 4).CellStyle = "Ultimus_sx_italic"
1093  oSheet.getCellRangeByPosition (5, lastRow + 6,5, lastRow + 15).CellStyle = "ULTIMUS"
1094  oSheet.getCellByPosition(1, lastRow + 6).CellStyle = "Ultimus_sx_bold"
1095  oSheet.getCellRangeByPosition(1, lastRow + 7, 1, lastRow + 8).CellStyle = "Ultimus_sx"
1096  oSheet.getCellByPosition(5, lastRow + 8).CellStyle = "Ultimus_"
1097  oSheet.getCellRangeByPosition(1, lastRow + 9, 1, lastRow + 10).CellStyle = "Ultimus_destra"
1098  oSheet.getCellRangeByPosition(1, lastRow + 11, 1, lastRow + 12).CellStyle = "Ultimus_sx"
1099  oSheet.getCellByPosition(5, lastRow + 12).CellStyle = "Ultimus_"
1100  oSheet.getCellRangeByPosition(1, lastRow + 13, 1, lastRow + 13).CellStyle = "Ultimus_destra_bold"
1101  oSheet.getCellRangeByPosition(1, lastRow + 15, 1, lastRow + 15).CellStyle = "Ultimus_destra_bold"
1102  oSheet.getCellByPosition(5, lastRow + 15).CellStyle = "Ultimus_destra_totali"
1103 
1105 
1106  progress.setValue(7)
1107 
1108  # ~fineFirme = lastRow + 6
1109  for i in range(0, 50):
1110  oSheet.getRows().insertByIndex(fineFirme, 1)
1111  oSheet.getCellByPosition(1, fineFirme).String = "===================="
1112  fineFirme += 1
1113  if oSheet.getCellByPosition(1, fineFirme).Rows.IsStartOfNewPage == True:
1114  fineFirme -= 1
1115  oSheet.getRows().removeByIndex(fineFirme, 1)
1116  break
1117 
1118  oSheet.getCellRangeByPosition (0, fineFirme, 5, fineFirme).CellStyle = "comp Descr"
1119 
1120 # set area di stampa del SAL
1121  area="$A$" + str(insRow + 2) + ":$F$" + str(fineFirme + 1)
1122  nomearea = "_SAL_" + str(nSal)
1123  LeenoBasicBridge.rifa_nomearea(oDoc, "SAL", area , nomearea)
1124 
1125  oRanges = oDoc.NamedRanges
1126  oNamedRange=oRanges.getByName(nomearea).ReferredCells.RangeAddress
1127 
1128 # imposta riga da ripetere con area di stampa
1129  iSheet = oSheet.RangeAddress.Sheet
1130  oTitles = uno.createUnoStruct('com.sun.star.table.CellRangeAddress')
1131  oTitles.Sheet = iSheet
1132  oTitles.StartRow = 0
1133  oSheet.setTitleRows(oTitles)
1134  oSheet.setPrintAreas((oNamedRange,))
1135  oSheet.setPrintTitleRows(True)
1136 
1138  progress.setValue(8)
1139  progress.hide()
1140  # ~ThisComponent.CurrentController.setFirstVisibleRow(daRiga)
1141  # ~oDoc.CurrentController.ZoomValue = zoom
1142  return
1143 
1144 
1145 
1147  '''
1148  @@ DA DOCUMENTARE
1149  '''
1151  oDoc = LeenoUtils.getDocument()
1152  oSheet = oDoc.CurrentController.ActiveSheet
1153  if oSheet.Name != "CONTABILITA":
1154  return
1155  if Dialogs.YesNoDialog(Title='Avviso',
1156  Text= 'Prima di procedere è consigliabile salvare il lavoro.\n\n'
1157  'Se continui, devi attendere il messaggio di procedura completata.\n'
1158  'Procedo senza salvare?') == 0:
1159  return
1160  # ~try:
1161  # ~nSal, daVoce, aVoce, fpRow, lpRow = GeneraLibretto(oDoc)
1162  # ~except:
1163  # ~return
1164  GeneraRegistro(oDoc)
1165  PL.GotoSheet('CONTABILITA')
1166  # ~DLG.chi((nSal, daVoce, aVoce, daRiga, aRiga))
1167  # ~Dialogs.Info(Title = 'Voci registrate!',
1168  # ~Text="La generazione degli allegati contabili è stata completata.")
1170 
1171 
1172 # CONTABILITA ## CONTABILITA ## CONTABILITA ## CONTABILITA ## CONTABILITA #
1173 
1175 g_exportedScripts = GeneraAttiContabili
LeenoContab.GeneraAttiContabili
def GeneraAttiContabili()
Definition: LeenoContab.py:1146
LeenoContab.GeneraRegistro
def GeneraRegistro(oDoc)
name: GeneraRegistro
Definition: LeenoContab.py:691
LeenoUtils.getGlobalVar
def getGlobalVar(name)
Definition: LeenoUtils.py:123
LeenoSheetUtils.adattaAltezzaRiga
def adattaAltezzaRiga(oSheet)
Definition: LeenoSheetUtils.py:468
SheetUtils.sStrColtoList
def sStrColtoList(sString, nCol, oSheet, start=2, equal=0)
Definition: SheetUtils.py:429
LeenoUtils.getDocument
def getDocument()
Definition: LeenoUtils.py:67
LeenoContab.MENU_partita_detrai
def MENU_partita_detrai()
Definition: LeenoContab.py:340
LeenoBasicBridge.rifa_nomearea
def rifa_nomearea(oDoc, sSheet, sRange, sName)
Definition: LeenoBasicBridge.py:261
LeenoContab.struttura_CONTAB
def struttura_CONTAB()
Definition: LeenoContab.py:348
SheetUtils.uFindStringCol
def uFindStringCol(sString, nCol, oSheet, start=2, equal=0, up=False)
Definition: SheetUtils.py:403
LeenoUtils.DocumentRefresh
def DocumentRefresh(boo)
Definition: LeenoUtils.py:109
LeenoSheetUtils.prossimaVoce
def prossimaVoce(oSheet, lrow, n=1, saltaCat=False)
Definition: LeenoSheetUtils.py:281
SheetUtils.getUsedArea
def getUsedArea(oSheet)
Definition: SheetUtils.py:373
SheetUtils.uFindString
def uFindString(sString, oSheet, up=False)
Definition: SheetUtils.py:450
LeenoContab.MENU_partita_aggiungi
def MENU_partita_aggiungi()
Definition: LeenoContab.py:333
LeenoSheetUtils.setLarghezzaColonne
def setLarghezzaColonne(oSheet)
Definition: LeenoSheetUtils.py:95
SheetUtils.NominaArea
def NominaArea(oDoc, sSheet, sRange, sName)
Definition: SheetUtils.py:511
LeenoContab.generaContabilita
def generaContabilita(oDoc)
Definition: LeenoContab.py:268
Dialogs.YesNoCancel
def YesNoCancel(*Title='', Text='')
Definition: Dialogs.py:2683
LeenoContab.attiva_contabilita
def attiva_contabilita()
CONTABILITA ## CONTABILITA ## CONTABILITA ## CONTABILITA ## CONTABILITA #.
Definition: LeenoContab.py:291
Dialogs.YesNoDialog
def YesNoDialog(*Title, Text)
Definition: Dialogs.py:2545
LeenoSheetUtils.ScriviNomeDocumentoPrincipaleInFoglio
def ScriviNomeDocumentoPrincipaleInFoglio(oSheet)
Definition: LeenoSheetUtils.py:17
LeenoContab.Menu_svuotaContabilita
def Menu_svuotaContabilita()
Definition: LeenoContab.py:149
LeenoUtils.setGlobalVar
def setGlobalVar(name, value)
Definition: LeenoUtils.py:131
LeenoSheetUtils.cercaPartenza
def cercaPartenza(oSheet, lrow)
Definition: LeenoSheetUtils.py:205
Dialogs.Progress
Definition: Dialogs.py:2583
LeenoConfig.Config
Definition: LeenoConfig.py:26
SheetUtils.setTabColor
def setTabColor(oSheet, color)
Definition: SheetUtils.py:363
LeenoComputo.circoscriveVoceComputo
def circoscriveVoceComputo(oSheet, lrow)
Definition: LeenoComputo.py:65
LeenoContab.svuotaContabilita
def svuotaContabilita(oDoc)
Definition: LeenoContab.py:163
LeenoContab.insertVoceContabilita
def insertVoceContabilita(oSheet, lrow)
Definition: LeenoContab.py:50
SheetUtils.visualizza_PageBreak
def visualizza_PageBreak(arg=True)
Definition: SheetUtils.py:550
LeenoSheetUtils.numeraVoci
def numeraVoci(oSheet, lrow, tutte)
Definition: LeenoSheetUtils.py:730
LeenoEvents.assegna
def assegna()
Definition: LeenoEvents.py:85
LeenoComputo.datiVoceComputo
def datiVoceComputo(oSheet, lrow)
Definition: LeenoComputo.py:10
LeenoBasicBridge.ScriviNomeDocumentoPrincipale
def ScriviNomeDocumentoPrincipale()
Definition: LeenoBasicBridge.py:351
LeenoContab.partita
def partita(testo)
Definition: LeenoContab.py:315
Dialogs.NotifyDialog
def NotifyDialog(*Image, Title, Text)
Definition: Dialogs.py:2520
LeenoContab.sbloccaContabilita
def sbloccaContabilita(oSheet, lrow)
Definition: LeenoContab.py:21
LeenoContab.GeneraLibretto
def GeneraLibretto(oDoc)
Definition: LeenoContab.py:390
SheetUtils.getDocumentFromSheet
def getDocumentFromSheet(oSheet)
Definition: SheetUtils.py:76