def consumer(input_q, output_q, progress_q, codi_r1, interruptor): """Fem l'informe. """ codi_r1 = codi_r1[-3:] ctat_ids = O.GiscegisBlocsCtat.search([]) ct_nodes = {} ct_vertex = {} ct_expedient = {} for ct in O.GiscegisBlocsCtat.read(ctat_ids, ['ct', 'node', 'vertex']): if not ct['ct']: continue if ct['node']: ct_nodes[ct['ct'][0]] = ct['node'][1] if ct['vertex']: v = O.GiscegisVertex.read(ct['vertex'][0], ['x', 'y']) ct_vertex[ct['ct'][0]] = (v['x'], v['y']) while True: item = input_q.get() progress_q.put(item) subest = O.GiscedataCtsSubestacions.get(item) if subest.ct_id.id not in ct_vertex: sys.stderr.write("**** ERROR: La subestació %s no té vertex " "definit\n" % subest.name) input_q.task_done() continue if subest.ct_id.id not in ct_nodes: sys.stderr.write("**** ERROR: La subestació %s no té node " "definit\n" % subest.name) input_q.task_done() continue if not subest.id_municipi: sys.stderr.write("**** ERROR: La subestació %s no té municipi " "definit\n" % subest.name) input_q.task_done() continue vertex = ct_vertex[subest.ct_id.id] node = ct_nodes[subest.ct_id.id] header = [ 'R1-%s' % codi_r1.zfill(3), subest.name, subest.descripcio[:20], round(vertex[0], 3), round(vertex[1], 3), node, subest.id_municipi.state.code, get_codi_ine(subest.id_municipi.ine), subest.tipus_parc, ] grouped = {} for posicio in subest.posicions: if interruptor and posicio.interruptor != '2': continue if not interruptor and posicio.interruptor != '3': continue group_tag = '%s_%s_%s_%s' % (posicio.tensio.name, posicio.propietari and '1' or '0', posicio.data_pm and posicio.data_pm[:4] or posicio.expedient and posicio.expedient.industria_data[:4] or '', posicio.perc_financament) tensio = isinstance(posicio.tensio.tensio, int) \ and posicio.tensio.tensio or int(posicio.tensio.name) grouped.setdefault(group_tag, [round(tensio / 1000.0, 3), 0, 0, 0, posicio.tipus_posicio, posicio.cini or '', posicio.propietari and '1' or '0', posicio.data_pm and posicio.data_pm[:4] or posicio.expedient and posicio.expedient.industria_data[:4] or '', posicio.perc_financament] ) grouped[group_tag][IDX_POS[posicio.posicio_linia]] += 1 for group in grouped.values(): output_q.put(header + group) input_q.task_done()
def consumer(input_q, output_q, progress_q, codi_r1): """Fem l'informe. """ codi_r1 = codi_r1[-3:] ctat_ids = O.GiscegisBlocsCtat.search([]) search_params = [('blockname.name', 'in', ('SEC_C', 'SEC_B'))] s_ids = O.GiscegisBlocsSeccionadorunifilar.search(search_params) codis = [x['codi'] for x in O.GiscegisBlocsSeccionadorunifilar.read(s_ids, ['codi'])] ct_nodes = {} ct_vertex = {} ct_expedient = {} for ct in O.GiscegisBlocsCtat.read(ctat_ids, ['ct', 'node', 'vertex']): if not ct['ct']: continue if ct['node']: ct_nodes[ct['ct'][0]] = ct['node'][1] if ct['vertex']: v = O.GiscegisVertex.read(ct['vertex'][0], ['x', 'y']) ct_vertex[ct['ct'][0]] = (v['x'], v['y']) while True: item = input_q.get() progress_q.put(item) ct = O.GiscedataCts.get(item) if ct.id not in ct_vertex: sys.stderr.write("**** ERROR: El CT %s no té vertex definit\n" % ct.name) input_q.task_done() continue if ct.id not in ct_nodes: sys.stderr.write("**** ERROR: El CT %s no té node definit\n" % ct.name) input_q.task_done() continue if not ct.id_municipi: sys.stderr.write("**** ERROR: El CT %s no té municipi definit\n" % ct.name) input_q.task_done() continue if not ct.id_subtipus or not ct.id_subtipus.categoria_cne: sys.stderr.write("**** ERROR: El CT %s no té subtipus o " "categoria_cne definit\n" % ct.name) input_q.task_done() continue vertex = ct_vertex[ct.id] node = ct_nodes[ct.id] # Calculem el número de SEC_B i SEC_C count_sec = 0 for codi in codis: regexp = '%s(-{1}.*)$' % ''.join( [a for a in ct.name if a.isdigit()]) if re.match(regexp, codi): count_sec += 1 o_tensio_p = int(filter(str.isdigit, ct.tensio_p or '') or 0) # Calculem any posada en marxa if not ct.data_pm: any_pm = ct.data_industria and ct.data_industria[:4] or '' else: any_pm = ct.data_pm[:4] # Propietari propietari = ct.propietari and "1" or "0" output_q.put([ 'R1-%s' % codi_r1.zfill(3), ct.name, ct.descripcio[:20], round(vertex[0], 3), round(vertex[1], 3), node, ct.id_municipi.state.code, get_codi_ine(ct.id_municipi.ine), ct.id_subtipus.categoria_cne.codi, round(o_tensio_p / 1000.0, 3), ct.potencia, count_sec or 1, ct.cini or '', propietari, any_pm, ct.perc_financament ]) input_q.task_done()
def consumer(input_q, output_q, progress_q, codi_r1, any_p): """Fem l'informe. """ o_codi_r1 = 'R1-%s' % codi_r1[-3:] while True: item = input_q.get() progress_q.put(item) cups = O.GiscedataCupsPs.read(item, ['name', 'id_escomesa', 'id_municipi', 'cne_anual_activa', 'cne_anual_reactiva']) if not cups: input_q.task_done() continue o_name = cups['name'][:20] o_codi_ine = '' o_codi_prov = '' if cups['id_municipi']: municipi = O.ResMunicipi.read(cups['id_municipi'][0], ['ine', 'state']) ine = municipi['ine'] if municipi['state']: provincia = O.ResCountryState.read(municipi['state'][0], ['code']) o_codi_prov = provincia['code'] o_codi_ine = get_codi_ine(ine) o_utmx = '' o_utmy = '' o_linia = '' o_tensio = '' if cups and cups['id_escomesa']: search_params = [('escomesa', '=', cups['id_escomesa'][0])] bloc_escomesa_id = O.GiscegisBlocsEscomeses.search(search_params) if bloc_escomesa_id: bloc_escomesa = O.GiscegisBlocsEscomeses.read( bloc_escomesa_id[0], ['node', 'vertex']) if bloc_escomesa['vertex']: vertex = O.GiscegisVertex.read(bloc_escomesa['vertex'][0], ['x', 'y']) o_utmx = round(vertex['x'], 3) o_utmy = round(vertex['y'], 3) if bloc_escomesa['node']: search_params = [('start_node', '=', bloc_escomesa['node'][0])] edge_id = O.GiscegisEdge.search(search_params) if not edge_id: search_params = [('end_node', '=', bloc_escomesa['node'][0])] edge_id = O.GiscegisEdge.search(search_params) if edge_id: edge = O.GiscegisEdge.read(edge_id[0], ['id_linktemplate']) search_params = [('name', '=', edge['id_linktemplate'])] bt_id = O.GiscedataBtElement.search(search_params) if bt_id: bt = O.GiscedataBtElement.read(bt_id[0], ['tipus_linia', 'voltatge']) if bt['tipus_linia']: o_linia = bt['tipus_linia'][1][0] o_tensio = float(bt['voltatge']) / 1000.0 # Calculem l'últim dia de l'any per tenir en compte eles modificacions # contractuals (només tindrà efecte a la versió 5) i la polissa activa # aquell dia. # Per v5, es treuen les polisses que estan en estat validar o esborrany search_params = [('cups', '=', cups['id'])] + SEARCH_GLOB polissa_id = O.GiscedataPolissa.search(search_params, 0, 0, False, CONTEXT_GLOB) o_potencia = '' o_pot_ads = '' o_equip = 'MEC' if polissa_id: fields_to_read = ['potencia'] if 'butlletins' in O.GiscedataPolissa.fields_get(): fields_to_read += ['butlletins'] polissa = O.GiscedataPolissa.read(polissa_id[0], fields_to_read, CONTEXT_GLOB) o_potencia = polissa['potencia'] # Mirem si té l'actualització dels butlletins if polissa['butlletins']: butlleti = O.GiscedataButlleti.read(polissa['butlletins'][-1], ['pot_max_admisible']) o_pot_ads = butlleti['pot_max_admisible'] else: #Si no trobem polissa activa, considerem "Contrato no activo (CNA)" o_equip = 'CNA' #energies consumides o_anual_activa = cups['cne_anual_activa'] or 0.0 o_anual_reactiva = cups['cne_anual_reactiva'] or 0.0 output_q.put([ o_codi_r1, o_name, o_utmx, o_utmy, o_codi_prov, o_codi_ine, o_equip, o_linia, o_tensio, o_potencia, o_pot_ads or o_potencia, o_anual_activa, o_anual_reactiva ]) input_q.task_done()
def consumer(input_q, output_q, progress_q, codi_r1): """Fem l'informe. """ o_codi_r1 = "R1-%s" % codi_r1[-3:] while True: item = input_q.get() progress_q.put(item) re = O.GiscedataRe.read(item, ["cups", "potencia_nominal"]) if not re: input_q.task_done() continue o_potencia = re["potencia_nominal"] or "" cups = O.GiscedataCupsPs.read( re["cups"][0], ["name", "id_municipi", "id_escomesa", "cne_anual_activa", "cne_anual_reactiva"] ) o_cil = "%s%s" % (cups["name"][:20], "001") o_ener_activa = cups["cne_anual_activa"] o_ener_reactiva = cups["cne_anual_reactiva"] o_estimada = "N" o_codi_ine = "" o_codi_prov = "" if cups["id_municipi"]: municipi = O.ResMunicipi.read(cups["id_municipi"][0], ["ine", "state"]) ine = municipi["ine"] if municipi["state"]: provincia = O.ResCountryState.read(municipi["state"][0], ["code"]) o_codi_prov = provincia["code"] o_codi_ine = get_codi_ine(ine) o_utmx = "" o_utmy = "" o_linia = "" if cups and cups["id_escomesa"]: search_params = [("escomesa", "=", cups["id_escomesa"][0])] bloc_escomesa_id = O.GiscegisBlocsEscomeses.search(search_params) if bloc_escomesa_id: bloc_escomesa = O.GiscegisBlocsEscomeses.read(bloc_escomesa_id[0], ["node", "vertex"]) if bloc_escomesa["vertex"]: vertex = O.GiscegisVertex.read(bloc_escomesa["vertex"][0], ["x", "y"]) o_utmx = round(vertex["x"], 3) o_utmy = round(vertex["y"], 3) if bloc_escomesa["node"]: search_params = [("start_node", "=", bloc_escomesa["node"][0])] edge_id = O.GiscegisEdge.search(search_params) if not edge_id: search_params = [("end_node", "=", bloc_escomesa["node"][0])] edge_id = O.GiscegisEdge.search(search_params) if edge_id: edge = O.GiscegisEdge.read(edge_id[0], ["id_linktemplate"]) search_params = [("name", "=", edge["id_linktemplate"])] bt_id = O.GiscedataBtElement.search(search_params) if bt_id: bt = O.GiscedataBtElement.read(bt_id[0], ["tipus_linia"]) if bt["tipus_linia"]: o_linia = bt["tipus_linia"][1][0] output_q.put( [ o_codi_r1, o_cil, o_utmx, o_utmy, o_estimada, o_codi_prov, o_codi_ine, o_linia, o_potencia, o_ener_activa, o_ener_reactiva, ] ) input_q.task_done()