사이트·관리자 봉투 물류 기능(수불·통계·레포트·재고·발주)과 DB·메뉴·E2E를 운영 반영한다.
통계 분석(전년대비·월별·계절별), 수급계획·LOT 수불, 지정판매소·실사·메뉴 링크 등을 포함한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
99
app/Views/bag/analytics_yoy.php
Normal file
99
app/Views/bag/analytics_yoy.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
$year = (int) ($year ?? (int) date('Y'));
|
||||
$queried = (bool) ($queried ?? false);
|
||||
$filters = is_array($filters ?? null) ? $filters : [];
|
||||
$report = is_array($report ?? null) ? $report : [];
|
||||
$lgName = (string) ($lgName ?? '');
|
||||
$rows = is_array($report['rows'] ?? null) ? $report['rows'] : [];
|
||||
$months = is_array($report['months'] ?? null) ? $report['months'] : range(1, 12);
|
||||
$prevYear = (int) ($report['prevYear'] ?? $year - 1);
|
||||
$printExtra = [
|
||||
$lgName !== '' ? $lgName : '',
|
||||
'(단위: 매, 원) ' . $year . '년',
|
||||
];
|
||||
?>
|
||||
<?= view('components/print_header', ['printTitle' => '전년대비 판매 통계분석', 'printExtraLines' => $printExtra]) ?>
|
||||
|
||||
<section class="border-b border-gray-300 p-2 shrink-0 bg-control-panel no-print">
|
||||
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
||||
<span class="text-sm font-bold text-gray-700">전년 대비 판매 분석</span>
|
||||
<div class="flex gap-2">
|
||||
<button type="button" onclick="window.print()" class="border border-btn-print-border text-gray-600 px-3 py-1 rounded-sm text-sm">인쇄</button>
|
||||
<a href="<?= base_url('dashboard') ?>" class="border border-gray-400 text-gray-700 px-3 py-1 rounded-sm text-sm">종료</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="p-2 bg-white border-b border-gray-200 no-print text-sm">
|
||||
<form method="get" action="<?= site_url('bag/analytics/year-over-year') ?>" class="flex flex-wrap items-end gap-3">
|
||||
<input type="hidden" name="search" value="1"/>
|
||||
<div>
|
||||
<label class="block text-gray-600 mb-0.5">조회년도</label>
|
||||
<input type="number" name="year" value="<?= (int) $year ?>" min="2000" max="2100" class="border border-gray-300 rounded px-2 py-1 w-24"/>
|
||||
</div>
|
||||
<button type="submit" class="bg-btn-search text-white px-4 py-1 rounded-sm">조회</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="m-2 border border-gray-300 overflow-auto">
|
||||
<p class="text-center text-sm font-bold py-2 bg-gray-50 border-b">전년대비 판매 통계분석</p>
|
||||
<table class="w-full data-table text-xs">
|
||||
<thead>
|
||||
<tr>
|
||||
<th rowspan="2" class="w-32">품목</th>
|
||||
<th rowspan="2" class="w-14">구분</th>
|
||||
<th rowspan="2" class="w-12">년도</th>
|
||||
<th rowspan="2" class="w-16">계</th>
|
||||
<?php foreach ($months as $mo): ?>
|
||||
<th class="w-14"><?= (int) $mo ?>월</th>
|
||||
<?php endforeach; ?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="text-right">
|
||||
<?php if ($queried && $rows === []): ?>
|
||||
<tr><td colspan="<?= 4 + count($months) ?>" class="text-center text-gray-500 py-6">해당 자료가 없습니다.</td></tr>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
$byProduct = [];
|
||||
foreach ($rows as $block) {
|
||||
$code = (string) ($block['bag_code'] ?? '');
|
||||
if (! isset($byProduct[$code])) {
|
||||
$byProduct[$code] = ['name' => (string) ($block['bag_name'] ?? ''), 'blocks' => []];
|
||||
}
|
||||
$byProduct[$code]['blocks'][] = $block;
|
||||
}
|
||||
foreach ($byProduct as $product):
|
||||
$productRowspan = 0;
|
||||
foreach ($product['blocks'] as $b) {
|
||||
$productRowspan += count($b['lines'] ?? []);
|
||||
}
|
||||
$printedProduct = false;
|
||||
foreach ($product['blocks'] as $block):
|
||||
$sectionRows = count($block['lines'] ?? []);
|
||||
$sectionPrinted = false;
|
||||
foreach ($block['lines'] ?? [] as $line):
|
||||
?>
|
||||
<tr>
|
||||
<?php if (! $printedProduct): ?>
|
||||
<td class="text-left pl-2 font-medium" rowspan="<?= (int) $productRowspan ?>"><?= esc($product['name']) ?></td>
|
||||
<?php $printedProduct = true; endif; ?>
|
||||
<?php if (! $sectionPrinted): ?>
|
||||
<td class="text-center" rowspan="<?= (int) $sectionRows ?>"><?= esc((string) ($block['section'] ?? '')) ?></td>
|
||||
<?php $sectionPrinted = true; endif; ?>
|
||||
<td class="text-center"><?= esc((string) ($line['label'] ?? '')) ?></td>
|
||||
<td class="tabular-nums font-semibold"><?= number_format((int) ($line['total'] ?? 0)) ?></td>
|
||||
<?php foreach ($months as $mo): ?>
|
||||
<td class="tabular-nums <?= ($line['label'] ?? '') === '증감' && (int) (($line['months'][$mo] ?? 0)) < 0 ? 'text-red-600' : '' ?>">
|
||||
<?= number_format((int) (($line['months'][$mo] ?? 0))) ?>
|
||||
</td>
|
||||
<?php endforeach; ?>
|
||||
</tr>
|
||||
<?php
|
||||
endforeach;
|
||||
endforeach;
|
||||
endforeach;
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
Reference in New Issue
Block a user