v1.3.0
- [CUSTOMER] ERP 서버와 동기화 시작. 서비스 중심 로직으로 통합. - [ORDER] ERP 서버와 동기화 시작. 10 미만 수거해도 최근 수거정보 업데이트하도록 변경.
This commit is contained in:
parent
70e7d288f7
commit
168f1e06f3
|
|
@ -0,0 +1,956 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/conf.inc.php";
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/dbCon.php";
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
||||||
|
|
||||||
|
class CustomerService extends CONF
|
||||||
|
{
|
||||||
|
/* =====================================================
|
||||||
|
* CREATE / UPDATE CUSTOMER
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
public function saveCustomer(array $data, array $opt = []): array
|
||||||
|
{
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$inTx = !empty($opt['in_tx']);
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "START TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$mode = $data['mode'] ?? 'create';
|
||||||
|
if (!in_array($mode, ['create', 'update'])) {
|
||||||
|
throw new Exception("invalid mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
$beforeData = null;
|
||||||
|
$isUpdate = false;
|
||||||
|
|
||||||
|
// mode 는 필드가 아니니 지워라.
|
||||||
|
unset($data['mode']);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// UPDATE 기존 데이터 조회
|
||||||
|
// =====================================
|
||||||
|
if ($mode === 'update') {
|
||||||
|
|
||||||
|
$c_uid = (int)($data['c_uid'] ?? 0);
|
||||||
|
unset($data['c_uid']);
|
||||||
|
|
||||||
|
if ($c_uid <= 0) {
|
||||||
|
throw new Exception("invalid customer uid");
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_customer
|
||||||
|
WHERE c_uid = '{$c_uid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$beforeData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
if (!$beforeData) {
|
||||||
|
throw new Exception("customer not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$isUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// NORMALIZE
|
||||||
|
// =====================================
|
||||||
|
$data = $this->normalizeCustomerPayload($data, $beforeData);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// HYDRATE
|
||||||
|
// =====================================
|
||||||
|
$data = $this->hydrateCustomerSnapshot($data, $beforeData);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// CREATE
|
||||||
|
// =====================================
|
||||||
|
if (!$isUpdate) {
|
||||||
|
|
||||||
|
$columns = [];
|
||||||
|
$values = [];
|
||||||
|
|
||||||
|
foreach ($data as $k => $v) {
|
||||||
|
$columns[] = $k;
|
||||||
|
$values[] = "'" . mysqli_real_escape_string($connect, (string)$v) . "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
INSERT INTO tbl_customer
|
||||||
|
(
|
||||||
|
" . implode(',', $columns) . "
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
" . implode(',', $values) . "
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $sql)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$c_uid = mysqli_insert_id($connect);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// UPDATE
|
||||||
|
// =====================================
|
||||||
|
else {
|
||||||
|
|
||||||
|
$setParts = [];
|
||||||
|
|
||||||
|
foreach ($data as $k => $v) {
|
||||||
|
|
||||||
|
$vEsc = mysqli_real_escape_string(
|
||||||
|
$connect,
|
||||||
|
(string)$v
|
||||||
|
);
|
||||||
|
|
||||||
|
$setParts[] = "{$k}='{$vEsc}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
UPDATE tbl_customer
|
||||||
|
SET
|
||||||
|
" . implode(',', $setParts) . "
|
||||||
|
WHERE c_uid='{$beforeData['c_uid']}'
|
||||||
|
LIMIT 1
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $sql)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$c_uid = (int)$beforeData['c_uid'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// AFTER RELOAD
|
||||||
|
// =====================================
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_customer
|
||||||
|
WHERE c_uid='{$c_uid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$afterData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// OUTBOX
|
||||||
|
// =====================================
|
||||||
|
$actionType = $isUpdate
|
||||||
|
? 'UPDATED'
|
||||||
|
: 'CREATED';
|
||||||
|
|
||||||
|
if (!$isUpdate|| $this->hasCustomerChanges($beforeData, $afterData)) {
|
||||||
|
$this->enqueueOutbox(
|
||||||
|
$actionType,
|
||||||
|
$beforeData,
|
||||||
|
$afterData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// AFTER WORK
|
||||||
|
// =====================================
|
||||||
|
if (empty($opt['skip_after'])) {
|
||||||
|
$this->runAfterChange(
|
||||||
|
$beforeData,
|
||||||
|
$afterData,
|
||||||
|
$data,
|
||||||
|
$opt
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// COMMIT
|
||||||
|
// =====================================
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $afterData;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "ROLLBACK");
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* PATCH CUSTOMER
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
public function patchCustomer(
|
||||||
|
int $customerUid,
|
||||||
|
array $fields,
|
||||||
|
array $opt = []
|
||||||
|
): array {
|
||||||
|
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$inTx = !empty($opt['in_tx']);
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "START TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$customerUid = (int)$customerUid;
|
||||||
|
if ($customerUid <= 0) {
|
||||||
|
throw new Exception("invalid customer uid");
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// BEFORE
|
||||||
|
// =====================================
|
||||||
|
$res = mysqli_query($connect, "SELECT * FROM tbl_customer WHERE c_uid='{$customerUid}' LIMIT 1");
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$beforeData = mysqli_fetch_assoc($res);
|
||||||
|
if (!$beforeData) {
|
||||||
|
throw new Exception("customer not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// normalize
|
||||||
|
// =====================================
|
||||||
|
$fields = $this->normalizeCustomerPayload(
|
||||||
|
$fields,
|
||||||
|
$beforeData
|
||||||
|
);
|
||||||
|
if (empty($fields)) {
|
||||||
|
return $beforeData;
|
||||||
|
}
|
||||||
|
$fields['c_updateddate'] = date("YmdHis");
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// GEO RESET
|
||||||
|
// =====================================
|
||||||
|
$this->handleGeoReset(
|
||||||
|
$beforeData,
|
||||||
|
$fields
|
||||||
|
);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// UPDATE
|
||||||
|
// =====================================
|
||||||
|
$setParts = [];
|
||||||
|
|
||||||
|
foreach ($fields as $k => $v) {
|
||||||
|
|
||||||
|
if ($v === null) {
|
||||||
|
$setParts[] = "{$k}=NULL";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$vEsc = mysqli_real_escape_string(
|
||||||
|
$connect,
|
||||||
|
(string)$v
|
||||||
|
);
|
||||||
|
|
||||||
|
$setParts[] = "{$k}='{$vEsc}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
UPDATE tbl_customer
|
||||||
|
SET
|
||||||
|
" . implode(',', $setParts) . "
|
||||||
|
WHERE c_uid='{$customerUid}'
|
||||||
|
LIMIT 1
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $sql)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// AFTER
|
||||||
|
// =====================================
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_customer
|
||||||
|
WHERE c_uid='{$customerUid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$afterData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// OUTBOX
|
||||||
|
// =====================================
|
||||||
|
if ($this->hasCustomerChanges($beforeData, $afterData)) {
|
||||||
|
$this->enqueueOutbox(
|
||||||
|
'UPDATED',
|
||||||
|
$beforeData,
|
||||||
|
$afterData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =====================================
|
||||||
|
// AFTER WORK
|
||||||
|
// =====================================
|
||||||
|
if (empty($opt['skip_after'])) {
|
||||||
|
$this->runAfterChange(
|
||||||
|
$beforeData,
|
||||||
|
$afterData,
|
||||||
|
$fields,
|
||||||
|
$opt
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $afterData;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "ROLLBACK");
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* DELETE CUSTOMER (사용 안함)
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
public function deleteCustomer(
|
||||||
|
int $customerUid,
|
||||||
|
array $opt = []
|
||||||
|
): bool {
|
||||||
|
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerUid = (int)$customerUid;
|
||||||
|
|
||||||
|
if ($customerUid <= 0) {
|
||||||
|
throw new Exception("invalid customer uid");
|
||||||
|
}
|
||||||
|
|
||||||
|
$inTx = !empty($opt['in_tx']);
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "START TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_customer
|
||||||
|
WHERE c_uid='{$customerUid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$beforeData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
if (!$beforeData) {
|
||||||
|
throw new Exception("customer not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
UPDATE tbl_customer
|
||||||
|
SET
|
||||||
|
c_status='D'
|
||||||
|
WHERE c_uid='{$customerUid}'
|
||||||
|
LIMIT 1
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $sql)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_customer
|
||||||
|
WHERE c_uid='{$customerUid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$afterData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
$this->enqueueOutbox(
|
||||||
|
'DELETED',
|
||||||
|
$beforeData,
|
||||||
|
$afterData
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "ROLLBACK");
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* OUTBOX
|
||||||
|
* ===================================================== */
|
||||||
|
private function enqueueOutbox(
|
||||||
|
string $actionType,
|
||||||
|
?array $beforeData,
|
||||||
|
?array $afterData
|
||||||
|
): void {
|
||||||
|
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$key1 = $afterData['c_accountno']
|
||||||
|
?? $beforeData['c_accountno']
|
||||||
|
?? '';
|
||||||
|
|
||||||
|
$payload = mysqli_real_escape_string(
|
||||||
|
$connect,
|
||||||
|
json_encode([
|
||||||
|
|
||||||
|
'entity' => 'CUSTOMER',
|
||||||
|
'action' => $actionType,
|
||||||
|
|
||||||
|
'key' => [
|
||||||
|
'c_accountno' => $key1
|
||||||
|
],
|
||||||
|
|
||||||
|
'before' => $beforeData,
|
||||||
|
'after' => $afterData
|
||||||
|
|
||||||
|
], JSON_UNESCAPED_UNICODE)
|
||||||
|
);
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
INSERT INTO tbl_erp_outbox
|
||||||
|
(
|
||||||
|
eo_entity_type,
|
||||||
|
eo_action_type,
|
||||||
|
eo_key1,
|
||||||
|
eo_payload,
|
||||||
|
eo_status,
|
||||||
|
eo_created_at
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
'CUSTOMER',
|
||||||
|
'{$actionType}',
|
||||||
|
'{$key1}',
|
||||||
|
'{$payload}',
|
||||||
|
'PENDING',
|
||||||
|
NOW()
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $sql)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* AFTER SAVE
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
private function runAfterChange(
|
||||||
|
?array $before,
|
||||||
|
array $after,
|
||||||
|
array $changedFields = [],
|
||||||
|
array $opt = []
|
||||||
|
): void {
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// DAILY pricing sync
|
||||||
|
// =========================
|
||||||
|
$pricingFields = [
|
||||||
|
'c_rate',
|
||||||
|
'c_paymentcycle',
|
||||||
|
'c_paymenttype'
|
||||||
|
];
|
||||||
|
|
||||||
|
$hasPricingChange = false;
|
||||||
|
|
||||||
|
foreach ($pricingFields as $f) {
|
||||||
|
|
||||||
|
if (
|
||||||
|
array_key_exists($f, $changedFields)
|
||||||
|
||
|
||||||
|
(($before[$f] ?? null) != ($after[$f] ?? null))
|
||||||
|
) {
|
||||||
|
$hasPricingChange = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($hasPricingChange) {
|
||||||
|
|
||||||
|
$this->syncFutureDailyPricing(
|
||||||
|
$before,
|
||||||
|
$after
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// DRIVER sync
|
||||||
|
// =========================
|
||||||
|
if (
|
||||||
|
array_key_exists('c_driveruid', $changedFields)
|
||||||
|
||
|
||||||
|
(($before['c_driveruid'] ?? null) != ($after['c_driveruid'] ?? null))
|
||||||
|
) {
|
||||||
|
|
||||||
|
$this->syncFutureDriver(
|
||||||
|
$before,
|
||||||
|
$after
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* DRIVER SYNC
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
private function syncFutureDriver(
|
||||||
|
?array $before,
|
||||||
|
array $after
|
||||||
|
): void {
|
||||||
|
|
||||||
|
if (!$before) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$oldDriver = $before['c_driveruid'] ?? '';
|
||||||
|
$newDriver = $after['c_driveruid'] ?? '';
|
||||||
|
|
||||||
|
if ($oldDriver == $newDriver) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerUid = (int)$after['c_uid'];
|
||||||
|
$today = date("Ymd");
|
||||||
|
|
||||||
|
$dailyService = new DailyService();
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUTURE DAILY
|
||||||
|
$qry = "
|
||||||
|
SELECT
|
||||||
|
d_uid,
|
||||||
|
d_orderdate,
|
||||||
|
d_accountno
|
||||||
|
FROM tbl_daily
|
||||||
|
WHERE d_customeruid = '{$customerUid}'
|
||||||
|
AND d_orderdate >= '{$today}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$result = mysqli_query($connect, $qry);
|
||||||
|
while ($row = mysqli_fetch_assoc($result)) {
|
||||||
|
$dailyService->saveDaily(
|
||||||
|
[
|
||||||
|
'd_orderdate' => $row['d_orderdate'],
|
||||||
|
'd_accountno' => $row['d_accountno'],
|
||||||
|
'd_driveruid' => $newDriver,
|
||||||
|
'd_updateruid' => $after['c_updatedby']
|
||||||
|
?? $after['c_createdby']
|
||||||
|
?? null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'match_uid' => $row['d_uid'],
|
||||||
|
'allow_update' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUTURE REQUEST
|
||||||
|
mysqli_query($connect, "
|
||||||
|
UPDATE tbl_request
|
||||||
|
SET r_driveruid='{$newDriver}'
|
||||||
|
WHERE r_customeruid='{$customerUid}'
|
||||||
|
AND r_requestdate >= '{$today}'
|
||||||
|
");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* FUTURE DAILY PRICING (위에거 포함한 bulk update 로직 만드는 거 추후에 작업)
|
||||||
|
* ===================================================== */
|
||||||
|
private function syncFutureDailyPricing(
|
||||||
|
?array $before,
|
||||||
|
array $after
|
||||||
|
): void {
|
||||||
|
|
||||||
|
if (!$before) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rateChanged = (string)($before['c_rate'] ?? '') !== (string)($after['c_rate'] ?? '');
|
||||||
|
$cycleChanged = (string)($before['c_paymentcycle'] ?? '') !== (string)($after['c_paymentcycle'] ?? '');
|
||||||
|
$paymentChanged = (string)($before['c_paymenttype'] ?? '') !== (string)($after['c_paymenttype'] ?? '');
|
||||||
|
|
||||||
|
if (
|
||||||
|
!$rateChanged
|
||||||
|
&& !$cycleChanged
|
||||||
|
&& !$paymentChanged
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerUid = (int)$after['c_uid'];
|
||||||
|
$today = date("Ymd");
|
||||||
|
|
||||||
|
$dailyService = new DailyService();
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
SELECT
|
||||||
|
d_uid,
|
||||||
|
d_orderdate,
|
||||||
|
d_accountno
|
||||||
|
FROM tbl_daily
|
||||||
|
WHERE d_customeruid = '{$customerUid}'
|
||||||
|
AND d_orderdate > '{$today}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$result = mysqli_query($connect, $qry);
|
||||||
|
while ($row = mysqli_fetch_assoc($result)) {
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'd_orderdate' => $row['d_orderdate'],
|
||||||
|
'd_accountno' => $row['d_accountno'],
|
||||||
|
'd_updateruid' =>
|
||||||
|
$after['c_updatedby']
|
||||||
|
?? $after['c_createdby']
|
||||||
|
?? null
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($rateChanged) {
|
||||||
|
$payload['d_rate'] = $after['c_rate'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cycleChanged) {
|
||||||
|
$payload['d_cycle'] = $after['c_paymentcycle'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($paymentChanged) {
|
||||||
|
$payload['d_paymenttype'] = $after['c_paymenttype'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$dailyService->saveDaily(
|
||||||
|
$payload,
|
||||||
|
[
|
||||||
|
'match_uid' => $row['d_uid'],
|
||||||
|
'allow_update' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* GEO RESET
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
private function handleGeoReset(
|
||||||
|
array $before,
|
||||||
|
array &$fields
|
||||||
|
): void {
|
||||||
|
|
||||||
|
$beforeAddress = trim(
|
||||||
|
(string)($before['c_address'] ?? '')
|
||||||
|
);
|
||||||
|
|
||||||
|
$beforePostal = trim(
|
||||||
|
(string)($before['c_postal'] ?? '')
|
||||||
|
);
|
||||||
|
|
||||||
|
$newAddress = trim(
|
||||||
|
(string)(
|
||||||
|
$fields['c_address']
|
||||||
|
?? $beforeAddress
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$newPostal = trim(
|
||||||
|
(string)(
|
||||||
|
$fields['c_postal']
|
||||||
|
?? $beforePostal
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
$beforeAddress !== $newAddress
|
||||||
|
||
|
||||||
|
$beforePostal !== $newPostal
|
||||||
|
) {
|
||||||
|
$fields['c_geolat'] = null;
|
||||||
|
$fields['c_geolon'] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* NORMALIZE
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
private function normalizeCustomerPayload(
|
||||||
|
array $data,
|
||||||
|
?array $existing = null
|
||||||
|
): array {
|
||||||
|
|
||||||
|
$dateFields = [
|
||||||
|
'c_contractdate',
|
||||||
|
'c_installdate',
|
||||||
|
'c_salescommissiondate',
|
||||||
|
'c_removaldate',
|
||||||
|
'c_inactivedate',
|
||||||
|
'c_exchangedate',
|
||||||
|
'c_switchformdate',
|
||||||
|
'c_forceddate'
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($dateFields as $f) {
|
||||||
|
|
||||||
|
if (!isset($data[$f])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[$f] = preg_replace(
|
||||||
|
'/[^0-9]/',
|
||||||
|
'',
|
||||||
|
(string)$data[$f]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$strFields = [
|
||||||
|
'c_name',
|
||||||
|
'c_address',
|
||||||
|
'c_city',
|
||||||
|
'c_postal',
|
||||||
|
'c_location',
|
||||||
|
'c_comment_ri',
|
||||||
|
'c_comment_ci',
|
||||||
|
'c_email',
|
||||||
|
'c_phone',
|
||||||
|
'c_phoneext',
|
||||||
|
'c_cell',
|
||||||
|
'c_createdby',
|
||||||
|
'c_updatedby'
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($strFields as $f) {
|
||||||
|
|
||||||
|
if (!isset($data[$f])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[$f] = trim(
|
||||||
|
str_replace(
|
||||||
|
"\\",
|
||||||
|
'',
|
||||||
|
(string)$data[$f]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($data['c_phone'])) {
|
||||||
|
$data['c_phone'] = str_replace(
|
||||||
|
'-',
|
||||||
|
'',
|
||||||
|
$data['c_phone']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* HYDRATE
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
private function hydrateCustomerSnapshot(
|
||||||
|
array $data,
|
||||||
|
?array $existing = null
|
||||||
|
): array {
|
||||||
|
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// driver -> region snapshot
|
||||||
|
if (!empty($data['c_driveruid'])) {
|
||||||
|
|
||||||
|
$driveruid = mysqli_real_escape_string(
|
||||||
|
$connect,
|
||||||
|
(string)$data['c_driveruid']
|
||||||
|
);
|
||||||
|
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT
|
||||||
|
m_regionuid,
|
||||||
|
m_region
|
||||||
|
FROM tbl_member
|
||||||
|
WHERE m_uid='{$driveruid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if ($res) {
|
||||||
|
|
||||||
|
$driver = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
if ($driver) {
|
||||||
|
|
||||||
|
$data['c_regionuid'] = $driver['m_regionuid'];
|
||||||
|
$data['c_region'] = $driver['m_region'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// created date
|
||||||
|
if (empty($existing)) {
|
||||||
|
if (empty($data['c_createddate'])) {
|
||||||
|
$data['c_createddate'] = date("YmdHis");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$data['c_updateddate'] = date("YmdHis");
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function hasCustomerChanges(
|
||||||
|
?array $before,
|
||||||
|
?array $after
|
||||||
|
): bool {
|
||||||
|
|
||||||
|
if (!$before || !$after) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$businessFields = [
|
||||||
|
// 기본
|
||||||
|
'c_accountno',
|
||||||
|
'c_name',
|
||||||
|
'c_status',
|
||||||
|
'c_form_eu',
|
||||||
|
'c_form_corsia',
|
||||||
|
'c_rate',
|
||||||
|
'c_paymenttype',
|
||||||
|
'c_hstno',
|
||||||
|
'c_driveruid',
|
||||||
|
|
||||||
|
// 지역
|
||||||
|
'c_regionuid',
|
||||||
|
'c_area',
|
||||||
|
'c_address',
|
||||||
|
'c_mailingaddr',
|
||||||
|
'c_postal',
|
||||||
|
'c_city',
|
||||||
|
'c_province',
|
||||||
|
'c_geolat',
|
||||||
|
'c_geolon',
|
||||||
|
|
||||||
|
// 연락처
|
||||||
|
'c_email',
|
||||||
|
'c_phone',
|
||||||
|
'c_phoneext',
|
||||||
|
|
||||||
|
// 계약
|
||||||
|
'c_contractdate',
|
||||||
|
'c_contractby',
|
||||||
|
'c_installdate',
|
||||||
|
'c_salesperson',
|
||||||
|
'c_salescommissiondate',
|
||||||
|
'c_salesmethod',
|
||||||
|
|
||||||
|
// Full Cycle (erp 에서 의미없는 변화)
|
||||||
|
// 'c_fullcycle',
|
||||||
|
// 'c_fullquantity',
|
||||||
|
// 'c_fullcycleflag',
|
||||||
|
// 'c_fullcycleforced',
|
||||||
|
// 'c_forceddate',
|
||||||
|
// 'c_crondate',
|
||||||
|
|
||||||
|
// Schedule
|
||||||
|
'c_schedule',
|
||||||
|
'c_scheduleday',
|
||||||
|
|
||||||
|
// Location
|
||||||
|
'c_location',
|
||||||
|
|
||||||
|
// Pickup
|
||||||
|
'c_lastpickupdate',
|
||||||
|
'c_lastpickupquantity',
|
||||||
|
'c_sludge',
|
||||||
|
|
||||||
|
// Comment
|
||||||
|
'c_comment_ri',
|
||||||
|
'c_comment_ci'
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($businessFields as $field) {
|
||||||
|
|
||||||
|
$beforeVal = trim((string)($before[$field] ?? ''));
|
||||||
|
$afterVal = trim((string)($after[$field] ?? ''));
|
||||||
|
|
||||||
|
if ($beforeVal !== $afterVal) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
require_once getenv("DOCUMENT_ROOT")."/assets/conf.inc.php";
|
require_once getenv("DOCUMENT_ROOT")."/assets/conf.inc.php";
|
||||||
require_once getenv("DOCUMENT_ROOT")."/assets/dbCon.php";
|
require_once getenv("DOCUMENT_ROOT")."/assets/dbCon.php";
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
|
|
||||||
class DailyService extends CONF {
|
class DailyService extends CONF {
|
||||||
|
|
||||||
|
|
@ -147,6 +148,7 @@ class DailyService extends CONF {
|
||||||
if (in_array($k, [
|
if (in_array($k, [
|
||||||
'd_orderdate',
|
'd_orderdate',
|
||||||
'd_accountno',
|
'd_accountno',
|
||||||
|
'd_customeruid',
|
||||||
'd_jobtype',
|
'd_jobtype',
|
||||||
'd_inputdate',
|
'd_inputdate',
|
||||||
'd_estquantity',
|
'd_estquantity',
|
||||||
|
|
@ -245,33 +247,53 @@ class DailyService extends CONF {
|
||||||
// =========================
|
// =========================
|
||||||
// ERP OUTBOX
|
// ERP OUTBOX
|
||||||
// =========================
|
// =========================
|
||||||
$event_type = $isUpdate ? 'DAILY_UPDATED' : 'DAILY_CREATED';
|
$actionType = $isUpdate ? 'UPDATED' : 'CREATED';
|
||||||
|
|
||||||
$payload = mysqli_real_escape_string(
|
$payload = mysqli_real_escape_string(
|
||||||
$connect,
|
$connect,
|
||||||
json_encode([
|
json_encode([
|
||||||
|
'entity' => 'DAILY',
|
||||||
|
'action' => $actionType,
|
||||||
|
|
||||||
'key' => [
|
'key' => [
|
||||||
'd_orderdate' => $afterData['d_orderdate'],
|
'd_orderdate' => $afterData['d_orderdate'],
|
||||||
'd_accountno' => $afterData['d_accountno'],
|
'd_accountno' => $afterData['d_accountno'],
|
||||||
'd_jobtype' => $afterData['d_jobtype']
|
'd_jobtype' => $afterData['d_jobtype']
|
||||||
],
|
],
|
||||||
|
|
||||||
'before' => $beforeData,
|
'before' => $beforeData,
|
||||||
'after' => $afterData
|
'after' => $afterData
|
||||||
|
|
||||||
], JSON_UNESCAPED_UNICODE)
|
], JSON_UNESCAPED_UNICODE)
|
||||||
);
|
);
|
||||||
|
|
||||||
mysqli_query($connect, "
|
$qry_outbox = "
|
||||||
INSERT INTO tbl_erp_outbox
|
INSERT INTO tbl_erp_outbox
|
||||||
(eo_event_type, eo_key_date, eo_key_accountno, eo_key_jobtype, eo_payload, eo_status, eo_created_at)
|
(
|
||||||
|
eo_entity_type,
|
||||||
|
eo_action_type,
|
||||||
|
eo_key1,
|
||||||
|
eo_key2,
|
||||||
|
eo_key3,
|
||||||
|
eo_payload,
|
||||||
|
eo_status,
|
||||||
|
eo_created_at
|
||||||
|
)
|
||||||
VALUES
|
VALUES
|
||||||
('{$event_type}',
|
(
|
||||||
|
'DAILY',
|
||||||
|
'{$actionType}',
|
||||||
'{$afterData['d_orderdate']}',
|
'{$afterData['d_orderdate']}',
|
||||||
'{$afterData['d_accountno']}',
|
'{$afterData['d_accountno']}',
|
||||||
'{$afterData['d_jobtype']}',
|
'{$afterData['d_jobtype']}',
|
||||||
'{$payload}',
|
'{$payload}',
|
||||||
'PENDING',
|
'PENDING',
|
||||||
NOW())
|
NOW()
|
||||||
");
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $qry_outbox)) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
// =========================
|
// =========================
|
||||||
// AFTER WORK
|
// AFTER WORK
|
||||||
|
|
@ -544,6 +566,7 @@ class DailyService extends CONF {
|
||||||
'd_payamount',
|
'd_payamount',
|
||||||
'd_payeename',
|
'd_payeename',
|
||||||
'd_paystatus',
|
'd_paystatus',
|
||||||
|
'd_paynote',
|
||||||
|
|
||||||
// customer snapshot
|
// customer snapshot
|
||||||
'd_name',
|
'd_name',
|
||||||
|
|
@ -576,14 +599,14 @@ class DailyService extends CONF {
|
||||||
|
|
||||||
// audit
|
// audit
|
||||||
'd_createruid',
|
'd_createruid',
|
||||||
|
'd_updateruid',
|
||||||
'd_createddate',
|
'd_createddate',
|
||||||
'd_inputdate',
|
'd_inputdate',
|
||||||
'd_modifydate',
|
'd_modifydate',
|
||||||
'd_ruid',
|
'd_ruid',
|
||||||
|
|
||||||
// misc
|
// misc
|
||||||
'd_payeesign',
|
'd_payeesign'
|
||||||
'd_is_transfer'
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -619,11 +642,23 @@ class DailyService extends CONF {
|
||||||
|
|
||||||
private function runAfterSave(?array $before, array $after, array $opt = []): void
|
private function runAfterSave(?array $before, array $after, array $opt = []): void
|
||||||
{
|
{
|
||||||
$this->updateCustomerFromDaily($before, $after);
|
// order장과 customer 상태 동기화 + 픽업 정보 갱신
|
||||||
|
$customerFields = $this->buildCustomerPatchFromDaily($before, $after);
|
||||||
|
if (!empty($customerFields) && !empty($after['d_customeruid'])){
|
||||||
|
|
||||||
|
$customerFields['c_updatedby'] = $after['d_updateruid'] ?? $after['d_createruid'] ?? null;
|
||||||
|
// patch
|
||||||
|
$this->patchCustomerFromDaily(
|
||||||
|
(int)$after['d_customeruid'],
|
||||||
|
$customerFields
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// request 처리 완료
|
||||||
$this->updateRequestFromDaily($after);
|
$this->updateRequestFromDaily($after);
|
||||||
|
// note 처리
|
||||||
$this->upsertDailyNote($after);
|
$this->upsertDailyNote($after);
|
||||||
|
// 픽업 발생 시 미래 오더 자동 정리
|
||||||
$this->handlePickupCleanup($before, $after);
|
$this->handlePickupCleanup($before, $after);
|
||||||
$this->handlePickupReset($before, $after);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function runAfterDelete(array $before, array $opt = []): void
|
private function runAfterDelete(array $before, array $opt = []): void
|
||||||
|
|
@ -665,15 +700,19 @@ class DailyService extends CONF {
|
||||||
");
|
");
|
||||||
}
|
}
|
||||||
|
|
||||||
private function updateCustomerFromDaily($before, $after)
|
private function buildCustomerPatchFromDaily(
|
||||||
|
?array $before,
|
||||||
|
array $after
|
||||||
|
): array
|
||||||
{
|
{
|
||||||
$connect = $GLOBALS['conn'];
|
$connect = $GLOBALS['conn'];
|
||||||
|
$customerFields = [];
|
||||||
|
if (empty($after['d_customeruid'])) {
|
||||||
|
return $customerFields;
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($after['d_customeruid'])) return;
|
// Customer Current State
|
||||||
|
$customerUid = (int)$after['d_customeruid'];
|
||||||
$customer_uid = mysqli_real_escape_string($connect, $after['d_customeruid']);
|
|
||||||
|
|
||||||
// 고객 현재 상태 조회
|
|
||||||
$qr = mysqli_query($connect, "
|
$qr = mysqli_query($connect, "
|
||||||
SELECT
|
SELECT
|
||||||
c_paymenttype,
|
c_paymenttype,
|
||||||
|
|
@ -682,111 +721,77 @@ class DailyService extends CONF {
|
||||||
c_schedule,
|
c_schedule,
|
||||||
c_scheduleday
|
c_scheduleday
|
||||||
FROM tbl_customer
|
FROM tbl_customer
|
||||||
WHERE c_uid = '{$customer_uid}'
|
WHERE c_uid = '{$customerUid}'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
");
|
");
|
||||||
|
|
||||||
$customer = mysqli_fetch_assoc($qr);
|
$customer = mysqli_fetch_assoc($qr);
|
||||||
if (!$customer) return;
|
if (!$customer) {
|
||||||
|
return $customerFields;
|
||||||
$updateFields = [];
|
}
|
||||||
|
|
||||||
|
// Common Values
|
||||||
$ordertype = $after['d_ordertype'] ?? 'N';
|
$ordertype = $after['d_ordertype'] ?? 'N';
|
||||||
$orderdate = $after['d_orderdate'] ?? '';
|
$orderdate = $after['d_orderdate'] ?? '';
|
||||||
$visitdate = $after['d_visitdate'] ?? '';
|
$visitdate = $after['d_visitdate'] ?? '';
|
||||||
$thisQuantity = (int)($after['d_quantity'] ?? 0);
|
$thisQuantity = (int)($after['d_quantity'] ?? 0);
|
||||||
$lastQuantity = (int)($after['d_lastpickupquantity'] ?? 0);
|
$lastQuantity = (int)($after['d_lastpickupquantity'] ?? 0);
|
||||||
$paystatus = $after['d_paystatus'] ?? '';
|
$status = $after['d_status'] ?? '';
|
||||||
$paymenttype = $after['d_paymenttype'] ?? '';
|
$visit = $after['d_visit'] ?? '';
|
||||||
|
$isTop = trim($customer['c_is_top'] ?? '');
|
||||||
$isTop = $customer['c_is_top'] ?? '';
|
// Sludge
|
||||||
|
|
||||||
// [추가된 로직] d_sludge 업데이트 판단
|
|
||||||
// 화면에서 넘어온 d_sludge가 빈칸이 아니면 c_sludge를 갱신
|
|
||||||
if (isset($after['d_sludge']) && (string)$after['d_sludge'] !== '') {
|
if (isset($after['d_sludge']) && (string)$after['d_sludge'] !== '') {
|
||||||
$val = (int)$after['d_sludge'];
|
$customerFields['c_sludge'] = (int)$after['d_sludge'];
|
||||||
$updateFields[] = "c_sludge = '{$val}'";
|
|
||||||
}
|
}
|
||||||
|
// Ghost Check
|
||||||
// --------------------------------------------------
|
|
||||||
// 0) Ghost Check
|
|
||||||
// --------------------------------------------------
|
|
||||||
if (
|
if (
|
||||||
$thisQuantity > 0 &&
|
$thisQuantity > 0
|
||||||
$lastQuantity > 0 &&
|
&& $lastQuantity > 0
|
||||||
$thisQuantity < 10 &&
|
&& $thisQuantity < 10
|
||||||
$lastQuantity < 10 &&
|
&& $lastQuantity < 10
|
||||||
$isTop !== 'G'
|
&& $isTop !== 'G'
|
||||||
) {
|
) {
|
||||||
$updateFields[] = "c_is_top = 'G'";
|
$customerFields['c_is_top'] = 'G';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isTop === 'G' && $thisQuantity >= 10) {
|
if ($isTop === 'G' && $thisQuantity >= 10) {
|
||||||
$updateFields[] = "c_is_top = ''";
|
$customerFields['c_is_top'] = '';
|
||||||
}
|
}
|
||||||
|
// First Pickup
|
||||||
// --------------------------------------------------
|
|
||||||
// 1) c_fpickup 처리
|
|
||||||
// --------------------------------------------------
|
|
||||||
if (
|
if (
|
||||||
empty($customer['c_fpickup']) &&
|
empty($customer['c_fpickup'])
|
||||||
!empty($orderdate) &&
|
&& !empty($orderdate)
|
||||||
$thisQuantity >= 10
|
&& $thisQuantity >= 10
|
||||||
) {
|
) {
|
||||||
$updateFields[] = "c_fpickup = '{$orderdate}'";
|
$customerFields['c_fpickup'] = $orderdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
// Order Flag
|
||||||
// 2) orderflag 처리
|
if ($status === 'F') {
|
||||||
// --------------------------------------------------
|
$customerFields['c_orderdate'] = '';
|
||||||
if (!empty($after['d_visit']) && $after['d_visit'] === 'Y') {
|
$customerFields['c_orderflag'] = 0;
|
||||||
$updateFields[] = "c_orderdate = ''";
|
|
||||||
$updateFields[] = "c_orderflag = 0";
|
|
||||||
} else {
|
} else {
|
||||||
$updateFields[] = "c_orderdate = '{$orderdate}'";
|
$customerFields['c_orderdate'] = $orderdate;
|
||||||
$updateFields[] = "c_orderflag = 1";
|
$customerFields['c_orderflag'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
// =========================
|
||||||
// 3) Scheduled 처리 (d_ordertype == 'S')
|
// Last Pickup
|
||||||
// -> c_schedulebasic 를 시작 기준일로 고정해서 업데이트 필요없음.
|
//
|
||||||
// --------------------------------------------------
|
// 변경된 정책 (20260601):
|
||||||
// if ($ordertype === 'S' && !empty($visitdate)) {
|
// 수량 상관없이 완료 방문이면 기록
|
||||||
|
// =========================
|
||||||
// $schedule = $customer['c_schedule'] ?? '';
|
if ($status === 'F') {
|
||||||
// $scheduleDay = $customer['c_scheduleday'] ?? '';
|
$customerFields['c_lastpickupdate'] = $orderdate;
|
||||||
|
$customerFields['c_lastpickupquantity'] = $thisQuantity;
|
||||||
// if ($schedule > '1W' && $schedule <= '6W') {
|
// Full Quantity Reset 10L 이상일 때만
|
||||||
|
if ($thisQuantity >= 10) {
|
||||||
// $weekCount = (int)substr($schedule, 0, 1);
|
$customerFields['c_fullquantity'] = 0;
|
||||||
|
|
||||||
// if ($weekCount > 0 && !empty($scheduleDay)) {
|
|
||||||
|
|
||||||
// $dayParts = explode('|', $scheduleDay);
|
|
||||||
// $dayOfWeek = $dayParts[0] ?? '';
|
|
||||||
|
|
||||||
// $calcStr = "+{$weekCount} week {$dayOfWeek}";
|
|
||||||
// $nextDate = date('Ymd', strtotime($calcStr, strtotime($visitdate)));
|
|
||||||
|
|
||||||
// $updateFields[] = "c_schedulebasic = '{$nextDate}'";
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// UPDATE 실행
|
|
||||||
// --------------------------------------------------
|
|
||||||
if (!empty($updateFields)) {
|
|
||||||
|
|
||||||
mysqli_query($connect, "
|
|
||||||
UPDATE tbl_customer
|
|
||||||
SET " . implode(",", $updateFields) . "
|
|
||||||
WHERE c_uid = '{$customer_uid}'
|
|
||||||
LIMIT 1
|
|
||||||
");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $customerFields;
|
||||||
|
}
|
||||||
|
|
||||||
private function updateRequestFromDaily(array $after): void
|
private function updateRequestFromDaily(array $after): void
|
||||||
{
|
{
|
||||||
$connect = $GLOBALS['conn'];
|
$connect = $GLOBALS['conn'];
|
||||||
|
|
@ -960,39 +965,6 @@ class DailyService extends CONF {
|
||||||
error_log("[PickupCleanup] ERP-safe delete completed for customer={$accountno}");
|
error_log("[PickupCleanup] ERP-safe delete completed for customer={$accountno}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handlePickupReset(?array $before, array $after): void
|
|
||||||
{
|
|
||||||
$connect = $GLOBALS['conn'];
|
|
||||||
|
|
||||||
$beforeQty = (int)($before['d_quantity'] ?? 0);
|
|
||||||
$afterQty = (int)($after['d_quantity'] ?? 0);
|
|
||||||
|
|
||||||
$status = $after['d_status'] ?? '';
|
|
||||||
$visit = $after['d_visit'] ?? '';
|
|
||||||
|
|
||||||
$isFirstPickup = ($beforeQty < 10 && $afterQty >= 10);
|
|
||||||
|
|
||||||
if (!$isFirstPickup) return;
|
|
||||||
if ($status !== 'F' || $visit !== 'Y') return;
|
|
||||||
|
|
||||||
$customerUid = mysqli_real_escape_string($connect, $after['d_customeruid']);
|
|
||||||
$accountno = mysqli_real_escape_string($connect, $after['d_accountno']);
|
|
||||||
$orderdate = mysqli_real_escape_string($connect, $after['d_orderdate']);
|
|
||||||
|
|
||||||
$sql = "
|
|
||||||
UPDATE tbl_customer
|
|
||||||
SET
|
|
||||||
c_fullquantity = 0,
|
|
||||||
c_lastpickupdate = '{$orderdate}',
|
|
||||||
c_lastpickupquantity = '{$afterQty}'
|
|
||||||
WHERE c_uid = '{$customerUid}'
|
|
||||||
";
|
|
||||||
|
|
||||||
mysqli_query($connect, $sql);
|
|
||||||
|
|
||||||
error_log("[PickupReset] customer={$accountno} reset fullquantity + lastpickupdate={$orderdate}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteDaily(string $orderdate, string $accountno, string $jobtype, array $opt = [])
|
public function deleteDaily(string $orderdate, string $accountno, string $jobtype, array $opt = [])
|
||||||
{
|
{
|
||||||
$connect = $GLOBALS['conn'] ?? null;
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
|
@ -1051,21 +1023,47 @@ class DailyService extends CONF {
|
||||||
$payload = mysqli_real_escape_string(
|
$payload = mysqli_real_escape_string(
|
||||||
$connect,
|
$connect,
|
||||||
json_encode([
|
json_encode([
|
||||||
|
'entity' => 'DAILY',
|
||||||
|
'action' => 'DELETED',
|
||||||
|
|
||||||
'key' => [
|
'key' => [
|
||||||
'd_orderdate' => $orderdate,
|
'd_orderdate' => $orderdate,
|
||||||
'd_accountno' => $accountno,
|
'd_accountno' => $accountno,
|
||||||
'd_jobtype' => $jobtype
|
'd_jobtype' => $jobtype
|
||||||
],
|
],
|
||||||
'before'=>$existing
|
|
||||||
|
'before' => $existing,
|
||||||
|
'after' => null
|
||||||
|
|
||||||
], JSON_UNESCAPED_UNICODE)
|
], JSON_UNESCAPED_UNICODE)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!mysqli_query($connect, "
|
$qry_outbox = "
|
||||||
INSERT INTO tbl_erp_outbox
|
INSERT INTO tbl_erp_outbox
|
||||||
(eo_event_type, eo_key_date, eo_key_accountno, eo_key_jobtype, eo_payload, eo_status, eo_created_at)
|
(
|
||||||
|
eo_entity_type,
|
||||||
|
eo_action_type,
|
||||||
|
eo_key1,
|
||||||
|
eo_key2,
|
||||||
|
eo_key3,
|
||||||
|
eo_payload,
|
||||||
|
eo_status,
|
||||||
|
eo_created_at
|
||||||
|
)
|
||||||
VALUES
|
VALUES
|
||||||
('DAILY_DELETED','{$orderdate}','{$accountno}','{$jobtype}','{$payload}','PENDING',NOW())
|
(
|
||||||
")) {
|
'DAILY',
|
||||||
|
'DELETED',
|
||||||
|
'{$orderdate}',
|
||||||
|
'{$accountno}',
|
||||||
|
'{$jobtype}',
|
||||||
|
'{$payload}',
|
||||||
|
'PENDING',
|
||||||
|
NOW()
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
if (!mysqli_query($connect, $qry_outbox)) {
|
||||||
throw new Exception(mysqli_error($connect));
|
throw new Exception(mysqli_error($connect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1115,43 +1113,86 @@ class DailyService extends CONF {
|
||||||
$connect = $GLOBALS['conn'];
|
$connect = $GLOBALS['conn'];
|
||||||
|
|
||||||
$res = mysqli_query($connect, "
|
$res = mysqli_query($connect, "
|
||||||
SELECT d_quantity, d_lastpickupquantity
|
SELECT
|
||||||
FROM tbl_daily
|
c.c_is_top,
|
||||||
WHERE d_customeruid = '{$customerUid}'
|
d.d_quantity,
|
||||||
AND d_status = 'F'
|
d.d_lastpickupquantity,
|
||||||
ORDER BY d_orderdate DESC
|
d.d_updateruid
|
||||||
|
FROM tbl_customer c
|
||||||
|
LEFT JOIN tbl_daily d
|
||||||
|
ON d.d_customeruid = c.c_uid
|
||||||
|
AND d.d_status = 'F'
|
||||||
|
WHERE c.c_uid = '{$customerUid}'
|
||||||
|
ORDER BY d.d_orderdate DESC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
");
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
$row = mysqli_fetch_assoc($res);
|
$row = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
if (!$row) {
|
if (!$row) {
|
||||||
// 데이터 없으면 ghost 였던 것 해제
|
|
||||||
mysqli_query($connect, "
|
|
||||||
UPDATE tbl_customer
|
|
||||||
SET c_is_top = ''
|
|
||||||
WHERE c_uid = '{$customerUid}'
|
|
||||||
and c_is_top = 'G'
|
|
||||||
");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$thisQuantity = (int)$row['d_quantity'];
|
$currentTop = trim(
|
||||||
$lastQuantity = (int)$row['d_lastpickupquantity'];
|
(string)($row['c_is_top'] ?? '')
|
||||||
|
);
|
||||||
|
|
||||||
if ($thisQuantity < 10 && $lastQuantity < 10) {
|
$thisQuantity = (int)($row['d_quantity'] ?? 0);
|
||||||
mysqli_query($connect, "
|
$lastQuantity = (int)($row['d_lastpickupquantity'] ?? 0);
|
||||||
UPDATE tbl_customer
|
|
||||||
SET c_is_top = 'G'
|
// =========================
|
||||||
WHERE c_uid = '{$customerUid}'
|
// NO DAILY HISTORY
|
||||||
");
|
// =========================
|
||||||
} else {
|
if (empty($row['d_quantity']) && empty($row['d_lastpickupquantity'])) {
|
||||||
mysqli_query($connect, "
|
// 현재 ghost 인 경우만 해제
|
||||||
UPDATE tbl_customer
|
if ($currentTop === 'G') {
|
||||||
SET c_is_top = ''
|
$this->patchCustomerFromDaily(
|
||||||
WHERE c_uid = '{$customerUid}'
|
$customerUid,
|
||||||
and c_is_top = 'G'
|
[
|
||||||
");
|
'c_is_top' => '',
|
||||||
|
'c_updatedby' => $row['d_updateruid'] ?? null
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// SHOULD BE GHOST
|
||||||
|
// =========================
|
||||||
|
$shouldGhost = ($thisQuantity < 10) && ($lastQuantity < 10);
|
||||||
|
|
||||||
|
// ghost 추가
|
||||||
|
if ($shouldGhost) {
|
||||||
|
// 이미 G 면 skip
|
||||||
|
if ($currentTop !== 'G') {
|
||||||
|
$this->patchCustomerFromDaily(
|
||||||
|
$customerUid,
|
||||||
|
[
|
||||||
|
'c_is_top' => 'G',
|
||||||
|
'c_updatedby' => $row['d_updateruid'] ?? null
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// REMOVE GHOST
|
||||||
|
// =========================
|
||||||
|
if ($currentTop === 'G') {
|
||||||
|
// $shouldGhost 는 이미 false;
|
||||||
|
$this->patchCustomerFromDaily(
|
||||||
|
$customerUid,
|
||||||
|
[
|
||||||
|
'c_is_top' => '',
|
||||||
|
'c_updatedby' => $row['d_updateruid'] ?? null
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1183,7 +1224,8 @@ class DailyService extends CONF {
|
||||||
d_quantity,
|
d_quantity,
|
||||||
d_sludge,
|
d_sludge,
|
||||||
d_paymenttype,
|
d_paymenttype,
|
||||||
d_paystatus
|
d_paystatus,
|
||||||
|
d_updateruid
|
||||||
FROM tbl_daily
|
FROM tbl_daily
|
||||||
WHERE d_customeruid = '{$customerUidEsc}'
|
WHERE d_customeruid = '{$customerUidEsc}'
|
||||||
AND d_status = 'F'
|
AND d_status = 'F'
|
||||||
|
|
@ -1234,31 +1276,188 @@ class DailyService extends CONF {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3) UPDATE 구성
|
// 3) CUSTOMER PATCH 구성
|
||||||
$setParts = [];
|
$customerFields = [];
|
||||||
$setParts[] = "c_lastpickupdate=" . ($lastPickupDate ? "'{$lastPickupDate}'" : "''");
|
$customerFields['c_lastpickupdate'] = $lastPickupDate;
|
||||||
$setParts[] = "c_lastpickupquantity='{$lastPickupQty}'";
|
$customerFields['c_lastpickupquantity'] = $lastPickupQty;
|
||||||
$setParts[] = "c_lastpaiddate=" . ($lastPaidDate ? "'{$lastPaidDate}'" : "''");
|
$customerFields['c_lastpaiddate'] = $lastPaidDate;
|
||||||
$setParts[] = "c_sludge='" . mysqli_real_escape_string($connect, $lastSludge) . "'";
|
$customerFields['c_sludge'] = $lastSludge;
|
||||||
|
|
||||||
// 4) orderflag/orderdate 리셋 정책 반영
|
// 4) orderflag/orderdate 리셋 정책 반영
|
||||||
// - 오늘 포함 이후 오더장이 남아있으면 유지 (아무것도 안함)
|
// - 오늘 포함 이후 오더장이 남아있으면 유지 (아무것도 안함)
|
||||||
// - 없으면 리셋
|
// - 없으면 리셋
|
||||||
if (!$hasFutureOrder) {
|
if (!$hasFutureOrder) {
|
||||||
$setParts[] = "c_orderdate=''";
|
$customerFields['c_orderdate'] = '';
|
||||||
$setParts[] = "c_orderflag=0";
|
$customerFields['c_orderflag'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerFields['c_updatedby'] = $last['d_updateruid'] ?? null;
|
||||||
|
|
||||||
|
// 5) PATCH CUSTOMER
|
||||||
|
$this->patchCustomerFromDaily(
|
||||||
|
(int)$customerUid,
|
||||||
|
$customerFields
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================
|
||||||
|
* PATCH DAILY
|
||||||
|
* ===================================================== */
|
||||||
|
|
||||||
|
public function patchDaily(
|
||||||
|
int $dailyUid,
|
||||||
|
array $fields = [],
|
||||||
|
array $opt = []
|
||||||
|
): array {
|
||||||
|
|
||||||
|
$connect = $GLOBALS['conn'] ?? null;
|
||||||
|
if (!$connect) {
|
||||||
|
throw new Exception("DB connection not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$dailyUid = (int)$dailyUid;
|
||||||
|
if ($dailyUid <= 0) {
|
||||||
|
throw new Exception("invalid daily uid");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fields)) {
|
||||||
|
throw new Exception("empty patch fields");
|
||||||
|
}
|
||||||
|
|
||||||
|
$inTx = !empty($opt['in_tx']);
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "START TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// BEFORE
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_daily
|
||||||
|
WHERE d_uid = '{$dailyUid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$beforeData = mysqli_fetch_assoc($res);
|
||||||
|
if (!$beforeData) {
|
||||||
|
throw new Exception("daily not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// NORMALIZE
|
||||||
|
$fields = $this->normalizeDailyPayload(
|
||||||
|
$fields,
|
||||||
|
$beforeData
|
||||||
|
);
|
||||||
|
|
||||||
|
// MODIFY DATE
|
||||||
|
$fields['d_modifydate'] = date("YmdHis");
|
||||||
|
|
||||||
|
// UPDATE
|
||||||
|
$setParts = [];
|
||||||
|
|
||||||
|
foreach ($fields as $k => $v) {
|
||||||
|
if ($v === null) {
|
||||||
|
$setParts[] = "{$k}=NULL";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$vEsc = mysqli_real_escape_string(
|
||||||
|
$connect,
|
||||||
|
(string)$v
|
||||||
|
);
|
||||||
|
|
||||||
|
$setParts[] = "{$k}='{$vEsc}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($setParts)) {
|
||||||
|
throw new Exception("nothing to update");
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "
|
$sql = "
|
||||||
UPDATE tbl_customer
|
UPDATE tbl_daily
|
||||||
SET " . implode(",", $setParts) . "
|
SET
|
||||||
WHERE c_uid = '{$customerUidEsc}'
|
" . implode(',', $setParts) . "
|
||||||
|
WHERE d_uid='{$dailyUid}'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
";
|
";
|
||||||
|
|
||||||
if (!mysqli_query($connect, $sql)) {
|
if (!mysqli_query($connect, $sql)) {
|
||||||
throw new Exception(mysqli_error($connect));
|
throw new Exception(mysqli_error($connect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AFTER
|
||||||
|
$res = mysqli_query($connect, "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_daily
|
||||||
|
WHERE d_uid='{$dailyUid}'
|
||||||
|
LIMIT 1
|
||||||
|
");
|
||||||
|
if (!$res) {
|
||||||
|
throw new Exception(mysqli_error($connect));
|
||||||
|
}
|
||||||
|
|
||||||
|
$afterData = mysqli_fetch_assoc($res);
|
||||||
|
|
||||||
|
// OUTBOX
|
||||||
|
$this->enqueueOutbox(
|
||||||
|
'UPDATED',
|
||||||
|
$beforeData,
|
||||||
|
$afterData
|
||||||
|
);
|
||||||
|
|
||||||
|
// AFTER WORK
|
||||||
|
if (empty($opt['skip_after'])) {
|
||||||
|
$this->runAfterSave(
|
||||||
|
$beforeData,
|
||||||
|
$afterData,
|
||||||
|
$opt
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// COMMIT
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $afterData;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
if (!$inTx) {
|
||||||
|
mysqli_query($connect, "ROLLBACK");
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function patchCustomerFromDaily(
|
||||||
|
int $customerUid,
|
||||||
|
array $fields = []
|
||||||
|
): void {
|
||||||
|
|
||||||
|
if ($customerUid <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fields)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerSvc = new CustomerService();
|
||||||
|
|
||||||
|
$customerSvc->patchCustomer(
|
||||||
|
$customerUid,
|
||||||
|
$fields,
|
||||||
|
[
|
||||||
|
'in_tx' => true,
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===============================
|
/* ===============================
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,26 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
trait InstallAPI {
|
trait InstallAPI {
|
||||||
|
protected function dailyService(): DailyService
|
||||||
|
{
|
||||||
|
static $svc = null;
|
||||||
|
|
||||||
protected $dailyService;
|
if (!$svc) {
|
||||||
public function __construct() {
|
$svc = new DailyService();
|
||||||
$this->dailyService = new DailyService();
|
}
|
||||||
|
|
||||||
|
return $svc;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function customerService(): CustomerService
|
||||||
|
{
|
||||||
|
static $svc = null;
|
||||||
|
|
||||||
|
if (!$svc) {
|
||||||
|
$svc = new CustomerService();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $svc;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function search_customer() {
|
public function search_customer() {
|
||||||
|
|
@ -1643,6 +1659,7 @@ trait InstallAPI {
|
||||||
'd_inputdate' => $now14,
|
'd_inputdate' => $now14,
|
||||||
'd_level' => $_SESSION['ss_LEVEL'] ?? '',
|
'd_level' => $_SESSION['ss_LEVEL'] ?? '',
|
||||||
'd_createruid' => $_SESSION['ss_UID'] ?? '',
|
'd_createruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_createddate' => $now14,
|
'd_createddate' => $now14,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -1658,7 +1675,7 @@ trait InstallAPI {
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->dailyService->saveDaily($payload, $opt);
|
$this->dailyService()->saveDaily($payload, $opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleWaitlistAfterInstall(array $di, string $newStatus, int $member_uid, string $note)
|
private function handleWaitlistAfterInstall(array $di, string $newStatus, int $member_uid, string $note)
|
||||||
|
|
@ -2106,21 +2123,32 @@ trait InstallAPI {
|
||||||
$current_installdate = $cus['c_installdate'];
|
$current_installdate = $cus['c_installdate'];
|
||||||
if (!$current_installdate || $current_installdate === 'N/A' || $install_yyyymmdd < $current_installdate) {
|
if (!$current_installdate || $current_installdate === 'N/A' || $install_yyyymmdd < $current_installdate) {
|
||||||
|
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET c_installdate='{$install_yyyymmdd}'
|
[
|
||||||
WHERE c_uid='{$customer_uid}'
|
'c_installdate' => $install_yyyymmdd,
|
||||||
");
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// exchange date (최근 install 작업)
|
// exchange date (최근 install 작업)
|
||||||
$current_exchangedate = $cus['c_exchangedate'];
|
$current_exchangedate = $cus['c_exchangedate'];
|
||||||
if ($current_exchangedate < $install_yyyymmdd) {
|
if ($current_exchangedate < $install_yyyymmdd) {
|
||||||
qry("
|
|
||||||
UPDATE tbl_customer
|
$this->customerService()->patchCustomer(
|
||||||
SET c_exchangedate='{$install_yyyymmdd}'
|
(int)$customer_uid,
|
||||||
WHERE c_uid='{$customer_uid}'
|
[
|
||||||
");
|
'c_exchangedate' => $install_yyyymmdd,
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// removal date
|
// removal date
|
||||||
|
|
@ -2134,19 +2162,30 @@ trait InstallAPI {
|
||||||
$row_activeCount = mysqli_fetch_assoc($q_activeCount);
|
$row_activeCount = mysqli_fetch_assoc($q_activeCount);
|
||||||
$activeCnt = (int)($row_activeCount['active_cnt'] ?? 0);
|
$activeCnt = (int)($row_activeCount['active_cnt'] ?? 0);
|
||||||
if ($activeCnt === 0) {
|
if ($activeCnt === 0) {
|
||||||
qry("
|
|
||||||
UPDATE tbl_customer
|
$this->customerService()->patchCustomer(
|
||||||
SET c_removaldate = '{$install_yyyymmdd}'
|
(int)$customer_uid,
|
||||||
WHERE c_uid = '{$customer_uid}'
|
[
|
||||||
");
|
'c_removaldate' => $install_yyyymmdd,
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 치웠다가 다시 설치
|
// 치웠다가 다시 설치
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET c_removaldate = ''
|
[
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_removaldate' => '',
|
||||||
AND c_removaldate <> ''
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
");
|
],
|
||||||
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2183,14 +2222,17 @@ trait InstallAPI {
|
||||||
// =========================================
|
// =========================================
|
||||||
if (!count($containers)) {
|
if (!count($containers)) {
|
||||||
|
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET
|
[
|
||||||
c_mainvolume = 0,
|
'c_mainvolume' => 0,
|
||||||
c_maincontainer = ''
|
'c_maincontainer' => '',
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
LIMIT 1
|
],
|
||||||
");
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2253,14 +2295,17 @@ trait InstallAPI {
|
||||||
$this->adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume);
|
$this->adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume);
|
||||||
|
|
||||||
// main volume
|
// main volume
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET
|
[
|
||||||
c_mainvolume = '{$maxCapacity}',
|
'c_mainvolume' => $maxCapacity,
|
||||||
c_maincontainer = '{$maxType}'
|
'c_maincontainer' => $maxType,
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
LIMIT 1
|
],
|
||||||
");
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2283,14 +2328,17 @@ trait InstallAPI {
|
||||||
$this->adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume);
|
$this->adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume);
|
||||||
|
|
||||||
// main volume
|
// main volume
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET
|
[
|
||||||
c_mainvolume = '{$volume}',
|
'c_mainvolume' => $volume,
|
||||||
c_maincontainer = 'D'
|
'c_maincontainer' => 'D',
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
LIMIT 1
|
],
|
||||||
");
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2298,14 +2346,17 @@ trait InstallAPI {
|
||||||
// =========================================
|
// =========================================
|
||||||
// 7) fallback (이상 케이스)
|
// 7) fallback (이상 케이스)
|
||||||
// =========================================
|
// =========================================
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET
|
[
|
||||||
c_mainvolume = 0,
|
'c_mainvolume' => 0,
|
||||||
c_maincontainer = ''
|
'c_maincontainer' => '',
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
LIMIT 1
|
],
|
||||||
");
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume)
|
private function adjustFullCycle($customer_uid, $cus, $oldVolume, $newVolume)
|
||||||
|
|
@ -2330,12 +2381,16 @@ trait InstallAPI {
|
||||||
$newForced = $forced * $ratio;
|
$newForced = $forced * $ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
qry("
|
$this->customerService()->patchCustomer(
|
||||||
UPDATE tbl_customer
|
(int)$customer_uid,
|
||||||
SET c_fullcycleforced = '{$newForced}'
|
[
|
||||||
WHERE c_uid = '{$customer_uid}'
|
'c_fullcycleforced' => $newForced,
|
||||||
LIMIT 1
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
");
|
],
|
||||||
|
[
|
||||||
|
'skip_after' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function reorder_daily_install_sequence($driver_uid, $install_date) {
|
private function reorder_daily_install_sequence($driver_uid, $install_date) {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
||||||
include_once getenv("DOCUMENT_ROOT")."/lib/erp_api.php";
|
include_once getenv("DOCUMENT_ROOT")."/lib/erp_api.php";
|
||||||
include_once getenv("DOCUMENT_ROOT")."/assets/api/install.php";
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/install.php";
|
||||||
include_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
||||||
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
|
|
||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
ini_set('display_errors', '1');
|
ini_set('display_errors', '1');
|
||||||
|
|
@ -435,81 +436,69 @@ class API extends CONF {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updtPoint(){
|
public function updtPoint()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
qry("UPDATE tbl_customer SET c_geolat=".$_POST['lat'].", c_geolon=".$_POST['lon'].", c_is_transfer='N' WHERE c_uid=".(int)$_POST['id']);
|
$svc = new CustomerService();
|
||||||
|
$svc->patchCustomer(
|
||||||
|
(int)$_POST['id'],
|
||||||
|
[
|
||||||
|
'c_geolat' => $_POST['lat'],
|
||||||
|
'c_geolon' => $_POST['lon'],
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID']
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// ====================
|
$this->response(
|
||||||
// Integration to ERP
|
$this->json([
|
||||||
// ====================
|
"markerIndex" => $_POST['marker_index'],
|
||||||
$erp = new ErpApi();
|
"lat" => $_POST['lat'],
|
||||||
|
"lon" => $_POST['lon'],
|
||||||
|
"name" => $_POST['name'],
|
||||||
|
"qty" => $_POST['qty'],
|
||||||
|
"property" => $_POST['property']
|
||||||
|
]),
|
||||||
|
200
|
||||||
|
);
|
||||||
|
|
||||||
try {
|
|
||||||
$columns = array();
|
|
||||||
$values = array();
|
|
||||||
$columns[] = "c_accountno";
|
|
||||||
$columns[] = "c_geolat";
|
|
||||||
$columns[] = "c_geolon";
|
|
||||||
$values[] = $_POST['accountno'];
|
|
||||||
$values[] = $_POST['lat'];
|
|
||||||
$values[] = $_POST['lon'];
|
|
||||||
$lguserid = $_SESSION['ss_UID'];
|
|
||||||
$erp->updateCustomerFromMis($columns, $values, $lguserid);
|
|
||||||
|
|
||||||
// 성공 시 c_is_transfer='Y'
|
|
||||||
qry("UPDATE tbl_customer SET c_is_transfer = 'Y' WHERE c_uid = ".(int)$_POST['id']);
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// 여기서는 아무것도 안함.
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->response($this->json(array("markerIndex"=>$_POST['marker_index'], "lat"=>$_POST['lat'], "lon"=>$_POST['lon'], "name"=>$_POST['name'], "qty"=>$_POST['qty'], "property"=>$_POST['property'])), 200);
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$error = array($e->getMessage());
|
$error = array($e->getMessage());
|
||||||
$this->response($this->json($error), 417);
|
$this->response(
|
||||||
|
$this->json($error),
|
||||||
|
417
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updtShortInfo(){
|
public function updtShortInfo()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
qry("UPDATE tbl_customer
|
$svc = new CustomerService();
|
||||||
SET c_location='".addslashes($_POST['location'])."',
|
$svc->patchCustomer(
|
||||||
c_comment_ri='".addslashes($_POST['comment'])."',
|
(int)$_POST['id'],
|
||||||
c_is_transfer='N'
|
[
|
||||||
WHERE c_uid=".(int)$_POST['id']);
|
'c_location' => trim($_POST['location']),
|
||||||
|
'c_comment_ri' => trim($_POST['comment']),
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID']
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// ====================
|
$this->response(
|
||||||
// Integration to ERP
|
$this->json([
|
||||||
// ====================
|
"result" => "success"
|
||||||
$erp = new ErpApi();
|
]),
|
||||||
|
200
|
||||||
|
);
|
||||||
|
|
||||||
try {
|
|
||||||
$columns = array();
|
|
||||||
$values = array();
|
|
||||||
$columns[] = "c_accountno";
|
|
||||||
$columns[] = "c_location";
|
|
||||||
$columns[] = "c_comment_ri";
|
|
||||||
$values[] = $_POST['accountno'];
|
|
||||||
$values[] = addslashes($_POST['location']);
|
|
||||||
$values[] = addslashes($_POST['comment']);
|
|
||||||
$lguserid = $_SESSION['ss_UID'];
|
|
||||||
$erp->updateCustomerFromMis($columns, $values, $lguserid);
|
|
||||||
|
|
||||||
// 성공 시 c_is_transfer='Y'
|
|
||||||
qry("UPDATE tbl_customer SET c_is_transfer = 'Y' WHERE c_uid = ".(int)$_POST['id']);
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// 여기서는 아무것도 안함.
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->response($this->json(array("result"=>"success")), 200);
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$error = array($e->getMessage());
|
$error = array($e->getMessage());
|
||||||
$this->response($this->json($error), 417);
|
$this->response(
|
||||||
|
$this->json($error),
|
||||||
|
417
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function inqDriverGeo(){
|
public function inqDriverGeo(){
|
||||||
try {
|
try {
|
||||||
$sqDriverGeo = qry("SELECT
|
$sqDriverGeo = qry("SELECT
|
||||||
|
|
@ -1252,6 +1241,7 @@ class API extends CONF {
|
||||||
'd_druid' => $driveruid, // 실제 driver
|
'd_druid' => $driveruid, // 실제 driver
|
||||||
'd_status' => 'A',
|
'd_status' => 'A',
|
||||||
'd_createruid' => $_SESSION['ss_UID'] ?? '',
|
'd_createruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_createddate' => $now14,
|
'd_createddate' => $now14,
|
||||||
'n_level' => $_SESSION['ss_LEVEL'],
|
'n_level' => $_SESSION['ss_LEVEL'],
|
||||||
];
|
];
|
||||||
|
|
@ -1344,6 +1334,7 @@ class API extends CONF {
|
||||||
'd_ordertype' => 'N',
|
'd_ordertype' => 'N',
|
||||||
'd_jobtype' => 'UCO',
|
'd_jobtype' => 'UCO',
|
||||||
'd_createruid' => $creatoruid,
|
'd_createruid' => $creatoruid,
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_createddate' => $now14,
|
'd_createddate' => $now14,
|
||||||
'n_level' => $_SESSION['ss_LEVEL'],
|
'n_level' => $_SESSION['ss_LEVEL'],
|
||||||
];
|
];
|
||||||
|
|
@ -1611,6 +1602,27 @@ class API extends CONF {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// SAFETY CHECK
|
||||||
|
// =========================
|
||||||
|
if ($existing) {
|
||||||
|
// row 와 넘어온 customer 가 다르면 중단
|
||||||
|
if (
|
||||||
|
(int)$existing['d_customeruid'] !== $customerUid
|
||||||
|
|| $existing['d_accountno'] !== $customer['c_accountno']
|
||||||
|
) {
|
||||||
|
|
||||||
|
throw new Exception(
|
||||||
|
"Daily key mismatch. "
|
||||||
|
. "UID={$uid}, "
|
||||||
|
. "Existing Customer={$existing['d_customeruid']}, "
|
||||||
|
. "Input Customer={$customerUid}, "
|
||||||
|
. "Existing Account={$existing['d_accountno']}, "
|
||||||
|
. "Input Account={$customer['c_accountno']}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$now14 = date('YmdHis');
|
$now14 = date('YmdHis');
|
||||||
|
|
||||||
// =========================
|
// =========================
|
||||||
|
|
@ -1638,7 +1650,7 @@ class API extends CONF {
|
||||||
'd_paystatus' => $paystatusSTR,
|
'd_paystatus' => $paystatusSTR,
|
||||||
|
|
||||||
'd_inputdate' => $now14,
|
'd_inputdate' => $now14,
|
||||||
'd_is_transfer' => 'N',
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_level' => $_SESSION['ss_LEVEL'],
|
'd_level' => $_SESSION['ss_LEVEL'],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
||||||
@include getenv("DOCUMENT_ROOT")."/config/config_shopInfo.php";
|
@include getenv("DOCUMENT_ROOT")."/config/config_shopInfo.php";
|
||||||
include_once getenv("DOCUMENT_ROOT") . "/lib/erp_api.php";
|
include_once getenv("DOCUMENT_ROOT") . "/lib/erp_api.php";
|
||||||
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
|
|
||||||
$goStr = "switched=$switched&page=$page&key_word=$key_word&column=$column&sorting_type=$sorting_type&switch=$switch&cstatus=$cstatus";
|
$goStr = "switched=$switched&page=$page&key_word=$key_word&column=$column&sorting_type=$sorting_type&switch=$switch&cstatus=$cstatus";
|
||||||
|
|
||||||
|
|
@ -50,13 +51,23 @@ if ($actionStr == "CUSTOMERINFO" && $mode == "delete") {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
$jdb->nQuery("UPDATE tbl_customer SET c_status='D', c_is_transfer = 'N' WHERE c_uid = '$c_uid'", "delete error");
|
$svc = new CustomerService();
|
||||||
|
$svc->patchCustomer(
|
||||||
// ====================
|
(int)$c_uid,
|
||||||
// Integration to ERP
|
[
|
||||||
// ====================
|
'c_status' => 'D',
|
||||||
// 화면에서 기능이 없음
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
|
]
|
||||||
|
);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$msg = $e->getMessage();
|
||||||
|
$func->modalMsg(
|
||||||
|
$msg,
|
||||||
|
"/index_intranet.php"
|
||||||
|
);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
$msg = "Deleted successfully.";
|
$msg = "Deleted successfully.";
|
||||||
$urlSTR = "/index_intranet.php?view=customer_list&$goStr";
|
$urlSTR = "/index_intranet.php?view=customer_list&$goStr";
|
||||||
|
|
@ -83,290 +94,172 @@ if ($actionStr == "CUSTOMERINFO") {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$columns = array();
|
try {
|
||||||
$values = array();
|
$data = [];
|
||||||
|
|
||||||
if($mode == "create") {
|
// =========================
|
||||||
//$columns[] = "c_uid";
|
// MODE
|
||||||
$columns[] = "c_createddate";
|
// =========================
|
||||||
|
$data['mode'] = $mode;
|
||||||
|
if ($mode == "update") {
|
||||||
|
$data['c_uid'] = $c_uid;
|
||||||
}
|
}
|
||||||
$columns[] = "c_accountno";
|
|
||||||
//$columns[] = "c_gid";
|
|
||||||
$columns[] = "c_form_us";
|
|
||||||
$columns[] = "c_form_eu";
|
|
||||||
$columns[] = "c_form_corsia";
|
|
||||||
$columns[] = "c_form_new";
|
|
||||||
$columns[] = "c_driveruid";
|
|
||||||
$columns[] = "c_name";
|
|
||||||
$columns[] = "c_paymenttype";
|
|
||||||
$columns[] = "c_payableto";
|
|
||||||
$columns[] = "c_paymentcycle";
|
|
||||||
$columns[] = "c_mailingaddr";
|
|
||||||
$columns[] = "c_rate";
|
|
||||||
$columns[] = "c_mainvolume";
|
|
||||||
$columns[] = "c_maincontainer";
|
|
||||||
$columns[] = "c_container";
|
|
||||||
$columns[] = "c_location";
|
|
||||||
$columns[] = "c_phone";
|
|
||||||
$columns[] = "c_phoneext";
|
|
||||||
$columns[] = "c_cell";
|
|
||||||
$columns[] = "c_email";
|
|
||||||
$columns[] = "c_address";
|
|
||||||
$columns[] = "c_city";
|
|
||||||
$columns[] = "c_postal";
|
|
||||||
//$columns[] = "c_area";
|
|
||||||
$columns[] = "c_province";
|
|
||||||
$columns[] = "c_contractdate";
|
|
||||||
$columns[] = "c_contractby";
|
|
||||||
$columns[] = "c_installdate";
|
|
||||||
$columns[] = "c_schedule";
|
|
||||||
$columns[] = "c_scheduleday";
|
|
||||||
$columns[] = "c_schedulebasic";
|
|
||||||
$columns[] = "c_fpickup";
|
|
||||||
$columns[] = "c_salesperson";
|
|
||||||
$columns[] = "c_salescommissiondate";
|
|
||||||
$columns[] = "c_salesmethod";
|
|
||||||
$columns[] = "c_status";
|
|
||||||
|
|
||||||
$columns[] = "c_comment_ri";
|
// =========================
|
||||||
$columns[] = "c_comment_ci";
|
// BASIC
|
||||||
$columns[] = "c_fullcycle";
|
// =========================
|
||||||
$columns[] = "c_fullcycleforced";
|
$data['c_accountno'] = $c_accountno;
|
||||||
$columns[] = "c_fullcycleflag";
|
$data['c_form_us'] = $c_form_us;
|
||||||
$columns[] = "c_forceddate";
|
$data['c_form_eu'] = str_replace("-", "", trim($c_form_eu));
|
||||||
$columns[] = "c_sludge";
|
$data['c_form_corsia'] = str_replace("-", "", trim($c_form_corsia));
|
||||||
|
$data['c_form_new'] = $c_form_new;
|
||||||
|
$data['c_driveruid'] = $c_driveruid;
|
||||||
|
$data['c_name'] = str_replace("\\", "", trim($c_name));
|
||||||
|
$data['c_status'] = $c_status;
|
||||||
|
$data['c_comment_ri'] = str_replace("\\","",trim($c_comment_ri));
|
||||||
|
|
||||||
$columns[] = "c_removaldate";
|
// =========================
|
||||||
$columns[] = "c_inactivedate";
|
// PAYMENT
|
||||||
$columns[] = "c_exchangedate";
|
// =========================
|
||||||
$columns[] = "c_switchformdate";
|
$data['c_rate'] = $c_rate;
|
||||||
|
$data['c_paymenttype'] = $c_paymenttype;
|
||||||
|
$data['c_payableto'] = str_replace("\\","",trim($c_payableto));
|
||||||
|
$data['c_paymentcycle'] = $c_paymentcycle;
|
||||||
|
$data['c_mailingaddr'] = str_replace("\\","",trim($c_mailingaddr));
|
||||||
|
|
||||||
$columns[] = "c_expoilmonth";
|
// =========================
|
||||||
$columns[] = "c_hstno";
|
// CONTAINER
|
||||||
$columns[] = "c_identcode";
|
// =========================
|
||||||
|
$data['c_mainvolume'] = $c_mainvolume;
|
||||||
$columns[] = "c_regionuid";
|
$data['c_maincontainer'] = str_replace("\\","",trim($c_maincontainer));
|
||||||
$columns[] = "c_region";
|
$data['c_container'] = str_replace("\\","",trim($c_container));
|
||||||
|
$data['c_location'] = str_replace("\\","",trim($c_location));
|
||||||
$columns[] = "c_manualvolume";
|
$data['c_removaldate'] = str_replace("-","",trim($c_removaldate));
|
||||||
|
$data['c_inactivedate'] = str_replace("-","",trim($c_inactivedate));
|
||||||
////////////
|
$data['c_exchangedate'] = str_replace("-","",trim($c_exchangedate));
|
||||||
// data
|
|
||||||
////////////
|
|
||||||
if($mode == "create") {
|
|
||||||
//$values[] = $c_uid;
|
|
||||||
$values[] = date("YmdHis");
|
|
||||||
}
|
|
||||||
$values[] = $c_accountno;
|
|
||||||
//$values[] = $c_gid;
|
|
||||||
$values[] = $c_form_us;
|
|
||||||
$values[] = str_replace("-", "", trim($c_form_eu));
|
|
||||||
$values[] = str_replace("-", "", trim($c_form_corsia));
|
|
||||||
$values[] = $c_form_new;
|
|
||||||
$values[] = $c_driveruid;
|
|
||||||
$values[] = str_replace("\\", "", trim($c_name));
|
|
||||||
$values[] = $c_paymenttype;
|
|
||||||
$values[] = str_replace("\\", "", trim($c_payableto));
|
|
||||||
$values[] = $c_paymentcycle;
|
|
||||||
$values[] = str_replace("\\", "", trim($c_mailingaddr));
|
|
||||||
$values[] = $c_rate;
|
|
||||||
$values[] = $c_mainvolume;
|
|
||||||
$values[] = str_replace("\\", "", trim($c_maincontainer));
|
|
||||||
$values[] = str_replace("\\", "", trim($c_container));
|
|
||||||
$values[] = str_replace("\\", "", trim($c_location));
|
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// CONTACT
|
||||||
|
// =========================
|
||||||
$c_phone = str_replace("-", "", trim($c_phone));
|
$c_phone = str_replace("-", "", trim($c_phone));
|
||||||
|
$data['c_phone'] = str_replace("\\","",trim($c_phone));
|
||||||
|
$data['c_phoneext'] = str_replace("\\","",trim($c_phoneext));
|
||||||
|
$data['c_cell'] = str_replace("\\","",trim($c_cell));
|
||||||
|
$data['c_email'] = str_replace("\\","",trim($c_email));
|
||||||
|
$data['c_address'] = str_replace("\\","",trim($c_address));
|
||||||
|
$data['c_city'] = str_replace("\\","",trim($c_city));
|
||||||
|
$data['c_postal'] = str_replace("\\","",trim($c_postal));
|
||||||
|
$data['c_province'] = "ON";
|
||||||
|
|
||||||
$values[] = str_replace("\\", "", trim($c_phone));
|
// =========================
|
||||||
$values[] = str_replace("\\", "", trim($c_phoneext));
|
// CONTRACT
|
||||||
$values[] = str_replace("\\", "", trim($c_cell));
|
// =========================
|
||||||
$values[] = str_replace("\\", "", trim($c_email));
|
$data['c_contractdate'] = str_replace("-","",trim($c_contractdate));
|
||||||
$values[] = str_replace("\\", "", trim($c_address));
|
$data['c_contractby'] = str_replace("\\","",trim($c_contractby));
|
||||||
$values[] = str_replace("\\", "", trim($c_city));
|
$data['c_installdate'] = str_replace("-","",trim($c_installdate));
|
||||||
$values[] = str_replace("\\", "", trim($c_postal));
|
$data['c_salesperson'] = str_replace("\\","",trim($c_salesperson));
|
||||||
//$values[] = $c_area;
|
$data['c_salescommissiondate'] = str_replace("-","",trim($c_salescommissiondate));
|
||||||
$values[] = "ON";
|
$data['c_salesmethod'] = str_replace("\\","",trim($c_salesmethod));
|
||||||
$values[] = str_replace("-", "", trim($c_contractdate));
|
$data['c_switchformdate'] = str_replace("-","",trim($c_switchformdate));
|
||||||
$values[] = str_replace("\\", "", trim($c_contractby));
|
$data['c_comment_ci'] = str_replace("\\","",trim($c_comment_ci));
|
||||||
$values[] = str_replace("-", "", trim($c_installdate));
|
|
||||||
$values[] = $c_schedule;
|
|
||||||
|
|
||||||
if(isset($_POST["c_scheduleday"])){
|
// =========================
|
||||||
|
// SCHEDULE
|
||||||
|
// =========================
|
||||||
|
$data['c_schedule'] = $c_schedule;
|
||||||
$c_scheduleday_vals = "";
|
$c_scheduleday_vals = "";
|
||||||
|
if (isset($_POST["c_scheduleday"])) {
|
||||||
foreach ($_POST["c_scheduleday"] as $key => $text_field) {
|
foreach ($_POST["c_scheduleday"] as $key => $text_field) {
|
||||||
$c_scheduleday_vals .= $text_field . "|";
|
$c_scheduleday_vals .= $text_field . "|";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$data['c_scheduleday'] = $c_scheduleday_vals;
|
||||||
|
$data['c_schedulebasic'] = str_replace("-","",trim($c_schedulebasic));
|
||||||
|
$data['c_fpickup'] = str_replace("-","",trim($c_fpickup));
|
||||||
|
|
||||||
$values[] = $c_scheduleday_vals;
|
// =========================
|
||||||
$values[] = str_replace("-", "", trim($c_schedulebasic));
|
// FULL CYCLE
|
||||||
$values[] = str_replace("-", "", trim($c_fpickup));
|
// =========================
|
||||||
$values[] = str_replace("\\", "", trim($c_salesperson));
|
$data['c_fullcycle'] = $c_fullcycle;
|
||||||
$values[] = str_replace("-", "", trim($c_salescommissiondate));
|
$data['c_fullcycleforced'] = $c_fullcycleforced;
|
||||||
$values[] = str_replace("\\", "", trim($c_salesmethod));
|
if ($c_fullcycleforced != "" && (float)$c_fullcycleforced != 0) {
|
||||||
$values[] = $c_status;
|
$c_fullcycleflag = 1;
|
||||||
$values[] = str_replace("\\", "", trim($c_comment_ri));
|
} else {
|
||||||
$values[] = str_replace("\\", "", trim($c_comment_ci));
|
$c_fullcycleflag = 0;
|
||||||
$values[] = $c_fullcycle;
|
|
||||||
$values[] = $c_fullcycleforced;
|
|
||||||
|
|
||||||
if ($c_fullcycleforced != "" && (float)$c_fullcycleforced != 0) $c_fullcycleflag = 1;
|
|
||||||
else $c_fullcycleflag = 0;
|
|
||||||
$values[] = $c_fullcycleflag;
|
|
||||||
|
|
||||||
|
|
||||||
if ($mode == "update" && $c_fullcycleflag == 1) {
|
|
||||||
$qry_n = "SELECT c_fullcycleforced FROM tbl_customer WHERE c_uid = '$c_uid' ";
|
|
||||||
$rt_n = $jdb->fQuery($qry_n, "list error");
|
|
||||||
}
|
}
|
||||||
|
$data['c_fullcycleflag'] = $c_fullcycleflag;
|
||||||
|
$data['c_forceddate'] = $c_forceddate;
|
||||||
|
|
||||||
$values[] = $c_forceddate;
|
// =========================
|
||||||
|
// ETC
|
||||||
|
// =========================
|
||||||
|
$data['c_sludge'] = $c_sludge;
|
||||||
|
$data['c_expoilmonth'] = $c_expoilmonth;
|
||||||
|
$data['c_hstno'] = str_replace("\\","",trim($c_hstno));
|
||||||
|
$data['c_identcode'] = str_replace("\\","",trim($c_identcode));
|
||||||
|
$data['c_manualvolume'] = isset($_POST['isManual'])? 'Y': 'N';
|
||||||
|
$data['c_createdby'] = $_SESSION['ss_UID'] ?? null;
|
||||||
|
$data['c_updatedby'] = $_SESSION['ss_UID'] ?? null;
|
||||||
|
|
||||||
$values[] = $c_sludge;
|
// =========================
|
||||||
|
// SAVE
|
||||||
$values[] = str_replace("-", "", trim($c_removaldate));
|
// =========================
|
||||||
$values[] = str_replace("-", "", trim($c_inactivedate));
|
$svc = new CustomerService();
|
||||||
$values[] = str_replace("-", "", trim($c_exchangedate));
|
$result = $svc->saveCustomer(
|
||||||
$values[] = str_replace("-", "", trim($c_switchformdate));
|
$data
|
||||||
|
);
|
||||||
$values[] = $c_expoilmonth;
|
|
||||||
$values[] = str_replace("\\", "", trim($c_hstno));
|
|
||||||
$values[] = str_replace("\\", "", trim($c_identcode));
|
|
||||||
|
|
||||||
$qry_dvr = "SELECT m_regionuid, m_region FROM tbl_member WHERE m_uid = '".$c_driveruid."' ";
|
|
||||||
$rt_dvr = $jdb->fQuery($qry_dvr, "fetch query error");
|
|
||||||
|
|
||||||
$values[] = $rt_dvr['m_regionuid'];
|
|
||||||
$values[] = str_replace("\\", "", trim($rt_dvr['m_region']));
|
|
||||||
|
|
||||||
$values[] = isset($_POST['isManual']) ? 'Y' : 'N';
|
|
||||||
|
|
||||||
//for ($i=0; $i < count($columns); $i++)
|
|
||||||
//echo "[$columns[$i]][$values[$i]]<br>";
|
|
||||||
//echo "[UID=$uid][ID=$userid][MAXUID=$maxuid]";
|
|
||||||
//exit;
|
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// LOG
|
||||||
|
// =========================
|
||||||
if ($mode == "create") {
|
if ($mode == "create") {
|
||||||
$jdb->iQuery("tbl_customer", $columns, $values);
|
|
||||||
|
addLog(
|
||||||
|
"add",
|
||||||
|
"CUSTOMER DETAIL",
|
||||||
|
"CREATE",
|
||||||
|
$lguserid,
|
||||||
|
"",
|
||||||
|
$result['c_uid']
|
||||||
|
);
|
||||||
|
|
||||||
$msg = "Created successfully.";
|
$msg = "Created successfully.";
|
||||||
|
|
||||||
$query = "SELECT max(c_uid) FROM tbl_customer ";
|
} else {
|
||||||
$rt=$jdb->fQuery($query, "fetch query error");
|
|
||||||
|
|
||||||
$c_uid = $rt[0];
|
addLog(
|
||||||
|
"add",
|
||||||
|
"CUSTOMER DETAIL",
|
||||||
|
"UPDATE",
|
||||||
|
$lguserid,
|
||||||
|
"",
|
||||||
|
$result['c_uid']
|
||||||
|
);
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL", "CREATE", $lguserid, "", $c_uid);
|
|
||||||
|
|
||||||
//$query = "select max(uid) from tbl_members ";
|
|
||||||
//$user_id = $jdb->rQuery($query, "max query error");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if($mode == "update") {
|
|
||||||
|
|
||||||
$query = "SELECT c_uid, c_driveruid, c_address, c_postal, c_fullcycleforced FROM tbl_customer WHERE c_uid = '$c_uid' ";
|
|
||||||
$rt=$jdb->fQuery($query, "fetch query error");
|
|
||||||
|
|
||||||
$c_uid = $rt[0];
|
|
||||||
$c_driveruid_old = $rt[1];
|
|
||||||
|
|
||||||
if ($c_fullcycleflag == 1) {
|
|
||||||
$c_fullcycleforcedSTR = "Org: ".$rt[4].", New: ".$c_fullcycleforced;
|
|
||||||
addLog ("add", "FORCED CYCLE - CUSTOMER", "UPDATE", $lguserid, $c_fullcycleforcedSTR, $c_uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// c_address, c_postal 변경시 geo 값 초기화 (2024.06.05)
|
|
||||||
if (str_replace("\\", "", trim($c_address)) != str_replace("\\", "", $rt['c_address']) ||
|
|
||||||
str_replace("\\", "", trim($c_postal)) != str_replace("\\", "", $rt['c_postal'] )) {
|
|
||||||
|
|
||||||
$qry_geo = "UPDATE tbl_customer SET c_geolat=NULL, c_geolon=NULL WHERE c_uid = '".$c_uid."'";
|
|
||||||
$jdb->nQuery($qry_geo, "Update error");
|
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL - GEO RESET", "UPDATE", $lguserid, $qry_geo, $c_uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$jdb->uQuery("tbl_customer", $columns, $values, " where c_uid = '$c_uid' ");
|
|
||||||
$msg = "Updated successfully.";
|
$msg = "Updated successfully.";
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL", "UPDATE", $lguserid, "", $c_uid);
|
|
||||||
|
|
||||||
|
|
||||||
// Sludge, rate, paymentcycle Update - 오늘 이후 오더장에만 적용한다. by 이강 2025-12-09
|
|
||||||
$today = date("Ymd");
|
|
||||||
$qry_sludge = "UPDATE tbl_daily
|
|
||||||
SET
|
|
||||||
d_rate='".$c_rate."',
|
|
||||||
d_cycle='".$c_paymentcycle."',
|
|
||||||
d_paymenttype='".$c_paymenttype."'
|
|
||||||
WHERE d_customeruid = '".$c_uid."'
|
|
||||||
and d_orderdate > '".$today."'
|
|
||||||
";
|
|
||||||
$jdb->nQuery($qry_sludge, "Update error");
|
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL - SLUDGE, RATE, PAYMENTCYCLE, PAYMENTTYPE", "UPDATE", $lguserid, $qry_sludge, $c_uid);
|
|
||||||
|
|
||||||
// 모든 테이블의 드라이버 정보 업데이트
|
|
||||||
// customer page 에서 driver 정보 업데이트시 현재일을 포함한 그 이후의 오더장이 존재하는 경우
|
|
||||||
// 오더장의 driver를 변경된 driver로 업데이트. (2024.04.05)
|
|
||||||
// Request 도 현재일을 포함한 그 이후의 데이터가 존재하는 경우 변경된 driver 로 업데이트. (2024.04.05)
|
|
||||||
if ($c_driveruid != $c_driveruid_old) {
|
|
||||||
|
|
||||||
$addqry_daily = " AND d_orderdate >= '".date("Ymd")."'";
|
|
||||||
|
|
||||||
$qry_driverd = "UPDATE tbl_daily SET d_driveruid='".$c_driveruid."' WHERE d_customeruid = '".$c_uid."'". $addqry_daily;
|
|
||||||
$jdb->nQuery($qry_driverd, "Update error");
|
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL - SLUDGE, RATE, PAYMENTCYCLE, PAYMENTTYPE", "UPDATE", $lguserid, $qry_driverd, $c_uid);
|
|
||||||
|
|
||||||
$addqry_req = " AND r_requestdate >= '".date("Ymd")."'";
|
|
||||||
|
|
||||||
$qry_driverr = "UPDATE tbl_request SET r_driveruid='".$c_driveruid."'
|
|
||||||
WHERE r_driveruid = '".$c_driveruid_old."' AND r_customeruid = '".$c_uid."'". $addqry_req;
|
|
||||||
$jdb->nQuery($qry_driverr, "Update error");
|
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DETAIL - SLUDGE, RATE, PAYMENTCYCLE, PAYMENTTYPE", "UPDATE", $lguserid, $qry_driverr, $c_uid);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ====================
|
|
||||||
// Integration to ERP
|
|
||||||
// ====================
|
|
||||||
$erp = new ErpApi();
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
if ($mode == "create") {
|
|
||||||
// MIS → ERP CREATE (payload 매핑은 ErpApi 내부에서 자동 처리)
|
|
||||||
$erp->createCustomerFromMis($columns, $values, $lguserid);
|
|
||||||
}
|
|
||||||
else if ($mode == "update") {
|
|
||||||
// MIS → ERP UPDATE
|
|
||||||
$erp->updateCustomerFromMis($columns, $values, $lguserid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 성공 시 c_is_transfer='Y'
|
// =========================
|
||||||
$jdb->uQuery("tbl_customer", ["c_is_transfer"], ["Y"], " WHERE c_uid = '$c_uid'");
|
// SUCCESS
|
||||||
|
// =========================
|
||||||
|
$func->modalMsg(
|
||||||
|
$msg,
|
||||||
|
"/index_intranet.php?view=customer_detail&mode=update&c_uid=".$result['c_uid']."&$goStr"
|
||||||
|
);
|
||||||
|
|
||||||
//
|
|
||||||
$func->modalMsg($msg, "/index_intranet.php?view=customer_detail&mode=update&c_uid=$c_uid&$goStr");
|
|
||||||
exit();
|
exit();
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$msg = "Check Integration Log.";
|
|
||||||
$func->modalMsg($msg, "/index_intranet.php");
|
$msg = $e->getMessage();
|
||||||
|
|
||||||
|
$func->modalMsg(
|
||||||
|
$msg,
|
||||||
|
"/index_intranet.php"
|
||||||
|
);
|
||||||
|
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$msg = "Invalid data. Please try again.";
|
|
||||||
$func -> modalMsg ($msg, "");
|
|
||||||
exit();
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$msg = "Invalid data. Please try again.";
|
|
||||||
$func -> modalMsg ($msg, "/index_intranet.php");
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -741,7 +741,9 @@ if ($c_type_p == 'P') {
|
||||||
} else {
|
} else {
|
||||||
// 몇 주마다?
|
// 몇 주마다?
|
||||||
$weekNum = intval(str_replace('W', '', $c_schedule));
|
$weekNum = intval(str_replace('W', '', $c_schedule));
|
||||||
if (!empty($c_schedulebasic)) {
|
|
||||||
|
if($weekNum == 1) $isScheduleMatch = true;
|
||||||
|
else if (!empty($c_schedulebasic)) {
|
||||||
$baseDate = strtotime($c_schedulebasic);
|
$baseDate = strtotime($c_schedulebasic);
|
||||||
$targetDate = strtotime($orderdate);
|
$targetDate = strtotime($orderdate);
|
||||||
// 날짜 차이
|
// 날짜 차이
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?
|
<?
|
||||||
|
|
||||||
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
|
|
||||||
//echo "1111OKKKKKKKKKKKKKKKKKK";exit;
|
//echo "1111OKKKKKKKKKKKKKKKKKK";exit;
|
||||||
|
|
||||||
|
|
@ -36,10 +37,17 @@ if ($c_uid != "" && $c_fullcycle !== "") {
|
||||||
FROM tbl_customer WHERE c_uid = '$c_uid' ";
|
FROM tbl_customer WHERE c_uid = '$c_uid' ";
|
||||||
$rt_org = $jdb->fQuery($qry_org, "query error");
|
$rt_org = $jdb->fQuery($qry_org, "query error");
|
||||||
|
|
||||||
$qry_cycle = "UPDATE tbl_customer
|
try {
|
||||||
SET c_fullcycleforced = $c_fullcycle, c_fullcycleflag = 1, c_forceddate = '".date("Ymd")."'
|
$svc = new CustomerService();
|
||||||
WHERE c_uid = '$c_uid' ";
|
$svc->patchCustomer(
|
||||||
$jdb->nQuery($qry_cycle, "update error");
|
(int)$c_uid,
|
||||||
|
[
|
||||||
|
'c_fullcycleforced' => $c_fullcycle,
|
||||||
|
'c_fullcycleflag' => 1,
|
||||||
|
'c_forceddate' => date("Ymd"),
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID'] ?? null
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
addLog ("add", "FORCED CYCLE", "UPDATE", $lguserid, $qry_cycle, $c_uid);
|
addLog ("add", "FORCED CYCLE", "UPDATE", $lguserid, $qry_cycle, $c_uid);
|
||||||
|
|
||||||
|
|
@ -52,6 +60,9 @@ if ($c_uid != "" && $c_fullcycle !== "") {
|
||||||
if ($rt_org['c_fullcycleflag'] == 1) echo "ERROR1|".$rt_org['c_fullcycleforced']."|".$rt_org['c_fullcycleforced'];
|
if ($rt_org['c_fullcycleflag'] == 1) echo "ERROR1|".$rt_org['c_fullcycleforced']."|".$rt_org['c_fullcycleforced'];
|
||||||
else echo "ERROR1|".$rt_org['c_fullcycle']."|0";
|
else echo "ERROR1|".$rt_org['c_fullcycle']."|0";
|
||||||
}
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "ERROR3";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
echo "ERROR2";
|
echo "ERROR2";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,201 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class erpCustomerMapper
|
||||||
|
{
|
||||||
|
public static function map($payload)
|
||||||
|
{
|
||||||
|
$action = strtoupper(trim($payload['action'] ?? ''));
|
||||||
|
if ($action === 'UPDATED') {
|
||||||
|
return self::mapPatch($payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::mapFull($payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function mapFull($payload)
|
||||||
|
{
|
||||||
|
$after = $payload['after'] ?? [];
|
||||||
|
|
||||||
|
$mapped = [];
|
||||||
|
|
||||||
|
foreach (self::fieldMap() as $misField => $cfg) {
|
||||||
|
|
||||||
|
$dtoField = $cfg['dto'];
|
||||||
|
|
||||||
|
$mapped[$dtoField] = self::transformValue(
|
||||||
|
$after[$misField] ?? null,
|
||||||
|
$cfg['type']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// audit
|
||||||
|
$mapped['cusSourceType'] = 'MIS';
|
||||||
|
|
||||||
|
|
||||||
|
return $mapped;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function mapPatch($payload)
|
||||||
|
{
|
||||||
|
$before = $payload['before'] ?? [];
|
||||||
|
$after = $payload['after'] ?? [];
|
||||||
|
|
||||||
|
$patch = [];
|
||||||
|
|
||||||
|
foreach (self::fieldMap() as $misField => $cfg) {
|
||||||
|
|
||||||
|
$beforeVal = $before[$misField] ?? null;
|
||||||
|
$afterVal = $after[$misField] ?? null;
|
||||||
|
|
||||||
|
if (!self::isDifferent($beforeVal, $afterVal)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$patch[$cfg['dto']] = self::transformValue(
|
||||||
|
$afterVal,
|
||||||
|
$cfg['type']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NO CHANGE
|
||||||
|
if (count($patch) <= 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// REQUIRED
|
||||||
|
$patch['cusSourceType'] = 'MIS';
|
||||||
|
$patch['cusNo'] = $after['c_accountno'] ?? null;
|
||||||
|
$patch['cusExternalUpdatedBy'] = $after['c_updatedby'] ?? null;
|
||||||
|
|
||||||
|
return $patch;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIELD MAP
|
||||||
|
private static function fieldMap(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'c_accountno' => ['dto' => 'cusNo' , 'type' => 'string'],
|
||||||
|
'c_name' => ['dto' => 'cusName' , 'type' => 'string'],
|
||||||
|
'c_status' => ['dto' => 'cusStatus' , 'type' => 'string'],
|
||||||
|
'c_regionuid' => ['dto' => 'cusRegionId' , 'type' => 'int'],
|
||||||
|
'c_area' => ['dto' => 'cusAreaId' , 'type' => 'int'],
|
||||||
|
'c_address' => ['dto' => 'cusAddress1' , 'type' => 'string'],
|
||||||
|
'c_location' => ['dto' => 'cusAddress2' , 'type' => 'string'],
|
||||||
|
'c_postal' => ['dto' => 'cusPostalCode' , 'type' => 'string'],
|
||||||
|
'c_city' => ['dto' => 'cusCity' , 'type' => 'string'],
|
||||||
|
'c_province' => ['dto' => 'cusProvince' , 'type' => 'string'],
|
||||||
|
'c_geolat' => ['dto' => 'cusGeoLat' , 'type' => 'float'],
|
||||||
|
'c_geolon' => ['dto' => 'cusGeoLon' , 'type' => 'float'],
|
||||||
|
'c_email' => ['dto' => 'cusEmail' , 'type' => 'string'],
|
||||||
|
'c_phone' => ['dto' => 'cusPhone' , 'type' => 'string'],
|
||||||
|
'c_phoneext' => ['dto' => 'cusPhoneExt' , 'type' => 'string'],
|
||||||
|
'c_contractdate' => ['dto' => 'cusContractDate' , 'type' => 'date'],
|
||||||
|
'c_contractby' => ['dto' => 'cusContractedBy' , 'type' => 'string'],
|
||||||
|
'c_installdate' => ['dto' => 'cusInstallDate' , 'type' => 'date'],
|
||||||
|
// 'c_fullcycle' => ['dto' => 'cusFullCycle' , 'type' => 'decimal'],
|
||||||
|
// 'c_fullcycleflag' => ['dto' => 'cusFullCycleFlag' , 'type' => 'bool'],
|
||||||
|
// 'c_fullcycleforced' => ['dto' => 'cusFullCycleForced' , 'type' => 'decimal'],
|
||||||
|
// 'c_forceddate' => ['dto' => 'cusFullCycleForcedDate' , 'type' => 'date'],
|
||||||
|
'c_schedule' => ['dto' => 'cusSchedule' , 'type' => 'string'],
|
||||||
|
'c_scheduleday' => ['dto' => 'cusScheduledays' , 'type' => 'string'],
|
||||||
|
'c_lastpaiddate' => ['dto' => 'cusLastPaidDate' , 'type' => 'date'],
|
||||||
|
'c_rate' => ['dto' => 'cusRate' , 'type' => 'float'],
|
||||||
|
'c_paymenttype' => ['dto' => 'cusPayMethod' , 'type' => 'string'],
|
||||||
|
'c_form_eu' => ['dto' => 'cusIsccDate' , 'type' => 'date'],
|
||||||
|
'c_form_corsia' => ['dto' => 'cusCorsiaDate' , 'type' => 'date'],
|
||||||
|
'c_hstno' => ['dto' => 'cusHstNo' , 'type' => 'string'],
|
||||||
|
'c_inactivedate' => ['dto' => 'cusTerminatedDate' , 'type' => 'date'],
|
||||||
|
'c_lastpickupdate' => ['dto' => 'cusLastPickupDate' , 'type' => 'date'],
|
||||||
|
'c_lastpickupquantity' => ['dto' => 'cusLastPickupQty' , 'type' => 'int'],
|
||||||
|
'c_sludge' => ['dto' => 'cusLastSludge' , 'type' => 'int'],
|
||||||
|
'c_comment_ri' => ['dto' => 'cusComment' , 'type' => 'string'],
|
||||||
|
'c_comment_ci' => ['dto' => 'cusContactComment' , 'type' => 'string'],
|
||||||
|
'c_createdby' => ['dto' => 'cusExternalCreatedBy' , 'type' => 'string'],
|
||||||
|
'c_updatedby' => ['dto' => 'cusExternalUpdatedBy' , 'type' => 'string'],
|
||||||
|
'c_salesperson' => ['dto' => 'cusSalesperson' , 'type' => 'string'],
|
||||||
|
'c_salescommissiondate' => ['dto' => 'cusSalesCommissionDate' , 'type' => 'string'],
|
||||||
|
'c_salesmethod' => ['dto' => 'cusSalesMethod' , 'type' => 'string'],
|
||||||
|
// 어차피 무시당함
|
||||||
|
// 'c_createddate' => ['dto' => 'cusCreatedAt' , 'type' => 'datetime'],
|
||||||
|
// 'c_updateddate' => ['dto' => 'cusUpdatedAt' , 'type' => 'datetime'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// VALUE TRANSFORM
|
||||||
|
private static function transformValue(
|
||||||
|
$value,
|
||||||
|
string $type
|
||||||
|
) {
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
|
||||||
|
case 'int':
|
||||||
|
return ($value === ''||$value === null) ? null : (int)$value;
|
||||||
|
|
||||||
|
case 'float':
|
||||||
|
return ($value === ''||$value === null) ? null : (float)$value;
|
||||||
|
|
||||||
|
case 'decimal':
|
||||||
|
return ($value === ''||$value === null) ? null : (float)$value;
|
||||||
|
|
||||||
|
case 'bool':
|
||||||
|
return ($value == '1'||$value === 1||$value === true);
|
||||||
|
|
||||||
|
case 'date':
|
||||||
|
return self::date($value);
|
||||||
|
|
||||||
|
case 'datetime':
|
||||||
|
return self::datetime($value);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function isDifferent($a, $b): bool
|
||||||
|
{
|
||||||
|
if (is_numeric($a) && is_numeric($b)) {
|
||||||
|
return (float)$a != (float)$b;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $a !== $b;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function date($value)
|
||||||
|
{
|
||||||
|
$value = trim((string)$value);
|
||||||
|
if ($value == '') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = preg_replace('/[^0-9]/','',$value);
|
||||||
|
if (strlen($value) != 8) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
substr($value, 0, 4)
|
||||||
|
. '-'
|
||||||
|
. substr($value, 4, 2)
|
||||||
|
. '-'
|
||||||
|
. substr($value, 6, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function datetime($yyyymmddhhmiss)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
empty($yyyymmddhhmiss)
|
||||||
|
|| strlen($yyyymmddhhmiss) != 14
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return substr($yyyymmddhhmiss,0,4)."-".
|
||||||
|
substr($yyyymmddhhmiss,4,2)."-".
|
||||||
|
substr($yyyymmddhhmiss,6,2)."T".
|
||||||
|
substr($yyyymmddhhmiss,8,2).":".
|
||||||
|
substr($yyyymmddhhmiss,10,2).":".
|
||||||
|
substr($yyyymmddhhmiss,12,2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
class erpDailyOrderMapper
|
||||||
|
{
|
||||||
|
public static function map($payload)
|
||||||
|
{
|
||||||
|
$after = $payload['after'];
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
"cdoOrderDate" => self::date($after['d_orderdate']),
|
||||||
|
"cdoJobType" => $after['d_jobtype'] ?? null,
|
||||||
|
"cdoOrderType" => $after['d_ordertype'] ?? null,
|
||||||
|
"cdoRegionId" => !empty($after['d_regionuid']) ? (int)$after['d_regionuid'] : null,
|
||||||
|
"cdoExternalDriverId" => $after['d_druid'] ?? null,
|
||||||
|
"cdoExternalCreatedBy" => $after['d_createruid'] ?? null,
|
||||||
|
"cdoExternalUpdatedBy" => $after['d_driveruid'] ?? null,
|
||||||
|
"cdoCustomerNo" => $after['d_accountno'] ?? null,
|
||||||
|
"cdoPaymentType" => $after['d_paymenttype'] ?? null,
|
||||||
|
"cdoCycle" => $after['d_cycle'] ?? null,
|
||||||
|
"cdoRate" => isset($after['d_rate']) ? (float)$after['d_rate'] : null,
|
||||||
|
"cdoStatus" => $after['d_status'] ?? 'A',
|
||||||
|
"cdoVisitFlag" => $after['d_visit'] ?? 'N',
|
||||||
|
"cdoEstimatedQty" => isset($after['d_estquantity']) ? (float)$after['d_estquantity'] : null,
|
||||||
|
"cdoPickupAt" => ($after['d_status'] ?? '') === 'F' ? self::datetime($after['d_modifydate'] ?? null) : null,
|
||||||
|
"cdoQuantity" => isset($after['d_quantity']) ? (float)$after['d_quantity'] : null,
|
||||||
|
"cdoSludge" => isset($after['d_sludge']) ? (int)$after['d_sludge'] : null,
|
||||||
|
"cdoPayStatus" => self::nullable($after['d_paystatus'] ?? null),
|
||||||
|
"cdoPayAmount" => isset($after['d_payamount']) ? (float)$after['d_payamount'] : null,
|
||||||
|
"cdoPayeeName" => self::nullable($after['d_payeename'] ?? null),
|
||||||
|
"cdoPayeeSign" => $after['d_payeesign'] ?? null,
|
||||||
|
// "cdoPickupNote" => $after['d_location'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function nullable($value)
|
||||||
|
{
|
||||||
|
if ($value === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = trim((string)$value);
|
||||||
|
|
||||||
|
return ($value === '') ? null : $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function date($yyyymmdd)
|
||||||
|
{
|
||||||
|
return substr($yyyymmdd,0,4)."-".
|
||||||
|
substr($yyyymmdd,4,2)."-".
|
||||||
|
substr($yyyymmdd,6,2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function datetime($yyyymmddhhmiss)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
empty($yyyymmddhhmiss)
|
||||||
|
|| strlen($yyyymmddhhmiss) != 14
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return substr($yyyymmddhhmiss,0,4)."-".
|
||||||
|
substr($yyyymmddhhmiss,4,2)."-".
|
||||||
|
substr($yyyymmddhhmiss,6,2)."T".
|
||||||
|
substr($yyyymmddhhmiss,8,2).":".
|
||||||
|
substr($yyyymmddhhmiss,10,2).":".
|
||||||
|
substr($yyyymmddhhmiss,12,2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -32,6 +32,7 @@ try {
|
||||||
'd_note' => str_replace("\\", "", trim($d_note)),
|
'd_note' => str_replace("\\", "", trim($d_note)),
|
||||||
'd_inputdate' => date("YmdHis"),
|
'd_inputdate' => date("YmdHis"),
|
||||||
'd_jobtype' => $d_jobtype ?? 'UCO',
|
'd_jobtype' => $d_jobtype ?? 'UCO',
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
];
|
];
|
||||||
|
|
||||||
// 기존 record 기준 update
|
// 기존 record 기준 update
|
||||||
|
|
@ -64,7 +65,8 @@ try {
|
||||||
'd_orderdate' => $d_visitdate,
|
'd_orderdate' => $d_visitdate,
|
||||||
'd_accountno' => $_POST['d_customerno'],
|
'd_accountno' => $_POST['d_customerno'],
|
||||||
'd_jobtype' => 'UCO',
|
'd_jobtype' => 'UCO',
|
||||||
'd_payeesign' => $filename
|
'd_payeesign' => $filename,
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? ''
|
||||||
], [
|
], [
|
||||||
'match_uid' => $d_uid,
|
'match_uid' => $d_uid,
|
||||||
'allow_update' => true
|
'allow_update' => true
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
||||||
|
require_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
||||||
|
|
||||||
//$func->checkAdmin("index.php");
|
//$func->checkAdmin("index.php");
|
||||||
|
|
||||||
|
|
@ -32,18 +33,55 @@ if($d_uid == "") {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
SELECT
|
||||||
|
d_uid,
|
||||||
|
d_orderdate,
|
||||||
|
d_accountno
|
||||||
|
FROM tbl_daily
|
||||||
|
WHERE d_uid = '$d_uid'
|
||||||
|
";
|
||||||
|
|
||||||
|
$daily = $jdb->fQuery($qry, "query error");
|
||||||
|
|
||||||
|
if (!$daily) {
|
||||||
|
throw new Exception("Daily record not found");
|
||||||
|
}
|
||||||
|
|
||||||
$d_paynoteSTR = str_replace("\\", "", trim($d_paynote));
|
$d_paynoteSTR = str_replace("\\", "", trim($d_paynote));
|
||||||
|
|
||||||
|
$dailyApi = new DailyService();
|
||||||
|
$dailyApi->saveDaily(
|
||||||
|
[
|
||||||
|
'd_orderdate' => $daily['d_orderdate'],
|
||||||
|
'd_accountno' => $daily['d_accountno'],
|
||||||
|
'd_paynote' => $d_paynoteSTR,
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? ''
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'match_uid' => $d_uid,
|
||||||
|
'allow_update' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
$qry_daily = "UPDATE tbl_daily SET d_paynote = '".addslashes($d_paynoteSTR)."' WHERE d_uid = '$d_uid' ";
|
addLog(
|
||||||
|
"add",
|
||||||
//echo "[$qry_customer]<br>";
|
"RECEIPT NOTE",
|
||||||
|
"UPDATE",
|
||||||
$jdb->nQuery($qry_daily, "update error");
|
$lguserid,
|
||||||
|
"saveDaily()",
|
||||||
addLog ("add", "RECEIPT NOTE", "UPDATE", $lguserid, $qry_daily, $d_uid);
|
$d_uid
|
||||||
|
);
|
||||||
|
|
||||||
echo 1;
|
echo 1;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
echo 0;
|
||||||
|
}
|
||||||
|
|
||||||
exit();
|
exit();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,338 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// ERP OUTBOX WORKER
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CRON
|
||||||
|
//
|
||||||
|
// * * * * * /usr/local/bin/php -q /home/.../lib/runErpOutbox.php
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
date_default_timezone_set('America/Toronto');
|
||||||
|
|
||||||
|
$time_start = microtime(true);
|
||||||
|
$mode = (PHP_SAPI === 'cli') ? "SHELL" : "WEB";
|
||||||
|
// if ($mode == "SHELL") {
|
||||||
|
// $GETDIR = "/var/www/html";
|
||||||
|
// $ENT = "\n";
|
||||||
|
if ($mode == "SHELL") {
|
||||||
|
$GETDIR = dirname(__DIR__);
|
||||||
|
$ENT = "\n";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$GETDIR = getenv("DOCUMENT_ROOT");
|
||||||
|
$ENT = "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "####[START ERP OUTBOX]####{$ENT}";
|
||||||
|
|
||||||
|
include_once $GETDIR . "/include/function_class.php";
|
||||||
|
include_once $GETDIR . "/include/arrayinfo.php";
|
||||||
|
include_once $GETDIR . "/include/mysql_class_v7.php";
|
||||||
|
include_once $GETDIR . "/lib/mapper/erpDailyOrderMapper.php";
|
||||||
|
include_once $GETDIR . "/lib/mapper/erpCustomerMapper.php";
|
||||||
|
|
||||||
|
$func = new Func();
|
||||||
|
$jdb = new JDB();
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// CONFIG
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$qry_cfg = "SELECT cfg_erp_api_url, cfg_erp_api_token FROM tbl_config LIMIT 1";
|
||||||
|
$cfg = $jdb->fQuery($qry_cfg, "config query error");
|
||||||
|
|
||||||
|
$serverUrl = rtrim($cfg['cfg_erp_api_url'], '/');
|
||||||
|
$token = trim($cfg['cfg_erp_api_token']);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// GET OUTBOX
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
SELECT *
|
||||||
|
FROM tbl_erp_outbox
|
||||||
|
WHERE eo_status IN ('PENDING', 'FAILED')
|
||||||
|
AND eo_retry_count < 5
|
||||||
|
ORDER BY eo_id ASC
|
||||||
|
LIMIT 1000
|
||||||
|
";
|
||||||
|
|
||||||
|
echo "[OUTBOX QUERY][$qry]{$ENT}";
|
||||||
|
|
||||||
|
$result = $jdb->nQuery($qry, "outbox query error");
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
||||||
|
|
||||||
|
$eo_id = $row['eo_id'];
|
||||||
|
|
||||||
|
echo "[$entity:$eo_id] [$method:$url] - ";
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// LOCK
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$qry_lock = "
|
||||||
|
UPDATE tbl_erp_outbox
|
||||||
|
SET eo_status = 'PROCESSING'
|
||||||
|
WHERE eo_id = '{$eo_id}'
|
||||||
|
AND eo_status IN ('PENDING', 'FAILED')
|
||||||
|
";
|
||||||
|
|
||||||
|
$jdb->nQuery($qry_lock, "lock error");
|
||||||
|
|
||||||
|
if (mysqli_affected_rows($jdb->DBConn) <= 0) {
|
||||||
|
|
||||||
|
echo "[SKIP LOCK FAIL][$eo_id]{$ENT}";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// PAYLOAD
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
$payload = json_decode($row['eo_payload'], true);
|
||||||
|
$entity = strtoupper(trim($row['eo_entity_type'] ?? ''));
|
||||||
|
if ($entity == '') {
|
||||||
|
throw new Exception("Missing entity");
|
||||||
|
}
|
||||||
|
if (!$payload) {
|
||||||
|
throw new Exception("Invalid eo_payload json");
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// MAPPER & URL
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
switch ($entity) {
|
||||||
|
// DAILY
|
||||||
|
case 'DAILY':
|
||||||
|
$body = erpDailyOrderMapper::map($payload);
|
||||||
|
$method = 'POST';
|
||||||
|
$url = $serverUrl . "/crm-rest-api/customer-daily-order";
|
||||||
|
break;
|
||||||
|
|
||||||
|
// CUSTOMER
|
||||||
|
case 'CUSTOMER':
|
||||||
|
$action = strtoupper(trim($payload['action'] ?? ''));
|
||||||
|
$body = erpCustomerMapper::map($payload);
|
||||||
|
if ($body === null) {
|
||||||
|
echo "[SKIP EMPTY PATCH][$eo_id]{$ENT}";
|
||||||
|
$qry_skip = "
|
||||||
|
UPDATE tbl_erp_outbox
|
||||||
|
SET
|
||||||
|
eo_status = 'SUCCESS',
|
||||||
|
eo_last_error = NULL,
|
||||||
|
eo_processed_at = NOW()
|
||||||
|
WHERE eo_id = '{$eo_id}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$jdb->nQuery($qry_skip, "skip update error");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PATCH
|
||||||
|
if ($action === 'UPDATED') {
|
||||||
|
$method = 'PATCH';
|
||||||
|
$url = $serverUrl . "/crm-rest-api/customer/no/" . urlencode($payload['key']['c_accountno']);
|
||||||
|
}
|
||||||
|
// CREATE
|
||||||
|
else {
|
||||||
|
$method = 'POST';
|
||||||
|
$url = $serverUrl . "/crm-rest-api/customer";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
// UNKNOWN
|
||||||
|
default:
|
||||||
|
throw new Exception(
|
||||||
|
"Unsupported entity: ".$entity
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// SAVE REQUEST JSON
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
$requestJson = addslashes(
|
||||||
|
json_encode(
|
||||||
|
$body,
|
||||||
|
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// API CALL
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
$response = callErpApi($url, $body, $token, $method);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// RESPONSE JSON
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
$responseJson = addslashes(
|
||||||
|
json_encode(
|
||||||
|
$response,
|
||||||
|
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// SUCCESS
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
if ($response['success']) {
|
||||||
|
|
||||||
|
$qry_success = "
|
||||||
|
UPDATE tbl_erp_outbox
|
||||||
|
SET
|
||||||
|
eo_status = 'SUCCESS',
|
||||||
|
eo_request_json = '{$requestJson}',
|
||||||
|
eo_response_json = '{$responseJson}',
|
||||||
|
eo_last_error = NULL,
|
||||||
|
eo_processed_at = NOW()
|
||||||
|
WHERE eo_id = '{$eo_id}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$jdb->nQuery($qry_success, "success update error");
|
||||||
|
|
||||||
|
echo "[SUCCESS]{$ENT}";
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// FAILED
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
else {
|
||||||
|
|
||||||
|
$errorMsg = addslashes(
|
||||||
|
substr(
|
||||||
|
$response['message'] ?? 'Unknown Error',
|
||||||
|
0,
|
||||||
|
5000
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$qry_fail = "
|
||||||
|
UPDATE tbl_erp_outbox
|
||||||
|
SET
|
||||||
|
eo_status = 'FAILED',
|
||||||
|
eo_retry_count = eo_retry_count + 1,
|
||||||
|
eo_request_json = '{$requestJson}',
|
||||||
|
eo_response_json = '{$responseJson}',
|
||||||
|
eo_last_error = '{$errorMsg}',
|
||||||
|
eo_processed_at = NOW()
|
||||||
|
WHERE eo_id = '{$eo_id}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$jdb->nQuery($qry_fail, "fail update error");
|
||||||
|
|
||||||
|
echo "[FAILED][{$errorMsg}]{$ENT}";
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
$errorMsg = addslashes(
|
||||||
|
substr($e->getMessage(), 0, 5000)
|
||||||
|
);
|
||||||
|
|
||||||
|
$qry_exception = "
|
||||||
|
UPDATE tbl_erp_outbox
|
||||||
|
SET
|
||||||
|
eo_status = 'FAILED',
|
||||||
|
eo_retry_count = eo_retry_count + 1,
|
||||||
|
eo_last_error = '{$errorMsg}',
|
||||||
|
eo_processed_at = NOW()
|
||||||
|
WHERE eo_id = '{$eo_id}'
|
||||||
|
";
|
||||||
|
|
||||||
|
$jdb->nQuery($qry_exception, "exception update error");
|
||||||
|
|
||||||
|
echo "[EXCEPTION][$eo_id][{$errorMsg}]{$ENT}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// END
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$timeStr = "Running Time: ".($time_end - $time_start);
|
||||||
|
|
||||||
|
echo "####[END ERP OUTBOX][$timeStr]####";
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// FUNCTIONS
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function callErpApi($url, $body, $token, $method = 'POST')
|
||||||
|
{
|
||||||
|
$requestJson = json_encode(
|
||||||
|
$body,
|
||||||
|
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
|
||||||
|
);
|
||||||
|
|
||||||
|
$ch = curl_init($url);
|
||||||
|
|
||||||
|
curl_setopt_array($ch, array(
|
||||||
|
CURLOPT_RETURNTRANSFER => true,
|
||||||
|
CURLOPT_CUSTOMREQUEST => $method,
|
||||||
|
CURLOPT_HTTPHEADER => array(
|
||||||
|
"Content-Type: application/json",
|
||||||
|
"Authorization: Bearer ".$token,
|
||||||
|
"Expect:"
|
||||||
|
),
|
||||||
|
CURLOPT_POSTFIELDS => $requestJson,
|
||||||
|
CURLOPT_TIMEOUT => 30,
|
||||||
|
));
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
|
||||||
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
|
||||||
|
$curlError = curl_error($ch);
|
||||||
|
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// CURL ERROR
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
if ($curlError != "") {
|
||||||
|
|
||||||
|
return array(
|
||||||
|
"success" => false,
|
||||||
|
"http_code" => 0,
|
||||||
|
"message" => $curlError,
|
||||||
|
"request" => $body,
|
||||||
|
"response" => null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// SUCCESS
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
if ($httpCode >= 200 && $httpCode < 300) {
|
||||||
|
|
||||||
|
return array(
|
||||||
|
"success" => true,
|
||||||
|
"http_code" => $httpCode,
|
||||||
|
"message" => "SUCCESS",
|
||||||
|
"request" => $body,
|
||||||
|
"response" => json_decode($result, true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
// FAIL
|
||||||
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
return array(
|
||||||
|
"success" => false,
|
||||||
|
"http_code" => $httpCode,
|
||||||
|
"message" => $result,
|
||||||
|
"request" => $body,
|
||||||
|
"response" => json_decode($result, true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -2,30 +2,7 @@
|
||||||
|
|
||||||
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
include getenv("DOCUMENT_ROOT")."/include/session_include.php";
|
||||||
include_once getenv("DOCUMENT_ROOT")."/lib/erp_api.php";
|
include_once getenv("DOCUMENT_ROOT")."/lib/erp_api.php";
|
||||||
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
//$func->checkAdmin("index.php");
|
|
||||||
|
|
||||||
//echo "[$mode]";exit();
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
for($i=0; $i<sizeof($_POST); $i++) {
|
|
||||||
list($key, $value) = each($_POST);
|
|
||||||
$$key = $value;
|
|
||||||
|
|
||||||
if(is_array($value))
|
|
||||||
{
|
|
||||||
$count = 10;
|
|
||||||
for($i = 0; $i < $count; $i ++) {
|
|
||||||
if ($value[$i]) echo "ARRAY[$key][$value[$i]]<br>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else echo "[$key][$value]<br>";
|
|
||||||
//print_r($_POST);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit;
|
|
||||||
*/
|
|
||||||
|
|
||||||
if($c_uid == "") {
|
if($c_uid == "") {
|
||||||
echo 0;
|
echo 0;
|
||||||
|
|
@ -37,50 +14,48 @@ if ($_SESSION['ss_LEVEL'] == 10) {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
$c_comment_riSTR = str_replace("\\","",trim($c_comment_ri));
|
$c_comment_riSTR = str_replace("\\","",trim($c_comment_ri));
|
||||||
$c_locationSTR = str_replace("\\","",trim($c_location));
|
$c_locationSTR = str_replace("\\","",trim($c_location));
|
||||||
|
|
||||||
|
// ====================
|
||||||
$qry_customer = "UPDATE tbl_customer
|
// CUSTOMER PATCH
|
||||||
SET
|
// ====================
|
||||||
c_comment_ri = '".addslashes($c_comment_riSTR)."',
|
$svc = new CustomerService();
|
||||||
c_location = '".addslashes($c_locationSTR)."',
|
$result = $svc->patchCustomer(
|
||||||
c_is_transfer = 'N'
|
(int)$c_uid,
|
||||||
WHERE c_uid = '$c_uid' ";
|
[
|
||||||
|
'c_comment_ri' => $c_comment_riSTR,
|
||||||
//echo "[$qry_customer]<br>";
|
'c_location' => $c_locationSTR,
|
||||||
|
'c_updatedby' => $_SESSION['ss_UID']
|
||||||
$jdb->nQuery($qry_customer, "update error");
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// ====================
|
// ====================
|
||||||
// Integration to ERP
|
// LOG
|
||||||
// ====================
|
// ====================
|
||||||
$erp = new ErpApi();
|
$logText = json_encode([
|
||||||
|
'c_comment_ri' => $c_comment_riSTR,
|
||||||
|
'c_location' => $c_locationSTR
|
||||||
|
], JSON_UNESCAPED_UNICODE);
|
||||||
|
|
||||||
try {
|
addLog(
|
||||||
$columns = array();
|
"add",
|
||||||
$values = array();
|
"SHORT INFO",
|
||||||
$columns[] = "c_accountno";
|
"UPDATE",
|
||||||
$columns[] = "c_comment_ri";
|
$_SESSION['ss_UID'],
|
||||||
$columns[] = "c_location";
|
$logText,
|
||||||
$values[] = $c_accountno;
|
$c_uid
|
||||||
$values[] = addslashes($c_comment_riSTR);
|
);
|
||||||
$values[] = addslashes($c_locationSTR);
|
|
||||||
$lguserid = $_SESSION['ss_UID'];
|
|
||||||
$erp->updateCustomerFromMis($columns, $values, $lguserid);
|
|
||||||
|
|
||||||
// 성공 시 c_is_transfer='Y'
|
|
||||||
$jdb->uQuery("tbl_customer", ["c_is_transfer"], ["Y"], " WHERE c_uid = ".(int)$_POST['id']);
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// 여기서는 아무것도 안함.
|
|
||||||
}
|
|
||||||
|
|
||||||
addLog ("add", "SHORT INFO", "UPDATE", $lguserid, $qry_customer, $c_uid);
|
|
||||||
|
|
||||||
echo 1;
|
echo 1;
|
||||||
exit();
|
exit();
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
error_log($e->getMessage());
|
||||||
|
|
||||||
|
echo 0;
|
||||||
|
exit();
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
@ -6,6 +6,7 @@ include_once getenv("DOCUMENT_ROOT") . "/lib/erp_api.php";
|
||||||
require_once getenv("DOCUMENT_ROOT")."/assets/conf.inc.php";
|
require_once getenv("DOCUMENT_ROOT")."/assets/conf.inc.php";
|
||||||
require_once getenv("DOCUMENT_ROOT")."/assets/dbCon.php";
|
require_once getenv("DOCUMENT_ROOT")."/assets/dbCon.php";
|
||||||
include_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/daily.php";
|
||||||
|
include_once getenv("DOCUMENT_ROOT")."/assets/api/customer.php";
|
||||||
$dailyApi = new DailyService();
|
$dailyApi = new DailyService();
|
||||||
|
|
||||||
if ($goStr == "") $goStr = "switched=$switched&page=$page&key_word=$key_word&column=$column&sorting_type=$sorting_type&switch=$switch";
|
if ($goStr == "") $goStr = "switched=$switched&page=$page&key_word=$key_word&column=$column&sorting_type=$sorting_type&switch=$switch";
|
||||||
|
|
@ -55,6 +56,7 @@ if ($actionStr == "PICKUPORDERCUSTOMER") {
|
||||||
'd_payeename' => $d_payeename,
|
'd_payeename' => $d_payeename,
|
||||||
'd_note' => str_replace("\\", "", trim($d_note)),
|
'd_note' => str_replace("\\", "", trim($d_note)),
|
||||||
'd_createruid' => $_SESSION['ss_UID'],
|
'd_createruid' => $_SESSION['ss_UID'],
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_inputdate' => date("YmdHis"),
|
'd_inputdate' => date("YmdHis"),
|
||||||
'd_jobtype' => $d_jobtype ?? 'UCO',
|
'd_jobtype' => $d_jobtype ?? 'UCO',
|
||||||
];
|
];
|
||||||
|
|
@ -95,6 +97,7 @@ if ($actionStr == "PICKUPORDERCUSTOMER") {
|
||||||
'd_accountno' => $cus['c_accountno'],
|
'd_accountno' => $cus['c_accountno'],
|
||||||
'd_payeesign' => $filename,
|
'd_payeesign' => $filename,
|
||||||
'd_jobtype' => $d_jobtype ?? 'UCO',
|
'd_jobtype' => $d_jobtype ?? 'UCO',
|
||||||
|
'd_updateruid'=> $_SESSION['ss_UID'] ?? '',
|
||||||
], [
|
], [
|
||||||
'match_uid' => $d_uid,
|
'match_uid' => $d_uid,
|
||||||
'allow_update' => true
|
'allow_update' => true
|
||||||
|
|
@ -209,6 +212,7 @@ if ($actionStr == "ORDEROIL" && $mode == "insert") {
|
||||||
'd_ordertype' => $valueSTR[0],
|
'd_ordertype' => $valueSTR[0],
|
||||||
'd_ruid' => $valueSTR[2],
|
'd_ruid' => $valueSTR[2],
|
||||||
'd_createruid' => $_SESSION['ss_UID'],
|
'd_createruid' => $_SESSION['ss_UID'],
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_createddate' => date("YmdHis"),
|
'd_createddate' => date("YmdHis"),
|
||||||
'd_status' => 'A',
|
'd_status' => 'A',
|
||||||
'd_jobtype' => 'UCO'
|
'd_jobtype' => 'UCO'
|
||||||
|
|
@ -235,49 +239,6 @@ if ($actionStr == "ORDEROIL" && $mode == "insert") {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
|
||||||
// DELETE CUSTOMER INFO (c_status 만 D 로 변경)
|
|
||||||
//////////////////////////////////////////////
|
|
||||||
|
|
||||||
if ($actionStr == "CUSTOMERINFO" && $mode == "delete") {
|
|
||||||
|
|
||||||
// Delete 기능 제한 (Admin : 1, Manager : 3, Staff : 5 만 가능)
|
|
||||||
$permit = array("1", "3", "5");
|
|
||||||
if (in_array($_SESSION['ss_LEVEL'], $permit)) {
|
|
||||||
$setTag = "";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$msg = "Sorry, You don't have permission. Please contact Administrator.";
|
|
||||||
$func -> modalMsg ($msg, "");
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
if($c_uid == "") {
|
|
||||||
$msg = "Invalid data. Please try again.";
|
|
||||||
$func -> modalMsg ($msg, "");
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
$qry_delete = "UPDATE tbl_customer SET c_status='D' WHERE c_uid = '$c_uid' ";
|
|
||||||
|
|
||||||
$jdb->nQuery($qry_delete, "delete error");
|
|
||||||
$jdb->CLOSE();
|
|
||||||
|
|
||||||
addLog ("add", "CUSTOMER DELETE", "DELETE", $lguserid, $qry_delete, $c_uid);
|
|
||||||
|
|
||||||
// ====================
|
|
||||||
// Integration to ERP
|
|
||||||
// ====================
|
|
||||||
// 화면에서 기능이 없음
|
|
||||||
|
|
||||||
$msg = "Deleted successfully.";
|
|
||||||
$urlSTR = "/index_intranet.php?view=customer_list&$goStr";
|
|
||||||
//$func -> alertBack($msg);
|
|
||||||
$func -> modalMsg ($msg, $urlSTR);
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// DELETE MEMBER INFO (m_status 만 D 로 변경)
|
// DELETE MEMBER INFO (m_status 만 D 로 변경)
|
||||||
|
|
@ -829,6 +790,7 @@ if ($actionStr == "ADDREQUEST" && $mode == "create") {
|
||||||
'd_ruid' => $r_uidMAX,
|
'd_ruid' => $r_uidMAX,
|
||||||
'd_druid' => $r_druid,
|
'd_druid' => $r_druid,
|
||||||
'd_createruid' => $_SESSION['ss_UID'],
|
'd_createruid' => $_SESSION['ss_UID'],
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
'd_createddate' => date("YmdHis"),
|
'd_createddate' => date("YmdHis"),
|
||||||
'd_status' => 'A',
|
'd_status' => 'A',
|
||||||
'd_jobtype' => 'UCO'
|
'd_jobtype' => 'UCO'
|
||||||
|
|
@ -1103,25 +1065,29 @@ if ($actionStr == "USERHISFAV" && $mode == "delete") {
|
||||||
|
|
||||||
if ($actionStr == "SIGNATURE") {
|
if ($actionStr == "SIGNATURE") {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
if ($customeruid == "" || $orderdate == "") {
|
if ($customeruid == "" || $orderdate == "") {
|
||||||
$msg = "Invalid data. Please try again.";
|
throw new Exception("Invalid data. Please try again.");
|
||||||
$func -> modalMsg ($msg, "");
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signiture
|
// SIGNATURE CHECK
|
||||||
if ($signednew == 1) $putSignFlag = 1;
|
if ($signednew == 1) {
|
||||||
else {
|
$putSignFlag = 1;
|
||||||
if ($d_payeesign == "" && $_POST['signed'] != "") $putSignFlag = 1;
|
} else {
|
||||||
else $putSignFlag = 0;
|
if ($d_payeesign == "" && $_POST['signed'] != "") {
|
||||||
|
$putSignFlag = 1;
|
||||||
|
} else {
|
||||||
|
$putSignFlag = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//echo "[$signednew][$putSignFlag]";
|
// SAVE SIGNATURE FILE
|
||||||
|
|
||||||
if ($putSignFlag == 1) {
|
if ($putSignFlag == 1) {
|
||||||
|
|
||||||
$folderPath = getenv("DOCUMENT_ROOT")."/upload_sign/".$customeruid;
|
$folderPath = getenv("DOCUMENT_ROOT")."/upload_sign/".$customeruid;
|
||||||
if (!is_dir($folderPath)) mkdir($folderPath, 0755, true);
|
if (!is_dir($folderPath)) {
|
||||||
|
mkdir($folderPath, 0755, true);
|
||||||
|
}
|
||||||
|
|
||||||
$image_parts = explode(";base64,", $_POST['signed']);
|
$image_parts = explode(";base64,", $_POST['signed']);
|
||||||
$image_type_aux = explode("image/", $image_parts[0]);
|
$image_type_aux = explode("image/", $image_parts[0]);
|
||||||
|
|
@ -1129,59 +1095,52 @@ if ($actionStr == "SIGNATURE") {
|
||||||
$image_base64 = base64_decode($image_parts[1]);
|
$image_base64 = base64_decode($image_parts[1]);
|
||||||
$uniquevalue = uniqid();
|
$uniquevalue = uniqid();
|
||||||
|
|
||||||
|
// DAILY EXISTS
|
||||||
$qry_cnt = "SELECT COUNT(*) FROM tbl_daily WHERE d_uid = '".$uid."'";
|
$qry_cnt = "SELECT COUNT(*) FROM tbl_daily WHERE d_uid = '".$uid."'";
|
||||||
$total_count = $jdb->rQuery($qry_cnt, "record query error");
|
$total_count = $jdb->rQuery($qry_cnt, "record query error");
|
||||||
|
|
||||||
if ($total_count > 0) {
|
if ($total_count > 0) {
|
||||||
$file = $folderPath ."/". $orderdate. "_". $uniquevalue . '.'.$image_type;
|
$filename = $orderdate . "_" . $uniquevalue . "." . $image_type;
|
||||||
$d_payeesignSTR = $orderdate. "_". $uniquevalue . '.'.$image_type;
|
} else {
|
||||||
$qry_customer = "UPDATE tbl_daily
|
$filename = "T_" . $orderdate . "_" . $uniquevalue . "." . $image_type;
|
||||||
SET d_payeesign='$d_payeesignSTR', d_is_transfer='N'
|
|
||||||
WHERE d_uid = '$uid'";
|
|
||||||
|
|
||||||
$jdb->nQuery($qry_customer, "update error");
|
|
||||||
|
|
||||||
// ====================
|
|
||||||
// Integration to ERP
|
|
||||||
// ====================
|
|
||||||
$columns = array();
|
|
||||||
$values = array();
|
|
||||||
$columns[] = "d_accountno";
|
|
||||||
$columns[] = "d_orderdate";
|
|
||||||
$columns[] = "d_payeesign";
|
|
||||||
|
|
||||||
$values[] = $customerno;
|
|
||||||
$values[] = $orderdate;
|
|
||||||
$values[] = $d_payeesignSTR;
|
|
||||||
|
|
||||||
$erp = new ErpApi();
|
|
||||||
|
|
||||||
try {
|
|
||||||
// ERP로 전송 (payload 내부에서 자동 매핑)
|
|
||||||
$erp->updateDailyOrderFromMis($columns, $values, $lguserid);
|
|
||||||
|
|
||||||
// 성공 시 플래그 & 로그
|
|
||||||
$jdb->uQuery("tbl_daily", ["d_is_transfer"], ["Y"], " WHERE d_uid = '$d_uid'");
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// 여기서는 아무것도 안함
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$file = $folderPath ."/". "T_". $orderdate. "_". $uniquevalue . '.'.$image_type;
|
|
||||||
$d_payeesignSTR = "T_".$orderdate. "_". $uniquevalue . '.'.$image_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$file = $folderPath . "/" . $filename;
|
||||||
file_put_contents($file, $image_base64);
|
file_put_contents($file, $image_base64);
|
||||||
|
|
||||||
|
// SAVE DAILY
|
||||||
|
if ($total_count > 0) {
|
||||||
|
$dailyApi = new DailyService();
|
||||||
|
$payload = [
|
||||||
|
'd_orderdate' => $orderdate,
|
||||||
|
'd_accountno' => $customerno,
|
||||||
|
'd_payeesign' => $filename,
|
||||||
|
'd_updateruid' => $_SESSION['ss_UID'] ?? '',
|
||||||
|
];
|
||||||
|
|
||||||
|
$dailyApi->saveDaily(
|
||||||
|
$payload,
|
||||||
|
[
|
||||||
|
'match_uid' => $uid,
|
||||||
|
'allow_update' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DONE
|
||||||
$msg = "Saved successfully.";
|
$msg = "Saved successfully.";
|
||||||
//$func -> modalMsg ($msg, "");
|
|
||||||
echo "
|
echo "
|
||||||
<script language=javascript>
|
<script>
|
||||||
alert(\"".$msg."\");
|
alert('".$msg."');
|
||||||
window.close();
|
window.close();
|
||||||
</script>";
|
</script>";
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
$func->modalMsg($e->getMessage(), "");
|
||||||
|
}
|
||||||
|
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue