Enric Tobella
6 years ago
committed by
OCA-git-bot
8 changed files with 99 additions and 25 deletions
-
85barcode_action/README.rst
-
2barcode_action/__manifest__.py
-
2barcode_action/models/res_partner.py
-
1barcode_action/readme/CONTRIBUTORS.rst
-
7barcode_action/static/src/js/action_barcode_form.js
-
1barcode_action/tests/__init__.py
-
24barcode_action/tests/test_partner_find.py
-
2barcode_action/wizard/barcode_action_view.xml
@ -1,21 +1,74 @@ |
|||
**This file is going to be generated by oca-gen-addon-readme.** |
|||
======================= |
|||
Barcode action launcher |
|||
======================= |
|||
|
|||
*Manual changes will be overwritten.* |
|||
This module allows to use barcodes as launchers of actions. |
|||
|
|||
Please provide content in the ``readme`` directory: |
|||
The action will launch a function that uses the barcode in order to return an action. |
|||
|
|||
* **DESCRIPTION.rst** (required) |
|||
* INSTALL.rst (optional) |
|||
* CONFIGURE.rst (optional) |
|||
* **USAGE.rst** (optional, highly recommended) |
|||
* DEVELOP.rst (optional) |
|||
* ROADMAP.rst (optional) |
|||
* HISTORY.rst (optional, recommended) |
|||
* **CONTRIBUTORS.rst** (optional, highly recommended) |
|||
* CREDITS.rst (optional) |
|||
Usage |
|||
===== |
|||
Actions must be configured with the following data in the context: |
|||
* model: Model where we can find the method (required) |
|||
* method: Method to execute (required) |
|||
* res_id: Id as base (optional) |
|||
|
|||
Content of this README will also be drawn from the addon manifest, |
|||
from keys such as name, authors, maintainers, development_status, |
|||
and license. |
|||
The method must return an action. Installing this module with demo data will |
|||
install a demo application that allows the system administrator to find a |
|||
partner by the external reference encoded in a barcode. |
|||
|
|||
A good, one sentence summary in the manifest is also highly recommended. |
|||
Go to *Settings / Find partners* and scan a barcode that contains the |
|||
internal reference of an existing partner. As soon as you read the barcode |
|||
the system will redirect you to that partner's form view. |
|||
|
|||
Technical implementation of this example: |
|||
|
|||
Action:: |
|||
|
|||
<act_window id="res_partner_find" |
|||
name="Find Partner" |
|||
res_model="barcode.action" |
|||
view_mode="form" |
|||
view_type="form" |
|||
context="{'default_model': 'res.partner', 'default_method': 'find_res_partner_by_ref_using_barcode'}" |
|||
target="new"/> |
|||
|
|||
<menuitem id="menu_orders_customers" name="Find partners" |
|||
action="res_partner_find" |
|||
parent="base.menu_administration"/> |
|||
|
|||
Python code:: |
|||
|
|||
import json |
|||
from odoo import api, models, _ |
|||
from odoo.tools.safe_eval import safe_eval |
|||
|
|||
|
|||
class ResPartner(models.Model): |
|||
_inherit = 'res.partner' |
|||
|
|||
@api.multi |
|||
def find_res_partner_by_ref_using_barcode(self, barcode): |
|||
partner = self.search([('ref', '=', barcode)], limit=1) |
|||
if not partner: |
|||
action = self.env.ref('res_partner_find') |
|||
result = action.read()[0] |
|||
context = safe_eval(result['context']) |
|||
context.update({ |
|||
'default_state': 'warning', |
|||
'default_status': _('Partner with Internal Reference ' |
|||
'%s cannot be found') % barcode |
|||
}) |
|||
result['context'] = json.dumps(context) |
|||
return result |
|||
action = self.env.ref('base.action_partner_form') |
|||
result = action.read()[0] |
|||
res = self.env.ref('base.view_partner_form', False) |
|||
result['views'] = [(res and res.id or False, 'form')] |
|||
result['res_id'] = partner.id |
|||
return result |
|||
|
|||
Contributors |
|||
============ |
|||
* Enric Tobella <etobella@creublanca.es> |
|||
* Jordi Ballester <jordi.ballester@eficent.com> |
@ -1,2 +1,3 @@ |
|||
* Enric Tobella <etobella@creublanca.es> |
|||
* Jordi Ballester <jordi.ballester@eficent.com> |
|||
|
@ -0,0 +1 @@ |
|||
from . import test_partner_find |
@ -0,0 +1,24 @@ |
|||
# Copyright 2018 Creu Blanca |
|||
# Copyright 2018 Eficent Business and IT Consulting Services, S.L. |
|||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). |
|||
from odoo.tests.common import TransactionCase |
|||
|
|||
|
|||
class TestPartnerFind(TransactionCase): |
|||
|
|||
def test_partner(self): |
|||
partner_obj = self.env['res.partner'] |
|||
ref = 'testing_partner_internal_reference' |
|||
partner = partner_obj.create({ |
|||
'name': 'Testing partner', |
|||
'ref': ref, |
|||
}) |
|||
# We should find the partner when the ref is found |
|||
self.assertEqual( |
|||
partner.id, |
|||
partner_obj.find_res_partner_by_ref_using_barcode(ref).get( |
|||
'res_id', False)) |
|||
# No partner is found, then there is no res_id on the result |
|||
self.assertFalse( |
|||
partner_obj.find_res_partner_by_ref_using_barcode( |
|||
'%s-%s' % (ref, ref)).get('res_id', False)) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue