no message

This commit is contained in:
StudioTem committed 2025-03-19 10:07:33 +01:00
1 parent e1712c8fcd
commit c77b19d229
8 files changed
+334 -30

No files matched your search

+112 -2
View File
@@ -5,6 +5,7 @@ namespace App\Services\Office365;
use App\Models\Blocker;
use App\Models\MasterTask;
use App\Models\Project;
use App\Models\SubTask;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Http;
@@ -125,11 +126,11 @@ class Office365Service
continue;
}
self::addSubtask($newSubtask, $mastertask);
self::addSubtaskToAllInvited($newSubtask, $mastertask);
}
}
private static function addSubtask(mixed $newSubtask, mixed $mastertask)
private static function addSubtaskToAllInvited(mixed $newSubtask, mixed $mastertask)
{
$attendees = $newSubtask['attendees'];
@@ -211,4 +212,113 @@ class Office365Service
// manualne musim trignernut tuto operaciu, lebo cez Observer sa to nespusti - ten je nastaveny len na update subtasku
$subtasks->first()->mastertask->recalculateTrackedTime();
}
public static function editSubtasks(mixed $editedSubtasks)
{
foreach ($editedSubtasks as $editedSubtask) {
self::editSubtask($editedSubtask);
}
}
private static function editSubtask(mixed $editedSubtask)
{
$attendees = $editedSubtask['attendees'];
// vrati subtasky pre userov, ktori sa uz nenachadzaju v evente, ale v nasej databaze tento subtask maju. ale iba v pripade, ak ich subtasky este nie su ukoncene (is_finished != 1)
// TODO - zvlast do funkcie
$subtasksToDelete = SubTask::where('is_finished', 0)->where('office365_id',
$editedSubtask['id'])->get()->filter(function ($subtask) use (
$attendees
) {
$event = collect($attendees)->firstWhere('emailAddress.address', $subtask->user->email);
return ! $event;
});
foreach ($subtasksToDelete as $subtaskToDelete) {
// vymazanie timeblockov
foreach ($subtaskToDelete->timeblocks as $timeblock) {
$timeblock->delete();
}
// vymazanie timesheetov
foreach ($subtaskToDelete->timesheets as $timesheet) {
$timesheet->delete();
}
$subtaskToDelete->delete();
}
// novym ucastnikom sa klasicky vytvori subtask ako v pripade noveho subtasku. pre 1 subtask existuje iba 1 user.
// TODO - zvlast do funkcie
$newAttendees = array_filter($attendees, function ($attendee) use ($editedSubtask) {
$idsOfAttendees = SubTask::where('office365_id', $editedSubtask['id'])->get()->pluck('user_id')->toArray();
$idOfUserFromOffice365 = User::where('email', $attendee['emailAddress']['address'])->first();
// if user doesnt exist in our database, we skip it
if ( ! $idOfUserFromOffice365) {
return false;
}
return ! in_array($idOfUserFromOffice365->id, $idsOfAttendees);
});
// nakopiruj subtask tak, ze bude obsahovat iba newAttendees
$editedSubtaskWithOnlyNewAttendees = $editedSubtask;
$editedSubtaskWithOnlyNewAttendees['attendees'] = $newAttendees;
$project = Project::where('code', explode(' ', $editedSubtask['subject'])[0])->first();
// ak existuje viac master taskov, pouzijeme posledny
$mastertask = MasterTask::where('project_id', $project->id)->latest()->first();
self::addSubtaskToAllInvited($editedSubtaskWithOnlyNewAttendees, $mastertask);
// existujucim ucastnikom sa updatne subtask
foreach ($attendees as $attendee) {
$idOfUserFromOffice365 = User::where('email', $attendee['emailAddress']['address'])->first();
// if user doesnt exist in our database, we skip it
if ( ! $idOfUserFromOffice365) {
continue;
}
$subtask = SubTask::where('office365_id', $editedSubtask['id'])->where('user_id',
$idOfUserFromOffice365->id)->first();
if ( ! $subtask) {
continue;
}
$subtask->update([
'office365_change_key' => $editedSubtask['changeKey'],
'title' => substr($editedSubtask['subject'], strpos($editedSubtask['subject'], ' ') + 1),
'estimated_time' => round((strtotime($editedSubtask['end']['dateTime']) - strtotime($editedSubtask['start']['dateTime'])) / 3600,
1),
'description' => $editedSubtask['body']['content'],
'deadline' => $editedSubtask['end']['dateTime'],
'office365_location' => $editedSubtask['location']['displayName'],
]);
$oldTimeblock = $subtask->timeblocks->first();
// ak sa zmenilo trvanie alebo casy subtasku, tak sa updatne aj timeblock
if ($oldTimeblock['start'] != $editedSubtask['start']['dateTime'] || $oldTimeblock['end'] != $editedSubtask['end']['dateTime']) {
$subtask->syncTimeblocks([
[
'sub_task_id' => $subtask->id,
'start' => $editedSubtask['start']['dateTime'],
'end' => $editedSubtask['end']['dateTime'],
'is_finished' => 0,
]
]);
}
}
// manualne musim trignernut tuto operaciu, lebo cez Observer sa to nespusti - ten je nastaveny len na update subtasku
Subtask::where('office365_id', $editedSubtask['id'])->first()->mastertask->recalculateEstimatedTime();
}
}