From: <rc...@us...> - 2015-12-29 18:06:38
|
Revision: 7433 http://sourceforge.net/p/web-erp/reponame/7433 Author: rchacon Date: 2015-12-29 18:06:35 +0000 (Tue, 29 Dec 2015) Log Message: ----------- On GLAccountUsers.php: Fix script name; add $ViewTopic and $BookMark; improve $SelectedGLAccount validation; improve page_title_text; improve select GL account; regroup modify access permission code (improve logic); add classes to table elements; translate database "0" and "1" to human "No" and "Yes"; simplify and tide code; modify prnMsg from multiple part sentence to one part sentence (better to translate when language use a different grammar structure from English); add "Print This", "Select A Different GL account" and "Return" buttons. Add info to ManualGeneralLedger.html. Modified Paths: -------------- trunk/GLAccountUsers.php trunk/UserGLAccounts.php trunk/doc/Manual/ManualGeneralLedger.html Modified: trunk/GLAccountUsers.php =================================================================== --- trunk/GLAccountUsers.php 2015-12-28 03:50:00 UTC (rev 7432) +++ trunk/GLAccountUsers.php 2015-12-29 18:06:35 UTC (rev 7433) @@ -1,261 +1,258 @@ <?php -/* $Id: glaccountusers.php 6806 2013-09-28 05:10:46Z daintree $*/ +/* $Id: GLAccountUsers.php 7385 2015-11-11 05:10:46Z tehonu $*/ +/* Maintenance of GL Accounts allowed for a user. */ include('includes/session.inc'); -$Title = _('GL Account Authorised Users Maintenance'); +$Title = _('GL Account Authorised Users'); +$ViewTopic = 'GeneralLedger'; +$BookMark = 'GLAccountUsers'; include('includes/header.inc'); -echo '<p class="page_title_text"><img src="' . $RootPath . '/css/' . $Theme . '/images/money_add.png" title="' . _('GL Account Authorised Users') . '" alt="" />' . ' ' . $Title . '</p>'; +if(isset($_POST['SelectedGLAccount']) and $_POST['SelectedGLAccount']<>'') {//If POST not empty: + $SelectedGLAccount = mb_strtoupper($_POST['SelectedGLAccount']); +} elseif(isset($_GET['SelectedGLAccount']) and $_GET['SelectedGLAccount']<>'') {//If GET not empty: + $SelectedGLAccount = mb_strtoupper($_GET['SelectedGLAccount']); +} else {// Unset empty SelectedGLAccount: + unset($_GET['SelectedGLAccount']); + unset($_POST['SelectedGLAccount']); + unset($SelectedGLAccount); +} -if (isset($_POST['SelectedUser'])) { +if(isset($_POST['SelectedUser']) and $_POST['SelectedUser']<>'') {//If POST not empty: $SelectedUser = mb_strtoupper($_POST['SelectedUser']); -} elseif (isset($_GET['SelectedUser'])) { +} elseif(isset($_GET['SelectedUser']) and $_GET['SelectedGLAccount']<>'') {//If GET not empty: $SelectedUser = mb_strtoupper($_GET['SelectedUser']); -} else { - $SelectedUser = ''; +} else {// Unset empty SelectedUser: + unset($_GET['SelectedUser']); + unset($_POST['SelectedUser']); + unset($SelectedUser); } -if (isset($_POST['SelectedGLAccount'])) { - $SelectedGLAccount = mb_strtoupper($_POST['SelectedGLAccount']); -} elseif (isset($_GET['SelectedGLAccount'])) { - $SelectedGLAccount = mb_strtoupper($_GET['SelectedGLAccount']); -} - -if (isset($_POST['Cancel'])) { +if(isset($_POST['Cancel']) or isset($_GET['Cancel'] )) { unset($SelectedGLAccount); unset($SelectedUser); } -if (isset($_POST['Process'])) { - if ($_POST['SelectedGLAccount'] == '') { - prnMsg(_('You have not selected any GL Account'), 'error'); - echo '<br />'; - unset($SelectedGLAccount); - unset($_POST['SelectedGLAccount']); - } -} -if (isset($_POST['submit'])) { +if(!isset($SelectedGLAccount)) {// If is NOT set a GL account for users. - $InputError = 0; + /* It could still be the second time the page has been run and a record has been selected for modification - SelectedUser will exist because it was sent with the new call. If its the first time the page has been displayed with no parameters then none of the above are true. These will call the same page again and allow update/input or deletion of the records*/ - if ($_POST['SelectedUser'] == '') { - $InputError = 1; - prnMsg(_('You have not selected an user to be authorised to use this GL Account'), 'error'); - echo '<br />'; - unset($SelectedGLAccount); + echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" title="',// Icon image. + _('GL Account Authorised Users'), '" /> ',// Icon title. + _('GL Account Authorised Users'), '</p>';// Page title. + if(isset($_POST['Process'])) { + prnMsg(_('You have not selected any GL Account'), 'error'); } - - if ($InputError != 1) { - - // First check the user is not being duplicated - - $CheckSql = "SELECT count(*) - FROM glaccountusers - WHERE accountcode= '" . $_POST['SelectedGLAccount'] . "' - AND userid = '" . $_POST['SelectedUser'] . "'"; - - $CheckResult = DB_query($CheckSql); - $CheckRow = DB_fetch_row($CheckResult); - - if ($CheckRow[0] > 0) { - $InputError = 1; - prnMsg(_('The user') . ' ' . $_POST['SelectedUser'] . ' ' . _('is already authorised to use this GL Account'), 'error'); - } else { - // Add new record on submit - $SQL = "INSERT INTO glaccountusers (accountcode, - userid, - canview, - canupd) - VALUES ('" . $_POST['SelectedGLAccount'] . "', - '" . $_POST['SelectedUser'] . "', - '1', - '1')"; - - $msg = _('User') . ': ' . $_POST['SelectedUser'] . ' ' . _('authority to use the') . ' ' . $_POST['SelectedGLAccount'] . ' ' . _('GL Account has been changed'); - $Result = DB_query($SQL); - prnMsg($msg, 'success'); - unset($_POST['SelectedUser']); - } - } -} elseif (isset($_GET['delete'])) { - $SQL = "DELETE FROM glaccountusers - WHERE accountcode='" . $SelectedGLAccount . "' - AND userid='" . $SelectedUser . "'"; - - $ErrMsg = _('The GL Account user record could not be deleted because'); - $Result = DB_query($SQL, $ErrMsg); - prnMsg(_('User') . ' ' . $SelectedUser . ' ' . _('has had their authority to use the') . ' ' . $SelectedGLAccount . ' ' . _('GL Account removed'), 'success'); - unset($_GET['delete']); -} elseif (isset($_GET['ToggleUpdate'])) { - $SQL = "UPDATE glaccountusers - SET canupd='" . $_GET['ToggleUpdate'] . "' - WHERE accountcode='" . $SelectedGLAccount . "' - AND userid='" . $SelectedUser . "'"; - - $ErrMsg = _('The GL Account user record could not be deleted because'); - $Result = DB_query($SQL, $ErrMsg); - prnMsg(_('User') . ' ' . $SelectedUser . ' ' . _('has had their authority to update') . ' ' . $SelectedGLAccount . ' ' . _('GL Account removed'), 'success'); - unset($_GET['ToggleUpdate']); -} - -if (!isset($SelectedGLAccount)) { - - /* It could still be the second time the page has been run and a record has been selected for modification - SelectedUser will exist because it was sent with the new call. If its the first time the page has been displayed with no parameters - then none of the above are true. These will call the same page again and allow update/input or deletion of the records*/ - echo '<form method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '">'; - echo '<input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" /> - <table class="selection"> + echo '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', + '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', + '<table class="selection"> <tr> - <td>' . _('Select GL Account') . ':</td> - <td><select name="SelectedGLAccount">'; - - $Result = DB_query("SELECT accountcode, - accountname - FROM chartmaster - ORDER BY accountcode"); - - echo '<option value="">' . _('Not Yet Selected') . '</option>'; + <td>', _('Select GL Account'), ':</td> + <td><select name="SelectedGLAccount" onchange="this.form.submit()">',// Submit when the value of the select is changed. + '<option value="">', _('Not Yet Selected'), '</option>'; + $Result = DB_query(" + SELECT + accountcode, + accountname + FROM chartmaster + ORDER BY accountcode"); while ($MyRow = DB_fetch_array($Result)) { - if (isset($SelectedGLAccount) and $MyRow['accountcode'] == $SelectedGLAccount) { - echo '<option selected="selected" value="'; - } else { - echo '<option value="'; + echo '<option '; + if(isset($SelectedGLAccount) and $MyRow['accountcode'] == $SelectedGLAccount) { + echo 'selected="selected" '; } - echo $MyRow['accountcode'] . '">' . $MyRow['accountcode'] . ' - ' . $MyRow['accountname'] . '</option>'; - - } //end while loop - - echo '</select></td></tr>'; - - echo '</table>'; // close main table + echo 'value="', $MyRow['accountcode'] . '">' . $MyRow['accountcode'] . ' - ' . $MyRow['accountname'] . '</option>'; + }// End while loop. + echo '</select></td> + </tr> + </table>';//Close Select_GL_Account table. DB_free_result($Result); + echo '<div class="centre noprint">',// Form buttons: + '<button name="Process" type="submit" value="Submit"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" /> ', _('Accept'), '</button> '; // "Accept" button. - echo '<div class="centre"> - <input type="submit" name="Process" value="' . _('Accept') . '" /> - <input type="submit" name="Cancel" value="' . _('Cancel') . '" /> - </div>'; - - echo '</form>'; - -} - -//end of ifs and buts! -if (isset($_POST['process']) or isset($SelectedGLAccount)) { - $SQLName = "SELECT accountname - FROM chartmaster - WHERE accountcode='" . $SelectedGLAccount . "'"; - $Result = DB_query($SQLName); +} else {// If is set a GL account for users ($SelectedGLAccount). + $Result = DB_query(" + SELECT accountname + FROM chartmaster + WHERE accountcode='" . $SelectedGLAccount . "'"); $MyRow = DB_fetch_array($Result); $SelectedGLAccountName = $MyRow['accountname']; + echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" title="',// Icon image. + _('GL Account Authorised Users'), '" /> ',// Icon title. + _('Authorised Users for'), ' ', $SelectedGLAccountName, '</p>';// Page title. - echo '<div class="centre"><a href="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '">' . _('Authorised users for') . ' ' . $SelectedGLAccountName . ' ' . _('GL Account') . '</a></div> - <form method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '"> - <input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" /> - <input type="hidden" name="SelectedGLAccount" value="' . $SelectedGLAccount . '" />'; - - $SQL = "SELECT glaccountusers.userid, - canview, - canupd, - www_users.realname - FROM glaccountusers INNER JOIN www_users - ON glaccountusers.userid=www_users.userid - WHERE glaccountusers.accountcode='" . $SelectedGLAccount . "' - ORDER BY glaccountusers.userid ASC"; - - $Result = DB_query($SQL); - - echo '<table class="selection">'; - echo '<tr> - <th colspan="6"><h3>' . _('Authorised users for GL Acccount') . ': ' . $SelectedGLAccountName . '</h3></th> - </tr>'; - echo '<tr> - <th>' . _('User Code') . '</th> - <th>' . _('User Name') . '</th> - <th>' . _('View') . '</th> - <th>' . _('Update') . '</th> - </tr>'; - - $k = 0; //row colour counter - - while ($MyRow = DB_fetch_array($Result)) { - if ($k == 1) { - echo '<tr class="EvenTableRows">'; - $k = 0; + // BEGIN: Needs $SelectedGLAccount, $SelectedUser. + if(isset($_POST['submit'])) { + if(!isset($SelectedUser)) { + prnMsg(_('You have not selected an user to be authorised to use this GL Account'), 'error'); } else { - echo '<tr class="OddTableRows">'; - $k = 1; - } + // First check the user is not being duplicated + $CheckResult = DB_query(" + SELECT count(*) + FROM glaccountusers + WHERE accountcode= '" . $SelectedGLAccount . "' + AND userid = '" . $SelectedUser . "'"); + $CheckRow = DB_fetch_row($CheckResult); - if ($MyRow['canupd'] == 1) { - $ToggleText = '<td><a href="%s?SelectedUser=%s&ToggleUpdate=0&SelectedGLAccount=' . $SelectedGLAccount . '" onclick="return confirm(\'' . _('Are you sure you wish to remove Update for this user?') . '\');">' . _('Remove Update') . '</a></td>'; - } else { - $ToggleText = '<td><a href="%s?SelectedUser=%s&ToggleUpdate=1&SelectedGLAccount=' . $SelectedGLAccount . '" onclick="return confirm(\'' . _('Are you sure you wish to add Update for this user?') . '\');">' . _('Add Update') . '</a></td>'; + if($CheckRow[0] > 0) { + prnMsg(_('The user') . ' ' . $SelectedUser . ' ' . _('is already authorised to use this GL Account'), 'error'); + } else { + // Add new record on submit + $SQL = "INSERT INTO glaccountusers ( + accountcode, + userid, + canview, + canupd + ) VALUES ('" . + $SelectedGLAccount . "','" . + $SelectedUser . "', + '1', + '1')"; + $ErrMsg = _('An access permission for a user could not be added'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission for a user was added') . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '. ' . _('User') . ': ' . $SelectedUser . '.', 'success'); + unset($_GET['SelectedUser']); + unset($_POST['SelectedUser']); + } + } } - - printf('<td>%s</td> - <td>%s</td> - <td>%s</td> - <td>%s</td>' . - $ToggleText . ' - <td><a href="%s?SelectedUser=%s&delete=yes&SelectedGLAccount=' . $SelectedGLAccount . '" onclick="return confirm(\'' . _('Are you sure you wish to un-authorise this user?') . '\');">' . _('Un-authorise') . '</a></td> - </tr>', - $MyRow['userid'], - $MyRow['realname'], - $MyRow['canview'], - $MyRow['canupd'], - htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'), - $MyRow['userid'], - htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'), - $MyRow['userid']); + } elseif(isset($_GET['delete'])) { + $SQL = "DELETE FROM glaccountusers + WHERE accountcode='" . $SelectedGLAccount . "' + AND userid='" . $SelectedUser . "'"; + $ErrMsg = _('An access permission for a user could not be removed'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission for a user was removed') . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '. ' . _('User') . ': ' . $SelectedUser . '.', 'success'); + unset($_GET['delete']); + unset($_POST['delete']); + } + } elseif(isset($_GET['ToggleUpdate'])) { + $SQL = "UPDATE glaccountusers + SET canupd='" . $_GET['ToggleUpdate'] . "' + WHERE accountcode='" . $SelectedGLAccount . "' + AND userid='" . $SelectedUser . "'"; + $ErrMsg = _('An access permission to update a GL account could not be modified'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission to update a GL account was modified') . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '. ' . _('User') . ': ' . $SelectedUser . '.', 'success'); + unset($_GET['ToggleUpdate']); + unset($_POST['ToggleUpdate']); + } } - //END WHILE LIST LOOP - echo '</table>'; + // END: Needs $SelectedGLAccount, $SelectedUser. - if (!isset($_GET['delete'])) { + echo '<table class="selection"> + <thead> + <tr> + <th class="text">', _('User Code'), '</th> + <th class="text">', _('User Name'), '</th> + <th class="centre">', _('View'), '</th> + <th class="centre">', _('Update'), '</th> + <th class="noprint" colspan="2"> </th> + </tr> + </thead><tbody>'; + $Result = DB_query(" + SELECT + glaccountusers.userid, + canview, + canupd, + www_users.realname + FROM glaccountusers INNER JOIN www_users + ON glaccountusers.userid=www_users.userid + WHERE glaccountusers.accountcode='" . $SelectedGLAccount . "' + ORDER BY glaccountusers.userid ASC"); + if(DB_num_rows($Result)>0) {// If the GL account has access permissions for one or more users: + $k = 0; //row colour counter + while($MyRow = DB_fetch_array($Result)) { + if($k == 1) { + echo '<tr class="EvenTableRows">'; + $k = 0; + } else { + echo '<tr class="OddTableRows">'; + $k = 1; + } + echo '<td class="text">', $MyRow['userid'], '</td> + <td class="text">', $MyRow['realname'], '</td> + <td class="centre">'; + if($MyRow['canview'] == 1) { + echo _('Yes'); + } else { + echo _('No'); + } + echo '</td> + <td class="centre">'; - - echo '<table class="selection">'; //Main table - - echo '<tr> - <td>' . _('Select User') . ':</td> + $ScriptName = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); + if($MyRow['canupd'] == 1) { + echo _('Yes'), '</td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedGLAccount=', $SelectedGLAccount, '&SelectedUser=', $MyRow['userid'], '&ToggleUpdate=0" onclick="return confirm(\'', _('Are you sure you wish to remove Update for this user?'), '\');">', _('Remove Update'); + } else { + echo _('No'), '</td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedGLAccount=', $SelectedGLAccount, '&SelectedUser=', $MyRow['userid'], '&ToggleUpdate=1" onclick="return confirm(\'', _('Are you sure you wish to add Update for this user?'), '\');">', _('Add Update'); + } + echo '</a></td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedGLAccount=', $SelectedGLAccount, '&SelectedUser=', $MyRow['userid'], '&delete=yes" onclick="return confirm(\'', _('Are you sure you wish to un-authorise this user?'), '\');">', _('Un-authorise'), '</a></td>', + '</tr>'; + }// End while list loop. + } else {// If the GL account does not have access permissions for users: + echo '<tr><td class="centre" colspan="6">', _('GL account does not have access permissions for users'), '</td></tr>'; + } + echo '</tbody></table>', + '<br />', + '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', + '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', + '<input name="SelectedGLAccount" type="hidden" value="', $SelectedGLAccount, '" />', + '<br /> + <table class="selection noprint"> + <tr> + <td>'; + $Result = DB_query(" + SELECT + userid, + realname + FROM www_users + WHERE NOT EXISTS (SELECT glaccountusers.userid + FROM glaccountusers + WHERE glaccountusers.accountcode='" . $SelectedGLAccount . "' + AND glaccountusers.userid=www_users.userid) + ORDER BY userid"); + if(DB_num_rows($Result)>0) {// If the GL account does not have access permissions for one or more users: + echo _('Add access permissions to a user'), ':</td> <td><select name="SelectedUser">'; - - $Result = DB_query("SELECT userid, - realname - FROM www_users - WHERE NOT EXISTS (SELECT glaccountusers.userid - FROM glaccountusers - WHERE glaccountusers.accountcode='" . $SelectedGLAccount . "' - AND glaccountusers.userid=www_users.userid)"); - - if (!isset($_POST['SelectedUser'])) { - echo '<option selected="selected" value="">' . _('Not Yet Selected') . '</option>'; + if(!isset($_POST['SelectedUser'])) { + echo '<option selected="selected" value="">', _('Not Yet Selected'), '</option>'; } while ($MyRow = DB_fetch_array($Result)) { - if (isset($_POST['SelectedUser']) and $MyRow['userid'] == $_POST['SelectedUser']) { + if(isset($_POST['SelectedUser']) and $MyRow['userid'] == $_POST['SelectedUser']) { echo '<option selected="selected" value="'; } else { echo '<option value="'; } - echo $MyRow['userid'] . '">' . $MyRow['userid'] . ' - ' . $MyRow['realname'] . '</option>'; - - } //end while loop - - echo '</select> - </td> - </tr> - </table>'; // close main table - DB_free_result($Result); - - echo '<div class="centre"> - <input type="submit" name="submit" value="' . _('Accept') . '" /> - <input type="submit" name="Cancel" value="' . _('Cancel') . '" /> - </div> - </form>'; - - } // end if user wish to delete + echo $MyRow['userid'], '">', $MyRow['userid'], ' - ', $MyRow['realname'], '</option>'; + } + echo '</select></td> + <td><input type="submit" name="submit" value="Accept" />'; + } else {// If the GL account has access permissions for all users: + echo _('GL account has access permissions for all users'); + } + echo '</td> + </tr> + </table>'; + DB_free_result($Result); + echo '<br>', // Form buttons: + '<div class="centre noprint">', + '<button onclick="javascript:window.print()" type="button"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/printer.png" /> ', _('Print This'), '</button>', // "Print This" button. + '<button formaction="GLAccountUsers.php?Cancel" type="submit"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" /> ', _('Select A Different GL account'), '</button>'; // "Select A Different GL account" button. } +echo '<button formaction="index.php?Application=GL" type="submit" value="Submit"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/previous.png" /> ', _('Return'), '</button>', // "Return" button. + '</div> + </form>'; include('includes/footer.inc'); -?> +?> \ No newline at end of file Modified: trunk/UserGLAccounts.php =================================================================== --- trunk/UserGLAccounts.php 2015-12-28 03:50:00 UTC (rev 7432) +++ trunk/UserGLAccounts.php 2015-12-29 18:06:35 UTC (rev 7433) @@ -1,260 +1,264 @@ -<?php -/* $Id: UserGLAccounts.php 7427 2015-12-27 19:59:10Z rchacon $*/ -/* Maintenance of GL Accounts allowed for a user. */ - -include('includes/session.inc'); -$Title = _('User Authorised GL Accounts'); -$ViewTopic = 'GeneralLedger'; -$BookMark = 'UserGLAccounts'; -include('includes/header.inc'); - -if(isset($_POST['SelectedUser']) and $_POST['SelectedUser']<>'') {//If POST not empty: - $SelectedUser = mb_strtoupper($_POST['SelectedUser']); -} elseif(isset($_GET['SelectedUser']) and $_GET['SelectedUser']<>'') {//If GET not empty: - $SelectedUser = mb_strtoupper($_GET['SelectedUser']); -} else {// Unset empty SelectedUser: - unset($_GET['SelectedUser']); - unset($_POST['SelectedUser']); - unset($SelectedUser); -} - -if(isset($_POST['SelectedGLAccount'])) { - $SelectedGLAccount = mb_strtoupper($_POST['SelectedGLAccount']); -} elseif(isset($_GET['SelectedGLAccount'])) { - $SelectedGLAccount = mb_strtoupper($_GET['SelectedGLAccount']); -} else { - $SelectedGLAccount = ''; -/* unset($SelectedGLAccount);*/ -} - -if(isset($_GET['Cancel']) or isset($_POST['Cancel'])) { - unset($SelectedUser); - unset($SelectedGLAccount); -} - -if(!isset($SelectedUser)) {// If is NOT set a user for GL accounts. - echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/gl.png" title="',// Icon image. - _('User Authorised GL Accounts'), '" /> ',// Icon title. - _('User Authorised GL Accounts'), '</p>';// Page title. - - /* It could still be the second time the page has been run and a record has been selected for modification - SelectedGLAccount will exist because it was sent with the new call. If its the first time the page has been displayed with no parameters then none of the above are true. These will call the same page again and allow update/input or deletion of the records.*/ - - if(isset($_POST['Process'])) { - prnMsg(_('You have not selected any user'), 'error'); - } - echo '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', - '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', - '<table class="selection"> - <tr> - <td>', _('Select User'), ':</td> - <td><select name="SelectedUser" onchange="this.form.submit()">',// Submit when the value of the select is changed. - '<option value="">', _('Not Yet Selected'), '</option>'; - $Result = DB_query(" - SELECT - userid, - realname - FROM www_users - ORDER BY userid"); - while ($MyRow = DB_fetch_array($Result)) { - echo '<option '; - if(isset($SelectedUser) and $MyRow['userid'] == $SelectedUser) { - echo 'selected="selected" '; - } - echo 'value="', $MyRow['userid'], '">', $MyRow['userid'], ' - ', $MyRow['realname'], '</option>'; - }// End while loop. - echo '</select></td> - </tr> - </table>';//Close Select_User table. - - DB_free_result($Result); - - echo '<div class="centre noprint">',// Form buttons: - '<button name="Process" type="submit" value="Accept"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/user.png" /> ', _('Accept'), '</button> '; // "Accept" button. - -} else {// If is set a user for GL accounts ($SelectedUser). - $Result = DB_query(" - SELECT realname - FROM www_users - WHERE userid='" . $SelectedUser . "'"); - $MyRow = DB_fetch_array($Result); - $SelectedUserName = $MyRow['realname']; - echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/gl.png" title="',// Icon image. - _('User Authorised GL Accounts'), '" /> ',// Icon title. - _('Authorised GL Accounts for'), ' ', $SelectedUserName, '</p>';// Page title. - -// BEGIN: Needs $SelectedUser, $SelectedGLAccount: - if (isset($_POST['submit'])) { - $InputError = 0; - if ($_POST['SelectedGLAccount'] == '') { - $InputError = 1; - prnMsg(_('You have not selected an GL Account to be authorised for this user'), 'error'); - unset($SelectedGLAccount); - } - if ($InputError != 1) { - // First check the user is not being duplicated - $CheckResult = DB_query(" - SELECT count(*) - FROM glaccountusers - WHERE accountcode= '" . $_POST['SelectedGLAccount'] . "' - AND userid = '" . $SelectedUser . "'"); - $CheckRow = DB_fetch_row($CheckResult); - if ($CheckRow[0] > 0) { - $InputError = 1; - prnMsg(_('The GL Account') . ' ' . $SelectedGLAccount . ' ' . _('is already authorised for this user'), 'error'); - } else { - // Add new record on submit - $SQL = "INSERT INTO glaccountusers (accountcode, - userid, - canview, - canupd) - VALUES ('" . $SelectedGLAccount . "', - '" . $SelectedUser . "', - '1', - '1')"; - $Result = DB_query($SQL); - prnMsg(_('An access permission to a GL account was added') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); - unset($_POST['SelectedGLAccount']); - } - } - } elseif(isset($_GET['delete']) or isset($_POST['delete'])) { - $SQL = "DELETE FROM glaccountusers - WHERE accountcode='" . $SelectedGLAccount . "' - AND userid='" . $SelectedUser . "'"; - $ErrMsg = _('The GL Account user record could not be deleted because'); - $Result = DB_query($SQL, $ErrMsg); - prnMsg(_('An access permission to a GL account was removed') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); - unset($_GET['delete']); - unset($_POST['delete']); - } elseif(isset($_GET['ToggleUpdate']) or isset($_POST['ToggleUpdate'])) {// Can update (write) GL accounts flag. - if(isset($_GET['ToggleUpdate']) and $_GET['ToggleUpdate']<>'') {//If GET not empty. - $ToggleUpdate = $_GET['ToggleUpdate']; - } elseif(isset($_POST['ToggleUpdate']) and $_POST['ToggleUpdate']<>'') {//If POST not empty. - $ToggleUpdate = $_POST['ToggleUpdate']; - } - $SQL = "UPDATE glaccountusers - SET canupd='" . $ToggleUpdate . "' - WHERE accountcode='" . $SelectedGLAccount . "' - AND userid='" . $SelectedUser . "'"; - $ErrMsg = _('The GL Account user record could not be updated because'); - $Result = DB_query($SQL, $ErrMsg); - prnMsg(_('The access permission to update a GL account was modified') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); - unset($_GET['ToggleUpdate']); - unset($_POST['ToggleUpdate']); - } -// END: Needs $SelectedUser, $SelectedGLAccount. - - echo '<table class="selection"> - <thead> - <tr> - <th class="text">', _('Code'), '</th> - <th class="text">', _('Name'), '</th> - <th class="centre">', _('View'), '</th> - <th class="centre">', _('Update'), '</th> - <th class="noprint" colspan="2"> </th> - </tr> - </thead><tbody>'; - $Result = DB_query(" - SELECT - glaccountusers.accountcode, - canview, - canupd, - chartmaster.accountname - FROM glaccountusers INNER JOIN chartmaster - ON glaccountusers.accountcode=chartmaster.accountcode - WHERE glaccountusers.userid='" . $SelectedUser . "' - ORDER BY chartmaster.accountcode ASC"); - if(DB_num_rows($Result)>0) {// If the user has access permissions to one or more GL accounts: - $k = 0; //row colour counter - while ($MyRow = DB_fetch_array($Result)) { - if($k == 1) { - echo '<tr class="EvenTableRows">'; - $k = 0; - } else { - echo '<tr class="OddTableRows">'; - $k = 1; - } - echo '<td class="text">', $MyRow['accountcode'], '</td> - <td class="text">', $MyRow['accountname'], '</td> - <td class="centre">'; - if($MyRow['canview'] == 1) { - echo _('Yes'); - } else { - echo _('No'); - } - echo '</td> - <td class="centre">'; - - $ScriptName = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); - if($MyRow['canupd'] == 1) { - echo _('Yes'), '</td>', - '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&ToggleUpdate=0" onclick="return confirm(\'', _('Are you sure you wish to remove Update for this GL Account?'), '\');">', _('Remove Update'); - } else { - echo _('No'), '</td>', - '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&ToggleUpdate=1" onclick="return confirm(\'', _('Are you sure you wish to add Update for this GL Account?'), '\');">', _('Add Update'); - } - echo '</a></td>', - '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&delete=yes" onclick="return confirm(\'', _('Are you sure you wish to un-authorise this GL Account?'), '\');">', _('Un-authorise'), '</a></td>', - '</tr>'; - }// End while list loop. - } else {// If the user does not have access permissions to GL accounts: - echo '<tr><td class="centre" colspan="6">', _('User does not have access permissions to GL accounts'), '</td></tr>'; - } - echo '</tbody></table>', - '<br />', - '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', - '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', - '<input name="SelectedUser" type="hidden" value="', $SelectedUser, '" />', - '<br /> - <table class="selection noprint"> - <tr> - <td>'; - $Result = DB_query(" - SELECT - accountcode, - accountname - FROM chartmaster - WHERE NOT EXISTS (SELECT glaccountusers.accountcode - FROM glaccountusers - WHERE glaccountusers.userid='" . $SelectedUser . "' - AND glaccountusers.accountcode=chartmaster.accountcode) - ORDER BY accountcode"); - if(DB_num_rows($Result)>0) {// If the user does not have access permissions to one or more GL accounts: - echo _('Add access permissions to a GL account'), ':</td> - <td><select name="SelectedGLAccount">'; - if(!isset($_POST['SelectedGLAccount'])) { - echo '<option selected="selected" value="">', _('Not Yet Selected'), '</option>'; - } - while ($MyRow = DB_fetch_array($Result)) { - if(isset($_POST['SelectedGLAccount']) and $MyRow['accountcode'] == $_POST['SelectedGLAccount']) { - echo '<option selected="selected" value="'; - } else { - echo '<option value="'; - } - echo $MyRow['accountcode'], '">', $MyRow['accountcode'], ' - ', $MyRow['accountname'], '</option>'; - } - echo '</select></td> - <td><input type="submit" name="submit" value="Accept" />'; - } else {// If the user has access permissions to all GL accounts: - echo _('User has access permissions to all GL accounts'); - } - echo '</td> - </tr> - </table>'; - DB_free_result($Result); - echo '<br>', // Form buttons: - '<div class="centre noprint">', - '<button onclick="javascript:window.print()" type="button"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/printer.png" /> ', _('Print This'), '</button>', // "Print This" button. - '<button formaction="UserGLAccounts.php?Cancel" type="submit"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/user.png" /> ', _('Select A Different User'), '</button>'; // "Select A Different User" button. -} -echo '<button formaction="index.php?Application=GL" type="submit"><img alt="" src="', $RootPath, '/css/', $Theme, - '/images/previous.png" /> ', _('Return'), '</button>', // "Return" button. - '</div> - </form>'; - -include('includes/footer.inc'); -?> +<?php +/* $Id: UserGLAccounts.php 7427 2015-12-27 19:59:10Z rchacon $*/ +/* Maintenance of GL Accounts allowed for a user. */ + +include('includes/session.inc'); +$Title = _('User Authorised GL Accounts'); +$ViewTopic = 'GeneralLedger'; +$BookMark = 'UserGLAccounts'; +include('includes/header.inc'); + +if(isset($_POST['SelectedUser']) and $_POST['SelectedUser']<>'') {//If POST not empty: + $SelectedUser = mb_strtoupper($_POST['SelectedUser']); +} elseif(isset($_GET['SelectedUser']) and $_GET['SelectedUser']<>'') {//If GET not empty: + $SelectedUser = mb_strtoupper($_GET['SelectedUser']); +} else {// Unset empty SelectedUser: + unset($_GET['SelectedUser']); + unset($_POST['SelectedUser']); + unset($SelectedUser); +} + +if(isset($_POST['SelectedGLAccount'])) { + $SelectedGLAccount = mb_strtoupper($_POST['SelectedGLAccount']); +} elseif(isset($_GET['SelectedGLAccount'])) { + $SelectedGLAccount = mb_strtoupper($_GET['SelectedGLAccount']); +} else { + $SelectedGLAccount = '';/*// Unset empty SelectedGLAccount: + unset($_GET['SelectedGLAccount']); + unset($_POST['SelectedGLAccount']); + unset($SelectedGLAccount);*/ +} + +if(isset($_GET['Cancel']) or isset($_POST['Cancel'])) { + unset($SelectedUser); + unset($SelectedGLAccount); +} + +if(!isset($SelectedUser)) {// If is NOT set a user for GL accounts. + echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" title="',// Icon image. + _('User Authorised GL Accounts'), '" /> ',// Icon title. + _('User Authorised GL Accounts'), '</p>';// Page title. + + /* It could still be the second time the page has been run and a record has been selected for modification - SelectedGLAccount will exist because it was sent with the new call. If its the first time the page has been displayed with no parameters then none of the above are true. These will call the same page again and allow update/input or deletion of the records.*/ + + if(isset($_POST['Process'])) { + prnMsg(_('You have not selected any user'), 'error'); + } + echo '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', + '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', + '<table class="selection"> + <tr> + <td>', _('Select User'), ':</td> + <td><select name="SelectedUser" onchange="this.form.submit()">',// Submit when the value of the select is changed. + '<option value="">', _('Not Yet Selected'), '</option>'; + $Result = DB_query(" + SELECT + userid, + realname + FROM www_users + ORDER BY userid"); + while ($MyRow = DB_fetch_array($Result)) { + echo '<option '; + if(isset($SelectedUser) and $MyRow['userid'] == $SelectedUser) { + echo 'selected="selected" '; + } + echo 'value="', $MyRow['userid'], '">', $MyRow['userid'], ' - ', $MyRow['realname'], '</option>'; + }// End while loop. + echo '</select></td> + </tr> + </table>';//Close Select_User table. + + DB_free_result($Result); + + echo '<div class="centre noprint">',// Form buttons: + '<button name="Process" type="submit" value="Accept"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/user.png" /> ', _('Accept'), '</button> '; // "Accept" button. + +} else {// If is set a user for GL accounts ($SelectedUser). + $Result = DB_query(" + SELECT realname + FROM www_users + WHERE userid='" . $SelectedUser . "'"); + $MyRow = DB_fetch_array($Result); + $SelectedUserName = $MyRow['realname']; + echo '<p class="page_title_text"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/gl.png" title="',// Icon image. + _('User Authorised GL Accounts'), '" /> ',// Icon title. + _('Authorised GL Accounts for'), ' ', $SelectedUserName, '</p>';// Page title. + + // BEGIN: Needs $SelectedUser, $SelectedGLAccount: + if(isset($_POST['submit'])) { + if(!isset('SelectedGLAccount')) { + prnMsg(_('You have not selected an GL Account to be authorised for this user'), 'error'); + } else { + // First check the user is not being duplicated + $CheckResult = DB_query(" + SELECT count(*) + FROM glaccountusers + WHERE accountcode= '" . $_POST['SelectedGLAccount'] . "' + AND userid = '" . $SelectedUser . "'"); + $CheckRow = DB_fetch_row($CheckResult); + if($CheckRow[0] > 0) { + prnMsg(_('The GL Account') . ' ' . $SelectedGLAccount . ' ' . _('is already authorised for this user'), 'error'); + } else { + // Add new record on submit + $SQL = "INSERT INTO glaccountusers ( + accountcode, + userid, + canview, + canupd + ) VALUES ('" . + $SelectedGLAccount . "','" . + $SelectedUser . "', + '1', + '1')"; + $ErrMsg = _('An access permission to a GL account could not be added'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission to a GL account was added') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); + unset($_GET['SelectedGLAccount']); + unset($_POST['SelectedGLAccount']); + } + } + } + } elseif(isset($_GET['delete']) or isset($_POST['delete'])) { + $SQL = "DELETE FROM glaccountusers + WHERE accountcode='" . $SelectedGLAccount . "' + AND userid='" . $SelectedUser . "'"; + $ErrMsg = _('An access permission to a GL account could not be removed'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission to a GL account was removed') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); + unset($_GET['delete']); + unset($_POST['delete']); + } + } elseif(isset($_GET['ToggleUpdate']) or isset($_POST['ToggleUpdate'])) {// Can update (write) GL accounts flag. + if(isset($_GET['ToggleUpdate']) and $_GET['ToggleUpdate']<>'') {//If GET not empty. + $ToggleUpdate = $_GET['ToggleUpdate']; + } elseif(isset($_POST['ToggleUpdate']) and $_POST['ToggleUpdate']<>'') {//If POST not empty. + $ToggleUpdate = $_POST['ToggleUpdate']; + } + $SQL = "UPDATE glaccountusers + SET canupd='" . $ToggleUpdate . "' + WHERE accountcode='" . $SelectedGLAccount . "' + AND userid='" . $SelectedUser . "'"; + $ErrMsg = _('An access permission to update a GL account could not be modified'); + if(DB_query($SQL, $ErrMsg)) { + prnMsg(_('An access permission to update a GL account was modified') . '. ' . _('User') . ': ' . $SelectedUser . '. ' . _('GL Account') . ': ' . $SelectedGLAccount . '.', 'success'); + unset($_GET['ToggleUpdate']); + unset($_POST['ToggleUpdate']); + } + } +// END: Needs $SelectedUser, $SelectedGLAccount. + + echo '<table class="selection"> + <thead> + <tr> + <th class="text">', _('Code'), '</th> + <th class="text">', _('Name'), '</th> + <th class="centre">', _('View'), '</th> + <th class="centre">', _('Update'), '</th> + <th class="noprint" colspan="2"> </th> + </tr> + </thead><tbody>'; + $Result = DB_query(" + SELECT + glaccountusers.accountcode, + canview, + canupd, + chartmaster.accountname + FROM glaccountusers INNER JOIN chartmaster + ON glaccountusers.accountcode=chartmaster.accountcode + WHERE glaccountusers.userid='" . $SelectedUser . "' + ORDER BY chartmaster.accountcode ASC"); + if(DB_num_rows($Result)>0) {// If the user has access permissions to one or more GL accounts: + $k = 0; //row colour counter + while ($MyRow = DB_fetch_array($Result)) { + if($k == 1) { + echo '<tr class="EvenTableRows">'; + $k = 0; + } else { + echo '<tr class="OddTableRows">'; + $k = 1; + } + echo '<td class="text">', $MyRow['accountcode'], '</td> + <td class="text">', $MyRow['accountname'], '</td> + <td class="centre">'; + if($MyRow['canview'] == 1) { + echo _('Yes'); + } else { + echo _('No'); + } + echo '</td> + <td class="centre">'; + + $ScriptName = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); + if($MyRow['canupd'] == 1) { + echo _('Yes'), '</td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&ToggleUpdate=0" onclick="return confirm(\'', _('Are you sure you wish to remove Update for this GL Account?'), '\');">', _('Remove Update'); + } else { + echo _('No'), '</td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&ToggleUpdate=1" onclick="return confirm(\'', _('Are you sure you wish to add Update for this GL Account?'), '\');">', _('Add Update'); + } + echo '</a></td>', + '<td class="noprint"><a href="', $ScriptName, '?SelectedUser=', $SelectedUser, '&SelectedGLAccount=', $MyRow['accountcode'], '&delete=yes" onclick="return confirm(\'', _('Are you sure you wish to un-authorise this GL Account?'), '\');">', _('Un-authorise'), '</a></td>', + '</tr>'; + }// End while list loop. + } else {// If the user does not have access permissions to GL accounts: + echo '<tr><td class="centre" colspan="6">', _('User does not have access permissions to GL accounts'), '</td></tr>'; + } + echo '</tbody></table>', + '<br />', + '<form action="', htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'), '" method="post">', + '<input name="FormID" type="hidden" value="', $_SESSION['FormID'], '" />', + '<input name="SelectedUser" type="hidden" value="', $SelectedUser, '" />', + '<br /> + <table class="selection noprint"> + <tr> + <td>'; + $Result = DB_query(" + SELECT + accountcode, + accountname + FROM chartmaster + WHERE NOT EXISTS (SELECT glaccountusers.accountcode + FROM glaccountusers + WHERE glaccountusers.userid='" . $SelectedUser . "' + AND glaccountusers.accountcode=chartmaster.accountcode) + ORDER BY accountcode"); + if(DB_num_rows($Result)>0) {// If the user does not have access permissions to one or more GL accounts: + echo _('Add access permissions to a GL account'), ':</td> + <td><select name="SelectedGLAccount">'; + if(!isset($_POST['SelectedGLAccount'])) { + echo '<option selected="selected" value="">', _('Not Yet Selected'), '</option>'; + } + while ($MyRow = DB_fetch_array($Result)) { + if(isset($_POST['SelectedGLAccount']) and $MyRow['accountcode'] == $_POST['SelectedGLAccount']) { + echo '<option selected="selected" value="'; + } else { + echo '<option value="'; + } + echo $MyRow['accountcode'], '">', $MyRow['accountcode'], ' - ', $MyRow['accountname'], '</option>'; + } + echo '</select></td> + <td><input type="submit" name="submit" value="Accept" />'; + } else {// If the user has access permissions to all GL accounts: + echo _('User has access permissions to all GL accounts'); + } + echo '</td> + </tr> + </table>'; + DB_free_result($Result); + echo '<br>', // Form buttons: + '<div class="centre noprint">', + '<button onclick="javascript:window.print()" type="button"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/printer.png" /> ', _('Print This'), '</button>', // "Print This" button. + '<button formaction="UserGLAccounts.php?Cancel" type="submit"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/user.png" /> ', _('Select A Different User'), '</button>'; // "Select A Different User" button. +} +echo '<button formaction="index.php?Application=GL" type="submit"><img alt="" src="', $RootPath, '/css/', $Theme, + '/images/previous.png" /> ', _('Return'), '</button>', // "Return" button. + '</div> + </form>'; + +include('includes/footer.inc'); +?> Modified: trunk/doc/Manual/ManualGeneralLedger.html =================================================================== --- trunk/doc/Manual/ManualGeneralLedger.html 2015-12-28 03:50:00 UTC (rev 7432) +++ trunk/doc/Manual/ManualGeneralLedger.html 2015-12-29 18:06:35 UTC (rev 7433) @@ -406,15 +406,20 @@ <div class="floatright"><a class="minitext" href="#top">⬆ Top</a></div> <h2>Maintenance</h2> -<!--h3><a id="GLAccountUsers">GL Accounts Authorised Users</a></h3> -<p>.</p--> +<h3><a id="GLAccountUsers">GL Accounts Authorised Users</a></h3> +<p>This software has methods to assign permissions or access rights to specific users and groups of users. The system controls the ability of the users to view or make changes to the contents of the GL accounts.</p> +<p>With this script, you can change a specific GL account access permissions for users:</p> +<ul> +<li>You can add or remove the read permission for each user that grants or denies his ability to view that GL account.</li> +<li>You can add or remove the write permission for each user that grants or denies the ability to update that GL account.</li> +</ul> <h3><a id="UserGLAccounts">User Authorised GL Accounts</a></h3> <p>This software has methods to assign permissions or access rights to specific users and groups of users. The system controls the ability of the users to view or make changes to the contents of the GL accounts.</p> <p>With this script, you can change a specific user access permissions to GL accounts:</p> <ul> -<li>You can add or remove the read permission for each GL account that grants or denies the ability of a user to view it.</li> -<li>You can add or remove the write permission for each GL account that grants or denies the ability of a user to update it.</li> +<li>You can add or remove the read permission for each GL account that grants or denies the ability of that user to view it.</li> +<li>You can add or remove the write permission for each GL account that grants or denies the ability of that user to update it.</li> </ul> <!--h3><a id="BankAccounts.php">Bank Accounts</a></h3> |