| 
		 Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB  | 
@ -0,0 +1,24 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-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. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    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/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					import models | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,43 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-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. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    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/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    'name': 'Workload In Project', | 
				
			||||
 | 
					    'version': '10.0.1.0.0', | 
				
			||||
 | 
					    'summary': """Calculate The Workload For Employees In Project""", | 
				
			||||
 | 
					    'description': 'This module helps you to calculate workload for employees', | 
				
			||||
 | 
					    'category': 'Project', | 
				
			||||
 | 
					    'author': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'company': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'website': "http://www.cybrosys.com", | 
				
			||||
 | 
					    'depends': ['base', 'project'], | 
				
			||||
 | 
					    'data': [ | 
				
			||||
 | 
					        'views/employee_workload_report_view.xml', | 
				
			||||
 | 
					        'reports/employee_workload_report.xml', | 
				
			||||
 | 
					    ], | 
				
			||||
 | 
					    'images': ['static/description/banner.jpg'], | 
				
			||||
 | 
					    'license': 'LGPL-3', | 
				
			||||
 | 
					    'demo': [], | 
				
			||||
 | 
					    'installable': True, | 
				
			||||
 | 
					    'auto_install': False, | 
				
			||||
 | 
					    'application': False, | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,25 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-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. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    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/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					import employee_workload_calc | 
				
			||||
 | 
					import employee_workload_parser | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,123 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-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. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    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 datetime import datetime, timedelta | 
				
			||||
 | 
					from odoo import models, fields, api, _ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ResUsersInherit(models.Model): | 
				
			||||
 | 
					    _inherit = 'res.users' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    progress_rate = fields.Integer(string='Workload') | 
				
			||||
 | 
					    maximum_rate = fields.Integer() | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.model | 
				
			||||
 | 
					    def fields_view_get(self, view_id=None, view_type='kanban', toolbar=False, submenu=False): | 
				
			||||
 | 
					        ret_val = super(ResUsersInherit, self).fields_view_get( | 
				
			||||
 | 
					            view_id=view_id, view_type=view_type, | 
				
			||||
 | 
					            toolbar=toolbar, submenu=submenu) | 
				
			||||
 | 
					        for each in self.search([]): | 
				
			||||
 | 
					            workload_hrs = 0.0 | 
				
			||||
 | 
					            workload_perc = 0.0 | 
				
			||||
 | 
					            ir_values = self.env['ir.values'] | 
				
			||||
 | 
					            no_of_days = ir_values.get_default('project.config.settings', 'no_of_days') | 
				
			||||
 | 
					            no_of_hrs = ir_values.get_default('project.config.settings', 'working_hr') | 
				
			||||
 | 
					            if no_of_days: | 
				
			||||
 | 
					                to_date = datetime.today() + timedelta(days=no_of_days) | 
				
			||||
 | 
					            else: | 
				
			||||
 | 
					                to_date = datetime.today() + timedelta(days=6) | 
				
			||||
 | 
					            obj1 = self.env['project.task'].search([('user_id', '=', each.id), | 
				
			||||
 | 
					                                                    ('date_deadline', '>=', fields.Date.today()), | 
				
			||||
 | 
					                                                    ('date_deadline', '<=', to_date)]) | 
				
			||||
 | 
					            for each1 in obj1: | 
				
			||||
 | 
					                time_now = fields.Date.from_string(fields.Date.today()) | 
				
			||||
 | 
					                deadline = fields.Date.from_string(each1.date_deadline) | 
				
			||||
 | 
					                workload = relativedelta(deadline, time_now) | 
				
			||||
 | 
					                workload_hrs = workload_hrs + workload.days | 
				
			||||
 | 
					            start_date = fields.Date.from_string(fields.Date.today()) | 
				
			||||
 | 
					            end_date1 = to_date.strftime('%Y-%m-%d') | 
				
			||||
 | 
					            end_date = fields.Date.from_string(end_date1) | 
				
			||||
 | 
					            no_of_days1 = relativedelta(end_date, start_date) | 
				
			||||
 | 
					            if no_of_hrs: | 
				
			||||
 | 
					                maximum_workload = no_of_hrs * no_of_days1.days | 
				
			||||
 | 
					            else: | 
				
			||||
 | 
					                maximum_workload = 8 * no_of_days1.days | 
				
			||||
 | 
					            workload_perc = (workload_hrs / maximum_workload) * 100 | 
				
			||||
 | 
					            each.write({'maximum_rate': 100, | 
				
			||||
 | 
					                        'progress_rate': workload_perc}) | 
				
			||||
 | 
					        return ret_val | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ProjectSettings(models.TransientModel): | 
				
			||||
 | 
					    _inherit = 'project.config.settings' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    working_hr = fields.Integer(string='Working Hr/day', default=8) | 
				
			||||
 | 
					    no_of_days = fields.Integer(string='No of days for calculation', default=6) | 
				
			||||
 | 
					    block_busy_users = fields.Boolean(string='Block busy users ?', default=False) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    def set_block_busy_users(self): | 
				
			||||
 | 
					        return self.env['ir.values'].sudo().set_default( | 
				
			||||
 | 
					            'project.config.settings', 'block_busy_users', self.block_busy_users) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    def set_working_hr(self): | 
				
			||||
 | 
					        return self.env['ir.values'].sudo().set_default( | 
				
			||||
 | 
					            'project.config.settings', 'working_hr', self.working_hr) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    def set_no_of_days(self): | 
				
			||||
 | 
					        return self.env['ir.values'].sudo().set_default( | 
				
			||||
 | 
					            'project.config.settings', 'no_of_days', self.no_of_days) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ProjectInherit(models.Model): | 
				
			||||
 | 
					    _inherit = 'project.task' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.constrains('user_id') | 
				
			||||
 | 
					    def validation(self): | 
				
			||||
 | 
					        ir_values = self.env['ir.values'] | 
				
			||||
 | 
					        block_users = ir_values.get_default('project.config.settings', 'block_busy_users') | 
				
			||||
 | 
					        if block_users: | 
				
			||||
 | 
					            if self.user_id.progress_rate > 80: | 
				
			||||
 | 
					                raise Warning(_('%s is %s percentage Overloaded with Work') % (self.user_id.name, self.user_id.progress_rate)) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class EmployeeWorkloadReport(models.TransientModel): | 
				
			||||
 | 
					    _name = "wizard.workload.report" | 
				
			||||
 | 
					    _description = "Employee Workload Report" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    working_hr = fields.Integer(string='Working Hr/day', required=True, default=8) | 
				
			||||
 | 
					    from_date = fields.Date(string='From Date', required=True, default=lambda *a: datetime.now().strftime('%Y-%m-%d')) | 
				
			||||
 | 
					    to_date = fields.Date(string='To Date', required=True, default=datetime.today() + timedelta(days=6)) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    def workload_report(self): | 
				
			||||
 | 
					        data = self.read()[0] | 
				
			||||
 | 
					        datas = { | 
				
			||||
 | 
					            'ids': [], | 
				
			||||
 | 
					            'model': 'wizard.workload.report', | 
				
			||||
 | 
					            'form': data | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return self.env['report'].get_action(self, 'workload_in_project.report_employee_workload', data=datas) | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,89 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-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. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    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 odoo.report import report_sxw | 
				
			||||
 | 
					from odoo.osv import osv | 
				
			||||
 | 
					from odoo import fields | 
				
			||||
 | 
					from odoo.http import request | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					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 = request.env['res.users'].search([]) | 
				
			||||
 | 
					        lines = [] | 
				
			||||
 | 
					        for each in obj: | 
				
			||||
 | 
					            workload_hrs = 0.0 | 
				
			||||
 | 
					            workload_perc = 0.0 | 
				
			||||
 | 
					            obj1 = request.env['project.task'].search([('user_id', '=', each.id), | 
				
			||||
 | 
					                                                       ('date_deadline', '>=', data['form']['from_date']), | 
				
			||||
 | 
					                                                       ('date_deadline', '<=', data['form']['to_date'])]) | 
				
			||||
 | 
					            for each1 in obj1: | 
				
			||||
 | 
					                time_now = fields.Date.from_string(fields.Date.today()) | 
				
			||||
 | 
					                deadline = fields.Date.from_string(each1.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': each.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 | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,66 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					    <data> | 
				
			||||
 | 
					        <template id="report_employee_workload"> | 
				
			||||
 | 
					            <t t-call="report.html_container"> | 
				
			||||
 | 
					                <t t-call="report.internal_layout"> | 
				
			||||
 | 
					                    <div class="page"> | 
				
			||||
 | 
					                        <div class="header" style="text-align:center;"><h1><strong>Employee Workload Report</strong></h1></div> | 
				
			||||
 | 
					                        <div class="row mt32 mb32" style="text-align:center;"> | 
				
			||||
 | 
					                            <t t-if="data"> | 
				
			||||
 | 
					                                <div class="col-xs-3"> | 
				
			||||
 | 
					                                    <strong>Working Hour/Day</strong> | 
				
			||||
 | 
					                                    <p t-esc="data['form']['working_hr']"/> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                                <div class="col-xs-3"> | 
				
			||||
 | 
					                                    <strong>From Date:</strong> | 
				
			||||
 | 
					                                    <p t-esc="data['form']['from_date']"/> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                                <div class="col-xs-3"> | 
				
			||||
 | 
					                                    <strong>To Date:</strong> | 
				
			||||
 | 
					                                    <p t-esc="data['form']['to_date']"/> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                                <div class="col-xs-3"> | 
				
			||||
 | 
					                                    <strong>Maximum Workload(hours):</strong> | 
				
			||||
 | 
					                                    <p t-esc="get_mxm_workload(data)"/> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                            </t> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <table class="table table-condensed"> | 
				
			||||
 | 
					                            <thead> | 
				
			||||
 | 
					                                <tr> | 
				
			||||
 | 
					                                    <th>Employee</th> | 
				
			||||
 | 
					                                    <th>No of Works</th> | 
				
			||||
 | 
					                                    <th>Workload</th> | 
				
			||||
 | 
					                                    <th>Workload in %</th> | 
				
			||||
 | 
					                                    <th>Status</th> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                            </thead> | 
				
			||||
 | 
					                            <tbody> | 
				
			||||
 | 
					                                <t t-foreach="get_line(data)" t-as="workload"> | 
				
			||||
 | 
					                                    <tr> | 
				
			||||
 | 
					                                        <td> | 
				
			||||
 | 
					                                            <span t-att-style="style" t-esc="workload['employee']"/> | 
				
			||||
 | 
					                                        </td> | 
				
			||||
 | 
					                                        <td> | 
				
			||||
 | 
					                                            <span t-att-style="style" t-esc="workload['no_of_works']"/> | 
				
			||||
 | 
					                                        </td> | 
				
			||||
 | 
					                                        <td> | 
				
			||||
 | 
					                                            <span t-att-style="style" t-esc="workload['workload']"/> | 
				
			||||
 | 
					                                        </td> | 
				
			||||
 | 
					                                        <td> | 
				
			||||
 | 
					                                            <span t-att-style="style" t-esc="workload['workload_perc']"/> | 
				
			||||
 | 
					                                        </td> | 
				
			||||
 | 
					                                        <td> | 
				
			||||
 | 
					                                            <span t-att-style="style" t-esc="workload['status']"/> | 
				
			||||
 | 
					                                        </td> | 
				
			||||
 | 
					                                    </tr> | 
				
			||||
 | 
					                                </t> | 
				
			||||
 | 
					                            </tbody> | 
				
			||||
 | 
					                        </table> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </t> | 
				
			||||
 | 
					            </t> | 
				
			||||
 | 
					        </template> | 
				
			||||
 | 
					    </data> | 
				
			||||
 | 
					</odoo> | 
				
			||||
| 
		 After Width: | Height: | Size: 124 KiB  | 
| 
		 After Width: | Height: | Size: 76 KiB  | 
| 
		 After Width: | Height: | Size: 50 KiB  | 
| 
		 After Width: | Height: | Size: 22 KiB  | 
@ -0,0 +1,123 @@ | 
				
			|||||
 | 
					    <section class="oe_container"> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <h2 class="oe_slogan">Workload In Project</h2> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Calculate The Workload For Employees In Project</h3> | 
				
			||||
 | 
					            <h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> | 
				
			||||
 | 
					            <div> | 
				
			||||
 | 
					                <h4><p>Features:</p></h4> | 
				
			||||
 | 
					                <ul> | 
				
			||||
 | 
					                    <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Employee workload report.</li> | 
				
			||||
 | 
					                    <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Workload progressbar in kanban view.</li> | 
				
			||||
 | 
					                    <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Raise validation error while assigning task to busy users.</li> | 
				
			||||
 | 
					                    <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Workload Configuration.</li> | 
				
			||||
 | 
					                </ul> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					         </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <section class="oe_container oe_dark"> | 
				
			||||
 | 
					         <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Workload Configuration</h3> | 
				
			||||
 | 
					            <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                        <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="config.png"> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <p class="oe_mt32"> | 
				
			||||
 | 
					                        Users can configure the employee workload settings. Here user can give working hr/day and no of days to calculate workload. | 
				
			||||
 | 
					                        And also user have an option to block busy users from assigning task via ticking 'Block Busy Users' field. | 
				
			||||
 | 
					                    </p> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					         </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <section class="oe_container"> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Employee workload report</h3> | 
				
			||||
 | 
					            <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                        <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="wizard.png"> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <p class="oe_mt32"> | 
				
			||||
 | 
					                            <p>Project ---> Report ---> Employee Workload</p> | 
				
			||||
 | 
					                        <p>This wizard allows you to take Employee Workload Report. Here You can give from date, to date and working hr/day. Then you will get corresponding Report.  </p> | 
				
			||||
 | 
					                    </p> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                        <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="report.png"> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <section class="oe_container oe_dark"> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Workload progressbar in kanban view</h3> | 
				
			||||
 | 
					            <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                        <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="users.png"> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					            <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					                <p> | 
				
			||||
 | 
					                    Here you can see workload progress bar for each users. | 
				
			||||
 | 
					                </p> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <section class="oe_container "> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Validation for Busy Users</h3> | 
				
			||||
 | 
					            <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                        <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="validation1.png"> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <div class="oe_span12"> | 
				
			||||
 | 
					                    <p class="oe_mt32"> | 
				
			||||
 | 
					                       If you tick on 'Block busy users' from configuration then the module will raise a warning when you try to assign work for busy users. | 
				
			||||
 | 
					                    </p> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <section class="oe_container oe_dark"> | 
				
			||||
 | 
					            <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | 
				
			||||
 | 
					            <div class="oe_slogan" style="margin-top:10px !important;"> | 
				
			||||
 | 
					                <div> | 
				
			||||
 | 
					                    <a  class="btn btn-primary btn-lg mt8" | 
				
			||||
 | 
					                    style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i | 
				
			||||
 | 
					                    class="fa fa-envelope"></i> Email </a> <a | 
				
			||||
 | 
					                    class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			||||
 | 
					                    href="http://www.cybrosys.com/contact/"><i | 
				
			||||
 | 
					                    class="fa fa-phone"></i> Contact Us </a> <a | 
				
			||||
 | 
					                    class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			||||
 | 
					                    href="http://www.cybrosys.com/odoo-customization-and-installation/"><i | 
				
			||||
 | 
					                    class="fa fa-check-square"></i> Request Customization </a> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					                <br> | 
				
			||||
 | 
					                <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | 
				
			||||
 | 
					                <div> | 
				
			||||
 | 
					                  <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> | 
				
			||||
 | 
					                  <a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					                  <a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> | 
				
			||||
 | 
					                  <a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					                  <a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					    </section> | 
				
			||||
| 
		 After Width: | Height: | Size: 30 KiB  | 
| 
		 After Width: | Height: | Size: 76 KiB  | 
| 
		 After Width: | Height: | Size: 12 KiB  | 
| 
		 After Width: | Height: | Size: 13 KiB  | 
@ -0,0 +1,114 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					    <data> | 
				
			||||
 | 
					        <record model='ir.ui.view' id='wizard_workload_report_form_view'> | 
				
			||||
 | 
					            <field name="name">wizard.workload.report.form</field> | 
				
			||||
 | 
					            <field name="model">wizard.workload.report</field> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					                <form string="Employee Workload Report"> | 
				
			||||
 | 
					                    <group> | 
				
			||||
 | 
					                        <group> | 
				
			||||
 | 
					                            <field name="from_date"/> | 
				
			||||
 | 
					                            <field name="to_date"/> | 
				
			||||
 | 
					                        </group> | 
				
			||||
 | 
					                        <group> | 
				
			||||
 | 
					                            <field name="working_hr"/> | 
				
			||||
 | 
					                        </group> | 
				
			||||
 | 
					                    </group> | 
				
			||||
 | 
					                    <footer> | 
				
			||||
 | 
					                        <button name="workload_report" type="object" default_focus="1" | 
				
			||||
 | 
					                                string="Print" class="oe_highlight" | 
				
			||||
 | 
					                                icon='fa-print'/> | 
				
			||||
 | 
					                        or | 
				
			||||
 | 
					                        <button string="Cancel" class="oe_link" special="cancel" /> | 
				
			||||
 | 
					                    </footer> | 
				
			||||
 | 
					                </form> | 
				
			||||
 | 
					            </field> | 
				
			||||
 | 
					        </record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <record model='ir.actions.act_window' id='wizard_workload_report_act'> | 
				
			||||
 | 
					            <field name="name">Employee Workload Report</field> | 
				
			||||
 | 
					            <field name="res_model">wizard.workload.report</field> | 
				
			||||
 | 
					            <field name="view_type">form</field> | 
				
			||||
 | 
					            <field name="view_mode">form</field> | 
				
			||||
 | 
					            <field name="view_id" ref="wizard_workload_report_form_view"/> | 
				
			||||
 | 
					            <field name="target">new</field> | 
				
			||||
 | 
					        </record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <record model="ir.ui.view" id="res_user_kanban_view"> | 
				
			||||
 | 
					            <field name="name">res.users.kanban</field> | 
				
			||||
 | 
					            <field name="model">res.users</field> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					                <kanban class="o_res_partner_kanban"> | 
				
			||||
 | 
					                    <field name="color"/> | 
				
			||||
 | 
					                    <field name="display_name"/> | 
				
			||||
 | 
					                    <field name="email"/> | 
				
			||||
 | 
					                    <field name="image"/> | 
				
			||||
 | 
					                    <field name="progress_rate"/> | 
				
			||||
 | 
					                    <field name="maximum_rate"/> | 
				
			||||
 | 
					                    <field name="image"/> | 
				
			||||
 | 
					                    <templates> | 
				
			||||
 | 
					                        <t t-name="kanban-box"> | 
				
			||||
 | 
					                            <div class="oe_kanban_content"> | 
				
			||||
 | 
					                                <div> | 
				
			||||
 | 
					                                    <div style="display: inline-block"> | 
				
			||||
 | 
					                                         <div class="o_kanban_image"> | 
				
			||||
 | 
					                                            <t t-if="record.image.raw_value"> | 
				
			||||
 | 
					                                                <img t-att-src="kanban_image('res.users', 'image_small', record.id.value)"/> | 
				
			||||
 | 
					                                            </t> | 
				
			||||
 | 
					                                         </div> | 
				
			||||
 | 
					                                        <div class="oe_kanban_details"> | 
				
			||||
 | 
					                                            <strong class="oe_partner_heading"><field name="display_name"/></strong> | 
				
			||||
 | 
					                                            <ul> | 
				
			||||
 | 
					                                                <li t-if="record.email.raw_value" class="o_text_overflow"><field name="email"/></li> | 
				
			||||
 | 
					                                            </ul> | 
				
			||||
 | 
					                                            <div class="oe_kanban_partner_links"/> | 
				
			||||
 | 
					                                        </div> | 
				
			||||
 | 
					                                        <field name="progress_rate" widget="gauge" style="width:120px; height: 90px;" | 
				
			||||
 | 
					                                                options="{'max_field': 'maximum_rate'}"/> | 
				
			||||
 | 
					                                    </div> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                            </div> | 
				
			||||
 | 
					                        </t> | 
				
			||||
 | 
					                    </templates> | 
				
			||||
 | 
					                </kanban> | 
				
			||||
 | 
					            </field> | 
				
			||||
 | 
					        </record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <record id="project_inherit_config_settings" model="ir.ui.view"> | 
				
			||||
 | 
					            <field name="name">project settings</field> | 
				
			||||
 | 
					            <field name="model">project.config.settings</field> | 
				
			||||
 | 
					            <field name="inherit_id" ref="project.view_config_settings"/> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					                <xpath expr="//group[2]" position="after"> | 
				
			||||
 | 
					                    <group string="Employee Workload"> | 
				
			||||
 | 
					                        <field name="working_hr"/> | 
				
			||||
 | 
					                        <field name="no_of_days"/> | 
				
			||||
 | 
					                        <field name="block_busy_users"/> | 
				
			||||
 | 
					                    </group> | 
				
			||||
 | 
					                </xpath> | 
				
			||||
 | 
					            </field> | 
				
			||||
 | 
					        </record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					         <record id="project_action_res_users" model="ir.actions.act_window"> | 
				
			||||
 | 
					            <field name="name">Project Users</field> | 
				
			||||
 | 
					            <field name="type">ir.actions.act_window</field> | 
				
			||||
 | 
					            <field name="res_model">res.users</field> | 
				
			||||
 | 
					            <field name="view_type">form</field> | 
				
			||||
 | 
					            <field name="view_mode">kanban</field> | 
				
			||||
 | 
					            <field name="view_id" ref="res_user_kanban_view"/> | 
				
			||||
 | 
					        </record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <report id="action_employee_workload" | 
				
			||||
 | 
					                model="hr.employee" | 
				
			||||
 | 
					                report_type="qweb-pdf" | 
				
			||||
 | 
					                string="Employee Workload Report" | 
				
			||||
 | 
					                name="workload_in_project.report_employee_workload" | 
				
			||||
 | 
					                file="workload_in_project.report_employee_workload"/> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <menuitem name="Report" parent="project.menu_main_pm" id="workload_report" sequence="5"/> | 
				
			||||
 | 
					        <menuitem name="Users" parent="project.menu_main_pm" id="project_users" action="project_action_res_users" sequence="4"/> | 
				
			||||
 | 
					        <menuitem name="Employee Workload" parent="workload_report" id="employee_workload_report" action="wizard_workload_report_act" sequence="1"/> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    </data> | 
				
			||||
 | 
					</odoo> | 
				
			||||