diff --git a/rma_purchase/__manifest__.py b/rma_purchase/__manifest__.py
index 70a5c252..a5a27eb1 100644
--- a/rma_purchase/__manifest__.py
+++ b/rma_purchase/__manifest__.py
@@ -11,11 +11,12 @@
'website': 'http://www.github.com/OCA/rma',
'depends': ['rma_account', 'purchase'],
'data': [
+ 'wizards/rma_order_line_make_purchase_order_view.xml',
'security/ir.model.access.csv',
'views/rma_operation_view.xml',
'views/rma_order_view.xml',
'views/rma_order_line_view.xml',
- 'wizards/rma_add_purchase.xml'
+ 'wizards/rma_add_purchase.xml',
],
'installable': True,
'auto_install': True,
diff --git a/rma_purchase/views/rma_order_line_view.xml b/rma_purchase/views/rma_order_line_view.xml
index a689d2fc..86dda2e6 100644
--- a/rma_purchase/views/rma_order_line_view.xml
+++ b/rma_purchase/views/rma_order_line_view.xml
@@ -15,7 +15,7 @@
-
diff --git a/rma_purchase/wizards/__init__.py b/rma_purchase/wizards/__init__.py
index 93c9a820..73c6279c 100644
--- a/rma_purchase/wizards/__init__.py
+++ b/rma_purchase/wizards/__init__.py
@@ -3,3 +3,4 @@
from . import rma_make_picking
from . import rma_add_purchase
+from . import rma_order_line_make_purchase_order
diff --git a/rma_purchase/wizards/rma_order_line_make_purchase_order.py b/rma_purchase/wizards/rma_order_line_make_purchase_order.py
new file mode 100644
index 00000000..8bd10ff1
--- /dev/null
+++ b/rma_purchase/wizards/rma_order_line_make_purchase_order.py
@@ -0,0 +1,146 @@
+# Copyright 2018 Eficent Business and IT Consulting Services S.L.
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0).
+
+import odoo.addons.decimal_precision as dp
+from odoo import _, api, exceptions, fields, models
+from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
+from datetime import datetime
+
+
+class RmaLineMakePurchaseOrder(models.TransientModel):
+ _name = "rma.order.line.make.purchase.order"
+ _description = "Make Purchases Order from RMA Line"
+
+ partner_id = fields.Many2one(
+ comodel_name='res.partner', string='Customer', required=False,
+ domain=[('customer', '=', True)])
+ item_ids = fields.One2many(
+ comodel_name='rma.order.line.make.purchase.order.item',
+ inverse_name='wiz_id', string='Items')
+ purchase_order_id = fields.Many2one(
+ comodel_name='purchase.order', string='Purchases Order',
+ required=False, domain=[('state', '=', 'draft')])
+
+ @api.model
+ def _prepare_item(self, line):
+ return {
+ 'line_id': line.id,
+ 'rma_line_id': line.id,
+ 'product_id': line.product_id.id,
+ 'name': line.product_id.name,
+ 'product_qty': line.qty_to_purchase,
+ 'rma_id': line.rma_id.id,
+ 'product_uom_id': line.uom_id.id,
+ }
+
+ @api.model
+ def default_get(self, fields):
+ res = super(RmaLineMakePurchaseOrder, self).default_get(
+ fields)
+ rma_line_obj = self.env['rma.order.line']
+ rma_line_ids = self.env.context['active_ids'] or []
+ active_model = self.env.context['active_model']
+
+ if not rma_line_ids:
+ return res
+ assert active_model == 'rma.order.line', 'Bad context propagation'
+
+ items = []
+ lines = rma_line_obj.browse(rma_line_ids)
+ for line in lines:
+ items.append([0, 0, self._prepare_item(line)])
+ customers = lines.mapped('partner_id')
+ if len(customers) == 1:
+ res['partner_id'] = customers.id
+ else:
+ raise exceptions.Warning(
+ _('Only RMA lines from the same partner can be processed at '
+ 'the same time'))
+ res['item_ids'] = items
+ return res
+
+ @api.model
+ def _prepare_purchase_order(self, item):
+ if not self.partner_id:
+ raise exceptions.Warning(
+ _('Enter a supplier.'))
+ supplier = self.partner_id
+ data = {
+ 'origin': '',
+ 'partner_id': supplier.id,
+ 'company_id': item.line_id.company_id.id,
+ }
+ return data
+
+ @api.model
+ def _prepare_purchase_order_line(self, po, item):
+ product = item.product_id
+ vals = {
+ 'name': product.name,
+ 'order_id': po.id,
+ 'product_id': product.id,
+ 'price_unit': item.line_id.price_unit,
+ 'date_planned': datetime.today().strftime(
+ DEFAULT_SERVER_DATETIME_FORMAT),
+ 'product_uom': product.uom_po_id.id,
+ 'product_qty': item.product_qty,
+ 'rma_line_id': item.line_id.id
+ }
+ if item.free_of_charge:
+ vals['price_unit'] = 0.0
+ return vals
+
+ @api.multi
+ def create_purchase_order(self):
+ res = []
+ purchase_obj = self.env['purchase.order']
+ po_line_obj = self.env['purchase.order.line']
+ purchase = False
+
+ for item in self.item_ids:
+ if item.product_qty <= 0.0:
+ raise exceptions.Warning(
+ _('Enter a positive quantity.'))
+
+ if self.purchase_order_id:
+ purchase = self.purchase_order_id
+ if not purchase:
+ po_data = self._prepare_purchase_order(item)
+ purchase = purchase_obj.create(po_data)
+
+ po_line_data = self._prepare_purchase_order_line(purchase, item)
+ po_line_obj.create(po_line_data)
+ res.append(purchase.id)
+
+ return {
+ 'domain': "[('id','in', ["+','.join(map(str, res))+"])]",
+ 'name': _('Request for Quotation'),
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'purchase.order',
+ 'view_id': False,
+ 'context': False,
+ 'type': 'ir.actions.act_window'
+ }
+
+
+class RmaLineMakePurchaseOrderItem(models.TransientModel):
+ _name = "rma.order.line.make.purchase.order.item"
+ _description = "RMA Line Make Purchase Order Item"
+
+ wiz_id = fields.Many2one(
+ comodel_name='rma.order.line.make.purchase.order', string='Wizard')
+ line_id = fields.Many2one(
+ comodel_name='rma.order.line', string='RMA Line')
+ rma_id = fields.Many2one(
+ comodel_name='rma.order', related='line_id.rma_id',
+ string='RMA Order')
+ product_id = fields.Many2one(
+ comodel_name='product.product', string='Product')
+ name = fields.Char(string='Description')
+ product_qty = fields.Float(
+ string='Quantity to purchase',
+ digits=dp.get_precision('Product Unit of Measure'),)
+ product_uom_id = fields.Many2one(
+ comodel_name='product.uom', string='UoM')
+ free_of_charge = fields.Boolean(string='Free of Charge')
diff --git a/rma_purchase/wizards/rma_order_line_make_purchase_order_view.xml b/rma_purchase/wizards/rma_order_line_make_purchase_order_view.xml
new file mode 100644
index 00000000..d5475da4
--- /dev/null
+++ b/rma_purchase/wizards/rma_order_line_make_purchase_order_view.xml
@@ -0,0 +1,61 @@
+
+
+
+ RMA Line Make Purchase Order
+ rma.order.line.make.purchase.order
+ form
+
+
+
+
+
+
+ Create RFQ
+ ir.actions.act_window
+ rma.order.line.make.purchase.order
+ form
+ form
+
+ new
+
+
+
+