diff --git a/src/Form/Type/DateRangeType.php b/src/Form/Type/DateRangeType.php index a8c934a6..2cb78edc 100644 --- a/src/Form/Type/DateRangeType.php +++ b/src/Form/Type/DateRangeType.php @@ -14,6 +14,7 @@ use App\Entity\User; use App\Form\Model\DateRange; use App\Timesheet\DateTimeFactory; use App\Utils\FormFormatConverter; +use App\Utils\LocaleFormatter; use IntlDateFormatter; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\CallbackTransformer; @@ -49,6 +50,7 @@ final class DateRangeType extends AbstractType 'max_day' => null, 'locale' => \Locale::getDefault(), ]); + $resolver->setAllowedTypes('locale', 'string'); $resolver->setAllowedTypes('separator', 'string'); $resolver->addAllowedTypes('timezone', 'string'); $resolver->addAllowedTypes('min_day', ['null', 'string', \DateTimeInterface::class]); @@ -74,9 +76,15 @@ final class DateRangeType extends AbstractType public function buildView(FormView $view, FormInterface $form, array $options): void { + if (!\is_string($options['locale'])) { + throw new \InvalidArgumentException('Locale needs to be a string'); + } + /** @var User $user */ $user = $options['user']; $factory = DateTimeFactory::createByUser($user); + $formatter = new LocaleFormatter($this->localeService, $options['locale']); + $thisMonth = \DateTimeImmutable::createFromInterface($factory->getStartOfMonth()); if ($options['with_presets']) { $ranges = [ @@ -85,11 +93,32 @@ final class DateRangeType extends AbstractType 'daterangepicker.yesterday' => [$factory->createDateTime('-1 day 00:00:00'), $factory->createDateTime('-1 day 23:59:59')], 'daterangepicker.thisWeek' => [$factory->getStartOfWeek(), $factory->getEndOfWeek()], 'daterangepicker.lastWeek' => [$factory->getStartOfWeek('-1 week'), $factory->getEndOfWeek('-1 week')], - 'daterangepicker.thisMonth' => [$factory->getStartOfMonth(), $factory->getEndOfMonth()], - 'daterangepicker.lastMonth' => [$factory->getStartOfLastMonth(), $factory->getEndOfLastMonth()], 'daterangepicker.thisYearUntilNow' => [$factory->createStartOfYear(), $factory->createDateTime('23:59:59')], + 'divider1' => [], ]; + // last months + $month = clone $thisMonth; + for ($i = 0; $i < 4; $i++) { + $end = $factory->getEndOfMonth($month); + $ranges[$formatter->monthName($month, true)] = [$month, $end]; + $month = $month->sub(new \DateInterval('P1M')); + } + $ranges['divider2'] = []; + + // last quarters + $month = clone $thisMonth; + $quarterStartMonth = (int) (floor(($month->format('n') - 1) / 3) * 3) + 1; + $month = \DateTimeImmutable::createFromInterface($factory->getStartOfMonth($month->setDate((int) $month->format('Y'), $quarterStartMonth, 1))); + + for ($i = 0; $i < 4; $i++) { + $end = $factory->getEndOfMonth($month->add(new \DateInterval('P2M'))); + $ranges[$formatter->quarterName($month, true)] = [$month, $end]; + $month = $month->sub(new \DateInterval('P3M')); + } + $ranges['divider3'] = []; + + // last years $thisYear = (int) $factory->createStartOfYear()->format('Y'); for ($i = 0; $i < 3; $i++) { $year = $thisYear - $i; diff --git a/src/Utils/LocaleFormatter.php b/src/Utils/LocaleFormatter.php index ebbdc765..e7479b8f 100644 --- a/src/Utils/LocaleFormatter.php +++ b/src/Utils/LocaleFormatter.php @@ -308,6 +308,11 @@ final class LocaleFormatter return $this->formatIntl($dateTime, ($withYear ? 'LLLL yyyy' : 'LLLL')); } + public function quarterName(\DateTimeInterface $dateTime, bool $withYear = false): string + { + return $this->formatIntl($dateTime, ($withYear ? 'QQQ yyyy' : 'QQQ')); + } + public function dayName(\DateTimeInterface $dateTime, bool $short = false): string { return $this->formatIntl($dateTime, ($short ? 'EE' : 'EEEE')); diff --git a/templates/form/blocks.html.twig b/templates/form/blocks.html.twig index 711b3a73..cf45c9ed 100644 --- a/templates/form/blocks.html.twig +++ b/templates/form/blocks.html.twig @@ -180,7 +180,11 @@ {% endif %} diff --git a/tests/API/TimesheetControllerTest.php b/tests/API/TimesheetControllerTest.php index b0052658..2ca935ba 100644 --- a/tests/API/TimesheetControllerTest.php +++ b/tests/API/TimesheetControllerTest.php @@ -881,7 +881,7 @@ class TimesheetControllerTest extends APIControllerBaseTestCase 'activity' => 10, 'project' => 1, 'begin' => (new \DateTime())->format('Y-m-d H:m'), - 'end' => (new \DateTime('- 1 hours'))->format('Y-m-d H:m'), + 'end' => (new \DateTime('-1 day'))->format('Y-m-d H:m'), 'description' => 'foo', ]; $json = json_encode($data); @@ -890,7 +890,7 @@ class TimesheetControllerTest extends APIControllerBaseTestCase $response = $client->getResponse(); self::assertEquals(400, $response->getStatusCode()); - $this->assertApiCallValidationError($response, ['activity'], false, ['End date must not be earlier then start date.']); + $this->assertApiCallValidationError($response, ['activity'], false, ['The end date must not be earlier than the start date.']); } // TODO: TEST PATCH FOR EXPORTED TIMESHEET FOR USER WITHOUT PERMISSION IS REJECTED diff --git a/translations/daterangepicker.ar.xlf b/translations/daterangepicker.ar.xlf index 8b3885d8..17952c92 100644 --- a/translations/daterangepicker.ar.xlf +++ b/translations/daterangepicker.ar.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek هذا الأسبوع - - daterangepicker.lastMonth - الشهر الماضي - - - daterangepicker.thisMonth - هذا الشهر - daterangepicker.lastYear العام الماضي diff --git a/translations/daterangepicker.cs.xlf b/translations/daterangepicker.cs.xlf index 0801c674..4104c896 100644 --- a/translations/daterangepicker.cs.xlf +++ b/translations/daterangepicker.cs.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Tento týden - - daterangepicker.lastMonth - Minulý měsíc - - - daterangepicker.thisMonth - Tento měsíc - daterangepicker.lastYear Minulý rok diff --git a/translations/daterangepicker.da.xlf b/translations/daterangepicker.da.xlf index 929c984a..f1f4ae8d 100644 --- a/translations/daterangepicker.da.xlf +++ b/translations/daterangepicker.da.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Denne uge - - daterangepicker.lastMonth - Sidste måned - - - daterangepicker.thisMonth - Denne måned - daterangepicker.lastYear Sidste år diff --git a/translations/daterangepicker.de.xlf b/translations/daterangepicker.de.xlf index 280517cb..39a6089b 100644 --- a/translations/daterangepicker.de.xlf +++ b/translations/daterangepicker.de.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Diese Woche - - daterangepicker.lastMonth - Letzter Monat - - - daterangepicker.thisMonth - Dieser Monat - daterangepicker.lastYear Letztes Jahr diff --git a/translations/daterangepicker.de_CH.xlf b/translations/daterangepicker.de_CH.xlf index b496a284..d6c8bdce 100644 --- a/translations/daterangepicker.de_CH.xlf +++ b/translations/daterangepicker.de_CH.xlf @@ -10,10 +10,6 @@ daterangepicker.thisYear Dieses Jahr - - daterangepicker.lastMonth - Vergangener Monat - daterangepicker.allTime Gesamtzeitraum @@ -22,10 +18,6 @@ daterangepicker.thisWeek Diese Woche - - daterangepicker.thisMonth - Dieser Monat - daterangepicker.today Heute diff --git a/translations/daterangepicker.el.xlf b/translations/daterangepicker.el.xlf index a9c3ffad..d09c0285 100644 --- a/translations/daterangepicker.el.xlf +++ b/translations/daterangepicker.el.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Τρέχων εβδομάδα - - daterangepicker.lastMonth - Προηγούμενος μήνας - - - daterangepicker.thisMonth - Τρέχων μήνας - daterangepicker.lastYear Προηγούμενο έτος diff --git a/translations/daterangepicker.en.xlf b/translations/daterangepicker.en.xlf index d64999c2..d5aac50c 100644 --- a/translations/daterangepicker.en.xlf +++ b/translations/daterangepicker.en.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek This week - - daterangepicker.lastMonth - Last month - - - daterangepicker.thisMonth - This month - daterangepicker.lastYear Last year diff --git a/translations/daterangepicker.eo.xlf b/translations/daterangepicker.eo.xlf index f22abbb6..54dc1cdf 100644 --- a/translations/daterangepicker.eo.xlf +++ b/translations/daterangepicker.eo.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Ĉi-semajne - - daterangepicker.lastMonth - Pasintmonate - - - daterangepicker.thisMonth - Ĉi-monate - daterangepicker.lastYear Pasintjare diff --git a/translations/daterangepicker.es.xlf b/translations/daterangepicker.es.xlf index b3cd347a..ee1ac14e 100644 --- a/translations/daterangepicker.es.xlf +++ b/translations/daterangepicker.es.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Esta semana - - daterangepicker.lastMonth - El mes pasado - - - daterangepicker.thisMonth - Este mes - daterangepicker.lastYear El año pasado diff --git a/translations/daterangepicker.et.xlf b/translations/daterangepicker.et.xlf index 1625053f..fbea5729 100644 --- a/translations/daterangepicker.et.xlf +++ b/translations/daterangepicker.et.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek See nädal - - daterangepicker.lastMonth - Eelmine kuu - - - daterangepicker.thisMonth - See kuu - daterangepicker.lastYear Eelmine aasta diff --git a/translations/daterangepicker.eu.xlf b/translations/daterangepicker.eu.xlf index 6cacbb70..93fed7ae 100644 --- a/translations/daterangepicker.eu.xlf +++ b/translations/daterangepicker.eu.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Aste hau - - daterangepicker.lastMonth - Azken hilabetea - - - daterangepicker.thisMonth - Hilabete hau - daterangepicker.lastYear Azken urtea diff --git a/translations/daterangepicker.fa.xlf b/translations/daterangepicker.fa.xlf index def98581..643e4f1b 100644 --- a/translations/daterangepicker.fa.xlf +++ b/translations/daterangepicker.fa.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek این هفته - - daterangepicker.lastMonth - ماه گذشته - - - daterangepicker.thisMonth - این ماه - daterangepicker.lastYear سال گذشته diff --git a/translations/daterangepicker.fi.xlf b/translations/daterangepicker.fi.xlf index 85a739e7..f7cde069 100644 --- a/translations/daterangepicker.fi.xlf +++ b/translations/daterangepicker.fi.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Tämä viikko - - daterangepicker.lastMonth - Edellinen kuukausi - - - daterangepicker.thisMonth - Tämä kuukausi - daterangepicker.lastYear Edellinen vuosi diff --git a/translations/daterangepicker.fo.xlf b/translations/daterangepicker.fo.xlf index e1c2f41d..b03547b0 100644 --- a/translations/daterangepicker.fo.xlf +++ b/translations/daterangepicker.fo.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Hesa vikuna - - daterangepicker.lastMonth - Síðsta mánaða - - - daterangepicker.thisMonth - Hendan mánaðin - daterangepicker.lastYear Síðsta ár diff --git a/translations/daterangepicker.fr.xlf b/translations/daterangepicker.fr.xlf index 711350e2..e9c5dee8 100644 --- a/translations/daterangepicker.fr.xlf +++ b/translations/daterangepicker.fr.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Cette semaine - - daterangepicker.lastMonth - Mois dernier - - - daterangepicker.thisMonth - Ce mois-ci - daterangepicker.lastYear L'an dernier diff --git a/translations/daterangepicker.he.xlf b/translations/daterangepicker.he.xlf index 45c06035..321136e8 100644 --- a/translations/daterangepicker.he.xlf +++ b/translations/daterangepicker.he.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek שבוע נוכחי - - daterangepicker.lastMonth - חודש שעבר - - - daterangepicker.thisMonth - חודש נוכחי - daterangepicker.lastYear שנה שעברה diff --git a/translations/daterangepicker.hr.xlf b/translations/daterangepicker.hr.xlf index 75b7b2da..9cef7797 100644 --- a/translations/daterangepicker.hr.xlf +++ b/translations/daterangepicker.hr.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Ovaj tjedan - - daterangepicker.lastMonth - Prošli mjesec - - - daterangepicker.thisMonth - Ovaj mjesec - daterangepicker.lastYear Prošla godina diff --git a/translations/daterangepicker.hu.xlf b/translations/daterangepicker.hu.xlf index 6783f315..adbee976 100644 --- a/translations/daterangepicker.hu.xlf +++ b/translations/daterangepicker.hu.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Jelenlegi hét - - daterangepicker.lastMonth - Előző hónap - - - daterangepicker.thisMonth - Jelenlegi hónap - daterangepicker.lastYear Előző év diff --git a/translations/daterangepicker.id.xlf b/translations/daterangepicker.id.xlf index 6b0b77c5..7ba0b3b8 100644 --- a/translations/daterangepicker.id.xlf +++ b/translations/daterangepicker.id.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Minggu ini - - daterangepicker.lastMonth - Bulan lalu - - - daterangepicker.thisMonth - Bulan Ini - daterangepicker.lastYear Tahun lalu diff --git a/translations/daterangepicker.it.xlf b/translations/daterangepicker.it.xlf index 1002c5b4..d2803e9c 100644 --- a/translations/daterangepicker.it.xlf +++ b/translations/daterangepicker.it.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Questa settimana - - daterangepicker.lastMonth - Mese scorso - - - daterangepicker.thisMonth - Questo mese - daterangepicker.lastYear Anno scorso diff --git a/translations/daterangepicker.ja.xlf b/translations/daterangepicker.ja.xlf index a739f2aa..893d9110 100644 --- a/translations/daterangepicker.ja.xlf +++ b/translations/daterangepicker.ja.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek 今週 - - daterangepicker.lastMonth - 先月 - - - daterangepicker.thisMonth - 今月 - daterangepicker.lastYear 去年 diff --git a/translations/daterangepicker.ko.xlf b/translations/daterangepicker.ko.xlf index 3fed6e97..d5965b2f 100644 --- a/translations/daterangepicker.ko.xlf +++ b/translations/daterangepicker.ko.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek 이번 주 - - daterangepicker.lastMonth - 지난달 - - - daterangepicker.thisMonth - 이번 달 - daterangepicker.lastYear 작년 diff --git a/translations/daterangepicker.nb_NO.xlf b/translations/daterangepicker.nb_NO.xlf index e9378642..ab8bc11e 100644 --- a/translations/daterangepicker.nb_NO.xlf +++ b/translations/daterangepicker.nb_NO.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Denne uken - - daterangepicker.lastMonth - Forrige måned - - - daterangepicker.thisMonth - Denne måneden - daterangepicker.lastYear I fjor diff --git a/translations/daterangepicker.nl.xlf b/translations/daterangepicker.nl.xlf index caae1ba8..02927f18 100644 --- a/translations/daterangepicker.nl.xlf +++ b/translations/daterangepicker.nl.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Deze week - - daterangepicker.lastMonth - Vorige maand - - - daterangepicker.thisMonth - Deze maand - daterangepicker.lastYear Vorig jaar diff --git a/translations/daterangepicker.pl.xlf b/translations/daterangepicker.pl.xlf index 850f89a9..95bb99d5 100644 --- a/translations/daterangepicker.pl.xlf +++ b/translations/daterangepicker.pl.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Ten tydzień - - daterangepicker.lastMonth - Ostatni miesiąc - - - daterangepicker.thisMonth - Ten miesiąc - daterangepicker.lastYear Zeszły rok diff --git a/translations/daterangepicker.pt.xlf b/translations/daterangepicker.pt.xlf index 8b725b71..a31a2242 100644 --- a/translations/daterangepicker.pt.xlf +++ b/translations/daterangepicker.pt.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Essa semana - - daterangepicker.lastMonth - Último mês - - - daterangepicker.thisMonth - Esse mês - daterangepicker.lastYear Último ano diff --git a/translations/daterangepicker.pt_BR.xlf b/translations/daterangepicker.pt_BR.xlf index ed22ff84..203decf4 100644 --- a/translations/daterangepicker.pt_BR.xlf +++ b/translations/daterangepicker.pt_BR.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Essa semana - - daterangepicker.lastMonth - Último mês - - - daterangepicker.thisMonth - Esse mês - daterangepicker.lastYear Último ano diff --git a/translations/daterangepicker.ro.xlf b/translations/daterangepicker.ro.xlf index 3ab86506..76b8ba11 100644 --- a/translations/daterangepicker.ro.xlf +++ b/translations/daterangepicker.ro.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Săptămâna aceasta - - daterangepicker.lastMonth - Luna trecută - - - daterangepicker.thisMonth - Luna aceasta - daterangepicker.lastYear Anul trecut diff --git a/translations/daterangepicker.ru.xlf b/translations/daterangepicker.ru.xlf index 1fde2510..40e63818 100644 --- a/translations/daterangepicker.ru.xlf +++ b/translations/daterangepicker.ru.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Эта неделя - - daterangepicker.lastMonth - Прошлый месяц - - - daterangepicker.thisMonth - Этот месяц - daterangepicker.lastYear Прошлый год diff --git a/translations/daterangepicker.sk.xlf b/translations/daterangepicker.sk.xlf index 2abeb6c9..d6270700 100644 --- a/translations/daterangepicker.sk.xlf +++ b/translations/daterangepicker.sk.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Tento týždeň - - daterangepicker.lastMonth - Minulý mesiac - - - daterangepicker.thisMonth - Tento mesiac - daterangepicker.lastYear Minulý rok diff --git a/translations/daterangepicker.sv.xlf b/translations/daterangepicker.sv.xlf index 1049bab2..3ea1d64a 100644 --- a/translations/daterangepicker.sv.xlf +++ b/translations/daterangepicker.sv.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Denna veckan - - daterangepicker.lastMonth - Förra månaden - - - daterangepicker.thisMonth - Denna månaden - daterangepicker.lastYear Förra året diff --git a/translations/daterangepicker.ta.xlf b/translations/daterangepicker.ta.xlf index 0a711d4b..2a5d4653 100644 --- a/translations/daterangepicker.ta.xlf +++ b/translations/daterangepicker.ta.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek இந்த வாரம் - - daterangepicker.lastMonth - கடந்த திங்கள் - - - daterangepicker.thisMonth - இந்தத் திங்கள் - daterangepicker.lastYear கடந்த ஆண்டு diff --git a/translations/daterangepicker.tr.xlf b/translations/daterangepicker.tr.xlf index 6650a7b8..ba8db732 100644 --- a/translations/daterangepicker.tr.xlf +++ b/translations/daterangepicker.tr.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Bu hafta - - daterangepicker.lastMonth - Geçen ay - - - daterangepicker.thisMonth - Bu ay - daterangepicker.lastYear Geçen yıl diff --git a/translations/daterangepicker.uk.xlf b/translations/daterangepicker.uk.xlf index 6b1188ca..2d574e8d 100644 --- a/translations/daterangepicker.uk.xlf +++ b/translations/daterangepicker.uk.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Цей тиждень - - daterangepicker.lastMonth - Минулий місяць - - - daterangepicker.thisMonth - Цей місяць - daterangepicker.lastYear Минулий рік diff --git a/translations/daterangepicker.vi.xlf b/translations/daterangepicker.vi.xlf index 4de47163..ec126a2d 100644 --- a/translations/daterangepicker.vi.xlf +++ b/translations/daterangepicker.vi.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek Tuần này - - daterangepicker.lastMonth - Tháng rồi - - - daterangepicker.thisMonth - Tháng này - daterangepicker.lastYear Năm rồi diff --git a/translations/daterangepicker.zh_CN.xlf b/translations/daterangepicker.zh_CN.xlf index 9f46c170..5aebf9bb 100644 --- a/translations/daterangepicker.zh_CN.xlf +++ b/translations/daterangepicker.zh_CN.xlf @@ -18,14 +18,6 @@ daterangepicker.thisWeek 本周 - - daterangepicker.lastMonth - 上月 - - - daterangepicker.thisMonth - 本月 - daterangepicker.lastYear 去年 diff --git a/translations/daterangepicker.zh_Hant.xlf b/translations/daterangepicker.zh_Hant.xlf index 8fd1c3d4..4add07ea 100644 --- a/translations/daterangepicker.zh_Hant.xlf +++ b/translations/daterangepicker.zh_Hant.xlf @@ -10,14 +10,6 @@ daterangepicker.lastYear 去年 - - daterangepicker.lastMonth - 上個月 - - - daterangepicker.thisMonth - 本月 - daterangepicker.thisYear 今年