Bugzilla – Attachment 8345 Details for
Bug 7294
status "in order"
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Proposed patch
0001-Bug-7294-Adds-acquisition-informations-in-marc-recor.patch (text/plain), 15.08 KB, created by
Matthias Meusburger
on 2012-03-20 12:52:19 UTC
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Matthias Meusburger
Created:
2012-03-20 12:52:19 UTC
Size:
15.08 KB
patch
obsolete
>From 4411f22ff0afef92944c3abf50b74a28c69a83bc Mon Sep 17 00:00:00 2001 >From: Matthias Meusburger <matthias.meusburger@biblibre.com> >Date: Mon, 20 Feb 2012 14:06:36 +0100 >Subject: [PATCH] Bug 7294: Adds acquisition informations in marc record > >"View status 'in order' to the OPAC and staff interface. Specific >fields from aqorders can be mapped to marc fields (using ACQ bibliographic >framework): >aqorders.branchcode >aqorders.quantity >aqorders.listprice >aqorders.uncertainprice >aqorders.rrp >aqorders.ecost >aqorders.notes >aqorders.supplierreference >aqorders.ordernumber > >This way, you can keep track on what is currently on order >at biblio level until you receive everything. Once all items have been >received, the marc field is deleted. >--- > C4/Acquisition.pm | 88 +++++++++++++++++++++- > acqui/addorder.pl | 127 +++++++++++++++++++++++++------- > admin/koha2marclinks.pl | 8 +-- > admin/marc_subfields_structure.pl | 6 ++ > installer/data/mysql/kohastructure.sql | 1 + > installer/data/mysql/updatedatabase.pl | 21 +++++ > 6 files changed, 216 insertions(+), 35 deletions(-) > >diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm >index 0a96a02..3803894 100644 >--- a/C4/Acquisition.pm >+++ b/C4/Acquisition.pm >@@ -1124,6 +1124,8 @@ sub ModReceiveOrder { > my $order = $sth->fetchrow_hashref(); > $sth->finish(); > >+ >+ # If there are still items to be received > if ( $order->{quantity} > $quantrec ) { > $sth=$dbh->prepare(" > UPDATE aqorders >@@ -1145,15 +1147,53 @@ sub ModReceiveOrder { > } > $order->{'quantity'} -= $quantrec; > $order->{'quantityreceived'} = 0; >- my $newOrder = NewOrder($order); >-} else { >- $sth=$dbh->prepare("update aqorders >+ my ($newOrder, $newordernumber) = NewOrder($order); >+ >+ # Do we have to update order informations from the marc record? >+ my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >+ >+ # Updating MARC order field if exists >+ if ($ordertag and $ordersubtag) { >+ $debug and warn "updating MARC"; >+ # Getting record >+ my $record = GetMarcBiblio($biblionumber); >+ if ($record) { >+ $debug and warn "updating Record"; >+ foreach ($record->field($ordertag)) { >+ if ($_->subfield($ordersubtag) eq $ordernumber) { >+ # Updating ordernumber >+ $debug and warn "updating ordernumber $ordernumber => $newordernumber"; >+ $_->update($ordersubtag => $newordernumber); >+ >+ # Updating quantity >+ my ($quantitytag, $quantitysubtag) = GetMarcFromKohaField('aqorders.quantity', 'ACQ'); >+ if ($quantitysubtag) { >+ $debug and warn "updating quantity " . $order->{quantity}; >+ $_->update($quantitysubtag => $order->{quantity}); >+ } >+ } >+ } >+ >+ # Applying changes >+ ModBiblio($record, $biblionumber, 'ACQ'); >+ } >+ } >+ >+ >+ } else { >+ $sth = $dbh->prepare( >+ "update aqorders > set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?, > unitprice=?,freight=?,rrp=? > where biblionumber=? and ordernumber=?"); > $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber); > $sth->finish; >+ >+ # Removing MARC order field if exists >+ DelMarcOrder($biblionumber, $ordernumber); > } >+ >+ > return $datereceived; > } > #------------------------------------------------------------# >@@ -1253,6 +1293,10 @@ sub DelOrder { > my $sth = $dbh->prepare($query); > $sth->execute( $bibnum, $ordernumber ); > $sth->finish; >+ >+ # Removing MARC order field if exists >+ DelMarcOrder($bibnum, $ordernumber); >+ > my @itemnumbers = GetItemnumbersFromOrder( $ordernumber ); > foreach my $itemnumber (@itemnumbers){ > C4::Items::DelItem( $dbh, $bibnum, $itemnumber ); >@@ -1260,6 +1304,44 @@ sub DelOrder { > > } > >+=head3 DelMarcOrder >+ >+=over 4 >+ >+&DelMarcOrder($biblionumber, $ordernumber); >+ >+Delete the order field from the MARC record. aqorders.ordernumber needs >+to be linked to a MARC field/subfield. The field is deleted if the value of >+the subfield containing the ordernumber matches the ordernumber given >+in parameter >+ >+=back >+ >+=cut >+ >+sub DelMarcOrder { >+ my ($biblionumber, $ordernumber) = @_; >+ >+ # Do we have to remove order informations from the marc record? >+ my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >+ >+ # Removing MARC order field if exists >+ if ($ordertag and $ordersubtag) { >+ # Getting record >+ my $record = GetMarcBiblio($biblionumber); >+ if ($record) { >+ # Looking for the right field >+ foreach ($record->field($ordertag)) { >+ if ($_->subfield($ordersubtag) eq $ordernumber) { >+ $record->delete_field($_); >+ } >+ } >+ # Applying changes >+ ModBiblio($record, $biblionumber, 'ACQ'); >+ } >+ } >+} >+ > =head2 FUNCTIONS ABOUT PARCELS > > =cut >diff --git a/acqui/addorder.pl b/acqui/addorder.pl >index 279084b..d03bce7 100755 >--- a/acqui/addorder.pl >+++ b/acqui/addorder.pl >@@ -122,10 +122,11 @@ if it is an order from an existing suggestion : the id of this suggestion. > use strict; > use warnings; > use CGI; >-use C4::Auth; # get_template_and_user >-use C4::Acquisition; # NewOrder DelOrder ModOrder >-use C4::Suggestions; # ModStatus >-use C4::Biblio; # AddBiblio TransformKohaToMarc >+use C4::Auth; # get_template_and_user >+use C4::Acquisition; # NewOrder DelOrder ModOrder >+use C4::Suggestions; # ModStatus >+use C4::Biblio; # AddBiblio TransformKohaToMarc >+use C4::Bookseller qw/GetBookSellerFromId/; > use C4::Items; > use C4::Output; > >@@ -193,42 +194,116 @@ my $user = $input->remote_user; > # delete biblio if delbiblio has been set to 1 by the librarian > my $bibitemnum; > if ( $orderinfo->{quantity} ne '0' ) { >+ >+ # Getting bookseller's name >+ my $supplierreference; >+ if ($$orderinfo{booksellerid}) { >+ my $bookseller = GetBookSellerFromId($$orderinfo{booksellerid}); >+ $supplierreference = $bookseller->{name}; >+ } >+ >+ # Do we have to add order informations to the marc record? >+ my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >+ my $record; >+ my $existingbiblio; # Was the order made on an existing biblio? >+ my $ordermodif; # Is this an order modification? >+ > #TODO:check to see if biblio exists > unless ( $$orderinfo{biblionumber} ) { > #if it doesnt create it >- my $record = TransformKohaToMarc( >- { >- "biblio.title" => "$$orderinfo{title}", >- "biblio.author" => $$orderinfo{author} ? $$orderinfo{author} : "", >- "biblio.seriestitle" => $$orderinfo{series} ? $$orderinfo{series} : "", >- "biblioitems.isbn" => $$orderinfo{isbn} ? $$orderinfo{isbn} : "", >- "biblioitems.publishercode" => $$orderinfo{publishercode} ? $$orderinfo{publishercode} : "", >- "biblioitems.publicationyear" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "", >- "biblio.copyrightdate" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "", >- "biblioitems.itemtype" => $$orderinfo{itemtype} ? $$orderinfo{itemtype} : "", >- "biblioitems.editionstatement"=> $$orderinfo{editionstatement} ? $$orderinfo{editionstatement} : "", >- }); >+ my $tmprecord = TransformKohaToMarc( >+ { "biblio.title" => "$$orderinfo{title}", >+ "biblio.author" => $$orderinfo{author} ? $$orderinfo{author} : "", >+ "biblio.seriestitle" => $$orderinfo{series} ? $$orderinfo{series} : "", >+ "biblio.copyrightdate" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear} : "", >+ "biblioitems.isbn" => $$orderinfo{isbn} ? $$orderinfo{isbn} : "", >+ "biblioitems.ean" => $$orderinfo{ean} ? $$orderinfo{ean} : "", >+ "biblioitems.publishercode" => $$orderinfo{publishercode} ? $$orderinfo{publishercode} : "", >+ "biblioitems.publicationyear" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear} : "", >+ "biblioitems.itemtype" => $$orderinfo{itemtype} ? $$orderinfo{itemtype} : "", >+ "biblioitems.editionstatement"=> $$orderinfo{editionstatement}? $$orderinfo{editionstatement}: "", >+ "aqorders.branchcode" => $$orderinfo{branchcode} ? $$orderinfo{branchcode} : "", >+ "aqorders.quantity" => $$orderinfo{quantity} ? $$orderinfo{quantity} : "", >+ "aqorders.listprice" => $$orderinfo{listprice} ? $$orderinfo{listprice} : "", >+ "aqorders.uncertainprice" => $$orderinfo{uncertainprice} ? $$orderinfo{uncertainprice} : "", >+ "aqorders.rrp" => $$orderinfo{rrp} ? $$orderinfo{rrp} : "", >+ "aqorders.ecost" => $$orderinfo{ecost} ? $$orderinfo{ecost} : "", >+ "aqorders.notes" => $$orderinfo{notes} ? $$orderinfo{notes} : "", >+ "aqorders.supplierreference" => $supplierreference ? $supplierreference : "", >+ "aqorders.sort1" => $$orderinfo{sort1} ? $$orderinfo{sort1} : "", >+ "aqorders.sort2" => $$orderinfo{sort2} ? $$orderinfo{sort2} : "" >+ } >+ ); > > # create the record in catalogue, with framework '' >- my ($biblionumber,$bibitemnum) = AddBiblio($record,''); >+ my ( $biblionumber, $bibitemnum ) = AddBiblio( $tmprecord, '' ); >+ > # change suggestion status if applicable > if ($$orderinfo{suggestionid}) { > ModSuggestion( {suggestionid=>$$orderinfo{suggestionid}, STATUS=>'ORDERED', biblionumber=>$biblionumber} ); > } >- $orderinfo->{biblioitemnumber}=$bibitemnum; >- $orderinfo->{biblionumber}=$biblionumber; >+ $orderinfo->{biblioitemnumber} = $bibitemnum; >+ $orderinfo->{biblionumber} = $biblionumber; >+ } else { >+ $existingbiblio = 1; > } > >- # if we already have $ordernumber, then it's an ordermodif >- if ($$orderinfo{ordernumber}) { >- ModOrder( $orderinfo); >- } >- else { # else, it's a new line >+ # Getting record >+ $record = GetMarcBiblio($$orderinfo{biblionumber}); >+ >+ >+ >+ # if we already have $ordernumber, then it's an ordermodif >+ if ( $$orderinfo{ordernumber} ) { >+ ModOrder($orderinfo); >+ $ordermodif = 1; >+ >+ } else { # else, it's a new line > @$orderinfo{qw(basketno ordernumber )} = NewOrder($orderinfo); >+ >+ # We have to add the ordernumber in the designated subfield >+ if ($ordertag && $record && !$ordermodif) { >+ # To which field do we add it : to the one with currently no ordernumber >+ foreach ($record->field($ordertag)) { >+ if (!$_->subfield($ordersubtag)) { >+ $_->update($ordersubtag, $$orderinfo{ordernumber}); >+ } >+ } >+ ModBiblio($record, $$orderinfo{biblionumber}, 'ACQ'); >+ } >+ >+ >+ } >+ >+ if ($record) { >+ >+ # If we have to add order infos to the marc record >+ if ($ordertag) { >+ >+ # If the order was made on an existing biblio and it is not a modification, we add the field >+ $record->insert_fields_ordered(new MARC::Field($ordertag, '', '', $ordersubtag => $$orderinfo{ordernumber})) if (!$ordermodif && $existingbiblio); >+ >+ foreach ($record->field($ordertag)) { >+ # Looking for the matching one >+ if ($_->subfield($ordersubtag) eq $$orderinfo{ordernumber}) { >+ >+ # Replacing or creating subfields >+ my ($t, $st); >+ for my $tablefield (qw/branchcode quantity listprice uncertainprice rrp ecost notes supplierreference sort1 sort2/) { >+ ($t, $st) = GetMarcFromKohaField("aqorders.$tablefield", 'ACQ'); >+ $_->update($st, $$orderinfo{$tablefield}) if ($$orderinfo{$tablefield} and $st); >+ } >+ ModBiblio($record, $$orderinfo{biblionumber}, 'ACQ'); >+ } >+ } >+ >+ } >+ > } > >- # now, add items if applicable >- if (C4::Context->preference('AcqCreateItem') eq 'ordering') { >+ >+ # now, add items if applicable >+ if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) { > > my @tags = $input->param('tag'); > my @subfields = $input->param('subfield'); >diff --git a/admin/koha2marclinks.pl b/admin/koha2marclinks.pl >index a89681d..046aa6d 100755 >--- a/admin/koha2marclinks.pl >+++ b/admin/koha2marclinks.pl >@@ -157,12 +157,8 @@ q|select tagfield,tagsubfield,liblibrarian,kohafield from marc_subfield_structur > $template->param( > loop => \@loop_data, > tablename => CGI::scrolling_list( >- -name => 'tablename', >- -values => [ >- 'biblio', >- 'biblioitems', >- 'items', >- ], >+ -name => 'tablename', >+ -values => [ 'biblio', 'biblioitems', 'items', 'aqorders'], > -default => $tablename, > -size => 1, > -multiple => 0 >diff --git a/admin/marc_subfields_structure.pl b/admin/marc_subfields_structure.pl >index 2c69733..6414c03 100755 >--- a/admin/marc_subfields_structure.pl >+++ b/admin/marc_subfields_structure.pl >@@ -123,6 +123,12 @@ if ( $op eq 'add_form' ) { > while ( ( my $field ) = $sth2->fetchrow_array ) { > push @kohafields, "items." . $field; > } >+ $sth2 = $dbh->prepare("SHOW COLUMNS from aqorders"); >+ $sth2->execute; >+ while ( ( my $field ) = $sth2->fetchrow_array ) { >+ push @kohafields, "aqorders." . $field; >+ } >+ > > # build authorised value list > $sth2->finish; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index 153e17b..3abfc0b 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -2658,6 +2658,7 @@ CREATE TABLE `aqorders` ( > `uncertainprice` tinyint(1), > `claims_count` int(11) default 0, > `claimed_date` date default NULL, >+ `branchcode` varchar(10) default NULL, > PRIMARY KEY (`ordernumber`), > KEY `basketno` (`basketno`), > KEY `biblionumber` (`biblionumber`), >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 082d5ca..59106fb 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -4924,7 +4924,28 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { > } > > >+ >+ >+ >+ >+$DBversion = "3.07.00.028"; >+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { >+ $dbh->do("ALTER TABLE `aqorders` ADD `branchcode` VARCHAR( 10 ) NULL"); >+ print "Upgrade to $DBversion done (Adding branchcode in aqorders)\n"; >+ SetVersion($DBversion); >+} >+ >+ >+ >+ >+ >+ >+ >+ > =head1 FUNCTIONS >+======= >+ >+=item DropAllForeignKeys($table) > > =head2 DropAllForeignKeys($table) > >-- >1.7.5.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7294
:
7773
|
7834
|
8084
|
8345
|
8916
|
8922
|
9980
|
10121
|
10745
|
11661
|
12301
|
12302
|
12303
|
12332
|
14072
|
14076
|
14918
|
16017
|
16247
|
16464
|
17313