d2d.emegrendeles.hu/app/Models/SupplierNotifier.php
E98Developer 68b7c35bef git init
2026-02-28 06:53:05 +01:00

138 lines
4.7 KiB
PHP

<?php
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class SupplierNotifier extends Model
{
use HasFactory;
protected int $minHour = 0;
protected array $notifierHour = [3, 8, 24];
protected array $workHour = [
1 => [4, 18],
2 => [4, 18],
3 => [4, 18],
4 => [4, 18],
5 => [4, 16],
6 => [23, -1],
0 => [23, -1],
];
private Carbon $nowTime;
public function __construct()
{
parent::__construct();
$this->minHour = $this->notifierHour[0];
$this->nowTime = Carbon::now();
}
private function getNextTime($timeStr, $needHour): string
{
$Time = Carbon::createFromDate($timeStr);
$nextDay = $Time->copy()->nextWeekday();
$dayRecentHour = $this->workHour[$nextDay->dayOfWeek][1] - $this->workHour[$nextDay->dayOfWeek][0];
if ($needHour < $dayRecentHour) {
// datum visszaad
return $nextDay->setTime($this->workHour[$nextDay->dayOfWeek][0] + $needHour, $Time->minute)->toDateTimeString();
} else {
// return 'rec>'.var_export([$Time,$needHour,$dayRecentHour],true);
return $this->getNextTime($Time->copy()->nextWeekday(), ($needHour - $dayRecentHour));
}
}
public function getLowestWorkTime($timeStr): string
{
$Time = Carbon::createFromDate($timeStr);
/*
* ha korábabn adták le mint az adott nap első munkaórája, akkor az kerül beállításra
*/
if ($Time->hour < $this->workHour[$Time->dayOfWeek][0]) {
$Time->setTime($this->workHour[$Time->dayOfWeek][0], 0);
// var_dump($Time->toDateTimeString(),'Set workStart hour');
}
/*
* ha késöbb adták le mint az adott nap utolsó munkaórája, akkor a következő munkanap első órája kerül beállításra
*/
if ($Time->hour >= $this->workHour[$Time->dayOfWeek][1]) {
$Time->nextWeekday();
$Time->setTime($this->workHour[$Time->dayOfWeek][0], 0);
// var_dump($Time->toDateTimeString(),'Set NexDay');
}
return $Time->toDateTimeString();
}
public function makeTime($timeStr): array
{
/*
$timeStr='2023-09-08 15:12:12'; //péntek in work
$timeStr='2023-09-08 6:12:12'; //péntek +3+8
$timeStr='2023-09-08 17:12:12'; //péntek out of work
$timeStr='2023-09-08 11:12:12'; //péntek +3
$timeStr='2023-09-04 07:12:12'; //hetfő +3+8
$timeStr='2023-09-04 03:12:12'; //hetfő before work
$timeStr='2023-09-04 18:12:12'; //hetfő out of work
$timeStr='2023-09-04 07:12:12'; //hetfő +3+8
*/
$Time = Carbon::createFromDate($timeStr);
// var_dump($Time->toDateTimeString(),'Original');
$Time = Carbon::createFromDate($this->getLowestWorkTime($timeStr));
$endOfDay = Carbon::create($Time);
$endOfDay = $endOfDay->setTime($this->workHour[$Time->dayOfWeek][1], 0);
// var_dump('aaa>'.$endOfDay->toDateTimeString().' '.$Time->toDateTimeString());
$dayRecentHour = $Time->diffInHours($endOfDay);
$notifiedDateTime = [];
foreach ($this->notifierHour as $needHour) {
if ($dayRecentHour < $needHour) {
$notifiedDateTime[] = $this->getNextTime($Time, ($needHour - $dayRecentHour));
} else {
$notifiedDateTime[] = $Time->copy()->addHour($needHour)->toDateTimeString();
}
}
return $notifiedDateTime;
}
public function addNotificationsForOrderArchive(int $orderArchiveID, int $supplierID, array $times)
{
foreach ($times as $time) {
$SupplierNotifier = new SupplierNotifier;
$SupplierNotifier->order_archive_id = $orderArchiveID;
$SupplierNotifier->supplier_id = $supplierID;
$SupplierNotifier->need_send = $time;
$SupplierNotifier->save();
}
}
public function makeNotificationsForOrderArchive(int $orderArchiveID)
{
$OrderArchive = OrderArchive::find($orderArchiveID);
$times = $this->makeTime($OrderArchive->sentTime);
$this->addNotificationsForOrderArchive($OrderArchive->id, $OrderArchive->supplier_id, $times);
}
/**
* The items that belong to the OrderArchive.
*/
public function orderArchive(): BelongsTo
{
return $this->belongsTo(OrderArchive::class);
}
public function supplier(): BelongsTo
{
return $this->belongsTo(Supplier::class);
}
}