퍼스트가든에서 사용하는 사용자 함수 및 관련파일 추가
This commit is contained in:
140
manager/bakery/bakery_stock.ajax.upload_inventory.php
Normal file
140
manager/bakery/bakery_stock.ajax.upload_inventory.php
Normal file
@ -0,0 +1,140 @@
|
||||
<?php
|
||||
include_once '_common.php';
|
||||
if (!isset($_SESSION['user_id'])) exit; // 로그인 되어있지 않으면 로그인 페이지로 보냄
|
||||
|
||||
// cafe24 절대경로
|
||||
// /firstgarden/www/
|
||||
|
||||
$is_debug = false; // 디버깅 시 true로 변경
|
||||
$is_test = false; // 상품별(분류별상품)으로 바코드 업데이트 시킬때
|
||||
$is_dataForceInsert = false; // 강제로 데이터 맞출때 씀
|
||||
|
||||
// 추후 table 생성하여 대/중/소분류에 들어갈 값을 넣도록 수정해야 함
|
||||
// 값을 추출할 소분류 설정
|
||||
$chkMajCat = array('보스코');
|
||||
$chkMidCat = array();
|
||||
$chkSmallCat = array(
|
||||
'보스코 베이커리'
|
||||
);
|
||||
// 제외항목
|
||||
// $excludeBarcode = array('900014', '900015');
|
||||
|
||||
// 라이브러리 로드
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use Shuchkin\SimpleXLSX;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file'])) {
|
||||
|
||||
if ($is_debug) var_dump($_FILES['file']);
|
||||
|
||||
// 변수 만들기
|
||||
$date = trim($_POST['searchDate']);
|
||||
$file = $_FILES['file'];
|
||||
$datetime = date('Y-m-d H:i:s');
|
||||
$uploadDir = 'uploads/';
|
||||
$uploadFile = $uploadDir . basename($file['name']);
|
||||
$newXlsxFile = $uploadDir . pathinfo($file['name'], PATHINFO_FILENAME) . '.xlsx';
|
||||
|
||||
// 디렉토리가 없는 경우 생성
|
||||
if (!is_dir($uploadDir)) {
|
||||
mkdir($uploadDir, 0777, true);
|
||||
}
|
||||
|
||||
// 데이터 처리
|
||||
if (move_uploaded_file($file['tmp_name'], $uploadFile)) {
|
||||
if ($is_debug) echo "파일 업로드 성공: " . htmlspecialchars(basename($file['name'])) . "<br>" . PHP_EOL;
|
||||
|
||||
try {
|
||||
// 파일 형식에 따라 변환
|
||||
$fileType = pathinfo($uploadFile, PATHINFO_EXTENSION);
|
||||
if ($fileType == 'xls') {
|
||||
// PHPSpreadsheet로 .xls 파일을 .xlsx 파일로 변환
|
||||
$spreadsheet = IOFactory::load($uploadFile);
|
||||
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
|
||||
$writer->save($newXlsxFile);
|
||||
|
||||
// 업로드된 파일을 새로운 .xlsx 파일로 설정
|
||||
$uploadFile = $newXlsxFile;
|
||||
}
|
||||
|
||||
// SimpleXLSX로 파일 읽기
|
||||
$xlsx = SimpleXLSX::parse($uploadFile);
|
||||
|
||||
if ($xlsx && !$is_test) {
|
||||
$data = [];
|
||||
foreach ($xlsx->rows() as $row) {
|
||||
// 대분류 열이 보스코일 때
|
||||
if (in_array($row[1], $chkMajCat)) {
|
||||
// 소분류 체크
|
||||
if (in_array($row[3], $chkSmallCat)) {
|
||||
// 바코드 체크
|
||||
if (!empty($row[4])) {
|
||||
// 데이터 설정
|
||||
$date = $date;
|
||||
$product_name = $row[6] ?? ''; // 품명
|
||||
$barcode = $row[4] ?? ''; // 바코드
|
||||
$sales = $row[7] ?? ''; // 판매
|
||||
$sales_amount = $row[8] ?? ''; // 판매금액
|
||||
$menu_discount = $row[9] ?? ''; // 할인액
|
||||
$payment_amount = $row[10] ?? ''; // 매출액
|
||||
|
||||
// `bakery_product_table`에 바코드가 있는지 확인
|
||||
$checkQuery = "SELECT used FROM {$fg['bakery_product_table']} WHERE barcode = '{$barcode}'";
|
||||
$checkResult = sql_query($checkQuery);
|
||||
$rowCount = sql_num_rows($checkResult);
|
||||
|
||||
if ($rowCount > 0) {
|
||||
$used = sql_fetch_array($checkResult)['used'];
|
||||
// 바코드가 존재하지만 used 값이 0인 경우 continue
|
||||
if ($used == 0) continue;
|
||||
} else {
|
||||
// 바코드가 없는 경우 추가
|
||||
$insertQuery = "INSERT INTO {$fg['bakery_product_table']} (product_name, barcode, used) VALUES ('{$product_name}', '{$barcode}', 1)";
|
||||
sql_query($insertQuery);
|
||||
}
|
||||
|
||||
// 바코드가 신규로 들어간 경우에는 used값이 항상 1이고, 기존 0인 경우는 이미 continue 처리가 되어있음
|
||||
|
||||
// 데이터 삽입
|
||||
$query = "INSERT INTO {$fg['bakery_inventory_table']} (date, barcode, sales, sales_amount, menu_discount, payment_amount, edit_datetime) ";
|
||||
$query .= " VALUES ('{$date}', '{$barcode}', '{$sales}', '{$sales_amount}', '{$menu_discount}', '{$payment_amount}', '{$datetime}') ";
|
||||
// 이미 값이 있는 경우 업데이트
|
||||
$query .= " ON DUPLICATE KEY UPDATE
|
||||
sales = '{$sales}',
|
||||
sales_amount = '{$sales_amount}',
|
||||
menu_discount = '{$menu_discount}',
|
||||
payment_amount = '{$payment_amount}',
|
||||
edit_datetime = '{$datetime}'
|
||||
";
|
||||
|
||||
$result = sql_query($query);
|
||||
|
||||
// 점검용, Query Print
|
||||
if ($is_debug) {
|
||||
print_r($query);
|
||||
echo "<br>" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo SimpleXLSX::parseError();
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo '엑셀 파일 읽기 오류: ', $e->getMessage();
|
||||
}
|
||||
|
||||
// 파일 삭제
|
||||
if (file_exists($uploadFile)) {
|
||||
unlink($uploadFile);
|
||||
if ($is_debug) echo "파일 삭제 완료." . PHP_EOL;
|
||||
}
|
||||
} else {
|
||||
echo "파일 업로드 실패";
|
||||
}
|
||||
} else {
|
||||
echo "잘못된 요청";
|
||||
}
|
||||
Reference in New Issue
Block a user