diff --git a/wms/Bill.txt b/wms/Bill.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/wms/Bill.txt
@@ -0,0 +1 @@
+
diff --git a/wms/account-receivable-excel.php b/wms/account-receivable-excel.php
index c6ac37d9..608b597e 100644
--- a/wms/account-receivable-excel.php
+++ b/wms/account-receivable-excel.php
@@ -1,5 +1,6 @@
$value) {
- // for ($i = 0; $i < 17; $i++) {
- // $value[$i] = (isset($value[$i])) ? $value[$i] : 0;
- // }
$value['sign'][3] = (isset($value['sign'][3])) ? $value['sign'][3] : 0;
$value['second'][3] = (isset($value['second'][3])) ? $value['second'][3] : 0;
$value['arrive'][3] = (isset($value['arrive'][3])) ? $value['arrive'][3] : 0;
@@ -24,28 +43,60 @@ foreach ($Bill as $key => $value) {
$array_data[$key] = [
$key, $value[1], $value[2], $value[4], $value[5], $value[7], $value[8], $value[6],
- $value['sign'][1], $value['second'][1], $value['arrive'][1], $value['install'][1], $value['tryrun'][1], $value['check'][1], $value['delivery'][1], $value['final'][1],
- $value['sign'][3], $value['second'][3], $value['arrive'][3], $value['install'][3], $value['tryrun'][3], $value['check'][3], $value['delivery'][3], $value['final'][3],
- $value['receivable_budget'], $value['invoice_budget'], $value['received_budget'], str_replace('
', '; ', $value['facilities'])
+ $value['sign'][1], $value['sign'][3], $value['sign']['max'], $value['sign']['min'],
+ $value['second'][1], $value['second'][3], $value['second']['max'], $value['second']['min'],
+ $value['arrive'][1], $value['arrive'][3], $value['arrive']['max'], $value['arrive']['min'],
+ $value['install'][1], $value['install'][3], $value['install']['max'], $value['install']['min'],
+ $value['tryrun'][1], $value['tryrun'][3], $value['tryrun']['max'], $value['tryrun']['min'],
+ $value['check'][1], $value['check'][3], $value['check']['max'], $value['check']['min'],
+ $value['delivery'][1], $value['delivery'][3], $value['delivery']['max'], $value['delivery']['min'],
+ $value['final'][1], $value['final'][3], $value['final']['max'], $value['final']['min'],
+ $value['total_budget'], $value['receivable_budget'], $value['invoice_budget'], $value['received_budget'], str_replace('
', '; ', $value['facilities'])
+
];
+ // $array_data[$key] = [
+ // $key, $value[1], $value[2], $value[4], $value[5], $value[7], $value[8], $value[6],
+ // $value['sign'][1], $value['second'][1], $value['arrive'][1], $value['install'][1], $value['tryrun'][1], $value['check'][1], $value['delivery'][1], $value['final'][1],
+ // $value['sign'][3], $value['second'][3], $value['arrive'][3], $value['install'][3], $value['tryrun'][3], $value['check'][3], $value['delivery'][3], $value['final'][3],
+ // $value['total_budget'], $value['receivable_budget'], $value['invoice_budget'], $value['received_budget'], str_replace('
', '; ', $value['facilities'])
+ // ];
}
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$colomnHeader = [
'合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭',
- '簽約款', '二次款', '貨抵工地款', '安裝款', '試車款', '官檢款', '交車款', '尾款',
- '目前應收簽約款', '目前應收二次款', '目前應收貨抵工地款', '目前應收安裝款', '目前應收試車款', '目前應收官檢款', '目前應收交車款', '目前應收尾款',
- '目前應收', '已開發票金額', '已收金額', '作番狀態'
+ '簽約款', '簽約款目前應收', '簽約最小催收次數', '簽約最大應收次數',
+ '二次款', '二次款目前應收', '二次最小催收次數', '二次最大應收次數',
+ '貨抵工地款', '貨抵工地款目前應收', '貨抵工地最小催收次數', '貨抵工地最大應收次數',
+ '安裝款', '安裝款目前應收', '安裝最小催收次數', '安裝最大應收次數',
+ '試車款', '試車款目前應收', '試車最小催收次數', '試車最大應收次數',
+ '官檢款', '官檢款目前應收', '官檢最小催收次數', '官檢最大應收次數',
+ '交車款', '交車款目前應收', '交車最小催收次數', '交車最大應收次數',
+ '尾款', '尾款目前應收', '尾款最小催收次數', '尾款最大應收次數',
+ '合約總金額', '目前應收', '已開發票金額', '已收金額', '作番狀態'
];
+// $colomnHeader = [
+// '合約號', '部門', '經理', '營業員', '客戶名稱', '統一編號', '聯絡地址', '抬頭',
+// '簽約款', '二次款', '貨抵工地款', '安裝款', '試車款', '官檢款', '交車款', '尾款',
+// '目前應收簽約款', '目前應收二次款', '目前應收貨抵工地款', '目前應收安裝款', '目前應收試車款', '目前應收官檢款', '目前應收交車款', '目前應收尾款',
+// '合約總金額', '目前應收', '已開發票金額', '已收金額', '作番狀態'
+// ];
$sheet->fromArray($colomnHeader, NULL, 'A1');
$rowIndex = 2;
foreach ($array_data as $key => $value) {
$sheet->fromArray([$value], NULL, 'A' . $rowIndex);
- $sheet->getStyle('AB' . $rowIndex)->getAlignment()->setWrapText(true);
- $column = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA'];
- foreach($column as $col) {
- $sheet->getColumnDimension($col)->setAutoSize(true);
+ $column = [
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS'
+ ];
+ foreach ($column as $col) {
+ if ($col == 'AS') {
+ $sheet->getStyle('AS' . $rowIndex)->getAlignment()->setWrapText(true);
+ } else {
+ $sheet->getColumnDimension($col)->setAutoSize(true);
+ }
}
+
$rowIndex++;
}
$writer = new Xlsx($spreadsheet);
diff --git a/wms/account-receivable-index-ing.php b/wms/account-receivable-index-ing.php
new file mode 100644
index 00000000..5b73317a
--- /dev/null
+++ b/wms/account-receivable-index-ing.php
@@ -0,0 +1,684 @@
+0";
+
+// 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";
+
+//T8 銷售訂單 階段收款計畫
+$sql_contract = "SELECT a.BillNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId,
+c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a
+LEFT JOIN salSalesOrder AS s on a.BillNo = s.BillNo
+LEFT JOIN comBusinessPartner AS c ON s.BizPartnerId=c.BizPartnerId
+WHERE s.ModeId = 'M' AND (s.CurrentState=2 OR s.CurrentState=4) ";
+
+// 期初收款資訊
+$sql_opening = "
+SELECT * FROM account_received ";
+
+// 設定權限:看到自己的/下屬的,資訊處跟財會處可以看全部的
+if (!(in_array(accountidToDepartId($user_id), array('220', '210')))) {
+ $sql_contract .= "AND (s.PersonId = '$user_id'";
+ $sql_received .= " AND (PersonId = '$user_id'";
+ $sql_opening .= " OR person_id = '$user_id'";
+ if (count($follower) > 0) {
+ $column_str = "('$user_id'" . ",'";
+ $column_str .= implode("','", $follower);
+ $column_str .= "')";
+ $sql_contract .= " OR s.PersonId IN $column_str)";
+ $sql_received .= " OR PersonId IN $column_str)";
+ $sql_opening .= " OR person_id IN $column_str)";
+ } else {
+ $sql_contract .= ")";
+ $sql_received .= ")";
+ $sql_opening .= ")";
+ };
+}
+
+$contract = $conn->query($sql_contract);
+$received_array = $conn->query($sql_received);
+$opening_data = mysqli_query($link, $sql_opening);
+$invoice_data = $conn->query($sql_invoice);
+
+
+// 合約收款階段內容分類
+$sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天');
+$sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天');
+$sign120 = array('簽約後120天', '簽約後120日', '簽訂後120天');
+
+// 將T8合約收款階段資料依據款別分類放進arraData裡
+foreach ($contract as $cont) {
+ if ($cont['BillNo'] == 'SO20230801001') {
+ $BillNo = 'M230947';
+ } elseif ($cont['BillNo'] == 'SO20230801002') {
+ $BillNo = 'M231067';
+ } else {
+ $BillNo = $cont['BillNo'];
+ };
+ $PayStage = $cont['PayStage'];
+ $PlanPayDate = $cont['PlanPayDate'];
+ $PayAmount = $cont['PlanPayAmt'];
+ $partnerName = $cont['BizPartnerName'];
+ $EnterpriseName = $cont['EnterpriseName'];
+ $TaxNo = $cont['TaxNo'];
+ $ContactAddress = $cont['ContactAddress'];
+ //['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 尾款收款日期
+ if (!(isset($arrayData[$BillNo]))) {
+ // 0 部門id 1 部門名稱 2 經理名稱 3 營業員id 4 營業員名稱 5 客戶名稱 6 抬頭 7 統編 8 通訊地址
+ $arrayData[$BillNo] = [0, 0, 0, 0, 0, 0, 0, 0, 0];
+ $arrayData[$BillNo][5] = $partnerName;
+ $arrayData[$BillNo][6] = $EnterpriseName;
+ $arrayData[$BillNo][7] = $TaxNo;
+ $arrayData[$BillNo][8] = $ContactAddress;
+ $arrayData[$BillNo]['total_budget'] = 0;
+ $arrayData[$BillNo]['invoice'] = array();
+ $arrayData[$BillNo]['received_budget'] = 0;
+ $arrayData[$BillNo]['invoice_budget'] = 0;
+ $arrayData[$BillNo]['sign'][1] = $arrayData[$BillNo]['second'][1] = $arrayData[$BillNo]['arrive'][1] = $arrayData[$BillNo]['install'][1] = $arrayData[$BillNo]['tryrun'][1] = $arrayData[$BillNo]['check'][1] = $arrayData[$BillNo]['delivery'][1] = $arrayData[$BillNo]['final'][1] = 0;
+ $arrayData[$BillNo]['sign']['min'] = $arrayData[$BillNo]['second']['min'] = $arrayData[$BillNo]['arrive']['min'] = $arrayData[$BillNo]['install']['min'] = $arrayData[$BillNo]['tryrun']['min'] = $arrayData[$BillNo]['check']['min'] = $arrayData[$BillNo]['delivery']['min'] = $arrayData[$BillNo]['final']['min'] = array();
+ $arrayData[$BillNo]['sign']['max'] = $arrayData[$BillNo]['second']['max'] = $arrayData[$BillNo]['arrive']['max'] = $arrayData[$BillNo]['install']['max'] = $arrayData[$BillNo]['tryrun']['max'] = $arrayData[$BillNo]['check']['max'] = $arrayData[$BillNo]['delivery']['max'] = $arrayData[$BillNo]['final']['max'] = array();
+ $arrayData[$BillNo]['facilities'] = "";
+ $arrayData[$BillNo]['total_facility_num'] = $arrayData[$BillNo]['delivery_num'] = $arrayData[$BillNo]['check_num'] = $arrayData[$BillNo]['tryrun_num'] = $arrayData[$BillNo]['install_num'] = $arrayData[$BillNo]['arrive_num'] = $arrayData[$BillNo]['second_num'] = $arrayData[$BillNo]['receivable_budget'] = 0;
+ }
+ if (stristr($PayStage, '二次款') || stristr($PayStage, '出貨前') || stristr($PayStage, '簽約後') || stristr($PayStage, '簽訂後') || stristr($PayStage, '建照核發時') || stristr($PayStage, '簽約60')) {
+ $arrayData[$BillNo]['second'][0] = $PayStage;
+ $arrayData[$BillNo]['second'][1] = $PayAmount;
+ $arrayData[$BillNo]['second'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ if (isset($arrayData[$BillNo]['sign'][2]) && !is_null($arrayData[$BillNo]['sign'][2])) {
+ $signtime = strtotime(strval($arrayData[$BillNo]['sign'][2]));
+ if (in_array($PayStage, $sign60)) {
+ $secondtime = $signtime + (60 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$BillNo]['second'][2] = strval($secondtime);
+ } elseif (in_array($PayStage, $sign90)) {
+ $secondtime = $signtime + (90 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$BillNo]['second'][2] = strval($secondtime);
+ } elseif (in_array($PayStage, $sign120)) {
+ $secondtime = $signtime + (120 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$BillNo]['second'][2] = strval($secondtime);
+ } elseif (stristr($PayStage, '簽訂後30天')) {
+ $secondtime = $signtime + (30 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$BillNo]['second'][2] = strval($secondtime);
+ }
+ }
+ } elseif ($PayStage == '簽約' || stristr($PayStage, '簽定') || stristr($PayStage, '簽訂') || stristr($PayStage, '訂金') || stristr($PayStage, '工地動工')) {
+ $arrayData[$BillNo]['sign'][0] = $PayStage;
+ $arrayData[$BillNo]['sign'][1] = $PayAmount;
+ $arrayData[$BillNo]['sign'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ $arrayData[$BillNo]['receivable_budget'] += $PayAmount;
+ if (isset($PlanPayDate) && !empty($PlanPayDate)) {
+ array_push($arrayData[$BillNo]['sign']['min'], strval($PlanPayDate));
+ array_push($arrayData[$BillNo]['sign']['max'], strtotime(strval($PlanPayDate)));
+ }
+ } elseif (stristr($PayStage, '試車')) {
+ $arrayData[$BillNo]['tryrun'][0] = $PayStage;
+ $arrayData[$BillNo]['tryrun'][1] = $PayAmount;
+ $arrayData[$BillNo]['tryrun'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } elseif (stristr($PayStage, '安裝') || stristr($PayStage, '貨抵工地且完工')) {
+ $arrayData[$BillNo]['install'][0] = $PayStage;
+ $arrayData[$BillNo]['install'][1] = $PayAmount;
+ $arrayData[$BillNo]['install'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) {
+ $arrayData[$BillNo]['arrive'][0] = $PayStage;
+ $arrayData[$BillNo]['arrive'][1] = $PayAmount;
+ $arrayData[$BillNo]['arrive'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) {
+ $arrayData[$BillNo]['delivery'][0] = $PayStage;
+ $arrayData[$BillNo]['delivery'][1] = $PayAmount;
+ $arrayData[$BillNo]['delivery'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) {
+ $arrayData[$BillNo]['check'][0] = $PayStage;
+ $arrayData[$BillNo]['check'][1] = $PayAmount;
+ $arrayData[$BillNo]['check'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } elseif (stristr($PayStage, '驗收完成')) {
+ $arrayData[$BillNo]['final'][0] = $PayStage;
+ $arrayData[$BillNo]['final'][1] = $PayAmount;
+ $arrayData[$BillNo]['final'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ } else {
+ $arrayData[$BillNo]['other'][1] = $PayAmount;
+ $arrayData[$BillNo]['other'][2] = $PlanPayDate;
+ $arrayData[$BillNo]['total_budget'] += $PayAmount;
+ }
+}
+
+//取作番大日程作番與時程
+$sql = "SELECT
+tmp2.*,
+d.name AS depart_name
+FROM(
+SELECT
+ a.manager,
+ a2.name as manager_name,
+ a.name,
+ a.department_id,
+ w.salesid,
+ w.contractno,
+ w.facilityno,
+ w.estimated_shipping_date,
+ w.real_contract_arrival_date,
+w.actual_tofactory_date,
+ w.real_arrival_date,
+ w.install_end_date,
+ w.tryrun_end_date,
+ w.official_check_date,
+ w.delivery_date
+from wipwholestatus AS w
+left join account AS a
+ON w.salesid = a.accountid
+left join account AS a2
+ON a2.accountid = a.manager
+where w.status = '1' AND w.contract_type='A'
+)AS tmp2
+left join (
+SELECT DISTINCT
+ department_id,
+ name
+FROM department
+
+) AS d
+ON d.department_id = tmp2.department_id ORDER BY contractno";
+$wipwhole_array = mysqli_query($link, $sql);
+foreach ($wipwhole_array as $wip) {
+ if (isset($arrayData[$wip['contractno']])) {
+ // 整理合約資料
+ $arrayData[$wip['contractno']][0] = $wip['department_id'];;
+ $arrayData[$wip['contractno']][1] = $wip['depart_name'];
+ $arrayData[$wip['contractno']][2] = $wip['manager_name'];
+ $arrayData[$wip['contractno']][3] = $wip['salesid'];
+ $arrayData[$wip['contractno']][4] = $wip['name'];
+ $arrayData[$wip['contractno']][10] = $wip['contractno'];
+ // [合約號][作番號]['no']
+ $arrayData[$wip['contractno']][$wip['facilityno']]['no'] = $wip['facilityno'];
+
+ // [合約號][作番號][款別] ['con'] [金額]/[合約預計收款日期]
+ // [合約號][作番號][款別] ['inv'] [金額]/[發票開立日期]
+ // [合約號][作番號][款別] ['rec'] [金額]/[實際收款日期]
+ $contractstage = array('sign', 'second', 'arrive', 'install', 'tryrun', 'check', 'delivery', 'final');
+ foreach ($contractstage as $i) {
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['inv']['date'] = "";
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['inv']['budget'] = 0;
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['rec']['date'] = "";
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['rec']['budget'] = 0;
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['con']['date'] = (isset($arrayData[$wip['contractno']][$i][2])) ? $arrayData[$wip['contractno']][$i][2] : "";
+ $arrayData[$wip['contractno']][$wip['facilityno']][$i]['con']['budget'] = 0;
+ }
+ // 補上二次款 (出貨前) 收款時間,條件不是"出貨前"就pass
+ if (isset($arrayData[$wip['contractno']]['second'][0]) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前30天')) {
+ if (empty($wip['real_contract_arrival_date'])) {
+ } else {
+ $estimate_delivery_time = strtotime($wip['real_contract_arrival_date']);
+ $secondtime = $estimate_delivery_time - (30 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$wip['contractno']]['second'][2] = strval($secondtime);
+ array_push($arrayData[$wip['contractno']]['second']['max'], strtotime(strval($wip['real_contract_arrival_date'])));
+ array_push($arrayData[$wip['contractno']]['second']['min'], strval($wip['real_contract_arrival_date']));
+ }
+ } elseif (isset($arrayData[$wip['contractno']]['second'][0]) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前90天')) {
+ if (empty($wip['real_contract_arrival_date'])) {
+ } else {
+ $estimate_delivery_time = strtotime($wip['real_contract_arrival_date']);
+ $secondtime = $estimate_delivery_time - (90 * 86400);
+ $secondtime = date('Ymd', $secondtime);
+ $arrayData[$wip['contractno']]['second'][2] = strval($secondtime);
+ array_push($arrayData[$wip['contractno']]['second']['max'], strtotime(strval($wip['real_contract_arrival_date'])));
+ array_push($arrayData[$wip['contractno']]['second']['min'], strval($wip['real_contract_arrival_date']));
+ }
+ }
+
+ //根據作番狀態填入facilities,計算各階段數量、一個合約有幾個作番,增加作番資料
+ if ($wip['delivery_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['delivery_num'] += 1;
+ $arrayData[$wip['contractno']]['check_num'] += 1;
+ $arrayData[$wip['contractno']]['tryrun_num'] += 1;
+ $arrayData[$wip['contractno']]['install_num'] += 1;
+ $arrayData[$wip['contractno']]['arrive_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ if (!empty($wip['delivery_date']) && $wip['delivery_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['delivery']['min'], strval($wip['delivery_date']));
+ array_push($arrayData[$wip['contractno']]['delivery']['max'], strtotime(strval($wip['delivery_date'])));
+ if (!empty($wip['official_check_date']) && $wip['official_check_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['check']['min'], strval($wip['official_check_date']));
+ array_push($arrayData[$wip['contractno']]['check']['max'], strtotime(strval($wip['official_check_date'])));
+ }
+ if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['tryrun']['min'], strval($wip['tryrun_end_date']));
+ array_push($arrayData[$wip['contractno']]['tryrun']['max'], strtotime(strval($wip['tryrun_end_date'])));
+ }
+ if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['install']['min'], strval($wip['install_end_date']));
+ array_push($arrayData[$wip['contractno']]['install']['max'], strtotime(strval($wip['install_end_date'])));
+ }
+ if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['arrive']['min'], strval($wip['real_arrival_date']));
+ array_push($arrayData[$wip['contractno']]['arrive']['max'], strtotime(strval($wip['real_arrival_date'])));
+ }
+ } elseif ($wip['official_check_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['check_num'] += 1;
+ $arrayData[$wip['contractno']]['tryrun_num'] += 1;
+ $arrayData[$wip['contractno']]['install_num'] += 1;
+ $arrayData[$wip['contractno']]['arrive_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ if (!empty($wip['official_check_date']) && $wip['official_check_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['check']['min'], strval($wip['official_check_date']));
+ array_push($arrayData[$wip['contractno']]['check']['max'], strtotime(strval($wip['official_check_date'])));
+ }
+ if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['tryrun']['min'], strval($wip['tryrun_end_date']));
+ array_push($arrayData[$wip['contractno']]['tryrun']['max'], strtotime(strval($wip['tryrun_end_date'])));
+ }
+ if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['install']['min'], strval($wip['install_end_date']));
+ array_push($arrayData[$wip['contractno']]['install']['max'], strtotime(strval($wip['install_end_date'])));
+ }
+ if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['arrive']['min'], strval($wip['real_arrival_date']));
+ array_push($arrayData[$wip['contractno']]['arrive']['max'], strtotime(strval($wip['real_arrival_date'])));
+ }
+ } elseif ($wip['tryrun_end_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['tryrun_num'] += 1;
+ $arrayData[$wip['contractno']]['install_num'] += 1;
+ $arrayData[$wip['contractno']]['arrive_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ if (!empty($wip['tryrun_end_date']) && $wip['tryrun_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['tryrun']['min'], strval($wip['tryrun_end_date']));
+ array_push($arrayData[$wip['contractno']]['tryrun']['max'], strtotime(strval($wip['tryrun_end_date'])));
+ }
+ if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['install']['min'], strval($wip['install_end_date']));
+ array_push($arrayData[$wip['contractno']]['install']['max'], strtotime(strval($wip['install_end_date'])));
+ }
+ if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['arrive']['min'], strval($wip['real_arrival_date']));
+ array_push($arrayData[$wip['contractno']]['arrive']['max'], strtotime(strval($wip['real_arrival_date'])));
+ }
+ } elseif ($wip['install_end_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['install_num'] += 1;
+ $arrayData[$wip['contractno']]['arrive_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ if (!empty($wip['install_end_date']) && $wip['install_end_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['install']['min'], strval($wip['install_end_date']));
+ array_push($arrayData[$wip['contractno']]['install']['max'], strtotime(strtotime(strval($wip['install_end_date']))));
+ }
+ if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['arrive']['min'], strval($wip['real_arrival_date']));
+ array_push($arrayData[$wip['contractno']]['arrive']['max'], strtotime(strval($wip['real_arrival_date'])));
+ }
+ } elseif ($wip['real_arrival_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['arrive_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ if (!empty($wip['real_arrival_date']) && $wip['real_arrival_date'] != NULL) {
+ array_push($arrayData[$wip['contractno']]['arrive']['min'], strval($wip['real_arrival_date']));
+ array_push($arrayData[$wip['contractno']]['arrive']['max'], strtotime(strval($wip['real_arrival_date'])));
+ }
+ } elseif (($arrayData[$wip['contractno']]['second'] != NULL) && (isset($arrayData[$wip['contractno']]['second'][2])) && ($arrayData[$wip['contractno']]['second'][2] <= date('Ymd'))) {
+
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (已達二次款收款條件)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ $arrayData[$wip['contractno']]['second_num'] += 1;
+ } else {
+ if ($wip['real_contract_arrival_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['real_contract_arrival_date'] . "預計出貨日)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ } elseif ($wip['estimated_shipping_date'] != NULL) {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出港日)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ } else {
+ $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (預計出港日待確認)
";
+ $arrayData[$wip['contractno']]['total_facility_num'] += 1;
+ }
+ }
+ }
+ }
+}
+
+// 計算每個合約的應收款、作番總數
+foreach ($arrayData as &$value) {
+ if ($value['total_facility_num'] > 0) {
+ $value['receivable_budget'] += ($value['second'][1] * ($value['second_num'] / $value['total_facility_num'])) +
+ ($value['arrive'][1] * ($value['arrive_num'] / $value['total_facility_num'])) + ($value['install'][1] * ($value['install_num'] / $value['total_facility_num'])) +
+ ($value['tryrun'][1] * ($value['tryrun_num'] / $value['total_facility_num'])) + ($value['check'][1] * ($value['check_num'] / $value['total_facility_num'])) +
+ (($value['delivery'][1] + $value['final'][1]) * ($value['delivery_num'] / $value['total_facility_num']));
+ $value['sign'][3] = $value['sign'][1];
+ $value['second'][3] = $value['second'][1] * ($value['second_num'] / $value['total_facility_num']);
+ $value['arrive'][3] = $value['arrive'][1] * ($value['arrive_num'] / $value['total_facility_num']);
+ $value['install'][3] = $value['install'][1] * ($value['install_num'] / $value['total_facility_num']);
+ $value['tryrun'][3] = $value['tryrun'][1] * ($value['tryrun_num'] / $value['total_facility_num']);
+ $value['check'][3] = $value['check'][1] * ($value['check_num'] / $value['total_facility_num']);
+ $value['delivery'][3] = $value['delivery'][1] * ($value['delivery_num'] / $value['total_facility_num']);
+ $value['final'][3] = $value['final'][1] * ($value['delivery_num'] / $value['total_facility_num']);
+ }
+ $stagearray = array('sign', 'second', 'arrive', 'install', 'tryrun', 'check', 'delivery', 'final');
+
+ $today = date('Ym01', strtotime('-1 month',strtotime(date('Ym01'))));
+ // $today = strtotime($today,);
+ // echo "today: " . $today . "
";
+ // exit();
+ // foreach ($stagearray as $stage) {
+ // // 計算月份差距
+ // if (empty($value[$stage]['min'])==0) {
+ // print_r($value[$stage]['min']);
+ // echo "
";
+ // // $maxtime = array_map('strtotime', $value[$stage]['min']);
+ // $earliestDate = min($value[$stage]['min']);
+ // $earliestMonth = date('Ym01', $earliestDate);
+ // echo "earliestDate: " . $earliestDate . "
";
+ // // $earliestMonth = date('n', strtotime($earliestDate));
+ // // 計算月份差距
+ // $maxDifference = $today -$earliestMonth;
+ // echo "difference = ".$maxDifference."
";
+ // $value[$stage]['max'] = $maxDifference;
+ // } else {
+ // $value[$stage]['max'] = 0;
+ // }
+ // echo $value[$stage]['max'];
+ // echo "
--------------------
";
+ // exit();
+
+ // if(!empty($value[$stage]['max']) && $value[$stage]['max'] !==10 && $value[$stage]['max'] !==1){
+ // echo "max: " . $value[$stage]['max'] . "
";
+ // if (!empty($value[$stage]['max'])) {
+ // $mintime = array_map('strtotime', $value[$stage]['max']);
+ // $latestDate = max($mintime);
+ // $latestMonth = date('n', strtotime($latestDate));
+ // $minDifference = abs($latestMonth - $today);
+ // $value[$stage]['min'] = $minDifference;
+ // } else {
+ // $value[$stage]['min'] = 0;
+ // }
+ // }else{
+ // $value[$stage]['min'] = 0;
+ // }
+
+ // }
+}
+// [合約號][作番號][款別] ['con'] [金額]/[合約預計收款日期]
+// [合約號][作番號][款別] ['inv'] [金額]/[發票開立日期]
+// [合約號][作番號][款別] ['rec'] [金額]/[實際收款日期]
+foreach ($wipwhole_array as $wip) {
+ if (isset($arrayData[$wip['contractno']]) && isset($arrayData[$wip['contractno']][$wip['facilityno']]) && !empty($arrayData[$wip['contractno']]['total_facility_num'])) {
+ $stagearray = array('sign', 'second', 'arrive', 'install', 'tryrun', 'check', 'delivery', 'final');
+ foreach ($stagearray as $stage) {
+ $arrayData[$wip['contractno']][$wip['facilityno']][$stage]['con'] = $arrayData[$wip['contractno']][$stage][1] / $arrayData[$wip['contractno']]['total_facility_num'];
+ }
+ }
+}
+
+// [invoice][發票號碼][0 發票日期, 1 發票金額, 2 發票狀態, 3 收款日期, 4 收款金額, 5 手續費, 6 核銷單號]
+foreach ($invoice_data as $invoice) {
+ if (isset($arrayData[$invoice['ProjectId']])) {
+ $arrayData[$invoice['ProjectId']]['invoice_budget'] += intval($invoice['OAmountWithTax']);
+ $arrayData[$invoice['ProjectId']]['invoice'][$invoice['InvoiceNo']] = [date("Ymd", strtotime($invoice['InvoiceTime'])), $invoice['OAmountWithTax'], $invoice['InvoiceState']];
+ }
+}
+
+// 把核銷單的內容補到發票資料中
+foreach ($received_array as $received) {
+ if ($received['OrderBillNo'] == 'SO20230801001') {
+ $BillNo = 'M230947';
+ } elseif ($received['OrderBillNo'] == 'SO20230801002') {
+ $BillNo = 'M231067';
+ } else {
+ $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']);
+ }
+ }
+}
+foreach($arrayData as $key => $value){
+ print_r($value);
+ echo "
";
+}
+
+$data = json_encode($arrayData);
+
+?>
+
+
+
合約號 | +部門 | +經理 | +營業員 | +客戶名稱 | +簽約款 | +應收簽約金額 | +簽約最大催收次數 | +簽約最小催收次數 | +二次款 | +應收二次金額 | +二次最大催收次數 | +二次最小催收次數 | +貨抵工地款 | +應收貨抵工地金額 | +貨抵工地最大催收次數 | +貨抵工地最小催收次數 | +安裝款 | +應收安裝金額 | +安裝最大催收次數 | +安裝最小催收次數 | +試車款 | +應收試車金額 | +試車最大催收次數 | +試車最小催收次數 | +官檢款 | +應收官檢金額 | +官檢最大催收次數 | +官檢最小催收次數 | +移交款 | +應收移交金額 | +移交最大催收次數 | +移交最小催收次數 | +尾款 | +應收尾款金額 | +尾款最大催收次數 | +尾款最小催收次數 | +合約總金額 | +目前應收 | +已開發票金額 | +已收金額 | + + + +
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
= $key ?> | += $value[1] ?> | += $value[2] ?> | += $value[4] ?> | += $value[5] ?> | += number_format(round($value['sign'][1])) ?> | += isset($value['sign'][3]) ? number_format(round($value['sign'][3])) : '--' ?> | += isset($value['sign']['min']) ? $value['sign']['min'] : '--' ?> | += isset($value['sign']['max']) ? $value['sign']['max'] : '--' ?> | += isset($value['second'][1]) ? number_format(round($value['second'][1])) : '--' ?> | += isset($value['second'][3]) ? number_format(round($value['second'][3])) : '--' ?> | += isset($value['second']['min']) ? $value['second']['min'] : '--' ?> | += isset($value['second']['max']) ? $value['second']['max'] : '--' ?> | += isset($value['arrive'][1]) ? number_format(round($value['arrive'][1])) : '--' ?> | += isset($value['arrive'][3]) ? number_format(round($value['arrive'][3])) : '--' ?> | += isset($value['arrive']['min']) ? $value['arrive']['min'] : '--' ?> | += isset($value['arrive']['max']) ? $value['arrive']['max'] : '--' ?> | += isset($value['install'][1]) ? number_format(round($value['install'][1])) : '--' ?> | += isset($value['install'][3]) ? number_format(round($value['install'][3])) : '--' ?> | += isset($value['install']['min']) ? $value['install']['min'] : '--' ?> | += isset($value['install']['max']) ? $value['install']['max'] : '--' ?> | += isset($value['tryrun'][1]) ? number_format(round($value['tryrun'][1])) : '--' ?> | += isset($value['tryrun'][3]) ? number_format(round($value['tryrun'][3])) : '--' ?> | += isset($value['tryrun']['min']) ? $value['tryrun']['min'] : '--' ?> | += isset($value['tryrun']['max']) ? $value['tryrun']['max'] : '--' ?> | += isset($value['check'][1]) ? number_format(round($value['check'][1])) : '--' ?> | += isset($value['check'][3]) ? number_format(round($value['check'][3])) : '--' ?> | += isset($value['check']['min']) ? $value['check']['min'] : '--' ?> | += isset($value['check']['max']) ? $value['check']['max'] : '--' ?> | += isset($value['delivery'][1]) ? number_format(round($value['delivery'][1])) : '--' ?> | += isset($value['delivery'][3]) ? number_format(round($value['delivery'][3])) : '--' ?> | += isset($value['delivery']['min']) ? $value['delivery']['min'] : '--' ?> | += isset($value['delivery']['max']) ? $value['delivery']['max'] : '--' ?> | += isset($value['final'][1]) ? number_format(round($value['final'][1])) : '--' ?> | += isset($value['final'][3]) ? number_format(round($value['final'][3])) : '--' ?> | += isset($value['final']['min']) ? $value['final']['min'] : '--' ?> | += isset($value['final']['max']) ? $value['final']['max'] : '--' ?> | += isset($value['total_budget']) ? number_format(round($value['total_budget'])) : '--' ?> | += isset($value['receivable_budget']) ? number_format(round($value['receivable_budget'])) : '--' ?> | += isset($value['invoice_budget']) ? number_format(round($value['invoice_budget'])) : '--' ?> | += isset($value['received_budget']) ? number_format(round($value['received_budget'])) : '--' ?> | + +