You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
664 lines
38 KiB
664 lines
38 KiB
<?php
|
|
include "./header.php";
|
|
$start_date = empty($_POST['date_start']) ? null : $_POST['date_start'];
|
|
$end_date = empty($_POST['date_end']) ? null : $_POST['date_end'];
|
|
$sum_facility = 0;
|
|
$sum_contract = 0;
|
|
$sum_A40001 = 0;
|
|
$sum_A40008 = 0;
|
|
$sum_total_budget = 0;
|
|
$average_budget = 0;
|
|
$average_A40001 = 0;
|
|
$average_A40008 = 0;
|
|
$sum_invoice_budget = 0;
|
|
$sum_received_budget = 0;
|
|
$sum_collect_budget = 0;
|
|
|
|
// 主要array
|
|
$arrayData = array();
|
|
// 收款階段另存array整理收款順序
|
|
$PayStage_array = array();
|
|
// 所有的新梯合約號,方便後續SQL查詢
|
|
$contractNumbers = array();
|
|
|
|
/* 比較應收日期
|
|
@param $a array
|
|
@param $b array
|
|
return int */
|
|
function comparePlanPayDate($a, $b)
|
|
{
|
|
// return strtotime($a['PlanPayDate']) - strtotime($b['PlanPayDate']);
|
|
$aDate = strtotime($a['PlanPayDate']);
|
|
$bDate = strtotime($b['PlanPayDate']);
|
|
|
|
if ($aDate === false && $bDate === false) {
|
|
return 0; // 兩個日期都無效,視為相等
|
|
} elseif ($aDate === false) {
|
|
return 1; // $aDate 無效,認為 $aDate 較大
|
|
} elseif ($bDate === false) {
|
|
return -1; // $bDate 無效,認為 $bDate 較大
|
|
}
|
|
return $aDate - $bDate;
|
|
}
|
|
|
|
/* 計算比例
|
|
@param $facilityno string
|
|
@param $contractno string
|
|
@param $arrayData array
|
|
return float */
|
|
function get_ratio($facilityno, $contractno, $arrayData)
|
|
{
|
|
$ratio = 0;
|
|
if (isset($arrayData[$contractno])) {
|
|
$this_total = $arrayData[$contractno]['total_budget'];
|
|
if (isset($arrayData[$contractno]['facility'][$facilityno]['total_budget'])) {
|
|
$this_facility = $arrayData[$contractno]['facility'][$facilityno]['total_budget'];
|
|
$ratio = $this_facility / $this_total;
|
|
}
|
|
}
|
|
return $ratio;
|
|
}
|
|
|
|
// 查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('員工姓名', '主管工號', '主管姓名');
|
|
$find_manager = array();
|
|
if (is_iterable($managers)) {
|
|
foreach ($managers as $manager) {
|
|
$find_manager[$manager['accountid']] = $manager;
|
|
}
|
|
}
|
|
$follower = find_follow($user_id);
|
|
|
|
// T8所有合約號
|
|
$sql_all_contract = "SELECT MainAll.* ,
|
|
Person.PersonName,
|
|
Dept.DeptName FROM
|
|
(SELECT
|
|
Main.BillNo,
|
|
Main.BillDate,
|
|
Main.BizPartnerId,
|
|
Biz.ShortName,
|
|
Biz.BizPartnerName,
|
|
Biz.ContactAddress,
|
|
Main.OAmountWithTax,
|
|
Main.PersonId,
|
|
Main.DeptId,
|
|
Main.ModeId,
|
|
Main.CurrentState
|
|
FROM salSalesOrder AS Main
|
|
LEFT JOIN comBusinessPartner AS Biz ON Biz.BizPartnerId = Main.BizPartnerId) AS MainAll
|
|
LEFT JOIN comGroupPerson AS Person ON MainAll.PersonId= Person.PersonId
|
|
LEFT JOIN comDepartment AS Dept ON MainAll.DeptId= Dept.DeptId
|
|
WHERE MainAll.ModeId = 'M' AND (MainAll.CurrentState=2 OR MainAll.CurrentState=4) ";
|
|
if (!is_null($start_date)) {
|
|
$start_date = (int)date('Ymd', strtotime($start_date));
|
|
$sql_all_contract .= " AND MainAll.BillDate >= $start_date ";
|
|
}
|
|
if (!is_null($end_date)) {
|
|
$end_date = (int)date('Ymd', strtotime($end_date));
|
|
$sql_all_contract .= " AND MainAll.BillDate <= $end_date ";
|
|
}
|
|
if ((in_array($user_id, array('M0060', 'M0175'))) || (in_array(accountidToDepartId($user_id), array('220', '210', '321')))) {
|
|
} else {
|
|
$sql_all_contract .= " AND (MainAll.PersonId = '$user_id'";
|
|
if (count($follower) > 0) {
|
|
$column_str = "('$user_id'" . ",'";
|
|
$column_str .= implode("','", $follower);
|
|
$column_str .= "')";
|
|
$sql_all_contract .= " OR MainAll.PersonId IN $column_str)";
|
|
} else {
|
|
$sql_all_contract .= ")";
|
|
};
|
|
}
|
|
$str_numbers = "";
|
|
$query_all_contract = $conn->query($sql_all_contract);
|
|
if (is_iterable($query_all_contract)) {
|
|
foreach ($query_all_contract as $contract_numbers) {
|
|
if (!in_array($contract_numbers['BillNo'], $contractNumbers)) {
|
|
array_push($contractNumbers, $contract_numbers['BillNo']);
|
|
$arrayData[$contract_numbers['BillNo']]['BillNo'] = isset($contract_numbers['BillNo']) ? $contract_numbers['BillNo'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['BillDate'] = isset($contract_numbers['BillDate']) ? $contract_numbers['BillDate'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['CustomerId'] = isset($contract_numbers['BizPartnerId']) ? $contract_numbers['BizPartnerId'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['CustomerName'] = isset($contract_numbers['BizPartnerName']) ? $contract_numbers['BizPartnerName'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['CustomerAddress'] = isset($contract_numbers['ContactAddress']) ? $contract_numbers['ContactAddress'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['OAmountWithTax'] = isset($contract_numbers['OAmountWithTax']) ? $contract_numbers['OAmountWithTax'] : 0;
|
|
$arrayData[$contract_numbers['BillNo']]['PersonId'] = isset($contract_numbers['PersonId']) ? $contract_numbers['PersonId'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['DeptId'] = isset($contract_numbers['DeptId']) ? $contract_numbers['DeptId'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['PersonName'] = isset($contract_numbers['PersonName']) ? $contract_numbers['PersonName'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['DeptName'] = isset($contract_numbers['DeptName']) ? $contract_numbers['DeptName'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['ShortName'] = isset($contract_numbers['ShortName']) ? $contract_numbers['ShortName'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['ManagerId'] = !empty($find_manager[$contract_numbers['PersonId']]['manager']) ? $find_manager[$contract_numbers['PersonId']]['manager'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['ManagerName'] = !empty($find_manager[$contract_numbers['PersonId']]['manager_name']) ? $find_manager[$contract_numbers['PersonId']]['manager_name'] : '--';
|
|
$arrayData[$contract_numbers['BillNo']]['invoice_budget'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['received_budget'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['receivable_budget'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['collect_budget'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['A40001'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['A40008'] = 0;
|
|
$arrayData[$contract_numbers['BillNo']]['facility_status'] = "";
|
|
$arrayData[$contract_numbers['BillNo']]['facility'] = array();
|
|
$arrayData[$contract_numbers['BillNo']]['total_budget'] = $contract_numbers['OAmountWithTax'];
|
|
$sum_total_budget += $contract_numbers['OAmountWithTax'];
|
|
}
|
|
}
|
|
$str_numbers .= "('" . implode("','", $contractNumbers) . "')";
|
|
}
|
|
|
|
// T8 銷售訂單 作番總金額、作番A40001金額、作番A40008金額、合約A40001金額、合約A40008金額
|
|
$sql_contract_budget = "SELECT A.BillNo, A.OAmountWithTax,A.CU_MaterialId, A.MaterialId FROM salSalesOrderDetail AS A
|
|
LEFT JOIN salSalesOrder AS B ON A.BillNo=B.BillNo
|
|
WHERE B.ModeId='M' AND A.ItemType=1 ";
|
|
$query_contract_budget = $conn->query($sql_contract_budget);
|
|
foreach ($query_contract_budget as $contract_budget) {
|
|
if (isset($arrayData[$contract_budget['BillNo']])) {
|
|
$arrayData[$contract_budget['BillNo']][$contract_budget['MaterialId']] += $contract_budget['OAmountWithTax'];
|
|
if (isset($arrayData[$contract_budget['BillNo']]['facility']) && isset($arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']])) {
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']]['total_budget'] += $contract_budget['OAmountWithTax'];
|
|
if (isset($arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']][$contract_budget['MaterialId']])) {
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']][$contract_budget['MaterialId']] += $contract_budget['OAmountWithTax'];
|
|
} else {
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']][$contract_budget['MaterialId']] = $contract_budget['OAmountWithTax'];
|
|
}
|
|
} else {
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']]['total_budget'] = $contract_budget['OAmountWithTax'];
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']][$contract_budget['MaterialId']] = $contract_budget['OAmountWithTax'];
|
|
$arrayData[$contract_budget['BillNo']]['facility'][$contract_budget['CU_MaterialId']]['status'] = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
//T8 銷售訂單 階段收款計畫
|
|
$sql_PayStage = "SELECT
|
|
a.RowNo,
|
|
a.BillNo,
|
|
s.BillDate,
|
|
a.PayStage,
|
|
a.PlanPayAmt,
|
|
a.PlanPayDate,
|
|
s.BizPartnerId,
|
|
s.PersonId
|
|
FROM salOrderStagePay AS a
|
|
LEFT JOIN salSalesOrder AS s on a.BillNo = s.BillNo
|
|
WHERE s.ModeId = 'M' AND (s.CurrentState=2 OR s.CurrentState=4) ";
|
|
if (!empty($str_numbers)) {
|
|
$sql_PayStage .= " AND s.BillNo IN " . $str_numbers;
|
|
}
|
|
|
|
$query_PayStage = $conn->query($sql_PayStage);
|
|
// 把階段收款計畫放進arrayData內
|
|
foreach ($query_PayStage as $PayStage) {
|
|
if (isset($arrayData[$PayStage['BillNo']])) {
|
|
$arrayData[$PayStage['BillNo']]['PayStage'][$PayStage['RowNo']]['PayStage'] = $PayStage['PayStage'];
|
|
$arrayData[$PayStage['BillNo']]['PayStage'][$PayStage['RowNo']]['PlanPayAmt'] = $PayStage['PlanPayAmt'];
|
|
$arrayData[$PayStage['BillNo']]['PayStage'][$PayStage['RowNo']]['PlanPayDate'] = $PayStage['PlanPayDate'];
|
|
if (isset($arrayData[$PayStage['BillNo']]['facility']) && is_iterable($arrayData[$PayStage['BillNo']]['facility'])) {
|
|
foreach ($arrayData[$PayStage['BillNo']]['facility'] as $key => &$value) {
|
|
$tmpkey = $key . $PayStage['RowNo'];
|
|
$arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage'][$tmpkey] = $arrayData[$PayStage['BillNo']]['PayStage'][$PayStage['RowNo']];
|
|
$arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage'][$tmpkey]['PlanPayAmt'] = $arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage'][$tmpkey]['PlanPayAmt'] * get_ratio($key, $PayStage['BillNo'], $arrayData);
|
|
$arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage'][$tmpkey]['facilityno'] = $key;
|
|
if (isset($PayStage_array[$PayStage['BillNo']])) {
|
|
$PayStage_array[$PayStage['BillNo']] = array_merge($PayStage_array[$PayStage['BillNo']], $arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage']);
|
|
} else {
|
|
$PayStage_array[$PayStage['BillNo']] = $arrayData[$PayStage['BillNo']]['facility'][$key]['PayStage'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//作番大日程
|
|
$sql_wip = "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 ";
|
|
|
|
// 將作番大日程新梯資料存入array中方便查詢
|
|
// 作番號 -> estimated_shipping_date 預計出港日; real_contract_arrival_date 預計出貨日; real_arrival_date 實際出貨日;
|
|
// install_end_date 安裝完畢日; tryrun_end_date 試車完畢日; official_check_date 官檢日; delivery_date 移交完畢日
|
|
$wip_array = array();
|
|
$query_wip = mysqli_query($link, $sql_wip);
|
|
foreach ($query_wip as $wip) {
|
|
$wip_array[$wip['facilityno']]['estimated_shipping_date'] = $wip['estimated_shipping_date'];
|
|
$wip_array[$wip['facilityno']]['real_contract_arrival_date'] = $wip['real_contract_arrival_date'];
|
|
$wip_array[$wip['facilityno']]['real_arrival_date'] = $wip['real_arrival_date'];
|
|
$wip_array[$wip['facilityno']]['install_end_date'] = $wip['install_end_date'];
|
|
$wip_array[$wip['facilityno']]['tryrun_end_date'] = $wip['tryrun_end_date'];
|
|
$wip_array[$wip['facilityno']]['official_check_date'] = $wip['official_check_date'];
|
|
$wip_array[$wip['facilityno']]['delivery_date'] = $wip['delivery_date'];
|
|
if (isset($arrayData[$wip['contractno']]) && isset($arrayData[$wip['contractno']]['facility'][$wip['facilityno']])) {
|
|
if ($wip['delivery_date'] != NULL && $wip['delivery_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['delivery_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['delivery_date'] . "已移交";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['delivery_date'] . "已移交) ";
|
|
} elseif ($wip['official_check_date'] != NULL && $wip['official_check_date'] != '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['official_check_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['official_check_date'] . "官檢完畢";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['official_check_date'] . "官檢完畢) ";
|
|
} elseif ($wip['tryrun_end_date'] != NULL && $wip['tryrun_end_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['tryrun_end_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['tryrun_end_date'] . "試車完畢";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['tryrun_end_date'] . "試車完畢) ";
|
|
} elseif ($wip['install_end_date'] != NULL && $wip['install_end_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['install_end_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['install_end_date'] . "安裝完畢";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['install_end_date'] . "安裝完畢) ";
|
|
} elseif ($wip['real_arrival_date'] != NULL && $wip['real_arrival_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['real_arrival_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['real_arrival_date'] . "貨抵工地";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['real_arrival_date'] . "貨抵工地) ";
|
|
} elseif ($wip['real_contract_arrival_date'] != NULL && $wip['real_contract_arrival_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['real_contract_arrival_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['real_contract_arrival_date'] . "預計出貨";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['real_contract_arrival_date'] . "預計出貨) ";
|
|
} elseif ($wip['estimated_shipping_date'] != NULL && $wip['estimated_shipping_date'] !== '1970-01-01' && $wip['delivery_date'] !== '1970-01-11' && !empty($wip['estimated_shipping_date'])) {
|
|
$arrayData[$wip['contractno']]['facility'][$wip['facilityno']]['status'] = $wip['estimated_shipping_date'] . "預計出港";
|
|
$arrayData[$wip['contractno']]['facility_status'] .= $wip['facilityno'] . " (" . $wip['estimated_shipping_date'] . "預計出港) ";
|
|
}
|
|
}
|
|
}
|
|
// 合約收款階段內容分類
|
|
$sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天');
|
|
$sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天');
|
|
$sign120 = array('簽約後120天', '簽約後120日', '簽訂後120天', '合約簽訂後120天');
|
|
$sign0 = array('簽約', '簽訂', '合約簽訂', '訂金');
|
|
$arrival = array('貨抵工地', '貨底工地', '工地動工');
|
|
$final6 = array('核可函取得後6個月', '得合格函後6個月');
|
|
|
|
|
|
foreach ($PayStage_array as $key => &$value) {
|
|
foreach ($value as $paykey => &$payvalue) {
|
|
if (isset($wip_array[$payvalue['facilityno']])) {
|
|
switch ($payvalue['PayStage']) {
|
|
case '寶佳出貨前30天':
|
|
$payvalue['stage'] = '訂金';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time - (30 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$signtime = $estimate_time - (30 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case '寶佳出貨後10天':
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time + (10 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case '貨抵工地後90天':
|
|
$payvalue['stage'] = '貨抵工地款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time + (90 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case '安裝試車後90天':
|
|
$payvalue['stage'] = '試車款';
|
|
if ($wip_array[$payvalue['facilityno']]['tryrun_end_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['tryrun_end_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['tryrun_end_date'])) {
|
|
$estimate_time = strtotime($wip['tryrun_end_date']);
|
|
$signtime = $estimate_time + (90 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case '交車後270天':
|
|
$payvalue['stage'] = '尾款';
|
|
if ($wip_array[$payvalue['facilityno']]['delivery_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['delivery_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['delivery_date'])) {
|
|
$estimate_time = strtotime($wip['delivery_date']);
|
|
$signtime = $estimate_time + (270 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $arrival)):
|
|
$payvalue['stage'] = '貨抵工地款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time + (10 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case '二次款':
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '出貨前30') || stristr($payvalue['PayStage'], '簽約(出貨前30天)')):
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time - (30 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$signtime = $estimate_time - (30 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '出貨前60')):
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time - (60 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$signtime = $estimate_time - (60 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '出貨前90')):
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time - (90 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$signtime = $estimate_time - (90 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '出貨前120')):
|
|
$payvalue['stage'] = '二次款';
|
|
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_arrival_date']);
|
|
$signtime = $estimate_time - (120 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} elseif ($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['real_contract_arrival_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['real_contract_arrival_date'])) {
|
|
$estimate_time = strtotime($wip['real_contract_arrival_date']);
|
|
$signtime = $estimate_time - (120 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $sign60)):
|
|
$payvalue['stage'] = '二次款';
|
|
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']);
|
|
$signtime = $estimate_time + (60 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $sign90)):
|
|
$payvalue['stage'] = '二次款';
|
|
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']);
|
|
$signtime = $estimate_time + (90 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $sign120)):
|
|
$payvalue['stage'] = '二次款';
|
|
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']);
|
|
$signtime = $estimate_time + (120 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '簽訂後30')):
|
|
$payvalue['stage'] = '二次款';
|
|
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']);
|
|
$signtime = $estimate_time + (30 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime);
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $sign0)):
|
|
$payvalue['stage'] = '訂金';
|
|
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '試車')):
|
|
$payvalue['stage'] = '試車款';
|
|
if ($wip_array[$payvalue['facilityno']]['tryrun_end_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['tryrun_end_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['tryrun_end_date'])) {
|
|
$estimate_time = strtotime($wip['tryrun_end_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '安裝') || stristr($payvalue['PayStage'], '貨抵工地且完工')):
|
|
$payvalue['stage'] = '安裝款';
|
|
if ($wip_array[$payvalue['facilityno']]['install_end_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['install_end_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['install_end_date'])) {
|
|
$estimate_time = strtotime($wip['install_end_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (in_array($payvalue['PayStage'], $final6)):
|
|
$payvalue['stage'] = '尾款';
|
|
if ($wip_array[$payvalue['facilityno']]['delivery_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['delivery_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['delivery_date'])) {
|
|
$estimate_time = strtotime($wip['delivery_date']);
|
|
$estimate_time = $estimate_time + (180 * 86400);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '合格') || stristr($payvalue['PayStage'], '驗收') || stristr($payvalue['PayStage'], '驗收')):
|
|
$payvalue['stage'] = '官檢驗收款';
|
|
if ($wip_array[$payvalue['facilityno']]['official_check_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['official_check_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['official_check_date'])) {
|
|
$estimate_time = strtotime($wip['official_check_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
case (stristr($payvalue['PayStage'], '交車') || stristr($payvalue['PayStage'], '移交') || stristr($payvalue['PayStage'], '完工') || stristr($payvalue['PayStage'], '許可') || stristr($payvalue['PayStage'], '核可')):
|
|
$payvalue['stage'] = '交車款';
|
|
if ($wip_array[$payvalue['facilityno']]['delivery_date'] !== null && strtotime($wip_array[$payvalue['facilityno']]['delivery_date']) > 975686400 && !empty($wip_array[$payvalue['facilityno']]['delivery_date'])) {
|
|
$estimate_time = strtotime($wip['delivery_date']);
|
|
$payvalue['PlanPayDate'] = date('Y-m-d', $estimate_time);
|
|
} else {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
break;
|
|
default:
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
break;
|
|
}
|
|
if (strtotime($payvalue['PlanPayDate']) < 975686400) {
|
|
$payvalue['PlanPayDate'] = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 在$PayStage_array中排序
|
|
foreach ($PayStage_array as $key => $value) {
|
|
uasort($PayStage_array[$key], 'comparePlanPayDate');
|
|
}
|
|
// 加入序號
|
|
foreach ($PayStage_array as &$payStage) {
|
|
$sequenceNumber = 1;
|
|
foreach ($payStage as $tk => &$pstage) {
|
|
$pstage['sequenceNumber'] = $sequenceNumber;
|
|
$sequenceNumber += 1;
|
|
}
|
|
}
|
|
|
|
// 整理好的收款階段放入 $final_paystage
|
|
$final_paystage = array();
|
|
foreach ($PayStage_array as $key => &$payStage) {
|
|
if (is_iterable($payStage)) {
|
|
foreach ($payStage as $key2 => $pstage) {
|
|
$final_paystage[$key][$pstage['sequenceNumber']] = $pstage;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 發票資訊
|
|
$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 LEN(CheckAll.FromSalSalesOrder)>0";
|
|
$query_invoice = $conn->query($sql_invoice);
|
|
|
|
//發票資訊回填到arrayData
|
|
foreach($query_invoice as $invoice) {
|
|
if(isset($arrayData[$invoice['BillNo']])) {
|
|
$arrayData[$invoice['BillNo']]['invoice_budget'] += $invoice['LAmountWithTax'];
|
|
}
|
|
}
|
|
|
|
// 核銷資訊
|
|
$sql_received = "SELECT
|
|
CheckDetail.OrderBillNo,
|
|
arWriteOffBillDetail.FromBillNo AS CheckBillNo,
|
|
arWriteOffBillDetail.FromRowCode AS CheckRowCode,
|
|
arWriteOffBillDetail.CurrStandOffOAmount,
|
|
CheckDetail.TypeId
|
|
FROM arWriteOffBillDetail
|
|
LEFT JOIN
|
|
(SELECT
|
|
arCheckBillDetail.BillNo,
|
|
arCheckBillDetail.RowCode,
|
|
arCheckBillDetail.FromSalSalesOrder AS OrderBillNo,
|
|
salSalesOrder.TypeId,
|
|
salSalesOrder.ModeId
|
|
FROM arCheckBillDetail
|
|
LEFT JOIN salSalesOrder
|
|
ON salSalesOrder.BillNo =arCheckBillDetail.FromSalSalesOrder )
|
|
AS CheckDetail
|
|
ON CheckDetail.BillNo=arWriteOffBillDetail.FromBillNo AND arWriteOffBillDetail.FromRowCode = CheckDetail.RowCode
|
|
WHERE CheckDetail.ModeId = 'M'";
|
|
$query_received = $conn->query($sql_received);
|
|
|
|
// 核銷資訊回填到arrayData
|
|
foreach($query_received as $received) {
|
|
if(isset($arrayData[$received['OrderBillNo']])) {
|
|
$arrayData[$received['OrderBillNo']]['received_budget'] += $received['CurrStandOffOAmount'];
|
|
}
|
|
}
|
|
|
|
// 將發票與核銷資訊 分別計算作番收款階段金額 與 催收次數
|
|
$today = strtotime(date('Y-m-t'));
|
|
foreach ($final_paystage as $key => &$value) {
|
|
$tmpinvoice = $arrayData[$key]['invoice_budget'];
|
|
$tmpreceived = $arrayData[$key]['received_budget'];
|
|
for($sequenceNumber = 1; $sequenceNumber <= count($value); $sequenceNumber++) {
|
|
if(isset($value[$sequenceNumber]['PlanPayDate'])) {
|
|
$collect_month = collect_month(strtotime($value[$sequenceNumber]['PlanPayDate']));
|
|
if($today > strtotime($value[$sequenceNumber]['PlanPayDate'])){
|
|
$value[$sequenceNumber]['hadtopay'] = 'V';
|
|
}else{
|
|
$value[$sequenceNumber]['hadtopay'] = '--';
|
|
}
|
|
}else{
|
|
$collect_month = 0;
|
|
$value[$sequenceNumber]['hadtopay'] = '--';
|
|
}
|
|
if($tmpinvoice >= $value[$sequenceNumber]['PlanPayAmt']){
|
|
$value[$sequenceNumber]['invoice_budget'] = $value[$sequenceNumber]['PlanPayAmt'];
|
|
$tmpinvoice -= $value[$sequenceNumber]['invoice_budget'];
|
|
}else{
|
|
$value[$sequenceNumber]['invoice_budget'] = $tmpinvoice;
|
|
$tmpinvoice = 0;
|
|
}
|
|
if($tmpreceived > $value[$sequenceNumber]['PlanPayAmt']){
|
|
$value[$sequenceNumber]['received_budget'] = $value[$sequenceNumber]['PlanPayAmt'];
|
|
$tmpinvoice -= $value[$sequenceNumber]['received_budget'];
|
|
}else{
|
|
$value[$sequenceNumber]['received_budget'] = $tmpreceived;
|
|
$tmpreceived = 0;
|
|
}
|
|
if($collect_month >0 && $value[$sequenceNumber]['PlanPayAmt']> $value[$sequenceNumber]['received_budget']){
|
|
$value[$sequenceNumber]['collect_month'] = $collect_month;
|
|
}else{
|
|
$value[$sequenceNumber]['collect_month'] = 0;
|
|
}
|
|
|
|
}
|
|
}
|
|
// foreach ($final_paystage as $key => $value) {
|
|
// echo $key." => <br>";
|
|
// foreach($value as $key2 => $value2) {
|
|
// echo $key2."<br>";
|
|
// print_r($value2);
|
|
// echo "<br>";
|
|
// }
|
|
// echo "<br>-------------------------------<br>";
|
|
// }
|
|
// exit();
|
|
|
|
// 存進excel_array
|
|
// $excel_array = array();
|
|
// $today = strtotime(date('Ymt'));
|
|
foreach($arrayData as $key => $value) {
|
|
echo $key."<br>";
|
|
foreach($value['facility'] as $key2 => $value2) {
|
|
echo $key2."<br>";
|
|
foreach($value2 as $key3 => $value3){
|
|
echo $key3." <br> ";
|
|
print_r($value3);
|
|
echo "<br>*********************<br>";
|
|
}
|
|
echo "<br>==================<br>";
|
|
}
|
|
echo "<br>-------------------------------<br>";
|
|
}
|