예제 #1
0
 def retencion(b, c, tc, imp):
     return pyxb.BIND(
         Base=b, TipoFactor='Tasa',
         Impuesto=c, TasaOCuota=tc, Importe=imp)
예제 #2
0
    def format_wrt(self, output_file, dat):
        self.logger.debug('dumping contents of dat: {}'.format(repr(dat)))

        def save(xo):
            tmp_dir = tempfile.gettempdir()
            f = os.path.join(tmp_dir, HelperStr.random_str())
            writedom_cfdi(xo.toDOM(), self.__MAKEUP_PROPOS, f)
            return f

        c = Comprobante()
        c.Version = '3.3'
        c.Serie = dat['CONTROL']['SERIE']  # optional
        c.Folio = dat['CONTROL']['FOLIO']  # optional
        c.Fecha = dat['TIME_STAMP']
        c.Sello = '__DIGITAL_SIGN_HERE__'
        c.FormaPago = "01"  # optional
        c.NoCertificado = dat['NUMERO_CERTIFICADO']
        c.Certificado = dat['CERT_B64']
        c.SubTotal = dat['TOTALES']['IMPORTE_SUM']
        c.Total = dat['TOTALES']['MONTO_TOTAL']
        if dat['MONEDA']['ISO_4217'] == 'MXN':
            c.TipoCambio = 1
        else:
            # optional (requerido en ciertos casos)
            c.TipoCambio = truncate(dat['MONEDA']['TIPO_DE_CAMBIO'], self.__NDECIMALS)
        c.Moneda = dat['MONEDA']['ISO_4217']
        c.TipoDeComprobante = 'I'
        c.MetodoPago = "PUE"  # optional and hardcode until ui can suply such value
        c.LugarExpedicion = dat['LUGAR_EXPEDICION']

        c.Emisor = pyxb.BIND()
        c.Emisor.Nombre = dat['EMISOR']['RAZON_SOCIAL']  # optional
        c.Emisor.Rfc = dat['EMISOR']['RFC']
        c.Emisor.RegimenFiscal = dat['EMISOR']['REGIMEN_FISCAL']

        c.Receptor = pyxb.BIND()
        c.Receptor.Nombre = dat['RECEPTOR']['RAZON_SOCIAL']  # optional
        c.Receptor.Rfc = dat['RECEPTOR']['RFC']
        c.Receptor.UsoCFDI = dat['RECEPTOR']['USO_CFDI']

        c.Conceptos = pyxb.BIND()
        for i in dat['CONCEPTOS']:
            c.Conceptos.append(pyxb.BIND(
                Cantidad=i['CANTIDAD'],
                ClaveUnidad=i['UNIDAD'],
                ClaveProdServ=i['PRODSERV'],
                Descripcion=i['DESCRIPCION'],
                ValorUnitario=i['PRECIO_UNITARIO'],
                NoIdentificacion=i['SKU'],  # optional
                Importe=truncate(i['IMPORTE'], self.__NDECIMALS),
                Impuestos=self.__tag_impuestos(i)
            ))

        def traslado(c, tc, imp):
            return pyxb.BIND(TipoFactor='Tasa',
                Impuesto=c, TasaOCuota=tc, Importe=imp)

        def zigma(v):
            z = 0
            for w in v:
                z += w['importe']
            return z

        c.Impuestos = pyxb.BIND(
            TotalImpuestosRetenidos=0,
            TotalImpuestosTrasladados=zigma(dat['TRASLADOS']),
            Traslados=pyxb.BIND(
                *tuple([traslado(t['clave'], self.__place_tasa(t['tasa']), t['importe']) for t in dat['TRASLADOS']])
            )
        )

        tmp_file = save(c)
        with open(output_file, 'w') as a:
            a.write(sign_cfdi(dat['KEY_PRIVATE'], dat['XSLT_SCRIPT'], tmp_file))
        os.remove(tmp_file)
예제 #3
0
 def traslado(c, tc, imp):
     return pyxb.BIND(TipoFactor='Tasa',
         Impuesto=c, TasaOCuota=tc, Importe=imp)
예제 #4
0
    def do_disable(self, args):
        try:
            doParser = self.arg_disable()
            doArgs = doParser.parse_args(shlex.split(args))

            org = org_utils.org_get(self.api, doArgs.org)
            if org is None:
                printer.out(
                    "There is no organization matching [" + doArgs.org + "].",
                    printer.OK)
                return 0

            printer.out("Getting target platform list for [" + org.name +
                        "] . . .")
            allTargetPlatforms = self.api.Orgs(
                org.dbId).Targetplatforms.Getall()
            allTargetPlatforms = allTargetPlatforms.targetPlatforms.targetPlatform

            if len(allTargetPlatforms) == 0:
                printer.out(
                    "There is no target platforms in [" + org.name + "].",
                    printer.WARNING)
                return 0

            all_targetplatforms = targetPlatforms()
            all_targetplatforms.targetPlatforms = pyxb.BIND()

            allTargetPlatforms = compare(allTargetPlatforms,
                                         doArgs.targetPlatforms, "name")

            if len(allTargetPlatforms) == 0:
                listName = ""
                for tpname in doArgs.targetPlatforms:
                    listName = listName + tpname + " "
                printer.out(
                    "There is no target platforms matching [" + listName +
                    "].", printer.ERROR)
                return 2

            for item in allTargetPlatforms:
                targetPlatformToDisable = targetPlatform()
                targetPlatformToDisable = item
                targetPlatformToDisable.active = False
                targetPlatformToDisable.access = False
                printer.out("Disabling [" + item.name + "].")
                all_targetplatforms.targetPlatforms.append(
                    targetPlatformToDisable)

            result = self.api.Orgs(org.dbId).Targetplatforms.Updateaccess(
                body=all_targetplatforms)

            if result is None or len(
                    result.targetPlatforms.targetPlatform) == 0:
                printer.out(
                    "The target platforms(s) selected are already disabled",
                    printer.WARNING)
                return 0
            sentenceReturn = "Target Platform(s)"
            for tp in result.targetPlatforms.targetPlatform:
                sentenceReturn = sentenceReturn + " " + tp.name + " "
            printer.out(sentenceReturn + "has/have been disabled.", printer.OK)

            return 0

        except ArgumentParserError as e:
            printer.out("In Arguments: " + str(e), printer.ERROR)
            self.help_disable()
        except Exception as e:
            return handle_uforge_exception(e)
예제 #5
0
def append_instance_to_deployment(deployment, my_instance):
    deployment.instances = pyxb.BIND()
    deployment.instances._ExpandedName = pyxb.namespace.ExpandedName(
        Namespace, 'Instances')
    deployment.instances.append(my_instance)
예제 #6
0
from __future__ import print_function
import pyxb
import po4
import address
import pyxb.binding.datatypes as xs

po = po4.purchaseOrder(orderDate=xs.date(1999, 10, 20))
po.shipTo = address.USAddress('Alice Smith', '123 Maple Street', 'Anytown',
                              'AK', 12341)
po.billTo = address.USAddress('Robert Smith', '8 Oak Avenue', 'Anytown', 'AK',
                              12341)
po.items = pyxb.BIND(pyxb.BIND('Lapis necklace', 1, 99.95, partNum='833-AA'),
                     pyxb.BIND('Plastic necklace', 4, 3.95, partNum='833-AB'))

print(po.toxml("utf-8").decode('utf-8'))
예제 #7
0
    def format_wrt(self, output_file, dat):
        self.logger.debug('dumping contents of dat: {}'.format(repr(dat)))

        def save(xo):
            tmp_dir = tempfile.gettempdir()
            f = os.path.join(tmp_dir, HelperStr.random_str())
            writedom_cfdi(xo.toDOM(), self.__MAKEUP_PROPOS, f)
            return f

        c = Comprobante()
        c.Version = '3.3'
        c.Serie = dat['CONTROL']['SERIE']  # optional
        c.Folio = dat['CONTROL']['FOLIO']  # optional
        c.Fecha = dat['TIME_STAMP']
        c.Sello = '__DIGITAL_SIGN_HERE__'
        c.FormaPago = dat["FORMA_PAGO"]['CLAVE']  # optional
        c.NoCertificado = dat['NUMERO_CERTIFICADO']
        c.Certificado = dat['CERT_B64']
        c.SubTotal = dat['TOTALES']['IMPORTE_SUM']
        c.Descuento = dat['TOTALES'][
            'DESCTO_SUM'] if dat['TOTALES']['DESCTO_SUM'] > 0 else None
        c.Total = dat['TOTALES']['MONTO_TOTAL']
        if dat['MONEDA']['ISO_4217'] == 'MXN':
            c.TipoCambio = 1
        else:
            # optional (requerido en ciertos casos)
            c.TipoCambio = truncate(dat['MONEDA']['TIPO_DE_CAMBIO'],
                                    self.__NDECIMALS)
        c.Moneda = dat['MONEDA']['ISO_4217']
        c.TipoDeComprobante = 'I'
        c.MetodoPago = dat['METODO_PAGO']  # optional
        c.LugarExpedicion = dat['LUGAR_EXPEDICION']

        c.Emisor = pyxb.BIND()
        c.Emisor.Nombre = dat['EMISOR']['RAZON_SOCIAL']  # optional
        c.Emisor.Rfc = dat['EMISOR']['RFC']
        c.Emisor.RegimenFiscal = dat['EMISOR']['REGIMEN_FISCAL']

        c.Receptor = pyxb.BIND()
        c.Receptor.Nombre = dat['RECEPTOR']['RAZON_SOCIAL']  # optional
        c.Receptor.Rfc = dat['RECEPTOR']['RFC']
        c.Receptor.UsoCFDI = dat['RECEPTOR']['USO_CFDI']

        c.Conceptos = pyxb.BIND()
        for i in dat['CONCEPTOS']:
            c.Conceptos.append(
                pyxb.BIND(
                    Cantidad=i['CANTIDAD'],
                    ClaveUnidad=i['UNIDAD'],
                    ClaveProdServ=i['PRODSERV'],
                    Descripcion=i['DESCRIPCION'],
                    ValorUnitario=i['PRECIO_UNITARIO'],
                    NoIdentificacion=i['SKU'],  # optional
                    Importe=truncate(i['IMPORTE'], self.__NDECIMALS),
                    Descuento=i['DESCTO'] if i['DESCTO'] > 0 else None,
                    Impuestos=self.__tag_impuestos(i)
                    if i['TASA_IMPUESTO'] > 0 else None))

        def traslado(c, tc, imp):
            return pyxb.BIND(TipoFactor='Tasa',
                             Impuesto=c,
                             TasaOCuota=tc,
                             Importe=imp)

        def zigma(v):
            z = Decimal(0)
            for w in v:
                z += self.__narf(w['importe'])
            return float(z)

        c.Impuestos = pyxb.BIND(
            TotalImpuestosRetenidos=0,
            TotalImpuestosTrasladados=zigma(dat['TRASLADOS']),
            Traslados=pyxb.BIND(*tuple([
                traslado(t['clave'], self.__place_tasa(t['tasa']),
                         t['importe']) for t in dat['TRASLADOS']
            ])))

        tmp_file = save(c)
        HelperStr.edit_pattern('TipoCambio="1.0"', 'TipoCambio="1"',
                               tmp_file)  # XXX: Horrible workaround
        HelperStr.edit_pattern(
            '(Descuento=)"([0-9]*(\.[0-9]{0,1})?)"',
            lambda x: 'Descuento="%.2f"' % (float(x.group(2)), ), tmp_file)
        HelperStr.edit_pattern(
            '(Importe=)"([0-9]*(\.[0-9]{0,1})?)"', lambda x: 'Importe="%.2f"' %
            (float(x.group(2)), ), tmp_file)
        with open(output_file, 'w', encoding="utf-8") as a:
            a.write(sign_cfdi(dat['KEY_PRIVATE'], dat['XSLT_SCRIPT'],
                              tmp_file))
        os.remove(tmp_file)
예제 #8
0
def mdk_builder(target, source, env):
    prj = mdk_xml_schema.Project()
    prj.ToolsetName = 'ARM'
    prj.Device = 'ARMCM0'
    prj.useUlib = 1
    #    target_path = target[0].path[0: target[0].path.rfind("\\")+1]
    #    target_name = target[0].path[target[0].path.rfind("\\")+1: len(target[0].path)]
    prj_dir = os.path.join(env['PROJ_DIR'].srcnode().abspath, 'mdk')
    if os.path.exists(prj_dir) == False:
        os.mkdir(prj_dir)
    jlink_script_src_dir = os.path.join(
        env.Dir('.').abspath, 'tools\\prog\\LinkedSemi\\LE501X.jlinkscript')
    jlink_script_dst_dir = os.path.join(prj_dir, 'JLinkSettings.jlinkscript')

    #    print(jlink_script_src_dir)
    #    print(jlink_script_dst_dir)
    try:
        shutil.copy(jlink_script_src_dir, jlink_script_dst_dir)
    except IOError as e:
        print("Unable to copy jlink script file")
    except:
        print("Unexpected error:", sys.exc_info())

    inc_path_str = ""
    for node_path in env.Dir(env['CPPPATH']):
        inc_path_str = inc_path_str + os.path.relpath(node_path.abspath,
                                                      prj_dir) + ";"
    prj.IncludePath = inc_path_str

    scat_file_str = os.path.relpath((env['LINKSCRIPT']).srcnode().abspath,
                                    prj_dir)
    prj.ScatterFile = scat_file_str

    prj.CDefines = ""
    prj.COptions = "--c99 -O2 --wchar32"
    prj.LinkOptions = "--datacompressor=off"
    beforecompile1 = mdk_xml_schema.UserAction('')
    beforecompile2 = mdk_xml_schema.UserAction('')
    beforebuild1 = mdk_xml_schema.UserAction('')
    beforebuild2 = mdk_xml_schema.UserAction('')
    afterbuild1 = mdk_xml_schema.UserAction(
        os.path.relpath(env.Dir("#").abspath, prj_dir) +
        '\\tools\\le501x\\after_build.bat @L ' +
        os.path.relpath(env.Dir("#").abspath, prj_dir) + ' ' +
        env['STACK_HEX_PATH'])
    afterbuild2 = mdk_xml_schema.UserAction('')
    prj.User = pyxb.BIND(BeforeCompile1=beforecompile1,
                         BeforeCompile2=beforecompile2,
                         BeforeBuild1=beforebuild1,
                         BeforeBuild2=beforebuild2,
                         AfterBuild1=afterbuild1,
                         AfterBuild2=afterbuild2)

    #c_list = []
    #asm_list = []
    obj_list = []
    lib_list = []
    all_file_list = []
    for build_src in source:
        src = build_src.srcnode().path
        filepath, extension = os.path.splitext(src)
        all_file_list.append(os.path.relpath(src, prj_dir))
        #if extension == '.c':
        #    c_list.append(os.path.relpath(src,prj_dir))
        #elif extension == '.s' or extension == 'S':
        #    asm_list.append(os.path.relpath(src,prj_dir))
        #else:
        if extension != '.c' and extension != '.C' and extension != '.s' and extension != '.S':
            obj_list.append(os.path.relpath(src, prj_dir))
    if 'LIBS' in env:
        for lib in env['LIBS']:
            libpath, libext = os.path.splitext(lib.path)
            all_file_list.append(os.path.relpath(lib.path, prj_dir))
            if libext == '.o':
                obj_list.append(os.path.relpath(lib.path, prj_dir))
            else:
                lib_list.append(os.path.relpath(lib.path, prj_dir))
    #file_list = file_list_build(c_list,1) + file_list_build(asm_list,2) + file_list_build(obj_list,3) + file_list_build(lib_list,4)

    group_name_list = []
    group_file_list = []
    group_build_file_list = []
    app_file_list = []
    for file_x in all_file_list:
        count = file_x.count("..\\")
        if count == 1:
            app_file_list.append(file_x)
        else:
            group_name = file_x.replace("..\\", "").split('\\')[0]
            group_name = group_name.split('.')[0]
            if group_name in group_name_list:
                index = group_name_list.index(group_name)
                group_file_list[index].append(file_x)
            else:
                group_name_list.append(group_name)
                temp_file_list = []
                temp_file_list.append(file_x)
                group_file_list.append(temp_file_list)

    group_list = []

    for group_name in group_name_list:
        index = group_name_list.index(group_name)
        group_build_file_list.append(
            new_file_list_build(group_file_list[index]))
        group_list.append(
            pyxb.BIND(group_name, pyxb.BIND(*group_build_file_list[index])))

    group_list.append(
        pyxb.BIND("app", pyxb.BIND(*new_file_list_build(app_file_list))))
    prj.Groups = pyxb.BIND(*group_list)

    filename = target[0].abspath + '.xml'
    with open(filename, 'wb') as file_obj:
        file_obj.write(prj.toxml("utf-8"))

    #print(os.path.isfile(os.path.join(prj_dir,os.path.basename(target[0].path)+'.uvprojx')))
    if os.path.isfile(
            os.path.join(prj_dir,
                         os.path.basename(target[0].path) +
                         '.uvprojx')) == True:
        os.remove(
            os.path.join(prj_dir,
                         os.path.basename(target[0].path) + '.uvprojx'))
    if os.path.isfile(
            os.path.join(prj_dir,
                         os.path.basename(target[0].path) +
                         '.uvoptx')) == True:
        os.remove(
            os.path.join(prj_dir,
                         os.path.basename(target[0].path) + '.uvoptx'))

    proj_path = os.path.join(prj_dir,
                             os.path.basename(target[0].path) + '.uvprojx')
    proj_gen = env['UV'] + ' ' + proj_path + ' -i ' + filename
    proj_build = env['UV'] + ' -b ' + proj_path
    complete = subprocess.run(proj_gen, shell=True)
    return complete.returncode
예제 #9
0
 def retencion(c, imp):
     return pyxb.BIND(Impuesto=c, Importe=imp)
예제 #10
0
    def format_wrt(self, output_file, dat):

        self.logger.debug('dumping contents of dat: {}'.format(repr(dat)))

        def save(xo):
            tmp_dir = tempfile.gettempdir()
            f = os.path.join(tmp_dir, HelperStr.random_str())
            writedom_cfdi(xo.toDOM(), self.__MAKEUP_PROPOS, f)
            return f

        def wa(tf):
            """
            The sundry work arounds to apply
            """
            def two_dec_attr(attr):
                HelperStr.edit_pattern(
                    '(' + attr + '=)"([0-9]*(\.[0-9]{0,1})?)"',
                    lambda x: attr + '="%.2f"' % (float(x.group(2)),), tf
                )

            HelperStr.edit_pattern('ValorUnitario="0.0"', 'ValorUnitario="0"', tf)
            HelperStr.edit_pattern('Importe="0(\.0{1})"', 'Importe="0"', tf)
            HelperStr.edit_pattern('Cantidad="1.0"', 'Cantidad="1"', tf)
            HelperStr.edit_pattern('TipoCambio="1.0"', 'TipoCambio="1"', tf)
            HelperStr.edit_pattern('Total="0.0"', 'Total="0"', tf)
            HelperStr.edit_pattern('SubTotal="0.0"', 'SubTotal="0"', tf)

            for a in ['Monto', 'ImpSaldoInsoluto', 'ImpPagado', 'ImpSaldoAnt']:
                two_dec_attr(a)

        def wrap_up(tf, of):
            with open(of, 'w', encoding="utf-8") as a:
                a.write(
                    sign_cfdi(
                        dat['KEY_PRIVATE'],
                        dat['XSLT_SCRIPT'],
                        tf
                    )
                )
            os.remove(tf)

        def paste_tag_pagos(tf, elements):

            import xml.dom.minidom

            doc = xml.dom.minidom.Document()
            base_ns = "http://www.sat.gob.mx/Pagos"
            pagos = doc.createElementNS(base_ns, 'pago10:Pagos')
            pagos.setAttribute("xmlns:pago10", base_ns)
            pagos.setAttribute("xsi:schemaLocation", "http://www.sat.gob.mx/Pagos http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos10.xsd")
            pagos.setAttribute("Version","1.0")

            for d in elements:
                payment = doc.createElement('pago10:Pago')
                payment.setAttribute('NumOperacion', d['NUMERO_OPERACION'])
                payment.setAttribute('Monto', d['MONTO'])
                payment.setAttribute('MonedaP', d['ISO_4217'])
                payment.setAttribute('FormaDePagoP', d['CLAVE'])
                payment.setAttribute('FechaPago', d['TIME_STAMP'])

                dr = doc.createElement('pago10:DoctoRelacionado')
                dr.setAttribute('IdDocumento', d['UUID_DOC'])
                dr.setAttribute('ImpSaldoInsoluto', d['IMP_SALDO_INSOLUTO'])
                dr.setAttribute('ImpSaldoAnt', d['IMP_SALDO_ANT'])
                dr.setAttribute('ImpPagado', d['IMP_PAGADO'])
                dr.setAttribute('MonedaDR', d['MONEDA_DR'])
                dr.setAttribute('NumParcialidad', '1')
                dr.setAttribute('MetodoDePagoDR', 'PPD')
                payment.appendChild(dr)

                pagos.appendChild(payment)

            doc.appendChild(pagos)
            content_xml = output = doc.toprettyxml()
            chunk = "{}\n{}\n{}\n{}".format('<cfdi:Complemento>',
                                  content_xml[22:], # omits xml declaration
                                  '</cfdi:Complemento>',
                                  '</cfdi:Comprobante>')
            HelperStr.edit_pattern('</cfdi:Comprobante>', chunk, tf)


        c = Comprobante()
        c.Version = '3.3'
        c.Fecha = dat['TIME_STAMP']
        c.Sello = '__DIGITAL_SIGN_HERE__'

        c.Receptor = pyxb.BIND()
        c.Receptor.Nombre = dat['RECEPTOR']['RAZON_SOCIAL']  # optional
        c.Receptor.Rfc = dat['RECEPTOR']['RFC']
        c.Receptor.UsoCFDI = dat['RECEPTOR']['USO_CFDI']

        c.Emisor = pyxb.BIND()
        c.Emisor.Nombre = dat['EMISOR']['RAZON_SOCIAL']  # optional
        c.Emisor.Rfc = dat['EMISOR']['RFC']
        c.Emisor.RegimenFiscal = dat['EMISOR']['REGIMEN_FISCAL']

        c.LugarExpedicion = dat['LUGAR_EXPEDICION']

        c.Serie = dat['CONTROL']['SERIE']  # optional
        c.Folio = dat['CONTROL']['FOLIO']  # optional
        c.NoCertificado = dat['NUMERO_CERTIFICADO']
        c.Certificado = dat['CERT_B64']

        c.TipoDeComprobante = 'P'
        c.Total = '0'
        c.SubTotal = '0'
        c.Moneda = dat['MONEDA']['ISO_4217']

        c.Conceptos = pyxb.BIND()
        for i in dat['CONCEPTOS']:
            c.Conceptos.append(pyxb.BIND(
                Cantidad=i['CANTIDAD'],
                ClaveUnidad=i['UNIDAD'],
                ClaveProdServ=i['PRODSERV'],
                Descripcion=i['DESCRIPCION'],
                ValorUnitario=i['PRECIO_UNITARIO'],
                Importe=i['IMPORTE']
        ))

        tmp_file = save(c)
        paste_tag_pagos(tmp_file, dat['COMPLEMENTO_PAGOS'])
        wa(tmp_file)
        wrap_up(tmp_file, output_file)