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); + +?> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $value) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
合約號部門經理營業員客戶名稱簽約款應收簽約金額簽約最大催收次數簽約最小催收次數二次款應收二次金額二次最大催收次數二次最小催收次數貨抵工地款應收貨抵工地金額貨抵工地最大催收次數貨抵工地最小催收次數安裝款應收安裝金額安裝最大催收次數安裝最小催收次數試車款應收試車金額試車最大催收次數試車最小催收次數官檢款應收官檢金額官檢最大催收次數官檢最小催收次數移交款應收移交金額移交最大催收次數移交最小催收次數尾款應收尾款金額尾款最大催收次數尾款最小催收次數合約總金額目前應收已開發票金額已收金額
+
+ \ No newline at end of file diff --git a/wms/account-receivable-index.php b/wms/account-receivable-index.php index 762335a9..92161776 100644 --- a/wms/account-receivable-index.php +++ b/wms/account-receivable-index.php @@ -333,25 +333,17 @@ foreach ($wipwhole_array as $wip) { array_push($arrayData[$wip['contractno']]['arrive']['max'], intval(substr($wip['real_arrival_date'], 5, 2))); } } 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['estimated_shipping_date'] != NULL) { - $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出貨日)
"; - $arrayData[$wip['contractno']]['total_facility_num'] += 1; - $arrayData[$wip['contractno']]['second_num'] += 1; - } elseif ($wip['actual_tofactory_date'] != NULL) { - $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['actual_tofactory_date'] . "實際到觀音日)
"; + $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計到港)
"; $arrayData[$wip['contractno']]['total_facility_num'] += 1; - $arrayData[$wip['contractno']]['second_num'] += 1; } else { - $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (已達二次款收款條件)
"; + $arrayData[$wip['contractno']]['facilities'] .= $wip['facilityno'] . " (預計到港日待確認)
"; $arrayData[$wip['contractno']]['total_facility_num'] += 1; - $arrayData[$wip['contractno']]['second_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; } } } @@ -416,6 +408,11 @@ foreach ($received_array as $received) { } $data = json_encode($arrayData); +// foreach($arrayData as $value){ + +// } + + ?> - + + +合約作番明細 +
@@ -588,7 +592,7 @@ $data = json_encode($arrayData); var file_path = xhr.responseText; var link = document.createElement('a'); var name = "應收帳款" + "" + ".xlsx"; - link.setAttribute('href', window.location.origin + "/wms/account-receivable.xlsx"); + link.setAttribute('href', window.location.origin + "/wms/account-receivable-test.xlsx"); link.setAttribute('download', name); link.style.display = 'none'; document.body.appendChild(link); @@ -599,6 +603,7 @@ $data = json_encode($arrayData); xhr.send(JSON.stringify({ Bill: })); + } function sendData(BillNo) { diff --git a/wms/account-receivable-test.php b/wms/account-receivable-test.php index 4743cd7b..92f38f63 100644 --- a/wms/account-receivable-test.php +++ b/wms/account-receivable-test.php @@ -1,3 +1,9 @@ "; + echo "yesterday: " . $yesterday . "
"; + echo $today-$yesterday; + echo "
"; + $test = date('Ymd', $today-$yesterday); + echo $test; diff --git a/wms/account-receivable-test.xlsx b/wms/account-receivable-test.xlsx index 6b9b4abf..d8c73136 100644 Binary files a/wms/account-receivable-test.xlsx and b/wms/account-receivable-test.xlsx differ diff --git a/wms/facility-price-download.php b/wms/facility-price-download.php new file mode 100644 index 00000000..e69de29b diff --git a/wms/facility-price.php b/wms/facility-price.php new file mode 100644 index 00000000..a224193d --- /dev/null +++ b/wms/facility-price.php @@ -0,0 +1,154 @@ +query($sql); +// 合約號 客戶 營業員 合約含稅總金額 合約未稅總金額 [作番號 含稅金額 未稅金額 ] +foreach ($query as $row) { + if (!isset($array[$row['BillNo']])) { + $array[$row['BillNo']] = [$row['BillNo'], $row['BizPartnerName'], $row['PersonName'], 0, 0]; + $array[$row['BillNo']][$row['CU_MaterialId']] = [$row['CU_MaterialId'], $row['SPrice'], $row['OAmount']]; + } else { + if (isset($array[$row['BillNo']][$row['CU_MaterialId']])) { + + $array[$row['BillNo']][$row['CU_MaterialId']][1] += $row['SPrice']; + $array[$row['BillNo']][$row['CU_MaterialId']][2] += $row['OAmount']; + } else { + $array[$row['BillNo']][$row['CU_MaterialId']] = [$row['CU_MaterialId'], $row['SPrice'], $row['OAmount']]; + } + } + $array[$row['BillNo']][3] += $row['SPrice']; + $array[$row['BillNo']][4] += $row['OAmount']; +} + +$print = array(); +foreach ($array as $key => $ray) { + $print[$ray[0]] = [$ray[0], $ray[1], $ray[2], $ray[3], $ray[4]]; + foreach ($ray as $key2 => $ray2) { + if ($key2 !== 0 && $key2 !== 1 && $key2 !== 2 && $key2 !== 3 && $key2 !== 4) { + array_push($print[$ray[0]], $ray2[0], $ray2[1], $ray2[2]); + } + } +} + +$spreadsheet = new Spreadsheet(); +$sheet = $spreadsheet->getActiveSheet(); +$colomnHeader = [ + '合約號', '客戶', '營業員', '合約含稅總金額', '合約未稅總金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', + '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額', '作番號', '含稅金額', '未稅金額' +]; +$sheet->fromArray($colomnHeader, NULL, 'A1'); +$rowIndex = 2; +foreach ($print as $key => $pri) { + $sheet->fromArray([$pri], NULL, 'A' . $rowIndex); + $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', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ', + 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BK', 'BL', 'BM', 'BN', 'BO', 'BP', 'BQ', 'BR', 'BS', 'BT', 'BU', 'BV', 'BW', 'BX', 'BY', 'BZ', + 'CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CI', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CQ', 'CR', 'CS', 'CT', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ' + ]; + foreach ($column as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + $rowIndex++; +} +$writer = new Xlsx($spreadsheet); +$excelFileName = 'facility-price.xlsx'; +$writer->save($excelFileName); + + + + + + + + +// foreach($array as $ray){ +// print_r($ray); +// echo "
"; +// } +$data = json_encode($array); +?> + + + \ No newline at end of file diff --git a/wms/facility-price.xlsx b/wms/facility-price.xlsx new file mode 100644 index 00000000..bf2057d9 Binary files /dev/null and b/wms/facility-price.xlsx differ diff --git a/wms/header.php b/wms/header.php index 0ee482dd..0de63b69 100644 --- a/wms/header.php +++ b/wms/header.php @@ -39,7 +39,7 @@ if (isset($_REQUEST["function_name"])) { * 連線T8 MSSQL */ try { - $conn = new PDO("sqlsrv:Server=erp.masada.com.tw;Database=T8MASADA", "masada", "ztPmPP!HRoV6SL3E"); + $conn = new PDO("sqlsrv:Server=220.130.203.251;Database=T8MASADA", "masada", "ztPmPP!HRoV6SL3E"); if ($conn) { $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }