[Koha-patches] [PATCH] Bug 5260 : Reformatted as a git commit
Chris Cormack
chrisc at catalyst.net.nz
Mon May 9 23:11:23 CEST 2011
Originally written by Edgar Fuß <ef at math.uni-bonn.de>
Second patch for the template changes to follow
Conflicts:
acqui/basketgroup.pl
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl
koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tmpl
tools/letter.pl
---
acqui/basketgroup.pl | 179 +++++++++++++++++++++++++++++
koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 8 ++
tools/letter.pl | 33 ++++++
3 files changed, 220 insertions(+), 0 deletions(-)
diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl
index 457b616..0b84fc3 100755
--- a/acqui/basketgroup.pl
+++ b/acqui/basketgroup.pl
@@ -248,6 +248,171 @@ sub printbasketgrouppdf{
print $pdf;
}
+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", at 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');
my $booksellerid = $input->param('booksellerid');
$template->param(booksellerid => $booksellerid);
@@ -387,11 +552,25 @@ 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');
printbasketgrouppdf($basketgroupid);
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);
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
index bcfb7b8..63d5d3a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js
@@ -388,6 +388,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/tools/letter.pl b/tools/letter.pl
index ab6039c..972fc44 100755
--- a/tools/letter.pl
+++ b/tools/letter.pl
@@ -147,6 +147,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');
@@ -154,6 +177,16 @@ sub add_form {
elsif ($module eq 'claimacquisition') {
push @{$field_selection}, add_fields('aqbooksellers', 'aqorders');
}
+ 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.4.1
More information about the Koha-patches
mailing list