From a1090c073ba010f65717072d88f992c452cceb41 Mon Sep 17 00:00:00 2001
From: Carlos
Date: Mon, 29 Oct 2018 09:57:28 +0100
Subject: [PATCH 1/9] Some improvements in views
---
website_support/__manifest__.py | 15 +-
website_support/controllers/__init__.py | 3 +-
website_support/controllers/main.py | 264 ++++++++++--------
website_support/controllers/myaccount.py | 120 ++++++++
website_support/data/ir.cron.xml | 2 +-
.../data/website.support.settings.xml | 10 +-
.../data/website.support.ticket.priority.xml | 31 --
...s.xml => website.support.ticket.stage.xml} | 26 +-
website_support/doc/changelog.rst | 6 +-
website_support/i18n/de.po | 92 +++---
website_support/i18n/es.po | 123 ++++----
website_support/models/mail_template.py | 2 +-
website_support/models/res_partner.py | 6 +-
.../models/website_support_department.py | 2 +-
.../models/website_support_help.py | 6 +-
.../models/website_support_settings.py | 70 +++--
website_support/models/website_support_sla.py | 4 +-
.../models/website_support_ticket.py | 179 ++++++------
website_support/security/ir.model.access.csv | 11 +-
.../security/rules_for_clients.xml | 21 ++
website_support/static/description/index.html | 2 +-
website_support/views/email_templates.xml | 40 +--
website_support/views/menus.xml | 10 +-
website_support/views/res_partner_views.xml | 4 +-
website_support/views/res_users_views.xml | 4 +-
.../website_support_help_groups_views.xml | 4 +-
.../views/website_support_help_page_views.xml | 4 +-
.../views/website_support_settings_views.xml | 206 +++++++++++++-
.../views/website_support_sla_views.xml | 4 +-
...ebsite_support_ticket_categories_views.xml | 4 +-
.../website_support_ticket_close_views.xml | 4 +-
.../website_support_ticket_compose_views.xml | 4 +-
...ebsite_support_ticket_department_views.xml | 4 +-
.../website_support_ticket_priority_views.xml | 36 ---
.../website_support_ticket_stage_views.xml | 43 +++
.../website_support_ticket_states_views.xml | 41 ---
...bsite_support_ticket_subcategory_views.xml | 6 +-
.../website_support_ticket_tag_views.xml | 4 +-
.../website_support_ticket_templates.xml | 261 +++++++++++++++--
.../views/website_support_ticket_views.xml | 88 ++++--
.../models/website_support_settings.py | 16 +-
.../models/website_support_ticket.py | 2 +-
.../views/website_support_settings_views.xml | 4 +-
43 files changed, 1175 insertions(+), 613 deletions(-)
create mode 100644 website_support/controllers/myaccount.py
delete mode 100644 website_support/data/website.support.ticket.priority.xml
rename website_support/data/{website.support.ticket.states.xml => website.support.ticket.stage.xml} (52%)
create mode 100644 website_support/security/rules_for_clients.xml
delete mode 100644 website_support/views/website_support_ticket_priority_views.xml
create mode 100644 website_support/views/website_support_ticket_stage_views.xml
delete mode 100644 website_support/views/website_support_ticket_states_views.xml
diff --git a/website_support/__manifest__.py b/website_support/__manifest__.py
index 6eb6f59a7..41a004c48 100644
--- a/website_support/__manifest__.py
+++ b/website_support/__manifest__.py
@@ -17,31 +17,30 @@
'views/website_support_ticket_views.xml',
'views/website_support_ticket_categories_views.xml',
'views/website_support_ticket_subcategory_views.xml',
- 'views/website_support_ticket_states_views.xml',
+ 'views/website_support_ticket_stage_views.xml',
'views/website_support_ticket_tag_views.xml',
'views/res_partner_views.xml',
'views/res_users_views.xml',
'views/website_support_help_groups_views.xml',
'views/website_support_help_page_views.xml',
- 'views/website_support_ticket_priority_views.xml',
'views/website_support_settings_views.xml',
'views/website_support_ticket_department_views.xml',
'views/website_support_sla_views.xml',
'views/menus.xml',
'data/website_support_sequence.xml',
- 'data/website.support.ticket.states.xml',
+ 'data/website.support.ticket.stage.xml',
'data/website.support.ticket.categories.xml',
- 'data/website.menu.csv',
- 'data/website.support.ticket.priority.xml',
+ # 'data/website.menu.csv',
'data/website.support.settings.xml',
'data/website.support.department.role.csv',
'data/website.support.ticket.approval.xml',
'data/ir.cron.xml',
'security/ir.model.access.csv',
+ 'security/rules_for_clients.xml',
],
'demo': [],
- 'depends': ['mail','web', 'website','resource'],
- 'images':[
+ 'depends': ['mail', 'web', 'website', 'resource'],
+ 'images': [
'static/description/3.jpg',
'static/description/1.jpg',
'static/description/2.jpg',
@@ -50,4 +49,4 @@
'static/description/6.jpg',
],
'installable': True,
-}
\ No newline at end of file
+}
diff --git a/website_support/controllers/__init__.py b/website_support/controllers/__init__.py
index 6920e2020..1a5178b28 100644
--- a/website_support/controllers/__init__.py
+++ b/website_support/controllers/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
-from . import main
\ No newline at end of file
+from . import main
+from . import myaccount
diff --git a/website_support/controllers/main.py b/website_support/controllers/main.py
index b0fcda987..c0cab8e41 100644
--- a/website_support/controllers/main.py
+++ b/website_support/controllers/main.py
@@ -1,19 +1,23 @@
-# -*- coding: utf-8 -*-
import werkzeug
import json
import base64
-from random import randint
-import os
import datetime
import requests
import logging
+import odoo.http as http
+from odoo.http import request
+from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
+from odoo.addons.portal.controllers.portal import get_records_pager
+from odoo.addons.http_routing.models.ir_http import slug
_logger = logging.getLogger(__name__)
-import openerp.http as http
-from openerp.http import request
-from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
+AVAILABLE_PRIORITIES = [
+ ('0', 'Normal'),
+ ('1', 'Low'),
+ ('2', 'High'),
+ ('3', 'Very High'),
+ ]
-from odoo.addons.http_routing.models.ir_http import slug
class SupportTicketController(http.Controller):
@@ -24,9 +28,9 @@ def support_approve(self, ticket_id, **kwargs):
awaiting_approval = request.env['ir.model.data'].get_object('website_support','awaiting_approval')
if support_ticket.approval_id.id == awaiting_approval.id:
- #Change the ticket state to approved
- website_ticket_state_approval_accepted = request.env['ir.model.data'].get_object('website_support','website_ticket_state_approval_accepted')
- support_ticket.state = website_ticket_state_approval_accepted.id
+ #Change the ticket stage to approved
+ website_ticket_stage_approval_accepted = request.env['ir.model.data'].get_object('website_support','website_ticket_stage_approval_accepted')
+ support_ticket.stage = website_ticket_stage_approval_accepted.id
#Also change the approval
approval_accepted = request.env['ir.model.data'].get_object('website_support','approval_accepted')
@@ -47,7 +51,7 @@ def support_approve(self, ticket_id, **kwargs):
send_mail.send()
#Remove the message from the chatter since this would bloat the communication history by a lot
- send_mail.mail_message_id.res_id = 0
+ send_mail.mail_message_id.res_id = 0
return "Request Approved Successfully"
else:
@@ -60,9 +64,9 @@ def support_disapprove(self, ticket_id, **kwargs):
awaiting_approval = request.env['ir.model.data'].get_object('website_support','awaiting_approval')
if support_ticket.approval_id.id == awaiting_approval.id:
- #Change the ticket state to disapproved
- website_ticket_state_approval_rejected = request.env['ir.model.data'].get_object('website_support','website_ticket_state_approval_rejected')
- support_ticket.state = website_ticket_state_approval_rejected.id
+ #Change the ticket stage to disapproved
+ website_ticket_stage_approval_rejected = request.env['ir.model.data'].get_object('website_support','website_ticket_stage_approval_rejected')
+ support_ticket.stage = website_ticket_stage_approval_rejected.id
#Also change the approval
approval_rejected = request.env['ir.model.data'].get_object('website_support','approval_rejected')
@@ -84,7 +88,7 @@ def support_disapprove(self, ticket_id, **kwargs):
#Remove the message from the chatter since this would bloat the communication history by a lot
send_mail.mail_message_id.res_id = 0
-
+
return "Request Rejected Successfully"
else:
return "Ticket does not need approval"
@@ -150,7 +154,7 @@ def support_subcategories_fetch(self, **kwargs):
def support_ticket_survey(self, portal_key):
"""Display the survey"""
- support_ticket = request.env['website.support.ticket'].search([('portal_access_key','=', portal_key)])
+ support_ticket = request.env['website.support.ticket'].search([('access_token','=', portal_key)])
if support_ticket.support_rating:
#TODO some security incase they guess the portal key of an incomplete survey
@@ -167,7 +171,7 @@ def support_ticket_survey_process(self, portal_key, **kw):
for field_name, field_value in kw.items():
values[field_name] = field_value
- support_ticket = request.env['website.support.ticket'].search([('portal_access_key','=', portal_key)])
+ support_ticket = request.env['website.support.ticket'].search([('access_token','=', portal_key)])
if support_ticket.support_rating:
#TODO some security incase they guess the portal key of an incomplete survey
@@ -181,7 +185,7 @@ def support_ticket_survey_process(self, portal_key, **kw):
def support_account_create(self, **kw):
""" Create no permission account"""
- setting_allow_user_signup = request.env['ir.default'].get('website.support.settings', 'allow_user_signup')
+ setting_allow_user_signup = request.env['ir.default'].get('res.config.settings', 'allow_user_signup')
if setting_allow_user_signup:
return http.request.render('website_support.account_create', {})
@@ -192,10 +196,10 @@ def support_account_create(self, **kw):
def support_account_create_process(self, **kw):
""" Create no permission account"""
- setting_allow_user_signup = request.env['ir.default'].get('website.support.settings', 'allow_user_signup')
+ setting_allow_user_signup = request.env['ir.default'].get('res.config.settings', 'allow_user_signup')
if setting_allow_user_signup:
-
+
values = {}
for field_name, field_value in kw.items():
values[field_name] = field_value
@@ -233,7 +237,7 @@ def support_help(self, **kw):
help_groups = http.request.env['website.support.help.groups'].sudo().search(['|', ('partner_ids', '=', False ), ('partner_ids', '=', request.env.user.partner_id.id ),'|', ('group_ids', '=', False ), ('group_ids', 'in', permission_list ), ('website_published','=',True)])
- setting_allow_user_signup = request.env['ir.default'].get('website.support.settings', 'allow_user_signup')
+ setting_allow_user_signup = request.env['ir.default'].get('res.config.settings', 'allow_user_signup')
manager = False
if request.env['website.support.department.contact'].sudo().search_count([('user_id','=',request.env.user.id)]) == 1:
@@ -252,7 +256,7 @@ def support_ticket_reporting(self, **kw):
for extra_permission in department.partner_ids:
extra_access.append(extra_permission.id)
- support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False) ])
+ support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False) ])
support_ticket_count = len(support_tickets)
@@ -268,16 +272,16 @@ def support_submit_ticket(self, **kw):
category_access = []
for category_permission in http.request.env.user.groups_id:
category_access.append(category_permission.id)
-
+
ticket_categories = http.request.env['website.support.ticket.categories'].sudo().search(['|',('access_group_ids','in', category_access), ('access_group_ids','=',False)])
- setting_google_recaptcha_active = request.env['ir.default'].get('website.support.settings', 'google_recaptcha_active')
- setting_google_captcha_client_key = request.env['ir.default'].get('website.support.settings', 'google_captcha_client_key')
- setting_max_ticket_attachments = request.env['ir.default'].get('website.support.settings', 'max_ticket_attachments')
- setting_max_ticket_attachment_filesize = request.env['ir.default'].get('website.support.settings', 'max_ticket_attachment_filesize')
- setting_allow_website_priority_set = request.env['ir.default'].get('website.support.settings', 'allow_website_priority_set')
-
- return http.request.render('website_support.support_submit_ticket', {'categories': ticket_categories, 'priorities': http.request.env['website.support.ticket.priority'].sudo().search([]), 'person_name': person_name, 'email': http.request.env.user.email, 'setting_max_ticket_attachments': setting_max_ticket_attachments, 'setting_max_ticket_attachment_filesize': setting_max_ticket_attachment_filesize, 'setting_google_recaptcha_active': setting_google_recaptcha_active, 'setting_google_captcha_client_key': setting_google_captcha_client_key, 'setting_allow_website_priority_set': setting_allow_website_priority_set})
+ setting_google_recaptcha_active = request.env['ir.default'].get('res.config.settings', 'google_recaptcha_active')
+ setting_google_captcha_client_key = request.env['ir.default'].get('res.config.settings', 'google_captcha_client_key')
+ setting_max_ticket_attachments = request.env['ir.default'].get('res.config.settings', 'max_ticket_attachments')
+ setting_max_ticket_attachment_filesize = request.env['ir.default'].get('res.config.settings', 'max_ticket_attachment_filesize')
+ setting_allow_website_priority_set = request.env['ir.default'].get('res.config.settings', 'allow_website_priority_set')
+
+ return http.request.render('website_support.support_submit_ticket', {'categories': ticket_categories, 'priorities': AVAILABLE_PRIORITIES, 'person_name': person_name, 'email': http.request.env.user.email, 'setting_max_ticket_attachments': setting_max_ticket_attachments, 'setting_max_ticket_attachment_filesize': setting_max_ticket_attachment_filesize, 'setting_google_recaptcha_active': setting_google_recaptcha_active, 'setting_google_captcha_client_key': setting_google_captcha_client_key, 'setting_allow_website_priority_set': setting_allow_website_priority_set})
@http.route('/support/feedback/process/', type="http", auth="public", website=True)
def support_feedback(self, help_page, **kw):
@@ -337,12 +341,12 @@ def support_process_ticket(self, **kwargs):
if values['my_gold'] != "256":
return "Bot Detected"
- setting_google_recaptcha_active = request.env['ir.default'].get('website.support.settings', 'google_recaptcha_active')
- setting_allow_website_priority_set = request.env['ir.default'].get('website.support.settings', 'allow_website_priority_set')
-
+ setting_google_recaptcha_active = request.env['ir.default'].get('res.config.settings', 'google_recaptcha_active')
+ setting_allow_website_priority_set = request.env['ir.default'].get('res.config.settings', 'allow_website_priority_set')
+
if setting_google_recaptcha_active:
- setting_google_captcha_secret_key = request.env['ir.default'].get('website.support.settings', 'google_captcha_secret_key')
+ setting_google_captcha_secret_key = request.env['ir.default'].get('res.config.settings', 'google_captcha_secret_key')
#Redirect them back if they didn't answer the captcha
if 'g-recaptcha-response' not in values:
@@ -353,7 +357,7 @@ def support_process_ticket(self, **kwargs):
if response_json.json()['success'] is not True:
return werkzeug.utils.redirect("/support/ticket/submit")
-
+
my_attachment = ""
file_name = ""
@@ -372,7 +376,7 @@ def support_process_ticket(self, **kwargs):
partner.message_post(body="Customer " + partner.name + " has sent in a new support ticket", subject="New Support Ticket")
if 'priority' in values and (setting_allow_website_priority_set == "partner" or setting_allow_website_priority_set == "everyone"):
- new_ticket_id.priority_id = int(values['priority'])
+ new_ticket_id.priority = values['priority']
else:
search_partner = request.env['res.partner'].sudo().search([('email','=', values['email'] )])
@@ -382,8 +386,8 @@ def support_process_ticket(self, **kwargs):
new_ticket_id = request.env['website.support.ticket'].sudo().create({'person_name':values['person_name'], 'category':values['category'], 'sub_category_id': sub_category, 'email':values['email'], 'description':values['description'], 'subject':values['subject'], 'attachment': my_attachment, 'attachment_filename': file_name, 'channel': 'Website (Public)'})
if 'priority' in values and setting_allow_website_priority_set == "everyone":
- new_ticket_id.priority_id = int(values['priority'])
-
+ new_ticket_id.priority = int(values['priority'])
+
if "subcategory" in values:
#Also get the data from the extra fields
for extra_field in request.env['website.support.ticket.subcategory.field'].sudo().search([('wsts_id','=', int(sub_category) )]):
@@ -409,54 +413,84 @@ def support_process_ticket(self, **kwargs):
return werkzeug.utils.redirect("/support/ticket/thanks")
-
@http.route('/support/ticket/thanks', type="http", auth="public", website=True)
def support_ticket_thanks(self, **kw):
"""Displays a thank you page after the user submits a ticket"""
return http.request.render('website_support.support_thank_you', {})
- @http.route('/support/ticket/view', type="http", auth="user", website=True)
- def support_ticket_view_list(self, **kw):
- """Displays a list of support tickets owned by the logged in user"""
-
- values = {}
- for field_name, field_value in kw.items():
- values[field_name] = field_value
-
- extra_access = []
- for extra_permission in http.request.env.user.partner_id.stp_ids:
- extra_access.append(extra_permission.id)
-
- if 'state' in values:
- support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False), ('state', '=', int(values['state'])) ])
+ # @http.route('/support/ticket/view', type="http", auth="user", website=True)
+ # def support_ticket_view_list(self, **kw):
+ # """Displays a list of support tickets owned by the logged in user"""
+ #
+ # values = {}
+ # for field_name, field_value in kw.items():
+ # values[field_name] = field_value
+ #
+ # extra_access = []
+ # for extra_permission in http.request.env.user.partner_id.stp_ids:
+ # extra_access.append(extra_permission.id)
+ #
+ # if 'stage' in values:
+ # support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False), ('stage', '=', int(values['stage'])) ])
+ # else:
+ # support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False) ])
+ #
+ # no_approval_required = request.env['ir.model.data'].get_object('website_support','no_approval_required')
+ # change_requests = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False), ('approval_id','!=',no_approval_required.id) ], order="planned_time desc")
+ #
+ # ticket_stage = http.request.env['website.support.ticket.stage'].sudo().search([])
+ #
+ # return http.request.render('website_support.support_ticket_view_list', {'support_tickets':support_tickets,'ticket_count':len(support_tickets), 'change_requests': change_requests, 'request_count': len(change_requests), 'ticket_stage': ticket_stage})
+
+ # @http.route('/support/ticket/view/', type="http", auth="user", website=True)
+ # def support_ticket_view(self, ticket):
+ # """View an individual support ticket"""
+ #
+ # extra_access = []
+ # for extra_permission in http.request.env.user.partner_id.stp_ids:
+ # extra_access.append(extra_permission.id)
+ #
+ # #only let the user this ticket is assigned to view this ticket
+ # support_ticket = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('id','=',ticket) ])[0]
+ # return http.request.render('website_support.support_ticket_view', {'support_ticket':support_ticket})
+
+ @http.route("/support/ticket//", type='http', auth="public", website=True)
+ def view(self, ticket_id, pdf=None, anexo=None, token=None, message=False, **post):
+ # use sudo to allow accessing/viewing orders for public user
+ # only if he knows the private token
+ if token:
+ Ticket = request.env['website.support.ticket'].sudo().search([('id', '=', ticket_id), ('access_token', '=', token)])
else:
- support_tickets = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False) ])
-
- no_approval_required = request.env['ir.model.data'].get_object('website_support','no_approval_required')
- change_requests = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('partner_id','!=',False), ('approval_id','!=',no_approval_required.id) ], order="planned_time desc")
-
- ticket_states = http.request.env['website.support.ticket.states'].sudo().search([])
-
- return http.request.render('website_support.support_ticket_view_list', {'support_tickets':support_tickets,'ticket_count':len(support_tickets), 'change_requests': change_requests, 'request_count': len(change_requests), 'ticket_states': ticket_states})
-
- @http.route('/support/ticket/view/', type="http", auth="user", website=True)
- def support_ticket_view(self, ticket):
- """View an individual support ticket"""
-
- extra_access = []
- for extra_permission in http.request.env.user.partner_id.stp_ids:
- extra_access.append(extra_permission.id)
-
- #only let the user this ticket is assigned to view this ticket
- support_ticket = http.request.env['website.support.ticket'].sudo().search(['|', ('partner_id','=',http.request.env.user.partner_id.id), ('partner_id', 'in', extra_access), ('id','=',ticket) ])[0]
- return http.request.render('website_support.support_ticket_view', {'support_ticket':support_ticket})
-
- @http.route('/support/portal/ticket/view/', type="http", auth="public", website=True)
- def support_portal_ticket_view(self, portal_access_key):
- """View an individual support ticket (portal access)"""
-
- support_ticket = http.request.env['website.support.ticket'].sudo().search([('portal_access_key','=',portal_access_key) ])[0]
- return http.request.render('website_support.support_ticket_view', {'support_ticket':support_ticket, 'portal_access_key': portal_access_key})
+ Ticket = request.env['website.support.ticket'].search([('id', '=', ticket_id)])
+ if not Ticket:
+ return request.render('website.404')
+ # Token or not, sudo the order, since portal user has not access on
+ # taxes, required to compute the total_amout of SO.
+ ticket_sudo = Ticket.sudo()
+ if token:
+ values = {
+ 'ticket': ticket_sudo,
+ 'access_token': token
+ }
+ else:
+ values = {
+ 'ticket': ticket_sudo,
+ }
+ # if token:
+ # return request.render('website_support.support_ticket_view', values)
+ # else:
+ # values = {
+ # 'ticket': ticket_sudo,
+ # }
+ return request.render('website_support.portal_ticket_page', values)
+
+
+ # @http.route('/support/portal/ticket/view/', type="http", auth="public", website=True)
+ # def support_portal_ticket_view(self, access_token):
+ # """View an individual support ticket (portal access)"""
+ #
+ # support_ticket = http.request.env['website.support.ticket'].sudo().search([('access_token','=',access_token) ])[0]
+ # return http.request.render('website_support.support_ticket_view', {'support_ticket':support_ticket, 'access_token': access_token})
@http.route('/support/portal/ticket/comment', type="http", auth="public", website=True)
def support_portal_ticket_comment(self, **kw):
@@ -466,39 +500,39 @@ def support_portal_ticket_comment(self, **kw):
for field_name, field_value in kw.items():
values[field_name] = field_value
- support_ticket = http.request.env['website.support.ticket'].sudo().search([('portal_access_key','=', values['portal_access_key'] ) ])[0]
+ support_ticket = http.request.env['website.support.ticket'].sudo().search([('access_token','=', values['access_token'] ) ])[0]
http.request.env['website.support.ticket.message'].sudo().create({'ticket_id':support_ticket.id, 'by': 'customer','content':values['comment']})
- support_ticket.state = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_state_customer_replied')
+ support_ticket.stage = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_stage_customer_replied')
request.env['website.support.ticket'].sudo().browse(support_ticket.id).message_post(body=values['comment'], subject="Support Ticket Reply", message_type="comment")
- return werkzeug.utils.redirect("/support/portal/ticket/view/" + str(support_ticket.portal_access_key) )
-
- @http.route('/support/ticket/comment',type="http", auth="user")
- def support_ticket_comment(self, **kw):
- """Adds a comment to the support ticket"""
-
- values = {}
- for field_name, field_value in kw.items():
- values[field_name] = field_value
-
- ticket = http.request.env['website.support.ticket'].sudo().search([('id','=',values['ticket_id'])])
-
- #check if this user owns this ticket
- if ticket.partner_id.id == http.request.env.user.partner_id.id or ticket.partner_id in http.request.env.user.partner_id.stp_ids:
-
- http.request.env['website.support.ticket.message'].sudo().create({'ticket_id':ticket.id, 'by': 'customer','content':values['comment']})
-
- ticket.state = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_state_customer_replied')
-
- request.env['website.support.ticket'].sudo().browse(ticket.id).message_post(body=values['comment'], subject="Support Ticket Reply", message_type="comment")
-
- else:
- return "You do not have permission to submit this commment"
-
- return werkzeug.utils.redirect("/support/ticket/view/" + str(ticket.id))
+ return werkzeug.utils.redirect("/support/ticket/"+str(support_ticket.id)+"/"+ str(support_ticket.access_token) )
+
+ # @http.route('/support/ticket/comment',type="http", auth="user")
+ # def support_ticket_comment(self, **kw):
+ # """Adds a comment to the support ticket"""
+ #
+ # values = {}
+ # for field_name, field_value in kw.items():
+ # values[field_name] = field_value
+ #
+ # ticket = http.request.env['website.support.ticket'].sudo().search([('id','=',values['ticket_id'])])
+ #
+ # #check if this user owns this ticket
+ # if ticket.partner_id.id == http.request.env.user.partner_id.id or ticket.partner_id in http.request.env.user.partner_id.stp_ids:
+ #
+ # http.request.env['website.support.ticket.message'].sudo().create({'ticket_id':ticket.id, 'by': 'customer','content':values['comment']})
+ #
+ # ticket.stage = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_stage_customer_replied')
+ #
+ # request.env['website.support.ticket'].sudo().browse(ticket.id).message_post(body=values['comment'], subject="Support Ticket Reply", message_type="comment")
+ #
+ # else:
+ # return "You do not have permission to submit this commment"
+ #
+ # return werkzeug.utils.redirect("/my/tickets/" + str(ticket.id))
@http.route('/support/ticket/close',type="http", auth="user")
def support_ticket_close(self, **kw):
@@ -513,8 +547,8 @@ def support_ticket_close(self, **kw):
#check if this user owns this ticket
if ticket.partner_id.id == http.request.env.user.partner_id.id or ticket.partner_id in http.request.env.user.partner_id.stp_ids:
- customer_closed_state = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_state_customer_closed')
- ticket.state = customer_closed_state
+ customer_closed_stage = request.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_stage_customer_closed')
+ ticket.stage = customer_closed_stage
ticket.close_time = datetime.datetime.now()
ticket.close_date = datetime.date.today()
@@ -524,15 +558,15 @@ def support_ticket_close(self, **kw):
ticket.sla_active = False
- closed_state_mail_template = customer_closed_state.mail_template_id
+ closed_stage_mail_template = customer_closed_stage.mail_template_id
- if closed_state_mail_template:
- closed_state_mail_template.send_mail(ticket.id, True)
+ if closed_stage_mail_template:
+ closed_stage_mail_template.send_mail(ticket.id, True)
else:
return "You do not have permission to close this commment"
- return werkzeug.utils.redirect("/support/ticket/view/" + str(ticket.id))
+ return werkzeug.utils.redirect("/my/tickets/" + str(ticket.id))
@http.route('/support/help/auto-complete',auth="public", website=True, type='http')
def support_help_autocomplete(self, **kw):
@@ -550,6 +584,6 @@ def support_help_autocomplete(self, **kw):
for help_page in help_pages:
#return_item = {"label": help_page.name + "" + help_page.group_id.name + " ","value": help_page.url_generated}
return_item = {"label": help_page.name,"value": help_page.url_generated}
- my_return.append(return_item)
+ my_return.append(return_item)
- return json.JSONEncoder().encode(my_return)
\ No newline at end of file
+ return json.JSONEncoder().encode(my_return)
diff --git a/website_support/controllers/myaccount.py b/website_support/controllers/myaccount.py
new file mode 100644
index 000000000..4c279017a
--- /dev/null
+++ b/website_support/controllers/myaccount.py
@@ -0,0 +1,120 @@
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
+
+from odoo import http, _
+from odoo.http import request
+from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
+from odoo.exceptions import AccessError
+from odoo.tools import consteq
+
+class CustomerPortal(CustomerPortal):
+
+ def _get_website_support_ticket_domain(self):
+ partner = request.env.user.partner_id
+ domain = [
+ '|',
+ ('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
+ ('partner_id', '=', partner.id)
+ ]
+ return domain
+
+ def _prepare_portal_layout_values(self):
+ values = super(CustomerPortal, self)._prepare_portal_layout_values()
+ # partner = request.env.user.partner_id
+ ticket_count = request.env['website.support.ticket'].search_count(
+ self._get_website_support_ticket_domain())
+ values['ticket_count'] = ticket_count
+ return values
+
+ def _website_support_ticket_check_access(self, ticket_id, access_token=None):
+ ticket = request.env['website.support.ticket'].browse([ticket_id])
+ ticket_sudo = ticket.sudo()
+ try:
+ ticket.check_access_rights('read')
+ ticket.check_access_rule('read')
+ except AccessError:
+ if not access_token or not consteq(ticket_sudo.access_token, access_token):
+ raise
+ return ticket_sudo
+
+ @http.route(['/my/tickets', '/my/tickets/page/'], type='http', auth="user", website=True)
+ def portal_my_tickets(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw):
+ values = self._prepare_portal_layout_values()
+ # partner = request.env.user.partner_id
+ WebsiteSupportTicket = request.env['website.support.ticket']
+
+ domain = self._get_website_support_ticket_domain()
+
+ searchbar_sortings = {
+ 'date': {'label': _('Newest'), 'order': 'create_date desc'},
+ 'subject': {'label': _('Subject'), 'order': 'subject'},
+ 'state': {'label': _('State'), 'order': 'state'},
+ 'update': {'label': _('Last State Update'), 'order': 'date_last_stage_update desc'},
+ }
+ searchbar_filters = {'all': {'label': _('All'), 'domain': []}}
+ for state in request.env['website.support.ticket.stage'].search([]):
+ searchbar_filters.update({
+ str(state.id): {'label': state.name, 'domain': [('state', '=', state.id)]}
+ })
+
+ # default sort by order
+ if not sortby:
+ sortby = 'date'
+ order = searchbar_sortings[sortby]['order']
+
+ # default filter by value
+ if not filterby:
+ filterby = 'all'
+ domain += searchbar_filters[filterby]['domain']
+
+ # count for pager
+ ticket_count = WebsiteSupportTicket.search_count(domain)
+ # pager
+ pager = portal_pager(
+ url="/my/tickets",
+ url_args={},
+ total=ticket_count,
+ page=page,
+ step=self._items_per_page
+ )
+ # content according to pager and archive selected
+ tickets = WebsiteSupportTicket.search(domain, order=order, limit=self._items_per_page, offset=pager['offset'])
+ values.update({
+ 'date': date_begin,
+ 'tickets': tickets,
+ 'page_name': 'ticket',
+ 'pager': pager,
+ # 'archive_groups': archive_groups,
+ 'default_url': '/my/tickets',
+ 'searchbar_sortings': searchbar_sortings,
+ 'sortby': sortby,
+ 'searchbar_filters': searchbar_filters,
+ 'filterby': filterby,
+ })
+ return request.render("website_support.portal_my_tickets", values)
+
+ @http.route(['/my/tickets/'], type='http', auth="public", website=True)
+ def portal_my_ticket_page(self, ticket_id=None, access_token=None, **kw):
+ try:
+ ticket_sudo = self._website_support_ticket_check_access(ticket_id, access_token)
+ except AccessError:
+ return request.redirect('/my')
+ values = self._ticket_get_page_view_values(ticket_sudo, access_token, **kw)
+ return request.render("website_support.portal_ticket_page", values)
+
+ def _ticket_get_page_view_values(self, ticket, access_token, **kwargs):
+ values = {
+ 'page_name': 'ticket',
+ 'ticket': ticket,
+ }
+
+ if access_token:
+ values['no_breadcrumbs'] = True
+ values['access_token'] = access_token
+ if kwargs.get('error'):
+ values['error'] = kwargs['error']
+ if kwargs.get('warning'):
+ values['warning'] = kwargs['warning']
+ if kwargs.get('success'):
+ values['success'] = kwargs['success']
+
+ return values
diff --git a/website_support/data/ir.cron.xml b/website_support/data/ir.cron.xml
index 93b3de1db..8d13b2b6b 100644
--- a/website_support/data/ir.cron.xml
+++ b/website_support/data/ir.cron.xml
@@ -15,4 +15,4 @@
-
\ No newline at end of file
+
diff --git a/website_support/data/website.support.settings.xml b/website_support/data/website.support.settings.xml
index ef8188c82..61bfa99ee 100644
--- a/website_support/data/website.support.settings.xml
+++ b/website_support/data/website.support.settings.xml
@@ -4,23 +4,23 @@
+ eval="('res.config.settings', 'change_user_email_template_id', ref('website_support.support_ticket_user_change') )"/>
+ eval="('res.config.settings', 'close_ticket_email_template_id', ref('website_support.support_ticket_closed') )"/>
+ eval="('res.config.settings', 'staff_reply_email_template_id', ref('website_support.support_ticket_reply_wrapper') )"/>
+ eval="('res.config.settings', 'max_ticket_attachments', 2 )"/>
+ eval="('res.config.settings', 'max_ticket_attachment_filesize', 500 )"/>
\ No newline at end of file
diff --git a/website_support/data/website.support.ticket.priority.xml b/website_support/data/website.support.ticket.priority.xml
deleted file mode 100644
index 4a78f85c9..000000000
--- a/website_support/data/website.support.ticket.priority.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- Low
- #000000
-
-
-
- Normal
- #000000
-
-
-
- Moderately
- #FFFF00
-
-
-
- High
- #FFA500
-
-
-
- Urgent
- #FF0000
-
-
-
-
\ No newline at end of file
diff --git a/website_support/data/website.support.ticket.states.xml b/website_support/data/website.support.ticket.stage.xml
similarity index 52%
rename from website_support/data/website.support.ticket.states.xml
rename to website_support/data/website.support.ticket.stage.xml
index 54cc1909a..e2a7d763d 100644
--- a/website_support/data/website.support.ticket.states.xml
+++ b/website_support/data/website.support.ticket.stage.xml
@@ -2,44 +2,48 @@
-
+
Open
True
-
+
Staff Replied
+ True
-
+
Customer Replied
True
-
+
Awaiting Approval
+ True
-
+
Approval Accepted
True
-
+
Approval Rejected
True
-
+
Customer Closed
+ True
-
+
Staff Closed
+ True
-
-
-
\ No newline at end of file
+
+
+
diff --git a/website_support/doc/changelog.rst b/website_support/doc/changelog.rst
index 5bda0fbf2..1d4f780f0 100644
--- a/website_support/doc/changelog.rst
+++ b/website_support/doc/changelog.rst
@@ -60,9 +60,9 @@ v1.2.13
v1.2.12
=======
-* Website filter state for tickets
+* Website filter stage for tickets
* Hide SLA resume and pause buttons if no SLA is assigned to the ticket
-* Choose which states get classified as unattended
+* Choose which stage get classified as unattended
v1.2.11
=======
@@ -144,7 +144,7 @@ v1.0.9
v1.0.8
======
* Fix subcategory change not disappearing
-* States no longer readonly
+* stage no longer readonly
* Move Kanban view over from Odoo 10
v1.0.7
diff --git a/website_support/i18n/de.po b/website_support/i18n/de.po
index 5a4809777..181377e0f 100644
--- a/website_support/i18n/de.po
+++ b/website_support/i18n/de.po
@@ -23,9 +23,9 @@ msgid ""
"\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
+" % if object.ticket_id.access_token :\n"
" View Ticket Online: here \n"
+"ticket/view/${object.ticket_id.access_token}\">here \n"
" % endif\n"
" Ticket Number: ${object.ticket_id.id} \n"
" Ticket Category: ${object.ticket_id.category.name or "
@@ -39,9 +39,9 @@ msgstr ""
"\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
+" % if object.ticket_id.access_token :\n"
" Ticket Online: here \n"
+"view/${object.ticket_id.access_token}\">here \n"
" % endif\n"
" Ticket Nummer: ${object.ticket_id.id} \n"
" Ticket Kategorie: ${object.ticket_id.category.name or "
@@ -58,9 +58,9 @@ msgid ""
"\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
+" % if object.ticket_id.access_token :\n"
" View Ticket Online: here \n"
+"ticket/view/${object.ticket_id.access_token}\">here \n"
" % endif\n"
" Ticket Number: ${object.ticket_id.id} \n"
" Ticket Category: ${object.ticket_id.category.name or "
@@ -74,9 +74,9 @@ msgstr ""
"\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
+" % if object.ticket_id.access_token :\n"
" Ticket Online: here \n"
+"view/${object.ticket_id.access_token}\">here \n"
" % endif\n"
" Ticket Nummer: ${object.ticket_id.id} \n"
" Ticket Kategorie: ${object.ticket_id.category.name or "
@@ -98,7 +98,7 @@ msgid ""
"get back to your shortly
\n"
" \n"
" View Ticket Online: here \n"
+"view/${object.access_token}\">here \n"
" Ticket Number: ${object.ticket_number or object.id}"
" \n"
" Ticket Category: \n"
@@ -120,7 +120,7 @@ msgstr ""
"uns, wir werden uns umgehend bei Ihnen melden\n"
" \n"
" Gehe zu Ticket Online: here \n"
+"ticket/view/${object.access_token}\">here \n"
" Ticket Number: ${object.ticket_number or object.id}"
" \n"
" Ticket Category: \n"
@@ -398,7 +398,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:website_support.support_ticket_view
msgid ""
" \n"
-" State "
+" stage "
msgstr ""
" \n"
" Status "
@@ -668,8 +668,8 @@ msgid "Create new sub category"
msgstr "Erstellen Sie eine neue Unterkategorie"
#. module: website_support
-#: model:ir.actions.act_window,help:website_support.website_support_ticket_states_action
-msgid "Create support ticket state"
+#: model:ir.actions.act_window,help:website_support.website_support_ticket_stage_action
+msgid "Create support ticket stage"
msgstr "Erstellen Sie einen Support-Ticket-Status"
#. module: website_support
@@ -694,7 +694,7 @@ msgstr ""
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_create_uid
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_create_uid
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_create_uid
msgid "Created by"
msgstr "Erstellt von"
@@ -715,7 +715,7 @@ msgstr "Erstellt von"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_create_date
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_create_date
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_create_date
msgid "Created on"
msgstr "Angelegt am"
@@ -726,12 +726,12 @@ msgid "Customer"
msgstr "Kunde"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_customer_closed
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_customer_closed
msgid "Customer Closed"
msgstr "Kunde Geschlossen"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_customer_replied
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_customer_replied
msgid "Customer Replied"
msgstr "Kunde geantwortet"
@@ -778,7 +778,7 @@ msgstr "Beschreibung"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_display_name
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_display_name
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_display_name
msgid "Display Name"
msgstr "Anzeigename"
@@ -837,7 +837,7 @@ msgid "Group"
msgstr "Gruppe"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:46
#: model:ir.model.fields,field_description:website_support.field_website_support_help_groups_name
#, python-format
@@ -880,8 +880,8 @@ msgstr "Hoch"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_id
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_id_8681
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_8681
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_id
msgid "ID"
msgstr "ID"
@@ -889,7 +889,7 @@ msgstr "ID"
#. module: website_support
#: model:ir.model.fields,help:website_support.field_website_support_ticket_unattended
msgid ""
-"In 'Open' state or 'Customer Replied' state taken into consideration name "
+"In 'Open' stage or 'Customer Replied' stage taken into consideration name "
"changes"
msgstr "Im Status 'Offen' oder 'Kundenbeantwortet' ändert sich ev. der Name"
@@ -909,7 +909,7 @@ msgstr "Im Status 'Offen' oder 'Kundenbeantwortet' ändert sich ev. der Name"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority___last_update
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states___last_update
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory___last_update
msgid "Last Modified on"
msgstr "Zuletzt geändert am"
@@ -929,7 +929,7 @@ msgstr "Zuletzt geändert am"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_write_uid
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_write_uid
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_write_uid
msgid "Last Updated by"
@@ -950,7 +950,7 @@ msgstr "Zuletzt aktualisiert durch"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_write_date
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_write_date
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_write_date
msgid "Last Updated on"
@@ -963,7 +963,7 @@ msgstr "Tief"
#. module: website_support
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose_template_id
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_mail_template_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_mail_template_id
msgid "Mail Template"
msgstr "Mail Template"
@@ -1030,7 +1030,7 @@ msgid "New Event"
msgstr "Neuer Anlass"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:45
#: model:ir.ui.view,arch_db:website_support.content_new_help
#, python-format
@@ -1038,7 +1038,7 @@ msgid "New Help Group"
msgstr "Neue Hilfeseite Gruppe"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:16
#: model:ir.ui.view,arch_db:website_support.content_new_help
#, python-format
@@ -1088,7 +1088,7 @@ msgid "Number of Pages"
msgstr "Seitenzahl"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_open
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_open
msgid "Open"
msgstr "Offen"
@@ -1135,7 +1135,7 @@ msgid "Please give us feedback on our support service"
msgstr "Bitte geben Sie uns Feedback zu unserem Support-Service"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_portal_access_key
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_access_token
msgid "Portal Access Key"
msgstr "Portal Access Key"
@@ -1145,7 +1145,7 @@ msgid "Priorities"
msgstr "Prioritäten"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority
msgid "Priority"
msgstr "Priorität"
@@ -1241,12 +1241,12 @@ msgid "Staff"
msgstr "Mitarbeiter"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_staff_closed
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_staff_closed
msgid "Staff Closed"
msgstr "Durch Mitarbeiter geschlossen"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_staff_replied
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_staff_replied
msgid "Staff Replied"
msgstr "Durch Mitarbeiter beantwortet"
@@ -1256,19 +1256,19 @@ msgid "Staff Reply Email Template"
msgstr "Mitarbeiter Antwort Email Template"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_state
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage
#: model:ir.ui.view,arch_db:website_support.support_ticket_view_list
-msgid "State"
+msgid "stage"
msgstr "Ticket Status"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_name
-msgid "State Name"
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_name
+msgid "stage Name"
msgstr "Status Name"
#. module: website_support
-#: model:ir.ui.menu,name:website_support.website_support_ticket_states_menu
-msgid "States"
+#: model:ir.ui.menu,name:website_support.website_support_ticket_stage_menu
+msgid "stage"
msgstr "Status"
#. module: website_support
@@ -1394,8 +1394,8 @@ msgid "Support Ticket Settings"
msgstr "Support Ticket Settings"
#. module: website_support
-#: model:ir.actions.act_window,name:website_support.website_support_ticket_states_action
-msgid "Support Ticket States"
+#: model:ir.actions.act_window,name:website_support.website_support_ticket_stage_action
+msgid "Support Ticket stage"
msgstr "Support Ticket Statuse"
#. module: website_support
@@ -1652,8 +1652,8 @@ msgstr "website.support.help.page.feedback"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_settings
-msgid "website.support.settings"
-msgstr "website.support.settings"
+msgid "res.config.settings"
+msgstr "res.config.settings"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_ticket_categories
@@ -1681,9 +1681,9 @@ msgid "website.support.ticket.priority"
msgstr "website.support.ticket.priority"
#. module: website_support
-#: model:ir.model,name:website_support.model_website_support_ticket_states
-msgid "website.support.ticket.states"
-msgstr "website.support.ticket.states"
+#: model:ir.model,name:website_support.model_website_support_ticket_stage
+msgid "website.support.ticket.stage"
+msgstr "website.support.ticket.stage"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_ticket_subcategory
diff --git a/website_support/i18n/es.po b/website_support/i18n/es.po
index 5a73b1aee..b8e5a3e88 100644
--- a/website_support/i18n/es.po
+++ b/website_support/i18n/es.po
@@ -20,8 +20,8 @@ msgstr ""
msgid "\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
-" View Ticket Online: here \n"
+" % if object.ticket_id.access_token :\n"
+" View Ticket Online: here \n"
" % endif\n"
" Ticket Number: ${object.ticket_id.ticket_number or object.ticket_id.id} \n"
" Ticket Category: ${object.ticket_id.category.name or ''} \n"
@@ -35,8 +35,8 @@ msgid "\n"
msgstr "\n"
" ${object.body|safe}\n"
" \n"
-" % if object.ticket_id.portal_access_key :\n"
-" Ver ticket online: aquí \n"
+" % if object.ticket_id.access_token :\n"
+" Ver ticket online: aquí \n"
" % endif\n"
" Número de ticket: ${object.ticket_id.ticket_number or object.ticket_id.id} \n"
" Categoría del ticket: ${object.ticket_id.category.name or ''} \n"
@@ -83,7 +83,7 @@ msgid "\n"
" % endif\n"
" Thank you for submitting a support ticket to us, we will get back to your shortly
\n"
" \n"
-" View Ticket Online: here \n"
+" View Ticket Online: here \n"
" Ticket Number: ${object.ticket_number or object.id} \n"
" Ticket Category: \n"
" % if object.category.name :\n"
@@ -101,7 +101,7 @@ msgstr "\n"
" % endif\n"
" Gracias por registrar un nuevo ticket de soporte, le contestaremos en breve
\n"
" \n"
-" Ver ticket online: aquí \n"
+" Ver ticket online: aquí \n"
" Número de ticket: ${object.ticket_number or object.id} \n"
" Categoría del ticket: \n"
" % if object.category.name :\n"
@@ -406,9 +406,9 @@ msgstr " \n"
#. module: website_support
#: model:ir.ui.view,arch_db:website_support.support_ticket_view
msgid " \n"
-" State "
+" Stage "
msgstr " \n"
-" Estado "
+" Etapa "
#. module: website_support
#: model:ir.ui.view,arch_db:website_support.support_ticket_view
@@ -467,7 +467,7 @@ msgstr "Aprobación"
#. module: website_support
#: model:website.support.ticket.approval,name:website_support.approval_accepted
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_approval_accepted
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_approval_accepted
msgid "Approval Accepted"
msgstr "Aprobación aceptada"
@@ -478,7 +478,7 @@ msgstr "Mensaje de aprobación"
#. module: website_support
#: model:website.support.ticket.approval,name:website_support.approval_rejected
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_approval_rejected
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_approval_rejected
msgid "Approval Rejected"
msgstr "Aprobación rechazada"
@@ -510,7 +510,7 @@ msgstr "Enviar encuesta automáticamente"
#. module: website_support
#: model:website.support.ticket.approval,name:website_support.awaiting_approval
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_awaiting_approval
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_awaiting_approval
msgid "Awaiting Approval"
msgstr "Esperando aprobación"
@@ -759,9 +759,9 @@ msgid "Create new sub category"
msgstr "Crear nueva subcategoría"
#. module: website_support
-#: model:ir.actions.act_window,help:website_support.website_support_ticket_states_action
-msgid "Create support ticket state"
-msgstr "Crear estado de ticket de soporte"
+#: model:ir.actions.act_window,help:website_support.website_support_ticket_stage_action
+msgid "Create support ticket stage"
+msgstr "Crear etapa de ticket de soporte"
#. module: website_support
#: model:res.groups,comment:website_support.support_group
@@ -789,7 +789,7 @@ msgstr "Se ha creado una cuenta a través de la web, no tiene acceso al portal (
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_create_uid
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_create_uid
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_create_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_create_uid
@@ -817,7 +817,7 @@ msgstr "Creado por"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_create_date
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_create_date
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_create_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_create_date
@@ -837,12 +837,12 @@ msgid "Customer"
msgstr "Cliente"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_customer_closed
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_customer_closed
msgid "Customer Closed"
msgstr "Cerrado por cliente"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_customer_replied
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_customer_replied
msgid "Customer Replied"
msgstr "Contestado por cliente"
@@ -906,7 +906,7 @@ msgstr "URL de desaprobación"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_display_name
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_display_name
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_display_name
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_display_name
@@ -937,7 +937,7 @@ msgid "Email Templates"
msgstr "Plantillas de correo electrónico"
#. module: website_support
-#: selection:website.support.settings,allow_website_priority_set:0
+#: selection:res.config.settings,allow_website_priority_set:0
msgid "Everyone"
msgstr "Todos"
@@ -993,7 +993,7 @@ msgid "Group"
msgstr "Grupo"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:61
#: model:ir.model.fields,field_description:website_support.field_website_support_help_groups_name
#, python-format
@@ -1041,8 +1041,8 @@ msgstr "Alto"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_id
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_id_7369
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_7369
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_id
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_id
@@ -1050,14 +1050,14 @@ msgid "ID"
msgstr "ID"
#. module: website_support
-#: model:ir.model.fields,help:website_support.field_website_support_ticket_states_unattended
-msgid "If ticked, tickets in this state will appear by default"
-msgstr "Si se marca, los tickets de este estado aparecerán por defecto"
+#: model:ir.model.fields,help:website_support.field_website_support_ticket_stage_unattended
+msgid "If ticked, tickets in this stage will appear by default"
+msgstr "Si se marca, los tickets de esta etapa aparecerán por defecto"
#. module: website_support
#: model:ir.model.fields,help:website_support.field_website_support_ticket_unattended
-msgid "In 'Open' state or 'Customer Replied' state taken into consideration name changes"
-msgstr "En estado 'Abierto' o 'Contestación del cliente' se tendrán en cuenta los cambios de nombre"
+msgid "In 'Open' stage or 'Customer Replied' stage taken into consideration name changes"
+msgstr "En la etapa 'Abierto' o 'Contestación del cliente' se tendrán en cuenta los cambios de nombre"
#. module: website_support
#: model:ir.model.fields,help:website_support.field_website_support_ticket_sla_alert_ids
@@ -1091,7 +1091,7 @@ msgstr "Descripción"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority___last_update
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states___last_update
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field___last_update
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag___last_update
@@ -1118,7 +1118,7 @@ msgstr "Última modificación en"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_write_uid
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_write_uid
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_write_uid
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_write_uid
@@ -1146,7 +1146,7 @@ msgstr "Última actualización por"
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_field_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_message_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_write_date
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_write_date
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_field_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_subcategory_write_date
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_tag_write_date
@@ -1161,7 +1161,7 @@ msgstr "Baja"
#. module: website_support
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_compose_template_id
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_mail_template_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_mail_template_id
msgid "Mail Template"
msgstr "Plantilla de correo"
@@ -1226,7 +1226,7 @@ msgid "Name"
msgstr "Nombre"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:60
#: model:ir.ui.view,arch_db:website_support.content_new_help
#, python-format
@@ -1234,7 +1234,7 @@ msgid "New Help Group"
msgstr "Nuevo grupo de ayuda"
#. module: website_support
-#. openerp-web
+#. odoo-web
#: code:addons/website_support/static/src/js/website_support.editor.js:28
#: model:ir.ui.view,arch_db:website_support.content_new_help
#, python-format
@@ -1289,7 +1289,7 @@ msgid "Number of hours before or after SLA expiry to send alert"
msgstr "Número de horas para enviar alerta de SLA antes o después"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_open
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_open
msgid "Open"
msgstr "Abierto"
@@ -1330,7 +1330,7 @@ msgid "Partner"
msgstr "Empresa"
#. module: website_support
-#: selection:website.support.settings,allow_website_priority_set:0
+#: selection:res.config.settings,allow_website_priority_set:0
msgid "Partner Only"
msgstr "Solo cliente"
@@ -1366,7 +1366,7 @@ msgid "Please give us feedback on our support service"
msgstr "Por favor, denos su opinión de nuestro servicio de soporte"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_portal_access_key
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_access_token
msgid "Portal Access Key"
msgstr "Clave de acceso al portal"
@@ -1376,7 +1376,7 @@ msgid "Priorities"
msgstr "Prioridades"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority_id
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_priority
#: model:ir.ui.view,arch_db:website_support.support_submit_ticket
msgid "Priority"
msgstr "Prioridad"
@@ -1534,12 +1534,12 @@ msgid "Staff"
msgstr "Operarios"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_staff_closed
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_staff_closed
msgid "Staff Closed"
msgstr "Cerrado por los operarios"
#. module: website_support
-#: model:website.support.ticket.states,name:website_support.website_ticket_state_staff_replied
+#: model:website.support.ticket.stage,name:website_support.website_ticket_stage_staff_replied
msgid "Staff Replied"
msgstr "Respondido por los operarios"
@@ -1549,20 +1549,20 @@ msgid "Staff Reply Email Template"
msgstr "Plantilla de correo electrónico para respuestas de operarios"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_state
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage
#: model:ir.ui.view,arch_db:website_support.support_ticket_view_list
-msgid "State"
-msgstr "Estado"
+msgid "Stage"
+msgstr "Etapa"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_name
-msgid "State Name"
-msgstr "Nombre estado"
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_name
+msgid "Name"
+msgstr "Nombre"
#. module: website_support
-#: model:ir.ui.menu,name:website_support.website_support_ticket_states_menu
-msgid "States"
-msgstr "Estados"
+#: model:ir.ui.menu,name:website_support.website_support_ticket_stage_menu
+msgid "Stages"
+msgstr "Etapas"
#. module: website_support
#: model:ir.model.fields,field_description:website_support.field_website_support_department_sub_category_ids
@@ -1696,9 +1696,9 @@ msgid "Support Ticket Settings"
msgstr "Ajuste del ticket de soporte"
#. module: website_support
-#: model:ir.actions.act_window,name:website_support.website_support_ticket_states_action
-msgid "Support Ticket States"
-msgstr "Estados del ticket de soporte"
+#: model:ir.actions.act_window,name:website_support.website_support_ticket_stage_action
+msgid "Support Ticket Stages"
+msgstr "Etapas del ticket de soporte"
#. module: website_support
#: model:ir.model.fields,field_description:website_support.field_res_partner_support_ticket_string
@@ -1767,9 +1767,9 @@ msgid "Thank you for you feedback about our support"
msgstr "Gracias por la opinión sobre nuestro soporte"
#. module: website_support
-#: model:ir.model.fields,help:website_support.field_website_support_ticket_states_mail_template_id
-msgid "The mail message that the customer gets when the state changes"
-msgstr "El mensaje por correo electrónico que el cliente recibe cuando el estado cambia"
+#: model:ir.model.fields,help:website_support.field_website_support_ticket_stage_mail_template_id
+msgid "The mail message that the customer gets when the stage changes"
+msgstr "El mensaje por correo electrónico que el cliente recibe cuando la etapa cambia"
#. module: website_support
#: model:ir.model.fields,field_description:website_support.field_website_support_sla_response_category_id
@@ -1827,7 +1827,7 @@ msgid "URL"
msgstr "URL"
#. module: website_support
-#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_states_unattended
+#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_stage_unattended
#: model:ir.model.fields,field_description:website_support.field_website_support_ticket_unattended
msgid "Unattended"
msgstr "Desatendidos"
@@ -1998,8 +1998,8 @@ msgstr "website.support.help.page.feedback"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_settings
-msgid "website.support.settings"
-msgstr "website.support.settings"
+msgid "res.config.settings"
+msgstr "res.config.settings"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_sla
@@ -2052,9 +2052,9 @@ msgid "website.support.ticket.priority"
msgstr "website.support.ticket.priority"
#. module: website_support
-#: model:ir.model,name:website_support.model_website_support_ticket_states
-msgid "website.support.ticket.states"
-msgstr "website.support.ticket.states"
+#: model:ir.model,name:website_support.model_website_support_ticket_stage
+msgid "website.support.ticket.stage"
+msgstr "website.support.ticket.stage"
#. module: website_support
#: model:ir.model,name:website_support.model_website_support_ticket_subcategory
@@ -2070,4 +2070,3 @@ msgstr "website.support.ticket.subcategory.field"
#: model:ir.model,name:website_support.model_website_support_ticket_tag
msgid "website.support.ticket.tag"
msgstr "website.support.ticket.tag"
-
diff --git a/website_support/models/mail_template.py b/website_support/models/mail_template.py
index abc4636b9..94ddc20aa 100644
--- a/website_support/models/mail_template.py
+++ b/website_support/models/mail_template.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-from openerp import api, fields, models
+from odoo import api, fields, models
class MailTemplateSupportTicket(models.Model):
diff --git a/website_support/models/res_partner.py b/website_support/models/res_partner.py
index ca20148de..9470a92db 100644
--- a/website_support/models/res_partner.py
+++ b/website_support/models/res_partner.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-from openerp import api, fields, models
+from odoo import api, fields, models
class ResPartnerTicket(models.Model):
@@ -22,8 +22,8 @@ def _count_support_tickets(self):
@api.depends('support_ticket_ids')
def _count_new_support_tickets(self):
"""Sets the amount of new support tickets owned by this customer"""
- opened_state = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_open')
- self.new_support_ticket_count = self.support_ticket_ids.search_count([('partner_id','=',self.id), ('state','=',opened_state.id)])
+ opened_stage = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_open')
+ self.new_support_ticket_count = self.support_ticket_ids.search_count([('partner_id','=',self.id), ('stage','=',opened_stage.id)])
@api.one
@api.depends('support_ticket_count', 'new_support_ticket_count')
diff --git a/website_support/models/website_support_department.py b/website_support/models/website_support_department.py
index 25dfc6bf5..2287ea677 100644
--- a/website_support/models/website_support_department.py
+++ b/website_support/models/website_support_department.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import datetime
-from openerp import api, fields, models
+from odoo import api, fields, models
class WebsiteSupportDepartment(models.Model):
diff --git a/website_support/models/website_support_help.py b/website_support/models/website_support_help.py
index ffb162627..a3265033b 100644
--- a/website_support/models/website_support_help.py
+++ b/website_support/models/website_support_help.py
@@ -2,9 +2,9 @@
import unicodedata
import re
-from openerp import api, fields, models
-from openerp.http import request
-from openerp.tools import html_escape as escape, ustr, image_resize_and_sharpen, image_save_for_web
+from odoo import api, fields, models
+from odoo.http import request
+from odoo.tools import html_escape as escape, ustr, image_resize_and_sharpen, image_save_for_web
from odoo.addons.http_routing.models.ir_http import slug
diff --git a/website_support/models/website_support_settings.py b/website_support/models/website_support_settings.py
index 75b80f66d..2d7249bc7 100644
--- a/website_support/models/website_support_settings.py
+++ b/website_support/models/website_support_settings.py
@@ -1,15 +1,8 @@
-# -*- coding: utf-8 -*-
-import logging
-_logger = logging.getLogger(__name__)
-import requests
-from openerp.http import request
-import odoo
+from odoo import api, fields, models
-from openerp import api, fields, models
+class ResConfigSettings(models.TransientModel):
-class WebsiteSupportSettings(models.Model):
-
- _name = "website.support.settings"
+ _name = "res.config.settings"
_inherit = 'res.config.settings'
close_ticket_email_template_id = fields.Many2one('mail.template', domain="[('model_id','=','website.support.ticket')]", string="(OBSOLETE)Close Ticket Email Template")
@@ -25,37 +18,40 @@ class WebsiteSupportSettings(models.Model):
google_captcha_client_key = fields.Char(string="reCAPTCHA Client Key")
google_captcha_secret_key = fields.Char(string="reCAPTCHA Secret Key")
allow_website_priority_set = fields.Selection([("partner","Partner Only"), ("everyone","Everyone")], string="Allow Website Priority Set", help="Cusomters can set the priority of a ticket when submitting via the website form\nPartner Only = logged in user")
+ sla_active = fields.Boolean(string="SLA Active")
@api.multi
def set_values(self):
- super(WebsiteSupportSettings, self).set_values()
- self.env['ir.default'].set('website.support.settings', 'auto_send_survey', self.auto_send_survey)
- self.env['ir.default'].set('website.support.settings', 'allow_user_signup', self.allow_user_signup)
- self.env['ir.default'].set('website.support.settings', 'change_user_email_template_id', self.change_user_email_template_id.id)
- self.env['ir.default'].set('website.support.settings', 'close_ticket_email_template_id', self.close_ticket_email_template_id.id)
- self.env['ir.default'].set('website.support.settings', 'email_default_category_id', self.email_default_category_id.id)
- self.env['ir.default'].set('website.support.settings', 'staff_reply_email_template_id', self.staff_reply_email_template_id.id)
- self.env['ir.default'].set('website.support.settings', 'max_ticket_attachments', self.max_ticket_attachments)
- self.env['ir.default'].set('website.support.settings', 'max_ticket_attachment_filesize', self.max_ticket_attachment_filesize)
- self.env['ir.default'].set('website.support.settings', 'business_hours_id', self.business_hours_id.id)
- self.env['ir.default'].set('website.support.settings', 'google_recaptcha_active', self.google_recaptcha_active)
- self.env['ir.default'].set('website.support.settings', 'google_captcha_client_key', self.google_captcha_client_key)
- self.env['ir.default'].set('website.support.settings', 'google_captcha_secret_key', self.google_captcha_secret_key)
- self.env['ir.default'].set('website.support.settings', 'allow_website_priority_set', self.allow_website_priority_set)
-
+ super(ResConfigSettings, self).set_values()
+ self.env['ir.default'].set('res.config.settings', 'auto_send_survey', self.auto_send_survey)
+ self.env['ir.default'].set('res.config.settings', 'allow_user_signup', self.allow_user_signup)
+ self.env['ir.default'].set('res.config.settings', 'change_user_email_template_id', self.change_user_email_template_id.id)
+ self.env['ir.default'].set('res.config.settings', 'close_ticket_email_template_id', self.close_ticket_email_template_id.id)
+ self.env['ir.default'].set('res.config.settings', 'email_default_category_id', self.email_default_category_id.id)
+ self.env['ir.default'].set('res.config.settings', 'staff_reply_email_template_id', self.staff_reply_email_template_id.id)
+ self.env['ir.default'].set('res.config.settings', 'max_ticket_attachments', self.max_ticket_attachments)
+ self.env['ir.default'].set('res.config.settings', 'max_ticket_attachment_filesize', self.max_ticket_attachment_filesize)
+ self.env['ir.default'].set('res.config.settings', 'business_hours_id', self.business_hours_id.id)
+ self.env['ir.default'].set('res.config.settings', 'google_recaptcha_active', self.google_recaptcha_active)
+ self.env['ir.default'].set('res.config.settings', 'google_captcha_client_key', self.google_captcha_client_key)
+ self.env['ir.default'].set('res.config.settings', 'google_captcha_secret_key', self.google_captcha_secret_key)
+ self.env['ir.default'].set('res.config.settings', 'allow_website_priority_set', self.allow_website_priority_set)
+ self.env['ir.default'].set('res.config.settings', 'sla_active', self.sla_active)
+
@api.model
def get_values(self):
- res = super(WebsiteSupportSettings, self).get_values()
+ res = super(ResConfigSettings, self).get_values()
res.update(
- auto_send_survey=self.env['ir.default'].get('website.support.settings', 'auto_send_survey'),
- allow_user_signup=self.env['ir.default'].get('website.support.settings', 'allow_user_signup'),
- change_user_email_template_id=self.env['ir.default'].get('website.support.settings', 'change_user_email_template_id'),
- close_ticket_email_template_id=self.env['ir.default'].get('website.support.settings', 'close_ticket_email_template_id'),
- email_default_category_id=self.env['ir.default'].get('website.support.settings', 'email_default_category_id'),
- staff_reply_email_template_id=self.env['ir.default'].get('website.support.settings', 'staff_reply_email_template_id'),
- max_ticket_attachments=self.env['ir.default'].get('website.support.settings', 'max_ticket_attachments'),
- max_ticket_attachment_filesize=self.env['ir.default'].get('website.support.settings', 'max_ticket_attachment_filesize'),
- business_hours_id=self.env['ir.default'].get('website.support.settings', 'business_hours_id'),
- allow_website_priority_set=self.env['ir.default'].get('website.support.settings', 'allow_website_priority_set')
+ auto_send_survey=self.env['ir.default'].get('res.config.settings', 'auto_send_survey'),
+ allow_user_signup=self.env['ir.default'].get('res.config.settings', 'allow_user_signup'),
+ change_user_email_template_id=self.env['ir.default'].get('res.config.settings', 'change_user_email_template_id'),
+ close_ticket_email_template_id=self.env['ir.default'].get('res.config.settings', 'close_ticket_email_template_id'),
+ email_default_category_id=self.env['ir.default'].get('res.config.settings', 'email_default_category_id'),
+ staff_reply_email_template_id=self.env['ir.default'].get('res.config.settings', 'staff_reply_email_template_id'),
+ max_ticket_attachments=self.env['ir.default'].get('res.config.settings', 'max_ticket_attachments'),
+ max_ticket_attachment_filesize=self.env['ir.default'].get('res.config.settings', 'max_ticket_attachment_filesize'),
+ business_hours_id=self.env['ir.default'].get('res.config.settings', 'business_hours_id'),
+ allow_website_priority_set=self.env['ir.default'].get('res.config.settings', 'allow_website_priority_set'),
+ sla_active=self.env['ir.default'].get('res.config.settings', 'sla_active')
)
- return res
\ No newline at end of file
+ return res
diff --git a/website_support/models/website_support_sla.py b/website_support/models/website_support_sla.py
index 50646d50e..e97bcf430 100644
--- a/website_support/models/website_support_sla.py
+++ b/website_support/models/website_support_sla.py
@@ -4,7 +4,7 @@
_logger = logging.getLogger(__name__)
from odoo.exceptions import UserError
-from openerp import api, fields, models
+from odoo import api, fields, models
class WebsiteSupportSLA(models.Model):
@@ -41,7 +41,7 @@ def create(self, values):
#Setting for business hours has to be set before they can use business hours only SLA option
if values['countdown_condition'] == 'business_only':
- setting_business_hours_id = self.env['ir.default'].get('website.support.settings', 'business_hours_id')
+ setting_business_hours_id = self.env['ir.default'].get('res.config.settings', 'business_hours_id')
if setting_business_hours_id is None:
raise UserError("Please set business hours in settings before using this option")
diff --git a/website_support/models/website_support_ticket.py b/website_support/models/website_support_ticket.py
index 54d599354..306e3c5ee 100644
--- a/website_support/models/website_support_ticket.py
+++ b/website_support/models/website_support_ticket.py
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
-from openerp import api, fields, models
-from openerp import tools
+from odoo import api, fields, models
+from odoo import tools
from random import randint
import datetime
+import uuid
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
from odoo import SUPERUSER_ID
from dateutil import tz
@@ -10,6 +11,12 @@
import logging
_logger = logging.getLogger(__name__)
+AVAILABLE_PRIORITIES = [
+ ('0', 'Normal'),
+ ('1', 'Low'),
+ ('2', 'High'),
+ ('3', 'Very High'),
+ ]
class WebsiteSupportTicket(models.Model):
@@ -17,43 +24,46 @@ class WebsiteSupportTicket(models.Model):
_description = "Website Support Ticket"
_order = "create_date desc"
_rec_name = "subject"
- _inherit = ['mail.thread']
+ _inherit = ['mail.thread', 'mail.activity.mixin', 'portal.mixin']
_translate = True
@api.model
- def _read_group_state(self, states, domain, order):
- """ Read group customization in order to display all the states in the
+ def _read_group_stage(self, stage, domain, order):
+ """ Read group customization in order to display all the stage in the
kanban view, even if they are empty
"""
- staff_replied_state = self.env['ir.model.data'].get_object('website_support',
- 'website_ticket_state_staff_replied')
- customer_replied_state = self.env['ir.model.data'].get_object('website_support',
- 'website_ticket_state_customer_replied')
+ staff_replied_stage = self.env['ir.model.data'].get_object('website_support',
+ 'website_ticket_stage_staff_replied')
+ customer_replied_stage = self.env['ir.model.data'].get_object('website_support',
+ 'website_ticket_stage_customer_replied')
customer_closed = self.env['ir.model.data'].get_object('website_support',
- 'website_ticket_state_customer_closed')
- staff_closed = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_staff_closed')
+ 'website_ticket_stage_customer_closed')
+ staff_closed = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_staff_closed')
- exclude_states = [staff_replied_state.id, customer_replied_state.id, customer_closed.id, staff_closed.id]
+ exclude_stage = [staff_replied_stage.id, customer_replied_stage.id, customer_closed.id, staff_closed.id]
- # state_ids = states._search([('id','not in',exclude_states)], order=order, access_rights_uid=SUPERUSER_ID)
- state_ids = states._search([], order=order, access_rights_uid=SUPERUSER_ID)
+ # stage_ids = stage._search([('id','not in',exclude_stage)], order=order, access_rights_uid=SUPERUSER_ID)
+ stage_ids = stage._search([], order=order, access_rights_uid=SUPERUSER_ID)
- return states.browse(state_ids)
+ return stage.browse(stage_ids)
- def _default_state(self):
- return self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_open')
-
- def _default_priority_id(self):
- default_priority = self.env['website.support.ticket.priority'].search([('sequence','=','1')])
- return default_priority[0]
+ def _default_stage(self):
+ return self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_open')
def _default_approval_id(self):
return self.env['ir.model.data'].get_object('website_support', 'no_approval_required')
-
+ def _get_default_access_token(self):
+ return str(uuid.uuid4())
+
+ color = fields.Integer(string='Color Index')
+ access_token = fields.Char(
+ 'Security Token', copy=False,
+ default=_get_default_access_token)
+ # displayed_image_id = fields.Many2one('ir.attachment', domain="[('res_model', '=', 'website.support.ticket'),('res_id', '=', id), ('mimetype', 'ilike', 'image')]", string='Cover Image')
channel = fields.Char(string="Channel", default="Manual")
create_user_id = fields.Many2one('res.users', "Create User")
- priority_id = fields.Many2one('website.support.ticket.priority', default=_default_priority_id, string="Priority")
+ priority = fields.Selection(AVAILABLE_PRIORITIES, string="Priority", index=True, default=AVAILABLE_PRIORITIES[0][0])
parent_company_id = fields.Many2one(string="Parent Company", related="partner_id.company_id")
partner_id = fields.Many2one('res.partner', string="Partner")
user_id = fields.Many2one('res.users', string="Assigned User")
@@ -64,18 +74,21 @@ def _default_approval_id(self):
sub_category_id = fields.Many2one('website.support.ticket.subcategory', string="Sub Category")
subject = fields.Char(string="Subject")
description = fields.Text(string="Description")
- state = fields.Many2one('website.support.ticket.states', group_expand='_read_group_state', default=_default_state,
- string="State")
+ stage = fields.Many2one('website.support.ticket.stage', group_expand='_read_group_stage', default=_default_stage,
+ string="Stage")
+ date_last_stage_update = fields.Datetime(
+ string='Last Stage Update',
+ index=True,
+ default=fields.Datetime.now)
+
conversation_history = fields.One2many('website.support.ticket.message', 'ticket_id', string="Conversation History")
attachment = fields.Binary(string="Attachments")
attachment_filename = fields.Char(string="Attachment Filename")
attachment_ids = fields.One2many('ir.attachment', 'res_id', domain=[('res_model', '=', 'website.support.ticket')],
string="Media Attachments")
unattended = fields.Boolean(string="Unattended", compute="_compute_unattend", store="True",
- help="In 'Open' state or 'Customer Replied' state taken into consideration name changes")
- portal_access_key = fields.Char(string="Portal Access Key")
+ help="In 'Open' stage or 'Customer Replied' stage taken into consideration name changes")
ticket_number = fields.Char(string="Ticket Number", readonly=True)
- ticket_color = fields.Char(related="priority_id.color", string="Ticket Color")
company_id = fields.Many2one('res.company', string="Company",
default=lambda self: self.env['res.company']._company_default_get('website.support.ticket') )
support_rating = fields.Integer(string="Support Rating")
@@ -121,7 +134,7 @@ def update_sla_timer(self):
if active_sla_ticket.sla_response_category_id.countdown_condition == 'business_only':
# Check if the current time aligns with a timeslot in the settings,
# setting has to be set for business_only or UserError occurs
- setting_business_hours_id = self.env['ir.default'].get('website.support.settings', 'business_hours_id')
+ setting_business_hours_id = self.env['ir.default'].get('res.config.settings', 'business_hours_id')
current_hour = datetime.datetime.now().hour
current_minute = datetime.datetime.now().minute / 60
current_hour_float = current_hour + current_minute
@@ -129,7 +142,7 @@ def update_sla_timer(self):
during_work_hours = self.env['resource.calendar.attendance'].search([('calendar_id','=', setting_business_hours_id), ('dayofweek','=',day_of_week), ('hour_from','<',current_hour_float), ('hour_to','>',current_hour_float)])
# If holiday module is installed take into consideration
- holiday_module = self.env['ir.module.module'].search([('name','=','hr_public_holidays'), ('state','=','installed')])
+ holiday_module = self.env['ir.module.module'].search([('name','=','hr_public_holidays'), ('stage','=','installed')])
if holiday_module:
holiday_today = self.env['hr.holidays.public.line'].search([('date','=',datetime.datetime.now().date())])
if holiday_today:
@@ -243,7 +256,7 @@ def message_new(self, msg, custom_values=None):
defaults['description'] = tools.html_sanitize(msg.get('body'))
#Assign to default category
- setting_email_default_category_id = self.env['ir.default'].get('website.support.settings', 'email_default_category_id')
+ setting_email_default_category_id = self.env['ir.default'].get('res.config.settings', 'email_default_category_id')
if setting_email_default_category_id:
defaults['category'] = setting_email_default_category_id
@@ -261,22 +274,22 @@ def message_update(self, msg_dict, update_vals=None):
#If the to email address is to the customer then it must be a staff member
if msg_dict.get('to') == self.email:
- change_state = self.env['ir.model.data'].get_object('website_support','website_ticket_state_staff_replied')
+ change_stage = self.env['ir.model.data'].get_object('website_support','website_ticket_stage_staff_replied')
else:
- change_state = self.env['ir.model.data'].get_object('website_support','website_ticket_state_customer_replied')
+ change_stage = self.env['ir.model.data'].get_object('website_support','website_ticket_stage_customer_replied')
- self.state = change_state.id
+ self.stage = change_stage.id
return super(WebsiteSupportTicket, self).message_update(msg_dict, update_vals=update_vals)
@api.one
- @api.depends('state')
+ @api.depends('stage')
def _compute_unattend(self):
- #BACK COMPATABLITY Use open and customer reply as default unattended states
- opened_state = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_open')
- customer_replied_state = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_customer_replied')
+ #BACK COMPATABLITY Use open and customer reply as default unattended stage
+ opened_stage = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_open')
+ customer_replied_stage = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_customer_replied')
- if self.state == opened_state or self.state == customer_replied_state or self.state.unattended == True:
+ if self.stage == opened_stage or self.stage == customer_replied_stage or self.stage.unattended == True:
self.unattended = True
@api.multi
@@ -313,9 +326,9 @@ def open_close_ticket_wizard(self):
@api.model
def _needaction_domain_get(self):
- open_state = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_open')
- custom_replied_state = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_customer_replied')
- return ['|',('state', '=', open_state.id ), ('state', '=', custom_replied_state.id)]
+ open_stage = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_open')
+ custom_replied_stage = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_customer_replied')
+ return ['|',('stage', '=', open_stage.id ), ('stage', '=', custom_replied_stage.id)]
@api.model
def create(self, vals):
@@ -324,9 +337,7 @@ def create(self, vals):
new_id = super(WebsiteSupportTicket, self).create(vals)
- new_id.portal_access_key = randint(1000000000,2000000000)
-
- ticket_open_email_template = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_open').mail_template_id
+ ticket_open_email_template = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_open').mail_template_id
ticket_open_email_template.send_mail(new_id.id, True)
#Check if this contact has a SLA assigned
@@ -361,10 +372,11 @@ def create(self, vals):
def write(self, values, context=None):
update_rec = super(WebsiteSupportTicket, self).write(values)
-
- if 'state' in values:
- if self.state.mail_template_id:
- self.state.mail_template_id.send_mail(self.id, True)
+ now = fields.Datetime.now()
+ if 'stage' in values:
+ if self.stage.mail_template_id:
+ self.stage.mail_template_id.send_mail(self.id, True)
+ self.date_last_stage_update = now
#Email user if category has changed
if 'category' in values:
@@ -372,7 +384,7 @@ def write(self, values, context=None):
change_category_email.send_mail(self.id, True)
if 'user_id' in values:
- setting_change_user_email_template_id = self.env['ir.default'].get('website.support.settings', 'change_user_email_template_id')
+ setting_change_user_email_template_id = self.env['ir.default'].get('res.config.settings', 'change_user_email_template_id')
if setting_change_user_email_template_id:
email_template = self.env['mail.template'].browse(setting_change_user_email_template_id)
@@ -390,14 +402,13 @@ def write(self, values, context=None):
send_mail = self.env['mail.mail'].create(email_values)
send_mail.send()
-
return update_rec
def send_survey(self):
notification_template = self.env['ir.model.data'].sudo().get_object('website_support', 'support_ticket_survey')
values = notification_template.generate_email(self.id)
- surevey_url = "support/survey/" + str(self.portal_access_key)
+ surevey_url = "support/survey/" + str(self.access_token)
values['body_html'] = values['body_html'].replace("_survey_url_",surevey_url)
send_mail = self.env['mail.mail'].create(values)
send_mail.send(True)
@@ -465,34 +476,26 @@ class WebsiteSupportTicketSubCategoryField(models.Model):
name = fields.Char(string="Label", required="True")
type = fields.Selection([('textbox','Textbox')], default="textbox", required="True", string="Type")
-class WebsiteSupportTicketStates(models.Model):
-
- _name = "website.support.ticket.states"
-
- name = fields.Char(required=True, translate=True, string='State Name')
- mail_template_id = fields.Many2one('mail.template', domain="[('model_id','=','website.support.ticket')]", string="Mail Template", help="The mail message that the customer gets when the state changes")
- unattended = fields.Boolean(string="Unattended", help="If ticked, tickets in this state will appear by default")
+class WebsiteSupportTicketstage(models.Model):
-class WebsiteSupportTicketPriority(models.Model):
+ _name = "website.support.ticket.stage"
- _name = "website.support.ticket.priority"
- _order = "sequence asc"
-
- sequence = fields.Integer(string="Sequence")
- name = fields.Char(required=True, translate=True, string="Priority Name")
- color = fields.Char(string="Color")
-
- @api.model
- def create(self, values):
- sequence=self.env['ir.sequence'].next_by_code('website.support.ticket.priority')
- values['sequence']=sequence
- return super(WebsiteSupportTicketPriority, self).create(values)
+ name = fields.Char(required=True, translate=True, string='Name')
+ mail_template_id = fields.Many2one('mail.template', domain="[('model_id','=','website.support.ticket')]", string="Mail Template", help="The mail message that the customer gets when the stage changes")
+ unattended = fields.Boolean(string="Unattended", help="If ticked, tickets in this stage will appear by default")
+ fold = fields.Boolean(string='Folded in Kanban',
+ help='This stage is folded in the kanban view when there are no records in that stage to display.')
class WebsiteSupportTicketTag(models.Model):
_name = "website.support.ticket.tag"
name = fields.Char(required=True, translate=True, string="Tag Name")
+ color = fields.Integer(string='Color Index', default=10)
+
+ _sql_constraints = [
+ ('name_uniq', 'unique (name)', "Tag name already exists !"),
+ ]
class WebsiteSupportTicketUsers(models.Model):
@@ -517,27 +520,27 @@ def close_ticket(self):
diff_time = datetime.datetime.strptime(self.ticket_id.close_time, DEFAULT_SERVER_DATETIME_FORMAT) - datetime.datetime.strptime(self.ticket_id.create_date, DEFAULT_SERVER_DATETIME_FORMAT)
self.ticket_id.time_to_close = diff_time.seconds
- closed_state = self.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_state_staff_closed')
+ closed_stage = self.env['ir.model.data'].sudo().get_object('website_support', 'website_ticket_stage_staff_closed')
- #We record state change manually since it would spam the chatter if every 'Staff Replied' and 'Customer Replied' gets recorded
- message = "\nState: " + self.ticket_id.state.name + " -> " + closed_state.name + " "
+ #We record stage change manually since it would spam the chatter if every 'Staff Replied' and 'Customer Replied' gets recorded
+ message = "\nstage: " + self.ticket_id.stage.name + " -> " + closed_stage.name + " "
self.ticket_id.message_post(body=message, subject="Ticket Closed by Staff")
self.ticket_id.close_comment = self.message
self.ticket_id.closed_by_id = self.env.user.id
- self.ticket_id.state = closed_state.id
+ self.ticket_id.stage = closed_stage.id
self.ticket_id.sla_active = False
#Auto send out survey
- setting_auto_send_survey = self.env['ir.default'].get('website.support.settings', 'auto_send_survey')
+ setting_auto_send_survey = self.env['ir.default'].get('res.config.settings', 'auto_send_survey')
if setting_auto_send_survey:
self.ticket_id.send_survey()
- closed_state_mail_template = self.env['ir.model.data'].get_object('website_support', 'website_ticket_state_staff_closed').mail_template_id
+ closed_stage_mail_template = self.env['ir.model.data'].get_object('website_support', 'website_ticket_stage_staff_closed').mail_template_id
- if closed_state_mail_template:
- closed_state_mail_template.send_mail(self.ticket_id.id, True)
+ if closed_stage_mail_template:
+ closed_stage_mail_template.send_mail(self.ticket_id.id, True)
class WebsiteSupportTicketCompose(models.Model):
@@ -561,11 +564,11 @@ def _onchange_template_id(self):
@api.one
def send_reply(self):
- #Change the approval state before we send the mail
+ #Change the approval stage before we send the mail
if self.approval:
- #Change the ticket state to awaiting approval
- awaiting_approval_state = self.env['ir.model.data'].get_object('website_support','website_ticket_state_awaiting_approval')
- self.ticket_id.state = awaiting_approval_state.id
+ #Change the ticket stage to awaiting approval
+ awaiting_approval_stage = self.env['ir.model.data'].get_object('website_support','website_ticket_stage_awaiting_approval')
+ self.ticket_id.stage = awaiting_approval_stage.id
#One support request per ticket...
self.ticket_id.planned_time = self.planned_time
@@ -575,7 +578,7 @@ def send_reply(self):
#Send email
values = {}
- setting_staff_reply_email_template_id = self.env['ir.default'].get('website.support.settings', 'staff_reply_email_template_id')
+ setting_staff_reply_email_template_id = self.env['ir.default'].get('res.config.settings', 'staff_reply_email_template_id')
if setting_staff_reply_email_template_id:
email_wrapper = self.env['mail.template'].browse(setting_staff_reply_email_template_id)
@@ -597,6 +600,6 @@ def send_reply(self):
awaiting_approval = self.env['ir.model.data'].get_object('website_support','awaiting_approval')
self.ticket_id.approval_id = awaiting_approval.id
else:
- #Change the ticket state to staff replied
- staff_replied = self.env['ir.model.data'].get_object('website_support','website_ticket_state_staff_replied')
- self.ticket_id.state = staff_replied.id
\ No newline at end of file
+ #Change the ticket stage to staff replied
+ staff_replied = self.env['ir.model.data'].get_object('website_support','website_ticket_stage_staff_replied')
+ self.ticket_id.stage = staff_replied.id
diff --git a/website_support/security/ir.model.access.csv b/website_support/security/ir.model.access.csv
index 83be3f1d2..3bb38118e 100644
--- a/website_support/security/ir.model.access.csv
+++ b/website_support/security/ir.model.access.csv
@@ -1,8 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_website_support_ticket,access website.support.ticket,model_website_support_ticket,support_staff,1,1,1,0
access_website_support_ticket_compose,access website.support.ticket.compose,model_website_support_ticket_compose,support_staff,1,1,1,0
-access_website_support_ticket_states,support staff access website.support.ticket.states,model_website_support_ticket_states,support_staff,1,0,0,0
-access_website_support_ticket_states_maanger,support manager access website.support.ticket.states,model_website_support_ticket_states,support_manager,1,1,1,1
+access_website_support_ticket_stage,support staff access website.support.ticket.stage,model_website_support_ticket_stage,support_staff,1,0,0,0
+access_website_support_ticket_stage_maanger,support manager access website.support.ticket.stage,model_website_support_ticket_stage,support_manager,1,1,1,1
access_website_support_ticket_message,access website.support.ticket.message,model_website_support_ticket_message,support_staff,1,0,1,0
access_mail_followers_support,public access.mail.followers.support,mail.model_mail_followers,base.group_public,0,0,1,0
access_website_support_ticket_categories,support staff access website.support.ticket.categories,model_website_support_ticket_categories,support_staff,1,0,0,0
@@ -15,8 +15,6 @@ access_website_support_help_page,public access website.support.help.page,model_w
access_website_support_help_page_manager,support manager access website.support.help.page,model_website_support_help_page,support_manager,1,1,1,1
access_website_support_help_page_feedback,public access website.support.help.page.feedback,model_website_support_help_page_feedback,base.group_public,1,0,0,0
access_website_support_help_page_feedback_manager,support manager access website.support.help.page.feedback,model_website_support_help_page_feedback,support_manager,1,1,1,1
-access_website_support_ticket_priority,support staff access website.support.ticket.priority,model_website_support_ticket_priority,support_staff,1,0,0,0
-access_website_support_ticket_priority_manager,support manager access website.support.ticket.priority,model_website_support_ticket_priority,support_manager,1,1,1,1
access_website_support_ticket_tag,support staff access website.support.ticket.tag,model_website_support_ticket_tag,support_staff,1,0,0,0
access_website_support_ticket_tag_manager,support manager access website.support.ticket.tag,model_website_support_ticket_tag,support_manager,1,1,1,1
access_website_support_ticket_close,support staff access website.support.ticket.close,model_website_support_ticket_close,support_staff,1,1,1,1
@@ -34,4 +32,7 @@ access_website_support_sla_alert,support staff access website.support.sla.alert,
access_website_support_sla_alert_maanger,support manager access website.support.sla.alert,model_website_support_sla_alert,support_manager,1,1,1,1
access_ir_rule,support manager access ir.rule,base.model_ir_rule,support_manager,1,0,0,0
access_ir_config_parameter,support manager access ir.config_parameter,base.model_ir_config_parameter,support_manager,1,0,0,0
-access_res_users,support manager access res.users,base.model_res_users,support_manager,1,0,1,0
\ No newline at end of file
+access_res_users,support manager access res.users,base.model_res_users,support_manager,1,0,1,0
+access_menu_portal_website_support_ticket,website_support_myaccount.website.support.ticket,website_support.model_website_support_ticket,base.group_portal,1,1,0,0
+access_menu_portal_website_support_ticket_stage,website_support_myaccount.website.support.ticket.stage,website_support.model_website_support_ticket_stage,base.group_portal,1,1,0,0
+access_menu_portal_website_support_ticket_categories,website_support_myaccount.website.support.ticket.categories,website_support.model_website_support_ticket_categories,base.group_portal,1,1,0,0
diff --git a/website_support/security/rules_for_clients.xml b/website_support/security/rules_for_clients.xml
new file mode 100644
index 000000000..a62f4f84b
--- /dev/null
+++ b/website_support/security/rules_for_clients.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+ Portal Personal Tickets Extends
+
+ ['|', ('partner_id','=',user.partner_id.id), ('partner_id.parent_id','=',user.partner_id.id)]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website_support/static/description/index.html b/website_support/static/description/index.html
index 28adf14ac..c665527b4 100644
--- a/website_support/static/description/index.html
+++ b/website_support/static/description/index.html
@@ -127,7 +127,7 @@ Email Integration
Email conversations are tracked for each ticket so customers can reply directly via email without ever having to go to the website or login.
Emails are automatically sent when a ticket category is changed or the ticket is closed by staff
-When the customer replies via email the ticket state is automatically set to 'Customer Replied' allowing you to easily see at a glance which tickets need attending to
+When the customer replies via email the ticket stage is automatically set to 'Customer Replied' allowing you to easily see at a glance which tickets need attending to
Operators can reply online via Customer Support->Support Tickets
Per Operator Instructions
diff --git a/website_support/views/email_templates.xml b/website_support/views/email_templates.xml
index c79a4aaef..e16e8c7fc 100644
--- a/website_support/views/email_templates.xml
+++ b/website_support/views/email_templates.xml
@@ -1,6 +1,6 @@
-
-
+
+
Support Ticket Survey
@@ -18,7 +18,7 @@
here
Ticket Number: ${object.ticket_number or object.id}
- Ticket Category:
+ Ticket Category:
% if object.category.name :
${object.category.name}
% endif
@@ -51,7 +51,7 @@
]]>
-
+
Support Ticket New Ticket (Category)
@@ -74,7 +74,7 @@
Support Ticket User Change
- ]]>
+ ]]>
A Support Ticket has been assigned to you
@@ -83,14 +83,14 @@
A support ticket has been assigned to you here are the details
Ticket Number: ${object.ticket_number or object.id}
- Ticket Category:
+ Ticket Category:
% if object.category.name :
${object.category.name}
% endif
Ticket Description:
${object.description|safe}
-
+
]]>
@@ -98,7 +98,7 @@
Support Ticket Category Change
- ]]>
+ ]]>
${object.email|safe}
Your support ticket has been updated
@@ -108,14 +108,14 @@
Your support ticket has been updated and is now in the category '${object.category.name}'
Ticket Number: ${object.ticket_number or object.id}
- Ticket Category:
+ Ticket Category:
% if object.category.name :
${object.category.name}
% endif
Ticket Description:
${object.description|safe}
-
+
]]>
@@ -134,14 +134,14 @@
${object.close_comment or ''}
Ticket Number: ${object.ticket_number or object.id}
- Ticket Category:
+ Ticket Category:
% if object.category.name :
${object.category.name}
% endif
Ticket Description:
${object.description|safe}
-
+
]]>
@@ -160,16 +160,16 @@
% endif
Thank you for submitting a support ticket to us, we will get back to your shortly
- View Ticket Online: here
+ View Ticket Online: here
Ticket Number: ${object.ticket_number or object.id}
- Ticket Category:
+ Ticket Category:
% if object.category.name :
${object.category.name}
% endif
Ticket Description:
${object.description|safe}
-
+
]]>
@@ -178,15 +178,15 @@
Support Ticket Reply Wrapper
${object.subject}
- ${user.email|safe}
+ ${user.email|safe}
${object.email|safe}
- % if object.ticket_id.portal_access_key :
- View Ticket Online: here
+ % if object.ticket_id.access_token :
+ View Ticket Online: here
% endif
Ticket Number: ${object.ticket_id.ticket_number or object.ticket_id.id}
Ticket Category: ${object.ticket_id.category.name or ''}
@@ -241,6 +241,6 @@
]]>
-
+
-
\ No newline at end of file
+
diff --git a/website_support/views/menus.xml b/website_support/views/menus.xml
index 0c286806d..7993525d1 100644
--- a/website_support/views/menus.xml
+++ b/website_support/views/menus.xml
@@ -1,21 +1,19 @@
-
+
+
-
+
-
-
-
-
\ No newline at end of file
+
diff --git a/website_support/views/res_partner_views.xml b/website_support/views/res_partner_views.xml
index 4f813e2ec..2040509c2 100644
--- a/website_support/views/res_partner_views.xml
+++ b/website_support/views/res_partner_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/res_users_views.xml b/website_support/views/res_users_views.xml
index bf62f632b..d5cd107f6 100644
--- a/website_support/views/res_users_views.xml
+++ b/website_support/views/res_users_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -18,4 +18,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_help_groups_views.xml b/website_support/views/website_support_help_groups_views.xml
index d53911963..389de2c79 100644
--- a/website_support/views/website_support_help_groups_views.xml
+++ b/website_support/views/website_support_help_groups_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -64,4 +64,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_help_page_views.xml b/website_support/views/website_support_help_page_views.xml
index 1a5e7c182..b4a446a10 100644
--- a/website_support/views/website_support_help_page_views.xml
+++ b/website_support/views/website_support_help_page_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -47,4 +47,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_settings_views.xml b/website_support/views/website_support_settings_views.xml
index ce99b0c75..a15d76819 100644
--- a/website_support/views/website_support_settings_views.xml
+++ b/website_support/views/website_support_settings_views.xml
@@ -1,10 +1,191 @@
-
-
- website.support.settings form view
- website.support.settings
+
+
+ res.config.settings.view.form.inherit.website.support
+ res.config.settings
+
+
+
+
+
+
Website support
+
+
+
+
+
+
+
+
+ Allow user signup in website to create support tickets
+
+
+
+
+
+
+
Ticket Attachment
+
+
+
+
+
+
+ Number of attachments allowed in support tickets
+
+
+
+
+
+
+
+
+
+ Maximum size allowed for attachments
+
+
+
+
+
+
Email
+
+
+
+
+
+
+ Email template for user change in support ticket
+
+
+
+
+
+
+
+
+
+ Default category for tickets created by email
+
+
+
+
+
+
+
+
+
+ Email template for staff reply to support ticket
+
+
+
+
+
+
+
+
SLA
+
+
Survey
+
+
+
Google reCAPTCHA
+
+
+
+
+
+
+
+
+ Active Google reCAPTCHA for ticket creation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Support Ticket Settings
- website.support.settings
- form
- inline
-
+ Settings
+ ir.actions.act_window
+ res.config.settings
+ form
+ inline
+ {'module' : 'website_support'}
+
-
\ No newline at end of file
+
diff --git a/website_support/views/website_support_sla_views.xml b/website_support/views/website_support_sla_views.xml
index 80d6a9f09..04a26745e 100644
--- a/website_support/views/website_support_sla_views.xml
+++ b/website_support/views/website_support_sla_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -49,4 +49,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_categories_views.xml b/website_support/views/website_support_ticket_categories_views.xml
index ef5a1cccf..9e08ae1ab 100644
--- a/website_support/views/website_support_ticket_categories_views.xml
+++ b/website_support/views/website_support_ticket_categories_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -45,4 +45,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_close_views.xml b/website_support/views/website_support_ticket_close_views.xml
index 37d27fec4..39e452136 100644
--- a/website_support/views/website_support_ticket_close_views.xml
+++ b/website_support/views/website_support_ticket_close_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_compose_views.xml b/website_support/views/website_support_ticket_compose_views.xml
index 2fd2bac26..c1c900c71 100644
--- a/website_support/views/website_support_ticket_compose_views.xml
+++ b/website_support/views/website_support_ticket_compose_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -36,4 +36,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_department_views.xml b/website_support/views/website_support_ticket_department_views.xml
index 65c61a051..e202b100f 100644
--- a/website_support/views/website_support_ticket_department_views.xml
+++ b/website_support/views/website_support_ticket_department_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -54,4 +54,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_priority_views.xml b/website_support/views/website_support_ticket_priority_views.xml
deleted file mode 100644
index 09a43eed9..000000000
--- a/website_support/views/website_support_ticket_priority_views.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
- website.support.ticket.priority.tree.view
- website.support.ticket.priority
-
-
-
-
-
-
-
-
-
-
- Support Ticket Priorities
- website.support.ticket.priority
- tree
-
-
- No Support Tickets priorities found
-
-
-
-
-
- website.support.ticket.priority sequence
- website.support.ticket.priority
-
-
-
-
-
-
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_stage_views.xml b/website_support/views/website_support_ticket_stage_views.xml
new file mode 100644
index 000000000..1ad98f32a
--- /dev/null
+++ b/website_support/views/website_support_ticket_stage_views.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ website.support.ticket.stage.tree.view
+ website.support.ticket.stage
+
+
+
+
+
+
+
+
+
+
+
+ Support Ticket Stages
+ website.support.ticket.stage
+ form
+ tree
+
+ Create support ticket stage
+
+
+
+
+
diff --git a/website_support/views/website_support_ticket_states_views.xml b/website_support/views/website_support_ticket_states_views.xml
deleted file mode 100644
index 321522903..000000000
--- a/website_support/views/website_support_ticket_states_views.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
- website.support.ticket.states.form.view
- website.support.ticket.states
-
-
-
-
-
-
- website.support.ticket.states.tree.view
- website.support.ticket.states
-
-
-
-
-
-
-
-
-
-
- Support Ticket States
- website.support.ticket.states
- form
- tree,form
-
- Create support ticket state
-
-
-
-
-
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_subcategory_views.xml b/website_support/views/website_support_ticket_subcategory_views.xml
index 50092cdeb..ec2644a41 100644
--- a/website_support/views/website_support_ticket_subcategory_views.xml
+++ b/website_support/views/website_support_ticket_subcategory_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -26,7 +26,7 @@
website.support.ticket.subcategory
-
+
@@ -51,4 +51,4 @@
-
\ No newline at end of file
+
diff --git a/website_support/views/website_support_ticket_tag_views.xml b/website_support/views/website_support_ticket_tag_views.xml
index c2a4eb190..55399b355 100644
--- a/website_support/views/website_support_ticket_tag_views.xml
+++ b/website_support/views/website_support_ticket_tag_views.xml
@@ -1,5 +1,5 @@
-
+
@@ -24,4 +24,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/website_support/views/website_support_ticket_templates.xml b/website_support/views/website_support_ticket_templates.xml
index 9ace9d327..783a6f8ee 100644
--- a/website_support/views/website_support_ticket_templates.xml
+++ b/website_support/views/website_support_ticket_templates.xml
@@ -19,6 +19,21 @@
+
+
+
+
+ Support
+
+
+
+
+
+
@@ -30,7 +45,7 @@
Please give us feedback on our support service
-