diff --git a/advanced_project_management_system/README.rst b/advanced_project_management_system/README.rst new file mode 100755 index 000000000..4510d6b90 --- /dev/null +++ b/advanced_project_management_system/README.rst @@ -0,0 +1,47 @@ + .. image:: https://img.shields.io/badge/license-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Advanced project management system +================================== +All additional features of project module are in single module + +Configuration +============= +- No additional configuration required + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +Developer: (V16) Sreeshanth V S, Jumana Jabin MP, 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 `__ + +Further information +=================== +HTML Description: ``__ diff --git a/advanced_project_management_system/__init__.py b/advanced_project_management_system/__init__.py new file mode 100755 index 000000000..b7e1aa45e --- /dev/null +++ b/advanced_project_management_system/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from . import models +from . import report +from . import wizard diff --git a/advanced_project_management_system/__manifest__.py b/advanced_project_management_system/__manifest__.py new file mode 100755 index 000000000..13a89daf3 --- /dev/null +++ b/advanced_project_management_system/__manifest__.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +{ + 'name': "Advanced Project Management System", + "version": "16.0.1.0.0", + "category": "Project", + "summary": "Advanced Project Management System for Odoo16", + "description": "AAdvanced Project Management System", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['project', 'hr_timesheet'], + 'data': [ + 'security/ir_attachment_security.xml', + 'security/ir.model.access.csv', + 'data/ir_cron_data.xml', + 'data/mail_template_data.xml', + 'data/ir_actions_server_data.xml', + 'data/ir_sequence_data.xml', + 'views/project_milestone_views.xml', + 'views/res_config_settings_views.xml', + 'views/project_checklist_views.xml', + 'views/project_task_checklist_views.xml', + 'views/project_task_views.xml', + 'views/project_task_checklist_template_views.xml', + 'views/project_checklist_template_views.xml', + 'views/project_category_views.xml', + 'views/project_project_views.xml', + 'views/ir_attachment_views.xml', + 'views/project_issue_views.xml', + 'report/project_project_template.xml', + 'report/project_task_template.xml', + 'report/ir_action_report.xml', + 'report/project_task_burnup_chart_report_views.xml', + 'report/project_task_velocity_chart_report_views.xml', + 'wizard/project_task_checklist_import_views.xml', + 'wizard/project_stage_update_views.xml', + 'wizard/project_task_mass_update_views.xml', + 'wizard/project_shortcut_views.xml' + ], + 'assets': { + 'web.assets_backend': { + '/advanced_project_management_system/static/src/js/burnup_chart_search_model.js', + '/advanced_project_management_system/static/src/js/burnup_chart_model.js', + '/advanced_project_management_system/static/src/js/burnup_chart_view.js', + '/advanced_project_management_system/static/src/xml/burnup_chart_view.xml', + '/advanced_project_management_system/static/src/xml/chatter_topbar_templates.xml', + '/advanced_project_management_system/static/src/js/chatter_topbar.js', + '/advanced_project_management_system/static/src/js/chatter_time.js', + '/advanced_project_management_system/static/src/js/velocity_chart_model.js', + '/advanced_project_management_system/static/src/js/velocity_chart_search_model.js', + '/advanced_project_management_system/static/src/js/velocity_chart_view.js', + '/advanced_project_management_system/static/src/xml/velocity_chart_view.xml', + }, + }, + 'images': ['static/description/banner.jpg'], + 'license': 'LGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/advanced_project_management_system/data/ir_actions_server_data.xml b/advanced_project_management_system/data/ir_actions_server_data.xml new file mode 100755 index 000000000..bc878d1a0 --- /dev/null +++ b/advanced_project_management_system/data/ir_actions_server_data.xml @@ -0,0 +1,25 @@ + + + + + + Mass Stage Update + + + code + + action = record.project_multi_stage_update() + + + + + Mass Update + + + code + + action = record.task_mass_update() + + + + diff --git a/advanced_project_management_system/data/ir_cron_data.xml b/advanced_project_management_system/data/ir_cron_data.xml new file mode 100755 index 000000000..65045b8fd --- /dev/null +++ b/advanced_project_management_system/data/ir_cron_data.xml @@ -0,0 +1,25 @@ + + + + + + Document Expire + + code + model.document_expire_notification() + 1 + days + -1 + + + + Task overdue notification + + code + model.task_overdue_notification() + 1 + days + -1 + + + diff --git a/advanced_project_management_system/data/ir_sequence_data.xml b/advanced_project_management_system/data/ir_sequence_data.xml new file mode 100755 index 000000000..3dec19c1f --- /dev/null +++ b/advanced_project_management_system/data/ir_sequence_data.xml @@ -0,0 +1,12 @@ + + + + + + Sequence + project.issue + PI + 3 + + + diff --git a/advanced_project_management_system/data/mail_template_data.xml b/advanced_project_management_system/data/mail_template_data.xml new file mode 100755 index 000000000..097fc01d2 --- /dev/null +++ b/advanced_project_management_system/data/mail_template_data.xml @@ -0,0 +1,116 @@ + + + + + + Document Expire Notification + + + {{object.company_id.email}} + {{object.partner_id.email}} + Document Expiry Notification for + {{object.name}} + + +

+ Dear Mr/Ms, +
+ Your document + + + + is expiring on + + + +

+ Thank you +

+
+
+ + + Document Expire Notification + + + {{object.company_id.email}} + {{object.document_email_to}} + Document Expiry Notification for + {{object.name}} + + +

+ Hi Team, +
+ The document + + + + is expiring on + + + + +

+ Thank you +

+
+
+ + + Task due Notification + + + {{object.company_id.email}} + {{object._get_user_emails()}} + Task Overdue notification + + +

+ Dear Employee +
+ Your overdue tasklist are + + + + + + + + + + + + + + + +
ProjectTaskDeadline Date
+ + + + + +
+ Thank you +

+
+
+
+
diff --git a/advanced_project_management_system/doc/RELEASE_NOTES.md b/advanced_project_management_system/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..30587ebea --- /dev/null +++ b/advanced_project_management_system/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 14.03.2024 +#### Version 16.0.1.0.0 +#### ADD +- Initial commit for Advanced project management system diff --git a/advanced_project_management_system/models/__init__.py b/advanced_project_management_system/models/__init__.py new file mode 100755 index 000000000..822cadea3 --- /dev/null +++ b/advanced_project_management_system/models/__init__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from . import ir_attachment +from . import project_project +from . import project_category +from . import project_checklist +from . import project_checklist_info +from . import project_checklist_template +from . import project_issue +from . import project_task +from . import project_task_checklist +from . import project_task_checklist_info +from . import project_task_checklist_template +from . import project_task_type +from . import res_config_settings diff --git a/advanced_project_management_system/models/ir_attachment.py b/advanced_project_management_system/models/ir_attachment.py new file mode 100755 index 000000000..9d07710ea --- /dev/null +++ b/advanced_project_management_system/models/ir_attachment.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import api, fields, models + + +class IrAttachment(models.Model): + """ Added document expiry information""" + _inherit = 'ir.attachment' + + expiry_date = fields.Date(string='Expiry Date', + help="for setting expiry date for the document") + expiry_notification = fields.Boolean(string='Expiry Date Notification', + help="For sending expiry notification") + partner_id = fields.Many2one('res.partner', string="partner", + help="For adding the partner ") + document_email_to = fields.Char( + default=lambda self: self.env['ir.config_parameter'].sudo().get_param( + 'res.config.settings.email'), string="Email to", + help="For getting owner email") + document_mai_customer = fields.Boolean( + default=lambda self: self.env['ir.config_parameter'].sudo().get_param( + 'res.config.settings.notify_customer'), string="Email to customer", + help="Notify email to customer ") + + def document_expire_notification(self): + """ Automatically sent email when the + document expiration date is over""" + if self.env['ir.config_parameter'].sudo().get_param( + 'res.config.settings.notify_customer'): + attachments = self.search([('expiry_date', '!=', None)]) + for attachment in attachments: + if attachment.expiry_date < fields.Date.today(): + mail_template = attachment.env.ref( + 'advanced_project_management_system.document_expire_notification_to_customer') + mail_template.send_mail(attachment.id, force_send=True) + attachments = self.search([('expiry_date', '!=', None)]) + for attachment in attachments: + if attachment.expiry_notification: + if attachment.expiry_date < fields.Date.today(): + mail_template = attachment.env.ref( + 'advanced_project_management_system.document_expire_notification_mail_template') + mail_template.send_mail(attachment.id, force_send=True) + + @api.onchange('res_id') + def _onchange_res_id(self): + """ Compute customer name and add to attachment from projects""" + attachments = self.search([('res_model', '=', 'project.project')]) + for attachment in attachments: + projects = self.env['project.project'].search( + [('id', '=', attachment.res_id)]) + if projects.partner_id: + attachment.partner_id = projects.partner_id.id diff --git a/advanced_project_management_system/models/project_category.py b/advanced_project_management_system/models/project_category.py new file mode 100755 index 000000000..bb27729cc --- /dev/null +++ b/advanced_project_management_system/models/project_category.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectCategory(models.Model): + """ Setting up the project category""" + _name = "project.category" + _description = "Project categories" + + name = fields.Char(string='Project Category', tracking=True, + help="Name of the category") + is_active = fields.Boolean(string='Active', + help="Check is it active or not ") diff --git a/advanced_project_management_system/models/project_checklist.py b/advanced_project_management_system/models/project_checklist.py new file mode 100755 index 000000000..400c33ed7 --- /dev/null +++ b/advanced_project_management_system/models/project_checklist.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectChecklist(models.Model): + """ Project checklist information""" + _name = "project.checklist" + _description = "Project checklist" + + name = fields.Char(string='Name', required=True, + name="name of the checklist") + description = fields.Char(string='Description', required=True, + help="Description about the checklist ") + company_id = fields.Many2one('res.company', string='Company', + required=True, help="Company information", + default=lambda self: self.env.company.id) diff --git a/advanced_project_management_system/models/project_checklist_info.py b/advanced_project_management_system/models/project_checklist_info.py new file mode 100755 index 000000000..a4140851d --- /dev/null +++ b/advanced_project_management_system/models/project_checklist_info.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectChecklistInfo(models.Model): + """ Project checklist details""" + _name = "project.checklist.info" + _description = "Project checklist information" + + checklist_id = fields.Many2one('project.checklist', + string='Name', + help="Project checklist details") + description = fields.Char(string='Description', + related='checklist_id.description', + help="description about the checklist") + project_id = fields.Many2one('project.project', string="Project", + help="details of the project") + date = fields.Date(string='Date', default=fields.Date.today(), + help="get the date ") + state = fields.Selection( + selection=[('new', 'New'), ('progres', 'In Progress'), + ('done', 'Done'), ('cancel', 'Cancel')], default='new', + readonly=False, string="Status", + help="Get information about the state") + + def action_set_checklist_complete(self): + """ Mark the checklist progress and completion""" + if self.state in ['new', 'progres']: + self.state = 'done' + checklist_template_id = self.env[ + 'project.checklist.template'].search( + [('id', 'in', self.project_id.checklist_template_ids.ids)]) + self.project_id.checklist_progress += 100 / float( + len(checklist_template_id.checklist_ids.ids)) + + def action_set_checklist_close(self): + """ Checklist cancel details""" + self.state = 'cancel' diff --git a/advanced_project_management_system/models/project_checklist_template.py b/advanced_project_management_system/models/project_checklist_template.py new file mode 100755 index 000000000..041436ce5 --- /dev/null +++ b/advanced_project_management_system/models/project_checklist_template.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectChecklistTemplate(models.Model): + """ Project checklist template""" + _name = "project.checklist.template" + _description = "Project checklist template" + + name = fields.Char(string='Name', help="name of the template") + checklist_ids = fields.Many2many('project.checklist', + string='Checklist', + help="checklist information") diff --git a/advanced_project_management_system/models/project_issue.py b/advanced_project_management_system/models/project_issue.py new file mode 100755 index 000000000..effca06c7 --- /dev/null +++ b/advanced_project_management_system/models/project_issue.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import api, fields, models + + +class ProjectIssue(models.Model): + """ For managing project issues""" + _name = "project.issue" + _description = 'Project and task issue' + + user_id = fields.Many2one("res.users", string="Assigned to", + help="The person who is responsible to solve " + "the issue") + summary = fields.Text(string='Issue summary', help="Adding project issue") + email = fields.Char(string="Email", help="Email address") + project_id = fields.Many2one('project.project', string="project", + help="To know issue noticed in which project") + task_id = fields.Many2one('project.task', string="Task", + help="To know issue noticed in which task", + domain=[('project_id', '=', project_id)]) + priority = fields.Selection([('0', 'Low'), ('1', 'High')], default='0', + string="Priority") + tag_ids = fields.Many2many('project.tags', string='Tags', + help='Set the tags') + partner_id = fields.Many2one('res.partner', string="Contact", + help="Know about the contact details") + name = fields.Char(string='Number', default='new', + help='To track the issue reference') + description = fields.Text(string='Description', + help="To add the issue in detail") + extra_info = fields.Text(string="Extra Info", + help="To add some extra information") + state = fields.Selection([('new', 'New'), ('progress', 'In Progress'), + ('done', 'Done'), ('cancel', 'Cancel')], + default='new', string='State', + help='Project issue pipeline stages') + create_date = fields.Datetime(string="Create Date", + help='For tracking the record creation date', + default=fields.Datetime.now()) + + @api.model + def create(self, vals): + """ Added reference number""" + if vals.get('name', 'New'): + vals['name'] = self.env['ir.sequence'].next_by_code( + 'project.issue') + res = super(ProjectIssue, self).create(vals) + return res diff --git a/advanced_project_management_system/models/project_project.py b/advanced_project_management_system/models/project_project.py new file mode 100755 index 000000000..8b3e120b5 --- /dev/null +++ b/advanced_project_management_system/models/project_project.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +import json +from odoo import api, fields, models, _ + + +class ProjectProject(models.Model): + """ Added project documents,checklist,stage updates""" + _inherit = 'project.project' + + project_category_id = fields.Many2one('project.category', + string='Project Category', + help="For adding project category ") + document_count = fields.Integer(string='Documents', + compute='_compute_document_count', + help="For getting the document count") + project_stage_id = fields.Many2one('project.project.stage', + tracking=True, string='Stage', + help="Project stages") + project_checklist_info_ids = fields.One2many('project.checklist.info', + 'project_id', + help="Project checklist details", + string='Checklist') + checklist_progress = fields.Integer(string="Progress", + help="For checklist progress bar ") + checklist_template_ids = fields.Many2many('project.checklist.template', + string='checklist template', + help="For getting checklist " + "template") + issue_count = fields.Integer(string="Project issue", + help="For getting project issue ", + compute="_compute_issue_count") + shortcut_ids = fields.One2many('project.shortcut', 'project_id', + string='Shortcuts') + url_shortcut = fields.Char(string="URL Shortcut", + compute="_compute_url_shortcut", + help="Enter the URL shortcut.") + is_active = fields.Boolean(string="Is Active", store=True, + help="Check this box if the URL is active.") + url_link = fields.Char(string="URL Link", help="Enter the URL link.") + url_name = fields.Char(string="URL Name", + help="Enter the name associated with the URL.") + + def open_project_creation_wizard(self): + """ Open the project creation wizard """ + return { + 'type': 'ir.actions.act_window', + 'res_model': 'project.project', + 'view_mode': 'form', + 'view_id': self.env.ref( + 'advanced_project_management_system.project.project.view.form.' + 'simplified').id, + 'target': 'current', + } + + @api.depends('url_link', 'url_name') + def _compute_url_shortcut(self): + """ Compute the URL shortcut and its activation status """ + for project in self: + if project.url_link: + project.is_active = True + project.url_shortcut = project.url_link + else: + project.url_shortcut = "Add Link" + project.is_active = False + + def open_url_shortcut(self): + """ Open the URL shortcut """ + for project in self: + if project.url_shortcut: + return { + 'name': self.url_name, + 'type': 'ir.actions.act_url', + 'url': project.url_shortcut, + 'target': 'self', + } + + def button_document(self): + """ Return document kanban for the project""" + 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.project') + ], + } + + def _compute_document_count(self): + """ Compute document count and return """ + for rec in self: + attachment_ids = self.env['ir.attachment'].search( + [('res_model', '=', 'project.project'), + ('res_id', '=', rec.id)]) + rec.document_count = len(attachment_ids) + + def project_multi_stage_update(self): + """ Return wizard to update the project stage""" + return { + 'type': 'ir.actions.act_window', + 'name': 'Mass Update', + 'view_mode': 'form', + 'target': 'new', + 'res_model': 'project.stage.update', + } + + @api.onchange('checklist_template_ids') + def _onchange_checklist_template_ids(self): + """ Updating checklist""" + check_list_id = self.env['project.checklist.template'].browse( + self.checklist_template_ids.ids) + if check_list_id: + for checklist_id in check_list_id.checklist_ids.ids: + self.update({ + 'project_checklist_info_ids': + [(0, 0, { + 'checklist_id': checklist_id + })] + }) + + def _compute_issue_count(self): + """ For getting project issue count""" + for rec in self: + issue_id = self.env['project.issue'].search( + [('project_id', '=', rec.id)]) + rec.issue_count = len(issue_id) + + def button_issue(self): + """Return project issues""" + return { + 'type': 'ir.actions.act_window', + 'name': 'Project Issues', + 'view_mode': 'tree,form', + 'res_model': 'project.issue', + 'domain': [('project_id', '=', self.id)] + } + + def _get_stat_buttons(self): + """ Get statistical buttons for the project """ + self.ensure_one() + buttons = super(ProjectProject, self)._get_stat_buttons() + if self.user_has_groups('project.group_project_user'): + buttons.append({ + 'icon': 'area-chart', + 'text': _('Burnup Chart'), + 'action_type': 'action', + 'action': 'advanced_project_management_system.action_project_task_burnup_chart_report', + 'additional_context': json.dumps({ + 'active_id': self.id, + }), + 'show': True, + 'sequence': 60, + }) + if self.user_has_groups('project.group_project_user'): + buttons.append({ + 'icon': 'line-chart', + 'text': _('Velocity Chart'), + 'action_type': 'action', + 'action': 'advanced_project_management_system.action_project_velocity_chart_report', + 'additional_context': json.dumps({ + 'active_id': self.id, + }), + 'show': True, + 'sequence': 60, + }) + return buttons + + def action_project_task_burnup_chart_report(self): + """ Open the Burnup Chart report for the project """ + action = self.env['ir.actions.act_window']._for_xml_id( + 'advanced_project_management_system' + '.action_project_task_burnup_chart_report') + action['display_name'] = _("%(name)s's Burnup Chart", name=self.name) + return action + + def action_project_velocity_chart_report(self): + """ Open the Velocity Chart report for the project """ + action = self.env['ir.actions.act_window']._for_xml_id( + 'advanced_project_management_system' + '.action_project_velocity_chart_report') + action['display_name'] = _("%(name)s's Velocity Chart", + name=self.name) + return action + + def action_open_shortcut(self): + """ Open the shortcut creation form """ + view_id = self.env.ref( + 'advanced_project_management_system.project_shortcut_view_form').id + return { + 'name': 'Add Custom Project Shortcut', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'project.shortcut', + 'views': [(view_id, 'form')], + 'type': 'ir.actions.act_window', + 'target': 'new', + } diff --git a/advanced_project_management_system/models/project_task.py b/advanced_project_management_system/models/project_task.py new file mode 100755 index 000000000..acd0b2905 --- /dev/null +++ b/advanced_project_management_system/models/project_task.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +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 + })] + }) diff --git a/advanced_project_management_system/models/project_task_checklist.py b/advanced_project_management_system/models/project_task_checklist.py new file mode 100755 index 000000000..f688d8528 --- /dev/null +++ b/advanced_project_management_system/models/project_task_checklist.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectChecklist(models.Model): + """Task checklist details""" + _name = "project.task.checklist" + _description = "Task Custom Checklist" + + name = fields.Char(string='Name', required=True, + help="name of the checklist") + description = fields.Char(string='Description', required=True, + help="Description of the checklist") + company_id = fields.Many2one('res.company', string='Company', + required=True, + default=lambda self: self.env.company.id, + help="For getting company details") diff --git a/advanced_project_management_system/models/project_task_checklist_info.py b/advanced_project_management_system/models/project_task_checklist_info.py new file mode 100755 index 000000000..f801bb325 --- /dev/null +++ b/advanced_project_management_system/models/project_task_checklist_info.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models, _ +from odoo.exceptions import ValidationError + + +class ProjectTaskChecklistInfo(models.Model): + """ Task checklist details""" + _name = "project.task.checklist.info" + _description = "Task checklist information" + + checklist_id = fields.Many2one('project.task.checklist', + string='Name', help="checklist") + description = fields.Char(string='Description', + related='checklist_id.description', + help="Description of the checklist info ") + task_id = fields.Many2one('project.task', string="Task", + help="Task details") + checklist_progress = fields.Integer(string="progress", + help="For tracking the checklist " + "progress and completion") + date = fields.Date(string='Date', default=fields.Date.today(), + help="Get the date information") + state = fields.Selection( + selection=[('new', 'New'), ('progres', 'In Progress'), + ('done', 'Done'), ('cancel', 'Cancel')], default='new', + string="Status", help="get the status of the checklist ") + + def action_set_checklist_complete(self): + """ Managing the checklist progress and completion""" + if self.state in ['new', 'progres']: + checklist_template_id = self.env[ + 'project.task.checklist.template'].search( + [('id', 'in', self.task_id.checklist_template_ids.ids)]) + if len(checklist_template_id.checklist_ids.ids) > 0: + self.task_id.checklist_progress += 100 / float( + len(checklist_template_id.checklist_ids.ids)) + self.state = 'done' + else: + raise ValidationError(_("Please add checklist")) + + def action_set_checklist_close(self): + """ Checklist cancel info """ + self.state = 'cancel' diff --git a/advanced_project_management_system/models/project_task_checklist_template.py b/advanced_project_management_system/models/project_task_checklist_template.py new file mode 100755 index 000000000..fa8cf5760 --- /dev/null +++ b/advanced_project_management_system/models/project_task_checklist_template.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectTaskChecklistTemplate(models.Model): + """Task checklist template""" + _name = "project.task.checklist.template" + _description = "Task checklist template" + + name = fields.Char(string='Name', help="name of the template") + checklist_ids = fields.Many2many('project.task.checklist', + string='Checklist', + help="To get the checklist details") diff --git a/advanced_project_management_system/models/project_task_type.py b/advanced_project_management_system/models/project_task_type.py new file mode 100644 index 000000000..9628523d9 --- /dev/null +++ b/advanced_project_management_system/models/project_task_type.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import fields, models + + +class ProjectTaskType(models.Model): + """ Added user information""" + _inherit = 'project.task.type' + + user_ids = fields.Many2many('res.users', string='Assign Multiple Users', + help="We can assign multiple users ") diff --git a/advanced_project_management_system/models/res_config_settings.py b/advanced_project_management_system/models/res_config_settings.py new file mode 100755 index 000000000..f2cdae3c8 --- /dev/null +++ b/advanced_project_management_system/models/res_config_settings.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + """ Added document expiry notification expiry mail details """ + _inherit = "res.config.settings" + + is_project_category = fields.Boolean( + string='Enable Project Category', + help="Enabling project category", + config_parameter='advanced_project_management_system.is_project_category') + document_expiry_notification = fields.Boolean( + string='Document Expiry Notification', + help="For sending document expiry notification", + config_parameter='advanced_project_management_system.document_expiry_notification') + notify_customer = fields.Boolean( + string='Notify Customer', + help="For notifying the customer", + config_parameter='advanced_project_management_system.notify_customer') + on_expiry_notification = fields.Boolean( + string='On Expiry Date Notification', help="Sent expiry notification", + config_parameter='advanced_project_management_system.on_expiry_notification') + email = fields.Char( + string='Notify Email to', help="Get email id", + config_parameter='advanced_project_management_system.email') + notify_days = fields.Integer( + string='Notify After Expiry Date', + help="Notification sent before these days", + config_parameter='advanced_project_management_system.notify_days') + is_overdue_notification = fields.Boolean( + string='Overdue Notification?', + help="For sending overdue notification", + config_parameter='advanced_project_management_system.is_overdue_notification') + notification_before = fields.Integer( + string='Notification Days', + help="Sent notification before these days", + config_parameter='advanced_project_management_system.notification_before') + + @api.onchange('is_project_category') + def _onchange_is_project_category(self): + groups = self.env.ref( + 'advanced_project_management_system.group_project_category') + if self.is_project_category: + groups.write({'users': [(4, self.env.user.id)]}) + else: + groups.write({'users': [(3, self.env.user.id)]}) diff --git a/advanced_project_management_system/report/__init__.py b/advanced_project_management_system/report/__init__.py new file mode 100644 index 000000000..9d9667e29 --- /dev/null +++ b/advanced_project_management_system/report/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from . import project_task_burnup_chart_report +from . import project_task_velocity_chart_report diff --git a/advanced_project_management_system/report/ir_action_report.xml b/advanced_project_management_system/report/ir_action_report.xml new file mode 100755 index 000000000..23b3f3153 --- /dev/null +++ b/advanced_project_management_system/report/ir_action_report.xml @@ -0,0 +1,28 @@ + + + + + Print Project + project.project + qweb-pdf + advanced_project_management_system.project_details_report + + project_report + 'Project Details' + + + report + + + + Print Task + project.task + qweb-pdf + advanced_project_management_system.task_details_report + task_report + 'Task Details' + + + report + + diff --git a/advanced_project_management_system/report/project_project_template.xml b/advanced_project_management_system/report/project_project_template.xml new file mode 100755 index 000000000..76dcaef0b --- /dev/null +++ b/advanced_project_management_system/report/project_project_template.xml @@ -0,0 +1,125 @@ + + + + + diff --git a/advanced_project_management_system/report/project_task_burnup_chart_report.py b/advanced_project_management_system/report/project_task_burnup_chart_report.py new file mode 100644 index 000000000..f98ab37f4 --- /dev/null +++ b/advanced_project_management_system/report/project_task_burnup_chart_report.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from collections import defaultdict +from odoo import api, fields, models, _ + + +class ProjectTaskBurnupChartReport(models.AbstractModel): + """This model defines the Burnup Chart report for project tasks. """ + _name = 'project.task.burnup.chart.report' + _description = 'Burnup Chart' + + date = fields.Datetime(string='Date', readonly=True, + help='The date of data entry') + completed_count = fields.Integer(string='Completed Tasks', readonly=True, + help='The number of completed tasks') + total_count = fields.Integer(string='Total Tasks', readonly=True, + help='The total number of tasks') + @api.model + def _read_group_raw(self, domain, fields, groupby, offset=0, + limit=None, orderby=False, lazy=True): + """Generate raw data for the Burnup Chart report.""" + data = [] + project_id = self._context.get('active_id') + if groupby: + tasks = self.env['project.task'].search([ + ('project_id', '=', project_id), + ('stage_id.name', '=', 'Done') + ]) + task_counts = defaultdict(lambda: defaultdict(int)) + task_names = defaultdict(list) + for task in tasks: + completion_date = task.date_deadline or task.create_date.date() + start_date = task.create_date.date() + if task.stage_id.name == 'Done': + month_year = completion_date.strftime('%B %Y') + task_counts[month_year]['Total'] += 1 + if start_date != completion_date: + task_counts[month_year]['Start'] += 1 + task_names[month_year].append(task.name) + for month_year, counts in task_counts.items(): + data.append({ + 'date:month': [0, month_year], + 'stage_id': True, + 'completed_count': "\n".join(task_names[month_year]), + '__count': counts['Total'], + 'date_start': counts['Start'], + '__domain': domain + }) + return data diff --git a/advanced_project_management_system/report/project_task_burnup_chart_report_views.xml b/advanced_project_management_system/report/project_task_burnup_chart_report_views.xml new file mode 100644 index 000000000..825cb764f --- /dev/null +++ b/advanced_project_management_system/report/project_task_burnup_chart_report_views.xml @@ -0,0 +1,48 @@ + + + + + project.task.burnup.chart.report.view.search + project.task.burnup.chart.report + + + + + + + + + project.task.burnup.chart.report.view.graph + project.task.burnup.chart.report + + + + + + + + + + Burnup Chart + project.task.burnup.chart.report + graph + + {'search_default_project_id': active_id, + 'search_default_date': 1, 'search_default_stage': 1} + + [('display_project_id', '!=', False)] + +

+ No data yet! +

+

Analyze the growth of your project's scope and track progress + over time with the Burnup Chart. +

+
+
+
diff --git a/advanced_project_management_system/report/project_task_template.xml b/advanced_project_management_system/report/project_task_template.xml new file mode 100755 index 000000000..20597f901 --- /dev/null +++ b/advanced_project_management_system/report/project_task_template.xml @@ -0,0 +1,112 @@ + + + + + diff --git a/advanced_project_management_system/report/project_task_velocity_chart_report.py b/advanced_project_management_system/report/project_task_velocity_chart_report.py new file mode 100644 index 000000000..15ef03e8f --- /dev/null +++ b/advanced_project_management_system/report/project_task_velocity_chart_report.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# 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 . +# +############################################################################# +from collections import defaultdict +from odoo import api, fields, models, _ + + +class ProjectVelocityChartReport(models.AbstractModel): + """ + Abstract model for the Velocity Chart report. + This model is used to calculate and display the Velocity Chart report + for a specific project and task. + """ + _name = 'project.velocity.chart.report' + _description = 'Velocity Chart' + + date = fields.Date(string='Sprint Start Date', readonly=True, + help="The start date of the sprint.") + completed_story_points = fields.Float(string='Completed Story Points', + readonly=True, + help="The total story points" + " completed in the sprint.") + + + + @api.model + def _read_group_raw(self, domain, fields, groupby, offset=0, limit=None, + orderby=False, lazy=True): + """Compute grouped data for the Velocity Chart report.""" + data = [] + project_id = self._context.get('active_id') + if groupby: + tasks = self.env['project.task'].search([ + ('project_id', '=', project_id), + ('stage_id.name', '=', 'Done') + ]) + completed_within_deadline_count = defaultdict( + lambda: defaultdict(int)) + completed_names = defaultdict(list) + for task in tasks: + sprint_start_date = task.create_date.date() + completion_date = task.date_deadline or task.create_date.date() + if task.stage_id.name == 'Done': + month_year = completion_date.strftime('%B %Y') + completed_within_deadline_count[month_year]['Total'] += 1 + if sprint_start_date != completion_date: + completed_within_deadline_count[month_year][ + 'Start'] += 1 + completed_names[month_year].append(task.name) + for month_year, counts in completed_within_deadline_count.items(): + data.append({ + 'date:month': [0, month_year], + 'stage_id': True, + 'completed_count': "\n".join( + completed_names[month_year]), + '__count': counts['Total'], + 'date_start': counts['Start'], + '__domain': domain + }) + return data diff --git a/advanced_project_management_system/report/project_task_velocity_chart_report_views.xml b/advanced_project_management_system/report/project_task_velocity_chart_report_views.xml new file mode 100644 index 000000000..ccb4dfd94 --- /dev/null +++ b/advanced_project_management_system/report/project_task_velocity_chart_report_views.xml @@ -0,0 +1,50 @@ + + + + + project.velocity.chart.report.view.search + project.velocity.chart.report + + + + + + + + + project.velocity.chart.report.view.graph + project.velocity.chart.report + + + + + + + + + + Velocity Chart + project.velocity.chart.report + graph + + {'search_default_project_id': active_id, + 'search_default_date': 1} + + [('project_id', '!=', False)] + +

+ No data yet! +

+

Analyze your project's velocity over time with the Velocity + Chart. +

+
+
+
diff --git a/advanced_project_management_system/security/ir.model.access.csv b/advanced_project_management_system/security/ir.model.access.csv new file mode 100755 index 000000000..31b313088 --- /dev/null +++ b/advanced_project_management_system/security/ir.model.access.csv @@ -0,0 +1,15 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_project_task_checklist,access.project.task.checklist,model_project_task_checklist,base.group_user,1,1,1,1 +access_project_task_checklist_import,access.project.task.checklist.import,model_project_task_checklist_import,base.group_user,1,1,1,1 +access_project_task_checklist_info,access.project.task.checklist.info,model_project_task_checklist_info,base.group_user,1,1,1,1 +access_project_category,access.project.category,model_project_category,base.group_user,1,1,1,1 +access_project_stage_update,access.project.stage.update,model_project_stage_update,base.group_user,1,1,1,1 +access_project_task_mass_update,access.project.task.mass.update,model_project_task_mass_update,base.group_user,1,1,1,1 +access_project_task_checklist_template,access.project.task.checklist.template,model_project_task_checklist_template,base.group_user,1,1,1,1 +access_project_checklist,access.project.checklist,model_project_checklist,base.group_user,1,1,1,1 +access_project_checklist_template,access.project.checklist.template,model_project_checklist_template,base.group_user,1,1,1,1 +access_project_checklist_info,access.project.checklist.info,model_project_checklist_info,base.group_user,1,1,1,1 +access_project_issue,access.project.issue,model_project_issue,base.group_user,1,1,1,1 +access_project_task_burnup_chart_report,access.burnup.chart.report,model_project_task_burnup_chart_report,base.group_user,1,1,1,1 +advanced_project_management_system.access_project_shortcut,access.project.shortcut,advanced_project_management_system.model_project_shortcut,base.group_user,1,1,1,1 +access_project_velocity_chart_report,access.velocity.chart.report,model_project_velocity_chart_report,base.group_user,1,1,1,1 diff --git a/advanced_project_management_system/security/ir_attachment_security.xml b/advanced_project_management_system/security/ir_attachment_security.xml new file mode 100755 index 000000000..b40672630 --- /dev/null +++ b/advanced_project_management_system/security/ir_attachment_security.xml @@ -0,0 +1,12 @@ + + + + + Access Project Document + + + + access project category menu + + + diff --git a/advanced_project_management_system/static/csv/task_checklist.csv b/advanced_project_management_system/static/csv/task_checklist.csv new file mode 100755 index 000000000..ec832f66c --- /dev/null +++ b/advanced_project_management_system/static/csv/task_checklist.csv @@ -0,0 +1,5 @@ +Name,Description +checklist A,checklist A +checklist B,checklist B +checklist C,checklist C +checklist D,checklist D \ No newline at end of file diff --git a/advanced_project_management_system/static/description/assets/icons/check.png b/advanced_project_management_system/static/description/assets/icons/check.png new file mode 100755 index 000000000..c8e85f51d Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/check.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/chevron.png b/advanced_project_management_system/static/description/assets/icons/chevron.png new file mode 100755 index 000000000..2089293d6 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/chevron.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/cogs.png b/advanced_project_management_system/static/description/assets/icons/cogs.png new file mode 100755 index 000000000..95d0bad62 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/cogs.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/consultation.png b/advanced_project_management_system/static/description/assets/icons/consultation.png new file mode 100755 index 000000000..8319d4baa Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/consultation.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/ecom-black.png b/advanced_project_management_system/static/description/assets/icons/ecom-black.png new file mode 100755 index 000000000..a9385ff13 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/ecom-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/education-black.png b/advanced_project_management_system/static/description/assets/icons/education-black.png new file mode 100755 index 000000000..3eb09b27b Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/education-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/hotel-black.png b/advanced_project_management_system/static/description/assets/icons/hotel-black.png new file mode 100755 index 000000000..130f613be Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/hotel-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/license.png b/advanced_project_management_system/static/description/assets/icons/license.png new file mode 100755 index 000000000..a5869797e Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/license.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/lifebuoy.png b/advanced_project_management_system/static/description/assets/icons/lifebuoy.png new file mode 100755 index 000000000..658d56ccc Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/lifebuoy.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/manufacturing-black.png b/advanced_project_management_system/static/description/assets/icons/manufacturing-black.png new file mode 100755 index 000000000..697eb0e9f Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/manufacturing-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/pos-black.png b/advanced_project_management_system/static/description/assets/icons/pos-black.png new file mode 100755 index 000000000..97c0f90c1 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/pos-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/puzzle.png b/advanced_project_management_system/static/description/assets/icons/puzzle.png new file mode 100755 index 000000000..65cf854e7 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/puzzle.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/restaurant-black.png b/advanced_project_management_system/static/description/assets/icons/restaurant-black.png new file mode 100755 index 000000000..4a35eb939 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/restaurant-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/service-black.png b/advanced_project_management_system/static/description/assets/icons/service-black.png new file mode 100755 index 000000000..301ab51cb Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/service-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/trading-black.png b/advanced_project_management_system/static/description/assets/icons/trading-black.png new file mode 100755 index 000000000..9398ba2f1 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/trading-black.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/training.png b/advanced_project_management_system/static/description/assets/icons/training.png new file mode 100755 index 000000000..884ca024d Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/training.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/update.png b/advanced_project_management_system/static/description/assets/icons/update.png new file mode 100755 index 000000000..ecbc5a01a Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/update.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/user.png b/advanced_project_management_system/static/description/assets/icons/user.png new file mode 100755 index 000000000..6ffb23d9f Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/user.png differ diff --git a/advanced_project_management_system/static/description/assets/icons/wrench.png b/advanced_project_management_system/static/description/assets/icons/wrench.png new file mode 100755 index 000000000..6c04dea0f Binary files /dev/null and b/advanced_project_management_system/static/description/assets/icons/wrench.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/categories.png b/advanced_project_management_system/static/description/assets/misc/categories.png new file mode 100755 index 000000000..bedf1e0b1 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/categories.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/check-box.png b/advanced_project_management_system/static/description/assets/misc/check-box.png new file mode 100755 index 000000000..42caf24b9 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/check-box.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/compass.png b/advanced_project_management_system/static/description/assets/misc/compass.png new file mode 100755 index 000000000..d5fed8faa Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/compass.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/corporate.png b/advanced_project_management_system/static/description/assets/misc/corporate.png new file mode 100755 index 000000000..2eb13edbf Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/corporate.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/customer-support.png b/advanced_project_management_system/static/description/assets/misc/customer-support.png new file mode 100755 index 000000000..79efc72ed Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/customer-support.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/cybrosys-logo.png b/advanced_project_management_system/static/description/assets/misc/cybrosys-logo.png new file mode 100755 index 000000000..cc3cc0ccf Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/cybrosys-logo.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/features.png b/advanced_project_management_system/static/description/assets/misc/features.png new file mode 100755 index 000000000..b41769f77 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/features.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/logo.png b/advanced_project_management_system/static/description/assets/misc/logo.png new file mode 100755 index 000000000..478462d3e Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/logo.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/pictures.png b/advanced_project_management_system/static/description/assets/misc/pictures.png new file mode 100755 index 000000000..56d255fe9 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/pictures.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/pie-chart.png b/advanced_project_management_system/static/description/assets/misc/pie-chart.png new file mode 100755 index 000000000..426e05244 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/pie-chart.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/right-arrow.png b/advanced_project_management_system/static/description/assets/misc/right-arrow.png new file mode 100755 index 000000000..730984a06 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/right-arrow.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/star.png b/advanced_project_management_system/static/description/assets/misc/star.png new file mode 100755 index 000000000..2eb9ab29f Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/star.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/support.png b/advanced_project_management_system/static/description/assets/misc/support.png new file mode 100755 index 000000000..4f18b8b82 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/support.png differ diff --git a/advanced_project_management_system/static/description/assets/misc/whatsapp.png b/advanced_project_management_system/static/description/assets/misc/whatsapp.png new file mode 100755 index 000000000..d513a5356 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/misc/whatsapp.png differ diff --git a/advanced_project_management_system/static/description/assets/modules/1.png b/advanced_project_management_system/static/description/assets/modules/1.png new file mode 100644 index 000000000..6c8c8adc3 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/1.png differ diff --git a/advanced_project_management_system/static/description/assets/modules/2.png b/advanced_project_management_system/static/description/assets/modules/2.png new file mode 100644 index 000000000..57eebc5b2 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/2.png differ diff --git a/advanced_project_management_system/static/description/assets/modules/3.png b/advanced_project_management_system/static/description/assets/modules/3.png new file mode 100644 index 000000000..c2c620ba2 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/3.png differ diff --git a/advanced_project_management_system/static/description/assets/modules/4.jpg b/advanced_project_management_system/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..9e2de064a Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/4.jpg differ diff --git a/advanced_project_management_system/static/description/assets/modules/5.png b/advanced_project_management_system/static/description/assets/modules/5.png new file mode 100644 index 000000000..81bb12d06 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/5.png differ diff --git a/advanced_project_management_system/static/description/assets/modules/6.png b/advanced_project_management_system/static/description/assets/modules/6.png new file mode 100644 index 000000000..8047cf484 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/modules/6.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/hero.gif b/advanced_project_management_system/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..fb0b4649a Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/hero.gif differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_01.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_01.png new file mode 100755 index 000000000..67b1294b4 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_01.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_02.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_02.png new file mode 100755 index 000000000..6818fb8e4 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_02.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_03.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_03.png new file mode 100755 index 000000000..d792abf47 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_03.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_04.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_04.png new file mode 100755 index 000000000..e19eef5dd Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_04.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_05.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_05.png new file mode 100755 index 000000000..0d02894f5 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_05.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_06.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_06.png new file mode 100755 index 000000000..268170b53 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_06.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_07.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_07.png new file mode 100755 index 000000000..a670ffcfc Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_07.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_08.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_08.png new file mode 100644 index 000000000..2b9876bf2 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_08.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_09.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_09.png new file mode 100755 index 000000000..64e04ecac Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_09.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_10.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_10.png new file mode 100755 index 000000000..36742c196 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_10.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_11.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_11.png new file mode 100755 index 000000000..519889ccd Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_11.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_12.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_12.png new file mode 100755 index 000000000..71e0c7cad Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_12.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_13.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_13.png new file mode 100755 index 000000000..703484952 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_13.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_14.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_14.png new file mode 100755 index 000000000..c3c8b3ff3 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_14.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_15.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_15.png new file mode 100755 index 000000000..233dc26b9 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_15.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_16.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_16.png new file mode 100755 index 000000000..9972a5b96 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_16.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_17.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_17.png new file mode 100755 index 000000000..f5ae50848 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_17.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_18.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_18.png new file mode 100755 index 000000000..480900850 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_18.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_19.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_19.png new file mode 100755 index 000000000..bf96a2bd4 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_19.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_20.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_20.png new file mode 100755 index 000000000..3d9219b98 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_20.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_21.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_21.png new file mode 100755 index 000000000..53c6f88b9 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_21.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_22.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_22.png new file mode 100755 index 000000000..2457d51f1 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_22.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_23.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_23.png new file mode 100755 index 000000000..5cf677dc5 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_23.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_24.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_24.png new file mode 100755 index 000000000..0186ecdc3 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_24.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_25.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_25.png new file mode 100755 index 000000000..6fc187d2c Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_25.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_26.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_26.png new file mode 100755 index 000000000..601eb21ff Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_26.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_27.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_27.png new file mode 100755 index 000000000..ec2b571d5 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_27.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_28.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_28.png new file mode 100755 index 000000000..58804f65d Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_28.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_29.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_29.png new file mode 100755 index 000000000..6551d5132 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_29.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_30.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_30.png new file mode 100644 index 000000000..8b422b541 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_30.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_31.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_31.png new file mode 100644 index 000000000..649043290 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_31.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_32.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_32.png new file mode 100644 index 000000000..d514b0fde Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_32.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_33.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_33.png new file mode 100644 index 000000000..5135f4355 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_33.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_34.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_34.png new file mode 100644 index 000000000..532eb11b1 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_34.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_35.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_35.png new file mode 100644 index 000000000..c0f61dd1c Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_35.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_36.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_36.png new file mode 100644 index 000000000..601029953 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_36.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_37.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_37.png new file mode 100644 index 000000000..bf8380fe7 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_37.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_38.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_38.png new file mode 100644 index 000000000..5320f7cc4 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_38.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_39.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_39.png new file mode 100644 index 000000000..4c416ad8e Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_39.png differ diff --git a/advanced_project_management_system/static/description/assets/screenshots/project_management_40.png b/advanced_project_management_system/static/description/assets/screenshots/project_management_40.png new file mode 100644 index 000000000..f6c2acd17 Binary files /dev/null and b/advanced_project_management_system/static/description/assets/screenshots/project_management_40.png differ diff --git a/advanced_project_management_system/static/description/banner.jpg b/advanced_project_management_system/static/description/banner.jpg new file mode 100755 index 000000000..2c961eeca Binary files /dev/null and b/advanced_project_management_system/static/description/banner.jpg differ diff --git a/advanced_project_management_system/static/description/icon.png b/advanced_project_management_system/static/description/icon.png new file mode 100755 index 000000000..140ed701b Binary files /dev/null and b/advanced_project_management_system/static/description/icon.png differ diff --git a/advanced_project_management_system/static/description/index.html b/advanced_project_management_system/static/description/index.html new file mode 100755 index 000000000..994b34dca --- /dev/null +++ b/advanced_project_management_system/static/description/index.html @@ -0,0 +1,923 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+
+ +
+
+
+ +

+ Advanced Project Management System +

+

+ All and Additional Features of Project Module are in Single + Module

+ + +
+
+
+
+ +
+
+ +
+

+ Explore This + Module

+
+ + + + +
+
+ +
+

+ Overview +

+
+
+
+ This module helps you to get more features on Project management system + ,We have added features related to checklist,documents,stage,milestone, + category,timer, and timesheet related to Project and task and etc +
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ + Option to Manage Project and Task Checklist +
+
+ + Use Checklist Template and Checklist Import + to Checklist for Various Project and Tasks +
+
+ + Manage Milestone for Project and Task +
+
+ + Manage Documents Related to Project and Task +
+
+ + Option to Import Checklist +
+
+ + BurnUp Chart of a Project +
+
+ + Velocity Chart Report of a Project +
+
+
+
+ + Available in Odoo 16.0 + Community & Enterprise. +
+
+ + We can Categories the Project in to Different Categories +
+
+ + Option to Track and Manage Project Issues +
+
+ + Using Project Stage and Stage Template we can Manage Project Staging +
+
+ + We can Update Multiple Task Details Simultaneously +
+
+ + We can Update Multiple Project Stages Simultaneously +
+
+ + We can Add a Shortcut Option, Where We can Add a GitHub Repository to Show About Commits , Pull , Push Requests in our Project or Add a Link of Frequently Used Resources. +
+
+ + Can Add Comments to Project +
+
+
+ + + +
+
+ +
+

+ Screenshots +

+
+
+
+
+

+ Project Milestone Menu +

+

+ Go to Project -> Configuration + -> + You can see a Project Milestone menu +

+ +
+
+

+ Project milestone tree view with group by Project +

+

+ +
+
+

+ Project Milestone form View +

+

+ Click any of the record from the milestone +

+ +
+
+

+ Project Milestone Task Details +

+

+ In the Project milestone form view we can see smart button + having task count +

+ + +
+
+

+ Project Stages +

+

+ Select any Project form view in the status bar we can see the + Project Stage +

+ + +
+
+

+ Project Category Menu +

+

+ Go to Project -> Configuration -> we can see Project Category + menu click on that, or + we can create Project category +

+ + +
+
+

+ Project Category +

+

+ Open a Project under settings tab we can add Project category +

+ +
+
+

+ Task Checklist Import +

+

+ Go to Project -> Configuration -> we can see Task Custom + Checklist Import menu +

+ +
+
+

+ Task Checklist Import Wizard +

+

+ Click on the task custom checklist import menu we can see the + wizard is open + We have the option to import excel and csv files, and we can + download sample file for importing +

+ +
+
+

+ Task Checklist Template +

+

+ Go to Project -> Configuration -> we can see Task Checklist + Template menu click on that +

+ +
+
+

+ Task Checklist Template Form View +

+

+ Click any record or click create button we can create template + and add checklists +

+ +
+
+

+ Add Checklist Template on the Task +

+

+ Go to any task and under checklist tab we can add checklist + template and checklist will + automatically add there +

+ +
+
+

+ Project Custom Checklist Menu +

+

+ Go to ->Project ->Configuration -> we can see Project Custom + Checklist menu and click on that +

+ + +
+
+

+ Project Checklist Template +

+

+ Go to ->Project -> Configuration -> we can see Project + Checklist Template menu, and + we can create one template by adding checklists to it +

+ + +
+
+

+ Add Checklist Template on the Project +

+

+ Go to any Project and under Checklist tab we can add checklist + template and checklist will + automatically add there +

+ +
+
+

+ Project Document Management +

+

+ Go to any Project we can see smart button for documents and + click + on the smart button we can see all the documents related to the + current Project +

+ + +
+
+

+ Project Issue +

+

+ Go to -> Project ->Configuration ->Project Issue menu click on + that we can create new issue +

+ + +
+
+

+ Project Issue in Form View +

+

+ Open a Project we can see smart button named Project issue and + by clicking we can see the Project Issues +

+ + +
+
+

+ Project ShortCuts +

+ +

+ We can add a shortcut option, add a link of frequently used + resources to our project, and also we can add a GitHub + repository to show information about commits , pull , push + requests in our project. +

+ + +
+
+

+ BurnUp Chart and Velocity Chart +

+ +

+ BurnUp Chart of Project +

+ +

+ Velocity Chart of Project +

+ +
+
+

+ Task Type +

+

+ we can choose task type for each Project +

+ +
+
+

+ Comments of a Project +

+

+ we can add comments for each Project from chatter +

+ +

+ Also, we can see the time of all activities of a Project +

+ +
+
+
+ + +
+
+ +
+

+ Related Products +

+
+
+
+ +
+
+ + + +
+
+ +
+

+ Our Services +

+
+
+
+
+
+ +
+
+ Odoo + Customization
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Support
+
+
+
+ +
+
+ Hire + Odoo + Developer
+
+
+
+ +
+
+ Odoo + Integration
+
+
+
+ +
+
+ Odoo + Migration
+
+
+
+ +
+
+ Odoo + Consultancy
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+ +
+

+ Our + Industries +

+
+
+
+
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ diff --git a/advanced_project_management_system/static/src/js/burnup_chart_model.js b/advanced_project_management_system/static/src/js/burnup_chart_model.js new file mode 100644 index 000000000..39d136a55 --- /dev/null +++ b/advanced_project_management_system/static/src/js/burnup_chart_model.js @@ -0,0 +1,25 @@ +/** @odoo-module **/ +import { GraphModel } from "@web/views/graph/graph_model"; +import { registry } from "@web/core/registry"; +export class BurnupChartModel extends GraphModel { + constructor() { + super(...arguments); + this.modelName = "project.task.burnup.chart.report"; + } + /** + * @protected + * @override + */ + async _loadDataPoints(metaData) { + if (!metaData.measures) { + metaData.measures = {}; + } + if (!metaData.measures.__completed) { + metaData.measures.__completed = {}; + } + metaData.measures.__completed.string = this.env._t('Completed Tasks'); + return super._loadDataPoints(metaData); + } +} +// Register the model with the Odoo registry +registry.category("models").add("burnup_chart_model", BurnupChartModel); diff --git a/advanced_project_management_system/static/src/js/burnup_chart_search_model.js b/advanced_project_management_system/static/src/js/burnup_chart_search_model.js new file mode 100644 index 000000000..1531166e0 --- /dev/null +++ b/advanced_project_management_system/static/src/js/burnup_chart_search_model.js @@ -0,0 +1,124 @@ +/** @odoo-module */ +import { useService } from "@web/core/utils/hooks"; +import { SearchModel } from "@web/search/search_model"; +export class BurnupChartSearchModel extends SearchModel { + /** + * @override + */ + setup(services) { + this.notificationService = useService("notification"); + super.setup(...arguments); + } + /** + * @override + */ + async load(config) { + await super.load(...arguments); + // Store date and stage_id searchItemId in the SearchModel for reuse in other functions. + for (const searchItem of Object.values(this.searchItems)) { + if (['dateGroupBy', 'groupBy'].includes(searchItem.type)) { + if (this.stageIdSearchItemId && this.dateSearchItemId) { + return; + } + switch (searchItem.fieldName) { + case 'date': + this.dateSearchItemId = searchItem.id; + break; + case 'stage_id': + this.stageIdSearchItemId = searchItem.id; + break; + } + } + } + } + /** + * @override + */ + deactivateGroup(groupId) { + // Prevent removing Date & Stage group by from the search + if (this.searchItems[this.stageIdSearchItemId].groupId == groupId && this.searchItems[this.dateSearchItemId].groupId) { + this._addGroupByNotification(this.env._t("Date and Stage")); + return; + } + super.deactivateGroup(groupId); + } + /** + * @override + */ + toggleDateGroupBy(searchItemId, intervalId) { + // Ensure that there is always one and only one date group by selected. + if (searchItemId === this.dateSearchItemId) { + let filtered_query = []; + let triggerNotification = false; + for (const queryElem of this.query) { + if (queryElem.searchItemId !== searchItemId) { + filtered_query.push(queryElem); + } else if (queryElem.intervalId === intervalId) { + triggerNotification = true; + } + } + if (filtered_query.length !== this.query.length) { + this.query = filtered_query; + if (triggerNotification) { + this._addGroupByNotification(this.env._t("Date")); + } + } + } + super.toggleDateGroupBy(...arguments); + } + /** + * @override + */ + toggleSearchItem(searchItemId) { + // Ensure that stage_id is always selected. + if (searchItemId === this.stageIdSearchItemId + && this.query.some(queryElem => queryElem.searchItemId === searchItemId)) { + this._addGroupByNotification(this.env._t("Stage")); + return; + } + super.toggleSearchItem(...arguments); + } + /** + * Adds a notification relative to the group by constraint of the Burnup Chart. + * @param fieldName The field name(s) the notification has to be related to. + * @private + */ + _addGroupByNotification(fieldName) { + const notif = this.env._t("The Burnup Chart must be grouped by"); + this.notificationService.add( + `${notif} ${fieldName}`, + { type: "danger" } + ); + } + /** + * @override + */ + async _notify() { + // Ensure that we always group by date firstly and by stage_id secondly + let stageIdIndex = -1; + let dateIndex = -1; + for (const [index, queryElem] of this.query.entries()) { + if (stageIdIndex !== -1 && dateIndex !== -1) { + break; + } + switch (queryElem.searchItemId) { + case this.dateSearchItemId: + dateIndex = index; + break; + case this.stageIdSearchItemId: + stageIdIndex = index; + break; + } + } + if (stageIdIndex > 0) { + if (stageIdIndex > dateIndex) { + dateIndex += 1; + } + this.query.splice(0, 0, this.query.splice(stageIdIndex, 1)[0]); + } + if (dateIndex > 0) { + this.query.splice(0, 0, this.query.splice(dateIndex, 1)[0]); + } + await super._notify(...arguments); + } +} diff --git a/advanced_project_management_system/static/src/js/burnup_chart_view.js b/advanced_project_management_system/static/src/js/burnup_chart_view.js new file mode 100644 index 000000000..7aab1100c --- /dev/null +++ b/advanced_project_management_system/static/src/js/burnup_chart_view.js @@ -0,0 +1,17 @@ +/** @odoo-module **/ +import { BurnupChartModel } from "./burnup_chart_model"; +import { graphView } from "@web/views/graph/graph_view"; +import { registry } from "@web/core/registry"; +import { BurnupChartSearchModel } from "./burnup_chart_search_model"; +const viewRegistry = registry.category("views"); +// Define a Burnup Chart graph view +const burnupChartGraphView = { + ...graphView, + buttonTemplate: "project.BurnupChartView.Buttons", + hideCustomGroupBy: true, + Model: BurnupChartModel, + searchMenuTypes: graphView.searchMenuTypes.filter(menuType => menuType !== "comparison"), + SearchModel: BurnupChartSearchModel, +}; +// Register the Burnup Chart view in the viewRegistry +viewRegistry.add("burnup_chart", burnupChartGraphView); diff --git a/advanced_project_management_system/static/src/js/chatter_time.js b/advanced_project_management_system/static/src/js/chatter_time.js new file mode 100644 index 000000000..c1a21aaba --- /dev/null +++ b/advanced_project_management_system/static/src/js/chatter_time.js @@ -0,0 +1,29 @@ +/** @odoo-module **/ +import { registerPatch } from '@mail/model/model_core'; +import { attr, many, one } from '@mail/model/model_field'; +import '@mail/models/messaging'; +// Register a patch for the 'Message' model +registerPatch({ + name : 'Message', + fields: { + dateDay: { + // Compute the 'dateDay' field + compute() { + if (!this.date) { + return this.env._t("Today"); + } + const date = this.date.format('YYYY-MM-DD'); + if (date === moment().format('YYYY-MM-DD')) { + return this.env._t("Today") + ' ' + moment(this.date).format('HH:mm:ss'); + } else if ( + date === moment() + .subtract(1, 'days') + .format('YYYY-MM-DD') + ) { + return this.env._t("Yesterday") + ' ' + moment(this.date).format('HH:mm:ss'); + } + return this.date.format('MMMM D, YYYY HH:mm:ss'); + }, + }, + }, +}) diff --git a/advanced_project_management_system/static/src/js/chatter_topbar.js b/advanced_project_management_system/static/src/js/chatter_topbar.js new file mode 100644 index 000000000..2a95e1262 --- /dev/null +++ b/advanced_project_management_system/static/src/js/chatter_topbar.js @@ -0,0 +1,48 @@ +/** @odoo-module **/ +import { registerModel, registerPatch } from '@mail/model/model_core'; +import { one, attr, many } from '@mail/model/model_field'; +// Register the 'Comment' model +registerModel({ + name: 'Comment', + fields: { + text: attr(), + chatter: one('Chatter',{ + inverse: 'comments' + }), + author: one('Partner'), + isDeleted: attr({ default: false }), + }, +}); +// Register a patch for the 'Chatter' model +registerPatch({ + name: 'Chatter', + fields: { + partner: one('Partner'), + comments: one('Comment', { + inverse: 'chatter', + }), + }, + recordMethods: { + async onClickComment() { + this.showLogNote(); + this.composerView.composer.update({ placeholder: 'Comments...' }) + }, + onClickSendMessage(ev) { + this._super(ev); + } + } + }); + // Register a patch for the 'MessageView' model +registerPatch({ + name: 'MessageView', + fields: { + notificationIconClassName: { + compute() { + if (this.message && this.message.message_type === 'comment') { + return 'fa fa-comment'; + } + return this._super(); + }, + }, + }, + }); diff --git a/advanced_project_management_system/static/src/js/velocity_chart_model.js b/advanced_project_management_system/static/src/js/velocity_chart_model.js new file mode 100644 index 000000000..8ec29889b --- /dev/null +++ b/advanced_project_management_system/static/src/js/velocity_chart_model.js @@ -0,0 +1,25 @@ +/** @odoo-module **/ +import { GraphModel } from "@web/views/graph/graph_model"; +import { registry } from "@web/core/registry"; +// Define a custom model 'VelocityChartModel' that extends 'GraphModel' +export class VelocityChartModel extends GraphModel { + constructor() { + super(...arguments); + this.modelName = "project.velocity.chart.report"; + } + /** + * @protected + * @override + */ + async _loadDataPoints(metaData) { + if (!metaData.measures) { + metaData.measures = {}; + } + if (!metaData.measures.__completed) { + metaData.measures.__completed = {}; + } + metaData.measures.__completed.string = this.env._t('Done Tasks'); + return super._loadDataPoints(metaData); +} +} +registry.category("models").add("velocity_chart_model", VelocityChartModel); diff --git a/advanced_project_management_system/static/src/js/velocity_chart_search_model.js b/advanced_project_management_system/static/src/js/velocity_chart_search_model.js new file mode 100644 index 000000000..7fed0a1ed --- /dev/null +++ b/advanced_project_management_system/static/src/js/velocity_chart_search_model.js @@ -0,0 +1,85 @@ +/** @odoo-module */ +import { useService } from "@web/core/utils/hooks"; +import { SearchModel } from "@web/search/search_model"; +// Define a custom search model 'VelocityChartSearchModel' that extends 'SearchModel' +export class VelocityChartSearchModel extends SearchModel { + /** + * @override + */ + setup(services) { + this.notificationService = useService("notification"); + super.setup(...arguments); + } + /** + * @override + */ + async load(config) { + await super.load(...arguments); + // Store date searchItemId in the SearchModel for reuse in other functions. + for (const searchItem of Object.values(this.searchItems)) { + if (searchItem.type === 'dateGroupBy') { + if (this.dateSearchItemId) { + return; + } + if (searchItem.fieldName === 'date') { + this.dateSearchItemId = searchItem.id; + } + } + } + } + /** + * @override + */ + toggleDateGroupBy(searchItemId, intervalId) { + // Ensure that there is always one and only one date group by selected. + if (searchItemId === this.dateSearchItemId) { + let filtered_query = []; + let triggerNotification = false; + for (const queryElem of this.query) { + if (queryElem.searchItemId !== searchItemId) { + filtered_query.push(queryElem); + } else if (queryElem.intervalId === intervalId) { + triggerNotification = true; + } + } + if (filtered_query.length !== this.query.length) { + this.query = filtered_query; + if (triggerNotification) { + this._addGroupByNotification(this.env._t("Date")); + } + } + } + super.toggleDateGroupBy(...arguments); + } + /** + * Adds a notification relative to the group by constraint of the Velocity Chart. + * @param fieldName The field name(s) the notification has to be related to. + * @private + */ + _addGroupByNotification(fieldName) { + const notif = this.env._t("The Velocity Chart must be grouped by"); + this.notificationService.add( + `${notif} ${fieldName}`, + { type: "danger" } + ); + } + /** + * @override + */ + async _notify() { + // Ensure that we always group by date + let dateIndex = -1; + for (const [index, queryElem] of this.query.entries()) { + if (dateIndex !== -1) { + break; + } + if (queryElem.searchItemId === this.dateSearchItemId) { + dateIndex = index; + } + } + if (dateIndex > 0) { + this.query.splice(0, 0, this.query.splice(dateIndex, 1)[0]); + } + await super._notify(...arguments); + } +} diff --git a/advanced_project_management_system/static/src/js/velocity_chart_view.js b/advanced_project_management_system/static/src/js/velocity_chart_view.js new file mode 100644 index 000000000..8f1961241 --- /dev/null +++ b/advanced_project_management_system/static/src/js/velocity_chart_view.js @@ -0,0 +1,16 @@ +/** @odoo-module **/ +import { VelocityChartModel } from "./velocity_chart_model"; +import { graphView } from "@web/views/graph/graph_view"; +import { registry } from "@web/core/registry"; +import { VelocityChartSearchModel } from "./velocity_chart_search_model"; +const viewRegistry = registry.category("views"); +// Define a Velocity Chart graph view +const velocityChartGraphView = { + ...graphView, + buttonTemplate: "project.VelocityChartView.Buttons", + hideCustomGroupBy: true, + Model: VelocityChartModel, + searchMenuTypes: graphView.searchMenuTypes.filter(menuType => menuType !== "comparison"), + SearchModel: VelocityChartSearchModel, +}; +viewRegistry.add("velocity_chart", velocityChartGraphView); diff --git a/advanced_project_management_system/static/src/xml/burnup_chart_view.xml b/advanced_project_management_system/static/src/xml/burnup_chart_view.xml new file mode 100644 index 000000000..ed5d523d5 --- /dev/null +++ b/advanced_project_management_system/static/src/xml/burnup_chart_view.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/advanced_project_management_system/static/src/xml/chatter_topbar_templates.xml b/advanced_project_management_system/static/src/xml/chatter_topbar_templates.xml new file mode 100644 index 000000000..78946e41c --- /dev/null +++ b/advanced_project_management_system/static/src/xml/chatter_topbar_templates.xml @@ -0,0 +1,18 @@ + + + + + +
+ + + + diff --git a/advanced_project_management_system/static/src/xml/velocity_chart_view.xml b/advanced_project_management_system/static/src/xml/velocity_chart_view.xml new file mode 100644 index 000000000..96305aaf8 --- /dev/null +++ b/advanced_project_management_system/static/src/xml/velocity_chart_view.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/advanced_project_management_system/static/xls/task_checklist.xlsx b/advanced_project_management_system/static/xls/task_checklist.xlsx new file mode 100755 index 000000000..540886fa7 Binary files /dev/null and b/advanced_project_management_system/static/xls/task_checklist.xlsx differ diff --git a/advanced_project_management_system/views/ir_attachment_views.xml b/advanced_project_management_system/views/ir_attachment_views.xml new file mode 100755 index 000000000..e0905e671 --- /dev/null +++ b/advanced_project_management_system/views/ir_attachment_views.xml @@ -0,0 +1,18 @@ + + + + + ir.attachment.view.form.inherit.advanced.project.management.system + ir.attachment + extension + + + + + + + + + + + diff --git a/advanced_project_management_system/views/project_category_views.xml b/advanced_project_management_system/views/project_category_views.xml new file mode 100755 index 000000000..b6354e66e --- /dev/null +++ b/advanced_project_management_system/views/project_category_views.xml @@ -0,0 +1,51 @@ + + + + + project.category.view.tree + project.category + + + + + + + + + + project.category.view.form + project.category + +
+ + + + + + + + + + +
+
+
+ + + Project Category + project.category + tree,form + +

+ Project Category +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_checklist_template_views.xml b/advanced_project_management_system/views/project_checklist_template_views.xml new file mode 100755 index 000000000..f3e4caa41 --- /dev/null +++ b/advanced_project_management_system/views/project_checklist_template_views.xml @@ -0,0 +1,53 @@ + + + + + project.checklist.template.view.tree + project.checklist.template + + + + + + + + + + project.checklist.template.view.form + project.checklist.template + +
+ + + + + + + + + + +
+
+
+ + + project Checklist template + project.checklist.template + tree,form + +

+ Project Checklist template +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_checklist_views.xml b/advanced_project_management_system/views/project_checklist_views.xml new file mode 100755 index 000000000..dfc92075f --- /dev/null +++ b/advanced_project_management_system/views/project_checklist_views.xml @@ -0,0 +1,52 @@ + + + + + project.checklist.view.tree + project.checklist + + + + + + + + + + + project.checklist.view.form + project.checklist + +
+ + + + + + + + + + + +
+
+
+ + + Project Custom Checklist + project.checklist + tree,form + +

+ Project Custom Checklist +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_issue_views.xml b/advanced_project_management_system/views/project_issue_views.xml new file mode 100755 index 000000000..e5c6d3d11 --- /dev/null +++ b/advanced_project_management_system/views/project_issue_views.xml @@ -0,0 +1,112 @@ + + + + + project.issue.view.tree + project.issue + + + + + + + + + + + + + + + + project.issue.view.form + project.issue + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + project.issue.view.kanban + project.issue + + + > + + +
+
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + + Project Issue + project.issue + tree,form,kanban + +

+ Project Issue +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_milestone_views.xml b/advanced_project_management_system/views/project_milestone_views.xml new file mode 100755 index 000000000..5fda17eba --- /dev/null +++ b/advanced_project_management_system/views/project_milestone_views.xml @@ -0,0 +1,79 @@ + + + + + project.milestone.view.tree + project.milestone + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project.task.type.view.form.inherit.advanced.project.management.system + + project.task.type + extension + + + + + + + + + + + project.project.view.tree.inherit.advanced.project.management.system + + project.project + extension + + + + + + + + diff --git a/advanced_project_management_system/views/project_task_checklist_template_views.xml b/advanced_project_management_system/views/project_task_checklist_template_views.xml new file mode 100755 index 000000000..9077f48e7 --- /dev/null +++ b/advanced_project_management_system/views/project_task_checklist_template_views.xml @@ -0,0 +1,52 @@ + + + + + project.task.checklist.template.view.tree + project.task.checklist.template + + + + + + + + + + project.task.checklist.template.view.form + project.task.checklist.template + +
+ + + + + + + + + + +
+
+
+ + + Task Checklist template + project.task.checklist.template + tree,form + +

+ Task Checklist template +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_task_checklist_views.xml b/advanced_project_management_system/views/project_task_checklist_views.xml new file mode 100755 index 000000000..2421fb6f7 --- /dev/null +++ b/advanced_project_management_system/views/project_task_checklist_views.xml @@ -0,0 +1,52 @@ + + + + + project.task.checklist.view.tree + project.task.checklist + + + + + + + + + + + project.task.checklist.view.form + project.task.checklist + +
+ + + + + + + + + + + +
+
+
+ + + Task Custom Checklist + project.task.checklist + tree,form + +

+ Task Custom Checklist +

+
+
+ + + +
diff --git a/advanced_project_management_system/views/project_task_views.xml b/advanced_project_management_system/views/project_task_views.xml new file mode 100755 index 000000000..04517fee7 --- /dev/null +++ b/advanced_project_management_system/views/project_task_views.xml @@ -0,0 +1,87 @@ + + + + + + project.task.view.form.inherit.advanced.project.management.system + + project.task + extension + + + + + + + + + + + project.task.form2.view.form.inherit.advanced.project.management.system + + project.task + extension + + + + + + + + + + + + + + + + + + +