0

私の機能であなたのためのアップデートを得ました。これも正常に機能するようになりましたが、最初に病気になった日までの勤続年数に基づいて、完全に病気になる必要があります。私がそれを明確にしたことを願っています。私は自分の病気を解決するコード行をマークしましたが、選択したユーザーの年数がどこにあるかを知っていても、常に1つしか提供しません。

助けてください?

グレン・カーティス

function sickDay($id = null) {
    if($this->CURRENT_USER['User']['role_id'] > 3) { //directors and admins
        /*if(empty($this->data) || !isset($this->data['Holiday']['id'])) {

        } else {*/
        //Get the user sick days
        $userSickDays = $this->Holiday->find(
            'all',
            array(
                'conditions' => array(
                    'Holiday.holidaystype_id' => 3,
                    'Holiday.user_id' => $id
                ),
                'order' => 'Holiday.startson ASC'
            ));

        //Get years of service
        $userContracts = $this->Holiday->User->Contract->find(
            'all',
                array(
                    'conditions' => array( 'Contract.user_id' => $id), //$data['user_id']),
                    'order' => array( 'Contract.startson' => 'ASC' )
            ));

        //Loop through the user's sick days
        foreach ($userSickDays as $k => $sickDay) {
            //Get number of days in the current sick day
            $totSickdays = $this->Holiday->getNumberDaysFromHoliday($sickDay['Holiday']['id']);

            //Get number of sick days for the past 12 months
            if($k > 0) {
                for($i=0; $i<$k; $i++) {
                    if((strtotime(gmdate("Y-m-d", $sickDay['Holiday']['startson'])." -1 year GMT")) <= $userSickDays[$i]['Holiday']['startson']) {
                        $totSickdays += $this->Holiday->getNumberDaysFromHoliday($userSickDays[$i]['Holiday']['id']);
                    }
                }
            }
            foreach ($userContracts as $y => $contract) {

        THIS LINE HERE->$yearsService = $contract['Contract']['startson'] <= $sickDay['Holiday']['startson'];

                if ($contract['Contract']['startson'] <= $sickDay['Holiday']['startson']) {

                    if ($yearsService <= 1) {
                        $entitlement = 10;
                        $remaingDays = $entitlement - $totSickdays;
                        //echo 'one year';
                    } elseif ($yearsService <= 2) {
                        $entitlement = 20;
                        $remaingDays = $entitlement - $totSickdays;
                        //echo 'two years';
                    } elseif ($yearsService <= 4) {
                        $entitlement = 40;
                        $remaingDays = $entitlement - $totSickdays;
                        //echo 'up to five years';
                    } elseif ($yearsService >= 5) {
                        $entitlement = 60;
                        $remaingDays = $entitlement - $totSickdays;
                        //echo 'five years or more';
                    } else {
                        $entitlement = 0;
                        $remaingDays = 0;
                        //echo 'no sick pay';
                    }

                } //End of if statement.
            } //End of $userContracts Foreach Loop


            debug($yearsService);                           
        } //End of Foreach Loop

        //$this->render('/artists/holidayslist');
        //} //End For if empty check
    } // End for if CURRENT_USER
    die();
} //End of Function

以下の古い投稿

今、私は以前にこれについて助けを求めましたが、それは私の機能の選択された領域の 1 つであり、病欠日数を取得するためのものでした。それが機能するようになりました。私が取り組んでいるサイト内で、私のために構築された機能を見つけました。したがって、データベース内に入力された病欠の合計数があります。なぜそれを自分の勤続年数に設定できないのか、今では理解できないようです。

私自身をより明確にするために、この関数の結果は、選択された年内に現在のユーザーが病気になったことを確認することです。しかし、毎年、5月から5月などの契約年に。

そのため、ユーザーの資格を設定するための if ステートメントが多数あります。これは、勤続年数に基づいて変更されます。そして、それが設定されている場合、その契約年内にユーザーが取得した病欠を取得します。

私がやりたいことを説明したことを願っています。それが明確でない場合は、私に知らせてください。より詳細に説明しようとします.

これは CakePHP プロジェクトで使用されるページ用に書かれています。

大変感謝します

グレン・カーティス

function sickDay($id = null) {
    if($this->CURRENT_USER['User']['role_id'] > 3) { //directors and admins
        //Caculate if it's a full pay, half pay or nothing
        //$data = $this->data['Holiday'];

        //Get Holidaytypes
        $userSickDays = $this->Holiday->find(
            'all',
            array(
                'conditions' => array(
                    'Holiday.holidaystype_id' => 3,
                    'Holiday.user_id' => $id
                )
            )
        );

        //Get starting date
        $contracts = $this->Holiday->User->Contract->find(
            'all',
            array(
                'conditions' => array(
                    'Contract.user_id' => $id //$data['user_id']
                ),
                'order' => array(
                    'Contract.startson' => 'ASC'
                )
            )
        );

        $start = array_shift($contracts);
        $end = array_pop($contracts);
        $endDate = $end['Contract']['endson'];
        $startDate = $start['Contract']['startson'];

        if (empty($endDate)) { $endDate = time('now'); }

        $SortEnd = strftime("%Y", $endDate);
        $SortStart = strftime("%Y", $startDate);
        $YearsService = $SortEnd - $SortStart;

        //Get How Many sick days
        foreach ($userSickDays as $sickDay) {
            $typesDataEnds =  strtotime($sickDay['Holiday']['endson']);
            $typesDataStarts = $sickDay['Holiday']['startson'];

            $DateNow = date('U', strtotime('Now'));

            $GetSickDays = $this->Holiday->getNumberDaysFromHoliday($sickDay['Holiday']['id']);

            $TotalSick += $GetSickDays;

            if ($YearsService <= 1) {
                    $SetFullEntitlement = 5;
                    $SetHalfEntitlement = 5;
                    //echo 'one year';
            } elseif ($YearsService <= 2) {
                    $SetFullEntitlement = 10;
                    $SetHalfEntitlement = 10;
                    //echo 'two years';
            } elseif ($YearsService <= 5) {
                    $SetFullEntitlement = 20;
                    $SetHalfEntitlement = 20;
                    //echo 'up to five years';
            } elseif ($YearsService >= 6) {
                    $SetFullEntitlement = 30;
                    $SetHalfEntitlement = 30;
                    //echo 'five years or more';
            } else {
                    $SetFullEntitlement = 0;
                    $SetHalfEntitlement = 0;
                    //echo 'no sick pay';
            }

        } 
        //$this->render('/artists/holidayslist');

    } // End for if CURRENT_USER
    die();
} //End of Function
4

1 に答える 1

0

あなたのコードは(そう思われる)何のためにでも複雑すぎるようです

return (($TotalAnnualEntitlement - $SickDaysTakenThisYear) > 0) ? true : false;

あなたは彼らが契約されている期間に基づいて彼らの資格を計算する必要があります-十分に簡単です、そしてあなたは彼らがすでに取った日数から彼らの資格のある休日を取る必要があります。繰り返しますが、十分に簡単なようです。

残りの日数がある場合は、trueを返します。許容量を使用した場合、または超過した場合は、falseを返します。

または私は何かが欠けていますか?

于 2012-07-04T13:56:33.273 に答える