Fixed reports
This commit is contained in:
miroman-afk
2023-05-02 15:21:54 +03:00
parent 70120653f7
commit fb46c8e739
78 changed files with 21233 additions and 1892 deletions

View File

@@ -10,56 +10,84 @@
<span class="text-muted">{{start_date}} - {{end_date}}</span>
</div>
<div class="modal-body p-lg">
<div class="table-responsive" ng-if="report_delete.length > 0">
<table class="table table-bordered" ng-repeat="report in report_delete">
<thead>
<th>Смена#{{ report.shift_id }} Заказ #{{ report.order_code }}</th>
</thead>
<tbody>
<tr ng-repeat="item in report.items">
<td>
<h6>{{ item.dish_name }}
<small>
<p>Время удаления: <strong>{{item.time}}</strong></p>
<p>Цена товара: <strong>{{item.price}} BYN</strong></p>
<p>Количество: <strong>{{item.count}} шт</strong></p>
<p>На сумму: <strong>{{item.sum}} BYN</strong></p>
</small>
</h6>
<p>
Удалил:
<strong>{{ item.who }}</strong>
<br/> Подтвердил:
<strong>{{ item.approved }}</strong>
<br/> Причина:
<strong>{{ item.reason }}</strong>
</p>
</td>
</tr>
</tbody>
<hr>
</table>
<hr>
<table class="table table-bordered">
<tbody>
<tr>
<td>
<strong>Итого</strong>
</td>
<td style="text-align: right">
<strong>{{ report_delete.total_count }}</strong> удалений</td>
<td style="text-align: right">на сумму
<strong>{{ report_delete.total_sum | curr }} BYN</strong>
</td>
</tr>
</tbody>
</table>
<div ng-if="report_delete.length > 0">
<div class="m-b" id="shiftsAccordion">
<div class="panel box" ng-repeat="reportShift in report_delete">
<div class="box-header">
<span class="pull-right label text-sm">Удалено: {{reportShift.totalCount}} позиций. На сумму {{reportShift.totalSum | curr}} BYN</span>
<a data-toggle="collapse" data-parent="#accordion" data-target="#c_{{reportShift.shift_id}}"
class="collapsed" aria-expanded="false">
<h2>Смена №{{reportShift.shift_id}}</h2>
</a>
</div>
<div class="m-b" id="ordersAccordion">
<div id="c_{{reportShift.shift_id}}" class="panel box collapse" aria-expanded="false">
<div ng-repeat="reportOrder in reportShift.orders">
<div id="c_{{reportShift.shift_id}}_{{reportOrder.order_id}}" class="box-header">
<span class="pull-right label text-sm">Удалено: {{reportOrder.totalCount}} позиций. На сумму {{reportOrder.totalSum | curr}} BYN</span>
<a data-toggle="collapse" data-parent="#ordersAccordion"
data-target="#co_{{reportShift.shift_id}}_{{reportOrder.order_id}}"
class="collapsed" aria-expanded="false">
<h2>Заказ №{{reportOrder.order_id}}</h2>
</a>
</div>
<div id="co_{{reportShift.shift_id}}_{{reportOrder.order_id}}" class="collapse" aria-expanded="false">
<div class="box-body">
<div class="table-responsive-xl">
<table class="table table-bordered m-0">
<thead>
<tr>
<th>Имя</th>
<th>Время/Причина</th>
<th>Товар/цена</th>
<th>Кол-во</th>
<th>Итог</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in reportOrder.items">
<td>{{ item.who }}</td>
<td>
<ul class="list-unstyled">
<li>{{ item.time }}</li>
<li><small>{{ item.reason }}</small></li>
</ul>
</td>
<td>
<ul class="list-unstyled">
<li>{{ item.dish }}</li>
<li><small>{{ item.price | curr }} BYN</small></li>
</ul>
</td>
<td>{{ item.count }}</td>
<td>{{ item.total | curr}} BYN</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<table class="table table-bordered">
<tbody>
<tr>
<td>
<strong>Итого</strong>
</td>
<td style="text-align: right">
<strong>{{ totalCount }}</strong> удалений
</td>
<td style="text-align: right">на сумму
<strong>{{ totalSum | curr }} BYN</strong>
</td>
</tr>
</tbody>
</table>
<div ng-if="report_delete.length == 0">
<p>Удаления отсутствуют</p>
</div>

View File

@@ -0,0 +1,49 @@
<div class="modal-dialog modal-lg">
<div class="modal-content" id="report-discounts">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<button class="btn btn-icon white" ng-click="printElem('#report-discounts')">
<i class="fa fa-print"></i>
</button>
<h4 class="modal-title">{{globals.currentUser.organization.name}}</h4>
<h5 class="modal-title">Отчет по скидкам</h5>
<span class="text-muted">{{start_date}} - {{end_date}}</span>
</div>
<div class="modal-body p-lg">
<div class="table-responsive" ng-if="orders_count > 0">
<div class="table-responsive">
<p>Количество заказов со скидками: <strong>{{orders_count}}</strong><br>
Сумма заказов без скидок: <strong>{{orders_full_sum.toDivide()}} BYN</strong><br>
Сумма заказов со скидками: <strong>{{orders_order_sum.toDivide()}} BYN</strong><br>
Сумма скидок: <strong>{{orders_sale_sum.toDivide()}} BYN</strong>
</p>
<table class="table table-striped table-hover white b-a" ng-repeat="(discount_value, orders) in orders_info">
<thead>
<th>Скидка {{discount_value}}%</th>
</thead>
<thead>
<tr>
<th>Количество</th>
<th>Сумма заказов без скидки</th>
<th>Сумма заказов со скидкой</th>
<th>Сумма скидок</th>
</tr>
</thead>
<tbody>
<tr ng-click="getOrders(discount_value, 'report-discounts', 'report-orders-list')" data-toggle="tooltip" data-placement="bottom" title="Нажмите для просмотра списка заказов">
<td>{{orders.info.orders_count}}</td>
<td>{{orders.info.full_sum.toDivide()}} BYN</td>
<td>{{orders.info.order_sum.toDivide()}} BYN</td>
<td>{{orders.info.sale_sum.toDivide()}} BYN</td>
</tr>
</tbody>
</table>
</div>
</div>
<div ng-if="orders_count == 0">
<p>Заказы со скидками отсутствуют</p>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,78 @@
<div class="modal-dialog modal-lg">
<div class="modal-content" id="report-order-info">
<div class="modal-header">
<button type="button" class="close" ng-click="prevModal('report-order-info', 'report-orders-list')">
<i class="material-icons md-24">arrow_back</i>
</button>
<p>
Номер заказа: <strong>#{{order_info.order_id}}</strong><br>
Время закрытия: <strong>{{order_info.closed}}</strong><br>
Персонал: <strong>{{order_info.who_close}}</strong><br>
Статус заказа: <span class="label success">{{order_info.order_status}}</span><br>
</p>
</div>
<div class="modal-body p-lg">
<div class="table-responsive">
<table class="table table-striped white b-a">
<thead>
<tr>
<th>ID</th>
<th>Блюдо</th>
<th style="width: 80px">Кол-во</th>
<th style="width: 140px">Стоимость</th>
<th style="width: 180px">Итог</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in order_info.items">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.count * item.cof}}</td>
<td>{{item.price | curr}} BYN</td>
<td>{{item.amount | curr}} BYN <p ng-if="item.discount > 0">
<span>(Скидка: {{item.discount}}%)</span></p></td>
</tr>
<tr>
<td colspan="4" class="text-right"><strong>Итого</strong></td>
<td>{{order_info.amount | curr}} BYN</td>
</tr>
<tr>
<td colspan="4" class="text-right no-border"
ng-if="order_info.full_price - order_info.amount > 0">
<strong>Сумма скидки</strong></td>
<td ng-if="order_info.full_price - order_info.amount > 0">{{order_info.full_price -
order_info.amount | curr}} BYN
</td>
</tr>
<tr>
<td colspan="4" class="text-right no-border"><strong>Оплачено:</strong></td>
</tr>
<tr ng-if="order_info.cash > 0">
<td colspan="5" class="text-right no-border">Наличные: <strong>{{order_info.cash
| curr}} BYN</strong></td>
</tr>
<tr ng-if="order_info.credit > 0">
<td colspan="5" class="text-right no-border">Кред. карта: <strong>{{order_info.credit | curr}}
BYN</strong></td>
</tr>
<tr ng-if="order_info.clearing > 0">
<td colspan="5" class="text-right no-border">Питание штата: <strong>{{order_info.clearing |
curr}}
BYN</strong>
</tr>
<tr ng-if="order_info.presale > 0">
<td colspan="5" class="text-right no-border">Зачтен аванс: <strong>{{order_info.presale | curr}}
BYN</strong></td>
</tr>
<tr ng-if="order_info.self > 0">
<td colspan="5" class="text-right no-border">Безнал: <strong>{{order_info.self | curr}}
BYN</strong>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,44 @@
<div class="modal-dialog modal-lg">
<div class="modal-content" id="report-orders-list">
<div class="modal-header">
<button type="button" class="close" ng-click="prevModal('report-orders-list', 'report-discounts')">
<i class="material-icons md-24">arrow_back</i>
</button>
<h5 class="modal-title">Список заказов со скидкой {{discount_id}}%:</h5>
</div>
<div class="modal-body p-lg">
<div class="table-responsive" ng-if="orders_count > 0">
<div class="table-responsive">
<table class="table table-striped table-hover white b-a">
<thead>
<tr>
<th>Смена №</th>
<th>Заказ №</th>
<th>Сумма без скидки</th>
<th>Сумма со скидкой</th>
<th>Сумма скидки</th>
<th>Открыт</th>
<th>Закрыт</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="order in orders_list" ng-click="getItems(order.code, order.opened, order.closed, 'report-orders-list', 'report-order-info')" data-toggle="tooltip" data-placement="bottom" title="Нажмите для просмотра информации о заказе">
<td>{{order.shift_id}}</td>
<td>{{order.code}}</td>
<td>{{order.full_sum | curr}} BYN</td>
<td>{{order.order_sum | curr}} BYN</td>
<td>{{order.sale_sum | curr}} BYN</td>
<td>{{order.opened}}</td>
<td>{{order.closed}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div ng-if="orders_count == 0">
<p>Заказы со скидками отсутствуют</p>
</div>
</div>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<div class="modal-dialog modal-lg">
<div class="modal-content" id="reportRealisation">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<button type="button" class="close" data-dismiss="modal" ng-click="closeModal('reportRealisation')">&times;</button>
<button class="btn btn-icon white" ng-click="printElem('#reportRealisation')">
<i class="fa fa-print"></i>
</button>
@@ -9,9 +9,9 @@
<h5 class="modal-title">Отчет по реализации</h5>
<span class="text-muted">{{start_date}} - {{end_date}}</span>
</div>
<div class="modal-body p-lg">
<div id="tableRealisation" class="modal-body p-lg">
<div class="table-responsive" ng-if="report_realisation.length > 0">
<table class="table table-bordered" ng-repeat="printer in report_realisation">
<table class="table table-bordered table-striped datatable" ui-jq="dataTable" ui-options="dataTableOpt" ng-repeat="printer in report_realisation">
<thead>
<th style="width: 70%">{{ printer.name }}</th>
<th style="width: 10%; text-align: right">{{ printer.count }}</th>
@@ -26,9 +26,7 @@
</tr>
</tbody>
</table>
<div ng-if="return_printers.length > 0">
<hr>
<table class="table table-bordered" ng-repeat="ret_print in return_printers">
<thead>
<th style="width: 70%">{{ ret_print.name }} (возврат)</th>
@@ -46,8 +44,6 @@
</table>
</div>
<hr>
<table class="table table-bordered">
<tbody>
<tr>

View File

@@ -13,120 +13,171 @@
<div class="table-responsive">
<table class="table table-bordered">
<tbody>
<tr>
<td colspan="2">
<strong>Реализация</strong>
</td>
</tr>
<tr>
<td>Количество заказов</td>
<td style="text-align: right">{{ statistic.orders_count }}</td>
</tr>
<tr>
<td>Сумма заказов (без скидки) <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.total_sum | curr}}</td>
</tr>
<tr>
<td>Скидка <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.discount_sum | curr}}</td>
</tr>
<tr>
<td colspan="2">
<strong>Операции внесения/изъятия</strong>
</td>
</tr>
<tr>
<td>Внесено наличными</td>
<td style="text-align: right">{{ fiscal.income_sum | curr }} BYN</td>
</tr>
<tr>
<td>Выплачено наличными</td>
<td style="text-align: right">{{ fiscal.outcome_sum | curr }} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Реализация</strong>
</td>
</tr>
<tr>
<td>Количество заказов</td>
<td style="text-align: right">{{ realisation.orders_count }}</td>
</tr>
<tr>
<td>Сумма заказов (без скидки)</td>
<td style="text-align: right">{{ realisation.orders_sum_without_sales | curr}} BYN</td>
</tr>
<tr>
<td>Скидка</td>
<td style="text-align: right">{{ realisation.sale_sum | curr}} BYN</td>
</tr>
<tr>
<td>Итоговоя сумма <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.orders_sum | curr}}</td>
</tr>
<tr>
<td>Отложенных заказы</td>
<td style="text-align: right">{{ statistic.wait_count }}</td>
</tr>
<tr>
<td>Отложено на сумму <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.wait_sum | curr}}</td>
</tr>
<tr>
<td>Итоговоя сумма</td>
<td style="text-align: right">{{ realisation.orders_sum_with_sales | curr}} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Возвраты</strong>
</td>
</tr>
<tr>
<td>Количество возвратов</td>
<td style="text-align: right">{{ statistic.return_count }}</td>
</tr>
<tr>
<td>Сумма возвратов <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.return_sum | curr }}</td>
</tr>
<tr>
<td colspan="2">
<strong>Возвраты</strong>
</td>
</tr>
<tr>
<td>Количество возвратов</td>
<td style="text-align: right">{{ returns.returned_orders_count }}</td>
</tr>
<tr>
<td>Сумма возвратов</td>
<td style="text-align: right">{{ returns.returned_items_sum | curr }} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Статистика</strong>
</td>
</tr>
<tr>
<td>Количество гостей</td>
<td style="text-align: right">{{ statistic.clients_count }}</td>
</tr>
<tr>
<td>Средний чек <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.avg_order_sum | curr}}</td>
</tr>
<tr>
<td>Средний чек на 1-го гостя <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.avg_order_client_sum | curr}}</td>
</tr>
<tr>
<td colspan="2">
<strong>Аннулирования</strong>
</td>
</tr>
<tr>
<td>Количество аннулирований</td>
<td style="text-align: right">{{ cancellations.cancellations_count }}</td>
</tr>
<tr>
<td>Сумма аннулирований</td>
<td style="text-align: right">{{ cancellations.cancellations_sum | curr }} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Авансы</strong>
</td>
</tr>
<tr>
<td>Количество авансов полученных</td>
<td style="text-align: right">{{ statistic.in_presale_count }}</td>
</tr>
<tr>
<td>Сумма авансов полученных <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.in_presale_sum | curr}}</td>
</tr>
<tr>
<td>Количество авансов возвращенных</td>
<td style="text-align: right">{{ statistic.out_presale_count }}</td>
</tr>
<tr>
<td>Сумма авансов возвращенных <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.out_presale_sum | curr}}</td>
</tr>
<tr>
<td colspan="2">
<strong>Статистика</strong>
</td>
</tr>
<tr>
<td>Количество гостей</td>
<td style="text-align: right">{{ statistic.clients_count }}</td>
</tr>
<tr>
<td>Средний чек</td>
<td style="text-align: right">{{ statistic.clients_average_sum | curr}} BYN</td>
</tr>
<tr>
<td>Средний чек на 1-го гостя</td>
<td style="text-align: right">{{ statistic.clients_average_sum_one | curr}} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Формы оплаты</strong>
</td>
</tr>
<tr>
<td>Наличный расчет <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.cash | curr}}</td>
</tr>
<tr>
<td>Наличный расчет (отложенные) <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.wait_sum | curr}}</td>
</tr>
<tr>
<td>Безналичный расчет <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.clearing | curr}}</td>
</tr>
<tr>
<td>Кредитными картами <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.credit | curr}}</td>
</tr>
<tr>
<td>Питание штата <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.self | curr}}</td>
</tr>
<tr>
<td>По ранее полученному авансу <strong>BYN</strong></td>
<td style="text-align: right">{{ statistic.presale | curr}}</td>
</tr>
<tr>
<td colspan="2">
<strong>Авансы</strong>
</td>
</tr>
<tr>
<td>Количество авансов полученных</td>
<td style="text-align: right">{{ presales.presales_income_count }}</td>
</tr>
<tr ng-if="presales.presales_income_cash_sum > 0">
<td>Сумма авансов полученных наличными</td>
<td style="text-align: right">{{ presales.presales_income_cash_sum | curr}} BYN</td>
</tr>
<tr ng-if="presales.presales_income_credit_sum > 0">
<td>Сумма авансов полученных кредитной картой</td>
<td style="text-align: right">{{ presales.presales_income_credit_sum | curr}} BYN</td>
</tr>
<tr ng-if="presales.presales_income_clearing_sum > 0">
<td>Сумма авансов полученных безналичным расчетом</td>
<td style="text-align: right">{{ presales.presales_income_clearing_sum | curr}} BYN</td>
</tr>
<tr ng-if="presales.presales_income_discount_sum > 0">
<td>Сумма авансов полученных через скидку</td>
<td style="text-align: right">{{ presales.presales_income_discount_sum | curr}} BYN</td>
</tr>
<tr>
<td>Количество авансов возвращенных</td>
<td style="text-align: right">{{ presales.presales_outcome_count }}</td>
</tr>
<tr ng-if="presales.presales_outcome_cash_sum > 0">
<td>Сумма авансов возвращенных наличными</td>
<td style="text-align: right">{{ presales.presales_outcome_cash_sum | curr}} BYN</td>
</tr>
<tr ng-if="presales.presales_outcome_credit_sum > 0">
<td>Сумма авансов возвращенных на кредитную карту</td>
<td style="text-align: right">{{ presales.presales_outcome_credit_sum | curr}} BYN</td>
</tr>
<tr ng-if="presales.presales_outcome_clearing_sum > 0">
<td>Сумма авансов возвращенных безналичным расчетом</td>
<td style="text-align: right">{{ presales.presales_outcome_clearing_sum | curr}} BYN</td>
</tr>
<tr>
<td colspan="2">
<strong>Формы оплаты</strong>
</td>
</tr>
<tr>
<td>Наличный расчет</td>
<td style="text-align: right">{{ payments.pay_cash | curr}} BYN</td>
</tr>
<tr>
<td>Кредитными картами</td>
<td style="text-align: right">{{ payments.pay_credit | curr}} BYN</td>
</tr>
<tr>
<td>Безналичный расчет</td>
<td style="text-align: right">{{ payments.pay_clearing | curr}} BYN</td>
</tr>
<tr>
<td>Питание штата</td>
<td style="text-align: right">{{ payments.pay_self | curr}} BYN</td>
</tr>
<tr>
<td>По ранее полученному авансу</td>
<td style="text-align: right">{{ payments.pay_presale | curr}} BYN</td>
</tr>
<tr>
<td>Онлайн</td>
<td style="text-align: right">{{ payments.pay_online | curr}} BYN</td>
</tr>
<tr>
<td>Иные способы оплаты</td>
<td style="text-align: right">{{ payments.pay_another | curr}} BYN</td>
</tr>
<tr ng-if="pay_delivery > 0">
<td>Доставка</td>
<td style="text-align: right">{{ payments.pay_delivery | curr}} BYN</td>
</tr>
<tr ng-if="pay_echeck > 0">
<td>Электронный чек</td>
<td style="text-align: right">{{ payments.pay_echeck | curr}} BYN</td>
</tr>
</tbody>
</table>