[IMP] crm: salesteams, add target_invoice_duration attribute
bzr revid: chm@openerp.com-20130416134520-znocwh73q6x3nk1r
This commit is contained in:
parent
7394f41f83
commit
f6b6035922
|
@ -19,8 +19,10 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import date
|
||||||
|
from dateutil.relativedelta import relativedelta
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
|
|
||||||
class sale_order(osv.osv):
|
class sale_order(osv.osv):
|
||||||
|
@ -35,14 +37,35 @@ class sale_order(osv.osv):
|
||||||
class crm_case_section(osv.osv):
|
class crm_case_section(osv.osv):
|
||||||
_inherit = 'crm.case.section'
|
_inherit = 'crm.case.section'
|
||||||
|
|
||||||
def _get_sum_month_invoice(self, cr, uid, ids, field_name, arg, context=None):
|
def _get_sum_duration_invoice(self, cr, uid, ids, field_name, arg, context=None):
|
||||||
res = dict.fromkeys(ids, 0)
|
res = dict.fromkeys(ids, 0)
|
||||||
obj = self.pool.get('account.invoice.report')
|
obj = self.pool.get('account.invoice.report')
|
||||||
when = datetime.today()
|
|
||||||
for section_id in ids:
|
previous_month = {
|
||||||
invoice_ids = obj.search(cr, uid, [("section_id", "=", section_id), ('state', 'not in', ['draft', 'cancel']), ('year', '=', when.year), ('month', '=', when.month > 9 and when.month or "0%s" % when.month)], context=context)
|
"monthly": 0,
|
||||||
|
"semesterly": 2,
|
||||||
|
"semiannually": 5,
|
||||||
|
"annually": 11
|
||||||
|
}
|
||||||
|
for section in self.browse(cr, uid, ids, context=context):
|
||||||
|
when = date.today().replace(day=1) + relativedelta(months=-previous_month[section.target_invoice_duration])
|
||||||
|
|
||||||
|
invoice_ids = obj.search(cr, uid, [("section_id", "=", section.id), ('state', 'not in', ['draft', 'cancel']), ('date', '>=', when)], context=context)
|
||||||
for invoice in obj.browse(cr, uid, invoice_ids, context=context):
|
for invoice in obj.browse(cr, uid, invoice_ids, context=context):
|
||||||
res[section_id] += invoice.price_total
|
res[section.id] += invoice.price_total
|
||||||
|
return res
|
||||||
|
|
||||||
|
def _get_target_invoice_duration_txt(self, cr, uid, ids, field_name, arg, context=None):
|
||||||
|
res = dict.fromkeys(ids, "")
|
||||||
|
|
||||||
|
duration_txt = {
|
||||||
|
"monthly": _("this month"),
|
||||||
|
"semesterly": _("this semester"),
|
||||||
|
"semiannually": _("this semi"),
|
||||||
|
"annually": _("this year")
|
||||||
|
}
|
||||||
|
for section in self.browse(cr, uid, ids, context=context):
|
||||||
|
res[section.id] = duration_txt[section.target_invoice_duration]
|
||||||
return res
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -55,11 +78,19 @@ class crm_case_section(osv.osv):
|
||||||
'invoice_ids': fields.one2many('account.invoice', 'section_id',
|
'invoice_ids': fields.one2many('account.invoice', 'section_id',
|
||||||
string='Invoices', readonly=True,
|
string='Invoices', readonly=True,
|
||||||
domain=[('state', 'not in', ['draft', 'cancel'])]),
|
domain=[('state', 'not in', ['draft', 'cancel'])]),
|
||||||
'sum_month_invoice': fields.function(_get_sum_month_invoice,
|
'sum_duration_invoice': fields.function(_get_sum_duration_invoice,
|
||||||
string='Total invoiced this month',
|
string='Total invoiced',
|
||||||
type='integer', readonly=True),
|
type='integer', readonly=True),
|
||||||
'forcasted': fields.integer(string='Total forcasted'),
|
'forcasted': fields.integer(string='Total forcasted'),
|
||||||
'target_invoice': fields.integer(string='Target Invoice'),
|
'target_invoice': fields.integer(string='Target Invoice'),
|
||||||
|
'target_invoice_duration': fields.selection([("monthly", "Monthly"), ("semesterly", "Semesterly"), ("semiannually", "Semiannually"), ("annually", "Annually")],
|
||||||
|
string='Report duration view', required=True),
|
||||||
|
'target_invoice_duration_txt': fields.function(_get_target_invoice_duration_txt,
|
||||||
|
string='Duration',
|
||||||
|
type="string", readonly=True),
|
||||||
|
}
|
||||||
|
_defaults = {
|
||||||
|
'target_invoice_duration': "monthly",
|
||||||
}
|
}
|
||||||
|
|
||||||
def action_forcasted(self, cr, uid, id, value, context=None):
|
def action_forcasted(self, cr, uid, id, value, context=None):
|
||||||
|
|
|
@ -213,9 +213,12 @@
|
||||||
<field name="inherit_id" ref="crm.crm_case_section_view_form"/>
|
<field name="inherit_id" ref="crm.crm_case_section_view_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<data>
|
<data>
|
||||||
<field name="active" position="before">
|
<xpath expr="//notebook" position="before">
|
||||||
<field name="target_invoice"/>
|
<group col="4">
|
||||||
</field>
|
<field name="target_invoice_duration" widget="radio"/>
|
||||||
|
<field name="target_invoice"/>
|
||||||
|
</group>
|
||||||
|
</xpath>
|
||||||
</data>
|
</data>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -230,9 +233,10 @@
|
||||||
<field name="quotation_ids"/>
|
<field name="quotation_ids"/>
|
||||||
<field name="sale_order_ids"/>
|
<field name="sale_order_ids"/>
|
||||||
<field name="invoice_ids"/>
|
<field name="invoice_ids"/>
|
||||||
<field name="sum_month_invoice"/>
|
<field name="sum_duration_invoice"/>
|
||||||
<field name="forcasted"/>
|
<field name="forcasted"/>
|
||||||
<field name="target_invoice"/>
|
<field name="target_invoice"/>
|
||||||
|
<field name="target_invoice_duration_txt"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//div[@class='oe_items_list']" position="inside">
|
<xpath expr="//div[@class='oe_items_list']" position="inside">
|
||||||
<a name="%(action_quotations_salesteams)d" type="action">
|
<a name="%(action_quotations_salesteams)d" type="action">
|
||||||
|
@ -253,8 +257,15 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//div[@class='oe_items_list']" position="after">
|
<xpath expr="//div[@class='oe_items_list']" position="after">
|
||||||
<div class="oe_center">
|
<div class="oe_center">
|
||||||
<div class="oe_justgage" style="width:160px; height: 120px;" t-att-data-value="record.sum_month_invoice.raw_value" t-att-data-max="record.target_invoice.raw_value" data-label="this month">Invoiced</div>
|
<div class="oe_justgage" style="width:160px; height: 120px;"
|
||||||
<div class="oe_justgage" style="width:160px; height: 120px;" t-att-data-value="record.forcasted.raw_value" t-att-data-max="record.target_invoice.raw_value" data-label="this month" data-action="action_forcasted">Forcasted</div>
|
t-att-data-value="record.sum_duration_invoice.raw_value"
|
||||||
|
t-att-data-max="record.target_invoice.raw_value"
|
||||||
|
t-att-data-label="record.target_invoice_duration_txt.raw_value">Invoiced</div>
|
||||||
|
<div class="oe_justgage" style="width:160px; height: 120px;"
|
||||||
|
t-att-data-value="record.forcasted.raw_value"
|
||||||
|
t-att-data-max="record.target_invoice.raw_value"
|
||||||
|
t-att-data-label="record.target_invoice_duration_txt.raw_value"
|
||||||
|
data-action="action_forcasted">Forcasted</div>
|
||||||
</div>
|
</div>
|
||||||
</xpath>
|
</xpath>
|
||||||
</data>
|
</data>
|
||||||
|
|
Loading…
Reference in New Issue