diff --git a/source/finkok/finkok.py b/source/finkok/finkok.py index ad576c9..8c7e16b 100644 --- a/source/finkok/finkok.py +++ b/source/finkok/finkok.py @@ -357,6 +357,46 @@ class PACFinkok(object): return result.token + def client_add_timbres(self, rfc, credit): + """Agregar credito a un emisor + + Se requiere cuenta de reseller + + Args: + rfc (str): El RFC del emisor, debe existir + credit (int): Cantidad de folios a agregar + + Returns: + dict + 'success': True or False, + 'credit': nuevo credito despues de agregar or None + 'message': + 'Success, added {credit} of credit to {RFC}.' + 'RFC no encontrado' + """ + auth = AUTH['RESELLER'] + + method = 'client' + client = Client( + self.URL[method], transport=self._transport, plugins=self._plugins) + args = { + 'username': auth['user'], + 'password': auth['pass'], + 'taxpayer_id': rfc, + 'credit': credit, + } + + result = self._get_result(client, 'assign', args) + if self.error: + log.error(error) + return '' + + if not result.success: + self.error = result.message + return 0 + + return result.credit + def client_balance(self, auth={}, rfc=''): """Regresa los timbres restantes del cliente Se pueden usar las credenciales de relleser o las credenciales del emisor @@ -375,8 +415,8 @@ class PACFinkok(object): auth = AUTH['RESELLER'] method = 'client' - client = Client( - self.URL[method], transport=self._transport, plugins=self._plugins) + client = Client(self.URL[method], + transport=self._transport, plugins=self._plugins) args = { 'reseller_username': auth['user'], 'reseller_password': auth['pass'], @@ -395,3 +435,115 @@ class PACFinkok(object): return result.users.ResellerUser[0].credit + def client_set_status(self, rfc, status): + """Edita el estatus (Activo o Suspendido) de un cliente + Se requiere cuenta de reseller para usar este método + + Args: + rfc (str): El RFC del cliente + + Kwargs: + status (bool): + True == 'A' == Activo + False == 'S' == Suspendido + + Returns: + dict + 'message': + 'Account Created successfully' + 'Account Already exists' + 'success': True or False + """ + auth = AUTH['RESELLER'] + ts = {True: 'A', False: 'S'} + method = 'client' + client = Client(self.URL[method], + transport=self._transport, plugins=self._plugins) + + args = { + 'reseller_username': auth['user'], + 'reseller_password': auth['pass'], + 'taxpayer_id': rfc, + 'status': ts[status], + } + result = self._get_result(client, 'edit', args) + + if self.error: + return False + + if not result.success: + self.error = result.message + return False + + return True + + def client_switch(self, rfc, type_user): + """Edita el tipo de timbrado (OnDemand o Prepago) de un cliente + Se requiere cuenta de reseller para usar este método + + Args: + rfc (str): El RFC del cliente + + Kwargs: + status (bool): + True == 'O' == OnDemand + False == 'P' == Prepago + + Returns: + dict + 'message': + 'Account Created successfully' + 'Account Already exists' + 'success': True or False + """ + auth = AUTH['RESELLER'] + tu = {True: 'O', False: 'P'} + method = 'client' + client = Client(self.URL[method], + transport=self._transport, plugins=self._plugins) + + args = { + 'username': auth['user'], + 'password': auth['pass'], + 'taxpayer_id': rfc, + 'type_user': tu[type_user], + } + result = self._get_result(client, 'switch', args) + + if self.error: + return False + + if not result.success: + self.error = result.message + return False + + return True + + def client_report_folios(self, rfc, date_from, date_to, invoice_type='I'): + """Obtiene un reporte del total de facturas timbradas + """ + auth = AUTH['RESELLER'] + + args = { + 'username': auth['user'], + 'password': auth['pass'], + 'taxpayer_id': rfc, + 'date_from': date_from, + 'date_to': date_to, + 'invoice_type': invoice_type, + } + + method = 'util' + client = Client(self.URL[method], + transport=self._transport, plugins=self._plugins) + + result = self._get_result(client, 'report_total', args) + + if result.result is None: + # ~ PAC - Debería regresar RFC inexistente o sin registros + self.error = 'RFC no existe o no tiene registros' + return 0 + + total = result.result.ReportTotal[0].total + + return total diff --git a/source/finkok/finkok1.py b/source/finkok/finkok1.py index 72e5e79..c2930b2 100644 --- a/source/finkok/finkok1.py +++ b/source/finkok/finkok1.py @@ -93,88 +93,6 @@ class PACFinkok(object): return result.token - def client_add_timbres(self, rfc, credit): - """Agregar credito a un emisor - - Se requiere cuenta de reseller - - Args: - rfc (str): El RFC del emisor, debe existir - credit (int): Cantidad de folios a agregar - - Returns: - dict - 'success': True or False, - 'credit': nuevo credito despues de agregar or None - 'message': - 'Success, added {credit} of credit to {RFC}.' - 'RFC no encontrado' - """ - auth = FINKOK['RESELLER'] - - if not isinstance(credit, int): - self.error = 'El credito debe ser un entero' - return 0 - - method = 'client' - client = Client( - self.URL[method], transport=self._transport, plugins=self._plugins) - args = { - 'username': auth['USER'], - 'password': auth['PASS'], - 'taxpayer_id': rfc, - 'credit': credit, - } - - result = self._get_result(client, 'assign', args) - if self.error: - return '' - - if not result.success: - self.error = result.message - return 0 - - return result.credit - - def client_edit(self, rfc, status=True): - """Edita el estatus (Activo o Suspendido) de un cliente - Se requiere cuenta de reseller para usar este método - - Args: - rfc (str): El RFC del cliente - - Kwargs: - status (bool): True == 'A' == Activo or False == 'S' == Suspendido - - Returns: - dict - 'message': - 'Account Created successfully' - 'Account Already exists' - 'success': True or False - """ - auth = FINKOK['RESELLER'] - ts = {True: 'A', False: 'S'} - method = 'client' - client = Client( - self.URL[method], transport=self._transport, plugins=self._plugins) - - args = { - 'reseller_username': auth['USER'], - 'reseller_password': auth['PASS'], - 'taxpayer_id': rfc, - 'status': ts[status], - } - result = self._get_result(client, 'edit', args) - if self.error: - return False - - if not result.success: - self.error = result.message - return False - - return True - def client_get(self, rfc): """Regresa el estatus del cliente Se requiere cuenta de reseller para usar este método @@ -295,42 +213,6 @@ class PACFinkok(object): return self.result.result.ReportTotalCredit - def get_report_total(self, rfc, date_from, date_to, invoice_type='I'): - """Obtiene un reporte del total de facturas timbradas - """ - auth = FINKOK['RESELLER'] - - args = { - 'username': auth['USER'], - 'password': auth['PASS'], - 'taxpayer_id': rfc, - 'date_from': date_from, - 'date_to': date_to, - 'invoice_type': invoice_type, - } - - method = 'util' - client = Client( - self.URL[method], transport=self._transport, plugins=self._plugins) - try: - self.result = client.service.report_total(**args) - except Fault as e: - self.error = str(e) - return 0 - except TransportError as e: - self.error = str(e) - return 0 - except ConnectionError: - self.error = 'Verifica la conexión a internet' - return 0 - - if self.result.result is None: - # ~ PAC - Debería regresar RFC inexistente o sin registros - self.error = 'RFC no existe o no tiene registros' - return 0 - - return self.result.result.ReportTotal[0].total or 0 - def get_report_uuid(self, rfc, date_from, date_to, invoice_type='I'): """Obtiene un reporte de los CFDI timbrados """ diff --git a/source/tests/tests_finkok.py b/source/tests/tests_finkok.py index 931d412..c90f6e8 100644 --- a/source/tests/tests_finkok.py +++ b/source/tests/tests_finkok.py @@ -292,6 +292,14 @@ class TestClient(unittest.TestCase): self.assertTrue(result) return + def test_client_report_folios(self): + expected = 0 + date_from = '2021-01-01T00:00:00' + date_to = '2021-02-01T00:00:00' + result = self.pac.client_report_folios(self.RFC, date_from, date_to) + self.assertEqual(result, expected) + return + if __name__ == '__main__': unittest.main()