SMS column headers, receipt slip templates
authorJason Etheridge <jason@esilibrary.com>
Wed, 23 Nov 2011 13:23:12 +0000 (08:23 -0500)
committerJason Etheridge <jason@esilibrary.com>
Thu, 5 Jan 2012 17:46:02 +0000 (12:46 -0500)
and edit entries for Actions for Selected Holds

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/chrome/content/OpenILS/data.js
Open-ILS/xul/staff_client/chrome/content/main/constants.js
Open-ILS/xul/staff_client/server/circ/util.js
Open-ILS/xul/staff_client/server/locale/en-US/circ.properties
Open-ILS/xul/staff_client/server/locale/en-US/common.properties
Open-ILS/xul/staff_client/server/locale/en-US/patron.properties
Open-ILS/xul/staff_client/server/patron/holds.js
Open-ILS/xul/staff_client/server/patron/holds_overlay.xul

index 8ecc211..f5316be 100644 (file)
 <!ENTITY staff.circ.holds.retrieve_patron.accesskey "P">
 <!ENTITY staff.circ.holds.edit_pickup_library "Edit Pickup Library">
 <!ENTITY staff.circ.holds.edit_pickup_library.accesskey "L">
-<!ENTITY staff.circ.holds.edit_phone_notification "Edit Phone Notification">
+<!ENTITY staff.circ.holds.edit_phone_notification "Edit Phone Number">
 <!ENTITY staff.circ.holds.edit_phone_notification.accesskey "P">
+<!ENTITY staff.circ.holds.edit_sms_notification "Edit Mobile/Text Number">
+<!ENTITY staff.circ.holds.edit_sms_notification.accesskey "T">
+<!ENTITY staff.circ.holds.edit_sms_carrier_notification "Edit Mobile/Text Carrier">
+<!ENTITY staff.circ.holds.edit_sms_carrier_notification.accesskey "C">
 <!ENTITY staff.circ.holds.set_email_notification "Set Email Notification">
 <!ENTITY staff.circ.holds.set_email_notification.accesskey "E">
 <!ENTITY staff.circ.holds.edit_activation_date "Edit Activation Date">
index c256315..0dda428 100644 (file)
@@ -436,7 +436,7 @@ OpenILS.data.prototype = {
                 },
                 'hold_slip' : {
                     'type' : 'holds',
-                    'header' : 'This item needs to be routed to <b>%route_to%</b>:<br/>\r\nBarcode: %item_barcode%<br/>\r\nTitle: %item_title%<br/>\r\n<br/>\r\n%hold_for_msg%<br/>\r\nBarcode: %PATRON_BARCODE%<br/>\r\nNotify by phone: %notify_by_phone%<br/>\r\nNotify by email: %notify_by_email%<br/>\r\n',
+                    'header' : 'This item needs to be routed to <b>%route_to%</b>:<br/>\r\nBarcode: %item_barcode%<br/>\r\nTitle: %item_title%<br/>\r\n<br/>\r\n%hold_for_msg%<br/>\r\nBarcode: %PATRON_BARCODE%<br/>\r\nNotify by phone: %notify_by_phone%<br/>\r\nNotified by text: %notify_by_text%<br/>\r\nNotified by email: %notify_by_email%<br/>\r\n',
                     'line_item' : '%formatted_note%<br/>\r\n',
                     'footer' : '<br/>\r\nRequest date: %request_date%<br/>\r\nSlip Date: %TODAY_TRIM%<br/>\r\nPrinted by %STAFF_FIRSTNAME% at %SHORTNAME%<br/>\r\n<br/>\r\n'
                 },
@@ -448,7 +448,7 @@ OpenILS.data.prototype = {
                 },
                 'hold_transit_slip' : {
                     'type' : 'transits',
-                    'header' : 'This item needs to be routed to <b>%route_to%</b>:<br/>\r\n%route_to_org_fullname%<br/>\r\n%street1%<br/>\r\n%street2%<br/>\r\n%city_state_zip%<br/>\r\n<br/>\r\nBarcode: %item_barcode%<br/>\r\nTitle: %item_title%<br/>\r\nAuthor: %item_author%<br>\r\n<br/>\r\n%hold_for_msg%<br/>\r\nBarcode: %PATRON_BARCODE%<br/>\r\nNotify by phone: %notify_by_phone%<br/>\r\nNotify by email: %notify_by_email%<br/>\r\n',
+                    'header' : 'This item needs to be routed to <b>%route_to%</b>:<br/>\r\n%route_to_org_fullname%<br/>\r\n%street1%<br/>\r\n%street2%<br/>\r\n%city_state_zip%<br/>\r\n<br/>\r\nBarcode: %item_barcode%<br/>\r\nTitle: %item_title%<br/>\r\nAuthor: %item_author%<br>\r\n<br/>\r\n%hold_for_msg%<br/>\r\nBarcode: %PATRON_BARCODE%<br/>\r\nNotify by phone: %notify_by_phone%<br/>\r\nNotified by text: %notify_by_text%<br/>\r\nNotified by email: %notify_by_email%<br/>\r\n',
                     'line_item' : '%formatted_note%<br/>\r\n',
                     'footer' : '<br/>\r\nRequest date: %request_date%<br/>\r\nSlip Date: %TODAY_TRIM%<br/>\r\nPrinted by %STAFF_FIRSTNAME% at %SHORTNAME%<br/>\r\n<br/>\r\n'
                 },
@@ -926,6 +926,27 @@ OpenILS.data.prototype = {
         this.chain.push(
             function() {
                 var f = gen_fm_retrieval_func(
+                    'csc',
+                    [
+                        api.FM_CSC_RETRIEVE_VIA_PCRUD.app,
+                        api.FM_CSC_RETRIEVE_VIA_PCRUD.method,
+                        [ obj.session.key, {"id":{"!=":null}}, {"order_by":{"csc":"name"}} ],
+                        false
+                    ]
+                );
+                try {
+                    f();
+                } catch(E) {
+                    var error = 'Error: ' + js2JSON(E);
+                    obj.error.sdump('D_ERROR',error);
+                    throw(E);
+                }
+            }
+        );
+
+        this.chain.push(
+            function() {
+                var f = gen_fm_retrieval_func(
                     'acnp',
                     [
                         api.FM_ACNP_RETRIEVE_VIA_PCRUD.app,
index f7ecfe0..4120b6f 100644 (file)
@@ -258,6 +258,7 @@ var api = {
     'FM_CNAL_RETRIEVE' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.net_access_level.retrieve.all', 'secure' : false },
     'FM_CNCT_RETRIEVE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.non_cat_types.retrieve.all', 'secure' : false },
     'FM_CRAHP_RETRIEVE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.config.rules.age_hold_protect.retrieve.all', 'secure' : false },
+    'FM_CSC_RETRIEVE_VIA_PCRUD' : { 'app' : 'open-ils.pcrud', 'method' : 'open-ils.pcrud.search.csc.atomic' },
     'FM_CSP_PCRUD_SEARCH' : { 'app' : 'open-ils.pcrud', 'method' : 'open-ils.pcrud.search.csp.atomic', 'secure' : false },
     'FM_CST_RETRIEVE' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.standings.retrieve', 'secure' : false },
     'FM_MB_CREATE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.money.billing.create' },
index e8213d9..40ccdb5 100644 (file)
@@ -2146,6 +2146,24 @@ circ.util.hold_columns = function(modify,params) {
         },
         {
             'persist' : 'hidden width ordinal',
+            'id' : 'sms_notify',
+            'label' : document.getElementById('commonStrings').getString('staff.ahr_sms_notify_label'),
+            'flex' : 1,
+            'primary' : false,
+            'hidden' : true,
+            'editable' : false, 'render' : function(my) { return my.ahr.sms_notify(); }
+        },
+        {
+            'persist' : 'hidden width ordinal',
+            'id' : 'sms_carrier',
+            'label' : document.getElementById('commonStrings').getString('staff.ahr_sms_carrier_label'),
+            'flex' : 1,
+            'primary' : false,
+            'hidden' : true,
+            'editable' : false, 'render' : function(my) { return data.hash.csc[ my.ahr.sms_carrier() ].name(); }
+        },
+        {
+            'persist' : 'hidden width ordinal',
             'id' : 'prev_check_time',
             'label' : document.getElementById('commonStrings').getString('staff.ahr_prev_check_time_label'),
             'flex' : 1,
@@ -2931,6 +2949,12 @@ circ.util.checkin_via_barcode2 = function(session,params,backdate,auto_print,che
                             msg += print_data.notify_by_phone_msg;
                             msg += '\n';
                         }
+                        if (check.payload.hold.sms_notify()) {
+                            print_data.notify_by_text_msg = document.getElementById('circStrings').getFormattedString('staff.circ.utils.payload.hold.sms_notify', [check.payload.hold.sms_notify()]);
+                            print_data.notify_by_text = check.payload.hold.sms_notify();
+                            msg += print_data.notify_by_text_msg;
+                            msg += '\n';
+                        }
                         if (get_bool(check.payload.hold.email_notify())) {
                             var payload_email = au_obj.email() ? au_obj.email() : '';
                             print_data.notify_by_email_msg = document.getElementById('circStrings').getFormattedString('staff.circ.utils.payload.hold.email_notify', [payload_email]);
@@ -3309,6 +3333,12 @@ circ.util.checkin_via_barcode2 = function(session,params,backdate,auto_print,che
                     msg += print_data.notify_by_phone_msg;
                     msg += '\n';
                 }
+                if (check.payload.hold.sms_notify()) {
+                    print_data.notify_by_text_msg = document.getElementById('circStrings').getFormattedString('staff.circ.utils.payload.hold.sms_notify', [check.payload.hold.sms_notify()]);
+                    print_data.notify_by_text = check.payload.hold.sms_notify();
+                    msg += print_data.notify_by_text_msg;
+                    msg += '\n';
+                }
                 if (get_bool(check.payload.hold.email_notify())) {
                     var payload_email = au_obj.email() ? au_obj.email() : '';
                     print_data.notify_by_email_msg = document.getElementById('circStrings').getFormattedString('staff.circ.utils.payload.hold.email_notify', [payload_email]);
index af45237..218a256 100644 (file)
@@ -363,6 +363,7 @@ staff.circ.utils.holds.shelf_expire_time=Shelf Expire Time
 staff.circ.utils.payload.hold.patron=Hold for patron %1$s, %2$s %3$s
 staff.circ.utils.payload.hold.patron_alias=Hold for patron %1$s
 staff.circ.utils.payload.hold.phone_notify=Notify by phone: %1$s
+staff.circ.utils.payload.hold.sms_notify=Notify by text: %1$s
 staff.circ.utils.payload.hold.email_notify=Notify by email: %1$s
 staff.circ.utils.payload.hold.request_date=Request Date: %1$s
 staff.circ.utils.payload.hold.slip_date=Slip Date: %1$s
index f73ab08..ce0ac8e 100644 (file)
@@ -57,6 +57,8 @@ staff.ahr_holdable_part_label=Holdable Part
 staff.ahr_issuance_label_label=Issuance Label
 staff.ahr_id_label=Hold ID
 staff.ahr_phone_notify_label=Phone Notify
+staff.ahr_sms_notify_label=Text Notify
+staff.ahr_sms_carrier_label=Text Carrier
 staff.ahr_pickup_lib_label=Pickup Library
 staff.ahr_prev_check_time_label=Previous Check Time
 staff.ahr_requestor_label=Requestor
index 4f0ced6..f910d37 100644 (file)
@@ -171,6 +171,24 @@ staff.patron.holds.holds_edit_phone_notify.choose_phone_number=Choose a Hold Not
 staff.patron.holds.holds_edit_phone_notify.confirm_phone_number_change.singular=Are you sure you would like to change the Notification Phone Number for hold %1$s to "%2$s"?
 staff.patron.holds.holds_edit_phone_notify.confirm_phone_number_change.plural=Are you sure you would like to change the Notification Phone Number for holds %1$s to "%2$s"?
 staff.patron.holds.holds_edit_phone_notify.modifying_holds_title=Modifying Holds
+staff.patron.holds.holds_edit_sms_notify.new_phone_number=Please enter a new mobile number for hold notification via text (leave the field empty to disable):
+staff.patron.holds.holds_edit_sms_notify.btn_done.label=Done
+staff.patron.holds.holds_edit_sms_notify.btn_done.accesskey=D
+staff.patron.holds.holds_edit_sms_notify.btn_cancel.label=Cancel
+staff.patron.holds.holds_edit_sms_notify.btn_cancel.accesskey=C
+staff.patron.holds.holds_edit_sms_notify.choose_phone_number=Choose a Hold Notification Mobile Text Number
+staff.patron.holds.holds_edit_sms_notify.confirm_phone_number_change.singular=Are you sure you would like to change the Notification Mobile/Text Number for hold %1$s to "%2$s"?
+staff.patron.holds.holds_edit_sms_notify.confirm_phone_number_change.plural=Are you sure you would like to change the Notification Mobile/Text Number for holds %1$s to "%2$s"?
+staff.patron.holds.holds_edit_sms_notify.modifying_holds_title=Modifying Holds
+staff.patron.holds.holds_edit_sms_carrier.new_carrier=Please select a new mobile carrier for hold notification via text:
+staff.patron.holds.holds_edit_sms_carrier.btn_done.label=Done
+staff.patron.holds.holds_edit_sms_carrier.btn_done.accesskey=D
+staff.patron.holds.holds_edit_sms_carrier.btn_cancel.label=Cancel
+staff.patron.holds.holds_edit_sms_carrier.btn_cancel.accesskey=C
+staff.patron.holds.holds_edit_sms_carrier.choose_carrier=Select a Hold Notification Mobile Text Carrier
+staff.patron.holds.holds_edit_sms_carrier.confirm_carrier_change.singular=Are you sure you would like to change the Notification Mobile/Text Carrier for hold %1$s to "%2$s"?
+staff.patron.holds.holds_edit_sms_carrier.confirm_carrier_change.plural=Are you sure you would like to change the Notification Mobile/Text Carrier for holds %1$s to "%2$s"?
+staff.patron.holds.holds_edit_sms_carrier.modifying_holds_title=Modifying Holds
 staff.patron.holds.holds_edit_email_notify.description=Send email notifications (when appropriate)?  The email address used is found in the hold recipient account.
 staff.patron.holds.holds_edit_email_notify.btn_email.label=Email
 staff.patron.holds.holds_edit_email_notify.btn_email.accesskey=E
index 190d630..bec92d3 100644 (file)
@@ -598,6 +598,133 @@ patron.holds.prototype = {
                             }
                         }
                     ],
+
+                    'cmd_holds_edit_sms_notify' : [
+                        ['command'],
+                        function() {
+                            try {
+                                var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
+                                xml += '<description>'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.new_phone_number')+'</description>';
+                                xml += '<textbox id="phone" name="fancy_data" context="clipboard"/>';
+                                xml += '</vbox>';
+                                var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
+                                bot_xml += '<spacer flex="1"/><button label="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.btn_done.label')+'"';
+                                bot_xml += ' accesskey="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.btn_done.accesskey')+'" name="fancy_submit"/>';
+                                bot_xml += '<button label="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.btn_cancel.label')+'"';
+                                bot_xml += ' accesskey="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.btn_cancel.accesskey')+'" name="fancy_cancel"/></hbox>';
+                                netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
+                                //obj.data.temp_mid = xml; obj.data.stash('temp_mid');
+                                //obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
+                                JSAN.use('util.window'); var win = new util.window();
+                                var fancy_prompt_data = win.open(
+                                    urls.XUL_FANCY_PROMPT,
+                                    //+ '?xml_in_stash=temp_mid'
+                                    //+ '&bottom_xml_in_stash=temp_bot'
+                                    //+ '&title=' + window.escape('Choose a Hold Notification Phone Number')
+                                    //+ '&focus=phone',
+                                    'fancy_prompt', 'chrome,resizable,modal',
+                                    { 'xml' : xml, 'bottom_xml' : bot_xml, 'title' : $("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.choose_phone_number'), 'focus' : 'phone' }
+                                );
+                                if (fancy_prompt_data.fancy_status == 'incomplete') { return; }
+                                var phone = fancy_prompt_data.phone;
+
+                                var hold_list = util.functional.map_list(obj.retrieve_ids, function(o){return o.id;});
+                                var msg = '';
+                                if(obj.retrieve_ids.length > 1) {
+                                    msg = $("patronStrings").getFormattedString('staff.patron.holds.holds_edit_sms_notify.confirm_phone_number_change.plural',[hold_list.join(', '), phone]);
+                                } else {
+                                    msg = $("patronStrings").getFormattedString('staff.patron.holds.holds_edit_sms_notify.confirm_phone_number_change.singular',[hold_list.join(', '), phone]);
+                                }
+                                var r = obj.error.yns_alert(msg,
+                                        $("patronStrings").getString('staff.patron.holds.holds_edit_sms_notify.modifying_holds_title'),
+                                        $("commonStrings").getString('common.yes'),
+                                        $("commonStrings").getString('common.no'),
+                                        null,
+                                        $("commonStrings").getString('common.check_to_confirm')
+                                );
+                                if (r == 0) {
+                                    var hparams = {
+                                        'sms_notify' : phone == '' ? null : phone 
+                                    }
+                                    if (phone == '') {
+                                        hparams.sms_carrier = null;
+                                    }
+                                    circ.util.batch_hold_update(hold_list, hparams, { 'progressmeter' : progressmeter, 'oncomplete' :  function() { obj.clear_and_retrieve(true); } });
+                                }
+                            } catch(E) {
+                                obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.holds.holds_not_modified'),E);
+                            }
+                        }
+                    ],
+
+                    'cmd_holds_edit_sms_carrier' : [
+                        ['command'],
+                        function() {
+                            try {
+                                JSAN.use('util.widgets'); JSAN.use('util.functional');
+
+                                var list = util.functional.map_list(
+                                    obj.data.list.csc,
+                                    function(o) {
+                                        return [
+                                            o.name() + ' (' + o.region() + ')',
+                                            o.id(),
+                                            ( !isTrue(o.active()) ),
+                                            0
+                                        ];
+                                    }
+                                );
+                                ml = util.widgets.make_menulist( list, obj.data.list.au[0].ws_ou() );
+                                ml.setAttribute('id','carrier');
+                                ml.setAttribute('name','fancy_data');
+                                var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
+                                xml += '<description>'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.new_carrier')+'</description>';
+                                xml += util.widgets.serialize_node(ml);
+                                xml += '</vbox>';
+                                var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
+                                bot_xml += '<spacer flex="1"/><button label="'+ $("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.btn_done.label') +'"';
+                                bot_xml += ' accesskey="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.btn_done.accesskey')+'" name="fancy_submit"/>';
+                                bot_xml += '<button label="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.btn_cancel.label')+'"';
+                                bot_xml += ' accesskey="'+$("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.btn_cancel.accesskey')+'" name="fancy_cancel"/></hbox>';
+                                netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
+                                //obj.data.temp_mid = xml; obj.data.stash('temp_mid');
+                                //obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
+                                JSAN.use('util.window'); var win = new util.window();
+                                var fancy_prompt_data = win.open(
+                                    urls.XUL_FANCY_PROMPT,
+                                    //+ '?xml_in_stash=temp_mid'
+                                    //+ '&bottom_xml_in_stash=temp_bot'
+                                    //+ '&title=' + window.escape('Choose a Pick Up Library'),
+                                    'fancy_prompt', 'chrome,resizable,modal',
+                                    { 'xml' : xml, 'bottom_xml' : bot_xml, 'title' : $("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.choose_carrier') }
+                                );
+                                if (fancy_prompt_data.fancy_status == 'incomplete') { return; }
+                                var sms_carrier = fancy_prompt_data.carrier;
+
+                                var hold_list = util.functional.map_list(obj.retrieve_ids, function(o){return o.id;});
+                                var msg = '';
+
+                                if(obj.retrieve_ids.length > 1) {
+                                    msg = $("patronStrings").getFormattedString('staff.patron.holds.holds_edit_sms_carrier.confirm_carrier_change.plural',[hold_list.join(', '), obj.data.hash.csc[sms_carrier].name()]);
+                                } else {
+                                    msg = $("patronStrings").getFormattedString('staff.patron.holds.holds_edit_sms_carrier.confirm_carrier_change.singular',[hold_list.join(', '), obj.data.hash.csc[sms_carrier].name()]);
+                                }
+                                var r = obj.error.yns_alert(msg,
+                                        $("patronStrings").getString('staff.patron.holds.holds_edit_sms_carrier.modifying_holds_title'),
+                                        $("commonStrings").getString('common.yes'),
+                                        $("commonStrings").getString('common.no'),
+                                        null,
+                                        $("commonStrings").getString('common.check_to_confirm')
+                                );
+                                if (r == 0) {
+                                    circ.util.batch_hold_update(hold_list, { 'sms_carrier' : sms_carrier }, { 'progressmeter' : progressmeter, 'oncomplete' :  function() { obj.clear_and_retrieve(true); } });
+                                }
+                            } catch(E) {
+                                obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.holds.holds_not_modified'),E);
+                            }
+                        }
+                    ],
+
                     'cmd_holds_edit_email_notify' : [
                         ['command'],
                         function() {
index ce36619..1e05002 100644 (file)
         <command id="cmd_holds_edit_desire_mint_condition" />
         <command id="cmd_holds_edit_pickup_lib" />
         <command id="cmd_holds_edit_phone_notify" />
+        <command id="cmd_holds_edit_sms_notify"
+            label="&staff.circ.holds.edit_sms_notification;"
+            accesskey="&staff.circ.holds.edit_sms_notification.accesskey;"/>
+        <command id="cmd_holds_edit_sms_carrier"
+            label="&staff.circ.holds.edit_sms_carrier_notification;"
+            accesskey="&staff.circ.holds.edit_sms_carrier_notification.accesskey;"/>
         <command id="cmd_holds_edit_email_notify" />
         <command id="cmd_holds_edit_thaw_date" />
         <command id="cmd_holds_edit_request_date" />
@@ -66,6 +72,8 @@
             <menuitem label="&staff.circ.holds.edit_desire_mint_condition;" command="cmd_holds_edit_desire_mint_condition" accesskey="&staff.circ.holds.edit_desire_mint_condition.accesskey;"/>
             <menuitem label="&staff.circ.holds.edit_pickup_library;" command="cmd_holds_edit_pickup_lib" accesskey="&staff.circ.holds.edit_pickup_library.accesskey;"/>
             <menuitem label="&staff.circ.holds.edit_phone_notification;" command="cmd_holds_edit_phone_notify" accesskey="&staff.circ.holds.edit_phone_notification.accesskey;"/>
+            <menuitem command="cmd_holds_edit_sms_carrier" />
+            <menuitem command="cmd_holds_edit_sms_notify" />
             <menuitem label="&staff.circ.holds.set_email_notification;" command="cmd_holds_edit_email_notify" accesskey="&staff.circ.holds.set_email_notification.accesskey;"/>
             <menuitem label="&staff.circ.holds.edit_expire_time;" command="cmd_holds_edit_expire_time" accesskey="&staff.circ.holds.edit_expire_time.accesskey;"/>
             <menuitem label="&staff.circ.holds.edit_shelf_expire_time;" command="cmd_holds_edit_shelf_expire_time" accesskey="&staff.circ.holds.edit_shelf_expire_time.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_desire_mint_condition;" command="cmd_holds_edit_desire_mint_condition" accesskey="&staff.circ.holds.edit_desire_mint_condition.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_pickup_library;" command="cmd_holds_edit_pickup_lib" accesskey="&staff.circ.holds.edit_pickup_library.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_phone_notification;" command="cmd_holds_edit_phone_notify" accesskey="&staff.circ.holds.edit_phone_notification.accesskey;"/>
+                    <menuitem command="cmd_holds_edit_sms_carrier" />
+                    <menuitem command="cmd_holds_edit_sms_notify" />
                     <menuitem label="&staff.circ.holds.set_email_notification;" command="cmd_holds_edit_email_notify" accesskey="&staff.circ.holds.set_email_notification.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_expire_time;" command="cmd_holds_edit_expire_time" accesskey="&staff.circ.holds.edit_expire_time.accesskey;"/>
                     <menuitem label="&staff.circ.holds.edit_shelf_expire_time;" command="cmd_holds_edit_shelf_expire_time" accesskey="&staff.circ.holds.edit_shelf_expire_time.accesskey;"/>