distribution formula config UI repairs/enhancements
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 31 Aug 2010 19:49:03 +0000 (19:49 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 31 Aug 2010 19:49:03 +0000 (19:49 +0000)
added distribution formula cloning
added ability to change distrib formula name from formula detail page
plugged some i18n holes
using local copy of dimple grippy icons in distrib formula UI
added local copy of dimple.png w/ new license file indicating image origin/license.

git-svn-id: svn://svn.open-ils.org/ILS/trunk@17413 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm
Open-ILS/web/images/dimple.png [new file with mode: 0644]
Open-ILS/web/images/licenses.txt [new file with mode: 0644]
Open-ILS/web/js/dojo/openils/conify/nls/conify.js
Open-ILS/web/js/ui/default/conify/global/acq/distribution_formula.js
Open-ILS/web/templates/default/conify/global/acq/distribution_formula.tt2

index 044e5d1..a99ac82 100644 (file)
@@ -3124,4 +3124,48 @@ sub fetch_and_check_li {
 }
 
 
+__PACKAGE__->register_method(
+       method => "clone_distrib_form",
+       api_name => "open-ils.acq.distribution_formula.clone",
+    stream => 1,
+       signature => {
+        desc => q/Clone a distribution formula/,
+        params => [
+            {desc => "Authentication token", type => "string"},
+            {desc => "Original formula ID", type => 'integer'},
+            {desc => "Name of new formula", type => 'string'},
+        ],
+        return => {desc => "ID of newly created formula"}
+    }
+);
+
+sub clone_distrib_form {
+    my($self, $client, $auth, $form_id, $new_name) = @_;
+
+    my $e = new_editor("xact"=> 1, "authtoken" => $auth);
+    return $e->die_event unless $e->checkauth;
+
+    my $old_form = $e->retrieve_acq_distribution_formula($form_id) or return $e->die_event;
+    return $e->die_event unless $e->allowed('ADMIN_ACQ_DISTRIB_FORMULA', $old_form->owner);
+
+    my $new_form = Fieldmapper::acq::distribution_formula->new;
+
+    $new_form->owner($old_form->owner);
+    $new_form->name($new_name);
+    $e->create_acq_distribution_formula($new_form) or return $e->die_event;
+
+    my $entries = $e->search_acq_distribution_formula_entry({formula => $form_id});
+    for my $entry (@$entries) {
+       my $new_entry = Fieldmapper::acq::distribution_formula_entry->new;
+       $new_entry->$_($entry->$_()) for $entry->real_fields;
+       $new_entry->formula($new_form->id);
+       $new_entry->clear_id;
+       $e->create_acq_distribution_formula_entry($new_entry) or return $e->die_event;
+    }
+
+    $e->commit;
+    return $new_form->id;
+}
+
 1;
+
diff --git a/Open-ILS/web/images/dimple.png b/Open-ILS/web/images/dimple.png
new file mode 100644 (file)
index 0000000..4d0b91b
Binary files /dev/null and b/Open-ILS/web/images/dimple.png differ
diff --git a/Open-ILS/web/images/licenses.txt b/Open-ILS/web/images/licenses.txt
new file mode 100644 (file)
index 0000000..3392eb5
--- /dev/null
@@ -0,0 +1,3 @@
+dimple.png derived from:
+http://mxr.mozilla.org/mozilla-central/source/toolkit/themes/pinstripe/global/splitter/dimple.png
+Mozilla Public License/GPL/GLPL
index eea305d..363d21d 100644 (file)
@@ -85,6 +85,8 @@
     "SURVEY_QUESTION": "Question:",
     "SURVEY_ID": "Survey ID # ${0}",
     "SURVEY_FOOT_LABEL": "Questions & Answers",
-    "EVENT_DEF_LABEL" : "${0}: ${1}"
+    "EVENT_DEF_LABEL" : "${0}: ${1}",
+    "ACQ_DISTRIB_FORMULA_NAME_PROMPT" : "Enter new formula name",
+    "ACQ_DISTRIB_FORMULA_NAME_CLONE" : "${0} (Clone)"
 }
 
index 130bcc9..b992d26 100644 (file)
@@ -4,6 +4,9 @@ dojo.require('openils.widget.AutoGrid');
 dojo.require('dijit.form.FilteringSelect');
 dojo.require('openils.PermaCrud');
 dojo.require('openils.widget.AutoFieldWidget');
+dojo.requireLocalization('openils.conify', 'conify');
+var localeStrings = dojo.i18n.getLocalization('openils.conify', 'conify');
+
 
 var formCache = [];
 var formula, entryTbody, entryTemplate, dndSource;
@@ -42,6 +45,29 @@ function draw() {
 
     }
 }
+
+function cloneSelectedFormula() {
+    var item = fListGrid.getSelectedItems()[0];
+    if(!item) return;
+    var formula = new fieldmapper.acqf().fromStoreItem(item);
+    fieldmapper.standardRequest(
+        ['open-ils.acq', 'open-ils.acq.distribution_formula.clone'],
+        {
+            asnyc : true,
+            params : [
+                openils.User.authtoken, 
+                formula.id(), 
+                dojo.string.substitute(localeStrings.ACQ_DISTRIB_FORMULA_NAME_CLONE, [formula.name()])
+            ],
+            oncomplete : function(r) {
+                if(r = openils.Util.readResponse(r)) {
+                    location.href = oilsBasePath + '/conify/global/acq/distribution_formula/' + r;
+                }
+            }
+        }
+    );
+}
+
 openils.Util.addOnLoad(draw);
 
 function getItemCount(rowIndex, item) {
@@ -65,6 +91,16 @@ function drawFormulaSummary() {
     formula.entries(entries);
 
     dojo.byId('formula_head').innerHTML = formula.name();
+    dojo.byId('formula_head').onclick = function() {
+        var name = prompt(localeStrings.ACQ_DISTRIB_FORMULA_NAME_PROMPT, formula.name());
+        if(name && name != formula.name()) {
+            formula.name(name);
+            pcrud = new openils.PermaCrud();
+            pcrud.update(formula);
+            dojo.byId('formula_head').innerHTML = name;
+        }
+    }
+
     dojo.forEach(entries, function(entry) { addEntry(entry); } );
 }
 
index 2f900f2..94a7e2e 100644 (file)
@@ -1,22 +1,23 @@
 [% WRAPPER default/base.tt2 %]
 [% ctx.page_title = 'Distribution Formulas' %]
 <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/conify/global/acq/distribution_formula.js'></script>
-<script type="text/javascript"> var formulaId = '[% ctx.page_args.0 %]';
 
-function getFormulaName(rowIndex, item) {
-    if(!item) return '';
-    var name = this.grid.store.getValue(item, 'name');
-    var id = this.grid.store.getValue(item, 'id');
-    return id + ':' + name;
-}
+<script type="text/javascript"> 
+    var formulaId = '[% ctx.page_args.0 %]';
 
-function formatName(value) {
-    if(value) {
-        var vals = value.split(/:/);
-        return '<a href="'+location.href+ '/'+vals[0]+'">'+vals[1]+'</a>';
+    function getFormulaName(rowIndex, item) {
+        if(!item) return '';
+        var name = this.grid.store.getValue(item, 'name');
+        var id = this.grid.store.getValue(item, 'id');
+        return id + ':' + name;
     }
-}
 
+    function formatName(value) {
+        if(value) {
+            var vals = value.split(/:/);
+            return '<a href="'+location.href+ '/'+vals[0]+'">'+vals[1]+'</a>';
+        }
+    }
 </script>
 
 
@@ -27,6 +28,7 @@ function formatName(value) {
             <div>
                 <button dojoType='dijit.form.Button' onClick='fListGrid.showCreateDialog()'>New Formula</button>
                 <button dojoType='dijit.form.Button' onClick='fListGrid.deleteSelected()'>Delete Selected</button>
+                <button dojoType='dijit.form.Button' onClick='cloneSelectedFormula()'>Clone Selected</button>
             </div>
         </div>
         <table  jsId="fListGrid"
@@ -50,7 +52,7 @@ function formatName(value) {
 
 <div id='formula-entry-div'>
     <div dojoType="dijit.layout.ContentPane" layoutAlign="client" class='oils-header-panel'>
-        <div id="formula_head"></div>
+        <div><a href='javascript:void(0);' id="formula_head"></a></div>
         <div>
         </div>
     </div>
@@ -78,20 +80,19 @@ function formatName(value) {
                 <td><div name='location'></td>
                 <td><div name='item_count'></td>
                 <td>
-                    <!-- TODO: add to repo / use local images -->
-                    <img src='http://mxr.mozilla.org/mozilla-central/source/toolkit/themes/pinstripe/global/splitter/dimple.png?raw=1'/>
-                    <img src='http://mxr.mozilla.org/mozilla-central/source/toolkit/themes/pinstripe/global/splitter/dimple.png?raw=1'/>
-                    <img src='http://mxr.mozilla.org/mozilla-central/source/toolkit/themes/pinstripe/global/splitter/dimple.png?raw=1'/>
+                    <img src='[% ctx.media_prefix %]/images/dimple.png'/>
+                    <img src='[% ctx.media_prefix %]/images/dimple.png'/>
+                    <img src='[% ctx.media_prefix %]/images/dimple.png'/>
                 <td>
             </tr>
         </tbody>
     </table>
-</div>
-<br/>
-<div>
-    <button dojoType='dijit.form.Button' onClick='addEntry()'>New Entry</button>
-    <span style='padding-right:20px;'></span>
-    <button dojoType='dijit.form.Button' onClick='saveFormula()'>Apply Changes</button>
+    <br/>
+    <div>
+        <button dojoType='dijit.form.Button' onClick='addEntry()'>New Entry</button>
+        <span style='padding-right:20px;'></span>
+        <button dojoType='dijit.form.Button' onClick='saveFormula()'>Apply Changes</button>
+    </div>
 </div>
 
 [% END %]