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[0]; ?> | += $row[1]; ?> | += $row[2] . " " . $row[3]; ?> |
+ = $row[4] . " " . $row[5]; ?> |
+ = $row[6] . " " . $row[7]; ?> |
+ = $row[8]; ?> | += $row[12]; ?> | += $row[13]; ?> | += $row[14]; ?> | += $row[15]; ?> | += $row[16]; ?> | += $row[17]; ?> | += $row[18]; ?> | += $row[19]; ?> | += $row[20]; ?> | +