View | Details | Raw Unified | Return to bug 3966
Collapse All | Expand All

(-)a/C4/Acquisition.pm (-35 / +16 lines)
Lines 1083-1098 sub GetCancelledOrders { Link Here
1083
1083
1084
=head3 ModReceiveOrder
1084
=head3 ModReceiveOrder
1085
1085
1086
  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $user,
1086
  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $receiveditems);
1087
    $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
1088
    $freight, $bookfund, $rrp);
1089
1087
1090
Updates an order, to reflect the fact that it was received, at least
1088
Updates an order, to reflect the fact that it was received, at least
1091
in part. All arguments not mentioned below update the fields with the
1089
in part.
1092
same name in the aqorders table of the Koha database.
1093
1090
1094
If a partial order is received, splits the order into two.  The received
1091
If a partial order is received, splits the order into two.  The received
1095
portion must have a booksellerinvoicenumber.
1092
portion must have a booksellerinvoicenumber. If $receiveditems are supplied,
1093
the rest of the items will be moved to the new order.
1096
1094
1097
Updates the order with bibilionumber C<$biblionumber> and ordernumber
1095
Updates the order with bibilionumber C<$biblionumber> and ordernumber
1098
C<$ordernumber>.
1096
C<$ordernumber>.
Lines 1101-1113 C<$ordernumber>. Link Here
1101
1099
1102
1100
1103
sub ModReceiveOrder {
1101
sub ModReceiveOrder {
1104
    my (
1102
    my ( $biblionumber, $ordernumber,  $quantrec, $receiveditems ) = @_;
1105
        $biblionumber,    $ordernumber,  $quantrec, $user, $cost,
1106
        $invoiceno, $freight, $rrp, $budget_id, $datereceived
1107
    )
1108
    = @_;
1109
    my $dbh = C4::Context->dbh;
1103
    my $dbh = C4::Context->dbh;
1110
    $datereceived = C4::Dates->output('iso') unless $datereceived;
1104
1111
    my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
1105
    my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
1112
    if ($suggestionid) {
1106
    if ($suggestionid) {
1113
        ModSuggestion( {suggestionid=>$suggestionid,
1107
        ModSuggestion( {suggestionid=>$suggestionid,
Lines 1125-1160 sub ModReceiveOrder { Link Here
1125
    $sth->finish();
1119
    $sth->finish();
1126
1120
1127
    if ( $order->{quantity} > $quantrec ) {
1121
    if ( $order->{quantity} > $quantrec ) {
1128
        $sth=$dbh->prepare("
1129
            UPDATE aqorders
1130
            SET quantityreceived=?
1131
                , datereceived=?
1132
                , booksellerinvoicenumber=?
1133
                , unitprice=?
1134
                , freight=?
1135
                , rrp=?
1136
                , quantity=?
1137
            WHERE biblionumber=? AND ordernumber=?");
1138
1139
        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber);
1140
        $sth->finish;
1141
1142
        # create a new order for the remaining items, and set its bookfund.
1122
        # create a new order for the remaining items, and set its bookfund.
1143
        foreach my $orderkey ( "linenumber", "allocation" ) {
1123
        foreach my $orderkey ( "linenumber", "allocation" ) {
1144
            delete($order->{'$orderkey'});
1124
            delete($order->{'$orderkey'});
1145
        }
1125
        }
1146
        $order->{'quantity'} -= $quantrec;
1126
        $order->{'quantity'} -= $quantrec;
1147
        $order->{'quantityreceived'} = 0;
1127
        $order->{'quantityreceived'} = 0;
1148
        my $newOrder = NewOrder($order);
1128
        my (undef, $newOrder) = NewOrder($order);
1149
} else {
1129
1150
        $sth=$dbh->prepare("update aqorders
1130
        if ($receiveditems && @$receiveditems) {
1151
                            set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
1131
            my $sql = "
1152
                                unitprice=?,freight=?,rrp=?
1132
                UPDATE aqorders_items
1153
                            where biblionumber=? and ordernumber=?");
1133
                SET ordernumber = ?
1154
        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber);
1134
                WHERE ordernumber = ?
1155
        $sth->finish;
1135
                AND itemnumber NOT IN (".join(",", map "?", @$receiveditems).")";
1136
            $dbh->do($sql, undef, $newOrder, $ordernumber, @$receiveditems);
1137
        }
1156
    }
1138
    }
1157
    return $datereceived;
1158
}
1139
}
1159
#------------------------------------------------------------#
1140
#------------------------------------------------------------#
1160
1141
(-)a/C4/Biblio.pm (-2 lines)
Lines 2580-2587 sub TransformMarcToKohaOneField { Link Here
2580
}
2580
}
2581
2581
2582
2582
2583
#"
2584
2585
#
2583
#
2586
# true ModZebra commented until indexdata fixes zebraDB crashes (it seems they occur on multiple updates
2584
# true ModZebra commented until indexdata fixes zebraDB crashes (it seems they occur on multiple updates
2587
# at the same time
2585
# at the same time
(-)a/C4/ImportBatch.pm (-2 / +2 lines)
Lines 547-556 sub BatchCommitItems { Link Here
547
            $updsth->execute();
547
            $updsth->execute();
548
            $num_items_errored++;
548
            $num_items_errored++;
549
        } else {
549
        } else {
550
            my ($item_biblionumber, $biblioitemnumber, $itemnumber) = AddItemFromMarc($item_marc, $biblionumber);
550
            my $item = AddItemFromMarc($item_marc, $biblionumber);
551
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ? WHERE import_items_id = ?");
551
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ? WHERE import_items_id = ?");
552
            $updsth->bind_param(1, 'imported');
552
            $updsth->bind_param(1, 'imported');
553
            $updsth->bind_param(2, $itemnumber);
553
            $updsth->bind_param(2, $item->{itemnumber});
554
            $updsth->bind_param(3, $row->{'import_items_id'});
554
            $updsth->bind_param(3, $row->{'import_items_id'});
555
            $updsth->execute();
555
            $updsth->execute();
556
            $updsth->finish();
556
            $updsth->finish();
(-)a/C4/Items.pm (-10 / +15 lines)
Lines 194-204 sub CartToShelf { Link Here
194
194
195
=head2 AddItemFromMarc
195
=head2 AddItemFromMarc
196
196
197
  my ($biblionumber, $biblioitemnumber, $itemnumber) 
197
  my $item = AddItemFromMarc($source_item_marc, $biblionumber);
198
      = AddItemFromMarc($source_item_marc, $biblionumber);
199
198
200
Given a MARC::Record object containing an embedded item
199
Given a MARC::Record object containing an embedded item
201
record and a biblionumber, create a new item record.
200
record and a biblionumber, create a new item record or update
201
existing one.
202
202
203
=cut
203
=cut
204
204
Lines 214-226 sub AddItemFromMarc { Link Here
214
	$localitemmarc->append_fields($source_item_marc->field($itemtag));
214
	$localitemmarc->append_fields($source_item_marc->field($itemtag));
215
    my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode ,'items');
215
    my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode ,'items');
216
    my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
216
    my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
217
    if (my $itemnumber = $item->{itemnumber}) {
218
        return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
219
    }
217
    return AddItem($item, $biblionumber, $dbh, $frameworkcode, $unlinked_item_subfields);
220
    return AddItem($item, $biblionumber, $dbh, $frameworkcode, $unlinked_item_subfields);
218
}
221
}
219
222
220
=head2 AddItem
223
=head2 AddItem
221
224
222
  my ($biblionumber, $biblioitemnumber, $itemnumber) 
225
  my $item = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
223
      = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
224
226
225
Given a hash containing item column names as keys,
227
Given a hash containing item column names as keys,
226
create a new Koha item record.
228
create a new Koha item record.
Lines 272-278 sub AddItem { Link Here
272
   
274
   
273
    logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
275
    logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
274
    
276
    
275
    return ($item->{biblionumber}, $item->{biblioitemnumber}, $itemnumber);
277
    return $item;
276
}
278
}
277
279
278
=head2 AddItemBatchFromMarc
280
=head2 AddItemBatchFromMarc
Lines 451-456 sub ModItemFromMarc { Link Here
451
        $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
453
        $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
452
    }
454
    }
453
    my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
455
    my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
456
    $itemnumber ||= $item->{itemnumber};
454
457
455
    ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields); 
458
    ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields); 
456
    return $item;
459
    return $item;
Lines 458-464 sub ModItemFromMarc { Link Here
458
461
459
=head2 ModItem
462
=head2 ModItem
460
463
461
  ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
464
  my $item = ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
462
465
463
Change one or more columns in an item record and update
466
Change one or more columns in an item record and update
464
the MARC representation of the item.
467
the MARC representation of the item.
Lines 521-526 sub ModItem { Link Here
521
    ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef );
524
    ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef );
522
525
523
    logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog");
526
    logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog");
527
528
    return $item;
524
}
529
}
525
530
526
=head2 ModItemTransfer
531
=head2 ModItemTransfer
Lines 2534-2540 sub _find_value { Link Here
2534
2539
2535
=head2 PrepareItemrecordDisplay
2540
=head2 PrepareItemrecordDisplay
2536
2541
2537
  PrepareItemrecordDisplay($itemrecord,$bibnum,$itemumber,$frameworkcode);
2542
  PrepareItemrecordDisplay(bibnum,$itemumber,$itemrecord,$$frameworkcode);
2538
2543
2539
Returns a hash with all the fields for Display a given item data in a template
2544
Returns a hash with all the fields for Display a given item data in a template
2540
2545
Lines 2713-2726 sub PrepareItemrecordDisplay { Link Here
2713
                            $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
2718
                            $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
2714
                            my $index_subfield = int(rand(1000000));
2719
                            my $index_subfield = int(rand(1000000));
2715
                            $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
2720
                            $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
2716
                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255"
2721
                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue"
2717
                                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
2722
                                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
2718
                                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
2723
                                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
2719
                                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
2724
                                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
2720
                                $javascript];
2725
                                $javascript];
2721
                        } else {
2726
                        } else {
2722
                            warn "Plugin Failed: $plugin";
2727
                            warn "Plugin Failed: $plugin";
2723
                            $subfield_data{marc_value} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" />); # supply default input form
2728
                            $subfield_data{marc_value} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); # supply default input form
2724
                        }
2729
                        }
2725
                }
2730
                }
2726
                elsif ( $tag eq '' ) {       # it's an hidden field
2731
                elsif ( $tag eq '' ) {       # it's an hidden field
(-)a/acqui/addorder.pl (-3 / +2 lines)
Lines 262-270 if ( $orderinfo->{quantity} ne '0' ) { Link Here
262
                                    $itemhash{$item}->{'indicator'},
262
                                    $itemhash{$item}->{'indicator'},
263
                                    'ITEM');
263
                                    'ITEM');
264
            my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
264
            my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
265
            my ($biblionumber,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$$orderinfo{biblionumber});
265
            my $item = AddItemFromMarc($record,$$orderinfo{biblionumber});
266
            NewOrderItem($itemnumber, $$orderinfo{ordernumber});
266
            NewOrderItem($item->{itemnumber}, $$orderinfo{ordernumber});
267
268
        }
267
        }
269
    }
268
    }
270
269
(-)a/acqui/addorderiso2709.pl (-2 / +2 lines)
Lines 260-267 if ($op eq ""){ Link Here
260
            my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
260
            my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
261
            my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
261
            my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
262
            for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) {
262
            for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) {
263
                my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
263
                my $item = AddItemFromMarc( $record, $biblionumber );
264
                NewOrderItem( $itemnumber, $ordernumber );
264
                NewOrderItem( $item->{itemnumber}, $ordernumber );
265
            }
265
            }
266
        } else {
266
        } else {
267
            SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
267
            SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
(-)a/acqui/booksellers.pl (-2 / +4 lines)
Lines 111-122 for my $vendor (@suppliers) { Link Here
111
    
111
    
112
    for my $basket ( @{$baskets} ) {
112
    for my $basket ( @{$baskets} ) {
113
        my $authorisedby = $basket->{authorisedby};
113
        my $authorisedby = $basket->{authorisedby};
114
        my $basketbranch = '';
115
        $basketbranch = GetMember( borrowernumber => $authorisedby )->{branchcode} if $authorisedby;
114
        
116
        
115
        if ($userenv->{'flags'} & 1 || #user is superlibrarian
117
        if ($userenv->{'flags'} & 1 || #user is superlibrarian
116
               (haspermission( $uid, { acquisition => q{*} } ) && #user has acq permissions and
118
               (haspermission( $uid, { acquisition => q{*} } ) && #user has acq permissions and
117
                   ($viewbaskets eq 'all' || #user is allowed to see all baskets
119
                   ($viewbaskets eq 'all' || #user is allowed to see all baskets
118
                   ($viewbaskets eq 'branch' && $authorisedby && $userbranch eq GetMember( borrowernumber => $authorisedby )->{branchcode}) || #basket belongs to user's branch
120
                   ($viewbaskets eq 'branch' && $userbranch eq $basketbranch) || #basket belongs to user's branch
119
                   ($basket->{authorisedby} &&  $viewbaskets == 'user' && $authorisedby == $loggedinuser) #user created this basket
121
                   ($basket->{authorisedby} &&  $viewbaskets == 'user' && $authorisedby eq $loggedinuser) #user created this basket
120
                   ) 
122
                   ) 
121
                ) 
123
                ) 
122
           ) { 
124
           ) { 
(-)a/acqui/finishreceive.pl (-40 / +63 lines)
Lines 26-35 use CGI; Link Here
26
use C4::Auth;
26
use C4::Auth;
27
use C4::Output;
27
use C4::Output;
28
use C4::Context;
28
use C4::Context;
29
use C4::Dates;
29
use C4::Acquisition;
30
use C4::Acquisition;
30
use C4::Biblio;
31
use C4::Biblio;
31
use C4::Items;
32
use C4::Items;
32
use C4::Search;
33
use List::MoreUtils qw/any/;
33
use List::MoreUtils qw/any/;
34
34
35
my $input=new CGI;
35
my $input=new CGI;
Lines 44-100 my $quantityrec=$input->param('quantityrec'); Link Here
44
my $quantity=$input->param('quantity');
44
my $quantity=$input->param('quantity');
45
my $unitprice=$input->param('cost');
45
my $unitprice=$input->param('cost');
46
my $invoiceno=$input->param('invoice');
46
my $invoiceno=$input->param('invoice');
47
my $datereceived=$input->param('datereceived');
47
my $datereceived=$input->param('datereceived') || C4::Dates->output('iso');
48
my $replacement=$input->param('rrp');
48
my $replacement=$input->param('rrp');
49
my $gst=$input->param('gst');
49
my $gst=$input->param('gst');
50
my $freight=$input->param('freight');
50
my $freight=$input->param('freight');
51
my $booksellerid = $input->param('booksellerid');
51
my $booksellerid = $input->param('booksellerid');
52
my $cnt=0;
52
my $cnt=0;
53
my $error_url_str;
53
my $error_url_str = '';
54
my $ecost = $input->param('ecost');
54
my $ecost = $input->param('ecost');
55
my $note = $input->param("note");
55
my $note = $input->param("note");
56
56
57
my $order = GetOrder($ordernumber);
58
$order->{booksellerinvoicenumber} = $invoiceno;
59
$order->{datereceived} = $datereceived;
60
$order->{freight} = $freight;
61
$order->{quantity} = $quantity;
62
$order->{quantityreceived} = $quantityrec;
63
$order->{notes} = $note;
64
$order->{rrp} = $replacement;
65
$order->{ecost} = $ecost;
66
$order->{unitprice} = $unitprice;
67
ModOrder($order);
68
57
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
69
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
58
if ($quantityrec > $origquantityrec ) {
59
    # now, add items if applicable
60
    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
61
70
62
        my @tags         = $input->param('tag');
71
# now, add or update items if applicable
63
        my @subfields    = $input->param('subfield');
72
my @tags         = $input->param('tag');
64
        my @field_values = $input->param('field_value');
73
my @subfields    = $input->param('subfield');
65
        my @serials      = $input->param('serial');
74
my @field_values = $input->param('field_value');
66
        my @itemid       = $input->param('itemid');
75
my @serials      = $input->param('serial');
67
        my @ind_tag      = $input->param('ind_tag');
76
my @itemid       = $input->param('itemid');
68
        my @indicator    = $input->param('indicator');
77
my @ind_tag      = $input->param('ind_tag');
69
        #Rebuilding ALL the data for items into a hash
78
my @indicator    = $input->param('indicator');
70
        # parting them on $itemid.
79
#Rebuilding ALL the data for items into a hash
71
        my %itemhash;
80
# parting them on $itemid.
72
        my $countdistinct;
81
my %itemhash;
73
        my $range=scalar(@itemid);
82
my $countdistinct;
74
        for (my $i=0; $i<$range; $i++){
83
my $range=scalar(@itemid);
75
            unless ($itemhash{$itemid[$i]}){
84
for (my $i=0; $i<$range; $i++){
76
            $countdistinct++;
85
    unless ($itemhash{$itemid[$i]}){
77
            }
86
        $countdistinct++;
78
            push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
87
    }
79
            push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
88
    push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
80
            push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
89
    push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
81
            push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
90
    push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
82
            push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
91
    push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
83
        }
92
    push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
84
        foreach my $item (keys %itemhash){
93
}
85
            my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'},
94
my $error;
86
                                          $itemhash{$item}->{'subfields'},
95
my %itemnumbers = map { $_ => 1 } GetItemnumbersFromOrder($ordernumber);
87
                                          $itemhash{$item}->{'field_values'},
96
my @received;
88
                                          $itemhash{$item}->{'ind_tag'},
97
foreach my $id (keys %itemhash){
89
                                          $itemhash{$item}->{'indicator'},'ITEM');
98
    my $xml = TransformHtmlToXml( $itemhash{$id}->{'tags'},
90
            my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
99
                                  $itemhash{$id}->{'subfields'},
91
            my (undef,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber);
100
                                  $itemhash{$id}->{'field_values'},
92
            NewOrderItem($itemnumber, $ordernumber);
101
                                  $itemhash{$id}->{'ind_tag'},
93
        }
102
                                  $itemhash{$id}->{'indicator'},'ITEM');
103
    my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
104
    my $item = AddItemFromMarc($record,$biblionumber);
105
    my $itemnumber = $item ? $item->{itemnumber} : undef;
106
    if ($itemnumber) {
107
        push @received, $itemnumber;
108
        NewOrderItem($itemnumber, $ordernumber) unless $itemnumbers{$itemnumber};
109
    } else {
110
        $error++;
94
    }
111
    }
95
    
112
}
113
114
if ($error) {
115
    $error_url_str = "&error=Datbase+write+error";
116
}
117
else {
96
    # save the quantity received.
118
    # save the quantity received.
97
    $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived);
119
    ModReceiveOrder($biblionumber,$ordernumber, $quantityrec, \@received);
98
}
120
}
99
121
100
update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
122
update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
Lines 114-116 sub update_item { Link Here
114
        replacementpricedate => $datereceived,
136
        replacementpricedate => $datereceived,
115
    }, $biblionumber, $itemnumber );
137
    }, $biblionumber, $itemnumber );
116
}
138
}
139
(-)a/acqui/orderreceive.pl (-34 / +29 lines)
Lines 87-107 my $search = $input->param('receive'); Link Here
87
my $invoice      = $input->param('invoice');
87
my $invoice      = $input->param('invoice');
88
my $freight      = $input->param('freight');
88
my $freight      = $input->param('freight');
89
my $datereceived = $input->param('datereceived');
89
my $datereceived = $input->param('datereceived');
90
91
92
$datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new();
90
$datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new();
93
91
94
my $bookseller = GetBookSellerFromId($booksellerid);
92
my $bookseller = GetBookSellerFromId($booksellerid);
95
my $input_gst = ($input->param('gst') eq '' ? undef : $input->param('gst'));
93
my $input_gst = ($input->param('gst') eq '' ? undef : $input->param('gst'));
96
my $gst= $input_gst // $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
94
my $gst= $input_gst // $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
97
my $results = SearchOrder($ordernumber,$search);
95
my $results = SearchOrder($ordernumber,$search);
98
99
100
my $count   = scalar @$results;
96
my $count   = scalar @$results;
101
my $order 	= GetOrder($ordernumber);
102
103
104
my $date = @$results[0]->{'entrydate'};
105
97
106
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
98
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
107
    {
99
    {
Lines 116-139 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
116
108
117
# prepare the form for receiving
109
# prepare the form for receiving
118
if ( $count == 1 ) {
110
if ( $count == 1 ) {
119
    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
111
    my $order 	= GetOrder($results->[0]->{ordernumber});
112
    my $biblionumber = $order->{biblionumber};
113
114
    my @itemloop;
115
    if ( my @itemnumbers = GetItemnumbersFromOrder($ordernumber) ) {
116
        @itemloop = map PrepareItemrecordDisplay($biblionumber,$_), @itemnumbers;
117
    }
118
    elsif (C4::Context->preference('AcqCreateItem') eq 'receiving') {
120
        # prepare empty item form
119
        # prepare empty item form
121
        my $cell = PrepareItemrecordDisplay('','','','ACQ');
120
        my $cell = PrepareItemrecordDisplay('','','','ACQ');
122
        unless ($cell) {
121
        unless ($cell) {
123
            $cell = PrepareItemrecordDisplay('','','','');
122
            $cell = PrepareItemrecordDisplay('','','','');
124
            $template->param('NoACQframework' => 1);
123
            $template->param('NoACQframework' => 1);
125
        }
124
        }
126
        my @itemloop;
127
        push @itemloop,$cell;
125
        push @itemloop,$cell;
128
        
129
        $template->param(items => \@itemloop);
130
    }
126
    }
127
        
128
    $template->param(items => \@itemloop) if @itemloop;
131
129
132
    if ( @$results[0]->{'quantityreceived'} == 0 ) {
130
    if ( $order->{'unitprice'} == 0 ) {
133
        @$results[0]->{'quantityreceived'} = '';
131
        $order->{'unitprice'} = '';
134
    }
135
    if ( @$results[0]->{'unitprice'} == 0 ) {
136
        @$results[0]->{'unitprice'} = '';
137
    }
132
    }
138
133
139
    my $suggestion   = GetSuggestionInfoFromBiblionumber(@$results[0]->{'biblionumber'});
134
    my $suggestion   = GetSuggestionInfoFromBiblionumber(@$results[0]->{'biblionumber'});
Lines 145-170 if ( $count == 1 ) { Link Here
145
140
146
    $template->param(
141
    $template->param(
147
        count                 => 1,
142
        count                 => 1,
148
        biblionumber          => @$results[0]->{'biblionumber'},
143
        biblionumber          => $biblionumber,
149
        ordernumber           => @$results[0]->{'ordernumber'},
144
        ordernumber           => $order->{'ordernumber'},
150
        biblioitemnumber      => @$results[0]->{'biblioitemnumber'},
145
        biblioitemnumber      => $order->{'biblioitemnumber'},
151
        booksellerid            => @$results[0]->{'booksellerid'},
146
        booksellerid          => $booksellerid,
152
        freight               => $freight,
147
        freight               => $freight,
153
        gst                   => $gst,
148
        gst                   => $gst,
154
        name                  => $bookseller->{'name'},
149
        name                  => $bookseller->{'name'},
155
        date                  => format_date($date),
150
        date                  => format_date($order->{'entrydate'}),
156
        title                 => @$results[0]->{'title'},
151
        title                 => $order->{'title'},
157
        author                => @$results[0]->{'author'},
152
        author                => $order->{'author'},
158
        copyrightdate         => @$results[0]->{'copyrightdate'},
153
        copyrightdate         => $order->{'copyrightdate'},
159
        isbn                  => @$results[0]->{'isbn'},
154
        isbn                  => $order->{'isbn'},
160
        seriestitle           => @$results[0]->{'seriestitle'},
155
        seriestitle           => $order->{'seriestitle'},
161
        bookfund              => $budget->{budget_name},
156
        bookfund              => $order->{'bookfundid'},
162
        quantity              => @$results[0]->{'quantity'},
157
        quantity              => $order->{'quantity'},
163
        quantityreceivedplus1 => @$results[0]->{'quantityreceived'} + 1,
158
        quantityreceived      => scalar(@itemloop) || 1,
164
        quantityreceived      => @$results[0]->{'quantityreceived'},
159
        origquantityrec       => $order->{'quantityreceived'},
165
        rrp                   => @$results[0]->{'rrp'},
160
        rrp                   => $order->{'rrp'},
166
        ecost                 => @$results[0]->{'ecost'},
161
        ecost                 => $order->{'ecost'},
167
        unitprice             => @$results[0]->{'unitprice'},
162
        unitprice             => $order->{'unitprice'},
168
        memberfirstname       => $member->{firstname} || "",
163
        memberfirstname       => $member->{firstname} || "",
169
        membersurname         => $member->{surname} || "",
164
        membersurname         => $member->{surname} || "",
170
        invoice               => $invoice,
165
        invoice               => $invoice,
(-)a/cataloguing/additem.pl (-4 / +4 lines)
Lines 348-355 if ($op eq "additem") { Link Here
348
	push @errors,"barcode_not_unique" if($exist_itemnumber);
348
	push @errors,"barcode_not_unique" if($exist_itemnumber);
349
	# if barcode exists, don't create, but report The problem.
349
	# if barcode exists, don't create, but report The problem.
350
    unless ($exist_itemnumber) {
350
    unless ($exist_itemnumber) {
351
	    my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
351
	    my $item = AddItemFromMarc($record,$biblionumber);
352
        set_item_default_location($oldbibitemnum);
352
        set_item_default_location($item->{biblioitemnumber});
353
    }
353
    }
354
	$nextop = "additem";
354
	$nextop = "additem";
355
	if ($exist_itemnumber) {
355
	if ($exist_itemnumber) {
Lines 416-423 if ($op eq "additem") { Link Here
416
416
417
		# Adding the item
417
		# Adding the item
418
        if (!$exist_itemnumber) {
418
        if (!$exist_itemnumber) {
419
            my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
419
	        my $item = AddItemFromMarc($record,$biblionumber);
420
            set_item_default_location($oldbibitemnum);
420
            set_item_default_location($item->{biblioitemnumber});
421
421
422
            # We count the item only if it was really added
422
            # We count the item only if it was really added
423
            # That way, all items are added, even if there was some already existing barcodes
423
            # That way, all items are added, even if there was some already existing barcodes
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt (-19 / +17 lines)
Lines 55-69 Link Here
55
            <p class="required">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</p>
55
            <p class="required">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</p>
56
        [% END %]
56
        [% END %]
57
57
58
        [% itemid = 1 %]
58
        [% FOREACH item IN items %]
59
        [% FOREACH item IN items %]
59
        <div id="outeritemblock">
60
        <div id="itemblock[% itemid %]">
60
        <div id="itemblock">
61
            <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];">
61
            <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];">
62
                <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
62
                <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
63
                                
63
                                
64
                    <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
64
                    <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
65
                    [% iteminformatio.marc_value %]
65
                    [% iteminformatio.marc_value %]
66
                    <input type="hidden" name="itemid" value="1" />
66
                    <input type="hidden" name="itemid" value="[% itemid %]" />
67
                    <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" />
67
                    <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" />
68
                    <input type="hidden" name="tag" value="[% iteminformatio.tag %]" />
68
                    <input type="hidden" name="tag" value="[% iteminformatio.tag %]" />
69
                    <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" />
69
                    <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" />
Lines 75-92 Link Here
75
                </div></li>
75
                </div></li>
76
            [% END %]
76
            [% END %]
77
            </ol>
77
            </ol>
78
            <a class="addItem" onclick="cloneItemBlock('itemblock[% item.itemBlockIndex %]')">Add</a>
78
            <a class="addItem" onclick="cloneItemBlock('itemblock[% itemid %]')">+</a>&nbsp;
79
            <a class="delItem" style="display:none;" onclick="deleteItemBlock('itemblock[% item.itemBlockIndex %]')">Delete</a>
79
            <a style=class="delItem" onclick="deleteItemBlock('itemblock[% itemid %]')">-</a>
80
81
            <input type="hidden" name="moditem" value="" /> 
82
            <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
83
            <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
84
            <input type="hidden" name="serial" value="[% item.serialid %]" />
85
            <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
86
            <input type="hidden" name="itemid" value="[% itemid %]" />
87
            <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
80
        </div><!-- /iteminformation -->
88
        </div><!-- /iteminformation -->
81
        </div>
89
        [% itemid = itemid + 1 %]
82
        
83
        <input type="hidden" name="moditem" value="" /> 
84
        <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
85
        <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
86
        <input type="hidden" name="serial" value="[% item.serialid %]" />
87
        <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
88
        <input type="hidden" name="itemid" value="1" />
89
        <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
90
        [% END %] <!-- /items -->
90
        [% END %] <!-- /items -->
91
    </fieldset>
91
    </fieldset>
92
    [% END %] <!-- items -->
92
    [% END %] <!-- items -->
Lines 116-129 Link Here
116
            [% IF ( quantityreceived ) %]
116
            [% IF ( quantityreceived ) %]
117
                [% IF ( edit ) %]
117
                [% IF ( edit ) %]
118
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
118
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
119
                    <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
120
                [% ELSE %]
119
                [% ELSE %]
121
                [% IF ( items ) %]
120
                [% IF ( items ) %]
122
                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
121
                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
123
                [% ELSE %]
122
                [% ELSE %]
124
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
123
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
125
                [% END %]
124
                [% END %]
126
                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
127
                [% END %]
125
                [% END %]
128
            [% ELSE %]
126
            [% ELSE %]
129
                [% IF ( items ) %]
127
                [% IF ( items ) %]
Lines 131-138 Link Here
131
                [% ELSE %]
129
                [% ELSE %]
132
                    <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
130
                    <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
133
                [% END %]
131
                [% END %]
134
                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" />
135
            [% END %]
132
            [% END %]
133
            <input id="origquantityrec" type="hidden" name="origquantityrec" value="[% origquantityrec %]" />
136
		</li>
134
		</li>
137
        <li><label for="rrp">Replacement cost: </label><input type="text" size="20" name="rrp" id="rrp" value="[% rrp %]" /></li>
135
        <li><label for="rrp">Replacement cost: </label><input type="text" size="20" name="rrp" id="rrp" value="[% rrp %]" /></li>
138
        <li><label for="ecost">Budgeted cost: </label><input type="text" size="20" name="ecost" id="ecost" value="[% ecost %]" /></li>
136
        <li><label for="ecost">Budgeted cost: </label><input type="text" size="20" name="ecost" id="ecost" value="[% ecost %]" /></li>
(-)a/t/db_dependent/lib/KohaTest.pm (-10 / +6 lines)
Lines 572-587 sub add_biblios { Link Here
572
        ok( $biblionumber, "the biblionumber is $biblionumber" );
572
        ok( $biblionumber, "the biblionumber is $biblionumber" );
573
        ok( $biblioitemnumber, "the biblioitemnumber is $biblioitemnumber" );
573
        ok( $biblioitemnumber, "the biblioitemnumber is $biblioitemnumber" );
574
        if ( $param{'add_items'} ) {
574
        if ( $param{'add_items'} ) {
575
            # my @iteminfo = AddItem( {}, $biblionumber );
575
            # my $item = AddItem( {}, $biblionumber );
576
            my @iteminfo = AddItemFromMarc( $marcrecord, $biblionumber );
576
            my $item = AddItemFromMarc( $marcrecord, $biblionumber );
577
            is( $iteminfo[0], $biblionumber,     "biblionumber is $biblionumber" );
577
            is( $item->{biblionumber},     "biblionumber is $biblionumber" );
578
            is( $iteminfo[1], $biblioitemnumber, "biblioitemnumber is $biblioitemnumber" );
578
            is( $item->{biblioitemnumber}, "biblioitemnumber is $biblioitemnumber" );
579
            ok( $iteminfo[2], "itemnumber is $iteminfo[2]" );
579
            ok( $item->{itemnumber}, "itemnumber is $item->{itemnumber}" );
580
        push @{ $self->{'items'} },
580
            push @{ $self->{'items'} }, $item;
581
          { biblionumber     => $iteminfo[0],
582
            biblioitemnumber => $iteminfo[1],
583
            itemnumber       => $iteminfo[2],
584
          };
585
        }
581
        }
586
        push @{$self->{'biblios'}}, $biblionumber;
582
        push @{$self->{'biblios'}}, $biblionumber;
587
    }
583
    }
(-)a/t/db_dependent/lib/KohaTest/Acquisition/GetParcel.pm (-12 / +5 lines)
Lines 43-60 sub one_parcel : Test( 17 ) { Link Here
43
    
43
    
44
    ok( $basketno, "my basket number is $basketno" );
44
    ok( $basketno, "my basket number is $basketno" );
45
    ok( $ordernumber,   "my order number is $ordernumber" );
45
    ok( $ordernumber,   "my order number is $ordernumber" );
46
    my $datereceived = ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
46
    ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
47
                                        $ordernumber,       # $ordernumber,
47
                     $ordernumber,       # $ordernumber,
48
                                        undef,         # $quantrec,
48
                     1,         # $quantrec,
49
                                        undef,         # $user,
49
                   );
50
                                        undef,         # $cost,
50
    pass( "the parcel was received" );
51
                                        $invoice,         # $invoiceno,
52
                                        undef,         # $freight,
53
                                        undef,         # $rrp,
54
                                        $self->{'bookfundid'},         # $bookfund,
55
                                        $today,         # $datereceived
56
                                   );
57
    is( $datereceived, $today, "the parcel was received on $datereceived" );
58
51
59
    my @parcel = GetParcel( $self->{'booksellerid'}, $invoice, $today );
52
    my @parcel = GetParcel( $self->{'booksellerid'}, $invoice, $today );
60
    is( scalar @parcel, 1, 'we found one (1) parcel.' )
53
    is( scalar @parcel, 1, 'we found one (1) parcel.' )
(-)a/t/db_dependent/lib/KohaTest/Acquisition/GetParcels.pm (-12 / +6 lines)
Lines 271-288 sub create_order { Link Here
271
271
272
    my ( $basketno, $ordernumber ) = $self->create_new_basket( %param );
272
    my ( $basketno, $ordernumber ) = $self->create_new_basket( %param );
273
273
274
    my $datereceived = ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
274
    ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
275
                                        $ordernumber,       # $ordernumber,
275
                     $ordernumber,       # $ordernumber,
276
                                        undef,         # $quantrec,
276
                     1,         # $quantrec,
277
                                        undef,         # $user,
277
                   );
278
                                        undef,         # $cost,
278
    # XXX Needs proper tests for partial receiving
279
                                        $param{'invoice'},         # $invoiceno,
279
    pass( "the parcel was received" );
280
                                        undef,         # $freight,
281
                                        undef,         # $rrp,
282
                                        $self->{'bookfundid'},         # $bookfund,
283
                                        $param{'date'},         # $datereceived
284
                                   );
285
    is( $datereceived, $param{'date'}, "the parcel was received on $datereceived" );
286
280
287
}
281
}
288
282
(-)a/t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm (-4 / +3 lines)
Lines 31-40 sub add_bib_to_modify : Test( startup => 3 ) { Link Here
31
    $self->{'bib_to_modify'} = $bibnum;
31
    $self->{'bib_to_modify'} = $bibnum;
32
32
33
    # add an item
33
    # add an item
34
    my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum);
34
    my $item = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum);
35
35
36
    cmp_ok($item_bibnum, '==', $bibnum, "new item is linked to correct biblionumber"); 
36
    cmp_ok($item->{biblionumber}, '==', $bibnum, "new item is linked to correct biblionumber"); 
37
    cmp_ok($item_bibitemnum, '==', $bibitemnum, "new item is linked to correct biblioitemnumber"); 
37
    cmp_ok($item->{biblioitemnumber}, '==', $bibitemnum, "new item is linked to correct biblioitemnumber"); 
38
38
39
    $self->reindex_marc(); 
39
    $self->reindex_marc(); 
40
40
41
- 

Return to bug 3966