[MERGE] lp:~openerp-dev/openobject-addons/trunk-first_10_clicks_purchase-mdi/

bzr revid: stw@openerp.com-20120803124606-omnkdxp5ly1tpy4q
This commit is contained in:
Stephane Wirtel 2012-08-03 14:46:06 +02:00
commit 6e7a35e819
7 changed files with 140 additions and 15 deletions

View File

@ -306,7 +306,7 @@ class account_invoice(osv.osv):
if view_type == 'form': if view_type == 'form':
if partner['supplier'] and not partner['customer']: if partner['supplier'] and not partner['customer']:
view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'account.invoice.supplier.form')]) view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'account.invoice.supplier.form')])
else: elif partner['customer'] and not partner['supplier']:
view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'account.invoice.form')]) view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'account.invoice.form')])
if view_id and isinstance(view_id, (list, tuple)): if view_id and isinstance(view_id, (list, tuple)):
view_id = view_id[0] view_id = view_id[0]

View File

@ -24,6 +24,21 @@ from osv import fields, osv
class res_partner(osv.osv): class res_partner(osv.osv):
_name = 'res.partner' _name = 'res.partner'
_inherit = 'res.partner' _inherit = 'res.partner'
def _purchase_order_count(self, cr, uid, ids, field_name, arg, context=None):
res = {}
for partner in self.browse(cr, uid, ids, context=context):
res[partner.id] = len(partner.purchase_order_ids)
return res
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default.update({'purchase_order_ids': []})
super(res_partner, self).copy(cr, uid, id, default=default, context=context)
_columns = { _columns = {
'property_product_pricelist_purchase': fields.property( 'property_product_pricelist_purchase': fields.property(
'product.pricelist', 'product.pricelist',
@ -33,6 +48,8 @@ class res_partner(osv.osv):
string="Purchase Pricelist", string="Purchase Pricelist",
view_load=True, view_load=True,
help="This pricelist will be used, instead of the default one, for purchases from the current partner"), help="This pricelist will be used, instead of the default one, for purchases from the current partner"),
'purchase_order_count': fields.function(_purchase_order_count, string='# of Purchase Order', type='integer'),
'purchase_order_ids': fields.one2many('purchase.order','partner_id','Purchase Order')
} }
res_partner() res_partner()

View File

@ -16,6 +16,73 @@
</field> </field>
</field> </field>
</record> </record>
<record id="act_res_partner_2_purchase_order" model="ir.actions.act_window">
<field name="name">RFQs and Purchases</field>
<field name="res_model">purchase.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="context">{'search_default_partner_id': active_id}</field>
<field name="groups_id" eval="[(4, ref('purchase.group_purchase_user'))]"/>
<field name="help">
This supplier has no RFQ or Purchase Order. Click here to create a new RFQ.
&lt;p&gt;
The "Quotation" is the first step of the Purchases flow. Manage your purchases from quotation to invoice.
&lt;p&gt;
You will be able to buy products (manage receptions) as well as services (create projects).
</field>
</record>
<!-- Partner kanban view inherited -->
<record model="ir.ui.view" id="purchase_partner_kanban_view">
<field name="name">res.partner.kanban.purchaseorder.inherit</field>
<field name="model">res.partner</field>
<field name="type">kanban</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="arch" type="xml">
<field name="mobile" position="after">
<field name="purchase_order_count"/>
</field>
<xpath expr="//div[@class='oe_kanban_partner_links']" position="inside">
<a name="%(purchase.act_res_partner_2_purchase_order)d" type="action" t-if="record.purchase_order_count.value>0">
<t t-esc="record.purchase_order_count.value"/> Purchases
</a>
</xpath>
</field>
</record>
<record id="act_res_partner_2_supplier_invoices" model="ir.actions.act_window">
<field name="name">Supplier Invoices</field>
<field name="res_model">account.invoice</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="domain">[('type','=','in_invoice')]</field>
<field name="context">{'search_default_partner_id': active_id, 'default_type': 'in_invoice', 'type': 'in_invoice', 'journal_type': 'purchase'}</field>
<field name="help">
Click here to create Supplier invoice.
&lt;p&gt;
You can control the invoice from your supplier according to what you purchased or received.
&lt;p&gt;
OpenERP can also generate draft invoices automatically from purchase orders or receipts.
</field>
</record>
<record id="res_partner_view_purchase_buttons" model="ir.ui.view">
<field name="name">res.partner.view.purchase.buttons</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='buttons']" position="inside">
<button name="%(purchase.act_res_partner_2_purchase_order)d" type="action"
string="RFQs and Purchases"
groups="purchase.group_purchase_user"/>
<button name="%(purchase.act_res_partner_2_supplier_invoices)d" type="action"
string="Supplier Invoices"/>
</xpath>
</field>
</record>
</data> </data>
</openerp> </openerp>

View File

@ -6,12 +6,10 @@
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' --> <!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
<value eval="[ref('mail.group_all_employees')]"/> <value eval="[ref('mail.group_all_employees')]"/>
<value>Module Purchase Management has been installed</value> <value>Module Purchase Management has been installed</value>
<value>From the top menu Purchases, create purchase orders to buy <value>You can &lt;b&gt;click on the top menu Purchases&lt;/b&gt; to manage your
products from your suppliers, encode supplier invoices and suppliers, request for quotations and control supplier invoices.
manage your payments.
You can also manage purchase requisitions, see the Purchase To configure your purchase application, you can add purchase's options in settings menu.
Settings.
</value> </value>
</function> </function>

View File

@ -491,14 +491,6 @@
</field> </field>
</record> </record>
<act_window
context="{'search_default_partner_id': [active_id], 'default_partner_id': active_id}"
id="act_res_partner_2_purchase_order"
name="RFQs and Purchases"
groups="purchase.group_purchase_user"
res_model="purchase.order"
src_model="res.partner"/>
<act_window <act_window
context="{'search_default_product_id': [active_id], 'default_product_id': active_id}" context="{'search_default_product_id': [active_id], 'default_product_id': active_id}"
id="action_purchase_line_product_tree" id="action_purchase_line_product_tree"

View File

@ -75,6 +75,27 @@
<field name="context">{'search_default_purchase_id': active_id,'default_type': 'in'}</field> <field name="context">{'search_default_purchase_id': active_id,'default_type': 'in'}</field>
<field name="search_view_id" ref="view_picking_in_search_picking_to_invoice"/> <field name="search_view_id" ref="view_picking_in_search_picking_to_invoice"/>
</record> </record>
<record id="act_purchase_order_2_stock_picking_tree" model="ir.actions.act_window.view">
<field eval="1" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="stock.view_picking_in_tree"/>
<field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
</record>
<record id="act_purchase_order_2_stock_picking_form" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="stock.view_picking_in_form"/>
<field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
</record>
<record id="act_purchase_order_2_stock_picking_calendar" model="ir.actions.act_window.view">
<field eval="3" name="sequence"/>
<field name="view_mode">calendar</field>
<field name="view_id" ref="stock.stock_picking_in_calendar"/>
<field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
</record>
<record id="purchase_order_2_stock_picking" model="ir.ui.view"> <record id="purchase_order_2_stock_picking" model="ir.ui.view">
<field name="name">Purchase Picking Inherited</field> <field name="name">Purchase Picking Inherited</field>

View File

@ -914,6 +914,20 @@
</record> </record>
<!-- Sending Products --> <!-- Sending Products -->
<record model="ir.ui.view" id="stock_picking_out_calendar">
<field name="name">stock.picking.out.calendar</field>
<field name="model">stock.picking.out</field>
<field name="type">calendar</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Calendar View" date_start="min_date" date_stop="max_date" color="partner_id">
<field name="origin"/>
<field name="type"/>
<field name="partner_id"/>
</calendar>
</field>
</record>
<record id="view_picking_out_tree" model="ir.ui.view"> <record id="view_picking_out_tree" model="ir.ui.view">
<field name="name">stock.picking.out.tree</field> <field name="name">stock.picking.out.tree</field>
<field name="model">stock.picking</field> <field name="model">stock.picking</field>
@ -1017,11 +1031,26 @@
<record id="action_picking_tree_out_view2_waiting_cal" model="ir.actions.act_window.view"> <record id="action_picking_tree_out_view2_waiting_cal" model="ir.actions.act_window.view">
<field eval="3" name="sequence"/> <field eval="3" name="sequence"/>
<field name="view_mode">calendar</field> <field name="view_mode">calendar</field>
<field name="view_id" ref="stock_picking_out_calendar"/>
<field name="act_window_id" ref="action_picking_tree"/> <field name="act_window_id" ref="action_picking_tree"/>
</record> </record>
<menuitem action="action_picking_tree" id="menu_action_picking_tree" parent="menu_stock_warehouse_mgmt" sequence="3"/> <menuitem action="action_picking_tree" id="menu_action_picking_tree" parent="menu_stock_warehouse_mgmt" sequence="3"/>
<!-- Incomming Shipments --> <!-- Incomming Shipments -->
<record model="ir.ui.view" id="stock_picking_in_calendar">
<field name="name">stock.picking.in.calendar</field>
<field name="model">stock.picking.in</field>
<field name="type">calendar</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Calendar View" date_start="min_date" date_stop="max_date" color="partner_id">
<field name="origin"/>
<field name="type"/>
<field name="partner_id"/>
</calendar>
</field>
</record>
<record id="view_picking_in_tree" model="ir.ui.view"> <record id="view_picking_in_tree" model="ir.ui.view">
<field name="name">stock.picking.in.tree</field> <field name="name">stock.picking.in.tree</field>
<field name="model">stock.picking.in</field> <field name="model">stock.picking.in</field>
@ -1119,6 +1148,7 @@
<record id="action_invoice_tree5_view2_cal" model="ir.actions.act_window.view"> <record id="action_invoice_tree5_view2_cal" model="ir.actions.act_window.view">
<field eval="3" name="sequence"/> <field eval="3" name="sequence"/>
<field name="view_mode">calendar</field> <field name="view_mode">calendar</field>
<field name="view_id" ref="stock_picking_in_calendar"/>
<field name="act_window_id" ref="action_picking_tree4"/> <field name="act_window_id" ref="action_picking_tree4"/>
</record> </record>
<menuitem action="action_picking_tree4" id="menu_action_picking_tree4" parent="menu_stock_warehouse_mgmt" sequence="1"/> <menuitem action="action_picking_tree4" id="menu_action_picking_tree4" parent="menu_stock_warehouse_mgmt" sequence="1"/>
@ -1221,7 +1251,7 @@
<field name="date" groups="base.group_no_one"/> <field name="date" groups="base.group_no_one"/>
</group> </group>
<group string="Tracability" <group string="Tracability"
groups="stock.group_tracking_lot,stock.group_production_lot"> groups="stock.group_tracking_lot">
<label for="tracking_id" groups="stock.group_tracking_lot"/> <label for="tracking_id" groups="stock.group_tracking_lot"/>
<div groups="stock.group_tracking_lot"> <div groups="stock.group_tracking_lot">
<field name="tracking_id" class="oe_inline"/> <field name="tracking_id" class="oe_inline"/>