Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
    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 )