You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

89 lines
3.6 KiB

# -*- 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