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.
88 lines
3.8 KiB
88 lines
3.8 KiB
# -*- coding: utf-8 -*-
|
|
##############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
# Copyright (C) 2016-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
|
|
# Author: Jesni Banu(<http://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
|
|
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
##############################################################################
|
|
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
|
|
|
|
|