= $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." =>
"; // foreach($value as $key2 => $value2) { // echo $key2."
"; // print_r($value2); // echo "
"; // } // echo "
-------------------------------
"; // } // exit(); // 存進excel_array // $excel_array = array(); // $today = strtotime(date('Ymt')); foreach($arrayData as $key => $value) { echo $key."
"; foreach($value['facility'] as $key2 => $value2) { echo $key2."
"; foreach($value2 as $key3 => $value3){ echo $key3."
"; print_r($value3); echo "
*********************
"; } echo "
==================
"; } echo "
-------------------------------
"; }