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

358 lines
12 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Enums\OrderFlag;
use App\Http\Controllers\OrderController;
use App\Models\OrderArchive;
use App\Models\SupplierNotifier as SupplierNotifierModel;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class supplierNotifier extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'emegrendeles:supplierNotifier {--doc : print documentation }';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send scheduled unprocessed order notification to supplier';
/**
* Create a new command instance.
*
* @return void
*/
protected bool $sendEmail = false;
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],
];
protected array $nextDay = [
1 => 2,
2 => 3,
3 => 4,
4 => 5,
5 => 1,
6 => 1,
0 => 1,
];
private Carbon $nowTime;
public function __construct()
{
parent::__construct();
$this->minHour = $this->notifierHour[0];
$this->nowTime = Carbon::now();
$this->sendEmail = env('SEND_SUPPLIER_NOTIFICATION', false);
}
public function info($string, $verbosity = null)
{
if ($verbosity) {
Log::channel('supplierNotifier')->info($string, $verbosity);
} else {
Log::channel('supplierNotifier')->info($string);
}
parent::info($string, $verbosity);
}
/**
* Execute the console command.
*/
public function handle(): int
{
$this->info('Supplier Notifier Started');
// Log::channel('supplierNotifier')->info('Supplier Notifier Started',['requestData'=>var_export($request->server(),true)]);
// $name = $this->ask('What is your name?');
// $this->info('hello '.$name);
// $this->error('error','sdsd');
// $this->warn('warn','pppp');
// $this->exampleProgressBar();
// $this->testTimes();
// $this->testSupplierNotifierModel();
/* $s=new SupplierNotifierModel();
$s->makeNotificationsForOrderArchive(12179);*/
$this->info(get_current_user());
$this->checkUnprocessedOrderNotification();
$this->info('Supplier Notifier end');
return 0;
}
private function testSupplierNotifierModel($timeStr = null)
{
$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
$timeStr = '2023-09-18 07:13:56';
$SupplierNotifier = new SupplierNotifierModel;
// $SupplierNotifier->makeTime($timeStr);
$SupplierNotifier->makeNotificationsForOrderArchive(12180);
}
public function exampleProgressBar($max = null)
{
if (! $max) {
$max = 100;
}
$bar = $this->output->createProgressBar($max);
$bar->start();
for ($i = 0; $i < $max; $i++) {
usleep(300);
$bar->advance();
}
$bar->finish();
}
private function sendNotification(int $orderArchiveId)
{
// $orderData=app(OrderController::class)->getOrderData($orderArchiveId);
$orderData = app(OrderController::class)->getOrderData(null, getOrderFromOrderArchive($orderArchiveId));
$orderData['feedBackIdLinkParam'] = base64_encode($orderData['feedBackId']);
$orderData['sentTime'] = Carbon::now()->toDateTimeString();
$orderData['noPrintButton'] = true;
$HTMLInvoice = view('modules.order.invoice')->with($orderData
)->render();
$HTMLOrder = view('email.order')->with(['orderHTMLInvoice' => $HTMLInvoice,
'orderData' => $orderData,
]
)->render();
$subject = 'EMLÉKEZTETŐ A Szállítói webrendelőn érkezett megrendelés visszaigazolására ';
$fileType = $orderData['supplier']['emailAttachmentType'];
$attachments = app(OrderController::class)->getEmailAttachment($orderData, $fileType);
$to = [];
if ($orderData['customNotificationEmail'] && $orderData['customNotificationEmail'] != 'NULL') {
$to[] = $orderData['customNotificationEmail'];
}
if (env('APP_STAGE', 'DEV') == 'PROD') {
$to[] = $orderData['supplier']['orderEmail'];
if ($orderData['supplier']['orderEmail2']) {
$to[] = $orderData['supplier']['orderEmail2'];
}
} else {
$to[] = env('MAIL_TO_ORDER_ADDRESS');
}
$bcc = [];
if (env('MAIL_TO_ORDER_ADDRESS') != 'city@e98.hu') {
$bcc[] = ('city@e98.hu');
}
$this->info('Notification sent: '.$orderArchiveId.' address:'.implode(',', array_merge($to, $bcc)));
if ($this->sendEmail) {
\Mail::send('email.supplierNotifier', [
'originalEmailHTML' => $HTMLOrder,
], function ($m) use ($fileType, $attachments, $to, $bcc) {
// $subject='Delirest - '.$orderData['profit_center']['name'].' - '.$orderData['humanId'];
$subject = 'EMLÉKEZTETŐ A Szállítói webrendelőn érkezett megrendelés visszaigazolására';
/* if($orderData['orderFlag']==OrderFlag::modifier){
$subject.=' MÓDOSÍTÁS';
}*/
$m->subject($subject);
foreach ($to as $address) {
$m->to($address);
}
foreach ($bcc as $address) {
$m->bcc($address);
}
// $m->attach($attach,['as'=>$fileNameWithExt]);
if ($fileType !== 'none') {
if (is_array($attachments) && count($attachments) > 0) {
foreach ($attachments as $attachData) {
$m->attachData($attachData['attach'], $attachData['fileNameWithExt']);
}
}
}
});
}
}
public function checkUnprocessedOrderNotification()
{
$Orders = OrderArchive::select('id')->where('sentTime', '>', Carbon::now()->subWeek()->toDateTimeString())->whereNull('confirmed')->get();
// OrderArchive::groupBy()
// dd($Orders->toArray());
$NeedNotification = SupplierNotifierModel::whereIn('order_archive_id', $Orders->pluck('id'))
->whereNull('sent')
// ->where('id','<',1)
->where('need_send', '<', DB::raw("'".Carbon::now()->toDateTimeString()."'"))
->orderBy('need_send');
// dd($NeedNotification->toSql(),$NeedNotification->getBindings());
$orderFinished = [];
if ($NeedNotification->get()->count() < 1) {
$this->info('No active Supplier Order Notification this moment');
return;
}
foreach ($NeedNotification->get() as $notification) {
// var_dump($notification->order_archive_id);
// dd($notification->order_archive_id);
if (! in_array($notification->order_archive_id, $orderFinished)) {
$this->sendNotification($notification->order_archive_id);
$orderFinished[] = $notification->order_archive_id;
// var_dump('add'.$notification->order_archive_id);
// var_dump($notification->toArray());
}
}
/*
* kodnál az összes olyat ami régebbi mint mostani dátum hogy ne küldjön újat.
*/
$Notifies = SupplierNotifierModel::whereIn('order_archive_id', $orderFinished)->whereNull('sent')->where('need_send', '<', Carbon::now());
if ($Notifies->get()->count() > 0) {
$Nid = $Notifies->pluck('id')->toArray();
$Notifies->update(['sent' => Carbon::now()]);
$this->info('SupplierNotifier update:'.implode(',', $Nid));
}
}
public function testTimes()
{
/*
* Pl: hétfőn 7 órakkor leadott megrendelés emlékeztető hetfő 10,15 óra.
*/
/* $searchDay = 'Monday';
$searchDate = new Carbon(); //or whatever Carbon instance you're using
$lastDay = Carbon::createFromTimeStamp(strtotime("last $searchDay", $searchDate->timestamp));
$lastDay->setTime(7,rand(0,58));
$checkTime=$lastDay->toDateTimeString();
//$this->nowTime=$lastDay->setTime(7+rand(0,13),rand(0,58));
$this->nowTime=$lastDay->setTime(10,rand(0,58));
$this->nowTime=$lastDay->setTime(15,rand(0,58));
$this->info('nowTime>'.$this->nowTime->toDateTimeString());
$this->diffTime($checkTime);*/
$checkTime = Carbon::parse('2023-09-04');
$checkTime->setTime(7, rand(0, 58));
$nowTime = Carbon::parse('2023-09-04');
$nowTime->setTime(10, 59);
$nowTime->setTime(15, 59);
$this->nowTime = $nowTime;
// $this->info('nowTime>'.$this->nowTime->toDateTimeString());
// $this->diffTime($checkTime);
/*
* hétfőn 21 órakkor leadott megrendelés emlékeztető kedd 7,12 óra.
*/
$checkTime = Carbon::parse('2023-09-04');
$checkTime->setTime(21, rand(0, 58));
$nowTime = Carbon::parse('2023-09-05');
/*
$nowTime->setTime(5,59);
$nowTime->setTime(7,59);
$nowTime->setTime(10,59);
$nowTime->setTime(12,59);
*/
$nowTime->setTime(12, 59);
$this->nowTime = $nowTime;
// $this->info('nowTime>'.$this->nowTime->toDateTimeString());
// $this->diffTime($checkTime);
/*
* Kedden 18 órakkor leadott megrendelés emlékeztető Szerda 7,12 óra.
*/
$checkTime = Carbon::parse('2023-09-05');
$checkTime->setTime(18, rand(0, 58));
$nowTime = Carbon::parse('2023-09-06');
/*
$nowTime->setTime(5,59);
$nowTime->setTime(7,59);
$nowTime->setTime(10,59);
$nowTime->setTime(12,59);
*/
$nowTime->setTime(12, 59);
$this->nowTime = $nowTime;
// $this->info('nowTime>'.$this->nowTime->toDateTimeString().' '.$this->nowTime->format('l'));
// $this->diffTime($checkTime);
/*
* Péntek 13 órakkor leadott megrendelés emlékeztető hétfő 7,12 óra.
*/
$checkTime = Carbon::parse('2023-09-08');
$checkTime->setTime(13, rand(0, 58));
$nowTime = Carbon::parse('2023-09-11');
/*
$nowTime->setTime(5,59);
$nowTime->setTime(7,59);
$nowTime->setTime(10,59);
$nowTime->setTime(12,59);
*/
$nowTime->setTime(16, 50);
$this->nowTime = $nowTime;
/*
$this->info('nowTime>'.$this->nowTime->toDateTimeString().' '.$this->nowTime->format('l'));
$this->makeTime($checkTime);
*/
/*
* Péntek 13 órakkor leadott megrendelés emlékeztető hétfő 7,12 óra.
*/
$checkTime = Carbon::parse('2023-09-08');
$checkTime->setTime(19, rand(0, 58));
$nowTime = Carbon::parse('2023-09-11');
/*
$nowTime->setTime(5,59);
$nowTime->setTime(7,59);
$nowTime->setTime(10,59);
$nowTime->setTime(12,59);
*/
$nowTime->setTime(16, 50);
$this->nowTime = $nowTime;
$this->makeTime($checkTime);
/*
$this->info('nowTime>'.$this->nowTime->toDateTimeString().' '.$this->nowTime->format('l'));
$this->diffTime($checkTime);
*/
}
}