_inherit = 'res.config.installer'
_columns = {
- 'purchase_tender':fields.boolean('Purchase Tender'),
+ 'purchase_requisition':fields.boolean('Purchase Requisition'),
}
purchase_installer()
<openerp>
<data>
<record id="view_purchase_install_module_form" model="ir.ui.view">
- <field name="name">Purchase Tender</field>
+ <field name="name">Purchase Requisition</field>
<field name="model">purchase.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_installer"/>
</form>
<xpath expr="//label[@string='description']"
position="attributes">
- <attribute name="string"> This module allows you to manage your Purchase Tenders.</attribute>
+ <attribute name="string"> This module allows you to manage your Purchase Requisition.</attribute>
</xpath>
<separator string="title" position="replace"/>
<group colspan="8">
- <separator string="Purchase Tender" colspan="4"/>
- <field name="purchase_tender"/>
+ <separator string="Purchase Requisition" colspan="4"/>
+ <field name="purchase_requisition"/>
</group>
</data>
</field>
<record id="purchase_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_purchase_install_module"/>
- <field name="sequence">2</field>
+ <field name="sequence">3</field>
</record>
</data>
"depends" : ["purchase","mrp"],
"init_xml" : [],
"demo_xml" : [],
- "update_xml" : [ "wizard//purchase_tender_partner.xml",
+ "update_xml" : ["wizard/purchase_requisition_partner_view.xml",
"purchase_requisition_view.xml",
"security/ir.model.access.csv","purchase_requisition_sequence.xml"],
'user_id': fields.many2one('res.users', 'Responsible'),
'exclusive': fields.selection([('exclusive','Purchase Tender (exclusive)'),('multiple','Multiple Requisitions')],'Requisition Type', help="If the requisition is exclusive, it will cancel all purchase orders when you confirm one of them", required=True),
'description': fields.text('Description'),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders'),
'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase'),
- 'state': fields.selection([('draft','Draft'),('open','Open'),('cancel','Cancelled'),('close','Close')], 'State', required=True)
+ 'state': fields.selection([('draft','Draft'),('open','Open'),('cancel','Cancelled'),('close','Close'),('done','Done')], 'State', required=True)
}
_defaults = {
'date_start': lambda *args: time.strftime('%Y-%m-%d %H:%M:%S'),
'state': lambda *args: 'open',
'exclusive': lambda *args: 'multiple',
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
+ 'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id ,
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'purchase.order.requisition'),
}
_columns = {
'product_id': fields.many2one('product.product', 'Product'),
'product_uom_id': fields.many2one('product.uom', 'Product UoM'),
-
'product_qty': fields.float('Quantity', digits=(16,2)),
- 'tender_id' : fields.many2one('purchase.tender','Purchase Tender', ondelete='cascade'),
+ 'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition', ondelete='cascade'),
'company_id': fields.many2one('res.company', 'Company', required=True),
- 'product_qty': fields.float('Date End', digits=(16,2)),
'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition', ondelete='cascade')
}
</page>
<page string="Quotations">
<group col="8" colspan="4">
- <button name="%(action_purchase_tender_partner)d" string="New RfQr" type="action" />
+ <button name="%(action_purchase_requisition_partner)d" string="New RfQr" type="action" />
<label colspan="6" string=""/>
</group>
<field name="purchase_ids" nolabel="1" colspan="4"/>
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="1" readonly ="1"/>
- <button name="tender_close" states="open,draft,in_progress" string="Close" type="object" icon="gtk-close" />
+ <button name="tender_close" states="open,draft" string="Close" type="object" icon="gtk-close" />
<button name="tender_open" states="draft,in_progress" string="Open" type="object" icon="gtk-go-forward" />
- <button name="tender_cancel" states="draft,open,in_progress" string="Cancel" type="object" icon="gtk-cancel" />
- <button name="tender_confirm" states="open,in_progress" string="Confirm" type="object" icon="gtk-go-up" />
+ <button name="tender_cancel" states="draft,open," string="Cancel" type="object" icon="gtk-cancel" />
+ <button name="tender_confirm" states="open" string="Confirm" type="object" icon="gtk-go-up" />
<button name="tender_reset" states="done,cancel" string="Reset to Draft" type="object" icon="gtk-convert" />
</group>
</field>
</record>
- <record id="view_purchase_tender_filter" model="ir.ui.view">
- <field name="name">purchase.tender.list.select</field>
- <field name="model">purchase.tender</field>
+ <record id="view_purchase_requisition_filter" model="ir.ui.view">
+ <field name="name">purchase.requisition.list.select</field>
+ <field name="model">purchase.requisition</field>
<field name="type">search</field>
<field name="arch" type="xml">
- <search string="Search Purchase Tender">
+ <search string="Search Purchase Requisition">
<group col='10' colspan='4'>
<filter icon="terp-purchase" string="Quotations" domain="[('state','=','draft')]" separator="1"/>
- <filter icon="terp-purchase" string="Approved" domain="[('state','=','confirmed')]" separator="1"/>
+ <filter icon="terp-purchase" string="Approved" domain="[('state','=','open')]" separator="1"/>
<separator orientation="vertical"/>
- <field name="name" select="1" string="Tender Reference"/>
+ <field name="name" select="1" string="Requisition Reference"/>
<field name="purchase_ids" select="1"/>
<field name="user_id" select="1" widget="selection">
- <filter icon="terp-partner" domain="[('create_uid','=',uid)]" help="My Tender "/>
+ <filter icon="terp-partner" domain="[('create_uid','=',uid)]" help="My Requisition "/>
</field>
+ <field name="exclusive" select="1" />
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
</group>
<newline/>
<field name="res_model">purchase.requisition</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
- <field name="search_view_id" ref="view_purchase_tender_filter"/>
+ <field name="search_view_id" ref="view_purchase_requisition_filter"/>
</record>
<menuitem
<openerp>
<data noupdate="1">
- <record id="group_purchase_tender_manager" model="res.groups">
- <field name="name">Purchase Tender / Manager</field>
+ <record id="group_purchase_requisition_manager" model="res.groups">
+ <field name="name">Purchase Requisition / Manager</field>
</record>
- <record id="group_purchase_tender_user" model="res.groups">
- <field name="name">Purchase Tender / User</field>
+ <record id="group_purchase_requisition_user" model="res.groups">
+ <field name="name">Purchase Requisition / User</field>
</record>
- <record model="ir.rule.group" id="purchase_tender_comp_rule_group">
- <field name="name">Purchase Tender multi-company</field>
- <field name="model_id" ref="model_purchase_tender"/>
+ <record model="ir.rule.group" id="purchase_requisition_comp_rule_group">
+ <field name="name">Purchase Requisition multi-company</field>
+ <field name="model_id" ref="model_purchase_requisition"/>
<field name="global" eval="True"/>
</record>
- <record model="ir.rule" id="purchase_tender_comp_rule">
- <field name="field_id" search="[('model','=','purchase.tender'),('name','=','company_id')]" model="ir.model.fields"/>
- <field name="rule_group" ref="purchase_tender_comp_rule_group"/>
+ <record model="ir.rule" id="purchase_requisition_comp_rule">
+ <field name="field_id" search="[('model','=','purchase.requisition'),('name','=','company_id')]" model="ir.model.fields"/>
+ <field name="rule_group" ref="purchase_requisition_comp_rule_group"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
- <record model="ir.rule.group" id="purchase_tender_line_comp_rule_group">
- <field name="name">Purchase Tender Line multi-company</field>
- <field name="model_id" ref="model_purchase_tender_line"/>
+ <record model="ir.rule.group" id="purchase_requisition_line_comp_rule_group">
+ <field name="name">Purchase requisition Line multi-company</field>
+ <field name="model_id" ref="model_purchase_requisition_line"/>
<field name="global" eval="True"/>
</record>
- <record model="ir.rule" id="purchase_tender_line_comp_rule">
- <field name="field_id" search="[('model','=','purchase.tender.line'),('name','=','company_id')]" model="ir.model.fields"/>
- <field name="rule_group" ref="purchase_tender_line_comp_rule_group"/>
+ <record model="ir.rule" id="purchase_requisition_line_comp_rule">
+ <field name="field_id" search="[('model','=','purchase.requisition.line'),('name','=','company_id')]" model="ir.model.fields"/>
+ <field name="rule_group" ref="purchase_requisition_line_comp_rule_group"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
#
##############################################################################
-import purchase_tender_partner
+import purchase_requisition_partner
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
--- /dev/null
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import fields, osv
+from service import web_services
+import netsvc
+import pooler
+import time
+from mx import DateTime
+from osv.orm import browse_record, browse_null
+
+class purchase_requisition_partner(osv.osv_memory):
+ _name = "purchase.requisition.partner"
+ _description = "Purchase Requisition Partner"
+ _columns = {
+ 'partner_id': fields.many2one('res.partner', 'Partner', required=True),
+ 'partner_address_id':fields.many2one('res.partner.address', 'Address', required=True),
+ }
+
+
+ def view_init(self, cr, uid, fields_list, context=None):
+ res = super(purchase_requisition_partner, self).view_init(cr, uid, fields_list, context=context)
+ record_id = context and context.get('active_id', False) or False
+ tender = self.pool.get('purchase.requisition').browse(cr, uid, record_id)
+ if not tender.line_ids:
+ raise osv.except_osv('Error!','No Product in Tender')
+ True
+
+ def onchange_partner_id(self, cr, uid, ids, partner_id):
+ addr = self.pool.get('res.partner').address_get(cr, uid, [partner_id], ['default'])
+ part = self.pool.get('res.partner').browse(cr, uid, partner_id)
+ return {'value':{'partner_address_id': addr['default']}}
+
+ def create_order(self, cr, uid, ids, context):
+ """
+ To Create a purchase orders .
+
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param ids: the ID or list of IDs
+ @param context: A standard dictionary
+ @return: {}
+
+ """
+ record_ids = context and context.get('active_ids', False)
+ if record_ids:
+ data = self.read(cr, uid, ids)
+ company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
+ order_obj = self.pool.get('purchase.order')
+ order_line_obj = self.pool.get('purchase.order.line')
+ partner_obj = self.pool.get('res.partner')
+ tender_line_obj = self.pool.get('purchase.requisition.line')
+ pricelist_obj = self.pool.get('product.pricelist')
+ prod_obj = self.pool.get('product.product')
+ tender_obj = self.pool.get('purchase.requisition')
+ acc_pos_obj = self.pool.get('account.fiscal.position')
+ partner_id = data[0]['partner_id']
+ address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
+ list_line=[]
+ purchase_order_line={}
+ for tender in tender_obj.browse(cr, uid, record_ids):
+ for line in tender.line_ids:
+
+ uom_id = line.product_id.uom_po_id.id
+ newdate = DateTime.strptime(tender.date_start, '%Y-%m-%d %H:%M:%S')
+ newdate = newdate - DateTime.RelativeDateTime(days=company.po_lead)
+ newdate = newdate - line.product_id.seller_ids[0].delay
+
+
+ partner = line.product_id.seller_ids[0].name
+ pricelist_id = partner.property_product_pricelist_purchase.id
+ price = pricelist_obj.price_get(cr, uid, [pricelist_id], line.product_id.id, line.product_qty, False, {'uom': uom_id})[pricelist_id]
+ product = prod_obj.browse(cr, uid, line.product_id.id, context=context)
+
+
+ purchase_order_line= {
+ 'name': product.partner_ref,
+ 'product_qty': line.product_qty,
+ 'product_id': line.product_id.id,
+ 'product_uom': uom_id,
+ 'price_unit': price,
+ 'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
+ 'notes': product.description_purchase,
+ }
+ taxes_ids = line.product_id.product_tmpl_id.supplier_taxes_id
+ taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
+ purchase_order_line.update({
+ 'taxes_id': [(6,0,taxes)]
+ })
+ list_line.append(purchase_order_line)
+ purchase_id = order_obj.create(cr, uid, {
+ 'origin': tender.name,
+ 'partner_id': partner_id,
+ 'partner_address_id': address_id,
+ 'pricelist_id': pricelist_id,
+ 'location_id': line.product_id.product_tmpl_id.property_stock_production.id,
+ 'company_id': tender.company_id.id,
+ 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
+ 'requisition_id':tender.id,
+ })
+ order_ids=[]
+ for order_line in list_line:
+ order_line.update({
+ 'order_id': purchase_id
+ })
+ order_line_obj.create(cr,uid,order_line)
+ return {}
+
+purchase_requisition_partner()
+
--- /dev/null
+<openerp>
+ <data>
+
+ <record id="view_purchase_requisition_partner" model="ir.ui.view">
+ <field name="name">Purchase Requisition</field>
+ <field name="model">purchase.requisition.partner</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Purchase Requisition">
+ <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
+ <field domain="[('partner_id','=',partner_id)]" name="partner_address_id"/>
+ <group colspan="4" col="6">
+ <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
+ <button icon="gtk-ok" name="create_order" string="Create Orders" type="object"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_purchase_requisition_partner" model="ir.actions.act_window">
+ <field name="name">Purchase Requisition</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">purchase.requisition.partner</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="context">{'record_id' : active_id}</field>
+ <field name="target">new</field>
+ </record>
+</data>
+</openerp>
+
+
\ No newline at end of file
+++ /dev/null
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from osv import fields, osv
-from service import web_services
-import netsvc
-import pooler
-import time
-from mx import DateTime
-from osv.orm import browse_record, browse_null
-
-class purchase_tender_partner(osv.osv_memory):
- _name = "purchase.tender.partner"
- _description = "Purchase Tender Partner"
- _columns = {
- 'partner_id': fields.many2one('res.partner', 'Partner', required=True),
- 'partner_address_id':fields.many2one('res.partner.address', 'Address', required=True),
- }
-
-
- def view_init(self, cr, uid, fields_list, context=None):
- res = super(purchase_tender_partner, self).view_init(cr, uid, fields_list, context=context)
- record_id = context and context.get('active_id', False) or False
- tender = self.pool.get('purchase.tender').browse(cr, uid, record_id)
- if not tender.line_ids:
- raise osv.except_osv('Error!','No Product in Tender')
- True
-
- def onchange_partner_id(self, cr, uid, ids, partner_id):
- addr = self.pool.get('res.partner').address_get(cr, uid, [partner_id], ['default'])
- part = self.pool.get('res.partner').browse(cr, uid, partner_id)
- return {'value':{'partner_address_id': addr['default']}}
-
- def create_order(self, cr, uid, ids, context):
- """
- To Create a purchase orders .
-
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs
- @param context: A standard dictionary
- @return: {}
-
- """
- record_ids = context and context.get('active_ids', False)
- if record_ids:
- data = self.read(cr, uid, ids)
- company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
- order_obj = self.pool.get('purchase.order')
- order_line_obj = self.pool.get('purchase.order.line')
- partner_obj = self.pool.get('res.partner')
- tender_line_obj = self.pool.get('purchase.tender.line')
- pricelist_obj = self.pool.get('product.pricelist')
- prod_obj = self.pool.get('product.product')
- tender_obj = self.pool.get('purchase.tender')
- acc_pos_obj = self.pool.get('account.fiscal.position')
- partner_id = data[0]['partner_id']
- address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
- list_line=[]
- purchase_order_line={}
- for tender in tender_obj.browse(cr, uid, record_ids):
- for line in tender.line_ids:
-
- uom_id = line.product_id.uom_po_id.id
- newdate = DateTime.strptime(tender.date_start, '%Y-%m-%d %H:%M:%S')
- newdate = newdate - DateTime.RelativeDateTime(days=company.po_lead)
- newdate = newdate - line.product_id.seller_ids[0].delay
-
-
- partner = line.product_id.seller_ids[0].name
- pricelist_id = partner.property_product_pricelist_purchase.id
- price = pricelist_obj.price_get(cr, uid, [pricelist_id], line.product_id.id, line.product_qty, False, {'uom': uom_id})[pricelist_id]
- product = prod_obj.browse(cr, uid, line.product_id.id, context=context)
-
-
- purchase_order_line= {
- 'name': product.partner_ref,
- 'product_qty': line.product_qty,
- 'product_id': line.product_id.id,
- 'product_uom': uom_id,
- 'price_unit': price,
- 'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
- 'notes': product.description_purchase,
- }
- taxes_ids = line.product_id.product_tmpl_id.supplier_taxes_id
- taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
- purchase_order_line.update({
- 'taxes_id': [(6,0,taxes)]
- })
- list_line.append(purchase_order_line)
- purchase_id = order_obj.create(cr, uid, {
- 'origin': tender.name,
- 'partner_id': partner_id,
- 'partner_address_id': address_id,
- 'pricelist_id': pricelist_id,
- 'location_id': line.product_id.product_tmpl_id.property_stock_production.id,
- 'company_id': tender.company_id.id,
- 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
- 'tender_id':tender.id,
- })
- order_ids=[]
- for order_line in list_line:
- order_line.update({
- 'order_id': purchase_id
- })
- order_line_obj.create(cr,uid,order_line)
- return {}
-
-purchase_tender_partner()
-
+++ /dev/null
-<openerp>
- <data>
-
- <record id="view_purchase_tender_partner" model="ir.ui.view">
- <field name="name">Purchase Tender</field>
- <field name="model">purchase.tender.partner</field>
- <field name="type">form</field>
- <field name="arch" type="xml">
- <form string="Purchase Tender">
- <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
- <field domain="[('partner_id','=',partner_id)]" name="partner_address_id"/>
- <group colspan="4" col="6">
- <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
- <button icon="gtk-ok" name="create_order" string="Create Orders" type="object"/>
- </group>
- </form>
- </field>
- </record>
-
- <record id="action_purchase_tender_partner" model="ir.actions.act_window">
- <field name="name">Purchase Tender</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">purchase.tender.partner</field>
- <field name="view_type">form</field>
- <field name="view_mode">form</field>
- <field name="context">{'record_id' : active_id}</field>
- <field name="target">new</field>
- </record>
-</data>
-</openerp>
-
-
\ No newline at end of file