my $activate_po = $args->{activate_po};
my $vandelay = $args->{vandelay};
my $ordering_agency = $args->{ordering_agency} || $e->requestor->ws_ou;
+ my $fiscal_year = $args->{fiscal_year} || DateTime->now->year;
my $po;
my $evt;
$mgr->respond;
$li->provider($provider); # flesh it, we'll need it later
- import_lineitem_details($mgr, $ordering_agency, $li) or return $mgr->editor->die_event;
+ import_lineitem_details($mgr, $ordering_agency, $li, $fiscal_year)
+ or return $mgr->editor->die_event;
$mgr->respond;
push(@li_list, $li->id);
$mgr->respond;
}
+ if ($po) {
+ $evt = extract_po_name($mgr, $po, \@li_list);
+ return $evt if $evt;
+ }
+
$e->commit;
unlink($filename);
$cache->delete_cache('vandelay_import_spool_' . $key);
return $mgr->respond_complete;
}
+# see if the PO name is encoded in the newly imported records
+sub extract_po_name {
+ my ($mgr, $po, $li_ids) = @_;
+ my $e = $mgr->editor;
+
+ # find the first instance of the name
+ my $attr = $e->search_acq_lineitem_attr([
+ { lineitem => $li_ids,
+ attr_type => 'lineitem_provider_attr_definition',
+ attr_name => 'purchase_order'
+ }, {
+ order_by => {aqlia => 'id'},
+ limit => 1
+ }
+ ])->[0] or return undef;
+
+ my $name = $attr->attr_value;
+
+ # see if another PO already has the name, provider, and org
+ my $existing = $e->search_acq_purchase_order(
+ { name => $name,
+ ordering_agency => $po->ordering_agency,
+ provider => $po->provider
+ },
+ {idlist => 1}
+ )->[0];
+
+ # if a PO exists with the same name (and provider/org)
+ # tack the po ID into the name to differentiate
+ $name = sprintf("$name (%s)", $po->id) if $existing;
+
+ $logger->info("Extracted PO name: $name");
+
+ $po->name($name);
+ update_purchase_order($mgr, $po) or return $e->die_event;
+ return undef;
+}
+
sub import_lineitem_details {
- my($mgr, $ordering_agency, $li) = @_;
+ my($mgr, $ordering_agency, $li, $fiscal_year) = @_;
my $holdings = $mgr->editor->json_query({from => ['acq.extract_provider_holding_data', $li->id]});
return 1 unless @$holdings;
while(1) {
# create a lineitem detail for each copy in the data
- my $compiled = extract_lineitem_detail_data($mgr, $org_path, $holdings, $idx);
+ my $compiled = extract_lineitem_detail_data($mgr, $org_path, $holdings, $idx, $fiscal_year);
last unless defined $compiled;
return 0 unless $compiled;
# return hash on success, 0 on error, undef on no more holdings
sub extract_lineitem_detail_data {
- my($mgr, $org_path, $holdings, $index) = @_;
+ my($mgr, $org_path, $holdings, $index, $fiscal_year) = @_;
my @data_list = grep { $_->{holding} eq $index } @$holdings;
return undef unless @data_list;
# search up the org tree for the most appropriate fund
for my $org (@$org_path) {
$fund = $mgr->editor->search_acq_fund(
- {org => $org, code => $code, year => DateTime->now->year}, {idlist => 1})->[0];
+ {org => $org, code => $code, year => $fiscal_year}, {idlist => 1})->[0];
last if $fund;
}
}