2 changed files with 387 additions and 4 deletions
@ -0,0 +1,386 @@ |
|||
<?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']); |
|||
} |
|||
|
|||
/* 計算比例 |
|||
@param $facility_list array |
|||
@param $contract_no string |
|||
@param $contract_budget array |
|||
return float */ |
|||
function get_ratio($facility_list, $contract_no, $contract_budget) |
|||
{ |
|||
$ratio = 0; |
|||
if (empty($facility_list)) { |
|||
return 0; |
|||
} else { |
|||
foreach ($facility_list as $every) { |
|||
if (isset($contract_budget[$contract_no][$every]['total']) && isset($contract_budget[$contract_no]['total'])) { |
|||
$ratio += $contract_budget[$contract_no][$every]['total'] / $contract_budget[$contract_no]['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'] = 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']; |
|||
} |
|||
} |
|||
} |
|||
|
|||
//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]['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']; |
|||
} |
|||
// 合約收款階段內容分類 |
|||
$sign60 = array('簽訂後60天', '簽約60日', '簽約後60天', '簽訂後60日內', '訂金支付後60天'); |
|||
$sign90 = array('簽約後90天', '簽約後90日', '簽訂後90天'); |
|||
$sign120 = array('簽約後120天', '簽約後120日', '簽訂後120天'); |
|||
|
|||
|
|||
foreach ($PayStage_array as $key => &$value) { |
|||
echo $key . "<br>"; |
|||
foreach ($value as $paykey => $payvalue) { |
|||
echo $paykey . "<br>"; |
|||
print_r($payvalue); |
|||
switch ($payvalue['PayStage']) { |
|||
case '寶佳出貨前30天': |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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) { |
|||
$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天': |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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 (stristr($payvalue['PayStage'], '出貨前30')): |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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) { |
|||
$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')): |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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) { |
|||
$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')): |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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) { |
|||
$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')): |
|||
if ($wip_array[$payvalue['facilityno']]['real_arrival_date'] != null) { |
|||
$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) { |
|||
$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)): |
|||
$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)): |
|||
$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)): |
|||
$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')): |
|||
$estimate_time = strtotime($arrayData[$key]['PayStage'][1]['PlanPayDate']); |
|||
$signtime = $estimate_time + (30 * 86400); |
|||
$payvalue['PlanPayDate'] = date('Y-m-d', $signtime); |
|||
break; |
|||
default: |
|||
echo "其他"; |
|||
break; |
|||
} |
|||
if ($payvalue['PayStage'] == '寶佳出貨前30天') { |
|||
} |
|||
|
|||
|
|||
echo "<br>"; |
|||
if (isset($wip_array[$payvalue['facilityno']])) { |
|||
echo $wip_array[$payvalue['facilityno']]['estimated_shipping_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['real_contract_arrival_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['real_arrival_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['install_end_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['tryrun_end_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['official_check_date'] . "<br>"; |
|||
echo $wip_array[$payvalue['facilityno']]['delivery_date'] . "<br>"; |
|||
} |
|||
} |
|||
echo "<br>--------------------<br>"; |
|||
} |
|||
|
|||
|
|||
|
|||
//在$PayStage_array中排序 |
|||
// foreach($PayStage_array as $key => $value) { |
|||
// uasort($PayStage_array[$key], 'comparePlanPayDate'); |
|||
// } |
Loading…
Reference in new issue