示例#1
0
    def store(f_xml):
        parser = SaxReader()
        xml_dat, _ = parser(f_xml)

        q = """select * from ncr_save_xml(
            {}::integer,
            '{}'::character varying,
            '{}'::character varying,
            '{}'::character varying,
            '{}'::boolean,
            {}::integer
            ) AS result( rc integer, msg text )
            """.format(  # Store procedure parameters
            req.get('ncr_id', None),  #  _ncr_id
            os.path.basename(f_xml),  #  _file_xml
            xml_dat['CFDI_SERIE'],  #  _serie
            xml_dat['CFDI_FOLIO'],  #  _folio
            req.get('saldado', None),  #  _saldado
            req.get('usr_id', None)  #  _usr_id
        )
        logger.debug("Performing query: {}".format(q))
        try:
            res = HelperPg.onfly_query(pt.dbms.pgsql_conn, q, True)
            if len(res) != 1:
                raise Exception(
                    'unexpected result regarding execution of store')

            rcode, rmsg = res.pop()
            if rcode == 0:
                return ErrorCode.SUCCESS

            raise Exception(rmsg)
        except:
            logger.error(dump_exception())
            return ErrorCode.DBMS_SQL_ISSUES
示例#2
0
    def run_store():
        logger.debug("Performing query: {}".format(q))
        r = HelperPg.onfly_query(pgsql_conf, q, True)

        # For this case we are just expecting one row
        if len(r) != 1:
            raise Exception('unexpected result regarding execution of store')
        return r
示例#3
0
    def get_xml_name():
        q = """select ref_id as filename
            FROM fac_nota_credito
            WHERE fac_nota_credito.id = {}""".format(ncr_id)

        for row in HelperPg.onfly_query(pt.dbms.pgsql_conn, q, True):
            # Just taking first row of query result
            return row['filename'] + '.xml'
示例#4
0
    def get_xml_name():
        q = """select ref_id as filename
            FROM fac_docs
            WHERE fac_docs.id="""

        for row in HelperPg.onfly_query("{0}{1}".format(q, fact_id), True):
            # Just taking first row of query result
            return row['filename'] + '.xml'
示例#5
0
    def store(f_xmlin, usr_id, prefact_id, no_id):
        parser = SaxReader()
        xml_dat, _ = parser(f_xmlin)
        ref_id = '{}_{}{}'.format(no_id, xml_dat['CFDI_SERIE'],
                                  xml_dat['CFDI_FOLIO'])
        q = """select fac_save_xml from fac_save_xml(
            '{}'::character varying, {}::integer, {}::integer, '{}'::character varying,
            '{}'::character varying, '{}'::character varying, '{}'::character varying,
            '{}'::character varying, '{}'::character varying, '{}'::character varying,
            '{}'::character varying, '{}'::character varying, '{}'::character varying,
            '{}'::character varying, '{}'::character varying, '{}'::character varying,
            '{}'::character varying, '{}'::character varying, '{}'::character varying,
             {}::double precision, {}::double precision, {}::double precision, {}::boolean,
            '{}'::character varying
        )""".format(  # Store procedure parameters
            os.path.basename(f_xmlin),  # file_xml
            prefact_id,  # prefact_id
            usr_id,  # usr_id
            xml_dat['CFDI_DATE'].split('T')[0],  # creation_date
            ref_id,  # no_id_emp
            xml_dat['CFDI_SERIE'],  # serie
            xml_dat['CFDI_FOLIO'],  # folio
            'THIS FIELD IS DEPRECATED',  # items_str
            'THIS FIELD IS DEPRECATED',  # traslados_str
            'THIS FIELD IS DEPRECATED',  # retenciones_str
            xml_dat['INCEPTOR_REG'],  # reg_fiscal
            'THIS FIELD IS DEPRECATED',  # pay_method
            xml_dat['INCEPTOR_CP'],  # exp_place
            'FACTURA',  # proposito      - It is obviously hardcoded
            'THIS FIELD IS DEPRECATED',  # no_aprob
            'THIS FIELD IS DEPRECATED',  # ano_aprob
            xml_dat['RECEPTOR_RFC'],  # rfc_custm      - RFC customer
            xml_dat['RECEPTOR_NAME'],  # rs_custm       - Razon social customer
            '0000',  # account_number - An account fake number invented by me
            xml_dat['TAXES']['TRAS']['TOTAL'],  # total_tras
            '0',  # subtotal_with_desc
            xml_dat['CFDI_TOTAL'],  # total
            'false',  # refact
            xml_dat[
                'UUID']  # id de documento - It came from SAT timbrado throughout PAC
        )
        logger.debug("Performing query: {}".format(q))
        try:
            s_out = None
            for row in HelperPg.onfly_query(q, True):
                # Just taking first row of query result
                s_out = row['fac_save_xml']
                break

            # here we should parse s_out line
            logger.debug(
                'store procedure fac_save_xml has returned: {}'.format(s_out))

            return ErrorCode.SUCCESS
        except:
            logger.error(dump_exception())
            return ErrorCode.ETL_ISSUES
示例#6
0
def __get_emisor_rfc(logger, usr_id, pgsql_conf):

    q = """select upper(EMP.rfc) as rfc
        FROM gral_suc AS SUC
        LEFT JOIN gral_usr_suc AS USR_SUC ON USR_SUC.gral_suc_id = SUC.id
        LEFT JOIN gral_emp AS EMP ON EMP.id = SUC.empresa_id
        LEFT JOIN cfdi_regimenes AS REG ON REG.numero_control = EMP.regimen_fiscal
        WHERE USR_SUC.gral_usr_id = {}""".format(usr_id)

    logger.debug("Performing query: {}".format(q))
    for row in HelperPg.onfly_query(pgsql_conf, q, True):
        # Just taking first row of query result
        return row['rfc']
示例#7
0
 def fetch_empdat(usr_id):
     sql = """select upper(EMP.rfc) as rfc, EMP.no_id as no_id
         FROM gral_suc AS SUC
         LEFT JOIN gral_usr_suc AS USR_SUC ON USR_SUC.gral_suc_id = SUC.id
         LEFT JOIN gral_emp AS EMP ON EMP.id = SUC.empresa_id
         WHERE USR_SUC.gral_usr_id="""
     q = "{0}{1}".format(sql, usr_id)
     logger.debug("Performing query: {}".format(q))
     try:
         for row in HelperPg.onfly_query(pt.dbms.pgsql_conn, q):
             return ErrorCode.SUCCESS, dict(rfc=row['rfc'], no_id=row['no_id'])
     except:
         logger.error(dump_exception())
         return ErrorCode.DBMS_SQL_ISSUES, None