[Koha-bugs] [Bug 5260] It would be nice if Koha' s Acquisition module could order by email

bugzilla-daemon at bugs.koha-community.org bugzilla-daemon at bugs.koha-community.org
Thu Oct 13 11:45:14 CEST 2016


https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=5260

Katrin Fischer <katrin.fischer at bsz-bw.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #22171|0                           |1
        is obsolete|                            |

--- Comment #23 from Katrin Fischer <katrin.fischer at bsz-bw.de> ---
Comment on attachment 22171
  --> https://bugs.koha-community.org/bugzilla3/attachment.cgi?id=22171
[PATCH] Bug 5260 : Send basketgroup by mail to the bookseller

>From 10d994598c4cbcae260aabe818cd0209a938d370 Mon Sep 17 00:00:00 2001
>From: =?UTF-8?q?Edgar=20Fu=C3=9F?= <ef at 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 at 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", 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') || '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 are receiving this mail because:
You are the QA Contact for the bug.
You are watching all bug changes.


More information about the Koha-bugs mailing list