Browse Source

[IMP] barcode_action: Add tests

pull/79/head
Enric Tobella 6 years ago
committed by OCA-git-bot
parent
commit
07a3317fce
  1. 85
      barcode_action/README.rst
  2. 2
      barcode_action/__manifest__.py
  3. 2
      barcode_action/models/res_partner.py
  4. 1
      barcode_action/readme/CONTRIBUTORS.rst
  5. 7
      barcode_action/static/src/js/action_barcode_form.js
  6. 1
      barcode_action/tests/__init__.py
  7. 24
      barcode_action/tests/test_partner_find.py
  8. 2
      barcode_action/wizard/barcode_action_view.xml

85
barcode_action/README.rst

@ -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>

2
barcode_action/__manifest__.py

@ -5,7 +5,7 @@
{
'name': 'Barcode action launcher',
'version': '11.0.1.0.0',
'category': 'Reporting',
'category': 'Extra Tools',
'website': 'https://github.com/OCA/server-ux',
'author': 'Creu Blanca, Eficent, Odoo Community Association (OCA)',
'license': 'AGPL-3',

2
barcode_action/models/res_partner.py

@ -13,7 +13,7 @@ class ResPartner(models.Model):
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')
action = self.env.ref('barcode_action.res_partner_find')
result = action.read()[0]
context = safe_eval(result['context'])
context.update({

1
barcode_action/readme/CONTRIBUTORS.rst

@ -1,2 +1,3 @@
* Enric Tobella <etobella@creublanca.es>
* Jordi Ballester <jordi.ballester@eficent.com>

7
barcode_action/static/src/js/action_barcode_form.js

@ -5,11 +5,6 @@ var FormController = require('web.FormController');
FormController.include({
_barcodeHandleAction: function (barcode, activeBarcode) {
if (this.mode === 'readonly') {
this.do_warn(_t('Error : Document not editable'),
_t('To modify this document, please first start edition.'));
return new $.Deferred().reject();
}
var record = this.model.get(this.handle);
var self = this;
return self._rpc({
@ -17,7 +12,7 @@ FormController.include({
method: record.data.method,
args: [[record.data.res_id], barcode],
}).done(function (action) {
if (action !== undefined){
if (action){
self._barcodeStopListening();
self.do_action(action);
}

1
barcode_action/tests/__init__.py

@ -0,0 +1 @@
from . import test_partner_find

24
barcode_action/tests/test_partner_find.py

@ -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))

2
barcode_action/wizard/barcode_action_view.xml

@ -1,4 +1,4 @@
<?xml version="1.0"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Eficent Business and IT Consulting Services, S.L.

Loading…
Cancel
Save