diff --git a/wms/contract/contract-new-apply.php b/wms/contract/contract-new-apply.php index c6e8ee2c..2cdc096c 100644 --- a/wms/contract/contract-new-apply.php +++ b/wms/contract/contract-new-apply.php @@ -202,7 +202,7 @@ $para = "function_name=pricereview&" . $token_link; 免保期限
- +
個月
@@ -634,7 +634,7 @@ $para = "function_name=pricereview&" . $token_link; const secondPayDeadline = ''; const tradeaddress = ''; const tradedeadline = 180 - const freedeadline = 18; + const freedeadline = 12; const regulations = 10; const workdeadline_a = 60; const workdeadline_b = 7; diff --git a/wms/contract/insertData.php b/wms/contract/insertData.php index 38ee1051..5c4f8a99 100644 --- a/wms/contract/insertData.php +++ b/wms/contract/insertData.php @@ -114,7 +114,10 @@ foreach ($sheet->getRowIterator() as $key => $row) { } elseif ($id == 15) { $kind = 'E'; $subkind = 'E1'; - } elseif ($id == 16) { + } elseif ($id == 17) { + $kind = 'E'; + $subkind = 'E1'; + }elseif ($id == 18) { $kind = 'F'; $subkind = 'F1'; } diff --git a/wms/contract/option/f1.xlsx b/wms/contract/option/f1.xlsx deleted file mode 100644 index 0189dfe9..00000000 Binary files a/wms/contract/option/f1.xlsx and /dev/null differ diff --git a/wms/contract/option/facility.xlsx b/wms/contract/option/facility.xlsx deleted file mode 100644 index f51a3944..00000000 Binary files a/wms/contract/option/facility.xlsx and /dev/null differ diff --git a/wms/contract/option/option1.xlsx b/wms/contract/option/option1.xlsx deleted file mode 100644 index 122bf90a..00000000 Binary files a/wms/contract/option/option1.xlsx and /dev/null differ diff --git a/wms/contract/option/option10.xlsx b/wms/contract/option/option10.xlsx deleted file mode 100644 index 034aaa77..00000000 Binary files a/wms/contract/option/option10.xlsx and /dev/null differ diff --git a/wms/contract/option/option11.xlsx b/wms/contract/option/option11.xlsx deleted file mode 100644 index 5224e609..00000000 Binary files a/wms/contract/option/option11.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option.xlsx b/wms/contract/option/option1127/option.xlsx deleted file mode 100644 index 36c0cece..00000000 Binary files a/wms/contract/option/option1127/option.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option1.xlsx b/wms/contract/option/option1127/option1.xlsx deleted file mode 100644 index 4a197ec5..00000000 Binary files a/wms/contract/option/option1127/option1.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option10.xlsx b/wms/contract/option/option1127/option10.xlsx deleted file mode 100644 index 4087ccf5..00000000 Binary files a/wms/contract/option/option1127/option10.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option11.xlsx b/wms/contract/option/option1127/option11.xlsx deleted file mode 100644 index 9dc16b7e..00000000 Binary files a/wms/contract/option/option1127/option11.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option12.xlsx b/wms/contract/option/option1127/option12.xlsx deleted file mode 100644 index 1f57b701..00000000 Binary files a/wms/contract/option/option1127/option12.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option13.xlsx b/wms/contract/option/option1127/option13.xlsx deleted file mode 100644 index df84bbc7..00000000 Binary files a/wms/contract/option/option1127/option13.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option14.xlsx b/wms/contract/option/option1127/option14.xlsx deleted file mode 100644 index a36ca847..00000000 Binary files a/wms/contract/option/option1127/option14.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option15.xlsx b/wms/contract/option/option1127/option15.xlsx deleted file mode 100644 index 7ef897bc..00000000 Binary files a/wms/contract/option/option1127/option15.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option16.xlsx b/wms/contract/option/option1127/option16.xlsx deleted file mode 100644 index 8e6bce19..00000000 Binary files a/wms/contract/option/option1127/option16.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option2.xlsx b/wms/contract/option/option1127/option2.xlsx deleted file mode 100644 index 17daba20..00000000 Binary files a/wms/contract/option/option1127/option2.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option20.xlsx b/wms/contract/option/option1127/option20.xlsx deleted file mode 100644 index e2422b5d..00000000 Binary files a/wms/contract/option/option1127/option20.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option3.xlsx b/wms/contract/option/option1127/option3.xlsx deleted file mode 100644 index 5c39ee18..00000000 Binary files a/wms/contract/option/option1127/option3.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option4.xlsx b/wms/contract/option/option1127/option4.xlsx deleted file mode 100644 index c44f5df5..00000000 Binary files a/wms/contract/option/option1127/option4.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option5.xlsx b/wms/contract/option/option1127/option5.xlsx deleted file mode 100644 index 170ca69c..00000000 Binary files a/wms/contract/option/option1127/option5.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option6.xlsx b/wms/contract/option/option1127/option6.xlsx deleted file mode 100644 index 68f18ef9..00000000 Binary files a/wms/contract/option/option1127/option6.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option7.xlsx b/wms/contract/option/option1127/option7.xlsx deleted file mode 100644 index ee4d39eb..00000000 Binary files a/wms/contract/option/option1127/option7.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option8.xlsx b/wms/contract/option/option1127/option8.xlsx deleted file mode 100644 index 5f431522..00000000 Binary files a/wms/contract/option/option1127/option8.xlsx and /dev/null differ diff --git a/wms/contract/option/option1127/option9.xlsx b/wms/contract/option/option1127/option9.xlsx deleted file mode 100644 index 90616cc0..00000000 Binary files a/wms/contract/option/option1127/option9.xlsx and /dev/null differ diff --git a/wms/contract/option/option12.xlsx b/wms/contract/option/option12.xlsx deleted file mode 100644 index e2a1ac6f..00000000 Binary files a/wms/contract/option/option12.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option.xlsx b/wms/contract/option/option1220/option.xlsx deleted file mode 100644 index 36c0cece..00000000 Binary files a/wms/contract/option/option1220/option.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option1.xlsx b/wms/contract/option/option1220/option1.xlsx deleted file mode 100644 index 4a197ec5..00000000 Binary files a/wms/contract/option/option1220/option1.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option10.xlsx b/wms/contract/option/option1220/option10.xlsx deleted file mode 100644 index 4087ccf5..00000000 Binary files a/wms/contract/option/option1220/option10.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option11.xlsx b/wms/contract/option/option1220/option11.xlsx deleted file mode 100644 index 9dc16b7e..00000000 Binary files a/wms/contract/option/option1220/option11.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option12.xlsx b/wms/contract/option/option1220/option12.xlsx deleted file mode 100644 index 1f57b701..00000000 Binary files a/wms/contract/option/option1220/option12.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option13.xlsx b/wms/contract/option/option1220/option13.xlsx deleted file mode 100644 index df84bbc7..00000000 Binary files a/wms/contract/option/option1220/option13.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option14.xlsx b/wms/contract/option/option1220/option14.xlsx deleted file mode 100644 index a36ca847..00000000 Binary files a/wms/contract/option/option1220/option14.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option15.xlsx b/wms/contract/option/option1220/option15.xlsx deleted file mode 100644 index 7ef897bc..00000000 Binary files a/wms/contract/option/option1220/option15.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option16.xlsx b/wms/contract/option/option1220/option16.xlsx deleted file mode 100644 index 8e6bce19..00000000 Binary files a/wms/contract/option/option1220/option16.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option2.xlsx b/wms/contract/option/option1220/option2.xlsx deleted file mode 100644 index 17daba20..00000000 Binary files a/wms/contract/option/option1220/option2.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option20.xlsx b/wms/contract/option/option1220/option20.xlsx deleted file mode 100644 index e2422b5d..00000000 Binary files a/wms/contract/option/option1220/option20.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option3.xlsx b/wms/contract/option/option1220/option3.xlsx deleted file mode 100644 index 5c39ee18..00000000 Binary files a/wms/contract/option/option1220/option3.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option4.xlsx b/wms/contract/option/option1220/option4.xlsx deleted file mode 100644 index c44f5df5..00000000 Binary files a/wms/contract/option/option1220/option4.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option5.xlsx b/wms/contract/option/option1220/option5.xlsx deleted file mode 100644 index 170ca69c..00000000 Binary files a/wms/contract/option/option1220/option5.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option6.xlsx b/wms/contract/option/option1220/option6.xlsx deleted file mode 100644 index 68f18ef9..00000000 Binary files a/wms/contract/option/option1220/option6.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option7.xlsx b/wms/contract/option/option1220/option7.xlsx deleted file mode 100644 index ee4d39eb..00000000 Binary files a/wms/contract/option/option1220/option7.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option8.xlsx b/wms/contract/option/option1220/option8.xlsx deleted file mode 100644 index 5f431522..00000000 Binary files a/wms/contract/option/option1220/option8.xlsx and /dev/null differ diff --git a/wms/contract/option/option1220/option9.xlsx b/wms/contract/option/option1220/option9.xlsx deleted file mode 100644 index 90616cc0..00000000 Binary files a/wms/contract/option/option1220/option9.xlsx and /dev/null differ diff --git a/wms/contract/option/option13.xlsx b/wms/contract/option/option13.xlsx deleted file mode 100644 index 74efcbaa..00000000 Binary files a/wms/contract/option/option13.xlsx and /dev/null differ diff --git a/wms/contract/option/option14.xlsx b/wms/contract/option/option14.xlsx deleted file mode 100644 index 07d5b6ce..00000000 Binary files a/wms/contract/option/option14.xlsx and /dev/null differ diff --git a/wms/contract/option/option15.xlsx b/wms/contract/option/option15.xlsx deleted file mode 100644 index 3620e7ca..00000000 Binary files a/wms/contract/option/option15.xlsx and /dev/null differ diff --git a/wms/contract/option/option2.xlsx b/wms/contract/option/option2.xlsx deleted file mode 100644 index 4cf1f87c..00000000 Binary files a/wms/contract/option/option2.xlsx and /dev/null differ diff --git a/wms/contract/option/option3.xlsx b/wms/contract/option/option3.xlsx deleted file mode 100644 index 4c3416ef..00000000 Binary files a/wms/contract/option/option3.xlsx and /dev/null differ diff --git a/wms/contract/option/option4.xlsx b/wms/contract/option/option4.xlsx deleted file mode 100644 index 7046969e..00000000 Binary files a/wms/contract/option/option4.xlsx and /dev/null differ diff --git a/wms/contract/option/option5.xlsx b/wms/contract/option/option5.xlsx deleted file mode 100644 index 9e70e1e8..00000000 Binary files a/wms/contract/option/option5.xlsx and /dev/null differ diff --git a/wms/contract/option/option6.xlsx b/wms/contract/option/option6.xlsx deleted file mode 100644 index d647884b..00000000 Binary files a/wms/contract/option/option6.xlsx and /dev/null differ diff --git a/wms/contract/option/option7.xlsx b/wms/contract/option/option7.xlsx deleted file mode 100644 index 3af4c28d..00000000 Binary files a/wms/contract/option/option7.xlsx and /dev/null differ diff --git a/wms/contract/option/option8.xlsx b/wms/contract/option/option8.xlsx deleted file mode 100644 index 7f1c37eb..00000000 Binary files a/wms/contract/option/option8.xlsx and /dev/null differ diff --git a/wms/contract/option/option9.xlsx b/wms/contract/option/option9.xlsx deleted file mode 100644 index 1d43cf6f..00000000 Binary files a/wms/contract/option/option9.xlsx and /dev/null differ diff --git a/wms/crm/crmm01-index.php b/wms/crm/crmm01-index.php index 2ed535b9..58dfaba4 100644 --- a/wms/crm/crmm01-index.php +++ b/wms/crm/crmm01-index.php @@ -41,7 +41,7 @@ $where .= " and salesman_name like '$salesman'"; $sql_cmd = sql_myself($user_id, "salesman"); // max,許紓晴,林慧珊,鄭伊岑 -if (in_array($user_department_id, $depart_arr) || $user_id == "M0060" || $user_id == "M0107" || $user_id == "M0193" || $user_id == "M0149" || $user_id == "M0189" || $user_id == "M0061" || $user_id == "TEST01" || $user_id == "TEST02" || $user_id == "TEST03" || $user_id == "TEST04" ) $sql_cmd = ""; +if (in_array($user_department_id, $depart_arr) || $user_id == "M0060" || $user_id == "M0107" || $user_id == "M0193" || $user_id == "M0149" || $user_id == "M0189" || $user_id == "M0061" || $user_id == "TEST01" || $user_id == "TEST02" || $user_id == "TEST03" || $user_id == "TEST04" || $user_id == "M0175") $sql_cmd = ""; if (!empty($sql_cmd)) $where .= " and " . str_replace("where", "", $sql_cmd); /* $checkAll = ['p0044', 'M0007']; diff --git a/wms/mkt/api/getElevatorPrice.php b/wms/mkt/api/getElevatorPrice.php new file mode 100644 index 00000000..59b63464 --- /dev/null +++ b/wms/mkt/api/getElevatorPrice.php @@ -0,0 +1,17 @@ +prepare($sql_str); +$stmt->bindParam(':model', $model); +$stmt->execute(); +$el = $stmt->fetch(PDO::FETCH_ASSOC); +if($el){ + $price = $el['price']; +}else{ + $price = null; +} +echo $price; \ No newline at end of file diff --git a/wms/mkt/api/postNewElevatorPricereview.php b/wms/mkt/api/postNewElevatorPricereview.php new file mode 100644 index 00000000..e1e4493f --- /dev/null +++ b/wms/mkt/api/postNewElevatorPricereview.php @@ -0,0 +1,204 @@ +beginTransaction(); + +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 整機單價 + + + //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(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 = $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) + VALUES (:mid, :item_no, :item_group, :item_spec, :option_relate_spec, :item_unit_price, :item_qty, :item_price_bp)"; + + 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']; + + $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(); + } + + $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(); + } + + + $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(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['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(); + } + + $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(); + + + 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/assets/js/pricereviewAlpine.js b/wms/mkt/assets/js/pricereviewAlpine.js index db4e346b..7ec229cf 100644 --- a/wms/mkt/assets/js/pricereviewAlpine.js +++ b/wms/mkt/assets/js/pricereviewAlpine.js @@ -1,7 +1,600 @@ const pricereviewCreate = ()=>{ + return { + init(){ + this.elevators = elevators; + console.log(this.elevators); + console.log(this.total_spec); + }, + + openFn:{ + 4:'2U', + 5:"4PCO", + 7:"6PCO", + 8:"2S", + 9:"CO" + }, + optionalArr: { + 1:'標配', + 2:'選配', + 3:'選配', + }, + total_spec: total_spec, + options: options, + // orioptions: options, + searchtext: '', + kind: 1, + subkind: 1, + buttons: [], + modalSelectedOptions: {}, + selectedOptions:[], + elevators: [], + toElevators:[], + toElevatorNo: '', + currentOptionKey: '', + currentOtherOptionKey: '', + currentMaintainOptionKey: '', + optionKey:0, + otherOptionKey:0, + maintainOptionKey:0, + modalElevatorInfo:{ + spec:'', + person:'', + stop:'', + speed:'', + open:'CO', + num: 1, + price:'', + sale_price:'', + }, + otherOptions: [], + modalOtherOptionInfo:{ + pr_no:"", + name:"", + price: 0, + num:"", + }, + maintainOptions:[], + modalMaintainInfo:{ + price:0, + num:"", + memo:"", + }, + paymentRatio:[ + { + scale: 20, + ticket: 30, + }, + { + scale: 0, + ticket: 30, + }, + { + scale: 50, + ticket: 30, + }, + { + scale: 0, + ticket: 30, + }, + { + scale: 20, + ticket: 30, + }, + { + scale: 10, + ticket: 30, + }, + { + scale: 0, + ticket: 30, + }, + ], + serviceFee:0, + transactionDate: pre_order_date, + shippingDate:'', + remark:'', + 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; + console.log(model); + try{ + const res = await axios.get("./api/getElevatorPrice.php", {params: {model: model}}) + console.log(res.data); + if(res.data == null || res.data == ""){ + console.log("公司並無提供此規格!!"); + } + this.elevators[idx].price = res.data + }catch (error) { + console.error("Error fetching elevator price:", error); + } + + }, + async getModalElevatorPrice(){ + let 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}}) + console.log(res.data); + if(res.data == null || res.data == ""){ + console.log("公司並無提供此規格!!"); + } + this.modalElevatorInfo.price = res.data + }catch (error) { + console.error("Error fetching elevator price:", error); + } + }, + initButtons(kind) { + if (kind == 'A') { + this.buttons = [ + { name: '車廂意匠', type: 'A1' } + ] + } else if (kind == 'B') { + this.buttons = [ + { name: '天井', type: 'B1' }, + { name: '地板', type: 'B2' }, + { name: '操縱盤', type: 'B3' }, + { name: '扶手', type: 'B4' }, + { name: '車廂門與層門(轎門/層門)', type: 'B5' }, + { name: '轎壁(車廂側板)', type: 'B6' }, + { name: '其他車廂內裝配件', type: 'B7' }, + ] + } else if (kind == 'C') { + this.buttons = [ + { name: '框', type: 'C1' }, + { name: '乘場指示器', type: 'C2' }, + { name: '燈', type: 'C3' }, + { name: '方式與門', type: 'C4' }, + ] + } else if (kind == 'D') { + this.buttons = [ + { name: '功能與配置', type: 'D1' }, + { name: 'OH與樓高', type: 'D2' }, + ] + } else if (kind == 'E') { + this.buttons = [ + { name: '平台梯', type: 'E1' }, + ] + } else if (kind == 'F') { + this.buttons = [ + { name: '汰改', type: 'F1' }, + ] + } else if (kind == 1) { + this.buttons = [] + } + }, + optionSubCategory: 1, + initOptinos(){ + this.options.forEach(option=>{ + option.isShow = 1; + }) + }, + searchOptions(kind=this.kind, subkind=this.subkind){ + if(kind!=null) this.kind = kind; + if(subkind!=null) this.subkind = subkind; + this.initOptinos(); + this.initButtons(kind); + this.options.forEach(option=>{ + if(option.kind != this.kind && this.kind != 1){ + option.isShow = 0; + }else{ + if(option.subkind != this.subkind && this.subkind != 1){ + option.isShow = 0; + } + } + if(option.isShow == 1){ + if(option.group_name == null) option.group_name = '' + if(option.spec == null) option.spec = '' + if(option.memo == null) option.memo = '' + if(option.price == null) option.price = 0 + if(option.unit == null) option.unit = '' + if(String(option.id).includes(this.searchtext) || option.group_name.includes(this.searchtext) || option.memo.toLowerCase().includes(this.searchtext) || option.spec.toLowerCase().includes(this.searchtext) || option.unit.includes(this.searchtext) || String(option.price).includes(this.searchtext)){ + option.isShow = 1 + }else{ + option.isShow = 0 + } + } + }) + }, + selectOption(idx, id, name, price, memo){ + this.options[idx].selected = this.options[idx].selected==1 ? 0 : 1; + + if(this.modalSelectedOptions.hasOwnProperty(idx)){ + delete this.modalSelectedOptions[idx]; + }else{ + //this.optionKey => 已選option 流水號, idx:option表內的流水號, id:option 資料庫的ID + this.modalSelectedOptions[idx] = {key:this.optionKey, 'idx':idx, 'id': id, 'name': name, 'price': price, qty:1, 'memo': memo, 'toElevator':[] } + } + this.optionKey ++; + }, + initModalSelectedOptions(){ + this.modalSelectedOptions = {} + this.options.forEach(option=>{ + option.selected = 0 + }) + this.$refs.optionsModal.style.display = "block" + body.style.overflow = 'hidden' + + }, + chkOptions(){ + Object.keys(this.modalSelectedOptions).forEach(option=>{ + this.selectedOptions.push(this.modalSelectedOptions[option]) + }) + console.log(this.selectedOptions); + this.$refs.optionsModal.style.display = 'none'; + }, + hideOptionsModal(){ + this.$refs.optionsModal.style.display = 'none'; + body.style.overflow = 'auto' + }, + totalElevatorsPrice(){ + return this.elevators.reduce((total, elevator) => { + return total + (elevator.spec_num * elevator.price); + }, 0); + }, + totalElevatorsNum(){ + return this.elevators.reduce((total, elevator) => { + return total + Number(elevator.spec_num); + }, 0) + }, + totalElevatorsSalePrice(){ + return this.elevators.reduce((total, elevator) => { + return total + (elevator.spec_num * elevator.spec_price); + }, 0); + }, + totalOptionsPrice(){ + return this.selectedOptions.reduce((total, option) => { + return total + (option.qty * option.price); + }, 0); + }, + openAddElevatorFn(){ + + }, + createElevatorFn(){ + if(this.modalElevatorInfo.spec == '') return alert("請選擇電梯規格"); + if(this.modalElevatorInfo.stop == '') return alert("請填入停數"); + if(this.modalElevatorInfo.speed == '') return alert("請選擇速度"); + if(this.modalElevatorInfo.open == '') return alert("請選擇開梯方式"); + if(this.modalElevatorInfo.person == '') return alert("請填入人乘/載重"); + if(this.modalElevatorInfo.num == '') return alert("請填入數量"); + if(this.modalElevatorInfo.sale_price == '') return alert("請填入售價"); + this.total_spec ++; + this.elevators.push({ + id: this.total_spec, + specifications: this.modalElevatorInfo.spec, + person: this.modalElevatorInfo.person, + stop: this.modalElevatorInfo.stop, + speed: this.modalElevatorInfo.speed, + open_converted: this.modalElevatorInfo.open, + spec_price: this.modalElevatorInfo.sale_price, + price: this.modalElevatorInfo.price, + open:'', + spec_num: this.modalElevatorInfo.num, + }); + this.modalElevatorInfo = { + spec:'', + person:'', + stop:'', + speed:'', + open:'CO', + num: 1, + price:'', + sale_price:'', + }; + this.$refs.closeCreateElevatorModalBtn.click(); + }, + copyElevator(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 spec_price = this.elevators[idx].spec_price + const open = this.elevators[idx].open + const spec_num = this.elevators[idx].spec_num + const price = this.elevators[idx].price + + this.total_spec ++; + this.elevators.push({ + id: this.total_spec, + specifications: spec, + person: person, + stop: stop, + speed: speed, + open_converted: open_converted, + spec_price: spec_price, + price: price, + open: open, + spec_num: spec_num, + }); + console.log(this.elevators); + }, + 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){ + this.toElevators.push({ + id: elevator.id, + model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + checked: matchElevators.includes(elevator.id) ? 1: 0, + }) + } + }) + }, + addOtherOptionToElevator(id){ + this.currentOtherOptionKey = id; + this.toElevators = []; + this.toElevatorNo = ""; + const matchElevators = this.otherOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) + this.toElevatorNo = matchElevators[0] + this.elevators.forEach(elevator=>{ + if(elevator.price > 0){ + this.toElevators.push({ + id: elevator.id, + model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + checked: matchElevators.includes(elevator.id) ? 1: 0, + }) + } + }) + }, + 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'], + }) + this.selectedOptions.forEach(option=>{ + if(option.key == this.currentOptionKey){ + option.toElevator = []; + option.toElevator.push(...checkedOptions) + } + }) + this.currentOptionKey = '' + }, + 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'], + }) + this.otherOptions.forEach(option=>{ + if(option.id == this.currentOtherOptionKey){ + option.toElevator = []; + option.toElevator.push(...checkedOptions) + } + }) + + this.currentOtherOptionKey = '' + }, + 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.selectedOptions.forEach(option=>{ + option.toElevator = option.toElevator.filter(el=>{ + return issetElevators.includes(el.id) + }) + }) + console.log(this.selectedOptions); + }, + removeOption(key){ + console.log(this.selectedOptions); + this.selectedOptions = this.selectedOptions.filter(option=> option.key != key) + }, + removeOtherOption(id){ + this.otherOptions = this.otherOptions.filter(option=> option.id != id) + }, + createOtherOptionFn(){ + this.otherOptions.push({ + id: this.otherOptionKey, + pr_no: this.modalOtherOptionInfo.pr_no, + name: this.modalOtherOptionInfo.name, + price: this.modalOtherOptionInfo.price, + num: this.modalOtherOptionInfo.num, + toElevator:[], + }) + this.modalOtherOptionInfo = { + pr_no: '', + name: '', + price: 0, + num: '', + } + this.otherOptionKey ++; + console.log(this.otherOptions); + this.$refs.closeCreateOtherOptionModalBtn.click(); + }, + totalOtherOptionsPrice(){ + return this.otherOptions.reduce((total, option) => { + return total + (Number(option.num) * Number(option.price)); + }, 0); + }, + totalOtherOptionsNum(){ + return this.otherOptions.reduce((total, option) => { + return total + Number(option.num); + }, 0); + }, + createMaintainOptionFn(){ + this.maintainOptions.push({ + id: this.maintainOptionKey, + price: this.modalMaintainInfo.price, + num: this.modalMaintainInfo.num, + memo: this.modalMaintainInfo.memo, + toElevator:[], + }) + this.modalMaintainInfo = { + price:0, + num:"", + memo:"", + } + this.maintainOptionKey ++; + this.$refs.closeCreateMaintainOptionModalBtn.click(); + }, + totalMaintainOptionsPrice(){ + return this.maintainOptions.reduce((total, option) => { + return total + (Number(option.num) * Number(option.price)); + }, 0); + }, + totalMaintainOptionsNum(){ + return this.maintainOptions.reduce((total, option) => { + return total + Number(option.num); + }, 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'], + }) + this.maintainOptions.forEach(option=>{ + if(option.id == this.currentMaintainOptionKey){ + option.toElevator = []; + option.toElevator.push(...checkedOptions) + } + }) + this.currentMaintainOptionKey = '' + }, + addMaintainOptionToElevator(id){ + this.currentMaintainOptionKey = id; + this.toElevators = []; + this.toElevatorNo = ""; + const matchElevators = this.maintainOptions.filter(option=> option.id == id)[0].toElevator.map(elevator=> elevator.id) + this.toElevatorNo = matchElevators[0] + this.elevators.forEach(elevator=>{ + if(elevator.price > 0){ + this.toElevators.push({ + id: elevator.id, + model: elevator.specifications + '-' + elevator.person + '*' + elevator.stop + '-' + elevator.open_converted + elevator.speed, + checked: matchElevators.includes(elevator.id) ? 1: 0, + }) + } + }) + }, + removeMaintainOption(id){ + this.maintainOptions = this.maintainOptions.filter(option=> option.id != id) + }, + totalPrice(){ + return this.totalElevatorsPrice() + this.totalOptionsPrice() + this.totalOtherOptionsPrice() + this.totalMaintainOptionsPrice(); + }, + totalSalePrice(){ + return this.elevators.reduce((total, elevator) => { + return total + (elevator.spec_num * elevator.spec_price); + }, 0); + }, + scalePrice(scale){ + if(scale === '') return 0; + return this.totalSalePrice() * scale / 100; + }, + totalScale(){ + let total = 0; + Object.keys(this.paymentRatio).forEach(pay=>{ + if(this.paymentRatio[pay].scale != '' && this.paymentRatio[pay].scale > 0){ + total += Number(this.paymentRatio[pay].scale) + } + }) + + 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, + submit(){ + const form = new FormData(); + form.append('contractno', contractno); + form.append('ekind', "新梯"); + 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', "YS"); + form.append('attatch1', ""); + form.append('attatch2', ""); + + + 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('paymentRatio', JSON.stringify(this.paymentRatio)); + + axios.post('./api/postNewElevatorPricereview.php', form).then(res=>{ + console.log(res.data); + if(res.data == "success"){ + alert("送審成功!"); + } + }).catch(err=>{ + console.error(err); + }) + }, + + } +} + + +const pricereviewCheck = ()=>{ return { init(){ console.log(123) - } + }, } } \ No newline at end of file diff --git a/wms/mkt/css/pricereview.css b/wms/mkt/css/pricereview.css index 13638fdf..36b43c16 100644 --- a/wms/mkt/css/pricereview.css +++ b/wms/mkt/css/pricereview.css @@ -1,29 +1,45 @@ -#pricereviewCreate table, #pricereviewCreate th, #pricereviewCreate td { +#pricereviewCreate > .modal { + padding: 20px; +} +#pricereviewCreate > .modal table, #pricereviewCreate > .modal th, #pricereviewCreate > .modal td { + border: 1px #ccc solid; +} +#pricereviewCreate > .modal table > thead tr th { + color: #A52A2A; +} +#pricereviewCreate > .modal table > tbody .selected { + background-color: #E7FEFB; +} +#pricereviewCreate .container table, #pricereviewCreate .container th, #pricereviewCreate .container td { border: 1px #ccc solid; padding: 15px; } -#pricereviewCreate table thead th { +#pricereviewCreate .container table.noborder, #pricereviewCreate .container table .noborder th, #pricereviewCreate .container table .noborder td, #pricereviewCreate .container th.noborder, #pricereviewCreate .container th .noborder th, #pricereviewCreate .container th .noborder td, #pricereviewCreate .container td.noborder, #pricereviewCreate .container td .noborder th, #pricereviewCreate .container td .noborder td { + border: none; +} +#pricereviewCreate .container table thead th { background-color: #6D9EEB; } -#pricereviewCreate table tbody td input { +#pricereviewCreate .container table tbody td input { font-size: 14px; } -#pricereviewCreate table tbody th { +#pricereviewCreate .container table tbody th { background-color: #CCE4F8; font-size: 14px; padding: 15px 2px; min-width: 100px; text-align: center; } -#pricereviewCreate table input { +#pricereviewCreate .container table input { font-size: 13px; } -#pricereviewCreate .pricreviewmain { +#pricereviewCreate .container .pricreviewmain { background-color: #F2F2F2; padding: 20px; border-radius: 6px; + margin: 30px 0; } -#pricereviewCreate .pricreviewmain button { +#pricereviewCreate .container .pricreviewmain button { color: #fff; width: 55px; height: 30px; @@ -31,60 +47,183 @@ margin-left: 10px; font-size: 13px; } -#pricereviewCreate .pricreviewmain button.addbtn { +#pricereviewCreate .container .pricreviewmain button.addbtn { background-color: #337AB7; width: 30px; } -#pricereviewCreate .pricreviewmain button.deleteBtn { +#pricereviewCreate .container .pricreviewmain button.deleteBtn { background-color: #D9534F; color: #fff; font-size: 12px; width: 30px; } -#pricereviewCreate .pricreviewmain button.selectElevator { +#pricereviewCreate .container .pricreviewmain button.selectElevator { background-color: #D9534F; color: #fff; } -#pricereviewCreate .pricreviewmain > .divitem { +#pricereviewCreate .container .pricreviewmain > .divitem { border: 1px #ccc solid; padding: 10px; border-radius: 4px; } -#pricereviewCreate .pricreviewmain > .divitem .title { +#pricereviewCreate .container .pricreviewmain > .divitem .title { display: flex; align-items: center; border-bottom: 1px #ccc solid; padding: 10px 0; margin-bottom: 10px; } -#pricereviewCreate .pricreviewmain > .divitem .title h6 { +#pricereviewCreate .container .pricreviewmain > .divitem .title h6 { font-weight: 600; } -#pricereviewCreate .pricreviewmain > .divitem table, #pricereviewCreate .pricreviewmain > .divitem th, #pricereviewCreate .pricreviewmain > .divitem td { +#pricereviewCreate .container .pricreviewmain > .divitem table, #pricereviewCreate .container .pricreviewmain > .divitem th, #pricereviewCreate .container .pricreviewmain > .divitem td { font-size: 14px; background-color: transparent; } -#pricereviewCreate .pricreviewmain > .divitem table input, #pricereviewCreate .pricreviewmain > .divitem table select, #pricereviewCreate .pricreviewmain > .divitem table textarea, #pricereviewCreate .pricreviewmain > .divitem th input, #pricereviewCreate .pricreviewmain > .divitem th select, #pricereviewCreate .pricreviewmain > .divitem th textarea, #pricereviewCreate .pricreviewmain > .divitem td input, #pricereviewCreate .pricreviewmain > .divitem td select, #pricereviewCreate .pricreviewmain > .divitem td textarea { +#pricereviewCreate .container .pricreviewmain > .divitem table input, #pricereviewCreate .container .pricreviewmain > .divitem table select, #pricereviewCreate .container .pricreviewmain > .divitem table textarea, #pricereviewCreate .container .pricreviewmain > .divitem th input, #pricereviewCreate .container .pricreviewmain > .divitem th select, #pricereviewCreate .container .pricreviewmain > .divitem th textarea, #pricereviewCreate .container .pricreviewmain > .divitem td input, #pricereviewCreate .container .pricreviewmain > .divitem td select, #pricereviewCreate .container .pricreviewmain > .divitem td textarea { font-size: 13px; } -#pricereviewCreate .pricreviewmain > .divitem table input[type=number]::-webkit-outer-spin-button, -#pricereviewCreate .pricreviewmain > .divitem table input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .pricreviewmain > .divitem th input[type=number]::-webkit-outer-spin-button, -#pricereviewCreate .pricreviewmain > .divitem th input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .pricreviewmain > .divitem td input[type=number]::-webkit-outer-spin-button, -#pricereviewCreate .pricreviewmain > .divitem td input[type=number]::-webkit-inner-spin-button { +#pricereviewCreate .container .pricreviewmain > .divitem table input[type=number]::-webkit-outer-spin-button, +#pricereviewCreate .container .pricreviewmain > .divitem table input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .container .pricreviewmain > .divitem th input[type=number]::-webkit-outer-spin-button, +#pricereviewCreate .container .pricreviewmain > .divitem th input[type=number]::-webkit-inner-spin-button, #pricereviewCreate .container .pricreviewmain > .divitem td input[type=number]::-webkit-outer-spin-button, +#pricereviewCreate .container .pricreviewmain > .divitem td input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } -#pricereviewCreate .pricreviewmain > .divitem table tr:hover .deleteBtn { +#pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .deleteBtn, #pricereviewCreate .container .pricreviewmain > .divitem table tr:hover .copyBtn { opacity: 1; } -#pricereviewCreate .pricreviewmain > .divitem table .saletd { +#pricereviewCreate .container .pricreviewmain > .divitem table .saletd { position: relative; } -#pricereviewCreate .pricreviewmain > .divitem table .saletd > .deleteBtn { +#pricereviewCreate .container .pricreviewmain > .divitem table .saletd > .deleteBtn { position: absolute; top: 50%; transform: translateY(-50%); right: 2px; opacity: 0; transition: 0.3s; +} +#pricereviewCreate .container .pricreviewmain > .divitem table .saletd > .copyBtn { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 38px; + opacity: 0; + transition: 0.3s; + width: 30px; + height: 30px; +} +#pricereviewCreate .container .pricreviewmain > .divitem table textarea { + height: auto; + min-height: 50px; +} +#pricereviewCreate .container .pricreviewmain > .filediv { + display: flex; + flex-direction: column; + margin-top: 20px; +} +#pricereviewCreate .container .pricreviewmain > .filediv label { + display: flex; + align-items: center; + margin: 10px 0; +} +#pricereviewCreate .container .pricreviewmain > .filediv label p { + width: 100px; + font-size: 15px; + font-weight: 600; +} +#pricereviewCreate .container .pricreviewmain > .filediv label input[type=file] { + width: 400px; +} +#pricereviewCreate .container .pricreviewmain > .filediv label button { + width: 90px; + height: 35px; + margin: 0; + margin-right: 15px; + margin-top: 20px; +} + +.container-fluid, .container { + max-width: 1400px !important; + width: 100%; +} +.container-fluid h4, .container h4 { + font-weight: 600; +} +.container-fluid .btn-secondary, .container .btn-secondary { + background-color: #6C757D; +} + +.window-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background-color: rgba(0, 0, 0, 0.5); + z-index: 9; + padding: 20px; + display: none; +} +@keyframes fade-in { + 0% { + transform: translate(-50%, -55%); + opacity: 0; + } + 100% { + transform: translate(-50%, -50%); + opacity: 1; + } +} +.window-modal table, .window-modal th, .window-modal td { + border: 1px #ccc solid; +} +.window-modal table > thead tr th { + color: #A52A2A; +} +.window-modal table > tbody .selected { + background-color: #E7FEFB; +} +.window-modal .window-modal-content { + background-color: #fff; + border-radius: 10px; + position: absolute; + width: 1200px; + padding: 30px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + box-shadow: 0 5px 5px #222; + max-height: 80vh; + animation: fade-in 0.2s linear; +} +.window-modal .window-modal-content.modal-xl { + width: 1200px; +} +.window-modal .window-modal-content.modal-lg { + width: 800px; +} +.window-modal .window-modal-content.modal-m { + width: 400px; +} +.window-modal .window-modal-content .window-modal-header { + display: flex; + flex-direction: column; +} +.window-modal .window-modal-content .window-modal-header button.btn-close { + position: absolute; + top: 10px; + right: 10px; + background-color: transparent; + border: none; + outline: none; + border-radius: 50%; +} +.window-modal .window-modal-content .window-modal-header > div > input { + width: 250px; +} +.window-modal .window-modal-content .window-modal-body { + overflow-y: scroll; + height: 400px; }/*# sourceMappingURL=pricereview.css.map */ \ No newline at end of file diff --git a/wms/mkt/css/pricereview.css.map b/wms/mkt/css/pricereview.css.map index 24edcecf..9ee505ba 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":"AACI;EACI,sBAAA;EACA,aAAA;ACAR;ADGQ;EACI,yBAAA;ACDZ;ADIY;EACI,eAAA;ACFhB;ADIY;EACI,yBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ACFhB;ADKQ;EACI,eAAA;ACHZ;ADMI;EACI,yBAAA;EACA,aAAA;EACA,kBAAA;ACJR;ADKQ;EACI,WAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;ACHZ;ADIY;EACI,yBAAA;EACA,WAAA;ACFhB;ADIY;EACI,yBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;ACFhB;ADIY;EACI,yBAAA;EACA,WAAA;ACFhB;ADMQ;EACI,sBAAA;EACA,aAAA;EACA,kBAAA;ACJZ;ADKY;EACI,aAAA;EACA,mBAAA;EACA,6BAAA;EACA,eAAA;EACA,mBAAA;ACHhB;ADIgB;EACI,gBAAA;ACFpB;ADMY;EACI,eAAA;EACA,6BAAA;ACJhB;ADKgB;EACI,eAAA;ACHpB;ADKgB;;;;EAEA,wBAAA;EACA,SAAA;ACDhB;ADKgB;EACI,UAAA;ACHpB;ADKgB;EACI,kBAAA;ACHpB;ADIoB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,UAAA;EACA,UAAA;EACA,gBAAA;ACFxB","file":"pricereview.css"} \ No newline at end of file +{"version":3,"sources":["pricereview.scss","pricereview.css"],"names":[],"mappings":"AACI;EACI,aAAA;ACAR;ADCQ;EACI,sBAAA;ACCZ;ADCQ;EACI,cAAA;ACCZ;ADCQ;EACI,yBAAA;ACCZ;ADKQ;EACI,sBAAA;EACA,aAAA;ACHZ;ADIY;EACI,YAAA;ACFhB;ADMY;EACI,yBAAA;ACJhB;ADOgB;EACI,eAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ACLpB;ADQY;EACI,eAAA;ACNhB;ADSQ;EACI,yBAAA;EACA,aAAA;EACA,kBAAA;EACA,cAAA;ACPZ;ADQY;EACI,WAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;ACNhB;ADOgB;EACI,yBAAA;EACA,WAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;ACLpB;ADOgB;EACI,yBAAA;EACA,WAAA;ACLpB;ADSY;EACI,sBAAA;EACA,aAAA;EACA,kBAAA;ACPhB;ADQgB;EACI,aAAA;EACA,mBAAA;EACA,6BAAA;EACA,eAAA;EACA,mBAAA;ACNpB;ADOoB;EACI,gBAAA;ACLxB;ADSgB;EACI,eAAA;EACA,6BAAA;ACPpB;ADQoB;EACI,eAAA;ACNxB;ADQoB;;;;EAEA,wBAAA;EACA,SAAA;ACJpB;ADQoB;EACI,UAAA;ACNxB;ADQoB;EACI,kBAAA;ACNxB;ADOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,UAAA;EACA,UAAA;EACA,gBAAA;ACL5B;ADOwB;EACI,kBAAA;EACA,QAAA;EACA,2BAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;ACL5B;ADQoB;EACI,YAAA;EACA,gBAAA;ACNxB;ADUY;EACI,aAAA;EACA,sBAAA;EACA,gBAAA;ACRhB;ADSgB;EACI,aAAA;EACA,mBAAA;EACA,cAAA;ACPpB;ADQoB;EACI,YAAA;EACA,eAAA;EACA,gBAAA;ACNxB;ADQoB;EACI,YAAA;ACNxB;ADQoB;EACI,WAAA;EACA,YAAA;EACA,SAAA;EACA,kBAAA;EACA,gBAAA;ACNxB;;ADcA;EACI,4BAAA;EACA,WAAA;ACXJ;ADYI;EACI,gBAAA;ACVR;ADYI;EACI,yBAAA;ACVR;;ADcA;EACI,eAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;EACA,oCAAA;EACA,UAAA;EACA,aAAA;EACA,aAAA;ACXJ;ADYI;EACI;IACI,gCAAA;IACA,UAAA;ECVV;EDYM;IACI,gCAAA;IACA,UAAA;ECVV;AACF;ADYI;EACI,sBAAA;ACVR;ADYI;EACI,cAAA;ACVR;ADYI;EACI,yBAAA;ACVR;ADYI;EACI,sBAAA;EACA,mBAAA;EACA,kBAAA;EACA,aAAA;EACA,aAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;EACA,0BAAA;EACA,gBAAA;EACA,8BAAA;ACVR;ADWQ;EACI,aAAA;ACTZ;ADWQ;EACI,YAAA;ACTZ;ADWQ;EACI,YAAA;ACTZ;ADWQ;EACI,aAAA;EACA,sBAAA;ACTZ;ADUY;EACI,kBAAA;EACA,SAAA;EACA,WAAA;EACA,6BAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;ACRhB;ADUY;EACI,YAAA;ACRhB;ADWQ;EACI,kBAAA;EACA,aAAA;ACTZ","file":"pricereview.css"} \ No newline at end of file diff --git a/wms/mkt/css/pricereview.scss b/wms/mkt/css/pricereview.scss index e1b62d0b..36ccf7bb 100644 --- a/wms/mkt/css/pricereview.scss +++ b/wms/mkt/css/pricereview.scss @@ -1,98 +1,241 @@ #pricereviewCreate{ - table, th, td{ - border:1px #ccc solid; - padding: 15px; - } - table{ - thead th{ - background-color: #6D9EEB; + >.modal{ + padding: 20px; + table, th, td{ + border:1px #ccc solid; } - tbody { - td input{ - font-size: 14px; - } - th{ - background-color: #CCE4F8; - font-size: 14px; - padding: 15px 2px; - min-width: 100px; - text-align: center; - } + table > thead tr th{ + color:#A52A2A; + } + table > tbody .selected{ + background-color: #E7FEFB; } - input{ - font-size: 13px; + table > tbody .selected td{ } } - .pricreviewmain{ - background-color: #F2F2F2; - padding: 20px; - border-radius: 6px ; - button{ - color:#fff; - width: 55px; - height: 30px; - padding: 0; - margin-left: 10px; - font-size: 13px; - &.addbtn{ - background-color: #337AB7; - width: 30px; + .container{ + table, th, td{ + border:1px #ccc solid; + padding: 15px; + &.noborder, .noborder th, .noborder td{ + border:none; } - &.deleteBtn{ - background-color: #D9534F; - color:#fff; - font-size: 12px; - width: 30px; + } + table{ + thead th{ + background-color: #6D9EEB; } - &.selectElevator{ - background-color: #D9534F; - color:#fff; + tbody { + td input{ + font-size: 14px; + } + th{ + background-color: #CCE4F8; + font-size: 14px; + padding: 15px 2px; + min-width: 100px; + text-align: center; + } + } + input{ + font-size: 13px; } } - - >.divitem{ - border:1px #ccc solid; - padding: 10px; - border-radius: 4px ; - .title{ - display: flex; - align-items: center; - border-bottom: 1px #ccc solid; - padding: 10px 0; - margin-bottom: 10px; - h6{ - font-weight: 600; + .pricreviewmain{ + background-color: #F2F2F2; + padding: 20px; + border-radius: 6px ; + margin:30px 0; + button{ + color:#fff; + width: 55px; + height: 30px; + padding: 0; + margin-left: 10px; + font-size: 13px; + &.addbtn{ + background-color: #337AB7; + width: 30px; } - - } - table, th, td{ - font-size: 14px; - background-color: transparent; - input, select, textarea{ - font-size: 13px; + &.deleteBtn{ + background-color: #D9534F; + color:#fff; + font-size: 12px; + width: 30px; } - input[type=number]::-webkit-outer-spin-button, - input[type=number]::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; + &.selectElevator{ + background-color: #D9534F; + color:#fff; } } - table { - tr:hover .deleteBtn{ - opacity: 1; + + >.divitem{ + border:1px #ccc solid; + padding: 10px; + border-radius: 4px ; + .title{ + display: flex; + align-items: center; + border-bottom: 1px #ccc solid; + padding: 10px 0; + margin-bottom: 10px; + h6{ + font-weight: 600; + } + + } + table, th, td{ + font-size: 14px; + background-color: transparent; + input, select, textarea{ + font-size: 13px; + } + input[type=number]::-webkit-outer-spin-button, + input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + } + table { + tr:hover .deleteBtn ,tr:hover .copyBtn{ + opacity: 1; + } + .saletd{ + position: relative; + >.deleteBtn{ + position: absolute; + top: 50%; + transform: translateY(-50%); + right:2px; + opacity: 0; + transition: .3s; + } + >.copyBtn{ + position: absolute; + top: 50%; + transform: translateY(-50%); + right:38px; + opacity: 0; + transition: .3s; + width: 30px; + height: 30px; + } + } + textarea{ + height: auto; + min-height: 50px; + } } - .saletd{ - position: relative; - >.deleteBtn{ - position: absolute; - top: 50%; - transform: translateY(-50%); - right:2px; - opacity: 0; - transition: .3s; + } + >.filediv{ + display: flex; + flex-direction: column; + margin-top: 20px; + label{ + display: flex; + align-items: center; + margin:10px 0; + p{ + width:100px; + font-size: 15px; + font-weight: 600; + } + input[type="file"]{ + width:400px + } + button{ + width:90px; + height: 35px; + margin:0; + margin-right: 15px; + margin-top: 20px; } } } } } +} + +.container-fluid, .container{ + max-width:1400px !important; + width: 100%; + h4{ + font-weight: 600; + } + .btn-secondary{ + background-color: #6C757D; + } +} + +.window-modal{ + position: fixed; + top: 0; + left:0; + width: 100%; + height: 100vh; + background-color: rgba(0, 0, 0, 0.5); + z-index: 9; + padding: 20px; + display: none; + @keyframes fade-in { + 0%{ + transform: translate(-50%, -55%); + opacity: 0; + } + 100%{ + transform: translate(-50%, -50%); + opacity: 1; + } + } + table, th, td{ + border:1px #ccc solid; + } + table > thead tr th{ + color:#A52A2A; + } + table > tbody .selected{ + background-color: #E7FEFB; + } + .window-modal-content{ + background-color: #fff; + border-radius: 10px; + position: absolute; + width:1200px; + padding: 30px; + top: 50%; + left:50%; + transform: translate(-50%, -50%); + box-shadow: 0 5px 5px #222; + max-height: 80vh; + animation: fade-in .2s linear; + &.modal-xl{ + width:1200px; + } + &.modal-lg{ + width:800px; + } + &.modal-m{ + width:400px; + } + .window-modal-header{ + display: flex; + flex-direction: column; + button.btn-close{ + position: absolute; + top: 10px; + right:10px; + background-color: transparent; + border:none; + outline: none; + border-radius: 50%; + } + >div > input{ + width: 250px; + } + } + .window-modal-body{ + overflow-y: scroll; + height: 400px; + } + } } \ No newline at end of file diff --git a/wms/mkt/pricereviewCheck.php b/wms/mkt/pricereviewCheck.php new file mode 100644 index 00000000..e29abcd8 --- /dev/null +++ b/wms/mkt/pricereviewCheck.php @@ -0,0 +1,13 @@ + + + + + + +
+ + +
\ No newline at end of file diff --git a/wms/mkt/pricereviewCreate.php b/wms/mkt/pricereviewCreate.php index 80c17a97..fcd3de9c 100644 --- a/wms/mkt/pricereviewCreate.php +++ b/wms/mkt/pricereviewCreate.php @@ -1,15 +1,556 @@ prepare($sql_str); +$stmt->execute(); +$options = $stmt->fetchAll(PDO::FETCH_ASSOC); +foreach ($options as $key => $option) { + $options[$key]['isShow'] = 1; + $options[$key]['selected'] = 0; +} +$vol_no = $_GET['vol_no']; +$hope_status = [ + 'A'=>'有望簽約(已報價)', + 'B'=>'觀望考慮(等待時機報價)', + 'C'=>'在途合約', + 'D'=>'已簽約', + 'N'=>'無望簽約', +]; +//有望客戶基本資料 +$sql_str = "SELECT hope_elevator_customer.*, code.content AS source_content, account.name AS salesman_name FROM hope_elevator_customer + LEFT JOIN code ON code.code_name = hope_elevator_customer.source + LEFT JOIN account ON account.accountid = hope_elevator_customer.salesman + WHERE hope_elevator_customer.vol_no = :vol_no AND code.field_name = 'customer_source'"; +$stmt = $conn->prepare($sql_str); +$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, +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); +$total_spec = 0; +foreach ($hope_elevators as $key => $elevator) { + $hope_elevators[$key]['id'] = $key+1; + $total_spec ++; +} + + +function convertDateTimeFormat($dateTimeStr) { + // 使用 DateTime::createFromFormat 解析给定格式的日期时间 + $date = DateTime::createFromFormat('Y-m-d H:i:s', $dateTimeStr); + + // 如果解析成功,则使用 DateTime::format 转换格式 + if ($date) { + return $date->format('Y-m-d'); + } else { + // 如果解析失败,返回原始字符串或错误信息 + return $dateTimeStr; // 或者返回错误信息 + } +} ?> - + - + + -
+ +
+
+ +
+
+
+ +
+
+ + + + + + +
+ @@ -19,39 +560,39 @@ require_once("./conn.php"); - + - + - + - + - + - + - + - + - + - + - + - + - + - +
卷號 客戶名稱 負責人 客戶來源
地址 案件名稱 統編/身份證 業主方聯係人
市話/手機 營業員 台數 預定成交日
有望客戶狀態 汰改
@@ -65,12 +606,12 @@ require_once("./conn.php"); - + - +
+
-
整機單價
- +

整機單價

+
+ - + - + - - + + + - - - - - - - - - - - - - - - - - - + +
項次 電梯人乘/載重人乘/
載重
停數 速度(m/min) 開門方式 規格單價公司發布價(台) 數量複價售價 公司發布價(總價)售價(台)售價(總價)
- - - - - - - - - - - - - - -
小計
-
Option加價
- +

Option加價

+
- + - - - - - - - + + + + + + + + - - - - - - - - - - - - + + + + @@ -237,11 +804,11 @@ require_once("./conn.php");
-
除外項目
- +

除外項目

+
選配規格單價數量複價備註所屬電梯功能項次選配規格單價數量複價備註所屬電梯功能
MAE100-6*7-CO45 -
- - -
-
小計
小計
- + @@ -253,24 +820,30 @@ require_once("./conn.php"); - - - - - - - - - - + + - - + + @@ -278,16 +851,12 @@ require_once("./conn.php");
-
保固延長
- +

保固延長

+
詢價單號 名稱
MAE100-6*7-CO45 -
- - -
-
小計
- + - - - - @@ -297,67 +866,29 @@ require_once("./conn.php"); - - - - - - - - - - - - - - - - + + + + + @@ -378,10 +909,10 @@ require_once("./conn.php"); - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -511,6 +1042,102 @@ require_once("./conn.php");
電梯人乘/載重停數速度 單價 數量(月) 複價
- - - - - - - - MAE100-6*7-CO45 -
- - -
-
小計
小計
材料 1.訂金 - @@ -395,10 +926,10 @@ require_once("./conn.php");
2.二次款 - @@ -406,16 +937,16 @@ require_once("./conn.php"); - +
3.貨到工地款 - @@ -423,16 +954,16 @@ require_once("./conn.php"); - +
4.其他 - @@ -440,17 +971,17 @@ require_once("./conn.php"); - +
安裝 5.安裝完畢款 - @@ -458,16 +989,16 @@ require_once("./conn.php"); - +
6.驗收款 - @@ -475,16 +1006,16 @@ require_once("./conn.php"); - +
7.其他 - @@ -492,14 +1023,14 @@ require_once("./conn.php"); - +
合計
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
牌價總額(A)售價總額(B)破價總額(B-A)價率%(B/A)總台數服務費(介紹費)
預定成交日預定出貨日
特記事項
+ +
+ +
+
+ + + + +
-
\ No newline at end of file + + + + + \ No newline at end of file diff --git a/wms/mkt/pricereview_mi-api.php b/wms/mkt/pricereview_mi-api.php index db7221fa..59a9cdb3 100644 --- a/wms/mkt/pricereview_mi-api.php +++ b/wms/mkt/pricereview_mi-api.php @@ -491,8 +491,7 @@ try { } } // $rarr["content"][] = $exceptArr; - print_r($rarr["content"]); - exit; + foreach($rarr["content"] as $idx=>&$item){ $newTotal = 0; $item[16] = []; diff --git a/wms/mkt/pricereview_renovate-edit.php b/wms/mkt/pricereview_renovate-edit.php index b79985f5..39fdf44c 100644 --- a/wms/mkt/pricereview_renovate-edit.php +++ b/wms/mkt/pricereview_renovate-edit.php @@ -2127,7 +2127,7 @@ foreach ($res as $data) { X

  - + diff --git a/wms/mkt/specsurvey-create.php b/wms/mkt/specsurvey-create.php index 64f57e36..c9804847 100644 --- a/wms/mkt/specsurvey-create.php +++ b/wms/mkt/specsurvey-create.php @@ -596,6 +596,7 @@ C:當天第3版,依次類推……" readonly> +