diff --git a/wms/account-receivable-excel.php b/wms/account-receivable-excel.php new file mode 100644 index 00000000..2441e3f3 --- /dev/null +++ b/wms/account-receivable-excel.php @@ -0,0 +1,47 @@ +$value){ + for ($i = 0; $i < 17; $i++) { + $value[$i] = (isset($value[$i])) ? $value[$i] : 0; + } + $array_data[$key][0] = $value[0]; + $array_data[$key][1] = $value[1]; + $array_data[$key][2] = $value[2]; + $array_data[$key][3] = $value[3]; + $array_data[$key][4] = $value[4]; + $array_data[$key][5] = $value[15]; + $array_data[$key][6] = $value[16]; + $array_data[$key][7] = $value[14]; + $array_data[$key][8] = $value[5]; + $array_data[$key][9] = $value[6]; + $array_data[$key][10] = $value[7]; + $array_data[$key][11] = $value[8]; + $array_data[$key][12] = $value[9]; + $array_data[$key][13] = $value[10]; + $array_data[$key][14] = $value[11]; + $array_data[$key][15] = $value[12]; + $array_data[$key][16] = str_replace('
','; ',$value[13]); +} +$spreadsheet = new Spreadsheet(); +$sheet = $spreadsheet->getActiveSheet(); +$colomnHeader = ['合約號','部門','經理','營業員','客戶名稱','統一編號','聯絡地址','抬頭','簽約款', +'二次款','貨抵工地款','安裝款','試車款','官檢款','交車款','目前應收','作番狀態']; +$sheet->fromArray($colomnHeader,NULL,'A1'); +$rowIndex = 2; +foreach($array_data as $key => $value){ + $sheet->fromArray([$value], NULL, 'A' . $rowIndex); + $sheet->getStyle('Q' . $rowIndex)->getAlignment()->setWrapText(true); + $rowIndex++; +} +$writer = new Xlsx($spreadsheet); +$excelFileName = 'account-receivable.xlsx'; +$writer->save($excelFileName); + +echo "Excel 文件已生成:{$excelFileName}"; +?> \ No newline at end of file diff --git a/wms/account-receivable-index.php b/wms/account-receivable-index.php index e33f2b75..b0109528 100644 --- a/wms/account-receivable-index.php +++ b/wms/account-receivable-index.php @@ -1,11 +1,5 @@ query($sql_contract); // 取收款資料 account_received @@ -59,6 +55,8 @@ foreach ($received_data as $received) { $received_array[$BillNo][2] = (intval($received['status']) < 4) ? intval($received['status']) : 0; } } + +// 將T8合約收款階段資料依據款別分類放進arraData裡 foreach ($contract as $cont) { // print_r($cont); // echo "
"; @@ -70,58 +68,77 @@ foreach ($contract as $cont) { $BillNo = $cont['BillNo']; }; $PayStage = $cont['PayStage']; + $PlanPayDate = $cont['PlanPayDate']; $PayAmount = $cont['PlanPayAmt']; $partnerName = $cont['BizPartnerName']; $EnterpriseName = $cont['EnterpriseName']; $TaxNo = $cont['TaxNo']; $ContactAddress = $cont['ContactAddress']; - //4 簽約 5 二次款 6 貨抵工地 7 安裝 8 試車 9官檢 10 交車 - if (isset($arrayData[$BillNo])) { - if (stristr($PayStage, '二次款') || stristr($PayStage, '出貨前') || stristr($PayStage, '簽約後') || stristr($PayStage, '簽訂後') || stristr($PayStage, '建照核發時') || stristr($PayStage, '簽約60')) { - $arrayData[$BillNo][5] = $PayAmount; - } elseif ($PayStage == '簽約' || stristr($PayStage, '簽定') || stristr($PayStage, '簽訂') || stristr($PayStage, '訂金')) { - $arrayData[$BillNo][4] = $PayAmount; - } elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) { - $arrayData[$BillNo][6] = $PayAmount; - } elseif (stristr($PayStage, '試車') || stristr($PayStage, '驗收完成')) { - $arrayData[$BillNo][8] = $PayAmount; - } elseif (stristr($PayStage, '安裝')) { - $arrayData[$BillNo][7] = $PayAmount; - } elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) { - $arrayData[$BillNo][10] = $PayAmount; - } elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) { - $arrayData[$BillNo][9] = $PayAmount; - } else { - $arrayData[$BillNo][12] = $PayAmount; - } - } else { + //['sign'] 0 款項名稱 1 簽約金額 2 簽約日期 ['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, 0, 0, 0, 0]; - $arrayData[$BillNo][3] = $partnerName; - $arrayData[$BillNo][13] = $EnterpriseName; - $arrayData[$BillNo][14] = $TaxNo; - $arrayData[$BillNo][15] = $ContactAddress; - if (stristr($PayStage, '二次款') || stristr($PayStage, '出貨前') || stristr($PayStage, '簽約後') || stristr($PayStage, '簽訂後') || stristr($PayStage, '建照核發時') || stristr($PayStage, '簽約60')) { - $arrayData[$BillNo][5] = $PayAmount; - } elseif ($PayStage == '簽約' || stristr($PayStage, '簽定') || stristr($PayStage, '簽訂') || stristr($PayStage, '訂金')) { - $arrayData[$BillNo][4] = $PayAmount; - } elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) { - $arrayData[$BillNo][6] = $PayAmount; - } elseif (stristr($PayStage, '試車') || stristr($PayStage, '驗收完成')) { - $arrayData[$BillNo][8] = $PayAmount; - } elseif (stristr($PayStage, '安裝')) { - $arrayData[$BillNo][7] = $PayAmount; - } elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) { - $arrayData[$BillNo][10] = $PayAmount; - } elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) { - $arrayData[$BillNo][9] = $PayAmount; - } else { - $arrayData[$BillNo][12] = $PayAmount; + $arrayData[$BillNo][5] = $partnerName; + $arrayData[$BillNo][6] = $EnterpriseName; + $arrayData[$BillNo][7] = $TaxNo; + $arrayData[$BillNo][8] = $ContactAddress; + } + 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; + 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] = intval($secondtime); + } elseif (in_array($PayStage, $sign90)) { + $secondtime = $signtime - (90 * 86400); + $secondtime = date('Ymd', $secondtime); + $arrayData[$BillNo]['second'][2] = intval($secondtime); + } elseif (in_array($PayStage, $sign120)) { + $secondtime = $signtime - (120 * 86400); + $secondtime = date('Ymd', $secondtime); + $arrayData[$BillNo]['second'][2] = intval($secondtime); + } elseif (stristr($PayStage, '簽訂後30天')) { + $secondtime = $signtime - (30 * 86400); + $secondtime = date('Ymd', $secondtime); + $arrayData[$BillNo]['second'][2] = intval($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; + } elseif (stristr($PayStage, '試車') || stristr($PayStage, '驗收完成')) { + $arrayData[$BillNo]['tryrun'][0] = $PayStage; + $arrayData[$BillNo]['tryrun'][1] = $PayAmount; + $arrayData[$BillNo]['tryrun'][2] = $PlanPayDate; + } elseif (stristr($PayStage, '安裝') || stristr($PayStage, '貨抵工地且完工')) { + $arrayData[$BillNo]['install'][0] = $PayStage; + $arrayData[$BillNo]['install'][1] = $PayAmount; + $arrayData[$BillNo]['install'][2] = $PlanPayDate; + } elseif (stristr($PayStage, '貨抵工地') || stristr($PayStage, '貨底工地')) { + $arrayData[$BillNo]['arrive'][0] = $PayStage; + $arrayData[$BillNo]['arrive'][1] = $PayAmount; + $arrayData[$BillNo]['arrive'][2] = $PlanPayDate; + } elseif (stristr($PayStage, '得合格函後6個月') || stristr($PayStage, '核可函取得後6個月') || stristr($PayStage, '交車')) { + $arrayData[$BillNo]['delivery'][0] = $PayStage; + $arrayData[$BillNo]['delivery'][1] = $PayAmount; + $arrayData[$BillNo]['delivery'][2] = $PlanPayDate; + } elseif (stristr($PayStage, '合格') || stristr($PayStage, '驗收') || stristr($PayStage, '許可') || stristr($PayStage, '核可')) { + $arrayData[$BillNo]['check'][0] = $PayStage; + $arrayData[$BillNo]['check'][1] = $PayAmount; + $arrayData[$BillNo]['check'][2] = $PlanPayDate; + } else { + + $arrayData[$BillNo]['other'][1] = $PayAmount; + $arrayData[$BillNo]['other'][2] = $PlanPayDate; } } - -foreach ($arrayData as $key => $value) { - $sql = "SELECT +$sql = "SELECT tmp2.*, d.name AS depart_name FROM( @@ -145,8 +162,7 @@ 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.contractno='" . $key . "'" . " - +where w.status = '1' AND w.contract_type='A' )AS tmp2 left join ( SELECT DISTINCT @@ -156,19 +172,31 @@ FROM department ) AS d ON d.department_id = tmp2.department_id"; - $facitities = ""; - $total_facility_num = 0; - $arrive_num = 0; - $tryrun_num = 0; - $delivery_num = 0; - $official_num = 0; - $wipwhole_array = mysqli_query($link, $sql); - foreach ($wipwhole_array as $wip) { - $value[0] = $wip['depart_name']; - $value[1] = $wip['manager_name']; - $value[2] = $wip['name']; - $value[16] = isset($wip['department_id']) ? $wip['department_id'] : ''; - $value[17] = isset($wip['salesid']) ? $wip['salesid'] : ''; +$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']; + if (isset($arrayData[$wip['contractno']]['second']) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前30天')) { + $estimate_delivery_time = strtotime(strval($arrayData[$wip['contractno']]['second'][2])); + $secondtime = $estimate_delivery_time - (30 * 86400); + $secondtime = date('Ymd', $secondtime); + $arrayData[$wip['contractno']]['second'][2] = intval($secondtime); + } elseif (isset($arrayData[$wip['contractno']]['second']) && stristr($arrayData[$wip['contractno']]['second'][0], '出貨前90天')) { + $estimate_delivery_time = strtotime(strval($arrayData[$wip['contractno']]['second'][2])); + $secondtime = $estimate_delivery_time - (90 * 86400); + $secondtime = date('Ymd', $secondtime); + $arrayData[$wip['contractno']]['second'][2] = intval($secondtime); + } + $facitities = ""; + $total_facility_num = 0; + $arrive_num = 0; + $tryrun_num = 0; + $delivery_num = 0; + $official_num = 0; if ($wip['delivery_date'] != NULL) { $facitities .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交)
"; $total_facility_num += 1; @@ -205,45 +233,175 @@ ON d.department_id = tmp2.department_id"; $facitities .= $wip['facilityno'] . " (預計到港日待確認)
"; $total_facility_num += 1; } - } - $receivable_budget = 0; - //這是錢 4 簽約 5 二次款 6 貨抵工地 7 安裝 8 試車 9官檢 10 交車 - //這是數量 arrive_num 貨抵工地 tryrun_num 試車安裝完畢 official_num 官檢完畢 delivery_num 移交 - if ($total_facility_num > 0) { - $receivable_budget = $value[4] + ($value[5] + $value[6]) * ($arrive_num / $total_facility_num) + - ($value[7] + $value[8]) * ($tryrun_num / $total_facility_num) + ($value[9]) * ($official_num / $total_facility_num) - + ($value[10]) * ($delivery_num / $total_facility_num); - $uninvoice_budget = $receivable_budget; - $unreceived_budget = $receivable_budget; - $received_invoice = 0; - $received_budget = 0; - if (isset($received_array[$key][0])) { - $uninvoice_budget = $receivable_budget - $received_array[$key][0]; - $received_invoice = $received_array[$key][0]; - } else { + if ($total_facility_num > 0) { + $receivable_budget= $arrayData[$wip['contractno']]['sign'][1]; + // $receivable_budget = $value[4] + ($value[5] + $value[6]) * ($arrive_num / $total_facility_num) + + // ($value[7] + $value[8]) * ($tryrun_num / $total_facility_num) + ($value[9]) * ($official_num / $total_facility_num) + // + ($value[10]) * ($delivery_num / $total_facility_num); $uninvoice_budget = $receivable_budget; + $unreceived_budget = $receivable_budget; + $received_invoice = 0; + $received_budget = 0; + if (isset($received_array[$key][0])) { + $uninvoice_budget = $receivable_budget - $received_array[$key][0]; + $received_invoice = $received_array[$key][0]; + } else { + $uninvoice_budget = $receivable_budget; + } + if (isset($received_array[$key][1])) { + $unreceived_budget = $receivable_budget - $received_array[$key][1]; + $received_budget = $received_array[$key][1]; + } else { + $unreceived_budget = $receivable_budget; + } + if (isset($received_array[$key][2])) { + $status = $received_array[$key][2]; + } else { + $status = 0; + } } - if (isset($received_array[$key][1])) { - $unreceived_budget = $receivable_budget - $received_array[$key][1]; - $received_budget = $received_array[$key][1]; - } else { + } +} +exit(); +foreach ($arrayData as $key => $value) { + echo $key . "
"; + print_r($value); + echo "

"; +} + +//D23070086 +//Array ( [0] => 312 [1] => 桃竹營銷部 [2] => 張莉凱 [3] => M0074 [4] => 章又仁 [5] => 永融營造(大園學八街) [6] => 永融營造工程有限公司 [7] => 13010305 [8] => 桃園市平鎮區環南路184號7樓之2 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [sign] => Array ( [0] => 簽約 [1] => 210000.000000 [2] => 20230825 ) [arrive] => Array ( [0] => 貨抵工地 [1] => 525000.000000 [2] => 20231231 ) [tryrun] => Array ( [0] => 安裝試車 [1] => 210000.000000 [2] => 20240131 ) [delivery] => Array ( [0] => 交車 [1] => 105000.000000 [2] => 20240301 ) ) + + +exit(); + +foreach ($arrayData as $key => $value) { + if (array_key_exists($key, $arrayData) && isset($arrayData[$key])) { + $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.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.contractno='" . $key . "'" . " + +)AS tmp2 +left join ( +SELECT DISTINCT + department_id, + name +FROM department + +) AS d +ON d.department_id = tmp2.department_id"; + $facitities = ""; + $total_facility_num = 0; + $arrive_num = 0; + $tryrun_num = 0; + $delivery_num = 0; + $official_num = 0; + $value[16] = ''; + $value[17] = ''; + $wipwhole_array = mysqli_query($link, $sql); + foreach ($wipwhole_array as $wip) { + $value[0] = $wip['depart_name']; + $value[1] = $wip['manager_name']; + $value[2] = $wip['name']; + $value[16] = is_null($wip['department_id']) ? '' : $wip['department_id']; + $value[17] = is_null($wip['salesid']) ? '' : $wip['salesid']; + if ($wip['delivery_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交)
"; + $total_facility_num += 1; + $arrive_num += 1; + $tryrun_num += 1; + $official_num += 1; + $delivery_num += 1; + } elseif ($wip['official_check_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢)
"; + $total_facility_num += 1; + $arrive_num += 1; + $tryrun_num += 1; + $official_num += 1; + } elseif ($wip['tryrun_end_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢)
"; + $total_facility_num += 1; + $arrive_num += 1; + $tryrun_num += 1; + } elseif ($wip['install_end_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢)
"; + $total_facility_num += 1; + $arrive_num += 1; + } elseif ($wip['real_arrival_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地)
"; + $total_facility_num += 1; + $arrive_num += 1; + } elseif ($wip['actual_tofactory_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['actual_tofactory_date'] . "實際到觀音日)
"; + $total_facility_num += 1; + } elseif ($wip['estimated_shipping_date'] != NULL) { + $facitities .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計到港)
"; + $total_facility_num += 1; + } else { + $facitities .= $wip['facilityno'] . " (預計到港日待確認)
"; + $total_facility_num += 1; + } + } + $receivable_budget = 0; + //這是錢 4 簽約 5 二次款 6 貨抵工地 7 安裝 8 試車 9官檢 10 交車 + //這是數量 arrive_num 貨抵工地 tryrun_num 試車安裝完畢 official_num 官檢完畢 delivery_num 移交 + if ($total_facility_num > 0) { + $receivable_budget = $value[4] + ($value[5] + $value[6]) * ($arrive_num / $total_facility_num) + + ($value[7] + $value[8]) * ($tryrun_num / $total_facility_num) + ($value[9]) * ($official_num / $total_facility_num) + + ($value[10]) * ($delivery_num / $total_facility_num); + $uninvoice_budget = $receivable_budget; $unreceived_budget = $receivable_budget; + $received_invoice = 0; + $received_budget = 0; + if (isset($received_array[$key][0])) { + $uninvoice_budget = $receivable_budget - $received_array[$key][0]; + $received_invoice = $received_array[$key][0]; + } else { + $uninvoice_budget = $receivable_budget; + } + if (isset($received_array[$key][1])) { + $unreceived_budget = $receivable_budget - $received_array[$key][1]; + $received_budget = $received_array[$key][1]; + } else { + $unreceived_budget = $receivable_budget; + } + if (isset($received_array[$key][2])) { + $status = $received_array[$key][2]; + } else { + $status = 0; + } } - if (isset($received_array[$key][2])) { - $status = $received_array[$key][2]; - } else { - $status = 0; + + if (isset($key)) { + $receivable_array[$key] = [ + $key, $value[0], $value[1], $value[2], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8], $value[9], + $value[10], $receivable_budget, $facitities, $value[13], $value[14], $value[15], $value[16], $value[17], $received_invoice, $received_budget, + $uninvoice_budget, $unreceived_budget, $status + ]; } } - - if (isset($key)) { - $receivable_array[$key] = [ - $key, $value[0], $value[1], $value[2], $value[3], $value[4], $value[5], $value[6], $value[7], $value[8], $value[9], - $value[10], $receivable_budget, $facitities, $value[13], $value[14], $value[15], $value[16], $value[17], $received_invoice, $received_budget, - $uninvoice_budget, $unreceived_budget, $status - ]; - } - } $data = json_encode($receivable_array); @@ -353,13 +511,29 @@ $data = json_encode($receivable_array);