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.
		
		
		
		
		
			
		
			
				
					
					
						
							96 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							96 lines
						
					
					
						
							4.1 KiB
						
					
					
				| from odoo import models, fields, api | |
| from dateutil.relativedelta import relativedelta | |
| 
 | |
| 
 | |
| class ProjectCustom(models.Model): | |
|     _inherit = 'project.task' | |
| 
 | |
|     @api.model | |
|     def _check_ami_responsible(self): | |
|         """ Checks if user is responsible for this request | |
|         @return: Dictionary of values | |
|         """ | |
|         flag_poject_manager = self.env['res.users'].has_group('project.group_project_manager') | |
|         flag_project_user = self.env['res.users'].has_group('project.group_project_user') | |
|         for each in self: | |
| 
 | |
|             if flag_poject_manager: | |
|                 each.get_user = True | |
|             elif flag_project_user: | |
|                 each.get_user = False | |
|             else: | |
|                 each.get_user = False | |
| 
 | |
|     get_user = fields.Boolean(string='Is Top User', compute=_check_ami_responsible) | |
|     done_time=fields.Datetime(compute='done_date',string="Color") | |
|     progress1 = fields.Integer(string="Working Time Progress(%)", copy=False, readonly=True) | |
| 
 | |
|     deadline_color = fields.Char(compute='compute_color',) | |
|     task_time = fields.Float(string="Time Range", copy=True) | |
|     date_deadline_ex = fields.Datetime('Deadline', select=True, copy=False, required=True) | |
|     kanban_state = fields.Selection( | |
|         [('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')], 'Kanban State', | |
|         track_visibility='onchange', | |
|         help="A task's kanban state indicates special situations affecting it:\n" | |
|              " * Normal is the default situation\n" | |
|              " * Blocked indicates something is preventing the progress of this task\n" | |
|              " * Ready for next stage indicates the task is ready to be pulled to the next stage", | |
|         required=False, copy=False) | |
| 
 | |
|     _defaults = { | |
|         'get_user': True, | |
|     } | |
| 
 | |
|     def compute_color(self): | |
| 
 | |
|         obj = self.env['project.task'] | |
|         obj1 = obj.search([]) | |
|         now = fields.Datetime.from_string(fields.Datetime.now()) | |
|         for obj2 in obj1: | |
| 
 | |
|             obj3 = obj2 | |
|             if obj3.stage_id.name != 'Done' and obj3.stage_id.name != 'Cancelled' and obj3.stage_id.name != 'Verified': | |
| 
 | |
|                 end_date = fields.Datetime.from_string(obj3.date_deadline_ex) | |
| 
 | |
|                 deadline_count = relativedelta(end_date, now) | |
|                 if deadline_count.seconds < 0: | |
|                    obj3.deadline_color = 'red' | |
|                 else: | |
|                     obj3.deadline_color = 'nothing' | |
| 
 | |
|             elif obj3.stage_id.name == 'Done' or obj3.stage_id.name == 'Verified': | |
| 
 | |
|                 if obj3.progress1 < 100: | |
|                         obj3.deadline_color = 'green' | |
|                 else: | |
|                         obj3.deadline_color = 'red' | |
| 
 | |
|     def process_demo_scheduler_queue(self): | |
| 
 | |
|         obj = self.env['project.task'] | |
|         obj1 = obj.search([]) | |
|         now = fields.Datetime.from_string(fields.Datetime.now()) | |
|         for obj2 in obj1: | |
|             obj3 = obj2 | |
|             if obj3.stage_id.name != 'Done' and obj3.stage_id.name != 'Cancelled' and obj3.stage_id.name != 'Verified': | |
|                 start_date = fields.Datetime.from_string(obj3.date_assign) | |
|                 end_date = fields.Datetime.from_string(obj3.date_deadline_ex) | |
|                 if obj3.date_deadline_ex and obj3.date_assign and end_date > start_date: | |
|                     if now < end_date: | |
|                         dif_tot = relativedelta(end_date, start_date) | |
|                         dif_minut = dif_tot.hours * 60 + dif_tot.minutes | |
|                         diff1 = end_date - start_date | |
|                         total_minut = int(diff1.days) * 24 * 60 + dif_minut | |
|                         dif2_tot = relativedelta(now, start_date) | |
|                         dif2_minut = dif2_tot.hours * 60 + dif2_tot.minutes | |
|                         diff2 = now - start_date | |
|                         used_minut = int(diff2.days) * 24 * 60 + dif2_minut | |
|                         if total_minut != 0: | |
|                             obj3.progress1 = ((used_minut * 100) / total_minut) | |
|                         else: | |
|                             obj3.progress1 = 100 | |
|                     else: | |
|                         obj3.progress1 = 100 | |
|                 else: | |
|                     obj3.progress1 = 0
 | |
| 
 |