我在Leave Employee
上有这样的验证:
- 验证
startdate
小于applydate
(done)。 - 如果
maximumquota
小于0(完成),则不能申请休假。 - 如果
status = approved
,maximumquota - daysleave
(done).
我想在startdate
输入存在并被批准时添加另一个应用验证。startdate = startdate + daysleave
, on form status=rejected
.
我已经做了一个这样的算法:
if(startdate='startdate' between startdate(Y-m-(d+'daysleave')->where('status'=='approved')
{
$_post = 'status'=rejected,
'applydate=date('Y-m-d'),
'startdate';
)
} else {
}
这是我的创建控制器:
if ($model->load(Yii::$app->request->post())){
if($model->daysleaveleft(Yii::$app->user->id,date('Y',strtotime($model->startdate)))>0)
{
//Edited
if($model->startdate < max($s))
{
$model->status='2';
}//
if($model->startdate < $model->applydate)
{
echo "Error !";
}
else
{
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
}
}
else
{
$model->status='2';
}
}
else
{
return $this->render('create', ['model' => $model,]);
}
和我的Leave模型:
public function DaysLeaveLeft($id, $year) {
$models = Leave::find()->select(['daysleave'=>'sum(daysleave)'])->where(['status'=>'approved','EmpId' => $id,'year(startdate)'=>$year])->One();
$Setting = Setting::find()->where(['Var'=>'MaxLeave'])->One();
return $Setting->Val - $models['daysleave'];
}
我使用的操作步骤:
-
查询休假天数,如
startdate = 03-08-2016
,则enddate = startdate + Leave Days
。ALTER FUNCTION enddays(@Id bigint) RETURNS VARCHAR(10) AS BEGIN DECLARE @st DATE, @long INT,@Var VARCHAR(10)='0',@cekId INT =0 SELECT @cekId=id,@st=startdate,@long=leavedays FROM leave WHERE id=@Id IF @cekId > 0 BEGIN SELECT @long +=COUNT(dt) FROM calendar WHERE cast(dt as date) BETWEEN cast(@st as dt) and cast(DATEADD(day,@long,@st) as date) set @Var = CAST(CAST(DATEADD(DAY,@long,@st) AS DATE) AS VARCHAR(10)) END RETURN @Var END
-
然后做一个程序:
ALTER procedure endleave @id bigint as BEGIN SELECT dbo.endays(l.id) from leave l WHERE GETDATE() < CAST(dbo.enddays(l.id) as date) and EmpId=@id and status= 1 END
-
将此添加到
leavecontroller
:$id=Yii::$app->user->id; $query="exec endleave @id=$id"; $command=Yii::$app->db->createCommand($query); $s = $command->queryAll();
-
编辑控制器
if ($model->load(Yii::$app->request->post())) { if($model->daysleaveleft(Yii::$app->user->id,date('Y',strtotime($model->startdate)))>0) { //Edited if($model->startdate < max($s)) { $model->status = '2'; } if($model->startdate < $model->applydate) { echo "Error !"; } else { $model->save(); return $this->redirect(['view', 'id' => $model->id]); } } else { $model->status = '2'; } } else { return $this->render('create', ['model' => $model,]); }