Bugzilla – Attachment 34973 Details for
Bug 13001
Refactor VAT and price calculation - parcel page
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[PASSED QA] Bug 13001: Refactor VAT and price calculation - parcel page
PASSED-QA-Bug-13001-Refactor-VAT-and-price-calcula.patch (text/plain), 12.18 KB, created by
Katrin Fischer
on 2015-01-05 23:59:08 UTC
(
hide
)
Description:
[PASSED QA] Bug 13001: Refactor VAT and price calculation - parcel page
Filename:
MIME Type:
Creator:
Katrin Fischer
Created:
2015-01-05 23:59:08 UTC
Size:
12.18 KB
patch
obsolete
>From 79d2cbdb47be7e747846dcaff1ffcfd843f4e4ec Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Fri, 26 Sep 2014 14:46:21 +0200 >Subject: [PATCH] [PASSED QA] Bug 13001: Refactor VAT and price calculation - > parcel page > >Bug 12969 introduces a subroutine to centralize VAT and prices >calculation. >It should be use in the acqui/parcel.pl script. > >Test plan: >1/ Create 4 suppliers with the different configurations >2/ Create a basket and create several orders >3/ Go on the parcel page >4/ You should see, on the "pending orders" table, the same prices as >before this patch. >Note that the prices are now correctly formated. > >You could see one change for the supplier configuration 3 (1 0): >If the cost of the item is 82, discount 10% and vat 5%: >The "Order cost" = 140.58 instead of 140.57. >Indeed, before this patch, the order cost was wrong, now you should have >70.29*2 = 140.58 > >( before: 140.58 + 7.03 = 147.61 > now: 140.58 + 7.02 = 147.60 ) > >5/ Receive the items and return on the parcel page >Now the "Already received" table with the same prices as before this >patch. >Note some differences too: >- There was a td tag missing, the table was badly formated, it's now >fixed (column below the "Cancel receipt" link). >- The prices are now correctly formated. >- For the configuration 2 (1 1), if the cost of the item is 82, discount > 10% and vat 5%: > >( before: 140.57 + 7.03 = 147.60 > now: 140.58 + 7.02 = 147.60 ) > >Note that 7.03 is the "correct" value, but on all other pages, 7.02 is >displayed. >To be consistent, we should display the same prices everywhere. > >Signed-off-by: Paola Rossi <paola.rossi@cineca.it> > >Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> >--- > acqui/parcel.pl | 106 ++++++--------------- > .../intranet-tmpl/prog/en/modules/acqui/parcel.tt | 25 ++--- > 2 files changed, 42 insertions(+), 89 deletions(-) > >diff --git a/acqui/parcel.pl b/acqui/parcel.pl >index 65675e2..aa5815e 100755 >--- a/acqui/parcel.pl >+++ b/acqui/parcel.pl >@@ -75,43 +75,6 @@ use JSON; > my $input=new CGI; > my $sticky_filters = $input->param('sticky_filters') || 0; > >-sub get_value_with_gst_params { >- my $value = shift; >- my $gstrate = shift; >- my $bookseller = shift; >- if ( $bookseller->{listincgst} ) { >- if ( $bookseller->{invoiceincgst} ) { >- return $value; >- } else { >- return $value / ( 1 + $gstrate ); >- } >- } else { >- if ( $bookseller->{invoiceincgst} ) { >- return $value * ( 1 + $gstrate ); >- } else { >- return $value; >- } >- } >-} >- >-sub get_gste { >- my $value = shift; >- my $gstrate = shift; >- my $bookseller = shift; >- return $bookseller->{invoiceincgst} >- ? $value / ( 1 + $gstrate ) >- : $value; >-} >- >-sub get_gst { >- my $value = shift; >- my $gstrate = shift; >- my $bookseller = shift; >- return $bookseller->{invoiceincgst} >- ? $value / ( 1 + $gstrate ) * $gstrate >- : $value * ( 1 + $gstrate ) - $value; >-} >- > my ($template, $loggedinuser, $cookie) > = get_template_and_user({template_name => "acqui/parcel.tt", > query => $input, >@@ -151,29 +114,30 @@ my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid }); > my $gst = $bookseller->{gstrate} // C4::Context->preference("gist") // 0; > my $datereceived = C4::Dates->new(); > >-my $cfstr = "%.2f"; # currency format string -- could get this from currency table. > my @orders = @{ $invoice->{orders} }; > my $countlines = scalar @orders; >-my $totalprice = 0; >-my $totalquantity = 0; >-my $total; > my @loop_received = (); > my @book_foot_loop; > my %foot; >-my $total_quantity = 0; > my $total_gste = 0; > my $total_gsti = 0; > > for my $order ( @orders ) { >- $order->{unitprice} = get_value_with_gst_params( $order->{unitprice}, $order->{gstrate}, $bookseller ); >- $total = ( $order->{unitprice} ) * $order->{quantityreceived}; >+ $order = C4::Acquisition::populate_order_with_prices({ order => $order, booksellerid => $bookseller->{id}, receiving => 1, ordering => 1 }); > $order->{'unitprice'} += 0; >+ >+ if ( $bookseller->{listincgst} and not $bookseller->{invoiceincgst} ) { >+ $order->{ecost} = $order->{ecostgste}; >+ $order->{unitprice} = $order->{unitpricegste}; >+ } >+ elsif ( not $bookseller->{listinct} and $bookseller->{invoiceincgst} ) { >+ $order->{ecost} = $order->{ecostgsti}; >+ $order->{unitprice} = $order->{unitpricegsti}; >+ } >+ $order->{total} = $order->{ecost} * $order->{quantity}; >+ > my %line = %{ $order }; >- my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller ); >- $line{ecost} = sprintf( "%.2f", $ecost ); > $line{invoice} = $invoice->{invoicenumber}; >- $line{total} = sprintf($cfstr, $total); >- $line{booksellerid} = $invoice->{booksellerid}; > $line{holds} = 0; > my @itemnumbers = GetItemnumbersFromOrder( $order->{ordernumber} ); > for my $itemnumber ( @itemnumbers ) { >@@ -181,15 +145,10 @@ for my $order ( @orders ) { > $line{holds} += scalar( @$holds ); > } > $line{budget} = GetBudgetByOrderNumber( $line{ordernumber} ); >- $totalprice += $order->{unitprice}; >- $line{unitprice} = sprintf( $cfstr, $order->{unitprice} ); >- my $gste = get_gste( $line{total}, $line{gstrate}, $bookseller ); >- my $gst = get_gst( $line{total}, $line{gstrate}, $bookseller ); > $foot{$line{gstrate}}{gstrate} = $line{gstrate}; >- $foot{$line{gstrate}}{value} += sprintf( "%.2f", $gst ); >- $total_quantity += $line{quantity}; >- $total_gste += $gste; >- $total_gsti += $gste + $gst; >+ $foot{$line{gstrate}}{gstvalue} += $line{gstvalue}; >+ $total_gste += $line{totalgste}; >+ $total_gsti += $line{totalgsti}; > > my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber}); > $line{suggestionid} = $suggestion->{suggestionid}; >@@ -209,8 +168,6 @@ for my $order ( @orders ) { > $line{budget_name} = $budget->{'budget_name'}; > > push @loop_received, \%line; >- $totalquantity += $order->{quantityreceived}; >- > } > push @book_foot_loop, map { $_ } values %foot; > >@@ -258,21 +215,20 @@ unless( defined $invoice->{closedate} ) { > my $countpendings = scalar @$pendingorders; > > for (my $i = 0 ; $i < $countpendings ; $i++) { >- my %line; >- %line = %{$pendingorders->[$i]}; >- >- my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller ); >- $line{unitprice} = get_value_with_gst_params( $line{unitprice}, $line{gstrate}, $bookseller ); >- $line{quantity} += 0; >- $line{quantityreceived} += 0; >- $line{unitprice}+=0; >- $line{ecost} = sprintf( "%.2f", $ecost ); >- $line{ordertotal} = sprintf( "%.2f", $ecost * $line{quantity} ); >- $line{unitprice} = sprintf("%.2f",$line{unitprice}); >- $line{invoice} = $invoice; >- $line{booksellerid} = $booksellerid; >+ my $order = $pendingorders->[$i]; >+ $order = C4::Acquisition::populate_order_with_prices({ order => $order, booksellerid => $bookseller->{id}, receiving => 1, ordering => 1 }); >+ >+ if ( $bookseller->{listincgst} and not $bookseller->{invoiceincgst} ) { >+ $order->{ecost} = $order->{ecostgste}; >+ } elsif ( not $bookseller->{listinct} and $bookseller->{invoiceincgst} ) { >+ $order->{ecost} = $order->{ecostgsti}; >+ } >+ $order->{total} = $order->{ecost} * $order->{quantity}; > >+ my %line = %$order; > >+ $line{invoice} = $invoice; >+ $line{booksellerid} = $booksellerid; > > my $biblionumber = $line{'biblionumber'}; > my $countbiblio = CountBiblioInOrders($biblionumber); >@@ -327,16 +283,12 @@ $template->param( > formatteddatereceived => $datereceived->output(), > name => $bookseller->{'name'}, > booksellerid => $bookseller->{id}, >- countreceived => $countlines, > loop_received => \@loop_received, > loop_orders => \@loop_orders, > book_foot_loop => \@book_foot_loop, >- totalprice => sprintf($cfstr, $totalprice), >- totalquantity => $totalquantity, > (uc(C4::Context->preference("marcflavour"))) => 1, >- total_quantity => $total_quantity, >- total_gste => sprintf( "%.2f", $total_gste ), >- total_gsti => sprintf( "%.2f", $total_gsti ), >+ total_gste => $total_gste, >+ total_gsti => $total_gsti, > sticky_filters => $sticky_filters, > ); > output_html_with_http_headers $input, $cookie, $template->output; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt >index 06402d6..6d581f4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt >@@ -1,4 +1,5 @@ > [% USE Koha %] >+[% USE Price %] > [% USE currency = format('%.2f') -%] > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Acquisitions › [% IF ( date ) %] >@@ -275,8 +276,8 @@ > </td> > <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">Card</a></td> > <td>[% loop_order.quantity %]</td> >- <td>[% loop_order.ecost %]</td> >- <td>[% loop_order.ordertotal %]</td> >+ <td>[% loop_order.ecost | $Price %]</td> >+ <td>[% loop_order.total | $Price %]</td> > <td>[% loop_order.budget_name %]</td> > <td> > <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&invoiceid=[% invoiceid %]">Receive</a> >@@ -362,28 +363,28 @@ > [% FOREACH key IN funds.keys.sort %] > <tr> > <td colspan="6" class="total">(Tax exc.)</td> >- <td><i>Subtotal for</i> [% key %]</td> >- <td>[% currency( funds.$key.estimated ) %]</td> >- <td>[% currency( funds.$key.actual ) %]</td> >+ <td colspan="2"><i>Subtotal for</i> [% key %]</td> >+ <td>[% funds.$key.estimated | $Price %]</td> >+ <td>[% funds.$key.actual | $Price %]</td> > <td> </td> > <td> </td> > </tr> > [% END %] > <tr> > <th colspan="10" class="total">Total tax exc.</th> >- <th>[% total_gste %]</th> >+ <th>[% total_gste | $Price %]</th> > <th></th> > </tr> > [% FOREACH book_foot IN book_foot_loop %] > <tr> >- <th colspan="10">Total (GST [% book_foot.gstrate * 100 | format ("%.1f") %]%)</th> >- <th>[% book_foot.value %]</th> >+ <th colspan="10">Total (GST [% book_foot.gstrate * 100 | $Price %]%)</th> >+ <th>[% book_foot.gstvalue | $Price %]</th> > <th></th> > </tr> > [% END %] > <tr> > <th colspan="10" class="total">Total tax inc.</th> >- <th>[% total_gsti %]</th> >+ <th>[% total_gsti | $Price %]</th> > <th></th> > </tr> > </tfoot> >@@ -424,9 +425,9 @@ > <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&id=[% order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">Card</a></td> > <td>[% order.quantityreceived %]</td> > <td>[% order.budget.budget_name %]</td> >- <td>[% order.ecost %]</td> >- <td>[% order.unitprice %]</td> >- <td>[% order.total %]</td> >+ <td>[% order.ecost | $Price %]</td> >+ <td>[% order.unitprice | $Price %]</td> >+ <td>[% order.total | $Price %]</td> > <td> > [% IF loop_receive.cannot_cancel or ( Koha.Preference("AcqCreateItem") == "receiving" and loop_receive.holds > 0 ) %] > [% IF loop_receive.cannot_cancel %] >-- >1.9.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 13001
:
31901
|
31982
|
33677
|
33900
|
34973
|
34974
|
35427
|
35428