diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 3d909c1085e..9ebb084ecb2 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -142,13 +142,14 @@ class purchase_order(osv.osv):
return res
STATE_SELECTION = [
- ('draft', 'Request for Quotation'),
+ ('draft', 'Draft PO'),
('wait', 'Waiting'),
+ ('send', 'RFQ Sent'),
('confirmed', 'Waiting Approval'),
- ('approved', 'Approved'),
+ ('approved', 'Purchase Order'),
('except_picking', 'Shipping Exception'),
('except_invoice', 'Invoice Exception'),
- ('done', 'Done'),
+ ('done', 'Paid'),
('cancel', 'Cancelled')
]
@@ -273,10 +274,109 @@ class purchase_order(osv.osv):
fiscal_position = supplier.property_account_position and supplier.property_account_position.id or False
return {'value':{'partner_address_id': supplier_address['default'], 'pricelist_id': pricelist, 'fiscal_position': fiscal_position}}
+ def view_invoice(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ inv_ids = []
+ for po in self.browse(cr, uid, ids, context=context):
+ if po.invoice_method == 'manual':
+ if not po.invoice_ids:
+ raise osv.except_osv(_('warning !'),
+ _('Your Invoicing Control is based on order lines, so please create invoice from Purchase order lines.'))
+ inv_ids+= [invoice.id for invoice in po.invoice_ids]
+
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
+ res_id = res and res[1] or False
+
+ return {
+ 'name': _('Supplier Invoices'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': [res_id],
+ 'res_model': 'account.invoice',
+ 'context': "{'type':'in_invoice', 'journal_type': 'purchase'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': inv_ids and inv_ids[0] or False,
+ }
+
+ def view_picking(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ pick_ids = []
+ for po in self.browse(cr, uid, ids, context=context):
+ pick_ids += [picking.id for picking in po.picking_ids]
+
+ res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_in_form')
+ res_id = res and res[1] or False
+
+ return {
+ 'name': _('Receptions'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': [res_id],
+ 'res_model': 'stock.picking',
+ 'context': "{'contact_display': 'partner'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': pick_ids and pick_ids[0] or False,
+ }
+
+ def view_report(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ if context is None:
+ context = {}
+ for id in ids:
+ wf_service.trg_validate(uid, 'purchase.order', id, 'send_rfq', cr)
+
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ datas = {
+ 'ids': [],
+ 'model': 'purchase.order',
+ 'form': data
+ }
+ return {
+ 'type': 'ir.actions.report.xml',
+ 'report_name': 'purchase.quotation',
+ 'nodestroy': True,
+ 'datas': datas,
+ }
+
def wkf_approve_order(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
return True
+ def _hook_message_sent(self, cr, uid, purchase_id, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_validate(uid, 'purchase.order', purchase_id, 'send_rfq', cr)
+ return True
+
+ def wkf_send_rfq(self, cr, uid, ids, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ template_id = self.pool.get('email.template').search(cr, uid, [('model_id', '=', 'purchase.order')])
+
+ res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
+ res_id = res and res[1] or False
+
+ #EDI EXport data
+ id = ids[0]
+ order = self.browse(cr, uid, id, context)
+ if not order.partner_id.opt_out:
+ order.edi_export_and_email(template_ext_id='purchase.email_template_edi_purchase', context=context)
+ ctx = context.copy()
+ ctx.update({'active_model': 'purchase.order', 'active_id': id, 'mail.compose.template_id': template_id})
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(res_id,'form')],
+ 'view_id': res_id,
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': ctx,
+ 'nodestroy': True,
+ }
+
#TODO: implement messages system
def wkf_confirm_order(self, cr, uid, ids, context=None):
todo = []
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 1c936055aff..ad064bab696 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -194,17 +194,20 @@
-
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index c978712c0a1..38010780c7f 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -13,6 +13,12 @@
True
draft
+
+
+ send
+ function
+ write({'state':'send'})
+
confirmed
@@ -90,6 +96,22 @@
purchase_confirm
+
+
+
+ send_rfq
+
+
+
+
+ purchase_confirm
+
+
+
+
+ purchase_cancel
+
+