diff --git a/be/app/Events/SubTaskEdited.php b/be/app/Events/SubTaskEdited.php new file mode 100644 index 0000000..cfeebb1 --- /dev/null +++ b/be/app/Events/SubTaskEdited.php @@ -0,0 +1,41 @@ +subtask = $subtask; + $this->originalSubtask = $originalSubtask; + } + + /** + * Get the channels the event should broadcast on. + * + * @return \Illuminate\Broadcasting\Channel|array + */ + public function broadcastOn() + { + return new PrivateChannel('channel-name'); + } +} diff --git a/be/app/Http/Controllers/SubTaskController.php b/be/app/Http/Controllers/SubTaskController.php index 4167e48..74f4ef6 100644 --- a/be/app/Http/Controllers/SubTaskController.php +++ b/be/app/Http/Controllers/SubTaskController.php @@ -222,6 +222,7 @@ class SubTaskController extends Controller $data['data'] = $request->all()['data']; $data['data']['user_id'] = $request->all()['data']['employee_id']; $data['data']['estimated_time'] = $request->all()['data']['duration']; + $data['data']['updated_by'] = User::getUserIdFromBearerToken($request->bearerToken()); $request->merge($data); diff --git a/be/app/Listeners/SendEditedSubTaskNotification.php b/be/app/Listeners/SendEditedSubTaskNotification.php new file mode 100644 index 0000000..c8f0c18 --- /dev/null +++ b/be/app/Listeners/SendEditedSubTaskNotification.php @@ -0,0 +1,70 @@ +subtask->updated_by == $event->subtask->user_id) { + return; + } + + $difference = []; + + $editedSubTaskArray = $event->subtask->toArray(); + $originalSubTaskArray = $event->originalSubtask; + + // unset key from array + unset($editedSubTaskArray['created_at']); + unset($editedSubTaskArray['updated_at']); + unset($editedSubTaskArray['timesheets']); + unset($editedSubTaskArray['timeblocks']); + + unset($originalSubTaskArray['created_at']); + unset($originalSubTaskArray['updated_at']); + unset($originalSubTaskArray['timesheets']); + unset($originalSubTaskArray['timeblocks']); + + // get the difference between $subtask and $originalSubtask + $modelDiff = array_diff_assoc($editedSubTaskArray, $originalSubTaskArray); + + foreach ( $modelDiff as $key => $diff ) { + if (in_array($key, ['status', 'tracked_time'])) { + continue; + } + + $difference[$key] = $diff; + } + + if (empty($difference)) { + return; + } + + // Mail::to( $subtask->user->email )->send( new \App\Mail\SubTaskEdited( $event->subtask, $difference ) ); + Mail::to( 'feher@studiotem.com' )->send( new \App\Mail\SubTaskEdited( $event->subtask, $difference ) ); + + } +} diff --git a/be/app/Mail/SubTaskEdited.php b/be/app/Mail/SubTaskEdited.php new file mode 100644 index 0000000..22f3de4 --- /dev/null +++ b/be/app/Mail/SubTaskEdited.php @@ -0,0 +1,64 @@ +subtask = $subtask; + $this->difference = $difference; + } + + /** + * Get the message envelope. + * + * @return \Illuminate\Mail\Mailables\Envelope + */ + public function envelope() + { + return new Envelope( + subject: 'Sub Task Edited', + ); + } + + /** + * Get the message content definition. + * + * @return \Illuminate\Mail\Mailables\Content + */ + public function content() + { + return new Content( + view: 'emails.task.sub_task_edited', + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments() + { + return []; + } +} diff --git a/be/app/Observers/SubTaskObserver.php b/be/app/Observers/SubTaskObserver.php index b16da2e..be329b3 100644 --- a/be/app/Observers/SubTaskObserver.php +++ b/be/app/Observers/SubTaskObserver.php @@ -4,6 +4,7 @@ namespace App\Observers; use App\Events\SubTaskCreated; use App\Events\SubTaskDeleted; +use App\Events\SubTaskEdited; use App\Models\SubTask; class SubTaskObserver @@ -25,6 +26,8 @@ class SubTaskObserver $subTask->created_by = $subTask->getOriginal('created_by'); $subTask->tracked_time = $subTask->timesheets->sum('time'); + + SubTaskEdited::dispatch($subTask, $subTask->getOriginal()); } /** diff --git a/be/app/Providers/EventServiceProvider.php b/be/app/Providers/EventServiceProvider.php index 113684f..01d400a 100644 --- a/be/app/Providers/EventServiceProvider.php +++ b/be/app/Providers/EventServiceProvider.php @@ -5,8 +5,10 @@ namespace App\Providers; use App\Events\MasterTaskEdited; use App\Events\SubTaskCreated; use App\Events\SubTaskDeleted; +use App\Events\SubTaskEdited; use App\Listeners\SendDeletedSubTaskNotification; use App\Listeners\SendEditedMasterTaskNotification; +use App\Listeners\SendEditedSubTaskNotification; use App\Listeners\SendNewSubTaskEmailNotification; use App\Models\MasterTask; use App\Models\SubTask; @@ -35,6 +37,9 @@ class EventServiceProvider extends ServiceProvider SubTaskDeleted::class => [ SendDeletedSubTaskNotification::class ], + SubTaskEdited::class => [ + SendEditedSubTaskNotification::class + ], MasterTaskEdited::class => [ SendEditedMasterTaskNotification::class ], diff --git a/be/database/migrations/2023_04_13_085734_add_edited_by_to_subtask.php b/be/database/migrations/2023_04_13_085734_add_edited_by_to_subtask.php new file mode 100644 index 0000000..0dfa1d2 --- /dev/null +++ b/be/database/migrations/2023_04_13_085734_add_edited_by_to_subtask.php @@ -0,0 +1,32 @@ +foreignIdFor( \App\Models\User::class, 'updated_by')->after('updated_at')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('subtask', function (Blueprint $table) { + // + }); + } +}; diff --git a/be/resources/views/emails/task/sub_task_edited.blade.php b/be/resources/views/emails/task/sub_task_edited.blade.php new file mode 100644 index 0000000..f6d8f5e --- /dev/null +++ b/be/resources/views/emails/task/sub_task_edited.blade.php @@ -0,0 +1,6 @@ +Sub Task edited.

+ +Edited fields:

+@foreach($difference as $key => $diff) + {{ $key }}: {{ $diff }}
+@endforeach