Ejemplo n.º 1
0
def escribir_factura(dic, archivo, agrega=False):
    if '/json' in sys.argv:
        import json
        json.dump([dic], archivo, sort_keys=True, indent=4)
    else:
        dic['tipo_reg'] = 0
        archivo.write(escribir(dic, ENCABEZADO))
        if 'tributos' in dic:
            for it in dic['tributos']:
                it['tipo_reg'] = 1
                archivo.write(escribir(it, TRIBUTO))
        if 'iva' in dic:
            for it in dic['iva']:
                it['tipo_reg'] = 2
                archivo.write(escribir(it, IVA))
        if 'cbtes_asoc' in dic:
            for it in dic['cbtes_asoc']:
                it['tipo_reg'] = 3
                archivo.write(escribir(it, CMP_ASOC))
        if 'opcionales' in dic:
            for it in dic['opcionales']:
                it['tipo_reg'] = 6
                archivo.write(escribir(it, OPCIONAL))

    if '/dbf' in sys.argv:
        formatos = [
            ('Encabezado', ENCABEZADO, [dic]),
            ('Tributo', TRIBUTO, dic.get('tributos', [])),
            ('Iva', IVA, dic.get('iva', [])),
            ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
            ('Datos Opcionales', OPCIONAL, dic.get("opcionales", [])),
        ]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 2
0
def escribir_factura(dic, archivo, agrega=False):
    if '/json' in sys.argv:
        import json
        json.dump([dic], archivo, sort_keys=True, indent=4)
    else:
        dic['tipo_reg'] = 0
        archivo.write(escribir(dic, ENCABEZADO))
        if 'tributos' in dic:
            for it in dic['tributos']:
                it['tipo_reg'] = 1
                archivo.write(escribir(it, TRIBUTO))
        if 'iva' in dic:
            for it in dic['iva']:
                it['tipo_reg'] = 2
                archivo.write(escribir(it, IVA))
        if 'cbtes_asoc' in dic:
            for it in dic['cbtes_asoc']:
                it['tipo_reg'] = 3
                archivo.write(escribir(it, CMP_ASOC))
        if 'opcionales' in dic:
            for it in dic['opcionales']:
                it['tipo_reg'] = 6
                archivo.write(escribir(it, OPCIONAL))

    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), 
                    ('Tributo', TRIBUTO, dic.get('tributos', [])), 
                    ('Iva', IVA, dic.get('iva', [])), 
                    ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
                    ('Datos Opcionales', OPCIONAL, dic.get("opcionales", [])),
                    ]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 3
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = TIPOS_REG[0]
    dic['cbte_nro'] = dic.get('cbt_desde')
    archivo.write(escribir(dic, ENCABEZADO, contraer_fechas=True))
    if 'tributos' in dic:
        for it in dic['tributos']:
            it['tipo_reg'] = TIPOS_REG[1]
            archivo.write(escribir(it, TRIBUTO))
    if 'iva' in dic:
        for it in dic['iva']:
            it['tipo_reg'] = TIPOS_REG[2]
            archivo.write(escribir(it, IVA))
    if 'cbtes_asoc' in dic:
        for it in dic['cbtes_asoc']:
            it['tipo_reg'] = TIPOS_REG[3]
            archivo.write(escribir(it, CMP_ASOC))
    if 'detalles' in dic:
        for it in dic['detalles']:
            it['tipo_reg'] = TIPOS_REG[4]
            it['importe'] = it['imp_subtotal']
            archivo.write(escribir(it, DETALLE))
            
    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), ('Tributo', TRIBUTO, dic.get('tributos', [])), ('Iva', IVA, dic.get('iva', [])), ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])), ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 4
0
def navegar_node_modules(x, y, mensaje):
    if y == 430:
        hacer_click(x, y)
        hacer_click(x, y)
    if x == 100:
        hacer_click(x, y)
        escribir(mensaje)
Ejemplo n.º 5
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = TIPOS_REG[0]
    dic['cbte_nro'] = dic.get('cbt_desde')
    archivo.write(escribir(dic, ENCABEZADO, contraer_fechas=True))
    if 'tributos' in dic:
        for it in dic['tributos']:
            it['tipo_reg'] = TIPOS_REG[1]
            archivo.write(escribir(it, TRIBUTO))
    if 'iva' in dic:
        for it in dic['iva']:
            it['tipo_reg'] = TIPOS_REG[2]
            archivo.write(escribir(it, IVA))
    if 'cbtes_asoc' in dic:
        for it in dic['cbtes_asoc']:
            it['tipo_reg'] = TIPOS_REG[3]
            archivo.write(escribir(it, CMP_ASOC))
    if 'detalles' in dic:
        for it in dic['detalles']:
            it['tipo_reg'] = TIPOS_REG[4]
            it['importe'] = it['imp_subtotal']
            archivo.write(escribir(it, DETALLE))

    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]),
                    ('Tributo', TRIBUTO, dic.get('tributos', [])),
                    ('Iva', IVA, dic.get('iva', [])),
                    ('Comprobante Asociado', CMP_ASOC,
                     dic.get('cbtes_asoc', [])),
                    ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 6
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = 0
    archivo.write(escribir(dic, ENCABEZADO))
    for it in dic['detalles']:
        it['tipo_reg'] = 1
        archivo.write(escribir(it, DETALLE))
    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 7
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = 0
    archivo.write(escribir(dic, ENCABEZADO))
    for it in dic['detalles']:
        it['tipo_reg'] = 1
        archivo.write(escribir(it, DETALLE))
    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]),
                    ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 8
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = TIPOS_REG[0]
    archivo.write(escribir(dic, ENCABEZADO))
    for it in dic.get('detalles', []):
        it['tipo_reg'] = TIPOS_REG[1]
        archivo.write(escribir(it, DETALLE))
    if 'permisos' in dic:    
        for it in dic['permisos']:
            it['tipo_reg'] = TIPOS_REG[2]
            archivo.write(escribir(it, PERMISO))

    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), ('Permisos', PERMISO, dic.get('permisos', [])), ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])), ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 9
0
def escribir_factura(dic, archivo, agrega=False):
    dic['tipo_reg'] = TIPOS_REG[0]
    archivo.write(escribir(dic, ENCABEZADO))
    for it in dic.get('detalles', []):
        it['tipo_reg'] = TIPOS_REG[1]
        archivo.write(escribir(it, DETALLE))
    if 'permisos' in dic:    
        for it in dic['permisos']:
            it['tipo_reg'] = TIPOS_REG[2]
            archivo.write(escribir(it, PERMISO))

    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), ('Permisos', PERMISO, dic.get('permisos', [])), ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])), ('Detalles', DETALLE, dic.get('detalles', []))]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 10
0
def generar_encabezado(items):
    "Crear archivo de cabecera de facturas emitidas"

    periodo = items[0]["fecha_cbte"][:6]

    out = open("CABECERA_%s.txt" % periodo, "w")
    totales = format_as_dict(CAB_FAC_TIPO2)
    totales["periodo"] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)

    for item in items:
        vals = format_as_dict(CAB_FAC_TIPO1)
        vals["fecha_anulacion"] = ""
        for k in item.keys():
            vals[k] = item[k]
            if k in totales and k in IMPORTES:
                totales[k] = totales[k] + Decimal(item[k])
        vals["tipo_reg"] = "1"
        vals["ctl_fiscal"] = item.get("ctl_fiscal", " ")  # C para controlador
        vals["cbte_nro_reg"] = vals["cbt_numero"]
        vals["cant_hojas"] = "01"
        vals["transporte"] = "0"
        vals["categoria"] = categorias[item["categoria"].lower()]
        if vals["imp_moneda_id"] is None:
            vals["imp_moneda_id"] = "PES"
            vals["imp_moneda_ctz"] = "1.000"
        vals["alicuotas_iva"] = max(len(item.get("ivas", [])), 1)
        if vals["codigo_operacion"] is None:
            if int(item["tipo_cbte"]) in (19, 20, 21):
                vals["codigo_operacion"] = "E"
            else:
                vals["codigo_operacion"] = " "
        if vals["imp_tot_conc"] is None:
            vals["imp_tot_conc"] = "0"
        s = escribir(vals, CAB_FAC_TIPO1)
        out.write(s)

    totales["tipo_reg"] = "2"
    totales["cant_reg_tipo_1"] = str(len(items))
    totales["cuit"] = CUIT
    s = escribir(totales, CAB_FAC_TIPO2)
    out.write(s)
    out.close()
Ejemplo n.º 11
0
def generar_encabezado(items):
    "Crear archivo de cabecera de facturas emitidas"

    periodo = items[0]['fecha_cbte'][:6]

    out = open("CABECERA_%s.txt" % periodo, "w")
    totales = format_as_dict(CAB_FAC_TIPO2)
    totales['periodo'] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)
    
    for item in items:
        vals = format_as_dict(CAB_FAC_TIPO1)
        vals['fecha_anulacion'] = ''
        for k in item.keys():
            vals[k] = item[k]
            if k in totales and k in IMPORTES:
                totales[k] = totales[k] + Decimal(item[k])
        vals['tipo_reg'] = '1'
        vals['ctl_fiscal'] = item.get('ctl_fiscal', ' ')  # C para controlador
        vals['cbte_nro_reg'] = vals['cbt_numero']
        vals['cant_hojas'] = '01'
        vals['transporte'] = '0'
        vals['categoria'] = categorias[item['categoria'].lower()]
        if vals['imp_moneda_id'] is None:
            vals['imp_moneda_id'] = 'PES'
            vals['imp_moneda_ctz'] = '1.000'
        vals['alicuotas_iva'] = max(len(item.get('ivas', [])), 1)
        if vals['codigo_operacion'] is None:
            if int(item['tipo_cbte']) in (19, 20, 21):
                vals['codigo_operacion'] = 'E'                
            else:
                vals['codigo_operacion'] = ' '
        if vals['imp_tot_conc'] is None:
            vals['imp_tot_conc'] = '0'
        s = escribir(vals, CAB_FAC_TIPO1)
        out.write(s)
        
    totales['tipo_reg'] = '2'
    totales['cant_reg_tipo_1'] = str(len(items))
    totales['cuit'] = CUIT
    s = escribir(totales, CAB_FAC_TIPO2)
    out.write(s)
    out.close()
Ejemplo n.º 12
0
def generar_encabezado(items):
    "Crear archivo de cabecera de facturas emitidas"

    periodo = items[0]['fecha_cbte'][:6]

    out = open("CABECERA_%s.txt" % periodo, "w")
    totales = format_as_dict(CAB_FAC_TIPO2)
    totales['periodo'] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)

    for item in items:
        vals = format_as_dict(CAB_FAC_TIPO1)
        vals['fecha_anulacion'] = ''
        for k in item.keys():
            vals[k] = item[k]
            if k in totales and k in IMPORTES:
                totales[k] = totales[k] + Decimal(item[k])
        vals['tipo_reg'] = '1'
        vals['ctl_fiscal'] = item.get('ctl_fiscal', ' ')  # C para controlador
        vals['cbte_nro_reg'] = vals['cbt_numero']
        vals['cant_hojas'] = '01'
        vals['transporte'] = '0'
        vals['categoria'] = categorias[item['categoria'].lower()]
        if vals['imp_moneda_id'] is None:
            vals['imp_moneda_id'] = 'PES'
            vals['imp_moneda_ctz'] = '1.000'
        vals['alicuotas_iva'] = max(len(item.get('ivas', [])), 1)
        if vals['codigo_operacion'] is None:
            if int(item['tipo_cbte']) in (19, 20, 21):
                vals['codigo_operacion'] = 'E'
            else:
                vals['codigo_operacion'] = ' '
        if vals['imp_tot_conc'] is None:
            vals['imp_tot_conc'] = '0'
        s = escribir(vals, CAB_FAC_TIPO1)
        out.write(s)

    totales['tipo_reg'] = '2'
    totales['cant_reg_tipo_1'] = str(len(items))
    totales['cuit'] = CUIT
    s = escribir(totales, CAB_FAC_TIPO2)
    out.write(s)
    out.close()
Ejemplo n.º 13
0
def escribir_facturas(encabezados, archivo, agrega=False):
    if "/json" in sys.argv:
        import json

        facturas = []
        for dic in encabezados:
            factura = dic.copy()
            facturas.append(factura)
            # ajsutes por compatibilidad hacia atras y con pyfepdf
            factura["fecha_vto"] = factura.get("fch_venc_cae")
            if "iva" in factura:
                factura["ivas"] = factura.get("iva", [])
                del factura["iva"]
        json.dump(facturas, archivo, sort_keys=True, indent=4)
    else:
        for dic in encabezados:
            dic["tipo_reg"] = 0
            archivo.write(escribir(dic, ENCABEZADO))
            if "tributos" in dic:
                for it in dic["tributos"]:
                    it["tipo_reg"] = 1
                    archivo.write(escribir(it, TRIBUTO))
            if "iva" in dic or "ivas" in dic:
                for it in dic.get("iva", dic.get("ivas")):
                    it["tipo_reg"] = 2
                    archivo.write(escribir(it, IVA))
            if "cbtes_asoc" in dic:
                for it in dic["cbtes_asoc"]:
                    it["tipo_reg"] = 3
                    archivo.write(escribir(it, CMP_ASOC))
            if "opcionales" in dic:
                for it in dic["opcionales"]:
                    it["tipo_reg"] = 6
                    archivo.write(escribir(it, OPCIONAL))

    if "/dbf" in sys.argv:
        formatos = [
            ("Encabezado", ENCABEZADO, encabezados),
            ("Tributo", TRIBUTO, dic.get("tributos", [])),
            ("Iva", IVA, dic.get("iva", [])),
            ("Comprobante Asociado", CMP_ASOC, dic.get("cbtes_asoc", [])),
            ("Datos Opcionales", OPCIONAL, dic.get("opcionales", [])),
        ]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 14
0
def escribir_facturas(encabezados, archivo, agrega=False):
    if '/json' in sys.argv:
        import json
        facturas = []
        for dic in encabezados:
            factura = dic.copy()
            facturas.append(factura)
            # ajsutes por compatibilidad hacia atras y con pyfepdf
            factura['fecha_vto'] = factura.get('fch_venc_cae')
            if 'iva' in factura:
                factura['ivas'] = factura.get('iva', [])
                del factura['iva']
        json.dump(facturas, archivo, sort_keys=True, indent=4)
    else:
        for dic in encabezados:
            dic['tipo_reg'] = 0
            archivo.write(escribir(dic, ENCABEZADO))
            if 'tributos' in dic:
                for it in dic['tributos']:
                    it['tipo_reg'] = 1
                    archivo.write(escribir(it, TRIBUTO))
            if 'iva' in dic or 'ivas' in dic:
                for it in dic.get('iva', dic.get('ivas')):
                    it['tipo_reg'] = 2
                    archivo.write(escribir(it, IVA))
            if 'cbtes_asoc' in dic:
                for it in dic['cbtes_asoc']:
                    it['tipo_reg'] = 3
                    archivo.write(escribir(it, CMP_ASOC))
            if 'opcionales' in dic:
                for it in dic['opcionales']:
                    it['tipo_reg'] = 6
                    archivo.write(escribir(it, OPCIONAL))

    if '/dbf' in sys.argv:
        formatos = [
            ('Encabezado', ENCABEZADO, encabezados),
            ('Tributo', TRIBUTO, dic.get('tributos', [])),
            ('Iva', IVA, dic.get('iva', [])),
            ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
            ('Datos Opcionales', OPCIONAL, dic.get("opcionales", [])),
        ]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 15
0
def escribir_facturas(encabezados, archivo, agrega=False):
    if '/json' in sys.argv:
        import json
        facturas = []
        for dic in encabezados:
            factura = dic.copy()
            facturas.append(factura)
            # ajsutes por compatibilidad hacia atras y con pyfepdf
            factura['fecha_vto'] = factura.get('fch_venc_cae')
            if 'iva' in factura:
                factura['ivas'] = factura.get('iva', [])
                del factura['iva']
        json.dump(facturas, archivo, sort_keys=True, indent=4)
    else:
        for dic in encabezados:
            dic['tipo_reg'] = 0
            archivo.write(escribir(dic, ENCABEZADO))
            if 'tributos' in dic:
                for it in dic['tributos']:
                    it['tipo_reg'] = 1
                    archivo.write(escribir(it, TRIBUTO))
            if 'iva' in dic or 'ivas' in dic:
                for it in dic.get('iva', dic.get('ivas')):
                    it['tipo_reg'] = 2
                    archivo.write(escribir(it, IVA))
            if 'cbtes_asoc' in dic:
                for it in dic['cbtes_asoc']:
                    it['tipo_reg'] = 3
                    archivo.write(escribir(it, CMP_ASOC))
            if 'opcionales' in dic:
                for it in dic['opcionales']:
                    it['tipo_reg'] = 6
                    archivo.write(escribir(it, OPCIONAL))

    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, encabezados), 
                    ('Tributo', TRIBUTO, dic.get('tributos', [])), 
                    ('Iva', IVA, dic.get('iva', [])), 
                    ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
                    ('Datos Opcionales', OPCIONAL, dic.get("opcionales", [])),
                    ]
        guardar_dbf(formatos, agrega, conf_dbf)
Ejemplo n.º 16
0
def generar_detalle(items):
    "Crear archivo de detalle de facturas emitidas"

    periodo = items[0]['fecha_cbte'][:6]

    out = open("DETALLE_%s.txt" % periodo, "w")

    # recorro las facturas y detalles de artículos vendidos:
    for item in items:
        for it in item.get('detalles', [{}]):
            vals = format_as_dict(DETALLE)
            # datos generales de la factura:
            vals['tipo_reg'] = '1'
            for k in ('tipo_cbte', 'fecha_cbte', 'punto_vta', 'cbt_numero'):
                vals[k] = item[k]
            vals['cbte_nro_reg'] = item['cbt_numero']  # no hay varias hojas
            vals['ctl_fiscal'] = item.get('ctl_fiscal',
                                          ' ')  # C para controlador
            vals['anulacion'] = item.get('anulacion', ' ')
            # datos del artículo:
            vals['qty'] = it.get('qty', '1')  # cantidad
            vals['pro_umed'] = it.get('umed', '07')  # unidad de medida
            vals['pro_precio_uni'] = it.get('precio', item['imp_neto'])
            vals['imp_bonif'] = it.get('bonif', '0.00')
            vals['imp_ajuste'] = it.get('ajuste', '0.00')
            vals['imp_total'] = it.get('importe', '0.00')
            # iva
            if 'iva_id' in it:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(it['iva_id'])
                if iva_id in (1, 2):
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                if alicuota is None:
                    vals['gravado'] = 'E'
                else:
                    vals['gravado'] = 'G'
                vals['alicuota_iva'] = alicuota or '0.00'
            else:
                # tomar datos generales:
                vals['alicuota_iva'] = (Decimal(item['imp_total']) /
                                        Decimal(item['imp_neto']) - 1) * 100
                if float(item.get('impto_liq', item.get('imp_iva', 0))) == 0:
                    vals['gravado'] = 'E'
                else:
                    vals['gravado'] = 'G'
            # diseño libre: código de barras y descripción:
            vals['codigo'] = it.get('codigo', '')
            vals['ds'] = it.get('ds', '')
            s = escribir(vals, DETALLE)
            out.write(s)

    out.close()
Ejemplo n.º 17
0
def generar_detalle(items):
    "Crear archivo de detalle de facturas emitidas"
    
    periodo = items[0]['fecha_cbte'][:6]

    out = open("DETALLE_%s.txt" % periodo, "w")
    
    # recorro las facturas y detalles de artículos vendidos:
    for item in items:
        for it in item.get('detalles', [{}]):
            vals = format_as_dict(DETALLE)
            # datos generales de la factura:
            vals['tipo_reg'] = '1'
            for k in ('tipo_cbte', 'fecha_cbte', 'punto_vta', 'cbt_numero'):
                vals[k] = item[k]
            vals['cbte_nro_reg'] = item['cbt_numero']  # no hay varias hojas
            vals['ctl_fiscal'] = item.get('ctl_fiscal', ' ')  # C para controlador
            vals['anulacion'] = item.get('anulacion', ' ')
            # datos del artículo:
            vals['qty'] = it.get('qty', '1')  # cantidad
            vals['pro_umed'] = it.get('umed', '07')  # unidad de medida
            vals['pro_precio_uni'] = it.get('precio', item['imp_neto'])
            vals['imp_bonif'] = it.get('bonif', '0.00')
            vals['imp_ajuste'] = it.get('ajuste', '0.00')
            vals['imp_total'] = it.get('importe', '0.00')
            # iva
            if 'iva_id' in it and it['iva_id']:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(it['iva_id'])
                if iva_id in (1, 2):
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                if alicuota is None:
                    vals['gravado'] = 'E'
                else:
                    vals['gravado'] = 'G'
                vals['alicuota_iva'] = alicuota or '0.00'
            else:
                # tomar datos generales:
                vals['alicuota_iva'] = (Decimal(item['imp_total'])/Decimal(item['imp_neto']) - 1) * 100
                if float(item.get('impto_liq', item.get('imp_iva', 0))) == 0:
                    vals['gravado'] = 'E'
                else:
                    vals['gravado'] = 'G'
            # diseño libre: código de barras y descripción:
            vals['codigo'] = it.get('codigo', '')
            vals['ds'] = it.get('ds', '')
            s = escribir(vals, DETALLE)
            out.write(s)
        
    out.close()
Ejemplo n.º 18
0
def generar_detalle(items):
    "Crear archivo de detalle de facturas emitidas"

    periodo = items[0]["fecha_cbte"][:6]

    out = open("DETALLE_%s.txt" % periodo, "w")

    # recorro las facturas y detalles de artículos vendidos:
    for item in items:
        for it in item.get("detalles", [{}]):
            vals = format_as_dict(DETALLE)
            # datos generales de la factura:
            vals["tipo_reg"] = "1"
            for k in ("tipo_cbte", "fecha_cbte", "punto_vta", "cbt_numero"):
                vals[k] = item[k]
            vals["cbte_nro_reg"] = item["cbt_numero"]  # no hay varias hojas
            vals["ctl_fiscal"] = item.get("ctl_fiscal", " ")  # C para controlador
            vals["anulacion"] = item.get("anulacion", " ")
            # datos del artículo:
            vals["qty"] = it.get("qty", "1")  # cantidad
            vals["pro_umed"] = it.get("umed", "07")  # unidad de medida
            vals["pro_precio_uni"] = it.get("precio", item["imp_neto"])
            vals["imp_bonif"] = it.get("bonif", "0.00")
            vals["imp_ajuste"] = it.get("ajuste", "0.00")
            vals["imp_total"] = it.get("importe", "0.00")
            # iva
            if "iva_id" in it and it["iva_id"]:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(it["iva_id"])
                if iva_id in (1, 2):
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                if alicuota is None:
                    vals["gravado"] = "E"
                else:
                    vals["gravado"] = "G"
                vals["alicuota_iva"] = alicuota or "0.00"
            else:
                # tomar datos generales:
                vals["alicuota_iva"] = (Decimal(item["imp_total"]) / Decimal(item["imp_neto"]) - 1) * 100
                if float(item.get("impto_liq", item.get("imp_iva", 0))) == 0:
                    vals["gravado"] = "E"
                else:
                    vals["gravado"] = "G"
            # diseño libre: código de barras y descripción:
            vals["codigo"] = it.get("codigo", "")
            vals["ds"] = it.get("ds", "")
            s = escribir(vals, DETALLE)
            out.write(s)

    out.close()
Ejemplo n.º 19
0
def escribir_archivo(dic, nombre_archivo, agrega=True):
    archivo = open(nombre_archivo, agrega and "a" or "w")
    formatos = [('Encabezado', ENCABEZADO, [dic], 0), 
                ('Observacion', OBSERVACION, dic.get('observaciones', []), 'O'),
                ('Eventos', ERROR, dic.get('eventos', []), 'V'),
                ('Error', ERROR, dic.get('errores', []), 'E'),
                ]
    if '--json' in sys.argv:
        json.dump(dic, archivo, sort_keys=True, indent=4)
    elif '--dbf' in sys.argv:
        guardar_dbf(formatos, agrega, conf_dbf)
    else:
        for nombre, formato, registros, tipo_reg in formatos:
            for it in registros:
                it['tipo_reg'] = tipo_reg
                archivo.write(escribir(it, formato))
    archivo.close()
Ejemplo n.º 20
0
def escribir_archivo(cols, items, nombre_archivo, agrega=False):
    archivo = open(nombre_archivo, agrega and "a" or "w")
    ext = os.path.splitext(nombre_archivo)[1]
    if ext == '.csv':
        csv_writer = csv.writer(archivo, dialect='excel', delimiter=";")
        csv_writer.writerows([cols])
        csv_writer.writerows([[item[k] for k in cols] for item in items])
    elif ext == '.json':
        json.dump(items, archivo, sort_keys=True, indent=4)
    elif ext == '.dbf':
        formatos = [('Encabezado', ENCABEZADO, items), ]
        guardar_dbf(formatos, True, conf_dbf)
    elif ext == '.txt':
        for dic in items:
            dic['tipo_reg'] = 0
            archivo.write(escribir(dic, ENCABEZADO))
    else:
        raise RuntimeError("Extension de archivo desconocida: %s" % ext)
    archivo.close()
Ejemplo n.º 21
0
def escribir_factura(dic, archivo, agrega=False):
    if '/dbf' in sys.argv:
        formatos = [
            ('Encabezado', ENCABEZADO, [dic]),
            ('Tributo', TRIBUTO, dic.get('tributos', [])),
            ('Iva', IVA, dic.get('iva', [])),
            ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
            ('Detalles', DETALLE, dic.get('detalles', [])),
            ('Forma Pago', FORMA_PAGO, dic.get('formas_pago', [])),
        ]
        guardar_dbf(formatos, agrega, conf_dbf)
    elif '/json' in sys.argv:
        json.dump(dic, archivo, sort_keys=True, indent=4)
    else:
        dic['tipo_reg'] = TIPOS_REG[0]
        archivo.write(escribir(dic, ENCABEZADO, contraer_fechas=True))
        if 'tributos' in dic:
            for it in dic['tributos']:
                it['tipo_reg'] = TIPOS_REG[1]
                archivo.write(escribir(it, TRIBUTO))
        if 'iva' in dic:
            for it in dic['iva']:
                it['tipo_reg'] = TIPOS_REG[2]
                archivo.write(escribir(it, IVA))
        if 'cbtes_asoc' in dic:
            for it in dic['cbtes_asoc']:
                it['tipo_reg'] = TIPOS_REG[3]
                archivo.write(escribir(it, CMP_ASOC))
        if 'detalles' in dic:
            for it in dic['detalles']:
                it['tipo_reg'] = TIPOS_REG[4]
                it['importe'] = it['imp_subtotal']
                archivo.write(escribir(it, DETALLE))
        if 'forma_pago' in dic:
            for it in dic['fp']:
                it['tipo_reg'] = TIPOS_REG[5]
                archivo.write(escribir(it, FORMA_PAGO))
Ejemplo n.º 22
0
def escribir_factura(dic, archivo, agrega=False):
    if '/dbf' in sys.argv:
        formatos = [('Encabezado', ENCABEZADO, [dic]), 
                    ('Tributo', TRIBUTO, dic.get('tributos', [])), 
                    ('Iva', IVA, dic.get('iva', [])), 
                    ('Comprobante Asociado', CMP_ASOC, dic.get('cbtes_asoc', [])),
                    ('Detalles', DETALLE, dic.get('detalles', [])),
                    ('Forma Pago', FORMA_PAGO, dic.get('formas_pago', [])),
                   ]
        guardar_dbf(formatos, agrega, conf_dbf)
    elif '/json' in sys.argv:
        json.dump(dic, archivo, sort_keys=True, indent=4)
    else:
        dic['tipo_reg'] = TIPOS_REG[0]
        archivo.write(escribir(dic, ENCABEZADO, contraer_fechas=True))
        if 'tributos' in dic:
            for it in dic['tributos']:
                it['tipo_reg'] = TIPOS_REG[1]
                archivo.write(escribir(it, TRIBUTO))
        if 'iva' in dic:
            for it in dic['iva']:
                it['tipo_reg'] = TIPOS_REG[2]
                archivo.write(escribir(it, IVA))
        if 'cbtes_asoc' in dic:
            for it in dic['cbtes_asoc']:
                it['tipo_reg'] = TIPOS_REG[3]
                archivo.write(escribir(it, CMP_ASOC))
        if 'detalles' in dic:
            for it in dic['detalles']:
                it['tipo_reg'] = TIPOS_REG[4]
                it['importe'] = it['imp_subtotal']
                archivo.write(escribir(it, DETALLE))
        if 'forma_pago' in dic:
            for it in dic['fp']:
                it['tipo_reg'] = TIPOS_REG[5]
                archivo.write(escribir(it, FORMA_PAGO))
Ejemplo n.º 23
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaProdMed()
    
    ws.Username = '******'
    ws.Password = '******'
    
    if '--prod' in sys.argv and not H**O:
        WSDL = WSDL_PROD
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    # Inicializo las variables y estructuras para el archivo de intercambio:
    transacciones = []
    errores = []
    formatos = []

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (  
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)
        
    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})        
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()
        
    ws.Conectar("", WSDL)
    
    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)
    
    # Datos de pruebas:

    if '--test' in sys.argv:
        ws.CrearTransaccion(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="7791234567801", gln_destino="7791234567801", 
            n_remito="R0001-12341234", n_factura="A0001-12341234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="07791234567810", lote=datetime.datetime.now().strftime("%Y"), # R4556567
            numero_serial=int(time.time()*10), # A23434
            id_evento=1, 
            cuit_medico="30711622507", id_obra_social=465667,
            apellido="Reingart", nombres="Mariano",
            tipo_documento="96", n_documento="28510785", sexo="M",
            calle="San Martin", numero="5656", piso="", depto="1", 
            localidad="Berazategui", provincia="Buenos Aires",
            n_postal="1700", fecha_nacimiento="20/12/1972", 
            telefono="5555-5555", 
            nro_afiliado="9999999999999",
            cod_diagnostico="B30",
            cod_hiv="NOAP31121970",
            id_motivo_devolucion=1,
            otro_motivo_devolucion="producto fallado",
        )           

    # Opciones principales:
    
    if '--cancela' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("tests/xml/trazaprodmed_cancela_err.xml")  # cargo respuesta
        ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:])
    elif '--cancela_parcial' in sys.argv:
        ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:])
    elif '--consulta' in sys.argv:
        ws.GetTransaccionesWS(
                            *sys.argv[sys.argv.index("--consulta")+1:]
                            )
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionPlainWS", ws.TransaccionPlainWS
        # parametros comunes de salida (columnas de la tabla):
        TRANSACCIONES = ws.Transacciones[0].keys() if ws.Transacciones else []
        claves = [k for k in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.Transacciones)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionPlainWS):
        while ws.LeerTransaccion():     
            for clave in claves:
                print "||", ws.GetParametro(clave),         # imprimo cada fila
            print "||"
    elif '--catalogo' in sys.argv:
        ret = ws.GetCatalogoElectronicoByGTIN(
                                *sys.argv[sys.argv.index("--catalogo")+1:]
                                )
        for catalogo in ws.params_out.values():
            print catalogo        # imprimo cada fila
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not transacciones:
            if len(argv)>16:
                ws.CrearTransaccion(*argv[3:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        if ws.Transacciones:
            try:
                usuario, password = argv[1:3]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario = password = "******"
            ws.InformarProducto(usuario, password)
            for i, tx in enumerate(transacciones):
                print "Procesando registro", i
                tx['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
            print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
                )
        else:
            print "ERROR: no se especificaron productos a informar"

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})        
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 24
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaMed()
    
    ws.Username = '******'
    ws.Password = '******'
    
    if '--prod' in sys.argv and not H**O:
        WSDL = "https://trazabilidad.pami.org.ar:9050/trazamed.WebService"
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    # Inicializo las variables y estructuras para el archivo de intercambio:
    medicamentos = []
    transacciones = []
    errores = []
    formatos = [('Medicamentos', MEDICAMENTOS, medicamentos), 
                ('Transacciones', TRANSACCIONES, transacciones),
                ('Errores', ERRORES, errores),
               ]

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (  
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)
        
    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})        
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()
        
    ws.Conectar("", WSDL)
    
    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)
    
    # Datos de pruebas:
    
    if '--test' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="R000100001234", n_factura="A000100001234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            numero_serial=int(time.time()*10), 
            id_obra_social=None, id_evento=134,
            cuit_origen="20267565393", cuit_destino="20267565393", 
            apellido="Reingart", nombres="Mariano",
            tipo_documento="96", n_documento="26756539", sexo="M",
            direccion="Saraza", numero="1234", piso="", depto="", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688", fecha_nacimiento="01/01/2000", 
            telefono="5555-5555", 
            nro_asociado="9999999999999",
            cantidad=None, 
            desde_numero_serial=None, hasta_numero_serial=None, 
            codigo_transaccion=None, 
        ))            
    if '--testfraccion' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="1234", n_factura="1234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            numero_serial=int(time.time()*10), 
            id_obra_social=None, id_evento=134,
            cuit_origen="20267565393", cuit_destino="20267565393", 
            apellido="Reingart", nombres="Mariano",
            tipo_documento="96", n_documento="26756539", sexo="M",
            direccion="Saraza", numero="1234", piso="", depto="", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688", fecha_nacimiento="01/01/2000", 
            telefono="5555-5555",
            nro_asociado="9999999999999",
            cantidad=5,
            desde_numero_serial=None, hasta_numero_serial=None, 
            codigo_transaccion=None,
        ))
    if '--testdh' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="1234", n_factura="1234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            desde_numero_serial=int(time.time()*10)-1, 
            hasta_numero_serial=int(time.time()*10)+1, 
            id_obra_social=None, id_evento=134,
            nro_asociado="1234",
            cantidad=None, numero_serial=None,
            codigo_transaccion=None,
        ))

    # Opciones principales:
    
    if '--cancela' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_cancela_err.xml")  # cargo respuesta
        ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:])
    elif '--cancela_parcial' in sys.argv:
        ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:])
    elif '--confirma' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_confirma.xml")  # cargo respuesta
            ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******",
                                   p_ids_transac="1", f_operacion="31-12-2013")
            if not ok:
                raise RuntimeError(ws.Excepcion)
        ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:])
    elif '--alerta' in sys.argv:
        ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:])
    elif '--consulta' in sys.argv:
        if '--alertados' in sys.argv:
            ws.GetEnviosPropiosAlertados(
                                *sys.argv[sys.argv.index("--alertados")+1:]
                                )
        elif '--movimientos' in sys.argv:
            ws.GetTransaccionesWS(
                                *sys.argv[sys.argv.index("--movimientos")+1:]
                                )
        else:
            ws.GetTransaccionesNoConfirmadas(
                                *sys.argv[sys.argv.index("--consulta")+1:]
                                #usuario="pruebasws", password="******", 
                                #p_id_transaccion_global="1234", 
                                #id_agente_informador="1", 
                                #id_agente_origen="1", 
                                #id_agente_destino="1", 
                                #id_medicamento="1", 
                                #id_evento="1", 
                                #fecha_desde_op="01/01/2015", 
                                #fecha_hasta_op="31/12/2013", 
                                #fecha_desde_t="01/01/2013", 
                                #fecha_hasta_t="31/12/2013", 
                                #fecha_desde_v="01/04/2013", 
                                #fecha_hasta_v="30/04/2013", 
                                #n_factura=5, n_remito=6,
                                #estado=1,
                                #lote=88745,
                                #numero_serial=894124788,
                                )
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionPlainWS", ws.TransaccionPlainWS
        # parametros comunes de salida (columnas de la tabla):
        claves = [k for k, v, l in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.TransaccionPlainWS)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionPlainWS):
        while ws.LeerTransaccion():     
            for clave in claves:
                print "||", ws.GetParametro(clave),         # imprimo cada fila
            print "||"
    elif '--catalogo' in sys.argv:
        ret = ws.GetCatalogoElectronicoByGTIN(
                                *sys.argv[sys.argv.index("--catalogo")+1:]
                                )
        for catalogo in ret:
            print ret        # imprimo cada fila
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not medicamentos:
            if len(argv)>16:
                if '--dh' in sys.argv:
                    ws.SendMedicamentosDHSerie(*argv[1:])
                elif '--fraccion' in sys.argv:
                    ws.SendMedicamentosFraccion(*argv[1:])
                else:
                    ws.SendMedicamentos(*argv[1:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        elif medicamentos:
            try:
                usuario, password = argv[1:3]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario = password = "******"
            for i, med in enumerate(medicamentos):
                print "Procesando registro", i
                del med['codigo_transaccion']
                if med.get("cantidad"):
                    del med["desde_numero_serial"]
                    del med["hasta_numero_serial"]
                    ws.SendMedicamentosFraccion(usuario, password, **med)
                elif med.get("desde_numero_serial"):
                    del med["cantidad"]
                    del med["numero_serial"]
                    ws.SendMedicamentosDHSerie(usuario, password, **med)
                else:
                    del med["cantidad"]
                    del med["desde_numero_serial"]
                    del med["hasta_numero_serial"]
                    ws.SendMedicamentos(usuario, password, **med)
                med['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
                print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                    ws.Resultado,
                    ws.CodigoTransaccion,
                    '|'.join(ws.Errores or []),
                    )
        else:
            print "ERROR: no se especificaron medicamentos a informar"
            
    if not medicamentos:
        print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
                )

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})        
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 25
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaVet()
    
    ws.Username = '******'
    ws.Password = '******'
    
    if '--prod' in sys.argv and not H**O:
        WSDL = "https://servicios.pami.org.ar/trazavet.WebService?wsdl"
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    if '--proxy' in sys.argv and not H**O:
        proxy = sys.argv.pop(sys.argv.index("--proxy") + 1)
        print "Usando proxy:", proxy
        sys.argv.pop(sys.argv.index("--proxy"))
    else:
        proxy = None

    # Inicializo las variables y estructuras para el archivo de intercambio:
    transaccion_dto = []
    transacciones = []
    errores = []
    formatos = [('TransaccionDTO', TRANSACCION_DTO, transaccion_dto), 
                ('Transacciones', TRANSACCIONES, transacciones),
                ('Errores', ERRORES, errores),
               ]

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (  
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)
        
    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})        
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()
        
    ws.Conectar("", WSDL, proxy)
    
    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)
    
    # Datos de pruebas:
    
    if '--test' in sys.argv:
        transaccion_dto.append(dict(
            gln_origen="9876543210982", gln_destino="3692581473693", 
            f_operacion=datetime.datetime.now().strftime("%d/%m/%Y"),
            f_elaboracion=datetime.datetime.now().strftime("%d/%m/%Y"),
            f_vto=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"),
            id_evento=11,
            cod_producto="88900000000001",
            n_cantidad=1,
            n_serie=int(time.time()*10), 
            n_lote=datetime.datetime.now().strftime("%Y"),
            n_cai="123456789012345",
            n_cae="",
            id_motivo_destruccion=0,
            n_manifiesto="",
            en_transporte="N",
            n_remito="1234",
            motivo_devolucion="",
            observaciones="prueba",
            n_vale_compra="",
            apellidoNombres="Juan Peres",
            direccion="Saraza", numero="1234", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688",
            cuit="20267565393",
            codigo_transaccion=None,
        ))

    # Opciones principales:
    
    if '--confirma' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_confirma.xml")  # cargo respuesta
            ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******",
                                   p_ids_transac="1", f_operacion="31-12-2013")
            if not ok:
                raise RuntimeError(ws.Excepcion)
        ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:])
    elif '--alerta' in sys.argv:
        ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:])
    elif '--cancela' in sys.argv:
        ws.SendCancelaTransac(*sys.argv[sys.argv.index("--cancela")+1:])
    elif '--consulta' in sys.argv:
        ws.GetTransacciones(
                            *sys.argv[sys.argv.index("--consulta")+1:]
                            )
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionSenasa", ws.TransaccionSenasa
        # parametros comunes de salida (columnas de la tabla):
        claves = [k for k, v, l in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.TransaccionSenasa)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionSenasa):
        while ws.LeerTransaccion():     
            for clave in claves:
                print "||", ws.GetParametro(clave),         # imprimo cada fila
            print "||"
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not transaccion_dto:
            if len(argv)>10:
                ws.SaveTransaccion(*argv[1:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        elif transaccion_dto:
            try:
                usuario, password = argv[-2:]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario, password = "******", "Clave2013"
            for i, dto in enumerate(transaccion_dto):
                print "Procesando registro", i
                del dto['codigo_transaccion']
                ws.SaveTransaccion(usuario, password, **dto)
                dto['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
                print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                    ws.Resultado,
                    ws.CodigoTransaccion,
                    '|'.join(ws.Errores or []),
                    )
        else:
            print "ERROR: no se especificaron productos a informar"
            
    if not transaccion_dto:
        print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
                )

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})        
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 26
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaFito()
    
    ws.Username = '******'
    ws.Password = '******'
    
    if '--prod' in sys.argv and not H**O:
        WSDL = "https://servicios.pami.org.ar/trazaagr.WebService?wsdl"
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    # Inicializo las variables y estructuras para el archivo de intercambio:
    transaccion_dto = []
    transacciones = []
    errores = []
    formatos = [('TransaccionDTO', TRANSACCION_DTO, transaccion_dto), 
                ('Transacciones', TRANSACCIONES, transacciones),
                ('Errores', ERRORES, errores),
               ]

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (  
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)
        
    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})        
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()
        
    ws.Conectar("", WSDL)
    
    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)
    
    # Datos de pruebas:
    
    if '--test' in sys.argv:
        transaccion_dto.append(dict(
            gln_origen="9876543210982", gln_destino="3692581473693", 
            f_operacion=datetime.datetime.now().strftime("%d/%m/%Y"),
            f_elaboracion=datetime.datetime.now().strftime("%d/%m/%Y"),
            f_vto=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"),
            id_evento=11,
            cod_producto="88900000000001",
            n_cantidad=1,
            n_serie=int(time.time()*10), 
            n_lote=datetime.datetime.now().strftime("%Y"),
            n_cai="123456789012345",
            n_cae="",
            id_motivo_destruccion=0,
            n_manifiesto="",
            en_transporte="N",
            n_remito="1234",
            motivo_devolucion="",
            observaciones="prueba",
            n_vale_compra="",
            apellidoNombres="Juan Peres",
            direccion="Saraza", numero="1234", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688",
            cuit="20267565393",
            codigo_transaccion=None,
        ))

    # Opciones principales:
    
    if '--confirma' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_confirma.xml")  # cargo respuesta
            ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******",
                                   p_ids_transac="1", f_operacion="31-12-2013")
            if not ok:
                raise RuntimeError(ws.Excepcion)
        ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:])
    elif '--alerta' in sys.argv:
        ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:])
    elif '--cancela' in sys.argv:
        ws.SendCancelaTransac(*sys.argv[sys.argv.index("--cancela")+1:])
    elif '--consulta' in sys.argv:
        ws.GetTransacciones(
                            *sys.argv[sys.argv.index("--consulta")+1:]
                            )
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionSenasa", ws.TransaccionSenasa
        # parametros comunes de salida (columnas de la tabla):
        claves = [k for k, v, l in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.TransaccionSenasa)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionSenasa):
        while ws.LeerTransaccion():     
            for clave in claves:
                print "||", ws.GetParametro(clave),         # imprimo cada fila
            print "||"
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not transaccion_dto:
            if len(argv)>10:
                ws.SaveTransaccion(*argv[1:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        elif transaccion_dto:
            try:
                usuario, password = argv[-2:]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario, password = "******", "Clave2013"
            for i, dto in enumerate(transaccion_dto):
                print "Procesando registro", i
                del dto['codigo_transaccion']
                ws.SaveTransaccion(usuario, password, **dto)
                dto['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
                print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                    ws.Resultado,
                    ws.CodigoTransaccion,
                    '|'.join(ws.Errores or []),
                    )
        else:
            print "ERROR: no se especificaron productos a informar"
            
    if not transaccion_dto:
        print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
                )

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})        
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 27
0
 def GuardarFactura(self):
     from formatos.formato_sql import escribir
     escribir([self.factura], self.db)
     return self.factura['id']
Ejemplo n.º 28
0
def generar_ventas(items):
    "Crear archivos de ventas (registros tipo 1 y tipo 2 totales)"

    periodo = items[0]['fecha_cbte'][:6]

    out = open("VENTAS_%s.txt" % periodo, "w")
    totales = format_as_dict(VENTAS_TIPO2)
    totales['periodo'] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)

    # recorro las facturas e itero sobre los subtotales por alicuota de IVA:
    for item in items:
        ivas = item.get("ivas", [{}])
        for i, iva in enumerate(ivas):
            vals = format_as_dict(VENTAS_TIPO1)
            # datos generales de la factura:
            vals['tipo_reg'] = '1'
            # copio los campos que no varían para las distintas alicuotas de IVA
            for k, l, t in VENTAS_TIPO1[1:10] + VENTAS_TIPO1[21:30]:
                vals[k] = item.get(k)
            vals['fecha_anulacion'] = ''
            vals['ctl_fiscal'] = item.get('ctl_fiscal',
                                          ' ')  # C para controlador
            vals['anulacion'] = item.get('anulacion', ' ')
            vals['cbte_nro_reg'] = item['cbt_numero']
            vals['cant_hojas'] = '01'
            vals['transporte'] = '0'
            vals['categoria'] = categorias[item['categoria'].lower()]
            if vals['imp_moneda_id'] is None:
                vals['imp_moneda_id'] = 'PES'
                vals['imp_moneda_ctz'] = '1.000'
            # subtotales por alícuota de IVA
            if 'iva_id' in iva:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(iva['iva_id'])
                if iva_id == 1:
                    vals['imp_tot_conc'] = iva['base_imp']
                    alicuota = None
                elif iva_id == 2:
                    vals['imp_op_ex'] = iva['base_imp']
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                    vals['imp_neto'] = iva['base_imp']
                    vals['impto_liq'] = iva['importe']
                vals['alicuota_iva'] = alicuota or '0.00'
            else:
                # tomar datos generales:
                vals['alicuota_iva'] = (Decimal(item['imp_total']) /
                                        Decimal(item['imp_neto']) - 1) * 100
                vals['alicuotas_iva'] = '01'
                if float(item.get('impto_liq', item.get('imp_iva', 0))) == 0:
                    vals['codigo_operacion'] = 'E'
                else:
                    vals['codigo_operacion'] = ' '
                if vals['imp_tot_conc'] is None:
                    vals['imp_tot_conc'] = '0'

            # acumulo los totales para el registro tipo 2
            for k in IMPORTES:
                totales[k] = totales[k] + Decimal(vals[k] or 0)

            # otros impuestos (TODO: recorrer tributos) solo ultimo registro:
            if len(ivas) == i - 1:
                for k in ('impto_perc', 'imp_iibb', 'impto_perc_mun',
                          'imp_internos'):
                    if k in item:
                        vals[k] = item[k]
                        totales[k] = totales[k] + Decimal(vals[k] or 0)

            s = escribir(vals, VENTAS_TIPO1)
            out.write(s)

    totales['tipo_reg'] = '2'
    totales['cant_reg_tipo_1'] = str(len(items))
    totales['cuit'] = CUIT
    s = escribir(totales, VENTAS_TIPO2)
    out.write(s)
    out.close()
Ejemplo n.º 29
0
def escribir_discord(x, y, mensaje):
    if y == 1100:
        hacer_click(x, y)
        escribir(mensaje)
Ejemplo n.º 30
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaProdMed()

    ws.Username = '******'
    ws.Password = '******'

    if '--prod' in sys.argv and not H**O:
        WSDL = WSDL_PROD
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    # Inicializo las variables y estructuras para el archivo de intercambio:
    transacciones = []
    errores = []
    formatos = []

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)

    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()

    ws.Conectar("", WSDL)

    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)

    # Datos de pruebas:

    if '--test' in sys.argv:
        ws.CrearTransaccion(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"),
            gln_origen="7791234567801",
            gln_destino="7791234567801",
            n_remito="R0001-12341234",
            n_factura="A0001-12341234",
            vencimiento=(datetime.datetime.now() +
                         datetime.timedelta(30)).strftime("%d/%m/%Y"),
            gtin="07791234567810",
            lote=datetime.datetime.now().strftime("%Y"),  # R4556567
            numero_serial=int(time.time() * 10),  # A23434
            id_evento=1,
            cuit_medico="30711622507",
            id_obra_social=465667,
            apellido="Reingart",
            nombres="Mariano",
            tipo_documento="96",
            n_documento="28510785",
            sexo="M",
            calle="San Martin",
            numero="5656",
            piso="",
            depto="1",
            localidad="Berazategui",
            provincia="Buenos Aires",
            n_postal="1700",
            fecha_nacimiento="20/12/1972",
            telefono="5555-5555",
            nro_afiliado="9999999999999",
            cod_diagnostico="B30",
            cod_hiv="NOAP31121970",
            id_motivo_devolucion=1,
            otro_motivo_devolucion="producto fallado",
        )

    # Opciones principales:

    if '--cancela' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML(
                "tests/xml/trazaprodmed_cancela_err.xml")  # cargo respuesta
        ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela") + 1:])
    elif '--cancela_parcial' in sys.argv:
        ws.SendCancelacTransaccParcial(
            *sys.argv[sys.argv.index("--cancela_parcial") + 1:])
    elif '--consulta' in sys.argv:
        ws.GetTransaccionesWS(*sys.argv[sys.argv.index("--consulta") + 1:])
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionPlainWS", ws.TransaccionPlainWS
        # parametros comunes de salida (columnas de la tabla):
        TRANSACCIONES = ws.Transacciones[0].keys() if ws.Transacciones else []
        claves = [k for k in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.Transacciones)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionPlainWS):
        while ws.LeerTransaccion():
            for clave in claves:
                print "||", ws.GetParametro(clave),  # imprimo cada fila
            print "||"
    elif '--catalogo' in sys.argv:
        ret = ws.GetCatalogoElectronicoByGTIN(
            *sys.argv[sys.argv.index("--catalogo") + 1:])
        for catalogo in ws.params_out.values():
            print catalogo  # imprimo cada fila
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not transacciones:
            if len(argv) > 16:
                ws.CrearTransaccion(*argv[3:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        if ws.Transacciones:
            try:
                usuario, password = argv[1:3]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario = password = "******"
            ws.InformarProducto(usuario, password)
            for i, tx in enumerate(transacciones):
                print "Procesando registro", i
                tx['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
            print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
            )
        else:
            print "ERROR: no se especificaron productos a informar"

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 31
0
def main():
    "Función principal de pruebas (obtener CAE)"
    import os, time, sys
    global WSDL, LOCATION

    DEBUG = '--debug' in sys.argv

    ws = TrazaMed()
    
    ws.Username = '******'
    ws.Password = '******'
    
    if '--prod' in sys.argv and not H**O:
        WSDL = "https://trazabilidad.pami.org.ar:9050/trazamed.WebService"
        print "Usando WSDL:", WSDL
        sys.argv.pop(sys.argv.index("--prod"))

    # Inicializo las variables y estructuras para el archivo de intercambio:
    medicamentos = []
    transacciones = []
    errores = []
    formatos = [('Medicamentos', MEDICAMENTOS, medicamentos), 
                ('Transacciones', TRANSACCIONES, transacciones),
                ('Errores', ERRORES, errores),
               ]

    if '--formato' in sys.argv:
        print "Formato:"
        for msg, formato, lista in formatos:
            comienzo = 1
            print "=== %s ===" % msg
            print "|| %-25s || %-12s || %-5s || %-4s || %-10s ||" % (  
                "Nombre", "Tipo", "Long.", "Pos(txt)", "Campo(dbf)")
            claves = []
            for fmt in formato:
                clave, longitud, tipo = fmt[0:3]
                clave_dbf = dar_nombre_campo_dbf(clave, claves)
                claves.append(clave_dbf)
                print "|| %-25s || %-12s || %5d ||   %4d   || %-10s ||" % (
                    clave, tipo, longitud, comienzo, clave_dbf)
                comienzo += longitud
        sys.exit(0)
        
    if '--cargar' in sys.argv:
        if '--dbf' in sys.argv:
            leer_dbf(formatos[:1], {})        
        elif '--json' in sys.argv:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".json", "r")
                d = json.load(archivo)
                formato[2].extend(d)
                archivo.close()
        else:
            for formato in formatos[:1]:
                archivo = open(formato[0].lower() + ".txt", "r")
                for linea in archivo:
                    d = leer(linea, formato[1])
                    formato[2].append(d)
                archivo.close()
        
    ws.Conectar("", WSDL)
    
    if ws.Excepcion:
        print ws.Excepcion
        print ws.Traceback
        sys.exit(-1)
    
    # Datos de pruebas:
    
    if '--test' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="R000100001234", n_factura="A000100001234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            numero_serial=int(time.time()*10), 
            id_obra_social=None, id_evento=134,
            cuit_origen="20267565393", cuit_destino="20267565393", 
            apellido="Reingart", nombres="Mariano",
            tipo_documento="96", n_documento="26756539", sexo="M",
            direccion="Saraza", numero="1234", piso="", depto="", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688", fecha_nacimiento="01/01/2000", 
            telefono="5555-5555", 
            nro_asociado="9999999999999",
            cantidad=None, 
            desde_numero_serial=None, hasta_numero_serial=None, 
            codigo_transaccion=None, 
        ))            
    if '--testfraccion' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="1234", n_factura="1234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            numero_serial=int(time.time()*10), 
            id_obra_social=None, id_evento=134,
            cuit_origen="20267565393", cuit_destino="20267565393", 
            apellido="Reingart", nombres="Mariano",
            tipo_documento="96", n_documento="26756539", sexo="M",
            direccion="Saraza", numero="1234", piso="", depto="", 
            localidad="Hurlingham", provincia="Buenos Aires",
            n_postal="1688", fecha_nacimiento="01/01/2000", 
            telefono="5555-5555",
            nro_asociado="9999999999999",
            cantidad=5,
            desde_numero_serial=None, hasta_numero_serial=None, 
            codigo_transaccion=None,
        ))
    if '--testdh' in sys.argv:
        medicamentos.append(dict(
            f_evento=datetime.datetime.now().strftime("%d/%m/%Y"),
            h_evento=datetime.datetime.now().strftime("%H:%M"), 
            gln_origen="9999999999918", gln_destino="glnws", 
            n_remito="1234", n_factura="1234", 
            vencimiento=(datetime.datetime.now()+datetime.timedelta(30)).strftime("%d/%m/%Y"), 
            gtin="GTIN1", lote=datetime.datetime.now().strftime("%Y"),
            desde_numero_serial=int(time.time()*10)-1, 
            hasta_numero_serial=int(time.time()*10)+1, 
            id_obra_social=None, id_evento=134,
            nro_asociado="1234",
            cantidad=None, numero_serial=None,
            codigo_transaccion=None,
        ))

    # Opciones principales:
    
    if '--cancela' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_cancela_err.xml")  # cargo respuesta
        ws.SendCancelacTransacc(*sys.argv[sys.argv.index("--cancela")+1:])
    elif '--cancela_parcial' in sys.argv:
        ws.SendCancelacTransaccParcial(*sys.argv[sys.argv.index("--cancela_parcial")+1:])
    elif '--confirma' in sys.argv:
        if '--loadxml' in sys.argv:
            ws.LoadTestXML("trazamed_confirma.xml")  # cargo respuesta
            ok = ws.SendConfirmaTransacc(usuario="pruebasws", password="******",
                                   p_ids_transac="1", f_operacion="31-12-2013")
            if not ok:
                raise RuntimeError(ws.Excepcion)
        ws.SendConfirmaTransacc(*sys.argv[sys.argv.index("--confirma")+1:])
    elif '--alerta' in sys.argv:
        ws.SendAlertaTransacc(*sys.argv[sys.argv.index("--alerta")+1:])
    elif '--consulta' in sys.argv:
        if '--alertados' in sys.argv:
            ws.GetEnviosPropiosAlertados(
                                *sys.argv[sys.argv.index("--alertados")+1:]
                                )
        elif '--movimientos' in sys.argv:
            ws.GetTransaccionesWS(
                                *sys.argv[sys.argv.index("--movimientos")+1:]
                                )
        else:
            ws.GetTransaccionesNoConfirmadas(
                                *sys.argv[sys.argv.index("--consulta")+1:]
                                #usuario="pruebasws", password="******", 
                                #p_id_transaccion_global="1234", 
                                #id_agente_informador="1", 
                                #id_agente_origen="1", 
                                #id_agente_destino="1", 
                                #id_medicamento="1", 
                                #id_evento="1", 
                                #fecha_desde_op="01/01/2015", 
                                #fecha_hasta_op="31/12/2013", 
                                #fecha_desde_t="01/01/2013", 
                                #fecha_hasta_t="31/12/2013", 
                                #fecha_desde_v="01/04/2013", 
                                #fecha_hasta_v="30/04/2013", 
                                #n_factura=5, n_remito=6,
                                #estado=1,
                                #lote=88745,
                                #numero_serial=894124788,
                                )
        print "CantPaginas", ws.CantPaginas
        print "HayError", ws.HayError
        #print "TransaccionPlainWS", ws.TransaccionPlainWS
        # parametros comunes de salida (columnas de la tabla):
        claves = [k for k, v, l in TRANSACCIONES]
        # extiendo la lista de resultado para el archivo de intercambio:
        transacciones.extend(ws.TransaccionPlainWS)
        # encabezado de la tabla:
        print "||", "||".join(["%s" % clave for clave in claves]), "||"
        # recorro los datos devueltos (TransaccionPlainWS):
        while ws.LeerTransaccion():     
            for clave in claves:
                print "||", ws.GetParametro(clave),         # imprimo cada fila
            print "||"
    elif '--catalogo' in sys.argv:
        ret = ws.GetCatalogoElectronicoByGTIN(
                                *sys.argv[sys.argv.index("--catalogo")+1:]
                                )
        for catalogo in ws.params_out.values():
            print catalogo        # imprimo cada fila
    elif '--stock' in sys.argv:
        ret = ws.GetConsultaStock(
                            *sys.argv[sys.argv.index("--stock")+1:]
                            )
        print "\n".join([str(s) for s in ws.params_out.values()])
    else:
        argv = [argv for argv in sys.argv if not argv.startswith("--")]
        if not medicamentos:
            if len(argv)>16:
                if '--dh' in sys.argv:
                    ws.SendMedicamentosDHSerie(*argv[1:])
                elif '--fraccion' in sys.argv:
                    ws.SendMedicamentosFraccion(*argv[1:])
                else:
                    ws.SendMedicamentos(*argv[1:])
            else:
                print "ERROR: no se indicaron todos los parámetros requeridos"
        elif medicamentos:
            try:
                usuario, password = argv[1:3]
            except:
                print "ADVERTENCIA: no se indico parámetros usuario y passoword"
                usuario = password = "******"
            for i, med in enumerate(medicamentos):
                print "Procesando registro", i
                del med['codigo_transaccion']
                if med.get("cantidad"):
                    del med["desde_numero_serial"]
                    del med["hasta_numero_serial"]
                    ws.SendMedicamentosFraccion(usuario, password, **med)
                elif med.get("desde_numero_serial"):
                    del med["cantidad"]
                    del med["numero_serial"]
                    ws.SendMedicamentosDHSerie(usuario, password, **med)
                else:
                    del med["cantidad"]
                    del med["desde_numero_serial"]
                    del med["hasta_numero_serial"]
                    ws.SendMedicamentos(usuario, password, **med)
                med['codigo_transaccion'] = ws.CodigoTransaccion
                errores.extend(ws.errores)
                print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                    ws.Resultado,
                    ws.CodigoTransaccion,
                    '|'.join(ws.Errores or []),
                    )
        else:
            print "ERROR: no se especificaron medicamentos a informar"
            
    if not medicamentos:
        print "|Resultado %5s|CodigoTransaccion %10s|Errores|%s|" % (
                ws.Resultado,
                ws.CodigoTransaccion,
                '|'.join(ws.Errores or []),
                )

    if ws.Excepcion:
        print ws.Traceback

    if '--grabar' in sys.argv:
        if '--dbf' in sys.argv:
            guardar_dbf(formatos, True, {})        
        elif '--json' in sys.argv:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".json", "w")
                json.dump(formato[2], archivo, sort_keys=True, indent=4)
                archivo.close()
        else:
            for formato in formatos:
                archivo = open(formato[0].lower() + ".txt", "w")
                for it in formato[2]:
                    archivo.write(escribir(it, formato[1]))
            archivo.close()
Ejemplo n.º 32
0
 def GuardarFactura(self):
     from formatos.formato_sql import escribir
     escribir([self.factura], self.db)
     return self.factura['id']
Ejemplo n.º 33
0
def generar_ventas(items):
    "Crear archivos de ventas (registros tipo 1 y tipo 2 totales)"
    
    periodo = items[0]['fecha_cbte'][:6]

    out = open("VENTAS_%s.txt" % periodo, "w")
    totales = format_as_dict(VENTAS_TIPO2)
    totales['periodo'] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)
    
    # recorro las facturas e itero sobre los subtotales por alicuota de IVA:
    for item in items:
        ivas = item.get("ivas", [{}])
        for i, iva in enumerate(ivas):
            vals = format_as_dict(VENTAS_TIPO1)
            # datos generales de la factura:
            vals['tipo_reg'] = '1'
            # copio los campos que no varían para las distintas alicuotas de IVA
            for k, l, t in VENTAS_TIPO1[1:10] + VENTAS_TIPO1[21:30]:
                vals[k] = item.get(k)
            vals['fecha_anulacion'] = ''
            vals['ctl_fiscal'] = item.get('ctl_fiscal', ' ')  # C para controlador
            vals['anulacion'] = item.get('anulacion', ' ')
            vals['cbte_nro_reg'] = item['cbt_numero']
            vals['cant_hojas'] = '01'
            vals['transporte'] = '0'
            vals['categoria'] = categorias[item['categoria'].lower()]
            if vals['imp_moneda_id'] is None:
                vals['imp_moneda_id'] = 'PES'
                vals['imp_moneda_ctz'] = '1.000'
            # subtotales por alícuota de IVA
            if 'iva_id' in iva:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(iva['iva_id'])
                if iva_id == 1:
                    vals['imp_tot_conc'] = iva['base_imp']
                    alicuota = None
                elif iva_id == 2:
                    vals['imp_op_ex'] = iva['base_imp']
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                    vals['imp_neto'] = iva['base_imp']
                    vals['impto_liq'] = iva['importe']
                vals['alicuota_iva'] = alicuota or '0.00'
            else:
                # tomar datos generales: 
                vals['alicuota_iva'] = (Decimal(item['imp_total'])/Decimal(item['imp_neto']) - 1) * 100
                vals['alicuotas_iva'] = '01'
                if float(item.get('impto_liq', item.get('imp_iva', 0))) == 0:
                    vals['codigo_operacion'] = 'E'
                else:
                    vals['codigo_operacion'] = ' '
                if vals['imp_tot_conc'] is None:
                    vals['imp_tot_conc'] = '0'

            # acumulo los totales para el registro tipo 2
            for k in IMPORTES:
                totales[k] = totales[k] + Decimal(vals[k] or 0)

            # otros impuestos (TODO: recorrer tributos) solo ultimo registro:
            if len(ivas) == i-1:
                for k in ('impto_perc', 'imp_iibb', 'impto_perc_mun', 'imp_internos'):
                    if k in item:
                        vals[k] = item[k]
                        totales[k] = totales[k] + Decimal(vals[k] or 0)

            s = escribir(vals, VENTAS_TIPO1)
            out.write(s)
        
    totales['tipo_reg'] = '2'
    totales['cant_reg_tipo_1'] = str(len(items))
    totales['cuit'] = CUIT
    s = escribir(totales, VENTAS_TIPO2)
    out.write(s)
    out.close()
Ejemplo n.º 34
0
def generar_ventas(items):
    "Crear archivos de ventas (registros tipo 1 y tipo 2 totales)"

    periodo = items[0]["fecha_cbte"][:6]

    out = open("VENTAS_%s.txt" % periodo, "w")
    totales = format_as_dict(VENTAS_TIPO2)
    totales["periodo"] = periodo
    for key in IMPORTES:
        totales[key] = Decimal(0)

    # recorro las facturas e itero sobre los subtotales por alicuota de IVA:
    for item in items:
        ivas = item.get("ivas", [{}])
        for i, iva in enumerate(ivas):
            vals = format_as_dict(VENTAS_TIPO1)
            # datos generales de la factura:
            vals["tipo_reg"] = "1"
            # copio los campos que no varían para las distintas alicuotas de IVA
            for k, l, t in VENTAS_TIPO1[1:10] + VENTAS_TIPO1[21:30]:
                vals[k] = item.get(k)
            vals["fecha_anulacion"] = ""
            vals["ctl_fiscal"] = item.get("ctl_fiscal", " ")  # C para controlador
            vals["anulacion"] = item.get("anulacion", " ")
            vals["cbte_nro_reg"] = item["cbt_numero"]
            vals["cant_hojas"] = "01"
            vals["transporte"] = "0"
            vals["categoria"] = categorias[item["categoria"].lower()]
            if vals["imp_moneda_id"] is None:
                vals["imp_moneda_id"] = "PES"
                vals["imp_moneda_ctz"] = "1.000"
            # subtotales por alícuota de IVA
            if "iva_id" in iva:
                # mapear alicuota de iva según código usado en MTX
                iva_id = int(iva["iva_id"])
                if iva_id == 1:
                    vals["imp_tot_conc"] = iva["base_imp"]
                    alicuota = None
                elif iva_id == 2:
                    vals["imp_op_ex"] = iva["base_imp"]
                    alicuota = None
                else:
                    alicuota = {3: "0.00", 4: "10.5", 5: "21", 6: "27"}[iva_id]
                    vals["imp_neto"] = iva["base_imp"]
                    vals["impto_liq"] = iva["importe"]
                vals["alicuota_iva"] = alicuota or "0.00"
            else:
                # tomar datos generales:
                vals["alicuota_iva"] = (Decimal(item["imp_total"]) / Decimal(item["imp_neto"]) - 1) * 100
                vals["alicuotas_iva"] = "01"
                if float(item.get("impto_liq", item.get("imp_iva", 0))) == 0:
                    vals["codigo_operacion"] = "E"
                else:
                    vals["codigo_operacion"] = " "
                if vals["imp_tot_conc"] is None:
                    vals["imp_tot_conc"] = "0"

            # acumulo los totales para el registro tipo 2
            for k in IMPORTES:
                totales[k] = totales[k] + Decimal(vals[k] or 0)

            # otros impuestos (TODO: recorrer tributos) solo ultimo registro:
            if len(ivas) == i - 1:
                for k in ("impto_perc", "imp_iibb", "impto_perc_mun", "imp_internos"):
                    if k in item:
                        vals[k] = item[k]
                        totales[k] = totales[k] + Decimal(vals[k] or 0)

            s = escribir(vals, VENTAS_TIPO1)
            out.write(s)

    totales["tipo_reg"] = "2"
    totales["cant_reg_tipo_1"] = str(len(items))
    totales["cuit"] = CUIT
    s = escribir(totales, VENTAS_TIPO2)
    out.write(s)
    out.close()