diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index b7218df6ad1..49bbfd60bcd 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -32,11 +32,11 @@ from osv import fields,osv,orm from osv.orm import except_orm from tools.translate import _ -class project_issue(osv.osv): +class project_issue(osv.osv, crm.crm_case): _name = "project.issue" _description = "Project Issue" _order = "priority, id desc" - _inherit = 'crm.case' + _inherit = 'mailgate.thread' def case_open(self, cr, uid, ids, *args): """ @@ -109,6 +109,39 @@ class project_issue(osv.osv): return res _columns = { + '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), + '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.'), + 'user_id': fields.many2one('res.users', 'Responsible'), + 'partner_id': fields.many2one('res.partner', 'Partner'), + 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \ + domain="[('partner_id','=',partner_id)]"), + 'company_id': fields.many2one('res.company', 'Company'), + 'description': fields.text('Description'), + 'state': fields.selection([ + ('draft', 'Draft'), + ('open', 'Todo'), + ('cancel', 'Cancelled'), + ('done', 'Closed'), + ('pending', 'Pending'), + ], '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\'.'), + 'email_from': fields.char('Email', size=128, help="These people will receive email."), + '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"), + 'stage_id': fields.many2one('crm.case.stage', 'Stage', \ + domain="[('section_id','=',section_id),\ + ('object_id.model', '=', 'crm.phonecall')]"), + 'date_open': fields.datetime('Opened', readonly=True), + # Project Issue fields 'date_closed': fields.datetime('Closed', readonly=True), 'date': fields.datetime('Date'), 'canal_id': fields.many2one('res.partner.canal', 'Channel',help="The channels represent the different communication modes available with the customer." \ diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 775e4b933f0..16dc2eb6ae2 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -2,11 +2,71 @@ from osv import fields,osv import tools from crm import crm +AVAILABLE_STATES = [ + ('draft','Draft'), + ('open','Open'), + ('cancel', 'Cancelled'), + ('done', 'Closed'), + ('pending','Pending') +] + class project_issue_report(osv.osv): _name = "project.issue.report" _auto = False - _inherit = "crm.case.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 users ID for security checks, + @param ids: List of case and section Datas 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), 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"), 'nbr': fields.integer('# of Issues', readonly=True), diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index 24290530be7..a9f8f016dec 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -43,20 +43,70 @@ + project.issue.report.select project.issue.report - search - + + + + - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + @@ -78,24 +128,52 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +