Compare commits
32 Commits
2030ca0836
...
b51f2fddcf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b51f2fddcf | ||
| 2f5b1a7da6 | |||
| 20e6398005 | |||
| 1de224627e | |||
| 9b9e752bd1 | |||
| 1cb1e6837b | |||
| b5e06188b1 | |||
| c375d84874 | |||
| 1d6dc49971 | |||
| dbe85efcef | |||
| 253a5de579 | |||
| 52213c3ad4 | |||
| 87dd69d703 | |||
| e394acd7cc | |||
| 7c48d1134f | |||
| 0d1c6855e5 | |||
| 43d45332ef | |||
| 55e1cdf82a | |||
| 3dc24d011a | |||
| 5ae247fe91 | |||
| 9a3a8ed4e3 | |||
| 1993013193 | |||
| 9f511b4dba | |||
| 522b89fb9f | |||
| cac86ffc7a | |||
| 112923c459 | |||
| 1761e31587 | |||
| 0114faae2b | |||
| f17dc88f99 | |||
| 32b869f05b | |||
| 69bcf05457 | |||
| b9a77a1d00 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -172,3 +172,7 @@ _modules/*
|
|||||||
/node_modules/
|
/node_modules/
|
||||||
.env
|
.env
|
||||||
**/logs/
|
**/logs/
|
||||||
|
|
||||||
|
|
||||||
|
# 6. 기타 개인 설정 파일 (선택적)
|
||||||
|
.github/copilot-instructions.md
|
||||||
@@ -15,10 +15,14 @@ class NaverWorker extends BaseCommand
|
|||||||
protected $name = 'naver:worker';
|
protected $name = 'naver:worker';
|
||||||
protected $description = 'Redis에서 데이터를 꺼내 DB에 저장하고 네이버 API를 호출합니다.';
|
protected $description = 'Redis에서 데이터를 꺼내 DB에 저장하고 네이버 API를 호출합니다.';
|
||||||
|
|
||||||
|
// DB 객체를 담을 변수 선언
|
||||||
|
protected $db;
|
||||||
|
|
||||||
public function run(array $params)
|
public function run(array $params)
|
||||||
{
|
{
|
||||||
helper('log'); // 여기서 로드 완료!
|
helper('log'); // 여기서 로드 완료!
|
||||||
|
|
||||||
|
$this->db = \Config\Database::connect();
|
||||||
$logModel = model(NaverWorkerLogModel::class);
|
$logModel = model(NaverWorkerLogModel::class);
|
||||||
$naverService = new \App\Services\NaverService(); // 서비스 생성
|
$naverService = new \App\Services\NaverService(); // 서비스 생성
|
||||||
|
|
||||||
@@ -35,6 +39,17 @@ class NaverWorker extends BaseCommand
|
|||||||
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
||||||
|
// 1. DB 연결 상태 체크 (더 견고하게)
|
||||||
|
try {
|
||||||
|
if ($this->db->connID === false || !@$this->db->connID->ping()) {
|
||||||
|
$this->db->reconnect();
|
||||||
|
CLI::write(CLI::color('🔄 Database reconnected.', 'yellow'));
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$this->db->reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
$result = $redis->brPop(['naver:raw_queue'], 30);
|
$result = $redis->brPop(['naver:raw_queue'], 30);
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@@ -81,6 +96,9 @@ class NaverWorker extends BaseCommand
|
|||||||
$redis->lPush('naver:failed_queue', $rawData);
|
$redis->lPush('naver:failed_queue', $rawData);
|
||||||
helper('log');
|
helper('log');
|
||||||
write_custom_log("FAILED_DATA | Error: " . $e->getMessage(), 'ERROR', 'failed');
|
write_custom_log("FAILED_DATA | Error: " . $e->getMessage(), 'ERROR', 'failed');
|
||||||
|
|
||||||
|
// 루프 과부하 방지 (연속 에러 시)
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ namespace App\Models\Entities;
|
|||||||
|
|
||||||
use CodeIgniter\Model;
|
use CodeIgniter\Model;
|
||||||
|
|
||||||
class V2ArticleInfoModel extends Model
|
class V2articleinfoModel extends Model
|
||||||
{
|
{
|
||||||
protected $table = 'v2_article_info';
|
protected $table = 'v2_article_info';
|
||||||
protected $primaryKey = 'vr_sq';
|
protected $primaryKey = 'vr_sq';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ namespace App\Models\Entities;
|
|||||||
|
|
||||||
use CodeIgniter\Model;
|
use CodeIgniter\Model;
|
||||||
|
|
||||||
class V2ArticleInfoEtcModel extends Model
|
class V2articleinfoetcModel extends Model
|
||||||
{
|
{
|
||||||
protected $table = 'v2_article_info_etc';
|
protected $table = 'v2_article_info_etc';
|
||||||
protected $primaryKey = 'vr_sq';
|
protected $primaryKey = 'vr_sq';
|
||||||
|
|||||||
@@ -6,9 +6,45 @@ class VrfcReqModel extends Model {
|
|||||||
// Model implementation here
|
// Model implementation here
|
||||||
protected $table = 'v2_vrfc_req';
|
protected $table = 'v2_vrfc_req';
|
||||||
protected $primaryKey = 'vr_sq';
|
protected $primaryKey = 'vr_sq';
|
||||||
|
|
||||||
// 기본값 (명시 안 해도 됨)
|
|
||||||
protected $useAutoIncrement = true;
|
protected $useAutoIncrement = true;
|
||||||
|
protected $returnType = 'array';
|
||||||
|
|
||||||
|
protected $allowedFields = [
|
||||||
|
'reqSeq',
|
||||||
|
'atcl_no',
|
||||||
|
'step',
|
||||||
|
'cpid',
|
||||||
|
'cp_atcl_id',
|
||||||
|
'trade_type',
|
||||||
|
'realtor_nm',
|
||||||
|
'realtor_tel_no',
|
||||||
|
'seller_tel_no',
|
||||||
|
'vrfc_type',
|
||||||
|
'rgbk_confirm',
|
||||||
|
'req_type',
|
||||||
|
'rdate',
|
||||||
|
'cpTelNo',
|
||||||
|
'stat_cd',
|
||||||
|
'try_cnt',
|
||||||
|
'insert_user',
|
||||||
|
'insert_tm',
|
||||||
|
'memo',
|
||||||
|
'contact_fail_cnt',
|
||||||
|
'sync_yn',
|
||||||
|
'reg_try_cnt',
|
||||||
|
'tel_fail_cause',
|
||||||
|
'rgbk_confirm_owner_nm',
|
||||||
|
'direct_trad_yn',
|
||||||
|
'confirm_doc_img_url',
|
||||||
|
'confirm_doc_owner_check_yn',
|
||||||
|
'owner_verifiable',
|
||||||
|
'vrfc_cmpl_type',
|
||||||
|
'rgbk_doc_img_url',
|
||||||
|
'certRegister',
|
||||||
|
'referenceFileUrl'
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// public function insertV2Article(array $articleInfo): bool
|
// public function insertV2Article(array $articleInfo): bool
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ namespace App\Services;
|
|||||||
use CodeIgniter\CLI\CLI;
|
use CodeIgniter\CLI\CLI;
|
||||||
use App\Libraries\NaverApiClient;
|
use App\Libraries\NaverApiClient;
|
||||||
use App\Models\Entities\VrfcReqModel;
|
use App\Models\Entities\VrfcReqModel;
|
||||||
|
use App\Models\Entities\V2articleinfoModel;
|
||||||
|
use App\Models\Entities\V2articleinfoetcModel;
|
||||||
use App\Models\Entities\V2stdailyModel;
|
use App\Models\Entities\V2stdailyModel;
|
||||||
use App\Models\Entities\NaverRawStagingModel;
|
use App\Models\Entities\NaverRawStagingModel;
|
||||||
use App\Models\Entities\ReceiptModel;
|
use App\Models\Entities\ReceiptModel;
|
||||||
@@ -15,24 +17,43 @@ use Exception;
|
|||||||
class NaverService
|
class NaverService
|
||||||
{
|
{
|
||||||
protected $db;
|
protected $db;
|
||||||
protected $naverClient, $VrfcReqModel, $V2stdailyModel, $statusService, $rawStagingModel, $receiptModel, $resultModel;
|
protected $naverClient;
|
||||||
|
protected $VrfcReqModel;
|
||||||
|
protected $V2stdailyModel;
|
||||||
|
protected $statusService;
|
||||||
|
protected $rawStagingModel;
|
||||||
|
protected $receiptModel;
|
||||||
|
protected $resultModel;
|
||||||
|
protected $articleModel;
|
||||||
|
protected $articleEtcModel;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->db = \Config\Database::connect();
|
$this->db = \Config\Database::connect();
|
||||||
|
|
||||||
$this->naverClient = new NaverApiClient();
|
|
||||||
$this->VrfcReqModel = model(VrfcReqModel::class);
|
|
||||||
$this->V2stdailyModel = model(V2stdailyModel::class);
|
|
||||||
$this->rawStagingModel = model(NaverRawStagingModel::class);
|
|
||||||
|
|
||||||
$this->receiptModel = model(ReceiptModel::class);
|
|
||||||
$this->resultModel = model(ResultModel::class);
|
|
||||||
$this->statusService = new StatusService(); // 인스턴스 생성
|
|
||||||
|
|
||||||
helper('log');
|
helper('log');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 모델/서비스 지연 로딩 (Null 에러 방지 핵심)
|
||||||
|
*/
|
||||||
|
private function getStatusService() {
|
||||||
|
return $this->statusService ??= new StatusService();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getModel($property, $class) {
|
||||||
|
return $this->$property ??= new $class();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* NaverApiClient 지연 로딩
|
||||||
|
*/
|
||||||
|
private function getNaverClient()
|
||||||
|
{
|
||||||
|
if ($this->naverClient === null) {
|
||||||
|
$this->naverClient = new \App\Libraries\NaverApiClient();
|
||||||
|
}
|
||||||
|
return $this->naverClient;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 메인 프로세스: 요청 타입에 따른 분기 처리
|
* 메인 프로세스: 요청 타입에 따른 분기 처리
|
||||||
*/
|
*/
|
||||||
@@ -41,8 +62,9 @@ class NaverService
|
|||||||
$articleNumber = $payload['articleNumber'];
|
$articleNumber = $payload['articleNumber'];
|
||||||
$requestType = $payload['requestType'] ?? '';
|
$requestType = $payload['requestType'] ?? '';
|
||||||
|
|
||||||
|
CLI::write(CLI::color('🟢 getArticleInfo Start :: ' . $articleNumber , 'green'));
|
||||||
// 1. 네이버 API 호출
|
// 1. 네이버 API 호출
|
||||||
$response = $this->naverClient->getArticleInfo($articleNumber);
|
$response = $this->getNaverClient()->getArticleInfo($articleNumber);
|
||||||
if (!$response || $response['code'] !== 'success') {
|
if (!$response || $response['code'] !== 'success') {
|
||||||
throw new \Exception("네이버 API 응답 에러: $articleNumber");
|
throw new \Exception("네이버 API 응답 에러: $articleNumber");
|
||||||
}
|
}
|
||||||
@@ -50,14 +72,16 @@ class NaverService
|
|||||||
$rawData = $response['data'];
|
$rawData = $response['data'];
|
||||||
$vType = $rawData['verificationTypeCode'] ?? '';
|
$vType = $rawData['verificationTypeCode'] ?? '';
|
||||||
|
|
||||||
// 2. [Staging] 원본 DB 저장 (JSON 타입 컬럼 활용)
|
// [Staging] 원본 저장
|
||||||
$this->rawStagingModel->insert([
|
$this->getModel('rawStagingModel', NaverRawStagingModel::class)->insert([
|
||||||
'atcl_no' => $articleNumber,
|
'atcl_no' => $articleNumber,
|
||||||
'verification_type' => $vType,
|
'verification_type' => $vType,
|
||||||
'request_type' => $requestType,
|
'request_type' => $requestType,
|
||||||
'raw_json' => $rawData // 모델에서 json_encode 처리됨
|
'raw_json' => $rawData
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
CLI::write(CLI::color('🟢 임시테이블 :: ' . $this->rawStagingModel->getLastQuery() , 'green'));
|
||||||
|
|
||||||
// 3. 타입별 분기 처리
|
// 3. 타입별 분기 처리
|
||||||
if ($vType === 'S') {
|
if ($vType === 'S') {
|
||||||
// [Type S] 현장확인 응답 처리 (A01 등)
|
// [Type S] 현장확인 응답 처리 (A01 등)
|
||||||
@@ -248,293 +272,347 @@ class NaverService
|
|||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function processTypeV2($articleNumber, $rawData, $payload){
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [Type V2] 일반/서류/비공동주택 처리 로직
|
||||||
|
*/
|
||||||
|
private function processTypeV2($articleNumber, $rawData, $payload)
|
||||||
|
{
|
||||||
|
CLI::write(CLI::color('🟢 V2_VRFC_REQ :: START ' , 'green'));
|
||||||
|
$vrfcParam = $this->v2Parameter($articleNumber, $rawData, $payload);
|
||||||
|
$articleInfoParam = $this->articleInfoParameter($articleNumber, $rawData, $payload);
|
||||||
|
$articleInfoEtcParam = $this->articleInfoEtcParameter($articleNumber, $rawData, $payload);
|
||||||
|
try {
|
||||||
|
|
||||||
|
switch ($payload['requestType']){
|
||||||
|
case "REG":
|
||||||
|
|
||||||
|
$vr_sq = $this->insertVrfcReq($vrfcParam);
|
||||||
|
$articleInfoParam['vr_sq'] = $vr_sq;
|
||||||
|
write_custom_log("articleInfoParam :: " . json_encode($articleInfoParam, JSON_UNESCAPED_UNICODE) , "INFO", "SERVICE");
|
||||||
|
if (!$this->getModel('articleModel', V2articleinfoModel::class)->insert($articleInfoParam)) {
|
||||||
|
throw new \Exception("ArticleInfo Insert 실패: " . json_encode($this->db->error()));
|
||||||
|
}
|
||||||
|
|
||||||
|
$articleInfoEtcParam['vr_sq'] = $vr_sq;
|
||||||
|
if (!$this->getModel('articleEtcModel', V2articleinfoetcModel::class)->insert($articleInfoEtcParam)) {
|
||||||
|
throw new \Exception("ArticleInfoEtc Insert 실패");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "MOD":
|
||||||
|
break;
|
||||||
|
case "CNC":
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
write_custom_log("CRITICAL_ERROR :: " . $e->getMessage(), "ERROR", "SERVICE");
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [REG] 신규 등록
|
* [REG] 신규 등록
|
||||||
*/
|
*/
|
||||||
private function insertVrfcReq($articleNumber, $params)
|
private function insertVrfcReq($vrfcParam)
|
||||||
{
|
{
|
||||||
CLI::write(CLI::color('🟢 매물 정보 시작', 'green'));
|
CLI::write(CLI::color('🟢 매물 정보 시작', 'green'));
|
||||||
$existing = $this->VrfcReqModel->where('atcl_no', $articleNumber)->first();
|
$model = $this->getModel('VrfcReqModel', VrfcReqModel::class);
|
||||||
if ($existing) throw new \Exception("중복 등록 시도: $articleNumber");
|
$existing = $model->where('atcl_no', $vrfcParam['atcl_no'])->first();
|
||||||
|
if ($existing) throw new \Exception("중복 등록 시도: " . $vrfcParam['atcl_no']);
|
||||||
|
|
||||||
$params['stat_cd'] = '10';
|
if (!$model->insert($vrfcParam)) {
|
||||||
$params['insert_user'] = '0';
|
$dbError = $this->db->error();
|
||||||
$params['req_type'] = 'C';
|
$lastQuery = (string)$model->getLastQuery();
|
||||||
|
|
||||||
if (!$this->VrfcReqModel->insert($params)) {
|
// 🚨 에러 발생 시 상세 정보 출력
|
||||||
$sql = (string)$this->VrfcReqModel->getLastQuery();
|
CLI::write(CLI::color('❌ SQL INSERT ERROR', 'red', 'bold'));
|
||||||
write_custom_log("INSERT_FAILED | Atcl: $articleNumber | SQL: $sql", 'ERROR', 'failed');
|
CLI::write(CLI::color('메시지: ', 'white') . $dbError['message']);
|
||||||
throw new \Exception("신규 등록 실패");
|
CLI::write(CLI::color('쿼리 실행: ', 'white') . (string)$model->getLastQuery());
|
||||||
|
|
||||||
|
// 입력하려던 데이터 덤프 (디버깅용)
|
||||||
|
CLI::write(CLI::color('입력 데이터:', 'yellow'));
|
||||||
|
print_r($vrfcParam);
|
||||||
|
|
||||||
|
|
||||||
|
throw new \Exception("신규 등록 실패: " . $dbError['message']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$vr_sq = $this->VrfcReqModel->getInsertID();
|
$vr_sq = $model->getInsertID();
|
||||||
$this->statusService->recordStatusAndHistory($vr_sq, '10', 'C9', "신규접수 : 10");
|
CLI::write(CLI::color("✅ Insert 성공 (vr_sq: $vr_sq)", 'blue'));
|
||||||
|
// 🟢 여기서 Null 에러 방지 (getStatusService 사용)
|
||||||
|
$this->getStatusService()->recordStatusAndHistory($vr_sq, '10', 'C9', "NEW 신규접수 : 10");
|
||||||
|
|
||||||
return $vr_sq;
|
return $vr_sq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* [MOD] 수정 처리
|
|
||||||
*/
|
|
||||||
private function updateVrfcReq($articleNumber, $params)
|
|
||||||
{
|
|
||||||
|
|
||||||
// 1. 데이터 존재 여부 확인
|
private function v2Parameter($articleNumber, $rawData , $payload){
|
||||||
$existing = $this->VrfcReqModel->where('atcl_no', $articleNumber)->first();
|
$now = db_now();
|
||||||
|
$step = isset($rawData['step']) ? $rawData['step'] : '00';
|
||||||
|
$rdate = $payload['requestDate'] ?? db_now('YmdHis');
|
||||||
|
$insert_user = 0;
|
||||||
|
$stat_cd = '10';
|
||||||
|
$sync_yn = 'N';
|
||||||
|
$insert_tm = $now;
|
||||||
|
$reg_type = function($payload) {
|
||||||
|
switch ($payload['requestType'] ?? '') {
|
||||||
|
case 'REG': return 'C';
|
||||||
|
case 'MOD': return 'U';
|
||||||
|
case 'CNC': return 'D';
|
||||||
|
default: return '0';
|
||||||
|
}
|
||||||
|
};($payload);
|
||||||
|
|
||||||
if (!$existing) {
|
$files = $rawData['files'] ?? [];
|
||||||
// [A] 데이터가 없으면 먼저 신규 등록(10) 실행
|
|
||||||
write_custom_log("MOD_NOT_FOUND | Atcl: $articleNumber | First, Insert new data.", 'INFO', 'service');
|
|
||||||
|
|
||||||
$vr_sq = $this->insertVrfcReq($articleNumber, $params);
|
|
||||||
|
|
||||||
// 새로 등록된 정보를 다시 가져옴 (updateProcess를 태우기 위해)
|
|
||||||
$existing = $this->VrfcReqModel->find($vr_sq);
|
|
||||||
|
|
||||||
// 통계 기록 (신규 등록 건으로 카운트)
|
|
||||||
$this->V2stdailyModel->set_v2_st_daily(null, $params['cpid'], $params['vrfc_type'] . '0103', '1', 'add');
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['stat_cd'] = '30';
|
|
||||||
$params['req_type'] = 'U';
|
|
||||||
$params['insert_tm'] = db_now();
|
|
||||||
|
|
||||||
return $this->updateProcess($existing, $params, 'MOD', "재접수 상태변경: {$existing['stat_cd']} => 30");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* [CNC] 취소 처리
|
|
||||||
*/
|
|
||||||
private function deleteVrfcReq($articleNumber, $params)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$existing = $this->findExisting($articleNumber);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
// 취소(CNC)하려는데 데이터가 없으면 이미 지워졌거나 오류일 수 있습니다.
|
|
||||||
// 여기서는 로그만 남기고 종료하거나, 필요 시 Exception을 던집니다.
|
|
||||||
throw new \Exception("CNC_NOT_FOUND | Atcl: $articleNumber WARNING service");
|
|
||||||
}
|
|
||||||
$params['stat_cd'] = '19';
|
|
||||||
$params['req_type'] = 'D';
|
|
||||||
|
|
||||||
return $this->updateProcess($existing, $params, 'CNC', "취소 처리: {$existing['stat_cd']} => 19");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* [FIN] 완료 처리
|
|
||||||
*/
|
|
||||||
private function finVrfcReq($articleNumber, $params)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$existing = $this->findExisting($articleNumber);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
// 완료(FIN)하려는데 데이터가 없으면 이미 지워졌거나 오류일 수 있습니다.
|
|
||||||
// 여기서는 로그만 남기고 종료하거나, 필요 시 Exception을 던집니다.
|
|
||||||
throw new \Exception("FIN_NOT_FOUND | Atcl: $articleNumber WARNING service");
|
|
||||||
}
|
|
||||||
$params['stat_cd'] = '60';
|
|
||||||
$params['req_type'] = 'F';
|
|
||||||
|
|
||||||
return $this->updateProcess($existing, $params, 'FIN', "완료 처리: {$existing['stat_cd']} => 60");
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- 내부 공통 유틸리티 함수 ---
|
|
||||||
|
|
||||||
private function findExisting($articleNumber) {
|
|
||||||
$existing = $this->VrfcReqModel->where('atcl_no', $articleNumber)->first();
|
|
||||||
if (!$existing) throw new \Exception("해당 매물 없음: $articleNumber 재등록 필요");
|
|
||||||
return $existing;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 공통 업데이트 및 이력 기록 로직 (Lock 최소화)
|
|
||||||
*/
|
|
||||||
private function updateProcess($existing, $params, $type, $memo)
|
|
||||||
{
|
|
||||||
$vr_sq = $existing['vr_sq'];
|
|
||||||
|
|
||||||
if (!$this->VrfcReqModel->update($vr_sq, $params)) {
|
|
||||||
$sql = (string)$this->VrfcReqModel->getLastQuery();
|
|
||||||
write_custom_log("UPDATE_FAILED | Type: $type | vr_sq: $vr_sq | SQL: $sql", 'ERROR', 'failed');
|
|
||||||
throw new \Exception("[$type] 업데이트 실패");
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->statusService->recordStatusAndHistory($vr_sq, $params['stat_cd'], 'C9', $memo);
|
|
||||||
return $vr_sq;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 데이터를 DB 컬럼에 맞게 변환
|
|
||||||
*/
|
|
||||||
private function mapToDatabaseParams(array $articleInfo, array $payload): array
|
|
||||||
{
|
|
||||||
$files = $articleInfo['files'] ?? [];
|
|
||||||
$certRegister = [];
|
$certRegister = [];
|
||||||
$confirm_doc_img_url = [];
|
$confirm_doc_img_url = [];
|
||||||
$referenceFileUrl = [];
|
$referenceFileUrl = [];
|
||||||
$requestDatetime = date('YmdHis', strtotime($payload['requestDatetime'] ?? 'now'));
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
$fileTypeCode = $file['fileTypeCode'];
|
$fileTypeCode = $file['fileTypeCode'];
|
||||||
if ($fileTypeCode == 'RCDOC') {
|
if ($fileTypeCode == 'RCDOC') {
|
||||||
$certRegister[] = $file['fileUrl'];
|
$certRegister[] = $file['originalFileUrl'];
|
||||||
} elseif ($fileTypeCode == 'ADDOC') {
|
} elseif ($fileTypeCode == 'ADDOC') {
|
||||||
$confirm_doc_img_url[] = $file['fileUrl'];
|
$confirm_doc_img_url[] = $file['originalFileUrl'];
|
||||||
} elseif ($fileTypeCode == 'REFER') {
|
} elseif ($fileTypeCode == 'REFER') {
|
||||||
$referenceFileUrl[] = $file['fileUrl'];
|
$referenceFileUrl[] = $file['originalFileUrl'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$ownerTypeRaw = $articleInfo['seller']['ownerTypeCode'] ?? null;
|
// 1. v2_vrfc_req (검증요청) 데이터 준비
|
||||||
|
$vrfcReqData = [
|
||||||
$vrfc_params = [
|
'reqSeq' => '', // 네이버 요청 고유 ID
|
||||||
'reqSeq' => '',
|
'atcl_no' => $articleNumber,
|
||||||
'atcl_no' => $articleInfo['articleNumber'],
|
'step' => $step, // 기본 단계 설정
|
||||||
'step' => '',
|
'cpid' => $rawData['cpId'] ?? 'naver',
|
||||||
'cpid' => $articleInfo['cpId'],
|
'cp_atcl_id' => $rawData['cpArticleNumber'] ?? '',
|
||||||
'cp_atcl_id' => $articleInfo['cpArticleNumber'],
|
'trade_type' => $rawData['tradeTypeCode'] ?? '',
|
||||||
'trade_type' => $articleInfo['tradeTypeCode'],
|
'realtor_nm' => $rawData['realtor']['realtorName'] ?? null,
|
||||||
'realtor_nm' => $articleInfo['realtor']['realtorName'],
|
'realtor_tel_no' => $rawData['realtor']['representativeCellphoneNumber'] ?? null,
|
||||||
'realtor_tel_no' => $articleInfo['realtor']['representativeCellphoneNumber'],
|
'seller_tel_no' => $rawData['seller']['cellphoneNumber'] ?? null,
|
||||||
'seller_tel_no' => $articleInfo['seller']['sellerTelephoneNumber'],
|
'vrfc_type' => $rawData['verificationTypeCode'] ?? 'D', // D, T, P 등
|
||||||
'vrfc_type' => $articleInfo['verificationTypeCode'],
|
'rgbk_confirm' => null,
|
||||||
'rgbk_confirm' => $articleInfo['isUnregisteredVerificationRequested'] ? 'Y' : 'N',
|
'req_type' => $reg_type($payload), // 등록:C, 수정:U, 취소:D
|
||||||
'req_type' => '',
|
'rdate' => $rdate,
|
||||||
'rdate' => $requestDatetime ?? db_now('Y-m-d H:i:s'),
|
'cpTelNo' => null,
|
||||||
'cpTelNo' => $articleInfo['seller']['sellerTelephoneNumber'],
|
'stat_cd' => $stat_cd, // 초기 대기 상태
|
||||||
'stat_cd' => '',
|
'insert_user' => $insert_user,
|
||||||
'try_cnt' => '0',
|
'insert_tm' => $insert_tm,
|
||||||
'insert_user' => '',
|
'sync_yn' => $sync_yn,
|
||||||
'insert_tm' => db_now(),
|
'rgbk_confirm_owner_nm' => null,
|
||||||
'memo' => '',
|
'direct_trad_yn' => ($rawData['seller']['isDirectTrade'] ?? false) ? 'Y' : 'N',
|
||||||
'contact_fail_cnt' => '0',
|
'confirm_doc_img_url' => json_encode($confirm_doc_img_url),
|
||||||
'sync_yn' => 'Y',
|
'confirm_doc_owner_check_yn' => null,
|
||||||
'reg_try_cnt' => '0',
|
'certRegister' => json_encode($certRegister),
|
||||||
'tel_fail_cause' => null,
|
'referenceFileUrl' => json_encode($referenceFileUrl),
|
||||||
'rgbk_confirm_owner_nm' => $articleInfo['seller']['ownerName'] ?? null,
|
|
||||||
'direct_trad_yn' => $articleInfo['seller']['isDirectTrade'] === true ? 'Y' : 'N',
|
|
||||||
'confirm_doc_img_url' => empty($confirm_doc_img_url) ? null : json_encode($confirm_doc_img_url, JSON_UNESCAPED_UNICODE),
|
|
||||||
'confirm_doc_owner_check_yn' => '',
|
|
||||||
'owner_verifiable' => null,
|
|
||||||
'vrfc_cmpl_type' => null,
|
|
||||||
'rgbk_doc_img_url' => null,
|
|
||||||
'certRegister' => empty($certRegister) ? null : json_encode($certRegister, JSON_UNESCAPED_UNICODE),
|
|
||||||
'referenceFileUrl' => empty($referenceFileUrl) ? null : json_encode($referenceFileUrl, JSON_UNESCAPED_UNICODE),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$articl_info_param = [
|
return $vrfcReqData;
|
||||||
'address_code' => $articleInfo['address']['legalDivision']['sectorNumber'] ?? '', //읍면동코드
|
|
||||||
'address1' => $articleInfo['address']['legalDivision']['legalDivisionAddress'] ?? '', //법정도 주소
|
|
||||||
'address2' => $articleInfo['address']['jibunAddress'] ?? '',
|
|
||||||
'address3' => $articleInfo['address']['referenceAddress'] ?? '',
|
|
||||||
'address4' => $articleInfo['address']['etcAddress'] ?? '',
|
|
||||||
'sply_spc' => $articleInfo['space']['supplySpace'] ?? 0,
|
|
||||||
'excls_spc' => $articleInfo['space']['exclusiveSpace'] ?? 0,
|
|
||||||
'tot_spc' => $articleInfo['space']['totalSpace'] ?? 0,
|
|
||||||
'grnd_spc' => $articleInfo['space']['groundSpace'] ?? 0,
|
|
||||||
'bldg_spc' => $articleInfo['space']['buildingSpace'] ?? 0,
|
|
||||||
'deal_amt' => $articleInfo['price']['dealAmount'] ?? 0, // 매매금액
|
|
||||||
'wrrnt_amt' => $articleInfo['price']['warrantyAmount'] ?? 0, // 보증금
|
|
||||||
'lease_amt' => $articleInfo['price']['leaseAmount'] ?? 0, // 월세가 -> 임대가
|
|
||||||
'isale_amt' => $articleInfo['price']['preSaleAmount'] ?? 0, // 분양가
|
|
||||||
'prem_amt' => $articleInfo['price']['premiumAmount'] ?? 0, // 프리미엄
|
|
||||||
'sise' => null, // 매매, 전세 시세
|
|
||||||
'floor' => $articleInfo['floor']['correspondenceFloorCount'] ?? 0, // 층 / 해당 층
|
|
||||||
'_correspondenceFloorType' => $articleInfo['floor']['correspondenceFloorType'] ?? null, // 층 / 해당 층 타입 // 기존 없음
|
|
||||||
'floor2' => $articleInfo['floor']['totalFloorCount'] ?? 0, // 층 / 총 층수 // 기존 없음
|
|
||||||
'_undergroundFloorCount' => $articleInfo['floor']['undergroundFloorCount'] ?? 0, // 층 / 지하 층수 // 기존 없음
|
|
||||||
'rdate' => $requestDatetime ?? db_now('Y-m-d H:i:s'),
|
|
||||||
'seller_tel_no' => $articleInfo['seller']['sellerTelephoneNumber'] ?? null,
|
|
||||||
'seller_nm' => $articleInfo['seller']['sellerName'] ?? null,
|
|
||||||
'ownerTelNo' => $articleInfo['seller']['ownerTelephoneNumber'] ?? null, // 소유자전화번호 기존 없음
|
|
||||||
'ownerNm' => $articleInfo['seller']['ownerName'] ?? null, // 소유자명 기존 없음
|
|
||||||
'_isOwnerCertificationAgree' => $articleInfo['seller']['isOwnerCertificationAgree'] ?? null, // 소유자확인동의여부 기존 없음
|
|
||||||
'direct_trad_yn' => $articleInfo['seller']['isDirectTrade'] ?? null, // 직거래여부 기존 없음
|
|
||||||
'realtor_nm' => $articleInfo['realtor']['realtorName'] ?? null,
|
|
||||||
'realtor_tel_no' => $articleInfo['realtor']['representativeCellphoneNumber'] ?? null,
|
|
||||||
'_representativeTelephoneNumber' => $articleInfo['realtor']['representativeTelephoneNumber'] ?? null, // 중개사대표전화번호 기존 없음
|
|
||||||
'hscp_no' => $articleInfo['address']['complexNumber'] ?? null,
|
|
||||||
'hscp_nm' => $articleInfo['address']['complexName'] ?? null,
|
|
||||||
'ptp_no' => $articleInfo['address']['pyeongTypeNumber'] ?? null,
|
|
||||||
'ptp_nm' => null,
|
|
||||||
'charger' => null,
|
|
||||||
'req_price_yn' => 'N',
|
|
||||||
'reg_charger' => null,
|
|
||||||
'dept1_sq' => null,
|
|
||||||
'dept2_sq' => null,
|
|
||||||
'reg_dept2_sq' => null,
|
|
||||||
'reg_dept1_sq' => null,
|
|
||||||
'dong_ho_chk' => $articleInfo['address']['isDongHoChecked'] ?? null,
|
|
||||||
'hscplqry_lv' => $articleInfo['address']['inquiryLevel'] ?? null,
|
|
||||||
'chg_trade_type' => null,
|
|
||||||
'chg_address2' => null,
|
|
||||||
'chg_address3' => null,
|
|
||||||
'chg_seller_tel' => null,
|
|
||||||
'chg_amt' => null,
|
|
||||||
'reg_status' => null,
|
|
||||||
'cupnNo' => null,
|
|
||||||
'roomSiteAtclRgstCnt' => null,
|
|
||||||
'roomSiteAtclExpsCnt' => null,
|
|
||||||
'redvlp_area_nm' => $articleInfo['address']['redevelopmentArea']['redevelopmentAreaName'] ?? null,
|
|
||||||
'biz_stp_desc' => $articleInfo['address']['redevelopmentArea']['businessStep'] ?? null,
|
|
||||||
'cert_register' => empty($certRegister) ? null : json_encode($certRegister, JSON_UNESCAPED_UNICODE),
|
|
||||||
'confirm_doc_img_url' => empty($confirm_doc_img_url) ? null : json_encode($confirm_doc_img_url, JSON_UNESCAPED_UNICODE),
|
|
||||||
'confirm_doc_owner_check_yn' => $articleInfo['seller']['isOwnerCertificationAgree'] === true ? 'Y' : 'N',
|
|
||||||
'owner_birth' => $articleInfo['seller']['ownerBirthDate'] ?? null,
|
|
||||||
'vrfc_type_sub' => null,
|
|
||||||
'cert_register_save_yn' => '',
|
|
||||||
'confirm_doc_img_url_save_yn' => '',
|
|
||||||
'reference_file_url' => empty($referenceFileUrl) ? null : json_encode($referenceFileUrl, JSON_UNESCAPED_UNICODE),
|
|
||||||
'reference_file_url_save_yn' => '',
|
|
||||||
'reference_file_url_yn' => empty($referenceFileUrl) ? 'N' : 'Y',
|
|
||||||
'registerBookUniqueNo' => null, // 검증 참고란
|
|
||||||
'relationSellerAndOwner' => null, // 의뢰인과 소유주 관계
|
|
||||||
'ownerTypeCode' => getOwnerTypeCodeNo($ownerTypeRaw) ?? null, // 소유자구분코드
|
|
||||||
'registerBookUniqueNumber' => null, // 등기부 고유번호
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
$article_info_etc_param = [
|
|
||||||
'corp_own' => $ownerTypeRaw == 'CORP' ? 'Y' : 'N',
|
|
||||||
'bild_no' => null, // 건물번호
|
|
||||||
'address2a' => $articleInfo['address']['liAddress'] ?? null, // 지번주소
|
|
||||||
'address2b' => $articleInfo['address']['jibunAddress'] ?? null, // 도로명주소
|
|
||||||
'expsStartYmdt' => $articleInfo['exposureStartDateTime'] ?? null,
|
|
||||||
'vrfcAutoPassYn' => $articleInfo['isAutoVerificationRequested'] === true ? 'Y' : 'N',
|
|
||||||
'registerBookUniqueNo' => null,
|
|
||||||
'ownerTypeCode' => getOwnerTypeCodeNo($ownerTypeRaw) ?? null,
|
|
||||||
'orgRepCphNo' => null,
|
|
||||||
'orgRepTelNo' => null,// 원중개사 대표자명
|
|
||||||
'orgRltrNm' => null, // 원중개사 대표자명
|
|
||||||
'smsSendTime' => null, // 서류확인 내용
|
|
||||||
'document_cert_method' => null,
|
|
||||||
'noRgbkVrfcReqYn' => $articleInfo['isUnregisteredVerificationRequested'] === true ? 'Y' : 'N',
|
|
||||||
'areaByBdbkVrfcReqYn' => $articleInfo['isBuildingRegisterAreaCheckRequested'] === true ? 'Y' : 'N', //건축물대장기준 면적검증요청 여부 Y / N 또는 항목미전송
|
|
||||||
'orgAtclNo' => null, // 원매물 번호
|
|
||||||
'atclStatCd' => null, // 매물상태코드 J1W : 공동중개 검증 원)중개사 확인 요청
|
|
||||||
'repNm' => $articleInfo['realtor']['representativeName'] ?? null, // 원중개사 대표자명
|
|
||||||
'cpName' => $articleInfo['realtor']['realtorName'], // 중개업소 대표자명 ?
|
|
||||||
'document_not_received' => null,
|
|
||||||
'final_failure' => null
|
|
||||||
];
|
|
||||||
|
|
||||||
// $vrfc_params = array_merge($vrfc_params, $articl_info_param, $article_info_etc_param);
|
|
||||||
|
|
||||||
// 개인: INDIV => 0
|
|
||||||
// 법인: CORP => 1
|
|
||||||
// 외국인: FRGNR => 2
|
|
||||||
// 위임장: DELEG => 3
|
|
||||||
|
|
||||||
return $vrfc_params;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function articleInfoParameter($articleNumber, $rawData , $payload){
|
||||||
|
|
||||||
|
// JSON 객체 안전하게 로드
|
||||||
|
$address = $rawData['address'] ?? [];
|
||||||
|
$space = $rawData['space'] ?? [];
|
||||||
|
$price = $rawData['price'] ?? [];
|
||||||
|
$floor = $rawData['floor'] ?? [];
|
||||||
|
$seller = $rawData['seller'] ?? [];
|
||||||
|
$realtor = $rawData['realtor'] ?? [];
|
||||||
|
$files = $rawData['realtor']['file'] ?? [];
|
||||||
|
$certRegister = [];
|
||||||
|
$confirm_doc_img_url = [];
|
||||||
|
$referenceFileUrl = [];
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$fileTypeCode = $file['fileTypeCode'];
|
||||||
|
if ($fileTypeCode == 'RCDOC') {
|
||||||
|
$certRegister[] = $file['originalFileUrl'];
|
||||||
|
} elseif ($fileTypeCode == 'ADDOC') {
|
||||||
|
$confirm_doc_img_url[] = $file['originalFileUrl'];
|
||||||
|
} elseif ($fileTypeCode == 'REFER') {
|
||||||
|
$referenceFileUrl[] = $file['originalFileUrl'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ownerTypeCodeRaw = $rawData['ownerTypeCode'] ?? null;
|
||||||
|
$ownerTypeCode = match($ownerTypeCodeRaw) {
|
||||||
|
"INDIV" => 0,
|
||||||
|
"CORP" => 1,
|
||||||
|
"FRGNR" => 2,
|
||||||
|
"DELEG" => 3,
|
||||||
|
default => null,
|
||||||
|
};
|
||||||
|
|
||||||
|
$ownerCheckYn = ($seller['isOwnerCertificationAgree'] ?? false) ? 'Y' : 'N';
|
||||||
|
|
||||||
|
return [
|
||||||
|
// 'vr_sq' => $vr_sq,
|
||||||
|
'atcl_no' => $articleNumber,
|
||||||
|
'cpid' => $rawData['cpId'] ?? null,
|
||||||
|
'cp_atcl_id' => $rawData['cpArticleNumber'] ?? null,
|
||||||
|
'rlet_type_cd' => $rawData['realEstateTypeCode'] ?? null,
|
||||||
|
'trade_type' => $rawData['tradeTypeCode'] ?? null,
|
||||||
|
'address_code' => $address['legalDivision']['sectorNumber'] ?? null,
|
||||||
|
'address1' => $address['complexName'] ?? null,
|
||||||
|
'address2' => trim(($address['buildingName'] ?? '') . ' ' . ($address['hoName'] ?? '')),
|
||||||
|
'address3' => $address['legalDivision']['legalDivisionAddress'] ?? null,
|
||||||
|
|
||||||
|
// 면적 및 가격 (데이터 없으면 null)
|
||||||
|
'sply_spc' => $space['supplySpace'] ?? null,
|
||||||
|
'excls_spc' => $space['exclusiveSpace'] ?? null,
|
||||||
|
'tot_spc' => $space['totalSpace'] ?? null,
|
||||||
|
'grnd_spc' => $space['groundSpace'] ?? null,
|
||||||
|
'bldg_spc' => $space['buildingSpace'] ?? null,
|
||||||
|
'deal_amt' => $price['dealAmount'] ?? 0,
|
||||||
|
'wrrnt_amt' => $price['warrantyAmount'] ?? 0,
|
||||||
|
'lease_amt' => $price['leaseAmount'] ?? 0,
|
||||||
|
'isale_amt' => $price['preSaleAmount'] ?? 0,
|
||||||
|
'prem_amt' => $price['premiumAmount'] ?? 0,
|
||||||
|
'sise' => null,
|
||||||
|
|
||||||
|
// 층 및 일정
|
||||||
|
'floor' => $floor['correspondenceFloorCount'] ?? null,
|
||||||
|
'floor2' => $floor['totalFloorCount'] ?? null,
|
||||||
|
'rdate' => date("Y-m-d H:i:s" , strtotime( $payload['requestDatetime'] )),
|
||||||
|
|
||||||
|
// 셀러
|
||||||
|
'seller_tel_no' => $seller['sellerTelephoneNumber'] ?? null, // JSON seller 객체에 연락처 필드 부재
|
||||||
|
'seller_nm' => $seller['sellerName'] ?? null,
|
||||||
|
|
||||||
|
// 중개업소
|
||||||
|
'realtor_nm' => $realtor['realtorName'] ?? null,
|
||||||
|
'realtor_tel_no' => $realtor['representativeTelephoneNumber'] ?? null,
|
||||||
|
|
||||||
|
// 단지 정보
|
||||||
|
'hscp_no' => $address['complexNumber'] ?? null,
|
||||||
|
'hscp_nm' => $address['complexName'] ?? null,
|
||||||
|
'ptp_no' => $address['pyeongTypeNumber'] ?? null,
|
||||||
|
'ptp_nm' => $address['pyeongTypeNumber'] ?? null,
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
'charger' => null, // 담당자
|
||||||
|
'reg_price_yn' => 'N', // 가격수정요청여부
|
||||||
|
'reg_charger' => null, // 등기부등본 담당자
|
||||||
|
'dept1_sq' => null, // 부서(본부)
|
||||||
|
'dept2_sq' => null, // 부서(팀)
|
||||||
|
'reg_dept2_sq' => null, // 부서(팀)
|
||||||
|
'reg_dept1_sq' => null, // 부서(본부)
|
||||||
|
|
||||||
|
// 상태 및 기타
|
||||||
|
'dong_ho_chk' => ($address['isDongHoCheck'] ?? false) ? 'Y' : 'N',
|
||||||
|
'hscplqry_lv' => $address['inquiryLevel'] ?? null,
|
||||||
|
|
||||||
|
// 소유자
|
||||||
|
'ownerNm' => $seller['ownerName'] ?? null,
|
||||||
|
'ownerTelNo' => $seller['ownerName'] ?? null,
|
||||||
|
|
||||||
|
//
|
||||||
|
'chg_trade_type' => null,
|
||||||
|
'chg_address2' => null,
|
||||||
|
'chg_address3' => null,
|
||||||
|
'chg_seller_tel' => null,
|
||||||
|
'chg_amt' => null,
|
||||||
|
|
||||||
|
'reg_status' => null,
|
||||||
|
'cupnNo' => null,
|
||||||
|
'roomSiteAtclRgstCnt' => null,
|
||||||
|
'rootSiteAtclExpsCnt' => null,
|
||||||
|
'redvlp_area_nm' => $address['redevelopAreaName'] ?? null,
|
||||||
|
'biz_stp_desc' => $address['bizStepDescription'] ?? null,
|
||||||
|
|
||||||
|
// file
|
||||||
|
'cert_register' => json_encode($certRegister, JSON_UNESCAPED_UNICODE),
|
||||||
|
'direct_trad_yn' => ($seller['isDirectTrade'] ?? false) ? 'Y' : 'N',
|
||||||
|
'confirm_doc_img_url' => json_encode( $confirm_doc_img_url , JSON_UNESCAPED_UNICODE),
|
||||||
|
'confirm_doc_owner_check_yn' => $ownerCheckYn,
|
||||||
|
'owner_birth' => null,
|
||||||
|
'vrfc_type_sub' => ($rawData['verificationTypeCode'] === 'D') ? ($ownerCheckYn === 'Y' ? 'D2' : 'D1') : ($rawData['verificationTypeCode'] === 'N' ? 'N2' : $rawData['verificationTypeCode'] . '1'),
|
||||||
|
'cert_register_save_yn' => 'N',
|
||||||
|
'confirm_doc_img_url_save_yn' => 'N',
|
||||||
|
'address4' => $address['etcAddress'] ?? null,
|
||||||
|
'reference_file_url' => !empty($referenceFileUrl) ? implode('|', $referenceFileUrl) : '',
|
||||||
|
'reference_file_url_save_yn' => !empty($referenceFileUrl) ? 'Y' : 'N',
|
||||||
|
'registerBookUniqueNo' => $rawData['verificationReference'] ?? null,
|
||||||
|
'relationSellerAndOwner' => null,
|
||||||
|
'ownerTypeCode' => $ownerTypeCode,
|
||||||
|
'registerBookUniqueNumber' => null
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function articleInfoEtcParameter($articleNumber, $rawData , $payload){
|
||||||
|
// JSON 객체 안전하게 로드
|
||||||
|
$address = $rawData['address'] ?? [];
|
||||||
|
$space = $rawData['space'] ?? [];
|
||||||
|
$price = $rawData['price'] ?? [];
|
||||||
|
$floor = $rawData['floor'] ?? [];
|
||||||
|
$seller = $rawData['seller'] ?? [];
|
||||||
|
$realtor = $rawData['realtor'] ?? [];
|
||||||
|
$files = $rawData['realtor']['file'] ?? [];
|
||||||
|
|
||||||
|
// 공동 : 동 정보, 비공동 : 지번주소
|
||||||
|
if ( $rawData['realEstateTypeCode'] == "A01"){
|
||||||
|
$address2b = $address['buildingName'];
|
||||||
|
} else {
|
||||||
|
$address2b = $address['jibunAddress'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ownerTypeCode = null;
|
||||||
|
$ownerTypeCodeResponse = isset($rawData['ownerTypeCode']) ?? null;
|
||||||
|
|
||||||
|
if ($ownerTypeCodeResponse !== null ){
|
||||||
|
switch ($ownerTypeCodeResponse) {
|
||||||
|
case "INDIV":
|
||||||
|
$ownerTypeCode = 0;
|
||||||
|
break;
|
||||||
|
case "CORP":
|
||||||
|
$ownerTypeCode = 1;
|
||||||
|
break;
|
||||||
|
case "FRGNR":
|
||||||
|
$ownerTypeCode = 2;
|
||||||
|
break;
|
||||||
|
case "DELEG":
|
||||||
|
$ownerTypeCode = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'atcl_no' => $articleNumber,
|
||||||
|
'vir_addr_yn' => ($address['isVirtualAddress'] ?? null) === true ? 'Y' : (($address['isVirtualAddress'] ?? null) === false ? 'N' : null),
|
||||||
|
'bild_no' => null,
|
||||||
|
'vrfcMthdTpcd' => null,
|
||||||
|
'cert_uncnfrm_status' => null,
|
||||||
|
'expsStartYmdt' => $rawData['exposureStartDateTime'] ?? null,
|
||||||
|
'vrfcAutoPassYn' => ($rawData['isAutoVerificationRequested'] ?? false) === true ? "Y" : "N",
|
||||||
|
'address2a' => $address['liAddress'] ?? null,
|
||||||
|
'address2b' => $address2b,
|
||||||
|
'registerBookUniqueNo' => null,
|
||||||
|
'ownerTypeCode' => $ownerTypeCode,
|
||||||
|
'orgRepCphNo' => null,
|
||||||
|
'orgRepTelNo' => null,
|
||||||
|
'orgRltrNm' => null,
|
||||||
|
'orgRepNm' => null,
|
||||||
|
'smsSendTime' => null,
|
||||||
|
'document_cert_method' => null,
|
||||||
|
'noRgbkVrfcReqYn' => ($address['isUnregisteredVerificationRequested'] ?? null) === true ? 'Y' : (($address['isUnregisteredVerificationRequested'] ?? null) === false ? 'N' : null),
|
||||||
|
'areaByBdbkVrfcReqYn' => ($address['isBuildingRegisterAreaCheckRequested'] ?? null) === true ? 'Y' : (($address['isBuildingRegisterAreaCheckRequested'] ?? null) === false ? 'N' : null),
|
||||||
|
'orgAtclNo' => null,
|
||||||
|
'atclStatCd' => null,
|
||||||
|
'repNm' => $realtor['realtorName'] ?? null,
|
||||||
|
'cpName' => $rawData['cpId'],
|
||||||
|
'document_not_received' => null,
|
||||||
|
'final_failure' => null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ class StatusService
|
|||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->V2chgstatModel = model(V2chgstatModel::class);
|
// $this->V2chgstatModel = model(V2chgstatModel::class);
|
||||||
$this->V2chghistoryModel = model(V2chghistoryModel::class);
|
// $this->V2chghistoryModel = model(V2chghistoryModel::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -20,22 +20,24 @@ class StatusService
|
|||||||
*/
|
*/
|
||||||
public function recordStatusAndHistory($vr_sq, $stat_cd, $chg_type, $memo)
|
public function recordStatusAndHistory($vr_sq, $stat_cd, $chg_type, $memo)
|
||||||
{
|
{
|
||||||
|
$statModel = model(V2chgstatModel::class);
|
||||||
|
$histModel = model(V2chghistoryModel::class);
|
||||||
// 1. 상태(stat) 저장 (Insert or Update)
|
// 1. 상태(stat) 저장 (Insert or Update)
|
||||||
try {
|
try {
|
||||||
$this->V2chgstatModel->saveChgstat([
|
$statModel->saveChgstat([
|
||||||
'vr_sq' => $vr_sq,
|
'vr_sq' => $vr_sq,
|
||||||
'stat_cd' => $stat_cd,
|
'stat_cd' => $stat_cd,
|
||||||
'insert_user' => '0',
|
'insert_user' => '0',
|
||||||
'insert_tm' => db_now()
|
'insert_tm' => db_now()
|
||||||
], 'I');
|
], 'I');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$lastSql = (string)$this->V2chgstatModel->getLastQuery();
|
$lastSql = (string)$statModel->getLastQuery();
|
||||||
write_custom_log("STAT_SAVE_ERR | vr_sq: $vr_sq | SQL: $lastSql | Msg: " . $e->getMessage(), 'ERROR', 'failed');
|
write_custom_log("STAT_SAVE_ERR | vr_sq: $vr_sq | SQL: $lastSql | Msg: " . $e->getMessage(), 'ERROR', 'failed');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 이력(history) 저장
|
// 2. 이력(history) 저장
|
||||||
try {
|
try {
|
||||||
$this->V2chghistoryModel->v2_savehistory([
|
$histModel->v2_savehistory([
|
||||||
'vr_sq' => $vr_sq,
|
'vr_sq' => $vr_sq,
|
||||||
'stat_cd' => $stat_cd,
|
'stat_cd' => $stat_cd,
|
||||||
'chg_type' => $chg_type,
|
'chg_type' => $chg_type,
|
||||||
@@ -44,7 +46,7 @@ class StatusService
|
|||||||
'insert_tm' => db_now()
|
'insert_tm' => db_now()
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$lastSql = (string)$this->V2chghistoryModel->getLastQuery();
|
$lastSql = (string)$histModel->getLastQuery();
|
||||||
write_custom_log("HIST_SAVE_ERR | vr_sq: $vr_sq | SQL: $lastSql | Msg: " . $e->getMessage(), 'ERROR', 'failed');
|
write_custom_log("HIST_SAVE_ERR | vr_sq: $vr_sq | SQL: $lastSql | Msg: " . $e->getMessage(), 'ERROR', 'failed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
||||||
<!-- 규칙 박스 -->
|
<!-- 규칙 박스 -->
|
||||||
<div class="border rounded-3 p-3 mb-3 bg-light">
|
<div class="border rounded-3 p-3 mb-3">
|
||||||
<fieldset class="mb-0">
|
<fieldset class="mb-0">
|
||||||
<legend class="fs-6 fw-semibold mb-2">컨펌스 시스템 비밀번호 작성규칙</legend>
|
<legend class="fs-6 fw-semibold mb-2">컨펌스 시스템 비밀번호 작성규칙</legend>
|
||||||
<ul class="mb-0 ps-3">
|
<ul class="mb-0 ps-3">
|
||||||
|
|||||||
@@ -1118,7 +1118,7 @@ $usr_level = session('usr_level');
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
$arrI1 = array();
|
$arrI1 = array();
|
||||||
reset($images);
|
reset($images);
|
||||||
@@ -1166,7 +1166,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I10', '')">파일</button>
|
onclick="viewFilePop('I10', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1209,7 +1209,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I2', '')">파일</button>
|
onclick="viewFilePop('I2', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1372,7 +1372,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('V1', '')">파일</button>
|
onclick="viewFilePop('V1', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1412,7 +1412,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I5', '')">파일</button>
|
onclick="viewFilePop('I5', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1447,7 +1447,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I11', '')">파일</button>
|
onclick="viewFilePop('I11', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1489,7 +1489,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="vstack gap-2">
|
<div class="vstack gap-2">
|
||||||
<?php $numbering = 1;
|
<?php $numbering = 1;
|
||||||
foreach ($dupleGroundPlan as $row): ?>
|
foreach ($dupleGroundPlan as $row): ?>
|
||||||
<div class="border rounded-3 p-2 bg-light">
|
<div class="border rounded-3 p-2">
|
||||||
<div class="d-flex align-items-center justify-content-between">
|
<div class="d-flex align-items-center justify-content-between">
|
||||||
<div class="fw-semibold">
|
<div class="fw-semibold">
|
||||||
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
||||||
@@ -1883,8 +1883,8 @@ $usr_level = session('usr_level');
|
|||||||
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
||||||
<?= esc($record['record_orignm']) ?>
|
<?= esc($record['record_orignm']) ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
<span class="badge text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['insert_tm']) ?></span>
|
<span class="badge text-dark border"><?= esc($record['insert_tm']) ?></span>
|
||||||
</div>
|
</div>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<span class="text-muted small">등록된 파일 없음</span>
|
<span class="text-muted small">등록된 파일 없음</span>
|
||||||
|
|||||||
@@ -1118,7 +1118,7 @@ $usr_level = session('usr_level');
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
$arrI1 = array();
|
$arrI1 = array();
|
||||||
reset($images);
|
reset($images);
|
||||||
@@ -1166,7 +1166,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I10', '')">파일</button>
|
onclick="viewFilePop('I10', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1209,7 +1209,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I2', '')">파일</button>
|
onclick="viewFilePop('I2', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1372,7 +1372,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('V1', '')">파일</button>
|
onclick="viewFilePop('V1', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1412,7 +1412,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I5', '')">파일</button>
|
onclick="viewFilePop('I5', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1447,7 +1447,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I11', '')">파일</button>
|
onclick="viewFilePop('I11', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1489,7 +1489,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="vstack gap-2">
|
<div class="vstack gap-2">
|
||||||
<?php $numbering = 1;
|
<?php $numbering = 1;
|
||||||
foreach ($dupleGroundPlan as $row): ?>
|
foreach ($dupleGroundPlan as $row): ?>
|
||||||
<div class="border rounded-3 p-2 bg-light">
|
<div class="border rounded-3 p-2">
|
||||||
<div class="d-flex align-items-center justify-content-between">
|
<div class="d-flex align-items-center justify-content-between">
|
||||||
<div class="fw-semibold">
|
<div class="fw-semibold">
|
||||||
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
||||||
@@ -1883,8 +1883,8 @@ $usr_level = session('usr_level');
|
|||||||
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
||||||
<?= esc($record['record_orignm']) ?>
|
<?= esc($record['record_orignm']) ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
<span class="badge text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['insert_tm']) ?></span>
|
<span class="badge text-dark border"><?= esc($record['insert_tm']) ?></span>
|
||||||
</div>
|
</div>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<span class="text-muted small">등록된 파일 없음</span>
|
<span class="text-muted small">등록된 파일 없음</span>
|
||||||
|
|||||||
@@ -1118,7 +1118,7 @@ $usr_level = session('usr_level');
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
$arrI1 = array();
|
$arrI1 = array();
|
||||||
reset($images);
|
reset($images);
|
||||||
@@ -1166,7 +1166,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I10', '')">파일</button>
|
onclick="viewFilePop('I10', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
if (isset($imgs_count['I10']) && $imgs_count['I10'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1209,7 +1209,7 @@ $usr_level = session('usr_level');
|
|||||||
onclick="viewFilePop('I2', '')">파일</button>
|
onclick="viewFilePop('I2', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
if (isset($imgs_count['I2']) && $imgs_count['I2'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1372,7 +1372,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('V1', '')">파일</button>
|
onclick="viewFilePop('V1', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
if (isset($imgs_count['V1']) && $imgs_count['V1'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1412,7 +1412,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I5', '')">파일</button>
|
onclick="viewFilePop('I5', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
if (isset($imgs_count['I5']) && $imgs_count['I5'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1447,7 +1447,7 @@ $usr_level = session('usr_level');
|
|||||||
<button type="button" class="btn btn-sm btn-outline-secondary"
|
<button type="button" class="btn btn-sm btn-outline-secondary"
|
||||||
onclick="viewFilePop('I11', '')">파일</button>
|
onclick="viewFilePop('I11', '')">파일</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="ratio ratio-4x3 bg-light rounded-2 overflow-hidden">
|
<div class="ratio ratio-4x3 rounded-2 overflow-hidden">
|
||||||
<?php
|
<?php
|
||||||
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
if (isset($imgs_count['I11']) && $imgs_count['I11'] != 0) {
|
||||||
foreach ($images as $img) {
|
foreach ($images as $img) {
|
||||||
@@ -1489,7 +1489,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="vstack gap-2">
|
<div class="vstack gap-2">
|
||||||
<?php $numbering = 1;
|
<?php $numbering = 1;
|
||||||
foreach ($dupleGroundPlan as $row): ?>
|
foreach ($dupleGroundPlan as $row): ?>
|
||||||
<div class="border rounded-3 p-2 bg-light">
|
<div class="border rounded-3 p-2">
|
||||||
<div class="d-flex align-items-center justify-content-between">
|
<div class="d-flex align-items-center justify-content-between">
|
||||||
<div class="fw-semibold">
|
<div class="fw-semibold">
|
||||||
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
<span class="badge bg-dark me-2">중복 <?= $numbering ?></span>
|
||||||
@@ -1883,8 +1883,8 @@ $usr_level = session('usr_level');
|
|||||||
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
href="/article/receipt/download_file?record_sq=<?= $record['record_sq'] ?>">
|
||||||
<?= esc($record['record_orignm']) ?>
|
<?= esc($record['record_orignm']) ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
<span class="badge text-dark border"><?= esc($record['record_size']) ?> KB</span>
|
||||||
<span class="badge bg-light text-dark border"><?= esc($record['insert_tm']) ?></span>
|
<span class="badge text-dark border"><?= esc($record['insert_tm']) ?></span>
|
||||||
</div>
|
</div>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<span class="text-muted small">등록된 파일 없음</span>
|
<span class="text-muted small">등록된 파일 없음</span>
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">매물 정보</h5>
|
<h5 class="card-title">매물 정보</h5>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0 apt-info-table">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0 apt-info-table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width:120px">
|
<col style="width:120px">
|
||||||
<col style="width:320px">
|
<col style="width:320px">
|
||||||
@@ -621,7 +621,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
@@ -652,7 +652,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<tr>
|
<tr>
|
||||||
<th>홍보확인서<br>미확인여부상세</th>
|
<th>홍보확인서<br>미확인여부상세</th>
|
||||||
<td>
|
<td>
|
||||||
<table class="w-100">
|
<table class="w-100 tbl_basic2 table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<?php
|
<?php
|
||||||
$checks = explode('|', $data['comment']);
|
$checks = explode('|', $data['comment']);
|
||||||
@@ -851,7 +851,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
||||||
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark"><?= $tel['file_size'] ?>kb</span>
|
<span class="badge text-dark"><?= $tel['file_size'] ?>kb</span>
|
||||||
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1093,7 +1093,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">매물 정보</h5>
|
<h5 class="card-title">매물 정보</h5>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0 apt-info-table">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0 apt-info-table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width:120px">
|
<col style="width:120px">
|
||||||
<col style="width:320px">
|
<col style="width:320px">
|
||||||
@@ -167,10 +167,10 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">등록일</th>
|
<th>등록일</th>
|
||||||
<td><?= $data['rdate'] ?></td>
|
<td><?= $data['rdate'] ?></td>
|
||||||
|
|
||||||
<th class="bg-light">전화/서류 완료일시</th>
|
<th>전화/서류 완료일시</th>
|
||||||
<td>
|
<td>
|
||||||
<select class="form-select form-select-sm" name="atcl_vrtc_way" id="atcl_vrtc_way"
|
<select class="form-select form-select-sm" name="atcl_vrtc_way" id="atcl_vrtc_way"
|
||||||
disabled>
|
disabled>
|
||||||
@@ -188,10 +188,10 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">등기부등본 확인완료</th>
|
<th>등기부등본 확인완료</th>
|
||||||
<td><?= $data['result_tm'] ?></td>
|
<td><?= $data['result_tm'] ?></td>
|
||||||
|
|
||||||
<th class="bg-light">의뢰인(매도자)</th>
|
<th>의뢰인(매도자)</th>
|
||||||
<td>
|
<td>
|
||||||
<?php if (in_array($data['stat_cd'], ['19', '60', '69'])): ?>
|
<?php if (in_array($data['stat_cd'], ['19', '60', '69'])): ?>
|
||||||
***
|
***
|
||||||
@@ -202,10 +202,10 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">매물구분</th>
|
<th>매물구분</th>
|
||||||
<td><?= $data['atcl_nm'] ?></td>
|
<td><?= $data['atcl_nm'] ?></td>
|
||||||
|
|
||||||
<th class="bg-light">거래구분</th>
|
<th>거래구분</th>
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex flex-wrap gap-3">
|
<div class="d-flex flex-wrap gap-3">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
@@ -236,10 +236,10 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light" rowspan="3">지역구분</th>
|
<th rowspan="3">지역구분</th>
|
||||||
<td rowspan="3"><?= $data['region_nm'] ?></td>
|
<td rowspan="3"><?= $data['region_nm'] ?></td>
|
||||||
|
|
||||||
<th class="bg-light">리 주소</th>
|
<th>리 주소</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="form-control form-control-sm" id="atcl_addr1a"
|
<input type="text" class="form-control form-control-sm" id="atcl_addr1a"
|
||||||
name="atcl_addr1a" value="<?= $data['address2a'] ?>" disabled>
|
name="atcl_addr1a" value="<?= $data['address2a'] ?>" disabled>
|
||||||
@@ -247,7 +247,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">상세주소</th>
|
<th>상세주소</th>
|
||||||
<td>
|
<td>
|
||||||
<?php if (empty($data['address2b'])): ?>
|
<?php if (empty($data['address2b'])): ?>
|
||||||
<input type="text" class="form-control form-control-sm mb-2" name="atcl_addr1"
|
<input type="text" class="form-control form-control-sm mb-2" name="atcl_addr1"
|
||||||
@@ -267,7 +267,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">기타주소</th>
|
<th>기타주소</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="form-control form-control-sm"
|
<input type="text" class="form-control form-control-sm"
|
||||||
value="<?= $data['address4'] ?>" disabled>
|
value="<?= $data['address4'] ?>" disabled>
|
||||||
@@ -275,14 +275,14 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">단지명</th>
|
<th>단지명</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="hidden" name="atcl_hscp_nm" id="atcl_hscp_nm"
|
<input type="hidden" name="atcl_hscp_nm" id="atcl_hscp_nm"
|
||||||
value="<?= $data['hscp_nm'] ?>" />
|
value="<?= $data['hscp_nm'] ?>" />
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<th class="bg-light align-middle">가격</th>
|
<th class="align-middle">가격</th>
|
||||||
<td>
|
<td>
|
||||||
<!-- 기본 가격 -->
|
<!-- 기본 가격 -->
|
||||||
<div class="price-monthly-grid mb-2" id="div_trade_type_price"
|
<div class="price-monthly-grid mb-2" id="div_trade_type_price"
|
||||||
@@ -381,7 +381,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">평형</th>
|
<th>평형</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="hidden" name="atcl_ptp_nm" id="atcl_ptp_nm" value="">
|
<input type="hidden" name="atcl_ptp_nm" id="atcl_ptp_nm" value="">
|
||||||
<select class="form-select form-select-sm" name="atcl_ptp_no" id="atcl_ptp_no"
|
<select class="form-select form-select-sm" name="atcl_ptp_no" id="atcl_ptp_no"
|
||||||
@@ -390,7 +390,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<th class="bg-light">층 / 총층</th>
|
<th>층 / 총층</th>
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex align-items-center gap-2">
|
<div class="d-flex align-items-center gap-2">
|
||||||
<input type="text" class="form-control form-control-sm" style="max-width:80px;"
|
<input type="text" class="form-control form-control-sm" style="max-width:80px;"
|
||||||
@@ -404,11 +404,11 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<?php if ($data['hscplqry_lv'] == '3'): ?>
|
<?php if ($data['hscplqry_lv'] == '3'): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">공급면적</th>
|
<th>공급면적</th>
|
||||||
<td>
|
<td>
|
||||||
<span style="color:#F21E1E"><?= $data['sply_spc'] ?></span>
|
<span style="color:#F21E1E"><?= $data['sply_spc'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
<th class="bg-light">전용면적</th>
|
<th>전용면적</th>
|
||||||
<td>
|
<td>
|
||||||
<span style="color:#F21E1E"><?= $data['excls_spc'] ?></span>
|
<span style="color:#F21E1E"><?= $data['excls_spc'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
@@ -418,11 +418,11 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<?php if (empty($data['hscp_no'])): ?>
|
<?php if (empty($data['hscp_no'])): ?>
|
||||||
<?php if ($data['rlet_type_cd'] == 'C01' || $data['rlet_type_cd'] == 'C02' || ($data['rlet_type_cd'] == 'C03' and $data['trade_type_cd'] != 'A1') || $data['rlet_type_cd'] == 'D02' || $data['rlet_type_cd'] == 'D01' || $data['rlet_type_cd'] == 'E04'): ?>
|
<?php if ($data['rlet_type_cd'] == 'C01' || $data['rlet_type_cd'] == 'C02' || ($data['rlet_type_cd'] == 'C03' and $data['trade_type_cd'] != 'A1') || $data['rlet_type_cd'] == 'D02' || $data['rlet_type_cd'] == 'D01' || $data['rlet_type_cd'] == 'E04'): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">공급면적</th>
|
<th>공급면적</th>
|
||||||
<td>
|
<td>
|
||||||
<span style="color:#002EE7"><?= $data['sply_spc'] ?></span>
|
<span style="color:#002EE7"><?= $data['sply_spc'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
<th class="bg-light">전용면적</th>
|
<th>전용면적</th>
|
||||||
<td>
|
<td>
|
||||||
<span style="color:#002EE7"><?= $data['excls_spc'] ?></span>
|
<span style="color:#002EE7"><?= $data['excls_spc'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
@@ -469,7 +469,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-light">가주소 여부</th>
|
<th>가주소 여부</th>
|
||||||
<td><span <?= $vir_style ?>><?= $data['vir_addr_yn'] ?></span></td>
|
<td><span <?= $vir_style ?>><?= $data['vir_addr_yn'] ?></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -560,7 +560,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
@@ -591,7 +591,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<tr>
|
<tr>
|
||||||
<th>홍보확인서<br>미확인여부상세</th>
|
<th>홍보확인서<br>미확인여부상세</th>
|
||||||
<td>
|
<td>
|
||||||
<table class="w-100">
|
<table class="w-100 tbl_basic2 table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<?php
|
<?php
|
||||||
$checks = explode('|', $data['comment']);
|
$checks = explode('|', $data['comment']);
|
||||||
@@ -790,7 +790,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
||||||
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark"><?= $tel['file_size'] ?>kb</span>
|
<span class="badge text-dark"><?= $tel['file_size'] ?>kb</span>
|
||||||
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1031,7 +1031,7 @@ if (!empty($data['cert_register']) && $data['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
@@ -2,6 +2,17 @@
|
|||||||
<?= $this->section('content') ?>
|
<?= $this->section('content') ?>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
.tbl_basic2 th {
|
||||||
|
padding: 0 10px;
|
||||||
|
height: 27px;
|
||||||
|
border: solid 1px #d8d9de;
|
||||||
|
background-color: #eff0f4;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #5a5f69;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
.num {
|
.num {
|
||||||
font-family: Tahoma;
|
font-family: Tahoma;
|
||||||
color: #b68556;
|
color: #b68556;
|
||||||
@@ -42,7 +53,7 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<!-- table 유지 + 반응형 -->
|
<!-- table 유지 + 반응형 -->
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -95,21 +106,20 @@
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark"
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
id="span_current_stat"></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-2 align-middle">
|
<table class="table table-sm table-bordered mb-2 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 110px;">
|
<col style="width: 110px;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">매물종류</th>
|
<th>매물종류</th>
|
||||||
<td id="write_work_type">
|
<td id="write_work_type">
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@@ -130,7 +140,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">매물번호</th>
|
<th>매물번호</th>
|
||||||
<td>
|
<td>
|
||||||
<form method="post" id="frmSearchArticle"
|
<form method="post" id="frmSearchArticle"
|
||||||
name="frmSearchArticle" onsubmit="return false;">
|
name="frmSearchArticle" onsubmit="return false;">
|
||||||
@@ -156,12 +166,12 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">CP ID</th>
|
<th>CP ID</th>
|
||||||
<td><span class="num"
|
<td><span class="num"
|
||||||
id="span_cpid"><?= $article['cpid'] ?></span></td>
|
id="span_cpid"><?= $article['cpid'] ?></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">현재 상태</th>
|
<th>현재 상태</th>
|
||||||
<td><span class="num"
|
<td><span class="num"
|
||||||
id="span_current_stat"><?= $article['current_stat'] ?></span>
|
id="span_current_stat"><?= $article['current_stat'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
@@ -193,26 +203,26 @@
|
|||||||
<span class="fw-semibold">공인중개사 정보</span>
|
<span class="fw-semibold">공인중개사 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 align-middle">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">중개사명</th>
|
<th>중개사명</th>
|
||||||
<td><span
|
<td><span
|
||||||
id="span_realtor_nm"><?= $article['realtor_nm'] ?></span>
|
id="span_realtor_nm"><?= $article['realtor_nm'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">대표전화/FAX</th>
|
<th>대표전화/FAX</th>
|
||||||
<td><span id="span_realtor_tel_no">
|
<td><span id="span_realtor_tel_no">
|
||||||
<?= $article['agent_tel'] . (empty($article['agent_fax']) ? '' : ' / ' . $article['agent_fax']) ?>
|
<?= $article['agent_tel'] . (empty($article['agent_fax']) ? '' : ' / ' . $article['agent_fax']) ?>
|
||||||
</span></td>
|
</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">담당자전화</th>
|
<th>담당자전화</th>
|
||||||
<td><span id="span_realtor_tel_no">
|
<td><span id="span_realtor_tel_no">
|
||||||
<?= $article['realtor_tel_no'] ?>
|
<?= $article['realtor_tel_no'] ?>
|
||||||
</span></td>
|
</span></td>
|
||||||
@@ -229,14 +239,14 @@
|
|||||||
<span class="fw-semibold">중개인 요청사항</span>
|
<span class="fw-semibold">중개인 요청사항</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle" id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">중개인 요청사항</th>
|
<th>중개인 요청사항</th>
|
||||||
<td>
|
<td>
|
||||||
<textarea class="form-control" id="request_msg"
|
<textarea class="form-control" id="request_msg"
|
||||||
name="request_msg"
|
name="request_msg"
|
||||||
@@ -260,35 +270,35 @@
|
|||||||
<span class="fw-semibold">매물 정보</span>
|
<span class="fw-semibold">매물 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle" id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">등록일시</th>
|
<th>등록일시</th>
|
||||||
<td><span id="span_rdate"><?= $article['rdate'] ?></span></td>
|
<td><span id="span_rdate"><?= $article['rdate'] ?></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">의뢰인(매도자)</th>
|
<th>의뢰인(매도자)</th>
|
||||||
<td><span
|
<td><span
|
||||||
id="span_seller_nm"><?= $article['seller_nm'] ?></span>
|
id="span_seller_nm"><?= $article['seller_nm'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">매물구분</th>
|
<th>매물구분</th>
|
||||||
<td><span
|
<td><span
|
||||||
id="span_rlet_type_nm"><?= $article['rlet_type_nm'] ?></span>
|
id="span_rlet_type_nm"><?= $article['rlet_type_nm'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">지역구분</th>
|
<th>지역구분</th>
|
||||||
<td><span id="span_address1"><?= $article['address1'] ?></span>
|
<td><span id="span_address1"><?= $article['address1'] ?></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">단지명</th>
|
<th>단지명</th>
|
||||||
<td><span id="span_hscp_nm">
|
<td><span id="span_hscp_nm">
|
||||||
<?= $article['hscp_nm'] ?>
|
<?= $article['hscp_nm'] ?>
|
||||||
</span></td>
|
</span></td>
|
||||||
@@ -382,7 +392,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">리 주소</th>
|
<th>리 주소</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="form-control form-control-sm"
|
<input type="text" class="form-control form-control-sm"
|
||||||
name="address2a" id="address2a"
|
name="address2a" id="address2a"
|
||||||
@@ -390,7 +400,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">상세주소</th>
|
<th>상세주소</th>
|
||||||
<td class="d-flex gap-1">
|
<td class="d-flex gap-1">
|
||||||
<input type="text" class="form-control form-control-sm"
|
<input type="text" class="form-control form-control-sm"
|
||||||
name="address2b" id="address2b"
|
name="address2b" id="address2b"
|
||||||
@@ -402,7 +412,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">기타주소</th>
|
<th>기타주소</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="form-control form-control-sm"
|
<input type="text" class="form-control form-control-sm"
|
||||||
name="address4" id="address4"
|
name="address4" id="address4"
|
||||||
@@ -411,7 +421,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">거래구분/가격</th>
|
<th>거래구분/가격</th>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
<?php
|
||||||
$isSale = (substr($article['trade_type'] ?? '', 0, 1) === 'A'); // 매매(A*) 여부
|
$isSale = (substr($article['trade_type'] ?? '', 0, 1) === 'A'); // 매매(A*) 여부
|
||||||
@@ -506,7 +516,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">분양가/프리미엄</th>
|
<th>분양가/프리미엄</th>
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex flex-wrap gap-1 align-items-center">
|
<div class="d-flex flex-wrap gap-1 align-items-center">
|
||||||
<span class="text-muted">분양가</span>
|
<span class="text-muted">분양가</span>
|
||||||
@@ -537,7 +547,7 @@
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light"><?= esc($floorLabel) ?></th>
|
<th><?= esc($floorLabel) ?></th>
|
||||||
|
|
||||||
<!-- ⚠️ td에 d-flex 주면 table-cell 깨질 수 있어서 내부 div로 감싸는 걸 추천 -->
|
<!-- ⚠️ td에 d-flex 주면 table-cell 깨질 수 있어서 내부 div로 감싸는 걸 추천 -->
|
||||||
<td>
|
<td>
|
||||||
@@ -565,7 +575,7 @@
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">가주소 여부</th>
|
<th>가주소 여부</th>
|
||||||
<td <?= $vir_style ?>>
|
<td <?= $vir_style ?>>
|
||||||
|
|
||||||
<?= $article['vir_addr_yn'] ?>
|
<?= $article['vir_addr_yn'] ?>
|
||||||
@@ -573,7 +583,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">소유자명</th>
|
<th>소유자명</th>
|
||||||
<td style="color:#FF0000;">
|
<td style="color:#FF0000;">
|
||||||
<?php
|
<?php
|
||||||
if ($article['stat_cd'] == '19' || $article['stat_cd'] == '60' || $article['stat_cd'] == '69') {
|
if ($article['stat_cd'] == '19' || $article['stat_cd'] == '60' || $article['stat_cd'] == '69') {
|
||||||
@@ -595,7 +605,7 @@
|
|||||||
if (!empty($article['vrfc_type_sub'])):
|
if (!empty($article['vrfc_type_sub'])):
|
||||||
if ($article['vrfc_type_sub'] == 'D2'): ?>
|
if ($article['vrfc_type_sub'] == 'D2'): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">소유자명 확인</th>
|
<th>소유자명 확인</th>
|
||||||
<td>
|
<td>
|
||||||
<select class="form-select" name="chkOwnerNm"
|
<select class="form-select" name="chkOwnerNm"
|
||||||
id="chkOwnerNm" onchange="chkOwnerNm_onchange()">
|
id="chkOwnerNm" onchange="chkOwnerNm_onchange()">
|
||||||
@@ -630,21 +640,21 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-2 align-middle">
|
<table class="table table-sm table-bordered mb-2 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 140px;">
|
<col style="width: 140px;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">확인담당자</th>
|
<th>확인담당자</th>
|
||||||
<td>
|
<td>
|
||||||
<?= session('usr_nm') . ' [' . session('usr_id') . ']'; ?>
|
<?= session('usr_nm') . ' [' . session('usr_id') . ']'; ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">확인여부</th>
|
<th>확인여부</th>
|
||||||
<td>
|
<td>
|
||||||
<select class="form-select form-select-sm"
|
<select class="form-select form-select-sm"
|
||||||
name="result_d11" id="result_d11"
|
name="result_d11" id="result_d11"
|
||||||
@@ -662,10 +672,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">홍보확인서<br>미확인 상세</th>
|
<th>홍보확인서<br>미확인 상세</th>
|
||||||
<td>
|
<td>
|
||||||
<!-- 체크박스는 테이블 유지하되 bootstrap spacing만 -->
|
<!-- 체크박스는 테이블 유지하되 bootstrap spacing만 -->
|
||||||
<table class="table table-borderless table-sm mb-0">
|
<table
|
||||||
|
class="table table-borderless table-sm mb-0 tbl_basic2">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<?php
|
<?php
|
||||||
@@ -726,7 +737,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">확인내용</th>
|
<th>확인내용</th>
|
||||||
<td>
|
<td>
|
||||||
<select class="form-select form-select-sm"
|
<select class="form-select form-select-sm"
|
||||||
name="fax_conf_yn_0" id="fax_conf_yn_0"
|
name="fax_conf_yn_0" id="fax_conf_yn_0"
|
||||||
@@ -739,7 +750,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">매물주소</th>
|
<th>매물주소</th>
|
||||||
<td class="d-flex gap-1">
|
<td class="d-flex gap-1">
|
||||||
<?php
|
<?php
|
||||||
switch ($confirm['code_d12'] ?? '') {
|
switch ($confirm['code_d12'] ?? '') {
|
||||||
@@ -775,7 +786,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">가격 거래구분</th>
|
<th>가격 거래구분</th>
|
||||||
<td class="d-flex gap-1">
|
<td class="d-flex gap-1">
|
||||||
<?php
|
<?php
|
||||||
switch ($confirm['code_d13'] ?? '') {
|
switch ($confirm['code_d13'] ?? '') {
|
||||||
@@ -811,7 +822,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">의뢰인정보</th>
|
<th>의뢰인정보</th>
|
||||||
<td class="d-flex gap-1">
|
<td class="d-flex gap-1">
|
||||||
<?php
|
<?php
|
||||||
switch ($confirm['code_d14'] ?? '') {
|
switch ($confirm['code_d14'] ?? '') {
|
||||||
@@ -848,7 +859,7 @@
|
|||||||
|
|
||||||
<?php if (!empty($article['memo'])): ?>
|
<?php if (!empty($article['memo'])): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-nowrap bg-light">메모</th>
|
<th>메모</th>
|
||||||
<td>
|
<td>
|
||||||
<textarea class="form-control form-control-sm"
|
<textarea class="form-control form-control-sm"
|
||||||
name="memo_cal" id="memo_cal" rows="3"
|
name="memo_cal" id="memo_cal" rows="3"
|
||||||
@@ -858,7 +869,7 @@
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<tr id="res_tr" style="display:none">
|
<tr id="res_tr" style="display:none">
|
||||||
<th class="text-nowrap bg-light">거주여부</th>
|
<th>거주여부</th>
|
||||||
<td>
|
<td>
|
||||||
<?php $resYn = $article['resYn'] ?? ''; ?>
|
<?php $resYn = $article['resYn'] ?? ''; ?>
|
||||||
<select class="form-select form-select-sm" name="resYn"
|
<select class="form-select form-select-sm" name="resYn"
|
||||||
@@ -872,7 +883,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr id="db_tr" style="display:none">
|
<tr id="db_tr" style="display:none">
|
||||||
<th class="text-nowrap bg-light">
|
<th>
|
||||||
<div id="db_yn1">DB활용동의여부</div>
|
<div id="db_yn1">DB활용동의여부</div>
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -589,7 +589,7 @@ if (!empty($regist2)) {
|
|||||||
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
||||||
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark"><?= $tel['file_size'] ?>kb</span>
|
<span class="badge text-dark"><?= $tel['file_size'] ?>kb</span>
|
||||||
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
<input type="hidden" name="chk_trade_type" id="chk_trade_type" value="<?= $data['trade_type'] ?>" />
|
<input type="hidden" name="chk_trade_type" id="chk_trade_type" value="<?= $data['trade_type'] ?>" />
|
||||||
<input type="hidden" name="chk_hscp_no" id="chk_hscp_no" value="<?= $data['chk_hscp_no'] ?>" />
|
<input type="hidden" name="chk_hscp_no" id="chk_hscp_no" value="<?= $data['chk_hscp_no'] ?>" />
|
||||||
<input type="hidden" name="atcl_no" id="atcl_no" value="<?= $data['atcl_no'] ?>" />
|
<input type="hidden" name="atcl_no" id="atcl_no" value="<?= $data['atcl_no'] ?>" />
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -181,13 +181,12 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark"
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
id="span_current_stat"></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-2 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-2 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 110px;">
|
<col style="width: 110px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -301,7 +300,7 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
|
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -671,7 +670,7 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
|
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -691,7 +690,7 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
<tr>
|
<tr>
|
||||||
<th>등기부등본 <br />미확인여부<br />상세</th>
|
<th>등기부등본 <br />미확인여부<br />상세</th>
|
||||||
<td>
|
<td>
|
||||||
<table class="w-100">
|
<table class="w-100 tbl_basic2 table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<?php
|
<?php
|
||||||
$checks = explode('|', $data['comment']);
|
$checks = explode('|', $data['comment']);
|
||||||
@@ -910,7 +909,7 @@ if (!empty($data['confirm_doc_img_url']) && $data['confirm_doc_img_url_save_yn']
|
|||||||
</div> -->
|
</div> -->
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
|
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
@@ -493,7 +493,7 @@ if (!empty($list['cert_register']) && $list['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
@@ -525,7 +525,7 @@ if (!empty($list['cert_register']) && $list['cert_register_save_yn'] != 'Y') { /
|
|||||||
<tr>
|
<tr>
|
||||||
<th>홍보확인서<br>미확인여부상세</th>
|
<th>홍보확인서<br>미확인여부상세</th>
|
||||||
<td>
|
<td>
|
||||||
<table class="w-100">
|
<table class="w-100 tbl_basic2 table-bordered">
|
||||||
<tr>
|
<tr>
|
||||||
<?php
|
<?php
|
||||||
$checks = explode('|', $data['comment']);
|
$checks = explode('|', $data['comment']);
|
||||||
@@ -724,7 +724,7 @@ if (!empty($list['cert_register']) && $list['cert_register_save_yn'] != 'Y') { /
|
|||||||
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
<a href="<?= $tel['file_url'] ?? '#' ?>" class="text-decoration-none">
|
||||||
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
<i class="fa fa-file-audio-o me-1"></i><?= $tel['file_name'] ?>
|
||||||
</a>
|
</a>
|
||||||
<span class="badge bg-light text-dark"><?= $tel['file_size'] ?>kb</span>
|
<span class="badge text-dark"><?= $tel['file_size'] ?>kb</span>
|
||||||
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
<span class="text-muted"><?= $tel['insert_tm'] ?></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -965,7 +965,7 @@ if (!empty($list['cert_register']) && $list['cert_register_save_yn'] != 'Y') { /
|
|||||||
|
|
||||||
<!-- 우측 : 정보 -->
|
<!-- 우측 : 정보 -->
|
||||||
<td valign="top" class="pt-2">
|
<td valign="top" class="pt-2">
|
||||||
<table class="tbl_basic4 w-100">
|
<table class="tbl_basic4 w-100 tbl_basic2 table-bordered">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="30%">
|
<col width="30%">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<!-- table 유지 + 반응형 -->
|
<!-- table 유지 + 반응형 -->
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -117,8 +117,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark"
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
id="span_current_stat"></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<!-- table 유지 + 반응형 -->
|
<!-- table 유지 + 반응형 -->
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -117,8 +117,7 @@ $usr_level = session('usr_level');
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark"
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
id="span_current_stat"></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ function parseurl($url)
|
|||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -202,14 +202,13 @@ function parseurl($url)
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark"
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
id="span_current_stat"></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-2 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-2 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 110px;">
|
<col style="width: 110px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -294,7 +293,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">매물 정보</span>
|
<span class="fw-semibold">매물 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -675,7 +675,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">확인 정보</span>
|
<span class="fw-semibold">확인 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -942,7 +943,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">기타 정보</span>
|
<span class="fw-semibold">기타 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ function parseurl($url)
|
|||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-bordered table-sm align-middle mb-0" style="min-width: 900px;">
|
<table class="table table-bordered table-sm tbl_basic2 align-middle mb-0" style="min-width: 900px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 60%;">
|
<col style="width: 60%;">
|
||||||
<col style="width: 40%;">
|
<col style="width: 40%;">
|
||||||
@@ -197,13 +197,13 @@ function parseurl($url)
|
|||||||
<div class="d-flex align-items-center w-100">
|
<div class="d-flex align-items-center w-100">
|
||||||
<span class="fw-semibold">기본 정보</span>
|
<span class="fw-semibold">기본 정보</span>
|
||||||
<div class="ms-auto">
|
<div class="ms-auto">
|
||||||
<span class="badge bg-light text-dark" id="span_current_stat"></span>
|
<span class="badge text-dark" id="span_current_stat"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-2 tbl_basic2 align-middle">
|
<table class="table table-sm table-bordered mb-2 tbl_basic2 align-middle">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 110px;">
|
<col style="width: 110px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -254,7 +254,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">매물 정보</span>
|
<span class="fw-semibold">매물 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -615,7 +616,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">확인 정보</span>
|
<span class="fw-semibold">확인 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
@@ -832,7 +834,8 @@ function parseurl($url)
|
|||||||
<span class="fw-semibold">기타 정보</span>
|
<span class="fw-semibold">기타 정보</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<table class="table table-sm mb-0 tbl_basic2 align-middle" id="info_table">
|
<table class="table table-sm table-bordered mb-0 tbl_basic2 align-middle"
|
||||||
|
id="info_table">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 120px;">
|
<col style="width: 120px;">
|
||||||
<col>
|
<col>
|
||||||
|
|||||||
Reference in New Issue
Block a user