use C4::Auth;
use C4::Output;
use C4::Biblio;
+use C4::Items;
use C4::Context;
use C4::Koha; # XXX subfield_is_koha_internal_p
+use C4::Branch; # XXX subfield_is_koha_internal_p
+use C4::ClassSource;
+
use Date::Calc qw(Today);
use MARC::File::XML;
my $error = $input->param('error');
my $biblionumber = $input->param('biblionumber');
my $itemnumber = $input->param('itemnumber');
-
my $op = $input->param('op');
+my ($template, $loggedinuser, $cookie)
+ = get_template_and_user({template_name => "cataloguing/additem.tmpl",
+ query => $input,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => {editcatalogue => 1},
+ debug => 1,
+ });
+
# find itemtype
my $frameworkcode = &GetFrameworkCode($biblionumber);
my @indicator = $input->param('indicator');
my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM');
my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
- # if autoBarcode is ON, calculate barcode...
- if (C4::Context->preference('autoBarcode')) {
+ # if autoBarcode is set to 'incremental', calculate barcode...
+ # NOTE: This code is subject to change in 3.2 with the implemenation of ajax based autobarcode code
+ # NOTE: 'incremental' is the ONLY autoBarcode option available to those not using javascript
+ if (C4::Context->preference('autoBarcode') eq 'incremental') {
my ($tagfield,$tagsubfield) = &GetMarcFromKohaField("items.barcode",$frameworkcode);
unless ($record->field($tagfield)->subfield($tagsubfield)) {
my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items");
}
# check for item barcode # being unique
my $addedolditem = TransformMarcToKoha($dbh,$record);
- my $exists = get_item_from_barcode($addedolditem->{'barcode'});
- push @errors,"barcode_not_unique" if($exists);
+ my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
+ push @errors,"barcode_not_unique" if($exist_itemnumber);
# if barcode exists, don't create, but report The problem.
- my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItem($record,$biblionumber) unless ($exists);
- if ($exists) {
- $nextop = "additem";
+ my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber) unless ($exist_itemnumber);
+ if ($exist_itemnumber) {
+ $nextop = "additem";
$itemrecord = $record;
} else {
$nextop = "additem";
} elsif ($op eq "edititem") {
#-------------------------------------------------------------------------------
# retrieve item if exist => then, it's a modif
- $itemrecord = GetMarcItem($biblionumber,$itemnumber);
+ $itemrecord = C4::Items::GetMarcItem($biblionumber,$itemnumber);
$nextop="saveitem";
#-------------------------------------------------------------------------------
} elsif ($op eq "delitem") {
#-------------------------------------------------------------------------------
# check that there is no issue on this item before deletion.
- my $sth=$dbh->prepare("select * from issues i where i.returndate is null and i.itemnumber=?");
+ my $sth=$dbh->prepare("select * from issues i where i.itemnumber=?");
$sth->execute($itemnumber);
my $onloan=$sth->fetchrow;
+ $sth->finish();
push @errors,"book_on_loan" if ($onloan); ##error book_on_loan added to template as well
if ($onloan){
- $nextop="additem";
+ $nextop="additem";
} else {
- &DelItem($biblionumber,$itemnumber);
- print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
- #$nextop="additem";
+ # check it doesnt have a waiting reserve
+ $sth=$dbh->prepare("SELECT * FROM reserves WHERE found = 'W' AND itemnumber = ?");
+ $sth->execute($itemnumber);
+ my $reserve=$sth->fetchrow;
+ if ($reserve){
+ push @errors,"book_reserved";
+ $nextop="additem";
+ }
+ else {
+ &DelItem($dbh,$biblionumber,$itemnumber);
+ print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
+ }
}
#-------------------------------------------------------------------------------
} elsif ($op eq "saveitem") {
# build indicator hash.
my @ind_tag = $input->param('ind_tag');
my @indicator = $input->param('indicator');
-# my $itemnumber = $input->param('itemnumber');
+ # my $itemnumber = $input->param('itemnumber');
my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag,'ITEM');
- my $itemrecord=MARC::Record::new_from_xml($xml, 'UTF-8');
-# MARC::Record builded => now, record in DB
-# warn "R: ".$record->as_formatted;
- my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItem($itemrecord,$biblionumber,$itemnumber,0);
+ my $itemtosave=MARC::Record::new_from_xml($xml, 'UTF-8');
+ # MARC::Record builded => now, record in DB
+ # warn "R: ".$record->as_formatted;
+ # check that the barcode don't exist already
+ my $addedolditem = TransformMarcToKoha($dbh,$itemtosave);
+ my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
+ if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
+ push @errors,"barcode_not_unique";
+ } else {
+ my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItemFromMarc($itemtosave,$biblionumber,$itemnumber);
$itemnumber="";
+ }
$nextop="additem";
}
#-------------------------------------------------------------------------------
# build screen with existing items. and "new" one
#-------------------------------------------------------------------------------
-my ($template, $loggedinuser, $cookie)
- = get_template_and_user({template_name => "cataloguing/additem.tmpl",
- query => $input,
- type => "intranet",
- authnotrequired => 0,
- flagsrequired => {editcatalogue => 1},
- debug => 1,
- });
-my %indicators;
-$indicators{995}=' ';
# now, build existiing item list
my $temp = GetMarcBiblio( $biblionumber );
my @fields = $temp->fields();
my %this_row;
# loop through each subfield
for my $i (0..$#subf) {
- next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10 && ($field->tag() ne $itemtagfield && $subf[$i][0] ne $itemtagsubfield));
+ next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10
+ && ($field->tag() ne $itemtagfield
+ && $subf[$i][0] ne $itemtagsubfield));
+
$witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib} if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} eq 10);
- $this_row{$subf[$i][0]} =$subf[$i][1] if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} eq 10);
+
+ $this_row{$subf[$i][0]}=GetAuthorisedValueDesc( $field->tag(),
+ $subf[$i][0], $subf[$i][1], '', $tagslib) if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} eq 10);
+
if (($field->tag eq $branchtagfield) && ($subf[$i][$0] eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) {
#verifying rights
- my $userenv = C4::Context->userenv;
+ my $userenv = C4::Context->userenv();
unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subf[$i][1]))){
$this_row{'nomod'}=1;
}
push(@big_array, \%this_row);
}
}
-#fill big_row with missing datas
+#fill big_row with missing data
foreach my $subfield_code (keys(%witness)) {
for (my $i=0;$i<=$#big_array;$i++) {
$big_array[$i]{$subfield_code}=" " unless ($big_array[$i]{$subfield_code});
@big_array = sort {$a->{$holdingbrtagsubf} cmp $b->{$holdingbrtagsubf}} @big_array;
# now, construct template !
+# First, the existing items for display
my @item_value_loop;
my @header_value_loop;
for (my $i=0;$i<=$#big_array; $i++) {
push(@header_value_loop, \%header_value);
}
-# next item form
+# now, build the item form for entering a new item
my @loop_data =();
my $i=0;
-my $authorised_values_sth = $dbh->prepare("select authorised_value,lib from authorised_values where category=? order by lib");
+my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib");
foreach my $tag (sort keys %{$tagslib}) {
my $previous_tag = '';
my $index_subfield= int(rand(1000000));
if($subfield eq '@'){
- $subfield_data{id} = "tag_".$tag."_subfield_0_".$index_subfield;
+ $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
} else {
$subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
}
$value =~ s/MM/$month/g;
$value =~ s/DD/$day/g;
}
- $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} % 2 == 1) and $value ne '');
+ $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
#testing branch value if IndependantBranches.
my $test = (C4::Context->preference("IndependantBranches")) &&
($tag eq $branchtagfield) && ($subfield eq $branchtagsubfield) &&
# print $input->redirect(".pl?biblionumber=$biblionumber") if ($test);
# search for itemcallnumber if applicable
if (!$value && $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && C4::Context->preference('itemcallnumber')) {
- my $CNtag = substr(C4::Context->preference('itemcallnumber'),0,3);
- my $CNsubfield = substr(C4::Context->preference('itemcallnumber'),3,1);
- my $CNsubfield2 = substr(C4::Context->preference('itemcallnumber'),4,1);
- my $temp2 = $temp->field($CNtag);
- if ($temp2) {
- $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
+ my $CNtag = substr(C4::Context->preference('itemcallnumber'),0,3);
+ my $CNsubfield = substr(C4::Context->preference('itemcallnumber'),3,1);
+ my $CNsubfield2 = substr(C4::Context->preference('itemcallnumber'),4,1);
+ my $temp2 = $temp->field($CNtag);
+ if ($temp2) {
+ $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
#remove any trailing space incase one subfield is used
$value=~s/^\s+|\s+$//g;
}
#---- branch
if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
- my $sth =
- $dbh->prepare(
- "select branchcode,branchname from branches order by branchname");
- $sth->execute;
- push @authorised_values, ""
- unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-
- while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) {
- push @authorised_values, $branchcode;
- $authorised_lib{$branchcode} = $branchname;
+ #Use GetBranches($onlymine)
+ my $onlymine=C4::Context->preference('IndependantBranches') &&
+ C4::Context->userenv &&
+ C4::Context->userenv->{flags}!=1 &&
+ C4::Context->userenv->{branch};
+ my $branches = GetBranches($onlymine);
+ my @branchloop;
+ foreach my $thisbranch ( sort keys %$branches ) {
+ push @authorised_values, $thisbranch;
+ $authorised_lib{$thisbranch} = $branches->{$thisbranch}->{'branchname'};
}
-
+
#----- itemtypes
}
elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
}
$value = $itemtype unless ($value);
+ #---- class_sources
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
+ push @authorised_values, ""
+ unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+
+ my $class_sources = GetClassSources();
+
+ my $default_source = C4::Context->preference("DefaultClassificationSource");
+
+ foreach my $class_source (sort keys %$class_sources) {
+ next unless $class_sources->{$class_source}->{'used'} or
+ ($value and $class_source eq $value) or
+ ($class_source eq $default_source);
+ push @authorised_values, $class_source;
+ $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
+ }
+ $value = $default_source unless ($value);
+
#---- "true" authorised value
}
else {
}
}
$subfield_data{marc_value} =CGI::scrolling_list(
- -name => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
+ -name => "field_value",
-values => \@authorised_values,
-default => $value,
-labels => \%authorised_lib,
$subfield_data{marc_value} =
"<input type=\"text\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
value=\"$value\"
class=\"input_marceditor\"
tabindex=\"1\"
my $cgidir = C4::Context->intranetdir . "/cgi-bin/cataloguing/value_builder";
unless ( opendir( DIR, "$cgidir" ) ) {
$cgidir = C4::Context->intranetdir . "/cataloguing/value_builder";
+ closedir( DIR );
}
my $plugin = $cgidir . "/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
- do $plugin || die "Plugin Failed: ".$plugin;
- my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
- my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
-# my ( $function_name, $javascript,$extended_param );
+ if (do $plugin) {
+ my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
+ my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
- $subfield_data{marc_value} =
- "<input tabindex=\"1\"
- type=\"text\"
+ $subfield_data{marc_value} =
+ "<input tabindex=\"1\"
+ type=\"text\"
+ id=\"".$subfield_data{id}."\"
+ name=\"field_value\"
+ value=\"$value\"
+ class=\"input_marceditor\"
+ onfocus=\"Focus$function_name(".$subfield_data{random}.")\"
+ size=\"67\"
+ maxlength=\"255\"
+ onblur=\"Blur$function_name(".$subfield_data{random}."); \" \/>
+ <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
+ $javascript";
+ } else {
+ warn "Plugin Failed: $plugin";
+ # supply default input form
+ $subfield_data{marc_value} =
+ "<input type=\"text\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
value=\"$value\"
- class=\"input_marceditor\"
- onfocus=\"Focus$function_name(".$subfield_data{random}.")\"
+ tabindex=\"1\"
size=\"67\"
maxlength=\"255\"
- onblur=\"Blur$function_name(".$subfield_data{random}."); \" \/>
- <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'; return false;)\" title=\"Tag Editor\">...</a>
- $javascript";
+ class=\"input_marceditor\"
+ \/>
+ ";
+ }
# it's an hidden field
}
elsif ( $tag eq '' ) {
"<input tabindex=\"1\"
type=\"hidden\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
size=\"67\"
maxlength=\"255\"
value=\"$value\" \/>
$subfield_data{marc_value} =
"<input type=\"text\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
class=\"input_marceditor\"
tabindex=\"1\"
size=\"67\"
"<textarea cols=\"70\"
rows=\"4\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
class=\"input_marceditor\"
tabindex=\"1\"
size=\"67\"
$subfield_data{marc_value} =
"<input type=\"text\"
id=\"".$subfield_data{id}."\"
- name=\"".$subfield_data{id}."\"
+ name=\"field_value\"
value=\"$value\"
tabindex=\"1\"
size=\"67\"