@ -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 |