= $start_date "; } if (!is_null($end_date)) { $end_date = (int)date('Ymd', strtotime($end_date)); $sql_contractNumber .= " AND MainAll.BillDate <= $end_date "; } if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) { } else { $sql_contractNumber .= " AND (Leader.PersonId = '$user_id' OR MainAll.PersonId = '$user_id'"; if (count($follower) > 0) { $column_str = "('$user_id'" . ",'"; $column_str .= implode("','", $follower); $column_str .= "')"; $sql_contractNumber .= " OR MainAll.PersonId IN $column_str)"; } else { $sql_contractNumber .= ")"; }; } // T8發票 (有專案的發票) $sql_invoice = "SELECT Detail.BillNo AS InvoiceBillNo, Detail.MaterialId, Detail.LAmountWithTax, Main.InvoiceNo, Main.InvoiceDate, Main.InvoiceState, CheckAll.FromSalSalesOrder AS BillNo FROM arSellInvoiceMaterial AS Detail LEFT JOIN arSellInvoice AS Main ON Detail.BillNo=Main.BillNo LEFT JOIN ( SELECT CheckDetail.BillNo, CheckDetail.FromSalSalesOrder, CheckDetail.RowNo FROM arCheckBillDetail AS CheckDetail ) AS CheckAll ON CheckAll.BillNo= Detail.FromBillNo AND Detail.FromRowCode = CheckAll.RowNo WHERE Main.InvoiceState!=2 AND Main.InvoiceDate>20240229 "; // T8核銷 $sql_received = "SELECT Detail.OrderBillNo, Detail.CurrWriteOffLAmount, Main.BillDate FROM arWriteOffBillDetail AS Detail LEFT JOIN arWriteOffBill AS Main ON Detail.BillNo=Main.BillNo WHERE LEN(Detail.OrderBillNo)>0 AND Main.BillDate>20240229 "; $contractNumbers = array(); $query_contract_number = $conn->query($sql_contractNumber); foreach ($query_contract_number as $contract_numbers) { $billNo = $contract_numbers['BillNo']; // switch ($contract_numbers['BillNo']) { // case 'SO20230701001': // $billNo = 'M220104'; // break; // case 'SO20230701002': // $billNo = 'M230098'; // break; // case 'SO20230701003': // $billNo = 'M230159'; // break; // case 'SO20230901001': // $billNo = 'M230992'; // break; // case 'SO20231110001': // $billNo = 'M230492'; // break; // case 'SO20231110002': // $billNo = 'M230557'; // break; // case 'SO20231110003': // $billNo = 'M230496'; // break; // case 'SP20240108001': // $billNo = 'M230683'; // break; // case 'SP20240116004': // $billNo = 'B230726'; // break; // case 'T220035': // $billNo = 'M220035'; // break; // case 'T230098': // $billNo = 'M230098'; // break; // } array_push($contractNumbers, $billNo); $str_numbers = "('" . implode("','", $contractNumbers) . "')"; } //作番大日程 $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='B' )AS tmp2 left join ( SELECT DISTINCT department_id, name FROM department ) AS d ON d.department_id = tmp2.department_id"; //T8 銷售訂單 階段收款計畫 $sql_contract = "SELECT a.BillNo,s.BillDate, a.RowNo, a.PayStage, a.PlanPayAmt, a.PlanPayDate,s.BizPartnerId,c.BizPartnerName, s.PersonId, Person.PersonName, s.DeptId, s.DeptName, Leader.PersonId AS ManagerId, Leader.PersonName AS ManagerName, c.EnterpriseName, c.TaxNo, c.ContactAddress FROM salOrderStagePay AS a LEFT JOIN (SELECT O.*, DE.DeptName, DE.LeaderId 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 LEFT JOIN comGroupPerson AS Person ON s.PersonId = Person.PersonId LEFT JOIN comGroupPerson AS Leader ON s.LeaderId = Leader.PersonId "; // 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']; $managerId = $cont['ManagerId']; $managerName = $cont['ManagerName']; 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]['salesName'] = $cont['PersonName']; $arrayData[$BillNo]['ManagerId'] = $managerId; $arrayData[$BillNo]['ManagerName'] = $managerName; $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'] = $arrayData[$BillNo]['A40019'] = 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); $received_array = $conn->query($sql_received); $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])) { $sum_total_budget += $cont['OAmountWithTax']; switch ($cont['MaterialId']) { case 'A40002': $sum_A40002 += $cont['OAmountWithTax']; $sum_facility_A40002 += 1; break; case 'A40009': $sum_A40009 += $cont['OAmountWithTax']; $sum_facility_A40009 += 1; break; case 'A40010': $sum_A40010 += $cont['OAmountWithTax']; $sum_facility_A40010 += 1; break; case 'A40019': $sum_A40019 += $cont['OAmountWithTax']; $sum_facility_A40019 += 1; break; } $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 { $sum_facility += 1; $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'] = $arrayData[$BillNo]['facility'][$cont['CU_MaterialId']]['A40019'] = 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']]['A40019'] = 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')); $wipwhole_array = mysqli_query($link, $sql); $wipwhole_status = array(); foreach ($wipwhole_array as $wip) { $billno = $wip['contractno']; switch ($wip['contractno']) { case 'M220104': $billNo = 'SO20230701001'; break; case 'M230098': $billNo = 'SO20230701002'; break; case 'M230159': $billNo = 'SO20230701003'; break; case 'M230992': $billNo = 'SO20230901001'; break; case 'M230492': $billNo = 'SO20231110001'; break; case 'M230557': $billNo = 'SO20231110002'; break; case 'M230496': $billNo = 'SO20231110003'; break; case 'M230683': $billNo = 'SP20240108001'; break; case 'B230726': $billNo = 'SP20240116004'; break; case 'M220035': $billNo = 'T220035'; break; case 'M230098': $billNo = 'T230098'; break; } //[合約號]['facility'] [作番號][款別]0 款項名稱 1 合約金額 2 應收日期 3 應收金額 4 已收金額 5 催收金額 6 催收次數 if (isset($arrayData[$billno])) { // 整理合約資料 // $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[$billno][10] = $wip['contractno']; $arrayData[$billno]['A40001'] = (isset($contract_budget[$billno]['A40001']) && !is_null($contract_budget[$billno]['A40001'])) ? $contract_budget[$billno]['A40001'] : 0; $arrayData[$billno]['A40008'] = (isset($contract_budget[$billno]['A40008']) && !is_null($contract_budget[$billno]['A40008'])) ? $contract_budget[$billno]['A40008'] : 0; // [合約號]['facility'][作番號]['no'] $arrayData[$billno]['facility'][$wip['facilityno']]['no'] = $wip['facilityno']; $arrayData[$billno]['facility'][$wip['facilityno']]['status'] = ""; $arrayData[$billno]['facility'][$wip['facilityno']]['total_budget'] = 0; $arrayData[$billno]['facility'][$wip['facilityno']]['receivable_budget'] = 0; $arrayData[$billno]['facility'][$wip['facilityno']]['collect_budget'] = 0; $arrayData[$billno]['facility'][$wip['facilityno']]['A40002'] = (isset($contract_budget[$billno][$wip['facilityno']]['A40002']) && !is_null($contract_budget[$billno][$wip['facilityno']]['A40002'])) ? $contract_budget[$billno][$wip['facilityno']]['A40002'] : 0; $arrayData[$billno]['facility'][$wip['facilityno']]['A40008'] = (isset($contract_budget[$billno][$wip['facilityno']]['A40008']) && !is_null($contract_budget[$billno][$wip['facilityno']]['A40008'])) ? $contract_budget[$billno][$wip['facilityno']]['A40008'] : 0; $arrayData[$billno]['facility'][$wip['facilityno']]['A40010'] = (isset($contract_budget[$billno][$wip['facilityno']]['A40010']) && !is_null($contract_budget[$billno][$wip['facilityno']]['A40010'])) ? $contract_budget[$billno][$wip['facilityno']]['A40010'] : 0; $arrayData[$billno]['facility'][$wip['facilityno']]['A40019'] = (isset($contract_budget[$billno][$wip['facilityno']]['A40019']) && !is_null($contract_budget[$billno][$wip['facilityno']]['A40019'])) ? $contract_budget[$billno][$wip['facilityno']]['A40019'] : 0; } $wipwhole_status[$wip['facilityno']] = $wip; } // 整理arrayData[合約]['PayStage']進 (新增) arrayData[合約]['facility'][作番號][PayStage] $sign0 = array('簽約', '簽訂', '合約簽訂', '訂金', '訂金款', '訂金'); // 將所有facility的paystage放入一個array以便計算順序 $allPayStages = []; foreach ($arrayData as &$value) { if (isset($value['facility']) && is_iterable($value['facility'])) { foreach ($value['facility'] as $fakey => &$facility) { if (isset($contract_budget[$value[10]])) { $ratio = get_contract_ratio($fakey, $contract_budget[$value[10]]); for ($stage = 1; $stage < (count($value['PayStage']) + 1); $stage++) { $facility['PayStage'][$stage] = $value['PayStage'][$stage]; $facility['PayStage'][$stage]['facilityno'] = $fakey; //算每個作番的金額 $facility['PayStage'][$stage]['PayAmount'] = $value['PayStage'][$stage]['PayAmount'] * $ratio; //算每個作番每個收款階段的收款時間 switch ($facility['PayStage'][$stage]['type']) { case "A": switch ($facility['PayStage'][$stage]['name']) { case (stristr($facility['PayStage'][$stage]['name'], '試車')): if (isset($wipwhole_status[$fakey]['tryrun_end_date']) && $wipwhole_status[$fakey]['tryrun_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['tryrun_end_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['tryrun_end_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '完工')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '尾款')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '交車')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '驗收')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['delivery_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '安裝')): if (isset($wipwhole_status[$fakey]['install_end_date']) && $wipwhole_status[$fakey]['install_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['install_end_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['install_end_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '貨抵工地')): if (isset($wipwhole_status[$fakey]['real_arrival_date']) && $wipwhole_status[$fakey]['real_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_arrival_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['real_arrival_date'])); } elseif (isset($wipwhole_status[$fakey]['real_contract_arrival_date']) && $wipwhole_status[$fakey]['real_contract_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_contract_arrival_date'])) { $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime($wipwhole_status[$fakey]['real_contract_arrival_date'])); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (in_array($facility['PayStage'][$stage]['name'], $sign0)): break; default: $facility['PayStage'][$stage]['PlanPayDate'] = NULL; break; }; case "B": break; case "C": switch ($facility['PayStage'][$stage]['name']) { case (stristr($facility['PayStage'][$stage]['name'], '試車')): if (isset($wipwhole_status[$fakey]['tryrun_end_date']) && $wipwhole_status[$fakey]['tryrun_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['tryrun_end_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['tryrun_end_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '完工')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '尾款')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '交車')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '驗收')): if (isset($wipwhole_status[$fakey]['delivery_date']) && $wipwhole_status[$fakey]['delivery_date'] !== NULL && !empty($wipwhole_status[$fakey]['delivery_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['delivery_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '安裝')): if (isset($wipwhole_status[$fakey]['install_end_date']) && $wipwhole_status[$fakey]['install_end_date'] !== NULL && !empty($wipwhole_status[$fakey]['install_end_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['install_end_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; case (stristr($facility['PayStage'][$stage]['name'], '貨抵工地')): if (isset($wipwhole_status[$fakey]['real_arrival_date']) && $wipwhole_status[$fakey]['real_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_arrival_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['real_arrival_date']))); } elseif (isset($wipwhole_status[$fakey]['real_contract_arrival_date']) && $wipwhole_status[$fakey]['real_contract_arrival_date'] !== NULL && !empty($wipwhole_status[$fakey]['real_contract_arrival_date'])) { $haveNumber = ((int) filter_var(str_replace('-', '', $facility['PayStage'][$stage]['name']), FILTER_SANITIZE_NUMBER_INT)) - 1; $facility['PayStage'][$stage]['PlanPayDate'] = date("Ymd", strtotime("+ $haveNumber months", strtotime($wipwhole_status[$fakey]['real_contract_arrival_date']))); } else { $facility['PayStage'][$stage]['PlanPayDate'] = NULL; } break; default: $facility['PayStage'][$stage]['PlanPayDate'] = NULL; break; }; default: break; } } if (isset($allPayStages[$value[10]])) { $allPayStages[$value[10]] = array_merge($allPayStages[$value[10]], $facility['PayStage']); } else { $allPayStages[$value[10]] = $facility['PayStage']; } } } } } 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; } } } // 將WMS內期初資料整理進arrayData $sql_initial = "SELECT * FROM account_receivable_renovate"; $result_initial = mysqli_query($link, $sql_initial); foreach($result_initial as $value){ $billno = $value['contract_no']; switch ($value['contract_no']) { case 'M220104': $billNo = 'SO20230701001'; break; case 'M230098': $billNo = 'SO20230701002'; break; case 'M230159': $billNo = 'SO20230701003'; break; case 'M230992': $billNo = 'SO20230901001'; break; case 'M230492': $billNo = 'SO20231110001'; break; case 'M230557': $billNo = 'SO20231110002'; break; case 'M230496': $billNo = 'SO20231110003'; break; case 'M230683': $billNo = 'SP20240108001'; break; case 'B230726': $billNo = 'SP20240116004'; break; case 'M220035': $billNo = 'T220035'; break; case 'M230098': $billNo = 'T230098'; break; } if(isset($arrayData[$billNo])){ $arrayData[$billNo]['invoice_budget'] += intval($value['invoice_budget']); $arrayData[$billNo]['received_budget'] += intval($value['received_budget']); } } // [invoice][發票號碼][0 發票日期, 1 發票金額, 2 發票狀態, 3 收款日期, 4 收款金額, 5 手續費, 6 核銷單號] foreach ($invoice_data as $invoice) { if (isset($invoice['BillNo']) && isset($arrayData[$invoice['BillNo']])) { $arrayData[$invoice['BillNo']]['invoice_budget'] += intval($invoice['LAmountWithTax']); $arrayData[$invoice['BillNo']]['invoice'][$invoice['InvoiceNo']] = [date("Y-m-d", strtotime($invoice['InvoiceDate'])), $invoice['LAmountWithTax'], $invoice['InvoiceState']]; } } // 把核銷單的內容補到發票資料中 foreach ($received_array as $received) { $BillNo = $received['OrderBillNo']; if (isset($arrayData[$BillNo])) { $arrayData[$BillNo]['received_budget'] += $received['CurrWriteOffLAmount']; } } // $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 催收次數 $table = ""; $excel_aray = array(); $print_array = array(); $today = strtotime(date('Ymt')); foreach ($arrayData as $key => $value) { if (isset($final_paystage[$key])) { for ($sequence = 1; $sequence <= count($final_paystage[$key]); $sequence++) { if (!is_null($value['ManagerId']) && $value['ManagerId'] !== '') { $managerId = $value['ManagerId']; } else { $managerId = $value[11]; } if (!is_null($value['ManagerName']) && $value['ManagerName'] !== '') { $managerName = $value['ManagerName']; } else { $managerName = $value[2]; } $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'] . "_" . $sequence; if (isset($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate']) && $final_paystage[$key][$sequence]['PlanPayDate'] !== NULL) { $havetopay = ($today >= strtotime($final_paystage[$key][$sequence]['PlanPayDate'])) ? "V" : "--"; } else { $havetopay = "--"; } $table_hadtopay = 0; switch ($havetopay) { case "V": $table_hadtopay = 1; $unInvoiceAmount = $final_paystage[$key][$sequence]['PayAmount'] - $final_paystage[$key][$sequence]['InvoiceAmount']; $unReceivedAmount = $final_paystage[$key][$sequence]['PayAmount'] - $final_paystage[$key][$sequence]['receivedAmount']; break; default: $unInvoiceAmount = 0; $unReceivedAmount = 0; break; } if (is_null($thisPayStage['PlanPayDate']) || empty($thisPayStage['PlanPayDate'])) { $thisplanpaydate = "--"; } else { $thisplanpaydate = $thisPayStage['PlanPayDate']; } if ($havetopay == "V" && ($unReceivedAmount > 10) && ($final_paystage[$key][$sequence]['collect_month'] >0)) { $print_array[$keyname] = [ $value[10], $thisPayStage['facilityno'], $value[1],$value[4], $value[5], $thisPayStage['name'], $thisplanpaydate, round($final_paystage[$key][$sequence]['PayAmount']), round($final_paystage[$key][$sequence]['receivedAmount']), round($unReceivedAmount), round($final_paystage[$key][$sequence]['collect_month']) ]; } $table_budget = round($final_paystage[$key][$sequence]['PayAmount']); $table_invoice_budget = round($final_paystage[$key][$sequence]['InvoiceAmount']); $table_received_budget = round($final_paystage[$key][$sequence]['receivedAmount']); $excel_aray[$keyname] = [ $value[10], $thisPayStage['facilityno'], $value[0], $value[1], $managerId, $managerName, $value[3], $value[4], $value[5], $value[6], $value[7], $value[8], $thisPayStage['name'], $thisplanpaydate, $havetopay, number_format(round($final_paystage[$key][$sequence]['PayAmount'])), number_format(round($final_paystage[$key][$sequence]['InvoiceAmount'])), number_format(round($unInvoiceAmount)), number_format(round($final_paystage[$key][$sequence]['receivedAmount'])), number_format(round($unReceivedAmount)), number_format(round($final_paystage[$key][$sequence]['collect_month'])) ]; if ($final_paystage[$key][$sequence]['InvoiceAmount'] > 1) { $invoice_state = 1; } else { $invoice_state = 0; } // $table1 = "INSERT INTO account_receivable_renovate( // `contract_no`, // `facility_no`, // `stagename`, // `budget`, // `receivable`, // `invoice_state`, // `invoice_budget`, // `received_budget` // "; // $table2 = ") VALUES ( // '$value[10]', // '$thisPayStage[facilityno]', // '$thisPayStage[name]', // $table_budget, // $table_hadtopay, // $invoice_state, // $table_invoice_budget, // $table_received_budget // "; // if (!is_null($final_paystage[$key][$sequence]['PlanPayDate']) && !empty($final_paystage[$key][$sequence]['PlanPayDate'])) { // $table1 .= ",`receivable_date`"; // $receivable_date = date('Y-m-d', strtotime($final_paystage[$key][$sequence]['PlanPayDate'])); // $table2 .= ",'$receivable_date' \n"; // } // $table .= $table1 . $table2 . "); \n"; } } } // $file_path = 'account_receivable_renovate_sql.sql'; // if (file_put_contents($file_path, $table) !== false) { // echo "SQL文件已成功生成:{$file_path}"; // } else { // echo "生成SQL文件时出现错误。"; // } $total_data = json_encode($print_array); $average_budget = $sum_total_budget / $sum_facility; $average_A40002 = $sum_A40002 / $sum_facility_A40002; $average_A40009 = $sum_A40009 / $sum_facility_A40009; $average_A40010 = $sum_A40010 / $sum_facility_A40010; $average_A40019 = $sum_A40019 / $sum_facility_A40019; ?>
合約號 | 作番號 | 部門 | 主管 | 契約員 | 客戶名稱 | 收款階段 | 應收日期 | 是否應收 | 合約金額 | 應收金額 | 已開金額 | 未開金額 | 已收金額 | 催收金額 | 催收次數 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
= $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]; ?> | 0) { echo $row[15]; } else { echo '0'; } ?> | = $row[16]; ?> | = $row[17]; ?> | = $row[18]; ?> | = $row[19]; ?> | = $row[20]; ?> |