From 2cd982e1fc00f947f70620af07cc0165687e45cc Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 27 Dec 2019 08:56:02 -0300 Subject: [PATCH 01/50] [NEW] l10n_br_portal base --- l10n_br_portal/README.rst | 91 ++++++++++++ l10n_br_portal/__init__.py | 3 + l10n_br_portal/__manifest__.py | 24 +++ l10n_br_portal/controllers/__init__.py | 3 + l10n_br_portal/controllers/portal.py | 32 ++++ l10n_br_portal/static/description/icon.png | Bin 0 -> 9455 bytes .../static/src/js/l10n_br_portal.js | 21 +++ l10n_br_portal/views/assets.xml | 9 ++ l10n_br_portal/views/portal_templates.xml | 137 ++++++++++++++++++ 9 files changed, 320 insertions(+) create mode 100644 l10n_br_portal/README.rst create mode 100644 l10n_br_portal/__init__.py create mode 100644 l10n_br_portal/__manifest__.py create mode 100644 l10n_br_portal/controllers/__init__.py create mode 100644 l10n_br_portal/controllers/portal.py create mode 100644 l10n_br_portal/static/description/icon.png create mode 100644 l10n_br_portal/static/src/js/l10n_br_portal.js create mode 100644 l10n_br_portal/views/assets.xml create mode 100644 l10n_br_portal/views/portal_templates.xml diff --git a/l10n_br_portal/README.rst b/l10n_br_portal/README.rst new file mode 100644 index 000000000000..c481901ad78c --- /dev/null +++ b/l10n_br_portal/README.rst @@ -0,0 +1,91 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============== +L10n Br Portal +============== + +Campos Brasileiros no Portal + +Installation +============ + +To install this module, you need to: + +#. Do this ... + +Configuration +============= + +To configure this module, you need to: + +#. Go to ... + +.. figure:: path/to/local/image.png + :alt: alternative description + :width: 600 px + +Usage +===== + +To use this module, you need to: + +#. Go to ... + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/{repo_id}/{branch} + +.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt +.. branch is "8.0" for example + +Known issues / Roadmap +====================== + +* ... + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Firstname Lastname +* Second Person + +Funders +------- + +The development of this module has been financially supported by: + +* Company 1 name +* Company 2 name + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/l10n_br_portal/__init__.py b/l10n_br_portal/__init__.py new file mode 100644 index 000000000000..e5fb8940cd39 --- /dev/null +++ b/l10n_br_portal/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2016 KMEE - Luis Felipe Miléo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from . import controllers diff --git a/l10n_br_portal/__manifest__.py b/l10n_br_portal/__manifest__.py new file mode 100644 index 000000000000..87598f6f21a2 --- /dev/null +++ b/l10n_br_portal/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2019 KMEE +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'L10n Br Portal', + 'summary': """ + Campos Brasileiros no Portal""", + 'version': '12.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'KMEE,Odoo Community Association (OCA)', + 'website': 'https://odoo-brasil.org', + 'depends': [ + 'portal', + 'l10n_br_zip', + ], + 'data': [ + 'views/assets.xml', + + 'views/portal_templates.xml', + ], + 'demo': [ + ], + 'auto_install': True, +} diff --git a/l10n_br_portal/controllers/__init__.py b/l10n_br_portal/controllers/__init__.py new file mode 100644 index 000000000000..80ebae3d0981 --- /dev/null +++ b/l10n_br_portal/controllers/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2016 KMEE - Luis Felipe Miléo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from . import portal diff --git a/l10n_br_portal/controllers/portal.py b/l10n_br_portal/controllers/portal.py new file mode 100644 index 000000000000..1eeca5b81bf5 --- /dev/null +++ b/l10n_br_portal/controllers/portal.py @@ -0,0 +1,32 @@ +# Copyright 2016 KMEE - Luis Felipe Miléo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import http, _ +from odoo.http import request + +from odoo.addons.portal.controllers.portal import CustomerPortal + + +class L10nBrPortal(CustomerPortal): + MANDATORY_BILLING_FIELDS = list( + set(CustomerPortal.MANDATORY_BILLING_FIELDS) - set(["city"]) + ) + [ + "state_id", "city_id", "district", "street_number", "legal_name", + "cnpj_cpf", "zipcode", "inscr_est" + ] + OPTIONAL_BILLING_FIELDS = list( + set(CustomerPortal.OPTIONAL_BILLING_FIELDS) - set(["state_id"]) + ) + ["inscr_mun", "street2", "mobile"] + + def _prepare_portal_layout_values(self): + values = super(L10nBrPortal, self)._prepare_portal_layout_values() + cities = request.env['res.city'].sudo().search([]) + values.update({ + 'cities': cities, + }) + return values + + @http.route(['/my/account'], type='http', auth='user', website=True) + def account(self, redirect=None, **post): + res = super(L10nBrPortal, self).account(**post) + return res diff --git a/l10n_br_portal/static/description/icon.png b/l10n_br_portal/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/l10n_br_portal/static/src/js/l10n_br_portal.js b/l10n_br_portal/static/src/js/l10n_br_portal.js new file mode 100644 index 000000000000..c580f338e99f --- /dev/null +++ b/l10n_br_portal/static/src/js/l10n_br_portal.js @@ -0,0 +1,21 @@ +odoo.define('l10n_br_portal.l10n_br_portal', function (require) { +'use strict'; + require('web.dom_ready'); + + if (!$('.o_portal').length) { + return $.Deferred().reject("DOM doesn't contain '.o_portal'"); + } + + if ($('.o_portal_details').length) { + var state_options = $("select[name='city_id']:enabled option:not(:first)"); + $('.o_portal_details').on('change', "select[name='state_id']", function () { + var select = $("select[name='city_id']"); + state_options.detach(); + var displayed_state = state_options.filter("[data-state_id="+($(this).val() || 0)+"]"); + var nb = displayed_state.appendTo(select).show().size(); + select.parent().toggle(nb>=1); + }); + $('.o_portal_details').find("select[name='state_id']").change(); + } + +}); diff --git a/l10n_br_portal/views/assets.xml b/l10n_br_portal/views/assets.xml new file mode 100644 index 000000000000..15ac003d012e --- /dev/null +++ b/l10n_br_portal/views/assets.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/l10n_br_portal/views/portal_templates.xml b/l10n_br_portal/views/portal_templates.xml new file mode 100644 index 000000000000..9a45a6d94e8a --- /dev/null +++ b/l10n_br_portal/views/portal_templates.xml @@ -0,0 +1,137 @@ + + + + + + From 86d8edfe5a505ceb4799f96b5e61a4794113bb27 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 27 Dec 2019 09:52:32 -0300 Subject: [PATCH 02/50] [NEW] Portal tests --- l10n_br_portal/tests/__init__.py | 4 ++++ l10n_br_portal/tests/test_load_process.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 l10n_br_portal/tests/__init__.py create mode 100644 l10n_br_portal/tests/test_load_process.py diff --git a/l10n_br_portal/tests/__init__.py b/l10n_br_portal/tests/__init__.py new file mode 100644 index 000000000000..6536222ed74e --- /dev/null +++ b/l10n_br_portal/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2016 KMEE - Luis Felipe Miléo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl + +from . import test_load_process diff --git a/l10n_br_portal/tests/test_load_process.py b/l10n_br_portal/tests/test_load_process.py new file mode 100644 index 000000000000..f619147e402b --- /dev/null +++ b/l10n_br_portal/tests/test_load_process.py @@ -0,0 +1,15 @@ +# Copyright 2016 KMEE - Luis Felipe Miléo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl + +import odoo.tests + + +@odoo.tests.tagged('post_install', '-at_install') +class TestUi(odoo.tests.HttpCase): + def test_01_portal_load_tour(self): + self.phantom_js( + "/", + "odoo.__DEBUG__.services['web_tour.tour'].run('portal_load_homepage')", + "odoo.__DEBUG__.services['web_tour.tour'].tours.portal_load_homepage.ready", + login="portal" + ) From 0cf8e3dffac01d32c246e1a55b0fb397b7cbce39 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 27 Dec 2019 10:10:46 -0300 Subject: [PATCH 03/50] [NEW] Readme screenshot --- l10n_br_portal/README.rst | 31 +++++------------- .../static/description/screenshot1.png | Bin 0 -> 72013 bytes 2 files changed, 9 insertions(+), 22 deletions(-) create mode 100644 l10n_br_portal/static/description/screenshot1.png diff --git a/l10n_br_portal/README.rst b/l10n_br_portal/README.rst index c481901ad78c..ea79eb8b5386 100644 --- a/l10n_br_portal/README.rst +++ b/l10n_br_portal/README.rst @@ -8,30 +8,24 @@ L10n Br Portal Campos Brasileiros no Portal +.. figure:: l10n_br_portal/static/description/screenshot1.png + :alt: campos + :width: 800 px + + Installation ============ To install this module, you need to: -#. Do this ... +#. Nothing Configuration ============= To configure this module, you need to: -#. Go to ... - -.. figure:: path/to/local/image.png - :alt: alternative description - :width: 600 px - -Usage -===== - -To use this module, you need to: - -#. Go to ... +#. Nothing .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot @@ -40,11 +34,6 @@ To use this module, you need to: .. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt .. branch is "8.0" for example -Known issues / Roadmap -====================== - -* ... - Bug Tracker =========== @@ -64,16 +53,14 @@ Images Contributors ------------ -* Firstname Lastname -* Second Person +* Luis Felipe Mileo Funders ------- The development of this module has been financially supported by: -* Company 1 name -* Company 2 name +* KMEE Maintainer ---------- diff --git a/l10n_br_portal/static/description/screenshot1.png b/l10n_br_portal/static/description/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c6ea367f9d044e4a464bf7064bc37aadc36d65 GIT binary patch literal 72013 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 DpfTo! literal 0 HcmV?d00001 From 107a868514b2f552a3b1a3e8f60dfb46c87e7ba5 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 3 Jan 2020 14:55:29 -0300 Subject: [PATCH 04/50] =?UTF-8?q?[NEW]=20Consultar=20CEP=20atrav=C3=A9s=20?= =?UTF-8?q?do=20portal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- l10n_br_portal/controllers/portal.py | 19 ++++++++- .../static/src/js/l10n_br_portal.js | 39 +++++++++++++++---- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/l10n_br_portal/controllers/portal.py b/l10n_br_portal/controllers/portal.py index 1eeca5b81bf5..a287c4cbdc34 100644 --- a/l10n_br_portal/controllers/portal.py +++ b/l10n_br_portal/controllers/portal.py @@ -9,7 +9,7 @@ class L10nBrPortal(CustomerPortal): MANDATORY_BILLING_FIELDS = list( - set(CustomerPortal.MANDATORY_BILLING_FIELDS) - set(["city"]) + set(CustomerPortal.MANDATORY_BILLING_FIELDS) ) + [ "state_id", "city_id", "district", "street_number", "legal_name", "cnpj_cpf", "zipcode", "inscr_est" @@ -28,5 +28,20 @@ def _prepare_portal_layout_values(self): @http.route(['/my/account'], type='http', auth='user', website=True) def account(self, redirect=None, **post): - res = super(L10nBrPortal, self).account(**post) + if post and post.get('city_id'): + city_id = request.env['res.city'].sudo().browse( + int(post.get('city_id'))) + if city_id: + post['city'] = city_id.name + res = super(L10nBrPortal, self).account(redirect, **post) return res + + @http.route('/l10n_br/zip_search', type='json', auth="user", website=True) + def zip_search(self, zip): + try: + return request.env['l10n_br.zip'].sudo()._consultar_cep(zip) + except Exception as e: + return { + 'error': 'zip', + 'error_message': e, + } diff --git a/l10n_br_portal/static/src/js/l10n_br_portal.js b/l10n_br_portal/static/src/js/l10n_br_portal.js index c580f338e99f..78005d822c3d 100644 --- a/l10n_br_portal/static/src/js/l10n_br_portal.js +++ b/l10n_br_portal/static/src/js/l10n_br_portal.js @@ -1,21 +1,46 @@ odoo.define('l10n_br_portal.l10n_br_portal', function (require) { 'use strict'; + require('web.dom_ready'); + var ajax = require('web.ajax'); if (!$('.o_portal').length) { return $.Deferred().reject("DOM doesn't contain '.o_portal'"); } if ($('.o_portal_details').length) { - var state_options = $("select[name='city_id']:enabled option:not(:first)"); - $('.o_portal_details').on('change', "select[name='state_id']", function () { - var select = $("select[name='city_id']"); - state_options.detach(); - var displayed_state = state_options.filter("[data-state_id="+($(this).val() || 0)+"]"); - var nb = displayed_state.appendTo(select).show().size(); - select.parent().toggle(nb>=1); + var state_options = $( + "select[name='city_id']:enabled option:not(:first)"); + $('.o_portal_details').on( + 'change', "select[name='state_id']", function () { + var select = $("select[name='city_id']"); + state_options.detach(); + var displayed_state = state_options.filter( + "[data-state_id="+($(this).val() || 0)+"]"); + var nb = displayed_state.appendTo(select).show().size(); + select.parent().toggle(nb>=1); }); $('.o_portal_details').find("select[name='state_id']").change(); + $('.o_portal_details').on('change', "input[name='zipcode']", + function () { + var vals = {zip: $('input[name="zipcode"]').val()}; + console.log("Changing ZIP"); + ajax.jsonRpc("/l10n_br/zip_search", 'call', vals) + .then(function(data) { + if (data.error) { + // TODO: Retornar nos campos error e error_message + console.error('Falha ao consultar cep'); + } else { + $('input[name="district"]').val(data.district); + $('input[name="street"]').val(data.street); + $('select[name="country_id"]').val(data.country_id); + $('select[name="country_id"]').change(); + $('select[name="state_id"]').val(data.state_id); + $('select[name="state_id"]').change(); + $('select[name="city_id"]').val(data.city_id); + } + }); + }); } }); From 34e734b0c55d7e1c0b2639da622b4f36100835ec Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 3 Jan 2020 21:11:16 -0300 Subject: [PATCH 05/50] [FIX] lint errors --- l10n_br_portal/controllers/portal.py | 6 ++-- .../static/src/js/l10n_br_portal.js | 36 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/l10n_br_portal/controllers/portal.py b/l10n_br_portal/controllers/portal.py index a287c4cbdc34..b0bdf762d898 100644 --- a/l10n_br_portal/controllers/portal.py +++ b/l10n_br_portal/controllers/portal.py @@ -1,7 +1,7 @@ # Copyright 2016 KMEE - Luis Felipe Miléo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import http, _ +from odoo import http from odoo.http import request from odoo.addons.portal.controllers.portal import CustomerPortal @@ -37,9 +37,9 @@ def account(self, redirect=None, **post): return res @http.route('/l10n_br/zip_search', type='json', auth="user", website=True) - def zip_search(self, zip): + def zip_search(self, zipcode): try: - return request.env['l10n_br.zip'].sudo()._consultar_cep(zip) + return request.env['l10n_br.zip'].sudo()._consultar_cep(zipcode) except Exception as e: return { 'error': 'zip', diff --git a/l10n_br_portal/static/src/js/l10n_br_portal.js b/l10n_br_portal/static/src/js/l10n_br_portal.js index 78005d822c3d..7d8e2f2f4bea 100644 --- a/l10n_br_portal/static/src/js/l10n_br_portal.js +++ b/l10n_br_portal/static/src/js/l10n_br_portal.js @@ -1,5 +1,5 @@ odoo.define('l10n_br_portal.l10n_br_portal', function (require) { -'use strict'; + 'use strict'; require('web.dom_ready'); var ajax = require('web.ajax'); @@ -19,28 +19,28 @@ odoo.define('l10n_br_portal.l10n_br_portal', function (require) { "[data-state_id="+($(this).val() || 0)+"]"); var nb = displayed_state.appendTo(select).show().size(); select.parent().toggle(nb>=1); - }); + }); $('.o_portal_details').find("select[name='state_id']").change(); $('.o_portal_details').on('change', "input[name='zipcode']", function () { - var vals = {zip: $('input[name="zipcode"]').val()}; + var vals = {zipcode: $('input[name="zipcode"]').val()}; console.log("Changing ZIP"); ajax.jsonRpc("/l10n_br/zip_search", 'call', vals) - .then(function(data) { - if (data.error) { - // TODO: Retornar nos campos error e error_message - console.error('Falha ao consultar cep'); - } else { - $('input[name="district"]').val(data.district); - $('input[name="street"]').val(data.street); - $('select[name="country_id"]').val(data.country_id); - $('select[name="country_id"]').change(); - $('select[name="state_id"]').val(data.state_id); - $('select[name="state_id"]').change(); - $('select[name="city_id"]').val(data.city_id); - } - }); - }); + .then(function (data) { + if (data.error) { + // TODO: Retornar nos campos error e error_message + console.error('Falha ao consultar cep'); + } else { + $('input[name="district"]').val(data.district); + $('input[name="street"]').val(data.street); + $('select[name="country_id"]').val(data.country_id); + $('select[name="country_id"]').change(); + $('select[name="state_id"]').val(data.state_id); + $('select[name="state_id"]').change(); + $('select[name="city_id"]').val(data.city_id); + } + }); + }); } }); From 53fea6d405215caaba9f9865cb6bdec8eee79a90 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 3 Jan 2020 22:17:31 -0300 Subject: [PATCH 06/50] [NEW] Tests in l10n_br_portal --- .../static/src/js/l10n_br_portal_tour.js | 37 +++++++++++++++++++ l10n_br_portal/tests/test_load_process.py | 14 +++++-- l10n_br_portal/views/assets.xml | 1 + l10n_br_portal/views/portal_templates.xml | 4 +- 4 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 l10n_br_portal/static/src/js/l10n_br_portal_tour.js diff --git a/l10n_br_portal/static/src/js/l10n_br_portal_tour.js b/l10n_br_portal/static/src/js/l10n_br_portal_tour.js new file mode 100644 index 000000000000..0dff6c235dcd --- /dev/null +++ b/l10n_br_portal/static/src/js/l10n_br_portal_tour.js @@ -0,0 +1,37 @@ +odoo.define('l10n_br_portal.tour', function (require) { + 'use strict'; + + var tour = require('web_tour.tour'); + + tour.register('l10n_br_portal_tour', { + test: true, + url: '/my/account', + }, [{ + content: "Complete name", + trigger: "input[name=name]", + run: "text KMEE", + }, { + content: "Complete Legal Name", + trigger: "input[name=legal_name]", + run: "text KMEE INFORMATICA LTDA", + }, { + content: "Complete CNPJ", + trigger: "input[name=cnpj_cpf]", + run: "text 23130935000198", + }, { + content: "Complete IE", + trigger: "input[name=inscr_est]", + run: "text ISENTO", + }, { + content: "Complete ZIP", + trigger: "input[name=zipcode]", + run: "text 37500-015", + }, { + content: "check city is Itajubá", + trigger: 'select[name=city_id]:contains("Itajubá")', + run: function () { /* keep empty ... */}, + }, { + content: "Submit Portal", + trigger: 'button[type=submit]', + }]); +}); diff --git a/l10n_br_portal/tests/test_load_process.py b/l10n_br_portal/tests/test_load_process.py index f619147e402b..26c43f8d7402 100644 --- a/l10n_br_portal/tests/test_load_process.py +++ b/l10n_br_portal/tests/test_load_process.py @@ -6,10 +6,18 @@ @odoo.tests.tagged('post_install', '-at_install') class TestUi(odoo.tests.HttpCase): - def test_01_portal_load_tour(self): + def test_01_l10n_br_portal_load_tour(self): self.phantom_js( "/", - "odoo.__DEBUG__.services['web_tour.tour'].run('portal_load_homepage')", - "odoo.__DEBUG__.services['web_tour.tour'].tours.portal_load_homepage.ready", + "odoo.__DEBUG__.services['web_tour.tour'].run('l10n_br_portal_tour')", # noqa: E501 + "odoo.__DEBUG__.services['web_tour.tour'].tours.l10n_br_portal_tour.ready", # noqa: E501 login="portal" ) + # check result + record = self.env.ref('base.partner_demo_portal') + self.assertEqual(record.name, 'KMEE') + self.assertEqual(record.legal_name, 'KMEE INFORMATICA LTDA') + self.assertEqual(record.cnpj_cpf, '23130935000198') + self.assertEqual(record.country_id.code, 'BR') + self.assertEqual(record.state_id.code, 'MG') + self.assertEqual(record.city_id.ibge_code, '32404') diff --git a/l10n_br_portal/views/assets.xml b/l10n_br_portal/views/assets.xml index 15ac003d012e..3c15dd3c0693 100644 --- a/l10n_br_portal/views/assets.xml +++ b/l10n_br_portal/views/assets.xml @@ -3,6 +3,7 @@ diff --git a/l10n_br_portal/views/portal_templates.xml b/l10n_br_portal/views/portal_templates.xml index 9a45a6d94e8a..c0e3ba70156b 100644 --- a/l10n_br_portal/views/portal_templates.xml +++ b/l10n_br_portal/views/portal_templates.xml @@ -123,9 +123,7 @@
-
From 266313c086fb34f0bd36e63ab61eec5f410c6037 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 4 Jan 2020 01:36:47 -0300 Subject: [PATCH 07/50] [NEW] CNPJ / CPF / ZIP mask --- .../static/lib/cleave/cleave.min.js | 8 +++++++ .../static/src/js/l10n_br_portal.js | 21 +++++++++++++++++++ l10n_br_portal/views/assets.xml | 1 + l10n_br_portal/views/portal_templates.xml | 4 ++-- 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 l10n_br_portal/static/lib/cleave/cleave.min.js diff --git a/l10n_br_portal/static/lib/cleave/cleave.min.js b/l10n_br_portal/static/lib/cleave/cleave.min.js new file mode 100644 index 000000000000..69224184893d --- /dev/null +++ b/l10n_br_portal/static/lib/cleave/cleave.min.js @@ -0,0 +1,8 @@ +/*! + * cleave.js - 1.5.3 + * https://github.com/nosir/cleave.js + * Apache License Version 2.0 + * + * Copyright (C) 2012-2019 Max Huang https://github.com/nosir/ + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Cleave=t():e.Cleave=t()}(this,function(){return function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return e[i].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){(function(t){"use strict";var i=function(e,t){var r=this,n=!1;if("string"==typeof e?(r.element=document.querySelector(e),n=document.querySelectorAll(e).length>1):"undefined"!=typeof e.length&&e.length>0?(r.element=e[0],n=e.length>1):r.element=e,!r.element)throw new Error("[cleave.js] Please check the element");if(n)try{console.warn("[cleave.js] Multiple input fields matched, cleave.js will only take the first one.")}catch(a){}t.initValue=r.element.value,r.properties=i.DefaultProperties.assign({},t),r.init()};i.prototype={init:function(){var e=this,t=e.properties;return t.numeral||t.phone||t.creditCard||t.time||t.date||0!==t.blocksLength||t.prefix?(t.maxLength=i.Util.getMaxLength(t.blocks),e.isAndroid=i.Util.isAndroid(),e.lastInputValue="",e.onChangeListener=e.onChange.bind(e),e.onKeyDownListener=e.onKeyDown.bind(e),e.onFocusListener=e.onFocus.bind(e),e.onCutListener=e.onCut.bind(e),e.onCopyListener=e.onCopy.bind(e),e.element.addEventListener("input",e.onChangeListener),e.element.addEventListener("keydown",e.onKeyDownListener),e.element.addEventListener("focus",e.onFocusListener),e.element.addEventListener("cut",e.onCutListener),e.element.addEventListener("copy",e.onCopyListener),e.initPhoneFormatter(),e.initDateFormatter(),e.initTimeFormatter(),e.initNumeralFormatter(),void((t.initValue||t.prefix&&!t.noImmediatePrefix)&&e.onInput(t.initValue))):void e.onInput(t.initValue)},initNumeralFormatter:function(){var e=this,t=e.properties;t.numeral&&(t.numeralFormatter=new i.NumeralFormatter(t.numeralDecimalMark,t.numeralIntegerScale,t.numeralDecimalScale,t.numeralThousandsGroupStyle,t.numeralPositiveOnly,t.stripLeadingZeroes,t.prefix,t.signBeforePrefix,t.delimiter))},initTimeFormatter:function(){var e=this,t=e.properties;t.time&&(t.timeFormatter=new i.TimeFormatter(t.timePattern,t.timeFormat),t.blocks=t.timeFormatter.getBlocks(),t.blocksLength=t.blocks.length,t.maxLength=i.Util.getMaxLength(t.blocks))},initDateFormatter:function(){var e=this,t=e.properties;t.date&&(t.dateFormatter=new i.DateFormatter(t.datePattern,t.dateMin,t.dateMax),t.blocks=t.dateFormatter.getBlocks(),t.blocksLength=t.blocks.length,t.maxLength=i.Util.getMaxLength(t.blocks))},initPhoneFormatter:function(){var e=this,t=e.properties;if(t.phone)try{t.phoneFormatter=new i.PhoneFormatter(new t.root.Cleave.AsYouTypeFormatter(t.phoneRegionCode),t.delimiter)}catch(r){throw new Error("[cleave.js] Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(e){var t=this,r=t.properties,n=e.which||e.keyCode,a=i.Util,o=t.element.value;t.hasBackspaceSupport=t.hasBackspaceSupport||8===n,!t.hasBackspaceSupport&&a.isAndroidBackspaceKeydown(t.lastInputValue,o)&&(n=8),t.lastInputValue=o;var l=a.getPostDelimiter(o,r.delimiter,r.delimiters);8===n&&l?r.postDelimiterBackspace=l:r.postDelimiterBackspace=!1},onChange:function(){this.onInput(this.element.value)},onFocus:function(){var e=this,t=e.properties;i.Util.fixPrefixCursor(e.element,t.prefix,t.delimiter,t.delimiters)},onCut:function(e){i.Util.checkFullSelection(this.element.value)&&(this.copyClipboardData(e),this.onInput(""))},onCopy:function(e){i.Util.checkFullSelection(this.element.value)&&this.copyClipboardData(e)},copyClipboardData:function(e){var t=this,r=t.properties,n=i.Util,a=t.element.value,o="";o=r.copyDelimiter?a:n.stripDelimiters(a,r.delimiter,r.delimiters);try{e.clipboardData?e.clipboardData.setData("Text",o):window.clipboardData.setData("Text",o),e.preventDefault()}catch(l){}},onInput:function(e){var t=this,r=t.properties,n=i.Util,a=n.getPostDelimiter(e,r.delimiter,r.delimiters);return r.numeral||!r.postDelimiterBackspace||a||(e=n.headStr(e,e.length-r.postDelimiterBackspace.length)),r.phone?(!r.prefix||r.noImmediatePrefix&&!e.length?r.result=r.phoneFormatter.format(e):r.result=r.prefix+r.phoneFormatter.format(e).slice(r.prefix.length),void t.updateValueState()):r.numeral?(r.prefix&&r.noImmediatePrefix&&0===e.length?r.result="":r.result=r.numeralFormatter.format(e),void t.updateValueState()):(r.date&&(e=r.dateFormatter.getValidatedDate(e)),r.time&&(e=r.timeFormatter.getValidatedTime(e)),e=n.stripDelimiters(e,r.delimiter,r.delimiters),e=n.getPrefixStrippedValue(e,r.prefix,r.prefixLength,r.result,r.delimiter,r.delimiters,r.noImmediatePrefix),e=r.numericOnly?n.strip(e,/[^\d]/g):e,e=r.uppercase?e.toUpperCase():e,e=r.lowercase?e.toLowerCase():e,!r.prefix||r.noImmediatePrefix&&!e.length||(e=r.prefix+e,0!==r.blocksLength)?(r.creditCard&&t.updateCreditCardPropsByValue(e),e=n.headStr(e,r.maxLength),r.result=n.getFormattedValue(e,r.blocks,r.blocksLength,r.delimiter,r.delimiters,r.delimiterLazyShow),void t.updateValueState()):(r.result=e,void t.updateValueState()))},updateCreditCardPropsByValue:function(e){var t,r=this,n=r.properties,a=i.Util;a.headStr(n.result,4)!==a.headStr(e,4)&&(t=i.CreditCardDetector.getInfo(e,n.creditCardStrictMode),n.blocks=t.blocks,n.blocksLength=n.blocks.length,n.maxLength=a.getMaxLength(n.blocks),n.creditCardType!==t.type&&(n.creditCardType=t.type,n.onCreditCardTypeChanged.call(r,n.creditCardType)))},updateValueState:function(){var e=this,t=i.Util,r=e.properties;if(e.element){var n=e.element.selectionEnd,a=e.element.value,o=r.result;if(n=t.getNextCursorPosition(n,a,o,r.delimiter,r.delimiters),e.isAndroid)return void window.setTimeout(function(){e.element.value=o,t.setSelection(e.element,n,r.document,!1),e.callOnValueChanged()},1);e.element.value=o,t.setSelection(e.element,n,r.document,!1),e.callOnValueChanged()}},callOnValueChanged:function(){var e=this,t=e.properties;t.onValueChanged.call(e,{target:{value:t.result,rawValue:e.getRawValue()}})},setPhoneRegionCode:function(e){var t=this,r=t.properties;r.phoneRegionCode=e,t.initPhoneFormatter(),t.onChange()},setRawValue:function(e){var t=this,r=t.properties;e=void 0!==e&&null!==e?e.toString():"",r.numeral&&(e=e.replace(".",r.numeralDecimalMark)),r.postDelimiterBackspace=!1,t.element.value=e,t.onInput(e)},getRawValue:function(){var e=this,t=e.properties,r=i.Util,n=e.element.value;return t.rawValueTrimPrefix&&(n=r.getPrefixStrippedValue(n,t.prefix,t.prefixLength,t.result,t.delimiter,t.delimiters)),n=t.numeral?t.numeralFormatter.getRawValue(n):r.stripDelimiters(n,t.delimiter,t.delimiters)},getISOFormatDate:function(){var e=this,t=e.properties;return t.date?t.dateFormatter.getISOFormatDate():""},getISOFormatTime:function(){var e=this,t=e.properties;return t.time?t.timeFormatter.getISOFormatTime():""},getFormattedValue:function(){return this.element.value},destroy:function(){var e=this;e.element.removeEventListener("input",e.onChangeListener),e.element.removeEventListener("keydown",e.onKeyDownListener),e.element.removeEventListener("focus",e.onFocusListener),e.element.removeEventListener("cut",e.onCutListener),e.element.removeEventListener("copy",e.onCopyListener)},toString:function(){return"[Cleave Object]"}},i.NumeralFormatter=r(1),i.DateFormatter=r(2),i.TimeFormatter=r(3),i.PhoneFormatter=r(4),i.CreditCardDetector=r(5),i.Util=r(6),i.DefaultProperties=r(7),("object"==typeof t&&t?t:window).Cleave=i,e.exports=i}).call(t,function(){return this}())},function(e,t){"use strict";var r=function(e,t,i,n,a,o,l,s,c){var u=this;u.numeralDecimalMark=e||".",u.numeralIntegerScale=t>0?t:0,u.numeralDecimalScale=i>=0?i:2,u.numeralThousandsGroupStyle=n||r.groupStyle.thousand,u.numeralPositiveOnly=!!a,u.stripLeadingZeroes=o!==!1,u.prefix=l||""===l?l:"",u.signBeforePrefix=!!s,u.delimiter=c||""===c?c:",",u.delimiterRE=c?new RegExp("\\"+c,"g"):""};r.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan",none:"none"},r.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,i,n,a,o=this,l="";switch(e=e.replace(/[A-Za-z]/g,"").replace(o.numeralDecimalMark,"M").replace(/[^\dM-]/g,"").replace(/^\-/,"N").replace(/\-/g,"").replace("N",o.numeralPositiveOnly?"":"-").replace("M",o.numeralDecimalMark),o.stripLeadingZeroes&&(e=e.replace(/^(-)?0+(?=\d)/,"$1")),i="-"===e.slice(0,1)?"-":"",n="undefined"!=typeof o.prefix?o.signBeforePrefix?i+o.prefix:o.prefix+i:i,a=e,e.indexOf(o.numeralDecimalMark)>=0&&(t=e.split(o.numeralDecimalMark),a=t[0],l=o.numeralDecimalMark+t[1].slice(0,o.numeralDecimalScale)),"-"===i&&(a=a.slice(1)),o.numeralIntegerScale>0&&(a=a.slice(0,o.numeralIntegerScale)),o.numeralThousandsGroupStyle){case r.groupStyle.lakh:a=a.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+o.delimiter);break;case r.groupStyle.wan:a=a.replace(/(\d)(?=(\d{4})+$)/g,"$1"+o.delimiter);break;case r.groupStyle.thousand:a=a.replace(/(\d)(?=(\d{3})+$)/g,"$1"+o.delimiter)}return n+a.toString()+(o.numeralDecimalScale>0?l.toString():"")}},e.exports=r},function(e,t){"use strict";var r=function(e,t,r){var i=this;i.date=[],i.blocks=[],i.datePattern=e,i.dateMin=t.split("-").reverse().map(function(e){return parseInt(e,10)}),2===i.dateMin.length&&i.dateMin.unshift(0),i.dateMax=r.split("-").reverse().map(function(e){return parseInt(e,10)}),2===i.dateMax.length&&i.dateMax.unshift(0),i.initBlocks()};r.prototype={initBlocks:function(){var e=this;e.datePattern.forEach(function(t){"Y"===t?e.blocks.push(4):e.blocks.push(2)})},getISOFormatDate:function(){var e=this,t=e.date;return t[2]?t[2]+"-"+e.addLeadingZero(t[1])+"-"+e.addLeadingZero(t[0]):""},getBlocks:function(){return this.blocks},getValidatedDate:function(e){var t=this,r="";return e=e.replace(/[^\d]/g,""),t.blocks.forEach(function(i,n){if(e.length>0){var a=e.slice(0,i),o=a.slice(0,1),l=e.slice(i);switch(t.datePattern[n]){case"d":"00"===a?a="01":parseInt(o,10)>3?a="0"+o:parseInt(a,10)>31&&(a="31");break;case"m":"00"===a?a="01":parseInt(o,10)>1?a="0"+o:parseInt(a,10)>12&&(a="12")}r+=a,e=l}}),this.getFixedDateString(r)},getFixedDateString:function(e){var t,r,i,n=this,a=n.datePattern,o=[],l=0,s=0,c=0,u=0,d=0,m=0,p=!1;4===e.length&&"y"!==a[0].toLowerCase()&&"y"!==a[1].toLowerCase()&&(u="d"===a[0]?0:2,d=2-u,t=parseInt(e.slice(u,u+2),10),r=parseInt(e.slice(d,d+2),10),o=this.getFixedDate(t,r,0)),8===e.length&&(a.forEach(function(e,t){switch(e){case"d":l=t;break;case"m":s=t;break;default:c=t}}),m=2*c,u=l<=c?2*l:2*l+2,d=s<=c?2*s:2*s+2,t=parseInt(e.slice(u,u+2),10),r=parseInt(e.slice(d,d+2),10),i=parseInt(e.slice(m,m+4),10),p=4===e.slice(m,m+4).length,o=this.getFixedDate(t,r,i)),4!==e.length||"y"!==a[0]&&"y"!==a[1]||(d="m"===a[0]?0:2,m=2-d,r=parseInt(e.slice(d,d+2),10),i=parseInt(e.slice(m,m+2),10),p=2===e.slice(m,m+2).length,o=[0,r,i]),6!==e.length||"Y"!==a[0]&&"Y"!==a[1]||(d="m"===a[0]?0:4,m=2-.5*d,r=parseInt(e.slice(d,d+2),10),i=parseInt(e.slice(m,m+4),10),p=4===e.slice(m,m+4).length,o=[0,r,i]),o=n.getRangeFixedDate(o),n.date=o;var h=0===o.length?e:a.reduce(function(e,t){switch(t){case"d":return e+(0===o[0]?"":n.addLeadingZero(o[0]));case"m":return e+(0===o[1]?"":n.addLeadingZero(o[1]));case"y":return e+(p?n.addLeadingZeroForYear(o[2],!1):"");case"Y":return e+(p?n.addLeadingZeroForYear(o[2],!0):"")}},"");return h},getRangeFixedDate:function(e){var t=this,r=t.datePattern,i=t.dateMin||[],n=t.dateMax||[];return!e.length||i.length<3&&n.length<3?e:r.find(function(e){return"y"===e.toLowerCase()})&&0===e[2]?e:n.length&&(n[2]e[2]||i[2]===e[2]&&(i[1]>e[1]||i[1]===e[1]&&i[0]>e[0]))?i:e},getFixedDate:function(e,t,r){return e=Math.min(e,31),t=Math.min(t,12),r=parseInt(r||0,10),(t<7&&t%2===0||t>8&&t%2===1)&&(e=Math.min(e,2===t?this.isLeapYear(r)?29:28:30)),[e,t,r]},isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},addLeadingZero:function(e){return(e<10?"0":"")+e},addLeadingZeroForYear:function(e,t){return t?(e<10?"000":e<100?"00":e<1e3?"0":"")+e:(e<10?"0":"")+e}},e.exports=r},function(e,t){"use strict";var r=function(e,t){var r=this;r.time=[],r.blocks=[],r.timePattern=e,r.timeFormat=t,r.initBlocks()};r.prototype={initBlocks:function(){var e=this;e.timePattern.forEach(function(){e.blocks.push(2)})},getISOFormatTime:function(){var e=this,t=e.time;return t[2]?e.addLeadingZero(t[0])+":"+e.addLeadingZero(t[1])+":"+e.addLeadingZero(t[2]):""},getBlocks:function(){return this.blocks},getTimeFormatOptions:function(){var e=this;return"12"===String(e.timeFormat)?{maxHourFirstDigit:1,maxHours:12,maxMinutesFirstDigit:5,maxMinutes:60}:{maxHourFirstDigit:2,maxHours:23,maxMinutesFirstDigit:5,maxMinutes:60}},getValidatedTime:function(e){var t=this,r="";e=e.replace(/[^\d]/g,"");var i=t.getTimeFormatOptions();return t.blocks.forEach(function(n,a){if(e.length>0){var o=e.slice(0,n),l=o.slice(0,1),s=e.slice(n);switch(t.timePattern[a]){case"h":parseInt(l,10)>i.maxHourFirstDigit?o="0"+l:parseInt(o,10)>i.maxHours&&(o=i.maxHours+"");break;case"m":case"s":parseInt(l,10)>i.maxMinutesFirstDigit?o="0"+l:parseInt(o,10)>i.maxMinutes&&(o=i.maxMinutes+"")}r+=o,e=s}}),this.getFixedTimeString(r)},getFixedTimeString:function(e){var t,r,i,n=this,a=n.timePattern,o=[],l=0,s=0,c=0,u=0,d=0,m=0;return 6===e.length&&(a.forEach(function(e,t){switch(e){case"s":l=2*t;break;case"m":s=2*t;break;case"h":c=2*t}}),m=c,d=s,u=l,t=parseInt(e.slice(u,u+2),10),r=parseInt(e.slice(d,d+2),10),i=parseInt(e.slice(m,m+2),10),o=this.getFixedTime(i,r,t)),4===e.length&&n.timePattern.indexOf("s")<0&&(a.forEach(function(e,t){switch(e){case"m":s=2*t;break;case"h":c=2*t}}),m=c,d=s,t=0,r=parseInt(e.slice(d,d+2),10),i=parseInt(e.slice(m,m+2),10),o=this.getFixedTime(i,r,t)),n.time=o,0===o.length?e:a.reduce(function(e,t){switch(t){case"s":return e+n.addLeadingZero(o[2]);case"m":return e+n.addLeadingZero(o[1]);case"h":return e+n.addLeadingZero(o[0])}},"")},getFixedTime:function(e,t,r){return r=Math.min(parseInt(r||0,10),60),t=Math.min(t,60),e=Math.min(e,60),[e,t,r]},addLeadingZero:function(e){return(e<10?"0":"")+e}},e.exports=r},function(e,t){"use strict";var r=function(e,t){var r=this;r.delimiter=t||""===t?t:" ",r.delimiterRE=t?new RegExp("\\"+t,"g"):"",r.formatter=e};r.prototype={setFormatter:function(e){this.formatter=e},format:function(e){var t=this;t.formatter.clear(),e=e.replace(/[^\d+]/g,""),e=e.replace(/^\+/,"B").replace(/\+/g,"").replace("B","+"),e=e.replace(t.delimiterRE,"");for(var r,i="",n=!1,a=0,o=e.length;a0;return 0===r?e:(t.forEach(function(t,c){if(e.length>0){var u=e.slice(0,t),d=e.slice(t);o=s?n[a?c-1:c]||o:i,a?(c>0&&(l+=o),l+=u):(l+=u,u.length===t&&c0?r.numeralIntegerScale:0,e.numeralDecimalScale=r.numeralDecimalScale>=0?r.numeralDecimalScale:2,e.numeralDecimalMark=r.numeralDecimalMark||".",e.numeralThousandsGroupStyle=r.numeralThousandsGroupStyle||"thousand",e.numeralPositiveOnly=!!r.numeralPositiveOnly,e.stripLeadingZeroes=r.stripLeadingZeroes!==!1,e.signBeforePrefix=!!r.signBeforePrefix,e.numericOnly=e.creditCard||e.date||!!r.numericOnly,e.uppercase=!!r.uppercase,e.lowercase=!!r.lowercase,e.prefix=e.creditCard||e.date?"":r.prefix||"",e.noImmediatePrefix=!!r.noImmediatePrefix,e.prefixLength=e.prefix.length,e.rawValueTrimPrefix=!!r.rawValueTrimPrefix,e.copyDelimiter=!!r.copyDelimiter,e.initValue=void 0!==r.initValue&&null!==r.initValue?r.initValue.toString():"",e.delimiter=r.delimiter||""===r.delimiter?r.delimiter:r.date?"/":r.time?":":r.numeral?",":(r.phone," "),e.delimiterLength=e.delimiter.length,e.delimiterLazyShow=!!r.delimiterLazyShow,e.delimiters=r.delimiters||[],e.blocks=r.blocks||[],e.blocksLength=e.blocks.length,e.root="object"==typeof t&&t?t:window,e.document=r.document||e.root.document,e.maxLength=0,e.backspace=!1,e.result="",e.onValueChanged=r.onValueChanged||function(){},e}};e.exports=r}).call(t,function(){return this}())}])}); \ No newline at end of file diff --git a/l10n_br_portal/static/src/js/l10n_br_portal.js b/l10n_br_portal/static/src/js/l10n_br_portal.js index 7d8e2f2f4bea..a703e8984782 100644 --- a/l10n_br_portal/static/src/js/l10n_br_portal.js +++ b/l10n_br_portal/static/src/js/l10n_br_portal.js @@ -8,6 +8,27 @@ odoo.define('l10n_br_portal.l10n_br_portal', function (require) { return $.Deferred().reject("DOM doesn't contain '.o_portal'"); } + var cleaveCNPJ = new Cleave('.input-cnpj-cpf', { + blocks: [2, 3, 3, 4, 2], + delimiters: ['.', '.', '-'], + numericOnly: true, + onValueChanged: function (e) { + if (e.target.rawValue.length > 11) { + this.properties['blocks'] = [2, 3, 3, 4, 2]; + this.properties['delimiters'] = ['.', '.', '/', '-']; + } else { + this.properties['blocks'] = [3, 3, 3, 3]; + this.properties['delimiters'] = ['.', '.', '-']; + } + } + }); + + var cleaveZipCode = new Cleave('.input-zipcode', { + blocks: [5, 3], + delimiter: '-', + numericOnly: true, + }); + if ($('.o_portal_details').length) { var state_options = $( "select[name='city_id']:enabled option:not(:first)"); diff --git a/l10n_br_portal/views/assets.xml b/l10n_br_portal/views/assets.xml index 3c15dd3c0693..2c2d9e44b7e5 100644 --- a/l10n_br_portal/views/assets.xml +++ b/l10n_br_portal/views/assets.xml @@ -2,6 +2,7 @@