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

(-)a/C4/Acquisition.pm (-35 / +16 lines)
Lines 1118-1133 sub GetCancelledOrders { Link Here
1118
1118
1119
=head3 ModReceiveOrder
1119
=head3 ModReceiveOrder
1120
1120
1121
  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $user,
1121
  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $receiveditems);
1122
    $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
1123
    $freight, $bookfund, $rrp);
1124
1122
1125
Updates an order, to reflect the fact that it was received, at least
1123
Updates an order, to reflect the fact that it was received, at least
1126
in part. All arguments not mentioned below update the fields with the
1124
in part.
1127
same name in the aqorders table of the Koha database.
1128
1125
1129
If a partial order is received, splits the order into two.  The received
1126
If a partial order is received, splits the order into two.  The received
1130
portion must have a booksellerinvoicenumber.
1127
portion must have a booksellerinvoicenumber. If $receiveditems are supplied,
1128
the rest of the items will be moved to the new order.
1131
1129
1132
Updates the order with bibilionumber C<$biblionumber> and ordernumber
1130
Updates the order with bibilionumber C<$biblionumber> and ordernumber
1133
C<$ordernumber>.
1131
C<$ordernumber>.
Lines 1136-1148 C<$ordernumber>. Link Here
1136
1134
1137
1135
1138
sub ModReceiveOrder {
1136
sub ModReceiveOrder {
1139
    my (
1137
    my ( $biblionumber, $ordernumber,  $quantrec, $receiveditems ) = @_;
1140
        $biblionumber,    $ordernumber,  $quantrec, $user, $cost,
1141
        $invoiceno, $freight, $rrp, $budget_id, $datereceived
1142
    )
1143
    = @_;
1144
    my $dbh = C4::Context->dbh;
1138
    my $dbh = C4::Context->dbh;
1145
    $datereceived = C4::Dates->output('iso') unless $datereceived;
1139
1146
    my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
1140
    my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
1147
    if ($suggestionid) {
1141
    if ($suggestionid) {
1148
        ModSuggestion( {suggestionid=>$suggestionid,
1142
        ModSuggestion( {suggestionid=>$suggestionid,
Lines 1160-1195 sub ModReceiveOrder { Link Here
1160
    $sth->finish();
1154
    $sth->finish();
1161
1155
1162
    if ( $order->{quantity} > $quantrec ) {
1156
    if ( $order->{quantity} > $quantrec ) {
1163
        $sth=$dbh->prepare("
1164
            UPDATE aqorders
1165
            SET quantityreceived=?
1166
                , datereceived=?
1167
                , booksellerinvoicenumber=?
1168
                , unitprice=?
1169
                , freight=?
1170
                , rrp=?
1171
                , quantity=?
1172
            WHERE biblionumber=? AND ordernumber=?");
1173
1174
        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber);
1175
        $sth->finish;
1176
1177
        # create a new order for the remaining items, and set its bookfund.
1157
        # create a new order for the remaining items, and set its bookfund.
1178
        foreach my $orderkey ( "linenumber", "allocation" ) {
1158
        foreach my $orderkey ( "linenumber", "allocation" ) {
1179
            delete($order->{'$orderkey'});
1159
            delete($order->{'$orderkey'});
1180
        }
1160
        }
1181
        $order->{'quantity'} -= $quantrec;
1161
        $order->{'quantity'} -= $quantrec;
1182
        $order->{'quantityreceived'} = 0;
1162
        $order->{'quantityreceived'} = 0;
1183
        my $newOrder = NewOrder($order);
1163
        my (undef, $newOrder) = NewOrder($order);
1184
} else {
1164
1185
        $sth=$dbh->prepare("update aqorders
1165
        if ($receiveditems && @$receiveditems) {
1186
                            set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
1166
            my $sql = "
1187
                                unitprice=?,freight=?,rrp=?
1167
                UPDATE aqorders_items
1188
                            where biblionumber=? and ordernumber=?");
1168
                SET ordernumber = ?
1189
        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber);
1169
                WHERE ordernumber = ?
1190
        $sth->finish;
1170
                AND itemnumber NOT IN (".join(",", map "?", @$receiveditems).")";
1171
            $dbh->do($sql, undef, $newOrder, $ordernumber, @$receiveditems);
1172
        }
1191
    }
1173
    }
1192
    return $datereceived;
1193
}
1174
}
1194
#------------------------------------------------------------#
1175
#------------------------------------------------------------#
1195
1176
(-)a/C4/Biblio.pm (-2 lines)
Lines 2600-2607 sub TransformMarcToKohaOneField { Link Here
2600
}
2600
}
2601
2601
2602
2602
2603
#"
2604
2605
#
2603
#
2606
# true ModZebra commented until indexdata fixes zebraDB crashes (it seems they occur on multiple updates
2604
# true ModZebra commented until indexdata fixes zebraDB crashes (it seems they occur on multiple updates
2607
# at the same time
2605
# 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 195-205 sub CartToShelf { Link Here
195
195
196
=head2 AddItemFromMarc
196
=head2 AddItemFromMarc
197
197
198
  my ($biblionumber, $biblioitemnumber, $itemnumber) 
198
  my $item = AddItemFromMarc($source_item_marc, $biblionumber);
199
      = AddItemFromMarc($source_item_marc, $biblionumber);
200
199
201
Given a MARC::Record object containing an embedded item
200
Given a MARC::Record object containing an embedded item
202
record and a biblionumber, create a new item record.
201
record and a biblionumber, create a new item record or update
202
existing one.
203
203
204
=cut
204
=cut
205
205
Lines 215-227 sub AddItemFromMarc { Link Here
215
	$localitemmarc->append_fields($source_item_marc->field($itemtag));
215
	$localitemmarc->append_fields($source_item_marc->field($itemtag));
216
    my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode ,'items');
216
    my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode ,'items');
217
    my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
217
    my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
218
    if (my $itemnumber = $item->{itemnumber}) {
219
        return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
220
    }
218
    return AddItem($item, $biblionumber, $dbh, $frameworkcode, $unlinked_item_subfields);
221
    return AddItem($item, $biblionumber, $dbh, $frameworkcode, $unlinked_item_subfields);
219
}
222
}
220
223
221
=head2 AddItem
224
=head2 AddItem
222
225
223
  my ($biblionumber, $biblioitemnumber, $itemnumber) 
226
  my $item = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
224
      = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
225
227
226
Given a hash containing item column names as keys,
228
Given a hash containing item column names as keys,
227
create a new Koha item record.
229
create a new Koha item record.
Lines 273-279 sub AddItem { Link Here
273
   
275
   
274
    logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
276
    logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
275
    
277
    
276
    return ($item->{biblionumber}, $item->{biblioitemnumber}, $itemnumber);
278
    return $item;
277
}
279
}
278
280
279
=head2 AddItemBatchFromMarc
281
=head2 AddItemBatchFromMarc
Lines 452-457 sub ModItemFromMarc { Link Here
452
        $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
454
        $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
453
    }
455
    }
454
    my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
456
    my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
457
    $itemnumber ||= $item->{itemnumber};
455
458
456
    ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields); 
459
    ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields); 
457
    return $item;
460
    return $item;
Lines 459-465 sub ModItemFromMarc { Link Here
459
462
460
=head2 ModItem
463
=head2 ModItem
461
464
462
  ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
465
  my $item = ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
463
466
464
Change one or more columns in an item record and update
467
Change one or more columns in an item record and update
465
the MARC representation of the item.
468
the MARC representation of the item.
Lines 522-527 sub ModItem { Link Here
522
    ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef );
525
    ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef );
523
526
524
    logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog");
527
    logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog");
528
529
    return $item;
525
}
530
}
526
531
527
=head2 ModItemTransfer
532
=head2 ModItemTransfer
Lines 2535-2541 sub _find_value { Link Here
2535
2540
2536
=head2 PrepareItemrecordDisplay
2541
=head2 PrepareItemrecordDisplay
2537
2542
2538
  PrepareItemrecordDisplay($itemrecord,$bibnum,$itemumber,$frameworkcode);
2543
  PrepareItemrecordDisplay(bibnum,$itemumber,$itemrecord,$$frameworkcode);
2539
2544
2540
Returns a hash with all the fields for Display a given item data in a template
2545
Returns a hash with all the fields for Display a given item data in a template
2541
2546
Lines 2714-2727 sub PrepareItemrecordDisplay { Link Here
2714
                            $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
2719
                            $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
2715
                            my $index_subfield = int(rand(1000000));
2720
                            my $index_subfield = int(rand(1000000));
2716
                            $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
2721
                            $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
2717
                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255"
2722
                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue"
2718
                                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
2723
                                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
2719
                                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
2724
                                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
2720
                                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
2725
                                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
2721
                                $javascript];
2726
                                $javascript];
2722
                        } else {
2727
                        } else {
2723
                            warn "Plugin Failed: $plugin";
2728
                            warn "Plugin Failed: $plugin";
2724
                            $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
2729
                            $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
2725
                        }
2730
                        }
2726
                }
2731
                }
2727
                elsif ( $tag eq '' ) {       # it's an hidden field
2732
                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 259-266 if ($op eq ""){ Link Here
259
            my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
259
            my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
260
            my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
260
            my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
261
            for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) {
261
            for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) {
262
                my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
262
                my $item = AddItemFromMarc( $record, $biblionumber );
263
                NewOrderItem( $itemnumber, $ordernumber );
263
                NewOrderItem( $item->{itemnumber}, $ordernumber );
264
            }
264
            }
265
        } else {
265
        } else {
266
            SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
266
            SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
(-)a/acqui/finishreceive.pl (-41 / +64 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 46-102 my $quantityrec=$input->param('quantityrec'); Link Here
46
my $quantity=$input->param('quantity');
46
my $quantity=$input->param('quantity');
47
my $unitprice=$input->param('cost');
47
my $unitprice=$input->param('cost');
48
my $invoiceno=$input->param('invoice');
48
my $invoiceno=$input->param('invoice');
49
my $datereceived=$input->param('datereceived');
49
my $datereceived=$input->param('datereceived') || C4::Dates->output('iso');
50
my $replacement=$input->param('rrp');
50
my $replacement=$input->param('rrp');
51
my $gst=$input->param('gst');
51
my $gst=$input->param('gst');
52
my $freight=$input->param('freight');
52
my $freight=$input->param('freight');
53
my $booksellerid = $input->param('booksellerid');
53
my $booksellerid = $input->param('booksellerid');
54
my $cnt=0;
54
my $cnt=0;
55
my $error_url_str;
55
my $error_url_str = '';
56
my $ecost = $input->param('ecost');
56
my $ecost = $input->param('ecost');
57
my $note = $input->param("note");
57
my $note = $input->param("note");
58
58
59
my $order = GetOrder($ordernumber);
60
$order->{booksellerinvoicenumber} = $invoiceno;
61
$order->{datereceived} = $datereceived;
62
$order->{freight} = $freight;
63
$order->{quantity} = $quantity;
64
$order->{quantityreceived} = $quantityrec;
65
$order->{notes} = $note;
66
$order->{rrp} = $replacement;
67
$order->{ecost} = $ecost;
68
$order->{unitprice} = $unitprice;
69
ModOrder($order);
70
59
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
71
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
60
if ($quantityrec > $origquantityrec ) {
72
61
    # now, add items if applicable
73
# now, add or update items if applicable
62
    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
74
my @tags         = $input->param('tag');
63
75
my @subfields    = $input->param('subfield');
64
        my @tags         = $input->param('tag');
76
my @field_values = $input->param('field_value');
65
        my @subfields    = $input->param('subfield');
77
my @serials      = $input->param('serial');
66
        my @field_values = $input->param('field_value');
78
my @itemid       = $input->param('itemid');
67
        my @serials      = $input->param('serial');
79
my @ind_tag      = $input->param('ind_tag');
68
        my @itemid       = $input->param('itemid');
80
my @indicator    = $input->param('indicator');
69
        my @ind_tag      = $input->param('ind_tag');
81
#Rebuilding ALL the data for items into a hash
70
        my @indicator    = $input->param('indicator');
82
# parting them on $itemid.
71
        #Rebuilding ALL the data for items into a hash
83
my %itemhash;
72
        # parting them on $itemid.
84
my $countdistinct;
73
        my %itemhash;
85
my $range=scalar(@itemid);
74
        my $countdistinct;
86
for (my $i=0; $i<$range; $i++){
75
        my $range=scalar(@itemid);
87
    unless ($itemhash{$itemid[$i]}){
76
        for (my $i=0; $i<$range; $i++){
88
        $countdistinct++;
77
            unless ($itemhash{$itemid[$i]}){
89
    }
78
            $countdistinct++;
90
    push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
79
            }
91
    push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
80
            push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
92
    push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
81
            push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
93
    push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
82
            push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
94
    push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
83
            push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
95
}
84
            push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
96
my $error;
85
        }
97
my %itemnumbers = map { $_ => 1 } GetItemnumbersFromOrder($ordernumber);
86
        foreach my $item (keys %itemhash){
98
my @received;
87
            my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'},
99
foreach my $id (keys %itemhash){
88
                                          $itemhash{$item}->{'subfields'},
100
    my $xml = TransformHtmlToXml( $itemhash{$id}->{'tags'},
89
                                          $itemhash{$item}->{'field_values'},
101
                                  $itemhash{$id}->{'subfields'},
90
                                          $itemhash{$item}->{'ind_tag'},
102
                                  $itemhash{$id}->{'field_values'},
91
                                          $itemhash{$item}->{'indicator'},'ITEM');
103
                                  $itemhash{$id}->{'ind_tag'},
92
            my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
104
                                  $itemhash{$id}->{'indicator'},'ITEM');
93
            my (undef,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber);
105
    my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
94
            NewOrderItem($itemnumber, $ordernumber);
106
    my $item = AddItemFromMarc($record,$biblionumber);
95
        }
107
    my $itemnumber = $item ? $item->{itemnumber} : undef;
108
    if ($itemnumber) {
109
        push @received, $itemnumber;
110
        NewOrderItem($itemnumber, $ordernumber) unless $itemnumbers{$itemnumber};
111
    } else {
112
        $error++;
96
    }
113
    }
97
    
114
}
115
116
if ($error) {
117
    $error_url_str = "&error=Datbase+write+error";
118
}
119
else {
98
    # save the quantity received.
120
    # save the quantity received.
99
    $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived);
121
    ModReceiveOrder($biblionumber,$ordernumber, $quantityrec, \@received);
100
}
122
}
101
123
102
update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
124
update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
Lines 116-118 sub update_item { Link Here
116
        replacementpricedate => $datereceived,
138
        replacementpricedate => $datereceived,
117
    }, $biblionumber, $itemnumber );
139
    }, $biblionumber, $itemnumber );
118
}
140
}
141
(-)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 (-26 / +25 lines)
Lines 49-69 Link Here
49
    [% END %]
49
    [% END %]
50
50
51
    [% IF ( items ) %]
51
    [% IF ( items ) %]
52
    <fieldset class="rows">
53
        <legend>Item</legend>
54
        [% IF ( NoACQframework ) %]
52
        [% IF ( NoACQframework ) %]
55
            <p class="required">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</p>
53
            <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 %]
54
        [% END %]
57
55
        [% itemid = 1 %]
58
        [% FOREACH item IN items %]
56
        [% FOREACH item IN items %]
59
        <div id="outeritemblock">
57
    <fieldset class="rows">
60
        <div id="itemblock">
58
        <legend>Item</legend>
61
            <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];">
59
        <div id="itemblock[% itemid %]">
60
            <a class="addItem" onclick="cloneItemBlock('itemblock[% itemid %]')">+ Add similar</a>&nbsp;&nbsp;
61
            <a style=class="delItem" onclick="deleteItemBlock('itemblock[% itemid %]')">- Remove</a>
62
            <ol>
63
            [% FOREACH iteminformatio IN item.iteminformation %]
64
                <li style="[% iteminformatio.hidden %];">
62
                <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
65
                <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
63
                                
66
                                
64
                    <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
67
                    <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
65
                    [% iteminformatio.marc_value %]
68
                    [% iteminformatio.marc_value %]
66
                    <input type="hidden" name="itemid" value="1" />
69
                    <input type="hidden" name="itemid" value="[% itemid %]" />
67
                    <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" />
70
                    <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" />
68
                    <input type="hidden" name="tag" value="[% iteminformatio.tag %]" />
71
                    <input type="hidden" name="tag" value="[% iteminformatio.tag %]" />
69
                    <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" />
72
                    <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" />
Lines 73-95 Link Here
73
                    [% END %]
76
                    [% END %]
74
            
77
            
75
                </div></li>
78
                </div></li>
76
            [% END %]
79
            [% END %]<!-- /iteminformation -->
77
            </ol>
80
            </ol>
78
            <a class="addItem" onclick="cloneItemBlock('itemblock[% item.itemBlockIndex %]')">Add</a>
81
79
            <a class="delItem" style="display:none;" onclick="deleteItemBlock('itemblock[% item.itemBlockIndex %]')">Delete</a>
82
            <input type="hidden" name="moditem" value="" /> 
80
        </div><!-- /iteminformation -->
83
            <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
84
            <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
85
            <input type="hidden" name="serial" value="[% item.serialid %]" />
86
            <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
87
            <input type="hidden" name="itemid" value="[% itemid %]" />
88
            <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
81
        </div>
89
        </div>
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 -->
91
    </fieldset>
90
    </fieldset>
92
    [% END %] <!-- items -->
91
        [% itemid = itemid + 1 %]
92
        [% END %] <!-- /items -->
93
    [% END %] <!-- if items -->
93
    <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
94
    <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
94
    <input type="hidden" name="ordernumber" value="[% ordernumber %]" />
95
    <input type="hidden" name="ordernumber" value="[% ordernumber %]" />
95
    <input type="hidden" name="biblioitemnumber" value="[% biblioitemnumber %]" />
96
    <input type="hidden" name="biblioitemnumber" value="[% biblioitemnumber %]" />
Lines 116-129 Link Here
116
            [% IF ( quantityreceived ) %]
117
            [% IF ( quantityreceived ) %]
117
                [% IF ( edit ) %]
118
                [% IF ( edit ) %]
118
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
119
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
119
                    <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
120
                [% ELSE %]
120
                [% ELSE %]
121
                [% IF ( items ) %]
121
                [% IF ( items ) %]
122
                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
122
                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
123
                [% ELSE %]
123
                [% ELSE %]
124
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
124
                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
125
                [% END %]
125
                [% END %]
126
                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
127
                [% END %]
126
                [% END %]
128
            [% ELSE %]
127
            [% ELSE %]
129
                [% IF ( items ) %]
128
                [% IF ( items ) %]
Lines 131-138 Link Here
131
                [% ELSE %]
130
                [% ELSE %]
132
                    <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
131
                    <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
133
                [% END %]
132
                [% END %]
134
                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" />
135
            [% END %]
133
            [% END %]
134
            <input id="origquantityrec" type="hidden" name="origquantityrec" value="[% origquantityrec %]" />
136
		</li>
135
		</li>
137
        <li><label for="rrp">Replacement cost: </label><input type="text" size="20" name="rrp" id="rrp" value="[% rrp %]" /></li>
136
        <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>
137
        <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