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.
116 lines
5.3 KiB
116 lines
5.3 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 AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#############################################################################
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ProjectTask(models.Model):
|
|
"""
|
|
Model representing a project task.
|
|
This class extends the 'project.task' model and adds additional functionality
|
|
specific to project tasks.
|
|
"""
|
|
_inherit = 'project.task'
|
|
is_announcement_send = fields.Boolean(string="Send Email",
|
|
help="Enable to send announcement through email")
|
|
|
|
@api.model
|
|
def task_assigned(self):
|
|
"""
|
|
Get assigned tasks and send announcements if not already sent. This
|
|
method retrieves assigned tasks that are in the 'In Progress' stage,
|
|
and sends announcements to the assigned users if the
|
|
'is_announcement_send' field is False. It also updates the
|
|
'is_announcement_send' field to True after sending the announcements.
|
|
return: A list of dictionaries representing the assigned tasks and
|
|
related objects.
|
|
"""
|
|
tasks = self.search([('stage_id.name', '=', 'In Progress')])
|
|
purchase_orders = self.env['purchase.order'].search(
|
|
[('state', '=', 'purchase')])
|
|
sale_orders = self.env['sale.order'].search(
|
|
[('state', '=', 'sale')])
|
|
crm_lead = self.env['crm.lead'].search([('stage_id.name', '=', 'Won')])
|
|
context = {}
|
|
result = []
|
|
mail = self.env['ir.config_parameter'].sudo()
|
|
for task in tasks:
|
|
name = task.project_id.name
|
|
if name in context:
|
|
context[name]['count'] += 1
|
|
else:
|
|
context[name] = {'id': task.project_id.id, 'name': name,
|
|
'count': 1, 'model': 'project.task'}
|
|
if not task.is_announcement_send:
|
|
if mail.get_param('all_in_one_announcements.email'):
|
|
mail_content = " Hello " + task.name + "Your Pending " \
|
|
"Task. Please " \
|
|
"Check with the " \
|
|
"Task"
|
|
main_content = {
|
|
'email_from': self.env.user.work_email,
|
|
'email_to': 'demomail1050@gmail.com',
|
|
'body_html': mail_content,
|
|
'subject': 'Work Report'
|
|
}
|
|
self.env['mail.mail'].sudo().create(main_content).send()
|
|
task.is_announcement_send = True
|
|
task_results = [
|
|
{'id': item['id'], 'name': item['name'], 'model': 'project.task',
|
|
'count': '-' if item['count'] == 1 else item['count']} for item in
|
|
context.values()]
|
|
result.append(task_results)
|
|
purchase_order_results = [{'purchase_order_name': po.name, 'id': po.id,
|
|
'model': 'purchase.order', 'count': 1}
|
|
for po in purchase_orders]
|
|
result.append(purchase_order_results)
|
|
sale_order_results = [{'sale_order_name': so.name, 'id': so.id,
|
|
'model': 'sale.order', 'count': 1}
|
|
for so in sale_orders]
|
|
crm_results = [{'crm_name': rec.name, 'id': rec.id,
|
|
'model': 'crm.lead', 'count': 1}
|
|
for rec in crm_lead]
|
|
result.append(sale_order_results)
|
|
result.append(crm_results)
|
|
return result
|
|
|
|
@api.model
|
|
def get_pending_tasks(self, project_id):
|
|
"""
|
|
Retrieve tasks for a specific project. This method fetches tasks
|
|
related to a particular project ID that are in the 'In Progress'
|
|
stage. It returns an action to open the tasks with the appropriate
|
|
view mode.
|
|
param project_id: The ID of the project to filter tasks by.
|
|
return: A dictionary representing an action to open the project tasks.
|
|
"""
|
|
task_ids = self.search([('project_id.id', '=', int(project_id)),
|
|
('stage_id.name', '=', 'In Progress')])
|
|
return {
|
|
'name': task_ids[0].project_id.name,
|
|
'type': "ir.actions.act_window",
|
|
'res_model': 'project.task',
|
|
'domain': [('id', 'in', task_ids.ids)],
|
|
'view_mode': "kanban,list,form",
|
|
'context': {'no_breadcrumbs': True},
|
|
'views': [[False, "kanban"]],
|
|
'target': 'main',
|
|
}
|
|
|