In your mysql db add 2 fields in ost_config

tinyint(1) UNSIGNED No
varchar(255) utf8_general_ci No

In include\staff\preference.inc.php find:

<input type="text" name="overdue_grace_period" size=4 value="<?=$config['overdue_grace_period']?>">

before the </td> add:

<input type="checkbox" name="weekend" <?=$config['weekend'] ? 'checked': ''?>> Ignor Weekends.<br>
(<i>Holidays. Ej: 2012-08-20.</i>)
<textarea name="holydays" cols="21" rows="4" style="width: 65%;" wrap=HARD ><?=$config['holydays']?></textarea>

In include\class.config.php find:

function getGracePeriod() {
return $this->config['overdue_grace_period'];
}

after that add:

//Weekend Mod
function weekend() {
return $this->config['weekend']?true:false;
}
function holydays() {
$allowed=$this->config['holydays']?array_map('trim',explode(',',strtolower($this->config['holydays']))):null;
return ($allowed);
}
//End Weekend Mod

In include\class.config.php find:

',auto_assign_reopened_tickets='.db_input(isset($var['auto_assign_reopened_tickets'])?1:0).

after that add:

',weekend='.db_input(isset($var['weekend'])?1:0).
',holydays='.db_input($var['holydays']).

In include\class.ticket.php find:

function isAssigned() {
return $this->getStaffId()?true:false;
}

after that add:

function getWorkingDays($startDate,$endDate,$holidays){
// do strtotime calculations just once
$endDate = strtotime($endDate);
$startDate = strtotime($startDate);

//The total number of days between the two dates. We compute the no. of seconds and divide it to 60*60*24
//We add one to inlude both dates in the interval.
$days = ($endDate - $startDate) / 86400 + 1;

    $no_full_weeks = floor($days / 7);
    $no_remaining_days = fmod($days, 7);

//It will return 1 if it's Monday,.. ,7 for Sunday
$the_first_day_of_week = date("N", $startDate);
$the_last_day_of_week = date("N", $endDate);

//---->The two can be equal in leap years when february has 29 days, the equal sign is added here
//In the first case the whole interval is within a week, in the second case the interval falls in two weeks.
if ($the_first_day_of_week <= $the_last_day_of_week) {
if ($the_first_day_of_week <= 6 && 6 <= $the_last_day_of_week) $no_remaining_days--;
if ($the_first_day_of_week <= 7 && 7 <= $the_last_day_of_week) $no_remaining_days--;
}
else {
// (edit by Tokes to fix an edge case where the start day was a Sunday
// and the end day was NOT a Saturday)

// the day of the week for start is later than the day of the week for end
if ($the_first_day_of_week == 7) {
// if the start date is a Sunday, then we definitely subtract 1 day
$no_remaining_days--;

if ($the_last_day_of_week == 6) {
// if the end date is a Saturday, then we subtract another day
$no_remaining_days--;
}
}
else {
// the start date was a Saturday (or earlier), and the end date was (Mon..Fri)
// so we skip an entire weekend and subtract 2 days
$no_remaining_days -= 2;
}
}

//The no. of business days is: (number of weeks between the two dates) * (5 working days) + the remainder
//---->february in none leap years gave a remainder of 0 but still calculated weekends between first and last day, this is one way to fix it
$workingDays = $no_full_weeks * 5;
if ($no_remaining_days > 0 )
    {
$workingDays += $no_remaining_days;
}

//We subtract the holidays
foreach($holidays as $holiday){
$time_stamp=strtotime($holiday);
//If the holiday doesn't fall in weekend
if ($startDate <= $time_stamp && $time_stamp <= $endDate && date("N",$time_stamp) != 6 && date("N",$time_stamp) != 7)
$workingDays--;
}

return $workingDays;
    }

In include\class.ticket.php find:

function markOverdue($bitch=false) {
global $cfg;

if($this->isOverdue())
return true;

replace with:

function markOverdue($bitch=false) {
global $cfg;
if($cfg->weekend()){
//$holydays = array("2008-12-25","2008-12-26","2012-08-10");
$holydays = $cfg->holydays();
$today = date('Y-m-d');
$ticketDate = date('Y-m-d',strtotime($this->getCreateDate()));
$dayCount = $this->getWorkingDays($ticketDate,$today,$holydays);
$dayToHour = $dayCount * 24;
$horas=$cfg->getGracePeriod();
//print_r($dayCount);
//print_r ($horas);
if($this->isOverdue())
return true;
if($dayToHour < $horas)
return false;
}

Thats all.

Now go to your admin panel and configure tick the ignore weekend opcion and add your holidays.

Enjoy.