Browse Source

Nov 30: [ADD] Initial commit 'survey_upload_file'

pull/195/merge
Cybrosys Technologies 7 months ago
parent
commit
387a6e6b90
  1. 42
      survey_upload_file/README.rst
  2. 22
      survey_upload_file/__init__.py
  3. 49
      survey_upload_file/__manifest__.py
  4. 7
      survey_upload_file/doc/RELEASE_NOTES.md
  5. 24
      survey_upload_file/models/__init__.py
  6. 38
      survey_upload_file/models/survey_question.py
  7. 83
      survey_upload_file/models/survey_user_input.py
  8. 50
      survey_upload_file/models/survey_user_input_line.py
  9. BIN
      survey_upload_file/static/description/assets/icons/check.png
  10. BIN
      survey_upload_file/static/description/assets/icons/chevron.png
  11. BIN
      survey_upload_file/static/description/assets/icons/cogs.png
  12. BIN
      survey_upload_file/static/description/assets/icons/consultation.png
  13. BIN
      survey_upload_file/static/description/assets/icons/ecom-black.png
  14. BIN
      survey_upload_file/static/description/assets/icons/education-black.png
  15. BIN
      survey_upload_file/static/description/assets/icons/hotel-black.png
  16. BIN
      survey_upload_file/static/description/assets/icons/license.png
  17. BIN
      survey_upload_file/static/description/assets/icons/lifebuoy.png
  18. BIN
      survey_upload_file/static/description/assets/icons/manufacturing-black.png
  19. BIN
      survey_upload_file/static/description/assets/icons/pos-black.png
  20. BIN
      survey_upload_file/static/description/assets/icons/puzzle.png
  21. BIN
      survey_upload_file/static/description/assets/icons/restaurant-black.png
  22. BIN
      survey_upload_file/static/description/assets/icons/service-black.png
  23. BIN
      survey_upload_file/static/description/assets/icons/trading-black.png
  24. BIN
      survey_upload_file/static/description/assets/icons/training.png
  25. BIN
      survey_upload_file/static/description/assets/icons/update.png
  26. BIN
      survey_upload_file/static/description/assets/icons/user.png
  27. BIN
      survey_upload_file/static/description/assets/icons/wrench.png
  28. BIN
      survey_upload_file/static/description/assets/misc/categories.png
  29. BIN
      survey_upload_file/static/description/assets/misc/check-box.png
  30. BIN
      survey_upload_file/static/description/assets/misc/compass.png
  31. BIN
      survey_upload_file/static/description/assets/misc/corporate.png
  32. BIN
      survey_upload_file/static/description/assets/misc/customer-support.png
  33. BIN
      survey_upload_file/static/description/assets/misc/cybrosys-logo.png
  34. BIN
      survey_upload_file/static/description/assets/misc/features.png
  35. BIN
      survey_upload_file/static/description/assets/misc/logo.png
  36. BIN
      survey_upload_file/static/description/assets/misc/pictures.png
  37. BIN
      survey_upload_file/static/description/assets/misc/pie-chart.png
  38. BIN
      survey_upload_file/static/description/assets/misc/right-arrow.png
  39. BIN
      survey_upload_file/static/description/assets/misc/star.png
  40. BIN
      survey_upload_file/static/description/assets/misc/support.png
  41. BIN
      survey_upload_file/static/description/assets/misc/whatsapp.png
  42. BIN
      survey_upload_file/static/description/assets/modules/i-1.gif
  43. BIN
      survey_upload_file/static/description/assets/modules/i-2.png
  44. BIN
      survey_upload_file/static/description/assets/modules/i-3.png
  45. BIN
      survey_upload_file/static/description/assets/modules/i-5.png
  46. BIN
      survey_upload_file/static/description/assets/modules/i-6.png
  47. BIN
      survey_upload_file/static/description/assets/modules/ii-4.png
  48. BIN
      survey_upload_file/static/description/assets/screenshots/1.png
  49. BIN
      survey_upload_file/static/description/assets/screenshots/10.png
  50. BIN
      survey_upload_file/static/description/assets/screenshots/11.png
  51. BIN
      survey_upload_file/static/description/assets/screenshots/12.png
  52. BIN
      survey_upload_file/static/description/assets/screenshots/13.png
  53. BIN
      survey_upload_file/static/description/assets/screenshots/14.png
  54. BIN
      survey_upload_file/static/description/assets/screenshots/15.png
  55. BIN
      survey_upload_file/static/description/assets/screenshots/16.png
  56. BIN
      survey_upload_file/static/description/assets/screenshots/2.png
  57. BIN
      survey_upload_file/static/description/assets/screenshots/3.png
  58. BIN
      survey_upload_file/static/description/assets/screenshots/4.png
  59. BIN
      survey_upload_file/static/description/assets/screenshots/5.png
  60. BIN
      survey_upload_file/static/description/assets/screenshots/6.png
  61. BIN
      survey_upload_file/static/description/assets/screenshots/7.png
  62. BIN
      survey_upload_file/static/description/assets/screenshots/8.png
  63. BIN
      survey_upload_file/static/description/assets/screenshots/9.png
  64. BIN
      survey_upload_file/static/description/assets/screenshots/hero.gif
  65. BIN
      survey_upload_file/static/description/banner.jpg
  66. BIN
      survey_upload_file/static/description/icon.png
  67. 592
      survey_upload_file/static/description/index.html
  68. 116
      survey_upload_file/static/src/js/survey_form_attachment.js
  69. 23
      survey_upload_file/views/survey_question_views.xml
  70. 63
      survey_upload_file/views/survey_templates.xml
  71. 20
      survey_upload_file/views/survey_user_views.xml

42
survey_upload_file/README.rst

@ -0,0 +1,42 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
File Upload In Survey
=====================
This module is used for attachment of files in Survey Form
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
-------
Developer: (V15) Mohammed Dilshad Tk @Cybrosys, Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

22
survey_upload_file/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
from . import models

49
survey_upload_file/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
{
'name': "File Upload In Survey",
'version': "15.0.1.0.0",
'category': 'Extra Tools',
'summary': 'Attachment of File in Survey Form',
'description': 'This module is used for attachments of file in Survey Form,'
'You can also add multiple file attachment to Survey Form .',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['survey'],
'assets': {
'web.assets_frontend': [
'survey_upload_file/static/src/js/survey_form_attachment.js',
],
},
'data': [
'views/survey_question_views.xml',
'views/survey_user_views.xml',
'views/survey_templates.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

7
survey_upload_file/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <survey_upload_file>
#### 27.11.2024
#### Version 15.0.1.0.0
#### ADD
- Initial Commit for File Upload In Survey

24
survey_upload_file/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
from . import survey_question
from . import survey_user_input_line
from . import survey_user_input

38
survey_upload_file/models/survey_question.py

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
from odoo import fields, models
class SurveyQuestion(models.Model):
"""
This class extends the 'survey.question' model to add new functionality
for file uploads.
"""
_inherit = 'survey.question'
question_type = fields.Selection(
selection_add=[('upload_file', 'Upload File')],
help='Select the type of question to create.')
upload_multiple_file = fields.Boolean(string='Upload Multiple File',
help='Check this box if you want to '
'allow users to upload '
'multiple files')

83
survey_upload_file/models/survey_user_input.py

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
from odoo import models
class SurveyUserInput(models.Model):
"""
This class extends the 'survey.user_input' model to add custom
functionality for saving user answers.
Methods:
save_lines: Save the user's answer for the given question
_save_line_file:Save the user's file upload answer for the given
question
_get_line_answer_file_upload_values:
Get the values to use when creating or updating a user input line
for a file upload answer
"""
_inherit = "survey.user_input"
def save_lines(self, question, answer, comment=None):
"""Save the user's answer for the given question."""
old_answers = self.env['survey.user_input.line'].search([
('user_input_id', '=', self.id),
('question_id', '=', question.id), ])
if question.question_type in 'upload_file':
res = self._save_line_file(question, old_answers, answer)
else:
res = super().save_lines(question, answer, comment)
return res
def _save_line_file(self, question, old_answers, answer):
""" Save the user's file upload answer for the given question."""
vals = self._get_line_answer_file_upload_values(question,
'upload_file', answer)
if old_answers:
old_answers.write(vals)
return old_answers
else:
return self.env['survey.user_input.line'].create(vals)
def _get_line_answer_file_upload_values(self, question, answer_type,
answer):
"""Get the values to use when creating or updating a user input line
for a file upload answer."""
vals = {
'user_input_id': self.id,
'question_id': question.id,
'skipped': False,
'answer_type': answer_type,
}
if answer_type == 'upload_file':
file_data = answer[0]
file_name = answer[1]
attachment_ids = []
for file in range(len(answer[1])):
attachment = self.env['ir.attachment'].create({
'name': file_name[file],
'type': 'binary',
'datas': file_data[file],
})
attachment_ids.append(attachment.id)
vals['value_file_data_ids'] = attachment_ids
return vals

50
survey_upload_file/models/survey_user_input_line.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Mohammed Dilshad Tk (odoo@cybrosys.com)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>.
#
################################################################################
from odoo import api, fields, models
class SurveyUserInputLine(models.Model):
"""
This class extends the 'survey.user_input.line' model to add additional
fields and constraints for file uploads.
Methods:
_check_answer_type_skipped:Check that a line's answer type is
not set to 'upload_file' if the line is skipped
"""
_inherit = "survey.user_input.line"
answer_type = fields.Selection(
selection_add=[('upload_file', 'Upload File')],
help="The type of answer for this question (upload_file if the user "
"is uploading a file).")
value_file_data_ids = fields.Many2many('ir.attachment',
help="The attachments "
"corresponding to the user's "
"file upload answer, if any.")
@api.constrains('skipped', 'answer_type')
def _check_answer_type_skipped(self):
""" Check that a line's answer type is not set to 'upload_file' if
the line is skipped."""
for line in self:
if line.answer_type != 'upload_file':
super(SurveyUserInputLine, line)._check_answer_type_skipped()

BIN
survey_upload_file/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
survey_upload_file/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
survey_upload_file/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
survey_upload_file/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
survey_upload_file/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
survey_upload_file/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
survey_upload_file/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
survey_upload_file/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
survey_upload_file/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
survey_upload_file/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
survey_upload_file/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
survey_upload_file/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
survey_upload_file/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
survey_upload_file/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
survey_upload_file/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
survey_upload_file/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
survey_upload_file/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
survey_upload_file/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
survey_upload_file/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
survey_upload_file/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
survey_upload_file/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
survey_upload_file/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
survey_upload_file/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
survey_upload_file/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
survey_upload_file/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
survey_upload_file/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
survey_upload_file/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
survey_upload_file/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
survey_upload_file/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
survey_upload_file/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
survey_upload_file/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
survey_upload_file/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
survey_upload_file/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
survey_upload_file/static/description/assets/modules/i-1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
survey_upload_file/static/description/assets/modules/i-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
survey_upload_file/static/description/assets/modules/i-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
survey_upload_file/static/description/assets/modules/i-5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
survey_upload_file/static/description/assets/modules/i-6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
survey_upload_file/static/description/assets/modules/ii-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
survey_upload_file/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
survey_upload_file/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
survey_upload_file/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
survey_upload_file/static/description/assets/screenshots/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
survey_upload_file/static/description/assets/screenshots/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
survey_upload_file/static/description/assets/screenshots/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
survey_upload_file/static/description/assets/screenshots/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
survey_upload_file/static/description/assets/screenshots/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
survey_upload_file/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
survey_upload_file/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
survey_upload_file/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
survey_upload_file/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
survey_upload_file/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
survey_upload_file/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
survey_upload_file/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
survey_upload_file/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
survey_upload_file/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

BIN
survey_upload_file/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
survey_upload_file/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

592
survey_upload_file/static/description/index.html

@ -0,0 +1,592 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" />
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
File Upload In Survey
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">File Upload In Survey Adds Single Or Multiple File Upload Options In Survey.
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;" />
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn more about this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View screenshots for this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
File Upload In Survey Odoo app adds single or multiple file upload options to surveys. Users can add questions to the survey that allow participants to upload files as answers. Participants can either choose to upload a single file or add multiple files in response to the survey question. Participants can view their uploaded attachments by clicking the "review your answers" button in the survey. </div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2" />
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> User can upload file for survey questions. </span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2" />
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Upload single file as answer for survey questions or Upload multiple file as answer for survey questions.
</span>
</div>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2" />
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Participants can view their answer in the 'review your answers' button in Survey form.
</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<h1><center>Single Attachment Download</center></h1>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">On survey, user can add questions as file upload type and allow user to add file as attachment answer.
</h3>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">User can select "Upload File" as "Question Type", User can also see question type view icon for file upload.
</h3>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">On survey participants
can see "Browse/Choose File" options for "File Upload" question type, by clicking this button user can upload a file as
attachment and also a note is shown so the Participant can know he can only upload one File.
</h3>
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Once participants finish survey he/she can view attached file by clicking "review your answers" button.
</h3>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The Participant can view and download the attachments by clicking the File Name.
</h3>
<img src="assets/screenshots/16.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
User can see uploaded files on by clicking the smart button inside question form.
</h3>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Remove this filter to view uploaded answers</h3>
<div>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
<div>
<img src="assets/screenshots/7.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The User can download the Attachment of the Participant From Here.
</h3>
<img src="assets/screenshots/8.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<img src="assets/screenshots/9.png" class="img-thumbnail">
</div>
<h1><center>Multiple Attachments Download</center></h1>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
On survey, user can add questions as file upload type and allow survey participants to add multiple file as attachment answer.
</h3>
<img src="assets/screenshots/10.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
User can select "File Upload" as "Question Type", User also need to enable " Upload Multiple file" options only then survey participants can also see question type view icon for file upload.</h3>
<img src="assets/screenshots/11.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
On survey participants can see "Browse/Choose File" options for "File Upload" question type, by
clicking this
button user can select and upload multiple files as attachment and also a note is shown so the Participant can know he can upload multiple Files.
</h3>
<img src="assets/screenshots/12.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Once participants finish survey he/she can view all uploaded multiple file by clicking "review your answers" button and also download and view attachments by clicking file.
</h3>
<img src="assets/screenshots/13.png" class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The Participant can view and download the attachments by clicking the File Name.
</h3>
<img src="assets/screenshots/14.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
User can see uploaded files on answers.
</h3>
<img src="assets/screenshots/15.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/auto_database_backup/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/i-1.gif">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/whatsapp_mail_messaging/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/ii-4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/odoo_dynamic_dashboard/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/i-3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hide_menu_user/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/i-2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_dashboard_odoo/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/i-5.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/login_user_detail/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/i-6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire Odoo Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" />
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" />
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31" style="width:144px; height: 31px; margin-top: 40px;" />
</div>
</div>
</div>
<!-- END OF SUPPORT -->

116
survey_upload_file/static/src/js/survey_form_attachment.js

@ -0,0 +1,116 @@
odoo.define('survey_upload_file', function (require) {
'use strict';
var SurveyFormWidget = require('survey.form');
var core = require('web.core');
SurveyFormWidget.include({
events: _.extend({}, SurveyFormWidget.prototype.events, {
'change .o_survey_upload_file': '_onFileChange',
}),
// On adding file function
_onFileChange: function (event) {
var self = this;
var files = event.target.files;
var fileNames = [];
var dataURLs = [];
// Loop through the selected files
for (let i = 0; i < files.length; i++) {
var reader = new FileReader();
reader.readAsDataURL(files[i]);
reader.onload = function (e) {
var file = files[i];
var filename = file.name;
var dataURL = e.target.result.split(',')[1]; // split base64 data
fileNames.push(filename);
dataURLs.push(dataURL);
// Set the attributes for the input element
var $input = $(event.target);
$input.attr('data-oe-data', JSON.stringify(dataURLs));
$input.attr('data-oe-file_name', JSON.stringify(fileNames));
// Find the corresponding fileList div based on the question ID (matching data attribute)
var $fileListContainer = $(event.target)
.closest('.o_survey_upload_container')
.find('#fileList');
var questionId = $fileListContainer.attr('data');
// Check if the fileList div corresponds to the input clicked (based on question ID)
if ($fileListContainer.attr('data') == event.target.name) {
// Clear previous contents of the file list
$fileListContainer.html('');
// Create a new list of files
var ul = document.createElement('ul');
fileNames.forEach(function (fileName) {
var li = document.createElement('li');
li.textContent = fileName;
ul.appendChild(li);
});
// Create a delete button
var deleteBtn = document.createElement('button');
deleteBtn.textContent = 'Delete All';
deleteBtn.addEventListener('click', function () {
// Clear file list and reset input attributes
$fileListContainer.html('');
$input.attr('data-oe-data', '');
$input.attr('data-oe-file_name', '');
$input.val(''); // Clear the file input
});
// Append the file list and delete button to the fileList div
$fileListContainer.append(ul);
$fileListContainer.append(deleteBtn);
}
};
}
},
// Get all question answers by question type
_prepareSubmitValues: function (formData, params) {
this._super(formData, params);
this.$('[data-question-type]').each(function () {
if ($(this).data('questionType') === 'upload_file') {
params[this.name] = [
$(this).data('oe-data'),
$(this).data('oe-file_name'),
];
}
});
},
// Add file upload required case
_validateForm: function ($form, formData) {
this._super($form, formData);
var errors = {};
$form.find('[data-question-type]').each(function () {
var $input = $(this);
var $questionWrapper = $input.closest('.js_question-wrapper');
var questionRequired = $questionWrapper.data('required');
var constrErrorMsg = $questionWrapper.data('constrErrorMsg');
var validationErrorMsg = $questionWrapper.data('validationErrorMsg');
var questionId = $questionWrapper.attr('id');
switch ($input.data('questionType')) {
case 'upload_file':
if (questionRequired && !$input.val()) {
errors[questionId] = constrErrorMsg;
}
break;
}
});
if (_.keys(errors).length > 0) {
this._showErrors(errors);
return false;
}
return true;
},
});
});

23
survey_upload_file/views/survey_question_views.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited form view if survey.question-->
<record id="survey_question_form" model="ir.ui.view">
<field name="name">survey.question.view.form.inherit.survey.upload.file</field>
<field name="model">survey.question</field>
<field name="inherit_id" ref="survey.survey_question_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('o_preview_questions')]"
position="inside">
<div attrs="{'invisible': [('question_type', '!=', 'upload_file')]}">
<p class="o_upload_file">Upload Files
<i class="fa fa-upload"/>
</p>
</div>
</xpath>
<xpath expr="//field[@name='constr_mandatory']" position="after">
<field name="upload_multiple_file"
attrs="{'invisible': [('question_type', '!=', 'upload_file')]}"/>
</xpath>
</field>
</record>
</odoo>

63
survey_upload_file/views/survey_templates.xml

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="question_page_upload_answer"
inherit_id="survey.question_container">
<xpath expr="//div[@role='alert']" position="before">
<t t-if="question.question_type == 'upload_file'">
<t t-call="survey_upload_file.multi_upload_file"/>
</t>
</xpath>
</template>
<!-- File Upload View-->
<template id="multi_upload_file">
<div class="o_survey_upload_container">
<div class="o_survey_upload_box">
<div class="o_survey_upload_box_header">Upload Files</div>
<br/>
<div class="o_survey_upload_box_body">
<input type="file" class="o_survey_upload_file"
data-oe-data=""
data-oe-file_name=""
t-att-data-question-type="question.question_type"
t-att-name="question.id"
t-att-multiple="question.upload_multiple_file"/>
</div>
</div>
<br/>
<div id="fileList" class="o_survey_upload_list" t-att-data="question.id"/>
<t t-if="question.upload_multiple_file == False">
<div class="o_survey_upload_note">Note: You can only upload one file.
</div>
</t>
<t t-if="question.upload_multiple_file == True">
<div class="o_survey_upload_note">Note: You can upload Multiple files.
</div>
</t>
</div>
</template>
<!--Show the answer in print page if question type = upload file then t-call template-->
<template id="survey_page_print_upload_answer"
inherit_id="survey.survey_page_print">
<xpath expr="//div[hasclass('o_survey_question_error')]"
position="before">
<t t-if="question.question_type == 'upload_file'">
<t t-call="survey_upload_file.multi_upload_answer"/>
</t>
</xpath>
</template>
<!--Answer Value attachments-->
<template id="multi_upload_answer">
<t t-if="answer_lines.value_file_data_ids">
<div>
<t t-foreach="answer_lines.value_file_data_ids"
t-as="attachment">
<a t-attf-href="/web/content/{{ attachment.id }}?download=true">
<i class="fa fa-download"/>
<t t-esc="attachment.name"/>
</a>
<br/>
</t>
</div>
</t>
</template>
</odoo>

20
survey_upload_file/views/survey_user_views.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited the survey.user_input.line to add fields -->
<record id="survey_user_input_line_view_form" model="ir.ui.view">
<field name="name">survey.user_input.line.view.form.inherit.survey.upload.file</field>
<field name="model">survey.user_input.line</field>
<field name="inherit_id" ref="survey.survey_user_input_line_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='suggested_answer_id']" position="after">
<field name="value_file_data_ids">
<tree>
<field name="name"/>
<field name="file_size"/>
<field name="type"/>
</tree>
</field>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save