From 90f676823b0514aa3e4ba3b1494558e98bcc98cd Mon Sep 17 00:00:00 2001 From: "Jay (Open ERP)" Date: Mon, 11 Jan 2010 16:05:46 +0530 Subject: [PATCH 001/131] [FIX] Base_report_crearor :Models with _inherits made working lp bug: https://launchpad.net/bugs/503894 fixed bzr revid: jvo@tinyerp.com-20100111103546-9n5nikemxlvv9jb4 --- .../base_report_creator.py | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/addons/base_report_creator/base_report_creator.py b/addons/base_report_creator/base_report_creator.py index b4995435d23..34f3b549dae 100644 --- a/addons/base_report_creator/base_report_creator.py +++ b/addons/base_report_creator/base_report_creator.py @@ -226,9 +226,18 @@ class report_creator(osv.osv): from_list = [] where_list = [] filter_list = [] + +# def _add_inherits(obj): +# pool_model = self.pool.get(obj) +# if not model_dict.get(obj,False): +# model_dict[obj] = pool_model._table +# for record in pool_model._inherits.keys(): +# _add_inherits(record) + for model in models: model_dict[model.model] = self.pool.get(model.model)._table - +# _add_inherits(model.model) + model_list = model_dict.keys() reference_model_dict = {} for model in model_dict: @@ -237,10 +246,22 @@ class report_creator(osv.osv): rest_list.remove(model) model_pool = self.pool.get(model) fields_get = model_pool.fields_get(cr,uid) + model_columns = {} + + def _get_inherit_fields(obj): + pool_model = self.pool.get(obj) + #Adding the columns of the model itself + model_columns.update(pool_model._columns) + #Adding the columns of its _inherits + for record in pool_model._inherits.keys(): + _get_inherit_fields(record) + + _get_inherit_fields(model) + fields_filter = dict(filter(lambda x:x[1].get('relation',False) and x[1].get('relation') in rest_list and x[1].get('type')=='many2one' - and not (isinstance(model_pool._columns[x[0]],fields.function) or isinstance(model_pool._columns[x[0]],fields.related)), fields_get.items())) + and not (isinstance(model_columns[x[0]],fields.function) or isinstance(model_columns[x[0]],fields.related)), fields_get.items())) if fields_filter: model in model_list and model_list.remove(model) model_count = reference_model_dict.get(model,False) @@ -255,9 +276,9 @@ class report_creator(osv.osv): reference_model_dict[v.get('relation')] = relation_count+1 else: reference_model_dict[v.get('relation')]=1 - - str_where = model_dict.get(model)+"."+ k + "=" + model_dict.get(v.get('relation'))+'.id' - where_list.append(str_where) + if k in self.pool.get(model)._columns: + str_where = model_dict.get(model)+"."+ k + "=" + model_dict.get(v.get('relation'))+'.id' + where_list.append(str_where) if reference_model_dict: self.model_set_id = model_dict.get(reference_model_dict.keys()[reference_model_dict.values().index(min(reference_model_dict.values()))]) if model_list and not len(model_dict.keys()) == 1: @@ -280,6 +301,7 @@ class report_creator(osv.osv): if where_list: + where_list = list(set(where_list)) ret_str+="\n where \n"+" and\n".join(where_list) ret_str = ret_str.strip() if filter_list: From a4ca4cf7b4dce3f22cad1caf948b51375a3a0fbd Mon Sep 17 00:00:00 2001 From: "Jay (Open ERP)" Date: Mon, 11 Jan 2010 19:05:13 +0530 Subject: [PATCH 002/131] [FIX] Stock : While removing the picking,moves should not call picking's write() lp bug: https://launchpad.net/bugs/499120 fixed bzr revid: jvo@tinyerp.com-20100111133513-0vcvrqelt4fqjdta --- addons/stock/stock.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index f3fbfe15950..1460957c4f9 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -791,6 +791,7 @@ class stock_picking(osv.osv): raise osv.except_osv(_('Error'), _('You cannot remove the picking which is in %s state !')%(pick.state,)) elif pick.state in ['confirmed','assigned']: ids2 = [move.id for move in pick.move_lines] + context.update({'call_unlink':True}) self.pool.get('stock.move').action_cancel(cr, uid, ids2, context) else: continue @@ -1213,14 +1214,14 @@ class stock_move(osv.osv): pickings[move.picking_id.id] = True if move.move_dest_id and move.move_dest_id.state == 'waiting': self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) - if move.move_dest_id.picking_id: + if context.get('call_unlink',False) and move.move_dest_id.picking_id: wf_service = netsvc.LocalService("workflow") wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False}) - - for pick in self.pool.get('stock.picking').browse(cr, uid, pickings.keys()): - if all(move.state == 'cancel' for move in pick.move_lines): - self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) + if not context.get('call_unlink',False): + for pick in self.pool.get('stock.picking').browse(cr, uid, pickings.keys()): + if all(move.state == 'cancel' for move in pick.move_lines): + self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) wf_service = netsvc.LocalService("workflow") for id in ids: From 2036a7c651f00c88ea388e80756b7a10d79c531b Mon Sep 17 00:00:00 2001 From: "Jay (Open ERP)" Date: Mon, 11 Jan 2010 19:45:30 +0530 Subject: [PATCH 003/131] [FIX] Purchase : Purchase/user was missing account.tax access rights lp bug: https://launchpad.net/bugs/503741 fixed bzr revid: jvo@tinyerp.com-20100111141530-0666oazti2dzju3x --- addons/purchase/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv index 68be681fdf5..5fb968e6ce1 100644 --- a/addons/purchase/security/ir.model.access.csv +++ b/addons/purchase/security/ir.model.access.csv @@ -7,3 +7,4 @@ "access_stock_move_purchase_user","stock.move purchase_user","stock.model_stock_move","purchase.group_purchase_user",1,1,1,1 "access_purchase_order_stock_worker","purchase.order stock_worker","model_purchase_order","stock.group_stock_user",1,0,0,0 "access_purchase_order_line_stock_worker","purchase.order.line stock_worker","model_purchase_order_line","stock.group_stock_user",1,0,0,0 +"access_account_tax_purchase_user","account.tax purchase_user","account.model_account_tax","purchase.group_purchase_user",1,0,0,0 \ No newline at end of file From 05a76846f26e4915bba1ef2cd9bd51a1647e158d Mon Sep 17 00:00:00 2001 From: "VRA(OpenERP)" <> Date: Wed, 13 Jan 2010 17:01:10 +0530 Subject: [PATCH 004/131] [FIX] Analytic account report corrected bzr revid: jvo@tinyerp.com-20100113113110-1sl57vr454pi8w4j --- addons/hr_timesheet_invoice/report/cost_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr_timesheet_invoice/report/cost_ledger.py b/addons/hr_timesheet_invoice/report/cost_ledger.py index 584ea3c6acd..a2f3044a190 100644 --- a/addons/hr_timesheet_invoice/report/cost_ledger.py +++ b/addons/hr_timesheet_invoice/report/cost_ledger.py @@ -88,7 +88,7 @@ class account_analytic_cost_ledger(report_sxw.rml_parse): revenue = 0.0 if lines[id].amount < 0 and lines[id].product_id and lines[id].product_uom_id and lines[id].account_id.pricelist_id: ctx = {'uom': lines[id].product_uom_id.id} - price = price_obj.price_get(self.cr, self.uid, [lines[id].pricelist_id.id], lines[id].product_id.id, lines[id].unit_amount, ctx)[lines[id].pricelist_id.id] + price = price_obj.price_get(self.cr, self.uid, [lines[id].account_id.pricelist_id.id], lines[id].product_id.id, lines[id].unit_amount, ctx)[lines[id].account_id.pricelist_id.id] revenue = round(price * lines[id].unit_amount, 2) r['revenue'] = revenue self.sum_revenue[account_id] += revenue From bbd1938bafd7a9002b7f639561f5eacd7c765ba0 Mon Sep 17 00:00:00 2001 From: "Jay (Open ERP)" Date: Wed, 13 Jan 2010 17:08:47 +0530 Subject: [PATCH 005/131] [FIX] l10n_chart_uk_minimal : Demo account.tax.code needed negative sign lp bug: https://launchpad.net/bugs/470815 fixed bzr revid: jvo@tinyerp.com-20100113113847-drrnpcf1tvbap1t4 --- addons/l10n_chart_uk_minimal/account_tax.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/l10n_chart_uk_minimal/account_tax.xml b/addons/l10n_chart_uk_minimal/account_tax.xml index a030925f8fa..42f214e5685 100755 --- a/addons/l10n_chart_uk_minimal/account_tax.xml +++ b/addons/l10n_chart_uk_minimal/account_tax.xml @@ -21,6 +21,7 @@ Input VAT + From b01c37956e666a6df4d6fadfd100705dc497f7b7 Mon Sep 17 00:00:00 2001 From: Quentin De Paoli Date: Wed, 13 Jan 2010 17:02:57 +0100 Subject: [PATCH 006/131] [FIX] l10n_be: fixed data of l10n_be module bzr revid: qdp@cyan-20100113160257-vdfjdx4mfczch12e --- addons/l10n_be/account_pcmn_belgium.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_be/account_pcmn_belgium.xml b/addons/l10n_be/account_pcmn_belgium.xml index e657d259e60..9281d3c45ac 100644 --- a/addons/l10n_be/account_pcmn_belgium.xml +++ b/addons/l10n_be/account_pcmn_belgium.xml @@ -7021,8 +7021,8 @@ VI 0 percent - - + + sale From 9683d25c9b17a7db402b29375e37ebe27e677100 Mon Sep 17 00:00:00 2001 From: Quentin De Paoli Date: Wed, 13 Jan 2010 17:30:28 +0100 Subject: [PATCH 007/131] [FIX] account: wizard of fiscal year closing fixed: the entries of all previous fiscal years have to be deffered, not only the last one bzr revid: qdp@cyan-20100113163028-13qolk6d2jv5on2s --- addons/account/wizard/wizard_fiscalyear_close.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/account/wizard/wizard_fiscalyear_close.py b/addons/account/wizard/wizard_fiscalyear_close.py index ac9518e006b..97ee5f51a73 100644 --- a/addons/account/wizard/wizard_fiscalyear_close.py +++ b/addons/account/wizard/wizard_fiscalyear_close.py @@ -80,10 +80,12 @@ def _data_save(self, cr, uid, data, context): if move_ids: raise wizard.except_wizard(_('UserError'), _('The opening journal must not have any entry in the new fiscal year !')) - - + query = "SELECT id FROM account_fiscalyear WHERE date_stop < '" + str(new_fyear.date_start) + "'" + cr.execute(query) + result = cr.dictfetchall() + fy_ids = ','.join([str(x['id']) for x in result]) query_line = pool.get('account.move.line')._query_get(cr, uid, - obj='account_move_line', context={'fiscalyear': fy_id}) + obj='account_move_line', context={'fiscalyear': fy_ids}) cr.execute('select id from account_account WHERE active') ids = map(lambda x: x[0], cr.fetchall()) for account in pool.get('account.account').browse(cr, uid, ids, From 70811ec5a199871196af5e024c6b1759dbfb5751 Mon Sep 17 00:00:00 2001 From: Launchpad Code Hosting Date: Wed, 20 Jan 2010 04:36:15 +0000 Subject: [PATCH 008/131] Launchpad automatic translations update. bzr revid: codehost@crowberry-20100120043615-dtrufoa9pj4bb0ak --- bin/addons/base/i18n/uk.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/addons/base/i18n/uk.po b/bin/addons/base/i18n/uk.po index 2ebaea1d630..a8710995501 100644 --- a/bin/addons/base/i18n/uk.po +++ b/bin/addons/base/i18n/uk.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-12-18 08:39+0000\n" -"PO-Revision-Date: 2010-01-18 05:27+0000\n" +"PO-Revision-Date: 2010-01-19 05:18+0000\n" "Last-Translator: Fabien (Open ERP) \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-01-19 04:41+0000\n" +"X-Launchpad-Export-Date: 2010-01-20 04:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: base From 90449aad7eead43f9cb793b9df9d8d7fd498d47e Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 10:32:04 +0530 Subject: [PATCH 009/131] [IMP] report_crm: set the sequence in menu bzr revid: sbh@tinyerp.com-20100120050204-az3c0yueyvay2424 --- addons/report_crm/report_crm_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml index d39d1eb068f..68f094ee503 100644 --- a/addons/report_crm/report_crm_view.xml +++ b/addons/report_crm/report_crm_view.xml @@ -70,7 +70,7 @@ - + From 8458967d4235775dfd05cb604ca1df5127d0ec57 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 10:52:12 +0530 Subject: [PATCH 010/131] [IMP]CRM: add the field lead2opportunity bzr revid: sbh@tinyerp.com-20100120052212-6t3e1uqv1yq06oue --- addons/crm/wizard/crm_lead_wizard.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/crm/wizard/crm_lead_wizard.py b/addons/crm/wizard/crm_lead_wizard.py index 27c36d3634f..a7c24863ee1 100644 --- a/addons/crm/wizard/crm_lead_wizard.py +++ b/addons/crm/wizard/crm_lead_wizard.py @@ -105,6 +105,8 @@ class lead2opportunity(wizard.interface): 'partner_id': data['form']['partner_id'], 'section_id':lead.section_id.id, 'description':lead.description, + 'partner_address_id':lead.partner_address_id.id, + 'priority':lead.priority, }) new_opportunity = opportunity_case_obj.browse(cr, uid, new_opportunity_id) From f832890f0187f5662bfe936adb77b6077ef31156 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 11:09:15 +0530 Subject: [PATCH 011/131] [IMP]report_crm: add the section_id in report_crm_case_user bzr revid: sbh@tinyerp.com-20100120053915-bqv42zev7qgx352a --- addons/report_crm/report_crm.py | 4 +++- addons/report_crm/report_crm_view.xml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/report_crm/report_crm.py b/addons/report_crm/report_crm.py index c5646e255c5..552f56c2732 100644 --- a/addons/report_crm/report_crm.py +++ b/addons/report_crm/report_crm.py @@ -37,6 +37,7 @@ class report_crm_case_user(osv.osv): _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), 'probability': fields.float('Avg. Probability', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), @@ -54,10 +55,11 @@ class report_crm_case_user(osv.osv): to_char(c.create_date, 'MM') as month, c.state, c.user_id, + c.section_id, count(*) as nbr from crm_case c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id )""") report_crm_case_user() diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml index 68f094ee503..2a51ad84274 100644 --- a/addons/report_crm/report_crm_view.xml +++ b/addons/report_crm/report_crm_view.xml @@ -15,6 +15,7 @@ + From d07efd821517b7cb896d2262e313c7e1eafddd07 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 11:30:25 +0530 Subject: [PATCH 012/131] [IMP]report_crm: add the section_id in report bzr revid: sbh@tinyerp.com-20100120060025-31u6329nga610pix --- addons/report_crm/report_crm.py | 10 ++++++---- addons/report_crm/report_crm_view.xml | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/addons/report_crm/report_crm.py b/addons/report_crm/report_crm.py index 552f56c2732..d5e490627b7 100644 --- a/addons/report_crm/report_crm.py +++ b/addons/report_crm/report_crm.py @@ -69,6 +69,7 @@ class report_crm_case_categ(osv.osv): _auto = False _columns = { 'name': fields.char('Year',size=64,required=False, readonly=True), + 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), @@ -84,10 +85,11 @@ class report_crm_case_categ(osv.osv): to_char(c.create_date, 'YYYY') as name, to_char(c.create_date, 'MM') as month, c.state, + c.section_id, count(*) as nbr from crm_case c - group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id )""") report_crm_case_categ() @@ -122,6 +124,7 @@ class report_crm_case_section(osv.osv): _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_cases': fields.integer('# of Cases', 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"), @@ -139,9 +142,8 @@ class report_crm_case_section(osv.osv): to_char(c.create_date, 'YYYY') as name, to_char(c.create_date, 'MM') as month, count(*) as nbr_cases, - 0 as avg_answers, - 0.0 as perc_done, - 0.0 as perc_cancel + c.section_id as section_id, + 0 as avg_answers from crm_case c group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml index 2a51ad84274..e298795eb0f 100644 --- a/addons/report_crm/report_crm_view.xml +++ b/addons/report_crm/report_crm_view.xml @@ -30,6 +30,7 @@ + @@ -64,6 +65,7 @@ + @@ -92,6 +94,7 @@ + @@ -105,6 +108,7 @@
+ @@ -123,6 +127,7 @@ + @@ -157,6 +162,7 @@ + @@ -187,6 +193,7 @@ + From 55d0e280e56c3d950fc261acb9a797ea0457069c Mon Sep 17 00:00:00 2001 From: "uco (OpenERP)" Date: Wed, 20 Jan 2010 12:15:51 +0530 Subject: [PATCH 013/131] [ADD]: report_crm: Added report files for lead. bzr revid: uco@tinyerp.co.in-20100120064551-5gwkuxm2wc2chf11 --- addons/report_crm/__init__.py | 1 + addons/report_crm/__terp__.py | 2 +- addons/report_crm/report_crm.py | 1 - addons/report_crm/report_crm_lead.py | 77 +++++++++++ addons/report_crm/report_crm_lead_view.xml | 142 +++++++++++++++++++++ 5 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 addons/report_crm/report_crm_lead.py create mode 100644 addons/report_crm/report_crm_lead_view.xml diff --git a/addons/report_crm/__init__.py b/addons/report_crm/__init__.py index 0c7693b19e0..e07c9ee2a69 100644 --- a/addons/report_crm/__init__.py +++ b/addons/report_crm/__init__.py @@ -20,6 +20,7 @@ ############################################################################## import report_crm +import report_crm_lead # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_crm/__terp__.py b/addons/report_crm/__terp__.py index dabe76d37db..c007f1fe46f 100644 --- a/addons/report_crm/__terp__.py +++ b/addons/report_crm/__terp__.py @@ -30,7 +30,7 @@ 'website': 'http://www.openerp.com', 'depends': ['crm'], 'init_xml': [], - 'update_xml': ['security/ir.model.access.csv', 'report_crm_view.xml'], + 'update_xml': ['security/ir.model.access.csv', 'report_crm_view.xml', 'report_crm_lead_view.xml'], 'demo_xml': [], 'installable': True, #TODO : After fixed problems , set True 'active': False, diff --git a/addons/report_crm/report_crm.py b/addons/report_crm/report_crm.py index d5e490627b7..55b4bdc3eec 100644 --- a/addons/report_crm/report_crm.py +++ b/addons/report_crm/report_crm.py @@ -39,7 +39,6 @@ class report_crm_case_user(osv.osv): '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), - 'probability': fields.float('Avg. Probability', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), '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), diff --git a/addons/report_crm/report_crm_lead.py b/addons/report_crm/report_crm_lead.py new file mode 100644 index 00000000000..90586ef5c2e --- /dev/null +++ b/addons/report_crm/report_crm_lead.py @@ -0,0 +1,77 @@ +from osv import fields,osv +import tools + +class report_crm_lead_user(osv.osv): + _name = "report.crm.lead.user" + _description = "Leads by user and section" + _auto = False + _inherit = "report.crm.case.user" + _columns = { + 'probability': fields.float('Avg. Probability', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_lead_user') + cr.execute(""" + create or replace view report_crm_lead_user as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.state, + c.user_id, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_lead c + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id + )""") +report_crm_lead_user() + +class report_crm_lead_categ(osv.osv): + _name = "report.crm.lead.categ" + _description = "Leads by section and category" + _auto = False + _inherit = "report.crm.case.categ" + _columns = { + 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]"), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'probability': fields.float('Avg. Probability', readonly=True), + 'delay_close': fields.char('Delay Close', size=20, readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_lead_categ') + cr.execute(""" + create or replace view report_crm_lead_categ as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.categ_id, + c.state, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_lead c + group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id + )""") +report_crm_lead_categ() + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_lead_view.xml b/addons/report_crm/report_crm_lead_view.xml new file mode 100644 index 00000000000..e14b5d46927 --- /dev/null +++ b/addons/report_crm/report_crm_lead_view.xml @@ -0,0 +1,142 @@ + + + + + + + report.crm.lead.user.tree + report.crm.lead.user + + tree + + + + + + + + + + + + report.crm.lead.user.form + report.crm.lead.user + + form + + + + + + + + + + + + + report.crm.lead.user.graph + report.crm.lead.user + graph + + + + + + + + + + + report.crm.lead.user.select + report.crm.lead.user + + search + + + + + + + + Leads by User and Section + report.crm.lead.user + form + tree,graph + + + + + + + + + + report.crm.lead.categ.tree + report.crm.lead.categ + + tree + + + + + + + + + + + + report.crm.lead.categ.form + report.crm.lead.categ + + form + + + + + + + + + + + + + report.crm.lead.categ.graph + report.crm.lead.categ + graph + + + + + + + + + + + report.crm.lead.categ.select + report.crm.lead.categ + + search + + + + + + + + Leads by Categories and Section + report.crm.lead.categ + form + tree,graph + + + + + + + \ No newline at end of file From 3a9920cdb7ae34973ea465c337b19be3fa984d26 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 12:53:11 +0530 Subject: [PATCH 014/131] [Add] report_crm: add the report for Claim by user and section bzr revid: sbh@tinyerp.com-20100120072311-0zb0a7kzrerj1w80 --- addons/crm/crm_claim.py | 1 + addons/crm/crm_claims_view.xml | 2 ++ addons/report_crm/__init__.py | 1 + addons/report_crm/__terp__.py | 6 +++++- addons/report_crm/report_crm_lead_view.xml | 4 ++-- addons/report_crm/report_crm_view.xml | 8 ++++---- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/addons/crm/crm_claim.py b/addons/crm/crm_claim.py index 781ce45bacb..5e83ce1c367 100644 --- a/addons/crm/crm_claim.py +++ b/addons/crm/crm_claim.py @@ -53,6 +53,7 @@ class crm_claim(osv.osv): '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 (%)'), } _defaults = { diff --git a/addons/crm/crm_claims_view.xml b/addons/crm/crm_claims_view.xml index 0e81f4f34e2..17dd87caa50 100644 --- a/addons/crm/crm_claims_view.xml +++ b/addons/crm/crm_claims_view.xml @@ -38,6 +38,7 @@ + @@ -71,6 +72,7 @@ + diff --git a/addons/report_crm/__init__.py b/addons/report_crm/__init__.py index e07c9ee2a69..35390c61256 100644 --- a/addons/report_crm/__init__.py +++ b/addons/report_crm/__init__.py @@ -21,6 +21,7 @@ import report_crm import report_crm_lead +import report_crm_claim # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_crm/__terp__.py b/addons/report_crm/__terp__.py index c007f1fe46f..13e55f6f346 100644 --- a/addons/report_crm/__terp__.py +++ b/addons/report_crm/__terp__.py @@ -30,7 +30,11 @@ 'website': 'http://www.openerp.com', 'depends': ['crm'], 'init_xml': [], - 'update_xml': ['security/ir.model.access.csv', 'report_crm_view.xml', 'report_crm_lead_view.xml'], + 'update_xml': ['security/ir.model.access.csv', + 'report_crm_view.xml', + 'report_crm_lead_view.xml', + 'report_crm_claim.xml', + ], 'demo_xml': [], 'installable': True, #TODO : After fixed problems , set True 'active': False, diff --git a/addons/report_crm/report_crm_lead_view.xml b/addons/report_crm/report_crm_lead_view.xml index e14b5d46927..76f4f5918f8 100644 --- a/addons/report_crm/report_crm_lead_view.xml +++ b/addons/report_crm/report_crm_lead_view.xml @@ -64,7 +64,7 @@ Leads by User and Section report.crm.lead.user form - tree,graph + graph,tree @@ -132,7 +132,7 @@ Leads by Categories and Section report.crm.lead.categ form - tree,graph + graph,tree diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml index e298795eb0f..1167806a6ce 100644 --- a/addons/report_crm/report_crm_view.xml +++ b/addons/report_crm/report_crm_view.xml @@ -83,8 +83,8 @@ tree,graph - - + @@ -142,7 +142,7 @@ tree,graph - + @@ -206,7 +206,7 @@ Cases by Section report.crm.case.section form - tree,graph + graph,tree From fe1082ece5102af063d09bfb767aa91ec12cf5e7 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 13:00:06 +0530 Subject: [PATCH 015/131] [Add]report_crm: add new report for crm_claim bzr revid: sbh@tinyerp.com-20100120073006-o9gy4kxxmrtaqjzw --- addons/report_crm/report_crm_claim.py | 77 ++++++++++++++ addons/report_crm/report_crm_claim.xml | 142 +++++++++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 addons/report_crm/report_crm_claim.py create mode 100644 addons/report_crm/report_crm_claim.xml diff --git a/addons/report_crm/report_crm_claim.py b/addons/report_crm/report_crm_claim.py new file mode 100644 index 00000000000..ac1b589d758 --- /dev/null +++ b/addons/report_crm/report_crm_claim.py @@ -0,0 +1,77 @@ +from osv import fields,osv +import tools + +class report_crm_claim_user(osv.osv): + _name = "report.crm.claim.user" + _description = "Claim by user and section" + _auto = False + _inherit = "report.crm.case.user" + _columns = { + 'probability': fields.float('Avg. Probability', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_claim_user') + cr.execute(""" + create or replace view report_crm_claim_user as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.state, + c.user_id, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_claim c + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id + )""") +report_crm_claim_user() + +class report_crm_claim_categ(osv.osv): + _name = "report.crm.claim.categ" + _description = "Claim by section and category" + _auto = False + _inherit = "report.crm.case.categ" + _columns = { + 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.claim')]"), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'probability': fields.float('Avg. Probability', readonly=True), + 'delay_close': fields.char('Delay Close', size=20, readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_claim_categ') + cr.execute(""" + create or replace view report_crm_claim_categ as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.categ_id, + c.state, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_claim c + group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id + )""") +report_crm_claim_categ() + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_claim.xml b/addons/report_crm/report_crm_claim.xml new file mode 100644 index 00000000000..0039462b6fa --- /dev/null +++ b/addons/report_crm/report_crm_claim.xml @@ -0,0 +1,142 @@ + + + + + + + report.crm.claim.user.tree + report.crm.claim.user + + tree + + + + + + + + + + + + report.crm.claim.user.form + report.crm.claim.user + + form + + + + + + + + + + + + + report.crm.claim.user.graph + report.crm.claim.user + graph + + + + + + + + + + + report.crm.claim.user.select + report.crm.claim.user + + search + + + + + + + + Claim by User and Section + report.crm.claim.user + form + graph,tree + + + + + + + + + + report.crm.claim.categ.tree + report.crm.claim.categ + + tree + + + + + + + + + + + + report.crm.claim.categ.form + report.crm.claim.categ + + form + + + + + + + + + + + + + report.crm.claim.categ.graph + report.crm.claim.categ + graph + + + + + + + + + + + report.crm.claim.categ.select + report.crm.claim.categ + + search + + + + + + + + claims by Categories and Section + report.crm.claim.categ + form + graph,tree + + + + + + + \ No newline at end of file From 1219f2c47344680d9ed7b371716706eb3803f150 Mon Sep 17 00:00:00 2001 From: "uco (OpenERP)" Date: Wed, 20 Jan 2010 13:03:50 +0530 Subject: [PATCH 016/131] [ADD]: Added reports for crm_opportunity. Added remaining report for crm_lead. bzr revid: uco@tinyerp.co.in-20100120073350-qxq65ziii4dzu4qz --- addons/report_crm/__init__.py | 1 + addons/report_crm/__terp__.py | 3 +- addons/report_crm/report_crm.py | 28 +-- addons/report_crm/report_crm_lead.py | 54 +++++ addons/report_crm/report_crm_lead_view.xml | 51 ++++- addons/report_crm/report_crm_opportunity.py | 131 ++++++++++++ .../report_crm_opportunity_view.xml | 191 ++++++++++++++++++ addons/report_crm/report_crm_view.xml | 2 +- 8 files changed, 431 insertions(+), 30 deletions(-) create mode 100644 addons/report_crm/report_crm_opportunity.py create mode 100644 addons/report_crm/report_crm_opportunity_view.xml diff --git a/addons/report_crm/__init__.py b/addons/report_crm/__init__.py index 35390c61256..7a8b9bb3362 100644 --- a/addons/report_crm/__init__.py +++ b/addons/report_crm/__init__.py @@ -22,6 +22,7 @@ import report_crm import report_crm_lead import report_crm_claim +import report_crm_opportunity # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_crm/__terp__.py b/addons/report_crm/__terp__.py index 13e55f6f346..eaaa5d1eaa5 100644 --- a/addons/report_crm/__terp__.py +++ b/addons/report_crm/__terp__.py @@ -33,7 +33,8 @@ 'update_xml': ['security/ir.model.access.csv', 'report_crm_view.xml', 'report_crm_lead_view.xml', - 'report_crm_claim.xml', + 'report_crm_claim.xml', + 'report_crm_opportunity_view.xml', ], 'demo_xml': [], 'installable': True, #TODO : After fixed problems , set True diff --git a/addons/report_crm/report_crm.py b/addons/report_crm/report_crm.py index 55b4bdc3eec..62f5d36a324 100644 --- a/addons/report_crm/report_crm.py +++ b/addons/report_crm/report_crm.py @@ -98,36 +98,11 @@ class report_crm_case_section(osv.osv): _description = "Cases by Section" _auto = False - def _get_data(self, cr, uid, ids, field_name, arg, context={}): - 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_case where section_id =%s and state='%s'"%(case.section_id.id,state)) - state_cases = cr.fetchone()[0] - perc_state = (state_cases / float(case.nbr_cases) ) * 100 - - res[case.id] = perc_state - else: - cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) - logs = cr.fetchone()[0] - - avg_ans = logs / case.nbr_cases - 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_cases': fields.integer('# of Cases', 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), } @@ -141,8 +116,7 @@ class report_crm_case_section(osv.osv): to_char(c.create_date, 'YYYY') as name, to_char(c.create_date, 'MM') as month, count(*) as nbr_cases, - c.section_id as section_id, - 0 as avg_answers + c.section_id as section_id from crm_case c group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id diff --git a/addons/report_crm/report_crm_lead.py b/addons/report_crm/report_crm_lead.py index 90586ef5c2e..13024754ba7 100644 --- a/addons/report_crm/report_crm_lead.py +++ b/addons/report_crm/report_crm_lead.py @@ -73,5 +73,59 @@ class report_crm_lead_categ(osv.osv): )""") report_crm_lead_categ() +class report_crm_lead_section(osv.osv): + _name = "report.crm.lead.section" + _description = "Leads by Section" + _auto = False + _inherit = "report.crm.case.section" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + 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_lead where section_id =%s and state='%s'"%(case.section_id.id,state)) + state_cases = cr.fetchone()[0] + perc_state = (state_cases / float(case.nbr_cases) ) * 100 + + res[case.id] = perc_state + else: + cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr_cases + res[case.id] = avg_ans + + return res + + _columns = { + '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"), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + _order = 'name desc, section_id' + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_lead_section') + cr.execute(""" + create or replace view report_crm_lead_section as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + count(*) as nbr_cases, + c.section_id as section_id, + 0 as avg_answers, + 0.0 as perc_done, + 0.0 as perc_cancel, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_lead c + group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id + )""") +report_crm_lead_section() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_lead_view.xml b/addons/report_crm/report_crm_lead_view.xml index 76f4f5918f8..f9f60d3b39c 100644 --- a/addons/report_crm/report_crm_lead_view.xml +++ b/addons/report_crm/report_crm_lead_view.xml @@ -138,5 +138,54 @@ + + + + report.crm.lead.section.tree + report.crm.lead.section + + tree + + + + + + + + + + + + report.crm.lead.section.graph + report.crm.lead.section + graph + + + + + + + + + + report.crm.lead.section.select + report.crm.lead.section + + search + + + + + + + + Leads by Section + report.crm.lead.section + form + tree,graph + + + + - \ No newline at end of file + diff --git a/addons/report_crm/report_crm_opportunity.py b/addons/report_crm/report_crm_opportunity.py new file mode 100644 index 00000000000..dbd3149556d --- /dev/null +++ b/addons/report_crm/report_crm_opportunity.py @@ -0,0 +1,131 @@ +from osv import fields,osv +import tools + +class report_crm_opportunity_user(osv.osv): + _name = "report.crm.opportunity.user" + _description = "Opportunity by user and section" + _auto = False + _inherit = "report.crm.case.user" + _columns = { + 'probability': fields.float('Avg. Probability', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_opportunity_user') + cr.execute(""" + create or replace view report_crm_opportunity_user as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.state, + c.user_id, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_opportunity c + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id + )""") +report_crm_opportunity_user() + +class report_crm_opportunity_categ(osv.osv): + _name = "report.crm.opportunity.categ" + _description = "Opportunity by section and category" + _auto = False + _inherit = "report.crm.case.categ" + _columns = { + 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'probability': fields.float('Avg. Probability', readonly=True), + 'delay_close': fields.char('Delay Close', size=20, readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_opportunity_categ') + cr.execute(""" + create or replace view report_crm_opportunity_categ as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.categ_id, + c.state, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_opportunity c + group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id + )""") +report_crm_opportunity_categ() + +class report_crm_opportunity_section(osv.osv): + _name = "report.crm.opportunity.section" + _description = "Opportunity by Section" + _auto = False + _inherit = "report.crm.case.section" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + 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_cases) ) * 100 + + res[case.id] = perc_state + else: + cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr_cases + res[case.id] = avg_ans + + return res + + _columns = { + '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"), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + _order = 'name desc, section_id' + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_opportunity_section') + cr.execute(""" + create or replace view report_crm_opportunity_section as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + count(*) as nbr_cases, + c.section_id as section_id, + 0 as avg_answers, + 0.0 as perc_done, + 0.0 as perc_cancel, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_opportunity c + group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id + )""") +report_crm_opportunity_section() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_opportunity_view.xml b/addons/report_crm/report_crm_opportunity_view.xml new file mode 100644 index 00000000000..b03fd73568b --- /dev/null +++ b/addons/report_crm/report_crm_opportunity_view.xml @@ -0,0 +1,191 @@ + + + + + + + report.crm.opportunity.user.tree + report.crm.opportunity.user + + tree + + + + + + + + + + + + report.crm.opportunity.user.form + report.crm.opportunity.user + + form + + + + + + + + + + + + + report.crm.opportunity.user.graph + report.crm.opportunity.user + graph + + + + + + + + + + + report.crm.opportunity.user.select + report.crm.opportunity.user + + search + + + + + + + + Opportunity by User and Section + report.crm.opportunity.user + form + tree,graph + + + + + + + + + + report.crm.opportunity.categ.tree + report.crm.opportunity.categ + + tree + + + + + + + + + + + + report.crm.opportunity.categ.form + report.crm.opportunity.categ + + form + + + + + + + + + + + + + report.crm.opportunity.categ.graph + report.crm.opportunity.categ + graph + + + + + + + + + + + report.crm.opportunity.categ.select + report.crm.opportunity.categ + + search + + + + + + + + Opportunity by Categories and Section + report.crm.opportunity.categ + form + tree,graph + + + + + + + + + report.crm.opportunity.section.tree + report.crm.opportunity.section + + tree + + + + + + + + + + + + report.crm.opportunity.section.graph + report.crm.opportunity.section + graph + + + + + + + + + + report.crm.opportunity.section.select + report.crm.opportunity.section + + search + + + + + + + + Opportunity by Section + report.crm.opportunity.section + form + tree,graph + + + + + + diff --git a/addons/report_crm/report_crm_view.xml b/addons/report_crm/report_crm_view.xml index 1167806a6ce..d5e0dd3ac9e 100644 --- a/addons/report_crm/report_crm_view.xml +++ b/addons/report_crm/report_crm_view.xml @@ -188,7 +188,7 @@ search - + From 3165e54440081b3eab612aae8a4344703f050832 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 14:04:41 +0530 Subject: [PATCH 017/131] [Add] report_crm: add the report crm_claim_section bzr revid: sbh@tinyerp.com-20100120083441-zulhycmvyz7ol3in --- addons/report_crm/report_crm_claim.py | 54 ++++++++++++++++++++++++++ addons/report_crm/report_crm_claim.xml | 53 ++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/addons/report_crm/report_crm_claim.py b/addons/report_crm/report_crm_claim.py index ac1b589d758..57c0df8793f 100644 --- a/addons/report_crm/report_crm_claim.py +++ b/addons/report_crm/report_crm_claim.py @@ -73,5 +73,59 @@ class report_crm_claim_categ(osv.osv): )""") report_crm_claim_categ() +class report_crm_claim_section(osv.osv): + _name = "report.crm.claim.section" + _description = "Claim by Section" + _auto = False + _inherit = "report.crm.case.section" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + 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_claim where section_id =%s and state='%s'"%(case.section_id.id,state)) + state_cases = cr.fetchone()[0] + perc_state = (state_cases / float(case.nbr_cases) ) * 100 + + res[case.id] = perc_state + else: + cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr_cases + res[case.id] = avg_ans + + return res + + _columns = { + '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"), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + _order = 'name desc, section_id' + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_claim_section') + cr.execute(""" + create or replace view report_crm_claim_section as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + count(*) as nbr_cases, + c.section_id as section_id, + 0 as avg_answers, + 0.0 as perc_done, + 0.0 as perc_cancel, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_claim c + group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id + )""") +report_crm_claim_section() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_claim.xml b/addons/report_crm/report_crm_claim.xml index 0039462b6fa..4560e7b389e 100644 --- a/addons/report_crm/report_crm_claim.xml +++ b/addons/report_crm/report_crm_claim.xml @@ -129,7 +129,7 @@ - claims by Categories and Section + Claims by Categories and Section report.crm.claim.categ form graph,tree @@ -137,6 +137,55 @@ - + + + + + report.crm.claim.section.tree + report.crm.claim.section + + tree + + + + + + + + + + + + report.crm.claim.section.graph + report.crm.claim.section + graph + + + + + + + + + + report.crm.claim.section.select + report.crm.claim.section + + search + + + + + + + + Claims by Section + report.crm.claim.section + form + tree,graph + + + + \ No newline at end of file From c44ad943d785392f7c6dba12da0e657c09709906 Mon Sep 17 00:00:00 2001 From: "uco (OpenERP)" Date: Wed, 20 Jan 2010 14:11:20 +0530 Subject: [PATCH 018/131] [ADD]: Added reports for crm_phonecall. bzr revid: uco@tinyerp.co.in-20100120084120-f805nnexiweu8fk5 --- addons/report_crm/__init__.py | 1 + addons/report_crm/__terp__.py | 3 +- addons/report_crm/report_crm_phonecall.py | 127 ++++++++++++ .../report_crm/report_crm_phonecall_view.xml | 187 ++++++++++++++++++ 4 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 addons/report_crm/report_crm_phonecall.py create mode 100644 addons/report_crm/report_crm_phonecall_view.xml diff --git a/addons/report_crm/__init__.py b/addons/report_crm/__init__.py index 7a8b9bb3362..7697ecb2cc8 100644 --- a/addons/report_crm/__init__.py +++ b/addons/report_crm/__init__.py @@ -23,6 +23,7 @@ import report_crm import report_crm_lead import report_crm_claim import report_crm_opportunity +import report_crm_phonecall # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_crm/__terp__.py b/addons/report_crm/__terp__.py index eaaa5d1eaa5..f50660ce8bb 100644 --- a/addons/report_crm/__terp__.py +++ b/addons/report_crm/__terp__.py @@ -34,7 +34,8 @@ 'report_crm_view.xml', 'report_crm_lead_view.xml', 'report_crm_claim.xml', - 'report_crm_opportunity_view.xml', + 'report_crm_opportunity_view.xml', + 'report_crm_phonecall_view.xml', ], 'demo_xml': [], 'installable': True, #TODO : After fixed problems , set True diff --git a/addons/report_crm/report_crm_phonecall.py b/addons/report_crm/report_crm_phonecall.py new file mode 100644 index 00000000000..c23e3357329 --- /dev/null +++ b/addons/report_crm/report_crm_phonecall.py @@ -0,0 +1,127 @@ +from osv import fields,osv +import tools + +class report_crm_phonecall_user(osv.osv): + _name = "report.crm.phonecall.user" + _description = "Phone calls by user and section" + _auto = False + _inherit = "report.crm.case.user" + _columns = { + 'probability': fields.float('Avg. Probability', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_phonecall_user') + cr.execute(""" + create or replace view report_crm_phonecall_user as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.state, + c.user_id, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_phonecall c + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id + )""") +report_crm_phonecall_user() + +class report_crm_phonecall_categ(osv.osv): + _name = "report.crm.phonecall.categ" + _description = "Phone Calls by section and category" + _auto = False + _inherit = "report.crm.case.categ" + _columns = { + 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.phonecall')]"), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'probability': fields.float('Avg. Probability', readonly=True), + 'delay_close': fields.char('Delay Close', size=20, readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_phonecall_categ') + cr.execute(""" + create or replace view report_crm_phonecall_categ as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.categ_id, + c.state, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_phonecall c + group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id + )""") +report_crm_phonecall_categ() + +class report_crm_phonecall_section(osv.osv): + _name = "report.crm.phonecall.section" + _description = "Phonecalls by Section" + _auto = False + _inherit = "report.crm.case.section" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + 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_phonecall where section_id =%s and state='%s'"%(case.section_id.id,state)) + state_cases = cr.fetchone()[0] + perc_state = (state_cases / float(case.nbr_cases) ) * 100 + + res[case.id] = perc_state + else: + cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr_cases + res[case.id] = avg_ans + + return res + + _columns = { + '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"), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + _order = 'name desc, section_id' + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_phonecall_section') + cr.execute(""" + create or replace view report_crm_phonecall_section as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + count(*) as nbr_cases, + c.section_id as section_id, + 0 as avg_answers, + 0.0 as perc_done, + 0.0 as perc_cancel, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_phonecall c + group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id + )""") +report_crm_phonecall_section() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_phonecall_view.xml b/addons/report_crm/report_crm_phonecall_view.xml new file mode 100644 index 00000000000..2ba2c2c0546 --- /dev/null +++ b/addons/report_crm/report_crm_phonecall_view.xml @@ -0,0 +1,187 @@ + + + + + + + report.crm.phonecall.user.tree + report.crm.phonecall.user + + tree + + + + + + + + + + + report.crm.phonecall.user.form + report.crm.phonecall.user + + form + + + + + + + + + + + + report.crm.phonecall.user.graph + report.crm.phonecall.user + graph + + + + + + + + + + + report.crm.phonecall.user.select + report.crm.phonecall.user + + search + + + + + + + + Phone calls by User and Section + report.crm.phonecall.user + form + graph,tree + + + + + + + + + + report.crm.phonecall.categ.tree + report.crm.phonecall.categ + + tree + + + + + + + + + + + report.crm.phonecall.categ.form + report.crm.phonecall.categ + + form + + + + + + + + + + + + report.crm.phonecall.categ.graph + report.crm.phonecall.categ + graph + + + + + + + + + + + report.crm.phonecall.categ.select + report.crm.phonecall.categ + + search + + + + + + + + Phone calls by Categories and Section + report.crm.phonecall.categ + form + graph,tree + + + + + + + + + report.crm.phonecall.section.tree + report.crm.phonecall.section + + tree + + + + + + + + + + + + report.crm.phonecall.section.graph + report.crm.phonecall.section + graph + + + + + + + + + + report.crm.phonecall.section.select + report.crm.phonecall.section + + search + + + + + + + + Phone calls by Section + report.crm.phonecall.section + form + tree,graph + + + + + + From cd05a92fba8010fedbf51c3b85029f64de45f419 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Wed, 20 Jan 2010 14:21:57 +0530 Subject: [PATCH 019/131] [IMP]: caldav: Improvement for table name in query and fixed problem of updating alarm data bzr revid: rpa@openerp.co.in-20100120085157-w50ot6i2a3854gc8 --- addons/caldav/calendar.py | 21 +++++++++++++-------- addons/caldav/common.py | 19 ++++++++++--------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/addons/caldav/calendar.py b/addons/caldav/calendar.py index c746967692c..4e8fc12d481 100644 --- a/addons/caldav/calendar.py +++ b/addons/caldav/calendar.py @@ -127,8 +127,9 @@ class CalDAV(object): if not model: continue uidval = common.openobjectid2uid(cr, data[map_field], model) + model_obj = self.pool.get(model) cr.execute('select id from %s where recurrent_uid=%s' - % (model.replace('.', '_'), data[map_field])) + % (model_obj._table, data[map_field])) r_ids = map(lambda x: x[0], cr.fetchall()) if r_ids: rdata = self.pool.get(model).read(cr, uid, r_ids) @@ -139,11 +140,15 @@ class CalDAV(object): uidval = common.openobjectid2uid(cr, data['recurrent_uid'], model) vevent.add('uid').value = uidval elif field == 'attendee' and data[map_field]: + model = self.__attribute__[field].get('object', False) attendee_obj = self.pool.get('basic.calendar.attendee') - vevent = attendee_obj.export_ical(cr, uid, data[map_field], vevent, context=context) + vevent = attendee_obj.export_ical(cr, uid, model, \ + data[map_field], vevent, context=context) elif field == 'valarm' and data[map_field]: + model = self.__attribute__[field].get('object', False) alarm_obj = self.pool.get('basic.calendar.alarm') - vevent = alarm_obj.export_ical(cr, uid, data[map_field][0], vevent, context=context) + vevent = alarm_obj.export_ical(cr, uid, model, \ + data[map_field][0], vevent, context=context) elif data[map_field]: if map_type == "text": vevent.add(field).value = str(data[map_field]) @@ -341,9 +346,9 @@ class Alarm(CalDAV, osv.osv_memory): 'x-prop': None, } - def export_ical(self, cr, uid, alarm_id, vevent, context={}): + def export_ical(self, cr, uid, model, alarm_id, vevent, context={}): valarm = vevent.add('valarm') - alarm_object = self.pool.get('calendar.alarm') + alarm_object = self.pool.get(model) alarm_data = alarm_object.read(cr, uid, alarm_id, []) # Compute trigger data @@ -427,9 +432,9 @@ class Attendee(CalDAV, osv.osv_memory): vals = map_data(cr, uid, self) return vals - def export_ical(self, cr, uid, attendee_id, vevent, context={}): - attendee_object = self.pool.get('calendar.attendee') - for attendee in attendee_object.read(cr, uid, attendee_id, []): + def export_ical(self, cr, uid, model, attendee_ids, vevent, context={}): + attendee_object = self.pool.get(model) + for attendee in attendee_object.read(cr, uid, attendee_ids, []): attendee_add = vevent.add('attendee') for a_key, a_val in attendee_object.__attribute__.items(): if attendee[a_val['field']] and a_val['field'] != 'cn': diff --git a/addons/caldav/common.py b/addons/caldav/common.py index d82cc369f91..dc3794c0d32 100644 --- a/addons/caldav/common.py +++ b/addons/caldav/common.py @@ -19,7 +19,6 @@ # ############################################################################## - from datetime import datetime, timedelta from datetime import datetime, timedelta from dateutil import parser @@ -27,6 +26,7 @@ from osv import fields, osv from service import web_services from tools.translate import _ import base64 +import pooler import re import time @@ -63,9 +63,10 @@ def uid2openobjectid(cr, uidval, oomodel, rdate): return (False, None) else: model, id, dbname = wematch.groups() + model_obj = pooler.get_pool(cr.dbname).get(model) if (not model == oomodel) or (not dbname == cr.dbname): return (False, None) - qry = 'select distinct(id) from %s' % model.replace('.', '_') + qry = 'select distinct(id) from %s' % model_obj._table if rdate: qry += " where recurrent_id='%s'" % (rdate) cr.execute(qry) @@ -282,8 +283,8 @@ are both optional, but if one occurs, so MUST the other"""), def do_alarm_create(self, cr, uid, ids, model, date, context={}): alarm_obj = self.pool.get('calendar.alarm') - model_obj = self.pool.get('ir.model') - model_id = model_obj.search(cr, uid, [('model', '=', model)])[0] + ir_obj = self.pool.get('ir.model') + model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0] model_obj = self.pool.get(model) for data in model_obj.browse(cr, uid, ids): @@ -309,8 +310,8 @@ are both optional, but if one occurs, so MUST the other"""), } alarm_id = alarm_obj.create(cr, uid, vals) cr.execute('Update %s set caldav_alarm_id=%s, alarm_id=%s \ - where id=%s' % (model.replace('.', '_'), \ - alarm_id, basic_alarm.id, data.id)) + where id=%s' % (model_obj._table, \ + alarm_id, basic_alarm.id, data.id)) cr.commit() return True @@ -323,8 +324,8 @@ are both optional, but if one occurs, so MUST the other"""), alarm_ids = alarm_obj.search(cr, uid, [('model_id', '=', model_id), ('res_id', '=', datas.id)]) if alarm_ids and len(alarm_ids): alarm_obj.unlink(cr, uid, alarm_ids) - cr.execute('Update %s set caldav_alarm_id=NULL, \ - alarm_id=NULL where id=%s' % (self._table, datas.id)) + cr.execute('Update %s set caldav_alarm_id=NULL, alarm_id=NULL\ + where id=%s' % (model_obj._table, datas.id)) cr.commit() return True @@ -716,7 +717,7 @@ rule or repeating pattern for anexception to a recurrence set"), if not id in new_ids: new_ids.append(id) res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context) - if vals.get('alarm_id'): + if vals.has_key('alarm_id'): alarm_obj = self.pool.get('res.alarm') alarm_obj.do_alarm_create(cr, uid, new_ids, self._name, 'date') return res From 2a5ebcdb4dbfe503a5935d150067986da2ae9ecf Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 14:22:45 +0530 Subject: [PATCH 020/131] [Add] report_crm: add the report_crm_fundraising bzr revid: sbh@tinyerp.com-20100120085245-a597tedeblhrb3yp --- addons/report_crm/__init__.py | 1 + addons/report_crm/__terp__.py | 5 +- ...rm_claim.xml => report_crm_claim_view.xml} | 0 addons/report_crm/report_crm_fundraising.py | 131 ++++++++++++ .../report_crm_fundraising_view.xml | 191 ++++++++++++++++++ 5 files changed, 326 insertions(+), 2 deletions(-) rename addons/report_crm/{report_crm_claim.xml => report_crm_claim_view.xml} (100%) create mode 100644 addons/report_crm/report_crm_fundraising.py create mode 100644 addons/report_crm/report_crm_fundraising_view.xml diff --git a/addons/report_crm/__init__.py b/addons/report_crm/__init__.py index 7697ecb2cc8..7a050fae5a7 100644 --- a/addons/report_crm/__init__.py +++ b/addons/report_crm/__init__.py @@ -23,6 +23,7 @@ import report_crm import report_crm_lead import report_crm_claim import report_crm_opportunity +import report_crm_fundraising import report_crm_phonecall # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_crm/__terp__.py b/addons/report_crm/__terp__.py index f50660ce8bb..9d9dae37390 100644 --- a/addons/report_crm/__terp__.py +++ b/addons/report_crm/__terp__.py @@ -33,9 +33,10 @@ 'update_xml': ['security/ir.model.access.csv', 'report_crm_view.xml', 'report_crm_lead_view.xml', - 'report_crm_claim.xml', + 'report_crm_claim_view.xml', 'report_crm_opportunity_view.xml', - 'report_crm_phonecall_view.xml', + 'report_crm_phonecall_view.xml', + 'report_crm_fundraising_view.xml' ], 'demo_xml': [], 'installable': True, #TODO : After fixed problems , set True diff --git a/addons/report_crm/report_crm_claim.xml b/addons/report_crm/report_crm_claim_view.xml similarity index 100% rename from addons/report_crm/report_crm_claim.xml rename to addons/report_crm/report_crm_claim_view.xml diff --git a/addons/report_crm/report_crm_fundraising.py b/addons/report_crm/report_crm_fundraising.py new file mode 100644 index 00000000000..4ee8911a776 --- /dev/null +++ b/addons/report_crm/report_crm_fundraising.py @@ -0,0 +1,131 @@ +from osv import fields,osv +import tools + +class report_crm_fundraising_user(osv.osv): + _name = "report.crm.fundraising.user" + _description = "Fundraising by user and section" + _auto = False + _inherit = "report.crm.case.user" + _columns = { + 'probability': fields.float('Avg. Probability', readonly=True), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_fundraising_user') + cr.execute(""" + create or replace view report_crm_fundraising_user as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.state, + c.user_id, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_fundraising c + group by to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state, c.user_id,c.section_id + )""") +report_crm_fundraising_user() + +class report_crm_fundraising_categ(osv.osv): + _name = "report.crm.fundraising.categ" + _description = "Fundraising by section and category" + _auto = False + _inherit = "report.crm.case.categ" + _columns = { + 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.fundraising')]"), + 'amount_revenue': fields.float('Est.Revenue', readonly=True), + 'amount_costs': fields.float('Est.Cost', readonly=True), + 'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True), + 'probability': fields.float('Avg. Probability', readonly=True), + 'delay_close': fields.char('Delay Close', size=20, readonly=True), + } + + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_fundraising_categ') + cr.execute(""" + create or replace view report_crm_fundraising_categ as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + c.categ_id, + c.state, + c.section_id, + count(*) as nbr, + sum(planned_revenue) as amount_revenue, + sum(planned_cost) as amount_costs, + sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob, + avg(probability)::decimal(16,2) as probability, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_fundraising c + group by c.categ_id,to_char(c.create_date, 'YYYY'), to_char(c.create_date, 'MM'), c.state,c.section_id + )""") +report_crm_fundraising_categ() + +class report_crm_fundraising_section(osv.osv): + _name = "report.crm.fundraising.section" + _description = "Fundraising by Section" + _auto = False + _inherit = "report.crm.case.section" + + def _get_data(self, cr, uid, ids, field_name, arg, context={}): + 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_fundraising where section_id =%s and state='%s'"%(case.section_id.id,state)) + state_cases = cr.fetchone()[0] + perc_state = (state_cases / float(case.nbr_cases) ) * 100 + + res[case.id] = perc_state + else: + cr.execute('select count(*) from crm_case_log l where l.section_id=%s'%(case.section_id.id)) + logs = cr.fetchone()[0] + + avg_ans = logs / case.nbr_cases + res[case.id] = avg_ans + + return res + + _columns = { + '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"), + 'delay_close': fields.char('Delay to close', size=20, readonly=True), + } + _order = 'name desc, section_id' + def init(self, cr): + tools.drop_view_if_exists(cr, 'report_crm_fundraising_section') + cr.execute(""" + create or replace view report_crm_fundraising_section as ( + select + min(c.id) as id, + to_char(c.create_date, 'YYYY') as name, + to_char(c.create_date, 'MM') as month, + count(*) as nbr_cases, + c.section_id as section_id, + 0 as avg_answers, + 0.0 as perc_done, + 0.0 as perc_cancel, + to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close + from + crm_fundraising c + group by to_char(c.create_date, 'YYYY'),to_char(c.create_date, 'MM'),c.section_id + )""") +report_crm_fundraising_section() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/report_crm/report_crm_fundraising_view.xml b/addons/report_crm/report_crm_fundraising_view.xml new file mode 100644 index 00000000000..7b8165c67fe --- /dev/null +++ b/addons/report_crm/report_crm_fundraising_view.xml @@ -0,0 +1,191 @@ + + + + + + + report.crm.fundraising.user.tree + report.crm.fundraising.user + + tree + + + + + + + + + + + + report.crm.fundraising.user.form + report.crm.fundraising.user + + form + + + + + + + + + + + + + report.crm.fundraising.user.graph + report.crm.fundraising.user + graph + + + + + + + + + + + report.crm.fundraising.user.select + report.crm.fundraising.user + + search + + + + + + + + fundraising by User and Section + report.crm.fundraising.user + form + tree,graph + + + + + + + + + + report.crm.fundraising.categ.tree + report.crm.fundraising.categ + + tree + + + + + + + + + + + + report.crm.fundraising.categ.form + report.crm.fundraising.categ + + form + + + + + + + + + + + + + report.crm.fundraising.categ.graph + report.crm.fundraising.categ + graph + + + + + + + + + + + report.crm.fundraising.categ.select + report.crm.fundraising.categ + + search + + + + + + + + Fundraising by Categories and Section + report.crm.fundraising.categ + form + tree,graph + + + + + + + + + report.crm.fundraising.section.tree + report.crm.fundraising.section + + tree + + + + + + + + + + + + report.crm.fundraising.section.graph + report.crm.fundraising.section + graph + + + + + + + + + + report.crm.fundraising.section.select + report.crm.fundraising.section + + search + + + + + + + + Fundraising by Section + report.crm.fundraising.section + form + tree,graph + + + + + + From a91d0db3512b49e828adc7be4f9a6396bf6a2bdd Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 14:58:52 +0530 Subject: [PATCH 021/131] [IMP]report_crm:Modfiy the view of all report bzr revid: sbh@tinyerp.com-20100120092852-wwz5eq1tw38ve1f4 --- addons/report_crm/report_crm_claim_view.xml | 8 ++++---- addons/report_crm/report_crm_fundraising_view.xml | 14 +++++++------- addons/report_crm/report_crm_lead_view.xml | 8 ++++---- addons/report_crm/report_crm_opportunity_view.xml | 12 ++++++------ addons/report_crm/report_crm_phonecall_view.xml | 8 ++++---- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/addons/report_crm/report_crm_claim_view.xml b/addons/report_crm/report_crm_claim_view.xml index 4560e7b389e..562ccbec8a4 100644 --- a/addons/report_crm/report_crm_claim_view.xml +++ b/addons/report_crm/report_crm_claim_view.xml @@ -65,7 +65,7 @@ report.crm.claim.user form graph,tree - + @@ -133,7 +133,7 @@ report.crm.claim.categ form graph,tree - + @@ -182,8 +182,8 @@ Claims by Section report.crm.claim.section form - tree,graph - + graph,tree + diff --git a/addons/report_crm/report_crm_fundraising_view.xml b/addons/report_crm/report_crm_fundraising_view.xml index 7b8165c67fe..0ee491fc5b0 100644 --- a/addons/report_crm/report_crm_fundraising_view.xml +++ b/addons/report_crm/report_crm_fundraising_view.xml @@ -61,11 +61,11 @@ - fundraising by User and Section + Fundraising by User and Section report.crm.fundraising.user form - tree,graph - + graph,tree + @@ -132,8 +132,8 @@ Fundraising by Categories and Section report.crm.fundraising.categ form - tree,graph - + graph,tree + @@ -182,8 +182,8 @@ Fundraising by Section report.crm.fundraising.section form - tree,graph - + graph,tree + diff --git a/addons/report_crm/report_crm_lead_view.xml b/addons/report_crm/report_crm_lead_view.xml index f9f60d3b39c..a7ec7aa4f55 100644 --- a/addons/report_crm/report_crm_lead_view.xml +++ b/addons/report_crm/report_crm_lead_view.xml @@ -65,7 +65,7 @@ report.crm.lead.user form graph,tree - + @@ -133,7 +133,7 @@ report.crm.lead.categ form graph,tree - + @@ -182,8 +182,8 @@ Leads by Section report.crm.lead.section form - tree,graph - + graph,tree + diff --git a/addons/report_crm/report_crm_opportunity_view.xml b/addons/report_crm/report_crm_opportunity_view.xml index b03fd73568b..6e2f82d99fa 100644 --- a/addons/report_crm/report_crm_opportunity_view.xml +++ b/addons/report_crm/report_crm_opportunity_view.xml @@ -64,8 +64,8 @@ Opportunity by User and Section report.crm.opportunity.user form - tree,graph - + graph,tree + @@ -132,8 +132,8 @@ Opportunity by Categories and Section report.crm.opportunity.categ form - tree,graph - + graph,tree + @@ -182,8 +182,8 @@ Opportunity by Section report.crm.opportunity.section form - tree,graph - + graph,tree + diff --git a/addons/report_crm/report_crm_phonecall_view.xml b/addons/report_crm/report_crm_phonecall_view.xml index 2ba2c2c0546..c45a6936bab 100644 --- a/addons/report_crm/report_crm_phonecall_view.xml +++ b/addons/report_crm/report_crm_phonecall_view.xml @@ -63,7 +63,7 @@ report.crm.phonecall.user form graph,tree - + @@ -129,7 +129,7 @@ report.crm.phonecall.categ form graph,tree - + @@ -178,8 +178,8 @@ Phone calls by Section report.crm.phonecall.section form - tree,graph - + graph,tree + From f1b57f919f485f7579a4bde159c74bf63b6d5d3e Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 15:12:42 +0530 Subject: [PATCH 022/131] [IMP] crm: add the menu of Meeting Categories and modify the data bzr revid: sbh@tinyerp.com-20100120094242-bkj6geg9wlp3xss6 --- addons/crm/crm_meeting_data.xml | 4 ++-- addons/crm/crm_meeting_view.xml | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/addons/crm/crm_meeting_data.xml b/addons/crm/crm_meeting_data.xml index 22b6d9ed29c..9d8cbba044e 100644 --- a/addons/crm/crm_meeting_data.xml +++ b/addons/crm/crm_meeting_data.xml @@ -7,12 +7,12 @@ Customer Meeting - + Internal Meeting - + Phone Call diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index b1b3c4b61f5..30179762560 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -1,6 +1,20 @@ + # ------------------------------------------------------ + # Meetings Categories + # ------------------------------------------------------ + + + Meeting Categories + crm.case.categ + form + + [('object_id.model', '=', 'crm.meeting')] + {'object_id':'crm.meeting'} + + + # ------------------------------------------------------ # Meetings # ------------------------------------------------------ From 913484860ea94d77f63202249e03a3edbd967f86 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Wed, 20 Jan 2010 15:27:24 +0530 Subject: [PATCH 023/131] [ADD,REF]: caldav: Added new module base_calendar for basic calendar functionality and related improvement in caldav module bzr revid: rpa@openerp.co.in-20100120095724-50ex0yp8q61w77kz --- addons/base_calendar/__init__.py | 24 +++++++++ addons/base_calendar/__terp__.py | 50 +++++++++++++++++++ .../base_calendar.py} | 33 ++++++++++-- .../security/ir.model.access.csv | 6 +++ addons/caldav/__init__.py | 3 +- addons/caldav/__terp__.py | 8 ++- addons/caldav/{common.py => caldav.py} | 33 ++---------- addons/caldav/security/ir.model.access.csv | 5 -- addons/crm/crm_phonecall.py | 1 - 9 files changed, 118 insertions(+), 45 deletions(-) create mode 100644 addons/base_calendar/__init__.py create mode 100644 addons/base_calendar/__terp__.py rename addons/{caldav/calendar.py => base_calendar/base_calendar.py} (95%) create mode 100644 addons/base_calendar/security/ir.model.access.csv rename addons/caldav/{common.py => caldav.py} (97%) diff --git a/addons/base_calendar/__init__.py b/addons/base_calendar/__init__.py new file mode 100644 index 00000000000..f2664029c43 --- /dev/null +++ b/addons/base_calendar/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import base_calendar + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_calendar/__terp__.py b/addons/base_calendar/__terp__.py new file mode 100644 index 00000000000..747958cde38 --- /dev/null +++ b/addons/base_calendar/__terp__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + + +{ + "name" : "Basic Calendar Functionality", + "version" : "1.0", + "depends" : [ + "base", + ], + 'description': """ + Contains basic functionality for caldav system like: + - Maintenance of basic objects needed for caldav calendar + * Event(Meeting) + * Todo(Task) + * Reminder + * Attendee + - Availabilities of synchronisation using WebDAV +""", + "author" : "Tiny", + 'category': 'Generic Modules/Others', + 'website': 'http://www.openerp.com', + "init_xml" : [], + "demo_xml" : [], + "update_xml" : [ + 'security/ir.model.access.csv', + ], + "installable" : True, + "active" : False, +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/caldav/calendar.py b/addons/base_calendar/base_calendar.py similarity index 95% rename from addons/caldav/calendar.py rename to addons/base_calendar/base_calendar.py index 4e8fc12d481..6a93b22e7da 100644 --- a/addons/caldav/calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -23,7 +23,7 @@ from datetime import datetime, timedelta from dateutil import parser from dateutil.rrule import * from osv import osv -import common +import pooler import re import vobject @@ -32,6 +32,33 @@ import vobject # R-1 Required and can come only once # R-n Required and can come more than once +def uid2openobjectid(cr, uidval, oomodel, rdate): + __rege = re.compile(r'OpenObject-([\w|\.]+)_([0-9]+)@(\w+)$') + wematch = __rege.match(uidval.encode('utf8')) + if not wematch: + return (False, None) + else: + model, id, dbname = wematch.groups() + model_obj = pooler.get_pool(cr.dbname).get(model) + if (not model == oomodel) or (not dbname == cr.dbname): + return (False, None) + qry = 'select distinct(id) from %s' % model_obj._table + if rdate: + qry += " where recurrent_id='%s'" % (rdate) + cr.execute(qry) + r_id = cr.fetchone() + if r_id: + return (id, r_id[0]) + cr.execute(qry) + ids = map(lambda x: str(x[0]), cr.fetchall()) + if id in ids: + return (id, None) + return False + +def openobjectid2uid(cr, uidval, oomodel): + value = 'OpenObject-%s_%s@%s' % (oomodel, uidval, cr.dbname) + return value + def map_data(cr, uid, obj): vals = {} for map_dict in obj.__attribute__: @@ -126,7 +153,7 @@ class CalDAV(object): model = context.get('model', None) if not model: continue - uidval = common.openobjectid2uid(cr, data[map_field], model) + uidval = openobjectid2uid(cr, data[map_field], model) model_obj = self.pool.get(model) cr.execute('select id from %s where recurrent_uid=%s' % (model_obj._table, data[map_field])) @@ -137,7 +164,7 @@ class CalDAV(object): for revents in rcal.contents['vevent']: ical.contents['vevent'].append(revents) if data.get('recurrent_uid', None): - uidval = common.openobjectid2uid(cr, data['recurrent_uid'], model) + uidval = openobjectid2uid(cr, data['recurrent_uid'], model) vevent.add('uid').value = uidval elif field == 'attendee' and data[map_field]: model = self.__attribute__[field].get('object', False) diff --git a/addons/base_calendar/security/ir.model.access.csv b/addons/base_calendar/security/ir.model.access.csv new file mode 100644 index 00000000000..dd84c390183 --- /dev/null +++ b/addons/base_calendar/security/ir.model.access.csv @@ -0,0 +1,6 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_basic_calendar_all","basic.calendar","model_basic_calendar",,1,1,1,1 +"access_basic_calendar_event_all","basic.calendar.event","model_basic_calendar_event",,1,1,1,1 +"access_basic_calendar_attendee_all","basic.calendar.attendee","model_basic_calendar_attendee",,1,1,1,1 +"access_calendar_todo_all","basic.calendar.todo","model_basic_calendar_todo",,1,1,1,1 +"access_basic_calendar_alarm_all","basic.calendar.alarm","model_basic_calendar_alarm",,1,1,1,1 diff --git a/addons/caldav/__init__.py b/addons/caldav/__init__.py index 2b6241a8f9d..88bf2e4389f 100644 --- a/addons/caldav/__init__.py +++ b/addons/caldav/__init__.py @@ -19,8 +19,7 @@ # ############################################################################## -import calendar -import common +import caldav import wizard # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/caldav/__terp__.py b/addons/caldav/__terp__.py index 694b0f4365d..76ead234c03 100644 --- a/addons/caldav/__terp__.py +++ b/addons/caldav/__terp__.py @@ -24,16 +24,14 @@ "name" : "CalDAV", "version" : "1.0", "depends" : [ - "base", + "base_calendar", ], 'description': """ - To develop a full featured caldav system that support: - - access through webdav (based on xrg code) + Full featured caldav system that support: - alerts (create requests) - recurring events (*) - invitations to others people (exactly like sunbird) - - availabilities of users/calendars - - full day events""", +""", "author" : "Tiny", 'category': 'Generic Modules/Others', 'website': 'http://www.openerp.com', diff --git a/addons/caldav/common.py b/addons/caldav/caldav.py similarity index 97% rename from addons/caldav/common.py rename to addons/caldav/caldav.py index dc3794c0d32..00d39433d1f 100644 --- a/addons/caldav/common.py +++ b/addons/caldav/caldav.py @@ -23,6 +23,7 @@ from datetime import datetime, timedelta from datetime import datetime, timedelta from dateutil import parser from osv import fields, osv +from base_calendar import base_calendar from service import web_services from tools.translate import _ import base64 @@ -56,32 +57,6 @@ def real_id2caldav_id(real_id, recurrent_date): return '%d-%s' % (real_id, recurrent_date) return real_id -def uid2openobjectid(cr, uidval, oomodel, rdate): - __rege = re.compile(r'OpenObject-([\w|\.]+)_([0-9]+)@(\w+)$') - wematch = __rege.match(uidval.encode('utf8')) - if not wematch: - return (False, None) - else: - model, id, dbname = wematch.groups() - model_obj = pooler.get_pool(cr.dbname).get(model) - if (not model == oomodel) or (not dbname == cr.dbname): - return (False, None) - qry = 'select distinct(id) from %s' % model_obj._table - if rdate: - qry += " where recurrent_id='%s'" % (rdate) - cr.execute(qry) - r_id = cr.fetchone() - if r_id: - return (id, r_id[0]) - cr.execute(qry) - ids = map(lambda x: str(x[0]), cr.fetchall()) - if id in ids: - return (id, None) - return False - -def openobjectid2uid(cr, uidval, oomodel): - value = 'OpenObject-%s_%s@%s' % (oomodel, uidval, cr.dbname) - return value def _links_get(self, cr, uid, context={}): obj = self.pool.get('res.request.link') @@ -480,7 +455,7 @@ class calendar_event(osv.osv): 'url': {'field': 'caldav_url', 'type': 'text'}, 'recurrence-id': {'field': 'recurrent_id', 'type': 'datetime'}, 'attendee': {'field': 'attendee_ids', 'type': 'many2many', 'object': 'calendar.attendee'}, - 'categories': {'field': 'categ_id', 'type': 'many2one', 'object': 'crm.meeting.categ'}, +# 'categories': {'field': 'categ_id', 'type': 'many2one', 'object': 'crm.meeting.categ'}, 'comment': None, 'contact': None, 'exdate': {'field': 'exdate', 'type': 'datetime'}, @@ -586,7 +561,7 @@ rule or repeating pattern for anexception to a recurrence set"), vals = event_obj.import_ical(cr, uid, file_content) ids = [] for val in vals: - exists, r_id = uid2openobjectid(cr, val['id'], self._name, \ + exists, r_id = base_calendar.uid2openobjectid(cr, val['id'], self._name, \ val.get('recurrent_id')) if val.has_key('create_date'): val.pop('create_date') val['caldav_url'] = context.get('url') or '' @@ -886,7 +861,7 @@ class calendar_todo(osv.osv): hours = (val['planned_hours'].seconds / float(3600)) + \ (val['planned_hours'].days * 24) val['planned_hours'] = hours - exists, r_id = uid2openobjectid(cr, val['id'], self._name, val.get('recurrent_id')) + exists, r_id = base_calendar.uid2openobjectid(cr, val['id'], self._name, val.get('recurrent_id')) val.pop('id') if exists: self.write(cr, uid, [exists], val) diff --git a/addons/caldav/security/ir.model.access.csv b/addons/caldav/security/ir.model.access.csv index fabb3c42484..8a720533140 100644 --- a/addons/caldav/security/ir.model.access.csv +++ b/addons/caldav/security/ir.model.access.csv @@ -1,9 +1,4 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_basic_calendar_all","basic.calendar","model_basic_calendar",,1,1,1,1 -"access_basic_calendar_event_all","basic.calendar.event","model_basic_calendar_event",,1,1,1,1 -"access_basic_calendar_attendee_all","basic.calendar.attendee","model_basic_calendar_attendee",,1,1,1,1 -"access_calendar_todo_all","basic.calendar.todo","model_basic_calendar_todo",,1,1,1,1 -"access_calendar_todo_all","basic.calendar.todo","model_basic_calendar_todo",,1,1,1,1 "access_calendar_attendee","calendar.attendee","model_calendar_attendee",,1,1,1,1 "access_calendar_alarm","calendar.alarm","model_calendar_alarm",,1,1,1,1 "access_res_alarm","res.alarm","model_res_alarm",,1,1,1,1 diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 1a0c4c1b78d..4c548af86e1 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -19,7 +19,6 @@ # ############################################################################## -from caldav import common from dateutil.rrule import * from osv import fields, osv import datetime From edab64052a3eb15f707ebb68b30e4c274842b621 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Wed, 20 Jan 2010 15:52:40 +0530 Subject: [PATCH 024/131] [IMP] crm: remove the widget from categ_id bzr revid: sbh@tinyerp.com-20100120102240-9cge8yzodfjcapc4 --- addons/crm/crm_meeting_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 30179762560..44b14484cf6 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -36,7 +36,7 @@ - + Date: Wed, 20 Jan 2010 15:54:57 +0530 Subject: [PATCH 025/131] [IMP]: crm, caldav: Set proper start and end date in edit event wizard bzr revid: rpa@openerp.co.in-20100120102457-2j0w9hplxzu3i1nc --- addons/caldav/wizard/wizard_cal_edit_event.py | 13 ++++++++----- addons/crm/crm_meeting_view.xml | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/caldav/wizard/wizard_cal_edit_event.py b/addons/caldav/wizard/wizard_cal_edit_event.py index cfe98c65ea8..c7f4e44dbd1 100644 --- a/addons/caldav/wizard/wizard_cal_edit_event.py +++ b/addons/caldav/wizard/wizard_cal_edit_event.py @@ -45,17 +45,20 @@ class event_edit_this(wizard.interface): 'alarm_id': {'string': 'Reminder', 'type': 'many2one', 'relation': 'res.alarm'}, } - def _default_values(self, cr, uid, data, context): + def _default_values(self, cr, uid, data, context=None): model = data.get('model') model_obj = pooler.get_pool(cr.dbname).get(model) - event = model_obj.read(cr, uid, data['id'], ['name', 'location', 'date',\ - 'date_deadline', 'alarm_id']) + event = model_obj.read(cr, uid, data['id'], ['name', 'location', 'alarm_id']) + event.update({ + 'date': context.get('date'), + 'date_deadline': context.get('date_deadline') + }) return event - def _modify_this(self, cr, uid, datas, *args): + def _modify_this(self, cr, uid, datas, context=None): model = datas.get('model') model_obj = pooler.get_pool(cr.dbname).get(model) - new_id = model_obj.modify_this(cr, uid, [datas['id']], datas['form']) + new_id = model_obj.modify_this(cr, uid, [datas['id']], datas['form'], context) value = { 'name': 'New event', 'view_type': 'form', diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index b1b3c4b61f5..96bee035b05 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -84,7 +84,7 @@