Added Revenue / Cost Accruals to be included in core FA
authorJoe Hunt <joe.hunt.consulting@gmail.com>
Mon, 19 Jul 2010 00:16:46 +0000 (00:16 +0000)
committerJoe Hunt <joe.hunt.consulting@gmail.com>
Mon, 19 Jul 2010 00:16:46 +0000 (00:16 +0000)
CHANGELOG.txt
applications/generalledger.php
gl/accruals.php [new file with mode: 0644]
gl/view/accrual_trans.php [new file with mode: 0644]
includes/access_levels.inc

index f22531ce66e50318300ec08007419675c6f57f16..74cba8672a8bcc234c96cb97f533329dfc10777c 100644 (file)
@@ -19,6 +19,13 @@ Legend:
 ! -> Note
 $ -> Affected files
 
+19-Jul-2010 Joe Hunt
++ Added Revenue / Cost Accruals to be included in core FA
+$ /applications/generalledger.php
+  /gl/accruals.php (new file)
+  /gl/view/accrual_trans.php (new file)
+  /includes/access_levels.inc
+  
 18-Jul-2010 Janusz Dobrowolski
 ! Improved key_in_foreign_table to check multiply tables
 $ /admin/db/company_db.inc
index ce22dec384ee1c259b94bfaa7d60c639963f4acf..1bbea0d4c5779a0e65b2d69b3d0019d4ff1bd308 100644 (file)
@@ -1,17 +1,17 @@
 <?php
 /**********************************************************************
     Copyright (C) FrontAccounting, LLC.
-       Released under the terms of the GNU General Public License, GPL, 
-       as published by the Free Software Foundation, either version 3 
+       Released under the terms of the GNU General Public License, GPL,
+       as published by the Free Software Foundation, either version 3
        of the License, or (at your option) any later version.
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
-class general_ledger_app extends application 
+class general_ledger_app extends application
 {
-       function general_ledger_app() 
+       function general_ledger_app()
        {
                $this->application("GL", _($this->help_context = "&Banking and General Ledger"));
 
@@ -28,7 +28,9 @@ class general_ledger_app extends application
                        "gl/gl_budget.php?", 'SA_BUDGETENTRY');
                $this->add_rapp_function(0, _("&Reconcile Bank Account"),
                        "gl/bank_account_reconcile.php?", 'SA_RECONCILE');
-                       
+               $this->add_rapp_function(0, _("Revenue / &Costs Accruals"),
+                       "gl/accruals.php?", 'SA_ACCRUALS');
+
                $this->add_module(_("Inquiries and Reports"));
                $this->add_lapp_function(1, _("&Journal Inquiry"),
                        "gl/inquiry/journal_inquiry.php?", 'SA_GLANALYTIC');
@@ -44,7 +46,7 @@ class general_ledger_app extends application
                $this->add_rapp_function(1, _("Balance &Sheet Drilldown"),
                        "gl/inquiry/balance_sheet.php?", 'SA_GLANALYTIC');
                $this->add_rapp_function(1, _("&Profit and Loss Drilldown"),
-                       "gl/inquiry/profit_loss.php?", 'SA_GLANALYTIC');                
+                       "gl/inquiry/profit_loss.php?", 'SA_GLANALYTIC');
                $this->add_rapp_function(1, _("Banking &Reports"),
                        "reporting/reports_main.php?Class=5", 'SA_BANKREP');
                $this->add_rapp_function(1, _("General Ledger &Reports"),
diff --git a/gl/accruals.php b/gl/accruals.php
new file mode 100644 (file)
index 0000000..8636dde
--- /dev/null
@@ -0,0 +1,218 @@
+<?php
+/**********************************************
+Author: Joe Hunt
+Name: Revenue / Cost Accruals v2.2
+Free software under GNU GPL
+***********************************************/
+$page_security = 'SA_ACCRUALS';
+$path_to_root="..";
+
+include_once($path_to_root . "/includes/session.inc");
+include_once($path_to_root . "/gl/includes/db/gl_db_trans.inc");
+
+$js = get_js_open_window(800, 500);
+if ($use_date_picker)
+       $js .= get_js_date_picker();
+
+// Begin the UI
+include_once($path_to_root . "/includes/ui.inc");
+
+$_SESSION['page_title'] = _($help_context = _("Revenue / Cost Accruals"));
+page($_SESSION['page_title'], false, false,'', $js);
+
+//--------------------------------------------------------------------------------------------------
+if (!isset($_POST['freq']))
+       $_POST['freq'] = 3;
+// If the import button was selected, we'll process the form here.  (If not, skip to actual content below.)
+if (isset($_POST['go']) || isset($_POST['show']))
+{
+       $input_error = 0;
+       if (!is_date($_POST['date_']))
+       {
+               display_error(_("The entered date is invalid."));
+               set_focus('date_');
+               $input_error = 1;
+       }
+       elseif (!is_date_in_fiscalyear($_POST['date_']))
+       {
+               display_error(_("The entered date is not in fiscal year."));
+               set_focus('date_');
+               $input_error = 1;
+       }
+       elseif (input_num('amount', 0) == 0.0)
+       {
+               display_error(_("The amount can not be 0."));
+               set_focus('periods');
+               $input_error = 1;
+       }
+       elseif (input_num('periods', 0) < 1)
+       {
+               display_error(_("The periods must be greater than 0."));
+               set_focus('periods');
+               $input_error = 1;
+       }
+       if ($input_error == 0)
+       {
+               $periods = input_num('periods');
+               $date_ = get_post('date_');
+               $freq = get_post('freq');
+               $lastdate = ($freq== 1?add_days($date_,7*$periods):($freq==2?add_days($date_,14*$periods):
+                       ($freq==3?add_months($date_,$periods):add_months($date_,3*$periods))));
+               if (!is_date_in_fiscalyears($lastdate, false))
+               {
+                       display_error(_("Some of the period dates are outside the fiscal year. Create a new fiscal year first!"));
+                       set_focus('date_');
+                       $input_error = 1;
+               }
+               if ($input_error == 0)
+               {
+                       $amount = input_num('amount');
+                       $am = round2($amount / $periods, user_price_dec());
+                       if ($am * $periods != $amount)
+                               $am0 = $am + $amount - $am * $periods;
+                       else
+                               $am0 = $am;
+                       if (get_post('memo_') != "")
+                               $memo = $_POST['memo_'];
+                       else
+                               $memo = "Accruals for $amount";
+                       if (isset($_POST['go']))
+                               begin_transaction();
+                       else
+                       {
+                               start_table(TABLESTYLE);
+                               $dim = get_company_pref('use_dimension');
+
+                               $first_cols = array(_("Date"), _("Account"));
+                               if ($dim == 2)
+                                       $dim_cols = array(_("Dimension"). " 1", _("Dimension"). " 2");
+                               elseif ($dim == 1)
+                                       $dim_cols = array(_("Dimension"));
+                               else
+                                       $dim_cols = array();
+
+                               $remaining_cols = array(_("Debit"), _("Credit"), _("Memo"));
+
+                               $th = array_merge($first_cols, $dim_cols, $remaining_cols);
+                               table_header($th);
+                               $k = 0;
+                       }
+                       for ($i = 0; $i < $periods; $i++)
+                       {
+                               if ($i > 0)
+                               {
+                                       switch($freq)
+                                       {
+                                               case 1:
+                                                       $date_ = add_days($date_, 7);
+                                                       break;
+                                               case 2:
+                                                       $date_ = add_days($date_, 14);
+                                                       break;
+                                               case 3:
+                                                       $date_ = add_months($date_, 1);
+                                                       break;
+                                               case 4:
+                                                       $date_ = add_months($date_, 3);
+                                                       break;
+                                       }
+                                       $am0 = $am;
+                               }
+                               if (isset($_POST['go']))
+                               {
+                                       $id = get_next_trans_no(ST_JOURNAL);
+                                       $ref = $Refs->get_next(ST_JOURNAL);
+                                       add_gl_trans(ST_JOURNAL, $id, $date_, get_post('acc_act'), 0,
+                                               0, $ref, $am0 * -1);
+                                       add_gl_trans(ST_JOURNAL, $id, $date_, get_post('res_act'), get_post('dimension_id'),
+                                               get_post('dimension2_id'), $ref, $am0);
+                                       add_comments(ST_JOURNAL, $id, $date_, $memo);
+                                       $Refs->save(ST_JOURNAL, $id, $ref);
+                               }
+                               else
+                               {
+                                       alt_table_row_color($k);
+                                       label_cell($date_);
+                                       label_cell($_POST['acc_act'] . " " . get_gl_account_name($_POST['acc_act']));
+                                       if ($dim > 0)
+                                               label_cell("");
+                                       if ($dim > 1)
+                                               label_cell("");
+                                       display_debit_or_credit_cells($am0 * -1);
+                                       label_cell($memo);
+                                       alt_table_row_color($k);
+                                       label_cell($date_);
+                                       label_cell($_POST['res_act'] . " " . get_gl_account_name($_POST['res_act']));
+                                       if ($dim > 0)
+                                               label_cell(get_dimension_string($_POST['dimension_id'], true));
+                                       if ($dim > 1)
+                                               label_cell(get_dimension_string($_POST['dimension2_id'], true));
+                                       display_debit_or_credit_cells($am0);
+                                       label_cell($memo);
+                               }
+                       }
+                       if (isset($_POST['go']))
+                       {
+                               commit_transaction();
+                               display_notification_centered(_("Revenue / Cost Accruals have been processed."));
+                               $_POST['date_'] = $_POST['amount'] = $_POST['periods'] = "";
+                       }
+                       else
+                       {
+                               end_table(1);
+                               display_notification_centered(_("Showing GL Transactions."));
+                       }
+               }
+       }
+}
+
+function frequency_list_row($label, $name, $selected=null)
+{
+       echo "<tr>\n";
+       label_cell($label);
+       echo "<td>\n";
+       $freq = array(
+               '1'=> _("Weekly"),
+               '2'=> _("Bi-weekly"),
+               '3' => _("Monthly"),
+               '4' => _("Quarterly"),
+       );
+       echo array_selector($name, $selected, $freq);
+       echo "</td>\n";
+       echo "</tr\n";
+}
+
+$dim = get_company_pref('use_dimension');
+
+start_form(false, false, "", "accrual");
+start_table(TABLESTYLE2);
+
+date_row(_("Date"), 'date_', _('First date of Accruals'), true, 0, 0, 0, null, true);
+start_row();
+gl_all_accounts_list_cells(_("Accrued Balance Account"), 'acc_act', null, true, false, false, true);
+end_row();
+gl_all_accounts_list_row(_("Revenue / Cost Account"), 'res_act', null, true);
+
+if ($dim >= 1)
+       dimensions_list_row(_("Dimension"), 'dimension_id', null, true, " ", false, 1);
+if ($dim > 1)
+       dimensions_list_row(_("Dimension")." 2", 'dimension2_id', null, true, " ", false, 2);
+
+$url = "gl/view/accrual_trans.php?act=".get_post('acc_act')."&date=".get_post('date_');
+amount_row(_("Amount"), 'amount', null, null, viewer_link(_("Search Amount"), $url, "", "", ICON_VIEW));
+
+frequency_list_row(_("Frequency"), 'freq', null);
+
+text_row(_("Periods"), 'periods', null, 3, 3);
+textarea_row(_("Memo"), 'memo_', null, 35, 3);
+
+end_table(1);
+submit_center_first('show', _("Show GL Rows"));//,true,false,'process',ICON_SUBMIT);
+submit_center_last('go', _("Process Accruals"));//,true,false,'process',ICON_SUBMIT);
+submit_js_confirm('go', _("Are you sure you want to post accruals?"));
+
+end_form();
+
+end_page();
+
+?>
diff --git a/gl/view/accrual_trans.php b/gl/view/accrual_trans.php
new file mode 100644 (file)
index 0000000..6d1d360
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL,
+       as published by the Free Software Foundation, either version 3
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+$page_security = 'SA_ACCRUALS';
+$path_to_root = "../..";
+include_once($path_to_root . "/includes/session.inc");
+
+$_SESSION['page_title'] = _($help_context = _("Search General Ledger Transactions for account: ").$_GET['act']);
+
+page($_SESSION['page_title'], true);
+
+include_once($path_to_root . "/includes/date_functions.inc");
+include_once($path_to_root . "/includes/ui.inc");
+
+include_once($path_to_root . "/gl/includes/gl_db.inc");
+
+$js ="\n<script type='text/javascript'>\n"
+               . "<!--\n"
+               . " function WindowClose(amount_, date__)\n"
+               . "{\n"
+               . " opener.document.getElementsByName('amount')[0].value = amount_; \n"
+               . " opener.document.getElementsByName('date_')[0].value = date__; \n"
+               . " window.close();\n"
+               . " return true;\n"
+               . "}\n"
+               . "-->\n"
+               . "</script>\n";
+echo $js;
+
+if (!isset($_GET['act']) || !isset($_GET['date']))
+{ /*Script was not passed the correct parameters */
+
+       echo "<p>" . _("The script must be called with a valid transaction type and transaction number to review the general ledger postings for.") . "</p>";
+       exit;
+}
+
+display_heading($_SESSION['page_title']. " ".get_gl_account_name($_GET['act']));
+
+br();
+
+start_table(TABLESTYLE);
+$dim = get_company_pref('use_dimension');
+
+$first_cols = array(_("Type"), "#", _("Date"));
+if ($dim == 2)
+       $dim_cols = array(_("Dimension")." 1", _("Dimension")." 2");
+else if ($dim == 1)
+       $dim_cols = array(_("Dimension"));
+else
+       $dim_cols = array();
+
+$remaining_cols = array(_("Person/Item"), _("Debit"), _("Credit"), _("Memo"));
+
+$th = array_merge($first_cols, $dim_cols, $remaining_cols);
+
+table_header($th);
+$end = $_GET['date'];
+$account = $_GET['act'];
+$begin = add_days($end, -30);
+
+$result = get_gl_transactions($begin, $end, -1,        $account, 0, 0, null);
+$j = 0;
+$k = 1;
+while ($myrow = db_fetch($result))
+{
+       alt_table_row_color($k);
+
+       $trandate = sql2date($myrow["tran_date"]);
+
+       label_cell($systypes_array[$myrow["type"]]);
+       $amount = price_format($myrow["amount"]);
+       $str = "<a href='#' onclick='return WindowClose(\"$amount\", \"$trandate\");' >".$myrow['type_no']."</a>";
+       label_cell($str);
+       label_cell($trandate);
+
+       if ($dim >= 1)
+               label_cell(get_dimension_string($myrow['dimension_id'], true));
+       if ($dim > 1)
+               label_cell(get_dimension_string($myrow['dimension2_id'], true));
+       label_cell(payment_person_name($myrow["person_type_id"],$myrow["person_id"]));
+       display_debit_or_credit_cells($myrow["amount"]);
+       label_cell($myrow['memo_']);
+       end_row();
+
+       $j++;
+       if ($j == 12)
+       {
+               $j = 1;
+               table_header($th);
+       }
+}
+//end of while loop
+
+
+//end of while loop
+end_table(1);
+
+end_page(true);
+
+?>
index bb84a10a7c66f76ede184deb1b5b00b3d67446c3..ee7288602494b17fb9367aa9f94d130da7480792 100644 (file)
@@ -240,6 +240,7 @@ $security_areas =array(
        'SA_BANKJOURNAL' => array(SS_GL|11, _("Journal entries to bank related accounts")),
        'SA_BUDGETENTRY' => array(SS_GL|9, _("Budget edition")),
        'SA_STANDARDCOST' => array(SS_GL|10, _("Item standard costs")),
+       'SA_ACCRUALS' => array(SS_GL|12, _("Revenue / Cost Accruals")),
 
        'SA_GLANALYTIC' => array(SS_GL_A|1, _("GL analytical reports and inquiries")),
        'SA_TAXREP' => array(SS_GL_A|2, _("Tax reports and inquiries")),