You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							219 lines
						
					
					
						
							9.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							219 lines
						
					
					
						
							9.0 KiB
						
					
					
				
								# -*- coding: utf-8 -*-
							 | 
						|
								#############################################################################
							 | 
						|
								#
							 | 
						|
								#    Cybrosys Technologies Pvt. Ltd.
							 | 
						|
								#
							 | 
						|
								#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
							 | 
						|
								#    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
							 | 
						|
								#
							 | 
						|
								#    You can modify it under the terms of the GNU LESSER
							 | 
						|
								#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
							 | 
						|
								#
							 | 
						|
								#    This program is distributed in the hope that it will be useful,
							 | 
						|
								#    but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						|
								#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						|
								#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
							 | 
						|
								#
							 | 
						|
								#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
							 | 
						|
								#    (LGPL v3) along with this program.
							 | 
						|
								#    If not, see <http://www.gnu.org/licenses/>.
							 | 
						|
								#
							 | 
						|
								#############################################################################
							 | 
						|
								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',
							 | 
						|
								        }
							 | 
						|
								
							 |