@ -0,0 +1,47 @@ |
|||||
|
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
||||
|
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
Project Task Checklist |
||||
|
====================== |
||||
|
This module allows to To manage the Project's tasks, subtasks checklists. |
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
* No additional configurations needed |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
||||
|
|
||||
|
License |
||||
|
======= |
||||
|
General Public License, version 3 (AGPL v3). |
||||
|
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
||||
|
|
||||
|
Credits |
||||
|
------- |
||||
|
Developer : (V18) Dhanya B, |
||||
|
Contact: odoo@cybrosys.com |
||||
|
|
||||
|
Contacts |
||||
|
-------- |
||||
|
* Mail Contact : odoo@cybrosys.com |
||||
|
* Website : https://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 |
||||
|
========== |
||||
|
.. image:: https://cybrosys.com/images/logo.png |
||||
|
:target: https://cybrosys.com |
||||
|
|
||||
|
This module is maintained by Cybrosys Technologies. |
||||
|
|
||||
|
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from . import models |
@ -0,0 +1,45 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
{ |
||||
|
'name': 'Project Task Checklist', |
||||
|
'version': '18.0.1.0.0', |
||||
|
'category': 'Project', |
||||
|
'summary': "Manage the Project's tasks and subtasks checklists.", |
||||
|
'description': "This module allows to manage the Project's tasks, subtasks " |
||||
|
"checklists. We can also see the task progress", |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'website': 'https://www.cybrosys.com', |
||||
|
'depends': ['project'], |
||||
|
'data': [ |
||||
|
'security/ir.model.access.csv', |
||||
|
'views/checklist_item_views.xml', |
||||
|
'views/project_task_views.xml', |
||||
|
'views/task_checklist_views.xml', |
||||
|
], |
||||
|
'images': ['static/description/banner.jpg'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
## Module <projects_task_checklists> |
||||
|
|
||||
|
#### 12.02.2025 |
||||
|
#### Version 18.0.1.0.0 |
||||
|
##### ADD |
||||
|
- Initial Commit for Project Task Checklist |
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from . import checklist_item |
||||
|
from . import checklist_item_line |
||||
|
from . import project_task |
||||
|
from . import task_checklist |
@ -0,0 +1,39 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class ChecklistItem(models.Model): |
||||
|
""" |
||||
|
Model for check list items |
||||
|
""" |
||||
|
_name = 'checklist.item' |
||||
|
_description = "Checklist Item" |
||||
|
|
||||
|
name = fields.Char(string="Name", required=True, |
||||
|
help="Name of the checklist item") |
||||
|
sequence = fields.Integer(string="Sequence", default=1, |
||||
|
help="Sequence number") |
||||
|
description = fields.Char(string="Description", |
||||
|
help="Description of the check list item") |
||||
|
checklist_id = fields.Many2one('task.checklist', string="Checklist", |
||||
|
help="Checklist") |
@ -0,0 +1,79 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class ChecklistItemLine(models.Model): |
||||
|
""" |
||||
|
Model for checklist lines |
||||
|
""" |
||||
|
_name = 'checklist.item.line' |
||||
|
_description = 'Checklist Item Line' |
||||
|
|
||||
|
check_list_item_id = fields.Many2one('checklist.item', |
||||
|
string="Checklist item", required=True, |
||||
|
help='Checklist item') |
||||
|
description = fields.Char(string="Description", |
||||
|
help="Description of the checklist item") |
||||
|
projects_id = fields.Many2one('project.task', string="Project", |
||||
|
help="Name of the project") |
||||
|
checklist_id = fields.Many2one('task.checklist', |
||||
|
string="Checklist", help="Checklist") |
||||
|
state = fields.Selection(string='Status', required=True, readonly=True, |
||||
|
copy=False, tracking=True, |
||||
|
selection=[('todo', 'To Do'), |
||||
|
('in_progress', 'In Progress'), |
||||
|
('done', 'Done'), |
||||
|
('cancel', 'Cancelled')], |
||||
|
default='todo', help="State") |
||||
|
|
||||
|
def action_approve_and_next(self): |
||||
|
""" |
||||
|
Method to transition the state of an object to 'in_progress'. |
||||
|
This action is typically performed to approve and move the object to the |
||||
|
next stage. |
||||
|
|
||||
|
:return: None |
||||
|
""" |
||||
|
self.state = 'in_progress' |
||||
|
|
||||
|
def action_mark_completed(self): |
||||
|
""" |
||||
|
Method to mark an object as completed by transitioning its state to |
||||
|
'done'. |
||||
|
This action indicates that the associated task or process has been |
||||
|
successfully finished. |
||||
|
|
||||
|
:return: None |
||||
|
""" |
||||
|
self.state = 'done' |
||||
|
|
||||
|
def action_mark_canceled(self): |
||||
|
""" |
||||
|
Method to mark an object as canceled by transitioning its state to |
||||
|
'cancel'. |
||||
|
This action indicates that the associated task or process has been |
||||
|
canceled or terminated. |
||||
|
|
||||
|
:return: None |
||||
|
""" |
||||
|
self.state = 'cancel' |
@ -0,0 +1,81 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class ProjectTask(models.Model): |
||||
|
"""Inheriting project_task model to add checklist fields""" |
||||
|
_inherit = 'project.task' |
||||
|
|
||||
|
start_date = fields.Datetime(string='Start Date', help="Start Date") |
||||
|
end_date = fields.Datetime(string='End Date', help="End Date") |
||||
|
progress = fields.Float(compute='_compute_progress', string='Progress in %', |
||||
|
help="Progress in %") |
||||
|
checklist_ids = fields.Many2many('task.checklist', |
||||
|
compute='_compute_checklist_ids', |
||||
|
string='Checklist', |
||||
|
help="Checklist items") |
||||
|
checklist_id = fields.Many2one('task.checklist', |
||||
|
string='Checklist', |
||||
|
help="Select Checklist") |
||||
|
checklists_ids = fields.One2many('checklist.item.line', |
||||
|
'projects_id', |
||||
|
string='CheckList Items', required=True, |
||||
|
help='Add checklist items') |
||||
|
|
||||
|
@api.onchange('checklist_id') |
||||
|
def _onchange_checklist_id(self): |
||||
|
"""Triggered when the 'checklist_id' field is changed. It searches |
||||
|
for the corresponding task checklist based on the name and updates |
||||
|
the 'checklists_ids' field with checklist items. :return: None""" |
||||
|
checklist = self.env['task.checklist'].search( |
||||
|
[('name', '=', self.checklist_id.name)]) |
||||
|
self.checklists_ids = False |
||||
|
self.checklists_ids = [(0, 0, { |
||||
|
'check_list_item_id': rec.id, |
||||
|
'state': 'todo', |
||||
|
'checklist_id': self.checklist_id.id, |
||||
|
}) for rec in checklist.checklist_ids] |
||||
|
|
||||
|
def _compute_checklist_ids(self): |
||||
|
"""Compute method that updates the 'checklist_ids' field for each |
||||
|
record. It retrieves task checklists related to the current record |
||||
|
and assigns them to the 'checklist_ids' field. :return: None""" |
||||
|
for rec in self: |
||||
|
self.checklist_ids = self.env['task.checklist'].search( |
||||
|
[('task_id', '=', rec.id)]) |
||||
|
|
||||
|
def _compute_progress(self): |
||||
|
"""Compute method that calculates the progress percentage for each |
||||
|
record. It iterates through the associated checklist items and |
||||
|
calculates the percentage of completed activities based on their |
||||
|
states. The 'progress' field is updated accordingly. :return: None""" |
||||
|
for rec in self: |
||||
|
total_completed = 0 |
||||
|
for activity in rec.checklists_ids: |
||||
|
if activity.state in ['cancel', 'done', 'in_progress']: |
||||
|
total_completed += 1 |
||||
|
if total_completed: |
||||
|
rec.progress = float(total_completed) / len( |
||||
|
rec.checklists_ids) * 100 |
||||
|
else: |
||||
|
rec.progress = 0.0 |
@ -0,0 +1,39 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################ |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Dhanya B (odoo@cybrosys.com) |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################ |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class TaskChecklist(models.Model): |
||||
|
""" |
||||
|
Model representing a task checklist. |
||||
|
""" |
||||
|
_name = 'task.checklist' |
||||
|
_description = 'Task checklist' |
||||
|
|
||||
|
name = fields.Char(string='Name', help='Name of the checklist') |
||||
|
description = fields.Char(string='Description', |
||||
|
help='Description of the checklist') |
||||
|
task_id = fields.Many2one('project.task', string='Task', |
||||
|
help='Name of the Task') |
||||
|
checklist_ids = fields.One2many('checklist.item', 'checklist_id', |
||||
|
string='CheckList Items', required=True, |
||||
|
help='Items of checklist') |
|
After Width: | Height: | Size: 724 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 209 KiB |
After Width: | Height: | Size: 109 KiB |
After Width: | Height: | Size: 495 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 624 B |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 214 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 929 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 542 B |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 358 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 600 B |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 926 B |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 800 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 189 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 875 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 721 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 723 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 248 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 206 KiB |
After Width: | Height: | Size: 358 KiB |
After Width: | Height: | Size: 724 KiB |
After Width: | Height: | Size: 45 KiB |