485 lines
24 KiB
PHP
485 lines
24 KiB
PHP
<?php
|
|
|
|
namespace App\Commands;
|
|
|
|
use App\Component\Models\ActionTypes;
|
|
use App\Component\Models\Base;
|
|
use App\Component\Models\Dishes;
|
|
use App\Component\Models\ExchangeActions;
|
|
use App\Component\Models\ExchangeDeleted;
|
|
use App\Component\Models\ExchangeItems;
|
|
use App\Component\Models\ExchangeOrders;
|
|
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;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class GETOrderHistory extends HRCCommand implements HRCCommandInterface {
|
|
protected $signature = 'getorderhistory';
|
|
|
|
public function command($input, $output = null) {
|
|
|
|
if (isset($input['order_id'])) {
|
|
|
|
if (isset($input['opened']) && isset($input['closed'])) {
|
|
$order_find = ExchangeOrders::where('opened', urldecode($input['opened']))
|
|
->where('closed', urldecode($input['closed']))
|
|
->where('code', $input['order_id'])
|
|
->first();
|
|
$shift_id = $order_find['shift_id'];
|
|
$bill_count = 0;
|
|
$slice_trigger = 0;
|
|
$slice_order = 0;
|
|
$merged_order_items = $sliced_order_items = $moved_order_data = [];
|
|
$merge_trigger = 0;
|
|
$move_trigger = 0;
|
|
|
|
$order_info = [];
|
|
$order = ExchangeActions::where('order_code', $input['order_id'])
|
|
->where('shift_id', $shift_id)
|
|
->orderBy('time', 'asc')
|
|
->get();
|
|
foreach ($order as $key => $item) {
|
|
$action_type = ActionTypes::where('type_id', $item['action_type'])->first();
|
|
$action_name = $action_type['name'];
|
|
$staff_name = Staff::getName($item['who']);
|
|
|
|
if ($item['action_type'] == 1) {
|
|
$action_name = 'Заказ создан';
|
|
}
|
|
|
|
if ($item['action_type'] == 2) {
|
|
$shiftOnlineItem = ExchangeItems::where('order_code', $item['order_code'])
|
|
->where('shift_id', $shift_id)
|
|
->where('dishes_code', $item['more'])
|
|
->first();
|
|
$unitsList = UnitsList::where('id', $shiftOnlineItem['units_code'])->first();
|
|
$units = Units::where('id', $unitsList['unit_id'])->first();
|
|
if ($units) {
|
|
$unit_name = $units['name'];
|
|
} else {
|
|
$unit_name = 'шт';
|
|
}
|
|
$dish = Dishes::getName($item['more']);
|
|
$action_name = $action_name . ': ' . $dish . ' в количестве ' . $item['value'] . ' ' . $unit_name;
|
|
}
|
|
|
|
if ($item['action_type'] == 5) {
|
|
$shiftOnlineDeletedItem = ExchangeDeleted::where('order_code', $item['order_code'])
|
|
->where('shift_id', $shift_id)
|
|
->where('item_id', $item['order_position'])
|
|
->first();
|
|
$unitsList = UnitsList::where('id', $shiftOnlineDeletedItem['units_id'])->first();
|
|
$units = Units::where('id', $unitsList['unit_id'])->first();
|
|
if ($units) {
|
|
$unit_name = $units['name'];
|
|
} else {
|
|
$unit_name = 'шт';
|
|
}
|
|
|
|
$dish = Dishes::getName($shiftOnlineDeletedItem['dishes_code']);
|
|
$action_name = $action_name . ': ' . $dish . ' в количестве ' . $item['value'] . ' ' . $unit_name;
|
|
}
|
|
|
|
if ($item['action_type'] == 11) {
|
|
$action_name = 'Назначен гость: ' . Base::data_decode($item['value']);
|
|
}
|
|
|
|
if ($item['action_type'] == 12) {
|
|
$action_name = 'Гость отменен: ' . Base::data_decode($item['value']);
|
|
}
|
|
if ($item['action_type'] == 21) {
|
|
$item_more = Base::data_decode($item['more']);
|
|
$item_value = Base::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['action_type'] == 22) {
|
|
$dish = Dishes::getName($item['order_position']);
|
|
$action_name = 'Отменена позиции: ' . $dish . ' в количестве ' . $item['value'];
|
|
}
|
|
|
|
if ($item['action_type'] == 24) {
|
|
$action_name = 'Оплачено наличными: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 25) {
|
|
$action_name = 'Безналичный расчет: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 26) {
|
|
$action_name = 'Оплачено кредитной картой: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 26) {
|
|
$action_name = 'Оплачено кредитной картой: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 27) {
|
|
$action_name = 'Питание штата: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 28) {
|
|
$action_name = 'Зачтен аванс: ' . $item['value'] . ' BYN';
|
|
}
|
|
|
|
if ($item['action_type'] == 29 && $item['value'] > 0) {
|
|
$action_name = 'Сдача: ' . $item['value'] . ' BYN';
|
|
} elseif ($item['action_type'] == 29 && $item['value'] == 0) {
|
|
continue;
|
|
}
|
|
|
|
if ($item['action_type'] == 35) {
|
|
$action_name = $action_name . ': ' . $item['value'];
|
|
$slice_items = [];
|
|
if ($item['more']) {
|
|
if (Base::validate_json($item['more'])) {
|
|
$slice_order_items = json_decode(utf8_encode($item['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
|
} else {
|
|
$slice_order_items = json_decode(utf8_encode(base64_decode($item['more'], TRUE)), 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']);
|
|
}
|
|
$staff_name = Staff::getName($item['who']);
|
|
$sliced_order_items[] = array('order' => $slice_order, 'time' => date('d.m.Y H:i:s', strtotime($item['time'])), 'staff' => $staff_name, 'items' => $slice_items);
|
|
$slice_trigger = 1;
|
|
}
|
|
}
|
|
|
|
if ($item['action_type'] == 31) {
|
|
$action_name = $action_name . ' c заказом: ' . $item['value'];
|
|
$merge_order = $item['value'];
|
|
$item_actions = ExchangeActions::where('order_code', $item['value'] + 0)
|
|
->where('shift_id', $shift_id)
|
|
->where('action_type', 32)
|
|
->get();
|
|
foreach ($item_actions as $key => $item_action) {
|
|
if ($item_action['more'] != '') {
|
|
$merge_items_before = $merge_items_after = $merge_items = $merge_order_item_before = $merge_order_item_after = $merged_items = [];
|
|
if (Base::validate_json($item_action['more'])) {
|
|
$merge_order_items = json_decode(utf8_encode($item_action['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
|
} else {
|
|
$merge_order_items = json_decode(base64_decode($item_action['more']), true);
|
|
}
|
|
|
|
$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']);
|
|
}
|
|
$staff_name = Staff::getName($item['who']);
|
|
$merged_order_items[] = array('order' => $merge_order, 'time' => date('d.m.Y H:i:s', strtotime($item['time'])), 'staff' => $staff_name, 'items' => $merge_items);
|
|
$merge_trigger = 1;
|
|
}
|
|
}
|
|
}
|
|
if ($item['action_type'] == 39) {
|
|
$action_name = Base::data_decode($item['value']);
|
|
$order_data = ExchangeActions::where('order_code', $item['order_code'] + 0)
|
|
->where('shift_id', $shift_id)
|
|
->where('action_type', 39)
|
|
->get();
|
|
foreach ($order_data as $key => $data) {
|
|
$staff_name = Staff::getName($data['who']);
|
|
$moved_order_data[] = array('staff_name' => $staff_name, 'time' => date('d.m.Y H:i:s', strtotime($data['time'])), 'data' => Base::data_decode($data['value']));
|
|
$move_trigger = 1;
|
|
}
|
|
}
|
|
|
|
if ($item['action_type'] == 45) {
|
|
$action_name = Base::data_decode($item['value']);
|
|
}
|
|
|
|
if ($item['action_type'] == 46) {
|
|
$action_name = 'Изменено количество гостей: ' . $item['value'];
|
|
}
|
|
|
|
if ($item['action_type'] == 47) {
|
|
$items = ExchangeItems::where('code', $item['order_position'])
|
|
->where('shift_id', $shift_id)
|
|
->first();
|
|
$dish = Dishes::getName($items['menu_code']);
|
|
$course = $item['value'] + 1;
|
|
$action_name = 'Установлен курс №' . $course . ' для позиции: ' . $dish;
|
|
}
|
|
|
|
$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,
|
|
'move_trigger' => $move_trigger,
|
|
'sliced_order_items' => $sliced_order_items,
|
|
'merged_order_items' => $merged_order_items,
|
|
'moved_order_data' => $moved_order_data,
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/*---*/
|
|
$bill_count = 0;
|
|
$slice_trigger = 0;
|
|
$slice_order = 0;
|
|
$merged_order_items = $sliced_order_items = $moved_order_data = [];
|
|
$merge_trigger = 0;
|
|
$move_trigger = 0;
|
|
|
|
|
|
$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_name = Staff::getName($item['who']);
|
|
|
|
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();
|
|
if ($units) {
|
|
$unit_name = $units['name'];
|
|
} else {
|
|
$unit_name = 'шт';
|
|
}
|
|
$dish = Dishes::getName($item['more']);
|
|
$action_name = $action_name . ': ' . $dish . ' в количестве ' . $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();
|
|
if ($units) {
|
|
$unit_name = $units['name'];
|
|
} else {
|
|
$unit_name = 'шт';
|
|
}
|
|
|
|
$dish = Dishes::getName($shiftOnlineDeletedItem['dishes_code']);
|
|
$action_name = $action_name . ': ' . $dish . ' в количестве ' . $item['value'] . ' ' . $unit_name;
|
|
}
|
|
|
|
if ($item['type_action'] == 11) {
|
|
$action_name = 'Назначен гость: ' . Base::data_decode($item['value']);
|
|
}
|
|
|
|
if ($item['type_action'] == 12) {
|
|
$action_name = 'Гость отменен: ' . Base::data_decode($item['value']);
|
|
}
|
|
if ($item['type_action'] == 21) {
|
|
$item_more = Base::data_decode($item['more']);
|
|
$item_value = Base::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::getName($item['order_position']);
|
|
$action_name = 'Отменена позиции: ' . $dish . ' в количестве ' . $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']) {
|
|
if (Base::validate_json($item['more'])) {
|
|
$slice_order_items = json_decode(utf8_encode($item['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
|
} else {
|
|
$slice_order_items = json_decode(utf8_encode(base64_decode($item['more'], TRUE)), 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']);
|
|
}
|
|
$staff_name = Staff::getName($item['who']);
|
|
$sliced_order_items[] = array('order' => $slice_order, 'time' => date('d.m.Y H:i:s', strtotime($item['time'])), 'staff' => $staff_name, '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_items_before = $merge_items_after = $merge_items = $merge_order_item_before = $merge_order_item_after = $merged_items = [];
|
|
if (Base::validate_json($item_action['more'])) {
|
|
$merge_order_items = json_decode(utf8_encode($item_action['more']), true, JSON_INVALID_UTF8_SUBSTITUTE);
|
|
} else {
|
|
$merge_order_items = json_decode(base64_decode($item_action['more']), true);
|
|
}
|
|
|
|
$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']);
|
|
}
|
|
$staff_name = Staff::getName($item['who']);
|
|
$merged_order_items[] = array('order' => $merge_order, 'time' => date('d.m.Y H:i:s', strtotime($item['time'])), 'staff' => $staff_name, 'items' => $merge_items);
|
|
$merge_trigger = 1;
|
|
}
|
|
}
|
|
}
|
|
if ($item['type_action'] == 39) {
|
|
$action_name = Base::data_decode($item['value']);
|
|
$order_data = ShiftOnlineActions::where('order_code', $item['order_code'] + 0)
|
|
->where('type_action', 39)
|
|
->get();
|
|
foreach ($order_data as $key => $data) {
|
|
$staff_name = Staff::getName($data['who']);
|
|
$moved_order_data[] = array('staff_name' => $staff_name, 'time' => date('d.m.Y H:i:s', strtotime($data['time'])), 'data' => Base::data_decode($data['value']));
|
|
$move_trigger = 1;
|
|
}
|
|
}
|
|
|
|
if ($item['type_action'] == 45) {
|
|
$action_name = Base::data_decode($item['value']);
|
|
}
|
|
|
|
if ($item['type_action'] == 46) {
|
|
$action_name = 'Изменено количество гостей: ' . $item['value'];
|
|
}
|
|
|
|
if ($item['type_action'] == 47) {
|
|
$items = ShiftOnlineItems::where('code', $item['order_position'])->first();
|
|
$dish = Dishes::getName($items['menu_code']);
|
|
$course = $item['value'] + 1;
|
|
$action_name = 'Установлен курс №' . $course . ' для позиции: ' . $dish;
|
|
}
|
|
|
|
$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,
|
|
'move_trigger' => $move_trigger,
|
|
'sliced_order_items' => $sliced_order_items,
|
|
'merged_order_items' => $merged_order_items,
|
|
'moved_order_data' => $moved_order_data,
|
|
];
|
|
} else {
|
|
return [
|
|
'status' => 'success',
|
|
'error_message' => 'Проверьте введенные данные',
|
|
];
|
|
}
|
|
}
|
|
} |