@@ -, +, @@ functions when receiving. received serial's itemtype is set as defined in the subscription. (Please note that the item-level_itypes syspref must be set to specific item.) It is also made available. --- C4/Serials.pm | 53 +++++++++++++++++++--- ...ble_and_makePreviousSerialAvailable_syspref.sql | 2 + installer/data/mysql/kohastructure.sql | 51 +++++++++++++++++++++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/serials.pref | 6 +++ .../prog/en/modules/serials/serials-edit.tt | 1 - .../prog/en/modules/serials/subscription-add.tt | 28 ++++++++++++ serials/serials-edit.pl | 24 ++++++++++ serials/subscription-add.pl | 22 ++++++++- 9 files changed, 179 insertions(+), 9 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_7677_Adds_fields_to_subscription_table_and_makePreviousSerialAvailable_syspref.sql --- a/C4/Serials.pm +++ a/C4/Serials.pm @@ -76,6 +76,7 @@ BEGIN { &ReNewSubscription &GetLateOrMissingIssues &GetSerialInformation &AddItem2Serial &PrepareSerialsData &GetNextExpected &ModNextExpected + &GetPreviousSerialid &GetSuppliersWithLateIssues &getsupplierbyserialid &GetDistributedTo &SetDistributedTo @@ -805,6 +806,39 @@ sub GetLatestSerials { return \@serials; } +=head2 GetPreviousSerialid + +$serialid = GetPreviousSerialid($subscriptionid, $nth) +get the $nth's previous serial for the given subscriptionid +return : +the serialid + +=cut + +sub GetPreviousSerialid { + my ( $subscriptionid, $nth ) = @_; + $nth ||= 1; + my $dbh = C4::Context->dbh; + my $return = undef; + + # Status 2: Arrived + my $strsth = "SELECT serialid + FROM serial + WHERE subscriptionid = ? + AND status = 2 + ORDER BY serialid DESC LIMIT $nth,1 + "; + my $sth = $dbh->prepare($strsth); + $sth->execute($subscriptionid); + my @serials; + my $line = $sth->fetchrow_hashref; + $return = $line->{'serialid'} if ($line); + + return $return; +} + + + =head2 GetDistributedTo $distributedto=GetDistributedTo($subscriptionid) @@ -1306,7 +1340,8 @@ sub ModSubscription { $lastvalue2, $innerloop2, $lastvalue3, $innerloop3, $status, $biblionumber, $callnumber, $notes, $letter, $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, - $graceperiod, $location, $enddate, $subscriptionid, $skip_serialseq + $graceperiod, $location, $enddate, $subscriptionid, $skip_serialseq, + $itemtype, $previousitemtype ) = @_; my $dbh = C4::Context->dbh; @@ -1319,7 +1354,7 @@ sub ModSubscription { callnumber=?, notes=?, letter=?, manualhistory=?, internalnotes=?, serialsadditems=?, staffdisplaycount=?, opacdisplaycount=?, graceperiod=?, location = ?, enddate=?, - skip_serialseq=? + skip_serialseq=?, itemtype=?, previousitemtype=? WHERE subscriptionid = ?"; my $sth = $dbh->prepare($query); @@ -1333,6 +1368,7 @@ sub ModSubscription { $letter, ($manualhistory ? $manualhistory : 0), $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq, + $itemtype, $previousitemtype, $subscriptionid ); my $rows = $sth->rows; @@ -1348,7 +1384,8 @@ $subscriptionid = &NewSubscription($auser,branchcode,$aqbooksellerid,$cost,$aqbu $lastvalue1,$innerloop1,$lastvalue2,$innerloop2,$lastvalue3,$innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber, $manualhistory, $internalnotes, $serialsadditems, - $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq); + $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate, + $skip_serialseq, $itemtype, $previousitemtype); Create a new subscription with value given on input args. @@ -1365,7 +1402,7 @@ sub NewSubscription { $innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber, $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod, - $location, $enddate, $skip_serialseq + $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype ) = @_; my $dbh = C4::Context->dbh; @@ -1378,8 +1415,9 @@ sub NewSubscription { lastvalue3, innerloop3, status, notes, letter, firstacquidate, irregularity, numberpattern, locale, callnumber, manualhistory, internalnotes, serialsadditems, staffdisplaycount, - opacdisplaycount, graceperiod, location, enddate, skip_serialseq) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + opacdisplaycount, graceperiod, location, enddate, skip_serialseq, + itemtype, previousitemtype) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |; my $sth = $dbh->prepare($query); $sth->execute( @@ -1389,7 +1427,8 @@ sub NewSubscription { $lastvalue3, $innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber, $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount, - $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq + $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq, + $itemtype, $previousitemtype ); my $subscriptionid = $dbh->{'mysql_insertid'}; --- a/installer/data/mysql/atomicupdate/bug_7677_Adds_fields_to_subscription_table_and_makePreviousSerialAvailable_syspref.sql +++ a/installer/data/mysql/atomicupdate/bug_7677_Adds_fields_to_subscription_table_and_makePreviousSerialAvailable_syspref.sql @@ -0,0 +1,2 @@ +ALTER TABLE `subscription` ADD `itemtype` VARCHAR( 10 ) NULL AFTER reneweddate, ADD `previousitemtype` VARCHAR( 10 ) NULL AFTER itemtype; +INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('makePreviousSerialAvailable','0','make previous serial automatically available when collecting a new serial. Please note that the item-level_itypes syspref must be set to specific item.','','YesNo'); --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -2080,6 +2080,8 @@ CREATE TABLE `subscription` ( -- information related to the subscription `enddate` date default NULL, -- subscription end date `closed` INT(1) NOT NULL DEFAULT 0, -- yes / no if the subscription is closed `reneweddate` date default NULL, -- date of last renewal for the subscription + `itemtype` VARCHAR( 10 ) NULL, + `previousitemtype` VARCHAR( 10 ) NULL, PRIMARY KEY (`subscriptionid`), CONSTRAINT subscription_ibfk_1 FOREIGN KEY (periodicity) REFERENCES subscription_frequencies (id) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT subscription_ibfk_2 FOREIGN KEY (numberpattern) REFERENCES subscription_numberpatterns (id) ON DELETE SET NULL ON UPDATE CASCADE @@ -2119,6 +2121,55 @@ CREATE TABLE `subscriptionroutinglist` ( -- information related to the routing l ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `subscriptionroutinglist_ibfk_2` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE +<<<<<<< 85adee702147e7112ed41a440ad4f13d2ed9fd36 +======= +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Table structure for table `suggestions` +-- + +DROP TABLE IF EXISTS `suggestions`; +CREATE TABLE `suggestions` ( -- purchase suggestions + `suggestionid` int(8) NOT NULL auto_increment, -- unique identifier assigned automatically by Koha + `suggestedby` int(11) NOT NULL default 0, -- borrowernumber for the person making the suggestion, foreign key linking to the borrowers table + `suggesteddate` date NOT NULL, -- date the suggestion was submitted + `managedby` int(11) default NULL, -- borrowernumber for the librarian managing the suggestion, foreign key linking to the borrowers table + `manageddate` date default NULL, -- date the suggestion was updated + acceptedby INT(11) default NULL, -- borrowernumber for the librarian who accepted the suggestion, foreign key linking to the borrowers table + accepteddate date default NULL, -- date the suggestion was marked as accepted + rejectedby INT(11) default NULL, -- borrowernumber for the librarian who rejected the suggestion, foreign key linking to the borrowers table + rejecteddate date default NULL, -- date the suggestion was marked as rejected + `STATUS` varchar(10) NOT NULL default '', -- suggestion status (ASKED, CHECKED, ACCEPTED, or REJECTED) + `note` mediumtext, -- note entered on the suggestion + `author` varchar(80) default NULL, -- author of the suggested item + `title` varchar(255) default NULL, -- title of the suggested item + `copyrightdate` smallint(6) default NULL, -- copyright date of the suggested item + `publishercode` varchar(255) default NULL, -- publisher of the suggested item + `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- date and time the suggestion was updated + `volumedesc` varchar(255) default NULL, + `publicationyear` smallint(6) default 0, + `place` varchar(255) default NULL, -- publication place of the suggested item + `isbn` varchar(30) default NULL, -- isbn of the suggested item + `biblionumber` int(11) default NULL, -- foreign key linking the suggestion to the biblio table after the suggestion has been ordered + `reason` text, -- reason for accepting or rejecting the suggestion + `patronreason` text, -- reason for making the suggestion + budgetid INT(11), -- foreign key linking the suggested budget to the aqbudgets table + branchcode VARCHAR(10) default NULL, -- foreign key linking the suggested branch to the branches table + collectiontitle text default NULL, -- collection name for the suggested item + itemtype VARCHAR(30) default NULL, -- suggested item type + quantity SMALLINT(6) default NULL, -- suggested quantity to be purchased + currency VARCHAR(3) default NULL, -- suggested currency for the suggested price + price DECIMAL(28,6) default NULL, -- suggested price + total DECIMAL(28,6) default NULL, -- suggested total cost (price*quantity updated for currency) + PRIMARY KEY (`suggestionid`), + KEY `suggestedby` (`suggestedby`), + KEY `managedby` (`managedby`), + KEY `status` (`STATUS`), + KEY `biblionumber` (`biblionumber`), + KEY `branchcode` (`branchcode`), + CONSTRAINT `suggestions_budget_id_fk` FOREIGN KEY (`budgetid`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE SET NULL ON UPDATE CASCADE +>>>>>>> BZ7677: New areas in subscriptions and new functions when receiving. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -229,6 +229,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('LocalHoldsPriority', '0', NULL, 'Enables the LocalHoldsPriority feature', 'YesNo'), ('LocalHoldsPriorityItemControl', 'holdingbranch', 'holdingbranch|homebranch', 'decides if the feature operates using the item''s home or holding library.', 'Choice'), ('LocalHoldsPriorityPatronControl', 'PickupLibrary', 'HomeLibrary|PickupLibrary', 'decides if the feature operates using the library set as the patron''s home library, or the library set as the pickup library for the given hold.', 'Choice'), +('makePreviousSerialAvailable','0','','make previous serial automatically available when collecting a new serial. Please note that the item-level_itypes syspref must be set to specific item.','YesNo'), ('ManInvInNoissuesCharge','1',NULL,'MANUAL_INV charges block checkouts (added to noissuescharge).','YesNo'), ('MARCAuthorityControlField008','|| aca||aabn | a|a d',NULL,'Define the contents of MARC21 authority control field 008 position 06-39','Textarea'), ('MarcFieldsToOrder','',NULL,'Set the mapping values for a new order line created from a MARC record in a staged file. In a YAML format.','textarea'), --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/serials.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/serials.pref @@ -50,3 +50,9 @@ Serials: - - List of fields which must not be rewritten when a subscription is duplicated (Separated by pipe |) - pref: SubscriptionDuplicateDroppedInput + - + - pref: makePreviousSerialAvailable + choices: + yes: Make + no: Do not make + - previous serial automatically available when collecting a new serial. Please note that the item-level_itypes syspref must be set to specific item. --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-edit.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-edit.tt @@ -30,7 +30,6 @@ function unHideItems(index,labelindex, serialId) { subfield_div = $(item_div).find("input[name='kohafield'][value='items.enumchron']").parent(); // Setting text field $(subfield_div).children("input[type='text'][name='field_value']").val($("#serialseq" + serialId).val()); - } function HideItems(index,labelindex) { subfield = document.getElementById(index); --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt @@ -652,6 +652,34 @@ $(document).ready(function() {
  • + + +
  • + [%IF makePreviousSerialAvailable %] +
  • + + +
  • + [% END %] +
  • day(s)
  • --- a/serials/serials-edit.pl +++ a/serials/serials-edit.pl @@ -93,6 +93,7 @@ if ( scalar(@subscriptionids) == 1 && index( $subscriptionids[0], q|,| ) > 0 ) { } my @errors; my @errseq; +my $dbh = C4::Context->dbh; # If user comes from subscription details unless (@serialids) { @@ -250,6 +251,29 @@ if ( $op and $op eq 'serialchangestatus' ) { $notes[$i] ); } + my $makePreviousSerialAvailable = C4::Context->preference('makePreviousSerialAvailable'); + if ($makePreviousSerialAvailable && $serialids[$i] ne "NEW") { + # We already have created the new expected serial at this point, so we get the second previous serial + my $previous = GetPreviousSerialid($subscriptionids[$i]); + if ($previous) { + + # Getting the itemnumber matching the serialid + my $query = "SELECT itemnumber FROM serialitems WHERE serialid=?"; + my $sth = $dbh->prepare($query); + $sth->execute($previous); + my @row = $sth->fetchrow_array; + if ($row[0]) { + my $itemnumber = $row[0]; + + # Getting the itemtype to set from the database + my $subscriptioninfos = GetSubscription($subscriptionids[$i]); + + # Changing the status to "available" and the itemtype according to the previousitemtype db field + ModItem({notforloan => 0, itype => $subscriptioninfos->{'previousitemtype'} }, undef, $itemnumber); + } + } + } + } my @moditems = $query->multi_param('moditem'); if ( scalar(@moditems) ) { --- a/serials/subscription-add.pl +++ a/serials/subscription-add.pl @@ -141,7 +141,23 @@ for my $field ( @$additional_fields ) { } $template->param( additional_fields_for_subscription => $additional_fields ); +my $typeloop = GetItemTypes(); + +my @typearg = + map { { code => $_, value => $typeloop->{$_}{'description'}, selected => ( ( $subs->{itemtype} and $_ eq $subs->{itemtype} ) ? "selected=\"selected\"" : "" ), } } sort keys %{$typeloop}; +my @previoustypearg = + map { { code => $_, value => $typeloop->{$_}{'description'}, selected => ( ( $subs->{previousitemtype} and $_ eq $subs->{previousitemtype} ) ? "selected=\"selected\"" : "" ), } } sort keys %{$typeloop}; + +$template->param( + branchloop => $branchloop, + typeloop => \@typearg, + previoustypeloop => \@previoustypearg, + locations_loop=>$locations_loop, +); + # prepare template variables common to all $op conditions: +$template->param('makePreviousSerialAvailable' => 1) if (C4::Context->preference('makePreviousSerialAvailable')); + if ($op!~/^mod/) { my $letters = get_letter_loop(); $template->param( letterloop => $letters ); @@ -301,6 +317,8 @@ sub redirect_add_subscription { my $staffdisplaycount = $query->param('staffdisplaycount'); my $opacdisplaycount = $query->param('opacdisplaycount'); my $location = $query->param('location'); + my $itemtype = $query->param('itemtype'); + my $previousitemtype = $query->param('previousitemtype'); my $skip_serialseq = $query->param('skip_serialseq'); my $startdate = output_pref( { str => scalar $query->param('startdate'), dateonly => 1, dateformat => 'iso' } ); @@ -378,6 +396,8 @@ sub redirect_mod_subscription { my $opacdisplaycount = $query->param('opacdisplaycount'); my $graceperiod = $query->param('graceperiod') || 0; my $location = $query->param('location'); + my $itemtype = $query->param('itemtype'); + my $previousitemtype = $query->param('previousitemtype'); my $skip_serialseq = $query->param('skip_serialseq'); # Guess end date @@ -405,7 +425,7 @@ sub redirect_mod_subscription { $status, $biblionumber, $callnumber, $notes, $letter, $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate, $subscriptionid, - $skip_serialseq + $skip_serialseq, $itemtype, $previousitemtype ); my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } ); --