Merge pull request #80 from expsa/fix_api_web

fix api hr mobile
This commit is contained in:
AbuzarExp 2024-07-07 17:17:37 +03:00 committed by GitHub
commit 1baab971e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 93 additions and 37 deletions

View File

@ -314,10 +314,12 @@ class AttendanceController(http.Controller):
"You are not allowed to perform this operation. please check with one of your team admins"),
success=False)
try:
print("******************employee.message_sent:",employee.message_sent)
if json.loads(body['in_zone']):
records = employee.attendance_log_ids.sudo().filtered(lambda r: str(r.date) == str(datetime.today().date()) and r.old == False)
for r in records:
r.old = True
employee.message_sent = False
return http_helper.response(message="Old Record Done", data={'status': True})
else:
@ -326,7 +328,6 @@ class AttendanceController(http.Controller):
limit=1)
if attendance.action == 'sign_in':
records = employee.attendance_log_ids.sudo().filtered(lambda r: r.old == False and str(r.date) == str(datetime.today().date()))
# records = employee.attendance_log_ids.sudo().filtered(lambda r: r.old == False and r.date == str(datetime.today().date()))
if records:
n = len(records)
last = records[n - 1]
@ -335,37 +336,43 @@ class AttendanceController(http.Controller):
if now > last:
diff = now - last
diff = diff.seconds / 60
auto = request.env.user.company_id.auto_checkout if request.env.user.company_id.auto_checkout > 0 else 5
zone = http.request.env['attendance.zone'].search([('employee_ids', 'in', employee.id)],limit=1)
zone_general = http.request.env['attendance.zone'].search([('general', '=', True)],limit=1)
auto = zone.auto_checkout or zone_general.auto_checkout or request.env.user.company_id.auto_checkout or 20
if diff >= auto:
attendance = http.request.env['attendance.attendance'].create({
'employee_id': employee.id,
'action':'sign_out',
'action': 'sign_out',
'action_type': 'auto',
'name': fields.datetime.now(),
# 'device_id': body.get('device_id'),
'zone': "%s,%s" % (body.get('longitude'), body.get('latitude')),
'longitude': body.get('longitude'),
'latitude': body.get('latitude'),
})
msg = (_("Auto Checkout successfully"))
subject = (_("Auto Checkout"))
msg = _("Auto Checkout successfully")
subject = _("Auto Checkout")
self.send_msg(employee, msg, subject)
records = employee.attendance_log_ids.sudo().filtered(
lambda r: str(r.date) == str(datetime.today().date()) and r.old == False)
for r in records:
r.old = True
return http_helper.response(message="Auto Checkout successfully", data={'status': True})
employee.message_sent = False
return http_helper.response(message="Auto Checkout successfully", data={'status': True})
else:
msg = (_("You are out of attendance zone you will be auto sin out "))
subject = (_("Auto Sign out"))
self.send_msg(employee, msg, subject)
return http_helper.response(message="Auto Checkout Fail and Send", data={'status': False})
if not employee.message_sent:
msg = _("You are out of attendance zone you will be auto sign out")
subject = _("Auto Sign out")
self.send_msg(employee, msg, subject)
employee.message_sent = True
return http_helper.response(message="Auto Checkout Fail and Send", data={'status': False})
else:
self.create_log(employee, body.get('longitude'), body.get('latitude'))
msg = (_("You are out of attendance zone you will be auto sin out "))
subject = (_("Auto Sign out"))
self.send_msg(employee, msg, subject)
return http_helper.response(message="Auto Checkout Fail and Send", data={'status': False})
if not employee.message_sent:
msg = _("You are out of attendance zone you will be auto sign out")
subject = _("Auto Sign out")
self.send_msg(employee, msg, subject)
employee.message_sent = True
return http_helper.response(message="Auto Checkout Fail and Send", data={'status': False})
else:
return http_helper.response(message="You are not Checked in yet", data={'status': True})
except Exception as e:
@ -375,6 +382,7 @@ class AttendanceController(http.Controller):
return http_helper.errcode(code=403, message=message)
def send_msg(self, emp, msg, subject):
print("*****************************send")
if emp.user_id.partner_id:
partner_id = emp.user_id.partner_id
partner_id.send_notification(subject, msg, data=None, all_device=True)

View File

@ -25,7 +25,10 @@ class JwtAccessToken(models.Model):
token.is_expired = datetime.now() > token.expires
def access_token_cron(self):
self.search([("is_expired", "=", True)]).unlink()
# self.search([("is_expired", "=", True)]).unlink()
current_time = datetime.now()
expired_tokens = self.search([('expires', '<', current_time)])
expired_tokens.unlink()
return True
def set_env(self,env):

View File

@ -26,6 +26,8 @@ class AttendanceZone(models.Model):
loc_ch_dist = fields.Integer('Location Change Distance - Meter', default=100)
srv_ch_tmout = fields.Integer('Services Change Timeout - Minutes', default=5)
auto_checkout = fields.Integer(string="Auto Checkout After" ,default=10)
@api.constrains('start','end')
def start_end(self):
for rec in self:

View File

@ -13,7 +13,7 @@ class HrEmployee(models.Model):
device_id = fields.Char(string="Employee Device ")
fcm_token = fields.Char(string='FCM Token')
attendance_log_ids = fields.One2many('attendance.log','employee_id',string="Attendance Log")
message_sent = fields.Boolean(string="Message Sent", default=False)
def user_push_notification(self, notification):
url = "https://fcm.googleapis.com/fcm/send"
header = {

View File

@ -97,3 +97,22 @@ class Users(models.Model):
groups.append("group_department_manager")
return groups
@api.model
def create(self, vals):
res = super(Users, self).create(vals)
if 'password' in vals or vals.get('active') is False:
self._invalidate_tokens(res)
return res
def write(self, vals):
result = super(Users, self).write(vals)
if 'password' in vals or 'active' in vals and not vals['active']:
self._invalidate_tokens(self)
return result
def _invalidate_tokens(self, users):
token_model = self.env['jwt_provider.access_token']
for user in users:
token_model.search([('user_id', '=', user.id)]).unlink()

View File

@ -192,9 +192,17 @@ class Validator:
_logger.error(traceback.format_exc())
except (jwt.InvalidTokenError, Exception) as e:
result['code'] = 497
result['message'] = 'Token invalid or expired'
_logger.error(traceback.format_exc())
record = request.env['jwt_provider.access_token'].sudo().search([
('token', '=', token)
])
if not record:
result['message'] = 'Token not found'
result['code'] = 497
return result
else:
result['code'] = 498
result['message'] = 'Token invalid'
_logger.error(traceback.format_exc())
return result
def refresh_token(self, token):
@ -237,9 +245,17 @@ class Validator:
_logger.error(traceback.format_exc())
except (jwt.InvalidTokenError, Exception) as e:
result['code'] = 497
result['message'] = 'Token invalid'
_logger.error(traceback.format_exc())
record = request.env['jwt_provider.access_token'].sudo().search([
('token', '=', token)
])
if not record:
result['message'] = 'Token not found'
result['code'] = 497
return result
else:
result['code'] = 498
result['message'] = 'Token invalid'
_logger.error(traceback.format_exc())
return result
@ -284,9 +300,17 @@ class Validator:
return result
except (jwt.InvalidTokenError, Exception) as e:
result['code'] = 497
result['message'] = 'Token invalid'
_logger.error(traceback.format_exc())
record = request.env['jwt_provider.access_token'].sudo().search([
('token', '=', token)
])
if not record:
result['message'] = 'Token not found'
result['code'] = 497
return result
else:
result['code'] = 498
result['message'] = 'Token invalid'
_logger.error(traceback.format_exc())
return result

View File

@ -15,10 +15,10 @@
</h2>
</div>
<group col="4" colspan="2">
<field name="latitude" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="latitude" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="longitude" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="zone" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="allowed_range" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="zone" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="allowed_range" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="active_check" readonly="1" force_save="1" />
</group>
<group>
@ -29,8 +29,9 @@
<group>
<field name="loc_ch_intv" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}" class="oe_inline"/>
<field name="loc_ch_dist" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="srv_ch_tmout" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="loc_ch_dist" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="srv_ch_tmout" attrs="{'required':[('specific','=',True)],'invisible':[('specific','=',False)]}"/>
<field name="auto_checkout" />
</group>
</group>
@ -70,11 +71,7 @@
<field name="view_mode">tree,form</field>
</record>
<!-- <menuitem-->
<menuitem id="menu_attendance_zone"
name="Attendance Zone"
parent="attendances.menu_hr_attendance_configurations"
sequence="3"
action="attendance_zone_action"/>
<menuitem id="menu_attendance_zone" name="Attendance Zone" parent="attendances.menu_hr_attendance_configurations" sequence="3" action="attendance_zone_action"/>
<!-- config-->

View File

@ -25,7 +25,10 @@ class JwtAccessToken(models.Model):
token.is_expired = datetime.now() > token.expires
def access_token_cron(self):
self.search([("is_expired", "=", True)]).unlink()
# self.search([("is_expired", "=", True)]).unlink()
current_time = datetime.now()
expired_tokens = self.search([('expires', '<', current_time)])
expired_tokens.unlink()
return True
def set_env(self,env):