@ -0,0 +1,42 @@ |
|||
Website Helpdesk Support Ticket Management |
|||
========================================= |
|||
* HelpDesk Support for Odoo 16 community editions |
|||
|
|||
Installation |
|||
============ |
|||
- www.odoo.com/documentation/16.0/setup/install.html |
|||
- Install our custom addon |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (LGPL v3). |
|||
(https://www.odoo.com/documentation/user/15.0/legal/licenses/licenses.html) |
|||
|
|||
Company |
|||
------- |
|||
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developer: |
|||
(v16) Robin @ Cybrosys |
|||
|
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit https://www.cybrosys.com |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
|||
|
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import controller |
|||
from . import models |
@ -0,0 +1,57 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
{ |
|||
'name': "Website Helpdesk Support Ticket Management V16", |
|||
'version': '16.0.1.0.0', |
|||
'summary': """Website Helpdesk Support Ticket Management for V16 Community""", |
|||
'description': """Website Helpdesk Support Ticket Management for V16 Community, Helpdesk, helpdesk, support, ticket""", |
|||
'author': "Cybrosys Techno Solutions", |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'category': 'Website', |
|||
'depends': ['website', 'project', 'sale_project', 'hr_timesheet'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'views/helpdesk.xml', |
|||
'views/team.xml', |
|||
'views/res_config_settings.xml', |
|||
'views/website_form.xml', |
|||
'views/report.xml', |
|||
'views/helpdesk.xml', |
|||
'views/helpdesk_views.xml', |
|||
'views/portal.xml', |
|||
|
|||
'data/ticket_sequence.xml', |
|||
'data/ticket_stage_data.xml', |
|||
], |
|||
'assets': { |
|||
'web.assets_frontend': [ |
|||
'odoo_website_helpdesk/static/src/js/ticket_details.js', |
|||
], |
|||
}, |
|||
'images': ['static/description/banner.png'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import website_form |
|||
from . import portal |
@ -0,0 +1,62 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import http |
|||
from odoo.addons.portal.controllers import portal |
|||
from odoo.http import request |
|||
|
|||
|
|||
class TicketPortal(portal.CustomerPortal): |
|||
|
|||
def _prepare_home_portal_values(self, counters): |
|||
values = super()._prepare_home_portal_values(counters) |
|||
if 'ticket_count' in counters: |
|||
ticket_count = request.env['help.ticket'].search_count( |
|||
self._get_tickets_domain()) if request.env[ |
|||
'help.ticket'].check_access_rights( |
|||
'read', raise_exception=False) else 0 |
|||
values['ticket_count'] = ticket_count |
|||
return values |
|||
|
|||
# checking domain: |
|||
def _get_tickets_domain(self): |
|||
return [('customer_id', '=', request.env.user.partner_id.id)] |
|||
|
|||
@http.route(['/my/tickets'], type='http', auth="user", website=True) |
|||
def portal_my_tickets(self): |
|||
domain = self._get_tickets_domain() |
|||
tickets = request.env['help.ticket'].search(domain) |
|||
values = { |
|||
'default_url': "/my/tickets", |
|||
'tickets': tickets, |
|||
'page_name': 'ticket', |
|||
} |
|||
return request.render("odoo_website_helpdesk.portal_my_tickets", |
|||
values) |
|||
|
|||
|
|||
class WebsiteDesk(http.Controller): |
|||
|
|||
@http.route(['/helpdesk_ticket'], type='http', auth="public", website=True, |
|||
sitemap=True) |
|||
def helpdesk_ticket(self, **kwargs): |
|||
return request.render('odoo_website_helpdesk.ticket_form') |
@ -0,0 +1,113 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
import base64 |
|||
import json |
|||
|
|||
from psycopg2 import IntegrityError |
|||
|
|||
from odoo import _ |
|||
from odoo.addons.website.controllers.form import WebsiteForm |
|||
from odoo.exceptions import ValidationError |
|||
from odoo.http import request |
|||
|
|||
|
|||
class WebsiteFormInherit(WebsiteForm): |
|||
|
|||
def _handle_website_form(self, model_name, **kwargs): |
|||
if model_name == 'help.ticket': |
|||
|
|||
rec_val = { |
|||
'customer_name': kwargs.get('customer_name'), |
|||
'subject': kwargs.get('subject'), |
|||
'description': kwargs.get('description'), |
|||
'email': kwargs.get('email_from'), |
|||
'phone': kwargs.get('phone'), |
|||
'priority': kwargs.get('priority'), |
|||
'stage_id': request.env['ticket.stage'].search( |
|||
[('name', '=', 'Inbox')], limit=1).id, |
|||
|
|||
} |
|||
partner = request.env['res.partner'].sudo().search( |
|||
[('name', '=', kwargs.get('customer_name')), |
|||
('email', '=', kwargs.get('email_from'))], limit=1) |
|||
if partner: |
|||
rec_val['customer_id'] = partner.id |
|||
else: |
|||
rec_val['public_ticket'] = True |
|||
|
|||
ticket_id = request.env['help.ticket'].sudo().create(rec_val) |
|||
request.session['ticket_number'] = ticket_id.name |
|||
request.session['ticket_id'] = ticket_id.id |
|||
model_record = request.env['ir.model'].sudo().search( |
|||
[('model', '=', model_name)]) |
|||
data = self.extract_data(model_record, request.params) |
|||
if 'ticket_attachment' in request.params or request.httprequest.files or data.get( |
|||
'attachments'): |
|||
attached_files = data.get('attachments') |
|||
for attachment in attached_files: |
|||
attached_file = attachment.read() |
|||
request.env['ir.attachment'].sudo().create({ |
|||
'name': attachment.filename, |
|||
'res_model': 'help.ticket', |
|||
'res_id': ticket_id.id, |
|||
'type': 'binary', |
|||
'datas': base64.encodebytes(attached_file), |
|||
}) |
|||
request.session['form_builder_model_model'] = model_record.model |
|||
request.session['form_builder_model'] = model_record.name |
|||
request.session['form_builder_id'] = ticket_id.id |
|||
return json.dumps({'id': ticket_id.id}) |
|||
else: |
|||
model_record = request.env['ir.model'].sudo().search( |
|||
[('model', '=', model_name)]) |
|||
if not model_record: |
|||
return json.dumps({ |
|||
'error': _("The form's specified model does not exist") |
|||
}) |
|||
try: |
|||
data = self.extract_data(model_record, request.params) |
|||
# If we encounter an issue while extracting data |
|||
except ValidationError as e: |
|||
return json.dumps({'error_fields': e.args[0]}) |
|||
try: |
|||
id_record = self.insert_record(request, model_record, |
|||
data['record'], data['custom'], |
|||
data.get('meta')) |
|||
if id_record: |
|||
self.insert_attachment(model_record, id_record, |
|||
data['attachments']) |
|||
# in case of an email, we want to send it immediately instead of waiting |
|||
# for the email queue to process |
|||
if model_name == 'mail.mail': |
|||
request.env[model_name].sudo().browse(id_record).send() |
|||
|
|||
# Some fields have additional SQL constraints that we can't check generically |
|||
# Ex: crm.lead.probability which is a float between 0 and 1 |
|||
# TODO: How to get the name of the erroneous field ? |
|||
except IntegrityError: |
|||
return json.dumps(False) |
|||
|
|||
request.session['form_builder_model_model'] = model_record.model |
|||
request.session['form_builder_model'] = model_record.name |
|||
request.session['form_builder_id'] = id_record |
|||
|
|||
return json.dumps({'id': id_record}) |
@ -0,0 +1,20 @@ |
|||
<odoo> |
|||
<record id="sequence_help_ticket_seq" model="ir.sequence"> |
|||
<field name="name">Helpdesk</field> |
|||
<field name="code">help.ticket</field> |
|||
<field name="prefix">TKT</field> |
|||
<field name="padding">5</field> |
|||
<field eval="1" name="number_increment"/> |
|||
<field eval="False" name="company_id"/> |
|||
</record> |
|||
|
|||
<record id="sequence_help_ticket_inv_seq" model="ir.sequence"> |
|||
<field name="name">Helpdesk Invoice</field> |
|||
<field name="code">ticket.invoice</field> |
|||
<field name="prefix">INV/TKT/%(year)s/</field> |
|||
<field name="padding">3</field> |
|||
<field eval="1" name="number_increment"/> |
|||
<field eval="False" name="company_id"/> |
|||
</record> |
|||
</odoo> |
|||
|
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Project Stages --> |
|||
<record id="stage_inbox" model="ticket.stage"> |
|||
<field name="sequence">10</field> |
|||
<field name="name">Inbox</field> |
|||
</record> |
|||
|
|||
<record id="stage_draft" model="ticket.stage"> |
|||
<field name="sequence">15</field> |
|||
<field name="name">Draft</field> |
|||
</record> |
|||
|
|||
<record id="ticket_stage_03" model="ticket.stage"> |
|||
<field name="sequence">20</field> |
|||
<field name="name">In Progress</field> |
|||
</record> |
|||
|
|||
<record id="ticket_stage_04" model="ticket.stage"> |
|||
<field name="sequence">25</field> |
|||
<field name="name">Done</field> |
|||
<field name="folded" eval="True"/> |
|||
</record> |
|||
|
|||
<record id="ticket_stage_05" model="ticket.stage"> |
|||
<field name="sequence">30</field> |
|||
<field name="name">Canceled</field> |
|||
<field name="folded" eval="True"/> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,9 @@ |
|||
## Module <odoo_website_helpdesk> |
|||
|
|||
#### 09.11.2022 |
|||
#### Version 16.0.1.0.0 |
|||
#### ADD |
|||
- Initial commit for Website Helpdesk Support Ticket |
|||
|
|||
|
|||
|
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import helpdesk |
|||
from . import task |
|||
from . import res_config |
@ -0,0 +1,226 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
import logging |
|||
from odoo import models, fields, api, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
PRIORITIES = [ |
|||
('0', 'Very Low'), |
|||
('1', 'Low'), |
|||
('2', 'Normal'), |
|||
('3', 'High'), |
|||
('4', 'Very High')] |
|||
|
|||
|
|||
class HelpDeskTicket(models.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') |
|||
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.Many2one('product.product', string='Product') |
|||
project_id = fields.Many2one('project.project', string='Project', |
|||
readonly=False, |
|||
related='team_id.project_id', store=True) |
|||
|
|||
priority = fields.Selection(PRIORITIES, default='1') |
|||
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') |
|||
|
|||
cost = fields.Float('Cost per hour') |
|||
service_product_id = fields.Many2one('product.product', |
|||
string='Service Product', |
|||
domain=[ |
|||
('detailed_type', '=', 'service')]) |
|||
start_date = fields.Date('Start Date') |
|||
end_date = fields.Date('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", default=6) |
|||
|
|||
def _default_show_create_task(self): |
|||
return self.env['ir.config_parameter'].sudo().get_param( |
|||
'odoo_website_helpdesk.show_create_task') |
|||
|
|||
show_create_task = fields.Boolean(string="Create Task", |
|||
default=_default_show_create_task, |
|||
compute='_compute_show_create_task') |
|||
create_task = fields.Boolean(string="Create Task", readonly=False, |
|||
related='team_id.create_task', store=True) |
|||
billable = fields.Boolean(string="Billable", default=False) |
|||
|
|||
def _compute_show_create_task(self): |
|||
show_create_task = self._default_show_create_task() |
|||
for record in self: |
|||
record.show_create_task = show_create_task |
|||
|
|||
def default_stage_id(self): |
|||
# Search your stage |
|||
return self.env['ticket.stage'].search( |
|||
[('name', '=', 'Draft')], limit=1).id |
|||
|
|||
@api.model |
|||
def _read_group_stage_ids(self, stages, domain, order): |
|||
""" |
|||
return the stages to stage_ids |
|||
""" |
|||
stage_ids = self.env['ticket.stage'].search([]) |
|||
return stage_ids |
|||
|
|||
@api.model_create_multi |
|||
def create(self, vals_list): |
|||
|
|||
return super(HelpDeskTicket, self).create(vals_list) |
|||
|
|||
def write(self, vals): |
|||
result = super(HelpDeskTicket, self).write(vals) |
|||
return result |
|||
|
|||
def create_invoice(self): |
|||
tasks = self.env['project.task'].search( |
|||
[('project_id', '=', self.project_id.id), |
|||
('ticket_id', '=', self.id)]).filtered( |
|||
lambda line: line.ticket_billed == False) |
|||
if not tasks: |
|||
raise UserError('No Tasks to Bill') |
|||
|
|||
total = sum(x.effective_hours for x in tasks if x.effective_hours > 0) |
|||
|
|||
invoice_no = self.env['ir.sequence'].next_by_code( |
|||
'ticket.invoice') |
|||
move = self.env['account.move'].create([ |
|||
{ |
|||
'name': invoice_no, |
|||
'move_type': 'out_invoice', |
|||
'partner_id': self.customer_id.id, |
|||
'ticket_id': self.id, |
|||
'date': fields.Date.today(), |
|||
'invoice_date': fields.Date.today(), |
|||
'invoice_line_ids': [(0, 0, |
|||
{'product_id': self.service_product_id.id, |
|||
'name': self.service_product_id.name, |
|||
'quantity': total, |
|||
'product_uom_id': self.service_product_id.uom_id.id, |
|||
'price_unit': self.cost, |
|||
'account_id': self.service_product_id.categ_id.property_account_income_categ_id.id, |
|||
})], |
|||
}, ]) |
|||
for task in tasks: |
|||
task.ticket_billed = True |
|||
return { |
|||
'effect': { |
|||
'fadeout': 'medium', |
|||
'message': 'Billed Successfully!', |
|||
'type': 'rainbow_man', |
|||
} |
|||
# 'view_type': 'form', |
|||
# 'res_model': 'account.move', |
|||
# 'res_id': move.id, |
|||
# 'view_id': False, |
|||
# 'view_mode': 'form', |
|||
# 'type': 'ir.actions.act_window', |
|||
} |
|||
|
|||
def create_tasks(self): |
|||
task_id = self.env['project.task'].create({ |
|||
'name': self.name + '-' + self.subject, |
|||
'project_id': self.project_id.id, |
|||
'company_id': self.env.company.id, |
|||
'ticket_id': self.id, |
|||
}) |
|||
self.write({ |
|||
'task_ids': [(4, task_id.id)] |
|||
}) |
|||
|
|||
return { |
|||
'name': 'Tasks', |
|||
'res_model': 'project.task', |
|||
'view_id': False, |
|||
'res_id': task_id.id, |
|||
'view_mode': 'form', |
|||
'type': 'ir.actions.act_window', |
|||
'target': 'new', |
|||
} |
|||
|
|||
def open_tasks(self): |
|||
return { |
|||
'name': 'Tasks', |
|||
'domain': [('ticket_id', '=', self.id)], |
|||
'res_model': 'project.task', |
|||
'view_id': False, |
|||
'view_mode': 'tree,form', |
|||
'type': 'ir.actions.act_window', |
|||
} |
|||
|
|||
def open_invoices(self): |
|||
return { |
|||
'name': 'Invoice', |
|||
'domain': [('ticket_id', '=', self.id)], |
|||
'res_model': 'account.move', |
|||
'view_id': False, |
|||
'view_mode': 'tree,form', |
|||
'type': 'ir.actions.act_window', |
|||
} |
|||
|
|||
|
|||
class StageTicket(models.Model): |
|||
_name = 'ticket.stage' |
|||
_description = 'Ticket Stage' |
|||
_order = 'sequence, id' |
|||
|
|||
name = fields.Char('Name') |
|||
active = fields.Boolean(default=True) |
|||
sequence = fields.Integer(default=50) |
|||
closing_stage = fields.Boolean('Closing Stage', default=False) |
|||
folded = fields.Boolean('Folded in Kanban', default=False) |
|||
|
|||
|
|||
class Tasks(models.Model): |
|||
_inherit = 'project.task' |
|||
|
|||
ticket_billed = fields.Boolean('Billed', default=False) |
|||
|
|||
|
|||
class HelpDeskTeam(models.Model): |
|||
_name = 'help.team' |
|||
_description = 'Helpdesk Team' |
|||
|
|||
name = fields.Char('Name') |
|||
member_ids = fields.Many2many('res.users', string='Members') |
|||
email = fields.Char('Email') |
|||
project_id = fields.Many2one('project.project', string='Project') |
|||
create_task = fields.Boolean(string="Create Task") |
@ -0,0 +1,30 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class Helpdesk(models.TransientModel): |
|||
_inherit = 'res.config.settings' |
|||
|
|||
show_create_task = fields.Boolean( |
|||
string="Create Tasks", |
|||
config_parameter='odoo_website_helpdesk.show_create_task') |
@ -0,0 +1,34 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class Task(models.Model): |
|||
_inherit = 'project.task' |
|||
|
|||
ticket_id = fields.Many2one('help.ticket', string='Ticket') |
|||
|
|||
|
|||
class AccountMove(models.Model): |
|||
_inherit = 'account.move' |
|||
|
|||
ticket_id = fields.Many2one('help.ticket', string='Ticket') |
|
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 589 B |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 967 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 401 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 178 KiB |
After Width: | Height: | Size: 218 KiB |
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 224 KiB |
After Width: | Height: | Size: 172 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 220 KiB |
After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 175 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 182 KiB |
After Width: | Height: | Size: 154 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 7.2 KiB |
@ -0,0 +1,751 @@ |
|||
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> |
|||
<!-- TITLE BAR --> |
|||
<div |
|||
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> |
|||
<img src="./assets/misc/cybrosys-logo.png" width="42" height="42" |
|||
style="width: 42px; height: 42px;"/> |
|||
<div> |
|||
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Community |
|||
</div> |
|||
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Enterprise |
|||
</div> |
|||
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Odoo.sh |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF TITLE BAR --> |
|||
|
|||
<!-- APP HERO --> |
|||
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> |
|||
Website Helpdesk Support Ticket Management |
|||
</h1> |
|||
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> |
|||
|
|||
A Module For Managing Support Tickets |
|||
</p> |
|||
<!-- END OF APP HERO --> |
|||
<img src="assets/screenshots/hero.gif" |
|||
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/> |
|||
|
|||
</div> |
|||
|
|||
<!-- NAVIGATION SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/compass.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Explore This |
|||
Module</h2> |
|||
</div> |
|||
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> |
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#overview"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> |
|||
<span |
|||
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn |
|||
more about this |
|||
module</span> |
|||
</div> |
|||
<img src="./assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#features"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> |
|||
<span |
|||
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View |
|||
features of this |
|||
module</span> |
|||
</div> |
|||
<img src="./assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#screenshots"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> |
|||
<span |
|||
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View |
|||
screenshots for this |
|||
module</span> |
|||
</div> |
|||
<img src="./assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<!-- END OF NAVIGATION SECTION --> |
|||
|
|||
<!-- OVERVIEW SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/pie-chart.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Overview |
|||
</h2> |
|||
</div> |
|||
<div class="row" |
|||
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 py-4"> |
|||
In the Helpdesk Support App, one can Create Ticket trough website portal and can view their tickets.</p> |
|||
The Internal user can assign th ticket to any team and link to any project if needed and can invoice based on the |
|||
timesheet |
|||
</div> |
|||
</div> |
|||
<!-- END OF OVERVIEW SECTION --> |
|||
|
|||
<!-- FEATURES SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/features.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Features |
|||
</h2> |
|||
</div> |
|||
<div class="row" |
|||
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Website Ticket Creation |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
View created tickets from portal |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create Tasks for the project linked to the Ticket </span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Link a project to the Ticket and invoice based on the tasks timesheet |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Tickets can be viewed and managed from backend |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="./assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Customise stages or use predefined stages for seeing the status of ticket |
|||
</span> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<!-- END OF FEATURES SECTION --> |
|||
|
|||
<!-- SCREENSHOTS SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" |
|||
id="screenshots"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/pictures.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Screenshots |
|||
</h2> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create Tickets From website, |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot1.png" |
|||
class="img-thumbnail"><br/> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Get Confirmation/Success message for ticket creation |
|||
</h3><br/> |
|||
<img src="./assets/screenshots/Screenshot2.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
View created tickets from portal |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot4.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
View the details of each ticket by hovering over them. |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot3.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Configure stages for tickets |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot5.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
View tickets according to stages in kanban view. |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot6.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="col-sm-12"> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create / configure helpdesk teams |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot7.png" |
|||
class="img-thumbnail"><br/> |
|||
<img src="./assets/screenshots/Screenshot8.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create Tickets from backend normally |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot9.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Enable 'Create Tasks' from configuration settings to create tasks for the project linked to the Ticket |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot10.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Turn on 'create task' toggle inside the ticket form to link a project to the Ticket |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot11.png" |
|||
class="img-thumbnail"><br/><h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create Tasks: |
|||
</h3><br/> |
|||
<img src="./assets/screenshots/Screenshot13.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Turn on 'Billable' toggle inside the ticket form to create invoice based on the tasks timesheet |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot12.png" |
|||
class="img-thumbnail"><br/><h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Create invoice: |
|||
</h3><br/> |
|||
<img src="./assets/screenshots/Screenshot14.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Print PDF Report of the Ticket from backend |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot15.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="col-sm-12"> |
|||
|
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Ticket (pdf): |
|||
</h3> |
|||
<img src="./assets/screenshots/Screenshot16.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<!-- END OF SCREENSHOTS SECTION --> |
|||
|
|||
<!-- RELATED PRODUCTS --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/categories.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Related |
|||
Products |
|||
</h2> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner" style="padding: 30px;"> |
|||
<div class="carousel-item" style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/export_stockinfo_xls/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/export_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/gantt_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/sales_credit_limit/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/credit_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item active" |
|||
style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/base_account_budget/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/budget_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/product_to_quotation/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/quotation_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/" target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/employee_image.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" data-slide="prev" |
|||
style="width:35px; color:#000"> <span |
|||
class="carousel-control-prev-icon"><i |
|||
class="fa fa-chevron-left" |
|||
style="font-size:24px"></i></span> |
|||
</a> <a class="carousel-control-next" href="#demo1" |
|||
data-slide="next" style="width:35px; color:#000"> |
|||
<span class="carousel-control-next-icon"><i |
|||
class="fa fa-chevron-right" |
|||
style="font-size:24px"></i></span> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF RELATED PRODUCTS --> |
|||
|
|||
<!-- OUR SERVICES --> |
|||
|
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/star.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Our Services |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/cogs.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Customization</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/wrench.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/lifebuoy.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Support</h6> |
|||
</div> |
|||
|
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/user.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Hire |
|||
Odoo |
|||
Developer</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/puzzle.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Integration</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/update.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Migration</h6> |
|||
</div> |
|||
|
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/consultation.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Consultancy</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/training.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/license.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Licensing Consultancy</h6> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<!-- END OF END OF OUR SERVICES --> |
|||
|
|||
<!-- OUR INDUSTRIES --> |
|||
|
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/corporate.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Our |
|||
Industries |
|||
</h2> |
|||
</div> |
|||
|
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/trading-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Trading |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easily procure |
|||
and |
|||
sell your products</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/pos-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
POS |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easy |
|||
configuration |
|||
and convivial experience</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/education-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Education |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
A platform for |
|||
educational management</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/manufacturing-black.png" |
|||
class="img-responsive mb-3" height="48px" |
|||
width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Manufacturing |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Plan, track and |
|||
schedule your operations</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/ecom-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
E-commerce & Website |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Mobile |
|||
friendly, |
|||
awe-inspiring product pages</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/service-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Service Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Keep track of |
|||
services and invoice</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/restaurant-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Restaurant |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Run your bar or |
|||
restaurant methodically</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="../assets/icons/hotel-black.png" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Hotel Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
An |
|||
all-inclusive |
|||
hotel management application</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- END OF END OF OUR INDUSTRIES --> |
|||
|
|||
<!-- SUPPORT --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="./assets/misc/customer-support.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Support |
|||
</h2> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="./assets/misc/support.png" height="48" width="48" |
|||
style="width: 42px; height: 42px;"/> |
|||
</div> |
|||
<div> |
|||
<h4>Need Help?</h4> |
|||
<p style="line-height: 100%;">Got questions or need help? |
|||
Get in touch.</p> |
|||
<a href="mailto:odoo@cybrosys.com"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> |
|||
odoo@cybrosys.com</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="./assets/misc/whatsapp.png" height="52" width="52" |
|||
style="width: 52px; height: 52px;"/> |
|||
</div> |
|||
<div> |
|||
<h4>WhatsApp</h4> |
|||
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p> |
|||
<a href="https://api.whatsapp.com/send?phone=918606827707"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> |
|||
+91 86068 |
|||
27707</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> |
|||
<img src="./assets/misc/logo.png" width="144" height="31" |
|||
style="width:144px; height: 31px; margin-top: 40px;"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF SUPPORT --> |
@ -0,0 +1,35 @@ |
|||
odoo.define("odoo_website_helpdesk.ticket_details", function (require) { |
|||
"use strict"; |
|||
|
|||
$(document).on("mouseover", "#popover", function (event) { |
|||
console.log("start"); |
|||
var self = this; |
|||
var item_text = ""; |
|||
if (self.parentElement.parentElement.children[3]) { |
|||
item_text = |
|||
"Ticket : " + |
|||
self.parentElement.parentElement.children[1].outerText + |
|||
"<br/>" + |
|||
"Subject : " + |
|||
self.parentElement.parentElement.children[2].outerText + |
|||
"<br/>" + |
|||
"Cost : " + |
|||
self.parentElement.parentElement.children[4].outerText + |
|||
"<br/>" + |
|||
"Priority : " + |
|||
self.parentElement.parentElement.children[6].outerText+ |
|||
"<br/>" +"<br/>" + |
|||
"Description : " + |
|||
self.parentElement.parentElement.children[3].outerText + |
|||
"<br/>"; |
|||
} |
|||
|
|||
$(this).popover({ |
|||
html: true, |
|||
placement: "right", |
|||
trigger: "hover", |
|||
title: "Ticket Details", |
|||
content: "<span>" + item_text + "</span>", |
|||
}); |
|||
}); |
|||
}); |
@ -0,0 +1,201 @@ |
|||
<odoo> |
|||
<record id="view_helpdesk_form" model="ir.ui.view"> |
|||
<field name="name">help.ticket.form</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<header> |
|||
<button name="create_tasks" string="Create Task" type="object" class="btn-primary" attrs="{'invisible':[('create_task','=',False)]}"/> |
|||
<button name="create_invoice" string="Create Invoice" type="object" class="btn-primary" attrs="{'invisible':[('billable','=',False)]}"/> |
|||
<field name="stage_id" widget="statusbar" options="{'clickable': '1'}"/> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_button_box" name="button_box"> |
|||
<button class="oe_stat_button" name="open_tasks" string="Tasks" type="object" icon="fa-tasks" attrs="{'invisible':[('create_task','=',False)]}"> |
|||
</button> |
|||
|
|||
<button class="oe_stat_button" name="open_invoices" string="Invoices" type="object" icon="fa-tasks" attrs="{'invisible':[('billable','=',False)]}"> |
|||
</button> |
|||
</div> |
|||
<div class="oe_title"> |
|||
<label for="name" class="oe_edit_only"/> |
|||
<h1> |
|||
<field name="name"/> |
|||
</h1> |
|||
<label for="subject" class="oe_edit_only"/> |
|||
<h1 class="mt0"> |
|||
<field name="subject"/> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="customer_id"/> |
|||
<field name="customer_name"/> |
|||
<field name="email"/> |
|||
<field name="phone"/> |
|||
<field name="cost"/> |
|||
<field name="start_date"/> |
|||
</group> |
|||
<group> |
|||
<field name="team_id"/> |
|||
<field name="project_id"/> |
|||
<field name="service_product_id" attrs="{'invisible':[('create_task','=',False)], |
|||
'required': [('create_task','=', True)]}"/> |
|||
<field name="priority" widget="priority"/> |
|||
<field name="show_create_task" invisible="1"/> |
|||
<field name="create_task" attrs="{'invisible':[('show_create_task','=',False)]}"/> |
|||
<field name="billable" attrs="{'invisible':[('create_task','=',False)]}"/> |
|||
<field name="end_date"/> |
|||
</group> |
|||
</group> |
|||
|
|||
<notebook> |
|||
<page string="Issue Description"> |
|||
<field name="description" placeholder="Provide the reason in detail"/> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
<div class="o_attachment_preview"/> |
|||
<div class="oe_chatter"> |
|||
<field name="message_follower_ids" groups="base.group_user"/> |
|||
<field name="activity_ids"/> |
|||
<field name="message_ids"/> |
|||
</div> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_helpdesk_tree" model="ir.ui.view"> |
|||
<field name="name">help.ticket.tree</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="name"/> |
|||
<field name="customer_id"/> |
|||
<field name="customer_name"/> |
|||
<field name="subject"/> |
|||
<field name="stage_id"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
<record id="view_helpdesk_kanban" model="ir.ui.view"> |
|||
<field name="name">help.ticket.kanban</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="arch" type="xml"> |
|||
<kanban default_group_by="stage_id" class="o_kanban_small_column" quick_create="false" on_create="quick_create"> |
|||
<field name="color"/> |
|||
<field name="name"/> |
|||
<field name="stage_id"/> |
|||
<templates> |
|||
<t t-name="kanban-box"> |
|||
<div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> |
|||
<div class="o_dropdown_kanban dropdown"> |
|||
<a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu"> |
|||
<span class="fa fa-ellipsis-v"/> |
|||
</a> |
|||
<div class="dropdown-menu" role="menu"> |
|||
<t t-if="widget.editable"> |
|||
<a role="menuitem" type="edit" class="dropdown-item">Edit...</a> |
|||
</t> |
|||
<t t-if="widget.deletable"> |
|||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a> |
|||
</t> |
|||
<ul class="oe_kanban_colorpicker" data-field="color"/> |
|||
</div> |
|||
</div> |
|||
<div class="oe_kanban_content"> |
|||
<div> |
|||
<strong> |
|||
<field name="name"/> |
|||
</strong> |
|||
</div> |
|||
<div class="text-muted"> |
|||
<a>Customer : </a> |
|||
<field name="customer_id"/> |
|||
<div style="float: right;"> |
|||
<a>Priority : </a> |
|||
<field name="priority"/> |
|||
</div> |
|||
</div> |
|||
<div class="text-muted"> |
|||
<a>Subject : </a> |
|||
<field name="subject"/> |
|||
</div> |
|||
<div class="text-muted"> |
|||
<a>Team :</a> |
|||
<field name="team_id"/> |
|||
</div> |
|||
</div> |
|||
<div class="oe_clear"/> |
|||
</div> |
|||
</t> |
|||
</templates> |
|||
</kanban> |
|||
</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="helpdesk_view_activity" model="ir.ui.view"> |
|||
<field name="name">help.ticket.activity</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="arch" type="xml"> |
|||
<activity string="Tickets"> |
|||
<templates> |
|||
<div t-name="activity-box"> |
|||
<div> |
|||
<field name="name" display="full"/> |
|||
<field name="customer_id" muted="1" display="full"/> |
|||
</div> |
|||
</div> |
|||
</templates> |
|||
</activity> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="help_ticket_view_calendar" model="ir.ui.view"> |
|||
<field name="name">help.ticket.calendar</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="arch" type="xml"> |
|||
<calendar string="Helpdesk Ticket" date_start="start_date" date_stop="end_date" event_open_popup="true" mode="month" color="customer_id" quick_add="False"> |
|||
<field name="customer_id"/> |
|||
<field name="subject"/> |
|||
<field name="team_id"/> |
|||
</calendar> |
|||
</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="view_helpdesk_stage_form" model="ir.ui.view"> |
|||
<field name="name">ticket.stage.form</field> |
|||
<field name="model">ticket.stage</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<div class="oe_title"> |
|||
<label for="name" class="oe_edit_only"/> |
|||
<h1> |
|||
<field name="name"/> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<field name="sequence"/> |
|||
<field name="closing_stage"/> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_helpdesk_stage_tree" model="ir.ui.view"> |
|||
<field name="name">ticket.stage.tree</field> |
|||
<field name="model">ticket.stage</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="name"/> |
|||
<field name="sequence"/> |
|||
<field name="closing_stage"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -0,0 +1,58 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<record id="action_helpdesk" model="ir.actions.act_window"> |
|||
<field name="name">Helpdesk</field> |
|||
<field name="res_model">help.ticket</field> |
|||
<field name="view_mode">kanban,tree,form,calendar,activity</field> |
|||
</record> |
|||
|
|||
<record id="action_helpdesk_team" model="ir.actions.act_window"> |
|||
<field name="name">Helpdesk</field> |
|||
<field name="res_model">help.team</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="action_helpdesk_stage" model="ir.actions.act_window"> |
|||
<field name="name">Stages</field> |
|||
<field name="res_model">ticket.stage</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="action_helpdesk_general_settings" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Helpdesk Ticket</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">res.config.settings</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="target">inline</field> |
|||
<field name="context">{'module': 'helpdesk_ticket'}</field> |
|||
</record> |
|||
|
|||
<menuitem id="menu_helpdesk" name="Helpdesk" action="action_helpdesk" |
|||
sequence="1"/> |
|||
|
|||
<menuitem id="helpdesk_management" parent="menu_helpdesk" name="Support" |
|||
action="action_helpdesk" sequence="1"/> |
|||
|
|||
<menuitem id="helpdesk_tickets" parent="helpdesk_management" name="Helpdesk Tickets" |
|||
action="action_helpdesk" sequence="1"/> |
|||
|
|||
<menuitem id="menu_helpdesk_team" name="Helpdesk Team" |
|||
action="action_helpdesk_team" |
|||
parent="helpdesk_management" sequence="10"/> |
|||
|
|||
<menuitem id="menu_helpdesk_configuration" name="Configuration" |
|||
sequence="50" parent="menu_helpdesk"/> |
|||
|
|||
<menuitem id="menu_helpdesk_settings" name="Settings" |
|||
action="action_helpdesk_general_settings" |
|||
parent="menu_helpdesk_configuration" sequence="1"/> |
|||
|
|||
|
|||
<menuitem id="menu_helpdesk_stage" name="Stages" |
|||
action="action_helpdesk_stage" |
|||
parent="menu_helpdesk_configuration" sequence="5"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,98 @@ |
|||
<odoo> |
|||
<template id="portal_my_home_menu_tickets" |
|||
name="Portal layout : upcoming tickets" |
|||
inherit_id="portal.portal_breadcrumbs" priority="30"> |
|||
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside"> |
|||
<li t-if="page_name == 'ticket'" |
|||
t-attf-class="breadcrumb-item #{'active ' if not ticket else ''}"> |
|||
<a t-if="ticket" t-attf-href="/my/tickets?{{ keep_query() }}"> |
|||
Tickets |
|||
</a> |
|||
<t t-else="">HelpDesk Tickets</t> |
|||
</li> |
|||
<li t-if="ticket" class="breadcrumb-item active"> |
|||
<t t-esc="ticket.name" t-if="ticket.name != '/'"/> |
|||
</li> |
|||
</xpath> |
|||
</template> |
|||
|
|||
<template id="portal_my_home_helpdesk" name="Tickets" |
|||
inherit_id="portal.portal_my_home" priority="1" |
|||
customize_show="True"> |
|||
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside"> |
|||
<t t-call="portal.portal_docs_entry"> |
|||
<t t-set="title">Tickets</t> |
|||
<t t-set="url" t-value="'/my/tickets'"/> |
|||
<t t-set="placeholder_count" t-value="'ticket_count'"/> |
|||
</t> |
|||
</xpath> |
|||
</template> |
|||
|
|||
<template id="portal_my_tickets" name="My Tickets"> |
|||
<t t-call="portal.portal_layout"> |
|||
<t t-set="breadcrumbs_searchbar" t-value="True"/> |
|||
|
|||
<t t-call="portal.portal_searchbar"> |
|||
<t t-set="title">My Tickets</t> |
|||
</t> |
|||
|
|||
<t t-if="tickets" t-call="portal.portal_table"> |
|||
<thead> |
|||
<tr class="active"> |
|||
<th> |
|||
<span class='d-none d-md-inline'>Ticket #</span> |
|||
</th> |
|||
<th class="text-right">Subject</th> |
|||
<th style="display:none;" class="text-right">Priority</th> |
|||
<th class="text-right">Date</th> |
|||
<th class="text-right">Stage</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<t t-foreach="tickets" t-as="ticket"> |
|||
<tr> |
|||
<td id="my_selector"> |
|||
<a id="popover" href="#"> |
|||
<t t-esc="ticket.name" t-value="ticket.id"/> |
|||
</a> |
|||
</td> |
|||
<td style="display:none;"> |
|||
<span t-field="ticket.name"/> |
|||
</td> |
|||
<td style="display:none;"> |
|||
<span t-field="ticket.subject"/> |
|||
</td> |
|||
<td style="display:none;"> |
|||
<span t-field="ticket.description"/> |
|||
</td> |
|||
<td style="display:none;"> |
|||
<span t-field="ticket.cost"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="ticket.subject"/> |
|||
</td> |
|||
<td class="text-right" style="display:none;"> |
|||
<span t-field="ticket.priority"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="ticket.create_date" |
|||
t-options="{'widget': 'date'}"/> |
|||
&nbsp; |
|||
<span class='d-none d-md-inline' |
|||
t-field="ticket.create_date" |
|||
t-options="{'time_only': True}"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="ticket.stage_id.name"/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</tbody> |
|||
</t> |
|||
<p t-else=""> |
|||
There are currently no tickets issued for your account. |
|||
</p> |
|||
</t> |
|||
</template> |
|||
|
|||
</odoo> |
@ -0,0 +1,107 @@ |
|||
<odoo> |
|||
<template id="report_help_ticket"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-call="web.external_layout"> |
|||
<div class="page"> |
|||
<div style="margin-bottom: 10px;"> |
|||
<div class="text-center" |
|||
style="font-weight: 400 !important; font-size: 2rem !important;"> |
|||
<t t-esc="o.name"/> |
|||
- <t t-esc="o.subject"/> |
|||
</div><br/> |
|||
<table class="table table-bordered mt32"> |
|||
<thead> |
|||
<tr> |
|||
<th class="text-center"> |
|||
<span>Customer :</span> |
|||
</th> |
|||
<th class="text-center"> |
|||
<span>Description :</span> |
|||
</th> |
|||
<th class="text-center"> |
|||
<span>Priority :</span> |
|||
</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr class="text-center"> |
|||
<td> |
|||
<span t-field="o.customer_id" |
|||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> |
|||
</td> |
|||
<td> |
|||
<h3 t-field="o.description"/> |
|||
</td> |
|||
<td> |
|||
<h3 t-field="o.priority"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
|
|||
<t t-set="tasks" |
|||
t-value="request.env['project.task'].search([('ticket_id', '=', o.id)])"/> |
|||
|
|||
<t t-if="tasks"> |
|||
<div> |
|||
<h3 class="text-center"> |
|||
<strong>Tasks</strong> |
|||
</h3> |
|||
</div> |
|||
|
|||
<table class="table table-bordered mt32"> |
|||
<thead> |
|||
<tr> |
|||
<th class="text-center"> |
|||
<span>Task Name</span> |
|||
</th> |
|||
<th class="text-center"> |
|||
<span>Analytic Account</span> |
|||
</th> |
|||
<th class="text-center"> |
|||
<span>Assigned to</span> |
|||
</th> |
|||
<th class="text-center"> |
|||
<span>Total Hours Spend</span> |
|||
</th> |
|||
</tr> |
|||
</thead> |
|||
|
|||
<t t-foreach="tasks" t-as="task"> |
|||
<tbody> |
|||
<tr class="text-center"> |
|||
<td> |
|||
<span t-field="task.name"/> |
|||
</td> |
|||
<td> |
|||
<span t-field="task.analytic_account_id"/> |
|||
</td> |
|||
<td> |
|||
<span t-esc="', '.join(map(lambda x: (x.name), task.user_ids))"/> |
|||
</td> |
|||
<td> |
|||
<span t-field="task.effective_hours"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</t> |
|||
</table> |
|||
</t> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<record id="report_ticket" model="ir.actions.report"> |
|||
<field name="name">Support Ticket</field> |
|||
<field name="model">help.ticket</field> |
|||
<field name="report_type">qweb-pdf</field> |
|||
<field name="report_name">odoo_website_helpdesk.report_help_ticket</field> |
|||
<field name="report_file">odoo_website_helpdesk.report_help_ticket</field> |
|||
<field name="binding_model_id" ref="model_help_ticket"/> |
|||
<field name="binding_type">report</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,28 @@ |
|||
<odoo> |
|||
<record id="ticket_res_config_settings_view_form" model="ir.ui.view"> |
|||
<field name="name">res.config.settings.view.form.inherit.helpdesk</field> |
|||
<field name="model">res.config.settings</field> |
|||
<field name="priority" eval="15"/> |
|||
<field name="inherit_id" ref="base.res_config_settings_view_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[hasclass('settings')]" position="inside"> |
|||
<div class="app_settings_block" data-string="Helpdesk" string="Helpdesk" data-key="helpdesk_ticket"> |
|||
<h2>Helpdesk</h2> |
|||
<div class="row mt16 o_settings_container"> |
|||
<div class="col-lg-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="show_create_task"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="show_create_task"/> |
|||
<div class="text-muted"> |
|||
Enable to create tasks from tickets |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,50 @@ |
|||
<odoo> |
|||
<record id="view_helpdesk_team_form" model="ir.ui.view"> |
|||
<field name="name">help.team.form</field> |
|||
<field name="model">help.team</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<div class="oe_title"> |
|||
<label for="name" class="oe_edit_only"/> |
|||
<h1> |
|||
<field name="name"/> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<field name="member_ids" widget="many2many_tags"/> |
|||
<field name="email"/> |
|||
<field name="project_id"/> |
|||
</group><br/> |
|||
|
|||
<h3>Tasks</h3> |
|||
<div class="row mt16 o_settings_container" id="create_task"> |
|||
<div class="col-lg-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="create_task"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="create_task"/> |
|||
<div class="text-muted"> |
|||
Enable for allowing team to create tasks from tickets |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_helpdesk_team_tree" model="ir.ui.view"> |
|||
<field name="name">help.team.tree</field> |
|||
<field name="model">help.team</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="name"/> |
|||
<field name="email"/> |
|||
<field name="project_id"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,360 @@ |
|||
<odoo> |
|||
<record id="website_helpdesk" model="website.menu"> |
|||
<field name="name">Helpdesk</field> |
|||
<field name="url" eval="'/helpdesk_ticket'"/> |
|||
<field name="parent_id" ref="website.main_menu"/> |
|||
<field name="sequence" type="int">55</field> |
|||
</record> |
|||
|
|||
<record id="odoo_website_helpdesk.helpdesk_thanks" model="website.page"> |
|||
<field name="name">Thanks (Helpdesk)</field> |
|||
<field name="type">qweb</field> |
|||
<field name="url">/helpdesk-thank-you</field> |
|||
<field name="website_indexed" eval="False"/> |
|||
<field name="is_published">True</field> |
|||
<field name="key">odoo_website_helpdesk.helpdesk_thanks</field> |
|||
<field name="arch" type="xml"> |
|||
<t name="Thanks (Helpdesk)" |
|||
t-name="odoo_website_helpdesk.helpdesk_thanks"> |
|||
<t t-call="website.layout"> |
|||
<div id="wrap" class="oe_structure oe_empty"> |
|||
<section class="s_text_block pt40 pb40 o_colored_level " |
|||
data-snippet="s_text_block"> |
|||
<div class="container s_allow_columns"> |
|||
<div class="row"> |
|||
<div class="col-lg-7 col-xl-6 mr-lg-auto"> |
|||
<span class="d-block fa fa-4x fa-handshake-o mx-auto rounded-circle bg-primary"/> |
|||
<br/> |
|||
<h1 class="text-center">Thank You!</h1> |
|||
<div class="pb16 pt16 s_hr" |
|||
data-snippet="s_hr" |
|||
data-name="Separator"> |
|||
<hr class="mx-auto border-top w-50 border-dark text-center"/> |
|||
</div> |
|||
<h5 class="text-center"> |
|||
<span class="fa fa-check-circle"/> |
|||
<span>Your Ticket |
|||
<a t-attf-href="/my_ticket/#{request.session.ticket_id}"> |
|||
<strong> |
|||
<t t-esc="request.session.ticket_number"/> |
|||
</strong> |
|||
</a> |
|||
has been registered |
|||
<b>successfully</b> |
|||
</span> |
|||
</h5> |
|||
<p class="text-center">We will get back |
|||
to you shortly. |
|||
</p> |
|||
</div> |
|||
<div class="col-lg-4"> |
|||
<ul class="list-unstyled mb-0 pl-2"> |
|||
<li>My Company</li> |
|||
<li> |
|||
<i class="fa fa-map-marker fa-fw mr-2"/> |
|||
<span class="o_force_ltr">3575 |
|||
Demo Buena Vista Avenue |
|||
</span> |
|||
</li> |
|||
<li> |
|||
<i class="fa fa-phone fa-fw mr-2"/> |
|||
<span class="o_force_ltr">+1 |
|||
(650) 555-0111 |
|||
</span> |
|||
</li> |
|||
<li> |
|||
<i class="fa fa-1x fa-fw fa-envelope mr-2"/> |
|||
<span> |
|||
info@yourcompany.example.com |
|||
</span> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</field> |
|||
</record> |
|||
|
|||
<template id="ticket_form" name="Helpdesk Ticket"> |
|||
<t t-call="website.layout"> |
|||
<t t-set="logged_partner" |
|||
t-value="request.env['website.visitor']._get_visitor_from_request().partner_id"/> |
|||
<t t-set="contactus_form_values" t-value="{ |
|||
'email_to': res_company.email, |
|||
'name': request.params.get('name', ''), |
|||
'phone': request.params.get('phone', ''), |
|||
'email_from': request.params.get('email_from', ''), |
|||
'company': request.params.get('company', ''), |
|||
'subject': request.params.get('subject', ''), |
|||
}"/> |
|||
<span class="hidden" data-for="contactus_form" |
|||
t-att-data-values="contactus_form_values"/> |
|||
<div id="wrap" class="oe_structure oe_empty"> |
|||
<section |
|||
class="s_title parallax s_parallax_is_fixed bg-black-50 pt24 pb24" |
|||
data-vcss="001" data-snippet="s_title" |
|||
data-scroll-background-ratio="1"> |
|||
<span class="s_parallax_bg oe_img_bg" |
|||
style="background-image: url('/web/image/website.s_banner_default_image'); background-position: 50% 0;"/> |
|||
<div class="o_we_bg_filter bg-black-50"/> |
|||
<div class="container"> |
|||
<h1>Support Tickets</h1> |
|||
</div> |
|||
</section> |
|||
<section class="s_text_block pt40 pb40 o_colored_level " |
|||
data-snippet="s_text_block"> |
|||
<div class="container s_allow_columns"> |
|||
<div class="row"> |
|||
<div class="col-lg-8 mt-4 mt-lg-0"> |
|||
<h5 style="line-height: 1.6;"> |
|||
Contact us about anything related to our |
|||
company or services.<br/> |
|||
We'll do our best to get back to you as soon |
|||
as possible. |
|||
</h5><br/> |
|||
<section class="s_website_form" data-vcss="001" |
|||
data-snippet="s_website_form"> |
|||
<div class="container"> |
|||
<form id="Ticket_form" |
|||
action="/website/form/" |
|||
method="post" |
|||
enctype="multipart/form-data" |
|||
class="o_mark_required" |
|||
data-mark="*" |
|||
data-model_name="help.ticket" |
|||
data-success-mode="redirect" |
|||
data-success-page="/helpdesk-thank-you" |
|||
data-pre-fill="true"> |
|||
<div class="s_website_form_rows row s_col_no_bgcolor"> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom s_website_form_required" |
|||
data-type="char" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact1"> |
|||
<span class="s_website_form_label_content"> |
|||
Name</span> |
|||
<span class="s_website_form_mark"> |
|||
*</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact1" |
|||
type="text" |
|||
class="form-control s_website_form_input" |
|||
name="customer_name" |
|||
required="" |
|||
data-fill-with="name"/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom" |
|||
data-type="char" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact2"> |
|||
<span class="s_website_form_label_content"> |
|||
Phone </span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact2" |
|||
type="tel" |
|||
class="form-control s_website_form_input" |
|||
name="phone" |
|||
data-fill-with="phone"/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_required" |
|||
data-type="email" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact3"> |
|||
<span class="s_website_form_label_content"> |
|||
Email</span> |
|||
<span class="s_website_form_mark"> |
|||
*</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact3" |
|||
type="email" |
|||
class="form-control s_website_form_input" |
|||
name="email_from" |
|||
required="" |
|||
data-fill-with="email"/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom" |
|||
data-type="char" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact4"> |
|||
<span class="s_website_form_label_content"> |
|||
Company</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact4" |
|||
type="text" |
|||
class="form-control s_website_form_input" |
|||
name="company" |
|||
data-fill-with="commercial_company_name"/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_required" |
|||
data-type="char" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact5"> |
|||
<span class="s_website_form_label_content"> |
|||
Subject</span> |
|||
<span class="s_website_form_mark"> |
|||
*</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact5" |
|||
type="text" placeholder="Mention your Issue here" |
|||
class="form-control s_website_form_input" |
|||
name="subject" |
|||
required=""/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom s_website_form_required" |
|||
data-type="text" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact6"> |
|||
<span class="s_website_form_label_content"> |
|||
Description</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<textarea |
|||
id="contact6" |
|||
class="form-control s_website_form_input" |
|||
name="description" placeholder="Issue description in detail" |
|||
required=""></textarea> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
|
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom s_website_form_required" |
|||
data-type="text" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px"> |
|||
<span class="s_website_form_label_content"> |
|||
Priority</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
|
|||
|
|||
<select id="priority" |
|||
name="priority" |
|||
required="" |
|||
class="form-control s_website_form_input"> |
|||
<option value="0" |
|||
selected="selected"> |
|||
Very |
|||
Low</option> |
|||
<option value="1"> |
|||
Low</option> |
|||
<option value="2"> |
|||
Normal</option> |
|||
<option value="3"> |
|||
High</option> |
|||
</select> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_custom s_website_form_required" |
|||
data-type="binary" |
|||
data-name="Field"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact6"> |
|||
<span class="s_website_form_label_content"> |
|||
Attachment</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input type="file" |
|||
name="ticket_attachment" |
|||
multiple="true"/> |
|||
</div> |
|||
</div><br/> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_field s_website_form_dnone"> |
|||
<div class="row s_col_no_resize s_col_no_bgcolor"> |
|||
<label class="col-form-label col-sm-auto s_website_form_label" |
|||
style="width: 200px" |
|||
for="contact7"> |
|||
<span class="s_website_form_label_content"> |
|||
Email To</span> |
|||
</label> |
|||
<div class="col-sm"> |
|||
<input id="contact7" |
|||
type="hidden" |
|||
class="form-control s_website_form_input" |
|||
name="email_to"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="form-group col-12 s_website_form_submit" |
|||
data-name="Submit Button"> |
|||
<div style="width: 200px;" |
|||
class="s_website_form_label"/> |
|||
<a href="#" role="button" |
|||
class="btn btn-primary btn-lg s_website_form_send"> |
|||
Submit</a> |
|||
<span id="s_website_form_result"></span> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
<div class="col-lg-4 m-1 mt-5 mt-lg-0"> |
|||
<ul class="list-unstyled mb-0 pl-2"> |
|||
<li class="mt-5">My Company</li> |
|||
<li> |
|||
<i class="fa fa-map-marker fa-fw mr-2"/> |
|||
<span class="o_force_ltr">3575 Demo |
|||
Buena |
|||
Vista Avenue</span> |
|||
</li> |
|||
<li> |
|||
<i class="fa fa-phone fa-fw mr-2"/> |
|||
<span class="o_force_ltr">+1 (650) |
|||
555-0111</span> |
|||
</li> |
|||
<li> |
|||
<i class="fa fa-1x fa-fw fa-envelope mr-2"/> |
|||
<span> |
|||
info@yourcompany.example.com</span> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
</t> |
|||
</template> |
|||
</odoo> |