[Date Prev][Date Next][Thread Prev][Thread Next][Minivend by date
][Minivend by thread
]
Re: [mv] Prorate discount script bug
****** message to minivend-users from Bill Randle <billr@exgate.tek.com> ******
Sydney,
Try this for the calculation:
$s - ($s - 1) * ($n - 1) / ($mon{$month} - 1);
I tried it for a few test cases and it seems to work for me. You could,
of course, build the length-Of_month-1 value into your month table.
Also, for a little less overhead, you could use localtime() directly,
rather than calling $Tag->time(), as you don't need the formating. E.g.:
my ($sec, $min, $hr, $mday, $mon) = localtime;
If you do that, remember that $mon goes from 0 to 11.
-Bill
Sydney Urshan wrote:
>
> Well, if it's a $30 item in a 30 day month, day 30 should be $1, day
> 29 should be $2...day 2 should be $29, and the first day of the month
> should be $30 with everything else in between adjusted accordingly.
>
> >Sydney Urshan wrote:
> >>
> >> The following discount script works perfect until the last day of the
> >> month at which time the result is 0. Can someone help me out on this
> >> one?
> >>
> >> [loop list='2001 2002 3001 3002']
> >> [discount [loop-code]]
> >> my $bit = $Tag->time('', {}, '%m %d');
> >> my ($month, $n) = split /\s+/, $bit;
> >> $n =~ s/^0//;
> >> my %mon = (
> >> '01' => 31,
> >> '02' => 29,
> >> '03' => 31,
> >> '04' => 30,
> >> '05' => 31,
> >> '06' => 30,
> >> '07' => 31,
> >> '08' => 31,
> >> '09' => 30,
> >> '10' => 31,
> >> '11' => 30,
> >> '12' => 31,
> >> );
> >> if ($mon{$month} and $n > 1) {
> >> return ($s - ($s / $mon{$month} * $n));
> >> }
> >> return $s;
> >> [/discount]
> >> [/loop]
> >>
> >> Thanks,
> >>
> >> Sydney Urshan
> >
> >Look at your calculation again:
> > $s - ($s / days_in_month * day_of_month);
> >This is equivalent to saying:
> > $s - $s * (days_in_month / day_of_month);
> >when day_of_month is the same as days_in_month, you get
> > $s - $s * 1;
> >which is 0.
> >
> >What did you intend the prorate to be at the end of the month?
> >
> > -Bill
-
To unsubscribe from the list, DO NOT REPLY to this message. Instead, send
email with 'UNSUBSCRIBE minivend-users' in the body to Majordomo@minivend.com.
Archive of past messages: http://www.minivend.com/minivend/minivend-list