<?php
namespace App\Models\v2;

use App\Models\webfax\FaxModel;
use CodeIgniter\Model;

class M701Model extends Model
{

    // 지역 목록 조회
    public function getAreaList($sido = '', $gugun = '')
    {

        if (!empty($gugun)) {
            $gugun = substr($gugun, '0', '5');

            $sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm" .
                " FROM region_codes a" .
                " LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,5),'00000')" .
                " WHERE a.region_cd LIKE concat(?, '%')" .
                " AND a.region_cd NOT LIKE '%00000'" .
                " AND a.region_cd LIKE '%00'" .
                " AND a.use_yn = 'Y'" .
                " ORDER BY a.region_nm ASC";

            $query = $this->db->query($sql, [$gugun]);

        } else if (!empty($sido)) {
            $chk_sido = substr($sido, '0', '2');

            if ($chk_sido === '36') {
                $sido = substr($sido, '0', '4');
                $sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm " .
                    "FROM region_codes a " .
                    "LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,4),'000000') " .
                    "WHERE a.region_cd LIKE concat(?, '%') " .
                    "AND a.region_cd NOT LIKE '%000000' " .
                    "AND a.region_cd LIKE '%00' " .
                    "AND a.use_yn = 'Y' " .
                    "AND EXISTS (SELECT 'x' FROM region_codes c WHERE c.region_cd LIKE CONCAT(SUBSTR(a.region_cd,1,5),'%') AND c.region_cd > CONCAT(SUBSTR(a.region_cd,1,5),'00000')) " .
                    "ORDER BY a.region_nm ASC";
            } else {
                $sido = substr($sido, '0', '2');
                $sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm" .
                    " FROM region_codes a" .
                    " LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,2),'00000000')" .
                    " WHERE a.region_cd LIKE concat(?, '%')" .
                    " AND a.region_cd NOT LIKE '%00000000'" .
                    " AND a.region_cd LIKE '%00000'" .
                    " AND a.use_yn = 'Y'" .
                    " AND EXISTS (SELECT 'x' FROM region_codes c WHERE c.region_cd LIKE CONCAT(SUBSTR(a.region_cd,1,5),'%') AND c.region_cd > CONCAT(SUBSTR(a.region_cd,1,5),'00000'))" .
                    " ORDER BY a.region_nm ASC";
            }

            $query = $this->db->query($sql, [$sido]);
        } else {
            $sql = "SELECT a.region_cd, a.region_nm " .
                "FROM region_codes a " .
                "WHERE (a.region_cd LIKE '%00000000' " .
                "AND a.use_yn = 'Y') " .
                "OR region_cd = 3611000000;";

            $query = $this->db->query($sql);
        }


        return $query->getResultArray();
    }

    // 소속본부조회
    public function getBonbuList()
    {
        $sql = "SELECT dept_sq, pdept_sq, dept_nm, dept_desc, dept_head, use_yn, depth, insert_tm, insert_usr, update_tm, update_usr, lft, rgt" .
            "  FROM departments" .
            " WHERE depth = 1" .
            "   AND use_yn = 'Y'" .
            " ORDER BY lft";

        $query = $this->db->query($sql);


        return $query->getResultArray();
    }

    // 소속팀 조회
    public function getTeamList()
    {
        $sql = "SELECT dept_sq, pdept_sq, dept_nm" .
            "  FROM departments" .
            " WHERE depth = 2" .
            "   AND use_yn = 'Y'" .
            " ORDER BY dept_nm";

        $query = $this->db->query($sql);


        return $query->getResultArray();
    }

    // 유저 조회
    public function getUserList()
    {
        $sql = "SELECT 
                    a.usr_sq, a.usr_id, a.usr_nm, a.dept_sq
                FROM users a
                WHERE 
                        a.usr_level IN ('3','4','40','5','50','6','60','61','62','7','8','70')
                        AND a.use_yn = 'Y'
                        AND EXISTS (
                        SELECT 'x' FROM departments a1 INNER JOIN departments a2 ON a2.lft BETWEEN a1.lft AND a1.rgt AND a2.use_yn = 'Y' 
                        WHERE 1=1 AND a2.dept_sq = a.dept_sq AND a1.use_yn = 'Y'
                )
                ORDER BY a.usr_level DESC, a.usr_nm ASC ";

        $query = $this->db->query($sql);

        return $query->getResultArray();
    }

    public function getTotalCount($data)
    {
        $sql = "SELECT
                    COUNT(*) AS cnt
                FROM
                        v2_article_info a
                LEFT JOIN v2_vrfc_req b ON a.vr_sq = b.vr_sq
                LEFT JOIN v2_modify_info c ON a.vr_sq = c.vr_sq 						
                LEFT JOIN v2_article_info_etc m ON a.vr_sq = m.vr_sq
                LEFT JOIN region_codes f ON a.address_code = f.region_cd
                LEFT JOIN v2_chg_stat d ON a.vr_sq = d.vr_sq AND d.stat_cd = '35'
                LEFT JOIN v2_chg_stat d45 ON d45.vr_sq = a.vr_sq AND d45.stat_cd = '45'
                LEFT JOIN v2_chg_stat d49 ON d49.vr_sq = a.vr_sq AND d49.stat_cd = '49'
                LEFT JOIN v2_chg_stat e ON a.vr_sq = e.vr_sq AND e.stat_cd = '60'
                LEFT JOIN codes g ON b.stat_cd = g.cd AND g.category = 'STEP_VERIFICATION'
                LEFT JOIN codes h ON b.vrfc_type = h.cd AND h.category = 'VRFCREQ_WAY'
                LEFT JOIN users i ON a.charger = i.usr_id
                LEFT JOIN users j ON a.reg_charger = j.usr_id
                LEFT JOIN v2_check_list k ON a.vr_sq = k.vr_sq AND k.type = '21'
                LEFT JOIN v2_check_list l ON a.vr_sq = l.vr_sq AND l.type = '22'
                LEFT JOIN v2_chg_stat d2 ON d2.vr_sq = a.vr_sq AND d2.stat_cd = '39'

                WHERE 1=1
                ";

        // 매물번호
        if (!empty($data['atcl_no'])) {
            $sql .= "AND a.atcl_no = '{$data['atcl_no']}' ";
        } else {
            // 현재상태
            if (!empty($data['stat_cd'])) {
                $sql .= "AND b.stat_cd = '{$data['stat_cd']}' ";
            }

            // 중개소
            if (!empty($data['realtor_nm'])) {
                $sql .= "AND a.realtor_nm = '{$data['realtor_nm']}' ";
            }

            // 매물구분
            if (!empty($data['rlet_type_cd'])) {
                $sql .= "AND a.rlet_type_cd = '{$data['rlet_type_cd']}' ";
            }


            // 접수기간
            if (!empty($data['receipt_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['receipt_sdate']} 00:00:00' ";
            }

            if (!empty($data['receipt_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['receipt_edate']} 23:59:59' ";
            }

            // 완료기간
            if (!empty($data['complete_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['complete_sdate']} 00:00:00' ";
            }

            if (!empty($data['complete_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['complete_edate']} 23:59:59' ";
            }

            // 검증방식
            if (!empty($data['vrfc_type_sub'])) {
                $sql .= "AND a.vrfc_type_sub = '{$data['vrfc_type_sub']}' ";
            } else {
                if (!empty($data['vrfcreq_way'])) {
                    $sql .= "AND b.vrfc_type = '{$data['vrfcreq_way']}' ";
                }
            }

            // 매체사
            if (!empty($data['rcpt_cpid'])) {
                $sql .= "AND a.cpid = '{$data['rcpt_cpid']}' ";
            }

            // 지역구분
            if (!empty($data['srcDong'])) {
                $sql .= "AND a.address_code = '{$data['srcDong']}' ";
            } else {
                if (!empty($data['srcGugun'])) {
                    $str_gugun = substr($data['srcGugun'], '0', '2');
                    if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
                        $sql .= "AND a.address_code = '{$data['srcGugun']}' ";
                    } else {
                        $gugunPrefix = substr($data['srcGugun'], '0', '5');
                        $sql .= "AND a.address_code LIKE '{$gugunPrefix}%' ";
                    }
                } else {
                    if (!empty($data['srcSido'])) {
                        $sidoPrefix = substr($data['srcSido'], '0', '2');
                        $sql .= "AND a.address_code LIKE '{$sidoPrefix}%' ";
                    }
                }
            }

            // 담당자
            if (!empty($data['damdang'])) {

                switch ($data['charger_gbn']) {
                    case "1":
                        $sql .= "a.charger = '{$data['damdang']}' ";
                        break;
                    case "2":
                        $sql .= "a.reg_charger = '{$data['damdang']}' ";
                        break;
                }

            } else {
                // 배정여부
                if ($data['assign_yn'] !== "A") {
                    switch ($data['charger_gbn'] . $data['assign_yn']) {
                        case "1Y":	// 전화/서류 담당자
                            $sql .= "a.charger != '' ";
                            break;
                        case "1N":	// 전화/서류 담당자                            
                            $sql .= "a.charger = '' ";
                            break;
                        case "2Y":	// 등기부등본 담당자
                            $sql .= "a.reg_charger != '' ";
                            break;
                        case "2N":	// 등기부등본 담당자
                            $sql .= "a.reg_charger IS NULL ";
                            break;
                    }
                }
            }

            // 본부
            if (!empty($data['bonbu'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept1_sq = '{$data['bonbu']}' ";
                } else {
                    $sql .= "AND a.reg_dept1_sq = '{$data['bonbu']}' ";
                }
            }

            // 팀
            if (!empty($data['team'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept2_sq = '{$data['team']}' ";
                } else {
                    $sql .= "AND a.reg_dept2_sq = '{$data['team']}' ";
                }
            }

            // 매물종류
            if (!empty($data['rlet_type_cd'])) {
                $sql .= "AND a.rlet_type_cd = '{$data['rlet_type_cd']}' ";
            }

            // 참고파일
            if (!empty($data['reference_file_url_yn'])) {
                $sql .= "AND a.reference_file_url_yn = '{$data['a.reference_file_url_yn']}' ";
            }

            // 법인
            if (!empty($data['corp_own'])) {
                $sql .= "AND m.corp_own = '{$data['corp_own']}' ";
            }

        }


        $query = $this->db->query($sql);

        return $query->getRow()->cnt;
    }

    public function getResultList($start, $end, $data)
    {
        $sql = "SELECT
                    a.vr_sq,
                    j.usr_nm as reg_charger,
                    a.atcl_no,
                    a.cpid,
                    a.cp_atcl_id,
                    a.rlet_type_cd,
                    a.address1,
                    a.sise, 
                    a.rdate,
                    a.seller_tel_no,
                    a.seller_nm,
                    a.realtor_nm,
                    a.realtor_tel_no,
                    a.rlet_type_cd,
                    a.charger,
                    b.insert_tm,
                    b.stat_cd,
                    c.bild_nm,
                    b.vrfc_type,
                    IFNULL(c.rm_no, '') as rm_no,
                    c.floor,
                    IFNULL(c.address_code, '') as address_code,
                    IFNULL(c.address2, '') as address2,
                    IFNULL(m.address2a, '') as address2a,
                    IFNULL(m.address2b, '') as address2b,
                    IFNULL(c.address3, '') as address3,
                    c.trade_type,
                    c.deal_amt,
                    c.wrrnt_amt,
                    c.lease_amt,
                    c.isale_amt,
                    c.prem_amt,
                    c.sply_spc,
                    c.excls_spc,
                    c.tot_spc,
                    c.grnd_spc,
                    c.bldg_spc,
                    c.hscp_no,
                    c.ptp_no,
                    d.insert_tm as update_res_tm,
                    greatest(ifnull(d45.insert_tm, ''), ifnull(d49.insert_tm, '')) as rgbk_check_tm,
                    e.insert_tm as result_tm,
                    IFNULL(f.region_nm, '') as region_nm,
                    g.cd_nm as pre_stat,
                    h.cd_nm as vrfc_type,
                    i.usr_nm,
                    d2.insert_tm as stat_39_tm,
                    a.vrfc_type_sub,
                    a.reference_file_url_yn,
                    k.comment AS reg_conf_yn_info_2,
                    l.comment AS reg_conf_yn_info_3,
                    m.corp_own
                FROM
                        v2_article_info a
                LEFT JOIN v2_vrfc_req b ON a.vr_sq = b.vr_sq
                LEFT JOIN v2_modify_info c ON a.vr_sq = c.vr_sq 						
                LEFT JOIN v2_article_info_etc m ON a.vr_sq = m.vr_sq
                LEFT JOIN region_codes f ON a.address_code = f.region_cd
                LEFT JOIN v2_chg_stat d ON a.vr_sq = d.vr_sq AND d.stat_cd = '35'
                LEFT JOIN v2_chg_stat d45 ON d45.vr_sq = a.vr_sq AND d45.stat_cd = '45'
                LEFT JOIN v2_chg_stat d49 ON d49.vr_sq = a.vr_sq AND d49.stat_cd = '49'
                LEFT JOIN v2_chg_stat e ON a.vr_sq = e.vr_sq AND e.stat_cd = '60'
                LEFT JOIN codes g ON b.stat_cd = g.cd AND g.category = 'STEP_VERIFICATION'
                LEFT JOIN codes h ON b.vrfc_type = h.cd AND h.category = 'VRFCREQ_WAY'
                LEFT JOIN users i ON a.charger = i.usr_id
                LEFT JOIN users j ON a.reg_charger = j.usr_id
                LEFT JOIN v2_check_list k ON a.vr_sq = k.vr_sq AND k.type = '21'
                LEFT JOIN v2_check_list l ON a.vr_sq = l.vr_sq AND l.type = '22'
                LEFT JOIN v2_chg_stat d2 ON d2.vr_sq = a.vr_sq AND d2.stat_cd = '39'

                WHERE 1=1 ";

        // 매물번호
        if (!empty($data['atcl_no'])) {
            $sql .= "AND a.atcl_no = '{$data['atcl_no']}' ";
        } else {
            // 현재상태
            if (!empty($data['stat_cd'])) {
                $sql .= "AND b.stat_cd = '{$data['stat_cd']}' ";
            }

            // 중개소
            if (!empty($data['realtor_nm'])) {
                $sql .= "AND a.realtor_nm = '{$data['realtor_nm']}' ";
            }

            // 매물구분
            if (!empty($data['rlet_type_cd'])) {
                $sql .= "AND a.rlet_type_cd = '{$data['rlet_type_cd']}' ";
            }


            // 접수기간
            if (!empty($data['receipt_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['receipt_sdate']} 00:00:00' ";
            }

            if (!empty($data['receipt_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['receipt_edate']} 23:59:59' ";
            }

            // 완료기간
            if (!empty($data['complete_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['complete_sdate']} 00:00:00' ";
            }

            if (!empty($data['complete_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['complete_edate']} 23:59:59' ";
            }

            // 검증방식
            if (!empty($data['vrfc_type_sub'])) {
                $sql .= "AND a.vrfc_type_sub = '{$data['vrfc_type_sub']}' ";
            } else {
                if (!empty($data['vrfcreq_way'])) {
                    $sql .= "AND b.vrfc_type = '{$data['vrfcreq_way']}' ";
                }
            }

            // 매체사
            if (!empty($data['rcpt_cpid'])) {
                $sql .= "AND a.cpid = '{$data['rcpt_cpid']}' ";
            }

            // 지역구분
            if (!empty($data['srcDong'])) {
                $sql .= "AND a.address_code = '{$data['srcDong']}' ";
            } else {
                if (!empty($data['srcGugun'])) {
                    $str_gugun = substr($data['srcGugun'], '0', '2');
                    if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
                        $sql .= "AND a.address_code = '{$data['srcGugun']}' ";
                    } else {
                        $gugunPrefix = substr($data['srcGugun'], '0', '5');
                        $sql .= "AND a.address_code LIKE '{$gugunPrefix}%' ";
                    }
                } else {
                    if (!empty($data['srcSido'])) {
                        $sidoPrefix = substr($data['srcSido'], '0', '2');
                        $sql .= "AND a.address_code LIKE '{$sidoPrefix}%' ";
                    }
                }
            }

            // 담당자
            if (!empty($data['damdang'])) {

                switch ($data['charger_gbn']) {
                    case "1":
                        $sql .= "a.charger = '{$data['damdang']}' ";
                        break;
                    case "2":
                        $sql .= "a.reg_charger = '{$data['damdang']}' ";
                        break;
                }

            } else {
                // 배정여부
                if ($data['assign_yn'] !== "A") {
                    switch ($data['charger_gbn'] . $data['assign_yn']) {
                        case "1Y":	// 전화/서류 담당자
                            $sql .= "a.charger != '' ";
                            break;
                        case "1N":	// 전화/서류 담당자                            
                            $sql .= "a.charger = '' ";
                            break;
                        case "2Y":	// 등기부등본 담당자
                            $sql .= "a.reg_charger != '' ";
                            break;
                        case "2N":	// 등기부등본 담당자
                            $sql .= "a.reg_charger IS NULL ";
                            break;
                    }
                }
            }

            // 본부
            if (!empty($data['bonbu'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept1_sq = '{$data['bonbu']}' ";
                } else {
                    $sql .= "AND a.reg_dept1_sq = '{$data['bonbu']}' ";
                }
            }

            // 팀
            if (!empty($data['team'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept2_sq = '{$data['team']}' ";
                } else {
                    $sql .= "AND a.reg_dept2_sq = '{$data['team']}' ";
                }
            }

            // 매물종류
            if (!empty($data['rlet_type_cd'])) {
                $sql .= "AND a.rlet_type_cd = '{$data['rlet_type_cd']}' ";
            }

            // 참고파일
            if (!empty($data['reference_file_url_yn'])) {
                $sql .= "AND a.reference_file_url_yn = '{$data['a.reference_file_url_yn']}' ";
            }

            // 법인
            if (!empty($data['corp_own'])) {
                $sql .= "AND m.corp_own = '{$data['a.corp_own']}' ";
            }

        }


        $sql .= "ORDER BY b.vr_sq DESC , b.insert_tm DESC

                LIMIT {$start}, {$end} ";

        $query = $this->db->query($sql);

        return $query->getResultArray();
    }


    // 엑셀 다운로드
    public function getExcelList($data)
    {
        $sql = "SELECT
                    a.atcl_no AS '매물번호',
					g.cd_nm AS '진행상태',
					b.insert_tm AS '접수시간',
					h.cd_nm AS '검증방식',
					CONCAT(f.region_nm, ' ', c.rm_no) AS '주소',
					CONCAT(c.address2, ' ', c.address3) AS '상세주소',
					a.cpid AS '매체사',
					a.realtor_nm AS '중개소',
					i.usr_nm AS '서류/전화 담당자',
					IFNULL(d.insert_tm, d2.insert_tm) AS '서류/전화 확인완료시간',
					a.reg_charger AS '등기부등본 담당자',
					greatest(ifnull(d45.insert_tm, ''), ifnull(d49.insert_tm, '')) AS '등기부등본 확인시간',
					e.insert_tm AS '검증완료 일시',
					k.comment AS '주소 불일치 사유',
					l.comment AS '의뢰인 불일치 사유'
                FROM
                        v2_article_info a
                LEFT JOIN v2_vrfc_req b ON a.vr_sq = b.vr_sq
                LEFT JOIN v2_modify_info c ON a.vr_sq = c.vr_sq 						
                LEFT JOIN v2_article_info_etc m ON a.vr_sq = m.vr_sq
                LEFT JOIN region_codes f ON a.address_code = f.region_cd
                LEFT JOIN v2_chg_stat d ON a.vr_sq = d.vr_sq AND d.stat_cd = '35'
                LEFT JOIN v2_chg_stat d45 ON d45.vr_sq = a.vr_sq AND d45.stat_cd = '45'
                LEFT JOIN v2_chg_stat d49 ON d49.vr_sq = a.vr_sq AND d49.stat_cd = '49'
                LEFT JOIN v2_chg_stat e ON a.vr_sq = e.vr_sq AND e.stat_cd = '60'
                LEFT JOIN codes g ON b.stat_cd = g.cd AND g.category = 'STEP_VERIFICATION'
                LEFT JOIN codes h ON b.vrfc_type = h.cd AND h.category = 'VRFCREQ_WAY'
                LEFT JOIN users i ON a.charger = i.usr_id
                LEFT JOIN users j ON a.reg_charger = j.usr_id
                LEFT JOIN v2_check_list k ON a.vr_sq = k.vr_sq AND k.type = '21'
                LEFT JOIN v2_check_list l ON a.vr_sq = l.vr_sq AND l.type = '22'
                LEFT JOIN v2_chg_stat d2 ON d2.vr_sq = a.vr_sq AND d2.stat_cd = '39'

                WHERE 1=1 ";

        // 매물번호
        if (!empty($data['atcl_no'])) {
            $sql .= "AND a.atcl_no = '{$data['atcl_no']}' ";
        } else {
            // 현재상태
            if (!empty($data['stat_cd'])) {
                $sql .= "AND b.stat_cd = '{$data['stat_cd']}' ";
            }

            // 중개소
            if (!empty($data['realtor_nm'])) {
                $sql .= "AND a.realtor_nm = '{$data['realtor_nm']}' ";
            }

            // 매물구분
            if (!empty($data['rlet_type_cd'])) {
                $sql .= "AND a.rlet_type_cd = '{$data['rlet_type_cd']}' ";
            }


            // 접수기간
            if (!empty($data['receipt_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['receipt_sdate']} 00:00:00' ";
            }

            if (!empty($data['receipt_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['receipt_edate']} 23:59:59' ";
            }

            // 완료기간
            if (!empty($data['complete_sdate'])) {
                $sql .= "AND b.insert_tm >= '{$data['complete_sdate']} 00:00:00' ";
            }

            if (!empty($data['complete_edate'])) {
                $sql .= "AND b.insert_tm <= '{$data['complete_edate']} 23:59:59' ";
            }

            // 검증방식
            if (!empty($data['vrfc_type_sub'])) {
                $sql .= "AND a.vrfc_type_sub = '{$data['vrfc_type_sub']}' ";
            } else {
                if (!empty($data['vrfcreq_way'])) {
                    $sql .= "AND b.vrfc_type = '{$data['vrfcreq_way']}' ";
                }
            }

            // 매체사
            if (!empty($data['rcpt_cpid'])) {
                $sql .= "AND a.cpid = '{$data['rcpt_cpid']}' ";
            }

            // 지역구분
            if (!empty($data['srcDong'])) {
                $sql .= "AND a.address_code = '{$data['srcDong']}' ";
            } else {
                if (!empty($data['srcGugun'])) {
                    $str_gugun = substr($data['srcGugun'], '0', '2');
                    if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
                        $sql .= "AND a.address_code = '{$data['srcGugun']}' ";
                    } else {
                        $gugunPrefix = substr($data['srcGugun'], '0', '5');
                        $sql .= "AND a.address_code LIKE '{$gugunPrefix}%' ";
                    }
                } else {
                    if (!empty($data['srcSido'])) {
                        $sidoPrefix = substr($data['srcSido'], '0', '2');
                        $sql .= "AND a.address_code LIKE '{$sidoPrefix}%' ";
                    }
                }
            }

            // 담당자
            if (!empty($data['damdang'])) {

                switch ($data['charger_gbn']) {
                    case "1":
                        $sql .= "a.charger = '{$data['damdang']}' ";
                        break;
                    case "2":
                        $sql .= "a.reg_charger = '{$data['damdang']}' ";
                        break;
                }

            } else {
                // 배정여부
                if ($data['assign_yn'] !== "A") {
                    switch ($data['charger_gbn'] . $data['assign_yn']) {
                        case "1Y":	// 전화/서류 담당자
                            $sql .= "a.charger != '' ";
                            break;
                        case "1N":	// 전화/서류 담당자                            
                            $sql .= "a.charger = '' ";
                            break;
                        case "2Y":	// 등기부등본 담당자
                            $sql .= "a.reg_charger != '' ";
                            break;
                        case "2N":	// 등기부등본 담당자
                            $sql .= "a.reg_charger IS NULL ";
                            break;
                    }
                }
            }

            // 본부
            if (!empty($data['bonbu'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept1_sq = '{$data['bonbu']}' ";
                } else {
                    $sql .= "AND a.reg_dept1_sq = '{$data['bonbu']}' ";
                }
            }

            // 팀
            if (!empty($data['team'])) {
                if ($data['charger_gbn'] === "1") {
                    $sql .= "AND a.dept2_sq = '{$data['team']}' ";
                } else {
                    $sql .= "AND a.reg_dept2_sq = '{$data['team']}' ";
                }
            }

            // 참고파일
            if (!empty($data['reference_file_url_yn'])) {
                $sql .= "AND a.reference_file_url_yn = '{$data['a.reference_file_url_yn']}' ";
            }

            // 법인
            if (!empty($data['corp_own'])) {
                $sql .= "AND m.corp_own = '{$data['a.corp_own']}' ";
            }

        }


        $sql .= "ORDER BY b.vr_sq DESC , b.insert_tm DESC ";

        $query = $this->db->query($sql);

        return $query->getResultArray();
    }

    // 홍보확인서 정보
    public function getRecordInfo($vr_sq, $file_type)
    {
        $sql = "SELECT seq, vr_sq, use_yn, file_type, view_odr, IFNULL(file_path , '') AS file_path, IFNULL(file_name, '') AS file_name, file_ext, file_size, img_width, img_height, meta_data, insert_user, insert_tm, cloud_upload_yn
                FROM v2_files
                WHERE vr_sq = ? AND use_yn = 'Y' AND file_type = ?
                ORDER BY seq DESC ";

        $query = $this->db->query($sql, [$vr_sq, $file_type]);

        return $query->getRowArray();
    }

    // 메모확인
    public function getMemo($vr_sq)
    {
        $sql = "SELECT memo FROM v2_vrfc_req where vr_sq = ?";

        $query = $this->db->query($sql, [$vr_sq]);

        return $query->getRowArray();
    }


    // 상세화면
    public function getDetail($id)
    {
        $sql = "SELECT
                    a.vr_sq,
					a.dong_ho_chk,
					a.hscplqry_lv,
					b.tel_fail_cause,
					a.reg_charger,
					i2.usr_nm AS reg_charger_nm,
					a.atcl_no,
					b.try_cnt,
					a.cpid,
					a.cp_atcl_id,
					a.rlet_type_cd,
					a.address1,
					a.sise,
					a.rdate,
					a.seller_tel_no,
					a.seller_nm,
					a.realtor_nm,
					a.realtor_tel_no,
					a.charger,
					a.ownerNm,
					a.ownerTelNo,
					b.owner_verifiable,
					b.insert_tm,
					b.stat_cd,
					c.bild_nm,
					b.vrfc_type as vrfc_type_cd,
					b.memo,
					IFNULL(c.rm_no, '') as rm_no,
					c.floor,
					c.floor2,
					c.address_code,
					c.address2,
                    c1.address2a,
                    c1.address2b,
					c1.vrfcMthdTpCd,
					c1.registerBookUniqueNo,
					c1.ownerTypeCode,
					c.address3,
					c.address4,
					c.trade_type as trade_type_cd,
					c.deal_amt,
					c.wrrnt_amt,
					c.lease_amt,
					c.isale_amt,
					c.prem_amt,
					c.sply_spc,
					c.excls_spc,
					c.tot_spc,
					c.grnd_spc,
					c.bldg_spc,
					c.hscp_no,
					c.ptp_no,
					d.insert_tm as update_res_tm,
					e.insert_tm as result_tm,
					f.region_nm,
					g.cd_nm as pre_stat,
					g.cd as pre_stat_cd,
					h.cd_nm as vrfc_type,
					i.usr_nm,
					j.cd_nm as trade_type,
					c.hscp_nm, 
					c.ptp_nm,
					l.success,
					k.cd_nm as atcl_nm,
					m.code as result_d11,
					m.comment,
					n.code as fax_conf_yn_2,
					o.code as fax_conf_yn_3,
					p.code as fax_conf_yn_4,
					n.comment as fax_conf_yn_info_2,
					o.comment as fax_conf_yn_info_3,
					p.comment as fax_conf_yn_info_4,
					v.success AS tel_suc, 
					r.code AS tel_agree,
					s.code AS tel_conf_yn_2, 
					t.code AS tel_conf_yn_3, 
					u.code AS tel_conf_yn_4,
					z.code AS tel_conf_yn_5,
					s.comment AS tel_conf_yn_info_2, 
					t.comment AS tel_conf_yn_info_3,
					u.comment AS tel_conf_yn_info_4,
					w.success AS reg_conf_yn_1,
					x.code AS reg_conf_yn_2,
					y.code AS reg_conf_yn_3,
					x.comment AS reg_conf_yn_info_2,
					y.comment AS reg_conf_yn_info_3,
					b.rgbk_confirm,
					a.confirm_doc_img_url,
					a.cert_register,
					a.cert_register_save_yn,
					a.confirm_doc_img_url_save_yn,
					a.reference_file_url,
					a.reference_file_url_save_yn,
					a.reference_file_url_yn,
					IF(b.insert_tm <= DATE_ADD(CURDATE(), INTERVAL -2 MONTH),'Y','N') after60,
					c1.vir_addr_yn, 
					c1.noRgbkVrfcReqYn,
                    c1.areaByBdbkVrfcReqYn,
					sm.sm_apporval_date ,
                    sm.sm_end_date,
                    sm.sm_seq,
					registerBookUniqueNumber
                FROM
                    v2_article_info a
                JOIN v2_vrfc_req b ON a.vr_sq = b.vr_sq
                JOIN v2_modify_info c ON a.vr_sq = c.vr_sq 			
                LEFT JOIN v2_article_info_etc c1 ON c1.vr_sq = a.vr_sq
                LEFT JOIN region_codes f ON a.address_code = f.region_cd
                LEFT JOIN v2_chg_stat d ON a.vr_sq = d.vr_sq AND d.stat_cd = '35'
                LEFT JOIN v2_chg_stat e ON a.vr_sq = e.vr_sq AND d.stat_cd = '60'
                LEFT JOIN codes g ON b.stat_cd = g.cd AND g.category = 'STEP_VERIFICATION'
                LEFT JOIN codes h ON b.stat_cd = h.cd AND g.category = 'VRFCREQ_WAY'
                LEFT JOIN codes j ON b.stat_cd = h.cd AND j.category = 'TRADE_TYPE'
                LEFT JOIN codes k ON b.stat_cd = k.cd AND j.category = 'ARTICLE_TYPE'
                LEFT JOIN v2_confirm l ON a.vr_sq = l.vr_sq AND l.vrfc_type = 'D'
                LEFT JOIN v2_check_list m ON a.vr_sq = m.vr_sq AND m.type = 'D11'
                LEFT JOIN v2_check_list n ON a.vr_sq = n.vr_sq AND m.type = 'D12'
                LEFT JOIN v2_check_list o ON a.vr_sq = o.vr_sq AND m.type = 'D13'
                LEFT JOIN v2_check_list p ON a.vr_sq = p.vr_sq AND m.type = 'D14'
                LEFT JOIN v2_confirm v ON a.vr_sq = v.vr_sq AND v.vrfc_type = 'T'
                LEFT JOIN v2_check_list r ON a.vr_sq = r.vr_sq AND r.type = 'T11'
                LEFT JOIN v2_check_list s ON a.vr_sq = s.vr_sq AND r.type = 'T12'
                LEFT JOIN v2_check_list t ON a.vr_sq = t.vr_sq AND r.type = 'T13'
                LEFT JOIN v2_check_list u ON a.vr_sq = u.vr_sq AND r.type = 'T14'
                LEFT JOIN v2_check_list z ON a.vr_sq = z.vr_sq AND r.type = 'T15'
                LEFT JOIN v2_confirm w ON a.vr_sq = w.vr_sq AND w.vrfc_type = 'R'
                LEFT JOIN v2_check_list x ON a.vr_sq = x.vr_sq AND x.type = '21'
                LEFT JOIN v2_check_list y ON a.vr_sq = y.vr_sq AND x.type = '22'
                LEFT JOIN users i ON a.charger = i.usr_id
                LEFT JOIN users i2 ON a.reg_charger = i2.usr_id
                LEFT JOIN scomplex_manage sm ON a.hscp_no = sm.sm_code
                WHERE a.vr_sq = ? ";


        $query = $this->db->query($sql, [$id]);

        return $query->getRowArray();
    }


    // 변경이력 조회
    public function getHistory($id)
    {
        $sql = "SELECT
                    a.seq,
                    a.vr_sq,
                    a.stat_cd,
                    a.chg_type,
                    a.insert_id,
                    a.insert_tm,
                    a.memo,
                    b.cd_nm as stat_cd_nm,
                    c.cd_nm as chg_type
                FROM
                    v2_chg_history a
                LEFT JOIN codes b ON a.stat_cd = b.cd AND b.category = 'STEP_VERIFICATION'							
                LEFT JOIN codes c ON a.chg_type = c.cd AND b.category = 'CHANGED_TYPE'
                WHERE
                    a.vr_sq = ?
                ORDER BY a.seq DESC ";

        $query = $this->db->query($sql, [$id]);

        return $query->getResultArray();
    }


    // 가격수정
    public function changePrice($param)
    {
        $this->db->transStart();

        $usr_id = session('usr_id');

        $detail = $this->getDetail($param['rcpt_key']);

        if ($param['trade_type'] != 'B2') {
            // 월세가 아닐경우에는 월세가에 0으로 ....
            $data['lease_amt'] = $param['atcl_amt3'];
        }

        if (!empty($param['atcl_amt1']))
            $data['deal_amt'] = $param['atcl_amt1'];
        if (!empty($param['atcl_amt2']))
            $data['wrrnt_amt'] = $param['atcl_amt2'];
        if (!empty($param['atcl_amt3']))
            $data['lease_amt'] = $param['atcl_amt3'];	// 월세이고 월세가격이 입력되지 않았으면... 원래 금액으로
        if (!empty($param['atcl_amt4']))
            $data['deal_amt'] = $param['atcl_amt4'];
        if (!empty($param['isale_amt']))
            $data['isale_amt'] = $param['isale_amt'];
        if (!empty($param['prem_amt']))
            $data['prem_amt'] = $param['prem_amt'];

        $data['modify_yn'] = 'Y';

        $builder = $this->db->table('v2_modify_info');
        $ok = $builder->where('vr_sq', $param['rcpt_key'])->update($data);
        if ($ok === false) {
            return [
                'success' => false,
                'msg' => '저장 실패',
            ];
        }

        $memo = "가격변경 ";
        $this->saveHistory($detail['vr_sq'], $detail['pre_stat_cd'], 'C25', $usr_id, $memo);

        $this->db->transComplete();

        return [
            'success' => true,
        ];
    }

    // 정보수정
    public function modifyInfo($atcl_vr_sq, $atcl_hscp_nm, $atcl_ptp_nm, $atcl_vrfc_type, $trade_type, $atcl_addr1, $atcl_addr1a, $atcl_addr1b, $atcl_addr2, $atcl_hscp_no, $atcl_ptp_no, $atcl_amt1, $atcl_amt2, $atcl_amt3, $atcl_floor, $atcl_floor2, $atcl_amt4, $isale_amt, $prem_amt)
    {
        $this->db->transStart();

        $usr_id = session('usr_id');

        $detail = $this->getDetail($atcl_vr_sq);

        if ($trade_type != 'B2') {
            // 월세가 아닐경우에는 월세가에 0으로 ....
            $atcl_amt3 = '0';
            $data['lease_amt'] = $atcl_amt3;
        }
        if (!empty($trade_type))
            $data['trade_type'] = $trade_type;
        if (!empty($atcl_hscp_nm))
            $data['hscp_nm'] = $atcl_hscp_nm;
        if (!empty($atcl_ptp_nm))
            $data['ptp_nm'] = $atcl_ptp_nm;
        if (!empty($atcl_addr1))
            $data['address2'] = $atcl_addr1;  // 폐기 예정
        if (!empty($atcl_addr1a))
            $data['address2a'] = $atcl_addr1a;
        if (!empty($atcl_addr1b))
            $data['address2b'] = $atcl_addr1b;
        if (!empty($atcl_addr2))
            $data['address3'] = $atcl_addr2;
        if (!empty($atcl_hscp_no))
            $data['hscp_no'] = $atcl_hscp_no;
        if (!empty($atcl_ptp_no))
            $data['ptp_no'] = $atcl_ptp_no;
        if (!empty($atcl_amt1))
            $data['deal_amt'] = $atcl_amt1;
        if (!empty($atcl_amt2))
            $data['wrrnt_amt'] = $atcl_amt2;
        if (!empty($atcl_amt3))
            $data['lease_amt'] = $atcl_amt3;	// 월세이고 월세가격이 입력되지 않았으면... 원래 금액으로
        if (!empty($atcl_amt4))
            $data['deal_amt'] = $atcl_amt4;
        if (!empty($isale_amt))
            $data['isale_amt'] = $isale_amt;
        if (!empty($prem_amt))
            $data['prem_amt'] = $prem_amt;
        if (!empty($atcl_floor))
            $data['floor'] = $atcl_floor;
        if (!empty($atcl_floor2))
            $data['floor2'] = $atcl_floor2;
        $data['modify_yn'] = 'Y';

        $builder = $this->db->table('v2_modify_info');
        $ok = $builder->where('vr_sq', $atcl_vr_sq)->update($data);
        if ($ok === false) {
            return [
                'success' => false,
                'msg' => '저장 실패',
            ];
        }

        $last_query = $this->db->getLastQuery();
        $current_url = current_url();


        $memo = "상세정보수정 ";
        $this->saveHistory(vr_sq: $detail['vr_sq'], stat_cd: $detail['pre_stat_cd'], chg_type: 'C25', usr_id: $usr_id, memo: $memo);

        $faxModel = new FaxModel();
        $faxModel->updateAddress($atcl_vr_sq, $detail['address_code'], $data['address2'], $data['address3'], $data['hscp_no'], $data['hscp_nm']);


        $this->db->transComplete();

        return [
            'success' => true,
        ];

    }

    public function saveModifyVrfc($atcl_vr_sq, $atcl_vrfc_type)
    {

        $usr_id = session('usr_id');

        $list = $this->get_detail($atcl_vr_sq);		//변경된 내용 비교를 위해.

        $data['vrfc_type'] = $atcl_vrfc_type;

        $this->db->where('vr_sq', $atcl_vr_sq);
        $this->db->trans_start();
        $this->db->update('v2_vrfc_req', $data);

        $data['vrfc_type_cd'] = $atcl_vrfc_type;
        $return['error_number'] = $this->db->_error_number();
        $return['error_message'] = $this->db->_error_message();

        if (empty($return['error_number'])) {
            // 로그를 남긴다.
            if ($this->db->affected_rows() > 0) {
                // $changed = $this->what_is_changed($list['data'], $data, $atcl_vr_sq);
                if (!empty($changed)) {
                    $this->saveHistory($list['data']['vr_sq'], $list['data']['pre_stat_cd'], 'C25', $usr_id, "상세정보 수정");
                }
            }
        }
        $this->db->transComplete();
        return $return;
    }

    public function saveApiErr($err_sq, $err_code, $err_nm, $err_time, $err_no, $err_server = '')
    {
        $sql = "INSERT INTO err_api (err_sq, err_code, err_nm, err_time, err_no, err_server)" .
            " VALUES (?, ?, ?, ?, ?, ?);";

        $data = [
            $err_sq,
            $err_code,
            $err_nm,
            $err_time,
            $err_no,
            $err_server
        ];

        $this->db->query($sql, $data);
    }

    // 상태변경
    public function chgArticleStatus($data)
    {

        $usr_id = session('usr_id');

        $this->db->transStart();

        $sql = "INSERT INTO v2_chg_stat 
                (vr_sq, stat_cd, insert_user, insert_tm)
                VALUES
                ({$data['vr_sq']}, '{$data['stat_cd']}', '{$usr_id}', NOW())
                ";

        if ($this->db->query($sql) === false) {
            return [
                'success' => false,
                'msg' => '저장 실패',
            ];
        }

        $detail = $this->getDetail($data['vr_sq']);

        $memo = "상태변경 : " . $detail['stat_cd'] . " => " . $data['stat_cd'];
        $this->saveHistory($data['vr_sq'], $data['stat_cd'], 'C9', $usr_id, $memo);

        $sql = "UPDATE v2_modify_info SET
                modify_yn = 'Y'
                WHERE vr_sq = {$data['vr_sq']}
                ";

        $this->db->query($sql);

        $sql = "UPDATE v2_vrfc_req SET 
                stat_cd = '{$data['stat_cd']}'
                WHERE vr_sq = {$data['vr_sq']}
                ";

        $this->db->query($sql);


        $this->db->transComplete();

        return [
            'success' => true,
        ];

    }

    public function saveMemo($data)
    {
        $usr_id = session('usr_id');

        $sql = "UPDATE v2_vrfc_req SET
                memo = ?
                WHERE vr_sq = ?        
                ";

        if ($this->db->query($sql, [$data['memo'], $data['vr_sq']]) === false) {
            return [
                'success' => false,
                'msg' => '저장 실패',
            ];
        }

        $detail = $this->getDetail($data['vr_sq']);

        $memo = "메모변경 : " . $detail['memo'] . " => " . $data['memo'];
        $this->saveHistory($data['vr_sq'], $data['pre_stat_cd'], 'C19', $usr_id, $memo);
        return [
            'success' => true,
        ];
    }

    // 현재상태확인
    public function chkStat($vr_sq)
    {
        $sql = "SELECT stat_cd FROM v2_vrfc_req WHERE vr_sq = ?";
        $data = [
            $vr_sq
        ];
        $query = $this->db->query($sql, $data);
        return $query->getRowArray();
    }

    public function chkTryCnt($vr_sq)
    {
        $columns = 'a.try_cnt';
        $builder = $this->db->table('v2_vrfc_req a');
        $builder->select($columns);
        $builder->where('vr_sq', $vr_sq);
        $query = $builder->get();

        return $query->getRowArray();
    }

    public function chkRegiTryCnt($atcl_vr_sq)
    {		//1차 검증인지 2차 검증인지 확인.
        $builder = $this->db->table('v2_vrfc_req a');
        $builder->select('a.reg_try_cnt');
        $builder->where('vr_sq', $atcl_vr_sq);
        $query = $builder->get();

        return $query->getRowArray();
    }

    public function chkConfirm($vr_sq, $reg_yn)
    {
        $columns = "a.vr_sq";
        $builder = $this->db->table('v2_confirm a');
        $builder->select($columns);
        $builder->where('vr_sq', $vr_sq);

        if ($reg_yn) {
            $builder->where('vrfc_type', $reg_yn); // 등기부등본 정보 확인시
        }

        $query = $builder->get();
        $result = $query->getNumRows();

        return $result;
    }

    public function insertConfirm($vr_sq, $vrfc_type, $success, $type, $usr_id = '', $usr_sq = '')
    {
        if (empty($usr_sq))
            $usr_sq = session('usr_sq');
        if (empty($usr_id))
            $usr_id = session('usr_id');

        $sql = "INSERT INTO v2_confirm" .
            "(vr_sq, vrfc_type, success, type, charger, date, insert_user, insert_tm, update_user, update_tm)" .
            "VALUES" .
            "(?, ?, ?, ?, ?, '" . date('YmdHis') . "', ?, NOW(), ?, NOW()) " .
            " ON DUPLICATE KEY UPDATE" .
            " success=values(success), charger=values(charger)
                , date=values(date), update_user=values(update_user), update_tm=values(update_tm)";

        $data = [
            $vr_sq,
            $vrfc_type,
            $success,
            $type,
            $usr_id,
            $usr_sq,
            $usr_sq
        ];

        $this->db->query($sql, $data);
    }
    public function updateConfirm($vr_sq, $vrfc_type, $success)
    {
        $data = [
            'success' => $success,
        ];

        $builder = $this->db->table('v2_confirm');
        $builder->where('vr_sq', $vr_sq);
        $builder->where('vrfc_type', $vrfc_type);
        $builder->update($data);
    }

    public function chgRegiTryCnt($vr_sq, $try_cnt)
    { 	//v2_vrfc_req try_cnt 값 변경.
        $sql = "UPDATE v2_vrfc_req" .
            " SET reg_try_cnt = ?" .
            " WHERE vr_sq = ?";

        $data = array(
            $try_cnt,
            $vr_sq
        );

        $this->db->query($sql, $data);
    }

    public function chgStat($vr_sq, $stat_cd, $insert_tm)
    {
        $usr_sq = session('usr_sq');
        $usr_id = session('usr_id');

        $list = $this->getDetail($vr_sq);

        $this->db->transStart();

        $sql = "INSERT INTO v2_chg_stat (vr_sq, stat_cd, insert_user, insert_tm)
                VALUES (?, ?, ?, ?)
                ON DUPLICATE KEY UPDATE
                    vr_sq = VALUES(vr_sq),
                    stat_cd = VALUES(stat_cd),
                    insert_user = VALUES(insert_user),
                    insert_tm = VALUES(insert_tm)";

        $data = [
            $vr_sq,
            $stat_cd,
            $usr_sq,
            $insert_tm,
        ];

        if ($this->db->query($sql, $data) === false) {
            return [
                'success' => false,
                'msg' => '저장 실패',
            ];
        }

        $this->saveHistory($list['vr_sq'], $stat_cd, 'C9', $usr_id, '서류확인 정보 변경');

        $this->db->transComplete();

        return [
            'success' => true,
        ];
    }

    public function chgStatVrfc($vr_sq, $stat_cd)
    {
        $data = [
            'stat_cd' => $stat_cd,
        ];

        $builder = $this->db->table('v2_vrfc_req');
        $builder->where('vr_sq', $vr_sq);
        $builder->update($data);
    }

    public function chgStatFax($vr_sq, $stat_cd)
    {
        $data = [
            'stat_cd' => $stat_cd,
        ];

        $builder = $this->db->table('fax_imgs');
        $builder->where('vr_sq', $vr_sq);
        $builder->update($data);
    }


    // 파일정보 저장
    public function saveFileInfo($file)
    {
        $this->db->transStart();

        $fileType = $file['file_type'] ?? '1';

        // 기존 파일 확인
        $sql = "SELECT seq FROM v2_files WHERE vr_sq = ? AND use_yn = 'Y' AND file_type = ?";
        $query = $this->db->query($sql, [$file['vr_sq'], $fileType]);
        $result = $query->getRow();

        if (!empty($result)) {
            // 기존 파일을 비활성화
            $sql = "UPDATE v2_files SET use_yn = 'N' WHERE vr_sq = ? AND file_type = ?";
            $this->db->query($sql, [$file['vr_sq'], $fileType]);
        }

        // 새 파일 정보 INSERT
        $data = [
            'vr_sq' => $file['vr_sq'],
            'use_yn' => 'Y',
            'file_type' => $fileType,
            'view_odr' => $file['view_odr'] ?? 0,
            'file_path' => $file['file_path'],
            'file_name' => $file['new_name'],
            'file_ext' => $file['ext'],
            'file_size' => $file['size'],
            'insert_user' => session('usr_sq'),
            'insert_tm' => date('Y-m-d H:i:s'),
            'cloud_upload_yn' => 'Y',
        ];

        $builder = $this->db->table('v2_files');
        $builder->insert($data);

        $this->db->transComplete();
    }

    public function insertChkList($vr_sq, $vrfc_type, $type, $code, $comment)
    {
        if (is_array($comment)) {
            $comment = implode('|', $comment);
        }

        $usr_sq = session('usr_sq');
        $sql = "INSERT INTO v2_check_list" .
            "(vr_sq, vrfc_type, type, code, comment, insert_user, insert_tm)" .
            "VALUES" .
            "(?, ?, ?, ?, ?, ?, NOW())" .
            " ON DUPLICATE KEY UPDATE" .
            " vr_sq=values(vr_sq), vrfc_type=values(vrfc_type), type=values(type), code=values(code), comment=values(comment), insert_user=values(insert_user), insert_tm=values(insert_tm)";

        $data = [
            $vr_sq,
            $vrfc_type,
            $type,
            $code,
            $comment,
            $usr_sq
        ];


        $res = $this->db->query($sql, $data);
    }

    public function chgTryCnt($vr_sq, $try_cnt)
    { 	//v2_vrfc_req try_cnt 값 변경.
        $sql = "UPDATE v2_vrfc_req" .
            " SET try_cnt = ?" .
            " WHERE vr_sq = ?";

        $data = array(
            $try_cnt,
            $vr_sq
        );

        $this->db->query($sql, $data);
    }

    public function InsResChar($atcl_vr_sq)
    {
        $usr_id = session('usr_id');

        $sql = "UPDATE v2_article_info" .
            " SET reg_charger = ?" .
            " WHERE vr_sq = ?";

        $data = array(
            $usr_id,
            $atcl_vr_sq
        );
        $res = $this->db->query($sql, $data);
        $log_v = $this->db->getLastQuery();
        log_message('debug', $log_v);
    }

    /**
     * 검증결과 전송 API를 위한 데이터 조회..
     */
    public function getDataConfirmAPI($vr_sq)
    {
        // 요청정보
        $sql = "SELECT vr_sq, atcl_no, step, cpid, cp_atcl_id, trade_type, realtor_nm, realtor_tel_no, seller_tel_no, vrfc_type, rgbk_confirm, req_type, rdate, stat_cd, try_cnt, insert_user, insert_tm
                FROM v2_vrfc_req WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowVrfcReq = $query->getRowArray();

        log_message('debug', $this->db->getLastQuery());

        // 매물정보
        $sql = "SELECT vr_sq, atcl_no, cpid, cp_atcl_id, rlet_type_cd, trade_type, address_code, address1, address2, address3, sply_spc, excls_spc, tot_spc, grnd_spc, bldg_spc, deal_amt, wrrnt_amt, lease_amt, isale_amt, prem_amt, sise, floor, rdate, seller_tel_no, seller_nm, realtor_nm, realtor_tel_no, hscp_no, hscp_nm, ptp_no, ptp_nm, charger, req_price_yn, reg_charger, dept1_sq, dept2_sq, reg_dept1_sq, reg_dept2_sq, floor2
                FROM v2_article_info WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowArticleInfo = $query->getRowArray();

        log_message('debug', $this->db->getLastQuery());

        // 수정정보
        $sql = "SELECT vr_sq, bild_nm, rm_no, floor, address_code, address2, address3, address4, trade_type, deal_amt, wrrnt_amt, lease_amt, isale_amt, prem_amt, sply_spc, excls_spc, tot_spc, grnd_spc, bldg_spc, hscp_no, hscp_nm, ptp_no, ptp_nm, modify_yn, floor2
                FROM v2_modify_info WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowModifyInfo = $query->getRowArray();

        log_message('debug', $this->db->getLastQuery());

        // 검증결과
        $sql = "SELECT vr_sq, vrfc_type, success, type, charger, date, insert_user, insert_tm, update_user, update_tm, work_type
                FROM v2_confirm WHERE vr_sq = ? AND vrfc_type = ?";
        $query = $this->db->query($sql, [$vr_sq, $rowVrfcReq['vrfc_type']]);
        $rowConfirm = $query->getRowArray();

        log_message('debug', $this->db->getLastQuery());

        // 확인정보
        $sql = "SELECT type, code, comment, ownerNm, ownerBirth FROM v2_check_list WHERE vr_sq = ? AND vrfc_type = ? AND type LIKE CONCAT(vrfc_type, '%')";
        $query = $this->db->query($sql, [$vr_sq, $rowVrfcReq['vrfc_type']]);
        $resCheckList = $query->getResultArray();

        log_message('debug', $this->db->getLastQuery());

        if (!empty($rowConfirm)) {
            log_message('debug', implode(', ', $rowConfirm));
        }

        $atclNo = $rowVrfcReq['atcl_no'] ?? null;
        $success = !empty($rowConfirm['success']);
        $charger = $rowConfirm['charger'] ?? null;
        $date = $rowConfirm['date'] ?? null;
        $tryCnt = $rowVrfcReq['try_cnt'] ?? 0;

        $checkList = [];
        foreach ($resCheckList as $row) {
            $checkList[] = [
                'type' => $row['type'],
                'code' => $row['code'],
                'comment' => $row['comment'],
                'ownerNm' => $row['ownerNm'],
                'ownerBirth' => $row['ownerBirth'],
            ];
        }

        $modifyInfo = [];
        if (($rowModifyInfo['modify_yn'] ?? 'N') === 'Y') {
            if (!empty($rowModifyInfo['hscp_no'])) {
                // 공동주택
                $modifyInfo = [
                    'hscpNo' => $rowModifyInfo['hscp_no'],
                    'ptpNo' => $rowModifyInfo['ptp_no'],
                    'bildNm' => $rowModifyInfo['address2'],
                    'rmNo' => $rowModifyInfo['address3'],
                    'tradeType' => $rowModifyInfo['trade_type'],
                    'dealAmt' => $rowModifyInfo['deal_amt'],
                    'wrrntAmt' => $rowModifyInfo['wrrnt_amt'],
                    'leaseAmt' => $rowModifyInfo['lease_amt'],
                    'isaleAmt' => $rowModifyInfo['isale_amt'],
                    'premAmt' => $rowModifyInfo['prem_amt'],
                    'floor' => $rowModifyInfo['floor'],
                ];
            } else {
                // 비공동주택
                $modifyInfo = [
                    'addressCode' => $rowModifyInfo['address_code'],
                    'address2' => $rowModifyInfo['address2'],
                    'address3' => $rowModifyInfo['address3'],
                    'tradeType' => $rowModifyInfo['trade_type'],
                    'dealAmt' => $rowModifyInfo['deal_amt'],
                    'wrrntAmt' => $rowModifyInfo['wrrnt_amt'],
                    'leaseAmt' => $rowModifyInfo['lease_amt'],
                    'splySpc' => $rowModifyInfo['sply_spc'],
                    'exclsSpc' => $rowModifyInfo['excls_spc'],
                    'totSpc' => $rowModifyInfo['tot_spc'],
                    'grndSpc' => $rowModifyInfo['grnd_spc'],
                    'bldgSpc' => $rowModifyInfo['bldg_spc'],
                    'floor' => $rowModifyInfo['floor'],
                    'floor2' => $rowModifyInfo['floor2'],
                ];
            }

            return [
                'atclNo' => $atclNo,
                'success' => $success,
                'checkList' => $checkList,
                'charger' => $charger,
                'modifyInfo' => $modifyInfo,
                'date' => $date,
                'try_cnt' => $tryCnt,
            ];
        }

        return [
            'atclNo' => $atclNo,
            'success' => $success,
            'checkList' => $checkList,
            'charger' => $charger,
            'date' => $date,
            'try_cnt' => $tryCnt,
        ];
    }

    /* 등기부등본 API 호출*/
    /**
     * $vrfc_type: 값이 R이면 등기부등본
     */
    public function getDatacertAPI($vr_sq, $vrfc_type = '')
    {
        // 요청정보
        $sql = "SELECT vr_sq, atcl_no, step, cpid, cp_atcl_id, trade_type, realtor_nm, realtor_tel_no, seller_tel_no, vrfc_type, rgbk_confirm, req_type, rdate, stat_cd, try_cnt, insert_user, insert_tm, reg_try_cnt, owner_verifiable
                FROM v2_vrfc_req WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowVrfcReq = $query->getRowArray();

        if (!empty($vrfc_type)) {
            $rowVrfcReq['vrfc_type'] = $vrfc_type;
        }

        log_message('debug', (string) $this->db->getLastQuery());

        // 매물정보
        $sql = "SELECT vr_sq, atcl_no, cpid, cp_atcl_id, rlet_type_cd, trade_type, address_code, address1, address2, address3, sply_spc, excls_spc, tot_spc, grnd_spc, bldg_spc, deal_amt, wrrnt_amt, lease_amt, isale_amt, prem_amt, sise, floor, rdate, seller_tel_no, seller_nm, realtor_nm, realtor_tel_no, hscp_no, hscp_nm, ptp_no, ptp_nm, charger, req_price_yn, reg_charger, dept1_sq, dept2_sq, reg_dept1_sq, reg_dept2_sq, floor2
                FROM v2_article_info WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowArticleInfo = $query->getRowArray();

        log_message('debug', (string) $this->db->getLastQuery());

        // 수정정보
        $sql = "SELECT vr_sq, bild_nm, rm_no, floor, address_code, address2, address3, trade_type, deal_amt, wrrnt_amt, lease_amt, isale_amt, prem_amt, sply_spc, excls_spc, tot_spc, grnd_spc, bldg_spc, hscp_no, hscp_nm, ptp_no, ptp_nm, modify_yn, floor2
                FROM v2_modify_info WHERE vr_sq = ?";
        $query = $this->db->query($sql, [$vr_sq]);
        $rowModifyInfo = $query->getRowArray();

        log_message('debug', (string) $this->db->getLastQuery());

        // 검증결과
        $sql = "SELECT vr_sq, vrfc_type, success, type, charger, date, insert_user, insert_tm, update_user, update_tm, work_type
                FROM v2_confirm WHERE vr_sq = ? AND vrfc_type = ?";
        $query = $this->db->query($sql, [$vr_sq, $rowVrfcReq['vrfc_type']]);
        $rowConfirm = $query->getRowArray();

        log_message('debug', (string) $this->db->getLastQuery());

        // 확인정보
        $sql = "SELECT a.type, a.code, a.comment, b.ownerNm, b.owner_birth
                FROM v2_check_list a
                INNER JOIN v2_article_info b ON a.vr_sq = b.vr_sq
                WHERE a.vr_sq = ? AND a.vrfc_type = ?";
        $query = $this->db->query($sql, [$vr_sq, $rowVrfcReq['vrfc_type']]);
        $resCheckList = $query->getResultArray();

        log_message('debug', (string) $this->db->getLastQuery());

        if (!empty($rowConfirm)) {
            log_message('debug', implode(', ', $rowConfirm));
        }

        $atclNo = $rowVrfcReq['atcl_no'] ?? null;
        $type = $rowVrfcReq['try_cnt'] ?? null;
        $success = !empty($rowConfirm['success']);
        $charger = $rowConfirm['charger'] ?? null;
        $date = $rowConfirm['date'] ?? null;

        switch ($rowVrfcReq['owner_verifiable'] ?? null) {
            case '1':
            case 'true':
                $ownerVerifiable = true;
                break;
            default:
                $ownerVerifiable = false;
                break;
        }

        $checkList = [];
        foreach ($resCheckList as $row) {
            $checkList[] = [
                'type' => $row['type'],
                'code' => $row['code'],
                'comment' => $row['comment'],
                'ownerNm' => $row['ownerNm'],
                'ownerBirth' => $row['owner_birth'],
            ];
        }

        $modifyInfo = [];
        if (($rowModifyInfo['modify_yn'] ?? 'N') === 'Y') {
            if (!empty($rowModifyInfo['hscp_no'])) {
                $modifyInfo = [
                    'hscpNo' => $rowModifyInfo['hscp_no'],
                    'ptpNo' => $rowModifyInfo['ptp_no'],
                    'bildNm' => $rowModifyInfo['address2'],
                    'rmNo' => $rowModifyInfo['address3'],
                    'tradeType' => $rowModifyInfo['trade_type'],
                    'dealAmt' => $rowModifyInfo['deal_amt'],
                    'wrrntAmt' => $rowModifyInfo['wrrnt_amt'],
                    'leaseAmt' => $rowModifyInfo['lease_amt'],
                    'isaleAmt' => $rowModifyInfo['isale_amt'],
                    'premAmt' => $rowModifyInfo['prem_amt'],
                    'floor' => $rowModifyInfo['floor'],
                ];
            } else {
                $modifyInfo = [
                    'addressCode' => $rowModifyInfo['address_code'],
                    'address2' => $rowModifyInfo['address2'],
                    'address3' => $rowModifyInfo['address3'],
                    'tradeType' => $rowModifyInfo['trade_type'],
                    'dealAmt' => $rowModifyInfo['deal_amt'],
                    'wrrntAmt' => $rowModifyInfo['wrrnt_amt'],
                    'leaseAmt' => $rowModifyInfo['lease_amt'],
                    'splySpc' => $rowModifyInfo['sply_spc'],
                    'exclsSpc' => $rowModifyInfo['excls_spc'],
                    'totSpc' => $rowModifyInfo['tot_spc'],
                    'grndSpc' => $rowModifyInfo['grnd_spc'],
                    'bldgSpc' => $rowModifyInfo['bldg_spc'],
                    'floor' => $rowModifyInfo['floor'],
                    'floor2' => $rowModifyInfo['floor2'],
                ];
            }

            return [
                'atclNo' => $atclNo,
                'type' => $type,
                'success' => $success,
                'checkList' => $checkList,
                'charger' => $charger,
                'modifyInfo' => $modifyInfo,
                'date' => $date,
                'ownerVerifiable' => $ownerVerifiable,
            ];
        }

        return [
            'atclNo' => $atclNo,
            'type' => $type,
            'success' => $success,
            'checkList' => $checkList,
            'charger' => $charger,
            'date' => $date,
            'ownerVerifiable' => $ownerVerifiable,
        ];
    }

    public function InsCharger($atcl_vr_sq)
    {
        $usr_id = session('usr_id');

        $sql = "UPDATE v2_article_info" .
            " SET charger = ?" .
            " WHERE vr_sq = ?";

        $data = array(
            $usr_id,
            $atcl_vr_sq
        );

        $this->db->query($sql, $data);
    }

    public function getUpdateFailTime1($vr_sq)
    {
        $sql = "select vr_sq, stat_cd, insert_user, insert_tm " .
            "from v2_chg_stat " .
            "where vr_sq = ? and stat_cd = '39' " .
            "order by insert_tm desc " .
            "limit 1";
        $data = array($vr_sq);
        $query = $this->db->query($sql, $data);
        $row = $query->getRowArray();

        return $row;

    }

    public function getUpdateFailTime2($vr_sq)
    {
        $sql = "select vr_sq, stat_cd, insert_user, insert_tm " .
            "from v2_chg_stat " .
            "where vr_sq = ? and stat_cd = '49' " .
            "order by insert_tm desc " .
            "limit 1";
        $data = array($vr_sq);
        $query = $this->db->query($sql, $data);
        $row = $query->getRowArray();

        return $row;
    }

    public function deleteChkList($vr_sq, $vrfc_type, $type)
    {
        $sql = "delete from v2_check_list where vr_sq = ? and vrfc_type = ? and type = ?";
        $data = array(
            $vr_sq,
            $vrfc_type,
            $type
        );
        $this->db->query($sql, $data);
    }

    public function up_tel_fail_cause($vr_sq, $tel_fail_cause)
    {
        $sql = "UPDATE v2_vrfc_req" .
            " SET tel_fail_cause = ? " .
            " WHERE vr_sq = ?";

        $data = array(
            $tel_fail_cause,
            $vr_sq
        );

        $this->db->query($sql, $data);
    }

    // 변경이력 저장
    public function saveHistory($vr_sq, $stat_cd, $chg_type, $usr_id, $memo)
    {
        $sql = "INSERT INTO v2_chg_history 
                (vr_sq, stat_cd, chg_type, insert_id, insert_tm, memo)
                VALUES
                (?, ?, ?, ?, NOW(), ?)
                ";

        $data = [
            $vr_sq,
            $stat_cd,
            $chg_type,
            $usr_id,
            $memo
        ];

        $this->db->query($sql, $data);
    }



}