Skip to content

Commit

Permalink
updated test requirements
Browse files Browse the repository at this point in the history
  • Loading branch information
satcfdi committed Apr 11, 2024
1 parent 644f6b2 commit d62c579
Show file tree
Hide file tree
Showing 10 changed files with 130 additions and 67 deletions.
51 changes: 32 additions & 19 deletions satcfdi/accounting/contabilidad.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import os
from typing import Sequence

from satcfdi.catalogs import select
from satcfdi.zip import zip_create, ZipData, zip_file

from satcfdi.catalogs import select, catalog_code

from satcfdi.utils import iterate

Expand Down Expand Up @@ -31,21 +33,28 @@ def filename(file):
raise ValueError(f"Unknown file type: {file.tag}")


def output_file(file, folder, fiel=None, generate_pdf=False):
def output_file(file, folder, fiel=None, generate_pdf=False, zip_xml=False):
if fiel:
file.sign(fiel)

output_file = os.path.join(folder, filename(file))
file.xml_write(
output_file,
pretty_print=True,
xml_declaration=True
)
if zip_xml:
zip_file(output_file[:-4] + '.zip', [
ZipData(
filename(file),
file.xml_bytes(xml_declaration=True)
)
])
else:
file.xml_write(
output_file,
pretty_print=True,
xml_declaration=True
)

if generate_pdf:
# render.html_write(file, output_file[:-4] + ".html")
render.pdf_write(file, output_file[:-4] + ".pdf")
else:
# delete file
try:
os.remove(output_file[:-4] + ".pdf")
except FileNotFoundError:
Expand All @@ -66,7 +75,9 @@ def generar_contabilidad(
numero_tramite=None,
folder=None,
fiel=None,
generate_pdf=False):
generate_pdf=False,
zip_xml=False
):
validate_cuentas(cuentas)
validate_polizas(polizas)
calcular_saldos(cuentas, polizas)
Expand All @@ -80,15 +91,15 @@ def generar_contabilidad(
num_tramite=numero_tramite,
poliza=polizas
)
output_file(plz, folder, fiel, generate_pdf=generate_pdf)
output_file(plz, folder, fiel, generate_pdf=generate_pdf, zip_xml=zip_xml)

cat = Catalogo(
rfc=rfc_emisor,
mes=str(dp.month).zfill(2),
anio=dp.year,
ctas=[
Ctas(
cod_agrup=v["CodAgrup"].split("_")[0],
cod_agrup=v["CodAgrup"],
num_cta=k,
desc=v["Desc"],
nivel=v["Nivel"],
Expand All @@ -97,7 +108,7 @@ def generar_contabilidad(
) for k, v in cuentas.items()
]
)
cato = output_file(cat, folder, fiel)
output_file(cat, folder, fiel, zip_xml=zip_xml)

ban = Balanza(
rfc=rfc_emisor,
Expand All @@ -110,7 +121,7 @@ def generar_contabilidad(
**v,
} for k, v in cuentas.items() if v["SaldoIni"] or v["Debe"] or v["Haber"] or v["SaldoFin"]],
)
bano = output_file(ban, folder, fiel)
output_file(ban, folder, fiel, zip_xml=zip_xml)

aux_detalles = group_aux_cuentas(polizas)
aux = AuxiliarCtas(
Expand All @@ -130,7 +141,7 @@ def generar_contabilidad(
) for k, v in cuentas.items() if k in aux_detalles
]
)
output_file(aux, folder, fiel, generate_pdf=generate_pdf)
output_file(aux, folder, fiel, generate_pdf=generate_pdf, zip_xml=zip_xml)

auxf = RepAuxFol(
rfc=rfc_emisor,
Expand All @@ -141,11 +152,11 @@ def generar_contabilidad(
num_tramite=numero_tramite,
det_aux_fol=list(group_aux_folios(polizas))
)
output_file(auxf, folder, fiel, generate_pdf=generate_pdf)
output_file(auxf, folder, fiel, generate_pdf=generate_pdf, zip_xml=zip_xml)

imprimir_contablidad(
catalogo_cuentas=cato,
balanza_comprobacion=bano,
catalogo_cuentas=cat,
balanza_comprobacion=ban,
archivo_excel=os.path.join(folder, filename(ban)[:-4] + ".xlsx")
)

Expand Down Expand Up @@ -209,7 +220,9 @@ def validate_cuentas(cuentas):
v['Nivel'] = cuentas[v['SubCtaDe']]['Nivel'] + 1
else:
v['Nivel'] = 1
assert select('Cb9f_c_CodAgrup', v['CodAgrup'].split("_")[0]), f"Unknown CodAgrup: {v['CodAgrup']}"

v['CodAgrup'] = catalog_code('Cb9f_c_CodAgrup', v['CodAgrup'])
assert v['CodAgrup'].description, f"Unknown CodAgrup: {v['CodAgrup']}"

for k, v in cuentas.items():
if v['SubCtaDe']:
Expand Down
6 changes: 2 additions & 4 deletions satcfdi/accounting/contabilidad_print.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ def imprimir_contablidad(
balanza_comprobacion,
archivo_excel
):
ct = CFDI.from_file(catalogo_cuentas)
bc = CFDI.from_file(balanza_comprobacion)
# ct = catalogo_cuentas
# bc = balanza_comprobacion
ct = catalogo_cuentas
bc = balanza_comprobacion

ctas = {
c['NumCta']: {
Expand Down
20 changes: 18 additions & 2 deletions satcfdi/zip.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
def zip_create(target: io.BytesIO, files: list[ZipData]):
p = target.tell()

for f in files:
with ZipFile(target, "w") as myzip:
with ZipFile(target, "w") as myzip:
for f in files:
zinfo = ZipInfo(
filename=f.filename
)
Expand All @@ -24,3 +24,19 @@ def zip_create(target: io.BytesIO, files: list[ZipData]):

with target.getbuffer() as view: # change zip flag bytes
view[p + 6:p + 8] = b"\x08\x08"


def zip_file(zipfile, files: list[ZipData]):
# Create a ZipFile object in write mode
with ZipFile(zipfile, 'w') as zipf:
# Add the input file to the zip archive with its base name
for f in files:
zinfo = ZipInfo(
filename=f.filename,
# date_time=datetime_to_tuple(datetime.now())
)
zinfo.compress_type = 8
zinfo.create_system = 0

with zipf.open(zinfo, 'w') as stream:
stream.write(f.data)
120 changes: 78 additions & 42 deletions tests/test_contabilidad.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import datetime
import logging
import os
from unittest import mock
from uuid import UUID
from zipfile import ZipInfo

import pytest
import yaml
Expand Down Expand Up @@ -69,59 +71,93 @@ def test_generate_contabilidad_empty():
)


polizas = [
Poliza(
num_un_iden_pol="1",
fecha=datetime.date(2024, 2, 1),
concepto="Compra de equipo de computo",
transaccion=[
Transaccion(
num_cta="1020.01",
des_cta="Bancos",
concepto="Nal",
debe=10000,
haber=0,
comp_nal=[
CompNal(
uuid_cfdi='a4f4fea5-e798-4ab3-a2e5-75f741f4ecca',
rfc="CACX7605101P8",
monto_total=10000
)
]
),
Transaccion(
num_cta="1020.02",
des_cta="Bancos",
concepto="Ext",
debe=0,
haber=10000,
comp_nal=[
CompNal(
uuid_cfdi='a4f4fea5-e798-4ab3-a2e5-75f741f4ecca',
rfc="CACX7605101P8",
monto_total=10000
)
]
)
]
)
]


def test_generate_contabilidad_simple():
os.makedirs(os.path.join(current_dir, 'test_contabilidad_electronica/out/simple'), exist_ok=True)
path = 'simple'
os.makedirs(os.path.join(current_dir, 'test_contabilidad_electronica/out', path), exist_ok=True)

with open(os.path.join(current_dir, 'contabilidad_electronica', 'cuentas.yaml'), 'r', encoding='utf-8') as f:
cuentas = yaml.load(f, Loader=yaml.SafeLoader)

polizas = [
Poliza(
num_un_iden_pol="1",
fecha=datetime.date(2024, 2, 1),
concepto="Compra de equipo de computo",
transaccion=[
Transaccion(
num_cta="1020.01",
des_cta="Bancos",
concepto="Nal",
debe=10000,
haber=0,
comp_nal=[
CompNal(
uuid_cfdi='a4f4fea5-e798-4ab3-a2e5-75f741f4ecca',
rfc="CACX7605101P8",
monto_total=10000
)
]
),
Transaccion(
num_cta="1020.02",
des_cta="Bancos",
concepto="Ext",
debe=0,
haber=10000,
comp_nal=[
CompNal(
uuid_cfdi='a4f4fea5-e798-4ab3-a2e5-75f741f4ecca',
rfc="CACX7605101P8",
monto_total=10000
)
]
)
]
)
]
generar_contabilidad(
dp=DatePeriod(2024, 2),
rfc_emisor="CACX7605101P8",
cuentas=cuentas,
polizas=polizas,
folder=os.path.join(current_dir, 'test_contabilidad_electronica/out/simple'),
tipo_solicitud='AF'
folder=os.path.join(current_dir, 'test_contabilidad_electronica/out', path),
tipo_solicitud='AF',
zip_xml=False
)

assert compare_directories(
os.path.join(current_dir, 'test_contabilidad_electronica/ref/simple'),
os.path.join(current_dir, 'test_contabilidad_electronica/out/simple')
os.path.join(current_dir, 'test_contabilidad_electronica/ref', path),
os.path.join(current_dir, 'test_contabilidad_electronica/out', path)
)


def test_generate_contabilidad_zip():
path = 'simple_zip'
os.makedirs(os.path.join(current_dir, 'test_contabilidad_electronica/out', path), exist_ok=True)

with open(os.path.join(current_dir, 'contabilidad_electronica', 'cuentas.yaml'), 'r', encoding='utf-8') as f:
cuentas = yaml.load(f, Loader=yaml.SafeLoader)

def zi(filename):
return ZipInfo(
filename=filename,
date_time=(2022, 11, 8, 11, 41, 8) # time.localtime(time.time())[:6]
)

with mock.patch(f'{module}.zip.ZipInfo', zi) as m:
generar_contabilidad(
dp=DatePeriod(2024, 2),
rfc_emisor="CACX7605101P8",
cuentas=cuentas,
polizas=polizas,
folder=os.path.join(current_dir, 'test_contabilidad_electronica/out', path),
tipo_solicitud='AF',
zip_xml=True
)

assert compare_directories(
os.path.join(current_dir, 'test_contabilidad_electronica/ref', path),
os.path.join(current_dir, 'test_contabilidad_electronica/out', path)
)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit d62c579

Please sign in to comment.