diff --git a/addons/crm_claim/__openerp__.py b/addons/crm_claim/__openerp__.py index 32a9319b75e..6ad4af16266 100644 --- a/addons/crm_claim/__openerp__.py +++ b/addons/crm_claim/__openerp__.py @@ -40,8 +40,8 @@ ], 'demo_xml': [ 'crm_claim_demo.xml', - 'test/test_crm_claim.yml' - ], + ], + 'test': ['test/test_crm_claim.yml'], 'installable': True, 'active': False, } diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 1eb557cdebd..e0044d8ecaa 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -22,7 +22,7 @@ from osv import fields, osv from crm import crm -class crm_claim(osv.osv): +class crm_claim(osv.osv, crm.crm_case): """ Crm claim """ @@ -31,41 +31,71 @@ class crm_claim(osv.osv): _order = "id desc" _inherit = 'mailgate.thread' _columns = { - 'date_closed': fields.datetime('Closed', readonly=True), - 'date': fields.datetime('Date'), - 'ref' : fields.reference('Reference', selection=crm._links_get, size=128), - 'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128), - 'canal_id': fields.many2one('res.partner.canal', 'Channel',\ + 'id': fields.integer('ID', readonly=True), + 'name': fields.char('Name', size=128, required=True), + 'description': fields.text('Description'), + 'create_date': fields.datetime('Creation Date' , readonly=True), + 'write_date': fields.datetime('Update Date' , readonly=True), + 'date_deadline': fields.date('Deadline'), + 'date_closed': fields.datetime('Closed', readonly=True), + 'date': fields.datetime('Date'), + 'ref' : fields.reference('Reference', selection=crm._links_get, size=128), + 'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128), + 'canal_id': fields.many2one('res.partner.canal', 'Channel', \ help="The channels represent the different communication\ modes available with the customer." \ " With each commercial opportunity, you can indicate the\ - canall which is this opportunity source."), - 'planned_revenue': fields.float('Planned Revenue'), - 'planned_cost': fields.float('Planned Costs'), + canall which is this opportunity source."), + 'planned_revenue': fields.float('Planned Revenue'), + 'planned_cost': fields.float('Planned Costs'), 'som': fields.many2one('res.partner.som', 'State of Mind', \ help="The minds states allow to define a value scale which represents" \ "the partner mentality in relation to our services.The scale has" \ "to be created with a factor for each level from 0 (Very dissatisfied) \ - to 10 (Extremely satisfied)."), - 'categ_id': fields.many2one('crm.case.categ', 'Category',\ + to 10 (Extremely satisfied)."), + 'categ_id': fields.many2one('crm.case.categ', 'Category', \ domain="[('section_id','=',section_id),\ - ('object_id.model', '=', 'crm.claim')]"), - 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'), - 'type_id': fields.many2one('crm.case.resource.type', 'Claim Type',\ + ('object_id.model', '=', 'crm.claim')]"), + 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'), + 'type_id': fields.many2one('crm.case.resource.type', 'Claim Type', \ domain="[('section_id','=',section_id),\ - ('object_id.model', '=', 'crm.claim')]"), - - 'partner_name': fields.char("Employee's Name", size=64), - 'partner_mobile': fields.char('Mobile', size=32), - 'partner_phone': fields.char('Phone', size=32), - 'stage_id': fields.many2one ('crm.case.stage', 'Stage',\ + ('object_id.model', '=', 'crm.claim')]"), + 'user_id': fields.many2one('res.users', 'Responsible'), + 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ + select=True, help='Sales team to which Case belongs to.\ + Define Responsible user and Email account for mail gateway.'), + 'company_id': fields.many2one('res.company', 'Company'), + 'partner_id': fields.many2one('res.partner', 'Partner'), + 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \ + domain="[('partner_id','=',partner_id)]"), + 'email_cc': fields.text('Watchers Emails', size=252 , help="These people\ + will receive a copy of the future" \ + " communication between partner and users by email"), + 'email_from': fields.char('Email', size=128, help="These people will receive email."), + 'partner_name': fields.char("Employee's Name", size=64), + 'partner_mobile': fields.char('Mobile', size=32), + 'partner_phone': fields.char('Phone', size=32), + 'stage_id': fields.many2one ('crm.case.stage', 'Stage', \ domain="[('section_id','=',section_id),\ - ('object_id.model', '=', 'crm.claim')]"), - 'probability': fields.float('Probability (%)'), + ('object_id.model', '=', 'crm.claim')]"), + 'probability': fields.float('Probability (%)'), + 'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + \nIf the case is in progress the state is set to \'Open\'.\ + \nWhen the case is over, the state is set to \'Done\'.\ + \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), } _defaults = { - 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], + 'active': lambda *a: 1, + 'user_id': crm.crm_case._get_default_user, + 'partner_id': crm.crm_case._get_default_partner, + 'partner_address_id': crm.crm_case._get_default_partner_address, + 'email_from':crm.crm_case. _get_default_email, + 'state': lambda *a: 'draft', + 'section_id':crm.crm_case. _get_section, + 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c), + 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], } crm_claim() diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index ffd0c4943e0..837987e661a 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -169,7 +169,7 @@ - +
diff --git a/addons/crm_claim/report/crm_claim_report.py b/addons/crm_claim/report/crm_claim_report.py index 04f00f4a95e..16ff5be0d3a 100644 --- a/addons/crm_claim/report/crm_claim_report.py +++ b/addons/crm_claim/report/crm_claim_report.py @@ -23,16 +23,75 @@ from osv import fields,osv import tools from crm.report import crm_report +AVAILABLE_STATES = [ + ('draft','Draft'), + ('open','Open'), + ('cancel', 'Cancelled'), + ('done', 'Closed'), + ('pending','Pending') +] class crm_claim_report(osv.osv): """ CRM Claim Report""" _name = "crm.claim.report" _auto = False - _inherit = "crm.case.report" _description = "CRM Claim Report" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + + """ @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of case and section Data’s IDs + @param context: A standard dictionary for contextual values """ + + res = {} + state_perc = 0.0 + avg_ans = 0.0 + + for case in self.browse(cr, uid, ids, context): + if field_name != 'avg_answers': + state = field_name[5:] + cr.execute("select count(*) from crm_opportunity where \ + section_id =%s and state='%s'"%(case.section_id.id, state)) + state_cases = cr.fetchone()[0] + perc_state = (state_cases / float(case.nbr)) * 100 + + res[case.id] = perc_state + else: + model_name = self._name.split('report.') + if len(model_name) < 2: + res[case.id] = 0.0 + else: + model_name = model_name[1] + + cr.execute("select count(*) from crm_case_log l, ir_model m \ + where l.model_id=m.id and m.model = '%s'" , model_name) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr + res[case.id] = avg_ans + + return res _columns = { + 'name': fields.char('Year', size=64, required=False, readonly=True), + 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), + 'nbr': fields.integer('# of Cases', readonly=True), + 'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True), + 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"), + 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"), + 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"), + 'month':fields.selection([('01', 'January'), ('02', 'February'), \ + ('03', 'March'), ('04', 'April'),\ + ('05', 'May'), ('06', 'June'), \ + ('07', 'July'), ('08', 'August'),\ + ('09', 'September'), ('10', 'October'),\ + ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), + 'create_date': fields.datetime('Create Date', readonly=True), + 'day': fields.char('Day', size=128, readonly=True), 'delay_close': fields.float('Delay to close', digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', \ domain="[('section_id','=',section_id),\ diff --git a/addons/crm_claim/report/crm_claim_report_view.xml b/addons/crm_claim/report/crm_claim_report_view.xml index fb4b0af3287..ae4f248c0a9 100644 --- a/addons/crm_claim/report/crm_claim_report_view.xml +++ b/addons/crm_claim/report/crm_claim_report_view.xml @@ -33,16 +33,21 @@ crm.claim.report.form crm.claim.report - form - + + + + + + - + + @@ -62,40 +67,121 @@ - - + + crm.claim.report.select crm.claim.report - search - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +