fmeccanici / dlvr
DLVR - PHP delivery date estimations
v1.0.6
2022-10-10 19:10 UTC
Requires
- illuminate/collections: ^9.33
- nesbot/carbon: ^2.62
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-05-10 22:30:48 UTC
README
This package lets you determine the delivery date based on a work schedule, given start date and amount of work days.
Installation
composer install fmeccanici/dlvr
Examples
Regular workweek
<?php require(__DIR__.'/../vendor/autoload.php'); use Carbon\CarbonImmutable; use Carbon\CarbonInterface; use Fmeccanici\Dlvr\Builders\WorkScheduleBuilder; $workScheduleBuilder = new WorkScheduleBuilder(); $workSchedule = $workScheduleBuilder->addRegularWorkWeek()->build(); $leadTimeInWorkDays = 6; $now = CarbonImmutable::now()->next(CarbonInterface::MONDAY)->setHour(10)->setMinute(0); $dueDate = $workSchedule->deliveryDate($now, $leadTimeInWorkDays); // Delivery date next Tuesday var_dump($dueDate->toDateTimeString());
Irregular workdays
<?php require(__DIR__.'/../vendor/autoload.php'); use Carbon\CarbonImmutable; use Carbon\CarbonInterface; use Fmeccanici\Dlvr\Builders\WorkScheduleBuilder; $workScheduleBuilder = new WorkScheduleBuilder(); $workSchedule = $workScheduleBuilder ->addRegularWorkWeek() ->addDeviatingWorkHours(CarbonImmutable::now()->next(CarbonImmutable::MONDAY), 9, 0, 12, 0) ->build(); $leadTimeInWorkDays = 6; $now = CarbonImmutable::now()->next(CarbonInterface::MONDAY)->setHour(10)->setMinute(0); $dueDate = $workSchedule->deliveryDate($now, $leadTimeInWorkDays); // Delivery date next Tuesday var_dump($dueDate->toDateTimeString());
Holidays
<?php require(__DIR__.'/../vendor/autoload.php'); use Carbon\CarbonImmutable; use Carbon\CarbonInterface; use Fmeccanici\Dlvr\Builders\WorkScheduleBuilder; $workScheduleBuilder = new WorkScheduleBuilder(); $workSchedule = $workScheduleBuilder->addRegularWorkWeek()->build(); $workSchedule->addHoliday(CarbonImmutable::now()->nextWeekday()); $leadTimeInWorkDays = 6; $now = CarbonImmutable::now()->next(CarbonInterface::MONDAY)->setHour(10)->setMinute(0); $dueDate = $workSchedule->deliveryDate($now, $leadTimeInWorkDays); // Delivery date next Wednesday var_dump($dueDate->toDateTimeString());