@ -0,0 +1,41 @@ |
|||||
|
Support Package Management |
||||
|
========================== |
||||
|
* Support package management module for Odoo 14 community editions |
||||
|
|
||||
|
Installation |
||||
|
============ |
||||
|
- www.odoo.com/documentation/14.0/setup/install.html |
||||
|
- Install our custom addon |
||||
|
|
||||
|
License |
||||
|
------- |
||||
|
General Public License, Version 3 (LGPL v3). |
||||
|
(https://www.odoo.com/documentation/user/13.0/legal/licenses/licenses.html) |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Credits |
||||
|
------- |
||||
|
* Developer: |
||||
|
(v14) Amal @ 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,2 @@ |
|||||
|
from . import models |
||||
|
from . import report |
@ -0,0 +1,48 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2021-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': 'Support Package Management', |
||||
|
'summary': 'Support Service and Package Management Module', |
||||
|
'description': """Support Module is an easy-to-use Support Management app. |
||||
|
It enables users to create, manage, optimize, and monitor |
||||
|
the entire service request from a centralized application. |
||||
|
""", |
||||
|
'author': "Cybrosys Techno Solutions", |
||||
|
'website': "https://www.cybrosys.com", |
||||
|
'company': "Cybrosys Techno Solutions", |
||||
|
'maintainer': "Cybrosys Techno Solutions", |
||||
|
'category': 'Project', |
||||
|
'Version': '14.0.1.0.0', |
||||
|
'depends': ['base', 'project', 'sale_management', 'hr_timesheet'], |
||||
|
'data': [ |
||||
|
'security/ir.model.access.csv', |
||||
|
'views/support_package.xml', |
||||
|
'views/support_client.xml', |
||||
|
'views/package_template.xml', |
||||
|
'report/support_report_views.xml', |
||||
|
], |
||||
|
'license': 'LGPL-3', |
||||
|
'images': ['static/description/banner.png'], |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': True, |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
## Module <customize_settings> |
||||
|
|
||||
|
#### 17.05.2021 |
||||
|
#### Version 14.0.1.0.0 |
||||
|
#### ADD |
||||
|
Initial Commit |
@ -0,0 +1,3 @@ |
|||||
|
from . import support_package |
||||
|
from . import support_client |
||||
|
from . import package_template |
@ -0,0 +1,45 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
||||
|
|
||||
|
from odoo import api, models, fields |
||||
|
|
||||
|
|
||||
|
class ProjectTemplate(models.Model): |
||||
|
_name = 'support.package.template' |
||||
|
_description = 'Support Package Template' |
||||
|
_rec_name = 'name' |
||||
|
|
||||
|
name = fields.Char(string="Name of Package") |
||||
|
count = fields.Char(string='Number of Tickets', readonly=False) |
||||
|
duration = fields.Float( |
||||
|
string='Ticket Duration', readonly=False, |
||||
|
help="Maximum allowed duration for a single ticket in hours") |
||||
|
validity_number = fields.Char(string='Support Package Validity', |
||||
|
readonly=False) |
||||
|
validity_rule = fields.Selection([ |
||||
|
('days', 'Day(s)'), |
||||
|
('months', 'Month(s)'), |
||||
|
('years', 'Year(s)')], readonly=False, default='months') |
||||
|
package_validity = fields.Integer(string='Package Validity', store=True, |
||||
|
readonly=False, |
||||
|
compute='_compute_package_validity') |
||||
|
|
||||
|
@api.depends('validity_number', 'validity_rule') |
||||
|
def _compute_package_validity(self): |
||||
|
"""Find package validity in days""" |
||||
|
for rec in self: |
||||
|
if rec.validity_rule == 'days': |
||||
|
rec.package_validity = int(rec.validity_number) |
||||
|
elif rec.validity_rule == 'months': |
||||
|
rec.package_validity = int(rec.validity_number) * 30 |
||||
|
elif rec.validity_rule == 'years': |
||||
|
rec.package_validity = int(rec.validity_number) * 365 |
||||
|
|
||||
|
def button_create_package(self): |
||||
|
"""Button to convert template to project""" |
||||
|
return { |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name': 'Project Support Package', |
||||
|
'view_mode': 'form', |
||||
|
'res_model': 'project.project' |
||||
|
} |
@ -0,0 +1,228 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
||||
|
|
||||
|
import datetime |
||||
|
import math |
||||
|
from odoo import api, models, fields, _ |
||||
|
from odoo.exceptions import ValidationError |
||||
|
|
||||
|
|
||||
|
class SupportClientTimesheet(models.Model): |
||||
|
_inherit = 'account.analytic.line' |
||||
|
|
||||
|
support_count = fields.Integer(string='Ticket Count', store=True, |
||||
|
help="Effective hour of each record", |
||||
|
compute="_compute_support_count") |
||||
|
|
||||
|
@api.depends('unit_amount') |
||||
|
def _compute_support_count(self): |
||||
|
"""Find count of support in each record""" |
||||
|
for task in self: |
||||
|
try: |
||||
|
task.support_count = math.ceil(task.unit_amount / |
||||
|
task.project_id.support_duration) |
||||
|
except ZeroDivisionError: |
||||
|
task.support_count = 0 |
||||
|
|
||||
|
|
||||
|
class SupportClient(models.Model): |
||||
|
_inherit = 'project.task' |
||||
|
|
||||
|
is_support_package = fields.Boolean(string='Support Package') |
||||
|
support_count = fields.Integer(string='Number of Tickets') |
||||
|
count_used = fields.Integer(string='Used Tickets') |
||||
|
count_remaining = fields.Integer(string='Remaining Tickets') |
||||
|
support_duration = fields.Float(string='Support Duration', default=1.0) |
||||
|
package_validity = fields.Integer(string='Support Package Validity', |
||||
|
default=1) |
||||
|
|
||||
|
start_date = fields.Date(string='Start Date') |
||||
|
end_date = fields.Date(string='End Date') |
||||
|
reminder_date = fields.Date(string='Reminder Date') |
||||
|
this_effective_hours = fields.Float(help="Effective hour in this module", |
||||
|
default=0.0, store=True, |
||||
|
compute_sudo=True, |
||||
|
compute="_compute_this_effective_hours") |
||||
|
to_renew = fields.Boolean(string="To Renew", default=False) |
||||
|
|
||||
|
@api.model_create_multi |
||||
|
def create(self, vals_list): |
||||
|
"""update input values with values of this module""" |
||||
|
for rec in vals_list: |
||||
|
this_project_id = rec.get('project_id') |
||||
|
project_id = self.env['project.project'].search([ |
||||
|
('id', '=', this_project_id)]) |
||||
|
if project_id.is_support_package: |
||||
|
new_vals_list = [{ |
||||
|
'is_support_package': project_id.is_support_package, |
||||
|
'support_count': project_id.support_count, |
||||
|
'support_duration': project_id.support_duration, |
||||
|
'planned_hours': (float(project_id.support_count) * |
||||
|
float(project_id.support_duration)), |
||||
|
'count_used': 0, |
||||
|
'date_deadline': datetime.date.today() + datetime.timedelta( |
||||
|
days=project_id.package_validity), |
||||
|
'count_remaining': project_id.support_count, |
||||
|
'package_validity': project_id.package_validity, |
||||
|
'start_date': datetime.date.today(), |
||||
|
'end_date': datetime.date.today() + datetime.timedelta( |
||||
|
days=project_id.package_validity), |
||||
|
}] |
||||
|
vals_list[0].update(new_vals_list[0]) |
||||
|
return super(SupportClient, self).create(vals_list) |
||||
|
else: |
||||
|
return super(SupportClient, self).create(vals_list) |
||||
|
|
||||
|
@api.onchange('company_id') |
||||
|
def _onchange_company_id(self): |
||||
|
"""Function predefines some fields""" |
||||
|
this_project_id = self.env.context.get('default_project_id') |
||||
|
project_id = self.env['project.project']. \ |
||||
|
search([('id', '=', this_project_id)]) |
||||
|
if project_id.is_support_package: |
||||
|
self.count_used = 0 |
||||
|
self.name = project_id.name |
||||
|
self.start_date = datetime.date.today() |
||||
|
self.support_duration = project_id.support_duration |
||||
|
self.package_validity = project_id.package_validity |
||||
|
self.is_support_package = project_id.is_support_package |
||||
|
self.end_date = datetime.date.today() + datetime. \ |
||||
|
timedelta(days=project_id.package_validity) |
||||
|
self.date_deadline = datetime.date.today() + datetime. \ |
||||
|
timedelta(days=project_id.package_validity) |
||||
|
self.planned_hours = (self.support_count * self.support_duration) |
||||
|
self.support_count = self.count_remaining = project_id.support_count |
||||
|
else: |
||||
|
self.is_support_package = False |
||||
|
|
||||
|
@api.onchange('start_date') |
||||
|
def _onchange_start_date(self): |
||||
|
if self.is_support_package: |
||||
|
self.end_date = self.start_date + datetime.timedelta( |
||||
|
days=self.package_validity) |
||||
|
self.date_deadline = self.end_date |
||||
|
|
||||
|
@api.onchange('count_remaining') |
||||
|
def _onchange_count_remaining(self): |
||||
|
if self.is_support_package: |
||||
|
days_left = self.end_date - self.start_date |
||||
|
for rec in self: |
||||
|
if rec.count_remaining == 0 or days_left.days <= 0: |
||||
|
self.sale_order_id.order_line.qty_delivered = 1 |
||||
|
if not rec.sale_line_id: |
||||
|
rec.to_renew = True |
||||
|
raise ValidationError( |
||||
|
"You cannot add customer from here or because update a" |
||||
|
" timesheet without sale order ID ! \n\n You can go to " |
||||
|
"sales module to create a sale order and the package" |
||||
|
" will be generated automatically.") |
||||
|
if days_left.days < 0: |
||||
|
rec.to_renew = True |
||||
|
raise ValidationError( |
||||
|
"Package Expired !!! \n\nThis package validity is" |
||||
|
" expired, you can create a new sale order to continue" |
||||
|
" with the service.") |
||||
|
if rec.count_remaining < 0: |
||||
|
rec.to_renew = True |
||||
|
raise ValidationError( |
||||
|
"Ticket Limit Exceeded !!! \n\n You can create a new" |
||||
|
" sale order to continue with the service.") |
||||
|
|
||||
|
@api.onchange('count_used') |
||||
|
def _onchange_count_used(self): |
||||
|
if self.is_support_package: |
||||
|
days_left = self.end_date - self.start_date |
||||
|
for rec in self: |
||||
|
if rec.count_used > rec.support_count: |
||||
|
raise ValidationError("Supports Limit Exceeded!") |
||||
|
if days_left.days <= (int(0.1 * rec.package_validity)) and \ |
||||
|
rec.count_remaining < (int(0.1 * rec.support_count)): |
||||
|
rec.to_renew = True |
||||
|
return {'warning': { |
||||
|
'title': _("Warning"), |
||||
|
'message': _( |
||||
|
"%s is having only %d days and %d ticket(s) left" |
||||
|
" with this package. Kindly inform the customer to " |
||||
|
"renew the package to avail the service without" |
||||
|
" break.\n\nThank You !!!", |
||||
|
self.partner_id.name, days_left.days, |
||||
|
rec.count_remaining), |
||||
|
}} |
||||
|
if days_left.days <= (int(0.1 * rec.package_validity)): |
||||
|
rec.to_renew = True |
||||
|
return {'warning': { |
||||
|
'title': _("Warning"), |
||||
|
'message': _( |
||||
|
"%s is having only %d days left with this package." |
||||
|
" Kindly inform the customer to renew the package" |
||||
|
" to avail the service without break." |
||||
|
"\n\nThank You !!!", |
||||
|
self.partner_id.name, days_left.days), |
||||
|
}} |
||||
|
if rec.count_remaining < (int(0.1 * rec.support_count)): |
||||
|
rec.to_renew = True |
||||
|
return {'warning': { |
||||
|
'title': _("Warning"), |
||||
|
'message': _( |
||||
|
"%s is having only %d ticket(s) left with this" |
||||
|
" package. Kindly inform the customer to renew the" |
||||
|
" package to avail the service without break." |
||||
|
"\n\nThank You !!!", |
||||
|
self.partner_id.name, rec.count_remaining) |
||||
|
}} |
||||
|
|
||||
|
def action_renew(self): |
||||
|
"""Button for renewal""" |
||||
|
product = self.sale_line_id |
||||
|
product_id = self.env['product.product'].search( |
||||
|
[('name', '=', product.name)]) |
||||
|
so_id = self.env['sale.order'].create({ |
||||
|
'partner_id': self.partner_id.id, |
||||
|
'partner_invoice_id': self.partner_id.id, |
||||
|
'partner_shipping_id': self.partner_id.id, |
||||
|
'order_line': [(0, 0, {'name': product_id.name, |
||||
|
'product_id': product_id.id, |
||||
|
'product_uom_qty': 1, |
||||
|
'product_uom': product_id.uom_id.id, |
||||
|
'price_unit': product.price_unit, |
||||
|
'tax_id': product_id.taxes_id |
||||
|
})]}) |
||||
|
return { |
||||
|
'name': _('Sales Orders'), |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'res_model': 'sale.order', |
||||
|
'domain': [('id', '=', so_id.id)], |
||||
|
'view_type': 'form', |
||||
|
'view_mode': 'tree,form', |
||||
|
} |
||||
|
|
||||
|
@api.depends('timesheet_ids.unit_amount') |
||||
|
def _compute_this_effective_hours(self): |
||||
|
"""find effective hours with respect to support duration""" |
||||
|
for task in self: |
||||
|
sigma_ciel = 0 |
||||
|
for rec in task.timesheet_ids.mapped('unit_amount'): |
||||
|
try: |
||||
|
ciel_timesheet_ids = math.ceil(rec / task.support_duration) |
||||
|
except ZeroDivisionError: |
||||
|
ciel_timesheet_ids = 0 |
||||
|
sigma_ciel = sigma_ciel + ciel_timesheet_ids |
||||
|
task.this_effective_hours = round( |
||||
|
sigma_ciel * task.support_duration, 2) |
||||
|
|
||||
|
@api.depends('effective_hours', 'subtask_effective_hours', 'planned_hours') |
||||
|
def _compute_remaining_hours(self): |
||||
|
for task in self: |
||||
|
if task.is_support_package is False: |
||||
|
task.remaining_hours = task.planned_hours - \ |
||||
|
task.effective_hours - \ |
||||
|
task.subtask_effective_hours |
||||
|
else: |
||||
|
task.remaining_hours = task.planned_hours - \ |
||||
|
task.this_effective_hours - \ |
||||
|
task.subtask_effective_hours |
||||
|
temp_count = 0 |
||||
|
for rec in task.timesheet_ids: |
||||
|
temp_count += rec.support_count |
||||
|
task.count_used = temp_count |
||||
|
task.count_remaining = task.support_count - task.count_used |
@ -0,0 +1,89 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
||||
|
|
||||
|
from odoo import api, models, fields |
||||
|
|
||||
|
|
||||
|
class SupportPackageProduct(models.Model): |
||||
|
_inherit = "product.template" |
||||
|
|
||||
|
is_support = fields.Boolean(string='Is Support Package', default=False) |
||||
|
|
||||
|
|
||||
|
class SupportPackage(models.Model): |
||||
|
_inherit = 'project.project' |
||||
|
|
||||
|
is_support_package = fields.Boolean(string='Support Package', default=False) |
||||
|
support_count = fields.Char(string='Number of Tickets') |
||||
|
support_duration = fields.Float(string='Maximum Duration') |
||||
|
support_validity_number = fields.Char(string='Package Validity') |
||||
|
validity_rule = fields.Selection([ |
||||
|
('days', 'Day(s)'), |
||||
|
('months', 'Month(s)'), |
||||
|
('years', 'Year(s)')], default='months') |
||||
|
package_validity = fields.Integer(string='Validity', |
||||
|
store=True, readonly=False, |
||||
|
compute='_compute_package_validity') |
||||
|
privacy_visibility_support = fields.Selection([ |
||||
|
('followers', 'Invited internal users'), |
||||
|
('employees', 'All internal users')], string='Visibility', |
||||
|
required=True, default='employees') |
||||
|
allowed_internal_user_support_ids = fields.Many2many( |
||||
|
'res.users', |
||||
|
default=lambda self: self.env.user, |
||||
|
string="Allowed Internal Users", |
||||
|
domain=[('share', '=', False)]) |
||||
|
|
||||
|
@api.model |
||||
|
def create(self, vals): |
||||
|
"""Create service product of the project""" |
||||
|
package = super(SupportPackage, self).create(vals) |
||||
|
if package.is_support_package: |
||||
|
package.privacy_visibility = 'employees' |
||||
|
package.label_tasks = 'Customers' |
||||
|
categ = self.env['product.category'].search( |
||||
|
[('name', '=', 'Services')]) |
||||
|
project = { |
||||
|
'name': vals.get('name'), |
||||
|
'sale_ok': True, |
||||
|
'purchase_ok': True, |
||||
|
'is_support': True, |
||||
|
'type': 'service', |
||||
|
'categ_id': int(categ.id), |
||||
|
'service_policy': 'delivered_manual', |
||||
|
} |
||||
|
product_id = self.env['product.template'].create(project) |
||||
|
product_id.service_tracking = 'task_global_project' |
||||
|
product_id.project_id = package.id |
||||
|
return package |
||||
|
|
||||
|
@api.onchange('privacy_visibility_support') |
||||
|
def _onchange_privacy_visibility_support(self): |
||||
|
if self.is_support_package: |
||||
|
self.privacy_visibility = self.privacy_visibility_support |
||||
|
|
||||
|
@api.onchange('allowed_internal_user_ids_support') |
||||
|
def _onchange_allowed_internal_user_ids_support(self): |
||||
|
if self.is_support_package: |
||||
|
self.allowed_internal_user_ids = self.allowed_internal_user_ids_support |
||||
|
|
||||
|
@api.onchange('is_support_package') |
||||
|
def _onchange_is_support_package(self): |
||||
|
if self.is_support_package: |
||||
|
self.label_tasks = 'Customers' |
||||
|
self.allow_billable = True |
||||
|
else: |
||||
|
self.label_tasks = 'Tasks' |
||||
|
|
||||
|
@api.depends('support_validity_number', 'validity_rule') |
||||
|
def _compute_package_validity(self): |
||||
|
"""Find package_validity in days""" |
||||
|
for rec in self: |
||||
|
if rec.is_support_package: |
||||
|
if rec.validity_rule == 'days': |
||||
|
rec.package_validity = int(rec.support_validity_number) |
||||
|
elif rec.validity_rule == 'months': |
||||
|
rec.package_validity = int(rec.support_validity_number) * 30 |
||||
|
elif rec.validity_rule == 'years': |
||||
|
rec.package_validity = int( |
||||
|
rec.support_validity_number) * 365 |
@ -0,0 +1 @@ |
|||||
|
from . import support_report |
@ -0,0 +1,14 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
||||
|
|
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class ReportSupportUser(models.Model): |
||||
|
_inherit = "report.project.task.user" |
||||
|
|
||||
|
is_support_package = fields.Boolean(string='Support Package', readonly=True) |
||||
|
|
||||
|
def _select(self): |
||||
|
return super(ReportSupportUser, self)._select() + """, |
||||
|
t.is_support_package""" |
@ -0,0 +1,39 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<record id="view_support_project_user_pivot" model="ir.ui.view"> |
||||
|
<field name="name">Report Project Support User Pivot</field> |
||||
|
<field name="model">report.project.task.user</field> |
||||
|
<field name="inherit_id" ref="project.view_task_project_user_pivot"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<pivot string="Tasks Analysis" display_quantity="true" disable_linking="True" sample="1"> |
||||
|
<field name="project_id" position="after"> |
||||
|
<field name="remaining_hours" type="row" widget="timesheet_uom"/> |
||||
|
</field> |
||||
|
</pivot> |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
|
||||
|
<record id="action_project_support_user_tree" model="ir.actions.act_window"> |
||||
|
<field name="name">Reports</field> |
||||
|
<field name="res_model">report.project.task.user</field> |
||||
|
<field name="view_mode">pivot</field> |
||||
|
<field name="search_view_id" ref="project.view_task_project_user_search"/> |
||||
|
<field name="domain">[('is_support_package', '=', True)]</field> |
||||
|
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<menuitem id="support_menu_reporting" |
||||
|
name="Reporting" |
||||
|
parent="support_package.support_menu_root" |
||||
|
sequence="15"/> |
||||
|
|
||||
|
<menuitem id="support_menu_reporting_submenu" |
||||
|
name="Package Reports" |
||||
|
parent="support_package.support_menu_reporting" |
||||
|
action="support_package.action_project_support_user_tree" |
||||
|
sequence="16"/> |
||||
|
|
||||
|
</odoo> |
|
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 797 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 56 KiB |
@ -0,0 +1,708 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="UTF-8"/> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
||||
|
<title>Support Package</title> |
||||
|
<link rel="stylesheet" |
||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css" |
||||
|
integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA==" |
||||
|
crossorigin="anonymous"/> |
||||
|
<link rel="stylesheet" |
||||
|
href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" |
||||
|
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" |
||||
|
crossorigin="anonymous"/> |
||||
|
</head> |
||||
|
<!-- COLORS |
||||
|
red-bg: #FFECEF; |
||||
|
green-bg: #E4FEEE; |
||||
|
blue-bg: #F4F4FF; |
||||
|
tab-title-bg: #edf2f7 |
||||
|
jumbotron-bg: #192a56 |
||||
|
brand-color: #b22126 |
||||
|
yellow-pill: #f6b93b |
||||
|
|
||||
|
red-text: #F66170; |
||||
|
green-text: #51A26E; |
||||
|
blue-text: #2765FC; |
||||
|
grey-text: #757575; |
||||
|
tab-title-text: #162635; |
||||
|
--> |
||||
|
|
||||
|
<body> |
||||
|
<div class="oe_styling_v8"> |
||||
|
<section class="oe_container" |
||||
|
style="font-family: Roboto, 'sans-serif'; padding:2rem 3rem 1rem"> |
||||
|
<div class="row shadow-lg" |
||||
|
style="max-width:1540px; margin:0 auto; border-radius: 10px;"> |
||||
|
<!-- LEFT HERO --> |
||||
|
<div class="col-lg-7" |
||||
|
style="margin-top: 0rem; padding: 3rem 2.5rem; "> |
||||
|
<div style="width: 200px;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" |
||||
|
width="150px" height="auto"/> |
||||
|
</div> |
||||
|
<h1 class="mt-4" |
||||
|
style="font-family: Montserrat, 'sans-serif' ; font-weight: bold;"> |
||||
|
Support Package Management</h1> |
||||
|
<p class="lead" |
||||
|
style="font-weight: 500; line-height: 1.5; color: #757575"> |
||||
|
Support Service and Package Management Module. |
||||
|
</p> |
||||
|
<span class="badge px-3 py-2 depth-1" |
||||
|
style="background-color: #FFECEF; color: #F66170; font-weight: bold; border-radius: 1rem;"><i |
||||
|
class="fa fa-star mr-2"></i>Key Highlights</span> |
||||
|
<!-- FEATURES --> |
||||
|
<hr class="mt-4" |
||||
|
style="background: linear-gradient(to right, #e5e5e5, transparent); height: 2px; border-style: none;"> |
||||
|
<div class="row"> |
||||
|
<!-- FEATURE COLUMN LEFT --> |
||||
|
<ul style="list-style: none; padding: 0; font-weight: 500; line-height: 2;"> |
||||
|
<li><i class="fa fa-check-circle mr-2" |
||||
|
style="color: #1abc9c;"></i>Easy to create, monitor and manage support service. |
||||
|
</li> |
||||
|
<li><i class="fa fa-check-circle mr-2" |
||||
|
style="color: #1abc9c;"></i>Management of customers are similar to project management. |
||||
|
</li> |
||||
|
<li><i class="fa fa-check-circle mr-2" |
||||
|
style="color: #1abc9c;"></i>Can reuse packages with the help of templates. |
||||
|
</li> |
||||
|
<li><i class="fa fa-check-circle mr-2" |
||||
|
style="color: #1abc9c;"></i>Renewal badge appears ones end date is closer or number of |
||||
|
tickets remaining is very less. |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
<hr class="mt-4" |
||||
|
style="background: linear-gradient(to right, #e5e5e5, transparent); height: 2px; border-style: none;"> |
||||
|
<!-- END OF FEATURES --> |
||||
|
</div> |
||||
|
<!-- END OF LEFT HERO --> |
||||
|
<!-- RIGHT HERO --> |
||||
|
<div class="col-lg-5 d-flex align-items-center" |
||||
|
style="border-radius: 0px 10px 10px 0px; background-image: url('images/res_branch.png'); background-repeat: no-repeat; background-size: cover;"> |
||||
|
</div> |
||||
|
<!-- END OF RIGHT HERO --> |
||||
|
</div> |
||||
|
|
||||
|
<section class="oe_container" style="margin-top: 4rem;"> |
||||
|
<div class="row" |
||||
|
style="max-width:1540px; margin:0 auto; padding-bottom:64px;"> |
||||
|
<div class="col-lg-12"> |
||||
|
<!-- TAB LIST --> |
||||
|
<ul class="nav nav-tabs d-flex justify-content-center" |
||||
|
role="tablist" |
||||
|
style="background-color:unset; margin:0 auto;"> |
||||
|
<li class="nav-item"> |
||||
|
<a class="nav-link active" style="color: #000;" |
||||
|
data-toggle="tab" href="#tabs-1" |
||||
|
role="tab"><i class="fa fa-pie-chart mr-2"></i>Overview</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a class="nav-link" style="color: #000;" |
||||
|
data-toggle="tab" href="#tabs-3" role="tab"><i |
||||
|
class="fa fa-star mr-2"></i>Features</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a class="nav-link" style="color: #000;" |
||||
|
data-toggle="tab" href="#tabs-4" role="tab"><i |
||||
|
class="fa fa-picture-o mr-2"></i>Screenshots</a> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
<div class="col-lg-12"> |
||||
|
<!-- Tab panes --> |
||||
|
<div class="tab-content" style="padding: 2rem;"> |
||||
|
<div class="tab-pane active" id="tabs-1" |
||||
|
role="tabpanel"> |
||||
|
<h3 class="text-center rounded px-3 py-2 mb-4" |
||||
|
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;"> |
||||
|
Overview</h3> |
||||
|
|
||||
|
<p class="text-justify">Support package module is a |
||||
|
support management app. It enables users to |
||||
|
create, manage, optimize, and monitor the |
||||
|
entire service request from a centralized |
||||
|
application.</p> |
||||
|
</div> |
||||
|
<div class="tab-pane" id="tabs-3" role="tabpanel"> |
||||
|
<h3 class="text-center rounded px-3 py-2 mb-4" |
||||
|
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;"> |
||||
|
Features</h3> |
||||
|
<ul style="max-width: 1200px;"> |
||||
|
<li> |
||||
|
<h5 style="font-family: Roboto, 'sans-serif';"> |
||||
|
Easy to create, monitor and manage support service. |
||||
|
</h5> |
||||
|
</li> |
||||
|
<li> |
||||
|
<h5 style="font-family: Roboto, 'sans-serif';"> |
||||
|
Management of customers are similar to project management. |
||||
|
</h5> |
||||
|
</li> |
||||
|
<li> |
||||
|
<h5 style="font-family: Roboto, 'sans-serif';"> |
||||
|
Can reuse packages with the help of templates. |
||||
|
</h5> |
||||
|
</li> |
||||
|
<li> |
||||
|
<h5 style="font-family: Roboto, 'sans-serif';"> |
||||
|
Renewal badge appears ones end date is closer or number of tickets remaining is |
||||
|
very less. |
||||
|
</h5> |
||||
|
</li> |
||||
|
<li> |
||||
|
<h5 style="font-family: Roboto, 'sans-serif';"> |
||||
|
Shows all the necessary information about a customer in kanban view inside |
||||
|
each support package which makes it easy to monitor bulk amount of customers. |
||||
|
</h5> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
<div class="tab-pane" id="tabs-4" role="tabpanel"> |
||||
|
<h3 class="text-center rounded px-3 py-2 mb-4" |
||||
|
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;"> |
||||
|
Screenshots</h3> |
||||
|
<!-- CAROUSEL --> |
||||
|
<div id="slider" class="carousel slide" |
||||
|
data-ride="carousel"> |
||||
|
|
||||
|
<div class="carousel-inner"> |
||||
|
<!-- Slide Items --> |
||||
|
<div class="carousel-item active"> |
||||
|
<img src="images/support_1.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
<h3>Creating support packages</h3> |
||||
|
<p>Creating support packages with information like maximum number of |
||||
|
tickets, |
||||
|
maximum duration of each ticket, validity of package, this will |
||||
|
automatically |
||||
|
create this package as a product</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<img src="images/support_2.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
<h3>Creating sale order</h3> |
||||
|
<p>Create sale order to customer with required package as product, then the |
||||
|
customer |
||||
|
will be created in support packages</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<img src="images/support_3.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<img src="images/support_4.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
<h3>Information shown customer kanban view</h3> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<img src="images/support_5.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
<h3>Report</h3> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item"> |
||||
|
<img src="images/support_6.png" |
||||
|
alt="App Screenshot" width="1100" |
||||
|
height="500"> |
||||
|
<div class="carousel-caption text-white p-4 position-relative d-none d-md-block bg-dark mb-4" |
||||
|
style="top:0; left:0;"> |
||||
|
<h3>Package Template</h3> |
||||
|
<p>Can create templates so that it helps in creating similar support |
||||
|
packages.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- End of Slide Items --> |
||||
|
<!-- Slider control --> |
||||
|
<a class="carousel-control-prev" |
||||
|
href="#slider" data-slide="prev"> |
||||
|
<i |
||||
|
class="fa fa-arrow-left bg-dark p-3 rounded d-flex justify-content-center align-items-center"></i> |
||||
|
</a> |
||||
|
<a class="carousel-control-next" |
||||
|
href="#slider" data-slide="next"> |
||||
|
<i |
||||
|
class="fa fa-arrow-right bg-dark p-3 rounded d-flex justify-content-center align-items-center"></i> |
||||
|
</a> |
||||
|
<!-- End of Slider control --> |
||||
|
</div> |
||||
|
<!-- END OF CAROUSEL --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF TAB LIST --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- Suggested Products --> |
||||
|
<section class="oe_container" |
||||
|
style="padding:2rem 3rem 1rem; max-width:1540px; margin: 0 auto; "> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%"> |
||||
|
Suggested Products</h2> |
||||
|
<hr |
||||
|
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
||||
|
<div id="suggestedSlider" class="row carousel slide mt-4" |
||||
|
data-ride="carousel"> |
||||
|
<!-- The slideshow --> |
||||
|
<div class="carousel-inner"> |
||||
|
<div class="carousel-item" style="min-height: 191px;"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
||||
|
style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/13.0/project_task_timer/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_task_timer.png?ae168aa"> |
||||
|
</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/13.0/project_report_pdf/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_repo.png?ae168aa"> |
||||
|
</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/13.0/project_custom_gantt/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_gantt.png?ae168aa"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item active" |
||||
|
style="min-height: 191px;"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
||||
|
style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/12.0/project_task_timer/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/task_image.png?ae168aa"> |
||||
|
</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/13.0/task_deadline_reminder/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/reminder.png?ae168aa"> |
||||
|
</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/12.0/project_report_pdf/" |
||||
|
target="_blank"> |
||||
|
<div style="border-radius:10px"> |
||||
|
<img class="img img-responsive center-block" |
||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px" |
||||
|
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_report.png?ae168aa"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- Left and right controls --> |
||||
|
<a class="carousel-control-prev" href="#suggestedSlider" |
||||
|
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="#suggestedSlider" 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> |
||||
|
</section> |
||||
|
<!-- End of Suggested Products --> |
||||
|
<!-- Our Services --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem"> |
||||
|
<!-- <h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Our Services</h2> |
||||
|
<hr |
||||
|
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> --> |
||||
|
<div class="row mt-4 position-relative" |
||||
|
style="max-width:1540px; margin: 0 auto;"> |
||||
|
<div class="col-lg-12 jumbotron text-white position-relative shadow-sm" |
||||
|
style="background-color: #b22126; background-image: url('./assets/arrows-transparent.png'); background-size: cover; background-position: bottom; border-radius: 10px;"> |
||||
|
<span class="badge badge-pill px-3 py-2 text-dark shadow-sm font-weight-bold" |
||||
|
style="background-color: #f6b93b;"><i |
||||
|
class="fa fa-trophy mr-2"></i>Odoo Gold Partner</span> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-6 mt-4"> |
||||
|
<h1 style="font-family: Roboto, 'sans-serif'; color:#FFF;"> |
||||
|
Our Services</h1> |
||||
|
<p class="lead">We provide following services</p> |
||||
|
<ul class="mt-4" |
||||
|
style="list-style: none; padding: 0; line-height: 2.8; font-weight: 500;"> |
||||
|
<li> |
||||
|
<a href="https://www.cybrosys.com/odoo-customization-and-installation/" |
||||
|
style="color: white; text-decoration: none;" |
||||
|
target="_blank"><i |
||||
|
class="fa fa-cogs mr-2" |
||||
|
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo |
||||
|
Customization</a></li> |
||||
|
<li> |
||||
|
<a href="https://www.cybrosys.com/odoo-erp-implementation/" |
||||
|
style="color: white; text-decoration: none;" |
||||
|
target="_blank"><i |
||||
|
class="fa fa-wrench mr-2" |
||||
|
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo |
||||
|
Implementation</a></li> |
||||
|
<li> |
||||
|
<a href="https://www.cybrosys.com/odoo-erp-support/" |
||||
|
style="color: white; text-decoration: none;" |
||||
|
target="_blank"><i |
||||
|
class="fa fa-life-ring mr-2" |
||||
|
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo |
||||
|
Support</a></li> |
||||
|
<li> |
||||
|
<a href="https://www.cybrosys.com/hire-odoo-developer/" |
||||
|
style="color: white; text-decoration: none;" |
||||
|
target="_blank"><i |
||||
|
class="fa fa-user mr-2" |
||||
|
style="color: #f6b93b; font-size: 1.5rem"></i> |
||||
|
Hire |
||||
|
Odoo Developers</a></li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<img src="./assets/trophy.png" width="50%" |
||||
|
height="auto" alt="Odoo Gold Partner" |
||||
|
class="position-absolute" style="right: 0; bottom: 0;"> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- End of Our Services --> |
||||
|
<!-- Our Industries --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem"> |
||||
|
<div class="row" style="max-width:1540px; margin: 0 auto; "> |
||||
|
<div class="col-lg-12"> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%"> |
||||
|
Our |
||||
|
Industries</h2> |
||||
|
<hr |
||||
|
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
||||
|
</div> |
||||
|
<div class="row mt-4 position-relative" |
||||
|
style="max-width:1540px; margin: 0 auto;"> |
||||
|
<!-- Left Column --> |
||||
|
<div class="col-lg-6"> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 mb-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" |
||||
|
target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/trading.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Trading</h4> |
||||
|
<p style="font-weight: 300;">Easily |
||||
|
procure and sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" |
||||
|
target="_blank" class="text-dark" |
||||
|
style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/education.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Education</h4> |
||||
|
<p style="font-weight: 300;">A |
||||
|
Collaborative platform for |
||||
|
educational |
||||
|
management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" |
||||
|
target="_blank" class="text-dark" |
||||
|
style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/manufacturing.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Manufacturing</h4> |
||||
|
<p style="font-weight: 300;">Plan, track |
||||
|
and schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" |
||||
|
target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/ecom.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
E-commerce & Website</h4> |
||||
|
<p style="font-weight: 300;">Mobile |
||||
|
friendly, awe-inspiring product |
||||
|
pages |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Left Column --> |
||||
|
<!-- Right Column --> |
||||
|
<div class="col-lg-6"> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 mb-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/pos/" |
||||
|
target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/pos.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
POS</h4> |
||||
|
<p style="font-weight: 300;">Easy |
||||
|
configuring and convivial |
||||
|
selling</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/service-management/" |
||||
|
target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/service.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Service Management</h4> |
||||
|
<p style="font-weight: 300;">Keep track |
||||
|
of services and invoice accordingly |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" |
||||
|
target="_blank" class="text-dark" |
||||
|
style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/restaurant.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Restaurant</h4> |
||||
|
<p style="font-weight: 300;">Run your |
||||
|
bar or restaurant methodica</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" |
||||
|
style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" |
||||
|
target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="./assets/icons/hotel.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif"> |
||||
|
Hotel Management</h4> |
||||
|
<p style="font-weight: 300;">An |
||||
|
all-inclusive hotel management |
||||
|
application |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Right Column --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- End of Our Industries--> |
||||
|
<!-- Footer Section --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem"> |
||||
|
<div class="row" style="max-width:1540px; margin: 0 auto; "> |
||||
|
<div class="col-lg-12 mb-4"> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%"> |
||||
|
Need Help?</h2> |
||||
|
<hr |
||||
|
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Contact Cards --> |
||||
|
<div class="row d-flex justify-content-center align-items-center" |
||||
|
style="max-width:1540px; margin: 0 auto;"> |
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;"> |
||||
|
<h5 class="font-weight-bold" |
||||
|
style="font-family: Roboto, 'sans-serif';">Visit us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;"> |
||||
|
Visit our website for more |
||||
|
information.</p> |
||||
|
<a href="https://cybrosys.com" target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #546E7A; color: #FFF; border-radius: 4px;">www.cybrosys.com</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #b22126; height: 330px;"> |
||||
|
<h5 class="font-weight-bold" |
||||
|
style="font-family: Roboto, 'sans-serif';">Write to |
||||
|
us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;"> |
||||
|
Do you have any queries regarding our |
||||
|
products & services? Let us know.</p> |
||||
|
<a href="mailto:odoo@cybrosys.com" target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">odoo@cybrosys.com</a> |
||||
|
<a href="mailto:info@cybrosys.com" target="_blank" |
||||
|
class="btn btn-block deep_hover" |
||||
|
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">info@cybrosys.com</a> |
||||
|
</div> |
||||
|
b |
||||
|
|
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;"> |
||||
|
<h5 class="font-weight-bold" |
||||
|
style="font-family: Roboto, 'sans-serif';">Follow |
||||
|
Us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;"> |
||||
|
Follow us on social media for latest |
||||
|
updates.</p> |
||||
|
<div class="d-flex justify-content-begin align-items-center"> |
||||
|
<a href="https://www.facebook.com/cybrosystechnologies" |
||||
|
target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#3b5998; color: #fff; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-facebook"></i></a> |
||||
|
|
||||
|
<a href="https://twitter.com/cybrosys" target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#00acee ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-twitter"></i></a> |
||||
|
|
||||
|
<a href="https://www.youtube.com/channel/UCKjWLm7iCyOYINVspCSanjg" |
||||
|
target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#FF0000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-play"></i></a> |
||||
|
<a href="https://medium.com/cybrosys" target="_blank" |
||||
|
class="btn mb-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-medium"></i></a> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
<!-- End of Contact Cards --> |
||||
|
</div> |
||||
|
</section> |
||||
|
</section> |
||||
|
</div> |
||||
|
<!-- Footer --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem;"> |
||||
|
<div class="row" |
||||
|
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> |
||||
|
<!-- Logo --> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" |
||||
|
style="margin-top: 4rem;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" width="200px" |
||||
|
height="auto"/> |
||||
|
</div> |
||||
|
<!-- End of Logo --> |
||||
|
<div class="col-lg-12" style="margin-top: 2rem;"> |
||||
|
<hr |
||||
|
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> |
||||
|
<!-- End of Footer Section --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js" |
||||
|
integrity="sha512-wV7Yj1alIZDqZFCUQJy85VN+qvEIly93fIQAN7iqDFCPEucLCeNFz4r35FCo9s6WrpdDQPi80xbljXB8Bjtvcg==" |
||||
|
crossorigin="anonymous"></script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
@ -0,0 +1,78 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
|
||||
|
<record id="project_menu_config_project_template" |
||||
|
model="ir.actions.act_window"> |
||||
|
<field name="name">Support Package Template</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">support.package.template</field> |
||||
|
<field name="view_mode">tree,kanban,form</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Create a new package template ! |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="config_project_template_tree" model="ir.ui.view"> |
||||
|
<field name="name">support.package.template.tree</field> |
||||
|
<field name="model">support.package.template</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="count"/> |
||||
|
<field name="duration" widget="timesheet_uom"/> |
||||
|
<field name="package_validity"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="config_project_template_form" model="ir.ui.view"> |
||||
|
<field name="name">support.package.template.form</field> |
||||
|
<field name="model">support.package.template</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<button name="button_create_package" class="oe_highlight oe_read_only" |
||||
|
string="Create Package" type="object" |
||||
|
context="{ |
||||
|
'default_is_support_package': True, |
||||
|
'default_name': name, |
||||
|
'default_support_count': count, |
||||
|
'default_support_duration': duration, |
||||
|
'default_support_validity_number': validity_number, |
||||
|
'default_validity_rule': validity_rule |
||||
|
}"/> |
||||
|
</header> |
||||
|
<sheet> |
||||
|
<div class="oe_title"> |
||||
|
<h4>Name :</h4> |
||||
|
<h1><field name="name" colspan="3" required="1"/></h1> |
||||
|
</div> |
||||
|
<br/> |
||||
|
<group> |
||||
|
<group name="package_template_details" |
||||
|
string="Package Details"> |
||||
|
<field name="count"/> |
||||
|
<field name="duration" widget="timesheet_uom"/> |
||||
|
<label string="Package Validity" for="validity_number"/> |
||||
|
<div name="validity_number" class="o_row"> |
||||
|
<field name="validity_number"/> |
||||
|
<field name="validity_rule"/> |
||||
|
</div> |
||||
|
</group> |
||||
|
<group> |
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="menu_configuration_package_template" |
||||
|
name="Template" |
||||
|
parent="support_package.support_menu_configuration" |
||||
|
action="support_package.project_menu_config_project_template" |
||||
|
sequence="22"/> |
||||
|
|
||||
|
</odoo> |
@ -0,0 +1,152 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
|
||||
|
<record id="support_view_client_search_form" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Client Search Support</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.view_task_search_form"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//filter[@name='my_tasks']" position="before"> |
||||
|
<field name="is_support_package"/> |
||||
|
<filter string="Customers of Support" |
||||
|
name="filter_is_support" |
||||
|
domain="[('is_support_package','=',True)]"/> |
||||
|
<separator/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_view_all_task_customers" model="ir.actions.act_window"> |
||||
|
<field name="name">Customers</field> |
||||
|
<field name="res_model">project.task</field> |
||||
|
<field name="search_view_id" ref="project.view_task_search_form"/> |
||||
|
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field> |
||||
|
<field name="context">{'search_default_filter_is_support': True}</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
No customers found. Let's create one! |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_task_form2_support_inherited" model="ir.ui.view"> |
||||
|
<field name="name">project.task.form.inherited</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.view_task_form2" /> |
||||
|
<field name="groups_id" eval="[(6,0, (ref('hr_timesheet.group_hr_timesheet_user'),))]"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='unit_amount']" position="after"> |
||||
|
<field name="support_count" force_save="1"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_task_tree2_support_inherited" model="ir.ui.view"> |
||||
|
<field name="name">project.task.tree.inherited</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.view_task_tree2"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='project_id']" position="after"> |
||||
|
<field name="partner_id"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="quick_create_form_support_customers" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Task Kanban Quick create : Package Customer</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.quick_create_task_form"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='name']/.." position="before"> |
||||
|
<div class="o_kanban_record_headings" id="view_task_kanban_title_replace"> |
||||
|
<group name="quick_create_support_package_client" |
||||
|
attrs="{'invisible': [('is_support_package', '=', False)]}"> |
||||
|
<field name="partner_id" string="Customer"/> |
||||
|
<field name="start_date" string="Start Date"/> |
||||
|
<field name="support_count" invisible="1"/> |
||||
|
<field name="count_used" invisible="1"/> |
||||
|
<field name="count_remaining" invisible="1"/> |
||||
|
<field name="support_duration" invisible="1"/> |
||||
|
<field name="planned_hours" invisible="1"/> |
||||
|
<field name="is_support_package" invisible="1"/> |
||||
|
<field name="package_validity" invisible="1"/> |
||||
|
<field name="start_date" invisible="1"/> |
||||
|
<field name="end_date" invisible="1"/> |
||||
|
<field name="date_deadline" invisible="1"/> |
||||
|
</group> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_task_form2_support_package_customers" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Project Task Form: Package Customers</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.view_task_form2"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//button[@name='action_assign_to_me']" position="after"> |
||||
|
<button name="action_renew" string="Renewal Quotation" type="object" class="oe_highlight" |
||||
|
attrs="{'invisible' : [('to_renew', '=', False)]}"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//page[@name='extra_info']" position="before"> |
||||
|
<page name="support_details" string="Support Details" |
||||
|
attrs="{'invisible': [('is_support_package', '=', False)]}"> |
||||
|
<group> |
||||
|
<group name="support_details" string="Details"> |
||||
|
<field name="is_support_package" attrs="{'readonly':True}"/> |
||||
|
<field name="support_count" attrs="{'readonly':True}"/> |
||||
|
<field name="support_duration" widget="timesheet_uom" attrs="{'readonly':True}"/> |
||||
|
<label string="Package Validity" for="package_validity"/> |
||||
|
<div class="o_row"> |
||||
|
<field name="package_validity" attrs="{'readonly':True}"/> |
||||
|
day(s) |
||||
|
</div> |
||||
|
<field name="start_date" attrs="{'readonly':False}"/> |
||||
|
<field name="end_date" attrs="{'readonly':True}"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
</group> |
||||
|
</group> |
||||
|
</page> |
||||
|
</xpath> |
||||
|
<xpath expr="//div[@name='button_box']" position="after"> |
||||
|
<div class="badge-pill badge-warning float-right" |
||||
|
attrs="{'invisible': [('to_renew', '=', False)]}">For Renewal</div> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='partner_id']" position="after"> |
||||
|
<field name="count_used" |
||||
|
attrs="{'readonly':True, 'invisible': [('is_support_package', '=', False)]}"/> |
||||
|
<field name="count_remaining" string="Remaining Tickets" |
||||
|
attrs="{'readonly':True, 'invisible': [('is_support_package', '=', False)]}"/> |
||||
|
<field name="to_renew"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="view_task_kanban_support_customer" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Project Task Kanban: Support Customers</field> |
||||
|
<field name="model">project.task</field> |
||||
|
<field name="inherit_id" ref="project.view_task_kanban"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='tag_ids']" position="after"> |
||||
|
<field name="to_renew" invisible="1"/> |
||||
|
<div class="badge badge-pill badge-info badge-warning mt4 mr16" |
||||
|
attrs="{'invisible': [('to_renew', '=', False)]}"> |
||||
|
To Renew |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="support_incident_menu_clients" |
||||
|
name="Customers" |
||||
|
parent="support_package.support_menu_root" |
||||
|
action="support_package.action_view_all_task_customers" |
||||
|
sequence="10"/> |
||||
|
|
||||
|
</odoo> |
@ -0,0 +1,206 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
|
||||
|
<record id="search_view_inherit_support" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Product Search Support</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_search_view"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//filter[@name='services']" position="before"> |
||||
|
<filter string="Support Packages" |
||||
|
name="filter_is_support" |
||||
|
domain="[('is_support','=',True)]"/> |
||||
|
<separator/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="product_inherit_support_package" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Product Product: Support Package</field> |
||||
|
<field name="model">product.product</field> |
||||
|
<field name="inherit_id" ref="product.product_normal_form_view"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='purchase_ok']/.." position="after"> |
||||
|
<field name="is_support"/> |
||||
|
<label for="is_support"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="product_template_inherit_support_package" model="ir.ui.view"> |
||||
|
<field name="name">Inherit Product Template: Support Product</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_only_form_view"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='purchase_ok']/.." position="after"> |
||||
|
<field name="is_support"/> |
||||
|
<label for="is_support"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="project_project_support_package" model="ir.ui.view"> |
||||
|
<field name="name">Project Project : Support Package</field> |
||||
|
<field name="model">project.project</field> |
||||
|
<field name="inherit_id" ref="project.project_project_view_form_simplified"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//group" position="after"> |
||||
|
<group id="is_support_package" class="oe_inline"> |
||||
|
<field name="is_support_package"/> |
||||
|
<field name="support_count" class="oe_inline" attrs="{'invisible':[('is_support_package', '=', False)]}"/> |
||||
|
<field name="support_duration" class="oe_inline" widget="timesheet_uom" attrs="{'invisible':[('is_support_package', '=', False)]}"/> |
||||
|
<label string="Maximum Validity" for="support_validity_number" attrs="{'invisible':[('is_support_package', '=', False)]}"/> |
||||
|
<div name="support_validity_number" class="o_row" attrs="{'invisible':[('is_support_package', '=', False)]}"> |
||||
|
<field name="support_validity_number" class="oe_inline"/> |
||||
|
<field name="validity_rule" class="oe_inline"/> |
||||
|
</div> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="project_support_package_form" model="ir.ui.view"> |
||||
|
<field name="name">Inherit project form : Support Package</field> |
||||
|
<field name="model">project.project</field> |
||||
|
<field name="inherit_id" ref="project.edit_project"/> |
||||
|
<field name="priority">25</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='privacy_visibility']/.." position='attributes'> |
||||
|
<attribute name="attrs"> |
||||
|
{'invisible':[('is_support_package', '=', True)]} |
||||
|
</attribute> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='allowed_internal_user_ids']/.." position='attributes'> |
||||
|
<attribute name="attrs"> |
||||
|
{'invisible':['|', |
||||
|
('is_support_package', '=', True), |
||||
|
('privacy_visibility', '!=', 'followers')]} |
||||
|
</attribute> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='allowed_internal_user_ids']/.." position="before"> |
||||
|
<group> |
||||
|
<field name="privacy_visibility_support" widget="radio" string="Visibility" |
||||
|
attrs="{'invisible':[('is_support_package', '=', False)]}"/> |
||||
|
<field name="allowed_internal_user_support_ids" widget="many2many_tags" |
||||
|
attrs="{'invisible': [('privacy_visibility_support', '!=', 'followers')]}"/> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
<xpath expr="//div[@id='rating_settings']/.." position="before"> |
||||
|
<div class="row mt16 o_settings_container"> |
||||
|
<div class="col-lg-6 o_setting_box" id="support_package"> |
||||
|
<div class="o_setting_left_pane"> |
||||
|
<field name="is_support_package"/> |
||||
|
</div> |
||||
|
<div class="o_setting_right_pane"> |
||||
|
<label for="is_support_package" |
||||
|
string="Support Package"/> |
||||
|
<div class="text-muted"> |
||||
|
This project is a Support Package |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
<xpath expr="//group[@name='extra_settings']/.." position="after"> |
||||
|
<br/> |
||||
|
<group> |
||||
|
<group name="support_package_info" string="Support Package info" |
||||
|
attrs="{'invisible':[('is_support_package', '=', False)]}"> |
||||
|
<field name="support_count"/> |
||||
|
<field name="support_duration" widget="timesheet_uom"/> |
||||
|
<label string="Package Validity" for="support_validity_number"/> |
||||
|
<div name="support_validity_number" class="o_row"> |
||||
|
<field name="support_validity_number"/> |
||||
|
<field name="validity_rule"/> |
||||
|
</div> |
||||
|
</group> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="project_all_support_package" model="ir.actions.act_window"> |
||||
|
<field name="name">Support Package</field> |
||||
|
<field name="res_model">project.project</field> |
||||
|
<field name="domain">[('is_support_package', '=', True)]</field> |
||||
|
<field name="view_mode">kanban,form</field> |
||||
|
<field name="view_id" ref="project.view_project_kanban"/> |
||||
|
<field name="search_view_id" ref="project.view_project_project_filter"/> |
||||
|
<field name="target">main</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
No packages found. Let's create one! |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="project_all_support_package_config" model="ir.actions.act_window"> |
||||
|
<field name="name">Support Package : Configration</field> |
||||
|
<field name="res_model">project.project</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
<field name="domain">[('is_support_package', '=', True)]</field> |
||||
|
<field name="search_view_id" ref="project.view_project_project_filter"/> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
No packages found. Let's create one! |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="action_support_products" model="ir.actions.act_window"> |
||||
|
<field name="name">Products</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">product.template</field> |
||||
|
<field name="view_mode">kanban,tree,form,activity</field> |
||||
|
<field name="view_id" ref="product.product_template_kanban_view"/> |
||||
|
<field name="search_view_id" ref="product.product_template_search_view"/> |
||||
|
<field name="context">{ |
||||
|
'search_default_filter_is_support': True, |
||||
|
'search_default_filter_to_sell':1, |
||||
|
'default_type':'service', |
||||
|
'default_is_support':True}</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="o_view_nocontent_smiling_face"> |
||||
|
Create a new product |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="support_menu_root" |
||||
|
name="Support" |
||||
|
action="support_package.project_all_support_package" |
||||
|
sequence="1"/> |
||||
|
|
||||
|
<menuitem id="support_menu_project_support_package" |
||||
|
name="Packages" |
||||
|
parent="support_package.support_menu_root" |
||||
|
sequence="5"/> |
||||
|
|
||||
|
<menuitem id="packages_menu_project_packages" |
||||
|
name="Packages" |
||||
|
parent="support_package.support_menu_project_support_package" |
||||
|
action="support_package.project_all_support_package" |
||||
|
sequence="7"/> |
||||
|
|
||||
|
<menuitem id="packages_menu_project_support_products" |
||||
|
name="Products" |
||||
|
parent="support_package.support_menu_project_support_package" |
||||
|
action="support_package.action_support_products" |
||||
|
sequence="9"/> |
||||
|
|
||||
|
<menuitem id="support_menu_configuration" |
||||
|
name="Configuration" |
||||
|
parent="support_package.support_menu_root" |
||||
|
sequence="20"/> |
||||
|
|
||||
|
<menuitem id="menu_configuration_package" |
||||
|
name="Package Configuration" |
||||
|
parent="support_package.support_menu_configuration" |
||||
|
action="support_package.project_all_support_package_config" |
||||
|
sequence="21"/> |
||||
|
|
||||
|
</odoo> |