Bugzilla – Attachment 22171 Details for
Bug 5260
Add option to send an order by e-mail to the acquisition module
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[PATCH] Bug 5260 : Send basketgroup by mail to the bookseller
0001-Bug-5260-Send-basketgroup-by-mail-to-the-bookseller.patch (text/plain), 15.55 KB, created by
Mathieu Saby
on 2013-10-21 18:10:00 UTC
(
hide
)
Description:
[PATCH] Bug 5260 : Send basketgroup by mail to the bookseller
Filename:
MIME Type:
Creator:
Mathieu Saby
Created:
2013-10-21 18:10:00 UTC
Size:
15.55 KB
patch
obsolete
>From 10d994598c4cbcae260aabe818cd0209a938d370 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Edgar=20Fu=C3=9F?= <ef@math.uni-bonn.de> >Date: Mon, 21 Oct 2013 20:08:11 +1200 >Subject: [PATCH] Bug 5260 : Send basketgroup by mail to the bookseller > >2 Patchs originally written by Edgar Fuà <ef@math.uni-bonn.de> in 2011 >Merged, rebased and ceaned-up by Mathieu Saby on 21st oct 2013 > >Do not test for the moment > > >--- > acqui/basketgroup.pl | 181 +++++++++++++++++++- > koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 8 + > .../prog/en/modules/acqui/basketgroup.tt | 3 +- > .../intranet-tmpl/prog/en/modules/tools/letter.tt | 5 + > tools/letter.pl | 33 ++++ > 5 files changed, 225 insertions(+), 5 deletions(-) > >diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl >index 6fe4db2..7ffff0b 100755 >--- a/acqui/basketgroup.pl >+++ b/acqui/basketgroup.pl >@@ -293,6 +293,171 @@ sub printbasketgrouppdf{ > > } > >+sub order_mail { >+#use Data::Dumper; >+ my ($booksellerid, $mail_orders) = @_; >+#print "order_mail\n"; >+#print "booksellerid: $booksellerid\n", "mail_orders: ", Dumper($mail_orders); >+ my $mail_order_total = shift @$mail_orders; >+ >+ my $bookseller = GetBookSellerFromId($booksellerid); >+ >+ my $letter = C4::Letters::getletter('orders', 'ORDERMAIL') || return; >+#print "letter: ", Dumper(\$letter); >+ >+ eval "use Mail::Sendmail"; >+ eval "use C4::Log"; >+ eval "use Carp"; >+ eval "use Encode"; >+ >+ # branch info >+ my $userenv = C4::Context->userenv; >+ C4::Letters::parseletter($letter, 'branches', $userenv->{branch}); >+ >+ # librarian name >+ $letter->{content} =~ s/<<LibrarianFirstname>>/$userenv->{firstname}/g; >+ $letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g; >+ $letter->{content} =~ s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g; >+ >+ # booksellers >+ C4::Letters::parseletter($letter, 'aqbooksellers', $booksellerid); >+ >+ # items and total >+ return unless $letter->{'content'} =~ m/(<item>(.*)<\/item>)/sm; >+ my $item_place = $1; my $item_format = $2; >+ my ($total_place, $total_format); >+ if ($letter->{'content'} =~ m/(<total>(.*)<\/total>)/sm) { >+ $total_place = $1; $total_format = $2; >+ } >+ >+ my @items; >+ foreach my $mail_order (@$mail_orders) { >+ my $item = $item_format; >+ while (my ($key, $value) = each %$mail_order) { >+#print "$key: $value\n"; >+ $item =~ s/<<orders.$key>>/$value/g; >+ } >+ push @items, $item; >+ } >+#print "items: ", Dumper(@items); >+ $letter->{'content'} =~ s/\Q$item_place\E/join "\n",@items/e; >+ if ($total_format) { >+#print "total_place: $total_place\n"; >+#print "total_format: $total_format\n"; >+ my $total = $total_format; >+ while (my ($key, $value) = each %$mail_order_total) { >+ $total =~ s/<<orders.total.$key>>/$value/g; >+ } >+#print "total: $total\n"; >+ $letter->{'content'} =~ s/\Q$total_place\E/$total/; >+ } >+ my %mail = ( >+ To => $bookseller->{bookselleremail} || >+ $bookseller->{contemail} || >+ $userenv->{emailaddress}, >+ From => $userenv->{emailaddress}, >+ Subject => $letter->{title}, >+ Message => Encode::encode("UTF-8", $letter->{content}), >+ 'Content-Type' => 'text/plain; charset="utf8"', >+ ); >+#print "mail: ", Dumper(\%mail); >+ sendmail(%mail) or carp $Mail::Sendmail::error; >+ logaction( >+ "ORDER", >+ "Send email order", >+ undef, >+ "To=%mail{To}\nSubject=%mail{Subject}\nMessage=%mail{Message}" >+ ) if C4::Context->preference("LetterLog"); >+} >+ >+sub mailbasketgroup { >+ my ($basketgroupid) = @_; >+ >+ eval "use C4::Branch"; >+ eval "use C4::Biblio"; >+ eval "use C4::Koha"; >+ eval "use Number::Format qw(format_number format_price)"; >+ >+ my $num = FormatNumber; # C4::Output >+ >+ my $itemtypes = GetItemTypes(); >+ >+ my $basketgroup = GetBasketgroup($basketgroupid); >+ my $booksellerid = $basketgroup->{booksellerid}; >+ my $bookseller = GetBookSellerFromId($booksellerid); >+ my $baskets = GetBasketsByBasketgroup($basketgroupid); >+ >+ my $gstrate = $bookseller->{gstrate} || C4::Context->preference("gist") || 0; >+ my $discount = $bookseller->{'discount'} / 100; >+ >+ my $total_ecost; # Total, its value will be assigned to $total_ecost_gsti or $total_ecost_gste depending of $bookseller->{'listincgst'} >+ my $total_ecost_gsti; # Total, GST included >+ my $total_ecost_gste; # Total, GST excluded >+ my $total_quantity; # Total quantity >+ >+ my @mail_orders; >+ for my $basket (@$baskets) { >+ my $basketno = $basket->{basketno}; >+ my @orders = &GetOrders($basketno); >+ for my $order (@orders) { >+ my %mail_order; >+ >+ my $quantity = $order->{quantity} || 0; >+ next if $quantity <= 0; >+ my $ecost = $order->{ecost} || 0; >+ >+ for (qw(quantity quantityreceived author title volume seriestitle isbn publishercode)) { >+ $mail_order{$_} = $order->{$_} if defined $order->{$_}; >+ } >+ for (qw(listprice ecost)) { >+ $mail_order{$_} = $num->format_price($order->{$_}) if defined $order->{$_}; >+ } >+ my $full_title = $order->{title}; >+ $full_title .= (" " . $order->{seriestitle}) if $order->{seriestitle}; >+ $full_title .= (" " . $order->{volume}) if $order->{volume}; >+ $mail_order{full_title} = $full_title; >+ if ($order->{biblionumber}) { >+ my $bibliodata = GetBiblioData($order->{biblionumber}); >+ if ($bibliodata->{itemtype}) { >+ $mail_order{itemtype} = $itemtypes->{$bibliodata->{itemtype}}->{description}; >+ } >+ } >+ >+ my $quantity_ecost = $quantity * $ecost; >+ $mail_order{quantity_ecost} = $num->format_price($quantity_ecost); >+ $mail_order{basketno} = $basketno; >+ $total_ecost += $quantity_ecost; >+ $total_quantity += $quantity; >+ push @mail_orders, \%mail_order; >+ } >+ } >+ >+ my %total; >+ $total{quantity} = $total_quantity; >+ $total{gstrate} = $num->format_number($gstrate); >+ $total{currency} = $bookseller->{listprice}; >+ $total{discount} = $num->format_number($bookseller->{discount}); >+ >+ my $total_gist; >+ >+ if ($bookseller->{listincgst}) { # prices already includes GST >+ $total_ecost_gsti = $total_ecost; >+ $total_ecost_gste = $total_ecost_gsti / ($gstrate + 1); >+ $total_gist = $total_ecost_gsti - $total_ecost_gste; >+ } else { # prices does not include GST >+ $total_ecost_gste = $total_ecost; >+ $total_gist = $total_ecost_gste * $gstrate; >+ $total_ecost_gsti = $total_ecost_gste + $total_gist; >+ } >+ $total{ecost_gste} = $num->format_price($total_ecost_gste); >+ $total{ecost_gsti} = $num->format_price($total_ecost_gsti); >+ $total{gist} = $num->format_number($total_gist); >+ >+ unshift @mail_orders, \%total; >+ >+ order_mail($booksellerid, \@mail_orders); >+} >+ > my $op = $input->param('op') || 'display'; > my $booksellerid = $input->param('booksellerid'); > $template->param(booksellerid => $booksellerid); >@@ -409,6 +574,14 @@ if ( $op eq "add" ) { > > printbasketgrouppdf($basketgroupid); > exit; >+} elsif ( $op eq 'closeandmail') { >+ my $basketgroupid = $input->param('basketgroupid'); >+ >+ CloseBasketgroup($basketgroupid); >+ >+ mailbasketgroup($basketgroupid); >+ >+ print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid); > }elsif ($op eq 'print'){ > my $basketgroupid = $input->param('basketgroupid'); > >@@ -422,19 +595,19 @@ if ( $op eq "add" ) { > ); > print GetBasketGroupAsCSV( $basketgroupid, $input ); > exit; >+}elsif ($op eq 'mail'){ >+ my $basketgroupid = $input->param('basketgroupid'); >+ mailbasketgroup($basketgroupid); >+ print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid); > }elsif( $op eq "delete"){ > my $basketgroupid = $input->param('basketgroupid'); > DelBasketgroup($basketgroupid); > print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid); >- > }elsif ( $op eq 'reopen'){ > my $basketgroupid = $input->param('basketgroupid'); > my $booksellerid = $input->param('booksellerid'); >- > ReOpenBasketgroup($basketgroupid); >- > print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid . '#closed'); >- > } elsif ( $op eq 'attachbasket') { > > # Getting parameters >diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >index 3fde6f1..d3e758e 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >@@ -382,6 +382,14 @@ function closeandprint(bg){ > } > } > >+function closeandmail(bs, bg){ >+ if(document.location = '/cgi-bin/koha/acqui/basketgroup.pl?op=closeandmail&booksellerid=' + bs + '&basketgroupid=' + bg ){ >+ setTimeout("window.location.reload();",3000); >+ }else{ >+ alert('Error downloading the file'); >+ } >+} >+ > //function that lets the user unclose a basketgroup as long as he hasn't submitted the changes to the page. > function unclosegroup(bgid){ > var div = document.getElementById('basketgroup-'+bgid+'-closed').parentNode; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt >index b6cdc52..4613cc7 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt >@@ -237,7 +237,6 @@ function submitForm(form) { > </div> > </div> > [% ELSE %] >- > <div id="toolbar" class="btn-toolbar"> > <div class="btn-group"><a href="/cgi-bin/koha/acqui/basketgroup.pl?op=add&booksellerid=[% booksellerid %]" class="btn btn-small" id="newbasketgroup"><i class="icon-plus"></i> New basket group</a></div> > </div> >@@ -278,6 +277,7 @@ function submitForm(form) { > <td>[% basketgroup.basketsqty %]</td> > <td> > <input type="button" onclick="closeandprint([% basketgroup.id %])" value="Close and print" /> >+ <a href="/cgi-bin/koha/acqui/basketgroup.pl?op=closeandmail&booksellerid=[% basketgroup.booksellerid %]&basketgroupid=[% basketgroup.id %]" class="yui-button yui-link-button">Close & Send Mail</a> > <form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="add" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Edit" /></form> > <form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="delete" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Delete" /></form> > </td> >@@ -318,6 +318,7 @@ function submitForm(form) { > <form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="reopen" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Reopen" /></form> > <form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="print" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Print" /></form> > <form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="export" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Export as CSV" /></form> >+ <a href="/cgi-bin/koha/acqui/basketgroup.pl?op=mail&booksellerid=[% basketgroup.booksellerid %]&basketgroupid=[% basketgroup.id %]" class="yui-button yui-link-button">Send Mail</a> > </td> > </tr> > [% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt >index 52e2b83..3f81aca 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt >@@ -304,6 +304,11 @@ $(document).ready(function() { > [% ELSE %] > <option value="suggestions">Suggestions</option> > [% END %] >+ [% IF ( orders ) %] >+ <option value="orders" selected="selected">Orders</option> >+ [% ELSE %] >+ <option value="orders">Orders</option> >+ [% END %] > </select> > </li> > <li> >diff --git a/tools/letter.pl b/tools/letter.pl >index 7582e66..d3df297 100755 >--- a/tools/letter.pl >+++ b/tools/letter.pl >@@ -172,6 +172,29 @@ sub add_form { > } > > my $field_selection; >+ if ( $module eq "suggestions" ) { >+ push @SQLfieldname, column_picks('borrowers'), >+ column_picks('suggestions'), >+ column_picks('aqbooksellers'), >+ column_picks('biblio'), >+ column_picks('items'); >+ } >+ elsif ( $module eq "reserves" ) { >+ push @SQLfieldname, column_picks('borrowers'), >+ column_picks('reserves'), >+ column_picks('biblio'), >+ column_picks('items'); >+ } >+ elsif ( $module eq "orders" ) { >+ push @SQLfieldname, column_picks('aqbooksellers'), >+ column_picks('aqorders'), >+ column_picks('biblio'), >+ column_picks('items'); >+ } >+ elsif ( index( $module, "acquisition" ) > 0 ) { # FIXME: imprecise comparison >+ push @SQLfieldname, column_picks('aqbooksellers'), column_picks('aqorders'); >+ # add issues specific tables >+ } > push @{$field_selection}, add_fields('branches'); > if ($module eq 'reserves') { > push @{$field_selection}, add_fields('borrowers', 'reserves', 'biblio', 'items'); >@@ -179,6 +202,16 @@ sub add_form { > elsif ($module eq 'claimacquisition') { > push @{$field_selection}, add_fields('aqbooksellers', 'aqorders', 'biblio', 'biblioitems'); > } >+ elsif ($module eq 'orders') { >+ push @{$field_selection}, add_fields('aqbooksellers', 'aqorders', 'biblio', 'items'); >+ push @{$field_selection}, { value => q{}, text => '---ORDER ITEMS---' }; >+ push @{$field_selection}, { value => "orders.$_", text => "orders.$_" } >+ foreach (qw/listprice quantity ecost quantityreceived author title volume seriestitle isbn publishercode/); >+ push @{$field_selection}, { value => "orders.$_", text => "orders.$_" } >+ foreach (qw/full_title itemtype quantity_ecost basketno/); >+ push @{$field_selection}, { value => "orders.total.$_", text => "orders.total.$_" } >+ foreach (qw/quantity gstrate currency discount ecost_gste ecost_gsti gstrate/); >+ } > elsif ($module eq 'claimissues') { > push @{$field_selection}, add_fields('aqbooksellers', 'serial', 'subscription'); > push @{$field_selection}, >-- >1.7.9.5 >
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 5260
:
2653
|
4067
|
4068
|
4781
|
22171
|
56449
|
56450
|
56483
|
56484
|
56549
|
56550
|
56551
|
56560
|
56561
|
56562
|
56568
|
56679
|
56680
|
56686
|
56687
|
56688
|
56689
|
56705
|
56706
|
56707
|
56708
|
56709
|
56786
|
56787
|
56788
|
56789
|
56790
|
56791
|
56792
|
56793
|
56794
|
56795