[FIX] Fixes lp1103072
authorholger@therp.nl <holger@therp.nl>
Tue, 3 Sep 2013 12:49:15 +0000 (12:49 +0000)
committerStefan Rijnhart <stefan@therp.nl>
Wed, 2 Jul 2014 17:41:12 +0000 (19:41 +0200)
      - Make survey module usable for external users

      Thanks to holger@therp.nl

https://launchpad.net/bugs/1103072

addons/survey/__openerp__.py
addons/survey/security/ir.model.access.csv
addons/survey/security/survey_security.xml
addons/survey/survey_report.xml
addons/survey/survey_view.xml
addons/survey/wizard/survey_answer.py
addons/survey/wizard/survey_send_invitation.py
addons/survey/wizard/survey_send_invitation.xml

index d5e4c3a..b09d10c 100644 (file)
@@ -36,12 +36,12 @@ user name and password for the invitation of the survey.
     'author': 'OpenERP SA',
     'depends': ['mail'],
     'data': [
+        'security/survey_security.xml',
+        'security/ir.model.access.csv',
         'survey_report.xml',
         'survey_data.xml',
         'wizard/survey_selection.xml',
         'wizard/survey_answer.xml',
-        'security/survey_security.xml',
-        'security/ir.model.access.csv',
         'survey_view.xml',
         'wizard/survey_print_statistics.xml',
         'wizard/survey_print_answer.xml',
index b613e22..bfff836 100644 (file)
@@ -22,3 +22,13 @@ access_survey_history_survey_user,survey.history.survey.user,model_survey_histor
 access_survey_response_line_survey_user,survey.response.line.survey.user,model_survey_response_line,base.group_survey_user,1,1,1,1\r
 access_survey_question_column_heading_survey_user,survey.question.column.heading.survey.user,model_survey_question_column_heading,base.group_survey_user,1,0,0,0\r
 access_survey_question_column_heading_user,survey.question.column.heading user,model_survey_question_column_heading,base.group_tool_user,1,1,1,1\r
+access_survey_invitee,survey.invitee,model_survey,base.group_survey_invitee,1,0,0,0\r
+access_survey_page_invitee,survey.page.invitee,model_survey_page,base.group_survey_invitee,1,0,0,0\r
+access_survey_question_invitee,survey.question.invitee,model_survey_question,base.group_survey_invitee,1,0,0,0\r
+access_survey_answer_invitee,survey.answer.invitee,model_survey_answer,base.group_survey_invitee,1,0,0,0\r
+access_survey_response_invitee,survey.response.invitee,model_survey_response,base.group_survey_invitee,1,1,1,0\r
+access_survey_response_line_invitee,survey.response.line.invitee,model_survey_response_line,base.group_survey_invitee,1,1,1,0\r
+access_survey_response_answer_invitee,survey.response.answer.invitee,model_survey_response_answer,base.group_survey_invitee,1,1,1,0\r
+access_survey_history_invitee,survey.history.invitee,model_survey_history,base.group_survey_invitee,1,0,1,0\r
+access_survey_question_column_heading_invitee,survey.question.column.heading.invitee,model_survey_question_column_heading,base.group_survey_invitee,1,0,0,0\r
+access_res_partner_invitee,res.partner.invitee,base.model_res_partner,base.group_survey_invitee,1,0,0,0\r
index 3b0cf58..e4a24e9 100644 (file)
             <field name="name">Survey / User</field>
             <field name="users" eval="[(4, ref('base.user_root'))]"/>
         </record>
-    </data>
+        <record model="res.groups" id="base.group_survey_invitee">
+            <field name="name">Survey / Invitee</field>
+        </record>
+       <record id="rule_survey_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey" />
+           <field name="domain_force">[("invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_page_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_page" />
+           <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_question_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_question" />
+           <field name="domain_force">[("survey.invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_answer_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_answer" />
+           <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_response_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_response" />
+           <field name="domain_force">[("user_id", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_response_line_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_response_line" />
+           <field name="domain_force">[("response_id.user_id", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_response_answer_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_response_answer" />
+           <field name="domain_force">[("response_id.response_id.user_id", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_history_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_history" />
+           <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_survey_question_column_heading_invitee" model="ir.rule">
+           <field name="model_id" ref="model_survey_question_column_heading" />
+           <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+       <record id="rule_res_partner_invitee" model="ir.rule">
+           <field name="model_id" ref="base.model_res_partner" />
+           <field name="domain_force">[("id", "=", user.id)]</field>
+           <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
+       </record>
+     </data>
 </openerp>
index 647be4c..b8129f9 100644 (file)
@@ -6,20 +6,23 @@
                 id="report_survey_form"
                 model="survey"
                 name="survey.form"
-                string="Survey"/>
+                string="Survey"
+                groups="base.group_survey_user" />
 
         <report auto="True"
                 id="survey_analysis"
                 model="survey"
                 name="survey.analysis"
                 rml=""
-                string="Survey Statistics"/>
+                string="Survey Statistics"
+                groups="base.group_survey_user" />
 
         <report auto="True"
                 id="survey_browse_response"
                 model="survey"
                 name="survey.browse.response"
                 rml=""
-                string="Survey Answers"/>
+                string="Survey Answers"
+                groups="base.group_survey_user" />
     </data>
 </openerp>
index 89081ee..5559e58 100644 (file)
             </field>
         </record>
 
+        <record model="ir.ui.view" id="survey_form_invitee">
+            <field name="name">survey_form_invitee</field>
+            <field name="model">survey</field>
+            <field name="groups_id" eval="[(6, 0, [ref('base.group_survey_invitee')])]" />
+            <field name="priority" eval="1" />
+            <field name="inherit_id" ref="survey_form" />
+            <field name="arch" type="xml">
+                <data>
+                    <form position="replace">
+                        <form string="Survey" version="7.0">
+                            <sheet>
+                                <field name="state" invisible="True" />
+                                <div class="oe_button_box oe_right">
+                                    <button name="fill_survey" states="open" string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/>
+                                </div>
+                                <div class="oe_title">
+                                    <label for="title" class="oe_edit_only"/>
+                                    <h1>
+                                        <field name="title" attrs="{'readonly':[('state','=','close')]}"/>
+                                    </h1>
+                                </div>
+                                <field name="note" />
+                            </sheet>
+                        </form>
+                    </form>
+                </data>
+            </field>
+        </record>
         <record id="survey_search" model="ir.ui.view">
             <field name="name">survey_search</field>
             <field name="model">survey</field>
             id="act_survey_pages"
             name="Pages"
             res_model="survey.page"
-            src_model="survey"/>
+            src_model="survey"
+            groups="base.group_survey_user"/>
 
         <act_window
             context="{'search_default_survey': active_id, 'default_survey': active_id}"
             id="act_survey_question"
             name="Questions"
             res_model="survey.question"
-            src_model="survey"/>
+            src_model="survey"
+            groups="base.group_survey_user"/>
 
 
         <act_window
             id="act_survey_page_question"
             name="Questions"
             res_model="survey.question"
-            src_model="survey.page"/>
+            src_model="survey.page" />
 
         <act_window domain="[('question_id', '=', active_id)]"
             id="act_survey_answer"
             id="act_survey_request"
             name="Survey Requests"
             res_model="survey.request"
-            src_model="survey"/>
+            src_model="survey"
+            groups="base.group_survey_user"/>
 
     </data>
 </openerp>
index aa7f199..ee50854 100644 (file)
@@ -27,7 +27,7 @@ from time import strftime
 
 from openerp import addons, netsvc, tools
 from openerp.osv import fields, osv
-from openerp.tools import to_xml
+from openerp.tools import to_xml, SUPERUSER_ID
 from openerp.tools.translate import _
 from openerp.tools.safe_eval import safe_eval
 
@@ -124,7 +124,7 @@ class survey_question_wiz(osv.osv_memory):
                                 raise osv.except_osv(_('Warning!'),_("You cannot answer this survey more than %s times.") % (user_limit))
 
                         if sur_rec.max_response_limit and sur_rec.max_response_limit <= sur_rec.tot_start_survey and not sur_name_rec.page_no + 1:
-                            survey_obj.write(cr, uid, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})
+                            survey_obj.write(cr, SUPERUSER_ID, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})
 
                         p_id = p_id[sur_name_rec.page_no + 1]
                         surv_name_wiz.write(cr, uid, [context['sur_name_id'],], {'page_no' : sur_name_rec.page_no + 1})
@@ -397,8 +397,8 @@ class survey_question_wiz(osv.osv_memory):
                     result['fields'] = fields
                     result['context'] = context
                 else:
-                    survey_obj.write(cr, uid, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
-                    sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'})
+                    survey_obj.write(cr, SUPERUSER_ID, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
+                    sur_response_obj.write(cr, uid, int(sur_name_read.response), {'state' : 'done'})
 
                     # mark the survey request as done; call 'survey_req_done' on its actual model
                     survey_req_obj = self.pool.get(context.get('active_model'))
@@ -606,7 +606,7 @@ class survey_question_wiz(osv.osv_memory):
                                               'date': strftime('%Y-%m-%d %H:%M:%S'), 'survey_id': sur_name_read['survey_id'][0]})
             survey_id = sur_name_read['survey_id'][0]
             sur_rec = survey_obj.read(cr, uid, survey_id)
-            survey_obj.write(cr, uid, survey_id,  {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})
+            survey_obj.write(cr, SUPERUSER_ID, survey_id,  {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})
             if context.has_key('cur_id'):
                 if context.has_key('request') and context.get('request',False):
                     self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id})
index 177815c..1b9839c 100644 (file)
@@ -77,7 +77,12 @@ You can access this survey with the following parameters:
  Your login ID: %%(login)s\n
  Your password: %%(passwd)s\n
 \n\n
-Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context))
+Thanks,''') % (
+            name, 
+            self.pool.get('ir.config_parameter').get_param(
+                cr, uid, 'web.base.url', default='http://localhost:8069',
+                context=context)
+                + '#id=%d&view_type=form&model=survey' % sur.id)
         return data
 
     def create_report(self, cr, uid, res_ids, report_name=False, file_name=False):
@@ -108,8 +113,8 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we
         mail_message = self.pool.get('mail.message')
 
         model_data_obj = self.pool.get('ir.model.data')
-        group_id = model_data_obj._get_id(cr, uid, 'base', 'group_survey_user')
-        group_id = model_data_obj.browse(cr, uid, group_id, context=context).res_id
+        group_id = model_data_obj.get_object_reference(
+                cr, uid, 'base', 'group_survey_invitee')[1]
 
         act_id = self.pool.get('ir.actions.act_window')
         act_id = act_id.search(cr, uid, [('res_model', '=' , 'survey.name.wiz'), \
@@ -183,7 +188,9 @@ Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'we
                                 'address_id': partner.id,
                                 'groups_id': [[6, 0, [group_id]]],
                                 'action_id': act_id[0],
-                                'survey_id': [[6, 0, survey_ids]]
+                                'survey_id': [[6, 0, survey_ids]],
+                                'partner_id': partner.id,
+                                'tz': context.get('tz'),
                                }
                     user = user_ref.create(cr, uid, res_data)
                     if user not in new_user:
index a611973..4bc29d8 100644 (file)
@@ -45,7 +45,8 @@
         <act_window id="action_act_view_survey_send_invitation"
             key2="client_action_multi" name="Send Invitations"
             res_model="survey.send.invitation" src_model="survey"
-            view_mode="form" target="new" view_type="form" />
+            view_mode="form" target="new" view_type="form"
+            groups="base.group_survey_user"/>
 
         <!-- Survey send invitation Display Log Form View -->