Compare commits

...

32 Commits

Author SHA1 Message Date
yangsh
b51f2fddcf 상세 레이아웃 수정
Some checks failed
Close Pull Request / main (pull_request_target) Has been cancelled
2026-01-27 15:47:38 +09:00
2f5b1a7da6 vrfcReqModel 수정 2026-01-23 21:40:56 +09:00
20e6398005 vrfcReqModel 수정 2026-01-23 21:37:01 +09:00
1de224627e vrfcReqModel 수정 2026-01-23 21:30:50 +09:00
9b9e752bd1 vrfcReqModel 수정 2026-01-23 21:24:56 +09:00
1cb1e6837b vrfcReqModel 수정 2026-01-23 21:21:51 +09:00
b5e06188b1 vrfcReqModel 수정 2026-01-23 21:18:55 +09:00
c375d84874 vrfcReqModel 수정 2026-01-23 20:54:59 +09:00
1d6dc49971 vrfcReqModel 수정 2026-01-23 20:49:21 +09:00
dbe85efcef vrfcReqModel 수정 2026-01-23 20:29:16 +09:00
253a5de579 vrfcReqModel 수정 2026-01-23 19:27:14 +09:00
52213c3ad4 vrfcReqModel 수정 2026-01-23 19:26:12 +09:00
87dd69d703 vrfcReqModel 수정 2026-01-23 19:19:58 +09:00
e394acd7cc vrfcReqModel 수정 2026-01-23 19:05:41 +09:00
7c48d1134f vrfcReqModel 수정 2026-01-23 18:29:30 +09:00
0d1c6855e5 vrfcReqModel 수정 2026-01-23 18:25:32 +09:00
43d45332ef vrfcReqModel 수정 2026-01-23 18:17:16 +09:00
55e1cdf82a vrfcReqModel 수정 2026-01-23 18:16:50 +09:00
3dc24d011a file 2026-01-23 18:14:12 +09:00
5ae247fe91 file 2026-01-23 18:11:36 +09:00
9a3a8ed4e3 file 2026-01-23 18:04:33 +09:00
1993013193 write 2026-01-23 17:49:31 +09:00
9f511b4dba service 2026-01-23 17:46:34 +09:00
522b89fb9f qrcode 추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/40
2026-01-23 16:24:25 +09:00
cac86ffc7a fax cron추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/39
2026-01-23 15:14:07 +09:00
112923c459 스크립트 오류수정
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/38
2026-01-23 11:26:23 +09:00
1761e31587 배정내역 엑셀 추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/37
2026-01-23 11:22:10 +09:00
0114faae2b 쿠키 삭제 추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/36
2026-01-22 17:24:33 +09:00
f17dc88f99 상세수정
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/35
2026-01-22 17:02:50 +09:00
32b869f05b 테이블명 수정
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/34
2026-01-21 14:53:35 +09:00
69bcf05457 아이디 저장 추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/33
2026-01-21 14:22:41 +09:00
b9a77a1d00 금리비교 추가
Reviewed-on: http://192.168.10.243:3000/owrainfo/confirms/pulls/32
2026-01-21 12:04:06 +09:00
21 changed files with 562 additions and 411 deletions

6
.gitignore vendored
View File

@@ -171,4 +171,8 @@ _modules/*
/dist/ /dist/
/node_modules/ /node_modules/
.env .env
**/logs/ **/logs/
# 6. 기타 개인 설정 파일 (선택적)
.github/copilot-instructions.md

View File

@@ -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);
} }
} }
} }

View File

@@ -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';

View File

@@ -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';

View File

@@ -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

View File

@@ -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 v2Parameter($articleNumber, $rawData , $payload){
*/ $now = db_now();
private function updateVrfcReq($articleNumber, $params) $step = isset($rawData['step']) ? $rawData['step'] : '00';
{ $rdate = $payload['requestDate'] ?? db_now('YmdHis');
$insert_user = 0;
// 1. 데이터 존재 여부 확인 $stat_cd = '10';
$existing = $this->VrfcReqModel->where('atcl_no', $articleNumber)->first(); $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,
];
}
} }

View File

@@ -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');
} }
} }

View File

@@ -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">

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>