From 1e53f204724644fd1df6ef7214f7c628cfe26acb Mon Sep 17 00:00:00 2001 From: "Benjamin Frantzen (bfr)" Date: Thu, 10 Jun 2021 15:20:07 +0000 Subject: [PATCH] [FIX] account_edi_proxy_client, l10n_it_edi_sdicoop: do not make request in demo mode When demo data is installed, requests to the proxy are blocked and we simulate a successful result by default and the proxy. - an account_edi_proxy_client.user is created even though it's counterpart on the proxy doesn't exist. - sending invoices is successfull and checking the status return simulate the invoice was accepted. - the cron checking for incoming invoice returns immediatly and no new invoice is created. closes odoo/odoo#72092 X-original-commit: 7be2e136c5e7a62d440f8323f36076d486976825 Signed-off-by: Josse Colpaert Signed-off-by: bfr-o --- .../account_edi_proxy_client/__manifest__.py | 3 ++ .../data/config_demo.xml | 9 ++++ .../models/account_edi_proxy_user.py | 33 +++++++++------ .../models/account_edi_format.py | 42 ++++++++++++------- 4 files changed, 60 insertions(+), 27 deletions(-) create mode 100644 addons/account_edi_proxy_client/data/config_demo.xml diff --git a/addons/account_edi_proxy_client/__manifest__.py b/addons/account_edi_proxy_client/__manifest__.py index 960aac51305..0e7cb76870e 100644 --- a/addons/account_edi_proxy_client/__manifest__.py +++ b/addons/account_edi_proxy_client/__manifest__.py @@ -18,6 +18,9 @@ Odoo database. 'data': [ 'security/ir.model.access.csv', ], + 'demo': [ + 'data/config_demo.xml', + ], 'installable': True, 'application': False, } diff --git a/addons/account_edi_proxy_client/data/config_demo.xml b/addons/account_edi_proxy_client/data/config_demo.xml new file mode 100644 index 00000000000..40fbed3d19c --- /dev/null +++ b/addons/account_edi_proxy_client/data/config_demo.xml @@ -0,0 +1,9 @@ + + + + + account_edi_proxy_client.demo + True + + + diff --git a/addons/account_edi_proxy_client/models/account_edi_proxy_user.py b/addons/account_edi_proxy_client/models/account_edi_proxy_user.py index 00e99d32102..9e71a9a3c7c 100644 --- a/addons/account_edi_proxy_client/models/account_edi_proxy_user.py +++ b/addons/account_edi_proxy_client/models/account_edi_proxy_user.py @@ -64,6 +64,10 @@ class AccountEdiProxyClientUser(models.Model): 'id': uuid.uuid4().hex, } + if self.env['ir.config_parameter'].get_param('account_edi_proxy_client.demo', False): + # Last barrier : in case the demo mode is not handled by the caller, we block access. + raise Exception("Can't access the proxy in demo mode") + try: response = requests.post( url, @@ -120,19 +124,22 @@ class AccountEdiProxyClientUser(models.Model): encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) - - try: - response = self._make_request(SERVER_URL + '/iap/account_edi/1/create_user', params={ - 'dbuuid': company.env['ir.config_parameter'].get_param('database.uuid'), - 'company_id': company.id, - 'edi_format_code': edi_format.code, - 'edi_identification': edi_identification, - 'public_key': base64.b64encode(public_pem) - }) - except AccountEdiProxyError as e: - raise UserError(e.message) - if 'error' in response: - raise UserError(response['error']) + if self.env['ir.config_parameter'].get_param('account_edi_proxy_client.demo', False): + # simulate registration + response = {'id_client': 'demo', 'refresh_token': 'demo'} + else: + try: + response = self._make_request(SERVER_URL + '/iap/account_edi/1/create_user', params={ + 'dbuuid': company.env['ir.config_parameter'].get_param('database.uuid'), + 'company_id': company.id, + 'edi_format_code': edi_format.code, + 'edi_identification': edi_identification, + 'public_key': base64.b64encode(public_pem) + }) + except AccountEdiProxyError as e: + raise UserError(e.message) + if 'error' in response: + raise UserError(response['error']) self.create({ 'id_client': response['id_client'], diff --git a/addons/l10n_it_edi_sdicoop/models/account_edi_format.py b/addons/l10n_it_edi_sdicoop/models/account_edi_format.py index 9d6600c7619..5b78e3ff4c2 100644 --- a/addons/l10n_it_edi_sdicoop/models/account_edi_format.py +++ b/addons/l10n_it_edi_sdicoop/models/account_edi_format.py @@ -22,6 +22,9 @@ class AccountEdiFormat(models.Model): def _cron_receive_fattura_pa(self): ''' Check the proxy for incoming invoices. ''' + if self.env['ir.config_parameter'].get_param('account_edi_proxy_client.demo', False): + return + proxy_users = self.env['account_edi_proxy_client.user'].search([('edi_format_id', '=', self.env.ref('l10n_it_edi.edi_fatturaPA').id)]) for proxy_user in proxy_users: company = proxy_user.company_id @@ -58,11 +61,13 @@ class AccountEdiFormat(models.Model): }) proxy_acks.append(id_transaction) - try: - proxy_user._make_request(SERVER_URL + '/api/l10n_it_edi/1/ack', - params={'transaction_ids': proxy_acks}) - except AccountEdiProxyError as e: - _logger.error('Error while receiving file from SdiCoop: %s', e) + + if proxy_acks: + try: + proxy_user._make_request(SERVER_URL + '/api/l10n_it_edi/1/ack', + params={'transaction_ids': proxy_acks}) + except AccountEdiProxyError as e: + _logger.error('Error while receiving file from SdiCoop: %s', e) # ------------------------------------------------------------------------- # Export @@ -133,10 +138,14 @@ class AccountEdiFormat(models.Model): return {invoice: { 'error': _("You must accept the terms and conditions in the settings to use FatturaPA."), 'blocking_level': 'error'} for invoice in invoices} - try: - responses = self._l10n_it_edi_upload([i['data'] for i in to_send.values()], proxy_user) - except AccountEdiProxyError as e: - return {invoice: {'error': e.message, 'blocking_level': 'error'} for invoice in invoices} + + if self.env['ir.config_parameter'].get_param('account_edi_proxy_client.demo', False): + responses = {filename: {'id_transaction': 'demo'} for invoice in invoices} + else: + try: + responses = self._l10n_it_edi_upload([i['data'] for i in to_send.values()], proxy_user) + except AccountEdiProxyError as e: + return {invoice: {'error': e.message, 'blocking_level': 'error'} for invoice in invoices} for filename, response in responses.items(): invoice = to_send[filename]['invoice'] @@ -160,11 +169,16 @@ class AccountEdiFormat(models.Model): return {invoice: { 'error': _("You must accept the terms and conditions in the settings to use FatturaPA."), 'blocking_level': 'error'} for invoice in invoices} - try: - responses = proxy_user._make_request(SERVER_URL + '/api/l10n_it_edi/1/in/TrasmissioneFatture', - params={'ids_transaction': list(to_check.keys())}) - except AccountEdiProxyError as e: - return {invoice: {'error': e.message, 'blocking_level': 'error'} for invoice in invoices} + + if self.env['ir.config_parameter'].get_param('account_edi_proxy_client.demo', False): + # simulate success and bypass ack + return {invoice: {'attachment': invoice.l10n_it_edi_attachment_id} for invoice in invoices} + else: + try: + responses = proxy_user._make_request(SERVER_URL + '/api/l10n_it_edi/1/in/TrasmissioneFatture', + params={'ids_transaction': list(to_check.keys())}) + except AccountEdiProxyError as e: + return {invoice: {'error': e.message, 'blocking_level': 'error'} for invoice in invoices} proxy_acks = [] for id_transaction, response in responses.items():