퍼스트가든에서 사용하는 사용자 함수 및 관련파일 추가
This commit is contained in:
4
manager/ticket/_common.php
Normal file
4
manager/ticket/_common.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
include_once '../../common.php';
|
||||
include_once '../config.php';
|
||||
include_once '../lib/lib.php';
|
||||
216
manager/ticket/adm_category.php
Normal file
216
manager/ticket/adm_category.php
Normal file
@ -0,0 +1,216 @@
|
||||
<?php
|
||||
// 베이커리 재고관리
|
||||
include_once "_common.php";
|
||||
// 배포 시 아래 주석 해제
|
||||
// if (!isset($_SESSION['user_id'])) header( 'Location: FG_MANAGER_URL' ); // 로그인 되어있지 않으면 로그인 페이지로 보냄
|
||||
|
||||
include_once "head.php";
|
||||
|
||||
// 검색 변수 초기화
|
||||
!isset($search) ?? "";
|
||||
!isset($where) ?? "";
|
||||
!isset($search_count) ?? "";
|
||||
|
||||
$is_debug = false; // 디버깅 시 true로 변경
|
||||
$is_member = true;
|
||||
|
||||
// ord_by 로 넘어온 값이 있으면 반영
|
||||
$ord_by = isset($_REQUEST["ord_by"]) ? $_REQUEST["ord_by"] : "product_name ASC";
|
||||
|
||||
// 날짜로 검색한 경우 해당 날짜를 사용하고, 아닌 경우 오늘 날짜를 사용함
|
||||
$searchDate = isset($_REQUEST["searchDate"]) ? $_REQUEST["searchDate"] : date("Y-m-d"); // 검색일
|
||||
$prevDate = date("Y-m-d", strtotime("-1 day", strtotime($searchDate))); // 검색 전일
|
||||
$edit_datetime = date('Y-m-d H:i:s'); // 최종 수정 시간 업데이트
|
||||
|
||||
$authInfo = getAuthorInfo($searchDate);
|
||||
if (!$authInfo) {
|
||||
$authInfo = ['worker' => '', 'author' => ''];
|
||||
}
|
||||
|
||||
$table = $fg['visitor_category_table'];
|
||||
$record_count = get_num_rows($table);
|
||||
$ord_by = " ORDER BY idx ASC ";
|
||||
$R = get_result($table, $ord_by, $query_limit);
|
||||
|
||||
?>
|
||||
<style>
|
||||
.bakery tfoot {
|
||||
font-weight: 600;
|
||||
}
|
||||
.sort-icon {
|
||||
margin-left: 5px;
|
||||
font-size: 12px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h2 class="mb-3">항목관리</h2>
|
||||
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="text-left">
|
||||
전체 구분 수 : <b><?=$record_count?></b>
|
||||
</div>
|
||||
<div>
|
||||
<button type="button" class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#add_modal">추가</button>
|
||||
<!-- 추가 버튼을 누르면 출력한다. -->
|
||||
<div id="add_modal" class="modal fade text-center"">
|
||||
<div class="modal-dialog" style="width:800px;">
|
||||
<div class="modal-content">
|
||||
<form class="signup" action="adm_category.update.php" method="post">
|
||||
<input type="hidden" id="mode" name="mode" value="add" readonly>
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">추가</h4>
|
||||
</div>
|
||||
<div class="modal-body text-left">
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat01">대분류</span>
|
||||
<input type="text" class="form-control" id="cat01" name="cat01" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat02">중분류</span>
|
||||
<input type="text" class="form-control" id="cat02" name="cat02" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat03">소분류</span>
|
||||
<input type="text" class="form-control" id="cat03" name="cat03" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="code">항목코드</span>
|
||||
<input type="text" class="form-control" id="code" name="code" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="name">이름</span>
|
||||
<input type="text" class="form-control" id="name" name="name" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="unit_price">단가</span>
|
||||
<input type="text" class="form-control" id="unit_price" name="unit_price" value="" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="memo">메모</span>
|
||||
<textarea class="form-control" id="memo" name="memo" value="" ></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" id="add_submit" class="btn btn-primary">추가</button>
|
||||
<button type="button" class="btn btn-default" data-bs-dismiss="modal">닫기</button>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<table class="table table-striped">
|
||||
<colgroup>
|
||||
<col width="40px">
|
||||
<col width="120px">
|
||||
<col width="120px">
|
||||
<col width="120px">
|
||||
<col />
|
||||
<col width="150px">
|
||||
<col width="80px">
|
||||
<col width="80px">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">No.</th>
|
||||
<th class="text-center">구분1</th>
|
||||
<th class="text-center">구분2</th>
|
||||
<th class="text-center">구분3</th>
|
||||
<th class="text-center">구분명</th>
|
||||
<th class="text-center">단가</th>
|
||||
<th class="text-center">사용</th>
|
||||
<th class="text-center">수정</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
if (count($R)) {
|
||||
foreach($R as $R){?>
|
||||
<tr class="<?=(($R['used'] != 1) ? "unused" : "")?>">
|
||||
<td class="text-center"><?=$R['idx']?></td>
|
||||
<td class="text-center"><?=$R['cat01']?></td>
|
||||
<td class="text-center"><?=$R['cat02']?></td>
|
||||
<td class="text-center"><?=$R['cat03']?></td>
|
||||
<td class="text-center"><?=$R['name']?></td>
|
||||
<td class="text-center"><?=number_format($R['unit_price'])?></td>
|
||||
<td class="text-center"><?=$R['used']?></td>
|
||||
<td class="text-center">
|
||||
<!-- 수정 버튼 -->
|
||||
<button class="btn btn-success btn-xs" data-bs-toggle="modal" data-bs-target="#modify_modal_<?=$R['idx']?>"><i class="fa-solid fa-pen-to-square"></i></button>
|
||||
<!-- 수정 모달 -->
|
||||
<div id="modify_modal_<?=$R['idx']?>" class="modal fade">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<form class="modify" action="adm_category.update.php" method="post">
|
||||
<input type="hidden" class="form-control" id="idx" name="idx" value="<?=$R['idx']?>" readonly>
|
||||
<input type="hidden" class="form-control" id="mode" name="mode" value="modify" readonly>
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"><?=$R['name']?> 정보 수정</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat01_<?=$R['idx']?>">대분류</span>
|
||||
<input type="text" class="form-control" id="cat01_<?=$R['idx']?>" name="cat01" value="<?=$R['cat01']?>" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat02_<?=$R['idx']?>">중분류</span>
|
||||
<input type="text" class="form-control" id="cat02_<?=$R['idx']?>" name="cat02" value="<?=$R['cat02']?>" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="cat03_<?=$R['idx']?>">소분류</span>
|
||||
<input type="text" class="form-control" id="cat03_<?=$R['idx']?>" name="cat03" value="<?=$R['cat03']?>" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="name_<?=$R['idx']?>">이름</span>
|
||||
<input type="text" class="form-control" id="name_<?=$R['idx']?>" name="name" value="<?=$R['name']?>" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="unit_price_<?=$R['idx']?>">단가</span>
|
||||
<input type="text" class="form-control" id="unit_price_<?=$R['idx']?>" name="unit_price" value="<?=$R['unit_price']?>" required>
|
||||
</div>
|
||||
<div class="input-group mb-1">
|
||||
<span class="input-group-text col-md-2" id="memo_<?=$R['idx']?>">메모</span>
|
||||
<textarea class="form-control" id="memo_<?=$R['idx']?>" name="memo"><?=$R['memo']?></textarea>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<input type="radio" class="btn-check" name="used" id="used_<?=$R['idx']?>_1" value="1" <?=($R['used'] == 1) ? "checked" : "" ?> required>
|
||||
<label class="btn btn-outline-primary" for="used_<?=$R['idx']?>_1">활성</label>
|
||||
<input type="radio" class="btn-check" name="used" id="used_<?=$R['idx']?>_0" value="0" <?=($R['used'] != 1) ? "checked" : "" ?> required>
|
||||
<label class="btn btn-outline-primary" for="used_<?=$R['idx']?>_0">비활성</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">수정</button>
|
||||
<button type="button" class="btn btn-default" data-bs-dismiss="modal">닫기</button>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div>
|
||||
<!-- 수정 모달 끝 -->
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
} // endforeach
|
||||
} else { ?>
|
||||
<tr>
|
||||
<td colspan="8">데이터가 없습니다.</td>
|
||||
</tr>
|
||||
<?php } // endif ?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="8" class="text-right">
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<?php include_once FG_MANAGER_PATH."/tail.php";
|
||||
56
manager/ticket/adm_category.update.php
Normal file
56
manager/ticket/adm_category.update.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
// 매표소 업무일지 목록 항목 업데이트
|
||||
if ( !isset($_POST) ) exit;
|
||||
include_once "_common.php";
|
||||
|
||||
$isDebug = false;
|
||||
|
||||
$table = $fg['visitor_category_table'];
|
||||
|
||||
if ($isDebug) var_dump($_POST);
|
||||
|
||||
if ( isset($_POST['mode']) ) { //mode가 선언되어야만 코드 실행
|
||||
$cat01 = isset($_POST['cat01']) ? trim($_POST['cat01']) : '';
|
||||
$cat02 = isset($_POST['cat02']) ? trim($_POST['cat02']) : '';
|
||||
$cat03 = isset($_POST['cat03']) ? trim($_POST['cat03']) : '';
|
||||
$name = isset($_POST['name']) ? trim($_POST['name']) : '';
|
||||
$code = isset($_POST['code']) ? trim($_POST['code']) : '';
|
||||
$unit_price = isset($_POST['unit_price']) ? trim($_POST['unit_price']) : 0;
|
||||
$used = isset($_POST['used']) ? trim($_POST['used']) : 1; // 사용여부가 선언되지 않았다면 무조건 사용 으로 체크함
|
||||
|
||||
if ($_POST['mode'] == 'add') { // add로 넘어온 경우
|
||||
$query = "INSERT INTO {$table}
|
||||
(cat01, cat02, cat03, code, name, unit_price, used)
|
||||
VALUES ('{$cat01}', '{$cat02}', '{$cat03}', '{$code}', '{$name}', '{$unit_price}', '{$used}' )";
|
||||
|
||||
if ($isDebug) echo 'query : '. $query;
|
||||
|
||||
$result = sql_query($query);
|
||||
|
||||
} else if ($_POST['mode'] == 'modify') { // 수정인 경우
|
||||
$idx = isset($_POST['idx']) ? trim($_POST['idx']) : ''; // 수정에서만 사용됨
|
||||
|
||||
$query = "UPDATE {$table} SET
|
||||
cat01 = '{$cat01}',
|
||||
cat02 = '{$cat02}',
|
||||
cat03 = '{$cat03}',
|
||||
code = '{$code}',
|
||||
name = '{$name}',
|
||||
unit_price = '{$unit_price}',
|
||||
used = '{$used}'
|
||||
WHERE idx = '{$idx}'
|
||||
";
|
||||
|
||||
if ($isDebug) echo 'query : '. $query;
|
||||
|
||||
$result = sql_query($query);
|
||||
|
||||
}
|
||||
|
||||
if ( isset($result) && $result ) {
|
||||
alert('저장완료', false);
|
||||
} else {
|
||||
alert('오류가 발생하였습니다');
|
||||
}
|
||||
|
||||
}
|
||||
4
manager/ticket/head.php
Normal file
4
manager/ticket/head.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once "head.sub.php";
|
||||
include_once FG_MANAGER_PATH."/head.php";
|
||||
4
manager/ticket/head.sub.php
Normal file
4
manager/ticket/head.sub.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
// 이 파일은 새로운 파일 생성시 반드시 포함되어야 함
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
// 필요한 스크립트 등을 삽입할 수 있음
|
||||
281
manager/ticket/index.php
Normal file
281
manager/ticket/index.php
Normal file
@ -0,0 +1,281 @@
|
||||
<?php
|
||||
// 베이커리 재고관리
|
||||
include_once "_common.php";
|
||||
// 배포 시 아래 주석 해제
|
||||
// if (!isset($_SESSION['user_id'])) header( 'Location: FG_MANAGER_URL' ); // 로그인 되어있지 않으면 로그인 페이지로 보냄
|
||||
|
||||
include_once "head.php";
|
||||
|
||||
// 검색 변수 초기화
|
||||
!isset($search) ?? "";
|
||||
!isset($where) ?? "";
|
||||
!isset($search_count) ?? "";
|
||||
|
||||
$is_debug = false; // 디버깅 시 true로 변경
|
||||
$is_member = true;
|
||||
|
||||
// ord_by 로 넘어온 값이 있으면 반영
|
||||
$ord_by = isset($_REQUEST["ord_by"]) ? $_REQUEST["ord_by"] : "product_name ASC";
|
||||
|
||||
// 날짜로 검색한 경우 해당 날짜를 사용하고, 아닌 경우 오늘 날짜를 사용함
|
||||
$searchDate = isset($_REQUEST["searchDate"]) ? $_REQUEST["searchDate"] : date("Y-m-d"); // 검색일
|
||||
$prevDate = date("Y-m-d", strtotime("-1 day", strtotime($searchDate))); // 검색 전일
|
||||
$edit_datetime = date('Y-m-d H:i:s'); // 최종 수정 시간 업데이트
|
||||
|
||||
// 합계 변수 선언
|
||||
$t_prev_stock = $t_production = $t_inhouse_use = $t_recycling = $t_disposal = $t_sales = $t_sales_amount = $t_menu_discount = $t_payment_amount = $t_current_stock = 0;
|
||||
|
||||
bakeryPreUpdate($searchDate, $edit_datetime);
|
||||
|
||||
$authInfo = getAuthorInfo($searchDate);
|
||||
if (!$authInfo) {
|
||||
$authInfo = ['worker' => '', 'author' => ''];
|
||||
}
|
||||
|
||||
?>
|
||||
<style>
|
||||
.bakery tfoot {
|
||||
font-weight: 600;
|
||||
}
|
||||
.sort-icon {
|
||||
margin-left: 5px;
|
||||
font-size: 12px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h2 class="mb-3">매표소 근무일지</h2>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="row align-items-start flex-nowrap">
|
||||
<div class="col-auto input-group">
|
||||
<span class="input-group-text">날짜선택</span>
|
||||
<input type="date" class="form-control" id="searchDateInput" name="searchDate" max="9999-12-31" value="<?= $searchDate ?>">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<form>
|
||||
<input type="hidden" id="hiddenSearchDate" name="searchDate" value="<?= date("Y-m-d") ?>">
|
||||
<button type="submit" class="btn btn-primary mb-3">오늘</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="file" id="inventoryFileInput" style="display:none;" accept=".xls,.xlsx" />
|
||||
<div class="btn-group" role="group" aria-label="bakery-button">
|
||||
<?php if(!bakeryChkDate($searchDate, $_SESSION['user_id'])) {?>
|
||||
<button type="button" class="btn btn-primary" id="editButton" onclick="toggleEditMode()" >수정</button>
|
||||
<button type="button" class="btn btn-primary d-none" id="confirmButton" onclick="confirmEditMode()">확인</button>
|
||||
<?php } ?>
|
||||
<button type="button" class="btn btn-secondary" id="uploadInventoryButton">파일첨부</button>
|
||||
<button type="button" class="btn btn-success" id="exportExcelButton">엑셀변환</button>
|
||||
<?php if ($is_member || $is_admin) { ?>
|
||||
<button type="button" class="btn btn-success" id="print">출력</button>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3" style="max-width:800px;">
|
||||
<form class="form-group" id="author" name="author" >
|
||||
<input type="hidden" name="searchDate" id="searchDate" value="<?=$searchDate?>">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="weather">날씨</span>
|
||||
<input style="width: 100px;" type="text" class="form-control" name="weather" id="weather" value="" required>
|
||||
<span class="input-group-text" id="author">작성자</span>
|
||||
<input style="width: 100px;" type="text" class="form-control" name="author" id="author" value="<?=$authInfo['author']?>" required>
|
||||
<span class="input-group-text" id="worker">근무자</span>
|
||||
<input style="width: 250px;" type="text" class="form-control" name="worker" id="worker" value="<?=$authInfo['worker']?>" required>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="ticketbox mb-3">
|
||||
<div class="row justify-content-md-start">
|
||||
<div class="col-12">
|
||||
<table class="table align-middle ">
|
||||
<colgroup>
|
||||
<col width="100">
|
||||
<col width="100">
|
||||
<col width="100">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">총입장객</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
<th class="text-center">매출합계</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="text-center">116</td>
|
||||
<td class="text-center">9130</td>
|
||||
<td class="text-center"><?=number_format(1090000)?> 원</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-md-start">
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>일반</h4>
|
||||
<button class="btn btn-sm btn-outline-primary">항목추가</button>
|
||||
</div>
|
||||
<table class="table table-striped align-middle table-hover ticketbox">
|
||||
<thead class="align-middle">
|
||||
<tr>
|
||||
<th class="text-center">구분</th>
|
||||
<th class="text-center">입장객 수</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
<th class="text-center">금액</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">입장권(주간)</td>
|
||||
<td class="text-end">26</td>
|
||||
<td class="text-end">3797</td>
|
||||
<td class="text-end">245000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-center">소계</td>
|
||||
<td class="text-end">104</td>
|
||||
<td class="text-end">8371</td>
|
||||
<td class="text-end">1090000</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>온라인</h4>
|
||||
<button class="btn btn-sm btn-outline-primary">항목추가</button>
|
||||
</div>
|
||||
<table class="table table-striped align-middle table-hover ticketbox">
|
||||
<thead class="align-middle">
|
||||
<tr>
|
||||
<th class="text-center">구분</th>
|
||||
<th class="text-center">입장객 수</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">삐아또PKG</td>
|
||||
<td class="text-end">26</td>
|
||||
<td class="text-end">3797</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-center">소계</td>
|
||||
<td class="text-end">104</td>
|
||||
<td class="text-end">8371</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>할인</h4>
|
||||
<button class="btn btn-sm btn-outline-primary">항목추가</button>
|
||||
</div>
|
||||
<table class="table table-striped align-middle table-hover ticketbox">
|
||||
<thead class="align-middle">
|
||||
<tr>
|
||||
<th class="text-center">구분</th>
|
||||
<th class="text-center">입장객 수</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">삐아또PKG</td>
|
||||
<td class="text-end">26</td>
|
||||
<td class="text-end">3797</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-center">소계</td>
|
||||
<td class="text-end">104</td>
|
||||
<td class="text-end">8371</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>무료</h4>
|
||||
<button class="btn btn-sm btn-outline-primary">항목추가</button>
|
||||
</div>
|
||||
<table class="table table-striped align-middle table-hover ticketbox">
|
||||
<thead class="align-middle">
|
||||
<tr>
|
||||
<th class="text-center">구분</th>
|
||||
<th class="text-center">입장객 수</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">삐아또PKG</td>
|
||||
<td class="text-end">26</td>
|
||||
<td class="text-end">3797</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-center">소계</td>
|
||||
<td class="text-end">104</td>
|
||||
<td class="text-end">8371</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-md-start">
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>기타판매</h4>
|
||||
<button class="btn btn-sm btn-outline-primary">항목추가</button>
|
||||
</div>
|
||||
<table class="table table-striped align-middle table-hover ticketbox">
|
||||
<thead class="align-middle">
|
||||
<tr>
|
||||
<th class="text-center">구분</th>
|
||||
<th class="text-center">수량</th>
|
||||
<th class="text-center">금월누계</th>
|
||||
<th class="text-center">금액</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">삐아또PKG</td>
|
||||
<td class="text-end">26</td>
|
||||
<td class="text-end">3797</td>
|
||||
<td class="text-end">3797</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="text-center">소계</td>
|
||||
<td class="text-end">104</td>
|
||||
<td class="text-end">8371</td>
|
||||
<td class="text-end">8371</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-6 mb-3">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>비고 및 특이사항</h4>
|
||||
</div>
|
||||
<textarea class="form-control" rows="10"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php include_once FG_MANAGER_PATH."/tail.php";
|
||||
54
manager/ticket/tail.php
Normal file
54
manager/ticket/tail.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
include_once 'tail.sub.php';
|
||||
|
||||
// 페이지 내비게이션 만들기
|
||||
if ( isset($record_count) ) { // $record_count 가 없다면 페이지를 만들 필요 없음
|
||||
$page_count = (isset($search_count) && $search_count) ? $search_count : $record_count;
|
||||
|
||||
if( $page != 'dashboard' && isset($R) && $record_count >= 15 ) { //대시보드 제외, $R이 선언된 경우, 항목이 15개 이하인 경우
|
||||
$page_count = ceil($page_count / $recnum);
|
||||
$prev_page = $p - $pagenum < 1 ? 1 : $p - $pagenum;
|
||||
$next_page = $p + $pagenum > $page_count ? $page_count : $p + $pagenum;
|
||||
|
||||
// 페이지 구하기
|
||||
$start_page = floor(($p - 1) / $pagenum) * $pagenum + 1;
|
||||
$end_page = $start_page + ($pagenum - 1);
|
||||
if($end_page > $page_count) $end_page = $page_count;
|
||||
?>
|
||||
<!-- 페이지 번호 -->
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination justify-content-center">
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="?p=<?=$prev_page?>" aria-label="Previous">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
<?php // 페이지 리스트 출력
|
||||
for($i=$start_page; $i<=$end_page; $i++){
|
||||
echo '<li';
|
||||
if($i == $p) echo ' class="active" ';
|
||||
echo '>'.PHP_EOL;
|
||||
echo '<a class="page-link" href="?p='.$i;
|
||||
if (isset($search_word) && $search_word) echo '&search_word='.$search_word;
|
||||
if (isset($search_group) && $search_group) echo '&search_group='.$search_group;
|
||||
echo '">'.$i.'</a>'.PHP_EOL;
|
||||
echo '</li>'.PHP_EOL;
|
||||
}
|
||||
?>
|
||||
<li>
|
||||
<a class="page-link" href="?p=<?=$next_page?> " aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
206
manager/ticket/tail.sub.php
Normal file
206
manager/ticket/tail.sub.php
Normal file
@ -0,0 +1,206 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
/*
|
||||
?>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var ordBy = <?php echo json_encode($ord_by); ?>;
|
||||
var searchDate = <?php echo json_encode($searchDate); ?>;
|
||||
|
||||
function attachThClickEvent() {
|
||||
$('table').off('click', 'th'); // 기존 이벤트 제거
|
||||
$('table').on('click', 'th', function() {
|
||||
if ($(this).hasClass('no-click')) {
|
||||
return; // no-click 클래스를 가진 th 요소는 클릭 이벤트를 무시하고 이후 코드 실행 안함
|
||||
}
|
||||
console.log('th clicked:', $(this).data('column')); // 로그 추가
|
||||
const column = $(this).data('column');
|
||||
let order = $(this).data('order') || 'asc'; // 기본값 'asc'
|
||||
order = order === 'asc' ? 'desc' : 'asc';
|
||||
$(this).data('order', order);
|
||||
|
||||
sortTable(column, order); // 테이블 정렬 함수 호출
|
||||
});
|
||||
}
|
||||
|
||||
function sortTable(column, order) {
|
||||
const tbody = $('#bakeryTable tbody');
|
||||
const rows = tbody.find('tr').toArray();
|
||||
|
||||
rows.sort((a, b) => {
|
||||
const aValue = $(a).find(`td:eq(${getColumnIndex(column)})`).text();
|
||||
const bValue = $(b).find(`td:eq(${getColumnIndex(column)})`).text();
|
||||
|
||||
if (order === 'asc') {
|
||||
return aValue.localeCompare(bValue, undefined, {numeric: true});
|
||||
} else {
|
||||
return bValue.localeCompare(aValue, undefined, {numeric: true});
|
||||
}
|
||||
});
|
||||
|
||||
$.each(rows, (index, row) => {
|
||||
tbody.append(row);
|
||||
// 정렬 후 No. 열의 값을 재설정
|
||||
$(row).find('td').eq(0).text(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
function getColumnIndex(column) {
|
||||
return $(`#bakeryTable th[data-column="${column}"]`).index();
|
||||
}
|
||||
|
||||
attachThClickEvent();
|
||||
|
||||
// 날짜 입력값 변경 시 페이지 전체 갱신
|
||||
$('#searchDateInput').on('change', function() {
|
||||
const searchDate = $(this).val();
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('searchDate', searchDate);
|
||||
window.location.href = url.toString();
|
||||
});
|
||||
|
||||
|
||||
// 수정 버튼 클릭 시
|
||||
window.toggleEditMode = function() {
|
||||
document.querySelectorAll('tbody .value').forEach(span => {
|
||||
span.classList.toggle('d-none');
|
||||
});
|
||||
document.querySelectorAll('tbody input.form-control').forEach(input => {
|
||||
input.classList.toggle('d-none');
|
||||
if (input.hasAttribute('readonly')) {
|
||||
input.removeAttribute('readonly');
|
||||
} else {
|
||||
input.setAttribute('readonly', 'readonly');
|
||||
}
|
||||
});
|
||||
document.getElementById('editButton').classList.toggle('d-none');
|
||||
document.getElementById('confirmButton').classList.toggle('d-none');
|
||||
}
|
||||
|
||||
// 확인 버튼 클릭 시 데이터 업데이트 및 합계 갱신
|
||||
window.confirmEditMode = function() {
|
||||
var formData = new FormData();
|
||||
document.querySelectorAll('tbody input.form-control').forEach(input => {
|
||||
formData.append(input.id, input.value);
|
||||
});
|
||||
formData.append('searchDate', $('#searchDate').val());
|
||||
|
||||
$.ajax({
|
||||
url: 'bakery_stock.ajax.confirm.update.php',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
console.log('Data updated successfully'); // 로그 추가
|
||||
toggleEditMode();
|
||||
// updateTableBody({ ord_by: ordBy, searchDate: $('#searchDate').val() }); // 불필요한 호출 제거
|
||||
updateTotal(); // 합계 갱신
|
||||
// location.reload();
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('Error: ' + error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 파일 업로드 버튼 클릭 시 파일 선택 창 열기
|
||||
$('#uploadInventoryButton').on('click', function() {
|
||||
$('#inventoryFileInput').click();
|
||||
});
|
||||
|
||||
// 파일 선택 시 AJAX로 파일 업로드
|
||||
$('#inventoryFileInput').on('change', function() {
|
||||
var file = $('#inventoryFileInput')[0].files[0];
|
||||
if (isValidExcelFile(file)) {
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
formData.append('searchDate', $('#searchDate').val());
|
||||
|
||||
$.ajax({
|
||||
url: 'bakery_stock.ajax.upload_inventory.php',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(response) {
|
||||
alert('파일 업로드 완료');
|
||||
location.reload(); // 파일 업로드 후 페이지 새로고침
|
||||
},
|
||||
error: function() {
|
||||
alert('파일 업로드 실패');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
alert('엑셀 파일만 업로드할 수 있습니다.');
|
||||
}
|
||||
});
|
||||
|
||||
function isValidExcelFile(file) {
|
||||
const validExtensions = ['.xls', '.xlsx'];
|
||||
const fileName = file.name.toLowerCase();
|
||||
return validExtensions.some(ext => fileName.endsWith(ext));
|
||||
}
|
||||
|
||||
// 엑셀변환 ajax
|
||||
document.getElementById('exportExcelButton').addEventListener('click', function() {
|
||||
$.ajax({
|
||||
url: 'bakery_stock_excel.php',
|
||||
type: 'POST',
|
||||
data: { searchDate: $('#searchDate').val(), ordBy: ordBy },
|
||||
xhrFields: {
|
||||
responseType: 'blob'
|
||||
},
|
||||
success: function(data) {
|
||||
var blob = new Blob([data], { type: 'application/vnd.ms-excel' });
|
||||
var link = document.createElement('a');
|
||||
link.href = window.URL.createObjectURL(blob);
|
||||
link.download = 'bakery_data_' + $('#searchDate').val() + '.xls';
|
||||
link.click();
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
console.error('엑셀 파일 다운로드 실패:', textStatus, errorThrown);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// author 업데이트
|
||||
$('#author input').on('blur', function(event) {
|
||||
var formData = new FormData(document.getElementById('author')); // 폼 데이터 직렬화
|
||||
|
||||
console.log("Form Data:", formData); // 직렬화된 데이터 로그 확인
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'bakery_stock.ajax.author.update.php',
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
console.log('데이터가 성공적으로 저장되었습니다.');
|
||||
} else {
|
||||
console.error('데이터 저장에 실패하였습니다: ' + response.message);
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX 호출 중 오류가 발생하였습니다: ' + error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 출력 버튼 클릭 이벤트 추가
|
||||
$('#print').on('click', function() {
|
||||
var searchDate = $('#searchDate').val(); // searchDate 값을 가져옴
|
||||
var printWindow = window.open('bakery_stock_print.php?searchDate=' + searchDate, '_blank', 'width=800,height=600');
|
||||
printWindow.onload = function() {
|
||||
printWindow.print();
|
||||
};
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<? */ ?>
|
||||
Reference in New Issue
Block a user