我有一个 CakePHP 应用程序,它被用作我们公司日常活动的中心门户。这些包括各种预订系统和信息,例如员工及其部门。系统运行 CakePHP 2.2
我目前正在实施的是一个系统,一个进行招标的人可以申请起草合同。该合同有各种变化,这取决于合同草案应在(投标的)截止日期前多长时间移交给法人,以起草正式合同。然后系统“预订”该合同成立的几天内的法人。那些日子不能进行其他预订。
该系统运行良好,但不会在周末拆分合同。它整天移动到周末之前。假设为了争论,我预定了一份合同草案,以在 6 月 18 日完成。系统确定总合同时间为 3 天。这意味着合同应该在一个周末结束,并且应该在 6 月 13 日、14 日和 17 日(不是 18 日,因为那时我需要完成文件)。但是,系统会在 6 月 12 日至 14 日封锁。
抱歉读了这么久,但我宁愿让你知道完整的故事,而不仅仅是零碎的。这是我的系统代码:
$tenderDocument = $this->TenderDocument->read(null,$id);
$deadline = $tenderDocument['TenderDocument']['required_date'];
$deadline = $start = date('Y-m-d',strtotime('-1 day',strtotime($deadline)));
$start = date('Y-m-d',strtotime('-' . $tenderDocument['ContractForm']['time'],strtotime($deadline)));
$dates[] = $current = $start;
while($current < $deadline){
$current = date('Y-m-d',strtotime('+1 day',strtotime($current)));
$dates[] = $current;
}
$is_available = array();
$is_available = $this->TenderDocument->find('first',
array(
'conditions' => array(
'(TenderDocument.start_date >= "' . $start . '" AND
TenderDocument.start_date < "' . $deadline . '" OR
TenderDocument.start_date <= "' . $deadline . '" AND
TenderDocument.required_date > "' . $deadline . '") AND
TenderDocument.id != ' . $id
)
)
);
$is_weekend = false;
foreach($dates as $date) {
if(date('l',strtotime($date)) == 'Sunday' || date('l',strtotime($date)) == 'Saturday') {
$is_weekend = true;
}
}
while(!empty($is_available) || $is_weekend) {
$is_weekend = false;
$dates = array();
$deadline = date('Y-m-d',strtotime('-1 day',strtotime($deadline)));
$start = date('Y-m-d',strtotime('-1 day',strtotime($start)));
$dates[] = $current = $start;
while($current < $deadline){
$current = date('Y-m-d',strtotime('+1 day',strtotime($current)));
$dates[] = $current;
}
foreach($dates as $date) {
if(date('l',strtotime($date)) == 'Sunday' || date('l',strtotime($date)) == 'Saturday') {
$is_weekend = true;
}
}
$is_available = $this->TenderDocument->find('first',
array(
'conditions' => array(
'(TenderDocument.start_date >= "' . $start . '" AND
TenderDocument.start_date < "' . $deadline . '" OR
TenderDocument.start_date <= "' . $deadline . '" AND
TenderDocument.required_date > "' . $deadline . '") AND
TenderDocument.id != ' . $id
)
)
);
}
在不相关的说明中,有什么方法可以简化/最小化此代码?