From 76a50616cdf77b259268e9e90bb240a25345702f Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 15 Apr 2009 16:07:47 +0000 Subject: [PATCH] moved po create into order.pm. some other refactoring of asset creation git-svn-id: svn://svn.open-ils.org/ILS/trunk@12880 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../perlmods/OpenILS/Application/Acq/Financials.pm | 86 ------------------- .../src/perlmods/OpenILS/Application/Acq/Order.pm | 99 ++++++++++++++++++---- 2 files changed, 84 insertions(+), 101 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm index 1a0f99fc78..ba435151d1 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm @@ -526,92 +526,6 @@ sub currency_conversion_impl { } -# ---------------------------------------------------------------------------- -# Purchase Orders -# ---------------------------------------------------------------------------- - -__PACKAGE__->register_method( - method => 'create_purchase_order', - api_name => 'open-ils.acq.purchase_order.create', - signature => { - desc => 'Creates a new purchase order', - params => [ - {desc => 'Authentication token', type => 'string'}, - {desc => 'purchase_order to create', type => 'object'} - ], - return => {desc => 'The purchase order id, Event on failure'} - } -); - -sub create_purchase_order { - my($self, $conn, $auth, $po, $args) = @_; - $args ||= {}; - - my $e = new_editor(xact=>1, authtoken=>$auth); - return $e->die_event unless $e->checkauth; - return $e->die_event unless $e->allowed('CREATE_PURCHASE_ORDER', $po->ordering_agency); - - # create the PO - $po->ordering_agency($e->requestor->ws_ou); - my $evt = create_purchase_order_impl($e, $po); - return $evt if $evt; - - my $progress = 0; - my $total_debits = 0; - my $total_copies = 0; - - my $respond = sub { - $conn->respond({ - @_, - progress => ++$progress, - total_debits => $total_debits, - total_copies => $total_copies, - }); - }; - - if($$args{lineitems}) { - - for my $li_id (@{$$args{lineitems}}) { - - my $li = $e->retrieve_acq_lineitem([ - $li_id, - {flesh => 1, flesh_fields => {jub => ['attributes']}} - ]) or return $e->die_event; - - # point the lineitems at the new PO - $li->provider($po->provider); - $li->purchase_order($po->id); - $li->editor($e->requestor->id); - $li->edit_time('now'); - $e->update_acq_lineitem($li) or return $e->die_event; - $respond->(action => 'update_lineitem'); - - # create the bibs/volumes/copies in the Evergreen database - if($$args{create_assets}) { - # args = {circ_modifier => code} - my ($count, $evt) = create_lineitem_assets_impl($e, $li_id, $args); - return $evt if $evt; - $total_copies+= $count; - $respond->(action => 'create_assets'); - } - - # create the debits - if($$args{create_debits}) { - # args = {encumberance => true} - my ($total, $evt) = create_li_debit_impl($e, $li, $args); - return $evt if $evt; - $total_debits += $total; - $respond->(action => 'create_debit'); - } - } - } - - $e->commit; - $respond->(complete => 1, purchase_order => $po->id); - return undef; -} - - __PACKAGE__->register_method( method => 'create_lineitem_assets', api_name => 'open-ils.acq.lineitem.assets.create', diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm index c6f1880a2a..ed7524833b 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm @@ -125,6 +125,7 @@ sub push_ingest_queue { sub process_ingest_records { my $self = shift; + return unless @{$self->{ingest_queue}}; for my $req (@{$self->{ingest_queue}}) { @@ -221,6 +222,22 @@ sub delete_lineitem { return $mgr->editor->delete_acq_lineitem($li); } +# begins and commit transactions as it goes +sub create_lineitem_list_assets { + my($mgr, $li_ids) = @_; + # create the bibs/volumes/copies and ingest the records + for my $li_id (@$li_ids) { + $mgr->editor->xact_begin; + my $data = create_lineitem_assets($mgr, $li_id) or return undef; + $mgr->editor->xact_commit; + $mgr->push_ingest_queue($data->{li}->eg_bib_id) if $data->{new_bib}; + $mgr->respond; + } + $mgr->process_ingest_records; + return 1; +} + + # ---------------------------------------------------------------------------- # Lineitem Detail # ---------------------------------------------------------------------------- @@ -864,15 +881,7 @@ sub upload_records { $cache->delete_cache('vandelay_import_spool_' . $key); if($create_assets) { - # create the bibs/volumes/copies and ingest the records - for my $li_id (@li_list) { - $e->xact_begin; - my $data = create_lineitem_assets($mgr, $li_id) or return $e->die_event; - $e->xact_commit; - $mgr->push_ingest_queue($data->{li}->eg_bib_id) if $data->{new_bib}; - $mgr->respond; - } - $mgr->process_ingest_records; + create_lineitem_list_assets($mgr, \@li_list) or return $e->die_event; } return $mgr->respond_complete; @@ -1078,15 +1087,75 @@ sub create_po_assets { $mgr->total(scalar(@$li_ids) + $lid_total); - for my $li_id (@$li_ids) { - return $e->die_event unless create_lineitem_assets($mgr, $li_id); - $mgr->respond; + create_lineitem_list_assets($mgr, $li_ids) or return $e->die_event; + + $e->xact_begin; + update_purchase_order($mgr, $po) or return $e->die_event; + $e->commit; + + return $mgr->respond_complete; +} + + + +__PACKAGE__->register_method( + method => 'create_purchase_order_api', + api_name => 'open-ils.acq.purchase_order.create', + signature => { + desc => 'Creates a new purchase order', + params => [ + {desc => 'Authentication token', type => 'string'}, + {desc => 'purchase_order to create', type => 'object'} + ], + return => {desc => 'The purchase order id, Event on failure'} } +); - return $e->die_event unless update_purchase_order($mgr, $po); +sub create_purchase_order_api { + my($self, $conn, $auth, $po, $args) = @_; + $args ||= {}; - $e->commit; - $mgr->process_ingest_records; + my $e = new_editor(xact=>1, authtoken=>$auth); + return $e->die_event unless $e->checkauth; + return $e->die_event unless $e->allowed('CREATE_PURCHASE_ORDER', $po->ordering_agency); + + my $mgr = OpenILS::Application::Acq::BatchManager->new( + editor => $e, + conn => $conn, + throttle => 5 + ); + + # create the PO + my %pargs = (ordering_agency => $e->requestor->ws_ou); + $pargs{provider} = $po->provider if $po->provider; + $po = create_purchase_order($mgr, %pargs) or return $e->die_event; + + my $li_ids = $$args{lineitems}; + + if($li_ids) { + + for my $li_id (@$li_ids) { + + my $li = $e->retrieve_acq_lineitem([ + $li_id, + {flesh => 1, flesh_fields => {jub => ['attributes']}} + ]) or return $e->die_event; + + $li->provider($po->provider); + $li->purchase_order($po->id); + update_lineitem($mgr, $li) or return $e->die_event; + $mgr->respond; + + create_lineitem_debits($mgr, $li) or return $e->die_event; + } + } + + # commit before starting the asset creation + $e->xact_commit; + + if($li_ids and $$args{create_assets}) { + create_lineitem_list_assets($mgr, $li_ids) or return $e->die_event; + } return $mgr->respond_complete; } -- 2.11.0