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' => 'Проверьте введенные данные', ]; } } }