diff --git a/be/app/Events/SubTaskDeleted.php b/be/app/Events/SubTaskDeleted.php
new file mode 100644
index 0000000..7b749c9
--- /dev/null
+++ b/be/app/Events/SubTaskDeleted.php
@@ -0,0 +1,39 @@
+subtask = $subtask;
+ }
+
+ /**
+ * 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/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 db981e5..74f4ef6 100644
--- a/be/app/Http/Controllers/SubTaskController.php
+++ b/be/app/Http/Controllers/SubTaskController.php
@@ -55,7 +55,7 @@ class SubTaskController extends Controller
$subtasks = SubTask::whereHas('mastertask', function ($query) use ($parameters) {
$query->where('team_id', $parameters['team_id']);
})->whereHas('timeblocks', function ($query) use ($parameters) {
- $query->where('start', '>=', $parameters['start']);
+ $query->where('start', '>', $parameters['start']);
$query->where('end', '<=', $parameters['end']);
})->get();
@@ -65,7 +65,7 @@ class SubTaskController extends Controller
} else if (isset($parameters['user_id'])) {
$subtasks = SubTask::where('user_id', $parameters['user_id'])->whereHas('timeblocks', function ($query) use ($parameters) {
- $query->where('start', '>=', $parameters['start']);
+ $query->where('start', '>', $parameters['start']);
$query->where('end', '<=', $parameters['end']);
})->get();
@@ -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/SendDeletedSubTaskNotification.php b/be/app/Listeners/SendDeletedSubTaskNotification.php
new file mode 100644
index 0000000..129d87b
--- /dev/null
+++ b/be/app/Listeners/SendDeletedSubTaskNotification.php
@@ -0,0 +1,35 @@
+subtask->user->email;
+ $receiversArray[] = \App\Models\User::find($event->subtask->created_by)->email;
+
+ Mail::to( $receiversArray )->send( new \App\Mail\SubTaskDeleted( $event->subtask ) );
+ }
+}
diff --git a/be/app/Listeners/SendEditedMasterTaskNotification.php b/be/app/Listeners/SendEditedMasterTaskNotification.php
index ef66494..a33b846 100644
--- a/be/app/Listeners/SendEditedMasterTaskNotification.php
+++ b/be/app/Listeners/SendEditedMasterTaskNotification.php
@@ -4,10 +4,9 @@ namespace App\Listeners;
use App\Events\MasterTaskEdited;
use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
-class SendEditedMasterTaskNotification
+class SendEditedMasterTaskNotification implements ShouldQueue
{
/**
* Create the event listener.
@@ -29,11 +28,22 @@ class SendEditedMasterTaskNotification
{
$difference = [];
+ $editedMasterTaskArray = $event->mastertask->toArray();
+ $originalMasterTaskArray = $event->originalMastertask;
+
+ // unset key from array
+ unset($editedMasterTaskArray['created_at']);
+ unset($editedMasterTaskArray['updated_at']);
+ unset($editedMasterTaskArray['subtasks']);
+
+ unset($originalMasterTaskArray['created_at']);
+ unset($originalMasterTaskArray['updated_at']);
+
// get the difference between $mastertask and $originalMastertask
- $modelDiff = array_diff($event->mastertask->toArray(), $event->originalMastertask);
+ $modelDiff = array_diff_assoc($editedMasterTaskArray, $originalMasterTaskArray);
foreach ( $modelDiff as $key => $diff ) {
- if (in_array($key, ['created_at', 'updated_at', 'status'])) {
+ if (in_array($key, ['status'])) {
continue;
}
@@ -41,7 +51,9 @@ class SendEditedMasterTaskNotification
if ($key == 'is_finished' && $diff == 0) {
foreach ( $event->mastertask->subtasks as $subtask ) {
// Mail::to( $subtask->user->email )->send( new \App\Mail\MasterTaskEdited( $event->mastertask, $difference ) );
- Mail::to( 'feher@studiotem.com' )->send( new \App\Mail\MasterTaskEdited( $event->mastertask, $difference ) );
+ Mail::to( 'feher@studiotem.com' )->send( new \App\Mail\MasterTaskReopened( $event->mastertask ) );
+
+ return;
}
}
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/Listeners/SendNewTaskEmailNotification.php b/be/app/Listeners/SendNewSubTaskEmailNotification.php
similarity index 92%
rename from be/app/Listeners/SendNewTaskEmailNotification.php
rename to be/app/Listeners/SendNewSubTaskEmailNotification.php
index 9c173e8..31524ab 100644
--- a/be/app/Listeners/SendNewTaskEmailNotification.php
+++ b/be/app/Listeners/SendNewSubTaskEmailNotification.php
@@ -9,7 +9,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
-class SendNewTaskEmailNotification implements ShouldQueue
+class SendNewSubTaskEmailNotification implements ShouldQueue
{
/**
* Create the event listener.
diff --git a/be/app/Mail/MasterTaskReopened.php b/be/app/Mail/MasterTaskReopened.php
new file mode 100644
index 0000000..0efe114
--- /dev/null
+++ b/be/app/Mail/MasterTaskReopened.php
@@ -0,0 +1,62 @@
+mastertask = $mastertask;
+ }
+
+ /**
+ * Get the message envelope.
+ *
+ * @return \Illuminate\Mail\Mailables\Envelope
+ */
+ public function envelope()
+ {
+ return new Envelope(
+ subject: 'Master Task ' . $this->mastertask->title . ' was reopened',
+ );
+ }
+
+ /**
+ * Get the message content definition.
+ *
+ * @return \Illuminate\Mail\Mailables\Content
+ */
+ public function content()
+ {
+ return new Content(
+ view: 'emails.task.master_task_reopened',
+ );
+ }
+
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ public function attachments()
+ {
+ return [];
+ }
+}
diff --git a/be/app/Mail/NewTask.php b/be/app/Mail/NewTask.php
index 0bf04a0..c4c412c 100644
--- a/be/app/Mail/NewTask.php
+++ b/be/app/Mail/NewTask.php
@@ -46,7 +46,7 @@ class NewTask extends Mailable
public function content()
{
return new Content(
- view: 'emails.task.new_task_created',
+ view: 'emails.task.sub_task_created',
);
}
diff --git a/be/app/Mail/SubTaskDeleted.php b/be/app/Mail/SubTaskDeleted.php
new file mode 100644
index 0000000..46487f4
--- /dev/null
+++ b/be/app/Mail/SubTaskDeleted.php
@@ -0,0 +1,62 @@
+subtask = $subtask;
+ }
+
+ /**
+ * Get the message envelope.
+ *
+ * @return \Illuminate\Mail\Mailables\Envelope
+ */
+ public function envelope()
+ {
+ return new Envelope(
+ subject: 'Sub Task ' . $this->subtask->mastertask->title . ' was deleted',
+ );
+ }
+
+ /**
+ * Get the message content definition.
+ *
+ * @return \Illuminate\Mail\Mailables\Content
+ */
+ public function content()
+ {
+ return new Content(
+ view: 'emails.task.sub_task_deleted',
+ );
+ }
+
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ public function attachments()
+ {
+ return [];
+ }
+}
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 9c84ff0..be329b3 100644
--- a/be/app/Observers/SubTaskObserver.php
+++ b/be/app/Observers/SubTaskObserver.php
@@ -3,6 +3,8 @@
namespace App\Observers;
use App\Events\SubTaskCreated;
+use App\Events\SubTaskDeleted;
+use App\Events\SubTaskEdited;
use App\Models\SubTask;
class SubTaskObserver
@@ -24,6 +26,8 @@ class SubTaskObserver
$subTask->created_by = $subTask->getOriginal('created_by');
$subTask->tracked_time = $subTask->timesheets->sum('time');
+
+ SubTaskEdited::dispatch($subTask, $subTask->getOriginal());
}
/**
@@ -46,7 +50,7 @@ class SubTaskObserver
*/
public function deleted(SubTask $subTask)
{
- //
+ SubTaskDeleted::dispatch($subTask);
}
/**
diff --git a/be/app/Providers/EventServiceProvider.php b/be/app/Providers/EventServiceProvider.php
index 8ab9100..01d400a 100644
--- a/be/app/Providers/EventServiceProvider.php
+++ b/be/app/Providers/EventServiceProvider.php
@@ -4,8 +4,12 @@ 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\SendNewTaskEmailNotification;
+use App\Listeners\SendEditedSubTaskNotification;
+use App\Listeners\SendNewSubTaskEmailNotification;
use App\Models\MasterTask;
use App\Models\SubTask;
use App\Observers\MasterTaskObserver;
@@ -27,9 +31,15 @@ class EventServiceProvider extends ServiceProvider
SendEmailVerificationNotification::class,
],
SubTaskCreated::class => [
- SendNewTaskEmailNotification::class,
+ SendNewSubTaskEmailNotification::class,
//LogEvent::class,
],
+ SubTaskDeleted::class => [
+ SendDeletedSubTaskNotification::class
+ ],
+ SubTaskEdited::class => [
+ SendEditedSubTaskNotification::class
+ ],
MasterTaskEdited::class => [
SendEditedMasterTaskNotification::class
],
diff --git a/be/app/Services/Karat/Api.php b/be/app/Services/Karat/Api.php
index dce8a46..7419e19 100644
--- a/be/app/Services/Karat/Api.php
+++ b/be/app/Services/Karat/Api.php
@@ -68,9 +68,11 @@ class Api
public static function setTimesheet($timesheet)
{
+ echo 'Setting timesheet for project ' . $timesheet->subtask->mastertask->project->code . PHP_EOL;
+
$body = [
'command' => 'TM_SET_vykaz',
- 'zakazka' => $timesheet->subtask->project->code,
+ 'zakazka' => $timesheet->subtask->mastertask->project->code,
'zdroj' => $timesheet->user->code,
'hodin' => $timesheet->time,
'datum' => $timesheet->created_at->format('Y-m-d'),
diff --git a/be/app/Services/Karat/KaratService.php b/be/app/Services/Karat/KaratService.php
index b2b5e49..f34b04c 100644
--- a/be/app/Services/Karat/KaratService.php
+++ b/be/app/Services/Karat/KaratService.php
@@ -134,6 +134,9 @@ class KaratService
$notSyncedTimesheets = Timesheet::whereNull('synced_to_karat')->get();
$notSyncedTimesheets->each(function ($timesheet) {
+ if (!$timesheet->subtask || !$timesheet->subtask->mastertask->project)
+ return false;
+
$this->syncTimesheet($timesheet);
});
}
@@ -141,7 +144,7 @@ class KaratService
private function syncTimesheet(Timesheet $timesheet) {
$this->api->setTimesheet($timesheet);
- $timesheet->synced_to_karat = true;
+ $timesheet->synced_to_karat = Carbon::now();
$timesheet->save();
}
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/master_task_reopened.blade.php b/be/resources/views/emails/task/master_task_reopened.blade.php
new file mode 100644
index 0000000..27c794c
--- /dev/null
+++ b/be/resources/views/emails/task/master_task_reopened.blade.php
@@ -0,0 +1 @@
+Master Task {{$mastertask->title}} was reopened.
diff --git a/be/resources/views/emails/task/new_task_created.blade.php b/be/resources/views/emails/task/sub_task_created.blade.php
similarity index 100%
rename from be/resources/views/emails/task/new_task_created.blade.php
rename to be/resources/views/emails/task/sub_task_created.blade.php
diff --git a/be/resources/views/emails/task/sub_task_deleted.blade.php b/be/resources/views/emails/task/sub_task_deleted.blade.php
new file mode 100644
index 0000000..d2bd471
--- /dev/null
+++ b/be/resources/views/emails/task/sub_task_deleted.blade.php
@@ -0,0 +1 @@
+Sub Task {{$subtask->mastertask->title}} was deleted.
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