diff --git a/odoo_website_helpdesk/__manifest__.py b/odoo_website_helpdesk/__manifest__.py index a2d0964f9..429d4951e 100644 --- a/odoo_website_helpdesk/__manifest__.py +++ b/odoo_website_helpdesk/__manifest__.py @@ -22,7 +22,7 @@ { 'name': "Website Helpdesk Support Ticket Management", - 'version': '16.0.3.0.0', + 'version': '16.0.4.0.0', 'summary': """Helpdesk Module for community""", 'description': """Can create ticket from website also and can manage it from backend. Bill can be created for ticket with service cost""", @@ -34,7 +34,6 @@ 'data': [ 'security/security_groups.xml', 'security/ir.model.access.csv', - 'views/helpdesk.xml', 'views/team.xml', 'views/portal_search.xml', 'views/res_config_settings.xml', @@ -45,6 +44,7 @@ 'views/portal.xml', 'views/categories.xml', 'views/rating_form.xml', + 'views/merge_tickets_views.xml', 'templates/helpdesk_replay_template.xml', 'data/ticket_sequence.xml', 'data/ticket_stage_data.xml', @@ -54,14 +54,14 @@ 'report/helpdesk_ticket_report_template.xml', ], 'assets': { - 'web.assets_frontend': [ - 'odoo_website_helpdesk/static/src/js/ticket_details.js', - ], + # 'web.assets_frontend': [ + # ], 'web.assets_backend': [ 'odoo_website_helpdesk/static/src/xml/helpdesk_dashboard.xml', 'odoo_website_helpdesk/static/src/js/helpdesk_dashboard_action.js', ], 'web.assets_frontend': [ + 'odoo_website_helpdesk/static/src/js/ticket_details.js', '/odoo_website_helpdesk/static/src/js/portal_search.js', '/odoo_website_helpdesk/static/src/js/portal_groupby.js', '/odoo_website_helpdesk/static/src/js/multiple_product_choose.js', diff --git a/odoo_website_helpdesk/controller/ticket_group_by.py b/odoo_website_helpdesk/controller/ticket_group_by.py index 516eab259..c3197ebac 100644 --- a/odoo_website_helpdesk/controller/ticket_group_by.py +++ b/odoo_website_helpdesk/controller/ticket_group_by.py @@ -4,12 +4,13 @@ from odoo.http import request class TicketGroupBy(http.Controller): @http.route(['/ticketgroupby'], type='json', auth="public", website=True) - def ticket_group_by(self,**kwargs): + def ticket_group_by(self, **kwargs): context = [] group_value = kwargs.get("search_value") if group_value == '0': context = [] tickets = request.env["help.ticket"].search([]) + context.append(tickets) if group_value == '1': context = [] stage_ids = request.env['ticket.stage'].search([]) @@ -41,4 +42,4 @@ class TicketGroupBy(http.Controller): response = http.Response( template='odoo_website_helpdesk.ticket_group_by_table', qcontext=values) - return response.render() \ No newline at end of file + return response.render() diff --git a/odoo_website_helpdesk/controller/ticket_search.py b/odoo_website_helpdesk/controller/ticket_search.py index edb0cb5e3..2d7a500d0 100644 --- a/odoo_website_helpdesk/controller/ticket_search.py +++ b/odoo_website_helpdesk/controller/ticket_search.py @@ -4,11 +4,15 @@ from odoo.http import request class TicketSearch(http.Controller): @http.route(['/ticketsearch'], type='json', auth="public", website=True) - def ticket_search(self,**kwargs): + def ticket_search(self, **kwargs): search_value = kwargs.get("search_value") - tickets = request.env["help.ticket"].search([('name', '=', search_value)]) + tickets = request.env["help.ticket"].search( + ['|', ('name', 'ilike', search_value), + ('subject', 'ilike', search_value)]) + values = { 'tickets': tickets, } - response = http.Response(template='odoo_website_helpdesk.ticket_table',qcontext=values) - return response.render() \ No newline at end of file + response = http.Response(template='odoo_website_helpdesk.ticket_table', + qcontext=values) + return response.render() diff --git a/odoo_website_helpdesk/models/__init__.py b/odoo_website_helpdesk/models/__init__.py index 66d88737d..c9e36e6fb 100644 --- a/odoo_website_helpdesk/models/__init__.py +++ b/odoo_website_helpdesk/models/__init__.py @@ -25,3 +25,5 @@ from . import res_config from . import categories from . import heldesk_team from . import mail_compose +from . import merge_tickets +from . import support_tickets diff --git a/odoo_website_helpdesk/models/categories.py b/odoo_website_helpdesk/models/categories.py index 7d5291c9d..8e7cc98a6 100644 --- a/odoo_website_helpdesk/models/categories.py +++ b/odoo_website_helpdesk/models/categories.py @@ -23,8 +23,9 @@ from odoo import fields, models class HelpdeskCategories(models.Model): + """Category Model""" _name = 'helpdesk.categories' _description = 'Categories' - name = fields.Char('Name') - sequence = fields.Integer('Sequence', default=0) + name = fields.Char('Name', help='Category Name') + sequence = fields.Integer('Sequence', default=0, help='Sequence') diff --git a/odoo_website_helpdesk/models/heldesk_team.py b/odoo_website_helpdesk/models/heldesk_team.py index d36b64453..714ae3474 100644 --- a/odoo_website_helpdesk/models/heldesk_team.py +++ b/odoo_website_helpdesk/models/heldesk_team.py @@ -23,24 +23,31 @@ from odoo import api, fields, models class HelpDeskTeam(models.Model): + """Helpdesk team""" _name = 'help.team' _description = 'Helpdesk Team' - name = fields.Char('Name') + name = fields.Char('Name', help='Helpdesk Team Name') team_lead_id = fields.Many2one('res.users', string='Team Leader', + help='Team Leader Name', domain=lambda self: [ ('groups_id', 'in', self.env.ref( 'odoo_website_helpdesk.helpdesk_team_leader').id)]) member_ids = fields.Many2many('res.users', string='Members', + help='Team Members', domain=lambda self: [ ('groups_id', 'in', self.env.ref( 'odoo_website_helpdesk.helpdesk_user').id)]) - email = fields.Char('Email') - project_id = fields.Many2one('project.project', string='Project') - create_task = fields.Boolean(string="Create Task") + email = fields.Char('Email', help='Email') + project_id = fields.Many2one('project.project', + string='Project', + help='Projects') + create_task = fields.Boolean(string="Create Task", + help="Task created or not") @api.onchange('team_lead_id') def members_choose(self): + """Members selection function""" fetch_memebers = self.env['res.users'].search([]) filterd_members = fetch_memebers.filtered( lambda x: x.id != self.team_lead_id.id) diff --git a/odoo_website_helpdesk/models/helpdesk.py b/odoo_website_helpdesk/models/helpdesk.py index 5ad8a31df..f7273c84d 100644 --- a/odoo_website_helpdesk/models/helpdesk.py +++ b/odoo_website_helpdesk/models/helpdesk.py @@ -44,63 +44,95 @@ RATING = [ class HelpDeskTicket(models.Model): + """Help_ticket model""" _name = 'help.ticket' _description = 'Helpdesk Ticket' _inherit = ['mail.thread', 'mail.activity.mixin'] name = fields.Char('Name', default=lambda self: self.env['ir.sequence']. next_by_code('help.ticket') or _('New')) - customer_id = fields.Many2one('res.partner', string='Customer Name') - customer_name = fields.Char('Customer Name') - subject = fields.Text('Subject', required=True) - description = fields.Text('Description', required=True) - email = fields.Char('Email') - phone = fields.Char('Phone') - team_id = fields.Many2one('help.team', string='Helpdesk Team') - product_id = fields.Many2many('product.template', string='Product') - project_id = fields.Many2one('project.project', string='Project', + customer_id = fields.Many2one('res.partner', + string='Customer Name', + help='Customer Name') + customer_name = fields.Char('Customer Name', help='Customer Name') + subject = fields.Text('Subject', required=True, + help='Subject of the Ticket') + description = fields.Text('Description', required=True, + help='Description') + email = fields.Char('Email', help='Email') + phone = fields.Char('Phone', help='Contact Number') + team_id = fields.Many2one('help.team', string='Helpdesk Team', + help='Helpdesk Team Name') + product_id = fields.Many2many('product.template', + string='Product', + help='Product Name') + project_id = fields.Many2one('project.project', + string='Project', readonly=False, - related='team_id.project_id', store=True) + related='team_id.project_id', + store=True, + help='Project Name') - priority = fields.Selection(PRIORITIES, default='1') + priority = fields.Selection(PRIORITIES, default='1', help='Priority of the' + ' Ticket') stage_id = fields.Many2one('ticket.stage', string='Stage', default=lambda self: self.env[ 'ticket.stage'].search( [('name', '=', 'Draft')], limit=1).id, tracking=True, - group_expand='_read_group_stage_ids') + group_expand='_read_group_stage_ids', + help='Stages') user_id = fields.Many2one('res.users', default=lambda self: self.env.user, check_company=True, - index=True, tracking=True) - cost = fields.Float('Cost per hour') + index=True, tracking=True, + help='Login User') + cost = fields.Float('Cost per hour', help='Cost Per Unit') service_product_id = fields.Many2one('product.product', string='Service Product', + help='Service Product', domain=[ ('detailed_type', '=', 'service')]) - create_date = fields.Datetime('Creation Date') - start_date = fields.Datetime('Start Date') - end_date = fields.Datetime('End Date') - public_ticket = fields.Boolean(string="Public Ticket") - invoice_ids = fields.Many2many('account.move', string='Invoices') - task_ids = fields.Many2many('project.task', string='Tasks') - color = fields.Integer(string="Color") - replied_date = fields.Datetime('Replied date') - last_update_date = fields.Datetime('Last Update Date') - ticket_type = fields.Many2one('helpdesk.types', string='Ticket Type') + create_date = fields.Datetime('Creation Date', help='Created date') + start_date = fields.Datetime('Start Date', help='Start Date') + end_date = fields.Datetime('End Date', help='End Date') + public_ticket = fields.Boolean(string="Public Ticket", help='Public Ticket') + invoice_ids = fields.Many2many('account.move', + string='Invoices', + help='Invoicing id' + ) + task_ids = fields.Many2many('project.task', + string='Tasks', + help='Task id') + color = fields.Integer(string="Color", help='Color') + replied_date = fields.Datetime('Replied date', help='Replied Date') + last_update_date = fields.Datetime('Last Update Date', + help='Last Update Date') + ticket_type = fields.Many2one('helpdesk.types', + string='Ticket Type', help='Ticket Type') team_head = fields.Many2one('res.users', string='Team Leader', - compute='_compute_team_head') + compute='_compute_team_head', + help='Team Leader Name') assigned_user = fields.Many2one('res.users', domain=lambda self: [ ('groups_id', 'in', self.env.ref( - 'odoo_website_helpdesk.helpdesk_user').id)]) - category_id = fields.Many2one('helpdesk.categories') - tags = fields.Many2many('helpdesk.tag') - assign_user = fields.Boolean(default=False) - attachment_ids = fields.One2many('ir.attachment', 'res_id') + 'odoo_website_helpdesk.helpdesk_user').id)], + help='Assigned User Name') + category_id = fields.Many2one('helpdesk.categories', + help='Category') + tags = fields.Many2many('helpdesk.tag', help='Tags') + assign_user = fields.Boolean(default=False, help='Assign User') + attachment_ids = fields.One2many('ir.attachment', 'res_id', + help='Attachment Line') + merge_ticket_invisible = fields.Boolean(string='Merge Ticket', + help='Merge Ticket Invisible or ' + 'Not', default=False) + merge_count = fields.Integer(string='Merge Count', help='Merged Tickets ' + 'Count') @api.onchange('team_id', 'team_head') def team_leader_domain(self): + """Changing the team leader when selecting the team""" li = [] for rec in self.team_id.member_ids: li.append(rec.id) @@ -108,10 +140,12 @@ class HelpDeskTicket(models.Model): @api.depends('team_id') def _compute_team_head(self): + """Compute the team head function""" self.team_head = self.team_id.team_lead_id.id @api.onchange('stage_id') def mail_snd(self): + """Sending mail to the user function""" rec_id = self._origin.id data = self.env['help.ticket'].search([('id', '=', rec_id)]) data.last_update_date = fields.Datetime.now() @@ -124,6 +158,7 @@ class HelpDeskTicket(models.Model): mail_template.send_mail(self._origin.id, force_send=True) def assign_to_teamleader(self): + """Assigning team leader function""" if self.team_id: self.team_head = self.team_id.team_lead_id.id mail_template = self.env.ref( @@ -137,6 +172,7 @@ class HelpDeskTicket(models.Model): raise ValidationError("Please choose a Helpdesk Team") def _default_show_create_task(self): + """Task creation""" return self.env['ir.config_parameter'].sudo().get_param( 'odoo_website_helpdesk.show_create_task') @@ -148,6 +184,7 @@ class HelpDeskTicket(models.Model): billable = fields.Boolean(string="Billable", default=False) def _default_show_category(self): + """Show category default""" return self.env['ir.config_parameter'].sudo().get_param( 'odoo_website_helpdesk.show_category') @@ -162,16 +199,19 @@ class HelpDeskTicket(models.Model): ('blocked', 'Blocked'), ], default='normal') def _compute_show_category(self): + """Compute show category""" show_category = self._default_show_category() for rec in self: rec.show_category = show_category def _compute_show_create_task(self): + """Compute the created task""" show_create_task = self._default_show_create_task() for record in self: record.show_create_task = show_create_task def auto_close_ticket(self): + """Automatically closing the ticket""" auto_close = self.env['ir.config_parameter'].sudo().get_param( 'odoo_website_helpdesk.auto_close_ticket') if auto_close: @@ -201,13 +241,16 @@ class HelpDeskTicket(models.Model): @api.model_create_multi def create(self, vals_list): + """Create function""" return super(HelpDeskTicket, self).create(vals_list) def write(self, vals): + """Write function""" result = super(HelpDeskTicket, self).write(vals) return result def create_invoice(self): + """Create Invoice based on the ticket""" tasks = self.env['project.task'].search( [('project_id', '=', self.project_id.id), ('ticket_id', '=', self.id)]).filtered( @@ -219,7 +262,7 @@ class HelpDeskTicket(models.Model): invoice_no = self.env['ir.sequence'].next_by_code( 'ticket.invoice') - move = self.env['account.move'].create([ + self.env['account.move'].create([ { 'name': invoice_no, 'move_type': 'out_invoice', @@ -247,6 +290,7 @@ class HelpDeskTicket(models.Model): } def create_tasks(self): + """Task creation""" task_id = self.env['project.task'].create({ 'name': self.name + '-' + self.subject, 'project_id': self.project_id.id, @@ -268,6 +312,7 @@ class HelpDeskTicket(models.Model): } def open_tasks(self): + """View the Created task """ return { 'name': 'Tasks', 'domain': [('ticket_id', '=', self.id)], @@ -278,6 +323,7 @@ class HelpDeskTicket(models.Model): } def open_invoices(self): + """View the Created invoice""" return { 'name': 'Invoice', 'domain': [('ticket_id', '=', self.id)], @@ -287,7 +333,26 @@ class HelpDeskTicket(models.Model): 'type': 'ir.actions.act_window', } + def open_merged_tickets(self): + """Open the merged tickets tree view""" + ticket_ids = self.env['support.tickets'].search( + [('merged_ticket', '=', self.id)]) + # Get the display_name matching records from the support.tickets + helpdesk_ticket_ids = ticket_ids.mapped('display_name') + # Get the IDs of the help.ticket records matching the display names + help_ticket_records = self.env['help.ticket'].search( + [('name', 'in', helpdesk_ticket_ids)]) + return { + 'type': 'ir.actions.act_window', + 'name': 'Helpdesk Ticket', + 'view_mode': 'tree,form', + 'res_model': 'help.ticket', + 'domain': [('id', 'in', help_ticket_records.ids)], + 'context': self.env.context, + } + def action_send_reply(self): + """Action to sent reply button""" template_id = self.env['ir.config_parameter'].sudo().get_param( 'odoo_website_helpdesk.reply_template_id' ) @@ -321,24 +386,31 @@ class HelpDeskTicket(models.Model): class StageTicket(models.Model): + """Stage Ticket class""" _name = 'ticket.stage' _description = 'Ticket Stage' _order = 'sequence, id' _fold_name = 'fold' - name = fields.Char('Name') - active = fields.Boolean(default=True) - sequence = fields.Integer(default=50) - closing_stage = fields.Boolean('Closing Stage', default=False) - cancel_stage = fields.Boolean('Cancel Stage', default=False) - starting_stage = fields.Boolean('Start Stage', default=False) - folded = fields.Boolean('Folded in Kanban', default=False) + name = fields.Char('Name', help='Name') + active = fields.Boolean(default=True, help='Active', string='Active') + sequence = fields.Integer(default=50, help='Sequence', string='Sequence') + closing_stage = fields.Boolean('Closing Stage', default=False, + help='Closing stage') + cancel_stage = fields.Boolean('Cancel Stage', default=False, + help='Cancel stage') + starting_stage = fields.Boolean('Start Stage', default=False, + help='Starting Stage') + folded = fields.Boolean('Folded in Kanban', default=False, + help='Folded Stage') template_id = fields.Many2one('mail.template', + help='Templates', domain="[('model', '=', 'help.ticket')]") - group_ids = fields.Many2many('res.groups') - fold = fields.Boolean(string='Fold') + group_ids = fields.Many2many('res.groups', help='Group ID') + fold = fields.Boolean(string='Fold', help='Folded') def unlink(self): + """Unlinking Function""" for rec in self: tickets = rec.search([]) sequence = tickets.mapped('sequence') @@ -354,20 +426,24 @@ class StageTicket(models.Model): class HelpdeskTypes(models.Model): + """Helpdesk types """ _name = 'helpdesk.types' _description = 'Helpdesk Types' - name = fields.Char(string='Type') + name = fields.Char(string='Type', help='Types') class Tasks(models.Model): + """Inheriting the task""" _inherit = 'project.task' - ticket_billed = fields.Boolean('Billed', default=False) + ticket_billed = fields.Boolean('Billed', default=False, + help='Billed Tickets') class HelpdeskTags(models.Model): + """Helpdesk tags""" _name = 'helpdesk.tag' _description = 'Helpdesk Tags' - name = fields.Char(string='Tag') + name = fields.Char(string='Tag', help='Tag Name') diff --git a/odoo_website_helpdesk/models/mail_compose.py b/odoo_website_helpdesk/models/mail_compose.py index 07eaa872e..9840e8282 100644 --- a/odoo_website_helpdesk/models/mail_compose.py +++ b/odoo_website_helpdesk/models/mail_compose.py @@ -23,9 +23,11 @@ from odoo import fields, models class MailComposeMessage(models.TransientModel): + """Inheriting the Mail compose message""" _inherit = 'mail.compose.message' def _action_send_mail(self, auto_commit=False): + """Send mail function""" if self.model == 'help.ticket': ticket_id = self.env['help.ticket'].browse(self.res_id) ticket_id.replied_date = fields.Date.today() diff --git a/odoo_website_helpdesk/models/merge_tickets.py b/odoo_website_helpdesk/models/merge_tickets.py new file mode 100644 index 000000000..33d0db7a9 --- /dev/null +++ b/odoo_website_helpdesk/models/merge_tickets.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class MergeTicket(models.Model): + """Tickets merging class""" + _name = 'merge.tickets' + _description = 'Merging the selected tickets' + _rec_name = 'support_ticket_id' + + user_id = fields.Many2one('res.partner', + string='Responsible User', + help='Responsible user name', + default=lambda self: self.env.user.partner_id.id) + support_team_id = fields.Many2one('help.team', string='Support Team', + help='Support Team Name') + customer_id = fields.Many2one('res.partner', string='Customer', + help='Customer Name' + ) + support_ticket_id = fields.Many2one('help.ticket', + string='Support Ticket') + new_ticket = fields.Boolean(string='Create New Ticket ?', + help='Creating new tickets or not.', + default=False) + subject = fields.Char(string='Subject', help='Enter the New Ticket Subject') + merge_reason = fields.Char(string='Merge Reason', help='Merging Reason') + support_ticket_ids = fields.One2many('support.tickets', + 'support_ticket_id', + string='Support Tickets', + helps='Merged tickets') + active = fields.Boolean(string='Disable Record', help='Disable Record', + default=True) + + def default_get(self, fields_list): + defaults = super(MergeTicket, self).default_get(fields_list) + active_ids = self._context.get('active_ids', []) + selected_tickets = self.env['help.ticket'].browse(active_ids) + customer_ids = selected_tickets.mapped('customer_id') + subjects = selected_tickets.mapped('subject') + display_names = selected_tickets.mapped('display_name') + helpdesk_team = selected_tickets.mapped('team_id') + descriptions = selected_tickets.mapped('description') + if len(customer_ids): # Ensure both selected records have the same customer + defaults.update({ + 'customer_id': customer_ids[0].id, + 'support_team_id': helpdesk_team, + + 'support_ticket_ids': [(0, 0, { + 'subject': subject, + 'display_name': display_name, + 'description': description, + + }) for subject, display_name, description in + zip(subjects, display_names, + descriptions)] + }) + return defaults + + def action_merge_ticket(self): + """Merging the tickets or creating new tickets""" + if self.new_ticket: + description = "\n\n".join( + f"{ticket.subject}\n{'-' * len(ticket.subject)}\n{ticket.description}" + for ticket in self.support_ticket_ids + ) + + self.env['help.ticket'].create({ + 'subject': self.subject, + 'description': description, + 'customer_id': self.customer_id.id, + 'team_id': self.support_team_id.id, + }) + else: + if len(self.support_ticket_ids): + description = "\n\n".join( + f"{ticket.subject}\n{'-' * len(ticket.subject)}\n{ticket.description}" + for ticket in self.support_ticket_ids + ) + # Update the existing support_ticket with the combined information + self.support_ticket_id.write({ + 'description': description, + 'merge_ticket_invisible': True, + 'merge_count': len(self.support_ticket_ids), + }) + + @api.onchange('support_ticket_id') + def _onchange_support_ticket_id(self): + """Onchange function to add the support ticket id.""" + self.support_ticket_ids.write({ + 'merged_ticket': self.support_ticket_id + }) diff --git a/odoo_website_helpdesk/models/res_config.py b/odoo_website_helpdesk/models/res_config.py index a0e798489..d3dbbba8a 100644 --- a/odoo_website_helpdesk/models/res_config.py +++ b/odoo_website_helpdesk/models/res_config.py @@ -19,13 +19,15 @@ # If not, see . # ############################################################################# -from odoo import models, fields, api +from odoo import api, fields, models class Menu(models.Model): + """Inheriting the website menu""" _inherit = "website.menu" def _compute_visible(self): + """Compute visible""" super()._compute_visible() show_menu_header = self.env['ir.config_parameter'].sudo().get_param( 'odoo_website_helpdesk.helpdesk_menu_show') @@ -37,32 +39,42 @@ class Menu(models.Model): class Helpdesk(models.TransientModel): + """Inheriting the res config""" _inherit = 'res.config.settings' show_create_task = fields.Boolean(string="Create Tasks", - config_parameter='odoo_website_helpdesk.show_create_task') + config_parameter='odoo_website_helpdesk.show_create_task', + help='Create Task') show_category = fields.Boolean(string="Category", config_parameter='odoo_website_helpdesk.show_category', + help='Category', implied_group='odoo_website_helpdesk.group_show_category') product_website = fields.Boolean(string="Product On Website", - config_parameter='odoo_website_helpdesk.product_website') + config_parameter='odoo_website_helpdesk.product_website', + help='Product on website') auto_close_ticket = fields.Boolean(string="Auto Close Ticket", - config_parameter='odoo_website_helpdesk.auto_close_ticket') + config_parameter='odoo_website_helpdesk.auto_close_ticket', + help='Auto Close ticket') no_of_days = fields.Integer(string="No Of Days", - config_parameter='odoo_website_helpdesk.no_of_days') + config_parameter='odoo_website_helpdesk.no_of_days', + help='No of Days') closed_stage = fields.Many2one( 'ticket.stage', string='Closing stage', + help='Closing Stage', config_parameter='odoo_website_helpdesk.closed_stage') reply_template_id = fields.Many2one('mail.template', domain="[('model', '=', 'help.ticket')]", - config_parameter='odoo_website_helpdesk.reply_template_id') + config_parameter='odoo_website_helpdesk.reply_template_id', + help='Reply Template') helpdesk_menu_show = fields.Boolean('Helpdesk Menu', config_parameter= - 'odoo_website_helpdesk.helpdesk_menu_show') + 'odoo_website_helpdesk.helpdesk_menu_show', + help='Helpdesk menu') @api.onchange('closed_stage') def closed_stage_a(self): + """Closing stage function""" stage = self.closed_stage.id in_stage = self.env['ticket.stage'].search([('id', '=', stage)]) not_in_stage = self.env['ticket.stage'].search([('id', '!=', stage)]) @@ -72,6 +84,7 @@ class Helpdesk(models.TransientModel): @api.constrains('show_category') def show_category_subcategory(self): + """Show category and the sub category""" if self.show_category: group_cat = self.env.ref( 'odoo_website_helpdesk.group_show_category') diff --git a/odoo_website_helpdesk/models/support_tickets.py b/odoo_website_helpdesk/models/support_tickets.py new file mode 100644 index 000000000..782d16704 --- /dev/null +++ b/odoo_website_helpdesk/models/support_tickets.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class SupportTickets(models.Model): + """Creating onetoMany model""" + _name = 'support.tickets' + _description = 'Support Tickets' + + subject = fields.Char(string='Subject', help='Subject of the merged ' + 'tickets') + display_name = fields.Char(string='Display Name', + help='Display name of the merged tickets') + description = fields.Char(string='Description', + help='Description of the tickets') + support_ticket_id = fields.Many2one('merge.tickets', + string='Support Tickets', + help='Support tickets') + merged_ticket = fields.Integer(string='Merged Ticket ID', + help='Storing merged ticket id') diff --git a/odoo_website_helpdesk/models/task.py b/odoo_website_helpdesk/models/task.py index 9f46e295e..c6721ed87 100644 --- a/odoo_website_helpdesk/models/task.py +++ b/odoo_website_helpdesk/models/task.py @@ -19,16 +19,19 @@ # If not, see . # ############################################################################# -from odoo import models, fields +from odoo import fields, models class Task(models.Model): + """Inheriting the project task""" _inherit = 'project.task' - ticket_id = fields.Many2one('help.ticket', string='Ticket') + ticket_id = fields.Many2one('help.ticket', string='Ticket', + help='Ticket') class AccountMove(models.Model): + """Inheriting the account.move model""" _inherit = 'account.move' ticket_id = fields.Many2one('help.ticket', string='Ticket') diff --git a/odoo_website_helpdesk/report/helpdesk_ticket_report_template.xml b/odoo_website_helpdesk/report/helpdesk_ticket_report_template.xml index 045d12402..7b30fa18a 100644 --- a/odoo_website_helpdesk/report/helpdesk_ticket_report_template.xml +++ b/odoo_website_helpdesk/report/helpdesk_ticket_report_template.xml @@ -46,7 +46,6 @@ - @@ -56,7 +55,6 @@ Tasks - @@ -74,7 +72,6 @@ - @@ -100,7 +97,6 @@ - Helpdesk Ticket Report help.ticket @@ -109,5 +105,4 @@ odoo_website_helpdesk.report_helpdesk_ticket report - - \ No newline at end of file + diff --git a/odoo_website_helpdesk/security/ir.model.access.csv b/odoo_website_helpdesk/security/ir.model.access.csv index 7ce811366..da26e08f8 100644 --- a/odoo_website_helpdesk/security/ir.model.access.csv +++ b/odoo_website_helpdesk/security/ir.model.access.csv @@ -19,3 +19,6 @@ access_helpdesk_types_manager,access.helpdesk.types,model_helpdesk_types,odoo_we access_helpdesk_categories_user,access_helpdesk_categories,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_user,1,0,0,0 access_helpdesk_categories_leader,access_helpdesk_categories,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1 access_helpdesk_categories_manager,access_helpdesk_categories,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_manager,1,1,1,1 + +merge_tickets,merge.tickets,model_merge_tickets,odoo_website_helpdesk.helpdesk_manager,1,1,1,1 +support_tickets,support.tickets,model_support_tickets,odoo_website_helpdesk.helpdesk_manager,1,1,1,1 \ No newline at end of file diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png b/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png new file mode 100644 index 000000000..435133808 Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png differ diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png b/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png new file mode 100644 index 000000000..126ef1f5a Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png differ diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png b/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png new file mode 100644 index 000000000..4dd72bf4d Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png differ diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png b/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png new file mode 100644 index 000000000..0b7f61887 Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png differ diff --git a/odoo_website_helpdesk/static/description/index.html b/odoo_website_helpdesk/static/description/index.html index 95d2f7ee7..5439bc0d8 100644 --- a/odoo_website_helpdesk/static/description/index.html +++ b/odoo_website_helpdesk/static/description/index.html @@ -26,15 +26,12 @@ Website Helpdesk Support Ticket Management

- A Module For Managing Support Tickets

- -
@@ -313,7 +310,42 @@ Create Tasks for the project linked to the Ticket
- + +
+
+

+ Merge Tickets. +

+ +
+
+
+
+

+ Merge Action Model. +

+ +
+
+
+
+

+ Create New Ticket. +

+ +
+
+
+
+

+ New Ticket. +

+ +
diff --git a/odoo_website_helpdesk/static/src/xml/helpdesk_dashboard.xml b/odoo_website_helpdesk/static/src/xml/helpdesk_dashboard.xml index e775bb91b..83ffb154f 100644 --- a/odoo_website_helpdesk/static/src/xml/helpdesk_dashboard.xml +++ b/odoo_website_helpdesk/static/src/xml/helpdesk_dashboard.xml @@ -281,6 +281,7 @@ + \ No newline at end of file diff --git a/odoo_website_helpdesk/templates/helpdesk_replay_template.xml b/odoo_website_helpdesk/templates/helpdesk_replay_template.xml index 561c7dbea..e12b9cb9c 100644 --- a/odoo_website_helpdesk/templates/helpdesk_replay_template.xml +++ b/odoo_website_helpdesk/templates/helpdesk_replay_template.xml @@ -1,5 +1,7 @@ + + Helpdesk Reply Email Template - \ No newline at end of file + diff --git a/odoo_website_helpdesk/views/categories.xml b/odoo_website_helpdesk/views/categories.xml index 979dc3631..ab0b891c3 100644 --- a/odoo_website_helpdesk/views/categories.xml +++ b/odoo_website_helpdesk/views/categories.xml @@ -1,3 +1,4 @@ + categories.tree @@ -10,4 +11,3 @@ - diff --git a/odoo_website_helpdesk/views/helpdesk.xml b/odoo_website_helpdesk/views/helpdesk.xml index 36b21ef4c..e869d0e1b 100644 --- a/odoo_website_helpdesk/views/helpdesk.xml +++ b/odoo_website_helpdesk/views/helpdesk.xml @@ -1,4 +1,6 @@ + + help.ticket.form help.ticket @@ -13,7 +15,8 @@ + + + + + + + + Merge Tickets + merge.tickets + ir.actions.act_window + {'active_ids': active_ids} + form + + new + + + \ No newline at end of file diff --git a/odoo_website_helpdesk/views/portal.xml b/odoo_website_helpdesk/views/portal.xml index 66b0240ed..0572af6ec 100644 --- a/odoo_website_helpdesk/views/portal.xml +++ b/odoo_website_helpdesk/views/portal.xml @@ -1,18 +1,21 @@ + - - - - - - diff --git a/odoo_website_helpdesk/views/portal_search.xml b/odoo_website_helpdesk/views/portal_search.xml index b5bc42204..bf4e9f441 100644 --- a/odoo_website_helpdesk/views/portal_search.xml +++ b/odoo_website_helpdesk/views/portal_search.xml @@ -1,3 +1,4 @@ + - \ No newline at end of file + diff --git a/odoo_website_helpdesk/views/rating_form.xml b/odoo_website_helpdesk/views/rating_form.xml index 773b87a26..2d46f5ace 100644 --- a/odoo_website_helpdesk/views/rating_form.xml +++ b/odoo_website_helpdesk/views/rating_form.xml @@ -1,3 +1,4 @@ + - + diff --git a/odoo_website_helpdesk/views/report.xml b/odoo_website_helpdesk/views/report.xml index b2fbcfbf2..8dfd0a70b 100644 --- a/odoo_website_helpdesk/views/report.xml +++ b/odoo_website_helpdesk/views/report.xml @@ -1,3 +1,4 @@ + - Support Ticket help.ticket diff --git a/odoo_website_helpdesk/views/res_config_settings.xml b/odoo_website_helpdesk/views/res_config_settings.xml index f63492cc0..538d82f03 100644 --- a/odoo_website_helpdesk/views/res_config_settings.xml +++ b/odoo_website_helpdesk/views/res_config_settings.xml @@ -1,3 +1,4 @@ + res.config.settings.view.form.inherit.helpdesk @@ -34,7 +35,6 @@ -
@@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/odoo_website_helpdesk/views/team.xml b/odoo_website_helpdesk/views/team.xml index 8a160e508..0d312866b 100644 --- a/odoo_website_helpdesk/views/team.xml +++ b/odoo_website_helpdesk/views/team.xml @@ -1,3 +1,4 @@ + help.team.form @@ -44,7 +45,6 @@ - help.team.tree help.team diff --git a/odoo_website_helpdesk/views/website_form.xml b/odoo_website_helpdesk/views/website_form.xml index ea02406c2..a86e777a2 100644 --- a/odoo_website_helpdesk/views/website_form.xml +++ b/odoo_website_helpdesk/views/website_form.xml @@ -1,3 +1,4 @@ + Helpdesk @@ -5,7 +6,6 @@ 55 - Thanks (Helpdesk) qweb @@ -78,7 +78,6 @@ -