예제 #1
0
파일: F10AT.py 프로젝트: kailIII/libCNMC
    def consumer(self):
        o = self.connection
        fields_to_read = [
            'name', 'cini', 'circuits', 'longitud_cad', 'linia', 'origen',
            'final', 'coeficient', 'cable', 'tensio_max_disseny'
        ]
        data_pm_limit = '%s-01-01' % (self.year + 1)
        data_baixa = '%s-12-31' % self.year
        static_search_params = [
            ('cini', '!=', '0000000'),
            '|',
            ('data_pm', '=', False),
            ('data_pm', '<', data_pm_limit),
            '|',
            ('data_baixa', '>', data_baixa),
            ('data_baixa', '=', False),
        ]
        # Revisem que si està de baixa ha de tenir la data informada.
        static_search_params += ['|',
                                 '&', ('active', '=', False),
                                      ('data_baixa', '!=', False),
                                 ('active', '=', True)]
        while True:
            try:
                # generar linies
                item = self.input_q.get()
                self.progress_q.put(item)
                linia = o.GiscedataAtLinia.read(
                    item, ['trams', 'tensio', 'municipi', 'propietari',
                           'provincia']
                )

                o_prop = linia['propietari'] and '1' or '0'
                search_params = [('id', 'in', linia['trams'])]
                search_params += static_search_params
                ids = o.GiscedataAtTram.search(
                    search_params, 0, 0, False, {'active_test': False})
                for at in o.GiscedataAtTram.read(ids, fields_to_read):
                    # Coeficient per ajustar longituds de trams
                    coeficient = at['coeficient'] or 1.0
                    # Comprovar el tipus del cable
                    fields_to_read_cable = [
                        'tipus', 'resistencia', 'reactancia',
                        'intensitat_admisible'
                    ]
                    cable = o.GiscedataAtCables.read(at['cable'][0],
                                                     fields_to_read_cable)
                    o_tipus = o.GiscedataAtTipuscable.read(cable['tipus'][0],
                                                           ['codi'])['codi']
                    # Si el tram tram es embarrat amb una longitud > 100
                    # no l'afegim
                    if o_tipus == 'E' and at['longitud_cad'] > 100:
                        continue
                    if o_tipus == 'E':
                        o_tipus = 'S'
                    #Agafem la tensió
                    o_nivell_tensio = (
                        (at['tensio_max_disseny'] or linia['tensio']))
                    o_nivell_tensio = format_f(
                        float(o_nivell_tensio) / 1000.0, 3)
                    o_tram = 'A%s' % at['name']
                    res = o.GiscegisEdge.search(
                        [('id_linktemplate', '=', at['name']),
                         ('layer', 'not ilike', self.layer),
                         ('layer', 'not ilike', 'EMBARRA%BT%')
                         ])
                    if not res or len(res) > 1:
                        edge = {'start_node': (0, '%s_0' % at['name']),
                                'end_node': (0, '%s_1' % at['name'])}
                    else:
                        edge = o.GiscegisEdge.read(res[0], ['start_node',
                                                            'end_node'])
                    o_node_inicial = tallar_text(edge['start_node'][1], 20)
                    o_node_final = tallar_text(edge['end_node'][1], 20)
                    o_cini = at['cini']
                    o_provincia = ''
                    if linia['provincia']:
                        o_provincia = self.get_provincia(linia['provincia'][0])
                    o_longitud = format_f(
                        float(at['longitud_cad']) * coeficient / 1000.0 or 0.001
                        , decimals=3)
                    o_num_circuits = at['circuits']
                    o_r = format_f(
                        cable['resistencia'] * (float(at['longitud_cad']) *
                                                coeficient / 1000.0) or 0.0,
                        decimals=6)
                    o_x = format_f(
                        cable['reactancia'] * (float(at['longitud_cad']) *
                                               coeficient / 1000.0) or 0.0,
                        decimals=6)
                    o_int_max = format_f(
                        cable['intensitat_admisible'] or 0.0, decimals=3)
                    o_op_habitual = 1  # Tots son actius
                    o_cod_dis = 'R1-%s' % self.codi_r1[-3:]
                    o_any = self.year

                    self.output_q.put([
                        o_tram,
                        o_node_inicial,
                        o_node_final,
                        o_cini,
                        o_provincia,
                        o_nivell_tensio,
                        o_longitud,
                        o_num_circuits,
                        o_tipus,
                        o_r,
                        o_x,
                        o_int_max,
                        o_op_habitual,
                        o_cod_dis,
                        o_prop,
                        o_any
                    ])
            except:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #2
0
파일: LBT.py 프로젝트: kailIII/libCNMC
    def consumer(self):
        O = self.connection
        count = 0
        fields_to_read = ['name', 'municipi', 'data_pm', 'ct',
                          'coeficient', 'cini', 'perc_financament',
                          'longitud_cad', 'cable', 'voltatge', 'data_alta',
                          'propietari', 'cnmc_tipo_instalacion']
        while True:
            try:
                count += 1
                item = self.input_q.get()
                self.progress_q.put(item)

                linia = O.GiscedataBtElement.read(item, fields_to_read)

                res = O.GiscegisEdge.search([('id_linktemplate', '=',
                                              linia['name']),
                                             ('layer', 'ilike', '%BT%')])
                if not res:
                    if not QUIET:
                        sys.stderr.write(
                            "**** ERROR: l'element %s (id:%s) no està en "
                            "giscegis_edges.\n" % (linia['name'], linia['id']))
                        sys.stderr.flush()
                    edge = {'start_node': (0, '%s_0' % linia['name']),
                            'end_node': (0, '%s_1' % linia['name'])}
                elif len(res) > 1:
                    if not QUIET:
                        sys.stderr.write("**** ERROR: l'element %s (id:%s) "
                                         "està més d'una vegada a "
                                         "giscegis_edges. %s\n" %
                                         (linia['name'], linia['id'], res))
                        sys.stderr.flush()
                    edge = {'start_node': (0, '%s_0' % linia['name']),
                            'end_node': (0, '%s_1' % linia['name'])}
                else:
                    edge = O.GiscegisEdge.read(res[0], ['start_node',
                                                        'end_node'])
                comunitat = ''
                if linia['municipi']:
                    ccaa_obj = O.ResComunitat_autonoma
                    id_comunitat = ccaa_obj.get_ccaa_from_municipi(
                        linia['municipi'][0])
                    id_comunitat = id_comunitat[0]
                    comunidad = ccaa_obj.read(id_comunitat, ['codi'])
                    if comunidad:
                        comunitat = comunidad['codi']
                data_pm = ''
                if linia['data_pm']:
                    data_pm_linia = datetime.strptime(str(linia['data_pm']),
                                                      '%Y-%m-%d')
                    data_pm = data_pm_linia.strftime('%Y')

                # Coeficient per ajustar longituds de trams
                coeficient = linia['coeficient'] or 1.0

                try:
                    tensio = (int(linia['voltatge']) / 1000.0)
                except:
                    tensio = 0.0

                propietari = linia['propietari'] and '1' or '0'

                codi = linia['cnmc_tipo_instalacion']
                # Agafem el cable de la linia
                if linia['cable']:
                    cable = O.GiscedataBtCables.read(linia['cable'][0], [
                        'intensitat_admisible', 'seccio'])
                else:
                    cable = {'seccio': 0, 'intensitat_admisible': 0}

                intensitat = cable['intensitat_admisible']
                #Capacitat
                capacitat = round(
                    (cable['intensitat_admisible'] * int(linia['voltatge'])
                     * math.sqrt(3)) / 1000, 3)

                if not capacitat:
                    capacitat = 1.0

                #Descripció
                origen = tallar_text(edge['start_node'][1], 50)
                final = tallar_text(edge['end_node'][1], 50)

                longitud = round(linia['longitud_cad'] * coeficient / 1000.0,
                                 3) or 0.001

                output = [
                    'B%s' % linia['name'],
                    linia['cini'] or '',
                    origen or '',
                    final or '',
                    codi or '',
                    comunitat,
                    comunitat,
                    format_f(round(100 - int(linia['perc_financament']))),
                    data_pm or '',
                    1,
                    1,
                    format_f(tensio),
                    format_f(longitud, 3),
                    format_f(intensitat),
                    format_f(cable['seccio']),
                    format_f(capacitat),
                ]

                self.output_q.put(output)
            except:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #3
0
파일: LAT.py 프로젝트: gisce/libCNMC
    def consumer(self):
        """
        Method that generates the csb file
        :return: List of arrays
        """
        O = self.connection
        fields_to_read = [
            'baixa', 'data_pm', 'data_industria', 'coeficient', 'cini',
            'propietari', 'tensio_max_disseny', 'name', 'origen', 'final',
            'perc_financament', 'circuits', 'longitud_cad', 'cable',
            'tipus_instalacio_cnmc_id', 'data_baixa', self.compare_field
        ]
        data_pm_limit = '{0}-01-01'.format(self.year + 1)
        data_baixa = '{0}-01-01'.format(self.year)

        static_search_params = [
            ('propietari', '=', True),
            '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit),
            '|', ('data_baixa', '=', False), ('data_baixa', '>', data_baixa)
            ]

        #print 'static_search_params:{}'.format(static_search_params)
        # Revisem que si està de baixa ha de tenir la data informada.
        static_search_params += [
            '|',
            '&', ('active', '=', False), ('data_baixa', '!=', False),
            ('active', '=', True)
        ]
        while True:
            try:
                item = self.input_q.get()
                self.progress_q.put(item)

                linia = O.GiscedataAtLinia.read(
                    item, ['trams', 'tensio', 'municipi', 'propietari']
                )
                propietari = linia['propietari'] and '1' or '0'
                search_params = [('linia', '=', linia['id'])]
                search_params += static_search_params
                ids = O.GiscedataAtTram.search(
                    search_params, 0, 0, False, {'active_test': False})
                id_desconegut = O.GiscedataAtCables.search(
                    [('name', '=', 'DESCONEGUT')])

                if not id_desconegut:
                    search_params_cab = [('name', '=', 'DESCONOCIDO')]
                    id_desconegut = O.GiscedataAtCables.search(
                        search_params_cab)[0]
                for tram in O.GiscedataAtTram.read(ids, fields_to_read):
                    # Comprovar el tipus del cable
                    if 'cable' in tram:
                        t_cab = tram['cable'][0]
                        cable = O.GiscedataAtCables.read(t_cab, ['tipus'])
                        if not self.embarrats and cable['tipus']:
                            tipus = O.GiscedataAtTipuscable.read(
                                cable['tipus'][0], ['codi']
                            )
                            # Si el tram tram es embarrat no l'afegim
                            if tipus['codi'] == 'E':
                                continue
                    else:
                        cable = O.GiscedataAtCables.read(
                            id_desconegut, ['tipus'])

                    # Calculem any posada en marxa
                    data_pm = ''
                    if 'data_pm' in tram and tram['data_pm'] and tram['data_pm'] < data_pm_limit:
                        data_pm = datetime.strptime(str(tram['data_pm']),
                                                    '%Y-%m-%d')
                        data_pm = data_pm.strftime('%d/%m/%Y')

                    # Coeficient per ajustar longituds de trams
                    coeficient = tram.get('coeficient', 1.0)
                    if tram.get('tipus_instalacio_cnmc_id', False):
                        id_ti = tram.get('tipus_instalacio_cnmc_id')[0]
                        codi_ccuu = O.GiscedataTipusInstallacio.read(
                            id_ti,
                            ['name'])['name']
                    else:
                        codi_ccuu = ''

                    #Agafem la tensió
                    if 'tensio_max_disseny' in tram:
                        tensio = tram['tensio_max_disseny'] / 1000.0
                    elif 'tensio' in linia:
                        tensio = linia['tensio'] / 1000.0
                    else:
                        tensio = 0


                    comunitat = ''
                    if linia['municipi']:
                        ccaa_obj = O.ResComunitat_autonoma
                        id_comunitat = ccaa_obj.get_ccaa_from_municipi(
                            linia['municipi'][0])
                        comunidad = O.ResComunitat_autonoma.read(id_comunitat,
                                                                 ['codi'])
                        if comunidad:
                            comunitat = comunidad[0]['codi']

                    # Agafem el cable de la linia
                    if 'cable' in tram:
                        cable = O.GiscedataAtCables.read(
                            tram['cable'][0], ['intensitat_admisible',
                                               'seccio'])
                    else:
                        cable = O.GiscedataAtCables.read(
                            id_desconegut[0], ['tipus'])

                    #Capacitat
                    if 'intensitat_admisible' in cable:
                        cap = (cable['intensitat_admisible'] * tensio *
                               math.sqrt(3) / 1000.0)
                    else:
                        cap = 0

                    if cap < 1:
                        capacitat = 1
                    else:
                        capacitat = int(round(cap))

                    #Descripció
                    origen = tallar_text(tram['origen'], 50)
                    final = tallar_text(tram['final'], 50)
                    if 'longitud_cad' in tram:
                        longitud = round(tram['longitud_cad'] * coeficient/ 1000.0, 3) or 0.001
                    else:
                        longitud = 0
                    if not origen or not final:
                        res = O.GiscegisEdge.search(
                            [
                                ('id_linktemplate', '=', tram['name']),
                                ('layer', 'not ilike', self.layer),
                                ('layer', 'not ilike', 'EMBARRA%BT%')
                            ])
                        if not res or len(res) > 1:
                            edge = {'start_node': (0, '{0}_0'.format(tram.get('name'))),
                                    'end_node': (0, '{0}_1'.format(tram.get('name')))}
                        else:
                            edge = O.GiscegisEdge.read(res[0], ['start_node',
                                                                'end_node'])
                    if tram.get('data_baixa'):
                        if tram.get('data_baixa') > data_pm_limit:
                            fecha_baja = ''
                        else:
                            tmp_date = datetime.strptime(
                                tram.get('data_baixa'), '%Y-%m-%d')
                            fecha_baja = tmp_date.strftime('%d/%m/%Y')
                    else:
                        fecha_baja = ''

                    if tram[self.compare_field]:
                        last_data = tram[self.compare_field]
                        entregada = F1Res4771(**last_data)
                        if tram['tipus_instalacio_cnmc_id']:
                            id_ti = tram['tipus_instalacio_cnmc_id'][0]
                            ti = O.GiscedataTipusInstallacio.read(
                                id_ti,
                                ['name'])['name']
                        else:
                            ti = ''
                        actual = F1Res4771(
                            'A{0}'.format(tram['name']),
                            tram['cini'],
                            tram['origen'],
                            tram['final'],
                            ti,
                            comunitat, comunitat,
                            format_f(round(100 - int(tram.get('perc_financament', 0) or 0))),
                            data_pm, tram.get('circuits', 1) or 1, 1,
                            tensio,
                            format_f(longitud, 3),
                            format_f(cable.get('intensitat_admisible', 0) or 0),
                            format_f(float(cable.get('seccio', 0)), 2),
                            str(capacitat),
                            propietari
                        )
                        if actual == entregada:
                            estado = 0
                        else:
                            estado = 1
                    else:
                        estado = 2

                    output = [
                        'A{0}'.format(tram['name']),
                        tram.get('cini', '') or '',
                        origen or edge['start_node'][1],
                        final or edge['end_node'][1],
                        codi_ccuu or '',
                        comunitat,
                        comunitat,
                        format_f(round(100 - int(tram.get('perc_financament', 0) or 0))),
                        data_pm,
                        fecha_baja or '',
                        tram.get('circuits', 1) or 1,
                        1,
                        format_f(tensio),
                        format_f(longitud, 3),
                        format_f(cable.get('intensitat_admisible', 0) or 0),
                        format_f(cable.get('seccio', 0) or 0),
                        capacitat,
                        propietari,
                        estado
                    ]

                    self.output_q.put(output)

            except Exception:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #4
0
파일: LAT.py 프로젝트: kailIII/libCNMC
    def consumer(self):
        O = self.connection
        fields_to_read = ['baixa', 'data_pm', 'data_industria',
                          'coeficient', 'cini', 'propietari',
                          'tensio_max_disseny', 'name', 'origen',
                          'final', 'perc_financament', 'circuits',
                          'longitud_cad', 'cable', 'expedients_ids']
        data_pm_limit = '%s-01-01' % (self.year + 1)
        data_baixa = '%s-12-31' % self.year
        static_search_params = [('propietari', '=', True),
                                '|', ('data_pm', '=', False),
                                     ('data_pm', '<', data_pm_limit),
                                '|', ('data_baixa', '>', data_baixa),
                                     ('data_baixa', '=', False),
                                ]
        # Revisem que si està de baixa ha de tenir la data informada.
        static_search_params += ['|',
                                 '&', ('active', '=', False),
                                      ('data_baixa', '!=', False),
                                 ('active', '=', True)]
        while True:
            try:
                item = self.input_q.get()
                self.progress_q.put(item)

                linia = O.GiscedataAtLinia.read(
                    item, ['trams', 'tensio', 'municipi']
                )
                search_params = [('id', 'in', linia['trams'])]
                search_params += static_search_params
                ids = O.GiscedataAtTram.search(
                    search_params, 0, 0, False, {'active_test': False})
                for tram in O.GiscedataAtTram.read(ids, fields_to_read):
                    #Comprovar el tipus del cable
                    cable = O.GiscedataAtCables.read(tram['cable'][0],
                                                     ['tipus'])
                    tipus = O.GiscedataAtTipuscable.read(cable['tipus'][0],
                                                         ['codi'])
                    #Si el tram tram es embarrat no l'afegim
                    if tipus['codi'] == 'E':
                        continue

                    # Calculem any posada en marxa
                    data_pm = ''
                    if tram['data_pm'] and tram['data_pm'] < data_pm_limit:
                        data_pm = datetime.strptime(str(tram['data_pm']),
                                                    '%Y-%m-%d')
                        data_pm = data_pm.strftime('%d/%m/%Y')

                    # Coeficient per ajustar longituds de trams
                    coeficient = tram['coeficient'] or 1.0

                    tipus_inst_id = O.Giscedata_cnmcTipo_instalacion.search(
                        [('cini', '=', tram['cini'])])
                    codigo = O.Giscedata_cnmcTipo_instalacion.read(
                        tipus_inst_id, ['codi'])
                    if codigo:
                        codi = codigo[0]
                    else:
                        codi = {'codi': ' '}

                    #Agafem la tensió
                    tensio = tram['tensio_max_disseny'] or linia['tensio']

                    comunitat = ''
                    if linia['municipi']:
                        id_comunitat = O.ResComunitat_autonoma.get_ccaa_from_municipi(
                            linia['municipi'][0])
                        comunidad = O.ResComunitat_autonoma.read(id_comunitat,
                                                                 ['codi'])
                        if comunidad:
                            comunitat = comunidad[0]['codi']

                    # Agafem el cable de la linia
                    cable = O.GiscedataAtCables.read(tram['cable'][0], [
                        'intensitat_admisible', 'seccio'])

                    #Capacitat
                    cap = round(
                        (cable['intensitat_admisible'] * tensio *
                         math.sqrt(3))/1000000, 3)
                    if cap < 1:
                        capacitat = 1
                    else:
                        capacitat = int(round(cap))

                    #Descripció
                    origen = tallar_text(tram['origen'], 50)
                    final = tallar_text(tram['final'], 50)

                    output = [
                        'A%s' % tram['name'],
                        tram['cini'] or '',
                        origen or '',
                        final or '',
                        codi['codi'] or '',
                        comunitat,
                        comunitat,
                        round(100 - int(tram['perc_financament'])),
                        data_pm,
                        '',
                        tram['circuits'] or 1,
                        1,
                        round(tram['longitud_cad'] * coeficient / 1000.0,
                              3) or 0,
                        cable['seccio'],
                        capacitat
                    ]

                    self.output_q.put(output)

            except:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #5
0
파일: F10BT.py 프로젝트: gisce/libCNMC
    def consumer(self):
        o = self.connection
        fields_to_read = [
            'name', 'propietari', 'coeficient', 'cable', 'voltatge', 'cini',
            'longitud_cad', 'municipi', 'longitud_cad', 'tipus_linia'
        ]
        while True:
            try:
                # generar linies
                item = self.input_q.get()
                self.progress_q.put(item)
                linia = o.GiscedataBtElement.read(item, fields_to_read)

                res = o.GiscegisEdge.search(
                    [('id_linktemplate', '=', linia['name']),
                     '|',
                     ('layer', 'ilike', self.layer),
                     ('layer', 'ilike', 'EMBARRA%BT%')
                     ])
                if not res or len(res) > 1:
                    edge = {'start_node': (0, '%s_0' % linia['name']),
                            'end_node': (0, '%s_1' % linia['name'])}
                else:
                    edge = o.GiscegisEdge.read(res[0], ['start_node',
                                                        'end_node'])

                o_prop = linia['propietari'] and '1' or '0'
                # Coeficient per ajustar longituds de trams
                coeficient = linia['coeficient'] or 1.0
                # Comprovar el tipus del cable
                fields_to_read_cable = [
                    'tipus', 'reactancia', 'resistencia', 'intensitat_admisible'
                ]
                # Agafem el cable de la linia
                cable = o.GiscedataBtCables.read(linia['cable'][0],
                                                 fields_to_read_cable)
                #Agafem la tensió
                try:
                    o_nivell_tensio = format_f(
                        (int(linia['voltatge']) / 1000.0), 3
                    )
                except:
                    o_nivell_tensio = 0.0
                o_tram = 'B%s' % linia['name']
                o_node_inicial = tallar_text(edge['start_node'][1], 20)
                o_node_inicial = o_node_inicial.replace('*', '')
                o_node_final = tallar_text(edge['end_node'][1], 20)
                o_node_final = o_node_final.replace('*', '')
                o_cini = linia['cini']
                o_provincia = ''
                if linia['municipi']:
                    o_provincia = self.get_provincia(linia['municipi'][0])
                o_longitud = format_f(
                        round(float(linia['longitud_cad']) *
                              coeficient / 1000.0, 3) or 0.001, decimals=3)
                o_num_circuits = 1  # a BT suposarem que sempre hi ha 1
                o_tipus = self.get_tipus_cable(
                    cable['tipus'][0], linia['tipus_linia'][0]
                )
                o_r = format_f(
                    cable['resistencia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6)
                o_x = format_f(
                    cable['reactancia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6)
                o_int_max = format_f(cable['intensitat_admisible'], 3)
                o_op_habitual = 1  # Tots son actius
                o_cod_dis = 'R1-%s' % self.codi_r1[-3:]
                o_any = self.year

                if cable['tipus'][1] in ['EMBARRADO', 'EMBARRAT']:
                    o_prop = 1

                self.output_q.put([
                    o_tram,             # TRAMO
                    o_node_inicial,     # NUDO INICIAL
                    o_node_final,       # NUDO FINAL
                    o_cini,             # CINI
                    o_provincia,        # PROVINCIA
                    o_nivell_tensio,    # NIVEL TENSION
                    o_longitud,         # LONGITUD
                    o_num_circuits,     # NUMERO CIRCUITOS
                    o_tipus,            # TIPO
                    o_r,                # RESISTENCIA
                    o_x,                # REACTANCIA
                    o_int_max,          # INTENSIDAD MAXIMA
                    o_op_habitual,      # ESTADO OPERACION HABITUAL
                    o_cod_dis,          # CODIGO DISTRIBUIDORA
                    o_prop,             # PROPIEDAD
                    o_any               # AÑO INFORMACION
                ])
            except Exception:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #6
0
파일: LBT.py 프로젝트: gisce/libCNMC
    def consumer(self):
        """
        Method that generates the csb file
        :return: List of arrays
        """
        O = self.connection
        count = 0
        fields_to_read = [
            'name', 'municipi', 'data_pm', 'ct', 'coeficient', 'cini',
            'perc_financament', 'longitud_cad', 'cable', 'voltatge',
            'data_alta', 'propietari', 'tipus_instalacio_cnmc_id',
            'data_baixa', self.compare_field
        ]
        data_baixa_limit = '{0}-01-01'.format(self.year)
        data_pm_limit = '{0}-01-01'.format(self.year + 1)
        error_msg = "**** ERROR: l'element {0} (id:{1}) no està en giscegis_edges.\n"
        error_msg_multi = "**** ERROR: l'element {0} (id:{1}) està més d'una vegada a giscegis_edges. {2}\n"
        while True:
            try:
                count += 1
                item = self.input_q.get()
                self.progress_q.put(item)

                linia = O.GiscedataBtElement.read(item, fields_to_read)

                res = O.GiscegisEdge.search([('id_linktemplate', '=',
                                              linia['name']),
                                             ('layer', 'ilike', '%BT%')])
                if not res:
                    if not QUIET:
                        sys.stderr.write(
                            error_msg.format(linia['name'], linia['id']))
                        sys.stderr.flush()
                    edge = {'start_node': (0, '{0}_0'.format(linia['name'])),
                            'end_node': (0, '{0}_1'.format(linia['name']))}
                elif len(res) > 1:
                    if not QUIET:
                        sys.stderr.write(
                            error_msg_multi.format(linia['name'], linia['id'], res))
                        sys.stderr.flush()
                    edge = {'start_node': (0, '{0}_0'.format(linia['name'])),
                            'end_node': (0, '{0}_1'.format(linia['name']))}
                else:
                    edge = O.GiscegisEdge.read(res[0], ['start_node',
                                                        'end_node'])
                comunitat = ''
                if linia['municipi']:
                    ccaa_obj = O.ResComunitat_autonoma
                    id_comunitat = ccaa_obj.get_ccaa_from_municipi(
                        linia['municipi'][0])
                    id_comunitat = id_comunitat[0]
                    comunidad = ccaa_obj.read(id_comunitat, ['codi'])
                    if comunidad:
                        comunitat = comunidad['codi']
                data_pm = ''
                if linia['data_pm']:
                    data_pm_linia = datetime.strptime(str(linia['data_pm']),
                                                      '%Y-%m-%d')
                    data_pm = data_pm_linia.strftime('%d/%m/%Y')

                # Coeficient per ajustar longituds de trams
                coeficient = linia['coeficient'] or 1.0

                try:
                    tensio = (int(linia['voltatge']) / 1000.0)
                except Exception:
                    tensio = 0.0

                propietari = linia['propietari'] and '1' or '0'

                if linia['tipus_instalacio_cnmc_id']:
                    id_ti = linia.get('tipus_instalacio_cnmc_id')[0]
                    codi_ccuu = O.GiscedataTipusInstallacio.read(
                        id_ti,
                        ['name'])['name']
                else:
                    codi_ccuu = ''

                # Agafem el cable de la linia
                if linia['cable']:
                    cable = O.GiscedataBtCables.read(linia['cable'][0], [
                        'intensitat_admisible', 'seccio'])
                else:
                    cable = {'seccio': 0, 'intensitat_admisible': 0}

                intensitat = cable['intensitat_admisible']
                #Capacitat
                capacitat = round(
                    (cable['intensitat_admisible'] * int(linia['voltatge'])
                     * math.sqrt(3)) / 1000, 3)

                if not capacitat:
                    capacitat = 1.0

                #Descripció
                origen = tallar_text(edge['start_node'][1], 50)
                final = tallar_text(edge['end_node'][1], 50)

                longitud = round(linia['longitud_cad'] * coeficient / 1000.0,
                                 3) or 0.001
                if linia['data_baixa']:
                    if linia['data_baixa'] > data_pm_limit:
                        fecha_baja = ''
                    else:
                        tmp_date = datetime.strptime(
                            linia['data_baixa'], '%Y-%m-%d')
                        fecha_baja = tmp_date.strftime('%d/%m/%Y')
                else:
                    fecha_baja = ''

                if linia[self.compare_field]:
                    last_data = linia[self.compare_field]
                    entregada = F2Res4771(**last_data)
                    actual = F2Res4771(
                        'B{0}'.format(linia['name']),
                        linia['cini'],
                        origen or '',
                        final or '',
                        codi_ccuu or '',
                        comunitat,
                        comunitat,
                        format_f(round(100 - int(linia['perc_financament']))),
                        data_pm,
                        1,
                        1,
                        format_f(tensio),
                        format_f(longitud, 3),
                        format_f(intensitat),
                        format_f(float(cable['seccio']),2),
                        format_f(capacitat),
                        propietari)
                    if actual == entregada:
                        estado = 0
                    else:
                        estado = 1
                else:
                    estado = 2

                output = [
                    'B{}'.format(linia['name']),
                    linia['cini'] or '',
                    origen or '',
                    final or '',
                    codi_ccuu or '',
                    comunitat,
                    comunitat,
                    format_f(round(100 - int(linia['perc_financament']))),
                    data_pm or '',
                    fecha_baja,
                    1,
                    1,
                    format_f(tensio),
                    format_f(longitud, 3),
                    format_f(intensitat),
                    format_f(cable['seccio']),
                    format_f(capacitat),
                    propietari,
                    estado
                ]

                self.output_q.put(output)
            except Exception:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #7
0
파일: F10AT.py 프로젝트: gisce/libCNMC
    def consumer(self):
        o = self.connection
        fields_to_read = [
            'name', 'cini', 'circuits', 'longitud_cad', 'linia', 'origen',
            'final', 'coeficient', 'cable', 'tensio_max_disseny','tensio_max_disseny_id'
        ]
        data_pm_limit = '%s-01-01' % (self.year + 1)
        data_baixa = '%s-12-31' % self.year
        static_search_params = [
            ('cini', '!=', '0000000'),
            '|',
            ('data_pm', '=', False),
            ('data_pm', '<', data_pm_limit),
            '|',
            ('data_baixa', '>', data_baixa),
            ('data_baixa', '=', False),
        ]
        # Revisem que si està de baixa ha de tenir la data informada.
        static_search_params += ['|',
                                 '&', ('active', '=', False),
                                      ('data_baixa', '!=', False),
                                 ('active', '=', True)]
        while True:
            try:
                # generar linies
                item = self.input_q.get()
                self.progress_q.put(item)
                linia = o.GiscedataAtLinia.read(
                    item, ['trams', 'tensio', 'municipi', 'propietari',
                           'provincia']
                )

                o_prop = linia['propietari'] and '1' or '0'
                search_params = [('id', 'in', linia['trams'])]
                search_params += static_search_params
                ids = o.GiscedataAtTram.search(
                    search_params, 0, 0, False, {'active_test': False})
                for at in o.GiscedataAtTram.read(ids, fields_to_read):
                    # Coeficient per ajustar longituds de trams
                    coeficient = at['coeficient'] or 1.0
                    # Comprovar el tipus del cable
                    fields_to_read_cable = [
                        'tipus', 'resistencia', 'reactancia',
                        'intensitat_admisible'
                    ]
                    cable = o.GiscedataAtCables.read(at['cable'][0],
                                                     fields_to_read_cable)
                    o_tipus = o.GiscedataAtTipuscable.read(cable['tipus'][0],
                                                           ['codi'])['codi']
                    # Si el tram tram es embarrat amb una longitud > 100
                    # no l'afegim
                    if o_tipus == 'E' and at['longitud_cad'] > 100:
                        continue
                    if o_tipus == 'E':
                        o_tipus = 'D'
                    # Agafem la tensió
                    if at.get('tensio_max_disseny_id', False):
                        nivell_tensio_id = at['tensio_max_disseny_id'][0]
                        o_nivell_tensio = o.GiscedataTensionsTensio.read(nivell_tensio_id, ["tensio"])["tensio"]
                    else:
                        o_nivell_tensio = linia["tensio"]
                    o_nivell_tensio = format_f(
                        float(o_nivell_tensio) / 1000.0, 3)
                    o_tram = 'A%s' % at['name']
                    res = o.GiscegisEdge.search(
                        [('id_linktemplate', '=', at['name']),
                         ('layer', 'not ilike', self.layer),
                         ('layer', 'not ilike', 'EMBARRA%BT%')
                         ])
                    if not res or len(res) > 1:
                        edge = {'start_node': (0, '%s_0' % at['name']),
                                'end_node': (0, '%s_1' % at['name'])}
                    else:
                        edge = o.GiscegisEdge.read(res[0], ['start_node',
                                                            'end_node'])

                    o_node_inicial = tallar_text(edge['start_node'][1], 20)
                    o_node_inicial = o_node_inicial.replace('*', '')
                    if o_node_inicial in self.nodes_red:
                        o_node_inicial = "{}-{}".format(o_node_inicial, o_nivell_tensio)

                    o_node_final = tallar_text(edge['end_node'][1], 20)
                    o_node_final = o_node_final.replace('*', '')
                    if o_node_final in self.nodes_red:
                        o_node_final = "{}-{}".format(o_node_final, o_nivell_tensio)
                    o_cini = at['cini']
                    o_provincia = ''
                    if linia['provincia']:
                        o_provincia = self.get_provincia(linia['provincia'][0])
                    o_longitud = format_f(
                            round(float(at['longitud_cad']) *
                                  coeficient / 1000.0, 3) or 0.001, decimals=3)
                    o_num_circuits = at['circuits']
                    o_r = format_f(
                        cable['resistencia'] * (float(at['longitud_cad']) *
                                                coeficient / 1000.0) or 0.0,
                        decimals=6)
                    o_x = format_f(
                        cable['reactancia'] * (float(at['longitud_cad']) *
                                               coeficient / 1000.0) or 0.0,
                        decimals=6)
                    o_int_max = format_f(
                        cable['intensitat_admisible'] or 0.0, decimals=3)
                    o_op_habitual = 1  # Tots son actius
                    o_cod_dis = 'R1-%s' % self.codi_r1[-3:]
                    o_any = self.year

                    self.output_q.put([
                        o_tram,             # TRAMO
                        o_node_inicial,     # NUDO INICIAL
                        o_node_final,       # NUDO FINAL
                        o_cini,             # CINI
                        o_provincia,        # PROVINCIA
                        o_nivell_tensio,    # NIVEL TENSION
                        o_longitud,         # LONGITUD
                        o_num_circuits,     # NUMERO CIRCUITOS
                        o_tipus,            # TIPO
                        o_r,                # RESISTENCIA
                        o_x,                # REACTANCIA
                        o_int_max,          # INTENSIDAD MAXIMA
                        o_op_habitual,      # ESTADO OPERACION HABITUAL
                        o_cod_dis,          # CODIGO DISTRIBUIDORA
                        o_prop,             # PROPIEDAD
                        o_any               # AÑO INFORMACION
                    ])
            except Exception:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #8
0
파일: F10BT.py 프로젝트: kailIII/libCNMC
    def consumer(self):
        o = self.connection
        fields_to_read = [
            'name', 'propietari', 'coeficient', 'cable', 'voltatge', 'cini',
            'longitud_cad', 'municipi', 'longitud_cad'
        ]
        while True:
            try:
                # generar linies
                item = self.input_q.get()
                self.progress_q.put(item)
                linia = o.GiscedataBtElement.read(item, fields_to_read)

                res = o.GiscegisEdge.search(
                    [('id_linktemplate', '=', linia['name']),
                     '|',
                     ('layer', 'ilike', self.layer),
                     ('layer', 'ilike', 'EMBARRA%BT%')
                     ])
                if not res or len(res) > 1:
                    edge = {'start_node': (0, '%s_0' % linia['name']),
                            'end_node': (0, '%s_1' % linia['name'])}
                else:
                    edge = o.GiscegisEdge.read(res[0], ['start_node',
                                                        'end_node'])

                o_prop = linia['propietari'] and '1' or '0'
                # Coeficient per ajustar longituds de trams
                coeficient = linia['coeficient'] or 1.0
                # Comprovar el tipus del cable
                fields_to_read_cable = [
                    'tipus', 'reactancia', 'resistencia', 'intensitat_admisible'
                ]
                # Agafem el cable de la linia
                cable = o.GiscedataBtCables.read(linia['cable'][0],
                                                 fields_to_read_cable)
                #Agafem la tensió
                try:
                    o_nivell_tensio = format_f(
                        (int(linia['voltatge']) / 1000.0), 3
                    )
                except:
                    o_nivell_tensio = 0.0
                o_tram = 'B%s' % linia['name']
                o_node_inicial = tallar_text(edge['start_node'][1], 20)
                o_node_final = tallar_text(edge['end_node'][1], 20)
                o_cini = linia['cini']
                o_provincia = ''
                if linia['municipi']:
                    o_provincia = self.get_provincia(linia['municipi'][0])
                o_longitud = format_f(
                        float(linia['longitud_cad']) * coeficient / 1000.0 or
                        0.001, decimals=3)
                o_num_circuits = 1  # a BT suposarem que sempre hi ha 1
                o_tipus = self.get_tipus_cable(cable['tipus'][0])
                if o_tipus == 'E':
                    o_tipus = 'S'
                o_r = format_f(
                    cable['resistencia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6)
                o_x = format_f(
                    cable['reactancia'] * (float(linia['longitud_cad']) * coeficient / 1000.0) or 0.0, 6)
                o_int_max = format_f(cable['intensitat_admisible'], 3)
                o_op_habitual = 1  # Tots son actius
                o_cod_dis = 'R1-%s' % self.codi_r1[-3:]
                o_any = self.year

                if cable['tipus'][1] in ['EMBARRADO', 'EMBARRAT']:
                    o_prop = 1

                self.output_q.put([
                    o_tram,
                    o_node_inicial,
                    o_node_final,
                    o_cini,
                    o_provincia,
                    o_nivell_tensio,
                    o_longitud,
                    o_num_circuits,
                    o_tipus,
                    o_r,
                    o_x,
                    o_int_max,
                    o_op_habitual,
                    o_cod_dis,
                    o_prop,
                    o_any
                ])
            except:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()
예제 #9
0
파일: LAT.py 프로젝트: gisce/libCNMC
    def consumer(self):
        """
        Method that generates the csb file
        :return: List of arrays
        """
        O = self.connection
        fields_to_read = [
            'baixa', 'data_pm', 'data_industria', 'coeficient', 'cini',
            'propietari', 'tensio_max_disseny_id', 'name', 'origen', 'final',
            'perc_financament', 'circuits', 'longitud_cad', 'cable',
            'tipus_instalacio_cnmc_id', 'data_baixa', self.compare_field,
            'baixa', 'data_baixa', 'conductors'
        ]
        data_pm_limit = '{0}-01-01'.format(self.year + 1)
        data_baixa = '{0}-01-01'.format(self.year)

        static_search_params = [
            ('propietari', '=', True),
            '|', ('data_pm', '=', False), ('data_pm', '<', data_pm_limit),
            '|',
            '&', ('data_baixa', '>', data_baixa),
                 ('baixa', '=', True),
            '|',
                 ('data_baixa', '=', False),
                 ('baixa', '=', False)
            ]

        # print 'static_search_params:{}'.format(static_search_params)
        # Revisem que si està de baixa ha de tenir la data informada.
        static_search_params += [
            '|',
            '&', ('active', '=', False), ('data_baixa', '!=', False),
            ('active', '=', True)
        ]

        while True:
            try:
                item = self.input_q.get()
                self.progress_q.put(item)

                linia = O.GiscedataAtLinia.read(
                    item,
                    ['trams', 'tensio', 'municipi', 'propietari', 'provincia']
                )

                propietari = linia['propietari'] and '1' or '0'
                search_params = [('linia', '=', linia['id'])]
                search_params += static_search_params
                ids = O.GiscedataAtTram.search(
                    search_params, 0, 0, False, {'active_test': False})

                if item in self.linia_tram_include:
                    ids = list(set(ids + self.linia_tram_include[item]))

                ids = list(set(ids) - set(self.forced_ids["exclude"]))

                id_desconegut = O.GiscedataAtCables.search(
                    [('name', '=', 'DESCONEGUT')])

                if not id_desconegut:
                    id_desconegut = O.GiscedataAtCables.search(
                        [('name', '=', 'DESCONOCIDO')])[0]
                for tram in O.GiscedataAtTram.read(ids, fields_to_read):
                    if tram["baixa"] and tram["data_baixa"] is False:
                        continue
                    # Comprovar el tipus del cable
                    if 'cable' in tram:
                        cable = O.GiscedataAtCables.read(
                            tram['cable'][0], ['tipus'])
                        tipus = O.GiscedataAtTipuscable.read(
                            cable['tipus'][0], ['codi']
                        )
                        if self.embarrats and tram["longitud_cad"] >= 100 and tipus["codi"] == "E":
                            continue
                        if not self.embarrats and cable['tipus']:
                            # Si el tram tram es embarrat no l'afegim
                            if tipus['codi'] == 'E':
                                continue
                    else:
                        cable = O.GiscedataAtCables.read(
                            id_desconegut, ['tipus'])

                    # Calculem any posada en marxa
                    data_pm = ''
                    if 'data_pm' in tram and tram['data_pm'] and tram['data_pm'] < data_pm_limit:
                        data_pm = datetime.strptime(str(tram['data_pm']),
                                                    '%Y-%m-%d')
                        data_pm = data_pm.strftime('%d/%m/%Y')

                    # Calculem la data de baixa
                    data_baixa = ''
                    if tram['data_baixa'] and tram['baixa']:
                        data_baixa = datetime.strptime(str(tram['data_baixa']),
                                                       '%Y-%m-%d')
                        data_baixa = data_baixa.strftime('%d/%m/%Y')

                    # Coeficient per ajustar longituds de trams
                    coeficient = tram.get('coeficient', 1.0)
                    if tram.get('tipus_instalacio_cnmc_id', False):
                        id_ti = tram.get('tipus_instalacio_cnmc_id')[0]
                        codi_ccuu = O.GiscedataTipusInstallacio.read(
                            id_ti,
                            ['name'])['name']
                    else:
                        codi_ccuu = ''

                    # Agafem la tensió
                    if 'tensio_max_disseny_id' in tram and tram['tensio_max_disseny_id']:
                        if isinstance(tram['tensio_max_disseny_id'], (list, tuple)):
                            id_tensio = int(tram['tensio_max_disseny_id'][0])
                        else:
                            id_tensio = int(tram['tensio_max_disseny_id'])
                        tensio_aplicar = self.connection.GiscedataTensionsTensio.read(id_tensio, ["tensio"])["tensio"]
                        tensio = tensio_aplicar / 1000.0
                    elif 'tensio' in linia:
                        tensio = linia['tensio'] / 1000.0
                    else:
                        tensio = 0

                    comunitat = ''
                    if linia['municipi']:
                        ccaa_obj = O.ResComunitat_autonoma
                        id_comunitat = ccaa_obj.get_ccaa_from_municipi(
                            linia['municipi'][0])
                        comunidad = O.ResComunitat_autonoma.read(id_comunitat,
                                                                 ['codi'])
                        if comunidad:
                            comunitat = comunidad[0]['codi']

                    # Agafem el cable de la linia
                    if 'cable' in tram:
                        cable = O.GiscedataAtCables.read(
                            tram['cable'][0], ['intensitat_admisible',
                                               'seccio'])
                    else:
                        cable = O.GiscedataAtCables.read(
                            id_desconegut[0], ['tipus'])

                    # Capacitat
                    if 'intensitat_admisible' in cable:
                        cap = (cable['intensitat_admisible'] * tensio *
                               math.sqrt(3) / 1000.0)
                    else:
                        cap = 0

                    if cap < 1:
                        capacitat = 1
                    else:
                        capacitat = int(round(cap))

                    # Descripció
                    origen = tallar_text(tram['origen'], 50)
                    final = tallar_text(tram['final'], 50)
                    if 'longitud_cad' in tram:
                        if self.dividir:
                            long_tmp = tram['longitud_cad']/tram.get(
                                'circuits', 1
                            ) or 1
                            longitud = round(
                                long_tmp * coeficient/1000.0, 3
                            ) or 0.001
                        else:
                            longitud = round(
                                tram['longitud_cad'] * coeficient/1000.0, 3
                            ) or 0.001
                    else:
                        longitud = 0
                    if not origen or not final:
                        res = O.GiscegisEdge.search(
                            [
                                ('id_linktemplate', '=', tram['name']),
                                ('layer', 'not ilike', self.layer),
                                ('layer', 'not ilike', 'EMBARRA%BT%')
                            ])
                        if not res or len(res) > 1:
                            edge = {'start_node': (0, '{0}_0'.format(tram.get('name'))),
                                    'end_node': (0, '{0}_1'.format(tram.get('name')))}
                        else:
                            edge = O.GiscegisEdge.read(res[0], ['start_node',
                                                                'end_node'])
                    if tram.get('data_baixa'):
                        if tram.get('data_baixa') > data_pm_limit:
                            fecha_baja = ''
                        else:
                            tmp_date = datetime.strptime(
                                tram.get('data_baixa'), '%Y-%m-%d')
                            fecha_baja = tmp_date.strftime('%d/%m/%Y')
                    else:
                        fecha_baja = ''

                    if tram[self.compare_field]:
                        data_entregada = tram[self.compare_field]
                        entregada = F1Res4666(**data_entregada)
                        if tram['tipus_instalacio_cnmc_id']:
                            id_ti = tram['tipus_instalacio_cnmc_id'][0]
                            ti = O.GiscedataTipusInstallacio.read(
                                id_ti,
                                ['name'])['name']
                        else:
                            ti = ''
                        actual = F1Res4666(
                            '{}{}'.format(self.prefix, tram['name']),
                            tram['cini'],
                            tram['origen'],
                            tram['final'],
                            ti,
                            comunitat,
                            comunitat,
                            format_f(
                                100.0 - tram.get('perc_financament', 0.0), 2
                            ),
                            data_pm,
                            data_baixa,
                            tram.get('circuits', 1) or 1,
                            1,
                            tensio,
                            format_f(longitud, 3),
                            format_f(cable.get('intensitat_admisible', 0) or 0),
                            format_f(float(cable.get('seccio', 0)), 2),
                            str(capacitat),
                            0
                        )
                        if actual == entregada:
                            estado = 0
                        else:
                            self.output_m.put("{} {}".format(tram["name"], adapt_diff(actual.diff(entregada))))
                            estado = 1
                    else:
                        if tram['data_pm']:
                            if tram['data_pm'][:4] != str(self.year):
                                self.output_m.put("Identificador:{} No estava en el fitxer carregat al any n-1 i la data de PM es diferent al any actual".format(tram["name"]))
                                estado = '1'
                            else:
                                estado = '2'
                        else:
                            self.output_m.put("Identificador:{} No estava en el fitxer carregat al any n-1".format(tram["name"]))
                            estado = '1'
                    if tram['conductors']:
                        conductors = tram['conductors']
                    else:
                        conductors = 1
                    output = [
                        '{}{}'.format(self.prefix, tram['name']),  # IDENTIFIC.
                        tram.get('cini', '') or '',         # CINI
                        origen or edge['start_node'][1],    # ORIGEN
                        final or edge['end_node'][1],       # DESTINO
                        codi_ccuu or '',                    # CODIGO_CCUU
                        comunitat,                          # CODIGO_CCAA_1
                        comunitat,                          # CODIGO_CCAA_2
                        format_f(
                            100.0 - tram.get('perc_financament', 0.0), 2
                        ),                                  # FINANCIADO
                        data_pm,                            # FECHA APS
                        fecha_baja or '',                   # FECHA BAJA
                        tram.get('circuits', 1) or 1,       # NUMERO_CIRCUITOS
                        conductors,                         # NUMERO_CONDUCTORES
                        format_f(tensio, 3),                # NIVEL TENSION
                        format_f(longitud, 3),              # LONGITUD
                        format_f(cable.get('intensitat_admisible', 0) or 0),    # INTENSIDAD MAXIMA
                        format_f(cable.get('seccio', 0) or 0, 3),   # SECCION
                        capacitat,                          # CAPACIDAD
                        estado                              # ESTADO
                    ]
                    if self.extended:
                        # S'ha especificat que es vol la versio extesa
                        if 'provincia' in linia:
                            provincia = O.ResCountryState.read(
                                linia['provincia'][0], ['name']
                            )
                            output.append(provincia.get('name', ""))
                        else:
                            output.append("")

                        if 'municipi' in linia:
                            municipi = O.ResMunicipi.read(
                                linia['municipi'][0], ['name']
                            )
                            output.append(municipi.get('name', ""))
                        else:
                            output.append("")

                    self.output_q.put(output)

            except Exception:
                traceback.print_exc()
                if self.raven:
                    self.raven.captureException()
            finally:
                self.input_q.task_done()