[IMP] purchase_requisition: terminology
Rename "Call for Bid" into "Call for Tender" when on the buyer's side.
This commit is contained in:
committed by
Richard Mathot
parent
660b13bb78
commit
e9d83ea39a
@@ -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<current_date;black:date_end>current_date;" string="Call for Bids">
|
||||
<tree fonts="bold:message_unread==True" colors="grey:state == 'cancel';red:date_end and date_end<current_date;black:date_end>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):
|
||||
|
||||
Reference in New Issue
Block a user