LeenO computo metrico con LibreOffice  3.22.0
Il software libero per la gestione di computi metrici e contabilità lavori.
LeenoAnalysis.py
Vai alla documentazione di questo file.
1 '''
2 Funzioni relative alla gestione delle analisi di prezzi
3 '''
4 
5 import pyleeno as PL
6 import LeenoUtils
7 import SheetUtils
8 import LeenoSheetUtils
9 import LeenoEvents
10 
12  '''
13  Se non presente, crea il foglio 'Analisi di Prezzo' ed inserisce la prima scheda
14  Ritorna l'oggetto oSheet del foglio contenente le analisi
15  e la riga da cui iniziare la compilazione dell'analisi corrente
16  '''
17  SheetUtils.NominaArea(oDoc, 'S5', '$B$108:$P$133', 'blocco_analisi')
18  if not oDoc.getSheets().hasByName('Analisi di Prezzo'):
19  oDoc.getSheets().insertNewByName('Analisi di Prezzo', 1)
20  oSheet = oDoc.Sheets.getByName('Analisi di Prezzo')
21  oSheet.getCellRangeByPosition(0, 0, 15, 0).CellStyle = 'Analisi_Sfondo'
22  oSheet.getCellByPosition(0, 1).Value = 0
23  oSheet.TabColor = 12189608
24  oRangeAddress = oDoc.NamedRanges.blocco_analisi.ReferredCells.RangeAddress
25  oCellAddress = oSheet.getCellByPosition(0, SheetUtils.getLastUsedRow(oSheet)).getCellAddress()
26 
27  # questa è l' UNICA funzione che non può prescindere dal controller
28  # probabilmente una dimenticanza degli sviluppatori di LO
29  # controllare se in seguito cambierà qualcosa...
31 
32  # la riga dalla quale iniziare a scrivere
33  startRow = 2
34 
37 
38  else:
39  oSheet = oDoc.Sheets.getByName('Analisi di Prezzo')
40 
41  lrow = LeenoSheetUtils.cercaUltimaVoce(oSheet) - 5
42  urow = SheetUtils.getLastUsedRow(oSheet)
43  for n in range(lrow, urow):
44  if oSheet.getCellByPosition(0, n).CellStyle == 'An-sfondo-basso Att End':
45  break
46  oRangeAddress = oDoc.NamedRanges.blocco_analisi.ReferredCells.RangeAddress
47  oSheet.getRows().insertByIndex(n + 2, 26)
48  oCellAddress = oSheet.getCellByPosition(0, n + 2).getCellAddress()
49 
50  # la riga dalla quale iniziare a scrivere
51  startRow = n + 2 + 1
52 
53  oSheet.copyRange(oCellAddress, oRangeAddress)
55 
56  return oSheet, startRow
57 
58 
59 def circoscriveAnalisi(oSheet, lrow):
60  '''
61  lrow { int } : riga di riferimento per
62  la selezione dell'intera voce
63  Circoscrive una voce di analisi
64  partendo dalla posizione corrente del cursore
65  '''
66  stili_analisi = LeenoUtils.getGlobalVar('stili_analisi')
67  if oSheet.getCellByPosition(0, lrow).CellStyle in stili_analisi:
68  for el in reversed(range(0, lrow)):
69  # chi(oSheet.getCellByPosition(0, el).CellStyle)
70  if oSheet.getCellByPosition(0, el).CellStyle == 'Analisi_Sfondo':
71  SR = el
72  break
73  for el in range(lrow, SheetUtils.getLastUsedRow(oSheet)):
74  if oSheet.getCellByPosition(0, el).CellStyle == 'An-sfondo-basso Att End':
75  ER = el
76  break
77  celle = oSheet.getCellRangeByPosition(0, SR, 250, ER)
78  return celle
79 
80 
81 def copiaRigaAnalisi(oSheet, lrow):
82  '''
83  Inserisce una nuova riga di misurazione in analisi di prezzo
84  '''
85  stile = oSheet.getCellByPosition(0, lrow).CellStyle
86  if stile in ('An-lavoraz-desc', 'An-lavoraz-Cod-sx'):
87  lrow = lrow + 1
88  oSheet.getRows().insertByIndex(lrow, 1)
89  # imposto gli stili
90  oSheet.getCellByPosition(0, lrow).CellStyle = 'An-lavoraz-Cod-sx'
91  oSheet.getCellRangeByPosition(1, lrow, 5, lrow).CellStyle = 'An-lavoraz-generica'
92  oSheet.getCellByPosition(3, lrow).CellStyle = 'An-lavoraz-input'
93  oSheet.getCellByPosition(6, lrow).CellStyle = 'An-senza'
94  oSheet.getCellByPosition(7, lrow).CellStyle = 'An-senza-DX'
95  # ci metto le formule
96  # oDoc.enableAutomaticCalculation(False)
97  oSheet.getCellByPosition(1, lrow).Formula = (
98  '=IF(A' + str(lrow + 1) +
99  '="";"";CONCATENATE(" ";VLOOKUP(A' +
100  str(lrow + 1) + ';elenco_prezzi;2;FALSE());' '))')
101  oSheet.getCellByPosition(2, lrow).Formula = (
102  '=IF(A' + str(lrow + 1) + '="";"";VLOOKUP(A' +
103  str(lrow + 1) + ';elenco_prezzi;3;FALSE()))')
104  oSheet.getCellByPosition(3, lrow).Value = 0
105  oSheet.getCellByPosition(4,lrow).Formula = (
106  '=IF(A' + str(lrow + 1) + '="";0;VLOOKUP(A' +
107  str(lrow + 1) + ';elenco_prezzi;5;FALSE()))')
108  oSheet.getCellByPosition(5, lrow).Formula = (
109  '=D' + str(lrow + 1) + '*E' + str(lrow + 1))
110  oSheet.getCellByPosition(8, lrow).Formula = (
111  '=IF(A' + str(lrow + 1) + '="";"";IF(VLOOKUP(A' +
112  str(lrow + 1) + ';elenco_prezzi;6;FALSE())="";"";(VLOOKUP(A' +
113  str(lrow + 1) + ';elenco_prezzi;6;FALSE()))))')
114  oSheet.getCellByPosition(9, lrow).Formula = (
115  '=IF(I' + str(lrow + 1) + '="";"";I' +
116  str(lrow + 1) + '*F' + str(lrow + 1) + ')')
117  if oSheet.getCellByPosition(1, lrow - 1).CellStyle == 'An-lavoraz-dx-senza-bordi':
118  oRangeAddress = oSheet.getCellByPosition(0, lrow + 1).getRangeAddress()
119  oCellAddress = oSheet.getCellByPosition(0, lrow).getCellAddress()
120  oSheet.copyRange(oCellAddress, oRangeAddress)
121  oSheet.getCellByPosition(0, lrow).String = 'Cod. Art.?'
122 
124  PL.set_area_stampa()
125  oDoc = LeenoUtils.getDocument()
126  oSheet = oDoc.CurrentController.ActiveSheet
127  if oSheet.Name != 'Analisi di Prezzo':
128  return
129  lr = SheetUtils.getLastUsedRow(oSheet) + 1
130  oSheet.removeAllManualPageBreaks()
131  for el in range (1, lr):
132  if oSheet.getCellByPosition(0, el).String == '----':
133  if oSheet.getCellByPosition(0, el + 2).CellStyle != 'Ultimus_centro':
134  oSheet.getCellByPosition(0, el + 2).Rows.IsStartOfNewPage = True
LeenoUtils.getGlobalVar
def getGlobalVar(name)
Definition: LeenoUtils.py:123
LeenoUtils.getDocument
def getDocument()
Definition: LeenoUtils.py:67
LeenoSheetUtils.cercaUltimaVoce
def cercaUltimaVoce(oSheet)
Definition: LeenoSheetUtils.py:184
LeenoSheetUtils.setLarghezzaColonne
def setLarghezzaColonne(oSheet)
Definition: LeenoSheetUtils.py:95
SheetUtils.NominaArea
def NominaArea(oDoc, sSheet, sRange, sName)
Definition: SheetUtils.py:511
LeenoSheetUtils.ScriviNomeDocumentoPrincipaleInFoglio
def ScriviNomeDocumentoPrincipaleInFoglio(oSheet)
Definition: LeenoSheetUtils.py:17
LeenoSheetUtils.inserisciRigaRossa
def inserisciRigaRossa(oSheet)
Definition: LeenoSheetUtils.py:398
LeenoAnalysis.MENU_impagina_analisi
def MENU_impagina_analisi()
Definition: LeenoAnalysis.py:123
LeenoAnalysis.copiaRigaAnalisi
def copiaRigaAnalisi(oSheet, lrow)
Definition: LeenoAnalysis.py:81
LeenoEvents.assegna
def assegna()
Definition: LeenoEvents.py:85
SheetUtils.getLastUsedRow
def getLastUsedRow(oSheet)
Definition: SheetUtils.py:392
LeenoAnalysis.inizializzaAnalisi
def inizializzaAnalisi(oDoc)
Definition: LeenoAnalysis.py:11
LeenoAnalysis.circoscriveAnalisi
def circoscriveAnalisi(oSheet, lrow)
Definition: LeenoAnalysis.py:59