diff options
| author | atp (Open ERP) <atp@tinyerp.co.in> | 2010-06-22 10:45:44 +0530 |
|---|---|---|
| committer | atp (Open ERP) <atp@tinyerp.co.in> | 2010-06-22 10:45:44 +0530 |
| commit | b0efd26edd9f4e2aa75424b787ea46d2be15cd04 (patch) | |
| tree | e78cdb693e62a5c9a17f77a395eec51fb34becbf /addons/purchase | |
| parent | 46bb1ea51be702758d68a5f69db32c82dbccf9bd (diff) | |
| parent | 2319190c5a20cb8095f85cacca89a33164ba93d7 (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__.py | 5 | ||||
| -rw-r--r-- | addons/purchase/board_purchase_view.xml | 66 | ||||
| -rw-r--r-- | addons/purchase/process/purchase_process.xml | 2 | ||||
| -rw-r--r-- | addons/purchase/purchase.py | 34 | ||||
| -rw-r--r-- | addons/purchase/purchase_view.xml | 40 | ||||
| -rw-r--r-- | addons/purchase/report/purchase_report_view.xml | 34 | ||||
| -rw-r--r-- | addons/purchase/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | addons/purchase/wizard/purchase_installer.py | 1 |
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','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',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','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',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=""""subflow"""" name="kind"/> <field eval=""""Draft Invoice"""" 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','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(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','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(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','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(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','<>','draft'),('state','<>','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: |
