fixed delete
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 22 Jun 2006 13:55:27 +0000 (13:55 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 22 Jun 2006 13:55:27 +0000 (13:55 +0000)
added the ability to edit multiple locations when perms allow

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

Open-ILS/web/opac/common/js/org_utils.js
Open-ILS/web/opac/common/js/utils.js
Open-ILS/xul/staff_client/server/admin/closed_dates.js
Open-ILS/xul/staff_client/server/admin/closed_dates.xhtml

index af42503..5714d50 100644 (file)
@@ -55,6 +55,7 @@ function findSiblingOrgs(node) { return findOrgUnit(node.parent_ou()).children()
 
 /* true if 'org' is 'me' or a child of mine */
 function orgIsMine(me, org) {
+       if(!me || !org) return false;
        if(me.id() == org.id()) return true;
        for( var i in me.children() ) {
                if(orgIsMine(me.children()[i], org))
index 2b80142..e2a6280 100644 (file)
@@ -170,10 +170,12 @@ function setSelector( sel, value ) {
                                if( val && val.toLowerCase() == value.toLowerCase() ) {
                                        sel.selectedIndex = i;
                                        sel.options[i].selected = true;
+                                       return true;
                                }
                        }
                }
        }
+       return false;
 }
 
 function setSelectorRegex( sel, regex ) {
@@ -187,10 +189,12 @@ function setSelectorRegex( sel, regex ) {
                                if( val && val.match(regex) ) {
                                        sel.selectedIndex = i;
                                        sel.options[i].selected = true;
+                                       return true;
                                }
                        }
                }
        }
+       return false;
 }
 
 function getSelectorVal( sel ) {
index 8970d16..0252d4e 100644 (file)
@@ -13,6 +13,8 @@ var cdDateCache = {};
 var selectedStart;
 var selectedEnd;
 
+var cdBaseOrg;
+
 
 var myPerms = [ 
        'actor.org_unit.closed_date.delete',
@@ -35,12 +37,46 @@ function cdEditorInit() {
        setTimeout( 
                function() { 
                        fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
+                       cdBuildOrgs();
                        cdDrawRange();
                }, 
                20 
        );
 }
 
+function cdCurrentOrg() {
+       var selector = $('cd_orgs');
+       return getSelectorVal(selector);
+}
+
+function cdBuildOrgs() {
+       var org = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
+       if( !org || org == -1 ) org = findOrgUnit(USER.ws_ou());
+       var type = findOrgType(org.ou_type()) ;
+
+       var selector = $('cd_orgs');
+       buildOrgSel(selector, org, type.depth());
+       if(!type.can_have_users()) selector.options[0].disabled = true;
+
+       selector.onchange = function() { cdDrawRange(); };
+
+       cdBaseOrg = org;
+       var gotoOrg = USER.ws_ou();
+       if( ! setSelector( selector, gotoOrg ) ) {
+               gotoOrg = USER.home_ou();
+               setSelector( selector, gotoOrg );
+       }
+
+       var neworg = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
+       if(!neworg || neworg == -1 || !orgIsMine(neworg, findOrgUnit(cdCurrentOrg()))) {
+               $('cd_new_allday').disabled = true;
+               $('cd_new_multiday').disabled = true;
+               $('cd_new').disabled = true;
+       }
+
+       return gotoOrg;
+}
+
 function cdInitCals() {
 
        Calendar.setup({
@@ -96,7 +132,7 @@ function cdDrawRange( start, end ) {
        var req = new Request(
                FETCH_CLOSED_DATES, SESSION, 
                {
-                       orgid                   : USER.ws_ou(), 
+                       orgid                   : cdCurrentOrg(),
                        start_date      : start,
                        end_date                : end,
                        idlist          : 0
@@ -179,8 +215,13 @@ function cdBuildRow( date ) {
                cdEditFleshRow(row, date);
        }
 
+       $n(row,'delete').onclick = function() { cdDelete(row, date); };
        $n(row, 'note').appendChild(text(date.reason()));
 
+       /* if we don't have delete perms for this location, disable the button */
+       var delorg = findOrgUnit(PERMS['actor.org_unit.closed_date.delete']);
+       if(!orgIsMine(delorg, findOrgUnit(cdCurrentOrg()))) $n(row,'delete').disabled = true;
+
        return row;
 }
 
@@ -189,7 +230,6 @@ function cdEditFleshRow(row, date) {
        $n(row, 'start_date').appendChild(text(cdDateToDate(date.close_start())));
        $n(row, 'end_time').appendChild(text(cdDateToHours(date.close_end())));
        $n(row, 'end_date').appendChild(text(cdDateToDate(date.close_end())));
-       $n(row,'delete').onclick = function() { cdDelete(row, date); };
 }
 
 
@@ -310,9 +350,10 @@ function cdNew() {
 function cdCreate(start, end, note) {
 
        var date = new aoucd();
+
        date.close_start(start.getW3CDTF());
        date.close_end(end.getW3CDTF());
-       date.org_unit(USER.ws_ou());
+       date.org_unit(cdCurrentOrg());
        date.reason(note);
 
        var req = new Request(CREATE_CLOSED_DATE, SESSION, date);
index 5d58461..c1239c7 100644 (file)
@@ -49,6 +49,8 @@
                        <div class='title'> Closed Dates Editor </div>
 
                        <br/>
+                       Edit Closed Dates for: <select id='cd_orgs' class='select_big'/>
+                       <br/><br/>
 
                        <table class='data_grid data_grid_center' style='width: 80%; padding: 8px;'>
                                <thead>