From 1ffbf94250a66a3ee72a572b59c148dca42edc91 Mon Sep 17 00:00:00 2001
From: jordan <jordan@le-filament.com>
Date: Wed, 19 Aug 2020 18:38:21 +0200
Subject: [PATCH] [add] button "sauvegarder et quitter"

---
 __init__.py             |  1 +
 controllers/__init__.py |  4 +++
 controllers/main.py     | 60 +++++++++++++++++++++++++++++++++++++++++
 templates/layout.xml    |  3 ++-
 4 files changed, 67 insertions(+), 1 deletion(-)
 create mode 100644 controllers/__init__.py
 create mode 100644 controllers/main.py

diff --git a/__init__.py b/__init__.py
index 4f121fd..36c841a 100644
--- a/__init__.py
+++ b/__init__.py
@@ -2,3 +2,4 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from . import models
+from . import controllers
diff --git a/controllers/__init__.py b/controllers/__init__.py
new file mode 100644
index 0000000..a676f81
--- /dev/null
+++ b/controllers/__init__.py
@@ -0,0 +1,4 @@
+# © 2020 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import main
diff --git a/controllers/main.py b/controllers/main.py
new file mode 100644
index 0000000..87f423e
--- /dev/null
+++ b/controllers/main.py
@@ -0,0 +1,60 @@
+# © 2020 Le Filament (<https://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import logging
+import json
+
+from odoo import http, SUPERUSER_ID
+from odoo.addons.survey.controllers.main import Survey
+from odoo.http import request
+
+_logger = logging.getLogger(__name__)
+
+
+class WebsiteSurveyExtend(Survey):
+
+    # TODO - Si possible : trouver une manière d'hériter plutôt que réécrire
+    # AJAX submission of a page
+    @http.route(['/survey/submit/<model("survey.survey"):survey>'], type='http', methods=['POST'], auth='public', website=True)
+    def submit(self, survey, **post):
+        _logger.debug('Incoming data: %s', post)
+        page_id = int(post['page_id'])
+        questions = request.env['survey.question'].search([('page_id', '=', page_id)])
+
+        # Answer validation
+        errors = {}
+        for question in questions:
+            answer_tag = "%s_%s_%s" % (survey.id, page_id, question.id)
+            errors.update(question.validate_question(post, answer_tag))
+
+        ret = {}
+        if len(errors):
+            # Return errors messages to webpage
+            ret['errors'] = errors
+        else:
+            # Store answers into database
+            try:
+                user_input = request.env['survey.user_input'].sudo().search([('token', '=', post['token'])], limit=1)
+            except KeyError:  # Invalid token
+                return request.render("survey.403", {'survey': survey})
+            user_id = request.env.user.id if user_input.type != 'link' else SUPERUSER_ID
+
+            for question in questions:
+                answer_tag = "%s_%s_%s" % (survey.id, page_id, question.id)
+                request.env['survey.user_input_line'].sudo(user=user_id).save_lines(user_input.id, question, post,
+                                                                                    answer_tag)
+            save_quit = post['button_submit'] == 'save_quit'
+            go_back = post['button_submit'] == 'previous'
+            next_page, _, last = request.env['survey.survey'].next_page(user_input, page_id, go_back=go_back)
+            vals = {'last_displayed_page_id': page_id}
+            if next_page is None and not go_back:
+                vals.update({'state': 'done'})
+            else:
+                vals.update({'state': 'skip'})
+            user_input.sudo(user=user_id).write(vals)
+            ret['redirect'] = '/survey/fill/%s/%s' % (survey.id, post['token'])
+            if go_back:
+                ret['redirect'] += '/prev'
+            if save_quit:
+                ret['redirect'] = 'https://longtimelabel.com/'
+        return json.dumps(ret)
diff --git a/templates/layout.xml b/templates/layout.xml
index 0ce5839..68fd0cb 100644
--- a/templates/layout.xml
+++ b/templates/layout.xml
@@ -160,7 +160,8 @@
                     </t>
                     <div class="text-right mt16 mb16 mr32">
                         <button t-if="survey.users_can_go_back and page_nr > 0" type="submit" class="btn ethikis-btn-green" name="button_submit" value="previous">Previous page</button>
-                        <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="next">Save or continue</button>
+                        <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="save_quit">Sauvegarder et quitter</button>
+                        <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="next">Page suivante</button>
                         <button t-if="last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="finish">Submit survey</button>
                     </div>
                     <div class="float-left">
-- 
GitLab