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) if tags: tagsKeys = tags.keys()[0] or [] function = tags[tagsKeys]['function'] parameter = tags[tagsKeys]['parameter'] if function == "bcview": bc = 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, value, parameter) value = ch.replace(tags[tagsKeys]['completeTag'], resolvedTag) else: value = str(value) else: value = ch if value.count('€') >1: value = value.replace('€', '', 1) itext.set('CH', value) else: gr.append(group) index += 1
def getPagesNumber(self): """ Al momento la funzione itera sulla lista dei gruppi con più righe scarta i tag non utili e verifica poi la lunghezza del dao e il numero di righe presenti, c'è da migliorarla ma per il momento funziona """ pags = [1] if not self.classic: pags = [len(self.objects)] else: for group in self.getIteratableGroups(self.tableProperties): gruppo = self.indexGroupTableFromListDict(group) cellsprop = [x.findall('ITEXT') for x in gruppo["cells"] if x.findall('ITEXT')] righe = [round(float(x.get('gYpos')),3) for x in gruppo["cells"]] rowsNumber = len(sorted(list(set(righe)))) for i in cellsprop: a = [g.get("CH") for g in i if "(n)" in g.get("CH")] for s in a: arrayName = Sla2pdfUtils.findTags(s).values()[0]["arrayName"] valuesNumber = len(self.objects[self.cycle][arrayName]) pagesNumber = int(math.ceil(float(valuesNumber) / float(rowsNumber))) pags.append(pagesNumber) return max(pags)
def fillDocument(self): """ Replacing tags with real values """ self.gruppi = self.findTablesProperties() iteranti = self.getIteratableGroups(self.gruppi) self.pageObjects = self.slaPageObjects() iterator = 0 while iterator < self.lenPageObjects(): if self.pbar: pbar(self.pbar,pulse=True,text="GENERAZIONE STAMPA ATTENDERE %s") %(str(iterator)) pageObject = self.pageObjects[iterator] isTableItem = pageObject.get('isTableItem') isGroupControl = pageObject.get('isGroupControl') pageNumber = int(pageObject.get('OwnPage')) + 1 group = str(pageObject.get('GROUPS')).strip() itexts = pageObject.findall('ITEXT') 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 iteranti: # Replacing non-iterator tags for itext in itexts: ch = 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'] parameter = tags[tagkey]['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): try: value = self.objects[self.cycle][tagkey] or '' except: if "destinazione_merce" in tagkey: if tagkey == "destinazione_merce": value = self.daos.DM.denominazione or "" elif tagkey == "indirizzo_destinazione_merce": value = self.daos.DM.indirizzo elif tagkey == "localita_destinazione_merce": value = self.daos.DM.localita or "" elif tagkey == "cap_destinazione_merce": value = self.daos.DM.cap or "" elif tagkey == "provincia_destinazione_merce": value = self.daos.DM.provincia or "" #else: #try: else: value = '' # Function if function in self.formatFunctions: resolvedTag = uu(self.callFunction(function, value, parameter)) else: resolvedTag = uu(value) ch = ch.replace(tags[tagkey]['completeTag'], resolvedTag) # Save itext try: if value.count('€') >1: value = value.replace('€', '', 1) except: pass itext.set('CH', ch) else: if isGroupControl == '1': iterator += 1 continue for itext in itexts: ch = str(itext.get('CH')) if '<<' in ch and '>>' in ch: 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: for k in tags.keys(): 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 '(n)' in k: indexNP = k.find('(n).') if '(n).' in k: 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] if SHOWZERORIGA == True: value = arraySource[tagName] else: value = arraySource[tagName] or "" else: value = '' else: value = '' else: tagName = k[:indexN] if arrayIndex <= (len(self.objects) - 1): arraySource = self.objects[arrayIndex] if SHOWZEROTOTALI: value = str(arraySource[tagName]) else: value = arraySource[tagName] or '' else: value = '' else: if self.cycle <= (len(self.objects) - 1): value = self.objects[self.cycle][k] or '' else: value = '' # Function # print "FUCTION", function, value, parameter if function in self.formatFunctions: resolvedTag = uu(self.callFunction(function, value, parameter)) else: resolvedTag = uu(value) ch = ch.replace(tags[k]['completeTag'], resolvedTag) try: if value.count('€') >1: value = value.replace('€', '', 1) except: pass itext.set('CH', ch) iterator += 1
def duplicateTags(self): """ Dopo aver duplicato gli elementi adesso duplichiamo i tags TODO: refactoring di questa func""" self.gruppi = self.findTablesProperties() iteranti = self.getIteratableGroups(self.gruppi) for group in self.gruppi: rigaConItextDict = {} gruppo = group.values()[0] if "%%%" in gruppo["GROUPS"]: groupname= str(gruppo["GROUPS"].strip().split('%%%')[0]) else: groupname = str(gruppo["GROUPS"].strip()) if groupname in iteranti : # Qui vengono gestite le tabelle iterabili , e le righe cellsprop = [{x:[x,x.findall('ITEXT'),x.findall('para'), x.findall('trail')]} for x in gruppo["cells"]] colonne = [float(x.get('gXpos')) for x in gruppo["cells"]] righe = [float(x.get('gYpos')) for x in gruppo["cells"]] col = list(set(colonne)) col = sorted(col) rows = list(set(righe)) rows = sorted(rows) numeroRighe = len(rows)-1 for cel in cellsprop: # print "CELLLLLLLLLLLLLLLLA", cel CH = None tags = {} rowgg = rows.index(float(cel.values()[0][0].get("gYpos"))) pageNamber = int(cel.values()[0][0].get("OwnPage")) row = (numeroRighe*pageNamber)+rowgg for ite in cel.values()[0][1]: CH = ite.get("CH") tags = Sla2pdfUtils.findTags(CH) column = col.index(float(cel.values()[0][0].get("gXpos")))+1 # quelli con tag e CH sono quelli della seconda riga che poi dovrò andare a ciclare # nella prima riga c'è di norma solo un CH ma senza TAG if tags and CH: # build a dict with all second row data with tags and CH rigaConItextDict[str(column)+"%"+groupname] = [CH,tags,ite,cel] for k in tags.keys(): if k.replace(' ', '') is not '': if '(n)' in k : if tags[k]['position'] == 'last': row = rowgg tmp = self.getTagToPrint(CH, column = column,row=row-1, tags=tags,k=k, pageNamber=pageNamber) ite.set("CH", tmp) else: colu = int(col.index(float(cel.values()[0][0].get("gXpos")))+1) if str(colu)+"%"+groupname in rigaConItextDict: ch = rigaConItextDict[str(colu) +"%" + groupname][0] tags = rigaConItextDict[str(colu) +"%"+ groupname][1] ite = rigaConItextDict[str(colu)+"%"+groupname][2] ricel = rigaConItextDict[str(colu)+"%"+groupname][3] attributes = ite.items() itedict= {} for attrr in attributes: itedict[attrr[0]] = attrr[1] tmp = ch for k in tags.keys(): if k.replace(' ', '') is not '': if '(n)' in k : if tags[k]['position'] == 'last': row = rowgg tmp = self.getTagToPrint(tmp, column = colu,row=row-1, tags=tags,k=k,pageNamber=pageNamber) itedict["CH"] = tmp ElementTree.SubElement(cel.values()[0][0], 'ITEXT', itedict) # origpara = ricel.values()[0][2] # para = cel.values()[0][2] # if origpara: # origpara=origpara[0] # if para: # for t in para: # attria = t.items() # for attrr in attria: # origpara.set(attrr[0],attrr[1]) # else: # paradict = {} # for attrr in origpara.items(): # paradict[attrr[0]] = attrr[1] # ElementTree.SubElement(cel.values()[0][0], 'para', paradict) trai = ricel.values()[0][3] origtrai = cel.values()[0][3] if origtrai: origtrai=origtrai[0] for t in trai: attria = t.items() for attrr in attria: origtrai.set(attrr[0],attrr[1]) else: for t in trai: traidict = {} attria = t.items() for attrr in attria: traidict[attrr[0]] = attrr[1] ElementTree.SubElement(cel.values()[0][0], 'trail', traidict) else: # Qui vengono gestite le tabelle e le celle con tag non iteranti itexts = [x.findall('ITEXT') for x in gruppo["cells"]] pageNamber = int(gruppo["cells"][0].get("OwnPage")) if itexts: for tex in itexts: if type(tex) == type([1,2]): if tex: itext = tex[0] else: continue ch = itext.get('CH') tags = Sla2pdfUtils.findTags(ch) if tags: tmp = ch tagsKeys = tags.keys() for k in tagsKeys: if k.replace(' ', '') == '': continue tmp = self.getTagToPrint(tmp,tags=tags, k=k,pageNamber =pageNamber) if tmp != "": prova = ch.replace(tmp,"") test= prova.encode("utf-8")+" "+ tmp.encode("utf-8") else: test = tmp itext.set('CH',test )