From abf369dcd6a0609506147b1b466a26b4ee59b772 Mon Sep 17 00:00:00 2001 From: yangsh Date: Thu, 22 Jan 2026 17:02:14 +0900 Subject: [PATCH] =?UTF-8?q?=EC=83=81=EC=84=B8=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Config/Routes.php | 11 +- app/Controllers/Article/Dept2.php | 48 + app/Controllers/Article/Receipt.php | 268 +- app/Libraries/Common.php | 102 + app/Models/article/DeptModel.php | 142 +- app/Models/article/ReceiptModel.php | 408 ++- app/Models/common/CodeModel.php | 14 + app/Views/layouts/sidebar.php | 9 + app/Views/pages/article/dept/detail.php | 3396 ++++++++++++++------ app/Views/pages/article/dept/lists.php | 21 + app/Views/pages/article/receipt/detail.php | 1474 ++++++++- app/Views/pages/article/record/detail.php | 3396 ++++++++++++++------ public/plugin/img/video.png | Bin 0 -> 6472 bytes 13 files changed, 7133 insertions(+), 2156 deletions(-) create mode 100644 public/plugin/img/video.png diff --git a/app/Config/Routes.php b/app/Config/Routes.php index c210a8b..8a7749c 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -67,6 +67,13 @@ $routes->group('', ['namespace' => 'App\Controllers\Article'], static function ( $routes->get('excel', 'Receipt::excel'); $routes->post('saveTel', 'Receipt::saveTel'); // 연락가능전화 저장 + $routes->post('resGround', 'Receipt::resGround'); // 평면도요청 저장 + $routes->post('assignRegist', 'Receipt::assignRegist'); // 예약확정 저장 + $routes->post('requestMovie', 'Receipt::requestMovie'); // 동영상 촬영여부저장 + $routes->post('requestMessage', 'Receipt::requestMessage'); // 중개사메모 저장 + $routes->post('rsrvcancel', 'Receipt::rsrvcancel'); // 예약취소 + $routes->post('sendSms', 'Receipt::sendSms'); // 문자발송 + $routes->post('saveRecInfo', 'Receipt::saveRecInfo'); // 거주인정보저장 }); @@ -75,7 +82,7 @@ $routes->group('', ['namespace' => 'App\Controllers\Article'], static function ( */ $routes->group('article/dept', static function ($routes) { $routes->get('lists', 'Dept::lists'); - $routes->get('detail/(:num)', 'Dept::detail/$1'); + $routes->get('detail/(:num)', 'Receipt::detail/$1'); $routes->get('getResultList', 'Dept::getResultList'); $routes->get('excel', 'Dept::excel'); @@ -89,7 +96,7 @@ $routes->group('', ['namespace' => 'App\Controllers\Article'], static function ( */ $routes->group('article/record', static function ($routes) { $routes->get('lists', 'Record::lists'); - $routes->get('detail/(:num)', 'Record::detail/$1'); + $routes->get('detail/(:num)', 'Receipt::detail/$1'); $routes->get('getResultList', 'Record::getResultList'); $routes->get('excel', 'Record::excel'); diff --git a/app/Controllers/Article/Dept2.php b/app/Controllers/Article/Dept2.php index 50c7a18..d1a780b 100644 --- a/app/Controllers/Article/Dept2.php +++ b/app/Controllers/Article/Dept2.php @@ -136,4 +136,52 @@ class Dept2 extends BaseController $e->getPrevious()->getTraceAsString(); } } + + // 배정내역 excel + public function excel2() + { + try { + + $data = [ + 'req_rec_yn' => 'Y', + 'rcpt_atclno' => $this->request->getGet('rcpt_atclno'), // 매물ID + + 'sdate' => $this->request->getGet('sdate'), // 시작일 + 'edate' => $this->request->getGet('edate'), // 종료일 + + 'rsrv_tm_ap' => $this->request->getGet('rsrv_tm_ap'), // 유형 + 'rsrv_sdate' => $this->request->getGet('rsrv_sdate'), // 시작일 + 'rsrv_edate' => $this->request->getGet('rsrv_edate'), // 종료일 + + 'bonbu' => $this->request->getGet('bonbu'), // 본부 + 'team' => $this->request->getGet('team'), // 팀 + 'user' => $this->request->getGet('user'), // 담당자 + + 'sido' => $this->request->getGet('sido'), // 시도 + 'gugun' => $this->request->getGet('gugun'), // 시군구 + 'dong' => $this->request->getGet('dong'), // 읍면동 + + 'ground_plan_yn' => $this->request->getGet('ground_plan_yn'), // 평면도유무 + 'ground_plan' => $this->request->getGet('ground_plan'), // 평면도요청 + 'direct_trad_yn' => $this->request->getGet('direct_trad_yn'), // 직거래 + + 'isSiteVRVerification' => $this->request->getGet('isSiteVRVerification'), // 검증방식 + 'conf_img_yn' => $this->request->getGet('conf_img_yn'), // 홍보확인서 여부 + + 'stat' => $this->request->getGet('stat'), + + 'srchType' => $this->request->getGet('srchType'), // 검색유형 + 'srchTxt' => $this->request->getGet('srchTxt'), // 검색어 + ]; + + $datas = $this->model->getExcelList($data); + + return $this->response->setJSON(body: [ + 'data' => $datas, + ]); + + } catch (\Exception $e) { + $e->getPrevious()->getTraceAsString(); + } + } } \ No newline at end of file diff --git a/app/Controllers/Article/Receipt.php b/app/Controllers/Article/Receipt.php index 5b685ad..669119f 100644 --- a/app/Controllers/Article/Receipt.php +++ b/app/Controllers/Article/Receipt.php @@ -2,6 +2,7 @@ namespace App\Controllers\Article; use App\Controllers\BaseController; +use App\Libraries\MyUpload; use App\Models\article\ReceiptModel; use App\Models\common\CodeModel; @@ -146,29 +147,65 @@ class Receipt extends BaseController throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound(); } - $codes = $this->codeModel->getCodeLists(['TRADE_TYPE', 'RECEIPT_STATUS2', 'RECEIPT_STATUS3', 'SMS_MSG_TYPE']); // 코드조회 + $codes = $this->codeModel->getCodeLists(['TRADE_TYPE', 'RECEIPT_STATUS2', 'RECEIPT_STATUS3', 'SMS_MSG_TYPE', 'SMS_MSG_TYPE2']); // 코드조회 $bonbu = $this->model->getBonbuList(); $team = $this->model->getTeamList(); + // sms 코드 + $sms = []; + foreach ($codes as $c) { + if ($c['category'] === "SMS_MSG_TYPE2") + array_push($sms, $c); + } + $data = $this->model->getDetail($id); $history = $this->model->getHistory($id); - $aptGround = $this->model->getAptGround($data['rcpt_dong']); + if ($data['rcpt_jibun_addr']) { + $dupleGroundPlan = $this->model->getDupleGP_na($id, $data['rcpt_sido'], $data['rcpt_gugun'], $data['rcpt_dong'], $data['rcpt_hscp_nm'], $data['rcpt_dtl_addr'], $data['rcpt_li_addr'], $data['rcpt_jibun_addr'], $data['rcpt_etc_addr']); + } else { + $dupleGroundPlan = $this->model->getDupleGP($id, $data['rcpt_sido'], $data['rcpt_gugun'], $data['rcpt_dong'], $data['rcpt_hscp_nm'], $data['rcpt_dtl_addr'], $data['rcpt_ho']); + } + $aptGround = $this->model->getAptGround($data['rcpt_dong'] ?? ''); + + + // 이미지 파일리스트 + $images = $this->model->getImageList2($data['rsrv_sq']); + $imgs_count = $this->model->getImageCountByType($data['rsrv_sq']); + $imgs_count = convertArrayToHashTable($imgs_count, 'img_type', 'img_cnt'); + + //녹취파일 + $record = $this->model->getRecordInfo($data['rsrv_sq']); // 시간대별통계 $tmCount = $this->model->getUsrRsrvDateTmCount($id); + // 체크리스트 조회 + if ($data['exp_photo_yn'] === "N") { + $result_check = $this->model->getChecklist($data['rsrv_sq']); + } else { + $result_check = []; + } + $this->data['codes'] = $codes; $this->data['bonbu'] = $bonbu; $this->data['team'] = $team; + $this->data['sms'] = $sms; $this->data['data'] = $data; $this->data['history'] = $history; + $this->data['dupleGroundPlan'] = $dupleGroundPlan; $this->data['apt_ground'] = $aptGround; + $this->data['images'] = $images; + $this->data['imgs_count'] = $imgs_count; + + $this->data['record'] = $record; + $this->data['tmCount'] = $tmCount; + $this->data['result_check'] = $result_check; return view("pages/article/receipt/detail", $this->data); @@ -185,6 +222,233 @@ class Receipt extends BaseController $this->model->saveTel($tel); + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 평면도요청 저장 + public function resGround() + { + try { + + $rcpt_sq = $this->request->getPost('rcpt_sq'); + $ground_plan = $this->request->getPost('ground_plan'); + + $this->model->saveGround($rcpt_sq, $ground_plan); + + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 예약확정 저장 + public function assignRegist() + { + try { + + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 동영상촬영여부 저장 + public function requestMovie() + { + try { + + $rcpt_sq = $this->request->getPost('rcpt_sq'); + $rsrv_sq = $this->request->getPost('rsrv_sq'); + $exp_movie_yn = $this->request->getPost('exp_movie_yn'); + + $this->model->saveRequestMovie($rcpt_sq, $rsrv_sq, $exp_movie_yn); + + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 중개사메모 저장 + public function requestMessage() + { + try { + + $rcpt_sq = $this->request->getPost('rcpt_sq'); + $rsrv_sq = $this->request->getPost('rsrv_sq'); + $request_msg = $this->request->getPost('request_msg'); + + $this->model->saveRequestMessage($rcpt_sq, $rsrv_sq, $request_msg); + + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 예약취소 + public function rsrvcancel() + { + try { + + + + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + + // 문자발송 + public function sendSms() + { + try { + $rcpt_key = $this->request->getPost('rcpt_key'); + $rcpt_sq = $this->request->getPost('rcpt_sq'); + $rsrv_sq = $this->request->getPost('rsrv_sq'); + $cd = $this->request->getPost('cd'); + + $send_phone = "1600-5749"; + $phone = $this->request->getPost('phone'); + $content = $this->request->getPost('content'); + $send_nm = session('usr_nm'); + + $data = $this->model->getDetail($rcpt_key); + + $dest_name = ""; + if ($cd == "S7" || $cd == "S14") { + $dest_name = "(거주인)" . $data['rec_nm']; + } else { + $dest_name = "(중개인)" . $data['agent_nm']; + } + + $this->model->sendSms($phone, "", $send_phone, $send_nm, $dest_name, $rsrv_sq, $rcpt_sq, $cd, $data); + + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success' + ]); + + } catch (\Exception $e) { + return $this->response->setJSON([ + 'code' => '9', + 'msg' => $e->getMessage(), + ]); + } + } + + // 거주인정보저장 + public function saveRecInfo() + { + $lib = new MyUpload(); + + try { + + $rcpt_sq = $this->request->getPost('rcpt_sq'); + $rcpt_key = $this->request->getPost('rcpt_key'); + $rsrv_sq = $this->request->getPost('rsrv_sq'); + + $rec_tel1 = $this->request->getPost('rec_tel1'); + $rec_tel2 = $this->request->getPost('rec_tel2'); + $rec_tel3 = $this->request->getPost('rec_tel3'); + $rec_tel = $rec_tel1 . '-' . $rec_tel2 . '-' . $rec_tel3; + + $rec_nm = $this->request->getPost('rec_nm'); + $rec_remark = $this->request->getPost('rec_remark'); + + $file = $this->request->getFile('rec_file'); + + $data = [ + 'rcpt_sq' => $rcpt_sq, + 'rsrv_sq' => $rsrv_sq, + 'rcpt_key' => $rcpt_key, + 'rec_tel' => $rec_tel, + 'rec_nm' => $rec_nm, + 'rec_remark' => $rec_remark, + ]; + + if ($file && $file->isValid() && !$file->hasMoved()) { + + $uploadPath = "/upload/result/" . $rsrv_sq . "/"; + + $arrUploadfile = []; + if ($file->isValid() && !$file->hasMoved()) { + $uploadData = $lib->do_upload2($file, $uploadPath); + + if ($uploadData !== false) { + $arrUploadfile[] = $uploadData; + } + } + + if (!empty($arrUploadfile)) { + foreach ($arrUploadfile as $key => $uploadFile) { + $data['file'] = [ + 'orig_name' => $uploadFile['origin_name'], + 'new_name' => $uploadFile['file_name'], + 'file_path' => $uploadPath, // 필요에 따라 상대경로로만 저장 + 'ext' => '.' . $uploadFile['ext'], + 'size' => $file->getSize(), + ]; + } + + } + + + } + + $this->model->saveRecInfo($data); + return $this->response->setJSON([ 'code' => '0', 'msg' => 'success' diff --git a/app/Libraries/Common.php b/app/Libraries/Common.php index 3cc0158..c2232c8 100644 --- a/app/Libraries/Common.php +++ b/app/Libraries/Common.php @@ -33,6 +33,108 @@ class Common return $pagination; } + /** + * 워터마킹하기 + */ + public function watermarking($imagePath, $watermark_info, $wmText, $cpid, $key = '') + { + + + $CI =& get_instance(); + + $CI->load->library('upload'); + + $wmImagePath = ''; // 워터마크 이미지의 경로 + $wmSpaceHeihgt = 0; // 워터마크 이미지 하단 공백 + $wmFont = ''; // 워터마크 텍스트(글꼴) + $wmFontSize = 13; // 워터마크 텍스트(글꼴) 크기 + $wmTextHeight = 17; // 워터마크 텍스트의 높이 + $wmTextColor = '#FFFFFF'; // 워터마크 텍스트의 칼라 + $wmTextAlpha = 0.5; // 워터마크 텍스트 투명도 + + try { + + // $img = new Imagick($imagePath); + $img = new \Imagick(); + $img->readImageBlob($imagePath); + + $hImg = $img->getImageHeight(); + $wImg = $img->getImageWidth(); + + foreach ($watermark_info as $watermark) { + if (strtolower($watermark['cpid']) == strtolower($cpid)) { + $img_w_min = intval($watermark['img_width_min']); + $img_w_max = intval($watermark['img_width_max']); + if (($img_w_min <= $wImg) and ($img_w_max >= $wImg)) { + $wmImagePath = $watermark['wm_img_path']; + $wmSpaceHeihgt = $watermark['wm_space']; + $wmFont = $watermark['text_font']; + $wmFontSize = intval($watermark['text_size']); + $wmTextHeight = intval($watermark['text_pixel']); + $wmTextColor = $watermark['text_color']; + $wmTextAlpha = $watermark['text_opacity'] / 100; + break; + } + } + } + + if (empty($wmImagePath)) + return; + + if (substr($wmImagePath, 0, 1) == '/') { + $wmImagePath = substr($wmImagePath, 1); + } + + + // echo FCPATH.$wmImagePath; + + + + $wm = new Imagick(FCPATH . $wmImagePath); + $hWm = $wm->getImageHeight(); + $wWm = $wm->getImageWidth(); + + $wmImgLeft = floor(($wImg - $wWm) / 2); + $wmImgTop = floor(($hImg - $hWm - $wmSpaceHeihgt - $wmTextHeight) / 2); // 워터마크 이미지의 위치 top + $wmTxtTop = $wmImgTop + $hWm + $wmSpaceHeihgt + ($wmTextHeight * 0.6); // 워터마크 텍스트의 위치 + + $img->compositeImage($wm, imagick::COMPOSITE_OVER, $wmImgLeft, $wmImgTop, imagick::ALIGN_CENTER); + $wm->destroy(); + + $draw = new \ImagickDraw(); + + $wmFont = BASEPATH . 'fonts/' . $wmFont; + $draw->setFont($wmFont); + + $draw->setFontSize($wmFontSize); + $draw->setFillColor(new ImagickPixel($wmTextColor)); + // $draw->setFillAlpha( $wmTextAlpha ); + $draw->setFillOpacity($wmTextAlpha); // 워터마크 텍스트 투명도 설정 + $draw->setTextAlignment(2); // center + $draw->setStrokeAntialias(1); + $draw->setStrokeWidth(1); + $draw->setStrokeColor(new ImagickPixel('#000000')); + // $draw->setStrokeAlpha(0.1); + $draw->setStrokeOpacity(0.1); + $draw->annotation($wImg / 2, $wmTxtTop, $wmText); + + $img->drawImage($draw); + $draw->destroy(); + + // $img->writeImage(); + + $watermark_img = $img->getImageBlob(); + + $CI->upload->upload_object_storage_imagick($key, $watermark_img); + $img->destroy(); + + // $object_upload = $this->upload->upload_object_storage($imagePath , $imagePath , 'data'); + } catch (Exception $e) { + echo $e->getMessage(); + } + + } + /** * 서버상의 위치를 웹상의 위치로 변경한다... diff --git a/app/Models/article/DeptModel.php b/app/Models/article/DeptModel.php index 3c1cdbe..cb9bede 100644 --- a/app/Models/article/DeptModel.php +++ b/app/Models/article/DeptModel.php @@ -135,7 +135,7 @@ class DeptModel extends Model $builder->where('a.rcpt_atclno', $data['rcpt_atclno']); } else { - $builder->where('a.isSiteVRVerification', 'N'); + // $builder->where('a.isSiteVRVerification', 'N'); // 접수일자 /* @@ -228,10 +228,7 @@ class DeptModel extends Model $builder->groupStart() ->like('a.agent_nm', $data['srchTxt']) ->orLike('a.sellr_nm', $data['srchTxt']) - ->groupEnd(); - - $builder->groupStart() - ->like('a.agent_head_tel', $data['srchTxt']) + ->orLike('a.agent_head_tel', $data['srchTxt']) ->orLike('a.sellr_tel_no', $data['srchTxt']) ->groupEnd(); } @@ -277,7 +274,7 @@ class DeptModel extends Model $builder->where('a.rcpt_atclno', $data['rcpt_atclno']); } else { - $builder->where('a.isSiteVRVerification', 'N'); + // $builder->where('a.isSiteVRVerification', 'N'); // 접수일자 /* @@ -418,7 +415,7 @@ class DeptModel extends Model $builder->where('a.rcpt_atclno', $data['rcpt_atclno']); } else { - $builder->where('b.req_rec_yn', 'Y'); + // $builder->where('b.req_rec_yn', 'Y'); // 접수일자 /* @@ -662,7 +659,7 @@ class DeptModel extends Model $builder->where('a.rcpt_atclno', $data['rcpt_atclno']); } else { - $builder->where('b.req_rec_yn', 'Y'); + // $builder->where('b.req_rec_yn', 'Y'); // 접수일자 /* @@ -769,10 +766,7 @@ class DeptModel extends Model $builder->groupStart() ->like('a.agent_nm', $data['srchTxt']) ->orLike('a.sellr_nm', $data['srchTxt']) - ->groupEnd(); - - $builder->groupStart() - ->like('a.agent_head_tel', $data['srchTxt']) + ->orLike('a.agent_head_tel', $data['srchTxt']) ->orLike('a.sellr_tel_no', $data['srchTxt']) ->groupEnd(); } @@ -845,97 +839,32 @@ class DeptModel extends Model $builder = $this->db->table('receipt a'); - $builder->select("a.rcpt_sq - ,a.comp_sq - ,a.rcpt_rating - ,a.rcpt_key - ,a.rcpt_atclno - ,a.rcpt_type - ,a.rcpt_product - ,a.rcpt_product_nm - ,a.rcpt_product_area - ,a.rcpt_product_price - ,a.rcpt_product_info1 - ,a.rcpt_product_info2 - ,a.rcpt_product_info3 - ,a.rcpt_product_info4 - ,a.rcpt_product_info5 - ,a.rcpt_ptp_nm - ,a.rcpt_office - ,(CASE WHEN a.rcpt_agent IS NULL THEN 'N' ELSE 'Y' END) as rcpt_agent - ,a.rcpt_sido - ,a.rcpt_gugun - ,a.rcpt_dong - ,IFNULL(a.rcpt_hscp_nm, '') AS rcpt_hscp_nm - ,IFNULL(a.rcpt_ho, '') AS rcpt_ho - ,a.rcpt_dtl_addr - ,a.rcpt_li_addr - ,a.rcpt_jibun_addr - ,IFNULL(a.rcpt_etc_addr, '') AS rcpt_etc_addr - ,a.rcpt_floor - ,a.rcpt_tm - ,a.rcpt_stat - ,a.rcpt_x - ,a.rcpt_y - ,a.rcpt_living_yn - ,a.cust_nm - ,a.cust_tel1 - ,a.cust_tel2 - ,a.cust_zip - ,a.cust_addr1 - ,a.cust_addr2 - ,a.remark - ,a.agent_id - ,a.agent_nm - ,a.agent_head - ,a.agent_head_tel - ,a.agent_contact - ,a.agent_contact_tel - ,IFNULL(a.agent_tel, '') AS agent_tel - ,a.sply_spc - ,a.excls_spc - ,a.room_cnt - ,a.exp_spc_yn - ,a.agent_fax - ,DATE_FORMAT(COALESCE(b.rsrv_date, a.rsrv_date), '%Y-%m-%d') AS rsrv_date - ,COALESCE(b.rsrv_tm_ap, a.rsrv_tm_ap) as rsrv_tm_ap - ,a.insert_usr - ,a.insert_tm - ,a.update_usr - ,a.update_tm - ,a.svc_type1 - ,a.svc_type2 - ,a.reconf_yn - ,f.cd_nm as trade_type_nm - ,b.rsrv_sq - ,b.dept_sq - ,b.usr_sq - ,b.rsrv_tm_hour - ,b.result_cd1 - ,b.result_cd2 - ,b.result_msg - ,b.request_msg - ,b.photo_save_dt - ,b.rsrv_delay_dt - ,b.rsrv_cplt_dt - ,b.check_dt - ,b.check_cplt_dt - ,b.record_cplt_dt - ,get_code_name('RECEIPT_STATUS1', substring(a.rcpt_stat, 1, 2)) AS rcpt_stat_nm - ,c.region_nm as addr - ,b.result_save_dt - ,u.usr_nm - ,d.dept_nm - ,a.exp_photo_yn - ,a.ground_plan - ,CASE (SELECT COUNT(1) FROM result_imgs WHERE rsrv_sq=b.rsrv_sq AND img_type = 'I1' AND use_yn = 'Y') WHEN 0 THEN 'N' ELSE 'Y' END conf_img_yn - ,CASE (SELECT COUNT(1) FROM result_imgs WHERE rsrv_sq=b.rsrv_sq AND img_type = 'I5' AND use_yn = 'Y') WHEN 0 THEN 'N' ELSE 'Y' END ground_plan_yn - ,a.exp_movie_yn - ,a.direct_trad_yn - ,a.sellr_nm - ,a.sellr_tel_no - ,a.isSiteVRVerification - ,a.isPromotionApply"); + $builder->select(" + CASE WHEN b.result_cd1 = '90' THEN get_code_name('RECEIPT_STATUS2', b.result_cd2) ELSE '' END AS '매물ID', + a.rcpt_atclno AS '예약일자', + b.rsrv_tm_hour AS '중개사명', + b.photo_save_dt AS '대표전화', + a.agent_contact_tel AS '담당자전화', + CASE + WHEN IFNULL(a.rcpt_jibun_addr, '') = '' THEN + CASE + WHEN IFNULL(a.rcpt_hscp_nm, '') = '' THEN + CONCAT(c.region_nm, ' ', a.rcpt_dtl_addr, ' ', a.rcpt_ho) + ELSE + CONCAT(c.region_nm, ' ', a.rcpt_hscp_nm, ' ', a.rcpt_dtl_addr, ' ', a.rcpt_ho) + END + ELSE + CASE + WHEN IFNULL(a.rcpt_li_addr, '') != '' THEN + CONCAT(c.region_nm, ' ', a.rcpt_li_addr, ' ', a.rcpt_jibun_addr, ' ', a.rcpt_etc_addr) + ELSE + CONCAT(c.region_nm, ' ', a.rcpt_jibun_addr, ' ', a.rcpt_etc_addr) + END + END AS '주소', + a.rcpt_product_nm AS '매물종류', + a.rcpt_product_info1 AS '거래구분', + u.usr_nm AS '담당자', + b.request_msg AS '중개사 요청사항'"); $builder->join('result b', 'a.rcpt_sq = b.rcpt_sq', 'left'); $builder->join('region_codes c', 'a.rcpt_dong = c.region_cd', 'inner'); @@ -958,7 +887,7 @@ class DeptModel extends Model $builder->where('a.rcpt_atclno', $data['rcpt_atclno']); } else { - $builder->where('b.req_rec_yn', 'Y'); + // $builder->where('b.req_rec_yn', 'Y'); // 접수일자 /* @@ -1065,10 +994,7 @@ class DeptModel extends Model $builder->groupStart() ->like('a.agent_nm', $data['srchTxt']) ->orLike('a.sellr_nm', $data['srchTxt']) - ->groupEnd(); - - $builder->groupStart() - ->like('a.agent_head_tel', $data['srchTxt']) + ->orLike('a.agent_head_tel', $data['srchTxt']) ->orLike('a.sellr_tel_no', $data['srchTxt']) ->groupEnd(); } diff --git a/app/Models/article/ReceiptModel.php b/app/Models/article/ReceiptModel.php index 9393699..30d8614 100644 --- a/app/Models/article/ReceiptModel.php +++ b/app/Models/article/ReceiptModel.php @@ -1,6 +1,7 @@ get()->getRowArray(); } + public function getDupleGP($rcpt_key, $rcpt_sido, $rcpt_gugun, $rcpt_dong, $rcpt_hscp_nm, $rcpt_dtl_addr, $rcpt_ho) + { + $sql = "select rcpt_sq, c.rcpt_key, c.photo_save_dt from" . + " (select a.rcpt_sq, b.rsrv_sq, a.rcpt_key, b.photo_save_dt " . + " from receipt a " . + " LEFT OUTER JOIN result b ON b.rcpt_sq = a.rcpt_sq " . + " where a.rcpt_sido = ? " . + " and a.rcpt_gugun = ? " . + " and a.rcpt_dong = ? " . + " and a.rcpt_hscp_nm = ? " . + " and a.rcpt_dtl_addr = ? " . + " and a.rcpt_ho = ? " . + " and a.insert_tm >= DATE_ADD(CURDATE(), INTERVAL -3 MONTH) " . + " and a.rcpt_key != ? " . + " and b.result_cd3 = 600000) c " . + " LEFT OUTER JOIN result_imgs d ON c.rsrv_sq = d.rsrv_sq " . + " where d.img_type = 'I5'"; + + $data = [ + $rcpt_sido, + $rcpt_gugun, + $rcpt_dong, + $rcpt_hscp_nm, + $rcpt_dtl_addr, + $rcpt_ho, + $rcpt_key + ]; + + $res = $this->db->query($sql, $data); + return $res->getResultArray(); + } + + public function getDupleGP_na($rcpt_key, $rcpt_sido, $rcpt_gugun, $rcpt_dong, $rcpt_hscp_nm, $rcpt_dtl_addr, $rcpt_li_addr, $rcpt_jibun_addr, $rcpt_etc_addr) + { + $sql = "select rcpt_sq, c.rcpt_key, c.photo_save_dt from" . + " (select a.rcpt_sq, b.rsrv_sq, a.rcpt_key, b.photo_save_dt " . + " from receipt a " . + " LEFT OUTER JOIN result b ON b.rcpt_sq = a.rcpt_sq " . + " where a.rcpt_sido = ? " . + " and a.rcpt_gugun = ? " . + " and a.rcpt_dong = ? " . + " and a.rcpt_hscp_nm = ? " . + " and a.rcpt_li_addr = ? " . + " and a.rcpt_jibun_addr = ? " . + " and a.rcpt_etc_addr = ? " . + " and a.insert_tm >= DATE_ADD(CURDATE(), INTERVAL -3 MONTH) " . + " and a.rcpt_key != ? " . + " and b.result_cd3 = 600000) c " . + " LEFT OUTER JOIN result_imgs d ON c.rsrv_sq = d.rsrv_sq " . + " where d.img_type = 'I5'"; + + $data = [ + $rcpt_sido, + $rcpt_gugun, + $rcpt_dong, + $rcpt_hscp_nm, + isset($rpct_li_addr) ? $rpct_li_addr : '', + $rcpt_jibun_addr, + $rcpt_etc_addr, + $rcpt_key + ]; + + $res = $this->db->query($sql, $data); + return $res->getResultArray(); + } + // 정보변경이력 public function getHistory($id) { + $sql = "SELECT rcpt_sq FROM receipt WHERE rcpt_key = ?"; + $query = $query = $this->db->query($sql, [$id]); + $rcpt_sq = $query->getRow()->rcpt_sq; + $sql = "SELECT seq" . " ,rcpt_sq" . " ,rcpt_stat" . @@ -1199,7 +1270,7 @@ class ReceiptModel extends Model " WHERE rcpt_sq = ?" . " ORDER BY changed_tm DESC"; - $data = [$id]; + $data = [$rcpt_sq]; $query = $this->db->query($sql, $data); return $query->getResultArray(); @@ -1254,6 +1325,60 @@ class ReceiptModel extends Model return $query2->getResultArray(); } + // 체크리스트 결과 조회 + public function getChecklist($rsrv_sq) + { + $sql = "select rsrv_sq, elevator_yn, maintenance_fee, elevator_cctv_yn, building_in_cctv_yn, building_ou_cctv_yn, heating_type, security_dept_yn, parking_lot_yn, interphone_yn, building_security_yn, window_direction, living_room_yn, balcony_yn, balcony_ext_yn, restroom_cnt, bath_yn, showerbooth_yn, utility_yn, built_in_chest_yn, airconditioner_yn, shoe_chest_yn, dress_room_yn, gas_stove_yn, refrigerator_yn, sink_yn, washing_machine_yn, insert_usr, insert_tm from result_check where rsrv_sq = ?"; + $data = [$rsrv_sq]; + $query = $this->db->query($sql, $data); + $row = $query->getRowArray(); + return $row; + } + + public function getImageList2($rsrv_sq) + { + $sql = "SELECT * " . + " FROM result_imgs" . + " WHERE rsrv_sq = ?" . + " AND use_yn = 'Y'" . + " ORDER BY rsrv_sq, view_odr"; + + $data = [$rsrv_sq]; + $query = $this->db->query($sql, $data); + return $query->getResultArray(); + } + + public function getImageCountByType($rsrv_sq) + { + $sql = "SELECT img_type, COUNT(*) img_cnt" . + " FROM result_imgs" . + " WHERE rsrv_sq = ?" . + " AND use_yn = 'Y'" . + " GROUP BY img_type"; + $data = [$rsrv_sq]; + $query = $this->db->query($sql, $data); + return $query->getResultArray(); + } + + // 녹취파일정보 + public function getRecordInfo($rsrv_sq) + { + $sql = "SELECT record_sq, rsrv_sq, use_yn, record_path, record_filenm, record_orignm, record_size, record_tel, record_nm, record_dt, remark, insert_usr, insert_tm, update_usr, update_tm" . + " FROM result_record" . + " WHERE rsrv_sq = ?" . + " AND record_sq = (SELECT MAX(record_sq)" . + " FROM result_record" . + " WHERE rsrv_sq = ?)"; + $data = array( + $rsrv_sq, + $rsrv_sq + ); + $query = $this->db->query($sql, $data); + $row = $query->getRowArray(); + + return $row; + } + // 연락처 저장 public function saveTel($rcpt_sq, $tel) { @@ -1287,6 +1412,187 @@ class ReceiptModel extends Model ]; } + // 평면도요청 저장 + public function saveGround($rcpt_sq, $ground_plan) + { + $this->db->transStart(); + + $sql = "UPDATE receipt" . + " SET ground_plan = ?" . + " WHERE rcpt_sq = ?"; + + $data = [$ground_plan, $rcpt_sq]; + + if ($this->db->query($sql, $data) === false) { + return [ + 'success' => false, + 'msg' => '저장실패', + ]; + } + + $this->db->transComplete(); + + return [ + 'success' => true, + ]; + } + + // 동영상촬영여부 저장 + public function saveRequestMovie($rcpt_sq, $rsrv_sq, $exp_movie_yn) + { + $this->db->transStart(); + $usr_id = session('usr_id'); + + $sql = "SELECT a.result_cd3, b.exp_movie_yn FROM result a INNER JOIN receipt b ON b.rcpt_sq = a.rcpt_sq WHERE rsrv_sq = ?"; + $data = [$rsrv_sq]; + $query = $this->db->query($sql, $data); + $row = $query->getRowArray(); + + $sql = "UPDATE receipt" . + " SET exp_movie_yn = ?" . + " WHERE rcpt_sq = ?"; + $data = [$exp_movie_yn, $rcpt_sq]; + + + if ($this->db->query($sql, $data) === false) { + return [ + 'success' => false, + 'msg' => '저장실패', + ]; + } + + $this->saveChangedHistory($rcpt_sq, $row['result_cd3'], 'C24', $usr_id, $row['exp_movie_yn'] . ' => ' . $exp_movie_yn); + + $this->db->transComplete(); + + return [ + 'success' => true, + ]; + + } + + // 중개사메모 저장 + public function saveRequestMessage($rcpt_sq, $rsrv_sq, $request_msg) + { + $this->db->transStart(); + $usr_id = session('usr_id'); + + if (empty($rsrv_sq)) { + $sql = "SELECT rsrv_sq FROM result WHERE rcpt_sq = ? ORDER BY rsrv_sq DESC LIMIT 1"; + $data = [$rcpt_sq]; + $query = $this->db->query($sql, $data); + $row = $query->getResultArray(); + + $rsrv_sq = $row['rsrv_sq']; + } + + $sql = "SELECT result_cd3, request_msg FROM result WHERE rsrv_sq = ?"; + $data = [$rsrv_sq]; + $query = $this->db->query($sql, $data); + $row = $query->getResultArray(); + + $sql = "UPDATE result" . + " SET request_msg = ?" . + " WHERE rsrv_sq = ?" . + " AND rcpt_sq = ?"; + $data = [ + 'request_msg' => $request_msg, + 'rsrv_sq' => $rsrv_sq, + 'rcpt_sq' => $rcpt_sq + ]; + + + if ($this->db->query($sql, $data) === false) { + return [ + 'success' => false, + 'msg' => '저장실패', + ]; + } + + $memo = "메모변경"; + $this->saveChangedHistory($rcpt_sq, $row['result_cd3'], 'C19', $usr_id, $memo); + + $this->db->transComplete(); + + return [ + 'success' => true, + ]; + } + + + // 문자발송 + public function sendSms($dest_phone, $dest_name, $send_phone, $send_name, $msg_type, $rsrv_sq, $rcpt_sq, $cd, $data) + { + $this->db->transStart(); + + $usr_id = session('usr_id'); + + + $sql = "SELECT DATE_FORMAT(NOW(), '%Y%m%d-%H%i%s') as cmid, NOW() as currDttm FROM DUAL"; + $query = $this->db->query($sql); + $row = $query->getRowArray(); + + $cmid = $row['cmid']; + $currDate = $row['currDttm']; + + $category = 'SMS_MSG_TYPE'; + if ($data['comp_sq'] == '2') { + $category = 'SMS_MSG_TYPE2'; + } + + $codeModel = new CodeModel(); + $code = $codeModel->getCodeDetail($category, $cd); + + $subject = $code['category_nm']; + + if ($cd === "S10") { + $body = sprintf($code['cd_nm'], $data['rcpt_atclno'], $data['agent_nm'], $data['addr'], $data['rcpt_hscp_nm'], $data['rcpt_dtl_addr'], $data['rcpt_ho']); + } else { + $body = $code['cd_nm']; + } + + $body = str_replace('#매물번호#', $data['rcpt_atclno'], $code['cd_nm']); + + $msg_length = strlen(iconv('UTF-8', 'EUCKR', $body)); + if ($msg_length > 80 && $msg_type == 0) { + $msg_type = 5; + } + + $param = [ + //'cmid' => $cmid, + 'dest_phone' => $dest_phone, + 'dest_name' => $dest_name, + 'send_phone' => $send_phone, + 'send_name' => $send_name, + 'subject' => $subject, + 'msg_body' => $body, + 'msg_type' => $msg_type, + 'request_time' => $currDate, + 'send_time' => $currDate, + 'etc1' => $rsrv_sq, + 'etc2' => $cd + ]; + + $this->db->transStart(); + $this->db->table('ums_data')->insert($param); + $this->db->table('ums_log')->insert($param); + + $remark = "문자 발송 - " . $subject . "(" . $dest_phone . ")"; + $this->saveChangedHistory($rcpt_sq, $data['rcpt_stat'], 'C8', $usr_id, $remark); + $this->db->transComplete(); + + if ($this->db->transStatus() === false) { + return [ + 'success' => false, + 'msg' => '저장실패', + ]; + } else { + return [ + 'success' => true, + ]; + } + + } public function saveChangedHistory($rcpt_sq, $rcpt_stat, $changed_type, $usr_id, $remark) { @@ -1303,4 +1609,104 @@ class ReceiptModel extends Model ]; $res = $this->db->query($sql, $data); } + + + // 거주인정보저장 + public function saveRecInfo($data) + { + $usr_id = session('usr_id'); + $usr_sq = session('usr_sq'); + + $this->db->transStart(); + + $detail = $this->getDetail($data['rcpt_key']); + + !empty($data['file']) ? $rec_yn = "Y" : $rec_yn = "N"; + + $param = [ + $rec_yn, + $data['rec_tel'], + $data['rec_nm'], + $data['rec_remark'], + $usr_sq, + $data['rsrv_sq'], + ]; + + $sql = "UPDATE result SET + rec_yn = ? "; + if ($rec_yn == "Y") { + $sql .= ", record_cplt_dt = NOW()"; + } + $sql .= ", rec_tel = ? + , rec_nm = ? + , remark = ? + , update_tm = NOW() + , update_usr = ? + WHERE rsrv_sq = ? + "; + + if ($this->db->query($sql, $param) === false) { + return [ + 'success' => false, + 'msg' => '저장실패', + ]; + } + + + if (!empty($data['file'])) { + $rec_sql = "SELECT * FROM result_record WHERE rsrv_sq = ? AND use_yn = 'Y'"; + $rec_data = array($data['rsrv_sq']); + $query = $this->db->query($rec_sql, $rec_data); + $preData = $query->getRowArray(); + + + $f = $data['file']; + + $sql = "INSERT INTO result_record + (rsrv_sq, use_yn, record_path, record_filenm, record_orignm, record_size, record_tel, record_nm, record_dt, remark, insert_usr, insert_tm, cloud_upload_yn) + VALUES + (?, 'Y', ?, ?, ?, ?, ?, ?, NOW(), ?, ?, NOW(), 'Y') + "; + $param = [ + $data['rsrv_sq'], + $f['file_path'], + $f['new_name'], + $f['orig_name'], + $f['size'], + $data['rec_tel'], + $data['rec_nm'], + $data['rec_remark'], + $usr_sq + ]; + + $this->db->query($sql, $param); + + // 이전 데이터 미사용 처리 + if (!empty($preData)) { + $rec_sql = "UPDATE result_record SET use_yn = 'N' WHERE record_sq = ? AND rsrv_sq = ?"; + $this->db->query($rec_sql, [$preData['record_sq'], $data['rsrv_sq']]); + + $remark = "녹취파일 업로드 - " . $preData['record_nm'] . "(" . $preData['record_tel'] . ") -> " . $data['rec_nm'] . "(" . $data['rec_tel'] . ")"; + } else { + $remark = "녹취파일 업로드 - " . $data['rec_nm'] . "(" . $data['rec_tel'] . ")"; + } + + $this->saveChangedHistory($data['rcpt_sq'], $detail['rcpt_stat'], 'C15', $usr_id, $remark); + + } + + if (!empty($detail['rec_tel'])) { + $remark = "거주인정보변경 - " . $detail['rec_nm'] . "(" . $detail['rec_tel'] . ") -> " . $data['rec_nm'] . "(" . $data['rec_tel'] . ")"; + } else { + $remark = "거주인정보변경 - " . $data['rec_nm'] . "(" . $data['rec_tel'] . ")"; + } + + $this->saveChangedHistory($data['rcpt_sq'], $detail['rcpt_stat'], 'C15', $usr_id, $remark); + + $this->db->transComplete(); + + return [ + 'success' => true, + ]; + } } \ No newline at end of file diff --git a/app/Models/common/CodeModel.php b/app/Models/common/CodeModel.php index c258b2c..2afda47 100644 --- a/app/Models/common/CodeModel.php +++ b/app/Models/common/CodeModel.php @@ -54,4 +54,18 @@ class CodeModel extends Model } return $codes; } + + /** + * 코드 상세 + */ + public function getCodeDetail($category, $code) + { + $sql = "SELECT category, category_nm, cd, cd_nm FROM codes" . + " WHERE category = ? and cd = ?"; + $data = [$category, $code]; + $query = $this->db->query($sql, $data); + $row = $query->getResultArray(); + + return $row; + } } \ No newline at end of file diff --git a/app/Views/layouts/sidebar.php b/app/Views/layouts/sidebar.php index 8b7cc8d..1ef0df0 100644 --- a/app/Views/layouts/sidebar.php +++ b/app/Views/layouts/sidebar.php @@ -101,6 +101,15 @@ // 3. 끝 슬래시 정리 $path = rtrim($path, '/'); switch ($path) { + case "/article/receipt/detail": + $path = "/article/receipt/lists"; + break; + case "/article/dept/detail": + $path = "/article/dept/lists"; + break; + case "/article/record/detail": + $path = "/article/record/lists"; + break; case "/board/notice/write": case "/board/notice/modify": case "/board/notice/detail": diff --git a/app/Views/pages/article/dept/detail.php b/app/Views/pages/article/dept/detail.php index dd95c01..dd32bf3 100644 --- a/app/Views/pages/article/dept/detail.php +++ b/app/Views/pages/article/dept/detail.php @@ -98,7 +98,7 @@ $usr_level = session('usr_level');
- +
@@ -109,666 +109,746 @@ $usr_level = session('usr_level'); -
-
-
매물 정보
+
+ + + + + +
+
+
매물 정보
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 지하층 / 지상층"); - } else if (in_array($data['rcpt_product'], $chk_product_nm)) { - echo (""); - } else { - echo (""); - } - ?> - - - - - - - - - -
등록일 - - 예약(촬영)요청일 - - - -
현장확인(촬영)일자 - - 가주소 여부 - 가주소 - -
매물구분거래구분 - -
지역구분 - - 리 주소 - -
-
상세주소 - - - -
- - - - - -
- - - -
기타주소 - -
단지명가격 - - - -
-
- - 만원 -
- - -
-
- - 만원 (월) -
-
- - - -
- 분양가 - - 만원 - - / - - 프리미엄 - - 만원 -
- - - -
- - -
-
-
평형지하층 / 지상층층 / 총층 - - -
지도좌표 -
- - -
-
- 경도 - -
- -
- 위도 - -
-
- - -
- - - -
- -
-
- - - -
- -
-
- - -
-
-
거주여부
- - - - - - - - - - -
거주여부 - - -
DB활용동의여부
-
-
- -
-
- -
-
-
- - -
-
-
평면도요청
- - - - - - - - - - -
-
평면도요청
-
- - 평면도 등록 여부 - 0) { - echo "Y"; - } else { - echo "N"; - } - ?> - - -
-
-
- - -
-
-
예약확정
- - - - - - - - - - - - - - - - - - - -
방문희망일시 - - - -
방문날짜 - - - - 담당자 - - - -
-
- -
- - -
-
-
동영상촬영여부
- - - - - - - - -
- 동영상촬영여부 - - - - -
-
-
- - -
-
-
중개인 요청사항
- - - - - - - - -
- 중개인 요청사항 - - - - -
-
-
- - -
-
-
- 담당자 예약현황 () -
- - - - - - - - - - - - - - - - - -
- - 시 -
-
-
- - -
-
-
취소
- - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 지하층 / 지상층"); + } else if (in_array($data['rcpt_product'], $chk_product_nm)) { + echo (""); + } else { + echo (""); + } + ?> + + + + + + + + + + + + + + + + + + + + + +
-
취소
-
-
등록일 + + 예약(촬영)요청일 + + + +
현장확인(촬영)일자 + + 가주소 여부 + 가주소 + +
매물구분거래구분 + +
지역구분 + + 리 주소 + +
+
상세주소 + + + +
+ + + + + +
+ + + +
기타주소 + +
단지명가격 + + + +
+
+ + 만원 +
+ + +
+
+ + 만원 (월) +
+
+ + + +
+ 분양가 + + 만원 + + / + + 프리미엄 + + 만원 +
+ + +
+ + +
+
+
평형지하층 / 지상층층 / 총층 + + +
면적확인파일1 + $img) { + switch ($img['img_type']) { + case "I6": + $arrI6[] = $img; + unset($images[$key]); + break; + + case "I7": + $arrI7[] = $img; + unset($images[$key]); + break; + } + } + + if (!empty($arrI6)) { ?> + +
+ + Image + +
+ + +
+ No Image +
+ +
면적확인파일2 + + +
+ + Image + +
+ + +
+ No Image +
+ + +
지도좌표 +
+ + +
+
+ 경도 + +
+ +
+ 위도 + +
+
+ + +
+ + + +
+ +
+
+ + + +
+ +
+
+ + +
+
+
거주여부
+ + + + + + + + + + +
거주여부 + + +
DB활용동의여부
+
+
+ +
+
+ +
+
+
+ + +
+
+
평면도요청
+ + + + + + + + + + +
+
평면도요청
+
+ + 평면도 등록 여부 + 0) { + echo "Y"; + } else { + echo "N"; + } + ?> + + +
+
+
+ + +
+
+
예약확정
+ + + + + + + + + + + + + + + + + + + +
방문희망일시 + + + +
방문날짜 + + + + 담당자 + + + +
+
+ +
+ + +
+
+
동영상촬영여부
+ + + + + + + + +
+ 동영상촬영여부 + + + + +
+
+
+ + +
+
+
중개인 요청사항
+ + + + + + + + +
+ 중개인 요청사항 + + + + +
+
+
+ + +
+
+
+ 담당자 예약현황 () +
+ + + + + + - - + + + + + + + + + + +
+ + 시 +
+
+
+ + +
+
+
취소
+ + + + + + + + + + +
+
취소
+
+ + + 취소사유 + + + +
+
+
+ + +
+
+
매물 상태 정보 +
+ + + +
+ +
+ + " . $data['rsrv_delay_dt_tm']; //예약지연 + $stat2 = $data['rsrv_cplt_dt_dt'] . "
" . $data['rsrv_cplt_dt_tm']; //에약확인 + if ($data['req_rec_yn'] == "Y") { //촬영 + $stat3 = $data['photo_save_dt_dt'] . "
" . $data['photo_save_dt_tm'] . "
녹취필요"; + } else { + $stat3 = $data['photo_save_dt_dt'] . "
" . $data['photo_save_dt_tm']; + } + $stat4 = $data['check_delay_dt_dt'] . "
" . $data['check_delay_dt_tm']; //검수지연 + $stat5 = $data['check_fail_dt_dt'] . "
" . $data['check_fail_dt_tm']; //검수실패 + $stat6 = $data['check_dt_dt'] . "
" . $data['check_dt_tm']; //검수 + $stat7 = $data['check_cplt_dt_dt'] . "
" . $data['check_cplt_dt_tm']; //검수완료 + $stat8 = $data['cancel_dt_dt'] . "
" . $data['cancel_dt_tm']; //취소 + + $currStat = substr($data['rcpt_stat'], 0, 2); + $currStat2 = substr($data['rcpt_stat'], 2, 2); + + if ($currStat == 15) { //예약지연 + $stat1 = "" . $stat1 . ""; + } else if ($currStat == 20) { //예약확인 + $stat2 = "" . $stat2 . ""; + } else if ($currStat == 40) { //촬영 + $stat3 = "" . $stat3 . ""; + } else if ($currStat == 50) { //검수 + $stat6 = "" . $stat6 . ""; + } else if ($currStat == 60) { //검수완료 + $stat7 = "" . $stat7 . ""; + } else if ($currStat == 70) { //검수지연 + $stat4 = "" . $stat4 . "
" . $data['rcpt_stat_nm'] . "
"; + } + if ($currStat == 90 && $currStat2 != 50) { //취소 + $stat8 = "" . $stat8 . "
" . $data['result_cd2_nm'] . "
"; + } else if ($currStat == 90 && $currStat2 == 50) { //검수실패 + $stat5 = "" . $stat5 . "
" . $data['rcpt_stat_nm'] . "
"; + } + ?> + + + + + + + + + + + + + - - - + + + + + - -
현장확인
진행상황
예약지연예약확인촬영검수지연검수실패검수검수완료취소
+ 취소사유 - + + - + + + + + + + + + + + +
-
-
- - -
-
-
매물 상태 정보 - - - -
- - " . $data['rsrv_delay_dt_tm']; //예약지연 - $stat2 = $data['rsrv_cplt_dt_dt'] . "
" . $data['rsrv_cplt_dt_tm']; //에약확인 - if ($data['req_rec_yn'] == "Y") { //촬영 - $stat3 = $data['photo_save_dt_dt'] . "
" . $data['photo_save_dt_tm'] . "
녹취필요"; - } else { - $stat3 = $data['photo_save_dt_dt'] . "
" . $data['photo_save_dt_tm']; - } - $stat4 = $data['check_delay_dt_dt'] . "
" . $data['check_delay_dt_tm']; //검수지연 - $stat5 = $data['check_fail_dt_dt'] . "
" . $data['check_fail_dt_tm']; //검수실패 - $stat6 = $data['check_dt_dt'] . "
" . $data['check_dt_tm']; //검수 - $stat7 = $data['check_cplt_dt_dt'] . "
" . $data['check_cplt_dt_tm']; //검수완료 - $stat8 = $data['cancel_dt_dt'] . "
" . $data['cancel_dt_tm']; //취소 - - $currStat = substr($data['rcpt_stat'], 0, 2); - $currStat2 = substr($data['rcpt_stat'], 2, 2); - - if ($currStat == 15) { //예약지연 - $stat1 = "" . $stat1 . ""; - } else if ($currStat == 20) { //예약확인 - $stat2 = "" . $stat2 . ""; - } else if ($currStat == 40) { //촬영 - $stat3 = "" . $stat3 . ""; - } else if ($currStat == 50) { //검수 - $stat6 = "" . $stat6 . ""; - } else if ($currStat == 60) { //검수완료 - $stat7 = "" . $stat7 . ""; - } else if ($currStat == 70) { //검수지연 - $stat4 = "" . $stat4 . "
" . $data['rcpt_stat_nm'] . "
"; - } - if ($currStat == 90 && $currStat2 != 50) { //취소 - $stat8 = "" . $stat8 . "
" . $data['result_cd2_nm'] . "
"; - } else if ($currStat == 90 && $currStat2 == 50) { //검수실패 - $stat5 = "" . $stat5 . "
" . $data['rcpt_stat_nm'] . "
"; - } - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - + @@ -814,20 +894,19 @@ $usr_level = session('usr_level'); - + @@ -838,17 +917,17 @@ $usr_level = session('usr_level'); - - + + @@ -856,19 +935,20 @@ $usr_level = session('usr_level'); + - - + @@ -876,10 +956,10 @@ $usr_level = session('usr_level'); @@ -888,28 +968,28 @@ $usr_level = session('usr_level'); - - - - - - - - - - + + + + + + + + + + @@ -925,330 +1005,935 @@ $usr_level = session('usr_level'); - - - -
현장확인
진행상황
예약지연예약확인촬영검수지연검수실패검수검수완료취소
- - - - - - - - - - - - - - - -
상태변경 - - - - - - - - - - -
상태변경 - + @@ -786,15 +866,15 @@ $usr_level = session('usr_level'); - + - + @@ -806,7 +886,7 @@ $usr_level = session('usr_level'); - + - + - + - + + onclick="chgStatus(500000, '', '');">검수 - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - +
+ + + + + + + + + + + + + + + + + + + + + + + + +
-
- -
-
-
SMS 보내기
- - - - + +
+
+
SMS 보내기
+
- 상황별
SMS선택 -
- + } + + $smsTot = sizeof($smsList); + $rowspan = ceil($smsTot / 6); + ?> + + "; - } - $smsCnt++; - endforeach; ?> - -
- - - -
+ 상황별
SMS선택 +
-
-
- - -
-
-
매물 위치
- - - - - - - - -
-
-
-
-
- - -
-
-
확인 정보 및 사진 정보
-
- - -
-
-
-
홍보확인서
- - - -
- -
- 홍보확인서 -
-
-
- - -
-
-
-
촬영동의서
- -
- -
- 촬영동의서 -
-
-
- - -
-
-
-
현장확인내역서
- -
- -
- 현장확인내역서 -
-
-
+ $smsCnt = 1; + foreach ($smsList as $sms1): + if (!in_array($sms1['cd'], ["S10", "S3", "S7", "S15"])) { + continue; + } + ?> + + + + + + "; + } + $smsCnt++; + endforeach; ?> + +
+
-
+ +
+
+
매물 위치
+ + + + - -
-
-
분양권 (최대 5장)
- -
- -
- -
- 분양권1 -
-
+
+ + +
+
+
+
-
+ +
+
+
확인 정보 및 사진 정보
+
- -
-
-
매물사진 (최대 15장)
+ +
+
+
+
홍보확인서
-
- - - - + + +
+ +
+ $img) { + if ($img['img_type'] == 'I1') { + $arrI1[] = $img; + unset($images[$key]); + } + } + if (!empty($arrI1)) { + foreach ($arrI1 as $img) { + list($filename, $ext) = explode(".", $img['img_filenm']); + $thumbname = $filename . "_thumb.jpg"; + + $imgPath = $img['img_path'] . $thumbname; + $link = $img['img_path'] . $img['img_filenm']; + + $link = realFilePath($link); + $imgPath = realFilePath($imgPath); + + if ($img['cloud_upload_yn'] == 'Y') { + $imgPath = NCLOUD_OBJECT_STORAGE_URL . $img['img_path'] . $thumbname; + $link = NCLOUD_OBJECT_STORAGE_URL . $img['img_path'] . $img['img_filenm']; + } + + $sq = $img['img_sq']; + } + ?> + + 홍보확인서 + + + 홍보확인서 + +
+
+
+ + +
+
+
+
촬영동의서
+ +
+ +
+ + + + 촬영동의서 + + + 촬영동의서 + +
+
+
+ + +
+
+
+
현장확인내역서
+ +
+ +
+ + + 현장확인내역서 + + + 현장확인내역서 + +
+
-
- - -
- +
+ + +
+
+
분양권 (최대 5장)
+ +
+ +
+
- 매물사진 + $img) { + if ($img['img_type'] == 'I8') { + $arrI8[] = $img; + unset($images[$key]); + } + } + if (!empty($arrI8)) { + + foreach ($arrI8 as $img) { + list($filename, $ext) = explode(".", $img['img_filenm']); + $thumbname = $filename . "_thumb.jpg"; + + $imgPath = $img['img_path'] . $thumbname; + $link = $img['img_path'] . $img['img_filenm']; + $agreement_image = realFilePath($link); + $agreement_image_thumbnail = realFilePath($imgPath); + + $sq = $img['img_sq']; + + if ($img['cloud_upload_yn'] == 'Y') { + $agreement_image_thumbnail = NCLOUD_OBJECT_STORAGE_URL . $imgPath; + $agreement_image = NCLOUD_OBJECT_STORAGE_URL . $link; + } + ?> + + 분양권1 + + + + 분양권1 +
-
-
-
+
- -
-
-
-
-
동영상
+ +
+
+
매물사진 (최대 15장)
+ +
+ + onclick="saveImgOrder('I4', 'M201')">저장 + +
-
- 동영상 +
+ +
+ + + + + +
+ + +
+ + 매물사진 + +
+
+ + +
+ +
+ 매물사진 +
+
+ +
+
+ +
+ + +
+
+
+
+
동영상
+ +
+
+ + + + 동영상 + + + + 동영상 + +
+
+
+ +
+
+
+
평면도
+ +
+
+ + + 평면도 + + + + 평면도 + +
+
+
+ +
+
+
+
체크리스트
+ +
+
+ + + 체크리스트 + + + + 체크리스트 + +
-
-
-
-
평면도
- + + +
+
+
평면도 중복
+
-
- 평면도 -
-
-
-
-
-
-
체크리스트
- -
-
- 체크리스트 -
-
-
-
+
중복된 평면도가 없습니다.
- -
-
검수사항
-
- - -
- -
- - +
+ +
+
+
+ 중복 + 평면도 중복 +
+
+ +
+
+
+ 매물번호 + +
+
+
+
+ 촬영일자 + +
+
+
+
+ +
-
- -
-
-
360이미지 / 촬영위치
- -
- -
- -
-
- 360이미지 + + +
+
+
매물현장확인 체크리스트
- -
- -
-
- 360이미지 -
- -
- -
-
- 360이미지 -
- -
- - -
-
-
-
- - - -
-
-
중개인 요청사항
- - - - - - - - - - - - - - - - - - - - - - - -
거주자 전화번호거주인 이름
음성파일 -
- - - - - -
- - -
+
+
+
-
거주인 요청사항 - -
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ + +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+
+ + + +
+
검수사항
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
360이미지 (최대 5장) / 촬영위치
+ +
+ +
+ +
+
+ + 360이미지 + +
+ +
+ +
+
+ 360이미지 +
+ +
+ +
+
+
-
+ + + +
+
+
중개인 요청사항
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
거주자 전화번호 +
+ + - + + - + +
+
거주인 이름 + +
음성파일 +
+ + + +
+ + + + KB + +
+ + 등록된 파일 없음 + + +
+ + + + + +
+ + +
+ > + +
+
+
거주인 요청사항 + +
+
+ + +
+
@@ -1257,10 +1942,10 @@ $usr_level = session('usr_level');
- - - - + + + + @@ -1292,16 +1977,132 @@ $usr_level = session('usr_level'); +section('modals') ?> + + + + + +endSection() ?> + + + + diff --git a/app/Views/pages/article/dept/lists.php b/app/Views/pages/article/dept/lists.php index 0dd5226..5498a1e 100644 --- a/app/Views/pages/article/dept/lists.php +++ b/app/Views/pages/article/dept/lists.php @@ -778,6 +778,27 @@ $usr_nm = session('usr_nm'); }); }); + // 배정내역 excel + $("#excel-download2").on("click", function () { + $.ajax({ + url: "/article/dept/excel", + method: "GET", + dataType: "json", + data: $("#frm_srch_info").serialize(), + beforeSend: function () { + blockUI.blockPage({ + message: tpl + }) + }, + complete: function () { + blockUI.unblockPage() + }, + success: function (result) { + downloadExcel(result.data); + } + }); + }); + }); function initForm() { diff --git a/app/Views/pages/article/receipt/detail.php b/app/Views/pages/article/receipt/detail.php index 75defd5..dd32bf3 100644 --- a/app/Views/pages/article/receipt/detail.php +++ b/app/Views/pages/article/receipt/detail.php @@ -109,7 +109,11 @@ $usr_level = session('usr_level'); - + + + + +
@@ -312,13 +316,87 @@ $usr_level = session('usr_level');
- + - + @@ -343,12 +421,12 @@ $usr_level = session('usr_level');
@@ -458,7 +536,7 @@ $usr_level = session('usr_level'); ?> @@ -566,13 +644,16 @@ $usr_level = session('usr_level'); 동영상촬영여부 @@ -591,10 +672,12 @@ $usr_level = session('usr_level'); 중개인 요청사항 @@ -666,7 +749,7 @@ $usr_level = session('usr_level'); @@ -678,11 +761,13 @@ $usr_level = session('usr_level');
매물 상태 정보 - - - +
+ + + +
+
진행상태변경내용처리자(ID)처리일시진행상태변경내용처리자(ID)처리일시 세부내용
면적확인파일1 + $img) { + switch ($img['img_type']) { + case "I6": + $arrI6[] = $img; + unset($images[$key]); + break; + + case "I7": + $arrI7[] = $img; + unset($images[$key]); + break; + } + } + + if (!empty($arrI6)) { ?> + +
+ + Image + +
+ + +
+ No Image +
+ +
면적확인파일2 + + +
+ + Image + +
+ + +
+ No Image +
+ + +
지도좌표 - +
- \ + + + - +
- + - +
- +
@@ -859,7 +944,7 @@ $usr_level = session('usr_level'); @@ -941,7 +1026,7 @@ $usr_level = session('usr_level'); @@ -1034,7 +1119,40 @@ $usr_level = session('usr_level');
- 홍보확인서 + $img) { + if ($img['img_type'] == 'I1') { + $arrI1[] = $img; + unset($images[$key]); + } + } + if (!empty($arrI1)) { + foreach ($arrI1 as $img) { + list($filename, $ext) = explode(".", $img['img_filenm']); + $thumbname = $filename . "_thumb.jpg"; + + $imgPath = $img['img_path'] . $thumbname; + $link = $img['img_path'] . $img['img_filenm']; + + $link = realFilePath($link); + $imgPath = realFilePath($imgPath); + + if ($img['cloud_upload_yn'] == 'Y') { + $imgPath = NCLOUD_OBJECT_STORAGE_URL . $img['img_path'] . $thumbname; + $link = NCLOUD_OBJECT_STORAGE_URL . $img['img_path'] . $img['img_filenm']; + } + + $sq = $img['img_sq']; + } + ?> + + 홍보확인서 + + + 홍보확인서 +
@@ -1049,7 +1167,35 @@ $usr_level = session('usr_level');
- 촬영동의서 + + + + 촬영동의서 + + + 촬영동의서 +
@@ -1064,7 +1210,33 @@ $usr_level = session('usr_level');
- 현장확인내역서 + + + 현장확인내역서 + + + 현장확인내역서 +
@@ -1083,7 +1255,40 @@ $usr_level = session('usr_level');
- 분양권1 + $img) { + if ($img['img_type'] == 'I8') { + $arrI8[] = $img; + unset($images[$key]); + } + } + if (!empty($arrI8)) { + + foreach ($arrI8 as $img) { + list($filename, $ext) = explode(".", $img['img_filenm']); + $thumbname = $filename . "_thumb.jpg"; + + $imgPath = $img['img_path'] . $thumbname; + $link = $img['img_path'] . $img['img_filenm']; + $agreement_image = realFilePath($link); + $agreement_image_thumbnail = realFilePath($imgPath); + + $sq = $img['img_sq']; + + if ($img['cloud_upload_yn'] == 'Y') { + $agreement_image_thumbnail = NCLOUD_OBJECT_STORAGE_URL . $imgPath; + $agreement_image = NCLOUD_OBJECT_STORAGE_URL . $link; + } + ?> + + 분양권1 + + + + 분양권1 +
@@ -1096,13 +1301,12 @@ $usr_level = session('usr_level');
매물사진 (최대 15장)
- + -
@@ -1110,13 +1314,50 @@ $usr_level = session('usr_level');
-
- -
- 매물사진 -
-
+ + + +
+ + +
+ + 매물사진 + +
+
+ + +
+ +
+ 매물사진 +
+
+
@@ -1132,7 +1373,34 @@ $usr_level = session('usr_level'); onclick="viewFilePop('V1', '')">파일
- 동영상 + + + + 동영상 + + + + 동영상 +
@@ -1145,7 +1413,29 @@ $usr_level = session('usr_level'); onclick="viewFilePop('I5', '')">파일
- 평면도 + + + 평면도 + + + + 평면도 +
@@ -1158,12 +1448,315 @@ $usr_level = session('usr_level'); onclick="viewFilePop('I11', '')">파일
- 체크리스트 + + + 체크리스트 + + + + 체크리스트 +
+ + +
+
+
평면도 중복
+ +
+ +
중복된 평면도가 없습니다.
+ +
+ +
+
+
+ 중복 + 평면도 중복 +
+
+ +
+
+
+ 매물번호 + +
+
+
+
+ 촬영일자 + +
+
+
+
+ +
+
+ + + + +
+
+
매물현장확인 체크리스트
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ + +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+ +
+
+ +
+ +
+
+
+ > + +
+ +
+ > + +
+
+
+
+
+ +
검수사항
@@ -1182,34 +1775,47 @@ $usr_level = session('usr_level');
-
360이미지 / 촬영위치
+
360이미지 (최대 5장) / 촬영위치
- -
-
- 360이미지 -
- -
+ -
- 360이미지 + if ($img['cloud_upload_yn'] == 'Y') { + $thumblink = NCLOUD_OBJECT_STORAGE_URL . $thumblink; + $link = NCLOUD_OBJECT_STORAGE_URL . $link; + } + $cnt++; + ?> +
+
+ + 360이미지 + +
+ +
+ +
+
+ 360이미지 +
+
- -
- -
-
- 360이미지 -
- -
- - +
@@ -1220,51 +1826,112 @@ $usr_level = session('usr_level');
중개인 요청사항
-
+ onclick="chgStatus(500000, '', '');">검수 + onclick="chgStatus(500000, '', '');">검수 + onclick="chgStatus(500000, '', '');">검수
+ + + +
- - - - - - - - - - + + + + + + + + + + + + + + + - +
거주자 전화번호거주인 이름
음성파일 -
- - +
거주자 전화번호 +
+ + - + + - + +
+
거주인 이름 + +
음성파일 +
+ + + +
+ + + + KB + +
+ + 등록된 파일 없음 + + +
+ + + + + +
- + >
-
거주인 요청사항거주인 요청사항 - +
+ +
@@ -1275,10 +1942,10 @@ $usr_level = session('usr_level');
- - - - + + + + @@ -1310,18 +1977,132 @@ $usr_level = session('usr_level'); +section('modals') ?> + + + + + +endSection() ?> + + + + + + + diff --git a/public/plugin/img/video.png b/public/plugin/img/video.png new file mode 100644 index 0000000000000000000000000000000000000000..91175ed8734d083aa1dee0e39004f607c8dab89f GIT binary patch literal 6472 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 i8DlB+0>oZ&$^QZu$<{-krv}LY0000 literal 0 HcmV?d00001 -- 2.49.1
진행상태변경내용처리자(ID)처리일시진행상태변경내용처리자(ID)처리일시 세부내용