From db3108d7d878a0c577174e2012c9df044b8b7e3d Mon Sep 17 00:00:00 2001 From: Cheng Date: Mon, 29 Jan 2024 18:17:05 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E4=BF=9D=E9=A4=8A=E5=83=B9=E5=AF=A9?= =?UTF-8?q?=E7=8D=8E=E9=87=91=E8=A8=88=E7=AE=97\?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintainance_contract_payment_status.php | 399 -------- wms/{bons => bonus}/api/get.php | 39 +- wms/bonus/api/getAccount.php | 11 + wms/bonus/api/insertBonus.php | 27 + wms/bonus/api/postCalBouns.php | 53 + .../bons_index.php => bonus/bonus_index1.php} | 86 +- .../elevator_new_deal_bonus_v1_0.php | 0 ...evator_new_deal_bonus_v1_0_examination.php | 0 .../elevator_new_deal_bonus_v2_0.php | 0 ...evator_new_deal_bonus_v2_0_examination.php | 0 .../maintenance_contract_bonus_v2_0.php | 0 ...enance_contract_bonus_v2_0_examination.php | 0 wms/class/Cmail.php | 62 -- wms/class/Cnotice.php | 109 --- wms/cont/FormHelper.php | 509 ---------- wms/cont/MICalculator.php | 324 ------- wms/cont/MSCalculator.php | 322 ------- wms/cont/apply.php | 22 - wms/cont/apply_form.php | 859 ----------------- wms/cont/apply_form1.php | 912 ------------------ wms/cont/async_req.php | 20 - wms/cont/con_maintance_examine_clear.php | 14 - wms/cont/conn.php | 42 - wms/cont/crmm06_submit.php | 21 - wms/cont/list.php | 168 ---- .../model/ConMaintanceExamineApplyModel.php | 29 - .../model/ConMaintanceExamineClearModel.php | 33 - wms/cont/model/Model.php | 53 - wms/cont/query_form.php | 511 ---------- wms/cont/review_apply_form.php | 507 ---------- wms/cont/sign_form.php | 577 ----------- wms/cont/sign_list.php | 225 ----- wms/cont/submit.php | 79 -- wms/cont/success.php | 1 - wms/cont/t.php | 84 -- wms/cont/test.php | 174 ---- wms/cont/wf_common.php | 20 - wms/contract-repair/js/alpine.js | 84 +- wms/contract/option/option2.xlsx | Bin 10978 -> 10999 bytes wms/frame/api_getdata.php | 1 - wms/fun_global.php | 59 +- wms/mkt/pricereview-edit.php | 12 +- 42 files changed, 291 insertions(+), 6157 deletions(-) delete mode 100644 wms/bons/maintainance_contract_payment_status.php rename wms/{bons => bonus}/api/get.php (64%) create mode 100644 wms/bonus/api/getAccount.php create mode 100644 wms/bonus/api/insertBonus.php create mode 100644 wms/bonus/api/postCalBouns.php rename wms/{bons/bons_index.php => bonus/bonus_index1.php} (63%) rename wms/{bons => bonus}/elevator_new/elevator_new_deal_bonus_v1_0.php (100%) rename wms/{bons => bonus}/elevator_new/elevator_new_deal_bonus_v1_0_examination.php (100%) rename wms/{bons => bonus}/elevator_new/elevator_new_deal_bonus_v2_0.php (100%) rename wms/{bons => bonus}/elevator_new/elevator_new_deal_bonus_v2_0_examination.php (100%) rename wms/{bons => bonus}/maintance/maintenance_contract_bonus_v2_0.php (100%) rename wms/{bons => bonus}/maintance/maintenance_contract_bonus_v2_0_examination.php (100%) delete mode 100644 wms/class/Cmail.php delete mode 100644 wms/class/Cnotice.php delete mode 100644 wms/cont/FormHelper.php delete mode 100644 wms/cont/MICalculator.php delete mode 100644 wms/cont/MSCalculator.php delete mode 100644 wms/cont/apply.php delete mode 100644 wms/cont/apply_form.php delete mode 100644 wms/cont/apply_form1.php delete mode 100644 wms/cont/async_req.php delete mode 100644 wms/cont/con_maintance_examine_clear.php delete mode 100644 wms/cont/conn.php delete mode 100644 wms/cont/crmm06_submit.php delete mode 100644 wms/cont/list.php delete mode 100644 wms/cont/model/ConMaintanceExamineApplyModel.php delete mode 100644 wms/cont/model/ConMaintanceExamineClearModel.php delete mode 100644 wms/cont/model/Model.php delete mode 100644 wms/cont/query_form.php delete mode 100644 wms/cont/review_apply_form.php delete mode 100644 wms/cont/sign_form.php delete mode 100644 wms/cont/sign_list.php delete mode 100644 wms/cont/submit.php delete mode 100644 wms/cont/success.php delete mode 100644 wms/cont/t.php delete mode 100644 wms/cont/test.php delete mode 100644 wms/cont/wf_common.php diff --git a/wms/bons/maintainance_contract_payment_status.php b/wms/bons/maintainance_contract_payment_status.php deleted file mode 100644 index ed76f046..00000000 --- a/wms/bons/maintainance_contract_payment_status.php +++ /dev/null @@ -1,399 +0,0 @@ -query($sql); - -function getContractnoDetails($link, $user_id, $contractno = null) -{ - $sql = " - SELECT - c.contractno - FROM contract AS c - LEFT JOIN con_maintance_examine_apply AS cmea - ON c.contractno = cmea.vol_no - WHERE 1 = 1 - AND cmea.salesman IN (" . getAccountids($link, $user_id) . ") - "; - if (!empty($contractno)) { - $sql .= " - AND c.contractno = '$contractno' - "; - } - $result = mysqli_query($link, $sql); - $data = []; - foreach ($result as $row) { - array_push($data, $row['contractno']); - } - return "'" . implode("','", $data) . "'"; -} - -function getSalesmanNo($link, $contractno) -{ - $sql = " - SELECT - cmea.salesman - FROM contract AS c - LEFT JOIN con_maintance_examine_apply AS cmea - ON c.contractno = cmea.vol_no - WHERE 1 = 1 - AND c.contractno IN ('$contractno') - "; - $result = mysqli_query($link, $sql); - $data = []; - foreach ($result as $row) - return $row['salesman']; - return ""; -} -function getSalesmanName($link, $contractno) -{ - $sql = " - SELECT - a.name - FROM contract AS c - LEFT JOIN con_maintance_examine_apply AS cmea - ON c.contractno = cmea.vol_no - LEFT JOIN account AS a - ON cmea.salesman = a.accountid - WHERE 1 = 1 - AND c.contractno IN ('$contractno') - "; - $result = mysqli_query($link, $sql); - $data = []; - foreach ($result as $row) - return $row['name']; - return ""; -} - -function getAccountids($link, $user_id) -{ - $sql = " - SELECT - accountid - FROM account - WHERE 1 = 1 - AND (accountid = '$user_id' - OR accountid IN ( - SELECT - accountid - FROM account - WHERE 1 = 1 - AND manager = '$user_id' - AND accounttype IN ('B','E','M','W') - ) - ) - "; - $result = mysqli_query($link, $sql); - $data = []; - foreach ($result as $row) { - array_push($data, $row['accountid']); - } - return "'" . implode("','", $data) . "'"; -} - -function checkArCheckBillStatus($row) -{ - $CU_EstPayDate = $row['CU_EstPayDate']; - $BillNo2 = $row['BillNo2']; - if (substr($CU_EstPayDate, 0, 6) <= date("Ym")) { - if (empty($BillNo2)) { - return "未轉應收確認單"; - } else { - return "已轉應收確認單"; - } - } else { - return "時間未到"; - } -} - -function arSellInvoiceMaterial($row) -{ - - $CU_EstPayDate = $row['CU_EstPayDate']; - $InvoiceName = $row['InvoiceName']; - - if (substr($CU_EstPayDate, 0, 6) <= date("Ym")) { - if (empty($InvoiceName)) { - return "未開發票"; - } else { - return "已開發票"; - } - } else { - return "時間未到"; - } -} - -function checkArWriteOffBill($conn, $row) -{ - $BillNo = $row['BillNo2']; - - $sql = " - SELECT - * - -- a.BillNo, - -- a.WriteOffBizPartnerId, - -- a.PayWriteOffOAmount, - -- b.FromBillDate AS ReceivedDate, - -- b.CurrWOFeeOAmt AS Fee, - -- c.OrderBillNo, - -- c.checkBillNo, - -- c.InvoiceNo, - -- c.BillDate AS CheckBillDate - FROM arWriteOffBill AS a - LEFT JOIN arWriteOffBillRec AS b ON a.BillNo=b.BillNo - LEFT JOIN - (SELECT temp1.*,arWriteOffBillDetail.* FROM arWriteOffBillDetail - LEFT JOIN - (SELECT - arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo - FROM arCheckBill - LEFT JOIN arCheckBillInvInfo - ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1 - ON temp1.checkBillNo = arWriteOffBillDetail.FromBillNo) AS c - ON a.BillNo=c.BillNo - WHERE c.checkBillNo = '$BillNo' - "; - - $del = $conn->query($sql); - $i = 0; - foreach ($del as $row) - $i++; - if (empty($i)) { - return "未收款"; - } else { - return "已收款"; - } -} - -?> - - - - - - - - -
-
- - - - - - - - - - - - - -
-

保養合約-應收款項明細

-
合約號 - - - -
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
營業人員/契約人員合約號標示號電梯編號預計請款日催收次數應收申請單狀態請款金額(未轉應收)請款金額(已轉應收)應收申請單號發票狀態發票單標示號發票單號發票明細發票金額發票號碼核銷
- "; - echo getSalesmanName($link, $row['BillNo']); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -There is no record!"; -endif; - -#代表結束連線 -mysqli_close($link); - -include "footer.php"; -?> \ No newline at end of file diff --git a/wms/bons/api/get.php b/wms/bonus/api/get.php similarity index 64% rename from wms/bons/api/get.php rename to wms/bonus/api/get.php index b50687a3..52ae13ff 100644 --- a/wms/bons/api/get.php +++ b/wms/bonus/api/get.php @@ -1,26 +1,28 @@ prepare($sql); $stmt->execute(); @@ -37,7 +39,9 @@ $sql = "SELECT (SELECT temp1.*,arWriteOffBillDetail.* FROM arWriteOffBillDetail LEFT JOIN (SELECT - arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo + arCheckBill.BillNo AS checkBillNo, + arCheckBill.BillDate, + arCheckBillInvInfo.InvoiceNo FROM arCheckBill LEFT JOIN arCheckBillInvInfo ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1 @@ -63,8 +67,6 @@ $count = COUNT($result); $data['maintain_month'] = intval($count * $result[0]['SQuantity']); - - if (!empty($check['CheckBillDate'])) { header('Content-Type: application/json'); echo json_encode($data); @@ -72,4 +74,3 @@ if (!empty($check['CheckBillDate'])) { echo false; exit; } -// } diff --git a/wms/bonus/api/getAccount.php b/wms/bonus/api/getAccount.php new file mode 100644 index 00000000..e60e2626 --- /dev/null +++ b/wms/bonus/api/getAccount.php @@ -0,0 +1,11 @@ +prepare($sql); +$stmt->bindParam(':accountid', $accountid); +$stmt->execute(); +$result = $stmt->fetch(PDO::FETCH_ASSOC); + +header('Content-Type: application/json'); +echo json_encode($result); diff --git a/wms/bonus/api/insertBonus.php b/wms/bonus/api/insertBonus.php new file mode 100644 index 00000000..2748a91d --- /dev/null +++ b/wms/bonus/api/insertBonus.php @@ -0,0 +1,27 @@ +;prepare($sql); + $stmt->bindParam(':bonus_type', $bonus_type); + $stmt->bindParam(':bonus_verson', $bonus_verson); + $stmt->bindParam('conreact_no', $contract_no); + $stmt->bindParam(':contract_type', $contract_type); + } + } diff --git a/wms/bonus/api/postCalBouns.php b/wms/bonus/api/postCalBouns.php new file mode 100644 index 00000000..f97ba228 --- /dev/null +++ b/wms/bonus/api/postCalBouns.php @@ -0,0 +1,53 @@ + 0) { + header("HTTP/1.1 422 Unprocessable Entity"); + echo json_encode($fail_arr); + exit(); + } + + + + // 合約類型 + $clientType = [ + '1' => 'new', + '2' => 'free_to_charge', + '3' => 'renew_priceissue' + ]; + + // 應付日期 + $day = DateTime::createFromFormat('Ymd', $payDay); + $pay_day = $day->format('Y-m-d'); + + $years = $maintain_month / 12; + $contract_years = ($years >= 2) ? 'above_two' : 'one'; + + $result = maintenance_contract_bonus_v2_0( + $bonuns_verson, + $clientType[$client_type], + $contract_years, + 0.8, + $maintain_price_total, + 0, + $payDay, + $receiver, + $manager, + $a + ); + header('Content-Type: application/json'); + echo json_encode($result); +} diff --git a/wms/bons/bons_index.php b/wms/bonus/bonus_index1.php similarity index 63% rename from wms/bons/bons_index.php rename to wms/bonus/bonus_index1.php index 0ee7058a..82c20421 100644 --- a/wms/bons/bons_index.php +++ b/wms/bonus/bonus_index1.php @@ -12,7 +12,7 @@ require_once('../contract-repair/conn.php'); -
+
@@ -60,6 +60,7 @@ require_once('../contract-repair/conn.php'); +

未填寫

作番號 @@ -68,11 +69,11 @@ require_once('../contract-repair/conn.php'); 獎金適用版本 - + - 獎金發放人員 + 契約人員 @@ -82,28 +83,73 @@ require_once('../contract-repair/conn.php'); 保養總額 - + + + - - - - + +
-
\ No newline at end of file +
+ + \ No newline at end of file diff --git a/wms/bons/elevator_new/elevator_new_deal_bonus_v1_0.php b/wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0.php similarity index 100% rename from wms/bons/elevator_new/elevator_new_deal_bonus_v1_0.php rename to wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0.php diff --git a/wms/bons/elevator_new/elevator_new_deal_bonus_v1_0_examination.php b/wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0_examination.php similarity index 100% rename from wms/bons/elevator_new/elevator_new_deal_bonus_v1_0_examination.php rename to wms/bonus/elevator_new/elevator_new_deal_bonus_v1_0_examination.php diff --git a/wms/bons/elevator_new/elevator_new_deal_bonus_v2_0.php b/wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0.php similarity index 100% rename from wms/bons/elevator_new/elevator_new_deal_bonus_v2_0.php rename to wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0.php diff --git a/wms/bons/elevator_new/elevator_new_deal_bonus_v2_0_examination.php b/wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_examination.php similarity index 100% rename from wms/bons/elevator_new/elevator_new_deal_bonus_v2_0_examination.php rename to wms/bonus/elevator_new/elevator_new_deal_bonus_v2_0_examination.php diff --git a/wms/bons/maintance/maintenance_contract_bonus_v2_0.php b/wms/bonus/maintance/maintenance_contract_bonus_v2_0.php similarity index 100% rename from wms/bons/maintance/maintenance_contract_bonus_v2_0.php rename to wms/bonus/maintance/maintenance_contract_bonus_v2_0.php diff --git a/wms/bons/maintance/maintenance_contract_bonus_v2_0_examination.php b/wms/bonus/maintance/maintenance_contract_bonus_v2_0_examination.php similarity index 100% rename from wms/bons/maintance/maintenance_contract_bonus_v2_0_examination.php rename to wms/bonus/maintance/maintenance_contract_bonus_v2_0_examination.php diff --git a/wms/class/Cmail.php b/wms/class/Cmail.php deleted file mode 100644 index 51ed924b..00000000 --- a/wms/class/Cmail.php +++ /dev/null @@ -1,62 +0,0 @@ -charset = "UTF-8"; - $this->host = "mail.masada.com.tw"; - $this->port = 25; - $this->smtp_user = "notice"; // 這裡填寫SMTP登入帳號, 例如 your.gmail.name@gmail.com 則填寫your.gmail.name - $this->smtp_pwd = "90493119"; // 這裡填寫SMTP登入密碼 - } - - function sendx($subject="", $em_body="", $sendlist=array(), $from="永佳捷科技", $bcc="", $files=array()) - { - if (!$sendlist) return; - $em_body = nl2br($em_body); - $em_body .= "

※此信件為系統發出信件,請勿直接回覆。

"; - - $mail = new PHPMailer(true); - $mail->IsHTML(true); //設定是否使用HTML格式 - $mail->CharSet = $this->charset; - $mail->isSMTP(); - $mail->SMTPAuth = true; - $mail->Host = $this->host; - $mail->Port = $this->port; - $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //使用SSL, 如果是TLS 請改為 PHPMailer::ENCRYPTION_STARTTLS - $mail->Username = $this->smtp_user; - $mail->Password = $this->smtp_pwd; - $mail->SMTPSecure = ""; - $mail->From = "notice@masada.com.tw"; - $mail->FromName = $from; - $mail->Subject = $subject; - $mail->Body = $em_body; - foreach ($sendlist as $v) { // $sendlist[0]=['M0044', 'jrbin@masada.com.tw'] - list($name, $email) = $v; - if ($email) $mail->addAddress($email, $name); - } - //$mail->addCC("personC@gmail.com", "person C"); - //$mail->addBCC("personD@gmail.com", "person D"); - //$mail->addAttachment("image1.jpg", "picture.jpg"); //設定附件, 對方會看到附件名稱為 picture.jpg - //print_r($mail);exit; - if (!$mail->Send()){ - // echo "Mailer error: " . $mail->ErrorInfo; - } else { - //echo "Email sent"; - } - } -} \ No newline at end of file diff --git a/wms/class/Cnotice.php b/wms/class/Cnotice.php deleted file mode 100644 index 970bf81c..00000000 --- a/wms/class/Cnotice.php +++ /dev/null @@ -1,109 +0,0 @@ - false, - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_EMULATE_PREPARES => false, - PDO::ATTR_STRINGIFY_FETCHES => false, - PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', - ]; - $pdo = new PDO('mysql:host=' . $host . ';port=' . $dbport . ';dbname=' . $dbname . '', $dbuser, $dbpassword, $options); - $pdo->exec('SET CHARACTER SET utf8mb4'); - return $pdo; - } catch (PDOException $e) { - die("Something wrong: {$e->getMessage()}"); - } - } - - /** - * 結束資料庫連線 - */ - function endConnectionDB($pdo) - { - unset($pdo); - } - - /** - * 提交消息 notice - * @param string $kind : 類別 1=系統 2=會議 - * @param int $related_id : 關聯序號 - * @param string $title : 標題 - * @param string $title : 內容 - * @param string $permission : 瀏覽權限 員編/ALL=全體 - * @param string $creater : 建立者 - * @param string $create_at : 建立時間 - */ - function sendx($data) - { - - $kind = $data['kind']; - $related_id = $data['related_id']; - $title = $data['title']; - $content = $data['content']; - $permission = $data['permission']; - $creater = $data['creater']; - $create_at = $data['create_at']; - - $pdo = $this->connectionDB(); - $pdo->exec('SET CHARACTER SET utf8mb4'); - $str = " - INSERT INTO `notice` (`kind`, `related_id`, `title`, `content`, `permission`, `creater`, `create_at`) - VALUES (?,?,?,?,?,?,?) - "; - - $sth = $pdo->prepare($str); - $sth->bindValue(1, $kind); - $sth->bindValue(2, $related_id); - $sth->bindValue(3, $title); - $sth->bindValue(4, $content); - $sth->bindValue(5, $permission); - $sth->bindValue(6, $creater); - $sth->bindValue(7, $create_at); - - $sth->execute(); - - $this->endConnectionDB($pdo); - } -} - -// $cn = new Cnotice(); -// $data = array( -// 'kind' => 1, -// 'related_id' => 1, -// 'title' => "標題", -// 'content' => "內容", -// 'permission' => "M0117", -// 'creater' => "M0117", -// 'create_at' => date("Y-m-d H:i:s") -// ); -// $cn->sendx($data); diff --git a/wms/cont/FormHelper.php b/wms/cont/FormHelper.php deleted file mode 100644 index 8025239a..00000000 --- a/wms/cont/FormHelper.php +++ /dev/null @@ -1,509 +0,0 @@ - 'post', 'accept-charset' => 'utf-8'), $attributes); - - return "
'; - } - - /** - * Form closing tag - * - * @static - * @return string - */ - public static function close() - { - return '
'; - } - - /** - * Creates a label for an input - * - * @param string $text The label text - * @param string $fieldName Name of the input element - * @param array $attributes HTML attributes - * @return string - */ - public static function label($text, $fieldName = null, array $attributes = array()) - { - if (!isset($attributes['for']) && $fieldName !== null) { - $attributes['for'] = static::autoId($fieldName); - } - if (!isset($attributes['id']) && isset($attributes['for'])) { - $attributes['id'] = $attributes['for'] . '-label'; - } - - return self::tag('label', $attributes, $text); - } - - /** - * Creates a text field - * - * @param string $name - * @param string $value - * @param array $attributes HTML attributes - * @return string - */ - public static function text($name, $value = null, array $attributes = array(),$type='text') - { - $attributes = array_merge(array( - 'id' => static::autoId($name), - 'name' => $name, - 'type' => $type, - 'value' => $value, - ), $attributes); - - return self::tag('input', $attributes); - } - - /** - * Creates a password input field - * - * @static - * @param string $name - * @param string $value - * @param array $attributes HTML attributes - * @return string - */ - public static function password($name, $value = null, array $attributes = array()) - { - $attributes = array_merge(array( - 'id' => static::autoId($name), - 'name' => $name, - 'type' => 'password', - 'value' => $value, - ), $attributes); - - return self::tag('input', $attributes); - } - - /** - * Creates a hidden input field - * - * @static - * @param string $name - * @param string $value - * @param array $attributes - * @return string - */ - public static function hidden($name, $value, array $attributes = array()) - { - $attributes = array_merge(array( - 'id' => static::autoId($name), - 'name' => $name, - 'type' => 'hidden', - 'value' => $value, - ), $attributes); - - return self::tag('input', $attributes); - } - - /** - * Creates a textarea - * - * @param string $name - * @param string $text - * @param array $attributes HTML attributes - * @return string - */ - public static function textArea($name, $text = null, array $attributes = array()) - { - $attributes = array_merge(array( - 'id' => static::autoId($name), - 'name' => $name, - ), $attributes); - - return self::tag('textarea', $attributes, (string)$text); - } - - /** - * Creates a check box. - * By default creates a hidden field with the value of 0, so that the field is present in $_POST even when not checked - * - * @param string $name - * @param bool $checked - * @param mixed $value Checked value - * @param array $attributes HTML attributes - * @param bool|string $withHiddenField Pass false to omit the hidden field or "array" to return both parts as an array - * @return string - */ - public static function checkBox( - $name, - $checked = false, - $value = 1, - array $attributes = array(), - $withHiddenField = true - ) { - $auto_id = static::autoId($name); - - $checkboxAttributes = array_merge(array( - 'name' => $name, - 'type' => 'checkbox', - 'value' => $value, - 'id' => $auto_id, - 'checked' => (bool)$checked, - ), $attributes); - $checkbox = self::tag('input', $checkboxAttributes); - - if ($withHiddenField === false) { - return $checkbox; - } - - $hiddenAttributes = array( - 'name' => $name, - 'type' => 'hidden', - 'value' => 0, - 'id' => $auto_id . '-hidden', - ); - $hidden = self::tag('input', $hiddenAttributes); - - return $withHiddenField === 'array' - ? array($hidden, $checkbox) - : $hidden . $checkbox; - } - - /** - * Creates multiple checkboxes for a has-many association. - * - * @param string $name - * @param array $collection - * @param array|\Traversable $checked Collection of checked values - * @param array $labelAttributes - * @param bool $returnAsArray - * @throws \InvalidArgumentException - * @return string - */ - public static function collectionCheckBoxes($name, array $collection, $checked, array $labelAttributes = array(), $returnAsArray = false) - { - // TODO: Does this check cover all options? - if (!(is_array($checked) || $checked instanceof \Traversable)) { - throw new \InvalidArgumentException("$name must be an array or Traversable!"); - } - - $checkBoxes = array(); - foreach ($collection as $value => $label) { - $checkBoxes[] = self::tag( - 'label', - $labelAttributes, - FormHelper::checkBox("{$name}[]", in_array($value, $checked, true), $value, array(), false) . self::escape($label), - false - ); - } - - return $returnAsArray ? $checkBoxes : implode('', $checkBoxes); - } - - /** - * Creates a radio button - * - * @static - * @param string $name - * @param string $value - * @param bool $checked - * @param array $attributes - * @return string - */ - public static function radio($name, $value, $checked = false, array $attributes = array()) - { - $attributes = array_merge(array( - 'type' => 'radio', - 'name' => $name, - 'value' => $value, - 'checked' => (bool)$checked, - ), $attributes); - - return self::tag('input', $attributes); - } - - /** - * Creates multiple radio buttons with labels - * - * @static - * @param string $name - * @param array $collection - * @param mixed $checked Checked value - * @param array $labelAttributes - * @param bool $returnAsArray - * @return array|string - */ - public static function collectionRadios($name, array $collection, $checked, array $labelAttributes = array(), $returnAsArray = false) - { - $radioButtons = array(); - foreach ($collection as $value => $label) { - $radioButtons[] = self::tag( - 'label', - $labelAttributes, - FormHelper::radio($name, $value, $value === $checked) . self::escape($label), - false - ); - } - - return $returnAsArray ? $radioButtons : implode('', $radioButtons); - } - - /** - * Creates a select tag - * - * // Simple select - * select('coffee_id', array('b' => 'black', 'w' => 'white')); - * - * With option groups - * select('beverage', array( - * 'Coffee' => array('bc' => 'black', 'wc' => 'white'), - * 'Tea' => array('gt' => 'Green', 'bt' => 'Black'), - * )); - * - * - * @param string $name Name of the attribute - * @param array $collection An associative array used for the option values - * @param mixed $selected Selected option Can be array or scalar - * @param array $attributes HTML attributes - * @return string - */ - public static function select($name, array $collection, $selected = null, array $attributes = array()) - { - $attributes = array_merge(array( - 'name' => $name, - 'id' => static::autoId($name), - 'multiple' => false, - ), $attributes); - - if (is_string($selected) || is_numeric($selected)) { - $selected = array($selected => 1); - } else if (is_array($selected)) { - $selected = array_flip($selected); - } else { - $selected = array(); - } - - $content = self::option('', '', $selected); - foreach ($collection as $value => $element) { - // Element is an optgroup - $content .= self::option($element['value'], $element['label'], $selected); - } - - return self::tag('select', $attributes, $content, false); - } - - /** - * Creates an option tag - * - * @param string $value - * @param string $label - * @param array $selected - * @return string - */ - private static function option($value, $label, $selected) - { - // Special handling of option tag contents to enable indentation with   - //$label = str_replace('&nbsp;', ' ', self::escape($label)); - - return self::tag( - 'option', - array( - 'value' => $value, - 'selected' => isset($selected[$value]), - ), - $label, - false - ); - } - - /** - * Creates a file input field - * - * @static - * @param string $name - * @param array $attributes HTML attributes - * @return string - */ - public static function file($name, array $attributes = array()) - { - $attributes = array_merge(array( - 'type' => 'file', - 'name' => $name, - 'id' => static::autoId($name), - ), $attributes); - - return self::tag('input', $attributes); - } - - public static function button($name, $text, array $attributes = array()) - { - $attributes = array_merge(array( - 'id' => static::autoId($name), - 'name' => $name, - ), $attributes); - - return self::tag('button', $attributes, $text); - } - - - /** - * Generate an ID given the name of an input - * - * @static - * @param string $name - * @return string|null - */ - public static function autoId($name) - { - // Don't set an id on collection inputs - if (strpos($name, '[]') !== false) { - return null; - } - - // Hyphenate array keys, for example model[field][other_field] => model-field-other_field - $name = preg_replace('/\[([^]]+)\]/u', '-\\1', $name); - - return $name; - } - - /** - * Generates an HTML tag - * - * @param string $tagName Name of the tag - * @param array $attributes HTML attributes - * @param string $content Content of the tag. Omit to create a self-closing tag - * @param bool $escape_content - * - * @see attributes() - * - * @return string - */ - public static function tag($tagName, array $attributes = array(), $content = null, $escape_content = true) - { - $result = '<' . $tagName . static::attributes($attributes) . '>'; - - if ($content !== null) { - $result .= ($escape_content ? static::escape($content) : $content) . ''; - } - - return $result; - } - - /** - * Converts an array of HTML attributes to a string - * - * If an attribute is false or null, it will not be set. - * - * If an attribute is true or is passed without a key, it will - * be set without an explicit value (useful for checked, disabled, ..) - * - * If an array is passed as a value, it will be joined using spaces - * - * Note: Starts with a space - * - * Html::attributes(array('id' => 'some-id', 'selected' => false, 'disabled' => true, 'class' => array('a', 'b'))); - * //=> ' id="some-id" disabled class="a b"' - * - * - * @param array $attributes Associative array of attributes - * - * @return string - */ - public static function attributes(array $attributes) - { - $result = ''; - - foreach ($attributes as $attribute => $value) { - if ($value === false || $value === null) continue; - if ($value === true) { - $result .= ' ' . $attribute; - } else if (is_numeric($attribute)) { - $result .= ' ' . $value; - } else { - if (is_array($value)) { // support cases like 'class' => array('one', 'two') - $value = implode(' ', $value); - } - $result .= ' ' . $attribute . '=\'' . static::escape($value) . '\''; - } - } - - return $result; - } - - /** - * Escapes a string for output in HTML - * - * @static - * @param string $string - * @return string - */ - public static function escape($string) - { - return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); - } - /** - * 输出表单标题 - * - * @param string $title - * @return void - */ - public static function formTitle(string $title) - { - return '
-
- ' . $title . ' -
-
- '; - } - /** - * 输出行标题 - * - * @param string $title - * @return void - */ - public static function formRowTitle(string $title) - { - return '
-
- ' . $title . ' -
-
- '; - } - /** - * 输出行内容 - * - * @return void - */ - public static function formRowContent($fieldName, string $fieldValue, string $key) - { - return '
-

' . $fieldName . '

-
-
- -
- '; - } - /** - * 生成Row - * - * @return void - */ - public function formRow() - { - $_div = "
"; - $_div .= "
"; - } -} diff --git a/wms/cont/MICalculator.php b/wms/cont/MICalculator.php deleted file mode 100644 index 8b087582..00000000 --- a/wms/cont/MICalculator.php +++ /dev/null @@ -1,324 +0,0 @@ - 'fail', - 'message' => '無此項目,請聯係業務部創建MI' - ]; - } - public function success($price) - { - return [ - 'status' => 'ok', - 'price' => $price - ]; - } -} diff --git a/wms/cont/MSCalculator.php b/wms/cont/MSCalculator.php deleted file mode 100644 index cd56873b..00000000 --- a/wms/cont/MSCalculator.php +++ /dev/null @@ -1,322 +0,0 @@ - 'fail', - 'message' => '無此項目,請聯係業務部創建標準成本' - ]; - } - public function success($price) - { - return [ - 'status' => 'ok', - 'price' => $price - ]; - } -} diff --git a/wms/cont/apply.php b/wms/cont/apply.php deleted file mode 100644 index 451eb877..00000000 --- a/wms/cont/apply.php +++ /dev/null @@ -1,22 +0,0 @@ -initWorkFlow(ID); - -//加载视图 - -echo '查看全部待签'; diff --git a/wms/cont/apply_form.php b/wms/cont/apply_form.php deleted file mode 100644 index a7f4c7db..00000000 --- a/wms/cont/apply_form.php +++ /dev/null @@ -1,859 +0,0 @@ -0) { - echo""; - exit; -} -*/ - -#係統ID -$system_id = 'con'; -#流程ID -$flow_id = 'con01'; -#表單號 $form_id; -$form_id = ""; -#價審單狀態 -$apply_st = ""; -list($apply_key, $form_key, $salesman) = DB::fields("SELECT apply_key, form_key,salesman FROM con_maintance_examine_apply WHERE vol_no='$vol_no' ORDER BY apply_key desc limit 0, 1"); -// echo '
';
-// print_r($apply_key);
-// echo '
'; -// exit; -// if ($salesman != $user_id) { -// echo ''; -// exit; -// } -if (empty($apply_key)) $apply_st = 1; // 準備新增 -else { - //list($flow_code)=DB::fields("select flow_code from flow where form_key = '$form_key' and system_id = '$system_id' and flow_id = '$flow_id'"); - list($current_assigner) = DB::fields("SELECT current_assigner FROM subflow WHERE form_key = '$form_key' ORDER BY seq desc limit 0, 1"); - if ($current_assigner == $user_id) $apply_st = 2; // 修改中,還未提交 - else $apply_st = 9; // 已到下一關,無法䖺改 -} - -// if ($apply_st > 2) { -// echo ""; -// exit; -// } - -if ($apply_st == 1) { - $wf = new WorkFlow($system_id, $flow_id, $form_id); - $wf->initWorkFlow($user_id); - $form_key = $wf->flowContext->getFormKey(); -} else { - $wf = new WorkFlow($system_id, $flow_id, $form_id, $form_key); -} - -#獲取簽核意見 -$assign_opinions = Assign::get_records($form_key); - -#會簽部門意見 -$subflow_assign_opinions = SubflowManager::getCounterSignComments($form_key); - -//預設冇有摺扣 -$wf->setFormData(['discount' => 100]); -$flowName = $wf->getFlowName(); -$assigner = $wf->getAssignerList(); -$assign_status = $wf->getAssignStatus($assigner); - -$if_show_assign = true; -//加載流程圖 -//$fc = WorkFLowItems::get_records($flow->getSystemID(), $flow->getFlowID()); -//$path = $fc[0]->wf_file; -//echo dirname(__DIR__)."/../"."$path"; - -//$flow_chart = file_get_contents(dirname(__DIR__) . '/' . $path); -#是否可會簽 -$isSplitable = $wf->isSplitable(); - -//表單數據 -#客戶表 -#1.電梯品牌選項 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='elevator_brand' order by code_name asc "; -$elevator_brand_opt = DB::result($sql); -#2.保養方式 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='maintain_kind'"; -$maintain_kind_opt = DB::result($sql); -#3.電梯類型 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='maintain_elevator_kind'"; -$elevator_kind_opt = DB::result($sql); -#4.付款方式 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='payment_kind' order by code_name+ 0 asc"; -$payment_kind_opt = DB::result($sql); -#5.契約性質 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='contract_kind'"; -$contract_kind_opt = DB::result($sql); -#6.是否贈送M1 -$is_m1_bundle_opt = [ - ['label' => '是', 'value' => 'Y'], - ['label' => '否', 'value' => 'N'] - -]; -#7.機種 -$sql = "SELECT code_name value ,content label FROM code WHERE field_name='fp_kind'"; -$fp_kind_opt = DB::result($sql); -#抓取有望客戶資料 - - -$vol_no = $_GET['vol_no']; -$where = " and vol_no='$vol_no'"; -$sql = "SELECT * FROM hope_contract_customer where 1=1 $where ORDER BY vol_no"; -// print_r($sql); -$hope_contract = DB::result($sql); -$hope_contract = empty($hope_contract) ? [] : $hope_contract[0]; -#寫入 con_maintance_examine_apply -if ($apply_st == 1) { - #獲取評審單號 - $apply_key = get_sequnece_no('cmea_apply_key', date('ym')); - //var_dump($hope_contract); - $insert_data = [ - 'apply_key' => $apply_key, - 'vol_no' => $vol_no, - 'form_key' => $form_key, - 'address' => $hope_contract['address'], - 'case_name' => $hope_contract['customer'], - 'num' => $hope_contract['num'], - 'brand' => '', - 'customer' => $hope_contract['customer'], - 'salesman' => empty($hope_contract['salesman']) ? $user_id : $hope_contract['salesman'], - 'progress_remark' => $hope_contract['progress_status'] - //'platform_company'=>'', - // 'platforom_company_tel'=> '' - - ]; - //var_dump($insert_data); - DB::insert_table('con_maintance_examine_apply', $insert_data); -} - -$table = 'con_maintance_examine_apply'; -#可編輯的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "評審單號", "value" => "$apply_key", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - 'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'num' => ['label' => "數量", "value" => "", "tag" => 'digits', 'attr' => ['required', 'min=1', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt], - 'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt], - 'introducer' => ['label' => "介紹人", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - - 'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - -]; -$where = " and apply_key='$apply_key'"; - -$sql = "SELECT * FROM $table where 1=1 $where ORDER BY vol_no"; -$data = []; -$data = DB::result($sql); - -#電梯詳細資料 -$con_maintance_examine_clear_columm = [ - 'register_code' => ['label' => "電梯許可證代碼", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'required', 'class' => 'form-control form-control-sm']], - 'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], - 'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt], - 'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'weight[]', "placeholder" => "載重", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - 'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', "placeholder" => "速度", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - 'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', "placeholder" => "停數", 'class' => 'form-control form-control-sm']], - 'floors' => ['label' => "層數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'floors[]', 'min=1', 'required', "placeholder" => "層數", 'class' => 'form-control form-control-sm']], - 'persons' => ['label' => "人乘", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'persons[]', 'min=1', 'required', "placeholder" => "人乘", 'class' => 'form-control form-control-sm']], - - 'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - 'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'digits', 'attr' => ['colspan' => 2, 'required', "placeholder" => "竣工檢查年度", 'gt=0', 'min=0', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], - 'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'last_check_date[]', "placeholder" => "上次年檢日期", 'colspan' => 2, 'class' => 'form-control form-control-sm']], - - 'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', "placeholder" => "年檢費用", 'colspan' => 2, 'class' => 'form-control form-control-sm ']], - - 'maintain_times' => ['label' => "保養次數", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'register_code' => ['label' => "電梯許可證代碼", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', "placeholder" => "無證號請輸入A,B...", 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "tag" => 'digits', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'option' => 'disable', 'options' => $is_m1_bundle_opt], - 'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']], - 'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, "placeholder" => "契約報價", 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']], - 'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'placeholder' => '契約成交價', 'class' => 'form-control form-control-sm']], - -]; -$con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) . - " FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' "); - -$j = 0; -$col_count = 12; -$cmecRow = " "; -foreach ($con_maintance_examine_clear_columm as $key => $val) { - $fieldVal = ""; - $_input = $val['tag'] == 'select' ? - FormHelper::select('', $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - // : ""; - $cmecRow .= "
$_input"; - if ((++$j % $col_count) == 0) { - if ($j == $col_count) $cmecRow .= ""; - $cmecRow .= ""; - } -} -$cmecRow .= ""; -function base_url($url) -{ - return "https://www.masada.com.tw/static/" . $url; -} -function get_sequnece_no($seq_name = '', $p_yyyymm = '') -{ - - if (empty($p_yyyymm) || empty($seq_name)) return null; - #當前年月 - list($yyyymm, $prefix) = DB::fields("select yyyymm ,prefix from sequence where seq_name='$seq_name' "); - if ($p_yyyymm != $yyyymm) { - DB::query("update sequence set yyyymm='$p_yyyymm' , current_val='10000' where seq_name='$seq_name' "); - } - // echo "SELECT concat( $prefix,,substring(nextval('$seq_name'),2)) seq_no "; - list($seq_no) = DB::fields("SELECT concat( '$prefix','$p_yyyymm',substring( appwms.nextval('$seq_name'),2)) seq_no "); - - - return $seq_no; -} -$sql = "SELECT * FROM account WHERE accountid = '$user_id' "; -list($result) = DB::result($sql); -if ($result['department_id'] == '511') { - $managerid = 'M0137'; - $managername = '劉永德'; -} else if ($result['department_id'] == '512') { - $managerid = 'M0054'; - $managername = '陳志文'; -} else if ($result['department_id'] == '513') { - $managerid = 'M0086'; - $managername = '李烘銘'; -} else if ($result['department_id'] == '514') { - $managerid = 'M0033'; - $managername = '吳育宗'; -} else if ($user_id == 'TEST01') { - $managerid = 'TEST04'; - $managername = '區經理'; -} - -if ($result['department_id'] == 'M0137' || $result['department_id'] == 'M0086' || $result['department_id'] == 'M0033') { - $managerid = 'M0008'; - $managername = '詹益彰'; -} - -?> - - - - - - - - - - - - - - - - - - - -
- - - - -
- -
- -
-
- - - ' /> - - - -
-
-
-

保養契約價格審核單

-
-
- -
-
- 契約信息 -
-
- - "; - foreach ($editableColumn as $key => $val) { - $j = (($i++) % 4); - $fieldVal = empty($data) ? "" : $data[0][$key]; - - $_input = $val['tag'] == 'select' ? - FormHelper::select("$key", $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - //""; - if ($i != 1 && $j == 0) { - echo " -
-
- "; - } - echo "
- " . $val['label'] . " -
-
- $_input -
- "; - } - echo "
"; - - ?> - -
-
- 洽商進度 -
-
- - -
-
-
-
- 電梯詳細資料 -
- - - - - - - - - - - "; - - $i = 0; - $cmecRow = ''; - foreach ($con_maintance_examine_clear_columm as $col => $col_def) { - echo FormHelper::tag("th", ['colspan' => empty($col_def['attr']['colspan']) ? 1 : $col_def['attr']['colspan']], $col_def['label']); - - if ((++$j % $col_count) == 0) { - if ($j == $col_count) echo ""; - echo ""; - } - } - echo ''; - - - ?> - - - - - - $val) { - $j = 0; - $cmecRow = ""; - foreach ($con_maintance_examine_clear_columm as $col => $col_def) { - - $fieldVal = empty($val) ? "" : $val[$col]; - $_input = $col_def['tag'] == 'select' ? - FormHelper::select($col, $col_def['options'], $fieldVal, $col_def['attr']) - : FormHelper::text($col, $fieldVal, $col_def['attr'], $col_def['tag']); - $cmecRow .= ""; - if ((++$j % $col_count) == 0) { - $cmecRow .= ""; - $cmecRow .= ""; - } - } - - - echo $cmecRow . ""; - } - ?> - - -
- 註意事項: -

1.速度單位是 米/分.

-

2.選擇贈送M1,保養月數需填寫60.

-

3.標準價格未帶出,請聯係業務部建立該規格報價.

-

4.無機房速度20~60米 以60米為標準.

- - -
操作
- $_input
- -
- -
-
- 簽核操作 -
-
- -
-
-
-
- 簽核狀態 -
-
- -
- -
- 下位簽核者 -
-
- - -
-
-   - -
- -
-
-
- -
-
-
- - -
- -
- - - - ' . $wf->getNodeDescriptions($as['flow_code']) . ' -
'; - $tmp_code = $as['flow_code']; - ?> -
"> -
- - - - -   - " . $as['position_name'] . " "; ?> - - - - - - -   - 申請人 "; ?> - 退回"; ?> - 會簽"; ?> - - - - 簽核於: - - - -
-
- -
- -
- -
- - - -
-
- -
-
-
- - - -
- - - - - - \ No newline at end of file diff --git a/wms/cont/apply_form1.php b/wms/cont/apply_form1.php deleted file mode 100644 index 2e035859..00000000 --- a/wms/cont/apply_form1.php +++ /dev/null @@ -1,912 +0,0 @@ -0) { - echo""; - exit; -} -*/ - -#係統ID -$system_id = 'con'; -#流程ID -$flow_id = 'con01'; -#表單號 $form_id; -$form_id = ""; -#價審單狀態 -$apply_st = ""; -list($apply_key, $form_key, $salesman) = DB::fields("SELECT apply_key, form_key,salesman FROM con_maintance_examine_apply WHERE vol_no='$vol_no' ORDER BY apply_key desc limit 0, 1"); -// echo '
';
-// print_r($salesman);
-// echo '
'; -// exit; -if ($salesman != $user_id) { - echo ''; - exit; -} -if (empty($apply_key)) $apply_st = 1; // 準備新增 -else { - //list($flow_code)=DB::fields("select flow_code from flow where form_key = '$form_key' and system_id = '$system_id' and flow_id = '$flow_id'"); - list($current_assigner) = DB::fields("SELECT current_assigner FROM subflow WHERE form_key = '$form_key' ORDER BY seq desc limit 0, 1"); - if ($current_assigner == $user_id) $apply_st = 2; // 修改中,還未提交 - else $apply_st = 9; // 已到下一關,無法䖺改 -} - -// if ($apply_st > 2) { -// echo ""; -// exit; -// } - -if ($apply_st == 1) { - $wf = new WorkFlow($system_id, $flow_id, $form_id); - $wf->initWorkFlow($user_id); - $form_key = $wf->flowContext->getFormKey(); -} else { - $wf = new WorkFlow($system_id, $flow_id, $form_id, $form_key); -} - -#獲取簽核意見 -$assign_opinions = Assign::get_records($form_key); - -#會簽部門意見 -$subflow_assign_opinions = SubflowManager::getCounterSignComments($form_key); - -//預設冇有摺扣 -$wf->setFormData(['discount' => 100]); -$flowName = $wf->getFlowName(); -$assigner = $wf->getAssignerList(); -$assign_status = $wf->getAssignStatus($assigner); -$if_show_assign = true; -//加載流程圖 -//$fc = WorkFLowItems::get_records($flow->getSystemID(), $flow->getFlowID()); -//$path = $fc[0]->wf_file; -//echo dirname(__DIR__)."/../"."$path"; - -//$flow_chart = file_get_contents(dirname(__DIR__) . '/' . $path); -#是否可會簽 -$isSplitable = $wf->isSplitable(); - -//表單數據 -#客戶表 -#1.電梯品牌選項 -$sql = "select code_name value ,content label from code where field_name='elevator_brand' order by code_name asc "; -$elevator_brand_opt = DB::result($sql); -#2.保養方式 -$sql = "select code_name value ,content label from code where field_name='maintain_kind'"; -$maintain_kind_opt = DB::result($sql); -#3.電梯類型 -$sql = "select code_name value ,content label from code where field_name='maintain_elevator_kind'"; -$elevator_kind_opt = DB::result($sql); -#4.付款方式 -$sql = "select code_name value ,content label from code where field_name='payment_kind' order by code_name+ 0 asc"; -$payment_kind_opt = DB::result($sql); -#5.契約性質 -$sql = "select code_name value ,content label from code where field_name='contract_kind'"; -$contract_kind_opt = DB::result($sql); -#6.是否贈送M1 -$is_m1_bundle_opt = [ - ['label' => '是', 'value' => 'Y'], - ['label' => '否', 'value' => 'N'] - -]; -#7.機種 -$sql = "select code_name value ,content label from code where field_name='fp_kind'"; -$fp_kind_opt = DB::result($sql); -#抓取有望客戶資料 - -$vol_no = $_GET['vol_no']; -$where = " and vol_no='$vol_no'"; -$sql = "SELECT * FROM hope_contract_customer where 1=1 $where ORDER BY vol_no"; -$hope_contract = DB::result($sql); -$hope_contract = empty($hope_contract) ? [] : $hope_contract[0]; -#寫入 con_maintance_examine_apply -if ($apply_st == 1) { - #獲取評審單號 - $apply_key = get_sequnece_no('cmea_apply_key', date('ym')); - //var_dump($hope_contract); - $insert_data = [ - 'apply_key' => $apply_key, - 'vol_no' => $vol_no, - 'form_key' => $form_key, - 'address' => $hope_contract['address'], - 'case_name' => $hope_contract['customer'], - 'num' => $hope_contract['num'], - 'brand' => '', - 'customer' => $hope_contract['customer'], - 'salesman' => empty($hope_contract['salesman']) ? $user_id : $hope_contract['salesman'], - 'progress_remark' => $hope_contract['progress_status'] - //'platform_company'=>'', - // 'platforom_company_tel'=> '' - - ]; - //var_dump($insert_data); - DB::insert_table('con_maintance_examine_apply', $insert_data); -} -#抓使用者主管 -$sql = "SELECT * FROM account WHERE accountid = '$user_id' "; -list($result) = DB::result($sql); -if ($result['department_id'] == '511') { - $managerid = 'M0137'; - $managername = '劉永德'; -} else if ($result['department_id'] == '512') { - $managerid = 'M0137'; - $managername = '劉永德'; -} else if ($result['department_id'] == '513') { - $managerid = 'M0086'; - $managername = '李烘銘'; -} else if ($result['department_id'] == '514') { - $managerid = 'M0033'; - $managername = '吳育宗'; -} - -if ($result['department_id'] == 'M0137' || $result['department_id'] == 'M0086' || $result['department_id'] == 'M0033') { - $managerid = 'M0008'; - $managername = '詹益彰'; -} - -if ($result['department_id'] == 'M0008') { - $managerid = 'M0008'; - $managername = '詹益彰'; -} -$table = 'con_maintance_examine_apply'; -#可編輯的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "評審單號", "value" => "$apply_key", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - 'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'num' => ['label' => "數量", "value" => "", "tag" => 'digits', 'attr' => ['required', 'min=1', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt], - 'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt], - 'introducer' => ['label' => "介紹人", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - - 'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - -]; -$where = " and apply_key='$apply_key'"; - -$sql = "SELECT * FROM $table where 1=1 $where ORDER BY vol_no"; -$data = []; -$data = DB::result($sql); - -#電梯詳細資料 -$con_maintance_examine_clear_columm = [ - 'register_code' => ['label' => "電梯許可證代碼", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'required', 'class' => 'form-control form-control-sm']], - 'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], - 'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt], - 'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'weight[]', "placeholder" => "載重", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - 'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', "placeholder" => "速度", 'gt=0', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - 'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', "placeholder" => "停數", 'class' => 'form-control form-control-sm']], - 'floors' => ['label' => "層數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'floors[]', 'min=1', 'required', "placeholder" => "層數", 'class' => 'form-control form-control-sm']], - 'persons' => ['label' => "人乘", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'persons[]', 'min=1', 'required', "placeholder" => "人乘", 'class' => 'form-control form-control-sm']], - - 'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - 'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'digits', 'attr' => ['colspan' => 2, 'required', "placeholder" => "竣工檢查年度", 'gt=0', 'min=0', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], - 'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'last_check_date[]', "placeholder" => "上次年檢日期", 'colspan' => 2, 'class' => 'form-control form-control-sm']], - - 'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', "placeholder" => "年檢費用", 'colspan' => 2, 'class' => 'form-control form-control-sm ']], - - 'maintain_times' => ['label' => "保養次數", "tag" => 'digits', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'register_code' => ['label' => "電梯許可證代碼", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', "placeholder" => "無證號請輸入A,B...", 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "tag" => 'digits', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "tag" => 'digits', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'option' => 'disable', 'options' => $is_m1_bundle_opt], - 'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']], - 'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, "placeholder" => "契約報價", 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']], - 'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']], - -]; -$con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) . - " FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' "); -$j = 0; -$col_count = 12; -$cmecRow = " "; - -foreach ($con_maintance_examine_clear_columm as $key => $val) { - $fieldVal = ""; - $_input = $val['tag'] == 'select' ? - FormHelper::select('', $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - // : ""; - $cmecRow .= "
$_input"; - if ((++$j % $col_count) == 0) { - if ($j == $col_count) $cmecRow .= ""; - $cmecRow .= ""; - } -} - - -$cmecRow .= ""; -function base_url($url) -{ - return "https://www.masada.com.tw/static/" . $url; -} -function get_sequnece_no($seq_name = '', $p_yyyymm = '') -{ - - if (empty($p_yyyymm) || empty($seq_name)) return null; - #當前年月 - list($yyyymm, $prefix) = DB::fields("select yyyymm ,prefix from sequence where seq_name='$seq_name' "); - if ($p_yyyymm != $yyyymm) { - DB::query("update sequence set yyyymm='$p_yyyymm' , current_val='10000' where seq_name='$seq_name' "); - } - // echo "SELECT concat( $prefix,,substring(nextval('$seq_name'),2)) seq_no "; - list($seq_no) = DB::fields("SELECT concat( '$prefix','$p_yyyymm',substring( appwms.nextval('$seq_name'),2)) seq_no "); - - - return $seq_no; -} - - -?> - - - - - - - - - - - - - - - - - - -
- - - - -
- -
- -
-
- - - ' /> - - - -
-
-
-

保養契約價格審核單

-
-
- -
-
- 契約信息 -
-
- - "; - foreach ($editableColumn as $key => $val) { - $j = (($i++) % 4); - $fieldVal = empty($data) ? "" : $data[0][$key]; - - $_input = $val['tag'] == 'select' ? - FormHelper::select("$key", $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - //""; - if ($i != 1 && $j == 0) { - echo " -
-
- "; - } - echo "
- " . $val['label'] . " -
-
- $_input -
- "; - } - echo "
"; - - ?> - -
-
- 洽商進度 -
-
- - -
-
-
-
- 電梯詳細資料 -
- - - - - - - - - - -
- 註意事項: -

1.速度單位是 米/分.

-

2.選擇贈送M1,保養月數需填寫60.

-

3.標準價格未帶出,請聯係業務部建立該規格報價.

-

4.無機房速度20~60米 以60米為標準.

- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
電梯許可代碼品牌電梯類型規格型號載重(KG)速度(m/min)停數層數人乘保養次數保養月數保養周期贈送M1
-
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
竣工檢查年度上次年檢日期年檢費用(元)標準價格(元/月)契約報價(元/月)契約成交價(元/月)刪除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- -
-
- 簽核操作 -
-
- -
-
-
-
- 簽核狀態 -
-
- -
- -
- 下位簽核者 -
-
- - -
-
-   - -
- -
-
-
- -
-
-
- -
- -
- - - - ' . $wf->getNodeDescriptions($as['flow_code']) . ' -
'; - $tmp_code = $as['flow_code']; - ?> -
"> -
- - - - -   - " . $as['position_name'] . " "; ?> - - - - - - -   - 申請人 "; ?> - 退回"; ?> - 會簽"; ?> - - - - 簽核於: - - - -
-
- -
- -
- -
- - - -
-
- -
-
-
- - - -
- - - - - - \ No newline at end of file diff --git a/wms/cont/async_req.php b/wms/cont/async_req.php deleted file mode 100644 index 0d693a1e..00000000 --- a/wms/cont/async_req.php +++ /dev/null @@ -1,20 +0,0 @@ - $code_name]); -} diff --git a/wms/cont/con_maintance_examine_clear.php b/wms/cont/con_maintance_examine_clear.php deleted file mode 100644 index f2faf705..00000000 --- a/wms/cont/con_maintance_examine_clear.php +++ /dev/null @@ -1,14 +0,0 @@ - ['label' => "电梯注册代码", "value" => "", "tag" => 'text', 'class' => ''], - 'brand' => ['label' => "品牌", "value" => "", "tag" => 'text', 'class' => ''], - 'spec' => ['label' => "规格型号", "value" => "", "tag" => 'text', 'class' => ''], - 'weight' => ['label' => "载重", "value" => "", "tag" => 'text', 'class' => ''], - 'speed' => ['label' => "速度", "value" => "", "tag" => 'text', 'class' => ''], - 'stop' => ['label' => "停数", "value" => "", "tag" => 'text', 'class' => ''], - 'useful_years' => ['label' => "使用年限", "value" => "", "tag" => 'text', 'class' => ''], - 'last_check_date' => ['label' => "最近一次年检日期", "value" => "", "tag" => 'text', 'class' => ''], - 'speed_governors_check_expense' => ['label' => "限速器校验费", "value" => "", "tag" => 'text', 'class' => ''], -]; -$con_maintance_examine_clear = DB::result("SELECT * FROM con_maintance_examine_clear where 1=1 and cmstatus='Y' "); diff --git a/wms/cont/conn.php b/wms/cont/conn.php deleted file mode 100644 index 1476902e..00000000 --- a/wms/cont/conn.php +++ /dev/null @@ -1,42 +0,0 @@ -errorInfo()的形式獲取錯誤資訊 - //PDO::ERRMODE_WARNING: 引發 E_WARNING 錯誤,主動報錯 - //PDO::ERRMODE_EXCEPTION: 主動抛出 exceptions 異常,需要以try{}cath(){}輸出錯誤資訊。 - //設定主動以警告的形式報錯 - $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - //如果連接錯誤,將抛出一個PDOException異常對象 -} catch (PDOException $e) { - //如果連結資料庫失敗則顯示錯誤訊並停止本頁的工作 - die("ERROR!!!: " . $e->getMessage()); -} - -//$conn = null; //關閉資料庫的連線 \ No newline at end of file diff --git a/wms/cont/crmm06_submit.php b/wms/cont/crmm06_submit.php deleted file mode 100644 index 79b54de8..00000000 --- a/wms/cont/crmm06_submit.php +++ /dev/null @@ -1,21 +0,0 @@ -fillable; -foreach ($cols as $col) { - if (!in_array($col, array_keys($request))) { - continue; - } - $data[$col] = empty($request[$col]) ? NULL : $request[$col]; -} -$hecm->create( $data); - - -echo""; diff --git a/wms/cont/list.php b/wms/cont/list.php deleted file mode 100644 index a019243e..00000000 --- a/wms/cont/list.php +++ /dev/null @@ -1,168 +0,0 @@ - $item['system_id'], 'system_name' => $item['system_name']); -}, $res_get); -$system_name_opt = (array_unique($system_name_opt, SORT_REGULAR)); - - -$flow_name_opt = array_map(function ($item) { - return array('flow_id' => $item['flow_id'], 'flow_name' => $item['flow_name']); -}, $res_get); -$flow_name_opt = (array_unique($flow_name_opt, SORT_REGULAR)); - -?> - -
- - - - - - - - - - - - - - - - - - - - - -
-

待签查询

-
系统名称 - - 流程名称
- -
-
- - - - - - - - - - - - - $data) : - ?> - - - - - - - - - - - - - -
序号系统名称流程名称接收日期当前签核者
-
-
- \ No newline at end of file diff --git a/wms/cont/model/ConMaintanceExamineApplyModel.php b/wms/cont/model/ConMaintanceExamineApplyModel.php deleted file mode 100644 index f4824a9a..00000000 --- a/wms/cont/model/ConMaintanceExamineApplyModel.php +++ /dev/null @@ -1,29 +0,0 @@ -fillable as $col) { - $_data[$col] = empty($data[$col]) ? '' : $data[$col]; - } - DB::insert_table($this->table, $_data); - } - /** - * 创建或更新 - * - * @return void - */ - public function createOrUpdate(array $keyCol, array $data) - { - list($cnt) = DB::fields( - "select count(*) from $this->table where " . $keyCol[0] . " = '" . $keyCol[1] . "'" - ); - if ($cnt == 0) { - self::create(array_merge($data, $keyCol)); - } - } - - public function update(array $keyCol, array $data) - { - $_data = []; - foreach ($this->fillable as $col) { - if (in_array($col, array_keys($data))) $_data[$col] = empty($data[$col]) ? '' : $data[$col]; - } - DB::update_table($this->table, $_data, $keyCol[0] . '=\'' . $keyCol[1] . '\''); - } - /** - * 获取记录 - * - * @param array $cond - * @return void - */ - public function get(array $cond) - { - return []; - } -} diff --git a/wms/cont/query_form.php b/wms/cont/query_form.php deleted file mode 100644 index f3495f14..00000000 --- a/wms/cont/query_form.php +++ /dev/null @@ -1,511 +0,0 @@ -vol_no; -require_once './MICalculator.php'; -require_once './FormHelper.php'; -require_once './wf_common.php'; -list($form_key) = DB::fields("select form_key from con_maintance_examine_apply where apply_key='$apply_key'"); -//echo $form_key; -$flow = new Flow($form_key); -// 當前節點簽核開始 -//var_dump($flow); -$wf = new WorkFlow($flow->system_id, $flow->flow_id, $flow->form_id, $form_key); -#獲取簽核意見 -$assign_opinions = Assign::get_records($form_key); -$flowName = $wf->getFlowName(); -$assigner = $wf->getAssignerList(); -$assign_status = $wf->getAssignStatus($assigner); -//表單數據 -#客戶表 -#客戶表 -#1.電梯品牌選項 -$sql = "select code_name value ,content label from code where field_name='elevator_brand'"; -$elevator_brand_opt = DB::result($sql); -#2.保養方式 -$sql = "select code_name value ,content label from code where field_name='maintain_kind'"; -$maintain_kind_opt = DB::result($sql); -#3.電梯類型 -$sql = "select code_name value ,content label from code where field_name='elevator_kind'"; -$elevator_kind_opt = DB::result($sql); -#4.付款方式 -$sql = "select code_name value ,content label from code where field_name='payment_kind'"; -$payment_kind_opt = DB::result($sql); -#5.契約性質 -$sql = "select code_name value ,content label from code where field_name='contract_kind'"; -$contract_kind_opt = DB::result($sql); -#6.是否贈送M1 -$is_m1_bundle_opt = [ - ['label' => '是', 'value' => 'Y'], - ['label' => '否', 'value' => 'N'] -]; -#7.機種 -$sql = "select code_name value ,content label from code where field_name='fp_kind'"; -$fp_kind_opt = DB::result($sql); -$table = 'con_maintance_examine_apply'; -#可編輯的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "評審單號", "value" => "$apply_key", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - 'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'num' => ['label' => "數量", "value" => "", "tag" => 'number', 'attr' => ['required', 'min=1', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt], - 'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt], - 'introducer' => ['label' => "介紹人", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - - // 'platform_company' => ['label' => "加盟公司名稱", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - // 'platforom_company_tel' => ['label' => "加盟公司電話", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - 'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - -]; -$where = " and apply_key='$apply_key'"; - -$sql = "SELECT * FROM $table where 1=1 $where ORDER BY apply_key"; -$data = []; -list($data) = DB::result($sql); - -#電梯詳細資料 -$con_maintance_examine_clear_columm = [ - 'register_code' => ['label' => "電梯許可證代碼", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'class' => 'form-control form-control-sm']], - //'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], - 'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt], - 'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'number', 'attr' => ['name' => 'weight[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - //'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', 'class' => 'form-control form-control-sm']], - 'floors' => ['label' => "層數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'floors[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'persons' => ['label' => "人乘", "value" => "", "tag" => 'number', 'attr' => ['name' => 'persons[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - - 'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - - - // 'elevator_num' => ['label' => "臺數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'brand_num[]', 'class' => 'form-control form-control-sm']], - 'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'required', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], - 'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'date', 'attr' => ['required', 'name' => 'last_check_date[]', 'colspan' => 2, 'type' => 'date', 'class' => 'form-control form-control-sm']], - //'speed_governors_check_expense' => ['label' => "限速器校驗費", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed_governors_check_expense[]', 'class' => 'form-control form-control-sm']], - // 'service_expense' => ['label' => "服務費", "value" => "", "tag" => 'text', 'attr' => ['required', 'name' => 'service_expense[]', 'class' => ' form-control form-control-sm ']], - // 'commission_expense' => ['label' => "分成費(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'commission_expense[]', 'class' => 'form-control form-control-sm']], - // 'management_expense' => ['label' => "管理費(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'management_expense[]', 'class' => 'form-control form-control-sm']], - 'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', 'colspan' => 2, 'class' => 'date form-control form-control-sm ']], - //'service_expense' => ['label' => "服務費", "value" => "", "tag" => 'text', 'attr' => ['required', 'name' => 'service_expense[]', 'class' => ' form-control form-control-sm ']], - 'maintain_times' => ['label' => "保養次數", "tag" => 'number', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "tag" => 'number', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - 'stand_price' => ['label' => "標準價格A(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']], - 'contract_price' => ['label' => "契約報價B(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']], - 'sold_price' => ['label' => "契約成交價C(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']], - - - 'mi_cost' => ['label' => "標準成本D(元/月)", "value" => "", "tag" => 'number', 'attr' => ['readonly=true', 'disabled', 'colspan' => 2, 'name' => 'mi_cost[]', 'class' => 'form-control form-control-sm']], - 'discount' => ['label' => "折扣率E(%)", "value" => "", "tag" => 'number', 'attr' => ['readonly=true', 'disabled', 'colspan' => 2, 'name' => 'mi_cost_rate[]', 'class' => 'form-control form-control-sm']], - 'gross_profit' => ['label' => "毛利率F(%)", "value" => "", "tag" => 'number', 'attr' => ['readonly=true', 'disabled', 'colspan' => 2, 'name' => 'gross_profit[]', 'class' => 'form-control form-control-sm']], - -]; -$con_maintance_examine_clear = DB::result("SELECT register_code, - f_return_content('elevator_brand',elevator_brand) elevator_brand, - f_return_content('maintain_elevator_kind',elevator_kind) elevator_kind, - elevator_kind con_elevator_kind, - spec, - weight, - speed, - floors, - persons, - maintain_times, - maintain_months, - maintain_period, - is_m1_bundle, - - useful_years, - last_check_date, - speed_governors_check_expense, - service_expense, - commission_expense, - management_expense, - annual_survey_expense, - stand_price, - contract_price, - sold_price, - 0 mi_cost , - 0 discount, - 0 gross_profit - FROM - con_maintance_examine_clear - WHERE - 1 = 1 - AND apply_key='" . $apply_key . "' and cmstatus = 'Y'"); - -function base_url($url) -{ - return "https://www.masada.com.tw/static/" . $url; -} - - -?> - - - - - - - <?php echo $flowName; ?> - - - - - - - - - - - - - - - - - - - -
- -
-
- - - - -
-
-
-

保養契約價格審核單

-
-
- -
-
- 契約信息 -
-
- - "; - foreach ($editableColumn as $key => $val) { - // print_r($val['label']); - $j = (($i++) % 4); - $fieldVal = empty($data) ? "" : $data[$key]; - $fieldVal = empty($data) ? "" : $data[$key]; - - $_input = $val['tag'] == 'select' ? - FormHelper::select("$key", $val['options'], $fieldVal, $val['attr']) : - FormHelper::tag("label", $val['attr'], $fieldVal); - - // ""; - if ($i != 1 && $j == 0) { - echo " -
-
- "; - } - echo "
- " . $val['label'] . " -
-
- $_input -
- "; - } - echo "
"; - - ?> - -
-
- 洽商進度 -
-
- - -
-
- -
-
- 電梯詳細資料 -
- - - - - - empty($val['attr']['colspan']) - ? 1 : $val['attr']['colspan']], $val['label']); - - if ((++$j % 14) == 0) { - // if ($j == 12) echo ""; - - - echo ""; - } - } - - ?> - - - - - $val) { - $j = 0; - - $cmecRow = " "; - - foreach ($con_maintance_examine_clear_columm as $col => $col_def) { - $fieldVal = empty($val) ? "" : $val[$col]; - if ($col == 'mi_cost') { - $param = [ - 'elevator_type' => $val['con_elevator_kind'], - 'floors' => $val['floors'], - 'speed' => $val['speed'], - 'persons' => $val['persons'], - 'weight' => $val['weight'], - 'maintain_times' => $val['maintain_times'], - 'maintain_months' => $val['maintain_months'], - 'maintain_kind' => $data['maintain_kind'], - 'maintain_period' => $val['maintain_period'], - 'is_m1_bundle' => $val['is_m1_bundle'], - ]; - $mic = new MICalculator(); - $res = $mic->cal($param); - #MI報價 - $con_maintance_examine_clear[$key]['mi_cost'] = $fieldVal = $res['status'] == 'ok' ? $res['price'] : $res['message']; - $con_maintance_examine_clear[$key]['gross_profit'] = $val['gross_profit'] = "/"; //$fieldVal==0?0: (round(($val['sold_price'] - $val['mi_cost']) / $fieldVal, 2) * 100) . "%" - #扣率 - $val['discount'] = (100 * round($val['sold_price'] / $val['stand_price'], 4)) . "%"; - } - - $_input = FormHelper::tag("label", ['colspan' => empty($col_def['attr']['colspan']) ? 1 - : $col_def['attr']['colspan']], $fieldVal); - $cmecRow .= ""; - - $cmecRow = (++$j % 14 == 0) ? $cmecRow . "" : $cmecRow; - } - $tr_class = $tr_class == 'odd' ? "even" : "odd"; - echo $cmecRow . ""; - } - ?> - - - - - - - -
操作
$_input
-
- - - - - -
-
- -
- - - -
-
- -
-
-
- - -
- -
- - - - ' . $wf->getNodeDescriptions($as['flow_code']) . ' -
'; - $tmp_code = $as['flow_code']; - ?> -
"> -
- - - - -   - " . $as['position_name'] . " "; ?> - - - - - - -   - 申請人 "; ?> - 退回"; ?> - 會簽"; ?> - - - - 簽核於: - - - -
-
- -
- -
- -
- - - -
-
- -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/wms/cont/review_apply_form.php b/wms/cont/review_apply_form.php deleted file mode 100644 index aac97e74..00000000 --- a/wms/cont/review_apply_form.php +++ /dev/null @@ -1,507 +0,0 @@ -user_id; -$apply_key = 'MB23060422'; -require_once './FormHelper.php'; -require_once './wf_common.php'; -#系统ID -$system_id = 'con'; -#流程ID -$flow_id = 'con01'; -#表单号 $form_id; -$form_id = ""; - -$wf = new WorkFlow($system_id, $flow_id, $form_id); -$wf->initWorkFlow($user_id); - -$form_key = $wf->flowContext->getFormKey(); - -#获取签核意见 -$assign_opinions = Assign::get_records($form_key); - -#会签部门意见 -$subflow_assign_opinions = SubflowManager::getCounterSignComments($form_key); - -$flowName = $wf->getFlowName(); -$assigner = $wf->getAssignerList(); -$assign_status = $wf->getAssignStatus($assigner); -$if_show_assign = true; - -#是否可会签 -$isSplitable = $wf->isSplitable(); - -//表单数据 -#客户表 -#1.电梯品牌选项 -$sql = "select code_name value ,content label from code where field_name='elevator_brand' order by convert(content using gbk) asc "; -$elevator_brand_opt = DB::result($sql); -#2.保养方式 -$sql = "select code_name value ,content label from code where field_name='maintain_kind'"; -$maintain_kind_opt = DB::result($sql); -#3.电梯类型 -$sql = "select code_name value ,content label from code where field_name='elevator_kind'"; -$elevator_kind_opt = DB::result($sql); -#4.付款方式 -$sql = "select code_name value ,content label from code where field_name='payment_kind'"; -$payment_kind_opt = DB::result($sql); -#5.合约性质 -$sql = "select code_name value ,content label from code where field_name='hope_contract_customer_kind'"; -$contract_kind_opt = DB::result($sql); - -#抓取有 - -$where = " and apply_key='$apply_key'"; -$sql = "SELECT * FROM con_maintance_examine_apply where 1=1 $where "; -$res_cmea = DB::result($sql); -$cmea = empty($res_cmea) ? [] : $res_cmea[0]; -#写入 con_maintance_review_apply -#获取评审单号 -//$cmea['payment_kind']; //付款方式 -//月付 12; 季付 三月一次;半年付 6个月一次, 年付 12个月 -// -$insert_data = [ - 'apply_key' => $apply_key, - 'vol_no' => $cmea['vol_no'], - 'form_key' => $cmea, - 'address' => $cmea['address'], - 'case_name' => $cmea['case_name'], - 'num' => $cmea['num'], - 'brand' => $cmea['brand'], - 'customer' => $hope_contract['customer'], - 'salesman' => $hope_contract['salesman'], - 'progress_remark' => $hope_contract['progress_remark'], - 'platform_company' => empty(trim($hope_contract['common_platform_company'])) ? $hope_contract['sales_platform_company'] : $hope_contract['common_platform_company'], - 'platforom_company_tel' => empty(trim($hope_contract['common_platform_tel'])) ? $hope_contract['sales_platform_tel'] : $hope_contract['common_platform_tel'] - -]; -//var_dump($insert_data); -DB::insert_table('con_maintance_examine_apply', $insert_data); -// $ins_sql="INSERT INTO `adm824727563_db`.`hope_contract_customer` (`vol_no`, `customer_kind`, `num`, `case_name`, `customer`, -// `salesman`, `address`, `lm_name`, `lm_tel`, `pre_order_date`, `order_rate`, `visit_date`, `progress_remark`, `common_platform_lm`, `common_platform_tel`, -// `common_platform_company`, `sales_platform_lm`, `sales_platform_tel`, `sales_platform_company`, `is_strategic_customer`, -// `strategic_customer`, `brand`, `partya_end_date`, `created_at`, `creator`, `updated_at`) VALUES ('Q2305047', '1', '47', '辰富佳苑', '上海新桃源物业管理有限公司', 'P0053', '松江广富林路3939弄', '周总', '13482376166', '2023-06-30 00:00:00', '中', '2023-05-23 18:13:05', '该物业为国有企业,本次 拜访物业沈经理引荐周总。经过与周总交流要求我司进行投标,今天进公司注册云采购账号,等公示后进一步了解如何投标再与周总会面细谈。', NULL, NULL, NULL, NULL, NULL, NULL, 'N', NULL, '永大', '2023-06-30 00:00:00', '2023-05-25 10:15:31', 'P0053', '2023-05-29 14:22:35'); -// "; -$table = 'con_maintance_examine_apply'; -#可编辑的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "评审单号", "value" => "$apply_key", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷号", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - //'form_key' => ['label' => "表单号", "value" => "", "tag" => 'text', 'attr'=>['class' => 'form-control form-control-sm' ]], - 'address' => ['label' => "现场地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "现场名称", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "电梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'num' => ['label' => "电梯台数", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "营业员", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保养方式", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt], - 'contract_begin_date' => ['label' => "合约期限开始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "合约期限结束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'elevator_kind' => ['label' => "电梯类型", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], - 'contract_kind' => ['label' => "合约性质", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt], - 'platform_company' => ['label' => "加盟公司名称", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - 'platforom_company_tel' => ['label' => "加盟公司电话", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - 'stand_price' => ['label' => "标准价格(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'contract_price' => ['label' => "合约报价(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'sold_price' => ['label' => "合约成交价(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - 'commission_expense' => ['label' => "加盟分成费(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'management_expense' => ['label' => "我司管理费(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'annual_survey_expense' => ['label' => "年检费用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'date form-control form-control-sm ']], - 'service_expense' => ['label' => "服务费", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => ' form-control form-control-sm ']], - // 'postgress_remark' => ['label' => "洽商进度", "value" => "", "tag" => 'text', 'attr'=>['class' => 'form-control form-control-sm' ]] - -]; -$vol_no = empty($_GET['vol_no']) ? "" : $_GET['vol_no']; -$where = " and apply_key='$apply_key'"; - -$sql = "SELECT * FROM $table where 1=1 $where ORDER BY vol_no"; -$data = []; -$data = DB::result($sql); - -#电梯详细资料 -$con_maintance_examine_clear_columm = [ - 'register_code' => ['label' => "电梯注册代码", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'class' => 'form-control form-control-sm']], - 'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'spec' => ['label' => "规格型号", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm']], - 'weight' => ['label' => "载重(KG)", "value" => "", "tag" => 'number', 'attr' => ['name' => 'weight[]', 'class' => 'form-control form-control-sm']], - 'speed' => ['label' => "速度(m/s)", "value" => "", "tag" => 'number', 'attr' => ['name' => 'speed[]', 'class' => 'form-control form-control-sm']], - 'stop' => ['label' => "停数", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', 'class' => 'form-control form-control-sm']], - 'elevator_num' => ['label' => "台数", "value" => "", "tag" => 'number', 'attr' => ['name' => 'brand_num[]', 'class' => 'form-control form-control-sm']], - 'useful_years' => ['label' => "使用年限", "value" => "", "tag" => 'number', 'attr' => ['name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], - 'last_check_date' => ['label' => "最近一次年检日期", "value" => "", "tag" => 'date', 'attr' => ['name' => 'last_check_date[]', 'colspan' => 2, 'type' => 'date', 'class' => 'form-control form-control-sm']], - 'speed_governors_check_expense' => ['label' => "限速器校验费", "value" => "", "tag" => 'number', 'attr' => ['name' => 'speed_governors_check_expense[]', 'class' => 'form-control form-control-sm']], -]; -$con_maintance_examine_clear = DB::result("SELECT " . implode(',', array_keys($con_maintance_examine_clear_columm)) . - " FROM con_maintance_examine_clear where 1=1 and apply_key='$apply_key' and cmstatus='Y' "); -$i = 0; -$cmecRow = " "; -foreach ($con_maintance_examine_clear_columm as $key => $val) { - $fieldVal = ""; - $_input = $val['tag'] == 'select' ? - FormHelper::select('', $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - // : ""; - $cmecRow .= "
$_input"; -} -$cmecRow .= ""; -function base_url($url) -{ - return "https://web.platform-cn.com/static/" . $url; -} -function get_sequnece_no($seq_name = '', $p_yyyymm = '') -{ - - if (empty($p_yyyymm) || empty($seq_name)) return null; - #当前年月 - //echo "select yyyymm from sequence where seq_name='$seq_name' "; - list($yyyymm, $prefix) = DB::fields("select yyyymm ,prefix from sequence where seq_name='$seq_name' "); - if ($p_yyyymm != $yyyymm) { - DB::query("update sequence set yyyymm='$p_yyyymm' , current_val='10000' where seq_name='$seq_name' "); - } - // echo "SELECT concat( $prefix,,substring(nextval('$seq_name'),2)) seq_no "; - list($seq_no) = DB::fields("SELECT concat( '$prefix','$p_yyyymm',substring(nextval('$seq_name'),2)) seq_no "); - - - return $seq_no; -} - - -?> - - - - - - - <?php echo $flowName; ?> - - - - - - - - - - - - - - - - - - - - -
- 流程: - - - -
- -
- -
-
- - - - -
-
-
-

保養合約價格審核單

-
-
- -
-
- 合约信息 -
-
- - "; - foreach ($editableColumn as $key => $val) { - $j = (($i++) % 4); - $fieldVal = empty($data) ? "" : $data[0][$key]; - - $_input = $val['tag'] == 'select' ? - FormHelper::select("$key", $val['options'], $fieldVal, $val['attr']) - : FormHelper::text("$key", $fieldVal, $val['attr'], $val['tag']); - //""; - if ($i != 1 && $j == 0) { - echo " -
-
- "; - } - echo "
- " . $val['label'] . " -
-
- $_input -
- "; - } - echo "
"; - - ?> - -
-
- 洽商进度 -
-
- - -
-
-
-
- 电梯详细资料 -
- - - - - - - - empty($val['attr']['colspan']) ? 1 : $val['attr']['colspan']], $val['label']); - //echo ""; - } - echo ""; - ?> - - - - - $val) { - $cmecRow = " "; - foreach ($con_maintance_examine_clear_columm as $col => $col_def) { - $fieldVal = empty($val) ? "" : $val[$col]; - $_input = $col_def['tag'] == 'select' ? - FormHelper::select($col, $col_def['options'], $fieldVal, $col_def['attr']) - : FormHelper::text($col, $fieldVal, $col_def['attr'], $col_def['tag']); - $cmecRow .= ""; - } - echo $cmecRow . ""; - } - ?> - -
" . $val['label'] . "操作
$_input
- -
- -
-
- 签核操作 -
-
- -
-
-
-
- 签核状态 -
-
- -
- -
- 下位签核者 -
-
- - -
-
- -
- -
-
-
- -
-
-
- - -
- -
- - - - ' . $wf->getNodeDescriptions($as['flow_code']) . ' -
'; - $tmp_code = $as['flow_code']; - ?> -
"> -
- - - - -   - " . $as['position_name'] . " "; ?> - - - - - - -   - 申请人 "; ?> - 退回"; ?> - 会签"; ?> - - - - 签核于: - - - -
-
- -
- -
- -
- - - -
-
- -
-
-
- - -
- - - - - - \ No newline at end of file diff --git a/wms/cont/sign_form.php b/wms/cont/sign_form.php deleted file mode 100644 index 428e3a88..00000000 --- a/wms/cont/sign_form.php +++ /dev/null @@ -1,577 +0,0 @@ -vol_no; -require_once './FormHelper.php'; -require_once '../cont/MICalculator.php'; - -require_once './wf_common.php'; -$flow = new Flow($form_key); -// 當前節點簽核開始 - -$wf = new WorkFlow($flow->system_id, $flow->flow_id, $flow->form_id, $form_key); -#獲取簽核意見 -$assign_opinions = Assign::get_records($form_key); -$flowName = $wf->getFlowName(); - -//表單數據 -#客戶表 -#1.電梯品牌選項 -$sql = "select code_name value ,content label from code where field_name='elevator_brand'"; -$elevator_brand_opt = DB::result($sql); -#2.保養方式 -$sql = "select code_name value ,content label from code where field_name='maintain_kind'"; -$maintain_kind_opt = DB::result($sql); -#3.電梯類型 -$sql = "select code_name value ,content label from code where field_name='elevator_kind'"; -$elevator_kind_opt = DB::result($sql); -#4.付款方式 -$sql = "select code_name value ,content label from code where field_name='payment_kind'"; -$payment_kind_opt = DB::result($sql); -#5.契約性質 -$sql = "select code_name value ,content label from code where field_name='contract_kind'"; -$contract_kind_opt = DB::result($sql); -#6.是否贈送M1 -$is_m1_bundle_opt = [ - ['label' => '是', 'value' => 'Y'], - ['label' => '否', 'value' => 'N'] -]; -#7.機種 -$sql = "select code_name value ,content label from code where field_name='fp_kind'"; -$fp_kind_opt = DB::result($sql); -$table = 'con_maintance_examine_apply'; -#可編輯的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "評審單號", "value" => "$apply_key", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - 'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'num' => ['label' => "數量", "value" => "", "tag" => 'number', 'attr' => ['required', 'min=1', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $maintain_kind_opt], - 'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm'], 'options' => $contract_kind_opt], - 'introducer' => ['label' => "介紹人", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - - 'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - -]; -$where = " and form_key='$form_key'"; - -$sql = "SELECT " . implode(',', array_keys($editableColumn)) . - " ,progress_remark FROM $table where 1=1 $where ORDER BY apply_key"; - -$data = []; -list($data) = DB::result($sql); - -#電梯詳細資料 -$con_maintance_examine_clear_columm = [ - 'register_code' => ['label' => "電梯註冊代碼", "value" => "", "tag" => 'text', 'attr' => ['colspan' => 2, 'name' => 'register_code[]', 'class' => 'form-control form-control-sm']], - //'elevator_brand' => ['label' => "品牌", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'elevator_brand[]', 'class' => 'form-control form-control-sm'], 'options' => $elevator_brand_opt], - 'elevator_kind' => ['label' => "電梯類型", "value" => "", "tag" => 'select', 'attr' => ['name' => 'elevator_kind[]', 'required', 'colspan' => 2, 'class' => 'form-control form-control-sm'], 'options' => $elevator_kind_opt], - 'spec' => ['label' => "規格型號", "value" => "", "tag" => 'select', 'attr' => ['colspan' => 2, 'name' => 'spec[]', 'class' => 'form-control form-control-sm'], 'options' => $fp_kind_opt], - 'weight' => ['label' => "載重(KG)", "value" => "", "tag" => 'number', 'attr' => ['name' => 'weight[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'speed' => ['label' => "速度(m/min)", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed[]', 'min=0', 'required', 'class' => 'form-control form-control-sm']], - //'stop' => ['label' => "停數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'stop[]', 'class' => 'form-control form-control-sm']], - 'floors' => ['label' => "層數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'floors[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'persons' => ['label' => "人乘", "value" => "", "tag" => 'number', 'attr' => ['name' => 'persons[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - - 'maintain_times' => ['label' => "保養次數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_times[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_months[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "value" => "", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - - - // 'elevator_num' => ['label' => "臺數", "value" => "", "tag" => 'number', 'attr' => ['name' => 'brand_num[]', 'class' => 'form-control form-control-sm']], - 'useful_years' => ['label' => "竣工檢查年度", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'required', 'name' => 'useful_years[]', 'class' => 'form-control form-control-sm']], - 'last_check_date' => ['label' => "上次年檢日期", "value" => "", "tag" => 'date', 'attr' => ['required', 'name' => 'last_check_date[]', 'colspan' => 2, 'type' => 'date', 'class' => 'form-control form-control-sm']], - //'speed_governors_check_expense' => ['label' => "限速器校驗費", "value" => "", "tag" => 'number', 'attr' => ['colspan' => 2, 'name' => 'speed_governors_check_expense[]', 'class' => 'form-control form-control-sm']], - // 'service_expense' => ['label' => "服務費", "value" => "", "tag" => 'text', 'attr' => ['required', 'name' => 'service_expense[]', 'class' => ' form-control form-control-sm ']], - // 'commission_expense' => ['label' => "分成費(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'commission_expense[]', 'class' => 'form-control form-control-sm']], - // 'management_expense' => ['label' => "管理費(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'management_expense[]', 'class' => 'form-control form-control-sm']], - //'annual_survey_expense' => ['label' => "年檢費用(元)", "value" => "", "tag" => 'number', 'attr' => ['required', 'name' => 'annual_survey_expense[]', 'colspan' => 2, 'class' => 'date form-control form-control-sm ']], - //'service_expense' => ['label' => "服務費", "value" => "", "tag" => 'text', 'attr' => ['required', 'name' => 'service_expense[]', 'class' => ' form-control form-control-sm ']], - 'maintain_times' => ['label' => "保養次數", "tag" => 'number', 'attr' => ['name' => 'maintain_times[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_months' => ['label' => "保養月數", "tag" => 'number', 'attr' => ['name' => 'maintain_months[]', "value" => "12", 'min=12', 'required', 'class' => 'form-control form-control-sm']], - 'maintain_period' => ['label' => "保養周期", "tag" => 'number', 'attr' => ['name' => 'maintain_period[]', "value" => "1", 'min=1', 'required', 'class' => 'form-control form-control-sm']], - 'is_m1_bundle' => ['label' => "贈送M1", "value" => "", "tag" => 'select', 'attr' => ['name' => 'is_m1_bundle[]', 'required', 'class' => 'form-control form-control-sm'], 'options' => $is_m1_bundle_opt], - 'stand_price' => ['label' => "標準價格(元/月)", "value" => "", "tag" => 'text', 'attr' => ['required', "readonly", 'colspan' => 2, 'name' => 'stand_price[]', 'class' => 'form-control form-control-sm']], - 'contract_price' => ['label' => "契約報價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'contract_price[]', 'class' => 'form-control form-control-sm']], - 'sold_price' => ['label' => "契約成交價(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']], - - - 'sold_price' => ['label' => "契約成交價C(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'sold_price[]', 'class' => 'form-control form-control-sm']], - 'mi_cost' => ['label' => "標準成本D(元/月)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'mi_cost[]', 'class' => 'form-control form-control-sm']], - 'discount' => ['label' => "折扣率E(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'mi_cost_rate[]', 'class' => 'form-control form-control-sm']], - 'gross_profit' => ['label' => "毛利率F(%)", "value" => "", "tag" => 'number', 'attr' => ['required', 'colspan' => 2, 'name' => 'gross_profit[]', 'class' => 'form-control form-control-sm']], - -]; -$con_maintance_examine_clear = DB::result("SELECT register_code, - f_return_content('elevator_brand',elevator_brand) elevator_brand, - f_return_content('maintain_elevator_kind',elevator_kind) elevator_kind, - elevator_kind con_elevator_kind, - spec, - weight, - speed, - floors, - persons, - maintain_times, - maintain_months, - maintain_period, - is_m1_bundle, - - useful_years, - last_check_date, - speed_governors_check_expense, - service_expense, - - stand_price, - contract_price, - sold_price, - 0 mi_cost , - 0 discount, - 0 gross_profit - FROM - con_maintance_examine_clear - WHERE - 1 = 1 - AND apply_key='" . $data['apply_key'] . "' and cmstatus='Y'"); - -#總臺數 -$count = count($con_maintance_examine_clear); -$total_sold_price = 0; -#總成交價 -#總標準價格 -$total_stand_price = 0; -#總標準成本 -foreach ($con_maintance_examine_clear as $val) { - $total_sold_price += $val['sold_price']; - $total_stand_price += $val['stand_price']; -} -$total_discount_rate = $total_sold_price == 0 ? 0 - : (100 * round($total_sold_price / $total_stand_price, 4)) . "%"; - -$wf->setFormData(['discount' => substr($total_discount_rate, 0, -1)]); -$assigner = $wf->getAssignerList(); -$assign_status = $wf->getAssignStatus($assigner); - - -function base_url($url) -{ - return "https://www.masada.com.tw/static/" . $url; -} -function get_sequnece_no($seq_name = '', $p_yyyymm = '') -{ - - if (empty($p_yyyymm) || empty($seq_name)) return null; - #當前年月 - //echo "select yyyymm from sequence where seq_name='$seq_name' "; - list($yyyymm, $prefix) = DB::fields("select yyyymm ,prefix from sequence where seq_name='$seq_name' "); - if ($p_yyyymm != $yyyymm) { - DB::query("update sequence set yyyymm='$p_yyyymm' , current_val='10000' where seq_name='$seq_name' "); - } - // echo "SELECT concat( $prefix,,substring(nextval('$seq_name'),2)) seq_no "; - list($seq_no) = DB::fields("SELECT concat( '$prefix','$p_yyyymm',substring(nextval('$seq_name'),2)) seq_no "); - - - return $seq_no; -} - - -?> - - - - - - - - - - - - - - - - - - - - - - -
- 流程: - - - -
- -
- -
-
- - - ' /> - - - - -
-
-
-

保養契約價格審核單

-
-
- -
-
- 契約信息 -
-
- - "; - foreach ($editableColumn as $key => $val) { - $j = (($i++) % 4); - $fieldVal = empty($data) ? "" : $data[$key]; - - $_input = $val['tag'] == 'select' ? - FormHelper::select("$key", $val['options'], $fieldVal, $val['attr']) : - FormHelper::tag("label", $val['attr'], $fieldVal); - - //""; - if ($i != 1 && $j == 0) { - echo " -
-
- "; - } - echo "
- " . $val['label'] . " -
-
- $_input -
- "; - } - echo "
"; - - ?> - -
-
- 洽商進度 -
-
- - -
-
-
-
- 電梯詳細資料 -
- - - - - - empty($val['attr']['colspan']) - ? 1 : $val['attr']['colspan']], $val['label']); - - if ((++$j % 14) == 0) { - // if ($j == 12) echo ""; - - - echo ""; - } - } - - ?> - - - - - $val) { - $j = 0; - - $cmecRow = " "; - - foreach ($con_maintance_examine_clear_columm as $col => $col_def) { - $fieldVal = empty($val) ? "" : $val[$col]; - if ($col == 'mi_cost') { - $param = [ - 'elevator_type' => $val['con_elevator_kind'], - 'floors' => $val['floors'], - 'speed' => $val['speed'], - 'persons' => $val['persons'], - 'weight' => $val['weight'], - 'maintain_times' => $val['maintain_times'], - 'maintain_months' => $val['maintain_months'], - 'maintain_kind' => $data['maintain_kind'], - 'maintain_period' => $val['maintain_period'], - 'is_m1_bundle' => $val['is_m1_bundle'], - ]; - $mic = new MICalculator(); - $res = $mic->cal($param); - #MI報價 - $con_maintance_examine_clear[$key]['mi_cost'] = $fieldVal = ($res['status'] - == 'ok' ? $res['price'] : $res['message']); - $con_maintance_examine_clear[$key]['gross_profit'] = $val['gross_profit'] = "/"; //$fieldVal==0?0: (round(($val['sold_price'] - $val['mi_cost']) / $fieldVal, 2) * 100) . "%" - #扣率 - $val['discount'] = (100 * round($val['sold_price'] / $val['stand_price'], 4)) . "%"; - } - - $_input = FormHelper::tag("label", ['colspan' => empty($col_def['attr']['colspan']) ? 1 - : $col_def['attr']['colspan']], $fieldVal); - $cmecRow .= ""; - - $cmecRow = (++$j % 14 == 0) ? $cmecRow . "" : $cmecRow; - } - $tr_class = $tr_class == 'odd' ? "even" : "odd"; - echo $cmecRow . ""; - } - ?> - - - - - - - -
操作
$_input
-
- - - - - -
-
- -
- -
-
- 簽核意見 -
- -
- -
-
-
-
- 簽核狀態 -
-
- -
- -
- 下位簽核者 -
-
- - -
-
- -
- -
-
-
- -
-
-
- - -
- -
- - - - ' . $wf->getNodeDescriptions($as['flow_code']) . ' -
'; - $tmp_code = $as['flow_code']; - ?> -
"> -
- - - - -   - " . $as['position_name'] . " "; ?> - - - - - - -   - 申請人 "; ?> - 退回"; ?> - 會簽"; ?> - - - - 簽核於: - - - -
-
- -
- -
- -
- - - -
-
- -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/wms/cont/sign_list.php b/wms/cont/sign_list.php deleted file mode 100644 index d31780b3..00000000 --- a/wms/cont/sign_list.php +++ /dev/null @@ -1,225 +0,0 @@ -'; - // print_r($sql_get); - // echo ''; - - $result = mysqli_query($link, $sql_get); - if ($result == false) { - die(mysqli_error($link)); - } - $res_get = mysqli_fetch_all(mysqli_query($link, $sql_get), MYSQLI_ASSOC); - - - foreach ($res_get as $key => $data) { - // 結案隱藏 - if ($data['flow_code'] !== 'Z') { - $test = $data['form_key']; - // $sql = "SELECT mid FROM pricereview_sign WHERE id = $test"; - // $result = mysqli_fetch_all(mysqli_query($link, $sql), MYSQLI_ASSOC); - // echo '
';
-            // print_r($result);
-            // echo '
'; - $id[] = $test; - } - } - $inClause = implode(',', $id); -} - - -#可編輯的列 -$editableColumn = [ - 'apply_key' => [ - 'label' => "評審單號", "value" => "", "tag" => 'text', - 'attr' => [ - 'readonly=true ', - 'class' => 'form-control form-control-sm' - ] - ], - 'vol_no' => ['label' => "卷號", "value" => "", "tag" => 'text', 'attr' => ['readonly=true ', 'class' => 'form-control form-control-sm']], - 'address' => ['label' => "現場地址", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'case_name' => ['label' => "現場名稱", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'brand' => ['label' => "電梯品牌", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'num' => ['label' => "電梯臺數", "value" => "", "tag" => 'number', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'salesman' => ['label' => "營業員", "value" => "", "tag" => 'text', 'attr' => ['required', 'class' => 'form-control form-control-sm']], - 'maintain_kind' => ['label' => "保養方式", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm']], - 'contract_begin_date' => ['label' => "契約期限開始", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_end_date' => ['label' => "契約期限結束", "value" => "", "tag" => 'date', 'attr' => ['required', 'class' => 'date form-control form-control-sm']], - 'contract_kind' => ['label' => "契約性質", "value" => "", "tag" => 'select', 'attr' => ['class' => 'form-control form-control-sm']], - 'platform_company' => ['label' => "加盟公司名稱", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - 'platforom_company_tel' => ['label' => "加盟公司電話", "value" => "", "tag" => 'text', 'attr' => ['class' => 'form-control form-control-sm']], - //'payment_kind' => ['label' => "付款方式", "value" => "", "tag" => 'select', 'attr' => ['required', 'class' => 'form-control form-control-sm'], 'options' => $payment_kind_opt], - -]; -// 設置一個空陣列來放資料 -$data = array(); - -$salesman = empty($_GET['salesman']) ? $user_id : $_GET['salesman']; -//$where = " and salesman like '%'"; -$where = " and salesman = '$salesman'"; - -// 可瀏覽全部資料的部門 -$depart_arr = ["220"]; -$sql = "select department_id from account where accountid = '$user_id'"; -$res = mysqli_query($link, $sql); -$row = mysqli_fetch_row($res); -$user_department_id = $row[0]; -mysqli_free_result($res); -if (in_array($user_department_id, $depart_arr) || $user_id == "M0008" || $user_id == "M0012" || $user_id == "M0006" || $user_id == "M0189" || $user_id == "TEST01" || $user_id == "TEST02" || $user_id == "TEST03" || $user_id == "TEST04") $where = ""; - -// 電梯廠牌 -$elevator_brand_arr = []; -$sql = "select code_name ,content from code where field_name='elevator_brand'"; -$res = mysqli_query($link, $sql); -while ($row = mysqli_fetch_row($res)) { - $elevator_brand_arr[$row[0]] = $row[1]; -} -mysqli_free_result($res); -if (!empty($res_get)) { - $sql = "SELECT - apply_key, - vol_no, - address, - case_name, - brand , - num , - f_return_name(salesman) salesman, - f_return_content('maintain_kind',maintain_kind ) maintain_kind, - date_format(contract_begin_date,'%Y/%m/%d') contract_begin_date, - date_format(contract_end_date,'%Y/%m/%d') contract_end_date , - f_return_content('contract_kind',contract_kind ) contract_kind, - platform_company, - platforom_company_tel, - form_key, - - f_return_content('payment_kind',payment_kind ) payment_kind FROM $table WHERE form_key IN ($inClause) "; -} else { - $sql = "SELECT - apply_key, - vol_no, - address, - case_name, - brand , - num , - f_return_name(salesman) salesman, - f_return_content('maintain_kind',maintain_kind ) maintain_kind, - date_format(contract_begin_date,'%Y/%m/%d') contract_begin_date, - date_format(contract_end_date,'%Y/%m/%d') contract_end_date , - f_return_content('contract_kind',contract_kind ) contract_kind, - platform_company, - platforom_company_tel, - form_key, - - f_return_content('payment_kind',payment_kind ) payment_kind FROM $table - where 1=1 $where ORDER BY vol_no"; -} -// echo $sql; -$data = mysqli_query($link, $sql); -// echo '
';
-// print_r($data);
-// echo '
'; -?> - -Please fill up the required field!

"; - } else { - header("Location:repair-index.php"); - } - } - -?> - - -
-
- - - - - - - - -
-

(契約)價審單查詢

-
- - - "; - foreach ($editableColumn as $key => $val) { - - echo ""; - } - echo ""; - // echo ""; - echo ""; - ?> - - - - - $val) { - if ($key == 'apply_key') { - echo ""; - } elseif ($key == 'brand') { - echo ""; - } else { - echo ""; - } - } - //list($signer)=DB::fields("); - //echo " select f_return_name(current_assigner) signer from subflow where form_key='". $row['form_key'] ."'"; ". (is_array($row['form_key'])?'': $row['form_key']) ." - list($signer) = mysqli_fetch_array(mysqli_query($link, "select max(f_return_name(current_assigner) ) signer from subflow where form_key='" . $row['form_key'] . "'")); - - echo ""; - - ?> - - - - -
" . $val['label'] . "是否結案刪除
" . $row[$key] . "" . (!empty($row[$key]) ? $elevator_brand_arr[$row[$key]] : "") . "" . $row[$key] . "" . (empty($signer) ? "結案" : "N") . "
-
- -There is no record!"; -endif; - -#代表結束連線 -mysqli_close($link); - -include "../footer.php"; - -?> \ No newline at end of file diff --git a/wms/cont/submit.php b/wms/cont/submit.php deleted file mode 100644 index ed2766af..00000000 --- a/wms/cont/submit.php +++ /dev/null @@ -1,79 +0,0 @@ -"; - echo "alert('請確認電梯資料或未選擇下位簽核者!');"; - echo "history.go(-1);"; - echo ""; - exit; -} - -//更新表单ConMaintanceExamineApplyModel -$cmea = new ConMaintanceExamineApplyModel(); -$apply_key = $request['apply_key']; -$cmea->update(['apply_key', $apply_key], array_diff_key($request, ['apply_key' => ''])); -//更新电梯列表 -if (!empty($request["reg_del"])) { - $register_code_del_arr = explode(",", rtrim($request["reg_del"], ",")); - foreach ($register_code_del_arr as $val) { - $sql = "UPDATE con_maintance_examine_clear SET cmstatus = 'D' WHERE apply_key = '$apply_key' AND register_code = '$val' AND cmstatus <> 'D'"; - DB::query($sql); - } -} -if (!empty($request['register_code']) && count($request['register_code']) > 0) { - $cmec = new ConMaintanceExamineClearModel(); - for ($i = 0; $i < count($request['register_code']); $i++) { - $data = [ - 'apply_key' => $request['apply_key'] - ]; - $cols = array_diff($cmec->fillable, ['apply_key']); - foreach ($cols as $col) { - $data[$col] = empty($request[$col][$i]) ? '' : $request[$col][$i]; - if ($col == "annual_survey_expense") $data[$col] = '0.00'; - } - $cmec->create($data); - } -} - -//var_dump($_POST); -//var_dump($_GET); - -if ($tosign) { - #流程开始,var_dump($request); - $flow = new Flow($request['form_key']); - // 当前节点签核开始 - $wf = new WorkFlow($flow->system_id, $flow->flow_id, $flow->form_id, $request['form_key']); - $wf->setFormData($request); - $wf->submit($request['next_users'], $request['assign_status'], $request['assign_opinion']); - //当前节点签核结束 - $responses['flowName'] = $wf->getFlowName(); - $responses['form_key'] = $request['form_key']; - //var_dump($request); - #結案發通知給營業員 - if ($request['assign_status'] == 'F4') { - - list($salesman, $case_name) = DB::fields("select salesman ,case_name from con_maintance_examine_apply where apply_key='" . $apply_key . "' "); - $ins_notice_sql = "INSERT INTO `notice` ( `kind`,`title`, `content`, `permission`) - VALUES ( '1', '契約價審單結案通知(" . $case_name . ")', '契約價審單結案通知(" . $case_name . ")', ' $salesman')"; - DB::query($ins_notice_sql); - // echo $ins_notice_sql; - } -} -echo ""; diff --git a/wms/cont/success.php b/wms/cont/success.php deleted file mode 100644 index 96c2a2f2..00000000 --- a/wms/cont/success.php +++ /dev/null @@ -1 +0,0 @@ -

成功提交返回待签

\ No newline at end of file diff --git a/wms/cont/t.php b/wms/cont/t.php deleted file mode 100644 index 180a88c8..00000000 --- a/wms/cont/t.php +++ /dev/null @@ -1,84 +0,0 @@ - 'A', - 'floors' => 7, - 'speed' => 1, - 'persons' => 6, - 'weight' => 1000, - 'maintain_times' => 1, - 'maintain_months' => 12, - 'maintain_kind' => 2, - 'maintain_period' => 1, //默认为1月1次, 2是为2月一次 - 'is_m1_bundle' => 'N', -]; - -//货梯 -$param = [ - - 'elevator_type' => 'B', - 'floors' => 7, - 'speed' => 1, - 'persons' => 6, - 'weight' => 1000, - 'maintain_times' => 1, - 'maintain_months' => 12, - 'maintain_kind' => 2, - 'maintain_period' => 1, //默认为1月1次, 2是为2月一次 - 'is_m1_bundle' => 'N', -]; - - -//病床梯 -$param = [ - - 'elevator_type' => 'C', - 'floors' => 28, - 'speed' => 1, - 'persons' => 6, - 'weight' => 1000, - 'maintain_times' => 2, //病床梯一月2次保养 - 'maintain_months' => 12, - 'maintain_kind' => 2, - 'maintain_period' => 1, //默认为1月1次, 2是为2月一次 - 'is_m1_bundle' => 'N', -]; - -//无机房 -$param = [ - 'elevator_type' => 'D', - 'floors' => 3, - 'speed' => 1, - 'persons' => 6, - 'weight' => 1000, - 'maintain_times' => 1, //病床梯一月2次保养 - 'maintain_months' => 12, - 'maintain_kind' => 3, - 'maintain_period' => 1, //默认为1月1次, 2是为2月一次 - 'is_m1_bundle' => 'N', -]; - - -//家用梯 -$param = [ - 'elevator_type' => 'E', - 'floors' => 3, - 'speed' => 1, - 'persons' => 6, - 'weight' => 1000, - 'maintain_times' => 1, //病床梯一月2次保养 - 'maintain_months' => 60, - 'maintain_kind' => 2, - 'maintain_period' => 1, //默认为1月1次, 2是为2月一次 - 'is_m1_bundle' => 'Y', -]; - -$mic = new MSCalculator(); -$price = $mic->cal($_GET); -echo json_encode($price); diff --git a/wms/cont/test.php b/wms/cont/test.php deleted file mode 100644 index 55f9873a..00000000 --- a/wms/cont/test.php +++ /dev/null @@ -1,174 +0,0 @@ - $regions['content'], - #当月件数 - 'd_item_cnt' => 0, - #当月台数 - 'd_mfg_cnt' => 0, - #直销件数 - 'z_item_cnt' => 0, - #直销台数 - 'z_mfg_cnt' => 0, - #平台件数 - 'p_item_cnt' => 0, - #平台台数 - 'p_mfg_cnt' => 0, - #台数合计 - 'mfg_total' => 0, - #件数合计 - 'item_total' => 0, - #营业人数 - 'persons' => 0, - #人均台数 - 'avg_mfg_total' => 0, - #人均件数 - 'avg_item_total' => 0, - ]; - #遍历大区下面所有分公司 - $res_branch = DB::result("select depart_no,depart_name from depart where regions='" . $regions['code_name'] . "' "); - foreach ($res_branch as $branch) { - #遍历分公司下面所有人 - $depart_data = []; - $res_salesman = DB::result("select employee_no,name from employee - where depart_no='" . $branch['depart_no'] . "' "); - $depart_data = [ - 'depart_name' => $branch['depart_name'], - - ]; - foreach ($res_salesman as $salesman) { - //当月预定成交台数 件数 - $d_item_cnt = $d_mfg_cnt = $z_item_cnt = $z_mfg_cnt = $p_item_cnt = $p_mfg_cnt = 0; - list($d_item_cnt, $d_mfg_cnt) = DB::fields("select count(vol_no) item_cnt ,sum(num) mfg_cnt - From hope_contract_customer where salesman='" . $salesman['employee_no'] . "' - and pre_order_date between DATE_FORMAT(concat('$yyyymm','01'),'%Y-%m-%d') - and LAST_DAY(STR_TO_DATE('$yyyymm', '%Y%m'))"); - // 直销 台数 件数 - list($z_item_cnt, $z_mfg_cnt) = DB::fields("select count(vol_no) z_item_cnt ,sum(num) - z_mfg_cnt From hope_contract_customer where salesman=''" . $salesman['employee_no'] . "' - and customer_kind='1'"); - // 平台 台数 件数 - list($p_item_cnt, $p_mfg_cnt) = DB::fields("select count(vol_no) p_item_cnt ,sum(num) - p_mfg_cnt From hope_contract_customer where salesman='" . $salesman['employee_no'] . "' - and customer_kind!='1' - "); - #当月件数 - $d_item_cnt = empty($d_item_cnt) ? 0 : $d_item_cnt; - #当月台数 - $d_mfg_cnt = empty($d_mfg_cnt) ? 0 : $d_mfg_cnt; - #直销件数 - $z_item_cnt = empty($z_item_cnt) ? 0 : $z_item_cnt; - #直销台数 - $z_mfg_cnt = empty($z_mfg_cnt) ? 0 : $z_mfg_cnt; - #平台件数 - $p_item_cnt = empty($p_item_cnt) ? 0 : $p_item_cnt; - #平台台数 - $p_mfg_cnt = empty($p_mfg_cnt) ? 0 : $p_mfg_cnt; - #台数合计 - $mfg_total = $z_mfg_cnt + $p_mfg_cnt; - #件数合计 - $item_total = $z_item_cnt + $p_item_cnt; - #营业人数 - $persons = 1; - #人均台数 - $avg_mfg_total = $z_mfg_cnt + $p_mfg_cnt; - #人均件数 - $avg_item_total = $z_item_cnt + $p_item_cnt; - - #部门数据 - $depart_data = [ - #当月件数 - 'd_item_cnt' => $depart_data['d_item_cnt'] + $d_item_cnt, - #当月台数 - 'd_mfg_cnt' => $depart_data['d_mfg_cnt'] + $d_mfg_cnt, - #直销件数 - 'z_item_cnt' => $depart_data['z_item_cnt'] + $z_item_cnt, - #直销台数 - 'z_mfg_cnt' => $depart_data['z_mfg_cnt'] + $z_mfg_cnt, - #平台件数 - 'p_item_cnt' => $depart_data['p_item_cnt'] + $p_item_cnt, - #平台台数 - 'p_mfg_cnt' => $depart_data['p_mfg_cnt'] + $p_mfg_cnt, - #台数合计 - 'mfg_total' => $depart_data['mfg_total'] + $mfg_total, - #件数合计 - 'item_total' => $depart_data['item_total'] + $item_total, - #营业人数 - 'persons' => $depart_data['persons'] + $persons, - #人均台数 $z_mfg_cnt + $p_mfg_cnt - 'avg_mfg_total' => ($depart_data['z_mfg_cnt'] + $z_mfg_cnt) / ($depart_data['persons'] + $persons), - #人均件数 - 'avg_item_total' => ($depart_data['z_item_cnt'] + $z_item_cnt) / ($depart_data['persons'] + $persons) - ]; - - - $region_data[$regions['code_name']] = [ - #当月件数 - 'd_item_cnt' => $region_data[$regions['code_name']]['d_item_cnt'] + $depart_data['d_item_cnt'], - #当月台数 - 'd_mfg_cnt' => $region_data[$regions['code_name']]['d_mfg_cnt'] + $depart_data['d_mfg_cnt'], - #直销件数 - 'z_item_cnt' => $region_data[$regions['code_name']]['z_item_cnt'] + $depart_data['z_item_cnt'], - #直销台数 - 'z_mfg_cnt' => $region_data[$regions['code_name']]['z_mfg_cnt'] + $depart_data['z_mfg_cnt'], - #平台件数 - 'p_item_cnt' => $region_data[$regions['code_name']]['p_item_cnt'] + $depart_data['p_item_cnt'], - #平台台数 - 'p_mfg_cnt' => $region_data[$regions['code_name']]['p_mfg_cnt'] + $depart_data['p_mfg_cnt'], - #台数合计 - 'mfg_total' => $region_data[$regions['code_name']]['mfg_total'] + $depart_data['mfg_total'], - #件数合计 - 'item_total' => $region_data[$regions['code_name']]['item_total'] + $depart_data['item_total'], - #营业人数 - 'persons' => $region_data[$regions['code_name']]['persons'] + $depart_data['persons'], - #人均台数 $z_mfg_cnt + $p_mfg_cnt - 'avg_mfg_total' => ($region_data[$regions['code_name']]['z_mfg_cnt']) - / ($region_data[$regions['persons']]), - #人均件数 - 'avg_item_total' => ($region_data[$regions['code_name']]['z_item_cnt']) - / ($region_data[$regions['persons']]), - - ]; - $depart_data['children'][] = [ - 'depart_name' => $salesman['name'], - #当月件数 - 'd_item_cnt' => $d_item_cnt, - #当月台数 - 'd_mfg_cnt' => $d_mfg_cnt, - #直销件数 - 'z_item_cnt' => $z_item_cnt, - #直销台数 - 'z_mfg_cnt' => $z_mfg_cnt, - #平台件数 - 'p_item_cnt' => $p_item_cnt, - #平台台数 - 'p_mfg_cnt' => $p_mfg_cnt, - #台数合计 - 'mfg_total' => $z_mfg_cnt + $p_mfg_cnt, - #件数合计 - 'item_total' => $z_item_cnt + $p_item_cnt, - #营业人数 - 'persons' => 1, - #人均台数 - 'avg_mfg_total' => $z_mfg_cnt + $p_mfg_cnt, - #人均件数 - 'avg_item_total' => $z_item_cnt + $p_item_cnt, - ]; - } - #大区资料 - if (empty($region_data[$regions['code_name']])) $region_data[$regions['code_name']] = []; - if ($region_data[$regions['code_name']]['children']) $region_data[$regions['code_name']]['children'] = []; - array_push($region_data[$regions['code_name']]['children'], $depart_data); - } - echo "
";
-    var_dump($region_data);
-}
diff --git a/wms/cont/wf_common.php b/wms/cont/wf_common.php
deleted file mode 100644
index 519d341f..00000000
--- a/wms/cont/wf_common.php
+++ /dev/null
@@ -1,20 +0,0 @@
- {
             repair_no: '',
             total_price: '',
             sign_date: '',
-            contract_status: ''
+            contract_status: '',
         },
         step: 1,
         isLoading: false,
@@ -874,16 +874,27 @@ const contract_edit = () => {
 
 }
 
-const bonsIndex = () => {
+const bonunsIndexTest = () => {
     return {
         data: {
             contract_no: 'Q23080067',
             client_type: '',
             facility_no: '',
-            bons_verson: '',
+            bonuns_verson: '',
             receiver: '',
             maintain_month: '',
-            maintain_price_toal: ''
+            maintain_price_total: '',
+            payDay: '',
+            bonusArr: [],
+            client_type: '',
+            manager: '',
+            bonus_type: '',
+            bouns_receiver: '',
+            bouns_amount: '',
+            dayDus: '',
+            bouns_regulation: '',
+            contract_manger: 'M0001',
+            user_id: user_id
         },
         step: 1,
         isLoading: false,
@@ -921,17 +932,29 @@ const bonsIndex = () => {
                 if (!this.customize) {
                     this.data.contract_no = res.data.BillNo;
                     this.data.facility_no = res.data.facility;
-                    this.data.bons_verson = res.data.bons_verson;
+                    this.data.bonuns_verson = res.data.bonuns_verson;
                     this.data.receiver = res.data.personId;
-                    this.data.maintain_price_toal = res.data.amount;
-                    this.data.bons_verson = 2;
+                    this.data.maintain_price_total = res.data.amount;
+                    this.data.bonuns_verson = 2;
                     this.data.maintain_month = res.data.maintain_month;
-                }
+                    this.data.payDay = res.data.payDay;
+                    axios.get('./api/getAccount.php?accountid=' + res.data.personId).then(res => {
+                        this.data.manager = res.data.manager;
+                    }).catch(err => {
+                        console.log(err);
+                    })
+                };
                 this.step = 2;
                 this.isLoading = false;
             }).catch(err => {
-
+                errorFn();
             })
+            // axios.get('./api/getAccount.php?accountid=' + this.data.receiver).then(res => {
+            //     console.log(res);
+            //     this.data.manager = res.result.manager;
+            // }).catch(err => {
+            //     console.log(err);
+            // })
         },
         preStepFn() {
             this.step = 1
@@ -940,10 +963,42 @@ const bonsIndex = () => {
             }
         },
         save() {
+            if (this.step == 3) {
+                const form = new FormData();
+                form.append('contract_no', this.data.contract_no);
+                form.append('facility_no', this.data.facility_no);
+                form.append('bonuns_verson', this.data.bonuns_verson);
+                form.append('user_id', this.data.user_id);
+                form.append('bonusArr', JSON.stringify(this.data.bonusArr));
+                axios.post('./api/insertBonus.php', form).then(res => {
+                    console.log(res.data);
+                }).catch(err => {
 
+                })
+            }
         },
         calBons() {
-            console.log('123');
+            console.log(this.step);
+            const form = new FormData();
+            form.append('contract_no', this.data.contract_no);
+            form.append('bonuns_verson', this.data.bonuns_verson);
+            form.append('client_type', this.data.client_type);
+            form.append('maintain_month', this.data.maintain_month);
+            form.append('maintain_price_total', this.data.maintain_price_total);
+            form.append('payDay', this.data.payDay);
+            form.append('receiver', this.data.receiver);
+            form.append('manager', this.data.manager);
+            axios.post('./api/postCalBouns.php', form).then(res => {
+                // console.log(res);
+                this.data.bonusArr = res.data.bonus_array;
+                console.log(this.data.bonusArr);
+                this.step = 3;
+                this.isLoading = false;
+            }).catch(err => {
+                console.log(err.response.data);
+                alert(err.response.data);
+                this.step = 2;
+            })
         },
         errorFn() {
             let msg = '';
@@ -954,4 +1009,13 @@ const bonsIndex = () => {
         },
 
     }
+}
+
+const bonunsIndex = () => {
+    return {
+        data: {
+
+        },
+        step: 1,
+    }
 }
\ No newline at end of file
diff --git a/wms/contract/option/option2.xlsx b/wms/contract/option/option2.xlsx
index 4cf1f87c1b00e5f426ba55fc3ad6a4c1328d4a39..8f9a57a52549bb1ca7be05b3cc3c2abb6d72e843 100644
GIT binary patch
delta 6009
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
VjvNzUA|(V60^olYPl5lD{0{>iG "ok", "err" => "", "errCode" => "");
-echo '123';
 /**
  * 表單列表
  */
diff --git a/wms/fun_global.php b/wms/fun_global.php
index cd4271b2..627fd90b 100644
--- a/wms/fun_global.php
+++ b/wms/fun_global.php
@@ -99,36 +99,37 @@ function pricereview_class($rate, $user_id, &$ret = [], $special_fee, $i = 0)
             return $ret;
             exit;
         } else {
-            // 若為第一層且使用者ID為區經理,直接訂好接下來的簽核人員並跳出。
-            if ($i == 0 && ($user_id == 'M0033' || $user_id == "M0137" || $user_id == 'M0029' || $user_id == 'M0054' || $user_id == "M0086")) {
-                $ret[1] = $user_id . ",,";
-                $ret[2] = "M0107,,<##>M0175,,";         // 業務部專員:M0175陳君敏、M0107許紓晴(第2關有多位審核人)
-                $ret[3] = "M0060,,";                    // 業務協理
-                if ($rate < 80 || $special_fee > 0) {
-                    $ret[4] = "M0006,,";    // 總經理
-                }
-                return $ret;
-                exit;
-            }
-            if ($row["manager"] != "M0060" && $row["manager"] != "M0006" && $row["manager"] != "M0008") {
-                // 新梯的部分 桃竹本該給陳家文,改為劉永德
-                if ($row["manager"] == 'M0029') {
-                    $ret[1] = "M0137,,";
-                    $i++;
-                    pricereview_class($rate, $row["manager"], $ret,  $special_fee, $i);
-                } else {
-                    $ret[1] = $row["manager"] . ",,";
-                    $i++;
-                    pricereview_class($rate, $row["manager"], $ret,  $special_fee, $i);
-                }
-            } else {
-                
-                $ret[2] = "M0107,,<##>M0175,,";         // 業務部專員:M0175陳君敏、M0107許紓晴(第2關有多位審核人)
-                $ret[3] = "M0060,,";                    // 業務協理
-                if ($rate < 80 || $special_fee > 0) {
-                    $ret[4] = "M0006,,";    // 總經理
-                }
+            // // 若為第一層且使用者ID為區經理,直接訂好接下來的簽核人員並跳出。
+            // if ($i == 0 && ($user_id == 'M0033' || $user_id == "M0137" || $user_id == 'M0029' || $user_id == 'M0054' || $user_id == "M0086")) {
+            //     $ret[1] = $user_id . ",,";
+            //     $ret[2] = "M0107,,<##>M0175,,";         // 業務部專員:M0175陳君敏、M0107許紓晴(第2關有多位審核人)
+            //     $ret[3] = "M0060,,";                    // 業務協理
+            //     if ($rate < 80 || $special_fee > 0) {
+            //         $ret[4] = "M0006,,";    // 總經理
+            //     }
+            //     return $ret;
+            //     exit;
+            // }
+            // if ($row["manager"] != "M0060" && $row["manager"] != "M0006" && $row["manager"] != "M0008") {
+            //     // 新梯的部分 桃竹本該給陳家文,改為劉永德
+            //     if ($row["manager"] == 'M0029') {
+            //         $ret[1] = "M0137,,";
+            //         $i++;
+            //         pricereview_class($rate, $row["manager"], $ret,  $special_fee, $i);
+            //     } else {
+            //         $ret[1] = $row["manager"] . ",,";
+            //         $i++;
+            //         pricereview_class($rate, $row["manager"], $ret,  $special_fee, $i);
+            //     }
+            // } else {
+            // $ret[1] = '';
+            // $ret[2] = "M0107,,<##>M0175,,";         // 業務部專員:M0175陳君敏、M0107許紓晴(第2關有多位審核人)
+            // $ret[2] = '';
+            $ret[3] = "M0060,,";                    // 業務協理
+            if ($rate < 80 || $special_fee > 0) {
+                $ret[4] = "M0006,,";    // 總經理
             }
+            // }
 
             return $ret;
         }
diff --git a/wms/mkt/pricereview-edit.php b/wms/mkt/pricereview-edit.php
index 3868a44f..fda6c9b4 100644
--- a/wms/mkt/pricereview-edit.php
+++ b/wms/mkt/pricereview-edit.php
@@ -653,6 +653,8 @@ foreach ($res as $data) {
             $('#btnadd3').click(function() {
                 $('#tb3 tr:last').prev().after($("tr[name='except_templ']").last().clone().find('input').val('').end());
                 $("tr[name='except_templ']").last().find('input[name=except_act]').val('I');
+                $('#tb3 tr:last').prev().find('td[name=Exclusions]').html('');
+
                 //$('#tb3 tr:last').prev().find('td').first().html($("tr[name='except_templ']").length);
                 //$('#tb3 tr:last').prev().find('td').eq(1).find('a').attr('id', $("tr[name='except_templ']").length);
             });
@@ -1020,12 +1022,14 @@ foreach ($res as $data) {
                     mnKindArr.push($(this).val());
                 })
                 $('#mn_kind_all').val(mnKindArr);
-                var mnSeatArr = [];
+                var nmExclusions = [];
+
                 $("td[name='Exclusions']").each(function() {
-                    exRelateFacilArr.push($(this).html());
+                    nmExclusions.push($(this).val());
                 })
-                $('#Exclusions_all').val(exRelateFacilArr);
-                var exSpecArr = [];
+                $('#Exclusions_all').val(nmExclusions);
+
+                var mnSeatArr = [];
                 $("select[name='mn_seat']").each(function() {
                     mnSeatArr.push($(this).val());
                 })

From 99817770e930ae215fe66fe2608c3026d6b898bd Mon Sep 17 00:00:00 2001
From: Cheng 
Date: Wed, 31 Jan 2024 13:30:27 +0800
Subject: [PATCH 02/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=8D=8E=E9=87=91?=
 =?UTF-8?q?=E8=B3=87=E8=A8=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 wms/bonus/api/get.php                         | 107 ++++-----
 wms/bonus/bonus.php                           | 207 ++++++++++++++++++
 wms/bonus/bonus_detail.php                    | 198 +++++++++++++++++
 wms/bonus/connT8.php                          |  15 ++
 wms/contract-repair/api/postContractData.php  |   7 +-
 wms/contract-repair/contract-repair-input.php |   6 +-
 .../contract-repair-management.php            |   2 +-
 wms/contract-repair/js/alpine.js              |  56 +++--
 wms/contract/connt8.php                       |   2 +-
 wms/crm/crmm06_submit.php                     |   2 +-
 wms/mkt/pricereview_repair-check.php          |   2 +-
 wms/mkt/pricereview_repair-create.php         |   2 +-
 12 files changed, 522 insertions(+), 84 deletions(-)
 create mode 100644 wms/bonus/bonus.php
 create mode 100644 wms/bonus/bonus_detail.php
 create mode 100644 wms/bonus/connT8.php

diff --git a/wms/bonus/api/get.php b/wms/bonus/api/get.php
index 52ae13ff..ef18e03d 100644
--- a/wms/bonus/api/get.php
+++ b/wms/bonus/api/get.php
@@ -1,37 +1,36 @@
+
 prepare($sql);
-$stmt->execute();
-$data = $stmt->fetch(PDO::FETCH_ASSOC);
-$data['amount'] = intval($data['amount']);
-$checkBillNo = $data['CBno'];
-
+        $stmt = $connT8->prepare($sql);
+        $stmt->execute();
+        $data = $stmt->fetch(PDO::FETCH_ASSOC);
+        // $data['amount'] = intval($data['amount']);
+        if (!empty($data['CBno']) && $data['CBno'] != '') {
+            $checkBillNo = $data['CBno'];
 
-$sql = "SELECT 
+            $sql = "SELECT 
         c.BillDate AS CheckBillDate
         FROM arWriteOffBill AS a 
         LEFT JOIN arWriteOffBillRec AS b ON a.BillNo=b.BillNo 
@@ -39,9 +38,7 @@ $sql = "SELECT
         (SELECT temp1.*,arWriteOffBillDetail.*  FROM arWriteOffBillDetail 
         LEFT JOIN 
             (SELECT 
-            arCheckBill.BillNo AS checkBillNo, 
-            arCheckBill.BillDate,
-            arCheckBillInvInfo.InvoiceNo
+            arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo 
             FROM arCheckBill 
             LEFT JOIN arCheckBillInvInfo 
             ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1 
@@ -50,27 +47,33 @@ $sql = "SELECT
         WHERE c.checkBillNo = '$checkBillNo'
     ";
 
-$stmt = $connT8->prepare($sql);
-$stmt->execute();
-$check = $stmt->fetch(PDO::FETCH_ASSOC);
-
-
+            $stmt = $connT8->prepare($sql);
+            $stmt->execute();
+            $check = $stmt->fetch(PDO::FETCH_ASSOC);
 
-$CU_MaterialId = $data['facility'];
-$sql = "SELECT SQuantity FROM salIncomeApplyDetail WHERE BillNo = :contract_no AND CU_MaterialId = :CU_MaterialId";
-$stmt = $connT8->prepare($sql);
-$stmt->bindParam(':contract_no', $contract_no);
-$stmt->bindParam(':CU_MaterialId', $CU_MaterialId);
-$stmt->execute();
-$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
-$count = COUNT($result);
-$data['maintain_month'] = intval($count * $result[0]['SQuantity']);
 
 
-if (!empty($check['CheckBillDate'])) {
-    header('Content-Type: application/json');
-    echo json_encode($data);
-} else {
-    echo false;
-    exit;
+            // $CU_MaterialId = $data['facility'];
+            // $sql = "SELECT SQuantity FROM salIncomeApplyDetail WHERE BillNo = :contract_no AND CU_MaterialId = :CU_MaterialId";
+            // $stmt = $connT8->prepare($sql);
+            // $stmt->bindParam(':contract_no', $contract_no);
+            // $stmt->bindParam(':CU_MaterialId', $CU_MaterialId);
+            // $stmt->execute();
+            // $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
+            // $count = COUNT($result);
+            // $data['maintain_month'] = intval($count * $result[0]['SQuantity']);
+            echo '1';
+        } else {
+            echo '2';
+        }
+    } catch (PDOException $e) {
+        echo '123';
+    }
+    // if (($check['CheckBillDate']) !== '') {
+    //     header('Content-Type: application/json');
+    //     echo $check['CheckBillDate'];
+    // } else {
+    //     echo false;
+    //     exit;
+    // }
 }
diff --git a/wms/bonus/bonus.php b/wms/bonus/bonus.php
new file mode 100644
index 00000000..79900417
--- /dev/null
+++ b/wms/bonus/bonus.php
@@ -0,0 +1,207 @@
+ '新梯',
+    '2' => '汰改',
+    '3' => '保養'
+];
+
+$bonus_type = [
+    '1' => '契約人獎金',
+    '2' => '區經理獎金',
+    '3' => '專任契約經理獎金'
+];
+$clause = '';
+if (!empty($_GET['check'])) {
+    if ($_GET['check'] == 1) {
+        $clause .= "AND pay_day > DATE_SUB(NOW(), INTERVAL 1 MONTH)";
+    } else if ($_GET['check'] == 2) {
+        $clause .= "AND status = 1";
+    } else if ($_GET['check'] == 3) {
+        $clause .= "AND status = 2";
+    }
+}
+
+$sql = "SELECT * FROM bonus WHERE 1=1 $clause";
+$stmt = $conn->prepare($sql);
+$stmt->execute();
+$datas = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+$now = new DateTime();
+$oneMonthAgo = $now->modify('+1 month');
+
+
+// 查看 T8 是否有收款明細
+// require("./api/get.php");
+function isPay($contract_no)
+{
+    $api_url = './api/get.php?contract_no=' . $contract_no;
+    $ch = curl_init();
+    curl_setopt($ch, CURLOPT_URL, $api_url);
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+    curl_setopt($ch, CURLOPT_HTTPHEADER, array($contract_no));
+
+    $response = curl_exec($ch);
+    echo $response;
+    if ($response === false) {
+        echo '123Curl error: ' . curl_error($ch);
+    } else {
+        $result = json_decode($response, true);
+        if ($result['Status'] == 'Success')
+            return $result;
+        if ($result['Status'] == 'Error')
+            return $result;
+    }
+
+    curl_close($ch);
+}
+?>
+
+
+
+
+
+
+
+
+
+
+
+ + + + btn-sm categoryBtn"> 所有獎金 + btn-sm categoryBtn"> 應發獎金 + btn-sm categoryBtn"> 未發獎金 + btn-sm categoryBtn"> 已發獎金 + + + + + + + + + + + + + + + + + + + $data) : + $isPay = isPay($data['contract_no']); + ?> + + + + + + + + + + + + + + + + +
項次合約類別合約號做番號獎金類別獎金試用版本應發人員發放時間是否發放是否收款檢視
+ + + + + 查看詳情 + +
+
+
+ + + + \ No newline at end of file diff --git a/wms/bonus/bonus_detail.php b/wms/bonus/bonus_detail.php new file mode 100644 index 00000000..d32848d2 --- /dev/null +++ b/wms/bonus/bonus_detail.php @@ -0,0 +1,198 @@ +prepare($sql); +$stmt->bindParam(':id', $_GET['id']); +$stmt->execute(); +$result = $stmt->fetch(PDO::FETCH_ASSOC); +echo '
';
+print_r($result);
+echo '
'; +?> + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + +
+

獎金計算

+
+ + + +
+
+
+ + \ No newline at end of file diff --git a/wms/bonus/connT8.php b/wms/bonus/connT8.php new file mode 100644 index 00000000..9324c5ca --- /dev/null +++ b/wms/bonus/connT8.php @@ -0,0 +1,15 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } +} catch (PDOException $e) { + // echo "fail"; + // echo $e->getMessage(); + die("ERROR!!!: " . $e->getMessage()); +} diff --git a/wms/contract-repair/api/postContractData.php b/wms/contract-repair/api/postContractData.php index b4815669..ae043761 100644 --- a/wms/contract-repair/api/postContractData.php +++ b/wms/contract-repair/api/postContractData.php @@ -377,7 +377,9 @@ if (isset($_POST['contractno']) && $_POST['contractno'] != "" && isset($_POST['c sign_date, contract_status, create_user, - create_date) VALUES( + create_date, + delete_status) + VALUES( :repair_no, :contractno, :company, @@ -391,7 +393,8 @@ if (isset($_POST['contractno']) && $_POST['contractno'] != "" && isset($_POST['c :sign_date, :contract_status, :create_userid, - :create_date + :create_date, + 1 )"; $stmt = $conn->prepare($sql); $stmt->bindParam(":repair_no", $repair_no); diff --git a/wms/contract-repair/contract-repair-input.php b/wms/contract-repair/contract-repair-input.php index d85fa1bd..939edeea 100644 --- a/wms/contract-repair/contract-repair-input.php +++ b/wms/contract-repair/contract-repair-input.php @@ -14,6 +14,7 @@ $stmt = $conn->prepare($sql_str); $stmt->bindParam(':accounttype', $accounttype); $stmt->execute(); $contractpersons = $stmt->fetchAll(PDO::FETCH_ASSOC); + $persons = array_map(function ($person) { return [ 'view' => $person['accountid'] . '-' . $person['name'], @@ -21,6 +22,9 @@ $persons = array_map(function ($person) { 'name' => $person['name'] ]; }, $contractpersons); +// echo '
';
+// print_r($persons);
+// echo '
'; $contract_stauts = ["合約簽回", "採購", "工程發包", "工程中", "修理完成"]; ?> @@ -81,7 +85,7 @@ $contract_stauts = ["合約簽回", "採購", "工程發包", "工程中", "修 維保人員 - -
- - -
-
- - -
-
- - -
- -
-
- - -
-
- - -
-
- - -
-
- - - - -
- +
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - $value) { - ?> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - +
合約號部門經理營業員客戶名稱簽約款應收簽約金額簽約最小催收次數簽約最大催收次數二次款應收二次金額二次最小催收次數二次最大催收次數貨抵工地款應收貨抵工地金額貨抵工地最小催收次數貨抵工地最大催收次數安裝款應收安裝金額安裝最小催收次數安裝最大催收次數試車款應收試車金額試車最小催收次數試車最大催收次數官檢款應收官檢金額官檢最小催收次數官檢最大催收次數移交款應收移交金額移交最小催收次數移交最大催收次數尾款應收尾款金額尾款最小催收次數尾款最大催收次數合約總金額目前應收已開發票金額已收金額收款狀態合約號作番號部門主管契約員客戶名稱收款階段應收日期是否應收應收金額已開金額未開金額已收金額催收金額催收次數
" . $row[3]; ?>" . $row[5]; ?>" . $row[7]; ?>
- \ No newline at end of file diff --git a/wms/account-receivable-renovate.xlsx b/wms/account-receivable-renovate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3c8c5dcf43df9bf854dd027a37ec483d11023210 GIT binary patch literal 243700 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 Date: Wed, 31 Jan 2024 17:49:17 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E7=8D=8E=E9=87=91=E9=A0=81=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/bonus/api/get.php | 10 +- .../api/{insertBonus.php => updateBonus.php} | 0 wms/bonus/bonus.php | 171 +++++++++++++----- wms/bonus/bonus_detail.php | 20 +- wms/contract-repair/js/alpine.js | 65 +++---- wms/contract/api/testT8API.php | 20 +- wms/contract/conn.php | 5 + 7 files changed, 198 insertions(+), 93 deletions(-) rename wms/bonus/api/{insertBonus.php => updateBonus.php} (100%) diff --git a/wms/bonus/api/get.php b/wms/bonus/api/get.php index ef18e03d..6b391c62 100644 --- a/wms/bonus/api/get.php +++ b/wms/bonus/api/get.php @@ -62,12 +62,18 @@ if (!empty($_GET['contract_no'])) { // $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // $count = COUNT($result); // $data['maintain_month'] = intval($count * $result[0]['SQuantity']); + $reult = true; echo '1'; + // return true; } else { + $result = false; echo '2'; + // return false; } } catch (PDOException $e) { - echo '123'; + echo '111'; + return false; + // exit; } // if (($check['CheckBillDate']) !== '') { // header('Content-Type: application/json'); @@ -76,4 +82,6 @@ if (!empty($_GET['contract_no'])) { // echo false; // exit; // } +} else { + exit(); } diff --git a/wms/bonus/api/insertBonus.php b/wms/bonus/api/updateBonus.php similarity index 100% rename from wms/bonus/api/insertBonus.php rename to wms/bonus/api/updateBonus.php diff --git a/wms/bonus/bonus.php b/wms/bonus/bonus.php index 79900417..829f29ad 100644 --- a/wms/bonus/bonus.php +++ b/wms/bonus/bonus.php @@ -1,7 +1,7 @@ modify('+1 month'); // 查看 T8 是否有收款明細 // require("./api/get.php"); -function isPay($contract_no) +function isPay($contract_no, $connT8) { - $api_url = './api/get.php?contract_no=' . $contract_no; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $api_url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_HTTPHEADER, array($contract_no)); - - $response = curl_exec($ch); - echo $response; - if ($response === false) { - echo '123Curl error: ' . curl_error($ch); + // echo $contract_no; + $sql = "SELECT + a.BillNo, + b.OTaxAmt as amount, + a.CU_EstPayDate as createDate, + b.PersonId as personId, + c.BillNo as CBno, + c.CU_MaterialId as facility +FROM salIncomeApplyDetail as a +LEFT JOIN salIncomeApplyMaster as b ON a.BillNo = b.BillNo +LEFT JOIN ( + SELECT aMaster.BillNo,aMaster.BizPartnerId,aDetail.CU_MaterialId FROM arCheckBill as aMaster + LEFT JOIN arCheckBillDetail as aDetail ON aMaster.BizPartnerId = aDetail.FromBillNo + WHERE aMaster.BizPartnerId = 'Q23080067' AND aMaster.TypeId = 'RVS' + ) AS c ON a.BillNo = c.BizPartnerId +WHERE a.BillNo = '$contract_no' +AND a.RowNo = '1' +"; + $stmt = $connT8->prepare($sql); + $stmt->execute(); + $data = $stmt->fetch(PDO::FETCH_ASSOC); + // $data['amount'] = intval($data['amount']); + if (!empty($data['CBno']) && $data['CBno'] != '') { + $checkBillNo = $data['CBno']; + + $sql = "SELECT +c.BillDate AS CheckBillDate +FROM arWriteOffBill AS a +LEFT JOIN arWriteOffBillRec AS b ON a.BillNo=b.BillNo +LEFT JOIN +(SELECT temp1.*,arWriteOffBillDetail.* FROM arWriteOffBillDetail +LEFT JOIN + (SELECT + arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo + FROM arCheckBill + LEFT JOIN arCheckBillInvInfo + ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1 +ON temp1.checkBillNo = arWriteOffBillDetail.FromBillNo) AS c +ON a.BillNo=c.BillNo +WHERE c.checkBillNo = '$checkBillNo' +"; + + $stmt = $connT8->prepare($sql); + $stmt->execute(); + + return '1'; } else { - $result = json_decode($response, true); - if ($result['Status'] == 'Success') - return $result; - if ($result['Status'] == 'Error') - return $result; + return '2'; } - - curl_close($ch); } ?> + - -
+ +
@@ -98,9 +129,14 @@ function isPay($contract_no) $data) : - $isPay = isPay($data['contract_no']); + + $contract_no = $data['contract_no']; + $isPay = isPay($contract_no, $connT8); + // echo '
';
+                        // print($isPay);
+                        // echo '
'; ?> - + @@ -111,19 +147,21 @@ function isPay($contract_no) - + + - +
發放獎金 + - 查看詳情 + 查看詳情 @@ -171,14 +209,51 @@ function isPay($contract_no) } + .btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + } + + .btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; + } + .applybtn { color: #fff; background-color: #1484c4; - display: block; + /* display: block; */ + border-radius: 5px; + padding: 5px 2px; + font-size: 13px; + line-height: 1; + display: grid; + place-items: center; + /* 水平和垂直居中 */ + height: 2%vh; + /* 100%视窗高度,可根据需要调整 */ + } + + .applybtncheck { + color: #fff; + background-color: #eea236; + /* display: block; */ border-radius: 4px; padding: 4px 2px; font-size: 13px; + line-height: 1; + display: grid; + place-items: center; + /* 水平和垂直居中 */ + height: 2%vh; + /* 100%视窗高度,可根据需要调整 */ + } + .applybtncheck:hover { + background-color: #f0ad4e; + color: #fff; } .applybtn:hover { @@ -190,18 +265,26 @@ function isPay($contract_no) \ No newline at end of file diff --git a/wms/bonus/bonus_detail.php b/wms/bonus/bonus_detail.php index d32848d2..d86b09d6 100644 --- a/wms/bonus/bonus_detail.php +++ b/wms/bonus/bonus_detail.php @@ -7,9 +7,9 @@ $stmt = $conn->prepare($sql); $stmt->bindParam(':id', $_GET['id']); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); -echo '
';
-print_r($result);
-echo '
'; +// echo '
';
+// print_r($result);
+// echo '
'; ?> @@ -86,16 +86,20 @@ echo '

'; - 發放日期 + 發放日期 - + +

未填寫

+ + 應發日期 + + +

未填寫

發放金額 - - 地區經理經理員 @@ -191,7 +195,7 @@ echo ''; const facility_no = ''; const bonus_verson = ''; const receiver = ''; - const payDay = ''; + const payDaydue = ''; const maintain_price_total = ''; const contract_type = ''; // const bonus_verson = ''; diff --git a/wms/contract-repair/js/alpine.js b/wms/contract-repair/js/alpine.js index 9fba4bf0..99291141 100644 --- a/wms/contract-repair/js/alpine.js +++ b/wms/contract-repair/js/alpine.js @@ -883,14 +883,14 @@ const bonunsIndexTest = () => { receiver: receiver, maintain_month: '', maintain_price_total: maintain_price_total, - payDay: payDay, + payDaydue: payDaydue, bonusArr: [], contract_type: contract_type, manager: '', bonus_type: '', bouns_receiver: '', bouns_amount: '', - dayDus: '', + payDay: '', bouns_regulation: '', contract_manger: 'M0001', user_id: user_id @@ -956,14 +956,11 @@ const bonunsIndexTest = () => { // }) }, save() { - if (this.step == 3) { + if (this.step == 1) { const form = new FormData(); form.append('contract_no', this.data.contract_no); - form.append('facility_no', this.data.facility_no); - form.append('bonuns_verson', this.data.bonus_verson); - form.append('user_id', this.data.user_id); - form.append('bonusArr', JSON.stringify(this.data.bonusArr)); - axios.post('./api/insertBonus.php', form).then(res => { + form.append('payDay', this.data.payDay); + axios.post('./api/updateBonus.php', form).then(res => { console.log(res.data); }).catch(err => { @@ -975,7 +972,7 @@ const bonunsIndexTest = () => { const form = new FormData(); form.append('cotract_no', this.data.contract_no); form.append('bonuns_verson', this.data.bonus_verson); - form.append('c[ontract_type', this.data.contract_type); + form.append('contract_type', this.data.contract_type); form.append('maintain_month', this.data.maintain_month); form.append('maintain_price_total', this.data.maintain_price_total); form.append('payDay', this.data.payDay); @@ -1004,26 +1001,32 @@ const bonunsIndexTest = () => { } } {/* */ } -const bonusIndex = () => { - return { - init() { - // console.log(datas) - // console.log(Array(datas)); - for (let i = 0; i < datas.length; i++) { - this.data[i] = this.isPay(datas[i].contract_no); - } - console.log(this.data); - }, - data: [], - step: 1, - isPay(data) { - axios.get('./api/get.php?contract_no=' + data.contract_no).then(res => { - console.log(res.data); - let isPay = res.data; - return isPay; - }).catch(err => { +// const bonusIndex = () => { +// return { +// init() { +// window.onload = () => { +// this.isPay(); +// } +// }, +// initbtn: null, +// data: { +// isPay: [] +// }, +// isPays: [], +// step: 1, +// async isPay() { +// // console.log(this.data) +// for (let i = 0; i < datas.length; i++) { +// await axios.get('./api/get.php?contract_no=' + datas[i].contract_no).then(res => { +// let isPay = res.data; +// this.isPays.push(isPay); +// }).catch(err => { - }) - } - } -} \ No newline at end of file +// }) +// } + +// console.log(this.isPays); + +// } +// } +// } \ No newline at end of file diff --git a/wms/contract/api/testT8API.php b/wms/contract/api/testT8API.php index e7a85071..59730e98 100644 --- a/wms/contract/api/testT8API.php +++ b/wms/contract/api/testT8API.php @@ -1,19 +1,21 @@ '; // print_r($countDay); // echo ''; // exit(); -$a = 0; +$SQuantity = 2; // $b = 24 / $a; -for ($i = 0; $i < 2; $i++) { - for ($j = 0; $j < 12; $j++) { - $a++; - echo '
';
-        print_r($a);
-        echo '
'; - } +for ($i = 0; $i < 12; $i++) { + $paymonth = $i * $SQuantity; + $countDay = date('Y-m-d', strtotime("$date + $paymonth months")); + $payDay = str_replace('-', '', $countDay); + echo '
';
+    print_r($payDay);
+    echo '
'; } diff --git a/wms/contract/conn.php b/wms/contract/conn.php index 78007657..a795b27c 100644 --- a/wms/contract/conn.php +++ b/wms/contract/conn.php @@ -33,6 +33,11 @@ try { //PDO::ERRMODE_EXCEPTION: 主動抛出 exceptions 異常,需要以try{}cath(){}輸出錯誤資訊。 //設定主動以警告的形式報錯 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $connT8 = new PDO("sqlsrv:Server=220.130.203.251;Database=T8masada", "M0225", "IFFBU1E="); + if ($connT8) { + $connT8->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } //如果連接錯誤,將抛出一個PDOException異常對象 } catch (PDOException $e) { //如果連結資料庫失敗則顯示錯誤訊並停止本頁的工作 From 86b88c0ded1606194ecf3e999c3fcbb022f354b5 Mon Sep 17 00:00:00 2001 From: Cheng Date: Fri, 2 Feb 2024 10:05:32 +0800 Subject: [PATCH 05/16] 0202 --- wms/bonus/bonus.php | 2 +- wms/mkt/pricereview-check.php | 16 ++++---- wms/mkt/pricereview_mi-api.php | 67 ++++++++++++++++------------------ 3 files changed, 40 insertions(+), 45 deletions(-) diff --git a/wms/bonus/bonus.php b/wms/bonus/bonus.php index 829f29ad..c7ea8819 100644 --- a/wms/bonus/bonus.php +++ b/wms/bonus/bonus.php @@ -18,7 +18,7 @@ $bonus_type = [ $clause = ''; if (!empty($_GET['check'])) { if ($_GET['check'] == 1) { - $clause .= "AND pay_day > DATE_SUB(NOW(), INTERVAL 1 MONTH)"; + $clause .= "AND pay_day_due > DATE_SUB(NOW(), INTERVAL 1 MONTH)"; } else if ($_GET['check'] == 2) { $clause .= "AND status = 1"; } else if ($_GET['check'] == 3) { diff --git a/wms/mkt/pricereview-check.php b/wms/mkt/pricereview-check.php index 64db1e44..6782e668 100644 --- a/wms/mkt/pricereview-check.php +++ b/wms/mkt/pricereview-check.php @@ -320,14 +320,14 @@ foreach ($res as $data) { function getMI(id) { var formdata = new FormData(); formdata.append('pa', id); - // formdata.append('user_id', ); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { + console.log(this.responseText); if (this.readyState == 4 && this.status == 200) { data = JSON.parse(this.responseText); console.log(data); - if(data.err == "notfoundmi"){ - for(let i=0;i', k); - console.log(data.content); + // console.log('k=>', k); + // console.log(data.content); //console.log(data.content[k][0]); // 有值表示先前已寫入MI if ($("#tb1").find("input[name=mi_fix]").eq(k).val() == "") { @@ -361,7 +361,7 @@ foreach ($res as $data) { mihtml += "
  • 一年免保:" + commafy(data.content[k][6]) + "
  • "; mihtml += "
  • 起吊+木箱+耗材:" + commafy(data.content[k][7]) + "
  • "; //mihtml += "
  • 加價:"+commafy(data.content[k][9])+"
  • "; - mihtml += "以上合計:" + commafy(data.content[k][12]) + "/台" ; + mihtml += "以上合計:" + commafy(data.content[k][12]) + "/台"; mihtml += "
    "; mihtml += "
    OPTION
    "; total_mi = total_mi + data.content[k][12]; @@ -385,14 +385,14 @@ foreach ($res as $data) { total_mi += data.content[k][13]; - if(total_mi == ""){ + if (total_mi == "") { console.log("undefided!!!"); } $("#tb1").find("tr[name=facil_templ2]").eq(k).find('td').eq(1).html(mihtml); //$("#tb1").find("input[name=mi_fix]").eq(k).closest('td').append(mihtml); console.log(document.getElementsByClassName('total_mi_fix')[k]); document.getElementsByClassName('total_mi_fix')[k].value = commafy(total_mi) - + // document.getElementsByClassName('item_price_ct')[k].value =commafy(total_mi) document.getElementsByClassName('gross_profit')[k].value = commafy(Number(document.getElementsByClassName('item_price_ct')[k].value.replace(/[,]+/g, "")) - total_mi) document.getElementsByClassName('gross_profit_rate')[k].value = Math.round((Number(document.getElementsByClassName('gross_profit')[k].value.replace(/[,]+/g, "")) / Number(document.getElementsByClassName('item_price_ct')[k].value.replace(/[,]+/g, "")) * 100) * 10) / 10 diff --git a/wms/mkt/pricereview_mi-api.php b/wms/mkt/pricereview_mi-api.php index 3784957b..ddc64d31 100644 --- a/wms/mkt/pricereview_mi-api.php +++ b/wms/mkt/pricereview_mi-api.php @@ -88,11 +88,10 @@ try { $special_fee = $row[0]; mysqli_free_result($res); $specarr[0] = "服務費"; - if($elev_qty_all == 0 ){ + if ($elev_qty_all == 0) { $specarr[1] = 0; $specarr[1] = round($special_fee / 1, 0); - - }else{ + } else { $specarr[1] = round($special_fee / $elev_qty_all, 0); } @@ -133,7 +132,7 @@ try { $sql = "select id, item_spec, item_price_bp, option_relate_spec, item_qty from pricereview_item where mid = '$id' and item_group = 'D'"; $res = mysqli_query($link, $sql); while ($row = mysqli_fetch_row($res)) { - if($row[4] == 0){ + if ($row[4] == 0) { continue; } $mn_elev_arr[$row[0]]["item_spec"] = $row[1]; @@ -154,14 +153,14 @@ try { $sql = "select id, item_spec, item_price_bp, item_qty from pricereview_item where mid = '$id' and item_group = 'E'"; $res = mysqli_query($link, $sql); while ($row = mysqli_fetch_row($res)) { - if($row[3] == 0){ + if ($row[3] == 0) { continue; } $exarr[$j][0] = $row[1]; - if($elev_qty_all == 0 || false){ + if ($elev_qty_all == 0 || false) { $exarr[$j][1] = 0; $specarr[1] = round($special_fee / 1, 0); - }else{ + } else { $exarr[$j][1] = round($row[2] / $elev_qty_all, 0); } $ex_fee += $exarr[$j][1]; @@ -176,7 +175,7 @@ try { $sql3 = "select item_spec, item_qty, note from pricereview_item where mid = '$id' and item_group = 'C'"; $res_i = mysqli_query($link, $sql3); while ($row_i = mysqli_fetch_assoc($res_i)) { - if($row_i[1] == 0){ + if ($row_i[1] == 0) { continue; } $sql4 = "select min_floors, price, price_plus from dismantle_mi_option where spec = '" . $row_i["item_spec"] . "' "; @@ -191,10 +190,10 @@ try { } mysqli_free_result($res_i); } - if($elev_qty_all == 0 || false){ + if ($elev_qty_all == 0 || false) { $dismantle_fee = round($dismantle_amt / 1, 0); $polishing_fee = round($polishing_amt / 1, 0); - }else{ + } else { $dismantle_fee = round($dismantle_amt / $elev_qty_all, 0); $polishing_fee = round($polishing_amt / $elev_qty_all, 0); } @@ -208,8 +207,8 @@ try { // echo json_encode($elev_arr); require_once("./conn.php"); // echo json_encode($elev_arr); - foreach ((Array)$elev_arr as $item_no => $v) { - if($item_no == ""){ + foreach ((array)$elev_arr as $item_no => $v) { + if ($item_no == "") { continue; } // 電梯MI @@ -230,7 +229,6 @@ try { $stmt->bindParam(':quotation_no', $quotation_no); $stmt->execute(); $row_e = $stmt->fetch(PDO::FETCH_ASSOC); - // $sql2 = "select o.*, r.* from elevator_mi_option o, elevator_quotation_rule r "; // $sql2 .= "where o.quotation_no = r.quotation_no and o.elevator_type = '" . $v['etype'] . "' "; // $sql2 .= "and ($v[item_weight] between o.min_weight and o.max_weight) "; @@ -245,8 +243,7 @@ try { if ($row_e) { // 加價:先不納入 $row_e["option_price"] = 0; - if(!isset($row_e["purchase_cost"])){ - + if (!isset($row_e["purchase_cost"])) { } // 基准采购成本+±1停材料费+设计费+出口费用 $part1 = $row_e["purchase_cost"] + ($v["floors"] - $row_e["base_floor"]) * $row_e["material_plus"] + $row_e["design"] * $row_e["design_hour"] + $row_e["export_fee"]; @@ -316,7 +313,7 @@ try { $todo_opt_arr = $v["option"]; if (empty($todo_opt_arr)) $todo_opt_arr = $opt_nosel_id_arr; if (!empty($todo_opt_arr)) { - foreach ($todo_opt_arr as $val) { + foreach ($todo_opt_arr as $val) { $sql4 = "select o.base_floor, o.base_floor_plus, o.price, r.equipment, p.price 'OP' "; $sql4 .= "from option_mi o, elevator_quotation_rule r, option_price p "; $sql4 .= "where o.quotation_no = r.quotation_no and o.option_price_id = p.id "; @@ -443,8 +440,8 @@ try { $mi_arr[$i][19] = $specarr; $i++; } - }else{ - $rarr['err'] = "notfoundmi"; + } else { + $rarr['err'] = "notfoundmi"; } // mysqli_free_result($res_e); } @@ -476,45 +473,44 @@ try { $exceptArr = []; - foreach($items as $item){ - if($item['option_relate_spec'] != NULL){ + foreach ($items as $item) { + if ($item['option_relate_spec'] != NULL) { $exceptArr[] = [ - 'option_relate_spec'=> $item['option_relate_spec'], - 'item_spec'=>$item['item_spec'], - 'item_unit_price'=>$item['item_unit_price'], - 'item_qty'=>$item['item_qty'], - 'item_price_bp'=> $item['item_price_bp'], + 'option_relate_spec' => $item['option_relate_spec'], + 'item_spec' => $item['item_spec'], + 'item_unit_price' => $item['item_unit_price'], + 'item_qty' => $item['item_qty'], + 'item_price_bp' => $item['item_price_bp'], ]; } } // $rarr["content"][] = $exceptArr; - foreach($rarr["content"] as $idx=>&$item){ + foreach ($rarr["content"] as $idx => &$item) { $newTotal = 0; $item[16] = []; $item[14] = []; - foreach($exceptArr as $except){ - if($idx+1 == $except['option_relate_spec']){ + foreach ($exceptArr as $except) { + if ($idx + 1 == $except['option_relate_spec']) { $item[16][] = [ $except['item_spec'], - $except['item_unit_price']* $except['item_qty'] + $except['item_unit_price'] * $except['item_qty'] ]; } } - foreach($itemoptions as $itemoption){ + foreach ($itemoptions as $itemoption) { - if($idx+1 == $itemoption['option_relate_spec']){ + if ($idx + 1 == $itemoption['option_relate_spec']) { $item[14][] = [ $itemoption['item_spec'], round($itemoption['option_mi'] * $itemoption['item_qty'], 0), ]; } - - } + } - foreach($item[14] as $option){ + foreach ($item[14] as $option) { $newTotal += $option[1]; } - foreach($item[16] as $ex){ + foreach ($item[16] as $ex) { $newTotal += $ex[1]; } $newTotal += $item[17]; @@ -522,7 +518,6 @@ try { $item[13] = $newTotal; } - } catch (\Exception $e) { $rarr['st'] = 'err'; $rarr['err'] = $e->getMessage(); From 9f8b166d2ce7a74c65bf65e9be1f515e2c6ab4e7 Mon Sep 17 00:00:00 2001 From: Cheng Date: Fri, 2 Feb 2024 11:24:26 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E4=BF=AE=E7=90=86=E5=83=B9=E5=AF=A9?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E4=B8=8A=E5=82=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/contract/contract-new-apply.php | 6 ++-- wms/fun_global.php | 32 -------------------- wms/mkt/pricereview_repair-create.php | 13 ++++++++ wms/mkt/pricereview_repair-record-submit.php | 27 +++++++++++++++-- 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/wms/contract/contract-new-apply.php b/wms/contract/contract-new-apply.php index c6e8ee2c..2ac75ae2 100644 --- a/wms/contract/contract-new-apply.php +++ b/wms/contract/contract-new-apply.php @@ -708,9 +708,9 @@ $para = "function_name=pricereview&" . $token_link; "; + exit; + } + // 價審單-主文 pricereview_repair_main $db_query = "INSERT INTO pricereview_repair_main(repair_no, contractno, masada_addr, company, taxid, invoice, facilityno, "; - $db_query .= "address, sales_tax, service_charge, total_price, sign_date, memo, repairerid, pstatus, checker, creater, create_at) values ("; + $db_query .= "address, sales_tax, service_charge, total_price, sign_date, memo, repairerid, pstatus, checker, creater, create_at,file) values ("; $db_query .= "'$repair_no', '$contractno', '$masada_addr', '$company', '$taxid', '$invoice', '$facilityno', "; - $db_query .= "'$address', $sales_tax ,$service_charge ,$total_price, '$sign_date', '$memo', '$repairerid', 'A', '$next_users', '$user_id', '$create_at')"; + $db_query .= "'$address', $sales_tax ,$service_charge ,$total_price, '$sign_date', '$memo', '$repairerid', 'A', '$next_users', '$user_id', '$create_at','$target_file1')"; $result = mysqli_query($link, $db_query); $affected = mysqli_affected_rows($link); if ($rid = mysqli_insert_id($link)) { From 83e7e16df2497ac7cccfb243cb073e40399c1d80 Mon Sep 17 00:00:00 2001 From: Cheng Date: Fri, 2 Feb 2024 17:57:33 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E5=90=88=E7=B4=84=E5=85=A5=E5=8A=9B(?= =?UTF-8?q?=E6=B1=B0=E6=94=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contract-renovate-input.php | 268 ++++++++++++++++++ wms/contract-repair/js/alpine.js | 66 +++-- wms/mkt/pricereview_mi-api.php | 15 +- 3 files changed, 314 insertions(+), 35 deletions(-) create mode 100644 wms/contract-repair/contract-renovate-input.php diff --git a/wms/contract-repair/contract-renovate-input.php b/wms/contract-repair/contract-renovate-input.php new file mode 100644 index 00000000..d688cc8d --- /dev/null +++ b/wms/contract-repair/contract-renovate-input.php @@ -0,0 +1,268 @@ +prepare($sql); +// $stmt->bindParam(':depart_no', $depart_no); +$stmt->execute(); +$contractSalesman = $stmt->fetchAll(PDO::FETCH_ASSOC); +// echo '
    ';
    +// print_r($contractSalesman);
    +// echo '
    '; +?> + + + + + + + + + + +
    +
    + +
    + + + + + + + + +
    +

    汰改合約入力

    +
    + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/wms/contract-repair/js/alpine.js b/wms/contract-repair/js/alpine.js index 99291141..3bfae87d 100644 --- a/wms/contract-repair/js/alpine.js +++ b/wms/contract-repair/js/alpine.js @@ -1000,33 +1000,45 @@ const bonunsIndexTest = () => { } } -{/* */ } -// const bonusIndex = () => { -// return { -// init() { -// window.onload = () => { -// this.isPay(); -// } -// }, -// initbtn: null, -// data: { -// isPay: [] -// }, -// isPays: [], -// step: 1, -// async isPay() { -// // console.log(this.data) -// for (let i = 0; i < datas.length; i++) { -// await axios.get('./api/get.php?contract_no=' + datas[i].contract_no).then(res => { -// let isPay = res.data; -// this.isPays.push(isPay); -// }).catch(err => { -// }) -// } +const renovateInput = () => { + return { + data: { + contract_no: '', + customer: '', + salesman: '', + address: '', + paykind: [], + payarr: [1, 2, 6, 12], + }, + step: 1, + isLoading: false, + nextStepFn() { + if (this.step == 1) { + if (this.data.contract_no == '') return alert('請輸入合約號'); + this.isLoading = true; + this.getContractData(); + } else if (this.step == 2) { + console.log('1111'); + } + // this.step = 3; + }, + nextStepKeyupFn() { + + }, + preStepFn() { + this.step -= 1; + console.log(this.step); + }, + save() { -// console.log(this.isPays); + }, + getContractData() { + this.step = 2; + this.isLoading = false; + console.log(this.step); -// } -// } -// } \ 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 495eab2a..183731b7 100644 --- a/wms/mkt/pricereview_mi-api.php +++ b/wms/mkt/pricereview_mi-api.php @@ -219,6 +219,7 @@ try { $floor = $v['floors']; $speed = $v['speed']; $min_weight = $v['item_weight']; + $sql_str = "SELECT elevator_mi_option.*,elevator_quotation_rule.* FROM elevator_mi_option JOIN elevator_quotation_rule ON elevator_mi_option.quotation_no = elevator_quotation_rule.quotation_no WHERE elevator_mi_option.elevator_type = :elevator_type AND @@ -255,7 +256,9 @@ try { // 設備 $equipment_ntd = round(($part1 + $profit) * $row_e["equipment"], 0); // 報關+運輸 - $customs = round($equipment_ntd * $row_e["shipping"], 0) + $row_e["customs_shipping"]; + // $customs = round($equipment_ntd * $row_e["shipping"], 0) + $row_e["customs_shipping"]; + $customs = round($equipment_ntd * $row_e["shipping"], 0); + // 安裝基價 $install_base = $row_e["install_price"] + $row_e["trial_price"] + $row_e["install_coef"] * $row_e["install_plus"] + $row_e["trial_coef"] * $row_e["trial_plus"]; // 安裝成本 @@ -336,7 +339,7 @@ try { AND option_mi.open_kind = '" . $v["item_op"] . "'"; $res_om = mysqli_query($link, $sql4); - + if ($row_om = mysqli_fetch_assoc($res_om)) { $row_om['price'] = (int)ceil($row_om['price']); $plus = ($v["floors"] > $row_om["base_floor"]) ? ($v["floors"] - $row_om["base_floor"]) * $row_om["base_floor_plus"] : 0; @@ -488,13 +491,9 @@ try { } } // $rarr["content"][] = $exceptArr; -<<<<<<< HEAD + // print_r($rarr["content"]); + // exit; foreach ($rarr["content"] as $idx => &$item) { -======= - print_r($rarr["content"]); - exit; - foreach($rarr["content"] as $idx=>&$item){ ->>>>>>> ea503fbee65cc2bb5ce9442e618db9c6878a09cb $newTotal = 0; $item[16] = []; $item[14] = []; From 9a55b548d337b2a27a57e96ab76073266524618d Mon Sep 17 00:00:00 2001 From: Ellin Date: Fri, 2 Feb 2024 17:59:29 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E7=90=86?= =?UTF-8?q?=E6=87=89=E6=94=B6=E5=B8=B3=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/account-receivable-repair-index.php | 524 ++++++++++++++++++++++++ 1 file changed, 524 insertions(+) create mode 100644 wms/account-receivable-repair-index.php diff --git a/wms/account-receivable-repair-index.php b/wms/account-receivable-repair-index.php new file mode 100644 index 00000000..6bddaaa0 --- /dev/null +++ b/wms/account-receivable-repair-index.php @@ -0,0 +1,524 @@ +0 +ORDER BY InvoiceTime ASC"; + +// T8核銷 +$sql_received = "SELECT +a.BillNo, a.WriteOffBizPartnerId,a.PayWriteOffOAmount, +b.FromBillDate AS ReceivedDate,b.CurrWOFeeOAmt AS Fee, +c.OrderBillNo, c.checkBillNo, c.InvoiceNo, c.BillDate AS CheckBillDate +FROM arWriteOffBill AS a +LEFT JOIN arWriteOffBillRec AS b ON a.BillNo=b.BillNo +LEFT JOIN + (SELECT temp1.*,arWriteOffBillDetail.* FROM arWriteOffBillDetail + LEFT JOIN + (SELECT + arCheckBill.BillNo AS checkBillNo, arCheckBill.BillDate,arCheckBillInvInfo.InvoiceNo + FROM arCheckBill + LEFT JOIN arCheckBillInvInfo + ON arCheckBill.InvoiceBillNo=arCheckBillInvInfo.InvoiceBillNo) AS temp1 + ON temp1.checkBillNo = arWriteOffBillDetail.FromBillNo) AS c +ON a.BillNo=c.BillNo +WHERE DATALENGTH(c.OrderBillNo) >0"; + + +// 期初收款資訊 +$sql_opening = " +SELECT * FROM account_received "; +// 設定權限:看到自己的/下屬的,資訊處跟財會處可以看全部的 +if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210')))) { +} else { + $sql_opening .= " OR person_id = '$user_id'"; + $sql_contractNumber .= " AND (PersonId = '$user_id'"; + if (count($follower) > 0) { + $column_str = "('$user_id'" . ",'"; + $column_str .= implode("','", $follower); + $column_str .= "')"; + $sql_contractNumber .= " OR PersonId IN $column_str)"; + $sql_opening .= " OR person_id IN $column_str)"; + } else { + $sql_opening .= ")"; + $sql_contractNumber .= ")"; + }; +} + +$contractNumbers = array(); +$query_contract_number = $conn->query($sql_contractNumber); +foreach ($query_contract_number as $contract_numbers) { + echo $contract_numbers['BillNo']; + echo "
    "; + array_push($contractNumbers, $contract_numbers['BillNo']); + $str_numbers = "('" . implode("','", $contractNumbers) . "')"; +} +//T8 銷售訂單 階段收款計畫 +$sql_contract = "SELECT a.BillNo,s.BillDate, a.RowNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId, s.DeptId, s.DeptName, +c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a +LEFT JOIN (SELECT O.*, DE.DeptName FROM salSalesOrder AS O LEFT JOIN comDepartment AS DE ON O.DeptId=DE.DeptId) AS s on a.BillNo = s.BillNo +LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId "; +if (isset($str_numbers)) { + $sql_contract .= "WHERE s.BillNo IN $str_numbers "; +} + + +// T8 銷售訂單 作番金額 +$sql_contract_budget = "SELECT A.BillNo,A.MaterialId, A.OAmountWithTax,A.CU_MaterialId FROM salSalesOrderDetail AS A +LEFT JOIN salSalesOrder AS B ON A.BillNo=B.BillNo +WHERE B.ModeId='T' AND A.ItemType=1 "; +if (isset($str_numbers)) { + $sql_contract_budget .= "AND A.BillNo IN $str_numbers "; +} +$contract = $conn->query($sql_contract); +$contract_data = array(); +$manager_list = array(); +// 將T8合約收款階段資料依據款別分類放進arraData裡 +foreach ($contract as $cont) { + $BillNo = $cont['BillNo']; + $BillDate = $cont['BillDate']; + $PayStage = $cont['PayStage']; + $PlanPayDate = $cont['PlanPayDate']; + $PayAmount = $cont['PlanPayAmt']; + $partnerName = $cont['BizPartnerName']; + $EnterpriseName = $cont['EnterpriseName']; + $TaxNo = $cont['TaxNo']; + $ContactAddress = $cont['ContactAddress']; + $RowNo = $cont['RowNo']; + $salesId = $cont['PersonId']; + if (!in_array($salesId, $manager_list)) { + array_push($manager_list, $salesId); + } + + + //['type'] A:比照新梯、B:純分期、C:其他 + //['sign'] 0 款項名稱 1 簽約金額 2 簽約日期 3 應收金額 min 最早應收月份 max 最晚應收月份 ['second'] 0 二次款名 1 二次款金額 2 收款日期 ['arrive'] 0 貨抵工地款名稱 1 貨抵工地款金額 2 貨抵工地收款日期 ['install'] 0 安裝款名 1 安裝金額 2 安裝收款日期 + //['tryrun'] 0 試車款名 1試車金額 2 試車收款日期 ['check'] 0 官檢款名 1 官檢金額 2 官檢收款日期 ['delivery'] 0 交車款名 1 交車金額 2 交車收款日期 ['final'] 0 尾款名 1 尾款金額 2 尾款收款日期 + //['facility'] [作番號][款別]0 款項名稱 1 合約金額 2 應收日期 3 應收金額 4 已收金額 5 催收金額 6 催收次數 + if (!(isset($arrayData[$BillNo]))) { + // 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址 9 T8單據日期 10 合約號 + $arrayData[$BillNo] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + $arrayData[$BillNo][0] = $cont['DeptId']; + $arrayData[$BillNo][1] = $cont['DeptName']; + $arrayData[$BillNo][3] = $salesId; + $arrayData[$BillNo][5] = $partnerName; + $arrayData[$BillNo][6] = $EnterpriseName; + $arrayData[$BillNo][7] = $TaxNo; + $arrayData[$BillNo][8] = $ContactAddress; + $arrayData[$BillNo][9] = $BillDate; + $arrayData[$BillNo][10] = $BillNo; + $arrayData[$BillNo]['total_budget'] = 0; + $arrayData[$BillNo]['invoice'] = array(); + $arrayData[$BillNo]['received_budget'] = 0; + $arrayData[$BillNo]['invoice_budget'] = 0; + $arrayData[$BillNo]['A40002'] = $arrayData[$BillNo]['A40009'] = $arrayData[$BillNo]['A40010'] = 0; + $arrayData[$BillNo]['total_facility_num'] = 0; + } + $arrayData[$BillNo]['PayStage'][$RowNo]['type'] = 0; + $arrayData[$BillNo]['PayStage'][$RowNo]['name'] = $PayStage; + $arrayData[$BillNo]['PayStage'][$RowNo]['PlanPayDate'] = $PlanPayDate; + $arrayData[$BillNo]['PayStage'][$RowNo]['PayAmount'] = $PayAmount; + // 判斷type + $wipStage = ['簽約', '訂金', '貨抵工地', '完工', '試車', '安裝', '驗收', '完工', '交車', '尾款', '合約']; + foreach ($wipStage as $wipstage) { + if (strpos($PayStage, $wipstage) !== false) { + $arrayData[$BillNo]['PayStage'][$RowNo]['type'] = "A"; + } + } + $haveNumber = (int) filter_var(str_replace('-', '', $PayStage), FILTER_SANITIZE_NUMBER_INT); + if ($haveNumber > 0 && $arrayData[$BillNo]['PayStage'][$RowNo]['type'] === 0) { + $arrayData[$BillNo]['PayStage'][$RowNo]['type'] = "B"; + } elseif ($haveNumber > 0 && $arrayData[$BillNo]['PayStage'][$RowNo]['type'] == 'A') { + $arrayData[$BillNo]['PayStage'][$RowNo]['type'] = "C"; + } +} +$received_array = $conn->query($sql_received); +$opening_data = mysqli_query($link, $sql_opening); +$invoice_data = $conn->query($sql_invoice); +$contract_budget_data = $conn->query($sql_contract_budget); + +// 查WMS 契約員主管 +$sql_manager = "SELECT A.accountid, A.name, A.manager, B.name AS manager_name FROM account AS A +LEFT JOIN account AS B ON A.manager = B.accountid "; +$managers = mysqli_query($link, $sql_manager); + +$find_manager = array(); +foreach ($managers as $manager) { + $find_manager[$manager['accountid']] = $manager; +} +// 將T8銷售訂單明細 每個作番金額存入arrayData +$contract_budget = array(); +foreach ($contract_budget_data as $cont) { + $BillNo = $cont['BillNo']; + if (isset($arrayData[$BillNo])) { + $salesid = $arrayData[$BillNo][3]; + if (isset($find_manager[$salesid])) { + $arrayData[$BillNo][2] = $find_manager[$salesid]['manager_name']; + $arrayData[$BillNo][4] = $find_manager[$salesid]['name']; + $arrayData[$BillNo][11] = $find_manager[$salesid]['manager']; + } + $arrayData[$BillNo]['total_budget'] += $cont['OAmountWithTax']; + $arrayData[$BillNo][$cont['MaterialId']] += $cont['OAmountWithTax']; + if (isset($arrayData[$BillNo]['facility'][$cont['CU_MaterialId']])) { + $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['total_budget'] += $cont['OAmountWithTax']; + $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']][$cont['MaterialId']] += $cont['OAmountWithTax']; + } else { + $arrayData[$BillNo]['total_facility_num'] += 1; + $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['total_budget'] = $cont['OAmountWithTax']; + $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40002'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40009'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40010'] = 0; + $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']][$cont['MaterialId']] = $cont['OAmountWithTax']; + } + } + if (isset($contract_budget[$cont['BillNo']])) { + $contract_budget[$cont['BillNo']]['total'] += $cont['OAmountWithTax']; + } else { + $contract_budget[$cont['BillNo']]['total'] = $cont['OAmountWithTax']; + } + if (isset($contract_budget[$cont['BillNo']][$cont['MaterialId']])) { + $contract_budget[$cont['BillNo']][$cont['MaterialId']] += $cont['OAmountWithTax']; + } else { + $contract_budget[$cont['BillNo']][$cont['MaterialId']] = $cont['OAmountWithTax']; + } + + if (isset($contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']])) { + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']]['total'] += $cont['OAmountWithTax']; + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']][$cont['MaterialId']] += $cont['OAmountWithTax']; + } else { + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']]['total'] = $cont['OAmountWithTax']; + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']]['A40002'] = 0; + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']]['A40009'] = 0; + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']]['A40010'] = 0; + $contract_budget[$cont['BillNo']]['facility'][$cont['CU_MaterialId']][$cont['MaterialId']] = $cont['OAmountWithTax']; + }; +} + +/*計算作番佔合約的金額比例 +@param $facility_no string => 作番號 +@param $contract_budget_billno array => $contract_budget[合約號] +return float */ +function get_contract_ratio($facility_no, $contract_budget_billno) +{ + $ratio = 0; + if (isset($contract_budget_billno['facility'][$facility_no])) { + if (empty($contract_budget_billno['total'])) { + } else { + + $ratio += $contract_budget_billno['facility'][$facility_no]['total'] / $contract_budget_billno['total']; + } + } + return $ratio; +} + +/* 比較應收日期 +@param $a array +@param $b array +return int */ +function comparePlanPayDate($a, $b) +{ + return strtotime($a['PlanPayDate']) - strtotime($b['PlanPayDate']); +} + +//取作番大日程作番與時程 進arrayData +// real_contract_arrival_date 預計出貨日 +// real_arrival_date 實際出貨日 +$today = strtotime(date('Ymd')); + + +foreach ($allPayStages as $paykey => $pay) { + uasort($allPayStages[$paykey], 'comparePlanPayDate'); +} + +foreach ($allPayStages as &$payStage) { + $sequenceNumber = 1; + foreach ($payStage as $tk => &$pstage) { + $pstage['sequenceNumber'] = $sequenceNumber; + $sequenceNumber += 1; + } +} +// 整理好的收款階段 +$final_paystage = array(); +foreach ($allPayStages as $key => &$payStage) { + if (is_iterable($payStage)) { + foreach ($payStage as $key2 => $pstage) { + $final_paystage[$key][$pstage['sequenceNumber']] = $pstage; + } + } +} + +// [invoice][發票號碼][0 發票日期, 1 發票金額, 2 發票狀態, 3 收款日期, 4 收款金額, 5 手續費, 6 核銷單號] +foreach ($invoice_data as $invoice) { + if (isset($arrayData[$invoice['FromSalSalesOrder']])) { + $arrayData[$invoice['FromSalSalesOrder']]['invoice_budget'] += intval($invoice['OAmountWithTax']); + $arrayData[$invoice['FromSalSalesOrder']]['invoice'][$invoice['InvoiceNo']] = [date("Ymd", strtotime($invoice['InvoiceTime'])), $invoice['OAmountWithTax'], $invoice['InvoiceState']]; + } +} + +// 把核銷單的內容補到發票資料中 +foreach ($received_array as $received) { + $BillNo = $received['OrderBillNo']; + if (isset($arrayData[$BillNo])) { + if (isset($arrayData[$BillNo]['invoice'][$received['InvoiceNo']])) { + $arrayData[$BillNo]['received_budget'] += $received['PayWriteOffOAmount']; + array_push($arrayData[$BillNo]['invoice'][$received['InvoiceNo']], date($received['ReceivedDate']), $received['PayWriteOffOAmount'], $received['Fee'], $received['BillNo']); + } + } +} +// $final_paystage ['type'] ['PlanPayDate'] ['PayAmount'] ['facilityno'] ['sequenceNumber'] ['name'] ['InvoiceAmount'] ['receivedAmount'] +foreach ($final_paystage as $key => &$payStage) { + if (isset($arrayData[$key]['invoice_budget']) && isset($arrayData[$key]['received_budget'])) { + $tmpInvoice = $arrayData[$key]['invoice_budget']; + $tmpReceived = $arrayData[$key]['received_budget']; + for ($sequence = 1; $sequence <= count($payStage); $sequence++) { + $collect_month = collect_month(strtotime($payStage[$sequence]['PlanPayDate'])); + if ($tmpInvoice > $payStage[$sequence]['PayAmount']) { + $payStage[$sequence]['InvoiceAmount'] = $payStage[$sequence]['PayAmount']; + $tmpInvoice -= $payStage[$sequence]['PayAmount']; + } else { + $payStage[$sequence]['InvoiceAmount'] = $tmpInvoice; + $tmpInvoice = 0; + } + + if ($tmpReceived > $payStage[$sequence]['PayAmount']) { + + $payStage[$sequence]['receivedAmount'] = $payStage[$sequence]['PayAmount']; + $tmpReceived -= $payStage[$sequence]['PayAmount']; + } else { + $payStage[$sequence]['receivedAmount'] = $tmpReceived; + $tmpReceived = 0; + } + if ($collect_month > 0) { + // $arrayData[$key]['facility'][$payStage[$sequence]['facilityno']]['receivable_budget']+=$payStage[$sequence]['PayAmount']; + } + if ($collect_month > 0 && $payStage[$sequence]['PayAmount'] > $payStage[$sequence]['receivedAmount']) { + $payStage[$sequence]['collect_month'] = $collect_month; + } else { + $payStage[$sequence]['collect_month'] = 0; + } + } + } +} + +// 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址 9 T8單據日期 10 合約號 +// 0 合約號 1 作番號 2 部門id 3 部門名稱 4 經理名稱 5 營業員id 6 營業員名稱 7 客戶名稱 8 抬頭 9 統編 10 通訊地址 +// 11 收款階段名稱 12 應收日期 13 收款金額 14 已開金額 15 已收金額 16 催收次數 +$excel_aray = array(); +$today = strtotime(date('Ymt')); +foreach ($arrayData as $key => $value) { + if (isset($final_paystage[$key])) { + for ($sequence = 1; $sequence <= count($final_paystage[$key]); $sequence++) { + $value[4] = (isset($value[4]) && !empty($value[4])) ? $value[4] : '--'; + $value[5] = (isset($value[5]) && !empty($value[5])) ? $value[5] : '--'; + $value[6] = (isset($value[6]) && !empty($value[6])) ? $value[6] : '--'; + $value[7] = (isset($value[7]) && !empty($value[7])) ? $value[7] : '--'; + $value[8] = (isset($value[8]) && !empty($value[8])) ? $value[8] : '--'; + $value[11] = (isset($value[11]) && !empty($value[11])) ? $value[11] : '--'; + $value[12] = (isset($value[12]) && !empty($value[12])) ? date('Y/m/d', strtotime($value[12])) : '--'; + $thisPayStage = $final_paystage[$key][$sequence]; + $keyname = $key . "/" . $final_paystage[$key][$sequence]['facilityno'] . "/" . $value[5]; + $havetopay = ($today >= strtotime($thisPayStage['PlanPayDate'])) ? "V" : "--"; + switch ($havetopay) { + case "V": + $unInvoiceAmount = $thisPayStage['PayAmount'] - $thisPayStage['InvoiceAmount']; + $unReceivedAmount = $thisPayStage['PayAmount'] - $thisPayStage['receivedAmount']; + break; + default: + $unInvoiceAmount = 0; + $unReceivedAmount = 0; + break; + } + $excel_aray[$keyname] = [ + $value[10], $thisPayStage['facilityno'], $value[0], $value[1], $value[11], $value[2], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8], + $thisPayStage['name'], $thisPayStage['PlanPayDate'], $havetopay, + number_format(round($thisPayStage['PayAmount'])), + number_format(round($thisPayStage['InvoiceAmount'])), number_format(round($unInvoiceAmount)), + number_format(round($thisPayStage['receivedAmount'])), number_format(round($unReceivedAmount)), + number_format(round($thisPayStage['collect_month'])) + + ]; + } + } +} +$total_data = json_encode($excel_aray); + +?> + + +
    +
    + +
    +
    +
    +
    +

    合約 (修理)統整資訊

    +
    +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + $row) { ?> + + + + + + + + + + + + + + + + + + + +
    合約號作番號部門主管契約員客戶名稱收款階段應收日期是否應收應收金額已開金額未開金額已收金額催收金額催收次數
    " . $row[3]; ?>" . $row[5]; ?>" . $row[7]; ?>
    +
    + + \ No newline at end of file From 64aeea79b1dc7cda084a15a47e04a0329632a169 Mon Sep 17 00:00:00 2001 From: Cheng Date: Mon, 5 Feb 2024 08:57:45 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=96=B0=E6=A2=AF=E5=83=B9=E5=AF=A9BUG?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/mkt/pricereview-create.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/wms/mkt/pricereview-create.php b/wms/mkt/pricereview-create.php index ea0033f5..b1e04cb3 100644 --- a/wms/mkt/pricereview-create.php +++ b/wms/mkt/pricereview-create.php @@ -43,7 +43,7 @@ if ($row[0] > 0) { // 退回重填價審,帶出上次價審內容 $last_pr_arr = $last_pritem_arr = $last_prpay_arr = []; -$sql = "select * from pricereview_main where contractno = '$vol_no' and status in ('YN', 'D') order by id limit 1"; +$sql = "SELECT * FROM pricereview_main WHERE contractno = '$vol_no' AND status in ('YN', 'D') ORDER BY id DESC limit 1"; $res = mysqli_query($link, $sql); if ($row = mysqli_fetch_assoc($res)) { $last_pr_arr = $row; @@ -2549,20 +2549,20 @@ include "../footer.php"; \ No newline at end of file diff --git a/wms/account-receivable-repair-index.php b/wms/account-receivable-repair-index.php index 6bddaaa0..475999f0 100644 --- a/wms/account-receivable-repair-index.php +++ b/wms/account-receivable-repair-index.php @@ -22,6 +22,11 @@ $receivable_array = []; // T8所有合約號 $sql_contractNumber = "SELECT Distinct BillNo FROM salSalesOrder WHERE TypeId = 'SP' AND (CurrentState=2 OR CurrentState=4) "; +// T8 銷售訂單 作番金額 +$sql_contract_budget = "SELECT A.BillNo,A.MaterialId, A.OAmountWithTax,A.CU_MaterialId FROM salSalesOrderDetail AS A +LEFT JOIN salSalesOrder AS B ON A.BillNo=B.BillNo +WHERE B.ModeId='T' AND A.ItemType=1 "; + // T8發票 (有專案的發票) $sql_invoice = "SELECT DISTINCT a.InvoiceNo, a.InvoiceTime,a.OAmountWithTax,a.InvoiceState, @@ -76,8 +81,6 @@ if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepart $contractNumbers = array(); $query_contract_number = $conn->query($sql_contractNumber); foreach ($query_contract_number as $contract_numbers) { - echo $contract_numbers['BillNo']; - echo "
    "; array_push($contractNumbers, $contract_numbers['BillNo']); $str_numbers = "('" . implode("','", $contractNumbers) . "')"; } @@ -91,10 +94,6 @@ if (isset($str_numbers)) { } -// T8 銷售訂單 作番金額 -$sql_contract_budget = "SELECT A.BillNo,A.MaterialId, A.OAmountWithTax,A.CU_MaterialId FROM salSalesOrderDetail AS A -LEFT JOIN salSalesOrder AS B ON A.BillNo=B.BillNo -WHERE B.ModeId='T' AND A.ItemType=1 "; if (isset($str_numbers)) { $sql_contract_budget .= "AND A.BillNo IN $str_numbers "; } diff --git a/wms/excel/import.php b/wms/excel/import.php index 75602fc1..34841720 100644 --- a/wms/excel/import.php +++ b/wms/excel/import.php @@ -1,5 +1,6 @@ Reader\Xlsx::class, self::READER_XLS => Reader\Xls::class, @@ -54,6 +55,7 @@ abstract class IOFactory return new $className(); } +} $object = new IOFactory(); $spreadsheet = $object::createReader('Xlsx')->load('1.xlsx'); -echo "success"; \ No newline at end of file +echo "success"; diff --git a/wms/mkt/pricereview_mi-api.php b/wms/mkt/pricereview_mi-api.php index 495eab2a..b7d391c6 100644 --- a/wms/mkt/pricereview_mi-api.php +++ b/wms/mkt/pricereview_mi-api.php @@ -488,13 +488,9 @@ try { } } // $rarr["content"][] = $exceptArr; -<<<<<<< HEAD - foreach ($rarr["content"] as $idx => &$item) { -======= print_r($rarr["content"]); exit; foreach($rarr["content"] as $idx=>&$item){ ->>>>>>> ea503fbee65cc2bb5ce9442e618db9c6878a09cb $newTotal = 0; $item[16] = []; $item[14] = []; From 32ca335532f4146ba44469f808057ab6a03557a2 Mon Sep 17 00:00:00 2001 From: Cheng Date: Mon, 5 Feb 2024 17:40:20 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E4=BF=9D=E9=A4=8A=E7=8D=8E=E9=87=91?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms/bonus/api/postCalBouns.php | 61 +++- wms/bonus/bonus.php | 96 +++--- wms/bonus/bonus_detail.php | 110 +++---- wms/bonus/bonus_index1.php | 247 ++++++++++++-- wms/bonus/insertBonus.php | 307 ++++++++++++++++++ ...evator_renew_noninstallment_bonus_v2_1.php | 159 +++++++++ ..._noninstallment_bonus_v2_1_examination.php | 83 +++++ ...vator_renew_withinstallment_bonus_v2_1.php | 160 +++++++++ ...withinstallment_bonus_v2_1_examination.php | 85 +++++ .../other/maintenance_contract_bonus_v2_1.php | 299 +++++++++++++++++ ...enance_contract_bonus_v2_1_examination.php | 291 +++++++++++++++++ ...erm_contract_m1_free_charge_bonus_v2_1.php | 196 +++++++++++ ..._m1_free_charge_bonus_v2_1_examination.php | 101 ++++++ wms/contract-repair/api/getContractData.php | 13 + .../contract-renovate-input.php | 31 +- wms/contract-repair/js/alpine.js | 168 +++++++++- 16 files changed, 2233 insertions(+), 174 deletions(-) create mode 100644 wms/bonus/insertBonus.php create mode 100644 wms/bonus/other/elevator_renew_noninstallment_bonus_v2_1.php create mode 100644 wms/bonus/other/elevator_renew_noninstallment_bonus_v2_1_examination.php create mode 100644 wms/bonus/other/elevator_renew_withinstallment_bonus_v2_1.php create mode 100644 wms/bonus/other/elevator_renew_withinstallment_bonus_v2_1_examination.php create mode 100644 wms/bonus/other/maintenance_contract_bonus_v2_1.php create mode 100644 wms/bonus/other/maintenance_contract_bonus_v2_1_examination.php create mode 100644 wms/bonus/other/maintenance_longterm_contract_m1_free_charge_bonus_v2_1.php create mode 100644 wms/bonus/other/maintenance_longterm_contract_m1_free_charge_bonus_v2_1_examination.php diff --git a/wms/bonus/api/postCalBouns.php b/wms/bonus/api/postCalBouns.php index f97ba228..0545c351 100644 --- a/wms/bonus/api/postCalBouns.php +++ b/wms/bonus/api/postCalBouns.php @@ -1,6 +1,6 @@ 0) { header("HTTP/1.1 422 Unprocessable Entity"); echo json_encode($fail_arr); @@ -29,6 +32,15 @@ if (!empty($_POST)) { '3' => 'renew_priceissue' ]; + // 分期方式 + $paykind = [ + '1' => 'monthly', + '2' => 'bimonthly', + '3' => 'quarterly', + '6' => 'semiannually', + '12' => 'annually' + ]; + // 應付日期 $day = DateTime::createFromFormat('Ymd', $payDay); $pay_day = $day->format('Y-m-d'); @@ -36,18 +48,35 @@ if (!empty($_POST)) { $years = $maintain_month / 12; $contract_years = ($years >= 2) ? 'above_two' : 'one'; - $result = maintenance_contract_bonus_v2_0( - $bonuns_verson, - $clientType[$client_type], - $contract_years, - 0.8, - $maintain_price_total, - 0, - $payDay, - $receiver, - $manager, - $a - ); + + if ($checkbox == 13) { + // 保養獎金計算 + $result = maintenance_contract_bonus_v2_1( + $bonuns_verson, + $clientType[$client_type], + $paykind[$pay_kind], + $maintain_price_month, + $maintain_price_total, + $commission_fee, + $pay_day, + $receiver, + $manager, + $contract_manger + ); + } + // $result = [ + // $bonuns_verson, + // $clientType[$client_type], + // $paykind[$pay_kind], + // $maintain_price_month, + // $maintain_price_total, + // $commission_fee, + // $pay_day, + // $receiver, + // $manager, + // $contract_manger + // ]; + // echo json_encode($result); header('Content-Type: application/json'); echo json_encode($result); } diff --git a/wms/bonus/bonus.php b/wms/bonus/bonus.php index c7ea8819..49d1f754 100644 --- a/wms/bonus/bonus.php +++ b/wms/bonus/bonus.php @@ -18,7 +18,7 @@ $bonus_type = [ $clause = ''; if (!empty($_GET['check'])) { if ($_GET['check'] == 1) { - $clause .= "AND pay_day_due > DATE_SUB(NOW(), INTERVAL 1 MONTH)"; + $clause .= "AND pay_day > DATE_SUB(NOW(), INTERVAL 1 MONTH)"; } else if ($_GET['check'] == 2) { $clause .= "AND status = 1"; } else if ($_GET['check'] == 3) { @@ -26,15 +26,15 @@ if (!empty($_GET['check'])) { } } -$sql = "SELECT * FROM bonus WHERE 1=1 $clause"; +$sql = "SELECT * FROM bonus WHERE 1=1 $clause "; $stmt = $conn->prepare($sql); $stmt->execute(); $datas = $stmt->fetchAll(PDO::FETCH_ASSOC); + $now = new DateTime(); $oneMonthAgo = $now->modify('+1 month'); - // 查看 T8 是否有收款明細 // require("./api/get.php"); function isPay($contract_no, $connT8) @@ -98,11 +98,11 @@ WHERE c.checkBillNo = '$checkBillNo' -
    +
    - + btn-sm categoryBtn"> 所有獎金 @@ -116,14 +116,18 @@ WHERE c.checkBillNo = '$checkBillNo' 項次 合約類別 合約號 - 做番號 + 作番號 獎金類別 - 獎金試用版本 + 獎金版本 + 作番總價 + 牌價 + 服務費 應發人員 發放時間 - 是否發放 + 應發金額 + 是否收款 - 檢視 + 檢視/發放 @@ -131,38 +135,44 @@ WHERE c.checkBillNo = '$checkBillNo' foreach ($datas as $key => $data) : $contract_no = $data['contract_no']; - $isPay = isPay($contract_no, $connT8); - // echo '
    ';
    -                        // print($isPay);
    -                        // echo '
    '; + $json = json_decode($data['bonus_json']); + + $total = empty($json->total) ? 0 : $json->total; + $fee_per_st = empty($json->fee_per_st) ? 0 : $json->fee_per_st; + $commission_fee = empty($json->commission_fee) ? 0 : $json->commission_fee; + ?> - + + + + - + + - + - 發放獎金 + - 查看詳情 + 查看詳情 @@ -265,26 +275,26 @@ WHERE c.checkBillNo = '$checkBillNo' \ No newline at end of file diff --git a/wms/bonus/bonus_detail.php b/wms/bonus/bonus_detail.php index d86b09d6..93762ac3 100644 --- a/wms/bonus/bonus_detail.php +++ b/wms/bonus/bonus_detail.php @@ -8,8 +8,23 @@ $stmt->bindParam(':id', $_GET['id']); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); // echo '
    ';
    -// print_r($result);
    +// print_r($result['bonus_json']);
     // echo '
    '; +$bonus_json = json_decode($result['bonus_json']); + +$paykind = [ + 'monthly' => '月繳', + 'bimonthly' => '雙月繳', + 'quarterly' => '季繳', + 'semiannually' => '半年繳', + 'annually' => '年繳' +]; + +$maintain_type = [ + 'new' => '新簽約', + 'free_to_charge' => '免保轉有費', + 'renew_priceissue' => '續簽約' +]; ?> @@ -21,7 +36,7 @@ $result = $stmt->fetch(PDO::FETCH_ASSOC); -
    +
    @@ -82,85 +97,47 @@ $result = $stmt->fetch(PDO::FETCH_ASSOC); - 發放人員 + 保養類別 - + - 發放日期 + 付款方式 - -

    未填寫

    + - 應發日期 + 合約付款日 - -

    未填寫

    + - 發放金額 + 應發獎金 - + - 地區經理經理員 + 作番總價 + + + + 牌價 - + - 專任契約經理員 + 服務費 - + - - - - + 價率 + + + + - - -