diff --git a/wms/cont/api/getElevatorPrice.php b/wms/cont/api/getElevatorPrice.php index 92f9d4c1..cd3be6b1 100644 --- a/wms/cont/api/getElevatorPrice.php +++ b/wms/cont/api/getElevatorPrice.php @@ -2,29 +2,27 @@ require_once "../../mkt/conn.php"; -$spec = $_GET['spec']; -$person = $_GET['person']; -$stop = $_GET['stop']; -$weight = $_GET['weight']; -$speed = $_GET['speed']; -$m1 = $_GET['m1']; -$method = $_GET['method']; -$cycle = $_GET['cycle']; -if($spec == "MAE100"){ - $elevator_type = "A"; -}elseif($spec == "MAF100"){ - $elevator_type = "B"; -}elseif($spec == "MAM200"){ - $elevator_type = "D"; -}elseif($spec == "MAH100"){ - $elevator_type = "E"; -} - -$sql_str = "SELECT * FROM maintain_standard_option WHERE elevator_type=:elevator_type AND min_speed = :min_speed AND min_persons <= :person AND max_persons >= :person AND is_m1_bundle=:m1 ORDER bY id DESC"; +$spec = $_GET['spec'] ?? ''; +$person = $_GET['person'] ?? ''; +$stop = $_GET['stop'] ?? ''; +$weight = $_GET['weight'] ?? ''; +$speed = $_GET['speed'] ?? ''; +$m1 = $_GET['m1'] ?? ''; +$method = $_GET['method'] ?? ''; +$cycle = $_GET['cycle'] ?? ''; +$elevator_type = match($spec){ + "MAE100" => "A", + "MAF100" => "B", + "MAM200" => "D", + "MAH100" => "E", +}; +$sql_str = "SELECT * FROM maintain_standard_option +WHERE elevator_type=:elevator_type AND min_speed<=:speed AND max_speed>=:speed AND min_persons <= :person AND max_persons >= :person AND is_m1_bundle=:m1 +ORDER bY id DESC"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':elevator_type', $elevator_type); -$stmt->bindParam(':min_speed', $speed); $stmt->bindParam(':person', $person); +$stmt->bindParam(':speed', $speed); $stmt->bindParam(':m1', $m1); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); diff --git a/wms/cont/api/postElevatorPricereview.php b/wms/cont/api/postElevatorPricereview.php index b4d540db..03356932 100644 --- a/wms/cont/api/postElevatorPricereview.php +++ b/wms/cont/api/postElevatorPricereview.php @@ -25,387 +25,460 @@ $pay_method = $_POST['pay_method']; $status = $_POST['status']; $elevators = json_decode($_POST['elevators'], true); $otherOptions = json_decode($_POST['otherOptions'], true); - +$payment_kind = $_POST['pay_method']; $current_date = date("Y-M-d H:i:s"); -$sql_str = "SELECT status FROM con_maintance_examine_apply WHERE vol_no = :vol_no AND apply_key = :apply_key"; +$total_price = $_POST['total_price']; +$total_sale_price = $_POST['total_sale_price']; + +$sql_str = "SELECT status FROM con_maintance_examine_apply WHERE (vol_no, apply_key) = (:vol_no, :apply_key) "; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':vol_no', $vol_no); $stmt->bindParam(':apply_key', $apply_key); $stmt->execute(); $contract = $stmt->fetch(PDO::FETCH_ASSOC); -if(!$contract){ - $sql_str = "INSERT INTO con_maintance_examine_apply (apply_key, vol_no, customer, address, case_name ,brand, num, salesman, maintain_kind, contract_begin_date, contract_end_date, contract_kind, payment_kind, progress_remark, service_fee, total_price, total_sale_price, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, creater, create_at) - VALUES (:apply_key, :vol_no, :customer, :address, :case_name ,:brand, :num, :salesman, :maintain_kind, :contract_begin_date, :contract_end_date, :contract_kind, :payment_kind, :progress_remark, :service_fee, :total_price, :total_sale_price, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :creater, :create_at)"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':vol_no', $vol_no); - $stmt->bindParam(':customer', $customer); - $stmt->bindParam(':address', $address); - $stmt->bindParam(':case_name', $case_name); - $stmt->bindParam(':brand', $brand); - $stmt->bindParam(':num', $num); - $stmt->bindParam(':salesman', $salesman); - $stmt->bindParam(':maintain_kind', $maintain_kind); - $stmt->bindParam(':contract_begin_date', $contract_begin_date); - $stmt->bindParam(':contract_end_date', $contract_end_date); - $stmt->bindParam(':contract_kind', $contract_kind); - $stmt->bindParam(':payment_kind', $payment_kind); - $stmt->bindParam(':progress_remark', $progress_remark); - $stmt->bindParam(':service_fee', $serviceFee); - $stmt->bindParam(':total_price', $total_price); - $stmt->bindParam(':total_sale_price', $total_sale_price); - $stmt->bindParam(':penalty', $penalty); - $stmt->bindParam(':deposit_rate', $deposit_rate); - $stmt->bindParam(':keep_rate', $keep_rate); - $stmt->bindParam(':warranty_rate', $warranty_rate); - $stmt->bindParam(':memo', $remark); - $stmt->bindParam(':status', $status); - $stmt->bindParam(':creater', $creater); - $stmt->bindParam(':create_at', $current_date); - $stmt->execute(); - - $sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain__months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at) - VALUES (:apply_key, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain__months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) "; - - foreach($elevators as $elevator){ - if(empty($elevator['permitNumber'])) $register_code = "A"; - - if($elevator['spec'] == "MAE100") $elevator_kind = "A"; - if($elevator['spec'] == "MAF100") $elevator_kind = "B"; - if($elevator['spec'] == "MAM200") $elevator_kind = "D"; - if($elevator['spec'] == "MAH100") $elevator_kind = "E"; - $speed_governors_check_expense = null; - $maintain_times = 1; - $commission_expense = null; - $management_expense = null; - $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; - $cmstatus = "Y"; - +$conn->beginTransaction(); +try{ + if(!$contract){ + $sql_str = "INSERT INTO con_maintance_examine_apply (apply_key, vol_no, customer, address, case_name ,brand, num, salesman, maintain_kind, contract_begin_date, contract_end_date, contract_kind, payment_kind, progress_remark, service_fee, total_price, total_sale_price, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, creater, create_at) + VALUES (:apply_key, :vol_no, :customer, :address, :case_name ,:brand, :num, :salesman, :maintain_kind, :contract_begin_date, :contract_end_date, :contract_kind, :payment_kind, :progress_remark, :service_fee, :total_price, :total_sale_price, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :creater, :create_at)"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':item_no', $elevator['id']); - $stmt->bindParam(':register_code', $register_code); - $stmt->bindParam(':elevator_brand', $elevator['brand']); - $stmt->bindParam(':elevator_kind', $elevator_kind); - $stmt->bindParam(':spec', $elevator['spec']); - $stmt->bindParam(':weight', $elevator['weight']); - $stmt->bindParam(':speed', $elevator['speed']); - $stmt->bindParam(':stop', $elevator['stop']); - $stmt->bindParam(':floors', $elevator['stop']); - $stmt->bindParam(':persons', $elevator['person']); - $stmt->bindParam(':elevator_num', $elevator['qty']); - $stmt->bindParam(':useful_years', $elevator['checkYear']); - $stmt->bindParam(':last_check_date', $elevator['lastDate']); - $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); - $stmt->bindParam(':maintain_times', $maintain_times); - $stmt->bindParam(':is_m1_bundle', $elevator['m1']); - $stmt->bindParam(':maintain__months', $elevator['months']); - $stmt->bindParam(':maintain_period', $elevator['cycle']); - $stmt->bindParam(':maintain_method', $elevator['method']); - $stmt->bindParam(':stand_price', $elevator['price']); - $stmt->bindParam(':contract_price', $elevator['sale_price']); - $stmt->bindParam(':sold_price', $elevator['sale_price']); - $stmt->bindParam(':commission_expense', $elevator['commission_expense']); - $stmt->bindParam(':management_expense', $elevator['management_expense']); - $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); - $stmt->bindParam(':service_expense', $elevator['service_expense']); - $stmt->bindParam(':cmstatus', $cmstatus); - $stmt->bindParam(':updated_at', $updated_at); + $stmt->bindParam(':vol_no', $vol_no); + $stmt->bindParam(':customer', $customer); + $stmt->bindParam(':address', $address); + $stmt->bindParam(':case_name', $case_name); + $stmt->bindParam(':brand', $brand); + $stmt->bindParam(':num', $num); + $stmt->bindParam(':salesman', $salesman); + $stmt->bindParam(':maintain_kind', $maintain_kind); + $stmt->bindParam(':contract_begin_date', $contract_begin_date); + $stmt->bindParam(':contract_end_date', $contract_end_date); + $stmt->bindParam(':contract_kind', $contract_kind); + $stmt->bindParam(':payment_kind', $payment_kind); + $stmt->bindParam(':progress_remark', $progress_remark); + $stmt->bindParam(':service_fee', $serviceFee); + $stmt->bindParam(':total_price', $total_price); + $stmt->bindParam(':total_sale_price', $total_sale_price); + $stmt->bindParam(':penalty', $penalty); + $stmt->bindParam(':deposit_rate', $deposit_rate); + $stmt->bindParam(':keep_rate', $keep_rate); + $stmt->bindParam(':warranty_rate', $warranty_rate); + $stmt->bindParam(':memo', $remark); + $stmt->bindParam(':status', $status); $stmt->bindParam(':creater', $creater); - $stmt->bindParam(':created_at', $created_at); - $stmt->execute(); - } - - $sql_str = "INSERT INTO pricereview_maintain_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, memo) - VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :memo)"; - - foreach($otherOptions as $option){ - $item_price_bp = $option['price']*$option['num']; - $option_relate_spec = $option['toElevator'][0]['id']; - $item_group = "E"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $apply_key); - $stmt->bindParam(':item_no', $option['pr_no']); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $option['name']); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $option['price']); - $stmt->bindParam(':item_qty', $option['num']); - $stmt->bindParam(':item_price_bp', $item_price_bp); - $stmt->bindParam(':memo', $option['memo']); + $stmt->bindParam(':create_at', $current_date); $stmt->execute(); - } -}else{ - $sql_str = "UPDATE con_maintance_examine_apply SET - case_name=:case_name, - num=:num, - maintain_kind=:maintain_kind, - contract_kind=:contract_kind, - payment_kind=:payment_kind, - contract_begin_date=:contract_begin_date, - contract_end_date=:contract_end_date, - service_fee=:service_fee, - total_price=:total_price, - total_sale_price=:total_sale_price, - penalty=:penalty, - deposit_rate=:deposit_rate, - keep_rate=:keep_rate, - warranty_rate=:warranty_rate, - remark=:remark, - status=:status, - updated_at=:updated_at - progress_remark=:progress_remark - WHERE apply_key=:apply_key AND vol_no=:vol_no"; - - $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':vol_no', $vol_no); - $stmt->bindParam(':case_name', $case_name); - $stmt->bindParam(':num', $num); - $stmt->bindParam(':maintain_kind', $maintain_kind); - $stmt->bindParam(':contract_begin_date', $contract_begin_date); - $stmt->bindParam(':contract_end_date', $contract_end_date); - $stmt->bindParam(':contract_kind', $contract_kind); - $stmt->bindParam(':payment_kind', $payment_kind); - $stmt->bindParam(':progress_remark', $progress_remark); - $stmt->bindParam(':service_fee', $serviceFee); - $stmt->bindParam(':total_price', $total_price); - $stmt->bindParam(':total_sale_price', $total_sale_price); - $stmt->bindParam(':penalty', $penalty); - $stmt->bindParam(':deposit_rate', $deposit_rate); - $stmt->bindParam(':keep_rate', $keep_rate); - $stmt->bindParam(':warranty_rate', $warranty_rate); - $stmt->bindParam(':memo', $remark); - $stmt->bindParam(':status', $status); - $stmt->bindParam(':updated_at', $current_date); - $stmt->execute(); + + $sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at) + VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) "; + + foreach($elevators as $elevator){ + if(empty($elevator['permitNumber'])) $register_code = "A"; - //整機單價 - $sql_str = "SELECT * FROM con_maintance_examine_clear WHERE apply_key=:apply_key AND vol_no=:vol_no"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':vol_no', $vol_no); - $stmt->execute(); - $items = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $oldItemsNo = (array)array_column($oldElevators, 'item_no'); - $newItemsNo = (array)array_column($elevators, 'id'); - $onlyInOldIds = array_values(array_diff($oldItemsNo, $newItemsNo)); // 只有舊的有,新傳入的沒有,所以刪除(delete) - $onlyInNewIds = array_values(array_diff($newItemsNo, $oldItemsNo)); //只有新傳入的有,舊的沒有,所以新增(insert) - $inBothIds = array_values(array_intersect($oldItemsNo, $newItemsNo)); //舊的跟新的都有,所以要更新(update) - - foreach($onlyInOldIds as $oldIdx){ - $sql_str = "DELETE FROM con_maintance_examine_clear WHERE apply_key = :apply_key AND item_no = :item_no AND vol_no=:vol_no"; + if($elevator['spec'] == "MAE100") $elevator_kind = "A"; + if($elevator['spec'] == "MAF100") $elevator_kind = "B"; + if($elevator['spec'] == "MAM200") $elevator_kind = "D"; + if($elevator['spec'] == "MAH100") $elevator_kind = "E"; + + $speed_governors_check_expense = null; + $maintain_times = 1; + $commission_expense = null; + $management_expense = null; + $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; + $cmstatus = "Y"; + $cycle = (int)$elevator['cycle']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':item_no', $elevator['id']); + $stmt->bindParam(':register_code', $register_code); + $stmt->bindParam(':elevator_brand', $elevator['brand']); + $stmt->bindParam(':elevator_kind', $elevator_kind); + $stmt->bindParam(':spec', $elevator['spec']); + $stmt->bindParam(':weight', $elevator['weight']); + $stmt->bindParam(':speed', $elevator['speed']); + $stmt->bindParam(':stop', $elevator['stop']); + $stmt->bindParam(':floors', $elevator['stop']); + $stmt->bindParam(':persons', $elevator['person']); + $stmt->bindParam(':elevator_num', $elevator['qty']); + $stmt->bindParam(':useful_years', $elevator['checkYear']); + $stmt->bindParam(':last_check_date', $elevator['lastDate']); + $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); + $stmt->bindParam(':maintain_times', $maintain_times); + $stmt->bindParam(':is_m1_bundle', $elevator['m1']); + $stmt->bindParam(':maintain_months', $elevator['months']); + $stmt->bindParam(':maintain_period', $cycle); + $stmt->bindParam(':maintain_method', $elevator['method']); + $stmt->bindParam(':stand_price', $elevator['price']); + $stmt->bindParam(':contract_price', $elevator['sale_price']); + $stmt->bindParam(':sold_price', $elevator['sale_price']); + $stmt->bindParam(':commission_expense', $elevator['commission_expense']); + $stmt->bindParam(':management_expense', $elevator['management_expense']); + $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); + $stmt->bindParam(':service_expense', $elevator['service_expense']); + $stmt->bindParam(':cmstatus', $cmstatus); + $stmt->bindParam(':updated_at', $updated_at); + $stmt->bindParam(':creater', $creater); + $stmt->bindParam(':created_at', $current_date); + $stmt->execute(); + } + + $sql_str = "INSERT INTO pricereview_maintain_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, memo) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :memo)"; + + foreach($otherOptions as $option){ + $item_price_bp = $option['price']*$option['num']; + $option_relate_spec = (count($option['toElevator']) > 0) ? $option['toElevator'][0]['id'] : null; + $item_group = "E"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $apply_key); + $stmt->bindParam(':price_id', $option['pr_no']); + $stmt->bindParam(':item_no', $option['id']); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $option['name']); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $option['price']); + $stmt->bindParam(':item_qty', $option['num']); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':memo', $option['memo']); + $stmt->execute(); + } + }else{ + $sql_str = "UPDATE con_maintance_examine_apply SET + case_name=:case_name, + num=:num, + maintain_kind=:maintain_kind, + contract_kind=:contract_kind, + payment_kind=:payment_kind, + contract_begin_date=:contract_begin_date, + contract_end_date=:contract_end_date, + service_fee=:service_fee, + total_price=:total_price, + total_sale_price=:total_sale_price, + penalty=:penalty, + deposit_rate=:deposit_rate, + keep_rate=:keep_rate, + warranty_rate=:warranty_rate, + memo=:memo, + brand=:brand, + status=:status, + updated_at=:updated_at, + progress_remark=:progress_remark + WHERE apply_key=:apply_key AND vol_no=:vol_no"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':item_no', $oldidx); $stmt->bindParam(':vol_no', $vol_no); + $stmt->bindParam(':case_name', $case_name); + $stmt->bindParam(':num', $num); + $stmt->bindParam(':maintain_kind', $maintain_kind); + $stmt->bindParam(':contract_begin_date', $contract_begin_date); + $stmt->bindParam(':contract_end_date', $contract_end_date); + $stmt->bindParam(':contract_kind', $contract_kind); + $stmt->bindParam(':payment_kind', $payment_kind); + $stmt->bindParam(':progress_remark', $progress_remark); + $stmt->bindParam(':service_fee', $serviceFee); + $stmt->bindParam(':total_price', $total_price); + $stmt->bindParam(':total_sale_price', $total_sale_price); + $stmt->bindParam(':penalty', $penalty); + $stmt->bindParam(':deposit_rate', $deposit_rate); + $stmt->bindParam(':keep_rate', $keep_rate); + $stmt->bindParam(':warranty_rate', $warranty_rate); + $stmt->bindParam(':memo', $remark); + $stmt->bindParam(':brand', $brand); + $stmt->bindParam(':status', $status); + $stmt->bindParam(':updated_at', $current_date); $stmt->execute(); - } - foreach($onlyInNewIds as $newidx){ - $sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain__months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at) - VALUES (:apply_key, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain__months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) "; - $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $newidx))[0]; - $register_code = empty($elevator['permitNumber']) ? "A" : $elevator['permitNumber']; - if($elevator['spec'] == "MAE100") $elevator_kind = "A"; - if($elevator['spec'] == "MAF100") $elevator_kind = "B"; - if($elevator['spec'] == "MAM200") $elevator_kind = "D"; - if($elevator['spec'] == "MAH100") $elevator_kind = "E"; - - $speed_governors_check_expense = null; - $maintain_times = 1; - $commission_expense = null; - $management_expense = null; - $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; - $cmstatus = "Y"; + //整機單價 + $sql_str = "SELECT * FROM con_maintance_examine_clear WHERE (apply_key, cmstatus) = (:apply_key, 'Y')"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':item_no', $elevator['id']); - $stmt->bindParam(':register_code', $register_code); - $stmt->bindParam(':elevator_brand', $elevator['brand']); - $stmt->bindParam(':elevator_kind', $elevator_kind); - $stmt->bindParam(':spec', $elevator['spec']); - $stmt->bindParam(':weight', $elevator['weight']); - $stmt->bindParam(':speed', $elevator['speed']); - $stmt->bindParam(':stop', $elevator['stop']); - $stmt->bindParam(':floors', $elevator['stop']); - $stmt->bindParam(':persons', $elevator['person']); - $stmt->bindParam(':elevator_num', $elevator['qty']); - $stmt->bindParam(':useful_years', $elevator['checkYear']); - $stmt->bindParam(':last_check_date', $elevator['lastDate']); - $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); - $stmt->bindParam(':maintain_times', $maintain_times); - $stmt->bindParam(':is_m1_bundle', $elevator['m1']); - $stmt->bindParam(':maintain__months', $elevator['months']); - $stmt->bindParam(':maintain_period', $elevator['cycle']); - $stmt->bindParam(':maintain_method', $elevator['method']); - $stmt->bindParam(':stand_price', $elevator['price']); - $stmt->bindParam(':contract_price', $elevator['sale_price']); - $stmt->bindParam(':sold_price', $elevator['sale_price']); - $stmt->bindParam(':commission_expense', $elevator['commission_expense']); - $stmt->bindParam(':management_expense', $elevator['management_expense']); - $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); - $stmt->bindParam(':service_expense', $elevator['service_expense']); - $stmt->bindParam(':cmstatus', $cmstatus); - $stmt->bindParam(':updated_at', $updated_at); - $stmt->bindParam(':creater', $creater); - $stmt->bindParam(':created_at', $created_at); $stmt->execute(); - } - - foreach($inBothIds as $bothidx){ - $sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain__months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, creater, created_at) - VALUES (:apply_key, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain__months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :creater, :created_at) "; - $sql_str = "UPDATE con_maintance_examine_clear SET - register_code=:register_code, - elevator_brand=:elevator_brand, - elevator_kind=:elevator_kind, - spec=:spec, - weight=:weight, - speed=:speed, - stop=:stop, - floors=:floors, - persons=:persons, - elevator_num=:elevator_num, - useful_years=:useful_years, - last_check_date=:last_check_date, - speed_governors_check_expense=:speed_governors_check_expense, - maintain_times=:maintain_times, - is_m1_bundle=:is_m1_bundle, - maintain__months=:maintain__months, - maintain_period=:maintain_period, - maintain_method=:maintain_method, - stand_price=:stand_price, - contract_price=:contract_price, - sold_price=:sold_price, - commission_expense=:commission_expense, - management_expense=:management_expense, - annual_survey_expense=:annual_survey_expense, - service_expense=:service_expense, - cmstatus=:cmstatus, - updated_at=:updated_at - WHERE apply_key=:apply_key AND item_no=:item_no"; - - $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $bothidx))[0]; - $register_code = empty($elevator['permitNumber']) ? "A" : $elevator['permitNumber']; - if($elevator['spec'] == "MAE100") $elevator_kind = "A"; - if($elevator['spec'] == "MAF100") $elevator_kind = "B"; - if($elevator['spec'] == "MAM200") $elevator_kind = "D"; - if($elevator['spec'] == "MAH100") $elevator_kind = "E"; - - $speed_governors_check_expense = null; - $maintain_times = 1; - $commission_expense = null; - $management_expense = null; - $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; - $cmstatus = "Y"; - - $stmt = $conn->prepare($sql_str); + $oldElevators = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $oldItemsNo = (array)array_column($oldElevators, 'item_no'); + $newItemsNo = (array)array_column($elevators, 'id'); + $onlyInOldIds = array_values(array_diff($oldItemsNo, $newItemsNo)); // 只有舊的有,新傳入的沒有,所以刪除(delete) + $onlyInNewIds = array_values(array_diff($newItemsNo, $oldItemsNo)); //只有新傳入的有,舊的沒有,所以新增(insert) + $inBothIds = array_values(array_intersect($oldItemsNo, $newItemsNo)); //舊的跟新的都有,所以要更新(update) + + foreach($onlyInOldIds as $oldIdx){ + // $sql_str = "DELETE FROM con_maintance_examine_clear WHERE apply_key=:apply_key AND item_no=:item_no"; + $sql_str = "UPDATE con_maintance_examine_clear SET cmstatus = 'D' WHERE apply_key=:apply_key AND item_no=:item_no"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':item_no', $oldIdx); + $stmt->execute(); + } + foreach($onlyInNewIds as $newidx){ + $sql_str = "INSERT INTO con_maintance_examine_clear (apply_key, item_no, register_code, elevator_brand, elevator_kind, spec, weight, speed, stop, floors, persons, elevator_num, useful_years, last_check_date, speed_governors_check_expense, maintain_times, is_m1_bundle, maintain_months, maintain_period, maintain_method, stand_price, contract_price, sold_price, commission_expense, management_expense, annual_survey_expense, service_expense, cmstatus, updated_at, creater, created_at) + VALUES (:apply_key, :item_no, :register_code, :elevator_brand, :elevator_kind, :spec, :weight, :speed, :stop, :floors, :persons, :elevator_num, :useful_years, :last_check_date, :speed_governors_check_expense, :maintain_times, :is_m1_bundle, :maintain_months, :maintain_period, :maintain_method, :stand_price, :contract_price, :sold_price, :commission_expense, :management_expense, :annual_survey_expense, :service_expense, :cmstatus, :updated_at, :creater, :created_at) "; + $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $newidx))[0]; + $register_code = empty($elevator['permitNumber']) ? "A" : $elevator['permitNumber']; + if($elevator['spec'] == "MAE100") $elevator_kind = "A"; + if($elevator['spec'] == "MAF100") $elevator_kind = "B"; + if($elevator['spec'] == "MAM200") $elevator_kind = "D"; + if($elevator['spec'] == "MAH100") $elevator_kind = "E"; + + $speed_governors_check_expense = null; + $maintain_times = 1; + $commission_expense = null; + $management_expense = null; + $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; + $cmstatus = "Y"; + $cycle = (int)$elevator['cycle']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':item_no', $elevator['id']); + $stmt->bindParam(':register_code', $register_code); + $stmt->bindParam(':elevator_brand', $elevator['brand']); + $stmt->bindParam(':elevator_kind', $elevator_kind); + $stmt->bindParam(':spec', $elevator['spec']); + $stmt->bindParam(':weight', $elevator['weight']); + $stmt->bindParam(':speed', $elevator['speed']); + $stmt->bindParam(':stop', $elevator['stop']); + $stmt->bindParam(':floors', $elevator['stop']); + $stmt->bindParam(':persons', $elevator['person']); + $stmt->bindParam(':elevator_num', $elevator['qty']); + $stmt->bindParam(':useful_years', $elevator['checkYear']); + $stmt->bindParam(':last_check_date', $elevator['lastDate']); + $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); + $stmt->bindParam(':maintain_times', $maintain_times); + $stmt->bindParam(':is_m1_bundle', $elevator['m1']); + $stmt->bindParam(':maintain_months', $elevator['months']); + $stmt->bindParam(':maintain_period', $cycle); + $stmt->bindParam(':maintain_method', $elevator['method']); + $stmt->bindParam(':stand_price', $elevator['price']); + $stmt->bindParam(':contract_price', $elevator['sale_price']); + $stmt->bindParam(':sold_price', $elevator['sale_price']); + $stmt->bindParam(':commission_expense', $elevator['commission_expense']); + $stmt->bindParam(':management_expense', $elevator['management_expense']); + $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); + $stmt->bindParam(':service_expense', $elevator['service_expense']); + $stmt->bindParam(':cmstatus', $cmstatus); + $stmt->bindParam(':updated_at', $updated_at); + $stmt->bindParam(':creater', $creater); + $stmt->bindParam(':created_at', $current_date); + $stmt->execute(); + } + foreach($inBothIds as $bothidx){ + $sql_str = "UPDATE con_maintance_examine_clear SET + register_code=:register_code, + elevator_brand=:elevator_brand, + elevator_kind=:elevator_kind, + spec=:spec, + weight=:weight, + speed=:speed, + stop=:stop, + floors=:floors, + persons=:persons, + elevator_num=:elevator_num, + useful_years=:useful_years, + last_check_date=:last_check_date, + speed_governors_check_expense=:speed_governors_check_expense, + maintain_times=:maintain_times, + is_m1_bundle=:is_m1_bundle, + maintain_months=:maintain_months, + maintain_period=:maintain_period, + maintain_method=:maintain_method, + stand_price=:stand_price, + contract_price=:contract_price, + sold_price=:sold_price, + commission_expense=:commission_expense, + management_expense=:management_expense, + annual_survey_expense=:annual_survey_expense, + service_expense=:service_expense, + cmstatus=:cmstatus, + updated_at=:updated_at + WHERE (apply_key, item_no) = (:apply_key, :item_no)"; + + $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $bothidx))[0]; + $register_code = empty($elevator['permitNumber']) ? "A" : $elevator['permitNumber']; + if($elevator['spec'] == "MAE100") $elevator_kind = "A"; + if($elevator['spec'] == "MAF100") $elevator_kind = "B"; + if($elevator['spec'] == "MAM200") $elevator_kind = "D"; + if($elevator['spec'] == "MAH100") $elevator_kind = "E"; + + $speed_governors_check_expense = null; + $maintain_times = 1; + $commission_expense = null; + $management_expense = null; + $service_expense = ($elevator['sale_price'] / $total_sale_price) * $serviceFee; + $cmstatus = "Y"; + $cycle = (int)$elevator['cycle']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':register_code', $register_code); + $stmt->bindParam(':elevator_brand', $elevator['brand']); + $stmt->bindParam(':elevator_kind', $elevator_kind); + $stmt->bindParam(':spec', $elevator['spec']); + $stmt->bindParam(':weight', $elevator['weight']); + $stmt->bindParam(':speed', $elevator['speed']); + $stmt->bindParam(':stop', $elevator['stop']); + $stmt->bindParam(':floors', $elevator['stop']); + $stmt->bindParam(':persons', $elevator['person']); + $stmt->bindParam(':elevator_num', $elevator['qty']); + $stmt->bindParam(':useful_years', $elevator['checkYear']); + $stmt->bindParam(':last_check_date', $elevator['lastDate']); + $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); + $stmt->bindParam(':maintain_times', $maintain_times); + $stmt->bindParam(':is_m1_bundle', $elevator['m1']); + $stmt->bindParam(':maintain_months', $elevator['months']); + $stmt->bindParam(':maintain_period', $cycle); + $stmt->bindParam(':maintain_method', $elevator['method']); + $stmt->bindParam(':stand_price', $elevator['price']); + $stmt->bindParam(':contract_price', $elevator['sale_price']); + $stmt->bindParam(':sold_price', $elevator['sale_price']); + $stmt->bindParam(':commission_expense', $elevator['commission_expense']); + $stmt->bindParam(':management_expense', $elevator['management_expense']); + $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); + $stmt->bindParam(':service_expense', $elevator['service_expense']); + $stmt->bindParam(':cmstatus', $cmstatus); + $stmt->bindParam(':updated_at', $updated_at); + + $stmt->bindParam(':item_no', $bothidx); + $stmt->execute(); + } + + //除外項目 + $sql_str = "SELECT * FROM pricereview_maintain_item WHERE (mid, item_group) = (:apply_key, 'E')"; + $stmt = $conn->prepare($sql_str); $stmt->bindParam(':apply_key', $apply_key); - $stmt->bindParam(':register_code', $register_code); - $stmt->bindParam(':elevator_brand', $elevator['brand']); - $stmt->bindParam(':elevator_kind', $elevator_kind); - $stmt->bindParam(':spec', $elevator['spec']); - $stmt->bindParam(':weight', $elevator['weight']); - $stmt->bindParam(':speed', $elevator['speed']); - $stmt->bindParam(':stop', $elevator['stop']); - $stmt->bindParam(':floors', $elevator['stop']); - $stmt->bindParam(':persons', $elevator['person']); - $stmt->bindParam(':elevator_num', $elevator['qty']); - $stmt->bindParam(':useful_years', $elevator['checkYear']); - $stmt->bindParam(':last_check_date', $elevator['lastDate']); - $stmt->bindParam(':speed_governors_check_expense', $speed_governors_check_expense); - $stmt->bindParam(':maintain_times', $maintain_times); - $stmt->bindParam(':is_m1_bundle', $elevator['m1']); - $stmt->bindParam(':maintain__months', $elevator['months']); - $stmt->bindParam(':maintain_period', $elevator['cycle']); - $stmt->bindParam(':maintain_method', $elevator['method']); - $stmt->bindParam(':stand_price', $elevator['price']); - $stmt->bindParam(':contract_price', $elevator['sale_price']); - $stmt->bindParam(':sold_price', $elevator['sale_price']); - $stmt->bindParam(':commission_expense', $elevator['commission_expense']); - $stmt->bindParam(':management_expense', $elevator['management_expense']); - $stmt->bindParam(':annual_survey_expense', $elevator['yearCheckFee']); - $stmt->bindParam(':service_expense', $elevator['service_expense']); - $stmt->bindParam(':cmstatus', $cmstatus); - $stmt->bindParam(':updated_at', $updated_at); - - $stmt->bindParam(':item_no', $bothidx); $stmt->execute(); + $item_other_options = $stmt->fetchAll(PDO::FETCH_ASSOC); + $oldOtherOptionsNo = (array)array_column($item_other_options, 'item_no'); + $newOtherOptioinNo = (array)array_column($otherOptions, 'id'); + + $onlyInOtherOptionOldIds = array_values(array_diff($oldOtherOptionsNo, $newOtherOptioinNo)); + $onlyInOtherOptionNewIds = array_values(array_diff($newOtherOptioinNo, $oldOtherOptionsNo)); + $inBothOtherOptionIds = array_values(array_intersect($oldOtherOptionsNo, $newOtherOptioinNo)); + + foreach($onlyInOtherOptionOldIds as $oldotheroptionidx){ + $sql_str = "DELETE FROM pricereview_maintain_item WHERE (mid, item_no, item_group) = (:apply_key, :item_no, 'E')"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':item_no', $oldotheroptionidx); + $stmt->execute(); + } + + foreach($onlyInOtherOptionNewIds as $newotheroptionidx){ + $option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $newotheroptionidx))[0]; + + $sql_str = "INSERT INTO pricereview_maintain_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, memo) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :memo)"; + + $item_price_bp = $option['price']*$option['num']; + $option_relate_spec = (count($option['toElevator']) > 0) ? $option['toElevator'][0]['id'] : null; + $item_group = "E"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $apply_key); + $stmt->bindParam(':price_id', $option['pr_no']); + $stmt->bindParam(':item_no', $option['id']); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $option['name']); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $option['price']); + $stmt->bindParam(':item_qty', $option['num']); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':memo', $option['memo']); + $stmt->execute(); + } + foreach($inBothOtherOptionIds as $bothotheroptionidx){ + $option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $bothotheroptionidx))[0]; + + $sql_str = "UPDATE pricereview_maintain_item SET item_spec=:item_spec, price_id=:price_id, option_relate_spec=:option_relate_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, memo = :memo + WHERE (mid, item_no, item_group) = (:apply_key, :item_no, :item_group)"; + + $item_group = "E"; + $item_price_bp = $option['price']*$option['num']; + $option_relate_spec = (count($option['toElevator']) > 0) ? $option['toElevator'][0]['id'] : null; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':apply_key', $apply_key); + $stmt->bindParam(':item_no', $option['id']); + $stmt->bindParam(':price_id', $option['pr_no']); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $option['name']); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $option['price']); + $stmt->bindParam(':item_qty', $option['num']); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':memo', $option['memo']); + $stmt->execute(); + } } - - //除外項目 - $sql_str = "SELECT * FROM pricereview_maintain_item WHERE mid = :apply_key AND item_group = 'E'"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $apply_key); - $stmt->execute(); - $item_other_options = $stmt->fetchAll(PDO::FETCH_ASSOC); - $oldOtherOptionsNo = (array)array_column($item_other_options, 'item_no'); - $newOtherOptioinNo = (array)array_column($otherOptions, 'id'); - - $nlyInOtherOptionOldIds = array_values(array_diff($oldOtherOptionsNo, $newOtherOptioinNo)); - $onlyInOtherOptionNewIds = array_values(array_diff($newOtherOptioinNo, $oldOtherOptionsNo)); - $inBothOtherOptionIds = array_values(array_intersect($oldOtherOptionsNo, $newOtherOptioinNo)); - - foreach($onlyInOtherOptionOldIds as $oldotheroptionidx){ - $sql_str = "DELETE FROM pricereview_maintain_item WHERE mid = :apply_key AND item_no = :item_no AND item_group = 'E'"; + if($status == "YS"){ + $sql_str = "SELECT * FROM account WHERE accountid = :accountid"; $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $apply_key); - $stmt->bindParam(':item_no', $oldotheroptionidx); + $stmt->bindParam(':accountid', $creater); $stmt->execute(); - } - - foreach($onlyInOtherOptionNewIds as $newotheroptionidx){ - $option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $newotheroptionidx))[0]; - - $sql_str = "INSERT INTO pricereview_maintain_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, memo) - VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :memo)"; - - $item_price_bp = $option['price']*$option['num']; - $option_relate_spec = $option['toElevator'][0]['id']; - $item_group = "E"; + $account = $stmt->fetch(PDO::FETCH_ASSOC); + $manager = $account['manager']; + $sign1 = $manager . ",,"; + $sign2 = "M0012,,"; + $sign3 = "M0008,,"; + + $sign_total = 3; + //服務費大於0 或是 價率低於0.8送至總經理(M0006) + if(false && ($serviceFee > 0 || ($total_sale_price / $total_price) < 0.8)){ + $sign4 = "M0006,,"; + $sign_total = 4; + } + + $sql_str = "INSERT INTO pricereview_maintain_sign (mid, sign1, sign1_note, sign2, sign2_note, sign3, sign3_note, sign4, sign4_note, sign_total, created_at, created_by) + VALUES (:mid, :sign1, :sign1_note, :sign2, :sign2_note, :sign3, :sign3_note, :sign4, :sign4_note, :sign_total, :created_at, :created_by)"; + $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $apply_key); - $stmt->bindParam(':item_no', $option['pr_no']); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $option['name']); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $option['price']); - $stmt->bindParam(':item_qty', $option['num']); - $stmt->bindParam(':item_price_bp', $item_price_bp); - $stmt->bindParam(':memo', $option['memo']); + $stmt->bindParam(':sign1', $sign1); + $stmt->bindParam(':sign1_note', $sign1_note); + $stmt->bindParam(':sign2', $sign2); + $stmt->bindParam(':sign2_note', $sign2_note); + $stmt->bindParam(':sign3', $sign3); + $stmt->bindParam(':sign3_note', $sign3_note); + $stmt->bindParam(':sign4', $sign4); + $stmt->bindParam(':sign4_note', $sign4_note); + $stmt->bindParam(':sign_total', $sign_total); + $stmt->bindParam(':created_at', $current_date); + $stmt->bindParam(':created_by', $creater); $stmt->execute(); - } - foreach($inBothOtherOptionIds as $bothotheroptionidx){ - $option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $bothotheroptionidx))[0]; - - $sql_str = "UPDATE pricereview_maintain_item SET item_spec=:item_spec, option_relate_spec=:option_relate_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, memo = :memo - WHERE mid = :apply_key AND item_no = :item_no AND item_group = 'E'"; - $item_group = "E"; - $item_price_bp = $option['price']*$option['num']; - $option_relate_spec = $option['toElevator'][0]['id']; + include_once "./postFlow.php"; + $form_key = null; + $createFlow = createFlow($apply_key, $manager, "A", "保養", $form_key); + include_once "./postSystemNotice.php"; + $sql_str = "SELECT * FROM con_maintance_examine_apply WHERE apply_key = :apply_key ORDER BY create_at DESC LIMIT 1"; $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $apply_key); - $stmt->bindParam(':item_no', $option['pr_no']); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $option['name']); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $option['price']); - $stmt->bindParam(':item_qty', $option['num']); - $stmt->bindParam(':item_price_bp', $item_price_bp); - $stmt->bindParam(':memo', $option['memo']); + $stmt->bindParam(':apply_key', $apply_key); $stmt->execute(); - } + $contract = $stmt->fetch(PDO::FETCH_ASSOC); + $kind = 1; + $related_id = $apply_key; + $title = "保養價審待簽通知(".$vol_no."," .$customer. ")"; + $content = "待簽核"; + $content = "合約號:".$vol_no . "
"; + $content .= "客戶名稱:" . $customer . "
"; + $content .= "案件名稱:" . $case_name . "
"; + $content .= "時間" . $current_date; + // $content .= "prepare($sql_str); + $stmt->execute(); + $result = $stmt->fetch(PDO::FETCH_ASSOC); + $form_key = $result['form_key']; + $seq = 0; + + $sql_str = "INSERT INTO flow (system_id, flow_id, form_id, form_key, flow_code) + VALUES (:system_id, :flow_id, :form_id, :form_key, :flow_code)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':system_id', $system_id); + $stmt->bindParam(':flow_id', $flow_id); + $stmt->bindParam(':form_id', $form_id); + $stmt->bindParam(':form_key', $form_key); + $stmt->bindParam(':flow_code', $flow_code); + $stmt->execute(); + }else{ + $sql_str = "UPDATE flow SET flow_code = :flow_code WHERE form_key = :form_key"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':form_key', $form_key); + $stmt->bindParam(':flow_code', $flow_code); + $stmt->execute(); + + $sql_str = "SELECT MAX(seq) AS max_seq FROM subflow WHERE form_key = :form_key"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':form_key', $form_key); + $stmt->execute(); + $result = $stmt->fetch(PDO::FETCH_ASSOC); + $seq = $result['max_seq']; + $seq ++; + } + + $created_at = date("Y-m-d H:i:s"); + $sql_str = "INSERT INTO subflow (form_key, seq, current_assigner, update_date,create_date) + VALUES (:form_key, :seq, :current_assigner, :update_date,:create_date)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':form_key', $form_key); + $stmt->bindParam(':seq', $seq); + $stmt->bindParam(':current_assigner', $current_assigner); + $stmt->bindParam(':update_date', $created_at); + $stmt->bindParam(':create_date', $created_at); + $stmt->execute(); + + + return $form_key; +} \ No newline at end of file diff --git a/wms/cont/api/postSystemNotice.php b/wms/cont/api/postSystemNotice.php new file mode 100644 index 00000000..acfc49e1 --- /dev/null +++ b/wms/cont/api/postSystemNotice.php @@ -0,0 +1,20 @@ +prepare($sql_str); + $stmt->bindParam(':kind', $kind); + $stmt->bindParam(':related_id', $related_id); + $stmt->bindParam(':title', $title); + $stmt->bindParam(':content', $content); + $stmt->bindParam(':haveread', $haveread); + $stmt->bindParam(':permission', $permission); + $stmt->bindParam(':url', $url); + $stmt->bindParam(':creater', $creater); + $stmt->bindParam(':create_at', $create_at); + $stmt->execute(); + } +} \ No newline at end of file diff --git a/wms/cont/js/pricereviewAlpine.js b/wms/cont/js/pricereviewAlpine.js index 6c6ec7bf..03423d76 100644 --- a/wms/cont/js/pricereviewAlpine.js +++ b/wms/cont/js/pricereviewAlpine.js @@ -1,7 +1,6 @@ const pricereviewCreate = ()=>{ return { init(){ - console.log(123); }, modalShow:{ elevator: false, @@ -17,13 +16,14 @@ const pricereviewCreate = ()=>{ pre_order_date:pre_order_date, address:address, progress_status:progress_status, - total_spec:0, - elevators:[], - case_name:'', //案件名稱 - contract_status:'', // 契約性質 - pay_method:'', // 付款方式 - startDate:'', //合約開始日期 - endDate:'', // 合約結束日期 + total_spec:total_spec, + elevators: hope_elevators, + case_name:case_name, //案件名稱 + contract_status:contract_kind, // 契約性質 + pay_method:payment_kind, // 付款方式 + startDate:contract_begin_date, //合約開始日期 + endDate:contract_end_date, // 合約結束日期 + brand:brand, modalElevatorInfo:{ spec:'', person:'', @@ -33,7 +33,7 @@ const pricereviewCreate = ()=>{ permitNumber:'', //許可證號碼 brand:'', //品牌 m1:'N', //贈送M1 - months:'', // 保養月數 + months:12, // 保養月數 cycle:'', // 保養週期 method:'', //保養方式 checkYear:'', //竣工檢查年度 @@ -43,7 +43,7 @@ const pricereviewCreate = ()=>{ qty:1, //電梯數量 sale_price:'', //契約報價 }, - otherOptions: [], + otherOptions: otherOptions, modalOtherOptionInfo:{ pr_no:"", name:"", @@ -51,16 +51,16 @@ const pricereviewCreate = ()=>{ num:"", memo:"", }, - otherOptionKey:0, + otherOptionKey: otherOptionKey, currentOtherOptionKey:'', toElevators:[], toElevatorNo:'', - serviceFee:0, - remark:'', - penalty:'', - deposit_rate:'', - keep_rate:'', - warranty_rate:'', + serviceFee: service_fee, + remark:memo, + penalty: penalty, + deposit_rate: deposit_rate, + keep_rate: keep_rate, + warranty_rate: warranty_rate, openCreateElevatorModal(){ this.modalShow.elevator = true; body.style.overflow = 'hidden'; @@ -77,7 +77,7 @@ const pricereviewCreate = ()=>{ permitNumber:'', //許可證號碼 brand:'', //品牌 m1:'N', //贈送M1 - months:'', // 保養月數 + months:12, // 保養月數 cycle:'', // 保養週期 method:'', //保養方式 checkYear:'', //竣工檢查年度 @@ -141,7 +141,6 @@ const pricereviewCreate = ()=>{ const price = this.elevators[idx].price; const qty = this.elevators[idx].qty; const sale_price = this.elevators[idx].sale_price; - this.total_spec ++; this.elevators.push({ id: this.total_spec, @@ -167,6 +166,15 @@ const pricereviewCreate = ()=>{ removeElevator(id){ if(!confirm('確定刪除該電梯?')) return; this.elevators = this.elevators.filter(elevator=> elevator.id != id) + const issetElevators = []; + this.elevators.forEach(elevator=>{ + issetElevators.push(elevator.id); + }) + this.otherOptions.forEach(option=>{ + option.toElevator = option.toElevator.filter(el=>{ + return issetElevators.includes(el.id) + }) + }) }, openCreateOtherOptionFn(){ this.modalShow.other = true @@ -298,11 +306,29 @@ const pricereviewCreate = ()=>{ console.error("Error message:", error); } }, + async getElevatorPrice(idx){ + const spec = this.elevators[idx].spec + const person = this.elevators[idx].person + const stop = this.elevators[idx].stop + const weight = this.elevators[idx].weight + const speed = this.elevators[idx].speed + const m1 = this.elevators[idx].m1 + const method = this.elevators[idx].method + const cycle = this.elevators[idx].cycle + try{ + const res = await axios.get('./api/getElevatorPrice.php', {params: {spec: spec, person:person, weight: weight, stop: stop, speed: speed, m1: m1, method: method, cycle:cycle}}) + this.elevators[idx].price = res.data; + console.log(res.data); + }catch (error) { + console.error("Error message:", error); + } + }, save(){ const form = new FormData(); form.append('vol_no', this.vol_no); form.append('apply_key', this.apply_key); form.append('customer', this.customer); + form.append('brand', this.brand); form.append('address', this.address); form.append('case_name', this.case_name); form.append('brand', this.brand); @@ -318,10 +344,12 @@ const pricereviewCreate = ()=>{ form.append('keep_rate', this.keep_rate); form.append('warranty_rate', this.warranty_rate); form.append('remark', this.remark); - form.append('creater', this.user_id); + form.append('creater', user_id); form.append('pay_method', this.pay_method); form.append('status', 'Y1'); + form.append('total_price', this.totalPrice); + form.append('total_sale_price', this.totalSalePrice); form.append('elevators', JSON.stringify(this.elevators)); form.append('otherOptions', JSON.stringify(this.otherOptions)); @@ -330,12 +358,49 @@ const pricereviewCreate = ()=>{ console.log(res.data); if(res.data == 'success'){ alert("保存成功!"); - // window.location.reload(); + window.location.reload(); } }) }, submit(){ + const form = new FormData(); + form.append('vol_no', this.vol_no); + form.append('apply_key', this.apply_key); + form.append('customer', this.customer); + form.append('brand', this.brand); + form.append('address', this.address); + form.append('case_name', this.case_name); + form.append('brand', this.brand); + form.append('num', this.totalElevatorsNum); + form.append('salesman', this.salesman); + form.append('contract_begin_date', this.startDate); + form.append('contract_end_date', this.endDate); + form.append('contract_kind', this.contract_status); + form.append('progress_status', this.progress_status); + form.append('serviceFee', this.serviceFee); + form.append('penalty', this.penalty); + form.append('deposit_rate', this.deposit_rate); + form.append('keep_rate', this.keep_rate); + form.append('warranty_rate', this.warranty_rate); + form.append('remark', this.remark); + form.append('creater', user_id); + form.append('pay_method', this.pay_method); + form.append('status', 'YS'); + form.append('total_price', this.totalPrice); + form.append('total_sale_price', this.totalSalePrice); + + form.append('elevators', JSON.stringify(this.elevators)); + form.append('otherOptions', JSON.stringify(this.otherOptions)); + + axios.post('./api/postElevatorPricereview.php', form).then(res=>{ + console.log(res.data); + if(res.data == 'success'){ + alert("送審成功!"); + // window.location.reload(); + // window.location.href = './pricereview-index.php?' + token; + } + }) }, async getUsername(user_id){ if(user_id == '') return '---' diff --git a/wms/cont/pricereviewCreate.php b/wms/cont/pricereviewCreate.php index 954f15b0..e8eaf216 100644 --- a/wms/cont/pricereviewCreate.php +++ b/wms/cont/pricereviewCreate.php @@ -13,8 +13,90 @@ $stmt->bindParam(':vol_no', $vol_no); $stmt->execute(); $hope_customer = $stmt->fetch(PDO::FETCH_ASSOC); -$apply_key = getApplyKey(date('ym'), 'cmea_apply_key'); -echo $apply_key; + +$sql_str = "SELECT * FROM con_maintance_examine_apply WHERE vol_no = :vol_no ORDER BY create_at DESC LIMIT 1"; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':vol_no', $vol_no); +$stmt->execute(); +$apply = $stmt->fetch(PDO::FETCH_ASSOC); +if($apply['status'] == 'D'){ + echo ""; +} +if($apply['status'] == 'YS'){ + echo ""; +} +if($apply['status'] == 'YY' || $apply['status'] == 'YN'){ + echo ""; +} + +$apply_key = $apply ? $apply['apply_key'] : getApplyKey(date('ym'), 'cmea_apply_key'); + +$sql_str = "SELECT * FROM con_maintance_examine_clear WHERE apply_key = :apply_key ORDER BY created_at ASC"; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':apply_key', $apply_key); +$stmt->execute(); +$elevators = $stmt->fetchAll(PDO::FETCH_ASSOC); +$hope_elevators = []; +$total_spec = 0; +foreach($elevators as $elevator){ + if($elevator['item_no'] > $total_spec){ + $total_spec = $elevator['item_no']; + } + if($elevator['cmstatus'] == 'D') continue; + $hope_elevators[] = [ + 'id'=> $elevator['item_no'], + 'spec'=> $elevator['spec'], + 'person'=> $elevator['persons'], + 'weight'=> $elevator['weight'], + 'stop'=> $elevator['stop'], + 'speed'=> $elevator['speed'], + 'permitNumber'=> $elevator['register_code'], + 'brand'=> $elevator['elevator_brand'], + 'm1'=> $elevator['is_m1_bundle'], + 'months'=> $elevator['maintain_months'], + 'cycle'=> $elevator['maintain_period'], + 'method'=> $elevator['maintain_method'], + 'checkYear'=> $elevator['useful_years'], + 'lastDate'=> $elevator['last_check_date'], + 'yearCheckFee'=> $elevator['annual_survey_expense'], + 'price'=> $elevator['stand_price'], + 'qty'=> $elevator['elevator_num'], + 'sale_price'=> $elevator['contract_price'], + ]; + +} + +$sql_str = "SELECT * FROM pricereview_maintain_item WHERE (mid, item_group) = (:apply_key, 'E') ORDER BY id ASC"; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':apply_key', $apply_key); +$stmt->execute(); +$items = $stmt->fetchAll(PDO::FETCH_ASSOC); +$otherOptions = []; +$otherOptionKey = 0; +foreach($items as $item){ + if($item['item_no'] > $otherOptionKey){ + $otherOptionKey = (int)$item['item_no']; + } + if($item['option_relate_spec']!= 0 ){ + + } + $toElevator = $item['option_relate_spec']==0 ? [] : [[ + 'id'=>$item['option_relate_spec'], + 'model'=> array_values(array_filter($hope_elevators, fn($val)=> $val['id'] == $item['option_relate_spec']))[0]['spec'], + ]]; + $otherOptions[] = [ + 'id'=> $item['item_no'], + 'pr_no'=> $item['price_id'], + 'name'=> $item['item_spec'], + 'price' => $item['item_unit_price'], + 'num'=> $item['item_qty'], + 'memo'=> $item['memo'], + 'toElevator'=>$toElevator, + ]; +} + + + function getApplyKey($p_yyyymm, $seq_name){ if (empty($p_yyyymm) || empty($seq_name)) return null; global $conn; @@ -78,7 +160,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 電梯品牌 - + 電梯數量 營業員 @@ -106,6 +188,7 @@ function getApplyKey($p_yyyymm, $seq_name){ + 請選擇契約性質 付款方式 @@ -117,13 +200,23 @@ function getApplyKey($p_yyyymm, $seq_name){ + 請選擇付款方式 案件名稱 - + + + 請填寫案件名稱 + 合約開始日期 - + + + 請填寫合約開始日期 + 合約結束日期 - + + + 請填寫合約結束日期 + @@ -136,7 +229,7 @@ function getApplyKey($p_yyyymm, $seq_name){ - + @@ -179,28 +272,26 @@ function getApplyKey($p_yyyymm, $seq_name){ 電梯 - - - 載重(KG) - + 停數 - + 速度(m/min) - @@ -215,7 +306,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 人乘 - @@ -296,7 +387,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 保養方式 - @@ -305,7 +396,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 贈送M1 - @@ -315,6 +406,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 公司發布價(月) + 公司無提供此規格牌價 保養月數 @@ -387,7 +479,7 @@ function getApplyKey($p_yyyymm, $seq_name){ 小計 - + @@ -484,4 +576,25 @@ function getApplyKey($p_yyyymm, $seq_name){ const user_id = ''; const user_name = ''; const progress_remark = ``; + + const memo = ``; + + const contract_kind = ''; + const payment_kind = ''; + const case_name = ''; + const contract_begin_date = ''; + const contract_end_date = ''; + + const total_spec = ''; + const hope_elevators = [...]; + const otherOptionKey = ''; + const otherOptions = [...]; + const token = ''; + + const penalty = ''; + const deposit_rate = ''; + const keep_rate = ''; + const warranty_rate = ''; + const service_fee = ''; + \ No newline at end of file diff --git a/wms/cont/window-modal/modalElevaotr.php b/wms/cont/window-modal/modalElevaotr.php index 045362b7..602e7c86 100644 --- a/wms/cont/window-modal/modalElevaotr.php +++ b/wms/cont/window-modal/modalElevaotr.php @@ -110,7 +110,7 @@ 保養方式 - +