From 0a41d64d18dff7314c1062843747485e4b26e4e3 Mon Sep 17 00:00:00 2001 From: Katherine Zaoral Date: Wed, 2 Aug 2023 19:07:19 -0300 Subject: [PATCH] [ADD] l10n_ar_pos: new module closes odoo/odoo#133881 Signed-off-by: Joseph Caburnay (jcb) --- addons/l10n_ar_pos/__init__.py | 2 + addons/l10n_ar_pos/__manifest__.py | 27 ++++++++++++ addons/l10n_ar_pos/models/__init__.py | 3 ++ addons/l10n_ar_pos/models/pos_session.py | 42 +++++++++++++++++++ addons/l10n_ar_pos/models/res_partner.py | 15 +++++++ .../partner_editor/partner_editor.js | 20 +++++++++ .../partner_editor/partner_editor.xml | 35 ++++++++++++++++ .../components/partner_list/partner_list.js | 20 +++++++++ .../components/ticket_screen/ticket_screen.js | 20 +++++++++ .../static/src/overrides/models/pos_store.js | 31 ++++++++++++++ addons/l10n_ar_pos/views/templates.xml | 31 ++++++++++++++ .../point_of_sale/views/pos_ticket_view.xml | 6 +-- 12 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 addons/l10n_ar_pos/__init__.py create mode 100644 addons/l10n_ar_pos/__manifest__.py create mode 100644 addons/l10n_ar_pos/models/__init__.py create mode 100644 addons/l10n_ar_pos/models/pos_session.py create mode 100644 addons/l10n_ar_pos/models/res_partner.py create mode 100644 addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.js create mode 100644 addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.xml create mode 100644 addons/l10n_ar_pos/static/src/overrides/components/partner_list/partner_list.js create mode 100644 addons/l10n_ar_pos/static/src/overrides/components/ticket_screen/ticket_screen.js create mode 100644 addons/l10n_ar_pos/static/src/overrides/models/pos_store.js create mode 100644 addons/l10n_ar_pos/views/templates.xml diff --git a/addons/l10n_ar_pos/__init__.py b/addons/l10n_ar_pos/__init__.py new file mode 100644 index 00000000000..a0fdc10fe11 --- /dev/null +++ b/addons/l10n_ar_pos/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/addons/l10n_ar_pos/__manifest__.py b/addons/l10n_ar_pos/__manifest__.py new file mode 100644 index 00000000000..fd1b70e363e --- /dev/null +++ b/addons/l10n_ar_pos/__manifest__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +{ + 'name': 'Argentinean - Point of Sale with AR Doc', + 'version': '1.0', + 'category': 'Accounting/Localizations/Point of Sale', + 'description': """ +This module brings the technical requirement for the Argentinean regulation. +Install this if you are using the Point of Sale app in Argentina. + """, + 'depends': [ + 'l10n_ar', + 'point_of_sale', + ], + 'countries': ['ar'], + 'data': [ + 'views/templates.xml', + ], + 'assets': { + 'point_of_sale._assets_pos': [ + 'l10n_ar_pos/static/src/**/*' + ], + }, + 'installable': True, + 'auto_install': True, + 'license': 'LGPL-3', +} diff --git a/addons/l10n_ar_pos/models/__init__.py b/addons/l10n_ar_pos/models/__init__.py new file mode 100644 index 00000000000..c07e4a544ed --- /dev/null +++ b/addons/l10n_ar_pos/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import pos_session +from . import res_partner diff --git a/addons/l10n_ar_pos/models/pos_session.py b/addons/l10n_ar_pos/models/pos_session.py new file mode 100644 index 00000000000..cc482dba7fb --- /dev/null +++ b/addons/l10n_ar_pos/models/pos_session.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + + +class PosSession(models.Model): + + _inherit = 'pos.session' + + @api.model + def _pos_ui_models_to_load(self): + res = super()._pos_ui_models_to_load() + if self.company_id.country_code == 'AR': + res += ['l10n_ar.afip.responsibility.type', 'l10n_latam.identification.type'] + return res + + def _loader_params_res_partner(self): + vals = super()._loader_params_res_partner() + if self.company_id.country_code == 'AR': + vals['search_params']['fields'] += ['l10n_ar_afip_responsibility_type_id', 'l10n_latam_identification_type_id'] + return vals + + def _pos_data_process(self, loaded_data): + super()._pos_data_process(loaded_data) + if self.company_id.country_code == 'AR': + loaded_data['consumidor_final_anonimo_id'] = self.env.ref('l10n_ar.par_cfa').id + + def _get_pos_ui_l10n_ar_afip_responsibility_type(self, params): + return self.env['l10n_ar.afip.responsibility.type'].search_read(**params['search_params']) + + def _loader_params_l10n_ar_afip_responsibility_type(self): + return {'search_params': {'domain': [], 'fields': ['name']}} + + def _get_pos_ui_l10n_latam_identification_type(self, params): + return self.env['l10n_latam.identification.type'].search_read(**params['search_params']) + + def _loader_params_l10n_latam_identification_type(self): + """ filter only identification types used in Argentina""" + return { + 'search_params': { + 'domain': [('l10n_ar_afip_code', '!=', False), ('active', '=', True)], + 'fields': ['name']}, + } diff --git a/addons/l10n_ar_pos/models/res_partner.py b/addons/l10n_ar_pos/models/res_partner.py new file mode 100644 index 00000000000..7e03931d517 --- /dev/null +++ b/addons/l10n_ar_pos/models/res_partner.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from odoo import models, api, _ +from odoo.exceptions import UserError + + +class ResPartner(models.Model): + + _inherit = 'res.partner' + + @api.ondelete(at_uninstall=False) + def _ar_unlink_except_master_data(self): + consumidor_final_anonimo = self.env.ref('l10n_ar.par_cfa').id + for partner in self.ids: + if partner == consumidor_final_anonimo: + raise UserError(_('Deleting this partner is not allowed.')) diff --git a/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.js b/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.js new file mode 100644 index 00000000000..cdc0b0eb9cb --- /dev/null +++ b/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.js @@ -0,0 +1,20 @@ +/** @odoo-module */ + +import { PartnerDetailsEdit } from "@point_of_sale/app/screens/partner_list/partner_editor/partner_editor"; +import { patch } from "@web/core/utils/patch"; + +patch(PartnerDetailsEdit.prototype, { + setup(){ + super.setup(...arguments); + if (this.pos.isArgentineanCompany()) { + this.intFields.push("l10n_ar_afip_responsibility_type_id"); + this.intFields.push("l10n_latam_identification_type_id"); + this.changes.l10n_ar_afip_responsibility_type_id = + this.props.partner.l10n_ar_afip_responsibility_type_id && + this.props.partner.l10n_ar_afip_responsibility_type_id[0]; + this.changes.l10n_latam_identification_type_id = + this.props.partner.l10n_latam_identification_type_id && + this.props.partner.l10n_latam_identification_type_id[0]; + } + }, +}); diff --git a/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.xml b/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.xml new file mode 100644 index 00000000000..42e4e114966 --- /dev/null +++ b/addons/l10n_ar_pos/static/src/overrides/components/partner_editor/partner_editor.xml @@ -0,0 +1,35 @@ + + + + + + + +
+ + +
+ +
+ + +
+
+
+
+ +
diff --git a/addons/l10n_ar_pos/static/src/overrides/components/partner_list/partner_list.js b/addons/l10n_ar_pos/static/src/overrides/components/partner_list/partner_list.js new file mode 100644 index 00000000000..6eab80ddae0 --- /dev/null +++ b/addons/l10n_ar_pos/static/src/overrides/components/partner_list/partner_list.js @@ -0,0 +1,20 @@ +/** @odoo-module */ + +import { PartnerListScreen } from "@point_of_sale/app/screens/partner_list/partner_list"; +import { patch } from "@web/core/utils/patch"; + +patch(PartnerListScreen.prototype, { + createPartner() { + super.createPartner(...arguments); + if (this.pos.isArgentineanCompany()) { + this.state.editModeProps.partner.l10n_latam_identification_type_id = [ + this.pos.l10n_latam_identification_types[0].id, + this.pos.l10n_latam_identification_types[0].name, + ]; + this.state.editModeProps.partner.l10n_ar_afip_responsibility_type_id = [ + this.pos.l10n_ar_afip_responsibility_types[0].id, + this.pos.l10n_ar_afip_responsibility_types[0].name, + ]; + } + }, +}); diff --git a/addons/l10n_ar_pos/static/src/overrides/components/ticket_screen/ticket_screen.js b/addons/l10n_ar_pos/static/src/overrides/components/ticket_screen/ticket_screen.js new file mode 100644 index 00000000000..157d5451620 --- /dev/null +++ b/addons/l10n_ar_pos/static/src/overrides/components/ticket_screen/ticket_screen.js @@ -0,0 +1,20 @@ +/** @odoo-module */ + +import { TicketScreen } from "@point_of_sale/app/screens/ticket_screen/ticket_screen"; +import { patch } from "@web/core/utils/patch"; + +patch(TicketScreen.prototype, { + setPartnerToRefundOrder(partner, destinationOrder) { + if (this.pos.isArgentineanCompany()) { + if ( + partner && + (!destinationOrder.get_partner() || + destinationOrder.get_partner().id === this.pos.consumidorFinalAnonimoId) + ) { + destinationOrder.set_partner(partner); + } + } else { + super.setPartnerToRefundOrder(...arguments); + } + }, +}); diff --git a/addons/l10n_ar_pos/static/src/overrides/models/pos_store.js b/addons/l10n_ar_pos/static/src/overrides/models/pos_store.js new file mode 100644 index 00000000000..24e73264ef5 --- /dev/null +++ b/addons/l10n_ar_pos/static/src/overrides/models/pos_store.js @@ -0,0 +1,31 @@ +/** @odoo-module */ + +import { PosStore } from "@point_of_sale/app/store/pos_store"; +import { Order } from "@point_of_sale/app/store/models"; +import { patch } from "@web/core/utils/patch"; + +patch(PosStore.prototype, { + // @Override + async _processData(loadedData) { + await super._processData(...arguments); + if (this.isArgentineanCompany()) { + this.l10n_ar_afip_responsibility_types = loadedData["l10n_ar.afip.responsibility.type"]; + this.l10n_latam_identification_types = loadedData["l10n_latam.identification.type"]; + this.consumidorFinalAnonimoId = loadedData["consumidor_final_anonimo_id"]; + } + }, + isArgentineanCompany() { + return this.company.country?.code == "AR"; + }, +}); + +patch(Order.prototype, { + setup() { + super.setup(...arguments); + if (this.pos.isArgentineanCompany()) { + if (!this.partner) { + this.partner = this.pos.db.partner_by_id[this.pos.consumidorFinalAnonimoId]; + } + } + }, +}); diff --git a/addons/l10n_ar_pos/views/templates.xml b/addons/l10n_ar_pos/views/templates.xml new file mode 100644 index 00000000000..2bf01223525 --- /dev/null +++ b/addons/l10n_ar_pos/views/templates.xml @@ -0,0 +1,31 @@ + + + + + + diff --git a/addons/point_of_sale/views/pos_ticket_view.xml b/addons/point_of_sale/views/pos_ticket_view.xml index 5b6b8109c41..95bad41ac0f 100644 --- a/addons/point_of_sale/views/pos_ticket_view.xml +++ b/addons/point_of_sale/views/pos_ticket_view.xml @@ -58,7 +58,7 @@ ,
- +
Edit @@ -88,7 +88,7 @@
-
+

Please enter your billing information or Sign in:

@@ -118,7 +118,7 @@
-
+