[rt-users] Business Hours help please
Roy El-Hames
rfh at pipex.net
Wed Dec 5 06:17:10 EST 2007
Thanks Gene , I did not spot this yesterday, I 'll give it a try,
Regards;
Roy
Gene LeDuc wrote:
> Hi Roy,
>
> I needed a way to subtract business hours from a timestamp so I added
> my own sub_seconds() method to the package. I'm not sure if I ever
> posted it to the wiki, so here it is. Just include this code at the
> end of your program and call it like you would the add_seconds()
> method. I sent the code to the business::hours authors but I never
> heard anything back so I guess it was not included.
>
> For your purposes I think you would just assign the larger of the
> timestamps to a Business::Hours object and then subtract the smaller
> timestamp from it using this method.
>
> ### Need to add this to Business::Hours so I can count backwards from
> due date
> { package Business::Hours;
> sub sub_seconds {
> ### This method is hacked version of add_seconds(), written by
> Gene LeDuc
> my $self = shift;
> my $start = shift;
> my $seconds = shift;
>
> # the maximum time after which we stop searching for business hours
> my $MAXTIME = (30 * 24 * 60 * 60); # 30 days
>
> my $first;
>
> my $period = (24 * 60 * 60);
> my $begin = $start - $period;
>
> my $hours = new Set::IntSpan;
> while ($hours->empty or $self->between($hours->first, $start) <=
> $seconds) {
> if ($begin <= $start - $MAXTIME) {
> return -1;
> }
> $hours = $self->for_timespan(Start => $begin, End => $start);
>
> $begin -= $period;
> }
>
> my @elements = reverse elements $hours;
> $first = $elements[$seconds];
>
> return $first;
> }
>
> 1; #this line is important and will help the module return a true value
> }
>
> Regards,
> Gene
>
> At 08:25 AM 12/4/2007, Roy El-Hames wrote:
>> Hi Mark;
>>
>> Thanks for your reply, I am looking for the business hours/ or
>> seconds between 2 time stamps I had a look at the cpan page before I
>> emailed the list but unfortuantely I either did not understand it or
>> missing something .. I also tried the between routine and can't
>> figure it out,
>> I was hoping someone have actually used this module similar to the
>> calculation I need .. which is basically how long in working hours
>> did the ticket last from open to close ..
>>
>> Regards;
>> Roy
>>
>>
>> Roedel, Mark wrote:
>>> You don't say exactly what you're looking for as output. As noted in
>>> the Business::Hours documentation, for_timespan returns a Set::IntSpan,
>>> which is what you're seeing in your dump. Just eyeballing things, it
>>> looks like the 'edges' array contains Unix timestamps corresponding to
>>> the beginnings and ends of the ranges of time between your start and
>>> end
>>> which fall within the business hours you defined.
>>> http://search.cpan.org/dist/Set-IntSpan/IntSpan.pm has more information
>>> on working with a Set::IntSpan.
>>>
>>> If you're just trying to get the number of business hours that occur
>>> within your range, Business::Hours does also have a "between"
>>> subroutine
>>> that returns the number of business seconds between two timestamps.
>>> (See http://search.cpan.org/dist/Business-Hours/lib/Business/Hours.pm
>>> for full information on Business::Hours.)
>>>
>>>
>>> --
>>> Mark Roedel
>>> Senior Programmer / Analyst
>>> LeTourneau University
>>> Longview, Texas USA
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: rt-users-bounces at lists.bestpractical.com
>>> [mailto:rt-users-bounces at lists.bestpractical.com] On Behalf Of Roy
>>> El-Hames
>>> Sent: Tuesday, December 04, 2007 7:27 AM
>>> To: RT Users
>>> Subject: [rt-users] Business Hours help please
>>>
>>> Hi ;
>>>
>>> Can anyone help me with the code of how to determine the Business
>>> Hours between 2 dates:
>>> What I got :
>>> my $hours = Business::Hours->new();
>>> $hours->business_hours(
>>> 0 => { Name => 'Sunday', Start => undef, End => undef },
>>> 1 => { Name => 'Monday', Start => '09:00', End => '17:30' },
>>> 2 => { Name => 'Tuesday', Start => '09:00', End => '17:30' },
>>> 3 => { Name => 'Wednesday', Start => '09:00', End => '17:30' },
>>> 4 => { Name => 'Thursday', Start => '09:00', End => '17:30' },
>>> 5 => { Name => 'Friday', Start => '09:00', End => '17:30' },
>>> 6 => { Name => 'Saturday', Start => undef, End => undef }
>>> );
>>> my $wtime = $hours->for_timespan(Start => time(), End =>
>>> time()+(86400*7));
>>> my $splosh = Dumper($wtime) ;
>>>
>>> print "$splosh nnn\n";
>>>
>>> I get :
>>> $VAR1 = bless( {
>>> 'negInf' => 0,
>>> 'edges' => [
>>> 1196774745,
>>> 1196789399,
>>> 1196845199,
>>> 1196875799,
>>> 1196931599,
>>> 1196962199,
>>> 1197017999,
>>> 1197048599,
>>> 1197277199,
>>> 1197307799,
>>> 1197363599,
>>> 1197379546
>>> ],
>>> 'posInf' => 0,
>>> 'empty_string' => \'-'
>>> }, 'Set::IntSpan' );
>>> nnn
>>>
>>>
>>>
>>
>> _______________________________________________
>> http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
>>
>> SAVE THOUSANDS OF DOLLARS ON RT SUPPORT:
>>
>> If you sign up for a new RT support contract before December 31,
>> we'll take
>> up to 20 percent off the price. This sale won't last long, so get in
>> touch today. Email us at sales at bestpractical.com or call us at +1
>> 617 812 0745.
>>
>>
>> Community help: http://wiki.bestpractical.com
>> Commercial support: sales at bestpractical.com
>>
>>
>> Discover RT's hidden secrets with RT Essentials from O'Reilly Media.
>> Buy a copy at http://rtbook.bestpractical.com
>
>
More information about the rt-users
mailing list