[9.0][IMP] rma_purchase:

* remove unneded copy and ondelete attributes.
* simplify action_view methods.
* fix rma line supplier view.
* fix wizard.
* extend README.
* minor extra fixes.
This commit is contained in:
lreficent
2017-08-25 17:03:25 +02:00
committed by Chanakya Soni
parent d106a49ce2
commit b95bee0e6a
6 changed files with 129 additions and 141 deletions

View File

@@ -1,16 +1,25 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg .. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:alt: License LGPL-3 :alt: License LGPL-3
============
RMA Purchase RMA Purchase
============ ============
Purchase as RMA source This modules extend the RMA functionality allowing to use Purchase Orders as
a RMA source.
Usage Usage
===== =====
select add_purchase_id to fill rma from RMA purchase To add lines to a RMA from PO act as follows:
#. Go to a supplier RMA.
#. Fill the *Supplier* field.
#. Click on *Add From Purchase Order*.
#. Select the Purchase Order.
#. Click on *Add an item* and select the lines you would like to add to the
RMA.
#. Hit *Confirm*.
Bug Tracker Bug Tracker
=========== ===========
@@ -20,7 +29,6 @@ Bugs are tracked on `GitHub Issues
check there if your issue has already been reported. If you spotted it first, check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed feedback. help us smashing it by providing a detailed and welcomed feedback.
Credits Credits
======= =======
@@ -29,7 +37,7 @@ Contributors
* Jordi Ballester Alomar <jordi.ballester@eficent.com> * Jordi Ballester Alomar <jordi.ballester@eficent.com>
* Aaron Henriquez <ahenriquez@eficent.com> * Aaron Henriquez <ahenriquez@eficent.com>
* Lois Rilo <lois.rilo@eficent.com>
Maintainer Maintainer
---------- ----------

View File

@@ -11,51 +11,34 @@ class RmaOrder(models.Model):
@api.multi @api.multi
def _compute_po_count(self): def _compute_po_count(self):
for rec in self: for rec in self:
purchase_list = [] purchases = rec.mapped('rma_line_ids.procurement_ids.purchase_id')
for line in rec.rma_line_ids: rec.po_count = len(purchases)
for procurement_id in line.procurement_ids:
if procurement_id.purchase_id and \
procurement_id.purchase_id.id:
purchase_list.append(procurement_id.purchase_id.id)
rec.po_count = len(list(set(purchase_list)))
@api.multi @api.multi
def _compute_origin_po_count(self): def _compute_origin_po_count(self):
po_list = [] for rma in self:
for rec in self: purchases = rma.mapped(
for rma_line in rec.rma_line_ids: 'rma_line_ids.purchase_order_line_id.order_id')
if rma_line.purchase_order_line_id and \ rma.origin_po_count = len(purchases)
rma_line.purchase_order_line_id.id:
po_list.append(rma_line.purchase_order_line_id.order_id.id)
self.origin_po_count = len(list(set(po_list)))
po_count = fields.Integer(compute=_compute_po_count, po_count = fields.Integer(
string='# of PO', compute='_compute_po_count', string='# of PO')
copy=False, default=0) origin_po_count = fields.Integer(
compute='_compute_origin_po_count', string='# of Origin PO')
origin_po_count = fields.Integer(compute=_compute_origin_po_count,
string='# of Origin PO', copy=False,
default=0)
@api.multi @api.multi
def action_view_purchase_order(self): def action_view_purchase_order(self):
action = self.env.ref('purchase.purchase_rfq') action = self.env.ref('purchase.purchase_rfq')
result = action.read()[0] result = action.read()[0]
order_ids = [] po_ids = self.mapped('rma_line_ids.procurement_ids.purchase_id').ids
for line in self.rma_line_ids: result['domain'] = [('id', 'in', po_ids)]
for procurement_id in line.procurement_ids:
order_ids.append(procurement_id.purchase_id.id)
result['domain'] = [('id', 'in', order_ids)]
return result return result
@api.multi @api.multi
def action_view_origin_purchase_order(self): def action_view_origin_purchase_order(self):
action = self.env.ref('purchase.purchase_rfq') action = self.env.ref('purchase.purchase_rfq')
result = action.read()[0] result = action.read()[0]
order_ids = [] po_ids = self.mapped(
for rma_line in self.rma_line_ids: 'rma_line_ids.purchase_order_line_id.order_id').ids
if rma_line.purchase_order_line_id and \ result['domain'] = [('id', 'in', po_ids)]
rma_line.purchase_order_line_id.id:
order_ids.append(rma_line.purchase_order_line_id.order_id.id)
result['domain'] = [('id', 'in', order_ids)]
return result return result

View File

@@ -35,22 +35,20 @@ class RmaOrderLine(models.Model):
for rec in self: for rec in self:
rec.qty_purchased = rec._get_rma_purchased_qty() rec.qty_purchased = rec._get_rma_purchased_qty()
purchase_count = fields.Integer(compute=_compute_purchase_count, purchase_count = fields.Integer(
string='# of Purchases', copy=False, compute='_compute_purchase_count', string='# of Purchases')
default=0) purchase_order_line_id = fields.Many2one(
purchase_order_line_id = fields.Many2one('purchase.order.line', comodel_name='purchase.order.line', string='Origin Purchase Line',
string='Origin Purchase Line', ondelete='restrict')
ondelete='restrict')
purchase_order_line_ids = fields.Many2many( purchase_order_line_ids = fields.Many2many(
'purchase.order.line', 'purchase_line_rma_line_rel', comodel_name='purchase.order.line',
'rma_order_line_id', 'purchase_order_line_id', relation='purchase_line_rma_line_rel',
string='Purchase Order Lines', compute=_get_purchase_order_lines) column1='rma_order_line_id', column2='purchase_order_line_id',
string='Purchase Order Lines', compute='_get_purchase_order_lines')
qty_purchased = fields.Float( qty_purchased = fields.Float(
string='Qty Purchased', copy=False, string='Qty Purchased', copy=False,
digits=dp.get_precision('Product Unit of Measure'), digits=dp.get_precision('Product Unit of Measure'),
readonly=True, compute=_compute_qty_purchased, readonly=True, compute='_compute_qty_purchased', store=True)
store=True)
@api.multi @api.multi
def action_view_purchase_order(self): def action_view_purchase_order(self):

View File

@@ -1,33 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <odoo>
<data>
<record id="view_rma_line_form" model="ir.ui.view"> <record id="view_rma_line_form" model="ir.ui.view">
<field name="name">rma.order.line.supplier.form</field> <field name="name">rma.order.line.supplier.form</field>
<field name="model">rma.order.line</field> <field name="model">rma.order.line</field>
<field name="inherit_id" ref="rma.view_rma_line_supplier_form"/> <field name="inherit_id" ref="rma.view_rma_line_supplier_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<div name='button_box' position="inside"> <div name='button_box' position="inside">
<button type="object" name="action_view_purchase_order" <button type="object" name="action_view_purchase_order"
class="oe_stat_button" class="oe_stat_button"
icon="fa-shopping-cart" icon="fa-shopping-cart"
groups="purchase.group_purchase_user"> groups="purchase.group_purchase_user">
<field name="purchase_count" widget="statinfo" <field name="purchase_count" widget="statinfo"
string="Purchase Orders"/> string="Purchase Orders"/>
</button> </button>
</div> </div>
<group name="quantities" position="inside"> <group name="quantities" position="inside">
<group> <group>
<field name="qty_purchased"/> <field name="qty_purchased"/>
</group>
</group> </group>
<notebook position="inside"> </group>
<page name="purchase" string="Purchase Lines"> <notebook position="inside">
<field name="purchase_order_line_ids" nolabel="1"/> <page name="purchase" string="Purchase Lines">
</page> <field name="purchase_order_line_ids" nolabel="1"/>
</notebook> </page>
</field> </notebook>
</record> </field>
</record>
</data> </odoo>
</openerp>

View File

@@ -1,33 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <odoo>
<data>
<record id="view_rma_supplier_form" model="ir.ui.view"> <record id="view_rma_supplier_form" model="ir.ui.view">
<field name="name">rma.order.supplier.form</field> <field name="name">rma.order.supplier.form</field>
<field name="model">rma.order</field> <field name="model">rma.order</field>
<field name="inherit_id" ref="rma.view_rma_supplier_form"/> <field name="inherit_id" ref="rma.view_rma_supplier_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<div name='button_box' position="inside"> <div name='button_box' position="inside">
<button type="object" name="action_view_purchase_order" <button type="object" name="action_view_purchase_order"
class="oe_stat_button" class="oe_stat_button"
icon="fa-shopping-cart" icon="fa-shopping-cart"
groups="purchase.group_purchase_user"> groups="purchase.group_purchase_user">
<field name="po_count" widget="statinfo" <field name="po_count" widget="statinfo"
string="Purchase Orders"/> string="Purchase Orders"/>
</button> </button>
</div> </div>
<div name='button_box' position="inside"> <div name='button_box' position="inside">
<button type="object" <button type="object"
name="action_view_origin_purchase_order" name="action_view_origin_purchase_order"
class="oe_stat_button" class="oe_stat_button"
icon="fa-shopping-cart" icon="fa-shopping-cart"
groups="purchase.group_purchase_user"> groups="purchase.group_purchase_user">
<field name="origin_po_count" widget="statinfo" <field name="origin_po_count" widget="statinfo"
string="Origin PO"/> string="Origin PO"/>
</button> </button>
</div> </div>
</field> </field>
</record> </record>
</data> </odoo>
</openerp>

View File

@@ -27,21 +27,17 @@ class RmaAddPurchase(models.TransientModel):
res['purchase_line_ids'] = False res['purchase_line_ids'] = False
return res return res
rma_id = fields.Many2one('rma.order', rma_id = fields.Many2one(
string='RMA Order', comodel_name='rma.order', string='RMA Order', readonly=True)
readonly=True, partner_id = fields.Many2one(
ondelete='cascade') comodel_name='res.partner', string='Partner', readonly=True)
partner_id = fields.Many2one(comodel_name='res.partner', string='Partner',
readonly=True)
purchase_id = fields.Many2one( purchase_id = fields.Many2one(
comodel_name='purchase.order', string='Order') comodel_name='purchase.order', string='Order')
purchase_line_ids = fields.Many2many( purchase_line_ids = fields.Many2many(
'purchase.order.line', comodel_name='purchase.order.line',
'rma_add_purchase_add_line_rel', relation='rma_add_purchase_add_line_rel',
'purchase_line_id', 'rma_add_purchase_id', column1='rma_add_purchase_id', column2='purchase_line_id',
readonly=False, readonly=False, string='Purchase Order Lines')
string='Purcahse Order Lines')
def _prepare_rma_line_from_po_line(self, line): def _prepare_rma_line_from_po_line(self, line):
if self.env.context.get('customer'): if self.env.context.get('customer'):
@@ -50,17 +46,6 @@ class RmaAddPurchase(models.TransientModel):
else: else:
operation = line.product_id.rma_supplier_operation_id or \ operation = line.product_id.rma_supplier_operation_id or \
line.product_id.categ_id.rma_supplier_operation_id line.product_id.categ_id.rma_supplier_operation_id
data = {
'purchase_order_line_id': line.id,
'product_id': line.product_id.id,
'origin': line.order_id.name,
'uom_id': line.product_uom.id,
'operation_id': operation,
'product_qty': line.product_qty,
'price_unit': line.currency_id.compute(
line.price_unit, line.currency_id, round=False),
'rma_id': self.rma_id.id
}
if not operation: if not operation:
operation = self.env['rma.operation'].search( operation = self.env['rma.operation'].search(
[('type', '=', self.rma_id.type)], limit=1) [('type', '=', self.rma_id.type)], limit=1)
@@ -70,17 +55,35 @@ class RmaAddPurchase(models.TransientModel):
route = self.env['stock.location.route'].search( route = self.env['stock.location.route'].search(
[('rma_selectable', '=', True)], limit=1) [('rma_selectable', '=', True)], limit=1)
if not route: if not route:
raise ValidationError("Please define an rma route") raise ValidationError("Please define a rma route.")
data.update( if not operation.in_warehouse_id or not operation.out_warehouse_id:
{'in_route_id': operation.in_route_id.id or route, warehouse = self.env['stock.warehouse'].search(
'out_route_id': operation.out_route_id.id or route, [('company_id', '=', self.rma_id.company_id.id),
'receipt_policy': operation.receipt_policy, ('lot_rma_id', '!=', False)], limit=1)
'location_id': operation.location_id.id or if not warehouse:
self.env.ref('stock.stock_location_stock').id, raise ValidationError("Please define a warehouse with a "
'operation_id': operation.id, "default rma location.")
'refund_policy': operation.refund_policy, data = {
'delivery_policy': operation.delivery_policy 'purchase_order_line_id': line.id,
}) 'product_id': line.product_id.id,
'origin': line.order_id.name,
'uom_id': line.product_uom.id,
'operation_id': operation.id,
'product_qty': line.product_qty,
'price_unit': line.currency_id.compute(
line.price_unit, line.currency_id, round=False),
'rma_id': self.rma_id.id,
'in_route_id': operation.in_route_id.id or route,
'out_route_id': operation.out_route_id.id or route,
'receipt_policy': operation.receipt_policy,
'location_id': (operation.location_id.id or
operation.in_warehouse_id.lot_rma_id.id or
warehouse.lot_rma_id.id),
'refund_policy': operation.refund_policy,
'delivery_policy': operation.delivery_policy,
'in_warehouse_id': operation.in_warehouse_id.id or warehouse.id,
'out_warehouse_id': operation.out_warehouse_id.id or warehouse.id,
}
return data return data
@api.model @api.model