示例#1
0
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()
示例#2
0
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()
示例#3
0
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()
示例#4
0
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()