&GetBasketgroups &ReOpenBasketgroup
&DelOrder &ModOrder &GetOrder &GetOrders &GetOrdersByBiblionumber
- &GetLateOrders &GetOrderFromItemnumber
+ &GetOrderFromItemnumber
&SearchOrders &GetHistory &GetRecentAcqui
&ModReceiveOrder &CancelReceipt
&TransferOrder
- &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
&ModItemOrder
&GetParcels
biblioitems.publishercode,
aqorders.rrp AS unitpricesupplier,
aqorders.ecost AS unitpricelib,
- aqorders.claims_count AS claims_count,
- aqorders.claimed_date AS claimed_date,
aqbudgets.budget_name AS budget,
aqbooksellers.name AS supplier,
aqbooksellers.id AS supplierid,
return $result_set->[0];
}
-=head3 GetLastOrderNotReceivedFromSubscriptionid
-
- $order = &GetLastOrderNotReceivedFromSubscriptionid($subscriptionid);
-
-Returns a reference-to-hash describing the last order not received for a subscription.
-
-=cut
-
-sub GetLastOrderNotReceivedFromSubscriptionid {
- my ( $subscriptionid ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = qq|
- SELECT * FROM aqorders
- LEFT JOIN subscription
- ON ( aqorders.subscriptionid = subscription.subscriptionid )
- WHERE aqorders.subscriptionid = ?
- AND aqorders.datereceived IS NULL
- LIMIT 1
- |;
- my $result_set =
- $dbh->selectall_arrayref( $query, { Slice => {} }, $subscriptionid );
-
- # result_set assumed to contain 1 match
- return $result_set->[0];
-}
-
-=head3 GetLastOrderReceivedFromSubscriptionid
-
- $order = &GetLastOrderReceivedFromSubscriptionid($subscriptionid);
-
-Returns a reference-to-hash describing the last order received for a subscription.
-
-=cut
-
-sub GetLastOrderReceivedFromSubscriptionid {
- my ( $subscriptionid ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = qq|
- SELECT * FROM aqorders
- LEFT JOIN subscription
- ON ( aqorders.subscriptionid = subscription.subscriptionid )
- WHERE aqorders.subscriptionid = ?
- AND aqorders.datereceived =
- (
- SELECT MAX( aqorders.datereceived )
- FROM aqorders
- LEFT JOIN subscription
- ON ( aqorders.subscriptionid = subscription.subscriptionid )
- WHERE aqorders.subscriptionid = ?
- AND aqorders.datereceived IS NOT NULL
- )
- ORDER BY ordernumber DESC
- LIMIT 1
- |;
- my $result_set =
- $dbh->selectall_arrayref( $query, { Slice => {} }, $subscriptionid, $subscriptionid );
-
- # result_set assumed to contain 1 match
- return $result_set->[0];
-
-}
-
-#------------------------------------------------------------#
-
=head3 ModOrder
&ModOrder(\%hashref);
#------------------------------------------------------------#
-=head3 GetLateOrders
-
- @results = &GetLateOrders;
-
-Searches for bookseller with late orders.
-
-return:
-the table of supplier with late issues. This table is full of hashref.
-
-=cut
-
-sub GetLateOrders {
- my $delay = shift;
- my $supplierid = shift;
- my $branch = shift;
- my $estimateddeliverydatefrom = shift;
- my $estimateddeliverydateto = shift;
-
- my $dbh = C4::Context->dbh;
-
- #BEWARE, order of parenthesis and LEFT JOIN is important for speed
- my $dbdriver = C4::Context->config("db_scheme") || "mysql";
-
- my @query_params = ();
- my $select = "
- SELECT aqbasket.basketno,
- aqorders.ordernumber AS ordernumber,
- DATE(aqbasket.closedate) AS orderdate,
- aqbasket.basketname AS basketname,
- aqbasket.basketgroupid AS basketgroupid,
- aqbasketgroups.name AS basketgroupname,
- aqorders.rrp AS unitpricesupplier,
- aqorders.ecost AS unitpricelib,
- aqorders.claims_count AS claims_count,
- aqorders.claimed_date AS claimed_date,
- aqorders.order_internalnote AS internalnote,
- aqorders.order_vendornote AS vendornote,
- aqbudgets.budget_name AS budget,
- borrowers.branchcode AS branch,
- aqbooksellers.name AS supplier,
- aqbooksellers.id AS supplierid,
- biblio.author, biblio.title,
- biblioitems.publishercode AS publisher,
- biblioitems.publicationyear,
- biblioitems.isbn AS isbn,
- ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) AS estimateddeliverydate,
- ";
- my $from = "
- FROM
- aqorders LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber
- LEFT JOIN biblioitems ON biblioitems.biblionumber = biblio.biblionumber
- LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id,
- aqbasket LEFT JOIN borrowers ON aqbasket.authorisedby = borrowers.borrowernumber
- LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
- LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid = aqbasketgroups.id
- WHERE aqorders.basketno = aqbasket.basketno
- AND ( datereceived IS NULL
- OR aqorders.quantityreceived < aqorders.quantity
- )
- AND aqbasket.closedate IS NOT NULL
- AND aqorders.datecancellationprinted IS NULL
- ";
- if ($dbdriver eq "mysql") {
- $select .= "
- aqorders.quantity - COALESCE(aqorders.quantityreceived,0) AS quantity,
- (aqorders.quantity - COALESCE(aqorders.quantityreceived,0)) * aqorders.rrp AS subtotal,
- DATEDIFF(CAST(now() AS date),closedate) AS latesince
- ";
- if ( defined $delay ) {
- $from .= " AND (closedate <= DATE_SUB(CAST(now() AS date),INTERVAL ? DAY)) " ;
- push @query_params, $delay;
- }
- $from .= " AND aqorders.quantity - COALESCE(aqorders.quantityreceived,0) <> 0";
- } else {
- # FIXME: account for IFNULL as above
- $select .= "
- aqorders.quantity AS quantity,
- aqorders.quantity * aqorders.rrp AS subtotal,
- (CAST(now() AS date) - closedate) AS latesince
- ";
- if ( defined $delay ) {
- $from .= " AND (closedate <= (CAST(now() AS date) -(INTERVAL ? DAY)) ";
- push @query_params, $delay;
- }
- $from .= " AND aqorders.quantity <> 0";
- }
- if (defined $supplierid) {
- $from .= ' AND aqbasket.booksellerid = ? ';
- push @query_params, $supplierid;
- }
- if (defined $branch) {
- $from .= ' AND borrowers.branchcode LIKE ? ';
- push @query_params, $branch;
- }
-
- if ( defined $estimateddeliverydatefrom or defined $estimateddeliverydateto ) {
- $from .= ' AND aqbooksellers.deliverytime IS NOT NULL ';
- }
- if ( defined $estimateddeliverydatefrom ) {
- $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) >= ?';
- push @query_params, $estimateddeliverydatefrom;
- }
- if ( defined $estimateddeliverydateto ) {
- $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) <= ?';
- push @query_params, $estimateddeliverydateto;
- }
- if ( defined $estimateddeliverydatefrom and not defined $estimateddeliverydateto ) {
- $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) <= CAST(now() AS date)';
- }
- if (C4::Context->preference("IndependentBranches")
- && !C4::Context->IsSuperLibrarian() ) {
- $from .= ' AND borrowers.branchcode LIKE ? ';
- push @query_params, C4::Context->userenv->{branch};
- }
- $from .= " AND orderstatus <> 'cancelled' ";
- my $query = "$select $from \nORDER BY latesince, basketno, borrowers.branchcode, supplier";
- $debug and print STDERR "GetLateOrders query: $query\nGetLateOrders args: " . join(" ",@query_params);
- my $sth = $dbh->prepare($query);
- $sth->execute(@query_params);
- my @results;
- while (my $data = $sth->fetchrow_hashref) {
- push @results, $data;
- }
- return @results;
-}
-
-#------------------------------------------------------------#
-
=head3 GetHistory
\@order_loop = GetHistory( %params );
=head3 FillWithDefaultValues
-FillWithDefaultValues( $marc_record );
+FillWithDefaultValues( $marc_record, $params );
This will update the record with default value defined in the ACQ framework.
For all existing fields, if a default value exists and there are no subfield, it will be created.
If the field does not exist, it will be created too.
+If the parameter only_mandatory => 1 is passed via $params, only the mandatory
+defaults are being applied to the record.
+
=cut
sub FillWithDefaultValues {
- my ($record) = @_;
+ my ( $record, $params ) = @_;
+ my $mandatory = $params->{only_mandatory};
my $tagslib = C4::Biblio::GetMarcStructure( 1, 'ACQ', { unsafe => 1 } );
if ($tagslib) {
my ($itemfield) =
next if $tag == $itemfield;
for my $subfield ( sort keys %{ $tagslib->{$tag} } ) {
next if IsMarcStructureInternal($tagslib->{$tag}{$subfield});
+ next if $mandatory && !$tagslib->{$tag}{$subfield}{mandatory};
my $defaultvalue = $tagslib->{$tag}{$subfield}{defaultvalue};
if ( defined $defaultvalue and $defaultvalue ne '' ) {
my @fields = $record->field($tag);