Re: [Web-erp-svn] SF.net SVN: web-erp:[7605] trunk

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: [Web-erp-svn] SF.net SVN: web-erp:[7605] trunk

Pak Ricard
Hi Exson:

Sorry for the delay, but just today I checked this new script and I think it has a major issue (that can lead to accounting errors): it is not multicurrency-coded.

It allows to transfer amounts from any currency tab to ant other, without the proper exchange rates. We could move 1.000.000 IDR into 1.000.000 USD, which would be nice but it's not correct.

Probably restricting the "Tab To" drop down list to the tabs with the same currency as the "from" would do the trick, as we probably don't want employees to run their own exchange-currency side-business.

Also, could you please let us know which is the situation where this script is used? If company assigns X money to user A and Y money to user B, is it ok for user A to send money to user B? Why not company assigning less to A and more to B? Or is there any situation I'm missing?
 


Regards,
Ricard

2016-08-31 18:58 GMT+08:00 Tim Schofield <[hidden email]>:
Hi Exson, what is the use case for this script? Is it wise to have
funds allocated for one purpose to then be transferred for another
completely different use?

Tim

On 31 August 2016 at 07:32,  <[hidden email]> wrote:
> Revision: 7605
>           http://sourceforge.net/p/web-erp/reponame/7605
> Author:   exsonqu
> Date:     2016-08-31 06:32:57 +0000 (Wed, 31 Aug 2016)
> Log Message:
> -----------
> 31/08/16 Exson: Addd new feature assign cash from one tab to another.
>
> Modified Paths:
> --------------
>     trunk/includes/MainMenuLinksArray.php
>     trunk/sql/mysql/upgrade4.13-4.13.1.sql
>
> Added Paths:
> -----------
>     trunk/PcAssignCashTabToTab.php
>
> Added: trunk/PcAssignCashTabToTab.php
> ===================================================================
> --- trunk/PcAssignCashTabToTab.php                              (rev 0)
> +++ trunk/PcAssignCashTabToTab.php      2016-08-31 06:32:57 UTC (rev 7605)
> @@ -0,0 +1,393 @@
> +<?php
> +
> +include('includes/session.inc');
> +$Title = _('Assignment of Cash From Tab To Tab');
> +/* webERP manual links before header.inc */
> +$ViewTopic= 'PettyCash';
> +$BookMark = 'CashAssignment';
> +include('includes/header.inc');
> +
> +if (isset($_POST['SelectedTabs'])){
> +       $SelectedTabs = mb_strtoupper($_POST['SelectedTabs']);
> +} elseif (isset($_GET['SelectedTabs'])){
> +       $SelectedTabs = mb_strtoupper($_GET['SelectedTabs']);
> +}
> +
> +if (isset($_POST['Days'])){
> +       $Days = $_POST['Days'];
> +} elseif (isset($_GET['Days'])){
> +       $Days = $_GET['Days'];
> +}
> +
> +if (isset($_POST['Cancel'])) {
> +       unset($SelectedTabs);
> +       unset($Days);
> +       unset($_POST['Amount']);
> +       unset($_POST['Notes']);
> +       unset($_POST['Receipt']);
> +}
> +
> +if (isset($_POST['Process'])) {
> +       if ($SelectedTabs=='') {
> +               prnMsg(_('You Must First Select a Petty Cash Tab To Assign Cash'),'error');
> +               unset($SelectedTabs);
> +       }
> +       if ($SelectedTabs == mb_strtoupper($_POST['SelectedTabsTo'])) {
> +               prnMsg(_('The Tab selected From should not be the same as the selected To'),'error');
> +               unset($SelectedTabs);
> +               unset($_POST['SelectedTabsTo']);
> +               unset($_POST['Process']);
> +       }
> +}
> +
> +if (isset($_POST['Go'])) {
> +       $InputError = 0;
> +       if ($Days<=0) {
> +               $InputError = 1;
> +               prnMsg(_('The number of days must be a positive number'),'error');
> +               $Days=30;
> +       }
> +}
> +
> +if (isset($_POST['submit'])) {
> +       //initialise no input errors assumed initially before we test
> +       $InputError = 0;
> +
> +       echo '<p class="page_title_text"><img src="'.$RootPath.'/css/'.$Theme.'/images/money_add.png" title="' .
> +               _('Search') . '" alt="" />' . ' ' . $Title. '</p>';
> +
> +       /* actions to take once the user has clicked the submit button
> +       ie the page has called itself with some user input */
> +
> +       $i=1;
> +
> +       if ($_POST['Amount']==0) {
> +               $InputError = 1;
> +               prnMsg('<br />' . _('The Amount must be input'),'error');
> +       }
> +
> +       $sqlLimit = "SELECT tablimit,tabcode
> +                               FROM pctabs
> +                               WHERE tabcode IN ('" . $SelectedTabs . "','" . $_POST['SelectedTabsTo'] . "')";
> +
> +       $ResultLimit = DB_query($sqlLimit,$db);
> +       while ($LimitRow=DB_fetch_array($ResultLimit)){
> +               if ($LimitRow['tabcode'] == $SelectedTabs) {
> +                       if (($_POST['CurrentAmount']+$_POST['Amount'])>$LimitRow['tablimit']){
> +                               $InputError = 1;
> +                               prnMsg(_('The balance after this assignment would be greater than the specified limit for this PC tab') . ' ' . $LimitRow[1],'error');
> +                       }
> +               }  elseif ($_POST['SelectedTabsToAmt'] - $_POST['Amount']>$LimitRow['tablimit']) {
> +                               $InputError = 1;
> +                               prnMsg(_('The balance after this assignment would be greater than the specified limit for this PC tab') . ' ' . $LimitRow[1],'error');
> +               }
> +       }
> +
> +       if ($InputError !=1 ) {
> +               // Add these 2 new record on submit
> +               $sql = "INSERT INTO pcashdetails
> +                                       (counterindex,
> +                                       tabcode,
> +                                       date,
> +                                       codeexpense,
> +                                       amount,
> +                                       authorized,
> +                                       posted,
> +                                       notes,
> +                                       receipt)
> +                       VALUES (NULL,
> +                                       '" . $_POST['SelectedTabs'] . "',
> +                                       '".FormatDateForSQL($_POST['Date'])."',
> +                                       'ASSIGNCASH',
> +                                       '" . filter_number_format($_POST['Amount']) . "',
> +                                       '0000-00-00',
> +                                       '0',
> +                                       '" . $_POST['Notes'] . "',
> +                                       '" . $_POST['Receipt'] . "'
> +                               ),
> +                               (NULL,
> +                                       '" . $_POST['SelectedTabsTo'] . "',
> +                                       '" . FormatDateForSQL($_POST['Date']) . "',
> +                                       'ASSIGNCASH',
> +                                       '" . filter_number_format(-$_POST['Amount']) . "',
> +                                       '0000-00-00',
> +                                       '0',
> +                                       '" . $_POST['Notes'] . "',
> +                                       '" . $_POST['Receipt'] . "')";
> +               $msg = _('Assignment of cash from PC Tab ') . ' ' . $_POST['SelectedTabs'] .  ' ' . _('to') . $_POST['SelectedTabsTo'] . ' ' . _('has been created');
> +       }
> +
> +       if ( $InputError !=1) {
> +               //run the SQL from either of the above possibilites
> +               $result = DB_query($sql,$db);
> +               prnMsg($msg,'success');
> +               unset($_POST['SelectedExpense']);
> +               unset($_POST['Amount']);
> +               unset($_POST['Notes']);
> +               unset($_POST['Receipt']);
> +               unset($_POST['SelectedTabs']);
> +               unset($_POST['Date']);
> +       }
> +
> +}
> +
> +if (!isset($SelectedTabs)){
> +
> +       echo '<p class="page_title_text"><img src="'.$RootPath.'/css/'.$Theme.'/images/money_add.png" title="' .
> +               _('Search') . '" alt="" />' . ' ' . $Title. '</p>';
> +
> +       echo '<form method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8') . '">';
> +    echo '<div>';
> +       echo '<input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" />';
> +
> +       $SQL = "SELECT tabcode
> +                       FROM pctabs
> +                       WHERE assigner='" . $_SESSION['UserID'] . "'
> +                       ORDER BY tabcode";
> +
> +       $result = DB_query($SQL,$db);
> +
> +    echo '<br /><table class="selection">'; //Main table
> +
> +    echo '<tr><td>' . _('Petty Cash Tab To Assign Cash From') . ':</td>
> +            <td><select name="SelectedTabs">';
> +       while ($myrow = DB_fetch_array($result)) {
> +               if (isset($_POST['SelectTabs']) and $myrow['tabcode']==$_POST['SelectTabs']) {
> +                       echo '<option selected="selected" value="';
> +               } else {
> +                       echo '<option value="';
> +               }
> +               echo $myrow['tabcode'] . '">' . $myrow['tabcode'] . '</option>';
> +       }
> +
> +       echo '</select></td></tr>';
> +  echo '<tr><td>' . _('Petty Cash Tab To Assign Cash To') . ':</td>
> +         <td><select name="SelectedTabsTo">';
> +       DB_data_seek($result,0);
> +       while ($myrow = DB_fetch_array($result)) {
> +               if (isset($_POST['SelectTabsTo']) AND $myrow['tabcode'] == $_POST['SelectTabs']) {
> +                       echo '<option selected="selected" value="';
> +               } else {
> +                       echo '<option value="';
> +               }
> +               echo $myrow['tabcode'] . '">' . $myrow['tabcode'] . '</option>';
> +       }
> +       echo '</select></td></tr>';
> +       echo '</table>'; // close main table
> +    DB_free_result($result);
> +
> +       echo '<br />
> +               <div class="centre">
> +                       <input type="submit" name="Process" value="' . _('Accept') . '" />
> +                       <input type="submit" name="Cancel" value="' . _('Cancel') . '" />
> +               </div>';
> +       echo '</div>
> +          </form>';
> +}
> +
> +//end of ifs and buts!
> +if (isset($_POST['Process']) OR isset($SelectedTabs)) {
> +
> +       if (!isset($_POST['submit'])) {
> +               echo '<p class="page_title_text"><img src="'.$RootPath.'/css/'.$Theme.'/images/money_add.png" title="' .
> +                       _('Search') . '" alt="" />' . ' ' . $Title. '</p>';
> +       }
> +       echo '<br /><div class="centre"><a href="' . htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8') . '">' . _('Select another tab') . '</a></div>';
> +
> +
> +
> +       if (! isset($_GET['edit']) OR isset ($_POST['GO'])){
> +
> +               if (isset($_POST['Cancel'])) {
> +                       unset($_POST['Amount']);
> +                       unset($_POST['Date']);
> +                       unset($_POST['Notes']);
> +                       unset($_POST['Receipt']);
> +               }
> +
> +               if(!isset ($Days)){
> +                       $Days=30;
> +                }
> +
> +               /* Retrieve decimal places to display */
> +               $SqlDecimalPlaces="SELECT decimalplaces
> +                                       FROM currencies,pctabs
> +                                       WHERE currencies.currabrev = pctabs.currency
> +                                               AND tabcode='" . $SelectedTabs . "'";
> +               $result = DB_query($SqlDecimalPlaces,$db);
> +               $myrow=DB_fetch_array($result);
> +               $CurrDecimalPlaces = $myrow['decimalplaces'];
> +
> +               $sql = "SELECT * FROM pcashdetails
> +                               WHERE tabcode='" . $SelectedTabs . "'
> +                               AND date >=DATE_SUB(CURDATE(), INTERVAL " . $Days . " DAY)
> +                               ORDER BY date, counterindex ASC";
> +               $result = DB_query($sql,$db);
> +
> +               echo '<form method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8') . '">
> +                       <div>
> +                               <input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" />
> +                               <table class="selection">
> +                               <tr>
> +                                       <th colspan="8">' . _('Detail Of PC Tab Movements For Last') .':
> +                                               <input type="hidden" name="SelectedTabs" value="' . $SelectedTabs . '" />
> +                                               <input type="text" class="number" name="Days" value="' . $Days  . '" maxlength="3" size="4" /> ' . _('Days') . '
> +                                               <input type="submit" name="Go" value="' . _('Go') . '" /></th>
> +                               </tr>
> +                               <tr>
> +                                       <th>' . _('Date') . '</th>
> +                                       <th>' . _('Expense Code') . '</th>
> +                                       <th>' . _('Amount') . '</th>
> +                                       <th>' . _('Authorised') . '</th>
> +                                       <th>' . _('Notes') . '</th>
> +                                       <th>' . _('Receipt') . '</th>
> +                               </tr>';
> +
> +               $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;
> +               }
> +
> +               $sqldes="SELECT description
> +                                       FROM pcexpenses
> +                                       WHERE codeexpense='". $myrow['3'] . "'";
> +
> +               $ResultDes = DB_query($sqldes,$db);
> +               $Description=DB_fetch_array($ResultDes);
> +
> +               if (!isset($Description['0'])){
> +                       $Description['0']='ASSIGNCASH';
> +               }
> +
> +               if (($myrow['authorized'] == '0000-00-00') and ($Description['0'] == 'ASSIGNCASH')){
> +                       // only cash assignations NOT authorized can be modified or deleted
> +                       echo '<td>' . ConvertSQLDate($myrow['date']) . '</td>
> +                               <td>' . $Description['0'] . '</td>
> +                               <td class="number">' . locale_number_format($myrow['amount'],$CurrDecimalPlaces) . '</td>
> +                               <td>' . ConvertSQLDate($myrow['authorized']) . '</td>
> +                               <td>' . $myrow['notes'] . '</td>
> +                               <td>' . $myrow['receipt'] . '</td>
> +                               </tr>';
> +               }else{
> +                       echo '<td>' . ConvertSQLDate($myrow['date']) . '</td>
> +                               <td>' . $Description['0'] . '</td>
> +                               <td class="number">' . locale_number_format($myrow['amount'],$CurrDecimalPlaces) . '</td>
> +                               <td>' . ConvertSQLDate($myrow['authorized']) . '</td>
> +                               <td>' . $myrow['notes'] . '</td>
> +                               <td>' . $myrow['receipt'] . '</td>
> +                               </tr>';
> +               }
> +       }
> +               //END WHILE LIST LOOP
> +
> +               $sqlamount="SELECT sum(amount) as amt,
> +                                       tabcode
> +                                       FROM pcashdetails
> +                                       WHERE tabcode IN ('".$SelectedTabs."','" . $_POST['SelectedTabsTo'] . "')
> +                                       GROUP BY tabcode";
> +
> +               $ResultAmount = DB_query($sqlamount,$db);
> +               if (DB_num_rows($ResultAmount)>0) {
> +                       while ($AmountRow=DB_fetch_array($ResultAmount)) {
> +                               if (is_null($AmountRow['amt'])) {
> +                                       $AmountRow['amt'] = 0;
> +                               }
> +                               if ($AmountRow['tabcode'] == $SelectedTabs) {
> +                                       $SelectedTab = array($AmountRow['amt'],$SelectedTabs);
> +                               } else {
> +                                       $SelectedTabsTo = array($AmountRow['amt'],$_POST['SelectedTabsTo']);
> +                               }
> +                       }
> +               }
> +               if (!isset($SelectedTab)) {
> +                       $SelectedTab = array(0,$SelectedTabs);
> +                       $SelectedTabsTo = array(0,$_POST['SelectedTabsTo']);
> +               }
> +
> +
> +
> +               echo '<tr>
> +                               <td colspan="2" style="text-align:right"><b>' . _('Current balance') . ':</b></td>
> +                               <td>' . locale_number_format($SelectedTab['0'],$CurrDecimalPlaces) . '</td></tr>
> +                               <input type="hidden" name="CurrentAmount" value="' . $SelectedTab[0] . '" />
> +                               <input type="hidden" name="SelectedTabs" value="' . $SelectedTab[1] . '" />
> +                               <input type="hidden" name="SelectedTabsTo" value="' . $SelectedTabsTo[1] . '" />
> +                               <input type="hidden" name="SelectedTabsToAmt" value="' . $SelectedTabsTo[0] . '" />';
> +
> +
> +               echo '</table>';
> +        echo '</div>
> +              </form>';
> +       }
> +
> +
> +
> +               echo '<form method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8') .'">
> +                       <div>
> +                               <input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" />';
> +
> +/* Ricard: needs revision of this date initialization */
> +               if (!isset($_POST['Date'])) {
> +                       $_POST['Date']=Date($_SESSION['DefaultDateFormat']);
> +               }
> +
> +        echo '<br />
> +                               <table class="selection">'; //Main table
> +            echo '<tr>
> +                                       <th colspan="2"><h3>' . _('New Cash Assignment') . '</h3></th>
> +                               </tr>';
> +               echo '<tr>
> +                               <td>' . _('Cash Assignation Date') . ':</td>
> +                               <td><input type="text" class="date" alt="'.$_SESSION['DefaultDateFormat'].'" name="Date" required="required" autofocus="autofocus" size="10" maxlength="10" value="' . $_POST['Date'] . '" /></td>
> +                       </tr>';
> +
> +
> +               if (!isset($_POST['Amount'])) {
> +                       $_POST['Amount']=0;
> +               }
> +
> +               echo '<tr>
> +                               <td>' . _('Amount') . ':</td>
> +                               <td><input type="text" class="number" name="Amount" size="12" maxlength="11" value="' . locale_number_format($_POST['Amount'],$CurrDecimalPlaces) . '" /></td>
> +                       </tr>';
> +
> +               if (!isset($_POST['Notes'])) {
> +                       $_POST['Notes']='';
> +               }
> +
> +               echo '<tr>
> +                               <td>' . _('Notes') . ':</td>
> +                               <td><input type="text" name="Notes" size="50" maxlength="49" value="' . $_POST['Notes'] . '" /></td>
> +                       </tr>';
> +
> +               if (!isset($_POST['Receipt'])) {
> +                       $_POST['Receipt']='';
> +               }
> +
> +               echo '<tr>
> +                               <td>' . _('Receipt') . ':</td>
> +                               <td><input type="text" name="Receipt" size="50" maxlength="49" value="' . $_POST['Receipt'] . '" /></td>
> +                       </tr>
> +                       </table>
> +                       <input type="hidden" name="CurrentAmount" value="' . $SelectedTab['0']. '" />
> +                       <input type="hidden" name="SelectedTabs" value="' . $SelectedTabs . '" />
> +                       <input type="hidden" name="Days" value="' .$Days. '" />
> +                       <input type="hidden" name="SelectedTabsTo" value="' . $SelectedTabsTo[1] . '" />
> +                       <input type="hidden" name="SelectedTabsToAmt" value="' . $SelectedTabsTo[0] . '" />
> +                       <br />
> +                       <div class="centre">
> +                               <input type="submit" name="submit" value="' . _('Accept') . '" />
> +                               <input type="submit" name="Cancel" value="' . _('Cancel') . '" /></div>
> +                       </div>
> +               </form>';
> +
> +}
> +
> +include('includes/footer.inc');
> +?>
>
> Modified: trunk/includes/MainMenuLinksArray.php
> ===================================================================
> --- trunk/includes/MainMenuLinksArray.php       2016-08-25 21:05:53 UTC (rev 7604)
> +++ trunk/includes/MainMenuLinksArray.php       2016-08-31 06:32:57 UTC (rev 7605)
> @@ -446,10 +446,12 @@
>                                                                                                 '/MaintenanceTasks.php');
>
>  $MenuItems['PC']['Transactions']['Caption'] = array(_('Assign Cash to PC Tab'),
> +                                                       _('Cash Transfer Between Tabs'),
>                                                                                                         _('Claim Expenses From PC Tab'),
>                                                                                                         _('Expenses Authorisation'));
>
>  $MenuItems['PC']['Transactions']['URL'] = array('/PcAssignCashToTab.php',
> +                                               '/PcAssignCashTabToTab.php',
>                                                                                                 '/PcClaimExpensesFromTab.php',
>                                                                                                 '/PcAuthorizeExpenses.php');
>
>
> Modified: trunk/sql/mysql/upgrade4.13-4.13.1.sql
> ===================================================================
> --- trunk/sql/mysql/upgrade4.13-4.13.1.sql      2016-08-25 21:05:53 UTC (rev 7604)
> +++ trunk/sql/mysql/upgrade4.13-4.13.1.sql      2016-08-31 06:32:57 UTC (rev 7605)
> @@ -8,5 +8,6 @@
>  -- standardise transaction date to DATE type:
>  ALTER TABLE `debtortrans` CHANGE `trandate` `trandate` DATE NOT NULL DEFAULT '0000-00-00';
>  ALTER table supplierdiscounts CONVERT TO CHARACTER SET utf8;
> +INSERT INTO scripts VALUES ('PcAssignCashTabToTab.php',12,'Assign cash from one tab to another');
>
>
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Web-erp-svn mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/web-erp-svn
>



--
Course View Towers,
Plot 21 Yusuf Lule Road,
Kampala
T   <a href="tel:%2B256%20%280%29%20312%20314%20418" value="+256312314418">+256 (0) 312 314 418
M <a href="tel:%2B256%20%280%29%20752%20963%20325" value="+256752963325">+256 (0) 752 963 325
www.weberpafrica.com
Twitter: @TimSchofield2
Blog: http://weberpafrica.blogspot.co.uk/


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Web-erp-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/web-erp-developers
Reply | Threaded
Open this post in threaded view
|

Re: [Web-erp-svn] SF.net SVN: web-erp:[7605] trunk

ExsonQu
Administrator
Hi, Richard,

             Thank you for review the script.
             I've overlook the multiple currency situation.
             The scenario for this is that sometime manager has no time to assign money to members under him. So he assigned all of those money to a clerk and then the clerk allocate the money to other members.
             I'll find sometime to check the multiple currency issue later.
             My notebook just be recovered from network card problem, sorry for the late reply.
             Thanks and best regards!
             Exson