se adicionan restantes obligatorios para NominaIndividual
FossilOrigin-Name: 428f40698c252453c5b6ae39f35553c6484d90568b1d31f097115a88d94fadd9
This commit is contained in:
		| @@ -84,6 +84,7 @@ TipoImpuesto = CodeList(path_for_codelist('TipoImpuesto-2.1.gc'), 'code', 'name' | |||||||
|     .update(CodeList(path_for_codelist('TipoImpuesto-2.1.custom.gc'), 'code', 'name')) |     .update(CodeList(path_for_codelist('TipoImpuesto-2.1.custom.gc'), 'code', 'name')) | ||||||
| CodigoPrecioReferencia = CodeList(path_for_codelist('CodigoPrecioReferencia-2.1.gc'), 'code', 'name') | CodigoPrecioReferencia = CodeList(path_for_codelist('CodigoPrecioReferencia-2.1.gc'), 'code', 'name') | ||||||
| MediosPago = CodeList(path_for_codelist('MediosPago-2.1.gc'), 'code', 'name') | MediosPago = CodeList(path_for_codelist('MediosPago-2.1.gc'), 'code', 'name') | ||||||
|  | FormasPago = CodeList(path_for_codelist('FormasPago-2.1.gc'), 'code', 'name') | ||||||
| RegimenFiscal = CodeList(path_for_codelist('RegimenFiscal-2.1.custom.gc'), 'code', 'name') | RegimenFiscal = CodeList(path_for_codelist('RegimenFiscal-2.1.custom.gc'), 'code', 'name') | ||||||
| TipoOperacionNC = CodeList(path_for_codelist('TipoOperacionNC-2.1.gc'), 'code', 'name') | TipoOperacionNC = CodeList(path_for_codelist('TipoOperacionNC-2.1.gc'), 'code', 'name') | ||||||
| TipoOperacionND = CodeList(path_for_codelist('TipoOperacionND-2.1 - copia.gc'), 'code', 'name') | TipoOperacionND = CodeList(path_for_codelist('TipoOperacionND-2.1 - copia.gc'), 'code', 'name') | ||||||
|   | |||||||
| @@ -240,6 +240,40 @@ class Trabajador: | |||||||
|                                 CodigoTrabajador = self.codigo_trabajador |                                 CodigoTrabajador = self.codigo_trabajador | ||||||
|                                 ) |                                 ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @dataclass | ||||||
|  | class FormaPago: | ||||||
|  |     code: str | ||||||
|  |     name: str = '' | ||||||
|  |  | ||||||
|  |     def __post_init__(self): | ||||||
|  |         if self.code not in codelist.FormasPago: | ||||||
|  |             raise ValueError("code [%s] not found" % (self.code)) | ||||||
|  |         self.name = codelist.FormasPago[self.code]['name'] | ||||||
|  |  | ||||||
|  | @dataclass | ||||||
|  | class MetodoPago: | ||||||
|  |     code: str | ||||||
|  |     name: str = '' | ||||||
|  |  | ||||||
|  |     def __post_init__(self): | ||||||
|  |         if self.code not in codelist.MediosPago: | ||||||
|  |             raise ValueError("code [%s] not found" % (self.code)) | ||||||
|  |         self.name = codelist.MediosPago[self.code]['name'] | ||||||
|  |  | ||||||
|  | @dataclass | ||||||
|  | class Pago: | ||||||
|  |     forma: FormaPago | ||||||
|  |     metodo: MetodoPago | ||||||
|  |  | ||||||
|  |     def apply(self, fragment): | ||||||
|  |         fragment.set_attributes('./Pago', | ||||||
|  |                                 # NIE064 | ||||||
|  |                                 Forma = self.forma.code, | ||||||
|  |                                 # NIE065 | ||||||
|  |                                 Metodo = self.metodo.code) | ||||||
|  |                                  | ||||||
| class DIANNominaXML: | class DIANNominaXML: | ||||||
|     def __init__(self, tag_document): |     def __init__(self, tag_document): | ||||||
|         self.tag_document = tag_document |         self.tag_document = tag_document | ||||||
| @@ -251,6 +285,7 @@ class DIANNominaXML: | |||||||
|         self.fexml.placeholder_for('./InformacionGeneral') |         self.fexml.placeholder_for('./InformacionGeneral') | ||||||
|         self.fexml.placeholder_for('./Empleador') |         self.fexml.placeholder_for('./Empleador') | ||||||
|         self.fexml.placeholder_for('./Trabajador') |         self.fexml.placeholder_for('./Trabajador') | ||||||
|  |         self.fexml.placeholder_for('./Pago') | ||||||
|         self.fexml.placeholder_for('./Devengados/Basico') |         self.fexml.placeholder_for('./Devengados/Basico') | ||||||
|         self.fexml.placeholder_for('./Devengados/Transporte', optional=True) |         self.fexml.placeholder_for('./Devengados/Transporte', optional=True) | ||||||
|  |  | ||||||
| @@ -259,6 +294,7 @@ class DIANNominaXML: | |||||||
|         self.numero_secuencia_xml = self.fexml.fragment('./NumeroSecuenciaXML') |         self.numero_secuencia_xml = self.fexml.fragment('./NumeroSecuenciaXML') | ||||||
|         self.empleador = self.fexml.fragment('./Empleador') |         self.empleador = self.fexml.fragment('./Empleador') | ||||||
|         self.trabajador = self.fexml.fragment('./Trabajador') |         self.trabajador = self.fexml.fragment('./Trabajador') | ||||||
|  |         self.pago_xml = self.fexml.fragment('./Pago') | ||||||
|         self.devengados = self.fexml.fragment('./Devengados') |         self.devengados = self.fexml.fragment('./Devengados') | ||||||
|         self.deducciones = self.fexml.fragment('./Deducciones') |         self.deducciones = self.fexml.fragment('./Deducciones') | ||||||
|  |  | ||||||
| @@ -275,6 +311,11 @@ class DIANNominaXML: | |||||||
|         self.informacion_general = general |         self.informacion_general = general | ||||||
|         self.informacion_general.apply(self.informacion_general_xml) |         self.informacion_general.apply(self.informacion_general_xml) | ||||||
|  |  | ||||||
|  |     def asignar_pago(self, pago): | ||||||
|  |         if not isinstance(pago, Pago): | ||||||
|  |             raise ValueError('se espera tipo Pago') | ||||||
|  |         pago.apply(self.pago_xml) | ||||||
|  |  | ||||||
|     def asignar_empleador(self, empleador): |     def asignar_empleador(self, empleador): | ||||||
|         if not isinstance(empleador, Empleador): |         if not isinstance(empleador, Empleador): | ||||||
|             raise ValueError('se espera tipo Empleador') |             raise ValueError('se espera tipo Empleador') | ||||||
| @@ -322,6 +363,11 @@ class DIANNominaXML: | |||||||
|             'FechaIngreso', |             'FechaIngreso', | ||||||
|             'se requiere Periodo') |             'se requiere Periodo') | ||||||
|  |  | ||||||
|  |         check_element( | ||||||
|  |             self.fexml.xpath_from_root('/Pago'), | ||||||
|  |             'se requiere Pago' | ||||||
|  |         ) | ||||||
|  |  | ||||||
|         check_element( |         check_element( | ||||||
|             self.fexml.xpath_from_root('/Devengados/Basico'), |             self.fexml.xpath_from_root('/Devengados/Basico'), | ||||||
|             'se requiere DevengadoBasico' |             'se requiere DevengadoBasico' | ||||||
|   | |||||||
| @@ -185,3 +185,10 @@ def assert_error(errors, msg): | |||||||
|  |  | ||||||
|     raise "wants error: %s" % (msg) |     raise "wants error: %s" % (msg) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_asignar_pago(): | ||||||
|  |     nomina = fe.nomina.DIANNominaIndividual() | ||||||
|  |     nomina.asignar_pago(fe.nomina.Pago( | ||||||
|  |         forma = fe.nomina.FormaPago(code='1'), | ||||||
|  |         metodo = fe.nomina.MetodoPago(code='1') | ||||||
|  |     )) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user