[Merge] Merge with mma branch for purchase improvements

bzr revid: psi@tinyerp.com-20120307064517-pnn6dodja19jqwoz
This commit is contained in:
Purnendu Singh (OpenERP) 2012-03-07 12:15:17 +05:30
commit 1299e37241
5 changed files with 29 additions and 81 deletions

View File

@ -180,7 +180,7 @@ class purchase_order(osv.osv):
'picking_ids': fields.one2many('stock.picking', 'purchase_id', 'Picking List', readonly=True, help="This is the list of picking list that have been generated for this purchase"),
'shipped':fields.boolean('Received', readonly=True, select=True, help="It indicates that a picking has been done"),
'shipped_rate': fields.function(_shipped_rate, string='Received', type='float'),
'invoiced': fields.function(_invoiced, string='Invoiced & Paid', type='boolean', help="It indicates that an invoice has been paid"),
'invoiced': fields.function(_invoiced, string='Invoice Received', type='boolean', help="It indicates that an invoice has been paid"),
'invoiced_rate': fields.function(_invoiced_rate, string='Invoiced', type='float'),
'invoice_method': fields.selection([('manual','Based on Purchase Order lines'),('order','Based on generated draft invoice'),('picking','Based on receptions')], 'Invoicing Control', required=True,
help="Based on Purchase Order lines: place individual lines in 'Invoice Control > Based on P.O. lines' from where you can selectively create an invoice.\n" \
@ -276,14 +276,16 @@ class purchase_order(osv.osv):
def view_invoice(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
wizard_obj = self.pool.get('purchase.order.line_invoice')
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.'))
context.update({'active_ids' : [line.id for line in po.order_line]})
wizard_obj.makeInvoices(cr, uid, [], context=context)
for po in self.browse(cr, uid, ids, context=context):
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
@ -322,26 +324,6 @@ class purchase_order(osv.osv):
'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

View File

@ -197,7 +197,6 @@
<group col="16" colspan="4">
<field name="state" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue","wait":"blue"}' readonly="1"/>
<button name="wkf_send_rfq" states="draft" string="Send" type="object" icon="terp-mail-message-new"/>
<button name="view_report" string="Print" states="draft" type="object" icon="gtk-print"/>
<button name="action_cancel" states="except_picking,except_invoice,wait" string="Cancel" type="object" icon="gtk-cancel"/>
<button name="picking_ok" states="except_picking" string="Manually Corrected" icon="gtk-convert"/>
<button name="invoice_ok" states="except_invoice" string="Manually Corrected" icon="gtk-convert"/>
@ -205,7 +204,7 @@
<button name="purchase_appbuyer" states="wait_auth" string="Approve Purchase" icon="gtk-ok"/>
<button name="purchase_approve" states="confirmed" string="Approve Order" icon="gtk-go-forward"/>
<button name="view_invoice" string="Receive Invoice" icon="gtk-go-forward" type="object" attrs="{'invisible': ['|', ('invoice_method','=','picking'), '|', ('state','!=', 'approved'), ('invoiced','=',True) ]}"/>
<button name="view_picking" string="Receive Product" icon="gtk-go-forward" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}"/>
<button name="view_picking" string="Receive Products" icon="gtk-go-forward" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}"/>
<button name="action_cancel_draft" states="cancel,send,confirmed" string="Set to Draft" type="object" icon="gtk-convert"/>
<button name="purchase_cancel" states="draft,confirmed,wait_auth,send" string="Cancel" icon="gtk-cancel"/>
</group>
@ -238,40 +237,6 @@
</field>
</record>
<record id="view_request_for_quotation_filter" model="ir.ui.view">
<field name="name">request.quotation.select</field>
<field name="model">purchase.order</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Purchase Order">
<group>
<filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase order which are in draft state"/>
<filter icon="terp-check" name="approved" string="Approved" domain="[('state','in',('approved','done'))]" help="Approved purchase order"/>
<separator orientation="vertical"/>
<filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase order which are in the exception state"/>
<separator orientation="vertical"/>
<filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced." groups="base.group_extended"/>
<separator orientation="vertical"/>
<field name="name" string="Reference"/>
<field name="partner_id"/>
<field name="product_id"/>
<field name="create_uid"/>
</group>
<newline/>
<group expand="0" string="Group By..." groups="base.group_extended">
<filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
<separator orientation="vertical"/>
<filter string="Origin" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'origin'}"/>
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
<filter string="Expected Date" icon="terp-go-month" domain="[]" context="{'group_by':'minimum_planned_date'}"/>
</group>
</search>
</field>
</record>
<record id="view_purchase_order_filter" model="ir.ui.view">
<field name="name">purchase.order.list.select</field>
<field name="model">purchase.order</field>
@ -280,13 +245,10 @@
<search string="Search Purchase Order">
<group>
<filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase orders which are in draft state"/>
<filter icon="terp-gtk-jump-to-ltr" name="to_approve" string="To Approve" domain="[('state','in',('draft','wait','confirmed'))]" help="Purchase orders which are not approved yet."/>
<filter icon="terp-check" name="approved" string="Approved" domain="[('state','=','approved')]" help="Approved purchase orders"/>
<filter icon="terp-accessories-archiver+" string="Done" domain="[('state','=','done')]" help="Purchase orders which are in done state."/>
<separator orientation="vertical"/>
<filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/>
<filter icon="terp-check" name="approved" string="Purchase Orders" domain="[('state','not in',('draft','cancel'))]" help="Approved purchase orders"/>
<separator orientation="vertical"/>
<filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced." groups="base.group_extended"/>
<filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/>
<separator orientation="vertical"/>
<field name="name" string="Reference"/>
<field name="partner_id"/>
@ -330,12 +292,12 @@
</record>
<record id="purchase_rfq" model="ir.actions.act_window">
<field name="name">Requests for Quotation</field>
<field name="name">Quotations</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
<field name="context">{'search_default_draft': 1}</field>
<field name="view_mode">tree,form,graph,calendar</field>
<field name="search_view_id" ref="view_request_for_quotation_filter"/>
<field name="search_view_id" ref="view_purchase_order_filter"/>
<field name="help">You can create a request for quotation when you want to buy products to a supplier but the purchase is not confirmed yet. Use also this menu to review requests for quotation created automatically based on your logistic rules (minimum stock, MTO, etc). You can convert the request for quotation into a purchase order once the order is confirmed. If you use the extended interface (from user's preferences), you can select the way to control your supplier invoices: based on the order, based on the receptions or manual encoding.</field>
</record>
<menuitem action="purchase_rfq" id="menu_purchase_rfq"

View File

@ -39,6 +39,7 @@ that exceeds minimum amount set by configuration wizard.
'update_xml': [
'purchase_double_validation_workflow.xml',
'purchase_double_validation_installer.xml',
'purchase_double_validation_view.xml',
'board_purchase_view.xml'
],
'test': [

View File

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<openerp>
<data>
<record model="ir.ui.view" id="purchase_order_search_inherit">
<field name="name">purchase.order.list.select.inherit</field>
<field name="type">form</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_purchase_order_filter"/>
<field name="arch" type="xml">
<xpath expr="/search/group/filter[@name='draft']" position="after">
<filter icon="terp-gtk-jump-to-ltr" name="to_approve" string="To Approve" domain="[('state','in',('wait','confirmed'))]" help="Purchase orders which are not approved yet."/>
</xpath>
</field>
</record>
</data>
</openerp>

View File

@ -21,20 +21,7 @@
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_purchase_order_filter"/>
<field name="arch" type="xml">
<xpath expr="/search/group/filter[@name='not_invoiced']" position="after">
<separator orientation="vertical"/>
<filter icon="terp-gtk-jump-to-rtl" string="Requisition" domain="[('requisition_id','!=',False)]" help="Purchase Orders with requisition"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="request_for_quotation_inherit">
<field name="name">request.for.quotation.select.inherit</field>
<field name="type">form</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_request_for_quotation_filter"/>
<field name="arch" type="xml">
<xpath expr="/search/group/filter[@name='not_invoiced']" position="after">
<xpath expr="/search/group/filter[@name='approved']" position="after">
<separator orientation="vertical"/>
<filter icon="terp-gtk-jump-to-rtl" string="Requisition" domain="[('requisition_id','!=',False)]" help="Purchase Orders with requisition"/>
</xpath>