summaryrefslogtreecommitdiff
path: root/addons/purchase
diff options
context:
space:
mode:
authoratp (Open ERP) <atp@tinyerp.co.in>2010-06-22 10:45:44 +0530
committeratp (Open ERP) <atp@tinyerp.co.in>2010-06-22 10:45:44 +0530
commitb0efd26edd9f4e2aa75424b787ea46d2be15cd04 (patch)
treee78cdb693e62a5c9a17f77a395eec51fb34becbf /addons/purchase
parent46bb1ea51be702758d68a5f69db32c82dbccf9bd (diff)
parent2319190c5a20cb8095f85cacca89a33164ba93d7 (diff)
[MERGE]: merge with lp:~openerp-dev/openobject-addons/trunk-dev-addons2
bzr revid: atp@tinyerp.co.in-20100622051544-c7hig73zk2at66cy
Diffstat (limited to 'addons/purchase')
-rw-r--r--addons/purchase/__openerp__.py5
-rw-r--r--addons/purchase/board_purchase_view.xml66
-rw-r--r--addons/purchase/process/purchase_process.xml2
-rw-r--r--addons/purchase/purchase.py34
-rw-r--r--addons/purchase/purchase_view.xml40
-rw-r--r--addons/purchase/report/purchase_report_view.xml34
-rw-r--r--addons/purchase/security/ir.model.access.csv2
-rw-r--r--addons/purchase/wizard/purchase_installer.py1
8 files changed, 148 insertions, 36 deletions
diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py
index 8d3d213a91d..f557997497b 100644
--- a/addons/purchase/__openerp__.py
+++ b/addons/purchase/__openerp__.py
@@ -27,6 +27,10 @@
'description': """
Purchase module is for generating a purchase order for purchase of goods from a supplier.
A supplier invoice is created for the particular order placed
+ Dashboard for purchase management that includes:
+ * Current Purchase Orders
+ * Draft Purchase Orders
+ * Graph for quantity and amount per month
""",
'author': 'Tiny',
@@ -50,6 +54,7 @@
'partner_view.xml',
'process/purchase_process.xml',
'report/purchase_report_view.xml',
+ 'board_purchase_view.xml',
],
'test': [
'test/purchase_from_order.yml',
diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml
new file mode 100644
index 00000000000..bdfb5663f66
--- /dev/null
+++ b/addons/purchase/board_purchase_view.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <menuitem icon="terp-graph" id="base.dashboard" name="Dashboards" sequence="2" parent="base.reporting_menu"/>
+ <menuitem
+ id="menu_purchase_deshboard"
+ name="Purchase"
+ parent="base.dashboard"/>
+
+ <record id="purchase_draft" model="ir.actions.act_window">
+ <field name="name">Draft Purchases</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">purchase.order</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ <field name="domain">[('date_order','&gt;',time.strftime('%Y-01-01 00:00:00')),('date_order','&lt;',time.strftime('%Y-12-31 23:59:59')), ('state','=','draft')]</field>
+ <field name="search_view_id" ref="purchase.purchase_order_tree"/>
+ </record>
+ <record id="purchase_waiting" model="ir.actions.act_window">
+ <field name="name">Quotation Request</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">purchase.order</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ <field name="domain">[('date_order','&gt;',time.strftime('%Y-01-01 00:00:00')),('date_order','&lt;',time.strftime('%Y-12-31 23:59:59')), ('state','in',('wait','confirmed'))]</field>
+ <field name="search_view_id" ref="purchase.purchase_order_tree"/>
+ </record>
+
+ <record id="board_purchase_form" model="ir.ui.view">
+ <field name="name">board.purchase.form</field>
+ <field name="model">board.board</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="My Board">
+ <hpaned>
+ <child1>
+ <action colspan="4" height="220" name="%(purchase_draft)d" string="Draft Purchase Order" width="510"/>
+ <action colspan="4" height="220" name="%(purchase_waiting)d" string="Purchase Order in Waiting" width="510"/>
+ </child1>
+ <child2>
+ <action colspan="4" height="220" name="%(purchase.action_purchase_order_report_all)d" string="Total Qty and Amount by month" />
+ <action colspan="4" height="220" name="%(purchase.action_stock_move_report_po)d" string="Total Orders by User per month" />
+ </child2>
+ </hpaned>
+ </form>
+ </field>
+ </record>
+
+ <record id="open_board_purchase" model="ir.actions.act_window">
+ <field name="name">Purchase Dashboard</field>
+ <field name="res_model">board.board</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="usage">menu</field>
+ <field name="view_id" ref="board_purchase_form"/>
+ </record>
+ <menuitem
+ action="open_board_purchase"
+ icon="terp-graph"
+ id="menu_board_purchase"
+ parent="menu_purchase_deshboard"
+ sequence="4"/>
+
+ </data>
+</openerp>
diff --git a/addons/purchase/process/purchase_process.xml b/addons/purchase/process/purchase_process.xml
index 1f1a9bbd280..64abc11976b 100644
--- a/addons/purchase/process/purchase_process.xml
+++ b/addons/purchase/process/purchase_process.xml
@@ -107,7 +107,7 @@
</record>
<record id="process_node_invoiceafterpacking0" model="process.node">
- <field name="menu_id" ref="account.menu_finance_invoice"/>
+ <field name="menu_id" ref="account.menu_finance_receivables"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Invoice&quot;&quot;&quot;" name="name"/>
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 3958743bfcf..3ee7f158d78 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -47,7 +47,7 @@ class purchase_order(osv.osv):
res[order.id] += oline.price_unit * oline.product_qty
return res
- def _amount_all(self, cr, uid, ids, field_name, arg, context):
+ def _amount_all(self, cr, uid, ids, field_name, arg, context=None):
res = {}
cur_obj=self.pool.get('res.currency')
for order in self.browse(cr, uid, ids):
@@ -55,13 +55,13 @@ class purchase_order(osv.osv):
'amount_untaxed': 0.0,
'amount_tax': 0.0,
'amount_total': 0.0,
- }
+ }
val = val1 = 0.0
- cur=order.pricelist_id.currency_id
+ cur = order.pricelist_id.currency_id
for line in order.order_line:
- for c in self.pool.get('account.tax').compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, order.partner_address_id.id, line.product_id, order.partner_id)['taxes']:
- val+= c['amount']
- val1 += line.price_subtotal
+ val1 += line.price_subtotal
+ for c in self.pool.get('account.tax').compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, order.partner_address_id.id, line.product_id.id, order.partner_id)['taxes']:
+ val += c['amount']
res[order.id]['amount_tax']=cur_obj.round(cr, uid, cur, val)
res[order.id]['amount_untaxed']=cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_total']=res[order.id]['amount_untaxed'] + res[order.id]['amount_tax']
@@ -116,7 +116,7 @@ class purchase_order(osv.osv):
LEFT JOIN
stock_picking p on (p.id=m.picking_id)
WHERE
- p.purchase_id = ANY(%s) GROUP BY m.state, p.purchase_id''',(ids,))
+ p.purchase_id IN %s GROUP BY m.state, p.purchase_id''',(tuple(ids),))
for oid,nbr,state in cr.fetchall():
if state=='cancel':
continue
@@ -211,7 +211,6 @@ class purchase_order(osv.osv):
}
_name = "purchase.order"
_description = "Purchase Order"
- _log_create = True
_order = "name desc"
def unlink(self, cr, uid, ids, context=None):
@@ -259,10 +258,14 @@ class purchase_order(osv.osv):
def wkf_approve_order(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': time.strftime('%Y-%m-%d')})
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Purchase order ') + " '" + name + "' "+_("is approved by the supplier")
+ self.log(cr, uid, id, message)
return True
#TODO: implement messages system
def wkf_confirm_order(self, cr, uid, ids, context={}):
+ product = []
todo = []
for po in self.browse(cr, uid, ids):
if not po.order_line:
@@ -276,6 +279,11 @@ class purchase_order(osv.osv):
self.log(cr,uid,po,message)
for id in ids:
self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid})
+ for line in po.order_line:
+ product.append(line.product_id.default_code or '')
+ params = ', '.join(map(lambda x : str(x), product))
+ message = _('Purchase order ') + " '" + po.name + "' "+_('placed on')+ " '" + po.date_order + "' "+_('for')+" '" + params + "' "+ _("is confirmed")
+ self.log(cr, uid, id, message)
return True
def wkf_warn_buyer(self, cr, uid, ids):
@@ -317,6 +325,9 @@ class purchase_order(osv.osv):
# Deleting the existing instance of workflow for PO
wf_service.trg_delete(uid, 'purchase.order', p_id, cr)
wf_service.trg_create(uid, 'purchase.order', p_id, cr)
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Purchase order') + " '" + name + "' "+ _("is in the draft state")
+ self.log(cr, uid, id, message)
return True
def action_invoice_create(self, cr, uid, ids, *args):
@@ -396,6 +407,8 @@ class purchase_order(osv.osv):
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_cancel', cr)
self.write(cr,uid,ids,{'state':'cancel'})
+ message = _('Purchase order ') + " '" + purchase.name + "' "+ _("is cancelled")
+ self.log(cr, uid, id, message)
return True
def action_picking_create(self,cr, uid, ids, *args):
@@ -632,7 +645,7 @@ class purchase_order_line(osv.osv):
if not product:
return {'value': {'price_unit': price_unit or 0.0, 'name': name or '',
'notes': notes or'', 'product_uom' : uom or False}, 'domain':{'product_uom':[]}}
- prod= self.pool.get('product.product').browse(cr, uid,product)
+ prod= self.pool.get('product.product').browse(cr, uid, product)
lang=False
if partner_id:
lang=self.pool.get('res.partner').read(cr, uid, partner_id, ['lang'])['lang']
@@ -697,6 +710,9 @@ class purchase_order_line(osv.osv):
return res
def action_confirm(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'confirmed'}, context)
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Purchase order line') + " '" + name + "' "+ _("is confirmed")
+ self.log(cr, uid, id, message)
return True
purchase_order_line()
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 3a7277a4766..814009529e7 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -4,17 +4,39 @@
<!--<menuitem icon="terp-purchase" id="base.menu_purchase_root" name="Purchase Management"
groups="group_purchase_user"/>-->
<menuitem icon="terp-purchase" id="base.menu_purchase_root" name="Purchases"
- groups="group_purchase_user" sequence="7"/>
+ groups="group_purchase_user" sequence="3"/>
<menuitem id="menu_procurement_management" name="Purchase Management"
parent="base.menu_purchase_root" sequence="1"/>
+
+ <!--supplier addresses action-->
+ <record id="action_supplier_address_form" model="ir.actions.act_window">
+ <field name="name">Addresses</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">res.partner.address</field>
+ <field name="view_type">form</field>
+ <field name="context">{"search_default_supplier":1}</field>
+ <field name="search_view_id" ref="base.view_res_partner_address_filter"/>
+ </record>
+ <record id="action_supplier_address_form_view1" model="ir.actions.act_window.view">
+ <field eval="10" name="sequence"/>
+ <field name="view_mode">tree</field>
+ <field name="view_id" ref="base.view_partner_address_tree"/>
+ <field name="act_window_id" ref="action_supplier_address_form"/>
+ </record>
+ <record id="action_supplier_address_form_view2" model="ir.actions.act_window.view">
+ <field eval="20" name="sequence"/>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="base.view_partner_address_form1"/>
+ <field name="act_window_id" ref="action_supplier_address_form"/>
+ </record>
<!--supplier menu-->
- <menuitem id="base.menu_procurement_management_supplier" name="Suppliers"
+ <menuitem id="base.menu_procurement_management_supplier" name="Address Book"
parent="base.menu_purchase_root" sequence="3"/>
- <menuitem id="menu_procurement_management_supplier_name" name="Suppliers"
+ <menuitem id="base.menu_procurement_management_supplier_name" name="Suppliers"
parent="base.menu_procurement_management_supplier" action="base.action_partner_supplier_form" sequence="1"/>
-
-
+ <menuitem action="action_supplier_address_form" id="menu_purchases_partner_address_form"
+ parent="base.menu_procurement_management_supplier" sequence="3"/>
<!--Inventory control-->
<menuitem id="menu_procurement_management_inventory" name="Inventory Control"
@@ -27,7 +49,7 @@
<menuitem id="menu_procurement_management_invoice" name="Invoice Control"
parent="base.menu_purchase_root" sequence="6"/>
<menuitem name="Pending Invoices" id="menu_procurement_management_pending_invoice" action="account.action_invoice_tree_pending_invoice"
- parent="menu_procurement_management_invoice"/>
+ parent="menu_procurement_management_invoice" sequence="13"/>
<!--product menu-->
<menuitem id="menu_procurement_management_product" name="Product"
@@ -91,8 +113,7 @@
<field name="product_qty"/>
<field name="product_uom"/>
<field name="price_unit"/>
- <field name="price_subtotal" groups="base.group_extended"/>
- <field name="invoiced"/>
+ <field name="price_subtotal" groups="base.group_extended"/>
</tree>
<!-- default form view -->
</field>
@@ -346,7 +367,8 @@
<field name="view_id" ref="purchase_order_line_form"/>
<field name="act_window_id" ref="purchase_line_form_action2"/>
</record>
- <menuitem action="purchase_line_form_action2" id="menu_purchase_line_order_draft" parent="menu_procurement_management_invoice"/>
+ <menuitem action="purchase_line_form_action2" id="menu_purchase_line_order_draft"
+ parent="menu_procurement_management_invoice" sequence="12"/>
<!--
Procurements
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index 2d18ae18b36..6b27a0ec6df 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -52,24 +52,24 @@
<field name="arch" type="xml">
<search string="Purchase Orders">
<group colspan="10" col="12">
- <filter icon="terp-purchase" string="This Year"
+ <filter icon="terp-go-year" string="This Year"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')),('date','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
help="Tasks performed in this year"/>
- <filter icon="terp-purchase" string="This Month"
+ <filter icon="terp-go-month" string="This Month"
name="month"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
help="Tasks performed in this month"/>
- <filter icon="gtk-media-rewind"
+ <filter icon="terp-go-week"
string="7 Days"
separator="1"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date','&gt;',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
help="Tasks during last 7 days"/>
<separator orientation="vertical"/>
- <filter icon="terp-purchase"
+ <filter icon="terp-document-new"
string="Quotations"
name="quotes"
domain="[('state','=','draft')]"/>
- <filter icon="terp-purchase"
+ <filter icon="terp-accessories-archiver"
string="Orders"
name="orders"
domain="[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"/>
@@ -80,21 +80,21 @@
<field name="company_id" groups="base.group_multi_company"/>
</group>
<newline/>
- <group expand="1" string="Group By..." colspan="10" col="12">
- <filter string="Supplier" name="group_partner_id" icon="terp-purchase" context="{'group_by':'partner_id'}"/>
- <filter string="Product" name="group_product_id" icon="terp-purchase" context="{'group_by':'product_id'}"/>
+ <group expand="0" string="Group By..." colspan="10" col="12">
+ <filter string="Supplier" name="group_partner_id" icon="terp-personal" context="{'group_by':'partner_id'}"/>
+ <filter string="Product" name="group_product_id" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<separator orientation="vertical"/>
- <filter string="Responsible" name="Responsible" icon="terp-purchase" context="{'group_by':'user_id'}"/>
- <filter string="Validated by" icon="terp-purchase" context="{'group_by':'validator'}"/>
+ <filter string="Responsible" name="Responsible" icon="terp-personal" context="{'group_by':'user_id'}"/>
+ <filter string="Validated by" icon="terp-personal" context="{'group_by':'validator'}"/>
<separator orientation="vertical"/>
- <filter string="Company" icon="terp-purchase" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
- <filter string="Warehouse" icon="terp-purchase" context="{'group_by':'warehouse_id'}"/>
- <filter string="Destination" icon="terp-purchase" context="{'group_by':'location_id'}"/>
+ <filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ <filter string="Warehouse" icon="terp-go-home" context="{'group_by':'warehouse_id'}"/>
+ <filter string="Destination" icon="terp-gtk-jump-to-ltr" context="{'group_by':'location_id'}"/>
<separator orientation="vertical"/>
- <filter string="State" icon="terp-purchase" context="{'group_by':'state'}"/>
- <filter string="Day" icon="terp-purchase" context="{'group_by':'day'}"/>
- <filter string="Month" icon="terp-purchase" context="{'group_by':'month'}"/>
- <filter string="Year" icon="terp-purchase" context="{'group_by':'name'}"/>
+ <filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
+ <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
+ <filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
+ <filter string="Year" icon="terp-go-year" context="{'group_by':'name'}"/>
</group>
<newline/>
<group expand="0" string="Extended filters..." colspan="10" col="12" groups="base.group_extended">
diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv
index c6a09d5d728..d1ccce7b15f 100644
--- a/addons/purchase/security/ir.model.access.csv
+++ b/addons/purchase/security/ir.model.access.csv
@@ -24,3 +24,5 @@
"access_account_sequence_fiscalyear_purchase_user","account.sequence.fiscalyear purchase","account.model_account_sequence_fiscalyear","group_purchase_user",1,1,1,1
"access_res_partner_purchase_user","res.partner purchase","base.model_res_partner","group_purchase_user",1,0,0,0
"access_res_partner_address_purchase_user","res.partner.address purchase","base.model_res_partner_address","group_purchase_user",1,0,0,0
+"access_account_journal","account.journal","account.model_account_journal","purchase.group_purchase_user",1,1,1,0
+"access_account_journal_manager","account.journal","account.model_account_journal","purchase.group_purchase_manager",1,1,1,1
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
index 845738165d2..3e195935f3a 100644
--- a/addons/purchase/wizard/purchase_installer.py
+++ b/addons/purchase/wizard/purchase_installer.py
@@ -29,3 +29,4 @@ class purchase_installer(osv.osv_memory):
}
purchase_installer()
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: