从年假中扣除假期余额
Deduct leave balance from annual leave
有人请假后如何扣除休假余额?
这是来自 Leaveapplication.php
。如您所见,有一个 "Leave Taken" 列:
这是来自 Annualleave.php
:
我想在每次用户申请休假时从 "Leave Balance" 列中扣除 "Leave Taken"。
我试过这个代码:
public function actionCreate()
{
$model = new Leaveapplication();
$model1 = new Annualleave();
//$defaultstatus = $model->leave_application_status_id == '1';
if ($model->load(Yii::$app->request->post()) && $model->save()) {
/*Yii::$app->mailer->compose()
->setFrom('nazmigol@gmail.com')
->setTo('nazmiscore@gmail.com')
->setSubject('Leave Application')
->setTextBody('nak cuti boss')
->setHTMLBody('Cuti lah bosskuuuuuuuuuuuuuuuuuuuuuuu')
->send();*/
$leavetype = $model->leaveType_id;
$date1 = $model->startDate;
$date2 = $model->endDate;
$date1 = strtotime($date1);
$date2 = strtotime($date2);
switch($leavetype){
case "1":
$date1 = new \DateTime($model->startDate);
$date2 = new \DateTime($model->endDate);
$end = $date2->format('Y-m-d');
$interval = new \DateInterval('P1D');
$date2 -> add($interval);
$period = new \DatePeriod($date1, $interval, $date2);
foreach($period as $date){
$allDates[] = [
'date'=>$date->format('Y-m-d'),
'dayNo'=>$date->format('N'),
];
}
$holidays = Publicholiday::find()
->select('date')
->where(['between', 'date', $date1->format('Y-m-d'), $end])
->indexBy('date')
->column();
$workDay = 0;
foreach($allDates as $value){
$isWeekOff = $value['dayNo'] == 6 || $value ['dayNo'] == 7;
if(!$isWeekOff && !isset($holidays [$value['date']])){
$workDay++;
}
}
$model->no_of_days = $workDay;
$model->save();
$annualleave = Annualleave::find()
->select('leaveBalance')
->where(['staffNo'=>$model1->staffNo])
->one();
$annualleave = $annualleave - $workDay;
$model1->leaveBalance = $annualleave;
$model1->save();
break; ......
假设leaveBalance
的结果是23.5。但是使用该代码,系统会创建如下新数据:
删除 $model1
年假的新实例。您只需要修改现有的 AnnualLeave。
public function actionCreate()
{
$model = new Leaveapplication();
//$model1 = new Annualleave();
.
.
.
.
.
$annualleave = Annualleave::find()
->where(['staffNo' => $model->staffNo])
->one();
$annualleave->leaveBalance = $annualleave->leaveBalance - $workDay;
$annualleave->save();
.
.
有人请假后如何扣除休假余额?
这是来自 Leaveapplication.php
。如您所见,有一个 "Leave Taken" 列:
这是来自 Annualleave.php
:
我想在每次用户申请休假时从 "Leave Balance" 列中扣除 "Leave Taken"。
我试过这个代码:
public function actionCreate()
{
$model = new Leaveapplication();
$model1 = new Annualleave();
//$defaultstatus = $model->leave_application_status_id == '1';
if ($model->load(Yii::$app->request->post()) && $model->save()) {
/*Yii::$app->mailer->compose()
->setFrom('nazmigol@gmail.com')
->setTo('nazmiscore@gmail.com')
->setSubject('Leave Application')
->setTextBody('nak cuti boss')
->setHTMLBody('Cuti lah bosskuuuuuuuuuuuuuuuuuuuuuuu')
->send();*/
$leavetype = $model->leaveType_id;
$date1 = $model->startDate;
$date2 = $model->endDate;
$date1 = strtotime($date1);
$date2 = strtotime($date2);
switch($leavetype){
case "1":
$date1 = new \DateTime($model->startDate);
$date2 = new \DateTime($model->endDate);
$end = $date2->format('Y-m-d');
$interval = new \DateInterval('P1D');
$date2 -> add($interval);
$period = new \DatePeriod($date1, $interval, $date2);
foreach($period as $date){
$allDates[] = [
'date'=>$date->format('Y-m-d'),
'dayNo'=>$date->format('N'),
];
}
$holidays = Publicholiday::find()
->select('date')
->where(['between', 'date', $date1->format('Y-m-d'), $end])
->indexBy('date')
->column();
$workDay = 0;
foreach($allDates as $value){
$isWeekOff = $value['dayNo'] == 6 || $value ['dayNo'] == 7;
if(!$isWeekOff && !isset($holidays [$value['date']])){
$workDay++;
}
}
$model->no_of_days = $workDay;
$model->save();
$annualleave = Annualleave::find()
->select('leaveBalance')
->where(['staffNo'=>$model1->staffNo])
->one();
$annualleave = $annualleave - $workDay;
$model1->leaveBalance = $annualleave;
$model1->save();
break; ......
假设leaveBalance
的结果是23.5。但是使用该代码,系统会创建如下新数据:
删除 $model1
年假的新实例。您只需要修改现有的 AnnualLeave。
public function actionCreate()
{
$model = new Leaveapplication();
//$model1 = new Annualleave();
.
.
.
.
.
$annualleave = Annualleave::find()
->where(['staffNo' => $model->staffNo])
->one();
$annualleave->leaveBalance = $annualleave->leaveBalance - $workDay;
$annualleave->save();
.
.