2 LeenO - modulo parser XML per il formato XML-SIX
6 import LeenoDialogs
as DLG
10 estrae dal file XML i dati dell'elenco prezzi
11 I dati estratti avranno il formato seguente:
21 artList = { codice : articolo, ... }
23 superCatList = { codice : descrizione, ... }
24 catList = { codice : descrizione, ... }
28 'superCategorie': superCatList,
38 prezzario = root.find(
'prezzario')
39 descrizioni = prezzario.findall(
'przDescrizione')
42 lingueEstese = {
'it':
'Italiano',
'de':
'Deutsch',
'en':
'English',
'fr':
'Français',
'es':
'Español'}
44 for desc
in descrizioni:
45 lingua = desc.attrib[
'lingua']
46 lExt = lingueEstese.get(lingua, lingua)
52 lingue[
'Tutte'] =
'tutte'
53 lingue[
'Annulla'] =
'annulla'
55 Icon=
"Icons-Big/question.png",
56 Title=
"Scelta lingue",
57 Text=
"Il file fornito è un prezzario multilinguale\n\nSelezionare la lingua da importare\noppure 'Tutte' per ottenere un prezzario multilinguale",
68 if lingua ==
'annulla':
79 nome = descrizioni[0].attrib[
'breve']
80 for desc
in range(1, len(descrizioni)):
81 nome = nome +
'\n' + descrizioni[desc].attrib[
'breve']
83 for desc
in descrizioni:
84 if desc.attrib[
'lingua'] == lingua:
85 nome = desc.attrib[
'breve']
92 umList = prezzario.findall(
'unitaDiMisura')
100 umId = attr[
'unitaDiMisuraId']
110 catList = root.findall(
'categoriaSOA')
114 soaId = attr[
'soaId']
115 soaCategoria = attr[
'soaCategoria']
116 descs = cat.findall(
'soaDescrizione')
119 descAttr = desc.attrib
121 descLingua = descAttr[
'lingua']
124 if lingua
is None or descLingua
is None or lingua == descLingua:
125 text = text + descAttr[
'breve'] +
'\n'
127 text = text[: -len(
'\n')]
129 categorieSOA[soaCategoria] = {
'soaId': soaId,
'descrizione': text}
141 productList = prezzario.findall(
'prodotto')
143 for product
in productList:
144 attr = product.attrib
147 if not 'prdId' in attr:
149 codice = attr[
'prdId']
152 if 'unitaDiMisuraId' in attr:
153 um = attr[
'unitaDiMisuraId']
155 um = units.get(um,
"*SCONOSCIUTA*")
165 prezzo = float(product.find(
'prdQuotazione').attrib[
'valore'])
174 mdo = float(product.find(
'incidenzaManodopera').text) / 100
182 oneriSic = float(attr[
'onereSicurezza'])
190 descs = product.findall(
'prdDescrizione')
195 descAttr = desc.attrib
197 descLingua = descAttr[
'lingua']
200 if lingua
is None or descLingua
is None or lingua == descLingua:
202 if 'breve' in descAttr
and 'estesa' in descAttr:
203 if descAttr[
'breve']
in descAttr[
'estesa']:
204 textBreve = descAttr[
'estesa'] +
'\n'
206 textEstesa = descAttr[
'estesa'] +
'\n- ' + descAttr[
'breve'] +
'\n'
207 madre = textEstesa[: -len(
'\n')]
209 if descAttr[
'breve'] == descAttr[
'estesa']:
210 textEstesa = madre + descAttr[
'breve'] +
'\n'
212 if 'breve' in descAttr
and not 'estesa' in descAttr:
213 if descAttr[
'breve'][2]
in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
214 textEstesa = madre + descAttr[
'breve'] +
'\n'
216 textEstesa = madre + descAttr[
'breve'] +
'\n'
218 textBreve = textBreve.replace(
'Ó',
'à').replace(
'Þ',
'é').replace(
'',
'').replace(
'
',
'').replace(
'
',
'').replace(
''',
"'")
219 textEstesa = textEstesa.replace(
'Ó',
'à').replace(
'Þ',
'é').replace(
'',
'').replace(
'
',
'').replace(
'
',
'').replace(
''',
"'")
222 textBreve = textBreve[: -len(
'\n')]
224 textEstesa = textEstesa[: -len(
'\n')]
230 base = (prezzo ==
"")
231 if not base
and not codice.startswith(baseCodice):
241 baseTextBreve = textBreve +
'\n'
242 baseTextEstesa = textEstesa +
'\n'
245 if not base
and codice.startswith(baseCodice):
246 textBreve = baseTextBreve +
'- '+ textBreve
247 textEstesa = baseTextEstesa +
'- '+ textEstesa
250 if len(textBreve) > len(textEstesa):
255 if len(codice.split(
'.')) == 4:
257 if len(codice.split(
'.')) > 4:
258 if madre
not in desc:
267 grpId = product.find(
'prdGrpValore').attrib[
'grpValoreId']
273 if len(codice.split(
'.')) > 2
and prezzo !=
'':
280 'sicurezza': oneriSic,
293 gruppo = root.find(
'gruppo')
294 grpValori = gruppo.findall(
'grpValore')
295 for grpValore
in grpValori:
297 grpId = grpValore.attrib[
'grpValoreId']
298 vlrId = grpValore.attrib[
'vlrId']
299 vlrDesc = grpValore.find(
'vlrDescrizione').attrib[
'breve']
301 sgId = vlrId.split(
'.')[0]
302 gruppi[grpId] = {
'cat': vlrId,
'desc': vlrDesc,
'superGroup': sgId}
304 superGruppi[vlrId] = vlrDesc
313 for codice, articolo
in artList.items():
315 splitCodice = codice.split(
'.')
316 codiceCat = splitCodice[0] +
'.' + splitCodice[1]
317 codiceSuperCat = splitCodice[0]
320 gruppo = articolo[
'gruppo']
321 if gruppo
is None or gruppo ==
'':
323 groupData = gruppi[gruppo]
324 if not codiceCat
in catList:
325 catList[codiceCat] = groupData[
'desc']
326 if not codiceSuperCat
in superCatList:
327 superCatList[codiceSuperCat] = superGruppi[groupData[
'superGroup']]
330 'titolo': defaultTitle,
331 'superCategorie': superCatList,
332 'categorie': catList,