my %found_sdist_ids;
my %found_sstr_ids;
+ my %siss_to_potentially_delete;
for my $item (@$items) {
my $sstr_id = ref $item->stream ? $item->stream->id : $item->stream;
if (!exists($found_sstr_ids{$sstr_id})) {
$item->edit_date('now');
if( $item->isdeleted ) {
+ my $siss_id = ref $item->issuance ? $item->issuance->id : $item->issuance;
+ $siss_to_potentially_delete{$siss_id}++;
$evt = _delete_sitem( $editor, $override, $item);
} elsif( $item->isnew ) {
# TODO: reconsider this
$editor->rollback;
return $evt;
}
+ if( %siss_to_potentially_delete ) {
+ foreach my $id (keys %siss_to_potentially_delete) {
+ my $issuance = $editor->retrieve_serial_issuance([
+ $id, {
+ "flesh" => 1, "flesh_fields" => {
+ "siss" => ["items"],
+ }
+ }
+ ]);
+ unless ($issuance) {
+ $logger->warn("fleshed item-alter failed to retrieve issuance $id to potenitally delete");
+ $editor->rollback;
+ return $editor->die_event;
+ }
+ unless (@{ $issuance->items }) {
+ $logger->info("fleshed item-alter deleting issuance $id as it has no items left");
+ $evt = _delete_siss( $editor, $override, $issuance);
+ if( $evt ) {
+ $logger->info("fleshed item-alter failed with event: ".OpenSRF::Utils::JSON->perl2JSON($evt));
+ $editor->rollback;
+ return $evt;
+ }
+ }
+ }
+ }
$logger->debug("item-alter: done updating item batch");
$editor->commit;
$logger->info("fleshed item-alter successfully updated ".scalar(@$items)." items");