Fiscal year selector in ACQ order record upload
authorBill Erickson <berick@esilibrary.com>
Fri, 10 Aug 2012 18:06:36 +0000 (14:06 -0400)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Tue, 14 Aug 2012 20:32:27 +0000 (16:32 -0400)
* Support a 'fiscal_year' parameter to ACQ order record upload API.
* Adds a new "Fiscal Year" selector to the upload form to facilitate
  uploading orders to different fiscal years.

This partially resolves LP 1031927 by allowing manual selection of the
correct fiscal year.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>

Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
Open-ILS/src/templates/acq/picklist/upload.tt2
Open-ILS/web/js/ui/default/acq/picklist/upload.js

index aa8a45d..8bbb550 100644 (file)
@@ -1331,6 +1331,7 @@ sub upload_records {
     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;
 
@@ -1410,7 +1411,8 @@ sub upload_records {
         $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);
@@ -1478,7 +1480,7 @@ sub extract_po_name {
 }
 
 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;
@@ -1491,7 +1493,7 @@ sub import_lineitem_details {
     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;
 
@@ -1527,7 +1529,7 @@ sub import_lineitem_details {
 
 # 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;
@@ -1553,7 +1555,7 @@ sub extract_lineitem_detail_data {
             # 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;
             }
         }
index 6d04d7f..d88bd23 100644 (file)
                     <select jsId='acqPlUploadPlSelector' dojoType='dijit.form.ComboBox'></select>
                 </td>
             </tr>
+            <tr id='acq-pl-upload-year'>
+                <td>[% l('Fiscal Year') %]</td>
+                <td>
+                    <select dojoType="dijit.form.FilteringSelect"
+                        jsId="acqUploadYearSelector"
+                        labelAttr="year"
+                        searchAttr="year">
+                    </select>
+                </td>
+            </tr>
 
             <tr><td colspan='2'><hr/></td></tr>
             [% PROCESS vlagent_form vl_show_copy_option=1 %]
index 1a6653a..1361685 100644 (file)
@@ -22,6 +22,8 @@ var usingNewPl = false;
 function init() {
     dojo.byId('acq-pl-upload-ses').value = openils.User.authtoken;
 
+    loadYearSelector();
+
     new openils.widget.AutoFieldWidget({
         fmClass : 'acqpo',
         fmField : 'provider',
@@ -104,7 +106,8 @@ function acqHandlePostUpload(key, plId) {
         ordering_agency : orderAgencyWidget.attr('value'),
         create_po : acqPlUploadCreatePo.attr('value'),
         activate_po : acqPlUploadActivatePo.attr('value'),
-        vandelay : vlAgent.values()
+        vandelay : vlAgent.values(),
+        fiscal_year : acqUploadYearSelector.attr('value')
     };
 
     fieldmapper.standardRequest(
@@ -161,6 +164,31 @@ function acqHandlePostUpload(key, plId) {
     );
 }
 
+function loadYearSelector() {
+
+    fieldmapper.standardRequest(
+        ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
+        {   async : true,
+            params : [openils.User.authtoken, {}, {limit_perm : 'VIEW_FUND'}],
+            oncomplete : function(r) {
+
+                var yearList = openils.Util.readResponse(r);
+                if(!yearList) return;
+                yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
+
+                var yearStore = {identifier:'year', name:'year', items:yearList};
+                yearStore.items = yearStore.items.sort().reverse();
+                acqUploadYearSelector.store = new dojo.data.ItemFileReadStore({data:yearStore});
+
+                // default to this year
+                // TODO: current fiscal year
+                acqUploadYearSelector.setValue(new Date().getFullYear().toString());
+            }
+        }
+    );
+}
+
+
 
 openils.Util.addOnLoad(init);