从年假中扣除假期余额

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();
    .
    .