From 67f29fcca6ea4c0876384716ece3fccaf23b0ec8 Mon Sep 17 00:00:00 2001
From: bit4bit <bit4bit@noemail.net>
Date: Wed, 1 Dec 2021 00:24:14 +0000
Subject: [PATCH] se adiciona DevengadoHorasExtrasDiarias

FossilOrigin-Name: c544c4bb273c7f548f7cb5d4466af9975bb7f5a35e4bd38a22fbdeae39acea4c
---
 facho/fe/nomina/__init__.py           |  8 ++++++
 facho/fe/nomina/devengado/__init__.py |  5 +++-
 tests/test_nomina.py                  | 39 ++++++++++++++++++++++++++-
 3 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/facho/fe/nomina/__init__.py b/facho/fe/nomina/__init__.py
index 5676306..91d415d 100644
--- a/facho/fe/nomina/__init__.py
+++ b/facho/fe/nomina/__init__.py
@@ -441,6 +441,14 @@ class DIANNominaXML:
 
         return errors
 
+    def informacion_general(self):
+        xpath = self.root_fragment.xpath_from_root('/InformacionGeneral')
+        return {
+            'cune': self.fexml.get_element_attribute(cune_xpath, 'CUNE'),
+            'fecha_generacion': self.fexml.get_element_attribute(xpath, 'FechaGen'),
+            'numero': self.fexml.get_element_attribute(self.root_fragment('/NumeroSecuenciaXML', 'Numero'))
+        }
+
     def toFachoXML(self):
         self._devengados_total()
         self._deducciones_total()
diff --git a/facho/fe/nomina/devengado/__init__.py b/facho/fe/nomina/devengado/__init__.py
index fcf9971..73f5204 100644
--- a/facho/fe/nomina/devengado/__init__.py
+++ b/facho/fe/nomina/devengado/__init__.py
@@ -2,9 +2,12 @@
 from .basico import *
 from .transporte import *
 from .devengado import *
+from .horas_extras import *
 
 __all__ = [
     'Devengado',
     'DevengadoBasico',
-    'DevengadoTransporte'
+    'DevengadoTransporte',
+    'DevengadoHorasExtrasDiarias',
+    'DevengadoHoraExtra'
 ]
diff --git a/tests/test_nomina.py b/tests/test_nomina.py
index 6c74b58..e703577 100644
--- a/tests/test_nomina.py
+++ b/tests/test_nomina.py
@@ -141,7 +141,8 @@ def test_nomina_xml():
             nit='999999',
             dv=2,
             software_id='xx',
-            software_pin='12'
+            software_pin='12',
+            razon_social='facho'
         )
     ))
 
@@ -155,6 +156,7 @@ def test_nomina_xml():
     ))
 
     nomina.asignar_empleador(fe.nomina.Empleador(
+        razon_social='facho',
         nit = '700085371',
         dv = '1',
         pais = fe.nomina.Pais(
@@ -349,6 +351,41 @@ def test_adicionar_eliminar_asignar_predecesor():
     assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor/@CUNEPred') == 'ABC123456'
     assert xml.get_element_text_or_attribute('/fe:NominaIndividualDeAjuste/Eliminar/EliminandoPredecesor/@FechaGenPred') == '2021-11-16'
 
+def test_nomina_devengado_horas_extras_diarias():
+    nomina = fe.nomina.DIANNominaIndividual()
+
+    nomina.adicionar_devengado(fe.nomina.DevengadoHorasExtrasDiarias(
+        horas_extras=[
+            fe.nomina.DevengadoHoraExtra(
+                hora_inicio='2021-11-30T19:09:55',
+                hora_fin='2021-11-30T20:09:55',
+                cantidad=1,
+                porcentaje=fe.nomina.Amount(1),
+                pago=fe.nomina.Amount(100)
+            ),
+            fe.nomina.DevengadoHoraExtra(
+                hora_inicio='2021-11-30T18:09:55',
+                hora_fin='2021-11-30T19:09:55',
+                cantidad=2,
+                porcentaje=fe.nomina.Amount(2),
+                pago=fe.nomina.Amount(200)
+            )
+        ]
+    ))
+
+    xml = nomina.toFachoXML()
+    extras = xml.get_element('/fe:NominaIndividual/Devengados/HEDs/HED', multiple=True)
+    assert extras[0].get('HoraInicio') == '2021-11-30T19:09:55'
+    assert extras[0].get('HoraFin') == '2021-11-30T20:09:55'
+    assert extras[0].get('Cantidad') == '1'
+    assert extras[0].get('Porcentaje') == '1.0'
+    assert extras[0].get('Pago') == '100.00'
+    assert extras[1].get('HoraInicio') == '2021-11-30T18:09:55'
+    assert extras[1].get('HoraFin') == '2021-11-30T19:09:55'
+    assert extras[1].get('Cantidad') == '2'
+    assert extras[1].get('Porcentaje') == '2.0'
+    assert extras[1].get('Pago') == '200.00'
+
 
 def test_fecha_validacion():
     with pytest.raises(ValueError) as e: