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.
 
 
 
 
 

122 lines
5.1 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-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 api, fields, models
from datetime import datetime
class ProjectTask(models.Model):
""" Added checklist and document details"""
_inherit = 'project.task'
document_count = fields.Integer(string='Documents',
compute='_compute_document_count',
help="For getting document count")
checklist_template_ids = fields.Many2many(
'project.task.checklist.template',
string='Checklist', help="For adding project checklist template")
checklist_info_ids = fields.One2many('project.task.checklist.info',
'task_id', string="checklist info",
help="for getting project checklist "
"details")
checklist_progress = fields.Float(string='Checklist Completed',
colors="red,orange,yellow,green",
help="For tracking checklist progress",
max_value=1, min_value=0)
task_type = fields.Selection([
('task', 'Task'),
('subtask', 'Subtask'),
('bug', 'Bug'),
], string='Task Type', default="task")
def task_overdue_notification(self):
""" Scheduled action for email notification to
employee about task due """
if self.env['ir.config_parameter'].sudo().get_param(
'res.config.settings.is_overdue_notification'):
task_ids = self.search([])
for task in task_ids:
if task.stage_id.name not in (
'Done',
'Canceled') and task.date_deadline and task.date_deadline < fields.Date.today():
mail_template = task.env.ref(
'advanced_project_management_system.task_due_email_notification')
mail_template.send_mail(task.id, force_send=True)
def _get_user_emails(self):
""" Return email ids of the employee"""
emails = []
task_ids = self.search([('date_deadline', '<', fields.Date.today())])
for task in task_ids:
if task.stage_id.name not in ('Done', 'Canceled'):
for user in task.user_ids:
emails.append(user.login)
return emails
def _compute_document_count(self):
""" Compute document count and return """
for rec in self:
attachment_ids = self.env['ir.attachment'].search(
[('res_model', '=', 'project.task'), ('res_id', '=', rec.id)])
rec.document_count = len(attachment_ids)
def button_task_document(self):
""" Return document kanban for the task"""
return {
'name': 'Documents',
'type': 'ir.actions.act_window',
'res_model': 'ir.attachment',
'view_mode': 'kanban,form',
'res_id': self._origin.id,
'domain': [
('res_id', '=', self._origin.id),
('res_model', '=', 'project.task')],
}
def task_mass_update(self):
""" Return wizard for updating task details"""
return {
'name': 'Documents',
'type': 'ir.actions.act_window',
'res_model': 'project.task.mass.update',
'target': 'new',
'view_mode': 'form',
}
@api.onchange('stage_id')
def _onchange_stage_id(self):
""" While changing task stage task will automatically assign to
users from task stage"""
if self.stage_id.user_ids:
self.user_ids = self.stage_id.user_ids
@api.onchange('checklist_template_ids')
def _onchange_checklist_template_ids(self):
check_list_id = self.env['project.task.checklist.template'].browse(
self.checklist_template_ids.ids)
if check_list_id:
for checklist_id in check_list_id.checklist_ids.ids:
self.update({
'checklist_info_ids':
[(0, 0, {
'checklist_id': checklist_id
})]
})