wahyuun
10 months ago
2 changed files with 215 additions and 215 deletions
@ -1,17 +1,17 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class ProjectRole extends Model |
||||
{ |
||||
protected $table = 'm_role_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class ProjectRole extends Model |
||||
{ |
||||
protected $table = 'm_role_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', 'description', 'created_at', 'created_by', 'updated_at', 'company_id', 'updated_by' |
||||
]; |
||||
} |
||||
|
@ -1,198 +1,198 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Tymon\JWTAuth\Contracts\JWTSubject; |
||||
use Illuminate\Auth\Authenticatable; |
||||
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; |
||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; |
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Laravel\Lumen\Auth\Authorizable; |
||||
use Carbon\Carbon; |
||||
|
||||
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject |
||||
{ |
||||
use Authenticatable, Authorizable, HasFactory; |
||||
|
||||
protected $table = 'm_users'; |
||||
/** |
||||
* The attributes that are mass assignable. |
||||
* |
||||
* @var array |
||||
*/ |
||||
protected $fillable = [ |
||||
'name', 'email', 'role_id', 'username', 'session_login', 'phone_number', 'email', 'address', |
||||
'fcm_token', 'gender', 'birth_place', 'birth_date', 'blood_type', 'ktp_number', 'working_hours', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by', 'status_resource', 'discount_id' |
||||
]; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
const DEFAULT_TZ = 'Asia/Jakarta'; |
||||
const INSIDE = "INSIDE"; |
||||
const OUTSIDE = "OUTSIDE"; |
||||
const HOLIDAY = "HOLIDAY"; |
||||
|
||||
/** |
||||
* The attributes excluded from the model's JSON form. |
||||
* |
||||
* @var array |
||||
*/ |
||||
protected $hidden = [ |
||||
'password', |
||||
]; |
||||
|
||||
/** |
||||
* Get the identifier that will be stored in the subject claim of the JWT. |
||||
* |
||||
* @return mixed |
||||
*/ |
||||
public function getJWTIdentifier() |
||||
{ |
||||
return $this->getKey(); |
||||
} |
||||
|
||||
/** |
||||
* Return a key value array, containing any custom claims to be added to the JWT. |
||||
* |
||||
* @return array |
||||
*/ |
||||
public function getJWTCustomClaims() |
||||
{ |
||||
return []; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get working hours for given timestamp |
||||
* |
||||
* @return array of carbon or NULL in case HOLIDAY |
||||
*/ |
||||
|
||||
public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ) |
||||
{ |
||||
$workingTime = array( |
||||
"from" => Carbon::createFromTimeString($f, $tz), |
||||
"to" => Carbon::createFromTimeString($t, $tz) |
||||
); |
||||
|
||||
$userShift = UserShift::where('user_id',) |
||||
->orderByDesc('from_date') |
||||
->first(); |
||||
|
||||
$shift = null; |
||||
if ($userShift !== null) { |
||||
$shiftId = null; |
||||
switch ($ts->shortEnglishDayOfWeek) { |
||||
case "Mon": |
||||
$shiftId = $userShift->mon_shift_id; |
||||
break; |
||||
case "Tue": |
||||
$shiftId = $userShift->tue_shift_id; |
||||
break; |
||||
case "Wed": |
||||
$shiftId = $userShift->wed_shift_id; |
||||
break; |
||||
case "Thu": |
||||
$shiftId = $userShift->thu_shift_id; |
||||
break; |
||||
case "Fri": |
||||
$shiftId = $userShift->fri_shift_id; |
||||
break; |
||||
case "Sat": |
||||
$shiftId = $userShift->sat_shift_id; |
||||
break; |
||||
case "Sun": |
||||
$shiftId = $userShift->sun_shift_id; |
||||
break; |
||||
} |
||||
|
||||
if ($shiftId === null) { |
||||
return null; |
||||
} |
||||
|
||||
$shift = Shift::where('id', $shiftId)->first(); |
||||
} else { |
||||
$shift = Shift::where('is_non_shift', true) |
||||
->orderByDesc('created_at') |
||||
->first(); |
||||
} |
||||
|
||||
|
||||
if ($shift !== null) { |
||||
$from = Carbon::createFromTimeString($shift->start_time, $tz) |
||||
->subMinutes($shift->flex_time_minute); |
||||
$to = Carbon::createFromTimeString($shift->end_time, $tz) |
||||
->addMinutes($shift->flex_time_minute); |
||||
|
||||
/* |
||||
if ($to->lessThan($from)) |
||||
{ |
||||
$to->addDay(); |
||||
} |
||||
*/ |
||||
$workingTime['from'] = $from; |
||||
$workingTime['to'] = $to; |
||||
} |
||||
|
||||
return $workingTime; |
||||
} |
||||
|
||||
/** |
||||
* Get presence status |
||||
*/ |
||||
public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ) |
||||
{ |
||||
|
||||
$ts = $at; |
||||
if ($at !== null) { |
||||
$ts = Carbon::now($tz); |
||||
} |
||||
$tsSec = $ts->secondsSinceMidnight(); |
||||
|
||||
$status = ""; |
||||
$wt = $this->getWorkingTime($ts, $tz); |
||||
if ($wt === null) { |
||||
$status = self::HOLIDAY; |
||||
} else { |
||||
$from = $wt->from; |
||||
$to = $wt->to; |
||||
$tsFrom = $from->secondsSinceMidnight(); |
||||
$tsTo = $to->secondsSinceMidnight(); |
||||
|
||||
if ($from->greaterThan($to)) { |
||||
$tsMid = 24 * 60 * 60 - $tsFrom; |
||||
if ($tsSec >= $tsFrom || $tsSec < $tsTo) { |
||||
$status = self::INSIDE; |
||||
} else { |
||||
$status = self::OUTSIDE; |
||||
} |
||||
} else { |
||||
if ($tsSec < $tsFrom || $tsSec > $tsTo) { |
||||
$status = self::OUTSIDE; |
||||
} else { |
||||
$status = self::INSIDE; |
||||
} |
||||
} |
||||
} |
||||
|
||||
$clockIn = null; |
||||
$clockOut = null; |
||||
$inout = Presence::where('user_id', $this->id) |
||||
->orderByDesc('clock_in') |
||||
->first(); |
||||
if ($inout !== null) { |
||||
$clockIn = Carbon::parse($inout->clock_in, $tz); |
||||
$clockOut = Carbon::parse($inout->clock_out, $tz); |
||||
} |
||||
|
||||
return array( |
||||
"status" => $status, |
||||
"ts" => $ts, |
||||
"clock_in" => $clockIn, |
||||
"clock_out" => $clockOut |
||||
); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Tymon\JWTAuth\Contracts\JWTSubject; |
||||
use Illuminate\Auth\Authenticatable; |
||||
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; |
||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; |
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Laravel\Lumen\Auth\Authorizable; |
||||
use Carbon\Carbon; |
||||
|
||||
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject |
||||
{ |
||||
use Authenticatable, Authorizable, HasFactory; |
||||
|
||||
protected $table = 'm_users'; |
||||
/** |
||||
* The attributes that are mass assignable. |
||||
* |
||||
* @var array |
||||
*/ |
||||
protected $fillable = [ |
||||
'name', 'email', 'role_id', 'username', 'session_login', 'phone_number', 'email', 'address', |
||||
'fcm_token', 'gender', 'birth_place', 'birth_date', 'blood_type', 'ktp_number', 'working_hours', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by', 'status_resource', 'discount_id','company_id' |
||||
]; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
const DEFAULT_TZ = 'Asia/Jakarta'; |
||||
const INSIDE = "INSIDE"; |
||||
const OUTSIDE = "OUTSIDE"; |
||||
const HOLIDAY = "HOLIDAY"; |
||||
|
||||
/** |
||||
* The attributes excluded from the model's JSON form. |
||||
* |
||||
* @var array |
||||
*/ |
||||
protected $hidden = [ |
||||
'password', |
||||
]; |
||||
|
||||
/** |
||||
* Get the identifier that will be stored in the subject claim of the JWT. |
||||
* |
||||
* @return mixed |
||||
*/ |
||||
public function getJWTIdentifier() |
||||
{ |
||||
return $this->getKey(); |
||||
} |
||||
|
||||
/** |
||||
* Return a key value array, containing any custom claims to be added to the JWT. |
||||
* |
||||
* @return array |
||||
*/ |
||||
public function getJWTCustomClaims() |
||||
{ |
||||
return []; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get working hours for given timestamp |
||||
* |
||||
* @return array of carbon or NULL in case HOLIDAY |
||||
*/ |
||||
|
||||
public function getWorkingTime(Carbon $ts, $f = "08:00", $t = "17:00", $tz = self::DEFAULT_TZ) |
||||
{ |
||||
$workingTime = array( |
||||
"from" => Carbon::createFromTimeString($f, $tz), |
||||
"to" => Carbon::createFromTimeString($t, $tz) |
||||
); |
||||
|
||||
$userShift = UserShift::where('user_id',) |
||||
->orderByDesc('from_date') |
||||
->first(); |
||||
|
||||
$shift = null; |
||||
if ($userShift !== null) { |
||||
$shiftId = null; |
||||
switch ($ts->shortEnglishDayOfWeek) { |
||||
case "Mon": |
||||
$shiftId = $userShift->mon_shift_id; |
||||
break; |
||||
case "Tue": |
||||
$shiftId = $userShift->tue_shift_id; |
||||
break; |
||||
case "Wed": |
||||
$shiftId = $userShift->wed_shift_id; |
||||
break; |
||||
case "Thu": |
||||
$shiftId = $userShift->thu_shift_id; |
||||
break; |
||||
case "Fri": |
||||
$shiftId = $userShift->fri_shift_id; |
||||
break; |
||||
case "Sat": |
||||
$shiftId = $userShift->sat_shift_id; |
||||
break; |
||||
case "Sun": |
||||
$shiftId = $userShift->sun_shift_id; |
||||
break; |
||||
} |
||||
|
||||
if ($shiftId === null) { |
||||
return null; |
||||
} |
||||
|
||||
$shift = Shift::where('id', $shiftId)->first(); |
||||
} else { |
||||
$shift = Shift::where('is_non_shift', true) |
||||
->orderByDesc('created_at') |
||||
->first(); |
||||
} |
||||
|
||||
|
||||
if ($shift !== null) { |
||||
$from = Carbon::createFromTimeString($shift->start_time, $tz) |
||||
->subMinutes($shift->flex_time_minute); |
||||
$to = Carbon::createFromTimeString($shift->end_time, $tz) |
||||
->addMinutes($shift->flex_time_minute); |
||||
|
||||
/* |
||||
if ($to->lessThan($from)) |
||||
{ |
||||
$to->addDay(); |
||||
} |
||||
*/ |
||||
$workingTime['from'] = $from; |
||||
$workingTime['to'] = $to; |
||||
} |
||||
|
||||
return $workingTime; |
||||
} |
||||
|
||||
/** |
||||
* Get presence status |
||||
*/ |
||||
public function presenceStatus(Carbon $at = null, $tz = self::DEFAULT_TZ) |
||||
{ |
||||
|
||||
$ts = $at; |
||||
if ($at !== null) { |
||||
$ts = Carbon::now($tz); |
||||
} |
||||
$tsSec = $ts->secondsSinceMidnight(); |
||||
|
||||
$status = ""; |
||||
$wt = $this->getWorkingTime($ts, $tz); |
||||
if ($wt === null) { |
||||
$status = self::HOLIDAY; |
||||
} else { |
||||
$from = $wt->from; |
||||
$to = $wt->to; |
||||
$tsFrom = $from->secondsSinceMidnight(); |
||||
$tsTo = $to->secondsSinceMidnight(); |
||||
|
||||
if ($from->greaterThan($to)) { |
||||
$tsMid = 24 * 60 * 60 - $tsFrom; |
||||
if ($tsSec >= $tsFrom || $tsSec < $tsTo) { |
||||
$status = self::INSIDE; |
||||
} else { |
||||
$status = self::OUTSIDE; |
||||
} |
||||
} else { |
||||
if ($tsSec < $tsFrom || $tsSec > $tsTo) { |
||||
$status = self::OUTSIDE; |
||||
} else { |
||||
$status = self::INSIDE; |
||||
} |
||||
} |
||||
} |
||||
|
||||
$clockIn = null; |
||||
$clockOut = null; |
||||
$inout = Presence::where('user_id', $this->id) |
||||
->orderByDesc('clock_in') |
||||
->first(); |
||||
if ($inout !== null) { |
||||
$clockIn = Carbon::parse($inout->clock_in, $tz); |
||||
$clockOut = Carbon::parse($inout->clock_out, $tz); |
||||
} |
||||
|
||||
return array( |
||||
"status" => $status, |
||||
"ts" => $ts, |
||||
"clock_in" => $clockIn, |
||||
"clock_out" => $clockOut |
||||
); |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue