Files
admin-php-module/commands/POSTOrder.php
miroman-afk fb46c8e739 v.2.27
Fixed reports
2023-05-02 15:21:54 +03:00

238 lines
8.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Commands;
use App\Component\Models\Base;
use App\Component\Models\Dishes;
use App\Component\Models\OrderBot;
use App\Component\Models\OrderBotStorage;
use App\Component\Models\OrderItems;
use App\Component\Models\Orders;
use App\Component\Models\TerminalUpdate;
use App\Console\Commands\HRCCommand;
use App\Console\Commands\HRCCommandInterface;
use Carbon\Carbon;
class POSTOrder extends HRCCommand implements HRCCommandInterface {
protected $signature = 'postorder';
public function command($input, $output = null) {
if (isset($input['task'])) {
if ($input['task'] == 'create') {
$order = new Orders;
$order->staff_id = 1;
$order->is_send = 0;
$order->save();
$order = Orders::where('id', '=', $order->id)->first();
$orderItems = OrderItems::where('order_id', '=', $order->id)->get();
if (!isset($orderItems)) {
$orderItems = [];
}
return [
'status' => 'success',
'order' => $order,
'orderItems' => $orderItems,
'message' => 'Заказ создан',
];
}
if ($input['task'] == 'delete' && isset($input['id'])) {
$order = Orders::where('id', '=', $input['id'])->first();
if ($order->total_count > 0) {
return [
'status' => 'success',
'error_message' => 'Разрешено удаление только пустых заказов.',
];
} else {
$order->delete();
return [
'status' => 'success',
'message' => 'Заказ удален',
];
}
}
if ($input['task'] == 'update' && isset($input['order_id'])) {
$order = Orders::find($input['order_id']);
if (isset($input['item']) && $input['item'] == 'add') {
$orderItem = new OrderItems;
$orderItem->order_id = $input['order_id'];
$orderItem->item_id = $input['item_id'];
$orderItem->item_count = $input['item_count'];
$item_price = Dishes::where('code', '=', $input['item_id'])->first();
$orderItem->item_price = $item_price->cosht;
$orderItem->staff_id = 1;
$orderItem->save();
}
if (isset($input['client_id'])) {
if ($input['client_id'] !== null) {
$order->client_id = $input['client_id'];
} else {
$order->client_id = null;
}
}
if (isset($input['item_count'])) {
$order->total_count = $order->total_count + $input['item_count'];
$order->total_price = $order->total_price + ($item_price->cosht * $input['item_count']);
}
$order->is_send = 0;
$order->save();
return [
'status' => 'success',
'message' => 'Заказ обновлен',
];
}
if ($input['task'] == 'complete' && isset($input['id'])) {
$order = Orders::find($input['id']);
$order->is_send = 1;
if (isset($input['client_id'])) {
$order->client_id = $input['client_id'];
}
$order->is_delivery = $input['is_delivery'];
$order->is_pickup = $input['is_pickup'];
$order->save();
return [
'status' => 'success',
'message' => 'Заказ отправлен',
];
}
if ($input['task'] == 'pay' && isset($input['info'])) {
$test_json = Base::validate_json(urldecode($input['info']));
if (!$test_json) {
return [
'status' => 'fail',
'message' => 'Ошибка обработки JSON',
];
}
$order_info = json_decode(urldecode($input['info']), true);
if (isset($order_info['order_id'])) {
$order_id = intval($order_info['order_id']);
$order = OrderBotStorage::where('id', $order_id)->first();
if (!isset($order)) {
return [
'status' => 'fail',
'message' => 'Заказ с данным ID не найден',
];
}
} else {
return [
'status' => 'fail',
'message' => 'Отсутствует ID заказа',
];
}
if (isset($order_info['transaction_id'])) {
$transaction_id = intval($order_info['transaction_id']);
$order_data = json_decode(base64_decode($order['order']), true);
if ($transaction_id != $order_data['id']) {
return [
'status' => 'fail',
'message' => 'ID заказа не соответствует ID транзакции',
];
}
} else {
return [
'status' => 'fail',
'message' => 'Отсутствует ID транзакции',
];
}
if (isset($order_info['time'])) {
$pay_time = $order_info['time'];
if ($pay_time < $order['created_at']) {
return [
'status' => 'fail',
'message' => 'Время создания заказа больше чем время оплаты',
];
}
} else {
return [
'status' => 'fail',
'message' => 'Отсутствует время оплаты заказа',
];
}
if (isset($order_info['amount'])) {
$amount = floatval($order_info['amount']);
if ($amount != floatval($order_data['price'])) {
return [
'status' => 'fail',
'message' => 'Сумма оплаты не соответствует сумме заказа',
];
}
} else {
return [
'status' => 'fail',
'message' => 'Отсутствует сумма оплаты',
];
}
if (isset($order_info['is_print'])) {
$is_print = $order_info['is_print'];
} else {
$is_print = false;
}
if (isset($order_info['is_closed'])) {
$is_closed = $order_info['is_closed'];
} else {
$is_closed = false;
}
if ($order['is_send'] === 0) {
return [
'status' => 'fail',
'message' => 'Заказ ещё не отправлен',
];
} else {
$pay_task = array(
'order_id' => $order_id,
'transaction_id' => $transaction_id,
'time' => $pay_time,
'amount' => $amount,
'is_print' => $is_print,
'is_closed' => $is_closed
);
$todayDate = Carbon::now('Europe/Minsk')->format('Y-m-d H:i:m');
$bot_info = OrderBot::first();
$terminal_id = $bot_info['terminal_id'];
$check_order = TerminalUpdate::where('method', 'payorder')
->where('more', base64_encode(json_encode($pay_task)))
->count();
if ($check_order > 0) {
return [
'status' => 'fail',
'message' => 'Задача оплаты в обработке',
];
}
$task = new TerminalUpdate;
$task->terminal_id = $terminal_id;
$task->next_at = $todayDate;
$task->method = 'payorder';
$task->period = 1;
$task->is_cycle = 0;
$task->more = base64_encode(json_encode($pay_task));
$task->save();
}
return [
'status' => 'success',
'message' => 'Информация об оплате отправлена',
];
}
} else {
return [
'status' => 'success',
'error_message' => 'Проверьте введенные данные',
];
}
}
}