Add button to update expire date field
authorJeff Godin <jgodin@tadl.org>
Wed, 30 Oct 2013 19:42:15 +0000 (15:42 -0400)
committerBen Shum <bshum@biblio.org>
Fri, 14 Feb 2014 07:29:49 +0000 (02:29 -0500)
When updating/renewing a patron (expired or not), it would be
convenient to have a means of populating the expire date field with
a value of perm_interval + today. Currently, staff are required to
manually enter a date, or could toggle the profile from one profile
then back to the desired profile, but this is not ideal.

This commit adds a new button next to the expire date, which when
activated will re-calculate the date based on the current profile's
perm_interval and today's date.

This is similar to how the expire date is populated when creating a
new user, or when changing the profile group. A button is used here
so that the updating of the expire date is an intentional process,
not one that happens upon any edit.

Signed-off-by: Jeff Godin <jgodin@tadl.org>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/templates/actor/user/register_table.tt2
Open-ILS/web/js/dojo/openils/actor/nls/register.js
Open-ILS/web/js/ui/default/actor/user/register.js

index ba3f246..cdb5fa3 100644 (file)
     <tr fmclass='au' fmfield='other_phone'/>
     <tr fmclass='au' fmfield='home_ou' required='required'/>
     <tr fmclass='au' fmfield='profile' required='required'/>
-    <tr fmclass='au' fmfield='expire_date' required='required'/>
+    <tr fmclass='au' fmfield='expire_date' required='required'>
+        <td/><td/><td/>
+        <td>
+            <button dojoType='dijit.form.Button' jsId='setExpireDate' scrollOnFocus='false'></button>
+        </td>
+    </tr>
     <tr fmclass='au' fmfield='net_access_level' required='required'/>
     <tr fmclass='au' fmfield='active'/>
     <tr fmclass='au' fmfield='barred'/>
index f7d13b6..d6dbd71 100644 (file)
@@ -40,5 +40,6 @@
     "HOLD_NOTIFY_PHONE": "Phone: ",
     "HOLD_NOTIFY_EMAIL": "Email: ",
     "HOLD_NOTIFY_SMS": "SMS: ",
-    "REQUESTING_USER" : "Account requested by ${0} ${1}"
+    "REQUESTING_USER" : "Account requested by ${0} ${1}",
+    "UPDATE_EXPIRE_DATE": "Update Expire Date"
 }
index 671502a..c31eb2f 100644 (file)
@@ -84,6 +84,7 @@ function load() {
     allCards.attr("label", localeStrings.SEE_ALL);
     dojo.byId('uedit-dupe-username-warning').innerHTML = localeStrings.DUPE_USERNAME;
     generatePassword.attr("label", localeStrings.RESET_PASSWORD);
+    setExpireDate.attr("label", localeStrings.UPDATE_EXPIRE_DATE);
     dojo.byId('verifyPassword').innerHTML = localeStrings.VERIFY_PASSWORD;
     dojo.byId('parentGuardian').innerHTML = localeStrings.PARENT_OR_GUARDIAN;
     dojo.byId('userSettings').innerHTML = localeStrings.USER_SETTINGS;
@@ -293,6 +294,8 @@ function load() {
 
        dojo.connect(generatePassword, 'onClick', generatePasswordHandler);
 
+       dojo.connect(setExpireDate, 'onClick', setExpireDateHandler);
+
     if(!patron.isnew() && !checkGrpAppPerm(patron.profile()) && patron.id() != openils.User.user.id()) {
         // we are not allowed to edit this user, so disable the save option
         saveButton.attr('disabled', true);
@@ -494,6 +497,28 @@ function generatePasswordHandler() {
 }
 
 /**
+ * Set Expire Date field based on today and current profile group
+ */
+function setExpireDateHandler() {
+    var profileWidget, expireWidget;
+    profileWidget = findWidget('au', 'profile');
+    expireWidget = findWidget('au', 'expire_date');
+
+    // This technique is borrowed with slight modifications
+    // from the profile widget onChange handler
+    function found(items) {
+        if (items.length == 0) return;
+        var item = items[0];
+        var interval = profileWidget.widget.store.getValue(item, 'perm_interval');
+        expireWidget.widget.attr('value', dojo.date.add(new Date(),
+            'second', openils.Util.intervalToSeconds(interval)));
+    }
+
+    profileWidget.widget.store.fetch({onComplete:found, query:{id:profileWidget.widget.attr('value')}});
+
+}
+
+/**
  * Loads a staged user and turns them into something the editor can understand
  */
 function uEditLoadStageUser(stageUname) {