diff --git a/be/app/Models/MasterTask.php b/be/app/Models/MasterTask.php index 54d1b32..234826a 100644 --- a/be/app/Models/MasterTask.php +++ b/be/app/Models/MasterTask.php @@ -64,4 +64,23 @@ class MasterTask extends Model return true; } + + public function recalculateEstimatedTime() + { + $this->estimated_time = $this->subtasks->sum('estimated_time'); + $this->save(); + } + + public function recalculateTrackedTime() + { + $trackedTime = 0.0; + + foreach ( $this->subtasks as $subtask ) { + $trackedTime += $subtask->timesheets->sum('time'); + } + + $this->tracked_time = $trackedTime; + $this->save(); + + } } diff --git a/be/app/Models/SubTask.php b/be/app/Models/SubTask.php index d6fd2f1..bf55046 100644 --- a/be/app/Models/SubTask.php +++ b/be/app/Models/SubTask.php @@ -46,8 +46,11 @@ class SubTask extends Model $item['user_id'] = $item['employee_id']; unset($item['employee_id']); $item['sub_task_id'] = $this->id; - $item['created_at'] = Carbon::now(); - $item['updated_at'] = Carbon::now(); + + if (!$this->id) { + $item['created_at'] = Carbon::now(); + $item['updated_at'] = Carbon::now(); + } return $item; }, $timesheets); @@ -55,6 +58,9 @@ class SubTask extends Model $this->timesheets()->whereNotIn('id', collect($timesheets)->pluck('id')->filter())->delete(); $this->timesheets()->upsert($timesheets, ['id']); + + // kedze updatujem cez upsert, tak sa neaktualizuje updated_at. preto ho musim updatnut manualne + $this->touch(); } public function syncTimeblocks(Array $timeblocks) diff --git a/be/app/Models/Timesheet.php b/be/app/Models/Timesheet.php index 3838437..8df3c00 100644 --- a/be/app/Models/Timesheet.php +++ b/be/app/Models/Timesheet.php @@ -12,6 +12,8 @@ class Timesheet extends Model public $timestamps = true; public $guarded = ['id']; + protected $touches = ['subtask']; + public function subtask() { return $this->belongsTo(SubTask::class, 'sub_task_id'); diff --git a/be/app/Observers/SubTaskObserver.php b/be/app/Observers/SubTaskObserver.php new file mode 100644 index 0000000..45f070a --- /dev/null +++ b/be/app/Observers/SubTaskObserver.php @@ -0,0 +1,69 @@ +tracked_time = $subTask->timesheets->sum('time'); + } + + /** + * Handle the SubTask "updated" event. + * + * @param \App\Models\SubTask $subTask + * @return void + */ + public function updated(SubTask $subTask) + { + $subTask->mastertask->recalculateEstimatedTime(); + $subTask->mastertask->recalculateTrackedTime(); + } + + /** + * Handle the SubTask "deleted" event. + * + * @param \App\Models\SubTask $subTask + * @return void + */ + public function deleted(SubTask $subTask) + { + // + } + + /** + * Handle the SubTask "restored" event. + * + * @param \App\Models\SubTask $subTask + * @return void + */ + public function restored(SubTask $subTask) + { + // + } + + /** + * Handle the SubTask "force deleted" event. + * + * @param \App\Models\SubTask $subTask + * @return void + */ + public function forceDeleted(SubTask $subTask) + { + // + } +} diff --git a/be/app/Providers/EventServiceProvider.php b/be/app/Providers/EventServiceProvider.php index ab8b2cf..20240b3 100644 --- a/be/app/Providers/EventServiceProvider.php +++ b/be/app/Providers/EventServiceProvider.php @@ -2,6 +2,10 @@ namespace App\Providers; +use App\Models\MasterTask; +use App\Models\SubTask; +use App\Observers\MasterTaskObserver; +use App\Observers\SubTaskObserver; use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -27,7 +31,8 @@ class EventServiceProvider extends ServiceProvider */ public function boot() { - // + MasterTask::observe( MasterTaskObserver::class); + SubTask::observe( SubTaskObserver::class); } /** diff --git a/be/app/Providers/MasterTaskServiceProvider.php b/be/app/Providers/MasterTaskServiceProvider.php deleted file mode 100644 index 765da5b..0000000 --- a/be/app/Providers/MasterTaskServiceProvider.php +++ /dev/null @@ -1,30 +0,0 @@ -