From ebd1180d89e41c2894a40a038c4fcfd4e538e175 Mon Sep 17 00:00:00 2001 From: miroman-afk <74014189+miroman-afk@users.noreply.github.com> Date: Mon, 13 Jun 2022 13:16:50 +0300 Subject: [PATCH] v.2.15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлен журнал заказов Добавлены отчеты: по переносам, по объединениям, по разбиениям --- commands/GETDataReport.php | 218 +++++++++++++++++++++ commands/GETOrderHistory.php | 30 ++- web/controllers/shifts.js | 34 ++++ web/controllers/terminals.js | 2 +- web/views/dashboard/items/items-total.html | 12 ++ web/views/reports/items/merge.html | 125 ++++++++++++ web/views/reports/items/move.html | 45 +++++ web/views/reports/items/slice.html | 124 ++++++++++++ web/views/shifts/index.html | 22 ++- 9 files changed, 605 insertions(+), 7 deletions(-) create mode 100644 commands/GETDataReport.php create mode 100644 web/views/reports/items/merge.html create mode 100644 web/views/reports/items/move.html create mode 100644 web/views/reports/items/slice.html diff --git a/commands/GETDataReport.php b/commands/GETDataReport.php new file mode 100644 index 0000000..3ed3599 --- /dev/null +++ b/commands/GETDataReport.php @@ -0,0 +1,218 @@ + $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; + } + + function staffName($data) { + $staff_name = Staff::where('code', $data)->where('is_history', 0)->first(); + if ($staff_name) { + $staff_name = $staff_name['name']; + } else { + $staff_name = Staff::where('code', $data)->where('is_history', 1)->first(); + if ($staff_name) { + $staff_name = $staff_name['name']; + } else { + $staff_name = 'Связанный персонал не найден'; + } + } + return $staff_name; + } + + $reportType = $input['type']; + $shiftNumber = $input['shift_id']; + //merge, slice, move + if (isset($reportType) && isset($shiftNumber)) { + //merge + if ($reportType == 'merge') { + $merged_order_items = []; + $orders = ExchangeActions::select('order_code')->where('shift_id', $input['shift_id'])->groupBy('order_code')->get(); + foreach ($orders as $key => $order) { + $actions = ExchangeActions::where('order_code', $order['order_code'])->where('shift_id', $input['shift_id'])->orderBy('time', 'asc')->get(); + foreach ($actions as $key => $item) { + if ($item['action_type'] == 31) { + $merge_order = $item['value']; + $item_actions = ExchangeActions::where('order_code', $item['value'] + 0) + ->where('shift_id', $input['shift_id']) + ->where('action_type', 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'], + 'sale_price' => $merge_order_item_before['sale_price']); + } + 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'], + 'sale_price' => $merge_order_item_after['sale_price']); + } + 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'], + 'sale_price' => $merge_order_item_after['sale_price']), $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'], + 'sale_price' => $merge_order_item_after['sale_price']); + } + } + 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'], + 'sale_price' => $merged_item['sale_price']); + } + $staff_name = staffName($item['who']); + $start_order_place = ExchangeActions::where('order_code', $item['order_code'])->where('action_type', 45)->where('shift_id', $input['shift_id'])->first(); + $start_order_place = data_decode($start_order_place['value']); + $end_order_place = ExchangeActions::where('order_code', $merge_order + 0)->where('action_type', 45)->where('shift_id', $input['shift_id'])->first(); + $end_order_place = data_decode($end_order_place['value']); + $merged_order_items[] = array('start_order' => $item['order_code'], 'end_order' => $merge_order + 0, 'time' => date('d.m.Y H:i:s', strtotime($item['time'])), 'staff' => $staff_name, 'start_order_place' => $start_order_place, 'end_order_place' => $end_order_place, 'merge_order_items' => $merge_order_items, 'items' => $merge_items); + } + } + } + } + } + return [ + 'status' => 'success', + 'shift_id' => $input['shift_id'], + 'count' => count($merged_order_items), + 'data' => $merged_order_items, + ]; + } + //slice + if ($reportType == 'slice') { + $sliced_order_data = []; + $orders = ExchangeActions::select('order_code')->where('shift_id', $input['shift_id'])->groupBy('order_code')->get(); + $action_count = ExchangeActions::where('shift_id', $input['shift_id'])->where('action_type', 35)->count(); + if ($action_count > 0) { + foreach ($orders as $key => $order) { + $actions = ExchangeActions::where('order_code', $order['order_code'])->where('shift_id', $input['shift_id'])->where('action_type', 35)->orderBy('time', 'asc')->get(); + foreach ($actions as $key => $action) { + $value = $action['value']; + $codeOrder = $action['order_code']; + $moved_items = json_decode(utf8_encode($action['more']), true, JSON_INVALID_UTF8_SUBSTITUTE); + $from_place = ExchangeActions::where('order_code', $codeOrder)->where('action_type', 45)->where('shift_id', $input['shift_id'])->first(); + $from_place = data_decode($from_place['value']); + $to_place = ExchangeActions::where('order_code', $value)->where('action_type', 45)->where('shift_id', $input['shift_id'])->first(); + $to_place = data_decode($to_place['value']); + $to_action = ExchangeActions::where('value', $codeOrder)->where('order_code', $value)->where('action_type', 34)->where('shift_id', $input['shift_id'])->first(); + $start_data = json_decode(utf8_encode($to_action['more']), true, JSON_INVALID_UTF8_SUBSTITUTE); + $staff_name = staffName($action['who']); + $time = date('d.m.Y H:i:s', strtotime($action['time'])); + $sliced_order_data[] = array('from_order' => $codeOrder, 'from_place' => $from_place, 'staff' => $staff_name, 'time' => $time, 'start_data' => $start_data, 'to_order' => $value, 'to_place' => $to_place, 'moved_items' => $moved_items); + } + } + } + return [ + 'status' => 'success', + 'shift_id' => $input['shift_id'], + 'count' => $action_count, + 'data' => $sliced_order_data, + ]; + } + + if ($reportType == 'move') { + $orders = ExchangeActions::select('order_code')->where('shift_id', $input['shift_id'])->groupBy('order_code')->get(); + foreach ($orders as $key => $order) { + $actions = ExchangeActions::where('order_code', $order['order_code'])->where('shift_id', $input['shift_id'])->orderBy('time', 'asc')->get(); + foreach ($actions as $key => $item) { + if ($item['action_type'] == 39) { + $staff_name_to = staffName($item['who']); + $time_to = date('d.m.Y H:i:s', strtotime($item['time'])); + $data_from = ExchangeActions::where('order_code', $item['order_code'])->where('shift_id', $input['shift_id'])->where('action_type', 45)->first(); + $staff_name_from = staffName($data_from['who']); + $time_from = date('d.m.Y H:i:s', strtotime($data_from['time'])); + $moved_order_data[] = array('order' => $item['order_code'], 'move_from' => data_decode($data_from['value']), 'move_from_staff' => $staff_name_from, 'move_from_time' => $time_from, 'move_to' => data_decode($item['value']), 'move_to_staff' => $staff_name_to, 'move_to_time' => $time_to); + } + } + } + return [ + 'status' => 'success', + 'count' => count($moved_order_data), + 'data' => $moved_order_data, + ]; + } + } else { + return [ + 'status' => 'success', + 'error_message' => 'Проверьте введенные данные', + ]; + } + } +} \ No newline at end of file diff --git a/commands/GETOrderHistory.php b/commands/GETOrderHistory.php index ff75e8b..28a7999 100644 --- a/commands/GETOrderHistory.php +++ b/commands/GETOrderHistory.php @@ -22,8 +22,9 @@ class GETOrderHistory extends HRCCommand implements HRCCommandInterface { $bill_count = 0; $slice_trigger = 0; $slice_order = 0; - $merged_order_items = $sliced_order_items = []; + $merged_order_items = $sliced_order_items = $moved_order_data = []; $merge_trigger = 0; + $move_trigger = 0; function data_decode($data) { $alph = [ @@ -197,7 +198,6 @@ class GETOrderHistory extends HRCCommand implements HRCCommandInterface { ->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']; @@ -242,15 +242,37 @@ class GETOrderHistory extends HRCCommand implements HRCCommandInterface { } } $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 = 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::where('code', $data['who'])->where('is_history', 0)->first(); + if ($staff_name) { + $staff_name = $staff_name['name']; + } else { + $staff_name = Staff::where('code', $data['who'])->where('is_history', 1)->first(); + if ($staff_name) { + $staff_name = $staff_name['name']; + } else { + $staff_name = 'Связанный персонал не найден'; + } + } + $moved_order_data[] = array('staff_name' => $staff_name, 'time' => date('d.m.Y H:i:s', strtotime($data['time'])), 'data' => data_decode($data['value'])); + $move_trigger = 1; + } + } if ($item['type_action'] == 46) { $action_name = 'Изменено количество гостей: ' . $item['value']; } - if ($item['type_action'] == 45 || $item['type_action'] == 39) { + if ($item['type_action'] == 45) { $action_name = data_decode($item['value']); } @@ -262,8 +284,10 @@ class GETOrderHistory extends HRCCommand implements HRCCommandInterface { '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 [ diff --git a/web/controllers/shifts.js b/web/controllers/shifts.js index 52c4dcb..2358a06 100644 --- a/web/controllers/shifts.js +++ b/web/controllers/shifts.js @@ -20,6 +20,7 @@ $scope.currentPage = 1; $scope.statistic = {}; $scope.staffs = []; + $scope.parseFloat = parseFloat; $scope.add = function() { $scope.reImport = {}; @@ -76,6 +77,39 @@ }); }; + $scope.reportMerged = function (shift) { + smartRequest.get('v1/datareport?type=merge&shift_id=' + shift.id, function (data) { + $scope.report_merge = data.data; + $scope.report_merge.count = data.count; + $scope.report_merge.shift_id = data.shift_id; + $scope.start_date = shift.opened; + $scope.end_date = shift.closed; + $('#report-merge').modal(); + }); + }; + + + $scope.reportMoved = function (shift) { + smartRequest.get('v1/datareport?type=move&shift_id=' + shift.id, function (data) { + $scope.report_move = data.data; + $scope.report_move.count = data.count; + $scope.start_date = shift.opened; + $scope.end_date = shift.closed; + $('#report-move').modal(); + }); + }; + + $scope.reportSliced = function (shift) { + smartRequest.get('v1/datareport?type=slice&shift_id=' + shift.id, function (data) { + $scope.report_slice = data.data; + $scope.report_slice.count = data.count; + $scope.report_slice.shift_id = data.shift_id; + $scope.start_date = shift.opened; + $scope.end_date = shift.closed; + $('#report-slice').modal(); + }); + }; + $scope.reportDelete = function (shift) { smartRequest.get('report/deleted?shift_id=' + shift.id, function (data) { $scope.report_delete = data.deleted; diff --git a/web/controllers/terminals.js b/web/controllers/terminals.js index cdf2766..8329de8 100644 --- a/web/controllers/terminals.js +++ b/web/controllers/terminals.js @@ -169,7 +169,7 @@ terminal: $scope.terminal_id, task: task.code }, function (data) { - Notification.success('Задача запушена'); + Notification.success('Задача запущена'); }); }; diff --git a/web/views/dashboard/items/items-total.html b/web/views/dashboard/items/items-total.html index bbd5376..17fa0b9 100644 --- a/web/views/dashboard/items/items-total.html +++ b/web/views/dashboard/items/items-total.html @@ -42,6 +42,9 @@
Время переноса: {{ moved_order.time }}
+Пользователь: {{ moved_order.staff_name }}
+{{ moved_order.data }}
+