253 lines
9.2 KiB
PHP
253 lines
9.2 KiB
PHP
<?php
|
||
|
||
namespace App\Commands;
|
||
|
||
use App\Component\Models\ActionTypes;
|
||
use App\Component\Models\Dishes;
|
||
use App\Component\Models\ShiftOnlineActions;
|
||
use App\Component\Models\ShiftOnlineDeleted;
|
||
use App\Component\Models\ShiftOnlineItems;
|
||
use App\Component\Models\Staff;
|
||
use App\Component\Models\Units;
|
||
use App\Component\Models\UnitsList;
|
||
use App\Console\Commands\HRCCommand;
|
||
use App\Console\Commands\HRCCommandInterface;
|
||
|
||
class GETOrderHistory extends HRCCommand implements HRCCommandInterface {
|
||
protected $signature = 'getorderhistory';
|
||
|
||
public function command($input, $output = null) {
|
||
|
||
if (isset($input['order_id'])) {
|
||
$bill_count = 0;
|
||
$slice_trigger = 0;
|
||
$slice_order = 0;
|
||
$merged_order_items = $sliced_order_items = [];
|
||
$merge_trigger = 0;
|
||
|
||
function data_decode($data) {
|
||
$alph = [
|
||
"А", "Б", "В", "Г", "Д",
|
||
"Е", "Ё", "Ж", "З", "И",
|
||
"Й", "К", "Л", "М", "Н",
|
||
"О", "П", "Р", "С", "Т",
|
||
"У", "Ф", "Х", "Ц", "Ч",
|
||
"Ш", "Щ", "Ъ", "Ы", "Ь",
|
||
"Э", "Ю", "Я",
|
||
"а", "б", "в", "г", "д",
|
||
"е", "ё", "ж", "з", "и",
|
||
"й", "к", "л", "м", "н",
|
||
"о", "п", "р", "с", "т",
|
||
"у", "ф", "х", "ц", "ч",
|
||
"ш", "щ", "ъ", "ы", "ь",
|
||
"э", "ю", "я",
|
||
];
|
||
|
||
foreach ($alph as $key => $letter) {
|
||
$haystack = mb_convert_encoding($data, "CP1251", "UTF-8");
|
||
$needle = $letter;
|
||
$pos = strripos($haystack, $needle);
|
||
if ($pos === false) {
|
||
$after_conv = false;
|
||
} else {
|
||
$after_conv = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!$after_conv) {
|
||
foreach ($alph as $key => $letter) {
|
||
$haystack = $data;
|
||
$needle = $letter;
|
||
$pos = strripos($haystack, $needle);
|
||
if ($pos === false) {
|
||
$before_conv = false;
|
||
} else {
|
||
$before_conv = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if ($after_conv) {
|
||
$retval = mb_convert_encoding($data, "CP1251", "UTF-8");
|
||
} elseif ($before_conv) {
|
||
$retval = $data;
|
||
} else {
|
||
$retval = $data;
|
||
}
|
||
return $retval;
|
||
}
|
||
|
||
$order = ShiftOnlineActions::where('order_code', $input['order_id'])->orderBy('time', 'asc')->get();
|
||
foreach ($order as $key => $item) {
|
||
$action_type = ActionTypes::where('type_id', $item['type_action'])->first();
|
||
$action_name = $action_type['name'];
|
||
$staff = Staff::where('code', $item['who'])->first();
|
||
$staff_name = $staff['name'];
|
||
|
||
if ($item['type_action'] == 1) {
|
||
$action_name = 'Заказ создан';
|
||
}
|
||
|
||
if ($item['type_action'] == 2) {
|
||
$shiftOnlineItem = ShiftOnlineItems::where('order_code', $item['order_code'])->where('dish_code', $item['more'])->first();
|
||
$unitsList = UnitsList::where('id', $shiftOnlineItem['units_code'])->first();
|
||
$units = Units::where('id', $unitsList['unit_id'])->first();
|
||
$unit_name = $units['name'];
|
||
$dish = Dishes::where('code', $item['more'])->first();
|
||
$action_name = $action_name . ': ' . $dish['name'] . ' в количестве ' . $item['value'] . ' ' . $unit_name;
|
||
}
|
||
|
||
if ($item['type_action'] == 5) {
|
||
$shiftOnlineDeletedItem = ShiftOnlineDeleted::where('order_code', $item['order_code'])->where('item_id', $item['order_position'])->first();
|
||
$unitsList = UnitsList::where('id', $shiftOnlineDeletedItem['units_id'])->first();
|
||
$units = Units::where('id', $unitsList['unit_id'])->first();
|
||
$unit_name = $units['name'];
|
||
$dish = Dishes::where('code', $shiftOnlineDeletedItem['dishes_code'])->first();
|
||
$action_name = $action_name . ': ' . $dish['name'] . ' в количестве ' . $item['value'] . ' ' . $unit_name;
|
||
}
|
||
|
||
if ($item['type_action'] == 11) {
|
||
$action_name = 'Назначен гость: ' . data_decode($item['value']);
|
||
}
|
||
|
||
if ($item['type_action'] == 12) {
|
||
$action_name = 'Гость отменен: ' . data_decode($item['value']);
|
||
}
|
||
if ($item['type_action'] == 21) {
|
||
$item_more = data_decode($item['more']);
|
||
$item_value = data_decode($item['value']);
|
||
if ($item_more == 'предчек' && $item_value != 'HRC Pay Box') {
|
||
$action_name = 'Распечатан предчек';
|
||
$bill_count = $bill_count + 1;
|
||
} elseif ($item_more == 'счет') {
|
||
$action_name = 'Распечатан окончательный счет';
|
||
} elseif ($item_value == 'HRC Pay Box') {
|
||
continue;
|
||
}
|
||
}
|
||
|
||
if ($item['type_action'] == 22) {
|
||
$dish = Dishes::where('code', $item['order_position'])->first();
|
||
$action_name = 'Отменена позиции: ' . $dish['name'] . ' в количестве ' . $item['value'];
|
||
}
|
||
|
||
if ($item['type_action'] == 24) {
|
||
$action_name = 'Оплачено наличными: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 25) {
|
||
$action_name = 'Безналичный расчет: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 26) {
|
||
$action_name = 'Оплачено кредитной картой: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 26) {
|
||
$action_name = 'Оплачено кредитной картой: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 27) {
|
||
$action_name = 'Питание штата: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 28) {
|
||
$action_name = 'Зачтен аванс: ' . $item['value'] . ' BYN';
|
||
}
|
||
|
||
if ($item['type_action'] == 29 && $item['value'] > 0) {
|
||
$action_name = 'Сдача: ' . $item['value'] . ' BYN';
|
||
} elseif ($item['type_action'] == 29 && $item['value'] == 0) {
|
||
continue;
|
||
}
|
||
|
||
if ($item['type_action'] == 35) {
|
||
$action_name = $action_name . ': ' . $item['value'];
|
||
$slice_items = [];
|
||
if ($item['more']) {
|
||
$slice_order_items = json_decode(utf8_encode($item['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
||
$slice_order_items = $slice_order_items['items'];
|
||
$slice_order = $item['value'];
|
||
foreach ($slice_order_items as $key => $slice_order_item) {
|
||
$slice_items[] = array('id' => $key + 1, 'name' => $slice_order_item['name'], 'count' => $slice_order_item['count']);
|
||
}
|
||
$sliced_order_items[] = array('order' => $slice_order, 'items' => $slice_items);
|
||
$slice_trigger = 1;
|
||
}
|
||
}
|
||
|
||
if ($item['type_action'] == 31) {
|
||
$action_name = $action_name . ' c заказом: ' . $item['value'];
|
||
$merge_order = $item['value'];
|
||
$item_actions = ShiftOnlineActions::where('order_code', $item['value'] + 0)
|
||
->where('type_action', 32)
|
||
->get();
|
||
foreach ($item_actions as $key => $item_action) {
|
||
if ($item_action['more']) {
|
||
$merge_trigger = 1;
|
||
$merge_items_before = $merge_items_after = $merge_items = $merge_order_item_before = $merge_order_item_after = $merged_items = [];
|
||
$merge_order_items = json_decode(utf8_encode($item_action['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
||
$merge_order_items_before = $merge_order_items['before']['items'];
|
||
$merge_order_items_after = $merge_order_items['after']['items'];
|
||
foreach ($merge_order_items_before as $key => $merge_order_item_before) {
|
||
$merge_items_before[] = array('id' => $key + 1,
|
||
'code' => $merge_order_item_before['id'],
|
||
'name' => $merge_order_item_before['name'],
|
||
'count' => $merge_order_item_before['count']);
|
||
}
|
||
foreach ($merge_order_items_after as $key => $merge_order_item_after) {
|
||
$merge_items_after[] = array('id' => $key + 1,
|
||
'code' => $merge_order_item_after['id'],
|
||
'name' => $merge_order_item_after['name'],
|
||
'count' => $merge_order_item_after['count']);
|
||
}
|
||
foreach ($merge_order_items_after as $key => $merge_order_item_after) {
|
||
if (!in_array(array('id' => $key + 1,
|
||
'code' => $merge_order_item_after['id'],
|
||
'name' => $merge_order_item_after['name'],
|
||
'count' => $merge_order_item_after['count']), $merge_items_before, true)) {
|
||
$merged_items[] = array('code' => $merge_order_item_after['id'],
|
||
'name' => $merge_order_item_after['name'],
|
||
'count' => $merge_order_item_after['count']);
|
||
}
|
||
}
|
||
foreach ($merged_items as $key => $merged_item) {
|
||
$merge_items[] = array('id' => $key + 1,
|
||
'code' => $merged_item['code'],
|
||
'name' => $merged_item['name'],
|
||
'count' => $merged_item['count']);
|
||
}
|
||
$merged_order_items[] = array('order' => $merge_order, 'items' => $merge_items);
|
||
}
|
||
}
|
||
}
|
||
|
||
if ($item['type_action'] == 46) {
|
||
$action_name = 'Изменено количество гостей: ' . $item['value'];
|
||
}
|
||
|
||
if ($item['type_action'] == 45 || $item['type_action'] == 39) {
|
||
$action_name = data_decode($item['value']);
|
||
}
|
||
|
||
$order_info[] = array('id' => $key, 'action' => $action_name, 'who' => $staff_name, 'time' => $item['time'], 'workgroup' => $item['workgroup'], 'workcode' => $item['workcode']);
|
||
}
|
||
return [
|
||
'status' => 'success',
|
||
'actions' => $order_info,
|
||
'bill' => $bill_count,
|
||
'slice_trigger' => $slice_trigger,
|
||
'merge_trigger' => $merge_trigger,
|
||
'sliced_order_items' => $sliced_order_items,
|
||
'merged_order_items' => $merged_order_items,
|
||
];
|
||
} else {
|
||
return [
|
||
'status' => 'success',
|
||
'error_message' => 'Проверьте введенные данные',
|
||
];
|
||
}
|
||
}
|
||
} |