Bug 19263: Rancor - Add auto-001 widget

To test:

1 - Define a new authorised valued category "CONTROL_NUM_SEQUENCE"
2 - Add a value/sequence
    The authorised_value is the starting value - shoudl end in a number
    that can be incremented e.g. "control_sequence_001"
    The description field is the name for the seqeuence
    Opac description is unused
3 - Edit a record in rancor
4 - Note the new widget and option to increment or assign manually

Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Jesse Weaver 2015-11-10 12:04:14 -07:00 committed by Nick Clemens
parent 593b43f9b6
commit 36d46cf997
3 changed files with 118 additions and 1 deletions

View File

@ -134,6 +134,13 @@ body {
padding: 2px;
}
#editor .subfield-widget button {
font-family: inherit;
font-size: inherit;
margin-left: 5px;
vertical-align: middle;
}
#editor .subfield-widget select, #editor .subfield-widget input {
height: 1.5em;
vertical-align: middle;

View File

@ -85,7 +85,7 @@
* single subfield, '@'.
*/
require( [ 'widget' ], function( Widget ) {
require( [ 'koha-backend', 'widget' ], function( KohaBackend, Widget ) {
Widget.Register( '000@', {
makeTemplate: function() {
return ' nam a22 7a 4500';
@ -113,6 +113,57 @@ require( [ 'widget' ], function( Widget ) {
},
} );
Widget.Register( '001@', {
init: function() {
var $result = $(
'<span class="subfield-widget">'
+ _("Control number: ")
+ '<span class="control-number-widget-contents"></span>'
+ '<button class="control-number-widget-assign">' + _("Assign next") + '</button>'
+ '<select class="control-number-widget-sequence"></select>'
+ '<button class="control-number-widget-override">Override</button>'
+ '</span>'
);
return $result[0];
},
setControlNumber: function( text ) {
if ( text ) this.setText( text );
$( this.node ).find('.control-number-widget-contents')
.html( text == '<empty>' ? ( '<span class="hint">' + _("unset") + '</span>' ) : text );
this.mark.changed();
},
postCreate: function( node, mark ) {
var widget = this;
this.setControlNumber( this.text );
$( this.node )
.find('.control-number-widget-assign').click( function() {
var sequence = $( widget.node ).find('.control-number-widget-sequence').val();
$.post(
'/cgi-bin/koha/svc/cataloguing/control_num_sequences/' + sequence
).done( function( result ) {
if ( result.next_value ) widget.setControlNumber( result.next_value );
} );
} ).end()
.find('.control-number-widget-override').click( function() {
var result = prompt( _("Enter new control number") );
if ( result ) widget.setControlNumber( result );
} ).end();
var sequence_list = $.map( KohaBackend.GetAuthorisedValues( 'CONTROL_NUM_SEQUENCE' ), function( authval ) {
return authval.lib;
} );
sequence_list.sort();
$.each( sequence_list, function( undef, sequence ) {
$( widget.node ).find('.control-number-widget-sequence').append( '<option>' + sequence + '</option>' );
} );
// TODO: Make Enter on select click "Assign"
}
} );
Widget.Register( '005@', {
init: function() {
var $result = $( '<span class="subfield-widget fixed-widget">' + _("Updated: ") + '</span>' );

View File

@ -0,0 +1,59 @@
#!/usr/bin/perl
#
# Copyright 2015 ByWater Solutions
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Koha; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use C4::Service;
use Koha::Database;
use MARC::Record;
our ( $query, $response ) = C4::Service->init( editcatalogue => 'edit_catalogue' );
sub get_and_increment {
my ( $control_num_sequence ) = @_;
my $schema = Koha::Database->new->schema();
my $authval = $schema->resultset( 'AuthorisedValue' )->find(
{
category => 'CONTROL_NUM_SEQUENCE',
lib => $control_num_sequence
}
);
if ( !$authval ) {
C4::Service->return_error( 'not_found' );
}
my $value = $authval->authorised_value;
$response->param( next_value => $value );
my ( $prefix, $num ) = ( $value =~ /(.+?)(\d+)$/ );
$value = $prefix . sprintf( '%0*d', length( $num ), $num + 1 );
$authval->authorised_value( $value );
$authval->update();
C4::Service->return_success( $response );
}
C4::Service->dispatch(
[ 'POST /(.*)', [], \&get_and_increment ],
);