Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
membrubackend
/
app
/
Models
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
KeyResult.php
| Size :
5.32
KB
Copy
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Carbon\Carbon; use Auth; use Session; use Arr; use Webpatser\Uuid\Uuid; class KeyResult extends Model { use SoftDeletes; const STATUS_ACTIVE = 'active'; const STATUS_OVERDUE = 'overdue'; const STATUS_UPCOMING = 'upcoming'; const STATUS_FINISHED = 'finished'; const TYPE_GROW = 'grow'; const TYPE_DECREASE = 'decrease'; const PAST_UPDATE = 'past'; const TODAY_UPDATE = 'today'; protected $fillable = ['name', 'instance_id', 'user_id', 'objective_id', 'description', 'start_date', 'end_date', 'status', 'percent', 'measurement', 'unity', 'target', 'start_value', 'progress_type', 'uuid']; public static function boot(){ parent::boot(); self::creating(function(KeyResult $keyResult){ $keyResult->instance_id = Auth::user()->instance_id; $keyResult->uuid = (string) Uuid::generate(4); if (!$keyResult->status) { $keyResult->status = setStatus($keyResult); } }); self::updating(function(KeyResult $keyResult){ if (!$keyResult->status) { $keyResult->status = setStatus($keyResult); } }); $updateObjectivePercent = function(KeyResult $keyResult){ $keyResult->objective->update(['percent' => calculateObjectivePercentage($keyResult->objective)]); }; self::created($updateObjectivePercent); self::updated($updateObjectivePercent); // must be on deleting in order to access key result (check deleted event on KeyResultLog) self::deleting(function(KeyResult $keyResult){ entityDelete($keyResult->key_result_logs); }); self::deleted(function(KeyResult $keyResult){ $keyResult->promises->each(function($promise) use ($keyResult) { $hasMoreKeyResults = $promise->key_results()->where('key_result_id', '!=', $keyResult->id)->count(); if(!$hasMoreKeyResults){ $promise->delete(); } }); $keyResult->promises()->sync([]); $keyResult->objective->update(['percent' => calculateObjectivePercentage($keyResult->objective)]); entityDelete($keyResult->key_result_comments); entityDelete($keyResult->tasks); }); } public function instance(){ return $this->belongsTo(Instance::class); } public function user(){ return $this->belongsTo(User::class); } public function objective(){ return $this->belongsTo(Objective::class); } public function key_result_logs(){ return $this->hasMany(KeyResultLog::class); } public function key_result_comments(){ return $this->hasMany(KeyResultComment::class); } public function promises(){ if (Session::get('instance_id')) { $table = 'key_result_promise_'.Session::get('instance_id'); } elseif (Auth::user()) { $table = 'key_result_promise_'.Auth::user()->instance_id; } return $this->belongsToMany(Promise::class, $table); } public function tasks(){ return $this->hasMany(Task::class); } public function checkIfNeedsUpdate() { if($this->start_date > Carbon::today()->toDateString() || $this->percent >= 100){ $needsAnUpdate = false; }elseif($this->end_date > Carbon::today()->toDateString()){ $needsAnUpdate = $this->needsAnUpdate($this->measurement); }else{ $needsAnUpdate = false; } return $needsAnUpdate; } public function lastKeyResultLog($date = null){ if(!$date){ $date = Carbon::today()->endOfDay(); } return $this->key_result_logs()->where('created_at', '<', $date)->orderBy('created_at', 'DESC')->first(); } // check if need to evaluate a promise from key result until today public function checkIfNeedToEvaluatePromise(){ return $this->promises()->where([['is_set', 1], ['resolved_at', null], ['user_id', Auth::user()->id], ['created_at', '<', Carbon::today()]])->first(); } public function needsAnUpdate($measurement){ $lastUpdate = $this->lastKeyResultLog() ? $this->lastKeyResultLog()->created_at->startOfDay() : $this->start_date; $diffInDays = Carbon::today()->diffInDays(Carbon::parse($lastUpdate)); if($diffInDays < $measurement){ $needsAnUpdate = Carbon::today()->diffInDays(Carbon::parse($lastUpdate)->addDays($measurement)); }elseif($diffInDays == $measurement){ $needsAnUpdate = $this::TODAY_UPDATE; }else{ $needsAnUpdate = $this::PAST_UPDATE; } return $needsAnUpdate; } public function masterGoalShareStatus(){ return $this->objective->master_goal_id ? $this->objective->master_goal->share_status : 'off'; } public static function getStatusList(){ return [ self::STATUS_ACTIVE, self::STATUS_OVERDUE, self::STATUS_UPCOMING, self::STATUS_FINISHED, ]; } public static function getProgressTypeList(){ return [ self::TYPE_GROW, self::TYPE_DECREASE, ]; } }
Back