[IMP] insted of replacing int field with function and add new int fied add new function field only, use fnct_inv insted of overwriting write method.

bzr revid: tpa@tinyerp.com-20130821111113-5n022roofguvea0f
This commit is contained in:
Turkesh Patel (Open ERP) 2013-08-21 16:41:13 +05:30
parent f21aa3c371
commit ee9b75603f
3 changed files with 27 additions and 30 deletions

View File

@ -75,17 +75,27 @@ class crm_case_section(osv.osv):
for item in self.browse(cr, uid, ids, context=context): for item in self.browse(cr, uid, ids, context=context):
base_currency_id = item.user_id.company_id.currency_id.id if item.user_id else item.create_uid.company_id.currency_id.id base_currency_id = item.user_id.company_id.currency_id.id if item.user_id else item.create_uid.company_id.currency_id.id
res[item.id] = { res[item.id] = {
'invoiced_forecast': currency_obj.compute(cr, uid, base_currency_id, user_currency_id, item.base_invoiced_forecast, context=context), 'user_currency_invoiced_forecast': currency_obj.compute(cr, uid, base_currency_id, user_currency_id, item.invoiced_forecast, context=context),
'invoiced_target': currency_obj.compute(cr, uid, base_currency_id, user_currency_id, item.base_invoiced_target, context=context), 'user_currency_invoiced_target': currency_obj.compute(cr, uid, base_currency_id, user_currency_id, item.invoiced_target, context=context),
} }
return res return res
def _set_forecast_target(self, cr, uid, team_id, name, value, arg, context=None):
user_currency_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id
team = self.browse(cr, uid, team_id, context=context)
base_currency_id = team.user_id.company_id.currency_id.id if team.user_id else team.create_uid.company_id.currency_id.id
amount = self.pool.get('res.currency').compute(cr, uid, user_currency_id, base_currency_id, value, context=context)
self.write(cr, uid, [team_id], {name.strip("user_currency"): amount}, context=context)
return True
_columns = { _columns = {
'invoiced_forecast': fields.function(_compute_amounts_in_user_currency, string='Invoice Forecast',type='integer', multi="_compute_amounts", 'invoiced_forecast': fields.integer("Invoice Forecast"),
'user_currency_invoiced_forecast': fields.function(_compute_amounts_in_user_currency, fnct_inv=_set_forecast_target, string='Invoice Forecast',type='integer', multi="_compute_amounts",
help="Forecast of the invoice revenue for the current month. This is the amount the sales \n" help="Forecast of the invoice revenue for the current month. This is the amount the sales \n"
"team should invoice this month. It is used to compute the progression ratio \n" "team should invoice this month. It is used to compute the progression ratio \n"
" of the current and forecast revenue on the kanban view."), " of the current and forecast revenue on the kanban view."),
'invoiced_target': fields.function(_compute_amounts_in_user_currency,string='Invoice Target',type='integer', multi="_compute_amounts", 'invoiced_target': fields.integer("Invoice Target"),
'user_currency_invoiced_target': fields.function(_compute_amounts_in_user_currency, fnct_inv=_set_forecast_target, string='Invoice Target',type='integer', multi="_compute_amounts",
help="Target of invoice revenue for the current month. This is the amount the sales \n" help="Target of invoice revenue for the current month. This is the amount the sales \n"
"team estimates to be able to invoice this month."), "team estimates to be able to invoice this month."),
'monthly_quoted': fields.function(_get_sale_orders_data, 'monthly_quoted': fields.function(_get_sale_orders_data,
@ -97,24 +107,11 @@ class crm_case_section(osv.osv):
'monthly_invoiced': fields.function(_get_invoices_data, 'monthly_invoiced': fields.function(_get_invoices_data,
type='string', readonly=True, type='string', readonly=True,
string='Rate of sent invoices per duration'), string='Rate of sent invoices per duration'),
'base_invoiced_forecast': fields.integer(string="Invoice Forecast"),
'base_invoiced_target': fields.integer(string="Invoice Target"),
'create_uid': fields.many2one('res.users', 'Create User'), 'create_uid': fields.many2one('res.users', 'Create User'),
} }
def action_forecast(self, cr, uid, id, value, context=None): def action_forecast(self, cr, uid, id, value, context=None):
return self.write(cr, uid, [id], {'invoiced_forecast': int(float(value))}, context=context) return self.write(cr, uid, [id], {'user_currency_invoiced_forecast': int(float(value))}, context=context)
def write(self, cr, uid, ids, vals, context=None):
currency_obj = self.pool.get('res.currency')
user_currency_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id
for item in self.browse(cr, uid, ids, context=context):
base_currency_id = item.user_id.company_id.currency_id.id if item.user_id else item.create_uid.company_id.currency_id.id
if vals.get('invoiced_forecast'):
vals['base_invoiced_forecast'] = currency_obj.compute(cr, uid, user_currency_id, base_currency_id, vals['invoiced_forecast'], context=context)
if vals.get('invoiced_target'):
vals['base_invoiced_target'] = currency_obj.compute(cr, uid, user_currency_id, base_currency_id, vals['invoiced_target'], context=context)
return super(crm_case_section, self).write(cr, uid, ids, vals, context=context)
class res_users(osv.Model): class res_users(osv.Model):
_inherit = 'res.users' _inherit = 'res.users'

View File

@ -3,15 +3,15 @@
<data> <data>
<record model="crm.case.section" id="crm.section_sales_department"> <record model="crm.case.section" id="crm.section_sales_department">
<field name="base_invoiced_forecast">52700</field> <field name="invoiced_forecast">52700</field>
<field name="base_invoiced_target">60000</field> <field name="invoiced_target">60000</field>
</record> </record>
<record model="crm.case.section" id="crm.crm_case_section_1"> <record model="crm.case.section" id="crm.crm_case_section_1">
<field name="name">Indirect Sales</field> <field name="name">Indirect Sales</field>
<field name="code">IM</field> <field name="code">IM</field>
<field name="base_invoiced_forecast">36000</field> <field name="invoiced_forecast">36000</field>
<field name="base_invoiced_target">40000</field> <field name="invoiced_target">40000</field>
</record> </record>
<!-- Invoice for Direct Marketing --> <!-- Invoice for Direct Marketing -->

View File

@ -248,8 +248,8 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<data> <data>
<xpath expr="//field[@name='code']" position="after"> <xpath expr="//field[@name='code']" position="after">
<field name="invoiced_target" readonly="0"/> <field name="user_currency_invoiced_target" readonly="0"/>
<field name="invoiced_forecast" readonly="0"/> <field name="user_currency_invoiced_forecast" readonly="0"/>
</xpath> </xpath>
</data> </data>
</field> </field>
@ -265,8 +265,8 @@
<field name="monthly_quoted"/> <field name="monthly_quoted"/>
<field name="monthly_confirmed"/> <field name="monthly_confirmed"/>
<field name="monthly_invoiced"/> <field name="monthly_invoiced"/>
<field name="invoiced_forecast"/> <field name="user_currency_invoiced_forecast"/>
<field name="invoiced_target"/> <field name="user_currency_invoiced_target"/>
</xpath> </xpath>
<xpath expr="//div[@class='oe_salesteams_leads']" position="after"> <xpath expr="//div[@class='oe_salesteams_leads']" position="after">
<div class="oe_salesteams_orders"> <div class="oe_salesteams_orders">
@ -297,11 +297,11 @@
</div> </div>
</xpath> </xpath>
<xpath expr="//div[@class='oe_items_list']" position="after"> <xpath expr="//div[@class='oe_items_list']" position="after">
<div class="oe_center oe_salesteams_justgage" t-if="record.invoiced_target.raw_value"> <div class="oe_center oe_salesteams_justgage" t-if="record.user_currency_invoiced_target.raw_value">
<field name="monthly_invoiced" widget="gage" style="width:160px; height: 120px;" options="{'max_field': 'invoiced_target'}">Invoiced</field> <field name="monthly_invoiced" widget="gage" style="width:160px; height: 120px;" options="{'max_field': 'user_currency_invoiced_target'}">Invoiced</field>
<field name="invoiced_forecast" widget="gage" style="width:160px; height: 120px; cursor: pointer;" options="{'max_field': 'invoiced_target', 'action_change': 'action_forecast'}">Forecast</field> <field name="user_currency_invoiced_forecast" widget="gage" style="width:160px; height: 120px; cursor: pointer;" options="{'max_field': 'user_currency_invoiced_target', 'action_change': 'action_forecast'}">Forecast</field>
</div> </div>
<div class="oe_center oe_salesteams_help" style="color:#bbbbbb;" t-if="!record.invoiced_target.raw_value"> <div class="oe_center oe_salesteams_help" style="color:#bbbbbb;" t-if="!record.user_currency_invoiced_target.raw_value">
<br/>Define an invoicing target in the sales team settings to see the period's achievement and forecast at a glance. <br/>Define an invoicing target in the sales team settings to see the period's achievement and forecast at a glance.
</div> </div>
</xpath> </xpath>