--- ./intranet/cgi-bin/acqui/basketgroup.pl.orig 2010-09-17 11:17:09.000000000 +0200 +++ ./intranet/cgi-bin/acqui/basketgroup.pl 2010-09-28 20:18:32.000000000 +0200 @@ -248,6 +248,171 @@ exit; } +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/<>/$userenv->{firstname}/g; + $letter->{content} =~ s/<>/$userenv->{surname}/g; + $letter->{content} =~ s/<>/$userenv->{emailaddress}/g; + + # booksellers + C4::Letters::parseletter($letter, 'aqbooksellers', $booksellerid); + + # items and total + return unless $letter->{'content'} =~ m/((.*)<\/item>)/sm; + my $item_place = $1; my $item_format = $2; + my ($total_place, $total_format); + if ($letter->{'content'} =~ m/((.*)<\/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/<>/$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/<>/$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); @@ -383,10 +548,24 @@ CloseBasketgroup($basketgroupid); printbasketgrouppdf($basketgroupid); +} 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); +}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'); warn $basketgroupid; --- ./intranet/cgi-bin/tools/letter.pl.orig 2010-09-17 11:17:09.000000000 +0200 +++ ./intranet/cgi-bin/tools/letter.pl 2010-09-28 20:10:49.000000000 +0200 @@ -197,6 +197,12 @@ 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 @@ -208,6 +214,16 @@ 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}, --- ./intranet/htdocs/intranet-tmpl/prog/en/js/acq.js.orig 2010-05-04 15:34:47.000000000 +0200 +++ ./intranet/htdocs/intranet-tmpl/prog/en/js/acq.js 2010-09-28 20:27:16.000000000 +0200 @@ -388,6 +388,14 @@ } } +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; --- ./intranet/htdocs/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl.orig 2010-05-04 15:34:47.000000000 +0200 +++ ./intranet/htdocs/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl 2010-09-28 20:30:43.000000000 +0200 @@ -294,6 +294,13 @@
  • + &basketgroupid=" class="yui-button yui-link-button">Close & Send Mail + + +
  • +
  • + + &basketgroupid=" class="yui-button yui-link-button" >Edit @@ -337,6 +344,13 @@
  • +
  • + + + &basketgroupid=" class="yui-button yui-link-button">Send Mail + + +
  • --- ./intranet/htdocs/intranet-tmpl/prog/en/modules/tools/letter.tmpl.orig 2010-05-04 15:34:47.000000000 +0200 +++ ./intranet/htdocs/intranet-tmpl/prog/en/modules/tools/letter.tmpl 2010-09-23 12:41:14.000000000 +0200 @@ -220,6 +220,11 @@ + + + + +