Files
jongryangje/app/Views/bag/order_phone_receipt.php
taekyoungc acce968f9c feat: 전화접수 관리·주문 개선 + 매뉴얼 화면 바로가기
- 전화접수 관리: 배달일 기준 조회, 컬럼 보강(구분/포장 O·X/결제/수령/입금/총금액/취소),
  헤더 정렬, 배달일 수정 저장, 포장 명세·포장량 수정, 입금자 영수증 출력
- 전화 주문 접수: 행추가 → 일괄표(카테고리 그룹·포장 헤더)
- 매뉴얼 소제목에 '화면 열기' 바로가기(실제 GET 라우트만 연결)
- shop_order_item.soi_packed_qty 컬럼 추가(SQL)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 14:31:21 +09:00

90 lines
4.4 KiB
PHP

<?php
declare(strict_types=1);
/**
* 입금자 영수증 출력용 (독립 인쇄 화면).
* @var object $order
* @var list<object> $items
* @var array|null $shop
* @var string $lgName
*/
$nf = static fn ($n): string => number_format((int) $n);
$paid = (int) ($order->so_paid ?? 0) === 1;
$addr = $shop ? trim((string) ($shop['ds_addr'] ?? '') . ' ' . (string) ($shop['ds_addr_detail'] ?? '')) : '';
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>입금 영수증 #<?= (int) $order->so_idx ?></title>
<style>
* { box-sizing: border-box; }
body { font-family: 'Malgun Gothic', 'Noto Sans KR', sans-serif; color: #111; margin: 0; padding: 24px; }
.receipt { max-width: 620px; margin: 0 auto; }
h1 { text-align: center; font-size: 1.5rem; letter-spacing: 8px; margin: 0 0 4px; }
.sub { text-align: center; color: #555; font-size: .85rem; margin-bottom: 18px; }
.meta { width: 100%; border-collapse: collapse; margin-bottom: 14px; font-size: .85rem; }
.meta th { text-align: left; width: 90px; color: #555; padding: 3px 6px; vertical-align: top; }
.meta td { padding: 3px 6px; }
table.items { width: 100%; border-collapse: collapse; font-size: .82rem; }
table.items th, table.items td { border: 1px solid #bbb; padding: 5px 7px; }
table.items th { background: #f1f3f5; }
table.items td.num { text-align: right; }
tfoot td { font-weight: bold; background: #fafafa; }
.paidbox { margin-top: 16px; text-align: center; font-size: 1rem; font-weight: bold; }
.paid { color: #c0392b; }
.unpaid { color: #888; }
.foot { margin-top: 26px; text-align: center; color: #666; font-size: .75rem; }
.noprint { text-align: center; margin: 18px 0; }
@media print { .noprint { display: none; } body { padding: 0; } }
</style>
</head>
<body>
<div class="receipt">
<h1>영 수 증</h1>
<div class="sub"><?= esc($lgName) ?> 종량제 봉투 · 전화 접수 입금 영수증</div>
<table class="meta">
<tr><th>접수번호</th><td>#<?= (int) $order->so_idx ?></td><th>접수일</th><td><?= esc((string) ($order->so_order_date ?? '')) ?></td></tr>
<tr><th>판매소</th><td><?= esc($shop['ds_name'] ?? (string) ($order->so_ds_name ?? '')) ?> <?= $shop ? '(' . esc((string) $shop['ds_shop_no']) . ')' : '' ?></td><th>배달일</th><td><?= esc((string) ($order->so_delivery_date ?? '')) ?></td></tr>
<tr><th>담당자</th><td><?= esc($shop['ds_rep_name'] ?? '') ?></td><th>전화</th><td><?= esc($shop['ds_tel'] ?? '') ?></td></tr>
<tr><th>주소</th><td colspan="3"><?= esc($addr) ?></td></tr>
<tr><th>결제수단</th><td><?= esc((string) ($order->so_payment_type ?? '')) ?></td><th>입금</th><td><?= $paid ? '입금완료' : '미입금' ?></td></tr>
</table>
<table class="items">
<thead>
<tr><th>품목</th><th>단가</th><th>수량</th><th>금액</th></tr>
</thead>
<tbody>
<?php $sumQty = 0; $sumAmt = 0; foreach (($items ?? []) as $it): ?>
<?php $q = (int) ($it->soi_qty ?? 0); $a = (int) ($it->soi_amount ?? 0); $sumQty += $q; $sumAmt += $a; ?>
<tr>
<td><?= esc((string) ($it->soi_bag_code ?? '')) ?> <?= esc((string) ($it->soi_bag_name ?? '')) ?></td>
<td class="num"><?= $nf($it->soi_unit_price ?? 0) ?></td>
<td class="num"><?= $nf($q) ?></td>
<td class="num"><?= $nf($a) ?></td>
</tr>
<?php endforeach; ?>
<?php if (empty($items)): ?>
<tr><td colspan="4" style="text-align:center;color:#999;">품목 내역이 없습니다.</td></tr>
<?php endif; ?>
</tbody>
<tfoot>
<tr><td>합계</td><td></td><td class="num"><?= $nf($sumQty) ?></td><td class="num"><?= $nf($sumAmt) ?></td></tr>
</tfoot>
</table>
<div class="paidbox <?= $paid ? 'paid' : 'unpaid' ?>"><?= $paid ? '● 입금 완료' : '미입금' ?></div>
<div class="foot">출력일: <?= date('Y-m-d H:i') ?></div>
<div class="noprint">
<button type="button" onclick="window.print()" style="padding:8px 18px;font-size:.9rem;cursor:pointer;">인쇄</button>
<button type="button" onclick="window.close()" style="padding:8px 18px;font-size:.9rem;cursor:pointer;margin-left:6px;">닫기</button>
</div>
</div>
<script>window.addEventListener('load', function () { setTimeout(function () { window.print(); }, 300); });</script>
</body>
</html>