Domas
Domas

Reputation: 1133

debugging beforeSave() in cakePHP

I am trying to debug the beforeSave function, but have no idea of how to do it properly. var_dump and debug functions are just being skipped, even though the debug level is set to two. What happens when trying to save is that the user is notified that an Event was saved, but in reality it is not.

Here is the code from 'Event' model:

    public function beforeSave($options = array()){

    if($this->calculateWorkingHours($this->data[$this->alias])){
        return false;
    }else{
        return true;
    }


}

public function calculateWorkingHours($event){

sscanf($event['start_time'], '%d:%d:%d', $startHour, $startMin, $startSec);
sscanf($event['finish_time'], '%d:%d:%d', $finishHour, $finishMin, $finishSec);

    $pauseHour = $event['pause']['hour'];
    $pauseMin = $event['pause']['min'];

    $startInMinutes = ($startHour * 60 + $startMin);
    $finishInMinutes = ($finishHour * 60 + $finishMin);

    $totalPauseMinutes = ($pauseHour * 60 + $pauseMin);

    $differenceInMinutes = $finishInMinutes - $startInMinutes;
    $finalHours;
    $finalMinutes;

    if($differenceInMinutes > 0){//possitive minutes
        if($totalPauseMinutes < $differenceInMinutes){
            if($event['paid']=='1'){
                $finalHours = floor($differenceInMinutes / 60);
                $finalMinutes = $differenceInMinutes - $finalHours * 60;
            }else{//if breaks are not paid
                $totalMinutes = $differenceInMinutes - $totalPauseMinutes;
                $finalHours = floor($totalMinutes / 60);
                $finalMinutes = $totalMinutes - $finalHours * 60;
            }
            $event['hours'] = $finalHours;
            $event['minutes'] = $finalMinutes;
        }
    }else{//negative minutes
            $totalMinutesPreBreak = floor(((1440 - $startInMinutes)+ $finishInMinutes) + ((1440 - $startInMinutes) + $finishInMinutes))/2;
            if($totalPauseMinutes < $totalMinutesPreBreak){
                if($event['paid']=='1'){//if breaks are paid
                    $finalHours = floor($totalMinutesPreBreak / 60);
                    $finalMinutes = floor($totalMinutesPreBreak - $finalHours * 60);
                }else{//if breaks are not paid
                    $totalMinutes = $totalMinutesPreBreak - $totalPauseMinutes;
                    $finalHours = floor($totalMinutes / 60);
                    $finalMinutes = $totalMinutes - $finalHours * 60;
                }
            $event['hours'] = $finalHours;
            $event['minutes'] = $finalMinutes;  
            }else{
                    $finalHours = floor(((1440 - $startInMinutes) +  $finishInMinutes)/60);
                    $finalMinutes = ((1440 - $startInMinutes) + $finishInMinutes) - $finalHours * 60;
                    $event['hours'] = $finalHours;
                    $event['minutes'] = $finalMinutes;  
            }
    }
        return true;
}

Any help or guidance on what could possibly be wrong here or what would be the best way to debug it, is much appreciated.

Upvotes: 0

Views: 491

Answers (1)

Jose Ayram
Jose Ayram

Reputation: 198

The problem is that you always return true in your calculateWorkingHours function and return false in the beforeSave() callback.

Change for that:

public function beforeSave($options = array())
{
    $this->_calculateWorkingHours(); // <-- without parameters, you don't need

    return true;
}

private public function _calculateWorkingHours() // <-- without parameters, you don't need
{
    // all your code
    // and set your data instance
    $this->data[$this->alias]['hours'] = $finalHours;
    $this->data[$this->alias]['minutes'] = $finalMinutes;
    // don't return value this is a only format function
}

Upvotes: 1

Related Questions