mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-22 14:59:34 +00:00
no message
This commit is contained in:
1 parent
e1712c8fcd
commit
c77b19d229
8 files changed
+334
-30
No files matched your search
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user