def labelSla(self): """ FIXME: Grave bug , non lascia il testo semplice nella cella in cui è presente anche un tag ... """ self.labelObj = self.slaPageObjects() index = -1 gr = [] for pageObject in self.labelObj: itexts = pageObject.findall('ITEXT') group = pageObject.get('GROUPS') if group in gr: for itext in itexts: attributes = itext.items() dictionary = {} for kk in range(0, len(attributes)): dictionary[attributes[kk][0]] = attributes[kk][1] ch = dictionary['CH'] tags = Sla2pdfUtils.findTags(ch) #print "tagsssss", ch, tags if tags: tagsKeys = tags.keys()[0] or [] function = tags[tagsKeys]['function'] parameter = tags[tagsKeys]['parameter'] if function == "bcview": bc = str(self.objects[index][tagsKeys]) if bc == "None": bc = "0000000000000" value = "bcview;%s;%s;%s" %(bc, str(tags[tagsKeys]['parameter'].split('X')[0]), str(tags[tagsKeys]['parameter'].split('X')[1])) or "" elif tagsKeys in self.timeTags: value = Sla2pdfUtils.getNowValue(tagsKeys) else: value = self.objects[index][tagsKeys] or "" if function in self.formatFunctions and "X" not in parameter: resolvedTag = self.callFunction(function, str(value), int(parameter)) value = ch.replace(tags[tagsKeys]['completeTag'], resolvedTag) else: value = str(value) else: value = ch #print "valueeeeeeeeeeeeee", value itext.set('CH', str(value)) else: gr.append(group) index += 1
def findTablesAndTags(self): """ Questa funzione crea DUE e dico DUE dizionari, uno con chiave gruppo e valore tags e l'altro con i tags come chiave e il gruppo come valore. il secondo DICT lo trovo assurdo, temo che non consideri campi Dao doppi nel templates e la cosa NON mi piace. NON ho tempo adesso per verificare TODO: Verificare il dizionario tagsTables. ... """ group = '' vector = [] self.tablesTags = {} # relation group -> tags self.tagsTables = {} # relation tag -> group for pageObject in self.slaPageObjects(): isTableItem = (pageObject.get('isTableItem') == "1") if not isTableItem: continue group = str(pageObject.get('GROUPS')).strip() if group: itexts = pageObject.findall('ITEXT') ch = '' if group in self.tablesTags: vector = self.tablesTags[group] else: vector = [] for i in itexts: ch = str(i.get('CH')) # print " CHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", ch if ch.replace(' ', '') == '': continue tags = Sla2pdfUtils.findTags(ch) # print "TAAAAAAAAAAAAAAGSSS", tags, vector if tags is not None: if tags not in vector: vector.append(tags) for k in tags.keys(): self.tagsTables[k] = group self.tablesTags[group] = vector
def fillDocument(self): """ Replacing tags with real values """ self.pageObjects = self.slaPageObjects() iterator = 0 while iterator < self.lenPageObjects(): pageObject = self.slaPageObjects()[iterator] isTableItem = pageObject.get('isTableItem') pageNumber = int(pageObject.get('OwnPage')) + 1 group = str(pageObject.get('GROUPS')).strip() try: group= group.strip().split('%%%')[0] except: group = group pfile = pageObject.get('PFILE') if (pfile != ''): iterator += 1 continue if group: actualGroup = group if str(actualGroup).strip() not in self.iteratableGroups: # Replacing non-iterator tags itexts = pageObject.findall('ITEXT') for itext in itexts: ch = str(itext.get('CH')) tags = Sla2pdfUtils.findTags(ch) #print "Stampo il tag", tags if tags is not None: tagsKeys = tags.keys() #print "Dizionario dei tags tagsKeys", tagsKeys for tagkey in tagsKeys: if tagkey.replace(' ', '') == '': continue #try: resolvedTag = '' function = tags[tagkey]['function'] #print "function" , function parameter = tags[tagkey]['parameter'] #print "parameter", parameter if "X" in parameter: parameter = parameter.split("X") if tagkey == 'currentPage': value = pageNumber elif tagkey == 'totalPage': value = self.pagesNumber elif tagkey in self.timeTags: value = Sla2pdfUtils.getNowValue(tagkey) else: if self.cycle <= (len(self.objects) - 1): value = self.objects[self.cycle][tagkey] or '' else: value = '' # Function if function in self.formatFunctions: resolvedTag = self.callFunction(function, value, parameter) else: resolvedTag = str(value) ch = ch.replace(tags[tagkey]['completeTag'], resolvedTag) # Save itext itext.set('CH', ch) else: if isTableItem != '1': iterator += 1 continue itexts = pageObject.findall('ITEXT') for itext in itexts: ch = str(itext.get('CH')) if (ch.find('<<') > -1) and (ch.find('>>') > -1): while (ch.find('<<') > -1) and (ch.find('>>') > -1): arrayIndex = int(ch[ch.find('<<')+2:ch.find('>>')]) ch = ch.replace(('<<%d>>' % arrayIndex), '') else: arrayIndex = -1 tags = Sla2pdfUtils.findTags(ch) if tags is not None: tagsKeys = tags.keys() for k in tagsKeys: if k.replace(' ', '') == '': continue #try: resolvedTag = '' function = tags[k]['function'] parameter = tags[k]['parameter'] if k == 'currentPage': value = pageNumber elif k == 'totalPage': value = self.pagesNumber elif k in self.timeTags: value = Sla2pdfUtils.getNowValue(k) else: indexN = k.find('(n)') if (indexN != -1): indexNP = k.find('(n).') if (indexNP != -1): arrayName = k[:indexNP] tagName = k[indexNP+4:] if self.cycle <= (len(self.objects) - 1): if arrayIndex <= (len(self.objects[self.cycle][arrayName]) - 1): arraySource = self.objects[self.cycle][arrayName][arrayIndex] value = arraySource[tagName] or '' else: value = '' else: value = '' else: tagName = k[:indexN] if arrayIndex <= (len(self.objects) - 1): arraySource = self.objects[arrayIndex] value = arraySource[tagName] or '' else: value = '' else: if self.cycle <= (len(self.objects) - 1): value = self.objects[self.cycle][k] or '' else: value = '' # Function if function in self.formatFunctions: resolvedTag = self.callFunction(function, value, parameter) else: resolvedTag = str(value) ch = ch.replace(tags[k]['completeTag'], resolvedTag) # Save itext itext.set('CH', ch) iterator += 1 #self.pageObjectPropertiesDict() if not self.label: self.findTablesProperties() self.doc.write('___temp.sla')
def duplicateTags(self): self.pageObjects = self.slaPageObjects() for pageObject in self.pageObjects: isTableItem = pageObject.get('isTableItem') == "1" group = str(pageObject.get('GROUPS')).strip() try: group= group.strip().split('%%%')[0] except: group= group if group: self.pageNumber = int(pageObject.get('OwnPage')) + 1 self.tableGroup = self.indexGroupTableFromListDict(group) if isTableItem and (group in self.iteratableGroups): # Qui vengono gestite le tabelle iterabili , e le righe itexts = pageObject.findall('ITEXT') paras = pageObject.findall('para') pages = self.slaPage() cell = int(pageObject.get('OwnLINK')) + 1 columns = self.tableGroup['columns'] row = (cell / columns) + 1 column = (cell % columns) if not (len(itexts) > 0): # first row of the table (with itext) itext = self.tableGroup['itexts'][column - 1].copy() if itext == {}: continue ch = str(itext['CH']) tags = Sla2pdfUtils.findTags(ch) if tags is None: continue tmp = ch tagsKeys = tags.keys() increment = True for k in tagsKeys: if k.replace(' ', '') == '': continue if k.find('(n)') > -1: tmp = self.getTagToPrint(tmp, column = column, increment=increment, tags=tags,k=k) increment = False itext['CH'] = tmp ElementTree.SubElement(pageObject, 'ITEXT', itext) else: # next rows of the table (without itext) # banalmente è la prima riga della tabella es: U.M, DESCRIZIONE itext = itexts[0] ch = str(itext.get('CH')) tags = Sla2pdfUtils.findTags(ch) if tags is not None: tmp = ch tagsKeys = tags.keys() increment = True for k in tagsKeys: if k.replace(' ', '') == '': continue if k.find('(n)') > -1: if self.tableGroup['itexts'][column - 1] == {}: self.tableGroup['itexts'][column - 1] = dict([attribute[0], attribute[1]] for attribute in itext.items()) tmp = self.getTagToPrint(tmp,column = column, increment=increment, tags=tags,k=k) increment = False itext.set('CH', tmp) else: # Qui vengono gestite le tabelle e le celle con tag non iteranti itexts = pageObject.findall('ITEXT') if len(itexts) > 0: itext = itexts[0] ch = str(itext.get('CH')) tags = Sla2pdfUtils.findTags(ch) if tags is not None: tmp = ch if "€" in ch or "Euro" in ch: mettilo = True tagsKeys = tags.keys() increment = True for k in tagsKeys: if k.replace(' ', '') == '': continue tmp = self.getTagToPrint(tmp,increment=increment, tags=tags, k=k) # print " TEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMP", tmp, ch increment = False prova = ch.replace(tmp,"") if "EUR" in prova.upper() : prova = "€ " # if prova: itext.set('CH',prova +tmp )