Browse Source

implement an actual running example

pull/79/head
Jordi Ballester Alomar 6 years ago
committed by OCA-git-bot
parent
commit
063d40c4ac
  1. 5
      barcode_action/__init__.py
  2. 5
      barcode_action/__manifest__.py
  3. 17
      barcode_action/demo/barcode_action_demo.xml
  4. 1
      barcode_action/models/__init__.py
  5. 31
      barcode_action/models/res_partner.py
  6. 75
      barcode_action/readme/USAGE.rst

5
barcode_action/__init__.py

@ -1,5 +1,2 @@
# Copyright 2017 Creu Blanca
# Copyright 2017 Eficent Business and IT Consulting Services, S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from . import wizard from . import wizard
from . import models

5
barcode_action/__manifest__.py

@ -18,5 +18,8 @@
'data': [ 'data': [
'views/barcode_templates.xml', 'views/barcode_templates.xml',
'wizard/barcode_action_view.xml', 'wizard/barcode_action_view.xml',
]
],
'demo': [
'demo/barcode_action_demo.xml'
],
} }

17
barcode_action/demo/barcode_action_demo.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<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"/>
</data>
</odoo>

1
barcode_action/models/__init__.py

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

31
barcode_action/models/res_partner.py

@ -0,0 +1,31 @@
# 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).
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

75
barcode_action/readme/USAGE.rst

@ -3,36 +3,57 @@ Actions must be configured with the following data in the context:
* method: Method to execute (required) * method: Method to execute (required)
* res_id: Id as base (optional) * res_id: Id as base (optional)
The method must return an action. For example
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.
Action example::
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.
<act_window id="sale_order_find"
name="Find Sale Order"
res_model="barcode.action"
view_mode="form"
view_type="form"
context="{'default_model': 'sale.order', 'default_method': 'find_sale_order_by_barcode'}"
target="new"/>
Technical implementation of this example:
Python example::
Action::
@api.multi
def find_sale_order_by_barcode(self, barcode):
sale_order = self.search([('name', '=', barcode)])
if not sale_order:
action = self.env.ref('sale_order_find')
<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] result = action.read()[0]
context = safe_eval(result['context'])
context.update({
'default_state': 'warning',
'default_status': _('Sale Order %s cannot be found') % barcode
})
result['context'] = json.dumps(context)
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 return result
action = self.env.ref('sale.action_quotations')
result = action.read()[0]
res = self.env.ref('sale.view_order_form', False)
result['views'] = [(res and res.id or False, 'form')]
result['res_id'] = sale_order.id
return result
Loading…
Cancel
Save