From cd7677d15a4a512b54f9aa05bdd6d5be934b795c Mon Sep 17 00:00:00 2001 From: 10994015 Date: Mon, 26 Feb 2024 09:09:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E6=A2=AF/=E6=B1=B0=E6=94=B9=E5=83=B9?= =?UTF-8?q?=E5=AF=A9=E6=9B=B4=E6=96=B0=200226=20=EF=BC=8C=E5=B7=AE?= =?UTF-8?q?=E4=B8=8A=E5=82=B3=E5=A0=B1=E5=83=B9=E5=96=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/contract/option/facility.xlsx | Bin 0 -> 12281 bytes wms/crm/crmm01-index.php | 2 +- wms/database.php | 2 +- wms/mkt/api/getDemolishPrice.php | 21 + wms/mkt/api/getElevatorMi.php | 7 +- wms/mkt/api/getElevatorPrice.php | 4 +- wms/mkt/api/getUsername.php | 5 +- wms/mkt/api/postNewElevatorPricereview.php | 789 ++++++++++++++++----- wms/mkt/api/putNewElevatorPriceview.php | 56 ++ wms/mkt/assets/js/pricereviewAlpine.js | 448 +++++++++--- wms/mkt/css/pricereview.css | 15 +- wms/mkt/css/pricereview.css.map | 2 +- wms/mkt/css/pricereview.scss | 15 +- wms/mkt/files/MAF200.xlsx | Bin 0 -> 10288 bytes wms/mkt/files/MAQ100.xlsx | Bin 0 -> 10670 bytes wms/mkt/price_normal-index.php | 248 +++++++ wms/mkt/pricereview-index.php | 2 +- wms/mkt/pricereviewCheck.php | 261 ++++--- wms/mkt/pricereviewCreate.php | 641 +++++++++++------ wms/mkt/pricereview_renovate-index.php | 4 +- 20 files changed, 1916 insertions(+), 606 deletions(-) create mode 100644 wms/contract/option/facility.xlsx create mode 100644 wms/mkt/api/getDemolishPrice.php create mode 100644 wms/mkt/api/putNewElevatorPriceview.php create mode 100644 wms/mkt/files/MAF200.xlsx create mode 100644 wms/mkt/files/MAQ100.xlsx diff --git a/wms/contract/option/facility.xlsx b/wms/contract/option/facility.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f51a39441a3f490f6de5bb93603dcccf68a56b70 GIT binary patch literal 12281 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 +$stmt->bindParam(':person', $person); +$stmt->bindParam(':floor', $floor); +$stmt->execute(); + +$demolish = $stmt->fetch(PDO::FETCH_ASSOC); + +if($demolish){ + echo json_encode(['price'=> $demolish['price'], 'id'=> $demolish['id']]); +}else{ + echo false; +} diff --git a/wms/mkt/api/getElevatorMi.php b/wms/mkt/api/getElevatorMi.php index fbea22cc..c7b493ec 100644 --- a/wms/mkt/api/getElevatorMi.php +++ b/wms/mkt/api/getElevatorMi.php @@ -31,8 +31,10 @@ $unloading_fee = round($mi['unloading']); $transport_site_fee = round($mi['transport_site']); $install_fee = round(($mi['install_price'] + ($stop - $mi['base_floor']) * $mi['install_plus']) + $mi['trial_price'] + ($stop - $mi['base_floor']) * $mi['trial_plus']); $free1y_fee = round($mi['free1y']); -$other_fee = round($mi['crane'] + $mi['wooden_box'] + $mi['consumables']); +$other_fee = round($mi['crane'] + $mi['wooden_box'] + $mi['consume'] + $mi['consumables']); +$add_price = 0; +if($spec == 'MAH100') $add_price = 13500; $newMI = [ 'equipment_fee'=>$equipment_fee, @@ -41,6 +43,7 @@ $newMI = [ 'transport_site_fee'=>$transport_site_fee, 'install_fee'=>$install_fee, 'free1y_fee'=>$free1y_fee, - 'other_fee'=>$other_fee + 'other_fee'=>$other_fee, + 'add_price'=>$add_price, ]; echo json_encode($newMI); diff --git a/wms/mkt/api/getElevatorPrice.php b/wms/mkt/api/getElevatorPrice.php index 64b3098c..e31e62b2 100644 --- a/wms/mkt/api/getElevatorPrice.php +++ b/wms/mkt/api/getElevatorPrice.php @@ -3,10 +3,12 @@ require_once("../conn.php"); $model = $_GET['model']; +$kind = $_GET['kind']; -$sql_str = "SELECT id, model, price FROM facility_price WHERE model = :model ORDER BY id DESC"; +$sql_str = "SELECT id, model, price FROM facility_price WHERE model = :model AND kind = :kind ORDER BY id DESC"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':model', $model); +$stmt->bindParam(':kind', $kind); $stmt->execute(); $el = $stmt->fetch(PDO::FETCH_ASSOC); if($el){ diff --git a/wms/mkt/api/getUsername.php b/wms/mkt/api/getUsername.php index d959b5aa..2386329d 100644 --- a/wms/mkt/api/getUsername.php +++ b/wms/mkt/api/getUsername.php @@ -3,7 +3,10 @@ require_once('../conn.php'); $accountid = $_GET['user_id']; - +if($accountid == "---"){ + echo "---"; + exit; +} $sql_str = "SELECT name FROM account WHERE accountid = :accountid"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':accountid', $accountid); diff --git a/wms/mkt/api/postNewElevatorPricereview.php b/wms/mkt/api/postNewElevatorPricereview.php index 5ba7e342..fcfe1c26 100644 --- a/wms/mkt/api/postNewElevatorPricereview.php +++ b/wms/mkt/api/postNewElevatorPricereview.php @@ -14,6 +14,7 @@ $price_total = $_POST['price_total']; $price_rate = $_POST['price_rate']; $special_fee = $_POST['special_fee']; $predeal_date = $_POST['predeal_date']; +$facilitok_date = $_POST['facilitok_date']; $penalty = $_POST['penalty']; $deposit_rate = $_POST['deposit_rate']; $warranty_rate = $_POST['warranty_rate']; @@ -22,213 +23,647 @@ $memo = $_POST['memo']; $status = $_POST['status']; $attatch1 = $_POST['attatch1'] =='' ? NULL : $_POST['attatch1']; $attatch2 = $_POST['attatch2'] =='' ? NULL : $_POST['attatch2']; -$creater = "M0174"; +$creater = $_POST['user_id']; $create_at = date("Y-m-d H:i:s"); -$elevators = $_POST['elevators']; -$options = $_POST['options']; -$otherOptions = $_POST['otherOptions']; +$elevators = json_decode($_POST['elevators'], true); +$options = json_decode($_POST['options'], true); +$otherOptions = json_decode($_POST['otherOptions'], true); +$demolishOptions = json_decode($_POST['demolishOptions'], true); $maintainOptions = $_POST['maintainOptions']; -$paymentRatio = $_POST['paymentRatio']; +$paymentRatio = json_decode($_POST['paymentRatio'], true); $conn->beginTransaction(); +$sql_str = "SELECT id FROM pricereview_main WHERE contractno = :contractno ORDER BY id DESC LIMIT 1"; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':contractno', $contractno); +$stmt->execute(); +$main = $stmt->fetch(PDO::FETCH_ASSOC); -try{ - - $sql_str = "INSERT INTO pricereview_main (contractno, ekind, person, company, case_name, address, compete, price_lowest, price_total, price_rate, special_fee, predeal_date, facilitok_date, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, attatch1, attatch2, creater, create_at) - VALUES (:contractno, :ekind, :person, :company, :case_name, :address, :compete, :price_lowest, :price_total, :price_rate, :special_fee, :predeal_date, :facilitok_date, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :attatch1, :attatch2, :creater, :create_at)"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':contractno', $contractno); - $stmt->bindParam(':ekind', $ekind); - $stmt->bindParam(':person', $person); - $stmt->bindParam(':company', $company); - $stmt->bindParam(':case_name', $case_name); - $stmt->bindParam(':address', $address); - $stmt->bindParam(':compete', $compete); - $stmt->bindParam(':price_lowest', $price_lowest); - $stmt->bindParam(':price_total', $price_total); - $stmt->bindParam(':price_rate', $price_rate); - $stmt->bindParam(':special_fee', $special_fee); - $stmt->bindParam(':predeal_date', $predeal_date); - $stmt->bindParam(':facilitok_date', $facilitok_date); - $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', $memo); - $stmt->bindParam(':status', $status); - $stmt->bindParam(':attatch1', $attatch1); - $stmt->bindParam(':attatch2', $attatch2); - $stmt->bindParam(':creater', $creater); - $stmt->bindParam(':create_at', $create_at); - $stmt->execute(); - $mid = $conn->lastInsertId(); - - //insert 整機單價 - $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note) - VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)"; - - foreach(json_decode($elevators, true) as $elevator){ - $price_id = $elevator['facility_id']; - $item_no = $elevator['id']; - $item_group = "A"; - $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed']; - $item_weight = ""; - $item_op = $elevator['open_converted']; - - $item_unit_price = $elevator['price']; - $item_qty = (int)$elevator['spec_num']; - $item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num']; - $item_price_ct = $elevator['spec_price']; - $note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed']; +if($main){ + try{ + $mid = $main["id"]; + $sql_str = "UPDATE pricereview_main SET price_lowest=:price_lowest, price_total=:price_total, price_rate=:price_rate, special_fee=:special_fee, predeal_date=:predeal_date, facilitok_date=:facilitok_date, penalty=:penalty, deposit_rate=:deposit_rate, keep_rate=:keep_rate, warranty_rate=:warranty_rate, memo=:memo,status=:status, attatch1=:attatch1, attatch2=:attatch2 WHERE id = :id "; $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':price_id', $price_id); - $stmt->bindParam(':item_no', $item_no); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $item_spec); - $stmt->bindParam(':item_weight', $item_weight); - $stmt->bindParam(':item_op', $item_op); - $stmt->bindParam(':item_unit_price', $item_unit_price); - $stmt->bindParam(':item_qty', $item_qty); - $stmt->bindParam(':item_price_bp', $item_price_bp); - $stmt->bindParam(':item_price_ct', $item_price_ct); - $stmt->bindParam(':note', $note); - $stmt->execute(); - } - - //insert options 加價 - $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) - VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + $stmt->bindParam(':id', $mid); + $stmt->bindParam(':price_lowest', $price_lowest); + $stmt->bindParam(':price_total', $price_total); + $stmt->bindParam(':price_rate', $price_rate); + $stmt->bindParam(':special_fee', $special_fee); + $stmt->bindParam(':predeal_date', $predeal_date); + $stmt->bindParam(':facilitok_date', $facilitok_date); + $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', $memo); + $stmt->bindParam(':status', $status); + $stmt->bindParam(':attatch1', $attatch1); + $stmt->bindParam(':attatch2', $attatch2); - foreach(json_decode($options, true) as $option){ - $price_id = $option['id']; - $item_no = $option['key'] + 1; - $item_group = "B"; - $item_spec = $option['name'] . $option['memo']; - $option_relate_spec = $option['toElevator'][0]['id']; - $item_unit_price = $option['price']; - $item_qty = $option['qty']; - $item_price_bp = $option['price'] * $option['qty']; + + $stmt->execute(); + //整機單價 + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'A'"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':price_id', $price_id); - $stmt->bindParam(':item_no', $item_no); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $item_spec); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $item_unit_price); - $stmt->bindParam(':item_qty', $item_qty); - $stmt->bindParam(':item_price_bp', $item_price_bp); $stmt->execute(); - } + $items = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $oldElevators = array_filter($items, fn($el)=> $el['item_group'] == "A"); + + $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) - //insert 除外項目 - $sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) - VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + foreach($onlyInOldIds as $oldidx){ + $sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='A'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $oldidx); + $stmt->execute(); + } + foreach($onlyInNewIds as $newidx){ + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)"; + + $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $newidx))[0]; + $price_id = $elevator['facility_id']; + $item_no = $elevator['id']; + $item_group = "A"; + $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed']; + $item_weight = ""; + $item_op = $elevator['open_converted']; + + $item_unit_price = $elevator['price']; + $item_qty = (int)$elevator['spec_num']; + $item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num']; + $item_price_ct = $elevator['spec_price']; + $note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':item_weight', $item_weight); + $stmt->bindParam(':item_op', $item_op); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':item_price_ct', $item_price_ct); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } + foreach($inBothIds as $bothidx){ + $elevator = array_values(array_filter($elevators, fn($el)=> $el['id'] == $bothidx))[0]; + $price_id = $elevator['facility_id']; + $item_no = $elevator['id']; + $item_group = "A"; + $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed']; + $item_weight = ""; + $item_op = $elevator['open_converted']; + + $item_unit_price = $elevator['price']; + $item_qty = (int)$elevator['spec_num']; + $item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num']; + $item_price_ct = $elevator['spec_price']; + $note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed']; - foreach(json_decode($otherOptions, true) as $option){ - $item_no = $option['id'] + 1; - $item_group = "E"; - $item_spec = $option['name']; - $option_relate_spec = $option['toElevator'][0]['id']; - $item_unit_price = $option['price']; - $item_qty = $option['num']; - $item_price_bp = $option['price'] * $option['num']; + $sql_str = "UPDATE pricereview_item SET price_id=:price_id, item_spec=:item_spec, item_weight=:item_weight, item_op=:item_op, item_unit_price=:item_unit_price, item_qty=:item_qty, item_price_bp=:item_price_bp, item_price_ct=:item_price_ct, note=:note WHERE item_no = :item_no AND mid = :mid AND item_group='A' "; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':item_no', $bothidx); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':item_weight', $item_weight); + $stmt->bindParam(':item_op', $item_op); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':item_price_ct', $item_price_ct); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } + //Option加價 + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'B'"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':item_no', $item_no); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $item_spec); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $item_unit_price); - $stmt->bindParam(':item_qty', $item_qty); - $stmt->bindParam(':item_price_bp', $item_price_bp); $stmt->execute(); - } + $item_options = $stmt->fetchAll(PDO::FETCH_ASSOC); + $oldOptionsNo = (array)array_column($item_options, 'item_no'); + $newOptioinNo = (array)array_column($options, 'key'); + + $onlyInOptionOldIds = array_values(array_diff($oldOptionsNo, $newOptioinNo)); + $onlyInOptionNewIds = array_values(array_diff($newOptioinNo, $oldOptionsNo)); + $inBothOptionIds = array_values(array_intersect($oldOptionsNo, $newOptioinNo)); + + foreach($onlyInOptionOldIds as $oldoptionidx){ + $sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='B'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $oldoptionidx); + $stmt->execute(); + } + foreach($onlyInOptionNewIds as $newoptionidx){ + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)"; + + $option = array_values(array_filter($options, fn($el)=> $el['key'] == $newoptionidx))[0]; + + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + + $price_id = $option['id']; + $item_no = $option['key']; + $item_group = "B"; + $item_spec = $option['name'] . $option['memo']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['qty']; + $item_price_bp = $option['price'] * $option['qty']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->execute(); + } + + foreach($inBothOptionIds as $bothoptionidx){ + $option = array_values(array_filter($options, fn($el)=> $el['key'] == $bothoptionidx))[0]; + + $price_id = $option['id']; + $item_no = $option['key']; + $item_group = "B"; + $item_spec = $option['name'] . $option['memo']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['qty']; + $item_price_bp = $option['price'] * $option['qty']; + + $sql_str = "UPDATE pricereview_item SET price_id = :price_id, item_spec=:item_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec WHERE mid = :mid AND item_no = :item_no AND item_group='B'"; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->execute(); + } - $sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) - VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; - //insert 保養延長 - foreach(json_decode($maintainOptions, true) as $option){ - $item_no = $option['id'] + 1; - $item_group = "D"; - $item_spec = $option['toElevator'][0]['model']; - $option_relate_spec = $option['toElevator'][0]['id']; - $item_unit_price = $option['price']; - $item_qty = $option['num']; - $item_price_bp = $option['price'] * $option['num']; + //除外項目 + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'E'"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':item_no', $item_no); - $stmt->bindParam(':item_group', $item_group); - $stmt->bindParam(':item_spec', $item_spec); - $stmt->bindParam(':option_relate_spec', $option_relate_spec); - $stmt->bindParam(':item_unit_price', $item_unit_price); - $stmt->bindParam(':item_qty', $item_qty); - $stmt->bindParam(':item_price_bp', $item_price_bp); $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)); + // echo "old:".json_encode($onlyInOtherOptionOldIds); //delete + // echo "new:".json_encode($onlyInOtherOptionNewIds); //insert + // echo "both:".json_encode($inBothOtherOptionIds); // update + foreach($onlyInOtherOptionOldIds as $oldotheroptionidx){ + $sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='E'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $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_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note) + VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)"; + + $item_no = $option['id']; + $item_group = "E"; + $item_spec = $option['name']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['num']; + $item_price_bp = $option['price'] * $option['num']; + $note = $option['pr_no']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } + + foreach($inBothOtherOptionIds as $bothotheroptionidx){ + $option = array_values(array_filter($otherOptions, fn($el)=> $el['id'] == $bothotheroptionidx))[0]; + $item_no = $option['id']; + $item_group = "E"; + $item_spec = $option['name']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['num']; + $item_price_bp = $option['price'] * $option['num']; + $note = $option['pr_no']; + + $sql_str = "UPDATE pricereview_item SET item_spec=:item_spec, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec, note=:note WHERE mid = :mid AND item_no = :item_no AND item_group='E'"; - $sql_str = "INSERT INTO pricereview_pay (mid, pay_kind, pay_scale, pay_amount, pay_period) - VALUES (:mid, :pay_kind, :pay_scale, :pay_amount, :pay_period)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } - foreach(json_decode($paymentRatio, true) as $key=>$pay){ - $pay_kind = $key +1; - $pay_scale = $pay['scale'] == '' ? 0 : $pay['scale']; - $pay_amount = $pay['scale']/100 * $price_total; - $pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket']; + //拆梯價格 + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group = 'C'"; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':pay_kind', $pay_kind); - $stmt->bindParam(':pay_scale', $pay_scale); - $stmt->bindParam(':pay_amount', $pay_amount); - $stmt->bindParam(':pay_period', $pay_period); $stmt->execute(); - } + $item_demolish_options = $stmt->fetchAll(PDO::FETCH_ASSOC); + $oldDemolishOptionsNo = (array)array_column($item_demolish_options, 'item_no'); + $newDemolishOptioinNo = (array)array_column($demolishOptions, 'id'); + $onlyInDemolishOptionOldIds = array_values(array_diff($oldDemolishOptionsNo, $newDemolishOptioinNo)); + $onlyInDemolishOptionNewIds = array_values(array_diff($newDemolishOptioinNo, $oldDemolishOptionsNo)); + $inBothDemolishOptionIds = array_values(array_intersect($oldDemolishOptionsNo, $newDemolishOptioinNo)); + // echo "old:".json_encode($onlyInDemolishOptionOldIds); //delete + // echo "new:".json_encode($onlyInDemolishOptionNewIds); //insert + // echo "both:".json_encode($inBothDemolishOptionIds); // update + foreach($onlyInDemolishOptionOldIds as $olddemolishoptionidx){ + $sql_str = "DELETE FROM pricereview_item WHERE mid = :mid AND item_no = :item_no AND item_group='C'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $olddemolishoptionidx); + $stmt->execute(); + } + foreach($onlyInDemolishOptionNewIds as $newdemolishoptionidx){ + $option = array_values(array_filter($demolishOptions, fn($el)=> $el['id'] == $newdemolishoptionidx))[0]; + + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)"; + + $item_no = $option['id']; + $item_group = "C"; + $item_spec = $option['person']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = (int)$option['qty']; + $item_price_bp = (int)$option['price'] * (int)$option['qty']; + $note = $option['floor']; + $price_id = $option['demolish_id']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->bindParam(':price_id', $price_id); + $stmt->execute(); + } + foreach($inBothDemolishOptionIds as $bothdemolishoptionidx){ + $option = array_values(array_filter($demolishOptions, fn($el)=> $el['id'] == $bothdemolishoptionidx))[0]; + + $item_no = $option['id']; + $item_group = "C"; + $item_spec = $option['person']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['qty']; + $item_price_bp = $option['price'] * $option['qty']; + $note = $option['floor']; + $price_id = $option['demolish_id']; + + $sql_str = "UPDATE pricereview_item SET item_spec=:item_spec, price_id=:price_id, item_unit_price = :item_unit_price, item_qty = :item_qty, item_price_bp = :item_price_bp, option_relate_spec=:option_relate_spec, note=:note WHERE mid = :mid AND item_no = :item_no AND item_group='C'"; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->bindParam(':price_id', $price_id); + $stmt->execute(); + } + + $sql_str = "UPDATE pricereview_pay SET pay_scale = :pay_scale, pay_amount = :pay_amount, pay_period = :pay_period WHERE mid = :mid AND pay_kind = :pay_kind"; + foreach($paymentRatio as $key=>$pay){ + $pay_kind = $key +1; + $pay_scale = $pay['scale'] == '' ? 0 : $pay['scale']; + $pay_amount = $pay['scale']/100 * $price_total; + $pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':pay_kind', $pay_kind); + $stmt->bindParam(':pay_scale', $pay_scale); + $stmt->bindParam(':pay_amount', $pay_amount); + $stmt->bindParam(':pay_period', $pay_period); + $stmt->execute(); + } + + if($status == 'YS'){ + $sql_str = "SELECT * FROM account WHERE accountid = :accountid"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':accountid', $creater); + $stmt->execute(); + $account = $stmt->fetch(PDO::FETCH_ASSOC); + $manager = $account['manager']; + + $sign1 = "$manager,,"; //區處長 + $sign2 = NULL; // 業務承辦人 + $sign3 = "M0060,,"; //業務部協理 + + //是否呈核至總經理(M0006) + if($price_rate < 80 || $special_fee > 0){ + $sign4 = "M0006,,"; + $sign_total = 4; + }else{ + $sign4 = NULL; + $sign_total = 3; + } - $sql_str = "SELECT * FROM account WHERE accountid = :accountid"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':accountid', $creater); - $stmt->execute(); - $account = $stmt->fetch(PDO::FETCH_ASSOC); - $manager = $account['manager']; - - $sign1 = "$manager,,"; //區處長 - $sign2 = NULL; // 業務承辦人 - $sign3 = "M0060,,"; //業務部協理 - - //是否呈核至總經理(M0006) - if($price_rate < 80 || $special_fee > 0){ - $sign4 = "M0006,,"; - $sign_total = 4; - }else{ - $sign4 = NULL; - $sign_total = 3; + $sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total) + VALUES (:mid, :sign1, :sign2, :sign3, :sign4, :sign_total)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':sign1', $sign1); + $stmt->bindParam(':sign2', $sign2); + $stmt->bindParam(':sign3', $sign3); + $stmt->bindParam(':sign4', $sign4); + $stmt->bindParam(':sign_total', $sign_total); + $stmt->execute(); + } + $conn->commit(); + echo "success"; + }catch (PDOException $e) { + $conn->rollback(); + echo $e->getMessage(); + die('Error!:' . $e->getMessage()); } +}else{ + try{ + $sql_str = "INSERT INTO pricereview_main (contractno, ekind, person, company, case_name, address, compete, price_lowest, price_total, price_rate, special_fee, predeal_date, facilitok_date, penalty, deposit_rate, keep_rate, warranty_rate, memo, status, attatch1, attatch2, creater, create_at) + VALUES (:contractno, :ekind, :person, :company, :case_name, :address, :compete, :price_lowest, :price_total, :price_rate, :special_fee, :predeal_date, :facilitok_date, :penalty, :deposit_rate, :keep_rate, :warranty_rate, :memo, :status, :attatch1, :attatch2, :creater, :create_at)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':contractno', $contractno); + $stmt->bindParam(':ekind', $ekind); + $stmt->bindParam(':person', $person); + $stmt->bindParam(':company', $company); + $stmt->bindParam(':case_name', $case_name); + $stmt->bindParam(':address', $address); + $stmt->bindParam(':compete', $compete); + $stmt->bindParam(':price_lowest', $price_lowest); + $stmt->bindParam(':price_total', $price_total); + $stmt->bindParam(':price_rate', $price_rate); + $stmt->bindParam(':special_fee', $special_fee); + $stmt->bindParam(':predeal_date', $predeal_date); + $stmt->bindParam(':facilitok_date', $facilitok_date); + $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', $memo); + $stmt->bindParam(':status', $status); + $stmt->bindParam(':attatch1', $attatch1); + $stmt->bindParam(':attatch2', $attatch2); + $stmt->bindParam(':creater', $creater); + $stmt->bindParam(':create_at', $create_at); + $stmt->execute(); + $mid = $conn->lastInsertId(); + + //insert 整機單價 + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, item_weight, item_op, item_unit_price, item_qty, item_price_bp, item_price_ct, note) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :item_weight, :item_op, :item_unit_price, :item_qty, :item_price_bp, :item_price_ct, :note)"; + + foreach($elevators as $elevator){ + $price_id = $elevator['facility_id']; + $item_no = $elevator['id']; + $item_group = "A"; + $item_spec = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed']; + $item_weight = ""; + $item_op = $elevator['open_converted']; + + $item_unit_price = $elevator['price']; + $item_qty = (int)$elevator['spec_num']; + $item_price_bp = (int)$elevator['price'] * (int)$elevator['spec_num']; + $item_price_ct = $elevator['spec_price']; + $note = $elevator['specifications'] . ',' . $elevator['person'] . ',' . $elevator['stop'] . ',' . $elevator['speed']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':item_weight', $item_weight); + $stmt->bindParam(':item_op', $item_op); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':item_price_ct', $item_price_ct); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } + + //insert options 加價 + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + + foreach($options as $option){ + $price_id = $option['id']; + $item_no = $option['key']; + $item_group = "B"; + $item_spec = $option['name'] . $option['memo']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['qty']; + $item_price_bp = $option['price'] * $option['qty']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':price_id', $price_id); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->execute(); + } + + //insert 除外項目 + $sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note) + VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)"; + + foreach($otherOptions as $option){ + $item_no = $option['id']; + $item_group = "E"; + $item_spec = $option['name']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['num']; + $item_price_bp = $option['price'] * $option['num']; + $note = $option['pr_no']; + + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->execute(); + } + + $sql_str = "INSERT INTO pricereview_item (mid, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp) + VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + //insert 保養延長 + foreach(json_decode($maintainOptions, true) as $option){ + $item_no = $option['id'] + 1; + $item_group = "D"; + $item_spec = $option['toElevator'][0]['model']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = $option['num']; + $item_price_bp = $option['price'] * $option['num']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->execute(); + } + + //insert 拆梯價格 demolishOptions + $sql_str = "INSERT INTO pricereview_item (mid, price_id, item_no, item_group, item_spec, option_relate_spec, item_unit_price, item_qty, item_price_bp, note) + VALUES (:mid, :price_id, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp, :note)"; + foreach($demolishOptions as $option){ + $item_no = $option['id']; + $item_group = "C"; + $item_spec = $option['person']; + $option_relate_spec = $option['toElevator'][0]['id']; + $item_unit_price = $option['price']; + $item_qty = (int)$option['qty']; + $item_price_bp = $option['price'] * (int)$option['qty']; + $note = $option['floor']; + $price_id = $option['demolish_id']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':item_no', $item_no); + $stmt->bindParam(':item_group', $item_group); + $stmt->bindParam(':item_spec', $item_spec); + $stmt->bindParam(':option_relate_spec', $option_relate_spec); + $stmt->bindParam(':item_unit_price', $item_unit_price); + $stmt->bindParam(':item_qty', $item_qty); + $stmt->bindParam(':item_price_bp', $item_price_bp); + $stmt->bindParam(':note', $note); + $stmt->bindParam(':price_id', $price_id); + $stmt->execute(); + } + //insert 付款比例 + + $sql_str = "INSERT INTO pricereview_pay (mid, pay_kind, pay_scale, pay_amount, pay_period) + VALUES (:mid, :pay_kind, :pay_scale, :pay_amount, :pay_period)"; + + foreach($paymentRatio as $key=>$pay){ + $pay_kind = $key +1; + $pay_scale = $pay['scale'] == '' ? 0 : $pay['scale']; + $pay_amount = $pay['scale']/100 * $price_total; + $pay_period = ($pay['scale'] == '' || $pay['scale'] == 0) ? '' :$pay['ticket']; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':pay_kind', $pay_kind); + $stmt->bindParam(':pay_scale', $pay_scale); + $stmt->bindParam(':pay_amount', $pay_amount); + $stmt->bindParam(':pay_period', $pay_period); + $stmt->execute(); + } + + + + if($status == 'YS'){ + $sql_str = "SELECT * FROM account WHERE accountid = :accountid"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':accountid', $creater); + $stmt->execute(); + $account = $stmt->fetch(PDO::FETCH_ASSOC); + $manager = $account['manager']; + + $sign1 = "$manager,,"; //區處長 + $sign2 = NULL; // 業務承辦人 + $sign3 = "M0060,,"; //業務部協理 + + //是否呈核至總經理(M0006) + if($price_rate < 80 || $special_fee > 0){ + $sign4 = "M0006,,"; + $sign_total = 4; + }else{ + $sign4 = NULL; + $sign_total = 3; + } + $sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total) + VALUES (:mid, :sign1, :sign2, :sign3, :sign4, :sign_total)"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->bindParam(':sign1', $sign1); + $stmt->bindParam(':sign2', $sign2); + $stmt->bindParam(':sign3', $sign3); + $stmt->bindParam(':sign4', $sign4); + $stmt->bindParam(':sign_total', $sign_total); + $stmt->execute(); + } + $conn->commit(); + echo "success"; + }catch (PDOException $e) { + $conn->rollback(); + echo $e->getMessage(); + die('Error!:' . $e->getMessage()); + } + +} + + - $sql_str = "INSERT INTO pricereview_sign (mid, sign1, sign2, sign3, sign4, sign_total) - VALUES (:mid, :sign1, :sign2, :sign3, :sign4, :sign_total)"; - $stmt = $conn->prepare($sql_str); - $stmt->bindParam(':mid', $mid); - $stmt->bindParam(':sign1', $sign1); - $stmt->bindParam(':sign2', $sign2); - $stmt->bindParam(':sign3', $sign3); - $stmt->bindParam(':sign4', $sign4); - $stmt->bindParam(':sign_total', $sign_total); - $stmt->execute(); - - - echo "success"; - - $conn->commit(); -}catch (PDOException $e) { - $conn->rollback(); - echo $e->getMessage(); - die('Error!:' . $e->getMessage()); -} \ No newline at end of file diff --git a/wms/mkt/api/putNewElevatorPriceview.php b/wms/mkt/api/putNewElevatorPriceview.php new file mode 100644 index 00000000..f255b9dd --- /dev/null +++ b/wms/mkt/api/putNewElevatorPriceview.php @@ -0,0 +1,56 @@ +prepare($sql_str); +$stmt->bindParam(':contractno', $contractno); +$stmt->execute(); +$main = $stmt->fetch(PDO::FETCH_ASSOC); + +if(!$main){ + insertPricereview(); +}else{ + updatePricereview(); +} + +$mid = $main['id']; + +function insertPricereview(){ + +} +function updatePricereview(){ + +} diff --git a/wms/mkt/assets/js/pricereviewAlpine.js b/wms/mkt/assets/js/pricereviewAlpine.js index c839c4b5..3465236d 100644 --- a/wms/mkt/assets/js/pricereviewAlpine.js +++ b/wms/mkt/assets/js/pricereviewAlpine.js @@ -2,10 +2,11 @@ const pricereviewCreate = ()=>{ return { init(){ this.elevators = elevators; - console.log(this.elevators); - console.log(this.total_spec); + this.is_renovation = is_renovation + this.selectedOptions = selectedOptions; + this.otherOptions = otherOptions; + console.log(this.selectedOptions); }, - openFn:{ 4:'2U', 5:"4PCO", @@ -33,9 +34,11 @@ const pricereviewCreate = ()=>{ currentOptionKey: '', currentOtherOptionKey: '', currentMaintainOptionKey: '', - optionKey:0, - otherOptionKey:0, - maintainOptionKey:0, + currentDemolishOptionKey: '', + optionKey: optionKey, + otherOptionKey: otherOptionKey, + maintainOptionKey:1, + demolishOptionKey: demolishOptionKey, modalElevatorInfo:{ spec:'', person:'', @@ -46,6 +49,7 @@ const pricereviewCreate = ()=>{ price:'', sale_price:'', facility_id: '', + model:'', }, otherOptions: [], modalOtherOptionInfo:{ @@ -60,49 +64,63 @@ const pricereviewCreate = ()=>{ num:"", memo:"", }, - paymentRatio:[ - { - scale: 20, - ticket: 30, - }, - { - scale: 0, - ticket: '', - }, - { - scale: 50, - ticket: 30, - }, - { - scale: 0, - ticket: '', - }, - { - scale: 20, - ticket: 30, - }, - { - scale: 10, - ticket: 30, - }, - { - scale: 0, - ticket: '', - }, - ], - serviceFee:0, - transactionDate: pre_order_date, - shippingDate:'', - remark:'', + demolishOptions: demolishOptions, + modalDemolishOptionsInfo:{ + person:"", + floor:"", + price: 0, + qty:"", + }, + paymentRatio:paymentRatio, + serviceFee: serviceFee, + transactionDate: transactionDate, + shippingDate: shippingDate, + remark: remark, + penalty: penalty, + deposit_rate: deposit_rate, + keep_rate: keep_rate, + warranty_rate: warranty_rate, + customerInfo:{ + contractno: contractno, + company: customer, + manager: manager, + address: address, + case_name: case_name, + uscc: uscc, + person: salesman, + }, + weightArr: { + 6: 450, + 8: 550, + 9: 600, + 10: 700, + 11:750, + 12:800, + 13:900, + 15:1000, + 17:1150, + 20:1350, + 24:1600, + }, + is_renovation: is_renovation, async getElevatorPrice(idx){ const spec = this.elevators[idx].specifications const person = this.elevators[idx].person const stop = this.elevators[idx].stop const open_converted = this.elevators[idx].open_converted const speed = this.elevators[idx].speed - const model = spec + '-' + person + '*' + stop + '-' + open_converted + speed; + let model= ""; + if(spec == 'M1' || spec=='M1+M4(1:1)' || spec == 'M1+M4(2:1)'){ + model = "P" + person + "-" + this.weightArr[person] + "-" + open_converted + "-" + speed + "-" + stop + this.elevators[idx].model = model + } + else{ + model = spec + '-' + person + '*' + stop + '-' + open_converted + speed; + this.elevators[idx].model = model + } + try{ - const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model}}) + const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model, kind: spec}}) console.log(res.data); if(res.data.id == null || res.data.id == ""){ console.log("公司並無提供此規格!!"); @@ -115,9 +133,17 @@ const pricereviewCreate = ()=>{ }, async getModalElevatorPrice(){ - let model = this.modalElevatorInfo.spec + '-' + this.modalElevatorInfo.person + '*' + this.modalElevatorInfo.stop + '-' + this.modalElevatorInfo.open + this.modalElevatorInfo.speed; + let model = ""; + let kind = this.modalElevatorInfo.spec; + if(kind == 'M1' || kind=='M1+M4(1:1)' || kind == 'M1+M4(2:1)'){ + model = "P" + this.modalElevatorInfo.person + "-" + this.weightArr[this.modalElevatorInfo.person] + "-" + this.modalElevatorInfo.open + "-" + this.modalElevatorInfo.speed + "-" + this.modalElevatorInfo.stop + this.modalElevatorInfo.model = "P" + this.modalElevatorInfo.person + "-" + this.weightArr[this.modalElevatorInfo.person] + "-" + this.modalElevatorInfo.open + "-" + this.modalElevatorInfo.speed + "-" + this.modalElevatorInfo.stop + }else{ + model = this.modalElevatorInfo.spec + '-' + this.modalElevatorInfo.person + '*' + this.modalElevatorInfo.stop + '-' + this.modalElevatorInfo.open + this.modalElevatorInfo.speed; + this.modalElevatorInfo.model = this.modalElevatorInfo.spec + '-' + this.modalElevatorInfo.person + '*' + this.modalElevatorInfo.stop + '-' + this.modalElevatorInfo.open + this.modalElevatorInfo.speed; + } try{ - const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model}}) + const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model, kind:kind}}) console.log(res.data); if(res.data.id == null || res.data.id == ""){ console.log("公司並無提供此規格!!"); @@ -128,6 +154,40 @@ const pricereviewCreate = ()=>{ console.error("Error fetching elevator price:", error); } }, + async getModalDemolishPrice(){ + let person = this.modalDemolishOptionsInfo.person + let floor = this.modalDemolishOptionsInfo.floor + try{ + const res = await axios.get('./api/getDemolishPrice.php', {params: {person:person, floor:floor}}); + console.log(res.data); + if(!res.data){ + this.modalDemolishOptionsInfo.price = 0 + this.modalDemolishOptionsInfo.demolish_id = '' + return; + } + this.modalDemolishOptionsInfo.price = res.data.price + this.modalDemolishOptionsInfo.demolish_id = res.data.id + }catch (error) { + console.error("Error fetching demolish price:", error); + } + }, + async getDemolishPrice(idx){ + let person = this.demolishOptions[idx].person + let floor = this.demolishOptions[idx].floor + try{ + const res = await axios.get('./api/getDemolishPrice.php', {params: {person:person, floor:floor}}); + console.log(res.data); + if(!res.data){ + this.demolishOptions[idx].price = 0 + this.demolishOptions[idx].demolish_id = '' + return; + } + this.demolishOptions[idx].price = res.data.price + this.demolishOptions[idx].demolish_id = res.data.id + }catch (error) { + console.error("Error fetching demolish price:", error); + } + }, initButtons(kind) { if (kind == 'A') { this.buttons = [ @@ -223,7 +283,6 @@ const pricereviewCreate = ()=>{ Object.keys(this.modalSelectedOptions).forEach(option=>{ this.selectedOptions.push(this.modalSelectedOptions[option]) }) - console.log(this.modalSelectedOptions); console.log(this.selectedOptions); this.hideOptionsModal(); }, @@ -243,6 +302,10 @@ const pricereviewCreate = ()=>{ this.$refs.toMaintainOptionElevatorModal.style.display = 'none'; body.style.overflow = 'auto' }, + hideToDemolishOptionElevatorModal(){ + this.$refs.toDemolishOptionElevatorModal.style.display = 'none'; + body.style.overflow = 'auto' + }, hideCreateElevatorModal(){ this.$refs.createElevatorModal.style.display = 'none'; body.style.overflow = 'auto' @@ -255,6 +318,7 @@ const pricereviewCreate = ()=>{ num: 1, price:'', sale_price:'', + model:'', }; }, hideCreateOtherOptionModal(){ @@ -265,6 +329,10 @@ const pricereviewCreate = ()=>{ this.$refs.createMaintainModal.style.display = 'none'; body.style.overflow = 'auto' }, + hideCreateDemolishModal(){ + this.$refs.createDemolishModal.style.display = 'none'; + body.style.overflow = 'auto' + }, openCreateElevatorModal(){ this.$refs.createElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' @@ -277,6 +345,10 @@ const pricereviewCreate = ()=>{ this.$refs.createMaintainModal.style.display = 'block'; body.style.overflow = 'hidden' }, + openCreateDemolishOptionModal(){ + this.$refs.createDemolishModal.style.display = 'block'; + body.style.overflow = 'hidden' + }, totalElevatorsPrice(){ return this.elevators.reduce((total, elevator) => { return total + (elevator.spec_num * elevator.price); @@ -321,6 +393,7 @@ const pricereviewCreate = ()=>{ open:'', spec_num: this.modalElevatorInfo.num, facility_id: this.modalElevatorInfo.facility_id, + model: this.modalElevatorInfo.model, }); console.log(this.elevators); this.hideCreateElevatorModal(); @@ -336,6 +409,7 @@ const pricereviewCreate = ()=>{ const spec_num = this.elevators[idx].spec_num const price = this.elevators[idx].price const facility_id = this.elevators[idx].facility_id + const model = this.elevators[idx].model this.total_spec ++; this.elevators.push({ @@ -350,21 +424,59 @@ const pricereviewCreate = ()=>{ open: open, spec_num: spec_num, facility_id: facility_id, + model: model, }); console.log(this.elevators); }, + copyOption(key){ + const copyOption = this.selectedOptions.filter(option=> option.key === key)[0] + console.log(copyOption); + this.selectedOptions.push({ + id: copyOption.id, + idx: copyOption.idx, + name: copyOption.name, + price: copyOption.price, + memo: copyOption.memo, + toElevator: [], + key: this.optionKey, + qty: copyOption.qty + }) + + this.optionKey++ + console.log(this.selectedOptions); + }, + copyOtherOption(id){ + const copyOption = this.otherOptions.filter(option=> option.id === id)[0] + console.log(copyOption); + this.otherOptions.push({ + id: this.otherOptionKey, + name: copyOption.name, + price: copyOption.price, + num: copyOption.num, + toElevator: [], + pr_no: copyOption.pr_no + }) + console.log(this.otherOptions); + this.otherOptionKey++; + }, addOptionToElevator(key){ this.currentOptionKey = key; this.toElevators = []; this.toElevatorNo = ""; const matchElevators = this.selectedOptions.filter(option=> option.key == key)[0].toElevator.map(elevator=> elevator.id) - console.log(matchElevators); this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ + let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; + let model = '' + if(bool){ + model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' + elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop + }else{ + model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed + } this.toElevators.push({ id: elevator.id, - model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + model: model , checked: matchElevators.includes(elevator.id) ? 1: 0, }) } @@ -380,30 +492,31 @@ const pricereviewCreate = ()=>{ this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ + let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; + let model = '' + if(bool){ + model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop + }else{ + model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed + } this.toElevators.push({ id: elevator.id, - model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + model: model, checked: matchElevators.includes(elevator.id) ? 1: 0, }) } }) + this.$refs.toOtherOptionElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, chkOptionToElevators(){ const checkedOptions = []; - // this.toElevators.forEach(elevator=>{ - // if(elevator.checked){ - // checkedOptions.push({ - // id: elevator.id, - // model: elevator.model, - // }); - // } - // }) const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] + checkedOptions.push({ id: this.toElevatorNo, - model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'], + model: matchElevators['model'] , }) this.selectedOptions.forEach(option=>{ if(option.key == this.currentOptionKey){ @@ -416,18 +529,11 @@ const pricereviewCreate = ()=>{ }, chkOtherOptionToElevators(){ const checkedOptions = []; - // this.toElevators.forEach(elevator=>{ - // if(elevator.checked){ - // checkedOptions.push({ - // id: elevator.id, - // model: elevator.model, - // }); - // } - // }) + const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, - model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'], + model: matchElevators['model'], }) this.otherOptions.forEach(option=>{ if(option.id == this.currentOtherOptionKey){ @@ -435,7 +541,7 @@ const pricereviewCreate = ()=>{ option.toElevator.push(...checkedOptions) } }) - + this.currentOtherOptionKey = '' this.hideToOtherOptionElevatorModal(); @@ -506,6 +612,25 @@ const pricereviewCreate = ()=>{ this.maintainOptionKey ++; this.hideCreateMaintainModal(); }, + createDemolishOptionFn(){ + this.demolishOptions.push({ + id: this.demolishOptionKey, + price: this.modalDemolishOptionsInfo.price, + qty: this.modalDemolishOptionsInfo.qty, + person: this.modalDemolishOptionsInfo.person, + floor: this.modalDemolishOptionsInfo.floor, + demolish_id: this.modalDemolishOptionsInfo.demolish_id, + toElevator:[], + }) + this.modalDemolishOptionsInfo = { + person:"", + floor:"", + price: 0, + qty:"", + } + this.demolishOptionKey ++; + this.hideCreateDemolishModal(); + }, totalMaintainOptionsPrice(){ return this.maintainOptions.reduce((total, option) => { return total + (Number(option.num) * Number(option.price)); @@ -516,20 +641,23 @@ const pricereviewCreate = ()=>{ return total + Number(option.num); }, 0); }, + totalDemolishOptionsPrice(){ + return this.demolishOptions.reduce((total, option) => { + return total + (Number(option.qty) * Number(option.price)); + }, 0); + }, + totalDemolishOptionsNum(){ + return this.demolishOptions.reduce((total, option) => { + return total + Number(option.qty); + }, 0); + }, chkMaintainOptionToElevators(){ const checkedOptions = []; - // this.toElevators.forEach(elevator=>{ - // if(elevator.checked){ - // checkedOptions.push({ - // id: elevator.id, - // model: elevator.model, - // }); - // } - // }) + const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] checkedOptions.push({ id: this.toElevatorNo, - model: matchElevators['specifications'] + '-' + matchElevators['person'] + '*' + matchElevators['stop'] + '-' + matchElevators['open_converted'] + matchElevators['speed'], + model: matchElevators['model'], }) this.maintainOptions.forEach(option=>{ if(option.id == this.currentMaintainOptionKey){ @@ -540,6 +668,22 @@ const pricereviewCreate = ()=>{ this.currentMaintainOptionKey = '' this.hideToMaintainOptionElevatorModal(); }, + chkDemolishOptionToElevators(){ + const checkedOptions = []; + const matchElevators = this.elevators.filter(elevator=> elevator.id == this.toElevatorNo)[0] + checkedOptions.push({ + id: this.toElevatorNo, + model: matchElevators['model'], + }) + this.demolishOptions.forEach(option=>{ + if(option.id == this.currentDemolishOptionKey){ + option.toElevator = []; + option.toElevator.push(...checkedOptions) + } + }) + this.currentDemolishOptionKey = '' + this.hideToDemolishOptionElevatorModal(); + }, addMaintainOptionToElevator(id){ this.currentMaintainOptionKey = id; this.toElevators = []; @@ -548,9 +692,16 @@ const pricereviewCreate = ()=>{ this.toElevatorNo = matchElevators[0] this.elevators.forEach(elevator=>{ if(elevator.price > 0){ + let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; + let model = '' + if(bool){ + model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop + }else{ + model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed + } this.toElevators.push({ id: elevator.id, - model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + model: model, checked: matchElevators.includes(elevator.id) ? 1: 0, }) } @@ -559,9 +710,38 @@ const pricereviewCreate = ()=>{ this.$refs.toMaintainOptionElevatorModal.style.display = 'block'; body.style.overflow = 'hidden' }, + addDemolishOptionToElevator(id){ + this.currentDemolishOptionKey = id; + this.toElevators = []; + this.toElevatorNo = ""; + const matchElevators = this.demolishOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) + this.toElevatorNo = matchElevators[0] + this.elevators.forEach(elevator=>{ + if(elevator.price > 0){ + let bool = elevator.specifications=='M1' || elevator.specifications=='M1+M4(1:1)' || elevator.specifications=='M1+M4(2:1)' ; + let model = '' + if(bool){ + model = 'P' + elevator.person + '-' + this.weightArr[elevator.person] + '-' +elevator.open_converted + '-' + elevator.speed + '-' + elevator.stop + }else{ + model = elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed + } + this.toElevators.push({ + id: elevator.id, + model: model, + checked: matchElevators.includes(elevator.id) ? 1: 0, + }) + } + }) + + this.$refs.toDemolishOptionElevatorModal.style.display = 'block'; + body.style.overflow = 'hidden' + }, removeMaintainOption(id){ this.maintainOptions = this.maintainOptions.filter(option=> option.id != id) }, + removeDemolishOption(id){ + this.demolishOptions = this.demolishOptions.filter(option=> option.id != id) + }, totalPrice(){ return this.totalElevatorsPrice() + this.totalOptionsPrice() + this.totalOtherOptionsPrice() + this.totalMaintainOptionsPrice(); }, @@ -584,19 +764,6 @@ const pricereviewCreate = ()=>{ return total; }, - customerInfo:{ - contractno: contractno, - company: customer, - manager: manager, - address: address, - case_name: case_name, - uscc: uscc, - person: salesman, - }, - penalty:"", - deposit_rate:0, - keep_rate:0, - warranty_rate:0, error: [], submit(){ this.error = [] @@ -641,7 +808,7 @@ const pricereviewCreate = ()=>{ const form = new FormData(); form.append('contractno', contractno); - form.append('ekind', "新梯"); + form.append('ekind', (is_renovation=="Y") ? "汰改" : "新梯"); form.append('person', this.customerInfo.person); form.append('company', this.customerInfo.company); form.append('case_name', this.customerInfo.case_name); @@ -660,13 +827,14 @@ const pricereviewCreate = ()=>{ form.append('status', "YS"); form.append('attatch1', ""); form.append('attatch2', ""); - + form.append('user_id', user_id); form.append('elevators', JSON.stringify(this.elevators)); form.append('options', JSON.stringify(this.selectedOptions)); form.append('otherOptions', JSON.stringify(this.otherOptions)); form.append('maintainOptions', JSON.stringify(this.maintainOptions)); + form.append('demolishOptions', JSON.stringify(this.demolishOptions)); form.append('paymentRatio', JSON.stringify(this.paymentRatio)); @@ -680,7 +848,50 @@ const pricereviewCreate = ()=>{ console.error(err); }) }, - + save(){ + const form = new FormData(); + form.append('contractno', contractno); + form.append('ekind', (is_renovation=="Y") ? "汰改" : "新梯"); + form.append('person', this.customerInfo.person); + form.append('company', this.customerInfo.company); + form.append('case_name', this.customerInfo.case_name); + form.append('address', this.customerInfo.address); + form.append('price_lowest', this.totalPrice()); + form.append('price_total', this.totalSalePrice()); + form.append('price_rate', Math.round(this.totalSalePrice() / this.totalPrice() * 100 *10) / 10); + form.append('special_fee', this.serviceFee); + form.append('predeal_date', this.transactionDate); + form.append('facilitok_date', this.shippingDate); + 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('memo', this.remark); + form.append('status', "Y1"); + form.append('attatch1', ""); + form.append('attatch2', ""); + form.append('user_id', user_id); + + form.append('elevators', JSON.stringify(this.elevators)); + + form.append('options', JSON.stringify(this.selectedOptions)); + form.append('otherOptions', JSON.stringify(this.otherOptions)); + form.append('maintainOptions', JSON.stringify(this.maintainOptions)); + form.append('demolishOptions', JSON.stringify(this.demolishOptions)); + + form.append('paymentRatio', JSON.stringify(this.paymentRatio)); + + axios.post('./api/postNewElevatorPricereview.php', form).then(res=>{ + console.log(res.status); + if(res.data == "success"){ + alert("保存成功!"); + window.location.reload(); + // window.location.href = './pricereview-index.php?' + token_link; + } + }).catch(err=>{ + console.error(err); + }) + }, } } @@ -688,7 +899,7 @@ const pricereviewCreate = ()=>{ const pricereviewCheck = ()=>{ return { init(){ - this.elevators = items.filter(item=> item.item_group =='A'); + this.elevators = elevators this.elevators.forEach(el=>{ el.options = [] el.optionsTotalPrice = 0; @@ -696,14 +907,15 @@ const pricereviewCheck = ()=>{ el.otherOptionsTotalPrice = 0; el.maintainOptions = [] el.maintainOptionsTotalPrice = 0; + el.demolishOptions = [] + el.demolishOptionsTotalPrice = 0; }) this.options = options; - this.otherOptions = items.filter(item=> item.item_group =='E'); + this.demolishOptions = items.filter(item=> item.item_group =='C'); this.maintainOptions = items.filter(item=> item.item_group =='D'); - console.log(this.options); - + this.otherOptions = items.filter(item=> item.item_group =='E'); + console.log("optionnnn=>", this.options); this.elevators.forEach((elevator, idx)=>{ - this.options.forEach(option=>{ if(option.option_relate_spec == elevator.item_no){ elevator.optionsTotalPrice += option.option_mi * option.item_qty @@ -713,6 +925,7 @@ const pricereviewCheck = ()=>{ 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.option_mi), + 'option_memo': option.option_memo, }) } }) @@ -735,7 +948,19 @@ const pricereviewCheck = ()=>{ elevator.maintainOptionsTotalPrice += option.item_unit_price * option.item_qty this.elevators[idx].maintainOptions.push({ 'id': option.id, - 'item_spec': option.item_spe.trim(), + 'item_spec': option.item_spec.trim(), + 'item_unit_price': option.item_unit_price, + 'item_qty': option.item_qty, + 'mi': Math.round(option.item_unit_price), + }) + } + }) + this.demolishOptions.forEach(option=>{ + if(option.option_relate_spec == elevator.item_no){ + elevator.demolishOptionsTotalPrice += option.item_unit_price * option.item_qty + this.elevators[idx].demolishOptions.push({ + 'id': option.id, + 'item_spec': option.item_spec.trim(), 'item_unit_price': option.item_unit_price, 'item_qty': option.item_qty, 'mi': Math.round(option.item_unit_price), @@ -743,7 +968,7 @@ const pricereviewCheck = ()=>{ } }) this.qty += Number(elevator.item_qty); - this.elevators_total_price += Number(elevator.item_qty) * Number(elevator.item_unit_price); + this.elevators_total_price += Number(elevator.item_qty) * Number(elevator.price); //MAE100-15*24-CO105 const model = elevator.item_spec; let spec = model.split('-')[0]; @@ -767,9 +992,10 @@ const pricereviewCheck = ()=>{ this.sign3 = this.getUsername(sign3) this.sign4 = this.getUsername(sign4) - + console.log(this.elevators); }, async getElevatorMi(idx, spec, person, stop, open, speed, item_weight){ + console.log("載重=====>",item_weight); try{ const res = await axios.get('./api/getElevatorMi.php', {params: { spec: spec, @@ -782,7 +1008,7 @@ const pricereviewCheck = ()=>{ console.log('---->',res.data); if(res.data){ this.elevators[idx].mi = res.data - this.elevators[idx].totalMi = res.data['equipment_fee'] + res.data['customs_shipping_fee'] + res.data['free1y_fee'] + res.data['install_fee'] + res.data['other_fee'] + res.data['transport_site_fee'] + res.data['unloading_fee']; + this.elevators[idx].totalMi = res.data['equipment_fee'] + res.data['customs_shipping_fee'] + res.data['free1y_fee'] + res.data['install_fee'] + res.data['other_fee'] + res.data['transport_site_fee'] + res.data['unloading_fee'] + res.data['add_price']; }else{ this.isNotfoundMi = true; this.elevators[idx].mi = { @@ -792,7 +1018,8 @@ const pricereviewCheck = ()=>{ 'install_fee': 0, 'other_fee': 0, 'transport_site_fee': 0, - 'unloading_fee': 0 + 'unloading_fee': 0, + 'add_price':0, } } @@ -834,6 +1061,7 @@ const pricereviewCheck = ()=>{ options: [], otherOptions: [], maintainOptions: [], + demolishOptions:[], mid: mid, user_id: user_id, reviewcomment:'', @@ -852,11 +1080,24 @@ const pricereviewCheck = ()=>{ return total + (option.item_qty * option.item_unit_price); }, 0); }, + demolishOptionsTotalPrice(){ + return this.demolishOptions.reduce((total, option) => { + return total + (option.item_qty * option.item_unit_price); + }, 0); + }, totalScale(){ return this.pays.reduce((total, option) => { return total + Number(option.pay_scale ); }, 0); }, + totalElevatorsPrice(){ + return this.elevators.reduce((total, elevator) => { + return total + (elevator.item_qty * elevator.price); + }, 0); + }, + totalStandardPrice(){ + return this.totalElevatorsPrice() + this.otherOptionsTotalPrice() + this.optionsTotalPrice() + this.maintainOptionsTotalPrice() + this.demolishOptionsTotalPrice(); + }, check(sign, status){ console.log(sign); const form = new FormData(); @@ -873,6 +1114,7 @@ const pricereviewCheck = ()=>{ } }) }, + async getUsername(user_id){ if(user_id == '') return '---' const res = await axios.get('./api/getUsername.php', {params: {user_id: user_id}}) diff --git a/wms/mkt/css/pricereview.css b/wms/mkt/css/pricereview.css index 5986f447..3a399437 100644 --- a/wms/mkt/css/pricereview.css +++ b/wms/mkt/css/pricereview.css @@ -50,7 +50,8 @@ width: 55px; height: 30px; padding: 0; - margin-left: 10px; + margin-left: 6px; + margin-bottom: 2px; font-size: 13px; } #pricereviewCreate .container .pricreviewmain button.addbtn { @@ -99,6 +100,10 @@ #pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .deleteBtn, #pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .copyBtn { opacity: 1; } +#pricereviewCreate .container .pricreviewmain > .divitem table .copyBtn { + width: 30px; + height: 30px; +} #pricereviewCreate .container .pricreviewmain > .divitem table .saletd { position: relative; } @@ -210,7 +215,7 @@ background-color: #fff; border-radius: 10px; position: absolute; - width: 1200px; + width: 90%; padding: 30px; top: 50%; left: 50%; @@ -219,13 +224,13 @@ animation: fade-in 0.2s linear; } .window-modal .window-modal-content.modal-xl { - width: 1200px; + max-width: 1200px; } .window-modal .window-modal-content.modal-lg { - width: 800px; + max-width: 800px; } .window-modal .window-modal-content.modal-m { - width: 450px; + max-width: 450px; } .window-modal .window-modal-content .window-modal-header { display: flex; diff --git a/wms/mkt/css/pricereview.css.map b/wms/mkt/css/pricereview.css.map index d113f93f..c9d78202 100644 --- a/wms/mkt/css/pricereview.css.map +++ b/wms/mkt/css/pricereview.css.map @@ -1 +1 @@ -{"version":3,"sources":["pricereview.scss","pricereview.css"],"names":[],"mappings":"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","file":"pricereview.css"} \ No newline at end of file +{"version":3,"sources":["pricereview.scss","pricereview.css"],"names":[],"mappings":"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","file":"pricereview.css"} \ No newline at end of file diff --git a/wms/mkt/css/pricereview.scss b/wms/mkt/css/pricereview.scss index ea3c48bc..4f2df50f 100644 --- a/wms/mkt/css/pricereview.scss +++ b/wms/mkt/css/pricereview.scss @@ -57,7 +57,8 @@ width: 55px; height: 30px; padding: 0; - margin-left: 10px; + margin-left: 6px; + margin-bottom: 2px; font-size: 13px; &.addbtn{ background-color: #337AB7; @@ -106,6 +107,10 @@ tr:hover .deleteBtn ,tr:hover .copyBtn{ opacity: 1; } + .copyBtn{ + width: 30px; + height: 30px; + } .saletd{ position: relative; >.deleteBtn{ @@ -221,7 +226,7 @@ background-color: #fff; border-radius: 10px; position: absolute; - width:1200px; + width:90%; padding: 30px; top: 50%; left:50%; @@ -229,13 +234,13 @@ box-shadow: 0 5px 5px #222; animation: fade-in .2s linear; &.modal-xl{ - width:1200px; + max-width:1200px; } &.modal-lg{ - width:800px; + max-width:800px; } &.modal-m{ - width:450px; + max-width:450px; } .window-modal-header{ display: flex; diff --git a/wms/mkt/files/MAF200.xlsx b/wms/mkt/files/MAF200.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..885d31f2f14205c8f2b966bb05f7cc5eb259b9af GIT binary patch literal 10288 zcmeHtg;yNe_I2a#65O5OjXS~JgA?2x8h3&w5G1%0Ai-UOI|O$cfeY9jRekI1v(G)}sw%+1;sW3ShyVb95@33qWo-ln0DOQ20B`_^(E6{O z9NjG(-HkQ9oh{r9S-l+WDe_^V8FB&8kn#UJ{)=azENMi!haFSuM)v2cEf)FZ8Zkuf zqmTh?CN+`H-o*YAGyQBEo9FDP2TX}PJX_vs?D1t^&a+YL8b^nQkjVa4b<~*P!A>nB zVqUhsfkWDk7la9}db%gMxWr-{gvQ42Ei(YAE{#3vK*@D+`7$DFJbaO$&8(#XZLHP) zX4DeB&-{bnt~F)t?^t}pU#2lPCvj$MZ5VxxE;d=@U}LC!m+?VHg{qV~8jPmu&93(; z3hizTO zXKl=)pDh+l88Wp1P_>Jx!!PG_9QW@P#Vb%8Iqjxcd7xd#A?aNuHgCy}`(Un2K;`gq zt#BY)QiY$FDI}nHaHxr|Q{~8v#Luy45@8Eg>h>A;8f&lRqEiBMsFRY$KjLU@a8J

V^<4%H#XMa&i|w1e=!ID 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 literal 0 HcmV?d00001 diff --git a/wms/mkt/files/MAQ100.xlsx b/wms/mkt/files/MAQ100.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8b06fd8f482804ae157c12fa05df0c3280640b89 GIT binary patch literal 10670 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高速梯

  • 小機房貨梯
  • 平台梯
  • +
  • 無機房貨梯
  • +
  • 強趨梯
  • @@ -813,6 +815,252 @@ include "../header.php";
    +
    + 下載電子檔(無機房貨梯) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    無機房貨梯單位:萬元
                     標準價(±1S) 
    MAF200-750*3-2S45113.0 5.3
    MAF200-750*3-2S60115.0 5.3
    MAF200-1000*3-2S45136.0 5.3
    MAF200-1500*3-2S45165.7 9.8
    MAF200-1500*3-2S60169.2 9.8
    MAF200-2000*3-2S45186.0 10.0
    MAF200-2000*3-2S60188.7 10.0
    MAF200-2500*3-4PCO45263.3 14.2
    MAF200-2500*3-4PCO60265.0 14.2
    MAF200-3000*3-4PCO45281.5 15.2
    MAF200-3000*3-4PCO60283.0 15.2
    MAF200-3500*3-4PCO45330.6 18.2
    MAF200-3500*3-4PCO60333.2 18.2
    註:
    1、最低為2停
    2、處長權限為發佈價之80%。
    +
    +
    + 下載電子檔(強趨梯) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    強趨梯單位:萬元
                     產品系列樓層標準價(±1S) 
    MAQ100-4*-4PCO24G5 4 70.0 2.0
    MAQ100-4*-4PCO24G6 4 70.0 2.0
    MAQ100-4*-4PCO24G10 4 72.5 2.0
    MAQ100-4*-4PCO24G20 4 72.5 2.0
    MAQ100-4*-4PCO24A2 4 77.5 2.0
    MAQ100-4*-4PCO24A3 4 78.7 2.0
    MAQ100-4*-4PCO24A64 77.5 2.0
    MAQ100-4*-4PCO24A8 4 78.7 2.0
    MAQ100-4*-2PCO24G5 4 68.0 2.0
    MAQ100-4*-2PCO24G6 4 68.0 2.0
    MAQ100-4*-2PCO24G10 4 70.5 2.0
    MAQ100-4*-2PCO24G20 4 70.5 2.0
    MAQ100-4*-2PCO24A2 4 75.5 2.0
    MAQ100-4*-2PCO24A3 4 76.5 2.0
    MAQ100-4*-2PCO24A64 75.5 2.0
    MAQ100-4*-2PCO24A8 4 76.5 2.0

    1、處長權限為發佈價之80%
    +2、開門改2PCO,井道不變時,出入口寬需由800mm變成為600mm;或井道需加寬400mm
    +
    diff --git a/wms/mkt/pricereview-index.php b/wms/mkt/pricereview-index.php index 1021a118..26d2781e 100644 --- a/wms/mkt/pricereview-index.php +++ b/wms/mkt/pricereview-index.php @@ -484,7 +484,7 @@ if ($data) : if ($data["status"] == "Y1") { ?> - 修改 + 修改 刪除 prepare($sql_str); $stmt->bindParam(':mid', $id); $stmt->execute(); $options = $stmt->fetchAll(PDO::FETCH_ASSOC); +$sql_str = "SELECT pricereview_item.*, fp.price + FROM pricereview_item + LEFT JOIN ( + SELECT fp1.* + FROM facility_price fp1 + LEFT JOIN facility_price fp2 + ON (fp1.model = fp2.model AND fp1.id < fp2.id) + WHERE fp2.id IS NULL + ) AS fp ON fp.model = pricereview_item.item_spec + WHERE pricereview_item.mid = :mid AND pricereview_item.item_group = 'A' + "; +$stmt = $conn->prepare($sql_str); +$stmt->bindParam(':mid', $id); +$stmt->execute(); +$elevators = $stmt->fetchAll(PDO::FETCH_ASSOC); $sql_str = "SELECT * FROM pricereview_item WHERE pricereview_item.mid = :mid ORDER BY pricereview_item.item_group, pricereview_item.item_no ASC"; @@ -47,69 +62,78 @@ $stmt = $conn->prepare($sql_str); $stmt->bindParam(':mid', $id); $stmt->execute(); $sign = $stmt->fetch(PDO::FETCH_ASSOC); - $currentSigner = ''; $currentSign = 0; -// Y:已同意 N:不同意 W:待簽 -// sign1 => 處長, sign2 => 業務承辦人, sign3 => 協理, sign4 => 總經理 -if($sign['sign1'] == NULL || $sign['sign1'] ==''){ - $sign1 = NULL; -}else{ - if( explode(",", $sign['sign1'])[1] != ''){ - $sign1 = explode(",", $sign['sign1'])[1] == 'Y' ? 'Y' : 'N'; +if($sign){ + // Y:已同意 N:不同意 W:待簽 + // sign1 => 處長, sign2 => 業務承辦人, sign3 => 協理, sign4 => 總經理 + if($sign['sign1'] == NULL || $sign['sign1'] ==''){ + $sign1 = NULL; }else{ - $sign1 = 'W'; + if( explode(",", $sign['sign1'])[1] != ''){ + $sign1 = explode(",", $sign['sign1'])[1] == 'Y' ? 'Y' : 'N'; + }else{ + $sign1 = 'W'; + } } -} -if($sign['sign2'] == NULL || $sign['sign2'] ==''){ - $sign2 = NULL; -}else{ - if( explode(",", $sign['sign2'])[1] != ''){ - $sign2 = explode(",", $sign['sign2'])[1] == 'Y' ? 'Y' : 'N'; + if($sign['sign2'] == NULL || $sign['sign2'] ==''){ + $sign2 = NULL; }else{ - $sign2 = 'W'; + if( explode(",", $sign['sign2'])[1] != ''){ + $sign2 = explode(",", $sign['sign2'])[1] == 'Y' ? 'Y' : 'N'; + }else{ + $sign2 = 'W'; + } } -} -if($sign['sign3'] == NULL || $sign['sign3'] ==''){ - $sign3 = NULL; -}else{ - if( explode(",", $sign['sign3'])[1] != ''){ - // $sign3 = explode(",", $sign['sign3'])[1] == 'Y' ? 'Y' : 'N'; - if(explode(",", $sign['sign3'])[1] == 'YY') $sign3 = 'YY'; - if(explode(",", $sign['sign3'])[1] == 'Y') $sign3 = 'Y'; + if($sign['sign3'] == NULL || $sign['sign3'] ==''){ + $sign3 = NULL; }else{ - $sign3 = 'W'; + if( explode(",", $sign['sign3'])[1] != ''){ + // $sign3 = explode(",", $sign['sign3'])[1] == 'Y' ? 'Y' : 'N'; + if(explode(",", $sign['sign3'])[1] == 'YY') $sign3 = 'YY'; + if(explode(",", $sign['sign3'])[1] == 'Y') $sign3 = 'Y'; + if(explode(",", $sign['sign3'])[1] == 'N') $sign3 = 'N'; + }else{ + $sign3 = 'W'; + } } -} -if($sign['sign4'] == NULL || $sign['sign4'] ==''){ - $sign4 = NULL; -}else{ - if( explode(",", $sign['sign4'])[1] != ''){ - // $sign4 = explode(",", $sign['sign4'])[1] == 'Y' ? 'Y' : 'N'; - if(explode(",", $sign['sign4'])[1] == 'YY') $sign4 = 'YY'; - if(explode(",", $sign['sign4'])[1] == 'Y') $sign4 = 'Y'; + if($sign['sign4'] == NULL || $sign['sign4'] ==''){ + $sign4 = NULL; }else{ - $sign4 = 'W'; + if( explode(",", $sign['sign4'])[1] != ''){ + // $sign4 = explode(",", $sign['sign4'])[1] == 'Y' ? 'Y' : 'N'; + if(explode(",", $sign['sign4'])[1] == 'YY') $sign4 = 'YY'; + if(explode(",", $sign['sign4'])[1] == 'Y') $sign4 = 'Y'; + if(explode(",", $sign['sign4'])[1] == 'N') $sign4 = 'N'; + }else{ + $sign4 = 'W'; + } } -} -if($sign1 == 'W'){ - $currentSigner = explode(",", $sign['sign1'])[0]; - $currentSign = 1; -}elseif($sign2 == 'W'){ - $currentSigner = explode(",", $sign['sign2'])[0]; - $currentSign = 2; -}elseif($sign3 == 'W'){ - $currentSigner = explode(",", $sign['sign3'])[0]; - $currentSign = 3; -}elseif($sign4 == 'W'){ - $currentSigner = explode(",", $sign['sign4'])[0]; - $currentSign = 4; + if($sign1 == 'W'){ + $currentSigner = explode(",", $sign['sign1'])[0]; + $currentSign = 1; + }elseif($sign2 == 'W'){ + $currentSigner = explode(",", $sign['sign2'])[0]; + $currentSign = 2; + }elseif($sign3 == 'W'){ + $currentSigner = explode(",", $sign['sign3'])[0]; + $currentSign = 3; + }elseif($sign4 == 'W'){ + $currentSigner = explode(",", $sign['sign4'])[0]; + $currentSign = 4; + } +}else{ + $sign1 = NULL; + $sign2 = NULL; + $sign3 = NULL; + $sign4 = NULL; } + // $sql_str = "SELECT * FROM account WHERE accountid = :accountid"; // $stmt = $conn->prepare($sql_str); // $stmt->bindParam(':accountid', $sign['sign']); @@ -186,9 +210,9 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ - + - + @@ -202,7 +226,7 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ - +
    電梯設備
      @@ -213,13 +237,14 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){
    • +

    OPTION
      - - 小計 - - - - - + + @@ -308,13 +339,15 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ - - 小計 - - - - - + @@ -346,13 +379,55 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ + + + + + + - - - + + + + + + + + + + + + + + +
      小計 - - 拆梯價格
      項次人乘/載重樓層單價數量複價所屬電梯項次
      @@ -526,12 +601,12 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ 價率%(B/A) - + - + 預定成交日 @@ -604,8 +679,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ } ?> - - + + 業務承辦人 @@ -623,8 +698,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ } ?> - - + + 業務部協理 @@ -644,8 +719,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ } ?> - - + + 總經理 @@ -659,11 +734,11 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ echo "結案同意"; } }else{ - if($sign4 == 'Y'){ + if($sign4 == 'Y' && $contract['status'] == 'YY'){ echo "同意"; - }elseif($sign4 == 'N'){ + }elseif($sign4 == 'N' && $contract['status'] == 'YN'){ echo "不同意"; - }elseif($sign4 == 'W'){ + }elseif($sign4 == 'W' && $contract['status'] == 'YS'){ echo "待簽核"; }else{ echo "---"; @@ -671,8 +746,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ } ?> - - + + @@ -705,8 +780,8 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ - - + ">下載報價單 + ">下載附表一
    @@ -728,20 +803,20 @@ if($user_id == "M0174" || $user_id == "M0175" || $user_id == "M0060"){ const deposit_rate = ''; const keep_rate = ''; const warranty_rate = ''; - const memo = ''; + const memo = ``; const pays = [...]; const items = [...]; const options = [...]; - + const elevators = [...]; const is_renovate = ''; const user_id = ''; - const sign1 = ''; - const sign2 = ''; + const sign1 = ''; + const sign2 = ''; console.log('sign2====>', sign2); - const sign3 = ''; - const sign4 = ''; + const sign3 = ''; + const sign4 = ''; \ No newline at end of file diff --git a/wms/mkt/pricereviewCreate.php b/wms/mkt/pricereviewCreate.php index e1a303d8..62e43bfb 100644 --- a/wms/mkt/pricereviewCreate.php +++ b/wms/mkt/pricereviewCreate.php @@ -12,8 +12,25 @@ foreach ($options as $key => $option) { $options[$key]['isShow'] = 1; $options[$key]['selected'] = 0; } -$vol_no = $_GET['vol_no']; +$vol_no = ""; +if(isset($_GET['vol_no'])){ + $vol_no = $_GET['vol_no']; +} +$main = false; +if(isset($_GET['id'])){ + $id = $_GET['id']; + $sql_str = "SELECT * FROM pricereview_main WHERE id=:id ORDER BY id DESC LIMIT 1"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':id', $id); + $stmt->execute(); + $main = $stmt->fetch(PDO::FETCH_ASSOC); + $vol_no = $main['contractno']; +} +if($main && $main['status'] == 'YS'){ + echo ""; + exit; +} $hope_status = [ 'A'=>'有望簽約(已報價)', 'B'=>'觀望考慮(等待時機報價)', @@ -31,52 +48,262 @@ $stmt->bindParam(':vol_no', $vol_no); $stmt->execute(); $hope_customer = $stmt->fetch(PDO::FETCH_ASSOC); -//獲取有望客戶電梯規格 -$sql_str = "SELECT -hope_project_elevator_spec.specifications, -hope_project_elevator_spec.person, -hope_project_elevator_spec.stop, -hope_project_elevator_spec.speed, -hope_project_elevator_spec.open, -hope_project_elevator_spec.spec_price, -hope_project_elevator_spec.spec_num, -fp.price AS price, -fp.id AS facility_id, -CASE hope_project_elevator_spec.open - WHEN 4 THEN '2U' - WHEN 5 THEN '4PCO' - WHEN 7 THEN '6PCO' - WHEN 8 THEN '2S' - WHEN 9 THEN 'CO' - ELSE hope_project_elevator_spec.open -END AS open_converted -FROM hope_project_elevator_spec -LEFT JOIN ( -SELECT *, - ROW_NUMBER() OVER (PARTITION BY model ORDER BY create_dt DESC) as rn -FROM facility_price -) fp ON fp.model = CONCAT(hope_project_elevator_spec.specifications, '-', hope_project_elevator_spec.person, '*', hope_project_elevator_spec.stop, '-', CASE hope_project_elevator_spec.open - WHEN 4 THEN '2U' - WHEN 5 THEN '4PCO' - WHEN 7 THEN '6PCO' - WHEN 8 THEN '2S' - WHEN 9 THEN 'CO' - ELSE hope_project_elevator_spec.open -END, hope_project_elevator_spec.speed) -AND fp.rn = 1 -WHERE hope_project_elevator_spec.vol_no = :vol_no -ORDER BY hope_project_elevator_spec.seq ASC;"; -$stmt = $conn->prepare($sql_str); -$stmt->bindParam(':vol_no', $vol_no); -$stmt->execute(); -$hope_elevators = $stmt->fetchAll(PDO::FETCH_ASSOC); +if($user_id !== $hope_customer['salesman'] && $user_id !== "M0174"){ + echo ""; + exit; +} + +$hope_elevators = []; $total_spec = 0; -foreach ($hope_elevators as $key => $elevator) { - $hope_elevators[$key]['id'] = $key+1; - $total_spec ++; +$selectedOptions = []; +$optionKey = 0; +$otherOptions = []; +$otherOptionKey = 0; +$demolishOptions = []; +$demolishOptionKey = 0; +if($main){ + $mid = $main["id"]; + $sql_str = "SELECT + pricereview_item.*, + fp.price AS price, + fp.id AS facility_id, + pricereview_item.item_op AS open_converted + FROM + pricereview_item + LEFT JOIN + ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY model ORDER BY create_dt DESC) as rn + FROM + facility_price + ) fp + ON fp.model = pricereview_item.item_spec AND fp.rn = 1 + WHERE + mid = :mid AND + item_group = 'A' + "; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->execute(); + $elevators = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach($elevators as $key=>$elevator){ + $open = ""; + if($elevator['item_op'] == "2U"){ + $open = 4; + }elseif($elevator['item_op'] == "4PCO"){ + $open = 5; + }elseif($elevator['item_op'] == "6PCO"){ + $open = 7; + }elseif($elevator['item_op'] == "2S"){ + $open = 8; + }elseif($elevator['item_op'] == "CO"){ + $open = 9; + } + $hope_elevators[] = [ + 'id' => $elevator['item_no'], + 'model' => $elevator['item_spec'], + 'specifications' => explode(",", $elevator['note'])[0], + 'person' => explode(",", $elevator['note'])[1], + 'stop' => explode(",", $elevator['note'])[2], + 'speed' => explode(",", $elevator['note'])[3], + 'open_converted' => $elevator['item_op'], + 'open' => $open, + 'spec_price' => $elevator['item_price_ct'], + 'price' => $elevator['price'], + 'spec_num' => $elevator['item_qty'], + 'facility_id' => $elevator['facility_id'], + ]; + if($elevator['item_no'] > $total_spec){ + $total_spec = $elevator['item_no']; + } + } + + $sql_str = "SELECT pricereview_item.price_id, pricereview_item.item_qty, pricereview_item.option_relate_spec, pricereview_item.item_no, option_price.* FROM pricereview_item + LEFT JOIN option_price ON option_price.id = pricereview_item.price_id + WHERE mid = :mid AND item_group = 'B'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->execute(); + $oldOptions = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach($oldOptions as $oldoption){ + $selectedOptions[] = [ + 'id'=>$oldoption['price_id'], + 'idx'=>0, + 'key'=>$oldoption['item_no'], + 'qty'=>$oldoption['item_qty'], + 'name'=>$oldoption['group_name'], + 'price'=>$oldoption['price'], + 'memo'=>$oldoption['memo'], + 'toElevator'=>[ + [ + 'id'=>$oldoption['option_relate_spec'], + 'model'=> array_values(array_filter($hope_elevators, fn($val)=> $val['id'] == $oldoption['option_relate_spec']))[0]['model'], + ] + ] + ]; + + if($oldoption['item_no'] > $optionKey){ + $optionKey = $oldoption['item_no']; + } + } + + //除外項目 + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group='E'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->execute(); + $oldOtherOptions = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach($oldOtherOptions as $oldotheroption){ + $otherOptions[] = [ + 'id'=>$oldotheroption['item_no'], + 'name'=>$oldotheroption['item_spec'], + 'num'=>$oldotheroption['item_qty'], + 'price'=>$oldotheroption['item_unit_price'], + 'pr_no'=>$oldotheroption['note'], + 'toElevator'=>[ + [ + 'id'=>$oldotheroption['option_relate_spec'], + 'model'=> array_values(array_filter($hope_elevators, fn($val)=> $val['id'] == $oldotheroption['option_relate_spec']))[0]['model'], + ] + ] + ]; + if($oldotheroption['item_no'] > $otherOptionKey){ + $otherOptionKey = $oldotheroption['item_no']; + } + } + + $sql_str = "SELECT * FROM pricereview_item WHERE mid = :mid AND item_group='C'"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->execute(); + $oldDemolishOptions = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach($oldDemolishOptions as $olddemolishoption){ + $demolishOptions[] = [ + 'id'=>$olddemolishoption['item_no'], + 'price'=>$olddemolishoption['item_unit_price'], + 'qty'=>$olddemolishoption['item_qty'], + 'floor'=>$olddemolishoption['note'], + 'person'=>$olddemolishoption['item_spec'], + 'demolish_id'=>$olddemolishoption['price_id'], + 'toElevator'=>[ + [ + 'id'=>$olddemolishoption['option_relate_spec'], + 'model'=> array_values(array_filter($hope_elevators, fn($val)=> $val['id'] == $olddemolishoption['option_relate_spec']))[0]['model'], + ] + ] + ]; + if($demolishOptionKey < $olddemolishoption['item_no']){ + $demolishOptionKey = $olddemolishoption['item_no']; + } + } + + $sql_str = "SELECT * FROM pricereview_pay WHERE mid = :mid ORDER BY pay_kind ASC"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':mid', $mid); + $stmt->execute(); + $pays = $stmt->fetchAll(PDO::FETCH_ASSOC); + $paymentRatio = []; + if($pays){ + foreach($pays as $pay){ + $paymentRatio[] = [ + 'scale'=>$pay['pay_scale'], + 'ticket'=>$pay['pay_period'], + ]; + } + }else{ + $paymentRatio = [ + [ + 'scale'=>20, + 'ticket'=>30, + ], + [ + 'scale'=>0, + 'ticket'=>'', + ], + [ + 'scale'=>50, + 'ticket'=>30, + ], + [ + 'scale'=>0, + 'ticket'=>'', + ], + [ + 'scale'=>20, + 'ticket'=>30, + ], + [ + 'scale'=>10, + 'ticket'=>30, + ], + [ + 'scale'=>0, + 'ticket'=>'', + ], + ]; + } + +}else{ + //獲取有望客戶電梯規格 + $sql_str = "SELECT + hope_project_elevator_spec.specifications, + hope_project_elevator_spec.person, + hope_project_elevator_spec.stop, + hope_project_elevator_spec.speed, + hope_project_elevator_spec.open, + hope_project_elevator_spec.spec_price, + hope_project_elevator_spec.spec_num, + fp.price AS price, + fp.id AS facility_id, + CASE hope_project_elevator_spec.open + WHEN 4 THEN '2U' + WHEN 5 THEN '4PCO' + WHEN 7 THEN '6PCO' + WHEN 8 THEN '2S' + WHEN 9 THEN 'CO' + ELSE hope_project_elevator_spec.open + END AS open_converted + FROM hope_project_elevator_spec + LEFT JOIN ( + SELECT *, + ROW_NUMBER() OVER (PARTITION BY model ORDER BY create_dt DESC) as rn + FROM facility_price + ) fp ON fp.model = CONCAT(hope_project_elevator_spec.specifications, '-', hope_project_elevator_spec.person, '*', hope_project_elevator_spec.stop, '-', CASE hope_project_elevator_spec.open + WHEN 4 THEN '2U' + WHEN 5 THEN '4PCO' + WHEN 7 THEN '6PCO' + WHEN 8 THEN '2S' + WHEN 9 THEN 'CO' + ELSE hope_project_elevator_spec.open + END, hope_project_elevator_spec.speed) + AND fp.rn = 1 + WHERE hope_project_elevator_spec.vol_no = :vol_no + ORDER BY hope_project_elevator_spec.seq ASC;"; + $stmt = $conn->prepare($sql_str); + $stmt->bindParam(':vol_no', $vol_no); + $stmt->execute(); + $hope_elevators = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($hope_elevators as $key => $elevator) { + $hope_elevators[$key]['id'] = $key+1; + $spec = $elevator['specifications']; + if($spec == 'M1' || $spec == 'M1+M4(1:1)' || $spec == 'M1+M4(2:1)'){ + //稍後再處理 + }else{ + $hope_elevators[$key]['model'] = $elevator['specifications'] . "-" . $elevator['person'] . "*" . $elevator['stop'] . "-" . $elevator['open_converted'] . $elevator['speed']; + } + $total_spec ++; + } } + + + + + + + function convertDateTimeFormat($dateTimeStr) { // 使用 DateTime::createFromFormat 解析给定格式的日期时间 $date = DateTime::createFromFormat('Y-m-d H:i:s', $dateTimeStr); @@ -264,131 +491,49 @@ function convertDateTimeFormat($dateTimeStr) {
    -
    -
    -
    - +
    +
    - @@ -758,6 +886,11 @@ function convertDateTimeFormat($dateTimeStr) { + + + + +
    @@ -804,7 +937,7 @@ function convertDateTimeFormat($dateTimeStr) { - + 請填寫正確規格 @@ -869,6 +1002,7 @@ function convertDateTimeFormat($dateTimeStr) {
    +
    @@ -915,6 +1049,7 @@ function convertDateTimeFormat($dateTimeStr) {
    +
    @@ -930,7 +1065,7 @@ function convertDateTimeFormat($dateTimeStr) {
    -
    +

    保固延長

    @@ -975,6 +1110,69 @@ function convertDateTimeFormat($dateTimeStr) {
    +
    @@ -1197,7 +1395,7 @@ function convertDateTimeFormat($dateTimeStr) { @@ -1222,4 +1420,21 @@ function convertDateTimeFormat($dateTimeStr) { const pre_order_date = ''; const is_renovation = ''; const token_link = ''; + const selectedOptions = [...]; + const optionKey = ; + const otherOptions = [...]; + const otherOptionKey = ; + const demolishOptions = [...]; + const demolishOptionKey = ; + + const serviceFee = ; + const transactionDate = ''; + const shippingDate = ''; + const remark = ``; + const penalty = ''; + const deposit_rate = ''; + const keep_rate = ''; + const warranty_rate = ''; + const paymentRatio = [...]; + const user_id = ''; \ No newline at end of file diff --git a/wms/mkt/pricereview_renovate-index.php b/wms/mkt/pricereview_renovate-index.php index 3ae6c9a9..bce07be7 100644 --- a/wms/mkt/pricereview_renovate-index.php +++ b/wms/mkt/pricereview_renovate-index.php @@ -277,7 +277,7 @@ if ($data) : // echo ''; if ($data["status"] == "Y1") { ?> - 修改 + 修改刪除 - 重填價審 + 重填價審