block timesheet entry for user

This commit is contained in:
pawan.sharma 2022-09-02 15:12:13 +05:30
parent eace205a16
commit 1aa6464674
10 changed files with 235 additions and 0 deletions

View File

@ -0,0 +1,2 @@
from . import models
from . import wizard

View File

@ -0,0 +1,18 @@
{
'name': 'Timesheet Entry Block',
'version': '1.0.1',
'summary': 'This module is block to users to fill timehseet entry',
'description': 'This module is block to users to fill timehseet entry',
'category': 'Employee',
'author': 'SunArc Technologies',
'website': 'www.sunarctechnologies.com',
'license': 'LGPL-3',
'depends': ['base','hr','hr_timesheet','project'],
'data': [
'security/ir.model.access.csv',
'wizard/date_assign.xml',
'views/timesheet.xml',
],
'installable': True,
'auto_install': False,
}

View File

@ -0,0 +1 @@
from . import timesheet

View File

@ -0,0 +1,97 @@
from odoo import api, fields, models
from odoo.exceptions import UserError, AccessError, ValidationError
from datetime import datetime
from dateutil import relativedelta
class EmployeeInherit(models.Model):
_inherit = 'hr.employee'
permission_block_history = fields.One2many(comodel_name="timesheet.block.history", inverse_name="employee_id",
string="History", required=False )
class EmployeePublicInherit(models.Model):
_inherit = 'hr.employee.public'
permission_block_history = fields.One2many(comodel_name="timesheet.block.history", inverse_name="employee_id",
string="History", required=False )
class TimesheetBlock(models.Model):
_name = 'timesheet.block.history'
start_date = fields.Date('Start Date')
end_date = fields.Date('End Date')
reason = fields.Text('Reason')
user_id = fields.Many2one('res.users', string='Given By')
employee_id = fields.Many2one(comodel_name="hr.employee", string="Employee", required=False)
class TimehseetBlock(models.Model):
_inherit = 'account.analytic.line'
@api.model
def create(self, values):
entry_start_date = datetime.strptime(str(values['start_datetime']),"%Y-%m-%d %H:%M:%S").date()
entry_end_date = datetime.strptime(values['end_datetime'],"%Y-%m-%d %H:%M:%S").date()
employee_object = self.env['hr.employee'].search([('user_id', '=', self.env.uid)])
project_manager_group = self.env.ref('hr_timesheet.group_timesheet_manager')
if self.env.uid not in project_manager_group.users.ids:
permission_block_object = employee_object.permission_block_history.search(
[('employee_id', '=', employee_object.id)],order='create_date desc', limit=1)
if permission_block_object:
if (permission_block_object.start_date <= entry_start_date and permission_block_object.end_date >= entry_start_date) or (
permission_block_object.start_date <= entry_end_date and permission_block_object.end_date >= entry_end_date):
raise AccessError('You are not allowed to create entry for this date!')
else:
pass
return super(TimehseetBlock, self).create(values)
def write(self, record):
if 'start_datetime' in record or 'end_datetime' in record or 'project_id' in record or 'sub_project' in record or 'task_id' in record or 'description' in record:
if 'start_datetime' in record and 'end_datetime' not in record:
entry_start_date = datetime.strptime(str(record['start_datetime']),"%Y-%m-%d %H:%M:%S").date()
entry_end_date = datetime.strptime(str(self.end_datetime),"%Y-%m-%d %H:%M:%S").date()
elif 'start_datetime' not in record and 'end_datetime' in record:
entry_start_date = datetime.strptime(str(self.start_datetime), "%Y-%m-%d %H:%M:%S").date()
entry_end_date = datetime.strptime(str(record['end_datetime']), "%Y-%m-%d %H:%M:%S").date()
elif 'start_datetime' in record and 'end_datetime' in record:
entry_start_date = datetime.strptime(str(record['start_datetime']),"%Y-%m-%d %H:%M:%S").date()
entry_end_date = datetime.strptime(str(record['end_datetime']), "%Y-%m-%d %H:%M:%S").date()
else:
res_start_date = str(self.start_datetime).split('.', 1)[0]
res_end_date = str(self.end_datetime).split('.', 1)[0]
entry_start_date = datetime.strptime(str(res_start_date), '%Y-%m-%d %H:%M:%S').date()
entry_end_date = datetime.strptime(str(res_end_date), '%Y-%m-%d %H:%M:%S').date()
employee_object = self.env['hr.employee'].search([('user_id', '=', self.env.uid)])
project_manager_group = self.env.ref('hr_timesheet.group_timesheet_manager')
if self.env.uid not in project_manager_group.users.ids:
if self.user_id.id == self.env.uid:
permission_block_object = employee_object.permission_block_history.search(
[('employee_id', '=', employee_object.id)], order='create_date desc', limit=1)
if permission_block_object:
if (
permission_block_object.start_date <= entry_start_date and permission_block_object.end_date >= entry_start_date) or (
permission_block_object.start_date <= entry_end_date and permission_block_object.end_date >= entry_end_date):
raise AccessError('You are not allowed to edit entry for this date!')
else:
pass
return super(TimehseetBlock, self).write(record)
@api.constrains('unit_amount')
def _check_unit_amount(self):
for rec in self:
if rec.unit_amount < 0.0:
raise AccessError('End date should be greater than start date!')
@api.constrains('end_datetime')
def _check_end_datetime(self):
current_date = datetime.today().date()
for rec in self:
if rec.end_datetime:
end_date = datetime.strptime(str(self.end_datetime), "%Y-%m-%d %H:%M:%S").date()
if end_date > current_date:
raise AccessError('End date cannot be a future date!')

View File

@ -0,0 +1 @@
,sunarcmanish,sunarcmanish,20.07.2020 23:42,file:///home/sunarcmanish/.config/libreoffice/4;

View File

@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_timesheet_permission_history_manager,access.timesheet.block.history.manager,model_timesheet_block_history,hr_timesheet.group_timesheet_manager,1,1,1,1
access_timesheet_permission_history_user,access.timesheet.block.history.user,model_timesheet_block_history,hr_timesheet.group_hr_timesheet_user,1,1,1,0
access_back_date_assign_user,access.back.date.assign.user,model_back_date_assign,hr_timesheet.group_timesheet_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_timesheet_permission_history_manager access.timesheet.block.history.manager model_timesheet_block_history hr_timesheet.group_timesheet_manager 1 1 1 1
3 access_timesheet_permission_history_user access.timesheet.block.history.user model_timesheet_block_history hr_timesheet.group_hr_timesheet_user 1 1 1 0
4 access_back_date_assign_user access.back.date.assign.user model_back_date_assign hr_timesheet.group_timesheet_manager 1 1 1 1

View File

@ -0,0 +1,50 @@
<!-- Inherit Form View to Modify it -->
<odoo>
<record id="view_employee_form_timehseet_block" model="ir.ui.view">
<field name="name">hr.employee.timesheet.block.inherit</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='personal_information']" position="after">
<page name="'timehseet_block" string="Timesheet Block">
<button name="%(timesheet_entry_block.action_back_date_assign)d" string="Block Date"
type="action" groups="hr.group_hr_manager"
class="oe_highlight"/>
<group/>
<field name="permission_block_history" readonly="1" groups="hr_timesheet.group_timesheet_manager">
<tree editable="bottom">
<field name="start_date"/>
<field name="end_date"/>
<field name="reason"/>
<field name="user_id"
options="{'no_create': True, 'no_create_edit':True, 'no_open': True}"/>
<field name="employee_id" invisible="1"
options="{'no_create': True, 'no_create_edit':True, 'no_open': True}"/>
</tree>
<form>
<sheet>
<group>
<group>
<field name="start_date"/>
<field name="end_date"/>
<field name="user_id"
options="{'no_create': True, 'no_create_edit':True, 'no_open': True}"/>
</group>
<group>
<field name="employee_id"
options="{'no_create': True, 'no_create_edit':True, 'no_open': True}"/>
</group>
</group>
<group>
<field name="reason"/>
</group>
</sheet>
</form>
</field>
</page>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,4 @@
from . import date_assign

View File

@ -0,0 +1,22 @@
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class ProjectCloseDate(models.TransientModel):
_name = "back.date.assign"
_description = "Timesheet Back Date Assign"
start_date = fields.Date('Start Date')
end_date = fields.Date('End Date')
reason = fields.Text('Reason', required=True)
def action_compute_project_close(self):
employee_obj = self.env['hr.employee'].browse(self._context.get('active_ids', []))
print("employee_obj", employee_obj)
employee_obj.permission_block_history.create({'employee_id': employee_obj.id,
'start_date': self.start_date,
'end_date': self.end_date,
'reason': self.reason,
'user_id': self.env.uid})

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_back_date_assign" model="ir.ui.view">
<field name="name">back.date.assign.from</field>
<field name="model">back.date.assign</field>
<field name="arch" type="xml">
<form string="Project Close">
<group>
<group>
<field name="start_date" required="1"/>
<field name="end_date" required="1"/>
</group>
</group>
<group>
<field name="reason"/>
</group>
<footer>
<button string="OK" type="object" name="action_compute_project_close" class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_back_date_assign" model="ir.actions.act_window">
<field name="name">Timesheet Date Assign</field>
<!-- <field name="type">ir.actions.act_window</field>-->
<field name="res_model">back.date.assign</field>
<!-- <field name="view_type">form</field>-->
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>