[IMP] purchase_requisition: terminology

Rename "Call for Bid" into "Call for Tender" when on the buyer's side.
This commit is contained in:
Yannick Tivisse
2015-01-05 12:15:15 +01:00
committed by Richard Mathot
parent 660b13bb78
commit e9d83ea39a
8 changed files with 41 additions and 42 deletions
+5 -6
View File
@@ -49,14 +49,13 @@ class purchase_config_settings(osv.osv_memory):
'module_purchase_double_validation': fields.boolean("Force two levels of approvals",
help='Provide a double validation mechanism for purchases exceeding minimum amount.\n'
'-This installs the module purchase_double_validation.'),
'module_purchase_requisition': fields.boolean("Manage calls for bids",
help="""Calls for bids are used when you want to generate requests for quotations to several suppliers for a given set of products.
'module_purchase_requisition': fields.boolean("Manage calls for tenders",
help="""Calls for tenders are used when you want to generate requests for quotations to several suppliers for a given set of products.
You can configure per product if you directly do a Request for Quotation
to one supplier or if you want a Call for Bids to compare offers from several suppliers."""),
'group_advance_purchase_requisition': fields.boolean("Choose from several bids in a call for bids",
to one supplier or if you want a Call for Tenders to compare offers from several suppliers."""),
'group_advance_purchase_requisition': fields.boolean("Choose from several bids in a call for tenders",
implied_group='purchase.group_advance_bidding',
help="""In the process of a public bidding, you can compare the bid lines and choose for each requested product from which bid you
buy which quantity"""),
help="""In the process of a public tendering, you can compare the tender lines and choose for each requested product which quantity you will buy from each bid."""),
'module_purchase_analytic_plans': fields.boolean('Use multiple analytic accounts on purchase orders',
help='Allows the user to maintain several analysis plans. These let you split lines on a purchase order between several accounts and analytic plans.\n'
'-This installs the module purchase_analytic_plans.'),
@@ -39,13 +39,13 @@ class purchase_requisition(osv.osv):
return result
_columns = {
'name': fields.char('Call for Bids Reference', required=True, copy=False),
'name': fields.char('Call for Tenders Reference', required=True, copy=False),
'origin': fields.char('Source Document'),
'ordering_date': fields.date('Scheduled Ordering Date'),
'date_end': fields.datetime('Bid Submission Deadline'),
'schedule_date': fields.date('Scheduled Delivery Date', select=True, help="The expected and scheduled delivery date where all the products are received"),
'date_end': fields.datetime('Tender Closing Deadline'),
'schedule_date': fields.date('Scheduled Date', select=True, help="The expected and scheduled delivery date where all the products are received"),
'user_id': fields.many2one('res.users', 'Responsible'),
'exclusive': fields.selection([('exclusive', 'Select only one RFQ (exclusive)'), ('multiple', 'Select multiple RFQ')], 'Bid Selection Type', required=True, help="Select only one RFQ (exclusive): On the confirmation of a purchase order, it cancels the remaining purchase order.\nSelect multiple RFQ: It allows to have multiple purchase orders.On confirmation of a purchase order it does not cancel the remaining orders"""),
'exclusive': fields.selection([('exclusive', 'Select only one RFQ (exclusive)'), ('multiple', 'Select multiple RFQ')], 'Tender Selection Type', required=True, help="Select only one RFQ (exclusive): On the confirmation of a purchase order, it cancels the remaining purchase order.\nSelect multiple RFQ: It allows to have multiple purchase orders.On confirmation of a purchase order it does not cancel the remaining orders"""),
'description': fields.text('Description'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'purchase_ids': fields.one2many('purchase.order', 'requisition_id', 'Purchase Orders', states={'done': [('readonly', True)]}),
@@ -123,7 +123,7 @@ class purchase_requisition(osv.osv):
return res
def open_rfq(self, cr, uid, ids, context=None):
""" This opens rfq view to view all quotations associated to the call for bids
""" This opens rfq view to view all quotations associated to the call for tenders
@return: the RFQ tree view
"""
if context is None:
@@ -200,12 +200,12 @@ class purchase_requisition(osv.osv):
def check_valid_quotation(self, cr, uid, quotation, context=None):
"""
Check if a quotation has all his order lines bid in order to confirm it if its the case
return True if all order line have been selected during bidding process, else return False
return True if all order line have been selected during tendering process, else return False
args : 'quotation' must be a browse record
"""
for line in quotation.order_line:
if line.state != 'confirmed' or line.product_qty != line.quantity_bid:
if line.state != 'confirmed' or line.product_qty != line.quantity_tendered:
return False
return True
@@ -227,7 +227,7 @@ class purchase_requisition(osv.osv):
:param line: the source tender's line from which we generate a line
:param purchase_id: the id of the new purchase
"""
return {'product_qty': line.quantity_bid,
return {'product_qty': line.quantity_tendered,
'order_id': purchase_id}
def generate_po(self, cr, uid, ids, context=None):
@@ -292,7 +292,7 @@ class purchase_requisition(osv.osv):
for quotation in tender.purchase_ids:
if quotation.state in ['draft', 'sent', 'bid']:
self.pool.get('purchase.order').signal_workflow(cr, uid, [quotation.id], 'purchase_cancel')
po.message_post(cr, uid, [quotation.id], body=_('Cancelled by the call for bids associated to this request for quotation.'), context=context)
po.message_post(cr, uid, [quotation.id], body=_('Cancelled by the call for tenders associated to this request for quotation.'), context=context)
return True
@@ -305,7 +305,7 @@ class purchase_requisition_line(osv.osv):
'product_id': fields.many2one('product.product', 'Product'),
'product_uom_id': fields.many2one('product.uom', 'Product Unit of Measure'),
'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure')),
'requisition_id': fields.many2one('purchase.requisition', 'Call for Bids', ondelete='cascade'),
'requisition_id': fields.many2one('purchase.requisition', 'Call for Tenders', ondelete='cascade'),
'company_id': fields.related('requisition_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account',),
'schedule_date': fields.date('Scheduled Date'),
@@ -335,7 +335,7 @@ class purchase_order(osv.osv):
_inherit = "purchase.order"
_columns = {
'requisition_id': fields.many2one('purchase.requisition', 'Call for Bids', copy=False),
'requisition_id': fields.many2one('purchase.requisition', 'Call for Tenders', copy=False),
}
def wkf_confirm_order(self, cr, uid, ids, context=None):
@@ -364,7 +364,7 @@ class purchase_order_line(osv.osv):
_inherit = 'purchase.order.line'
_columns = {
'quantity_bid': fields.float('Quantity Bid', digits_compute=dp.get_precision('Product Unit of Measure'), help="Technical field for not loosing the initial information about the quantity proposed in the bid"),
'quantity_tendered': fields.float('Quantity Tendered', digits_compute=dp.get_precision('Product Unit of Measure'), help="Technical field for not loosing the initial information about the quantity proposed in the tender", oldname='quantity_bid'),
}
def action_draft(self, cr, uid, ids, context=None):
@@ -373,8 +373,8 @@ class purchase_order_line(osv.osv):
def action_confirm(self, cr, uid, ids, context=None):
super(purchase_order_line, self).action_confirm(cr, uid, ids, context=context)
for element in self.browse(cr, uid, ids, context=context):
if not element.quantity_bid:
self.write(cr, uid, ids, {'quantity_bid': element.product_qty}, context=context)
if not element.quantity_tendered:
self.write(cr, uid, ids, {'quantity_tendered': element.product_qty}, context=context)
return True
def generate_po(self, cr, uid, tender_id, context=None):
@@ -386,7 +386,7 @@ class product_template(osv.osv):
_inherit = 'product.template'
_columns = {
'purchase_requisition': fields.boolean('Call for Bids', help="Check this box to generate Call for Bids instead of generating requests for quotation from procurement.")
'purchase_requisition': fields.boolean('Call for Tenders', help="Check this box to generate Call for Tenders instead of generating requests for quotation from procurement.")
}
@@ -2,7 +2,7 @@
<openerp>
<data>
<report
string="Call for Bids"
string="Call for Tenders"
id="action_report_purchase_requisitions"
model="purchase.requisition"
report_type="qweb-pdf"
@@ -28,10 +28,10 @@
<field name="name">purchase.requisition.form</field>
<field name="model">purchase.requisition</field>
<field name="arch" type="xml">
<form string="Call for Bids">
<form string="Call for Tenders">
<header>
<button name="sent_suppliers" states="draft" string="Confirm Call" class="oe_highlight"/>
<button name="open_bid" states="in_progress" string="Close Call for Bids" class="oe_highlight"/>
<button name="open_bid" states="in_progress" string="Close Call for Tenders" class="oe_highlight"/>
<button name="tender_reset" states="cancel" string="Reset to Draft" type="object" />
<button name="open_product_line" states="open" string="Choose product lines" type="object" class="oe_highlight" groups="purchase.group_advance_bidding"/>
<button name="generate_po" states="open" string="Done" type="object" class="oe_highlight"/>
@@ -127,7 +127,7 @@
<field name="name">purchase.requisition.tree</field>
<field name="model">purchase.requisition</field>
<field name="arch" type="xml">
<tree fonts="bold:message_unread==True" colors="grey:state == 'cancel';red:date_end and date_end&lt;current_date;black:date_end&gt;current_date;" string="Call for Bids">
<tree fonts="bold:message_unread==True" colors="grey:state == 'cancel';red:date_end and date_end&lt;current_date;black:date_end&gt;current_date;" string="Call for Tenders">
<field name="message_unread" invisible="1"/>
<field name="name"/>
<field name="ordering_date"/>
@@ -144,12 +144,12 @@
<field name="name">purchase.requisition.list.select</field>
<field name="model">purchase.requisition</field>
<field name="arch" type="xml">
<search string="Search Call for Bids">
<field name="name" string="Call for Bids"/>
<search string="Search Call for Tenders">
<field name="name" string="Call for Tenders"/>
<field name="exclusive" />
<filter icon="terp-document-new" name="draft" string="New" domain="[('state','=','draft')]" help="New Call for Bids"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','in_progress')]" help="Call for Bids in negotiation"/>
<filter icon="terp-dialog-close" string="Closed Bids" domain="[('state','=','open')]" help="Call for Bids where bids are closed"/>
<filter icon="terp-document-new" name="draft" string="New" domain="[('state','=','draft')]" help="New Call for Tenders"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','in_progress')]" help="Call for Tenders in negotiation"/>
<filter icon="terp-dialog-close" string="Closed Tenders" domain="[('state','=','open')]" help="Call for Tenders where tenders are closed"/>
<separator/>
<filter icon="terp-personal-" string="Unassigned" domain="[('user_id','=', False)]" help="Unassigned Requisition"/>
<field name="user_id" />
@@ -166,7 +166,7 @@
<record model="ir.actions.act_window" id="action_purchase_requisition">
<field name="name">Calls for Bids</field>
<field name="name">Calls for Tenders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.requisition</field>
<field name="view_type">form</field>
@@ -175,12 +175,12 @@
<field name="search_view_id" ref="view_purchase_requisition_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to start a new Call for Bids process.
Click to start a new Call for Tenders process.
</p><p>
A Call for Bids is a procedure for generating competing offers from
different bidders. In the call for bids, you can record the
A Call for Tenders is a procedure for generating competing offers from
different bidders. In the call for tenders, you can record the
products you need to buy and generate the creation of RfQs to
suppliers. Once the bids have been registered, you can review and
suppliers. Once the tenders have been registered, you can review and
compare them and you can validate some and cancel others.
</p>
</field>
@@ -233,7 +233,7 @@
<field name="product_id"/>
<field name="price_unit"/>
<field name="product_qty"/>
<field name="quantity_bid"/>
<field name="quantity_tendered"/>
<field name="product_uom" groups="product.group_uom"/>
<field name="price_subtotal"/>
<field name="state" invisible="1"/>
@@ -246,7 +246,7 @@
</record>
<record id="purchase_line_tree" model="ir.actions.act_window">
<field name="name">Bid Lines</field>
<field name="name">Tender Lines</field>
<field name="res_model">purchase.order.line</field>
<field name="context">{"search_default_groupby_product" : True,}</field>
<field name="view_type">form</field>
@@ -46,7 +46,7 @@
!context
uid: 'res_users_purchase_requisition_user'
-
I open another requisition and set tender state to choose bidding line.
I open another requisition and set tender state to choose tendering line.
-
!python {model: purchase.requisition}: |
self.tender_in_progress(cr, uid, [ref("requisition1")], context=context)
@@ -8,11 +8,11 @@
<div class="page">
<div class="oe_structure"/>
<h2>Call for Bids <span t-field="o.name"/></h2>
<h2>Call for Tenders <span t-field="o.name"/></h2>
<div class="row mt32 mb32">
<div class="col-xs-3">
<strong>Call for Bif Reference:</strong><br/>
<strong>Call for Tender Reference:</strong><br/>
<span t-field="o.name"/>
</div>
<div class="col-xs-3">
@@ -32,5 +32,5 @@ class bid_line_qty(osv.osv_memory):
def change_qty(self, cr, uid, ids, context=None):
active_ids = context and context.get('active_ids', [])
data = self.browse(cr, uid, ids, context=context)[0]
self.pool.get('purchase.order.line').write(cr, uid, active_ids, {'quantity_bid': data.qty})
self.pool.get('purchase.order.line').write(cr, uid, active_ids, {'quantity_tendered': data.qty})
return {'type': 'ir.actions.act_window_close'}
@@ -36,7 +36,7 @@ class purchase_requisition_partner(osv.osv_memory):
record_id = context and context.get('active_id', False) or False
tender = self.pool.get('purchase.requisition').browse(cr, uid, record_id, context=context)
if not tender.line_ids:
raise osv.except_osv(_('Error!'), _('Define product(s) you want to include in the call for bids.'))
raise osv.except_osv(_('Error!'), _('Define product(s) you want to include in the call for tenders.'))
return res
def create_order(self, cr, uid, ids, context=None):