Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ZMS-3253 ZMS-3466 ZMS-3415 ZMS-1891): Replicate frontend validation in the backend for the availability opening hours to improve data integrity and frontend validation messaging #803

Closed
Changes from 1 commit
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
310f536
fix(ZMS-3253): validate and block adding conflicting openingtimes
Nov 12, 2024
bbd32b1
fix(ZMS-3253): add backend validation for opening hours and improve f…
Nov 14, 2024
5543f36
fix(ZMS-3253): fix zmsentities unit test
Nov 14, 2024
03bc86e
fix(ZMS-3253): fix zmsdb unit test
Nov 14, 2024
ffcdb0a
fix(ZMS-3253): add logging to zmsapi tests
Nov 14, 2024
47565c8
fix(ZMS-3253): fix one zmsapi unit test
Nov 14, 2024
3f8030e
fix(ZMS-3253): try fix one zmsapi unit test
Nov 14, 2024
f5e08ed
fix(ZMS-3253): try fix one zmsapi unit test
Nov 14, 2024
e4b36ea
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
e5f123c
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
9528271
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
770e847
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
4a79605
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
cdd0d8c
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
8a1aa79
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
09c10fb
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
afd6d5d
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
ce5d795
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
07f74c8
Revert "fix(ZMS-3253): try fix some unit tests"
Nov 14, 2024
da65ff3
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
93b2820
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
e0d41c4
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
bde21f3
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
0cd0ad1
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
29b7cff
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
9e11157
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
c2df444
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
5faea71
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
4cd3618
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
4840338
fix(ZMS-3253): try fix some unit tests
Nov 14, 2024
c8262a0
fix(ZMS-3253): backend validation work in AvailabilityAdd
Nov 15, 2024
8281b0a
fix(ZMS-3253): correct backend validation for timeoverlaps
Nov 15, 2024
390aba7
fix(ZMS-3253): fix a validation
Nov 15, 2024
78013ea
fix(ZMS-3253): try fixing a test
Nov 15, 2024
8a07621
fix(ZMS-3253): try fixing a test
Nov 15, 2024
7892fe0
fix(ZMS-3253): try fixing a test
Nov 15, 2024
9522585
fix(ZMS-3253): try fixing a test
Nov 15, 2024
d65ccb8
fix(ZMS-3253): try fixing availability not found test
Nov 15, 2024
3fa84a1
fix(ZMS-3253): try fixing availability mockdata for testRendering
Nov 15, 2024
317d127
fix(ZMS-3253): try fixing availability mockdata for testRendering
Nov 15, 2024
c02e4e3
fix(ZMS-3253): try fixing availability mockdata for testRendering
Nov 15, 2024
c75e3c4
fix(ZMS-3253): try fixing availability mockdata for testRendering
Nov 15, 2024
2b39546
fix(ZMS-3253): try fixing availability mockdata for testRendering
Nov 15, 2024
acb62ac
fix(ZMS-3253): try fix missing scope testRendering
Nov 15, 2024
a16b2e4
fix(ZMS-3253): fix zmsadmin availabilities conflict test
Nov 15, 2024
1bd40cb
fix(ZMS-3253): show availability opening hour conflicts in the future…
Nov 15, 2024
4025319
fix(ZMS-3253): remove error_logs
Nov 15, 2024
95dcef0
fix(ZMS-3253): refactor function logic getDateTimeRangeFromList to on…
Nov 15, 2024
39ef3a6
Merge remote-tracking branch 'origin/next' into bugfix-zms-3253-valid…
Nov 15, 2024
3eb8912
fix(ZMS-3253): renable twig cache
Nov 15, 2024
46c0af9
fix(ZMS-3253): renable twig cache
Nov 15, 2024
fdd0c72
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
f319de3
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
b8fd6b6
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
a2691c1
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
fc26e13
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
bffc9fa
fix(ZMS-3253): fix unit test
ThomasAFink Nov 18, 2024
5784eb4
fix(ZMS-3253): try fix unit test
ThomasAFink Nov 18, 2024
51e25ca
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
4f2a125
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
e8cae55
fix(ZMS-3253): remove space
ThomasAFink Nov 18, 2024
e0f4fa6
fix(ZMS-3253): remove space
ThomasAFink Nov 18, 2024
d17ffa2
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
8a41469
fix(ZMS-3253): add unit tests for testing validation availability ope…
ThomasAFink Nov 18, 2024
e230b26
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
5aadb7b
fix(ZMS-3253): add unit tests for testing validation availability ope…
ThomasAFink Nov 18, 2024
246b4d1
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
17dcb07
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
e984774
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
d5135e2
fix(ZMS-3253): add unit tests for testing overlapping availability op…
ThomasAFink Nov 18, 2024
ca99ef2
fix(ZMS-3253): add unit tests for testing validation availability ope…
ThomasAFink Nov 18, 2024
d5c6051
fix(ZMS-3253): add unit tests for testing validation availability ope…
ThomasAFink Nov 18, 2024
5527c58
fix(ZMS-3253): refactor object creation
ThomasAFink Nov 18, 2024
ad89835
fix(ZMS-3253): refactor exception messages
ThomasAFink Nov 18, 2024
2a7d978
fix(ZMS-3253): clean up commented code
ThomasAFink Nov 18, 2024
ea55b27
fix(ZMS-3253): fix grammar
ThomasAFink Nov 20, 2024
932fe5f
fix(ZMS-3253): comment error_log
ThomasAFink Nov 20, 2024
5aa9d6b
fix(ZMS-3253): Improve frontend validation for opening hours availabi…
ThomasAFink Nov 20, 2024
fb7efb7
cleanup(ZMS-3415): remove invalid text instruction for graph view ope…
ThomasAFink Nov 21, 2024
1fd8f65
fix(ZMS-1891): Add missing frontend validation for timepicker
Nov 22, 2024
f8f536f
Merge branch 'next' into bugfix-zms-3253-validation-opening-hours-of-…
Nov 22, 2024
e4981ff
fix(ZMS-1891): Improve frontend validation for time formats
Nov 22, 2024
7916a70
fix(ZMS-3253): fix frontend exclusion availability validation
ThomasAFink Dec 3, 2024
462be60
fix(ZMS-3253): fix backend exclusion availability validation
ThomasAFink Dec 4, 2024
46db273
fix(ZMS-3253): allow exclusion availability on current date
ThomasAFink Dec 4, 2024
490ddce
fix(ZMS-3253): improve validation and cleanup code
ThomasAFink Dec 4, 2024
2ce2363
fix(ZMS-3253): move js spinner
ThomasAFink Dec 4, 2024
735c579
Merge remote-tracking branch 'origin/next' into bugfix-zms-3253-valid…
ThomasAFink Dec 4, 2024
97cee9c
clean(ZMS-3253): remove console logs
ThomasAFink Dec 4, 2024
a11f7b8
Merge branch 'next' into bugfix-zms-3253-validation-opening-hours-of-…
Dec 9, 2024
b620a54
fix(ZMS-3466): fix bookable day range validation
Dec 9, 2024
e3375c1
fix(ZMS-3466): fix error accumulation
Dec 9, 2024
e646a4c
fix(ZMS-3466): improve exception handling
Dec 9, 2024
8b7a1f6
fix(ZMS-3466): improve validation prevent divide by zero
Dec 9, 2024
2a3cbb7
fix(ZMS-3466): improve validation prevent divide by zero
Dec 9, 2024
4cbe423
fix(ZMS-3466): improve validation prevent divide by zero
Dec 9, 2024
0053e60
Merge branch 'next' into bugfix-zms-3253-3466-3415-1891-validation-op…
ThomasAFink Jan 20, 2025
cab1b1d
fix(ZMS-3466): Fix to from default values in opening hours availability
ThomasAFink Jan 20, 2025
ab51699
fix(ZMS): error message
Jan 23, 2025
227e741
Merge branch 'next' into bugfix-zms-3253-3466-3415-1891-validation-op…
Jan 23, 2025
694194b
fix(ZMS-3466): fix open from and open to placeholders in form
Jan 27, 2025
d53b28e
Merge branch 'next' into bugfix-zms-3253-3466-3415-1891-validation-op…
Jan 27, 2025
088356f
fix(ZMS-3466): improve default hours
Jan 28, 2025
484cbb4
fix(ZMS-3466): improve hours selection
Jan 28, 2025
e92684e
fix(ZMS-3466): closing new opening hours
Jan 28, 2025
faa90c0
fix(ZMS-3253): add backend validation check for new availabilities ov…
Jan 29, 2025
8d863ce
fix(ZMS-3253): unit test
Jan 29, 2025
ff16fc0
fix(ZMS-3253): unit tests
Jan 29, 2025
4043a66
fix(ZMS-3253): unit tests
Jan 29, 2025
860abc6
fix(ZMS-3253): add frontend validation check for new availabilities o…
Jan 29, 2025
3a3491f
fix(ZMS-3253): new availability conflict error display
Jan 29, 2025
64c884b
fix(ZMS-3253): when footer buttons are disabled
Jan 29, 2025
36724e4
fix(ZMS-3466): disable editing availabilities in the past
Jan 30, 2025
ea9b087
fix(ZMS-3466): improve infobox message format for non errors
Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(ZMS-3253): new availability conflict error display
Thomas Fink authored and Thomas Fink committed Jan 29, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit 3a3491fa469e262ab1a446f2243705eb3f65c018
26 changes: 20 additions & 6 deletions zmsadmin/src/Zmsadmin/AvailabilityConflicts.php
Original file line number Diff line number Diff line change
@@ -46,7 +46,6 @@ protected static function getAvailabilityData($input)

$selectedDateTime = (new \DateTimeImmutable($input['selectedDate']))->modify(\App::$now->format('H:i:s'));

// First check overlaps between new availabilities
$overlapConflicts = self::checkNewVsNewConflicts($availabilityList, $selectedDateTime);
$conflictList->addList($overlapConflicts);

@@ -107,8 +106,15 @@ protected static function checkNewVsNewConflicts(AvailabilityList $collection, \
{
$conflicts = new \BO\Zmsentities\Collection\ProcessList();

foreach ($collection as $availability1) {
foreach ($collection as $availability2) {
$newAvailabilities = new AvailabilityList();
foreach ($collection as $availability) {
if (isset($availability->tempId) && strpos($availability->tempId, '__temp__') !== false) {
$newAvailabilities->addEntity($availability);
}
}

foreach ($newAvailabilities as $availability1) {
foreach ($newAvailabilities as $availability2) {
$scope1Id = is_array($availability1->scope) ? ($availability1->scope['id'] ?? null) : ($availability1->scope->id ?? null);
$scope2Id = is_array($availability2->scope) ? ($availability2->scope['id'] ?? null) : ($availability2->scope->id ?? null);

@@ -117,12 +123,10 @@ protected static function checkNewVsNewConflicts(AvailabilityList $collection, \
$scope1Id == $scope2Id &&
$availability1->hasSharedWeekdayWith($availability2)) {

// First check if dates are the same
$date1 = (new \DateTimeImmutable())->setTimestamp($availability1->startDate)->format('Y-m-d');
$date2 = (new \DateTimeImmutable())->setTimestamp($availability2->startDate)->format('Y-m-d');

if ($date1 === $date2) {
// Compare times as strings for exact boundary handling
$time1Start = (new \DateTimeImmutable())->setTimestamp($availability1->startDate)
->modify($availability1->startTime)->format('H:i');
$time1End = (new \DateTimeImmutable())->setTimestamp($availability1->endDate)
@@ -134,6 +138,16 @@ protected static function checkNewVsNewConflicts(AvailabilityList $collection, \

if ($time2Start < $time1End && $time1Start < $time2End) {
$process = new Process();

$dateRange1 = date('d.m.Y', $availability1->startDate) . ' - ' . date('d.m.Y', $availability1->endDate);
$dateRange2 = date('d.m.Y', $availability2->startDate) . ' - ' . date('d.m.Y', $availability2->endDate);
$timeRange1 = $time1Start . ' - ' . $time1End;
$timeRange2 = $time2Start . ' - ' . $time2End;

$process->amendment = "Konflikt: Zwei Öffnungszeiten überschneiden sich.\n"
. "Neue Öffnungszeit:&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;[$dateRange1, $timeRange1]\n"
. "Neue Öffnungszeit:&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;&thinsp;[$dateRange2, $timeRange2]";

$appointment = new \BO\Zmsentities\Appointment();
$appointment->date = $availability1->startDate;
$appointment->availability = $availability1;
@@ -163,7 +177,7 @@ protected static function getAvailabilityList($scope, $dateTime)
'/scope/' . $scope->getId() . '/availability/',
[
'resolveReferences' => 0,
'startDate' => $dateTime->format('Y-m-d') // Only fetch availabilities from this date onward
'startDate' => $dateTime->format('Y-m-d')
]
)
->getCollection();
8 changes: 7 additions & 1 deletion zmsapi/src/Zmsapi/AvailabilityAdd.php
Original file line number Diff line number Diff line change
@@ -63,7 +63,6 @@ public function readResponse(
$scopeData = $input['availabilityList'][0]['scope'];
$scope = new \BO\Zmsentities\Scope($scopeData);

// First check overlaps within new availabilities being added
$selectedDate = \DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $input['selectedDate'] . ' 00:00:00');
$this->checkNewVsNewConflicts($newCollection, $selectedDate);

@@ -174,6 +173,13 @@ protected function writeSpontaneousEntity(Entity $entity): void

protected function checkNewVsNewConflicts(Collection $collection, \DateTimeImmutable $selectedDate): void
{
$newAvailabilities = new Collection();
foreach ($collection as $availability) {
if (isset($availability->tempId) && strpos($availability->tempId, '__temp__') !== false) {
$newAvailabilities->addEntity($availability);
}
}

foreach ($collection as $availability1) {
foreach ($collection as $availability2) {
$scope1Id = is_array($availability1->scope) ? ($availability1->scope['id'] ?? null) : ($availability1->scope->id ?? null);
9 changes: 7 additions & 2 deletions zmsapi/src/Zmsapi/AvailabilityUpdate.php
Original file line number Diff line number Diff line change
@@ -101,7 +101,6 @@ public function readResponse(
}

if (count($validations) > 0) {
//error_log(json_encode($validations));
throw new AvailabilityUpdateFailed();
}

@@ -126,7 +125,6 @@ public function readResponse(
);
$conflicts = $mergedCollectionWithoutExclusions->checkAllVsExistingConflicts($earliestStartDateTime, $latestEndDateTime);
if ($conflicts->count() > 0) {
//error_log(json_encode($conflicts));
throw new AvailabilityUpdateFailed();
}

@@ -183,6 +181,13 @@ protected function writeSpontaneousEntity(Entity $entity): void

protected function checkNewVsNewConflicts(Collection $collection, \DateTimeImmutable $selectedDate): void
{
$newAvailabilities = new Collection();
foreach ($collection as $availability) {
if (isset($availability->tempId) && strpos($availability->tempId, '__temp__') !== false) {
$newAvailabilities->addEntity($availability);
}
}

foreach ($collection as $availability1) {
foreach ($collection as $availability2) {
$scope1Id = is_array($availability1->scope) ? ($availability1->scope['id'] ?? null) : ($availability1->scope->id ?? null);