=head3 NewBasket
$basket = &NewBasket( $booksellerid, $authorizedby, $basketname,
- $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace, $is_standing );
+ $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace, $is_standing, $create_items );
Create a new basket in aqbasket table
sub NewBasket {
my ( $booksellerid, $authorisedby, $basketname, $basketnote,
$basketbooksellernote, $basketcontractnumber, $deliveryplace,
- $billingplace, $is_standing ) = @_;
+ $billingplace, $is_standing, $create_items ) = @_;
my $dbh = C4::Context->dbh;
my $query =
'INSERT INTO aqbasket (creationdate,booksellerid,authorisedby) '
$basketnote ||= q{};
$basketbooksellernote ||= q{};
ModBasketHeader( $basket, $basketname, $basketnote, $basketbooksellernote,
- $basketcontractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing );
+ $basketcontractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items );
return $basket;
}
=item C<$is_standing> is the "is_standing" field in the aqbasket table.
+=item C<$create_items> should be set to 'ordering', 'receiving' or 'cataloguing' (or undef, in which
+case the AcqCreateItem syspref takes precedence).
+
=back
=cut
sub ModBasketHeader {
- my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing) = @_;
+ my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items) = @_;
my $query = qq{
UPDATE aqbasket
- SET basketname=?, note=?, booksellernote=?, booksellerid=?, deliveryplace=?, billingplace=?, is_standing=?
+ SET basketname=?, note=?, booksellernote=?, booksellerid=?, deliveryplace=?, billingplace=?, is_standing=?, create_items=?
WHERE basketno=?
};
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
- $sth->execute($basketname, $note, $booksellernote, $booksellerid, $deliveryplace, $billingplace, $is_standing, $basketno);
+ $sth->execute($basketname, $note, $booksellernote, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items || undef, $basketno);
if ( $contractnumber ) {
my $query2 ="UPDATE aqbasket SET contractnumber=? WHERE basketno=?";
my $parent_ordernumber = $order->{'parent_ordernumber'};
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
+ my $basket = Koha::Acquisition::Order->find( $order->{ordernumber} )->basket;
if($parent_ordernumber == $ordernumber || not $parent_ordernumber) {
# The order line has no parent, just mark it as not received
WHERE ordernumber = ?
|, undef, $parent_ordernumber);
- _cancel_items_receipt( $ordernumber, $parent_ordernumber );
+ _cancel_items_receipt( $basket->effective_create_items, $ordernumber, $parent_ordernumber );
# Delete order line
$query = qq{
DELETE FROM aqorders
}
- if(C4::Context->preference('AcqCreateItem') eq 'ordering') {
+ if( $basket->effective_create_items eq 'ordering' ) {
my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceiptIsCancelled");
if ( @affects ) {
for my $in ( @itemnumbers ) {
}
sub _cancel_items_receipt {
- my ( $ordernumber, $parent_ordernumber ) = @_;
+ my ( $effective_create_items, $ordernumber, $parent_ordernumber ) = @_;
$parent_ordernumber ||= $ordernumber;
my @itemnumbers = GetItemnumbersFromOrder($ordernumber);
- if(C4::Context->preference('AcqCreateItem') eq 'receiving') {
+ if ( $effective_create_items eq 'receiving' ) {
# Remove items that were created at receipt
my $query = qq{
DELETE FROM items, aqorders_items
return Koha::Acquisition::Bookseller->_new_from_dbic( $bookseller_rs );
}
+
+=head3 effective_create_items
+
+Returns C<create_items> for this basket, falling back to C<AcqCreateItem> if unset.
+
+=cut
+
+sub effective_create_items {
+ my ( $self ) = @_;
+
+ return $self->create_items || C4::Context->preference('AcqCreateItem');
+}
+
=head3 type
=cut
use Carp qw( croak );
+use Koha::Acquisition::Baskets;
use Koha::Database;
use Koha::DateUtils qw( dt_from_string output_pref );
$rs->create({ ordernumber => $self->ordernumber, itemnumber => $itemnumber });
}
+sub basket {
+ my ( $self ) = @_;
+ return Koha::Acquisition::Baskets->find( $self->{basketno} );
+}
+
=head2 Internal methods
-=head3 _type (internal)
+=head3 _type
=cut
my $basket = GetBasket($basketno);
my $user = $input->remote_user;
+my $basketno=$$orderinfo{basketno};
+my $basket = Koha::Acquisition::Baskets->find( $basketno );
# create, modify or delete biblio
# create if $quantity>0 and $existing='no'
}
# now, add items if applicable
- if (C4::Context->preference('AcqCreateItem') eq 'ordering') {
+ if ($basket->effective_create_items eq 'ordering') {
my @tags = $input->multi_param('tag');
my @subfields = $input->multi_param('subfield');
use Koha::Number::Price;
use Koha::Libraries;
+use Koha::Acquisition::Baskets;
use Koha::Acquisition::Currencies;
use Koha::Acquisition::Orders;
use Koha::Acquisition::Booksellers;
if (! $cgiparams->{'basketno'}){
die "Basketnumber required to order from iso2709 file import";
}
+my $basket = Koha::Acquisition::Baskets->find( $cgiparams->{basketno} );
#
# 1st step = choose the file to import into acquisition
);
import_biblios_list($template, $cgiparams->{'import_batch_id'});
my $basket = GetBasket($cgiparams->{basketno});
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
+ if ( $basket->effective_create_items eq 'ordering' && !$basket->{is_standing} ) {
# prepare empty item form
my $cell = PrepareItemrecordDisplay( '', '', '', 'ACQ' );
# parse the item sent by the form, and create an item just for the import_record_id we are dealing with
# this is not optimised, but it's working !
my $basket = GetBasket($cgiparams->{basketno});
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
+ if ( $basket->effective_create_items eq 'ordering' && !$basket->{is_standing} ) {
my @tags = $input->multi_param('tag');
my @subfields = $input->multi_param('subfield');
my @field_values = $input->multi_param('field_value');
}
$template->param(
+ basket => $basket,
basketno => $basketno,
basket => $basket,
basketname => $basket->{'basketname'},
scalar $input->param('deliveryplace'),
scalar $input->param('billingplace'),
scalar $input->param('is_standing') ? 1 : undef,
+ scalar $input->param('create_items')
);
} else { #New basket
$basketno = NewBasket(
scalar $input->param('deliveryplace'),
scalar $input->param('billingplace'),
scalar $input->param('is_standing') ? 1 : undef,
+ scalar $input->param('create_items')
);
}
print $input->redirect('basket.pl?basketno='.$basketno);
my $new_ordernumber = $ordernumber;
$unitprice = Koha::Number::Price->new( $unitprice )->unformat();
+my $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket;
-#need old receivedate if we update the order, parcel.pl only shows the right parcel this way FIXME
+#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
if ($quantityrec > $origquantityrec ) {
my @received_items = ();
- if(C4::Context->preference('AcqCreateItem') eq 'ordering') {
- @received_items = $input->multi_param('items_to_receive');
+ if ($basket->effective_create_items eq 'ordering') {
+ @received_items = $input->param('items_to_receive');
my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceived");
if ( @affects ) {
my $frameworkcode = GetFrameworkCode($biblionumber);
}
# now, add items if applicable
- if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
+ if ($basket->effective_create_items eq 'receiving') {
my @tags = $input->multi_param('tag');
my @subfields = $input->multi_param('subfield');
}
our $basket = GetBasket($basketno);
+my $basketobj = Koha::Acquisition::Baskets->find( $basketno );
$booksellerid = $basket->{booksellerid} unless $booksellerid;
my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
$template->param( sort1 => $data->{'sort1'} );
$template->param( sort2 => $data->{'sort2'} );
-if (C4::Context->preference('AcqCreateItem') eq 'ordering' && !$ordernumber) {
+if ($basketobj->effective_create_items eq 'ordering' && !$ordernumber) {
# Check if ACQ framework exists
my $marc = GetMarcStructure(1, 'ACQ', { unsafe => 1 } );
unless($marc) {
barcode_subfield => $barcode_subfield,
import_batch_id => $import_batch_id,
subscriptionid => $subscriptionid,
- acqcreate => C4::Context->preference("AcqCreateItem") eq "ordering" ? 1 : "",
+ acqcreate => $basketobj->effective_create_items eq "ordering" ? 1 : "",
users_ids => join(':', @order_user_ids),
users => \@order_users,
(uc(C4::Context->preference("marcflavour"))) => 1
# prepare the form for receiving
my $order = $results->[0];
+my $basket = Koha::Acquisition::Order->fetch({ordernumber => $ordernumber})->basket;
# Check if ACQ framework exists
my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } );
$template->param('NoACQframework' => 1);
}
-my $AcqCreateItem = C4::Context->preference('AcqCreateItem');
+my $AcqCreateItem = $basket->effective_create_items;
if ($AcqCreateItem eq 'receiving') {
$template->param(
AcqCreateItemReceiving => 1,
use C4::Output;
use C4::Suggestions;
+use Koha::Acquisition::Baskets;
use Koha::Acquisition::Bookseller;
use Koha::Biblios;
use Koha::DateUtils;
$line{left_holds_on_order} = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
$line{holds} = $holds_count;
$line{holds_on_order} = $itemholds?$itemholds:$holds_count if $line{left_holds_on_order};
+ $line{basket} = Koha::Acquisition::Baskets->find( $line{basketno} );
my $budget_name = GetBudgetName( $line{budget_id} );
$line{budget_name} = $budget_name;
use C4::Biblio qw/GetBiblioData/;
use Koha::Acquisition::Booksellers;
+use Koha::Acquisition::Baskets;
my $input=new CGI;
my $owner = $input->param('owner') || 0 ; # flag to see only "my" orders, or everyone orders
my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
+$template->param( basket => Koha::Acquisition::Baskets->find($basketno) );
+
#show all orders that have uncertain price for the bookseller
my $pendingorders = SearchOrders({
booksellerid => $booksellerid,
--- /dev/null
+ALTER TABLE aqbasket ADD COLUMN create_items ENUM('ordering', 'receiving', 'cataloguing') DEFAULT NULL;
`basketgroupid` int(11), -- links this basket to its group (aqbasketgroups.id)
`deliveryplace` varchar(10) default NULL, -- basket delivery place
`billingplace` varchar(10) default NULL, -- basket billing place
+ create_items ENUM('ordering', 'receiving', 'cataloguing') default NULL; -- when items should be created for orders in this basket
branch varchar(10) default NULL, -- basket branch
is_standing TINYINT(1) NOT NULL DEFAULT 0, -- orders in this basket are standing
PRIMARY KEY (`basketno`),
[% IF ( creationdate ) %]<li><span class="label">Opened on:</span> [% creationdate | $KohaDates %]</li>[% END %]
[% IF ( closedate ) %]<li><span class="label">Closed on:</span> [% closedate | $KohaDates %]</li>[% END %]
[% IF ( estimateddeliverydate ) %]<li><span class="label">Estimated delivery date:</span> [% estimateddeliverydate | $KohaDates %]</li>[% END %]
- [% IF ( estimateddeliverydate ) %]<li><span class="label">Estimated delivery date:</span> [% estimateddeliverydate | $KohaDates %]</li>[% END %]
<li><span class="label">Orders are standing:</span> [% IF is_standing %]Yes[% ELSE %]No[% END %]</li>
+ [% IF basket.create_items %]
+ <li>
+ <span class="label">Create items when:</span>
+ [% SWITCH basket.create_items %]
+ [% CASE 'receiving' %]Receiving items
+ [% CASE 'cataloguing' %]Cataloguing items
+ [% CASE %]Placing orders
+ [% END %]
+ </li>
+ [% END %]
</ol>
</div>
[% USE Branches %]
+[% USE Koha %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha › Acquisitions ›
[% IF ( add_form ) %]
[% IF ( basketno ) %]
<li>
<input type="hidden" name="basketno" value="[% basketno %]" />
- <input type="hidden" name="is_an_edit" value="1" />
+ <input type="hidden" name="rs_an_edit" value="1" />
</li>
[% END %]
<li>
[% END %]
<div class="hint">Standing orders do not close when received.</div>
</li>
+ [% UNLESS basketno %]
+ <li>
+ <label for="create_items">Create items when:</label>
+ <select name="create_items" id="create_items">
+ [% SWITCH Koha.Preference('AcqCreateItem') %]
+ [% CASE 'receiving' %]<option value="">use default (receiving an order).</option>
+ [% CASE 'cataloguing' %]<option value="">use default (cataloging the record).</option>
+ [% CASE %]<option value="">use default (placing an order).</option>
+ [% END %]
+ <option value="ordering">placing an order.</option>
+ <option value="receiving">receiving an order.</option>
+ <option value="cataloguing">cataloging the record.</option>
+ </select>
+ </li>
+ [% END %]
</ol>
</fieldset>
<fieldset class="action">
<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 or ( order.basket.effective_create_items == "receiving" and loop_receive.holds > 0 ) %]
[% IF loop_receive.cannot_cancel %]
[% span_title = BLOCK %]
Cannot cancel receipt of this order line because it
<input class="check_uncertain" data-ordernumber="[% uncertainpriceorder.ordernumber %]" type="text" size="10" name="price[% uncertainpriceorder.ordernumber %]" value="[% uncertainpriceorder.listprice %]" />
</td>
<td>
- [% IF Koha.Preference('AcqCreateItem') == 'ordering' %]
+ [% IF basket.effective_create_items == 'ordering' %]
[% uncertainpriceorder.quantity %]
<input type="hidden" name="qty[% uncertainpriceorder.ordernumber %]" value="[% uncertainpriceorder.quantity %]" />
[% ELSE %]
ordering: placing an order.
receiving: receiving an order.
cataloguing: cataloging the record.
+ - This is only the default behavior, and can be changed per-basket.
-
- "The following <a href='http://schema.koha-community.org/__VERSION__/tables/items.html' target='blank'>database columns</a> should be unique in an item:"
- pref: UniqueItemFields
<p>This record has many physical items ([% items_count %]). <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblionumber | html %]&viewallitems=1">Click here to view them all.</a></p>
[% ELSIF ( itemloop.size ) %]
[% INCLUDE items_table items=itemloop tab="holdings" %]
- [% IF Koha.Preference('OPACAcquisitionDetails') and Koha.Preference('AcqCreateItem') != 'ordering' and acquisition_details.total_quantity > 0 %]
+ [% IF Koha.Preference('OPACAcquisitionDetails') and acquisition_details.total_quantity > 0 %]
[% IF acquisition_details.total_quantity == 1 %]
<span>1 item is on order.</span>
[% ELSE %]
<div id="alternateholdings"><span class="holdings_label">Holdings:</span> [% ALTERNATEHOLDING.holding %]</div>
[% END %]
[% ELSE %]
- [% IF Koha.Preference('OPACAcquisitionDetails') and Koha.Preference('AcqCreateItem') != 'ordering' and acquisition_details.total_quantity > 0 %]
+ [% IF Koha.Preference('OPACAcquisitionDetails') and acquisition_details.total_quantity > 0 %]
[% IF acquisition_details.total_quantity == 1 %]
<span>1 item is on order.</span>
[% ELSE %]
use Koha::AuthorisedValues;
use Koha::Biblios;
use Koha::ItemTypes;
+use Koha::Acquisition::Order;
use Koha::Virtualshelves;
use Koha::Patrons;
use Koha::Ratings;
});
my $total_quantity = 0;
for my $order ( @$orders ) {
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) {
+ my $basket = Koha::Acquisition::Order->find( $order->{ordernumber} )->basket;
+ if ( $basket->effective_create_items eq 'ordering' ) {
for my $itemnumber ( C4::Acquisition::GetItemnumbersFromOrder( $order->{ordernumber} ) ) {
push @itemnumbers_on_order, $itemnumber;
}
$itm->{transfertto} = $transfertto;
}
- if ( C4::Context->preference('OPACAcquisitionDetails')
- and C4::Context->preference('AcqCreateItem') eq 'ordering' )
- {
+ if ( C4::Context->preference('OPACAcquisitionDetails') ) {
$itm->{on_order} = 1
if grep /^$itm->{itemnumber}$/, @itemnumbers_on_order;
}