# -*- coding: utf-8 -*- ############################################################################## # # Cybrosys Technologies Pvt. Ltd. # Copyright (C) 2016-TODAY Cybrosys Technologies(). # Author: Jesni Banu() # 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 # GENERAL PUBLIC LICENSE (LGPL v3) along with this program. # If not, see . # ############################################################################## from dateutil.relativedelta import relativedelta from openerp.report import report_sxw from openerp.osv import osv from openerp import fields class EmployeeWorkloadReportCommon(report_sxw.rml_parse): def __init__(self, cr, uid, name, context=None): super(EmployeeWorkloadReportCommon, self).__init__(cr, uid, name, context=context) self.localcontext.update({ 'get_mxm_workload': self.get_mxm_workload, 'get_line': self.get_lines, }) self.context = context def get_mxm_workload(self, data): start_date = fields.Date.from_string(data['form']['from_date']) end_date = fields.Date.from_string(data['form']['to_date']) no_of_days = relativedelta(end_date, start_date) maximum_workload = data['form']['working_hr'] * no_of_days.days return maximum_workload def get_lines(self, data): obj = self.pool.get('res.users').search(self.cr, self.uid, []) lines = [] for each in obj: workload_hrs = 0.0 workload_perc = 0.0 user_obj = self.pool.get('res.users').browse(self.cr, self.uid, each) obj1 = self.pool.get('project.task').search(self.cr, self.uid, [('user_id', '=', user_obj.id), ('date_deadline', '>=', data['form']['from_date']), ('date_deadline', '<=', data['form']['to_date'])]) for each1 in obj1: task_obj = self.pool.get('project.task').browse(self.cr, self.uid, each1) time_now = fields.Date.from_string(fields.Date.today()) deadline = fields.Date.from_string(task_obj.date_deadline) workload = relativedelta(deadline, time_now) workload_hrs = workload_hrs + workload.days maximum_workload = self.get_mxm_workload(data) workload_perc = (workload_hrs / maximum_workload) * 100 if workload_perc > 100: status = 'Over Workload' elif workload_perc > 75: status = 'Busy' elif workload_perc > 50: status = 'Normal' elif workload_perc > 0: status = 'Less Workload' else: status = 'Free' vals = { 'employee': user_obj.name, 'no_of_works': len(obj1), 'workload': workload_hrs, 'workload_perc': workload_perc, 'status': status, } lines.append(vals) return lines class PrintReport(osv.AbstractModel): _name = 'report.workload_in_project.report_employee_workload' _inherit = 'report.abstract_report' _template = 'workload_in_project.report_employee_workload' _wrapped_report_class = EmployeeWorkloadReportCommon