diff options
| author | Harry (OpenERP) <hmo@tinyerp.com> | 2011-12-14 17:59:24 +0530 |
|---|---|---|
| committer | Harry (OpenERP) <hmo@tinyerp.com> | 2011-12-14 17:59:24 +0530 |
| commit | 092f97b32b35af6a40b9d2ae70c3159da2fb235f (patch) | |
| tree | 2974d3719af9338cd0b1814da900d7e9ca8d4779 /addons/crm_profiling | |
| parent | 593f5f571bbc49673975afc405e9345ef3457b92 (diff) | |
| parent | e36dc8c5e3ca3da1474747bae5ec87fea19b23b8 (diff) | |
[MERGE] merged with trunk-development-branch
bzr revid: hmo@tinyerp.com-20111214122924-izzibrz1yz67rt7g
Diffstat (limited to 'addons/crm_profiling')
| -rw-r--r-- | addons/crm_profiling/__openerp__.py | 8 | ||||
| -rw-r--r-- | addons/crm_profiling/crm_profiling.py | 40 | ||||
| -rw-r--r-- | addons/crm_profiling/crm_profiling_demo.xml | 9 | ||||
| -rw-r--r-- | addons/crm_profiling/crm_profiling_view.xml | 9 | ||||
| -rw-r--r-- | addons/crm_profiling/crm_profiling_wizard.xml | 5 | ||||
| -rw-r--r-- | addons/crm_profiling/security/ir.model.access.csv | 14 | ||||
| -rw-r--r-- | addons/crm_profiling/test/process/profiling.yml (renamed from addons/crm_profiling/test/test_crm_profiling.yml) | 12 | ||||
| -rw-r--r-- | addons/crm_profiling/wizard/open_questionnaire.py | 92 | ||||
| -rw-r--r-- | addons/crm_profiling/wizard/open_questionnaire_view.xml | 86 |
9 files changed, 168 insertions, 107 deletions
diff --git a/addons/crm_profiling/__openerp__.py b/addons/crm_profiling/__openerp__.py index 656f8360f0b..fdc85ba3d4d 100644 --- a/addons/crm_profiling/__openerp__.py +++ b/addons/crm_profiling/__openerp__.py @@ -21,7 +21,7 @@ { - 'name': 'Profiling Tools', + 'name': 'Customer Profiling', 'version': '1.3', 'category': 'Marketing', 'complexity': "easy", @@ -39,9 +39,11 @@ It also has been merged with the earlier CRM & SRM segmentation tool because the 'website': 'http://www.openerp.com', 'depends': ['base', 'crm'], 'init_xml': [], - 'update_xml': ['security/ir.model.access.csv', 'crm_profiling_view.xml'], + 'update_xml': ['security/ir.model.access.csv', 'wizard/open_questionnaire_view.xml', 'crm_profiling_view.xml'], 'demo_xml': ['crm_profiling_demo.xml'], - 'test': ['test/test_crm_profiling.yml'], + 'test': [ + #'test/process/profiling.yml', #TODO:It's not debuging because problem to write data for open.questionnaire from partner section. + ], 'installable': True, 'active': False, 'certificate': '0033984979005', diff --git a/addons/crm_profiling/crm_profiling.py b/addons/crm_profiling/crm_profiling.py index 59137966da0..587ddbe0b52 100644 --- a/addons/crm_profiling/crm_profiling.py +++ b/addons/crm_profiling/crm_profiling.py @@ -159,30 +159,6 @@ class questionnaire(osv.osv): _name="crm_profiling.questionnaire" _description= "Questionnaire" - def build_form(self, cr, uid, data, context=None): - """ - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param data: Get Data - @param context: A standard dictionary for contextual values """ - - query = """ - select name, id - from crm_profiling_question - where id in ( select question from profile_questionnaire_quest_rel where questionnaire = %s)""" - res = cr.execute(query, (data['form']['questionnaire_name'],)) - result = cr.fetchall() - quest_fields={} - quest_form='''<?xml version="1.0"?> - <form string="%s">''' % _('Questionnaire') - for name, oid in result: - quest_form = quest_form + '<field name="quest_form%d"/><newline/>' % (oid,) - quest_fields['quest_form%d' % (oid,)] = {'string': name, 'type': 'many2one', \ - 'relation': 'crm_profiling.answer', 'domain': [('question_id','=',oid)] } - quest_form = quest_form + '''</form>''' - return quest_form, quest_fields - _columns = { 'name': fields.char("Questionnaire",size=128, required=True), 'description':fields.text("Description", required=True), @@ -210,25 +186,19 @@ class partner(osv.osv): "partner","answer","Answers"), } - def _questionnaire_compute(self, cr, uid, data, context=None): + def _questionnaire_compute(self, cr, uid, answers, context=None): """ @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param data: Get Data @param context: A standard dictionary for contextual values """ - - temp = [] - for x in data['form']: - if x.startswith("quest_form") and data['form'][x] != 0 : - temp.append(data['form'][x]) - + partner_id = context.get('active_id') query = "select answer from partner_question_rel where partner=%s" - cr.execute(query, (data['id'],)) + cr.execute(query, (partner_id,)) for x in cr.fetchall(): - temp.append(x[0]) - - self.write(cr, uid, [data['id']], {'answers_ids':[[6, 0, temp]]}, context=context) + answers.append(x[0]) + self.write(cr, uid, [partner_id], {'answers_ids': [[6, 0, answers]]}, context=context) return {} diff --git a/addons/crm_profiling/crm_profiling_demo.xml b/addons/crm_profiling/crm_profiling_demo.xml index 1789e8bace8..6a0ca130ec3 100644 --- a/addons/crm_profiling/crm_profiling_demo.xml +++ b/addons/crm_profiling/crm_profiling_demo.xml @@ -102,7 +102,7 @@ Profiles / crm.segmentation --> - <record model="crm.segmentation" id="crm_segmentation0"> + <record model="crm.segmentation" id="crm.crm_segmentation0"> <field name="name">OpenERP partners</field> <field name="answer_yes" eval="[(6,0,[partner_tiny1])]" /> <field name="categ_id" ref="base.res_partner_category_2"/> @@ -111,22 +111,23 @@ <record model="crm.segmentation" id="crm_segmentation1"> <field name="name">Bronze partners</field> <field name="answer_yes" eval="[(6,0,[partner_quality1])]" /> - <field name="parent_id" ref="crm_segmentation0"/> + <field name="parent_id" ref="crm.crm_segmentation0"/> <field name="categ_id" ref="base.res_partner_category_3"/> <field name="profiling_active">True</field> </record> <record model="crm.segmentation" id="crm_segmentation2"> <field name="name">Silver partners</field> <field name="answer_yes" eval="[(6,0,[partner_quality2])]" /> - <field name="parent_id" ref="crm_segmentation0"/> + <field name="parent_id" ref="crm.crm_segmentation0"/> <field name="categ_id" ref="base.res_partner_category_4"/> <field name="profiling_active">True</field> </record> <record model="crm.segmentation" id="crm_segmentation3"> <field name="name">Gold partners</field> <field name="answer_yes" eval="[(6,0,[partner_quality3])]" /> - <field name="parent_id" ref="crm_segmentation0"/> + <field name="parent_id" ref="crm.crm_segmentation0"/> <field name="categ_id" ref="base.res_partner_category_5"/> + <field name="exclusif">True</field> <field name="profiling_active">True</field> </record> <record model="crm.segmentation" id="crm_segmentation4"> diff --git a/addons/crm_profiling/crm_profiling_view.xml b/addons/crm_profiling/crm_profiling_view.xml index 258de2e4e2d..a54d3d4b0a9 100644 --- a/addons/crm_profiling/crm_profiling_view.xml +++ b/addons/crm_profiling/crm_profiling_view.xml @@ -2,13 +2,6 @@ <openerp> <data> - <wizard - string="Using a questionnaire" - model="crm_profiling.questionnaire" - name="open_questionnaire" - menu="False" - id="wizard_open_questionnaire"/> - <record model="ir.actions.act_window" id="open_questionnaires"> <field name="name">Questionnaires</field> <field name="res_model">crm_profiling.questionnaire</field> @@ -140,7 +133,7 @@ <notebook position="inside"> <page string="Profiling"> <button string="Use a questionnaire" - name="%(wizard_open_questionnaire)d" type="action" colspan="1" + name="%(action_open_questionnaire)d" type="action" colspan="1" icon="gtk-justify-fill" /> <newline/> <field name="answers_ids" colspan="4" nolabel="1"/> diff --git a/addons/crm_profiling/crm_profiling_wizard.xml b/addons/crm_profiling/crm_profiling_wizard.xml deleted file mode 100644 index 39d436a6bd9..00000000000 --- a/addons/crm_profiling/crm_profiling_wizard.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data> - </data> -</openerp> diff --git a/addons/crm_profiling/security/ir.model.access.csv b/addons/crm_profiling/security/ir.model.access.csv index 43e1528fddb..24fd7009c6a 100644 --- a/addons/crm_profiling/security/ir.model.access.csv +++ b/addons/crm_profiling/security/ir.model.access.csv @@ -1,7 +1,7 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_profiling_answer_salesman","crm_profiling.answer.salesman","model_crm_profiling_answer","base.group_sale_salesman",1,1,1,0 -"access_crm_profiling_answer_manager","crm_profiling.answer.manager","model_crm_profiling_answer","base.group_sale_manager",1,1,1,1 -"access_crm_profiling_question_salesman","crm_profiling.question.salesman","model_crm_profiling_question","base.group_sale_salesman",1,1,1,0 -"access_crm_profiling_question_manager","crm_profiling.question.manager","model_crm_profiling_question","base.group_sale_manager",1,1,1,1 -"access_crm_profiling_questionnarie_salesman","crm_profiling.questionnarie.salesman","model_crm_profiling_questionnaire","base.group_sale_salesman",1,1,1,0 -"access_crm_profiling_questionnarie_manager","crm_profiling.questionnarie.manager","model_crm_profiling_questionnaire","base.group_sale_manager",1,1,1,1 +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_crm_profiling_answer_salesman,crm_profiling.answer.salesman,model_crm_profiling_answer,base.group_sale_salesman,1,1,1,0
+access_crm_profiling_answer_manager,crm_profiling.answer.manager,model_crm_profiling_answer,base.group_sale_manager,1,1,1,1
+access_crm_profiling_question_salesman,crm_profiling.question.salesman,model_crm_profiling_question,base.group_sale_salesman,1,1,1,0
+access_crm_profiling_question_manager,crm_profiling.question.manager,model_crm_profiling_question,base.group_sale_manager,1,1,1,1
+access_crm_profiling_questionnarie_salesman,crm_profiling.questionnarie.salesman,model_crm_profiling_questionnaire,base.group_sale_salesman,1,1,1,0
+access_crm_profiling_questionnarie_manager,crm_profiling.questionnarie.manager,model_crm_profiling_questionnaire,base.group_sale_manager,1,1,1,1
diff --git a/addons/crm_profiling/test/test_crm_profiling.yml b/addons/crm_profiling/test/process/profiling.yml index 2b70cac592b..99fe2da1733 100644 --- a/addons/crm_profiling/test/test_crm_profiling.yml +++ b/addons/crm_profiling/test/process/profiling.yml @@ -32,15 +32,14 @@ name: John category_id: - res_partner_category_customers0 - answers_ids: - - crm_profiling_answer_openerppartner0 - Define the answers and category to partner. - !python {model: res.partner}: | data ={'form': {'questionnaire_name': ref('res_partner_john0')}, 'ids': [ref('res_partner_john0')], 'report_type': 'pdf', 'model': 'res.partner', 'id': ref('res_partner_john0')} - self._questionnaire_compute(cr, uid, data, context) + context['active_id'] = ref('res_partner_john0') + self._questionnaire_compute(cr, uid, [ref('crm_profiling_answer_openerppartner0')], context) - | I start by creating new Questionnaire. - @@ -51,13 +50,6 @@ - crm_profiling.activity_sector - crm_profiling.nb_employees - crm_profiling.partner_level -- | - I create the form for the "Base questionnaire". -- - !python {model: crm_profiling.questionnaire}: | - context.update({'active_id':ref('res_partner_john0')}) - data ={'form': {'questionnaire_name': ref('res_partner_john0')}, 'ids': [ref('res_partner_john0')], 'report_type': 'pdf', 'model': 'res.partner', 'id': ref('res_partner_john0')} - self.build_form(cr, uid, data, context) - I create a segmentation record. - diff --git a/addons/crm_profiling/wizard/open_questionnaire.py b/addons/crm_profiling/wizard/open_questionnaire.py index 91b82a02d1a..b13c67640fc 100644 --- a/addons/crm_profiling/wizard/open_questionnaire.py +++ b/addons/crm_profiling/wizard/open_questionnaire.py @@ -18,50 +18,72 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## -import pooler -import wizard -from tools import UpdateableStr, UpdateableDict -_QUEST_FORM = UpdateableStr() -_QUEST_FIELDS=UpdateableDict() +from osv import osv, fields +from tools.translate import _ -class open_questionnaire(wizard.interface): +class open_questionnaire_line(osv.osv_memory): + _name = 'open.questionnaire.line' + _rec_name = 'question_id' + _columns = { + 'question_id': fields.many2one('crm_profiling.question','Question', required=True), + 'answer_id': fields.many2one('crm_profiling.answer', 'Answer'), + 'wizard_id': fields.many2one('open.questionnaire', 'Questionnaire'), + } - def _questionnaire_compute(self, cr, uid, data, context): - pooler.get_pool(cr.dbname).get(data['model'])._questionnaire_compute(cr, uid, data, context) - return {} +open_questionnaire_line() +class open_questionnaire(osv.osv_memory): + _name = 'open.questionnaire' + _columns = { + 'questionnaire_id': fields.many2one('crm_profiling.questionnaire', 'Questionnaire name'), + 'question_ans_ids': fields.one2many('open.questionnaire.line', 'wizard_id', 'Question / Answers'), + } - def build_form(self, cr, uid, data, context): - quest_form, quest_fields = pooler.get_pool(cr.dbname).get('crm_profiling.questionnaire').build_form(cr, uid, data, context) - _QUEST_FORM. __init__(quest_form) - _QUEST_FIELDS.__init__(quest_fields) - return{} + def default_get(self, cr, uid, fields, context=None): + if context is None: context = {} + res = super(open_questionnaire, self).default_get(cr, uid, fields, context=context) + questionnaire_id = context.get('questionnaire_id', False) + if questionnaire_id and 'question_ans_ids' in fields: + query = """ + select question as question_id from profile_questionnaire_quest_rel where questionnaire = %s""" + cr.execute(query, (questionnaire_id,)) + result = cr.dictfetchall() + res.update(question_ans_ids=result) + return res - _questionnaire_choice_arch = '''<?xml version="1.0"?> - <form string="Questionnaire"> - <field name="questionnaire_name"/> - </form>''' + def questionnaire_compute(self, cr, uid, ids, context=None): + """ Adds selected answers in partner form """ + model = context.get('active_model') + answers = [] + if model == 'res.partner': + data = self.browse(cr, uid, ids[0], context=context) + for d in data.question_ans_ids: + if d.answer_id: + answers.append(d.answer_id.id) + self.pool.get(model)._questionnaire_compute(cr, uid, answers, context=context) + return {'type': 'ir.actions.act_window_close'} - _questionnaire_choice_fields = { - 'questionnaire_name': {'string': 'Questionnaire name', 'type': 'many2one', 'relation': 'crm_profiling.questionnaire', 'required': True }, - } - states = { - 'init': { - 'actions': [], - 'result': {'type': 'form', 'arch': _questionnaire_choice_arch, 'fields': _questionnaire_choice_fields, 'state':[('end', 'Cancel','gtk-cancel'), ('open', 'Open Questionnaire','terp-camera_test')]} - }, - 'open': { - 'actions': [build_form], - 'result': {'type': 'form', 'arch':_QUEST_FORM, 'fields': _QUEST_FIELDS, 'state':[('end', 'Cancel','gtk-cancel'), ('compute', 'Save Data','terp-stock_format-scientific')]} - }, - 'compute': { - 'actions': [], - 'result': {'type': 'action', 'action': _questionnaire_compute, 'state':'end'} + def build_form(self, cr, uid, ids, context=None): + """ Dynamically generates form according to selected questionnaire """ + models_data = self.pool.get('ir.model.data') + result = models_data._get_id(cr, uid, 'crm_profiling', 'open_questionnaire_form') + res_id = models_data.browse(cr, uid, result, context=context).res_id + datas = self.browse(cr, uid, ids[0], context=context) + context.update({'questionnaire_id': datas.questionnaire_id.id}) + + return { + 'name': _('Questionnaire'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'open.questionnaire', + 'type': 'ir.actions.act_window', + 'views': [(res_id,'form')], + 'target': 'new', + 'context': context } - } -open_questionnaire('open_questionnaire') +open_questionnaire() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_profiling/wizard/open_questionnaire_view.xml b/addons/crm_profiling/wizard/open_questionnaire_view.xml new file mode 100644 index 00000000000..88955f43af4 --- /dev/null +++ b/addons/crm_profiling/wizard/open_questionnaire_view.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" ?> +<openerp> + <data> + + <record id="view_open_questionnaire_form" model="ir.ui.view"> + <field name="name">Open Questionnaires</field> + <field name="model">open.questionnaire</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Questionnaires"> + <field name="questionnaire_id" required="1"/> + <newline/> + <separator string="" colspan="4"/> + <group col="4" colspan="4"> + <group col="2" colspan="2"/> + <button special="cancel" icon="gtk-cancel" string="Cancel"/> + <button name="build_form" string="Open Questionnaire" icon="terp-camera_test" type="object"/> + </group> + </form> + </field> + </record> + + <record model="ir.actions.act_window" id="action_open_questionnaire"> + <field name="name">Open Questionnaire</field> + <field name="res_model">open.questionnaire</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="view_id" ref="view_open_questionnaire_form"/> + <field name="target">new</field> + </record> + + <record id="open_questionnaire_form" model="ir.ui.view"> + <field name="name">open.questionnaire.form</field> + <field name="model">open.questionnaire</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form> + <separator colspan="4" string="Questionnaire"/> + <field name="question_ans_ids" colspan="4" nolabel="1" mode="tree,form" width="550" height="200"/> + <separator string="" colspan="4" /> + <label string="" colspan="2"/> + <group col="2" colspan="2"> + <button icon='gtk-cancel' special="cancel" string="_Cancel" /> + <button name="questionnaire_compute" string="Save Data" icon="terp-stock_format-scientific" colspan="1" type="object"/> + </group> + </form> + </field> + </record> + + <record id="view_open_questionnaire_line_tree" model="ir.ui.view"> + <field name="name">open.questionnaire.line.list</field> + <field name="model">open.questionnaire.line</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree editable="bottom" string="Questionnaire"> + <field name="question_id"/> + <field name="answer_id" domain="[('question_id', '=', question_id)]"/> + </tree> + </field> + </record> + + <record id="view_open_questionnaire_line_form" model="ir.ui.view"> + <field name="name">open.questionnaire.line.form</field> + <field name="model">open.questionnaire.line</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Questionnaire"> + <field name="question_id"/> + <field name="answer_id" domain="[('question_id', '=', question_id)]"/> + </form> + </field> + </record> + + <!-- Questionnaire form view --> + <!--<act_window + context="{}" + id="act_open_questionnaire" + name="Using a Questionnaire" + res_model="open.questionnaire" + src_model="crm_profiling.questionnaire" + view_id="view_open_questionnaire_form" + target="new" + view_mode="form"/>--> + + </data> +</openerp> |
