Incorrect Journal Balance (sales invoice) when many decimals in tax and price.
[fa-stable.git] / includes / types.inc
index 1d8eeb545c5e4c320283f4213c5e00be0dda5d28..f5e26d13db7dd618bd1be5976298ba740e2aed47 100644 (file)
 <?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>.
+***********************************************************************/
 //----------------------------------------------------------------------------------
-
-$systypes_array = array (
-                                       0=> array ('name' => _("Journal Entry")),
-                                       1=> array ('name' => _("Bank Payment")),
-                                       2=> array ('name' => _("Bank Deposit")),
-                                       4=> array ('name' => _("Funds Transfer")),
-                    10=> array ('name' => _("Sales Invoice")),
-                    11=> array ('name' => _("Customer Credit Note")),
-                    12=> array ('name' => _("Customer Payment")),
-                    16=> array ('name' => _("Location Transfer")),
-                    17=> array ('name' => _("Inventory Adjustment")),
-                    18=> array ('name' => _("Purchase Order")),
-                    20=> array ('name' => _("Supplier Invoice")),
-                    21=> array ('name' => _("Supplier Credit Note")),
-                    22=> array ('name' => _("Supplier Payment")),
-                    25=> array ('name' => _("Purchase Order Delivery")),
-                    26=> array ('name' => _("Work Order")),
-                    28=> array ('name' => _("Work Order Issue")),
-                    29=> array ('name' => _("Work Order Production")),
-                    30=> array ('name' => _("Sales Order")),
-                    35=> array ('name' => _("Cost Update")),
-                    40=> array ('name' => _("Dimension"))
-                                       );
-class systypes 
+//     FrontAccounting system transaction types
+//
+define('ST_JOURNAL', 0);
+
+define('ST_BANKPAYMENT', 1);
+define('ST_BANKDEPOSIT', 2);
+define('ST_BANKTRANSFER', 4);
+
+define('ST_SALESINVOICE', 10);
+define('ST_CUSTCREDIT', 11);
+define('ST_CUSTPAYMENT', 12);
+define('ST_CUSTDELIVERY', 13);
+
+define('ST_LOCTRANSFER', 16);
+define('ST_INVADJUST', 17);
+
+define('ST_PURCHORDER', 18);
+define('ST_SUPPINVOICE', 20);
+define('ST_SUPPCREDIT', 21);
+define('ST_SUPPAYMENT', 22);
+define('ST_SUPPRECEIVE', 25);
+
+define('ST_WORKORDER', 26);
+define('ST_MANUISSUE', 28);
+define('ST_MANURECEIVE', 29);
+
+//
+//     Depreciation period types
+//
+define('FA_MONTHLY', 0);
+define('FA_YEARLY', 1);
+
+define('ST_SALESORDER', 30);
+define('ST_SALESQUOTE', 32);
+define('ST_COSTUPDATE', 35);
+define('ST_DIMENSION', 40);
+define('ST_CUSTOMER', 41);
+define('ST_SUPPLIER', 42);
+
+// Don't include these defines in the $systypes_array.
+// They are used for documents only.
+define ('ST_STATEMENT', 91);
+define ('ST_CHEQUE', 92);
+
+// document inheritance
+$document_child_types = array(
+               ST_SALESQUOTE => ST_SALESORDER,
+               ST_SALESORDER => ST_CUSTDELIVERY,
+               ST_CUSTDELIVERY => ST_SALESINVOICE,
+               ST_SALESINVOICE => ST_CUSTCREDIT,
+
+               ST_PURCHORDER => ST_SUPPRECEIVE,
+               ST_SUPPRECEIVE => ST_SUPPINVOICE,
+               ST_SUPPINVOICE => ST_SUPPCREDIT,
+);
+
+function get_child_type($type)
 {
+       global $document_child_types;
+       return isset($document_child_types[$type]) ? $document_child_types[$type] : 0;
+}
 
-       function journal_entry() 
-       {
-               return 0;
-       }
-
-       function bank_payment() 
-       {
-               return 1;
-       }
-
-       function bank_deposit() 
-       {
-               return 2;
-       }
-
-       function bank_transfer() 
-       {
-               return 4;
-       }
-
-       function cust_payment() 
-       {
-               return 12;
-       }
-
-       function location_transfer() 
-       {
-               return 16;
-       }
-
-       function inventory_adjustment() 
-       {
-               return 17;
-       }
+function get_parent_type($type)
+{
+       global $document_child_types;
+       $child = array_search($type, $document_child_types);
+       return $child ? $child : 0;
+}
 
-       function po() 
-       {
-               return 18;
-       }
+//----------------------------------------------------------------------------------
+//             Bank transaction types
+//
+define('BT_TRANSFER', 0);
+define('BT_CHEQUE', 1);
+define('BT_CREDIT', 2);
+define('BT_CASH', 3);
 
-       function supp_payment() 
+include_once($path_to_root . "/manufacturing/includes/manufacturing_db.inc");
+include_once($path_to_root . "/purchasing/includes/purchasing_db.inc");
+include_once($path_to_root . "/sales/includes/sales_db.inc");
+include_once($path_to_root . "/dimensions/includes/dimensions_db.inc");
+//----------------------------------------------------------------------------------
+//     Payment types
+//
+define('PT_MISC', 0);
+define('PT_WORKORDER', 1);
+define('PT_CUSTOMER', 2);
+define('PT_SUPPLIER', 3);
+define('PT_QUICKENTRY', 4);
+define('PT_DIMESION', 5);
+
+function payment_person_currency($type, $person_id)  {
+       switch ($type)
        {
-               return 22;
-       }
+               case PT_MISC :
+               case PT_QUICKENTRY :
+               case PT_WORKORDER :
+                       return get_company_currency();
 
-       function work_order() 
-       {
-               return 26;
-       }
+               case PT_CUSTOMER :
+                       return get_customer_currency($person_id);
 
-       function sales_order() 
-       {
-               return 30;
-       }
+               case PT_SUPPLIER :
+                       return get_supplier_currency($person_id);
 
-       function cost_update() 
-       {
-               return 35;
+               default :
+                       return get_company_currency();
        }
+}
 
-       function dimension() 
-       {
-               return 40;
-       }
+function payment_person_name($type, $person_id, $full=true) {
+       global $payment_person_types;
 
-       function name($index) 
+       switch ($type)
        {
-               global $systypes_array;
-               if ($index < 0)
+               case PT_MISC :
+                       return $person_id;
+               case PT_QUICKENTRY :
+                       $qe = get_quick_entry($person_id);
+                       return ($full ? $payment_person_types[$type] . " ":"") . $qe["description"];
+               case PT_WORKORDER :
+                       global $wo_cost_types;
+                       return (!$full ? _('Work Order').' '.$person_id : get_trans_view_str(ST_WORKORDER, $person_id, _('Work Order').' '.$person_id));
+               case PT_CUSTOMER :
+                       return ($full ?$payment_person_types[$type] . " ":"") . sprintf("[%05s] %s", $person_id, get_customer_name($person_id));
+               case PT_SUPPLIER :
+                       return ($full ? $payment_person_types[$type] . " ":"") . sprintf("[%05s] %s", $person_id, get_supplier_name($person_id));
+               default :
                        return '';
-               return $systypes_array[$index]['name'];
        }
 }
 
-//----------------------------------------------------------------------------------
-
-$bank_account_types_array = array (
-                                               0=> array ('id' => 0, 'name' => _("Savings Account")),
-                                               1=> array ('id' => 1, 'name' => _("Chequing Account")),
-                                               2=> array ('id' => 2, 'name' => _("Credit Account")),
-                                               3=> array ('id' => 3, 'name' => _("Cash Account"))
-                                               );
-
-class bank_account_types 
-{
-
-       function get_all() 
+function payment_person_has_items($type) {
+       switch ($type)
        {
-               global $bank_account_types_array;
-               return $bank_account_types_array;;
-       }
-
-       function name($index) 
-       {
-               global $bank_account_types_array;
-               return $bank_account_types_array[$index]['name'];
+               case PT_MISC :
+                       return true;
+               case PT_QUICKENTRY :
+                       return db_has_quick_entries();
+               case PT_WORKORDER : // 070305 changed to open workorders JH
+                       return db_has_open_workorders();
+               case PT_CUSTOMER :
+                       return db_has_customers();
+               case PT_SUPPLIER :
+                       return db_has_suppliers();
+               default :
+                       display_db_error("Invalid type sent to has_items", "");
+                       return false;
        }
 }
-
 //----------------------------------------------------------------------------------
+//     Payment terms categories
+//
+define('PM_ANY', 0);
+define('PM_CASH', 1);
+define('PM_CREDIT', 2);
 
-include_once($path_to_root . "/manufacturing/includes/manufacturing_db.inc");
-include_once($path_to_root . "/purchasing/includes/purchasing_db.inc");
-include_once($path_to_root . "/sales/includes/sales_db.inc");
-include_once($path_to_root . "/dimensions/includes/dimensions_db.inc");
+//----------------------------------------------------------------------------------
+//     Manufacturing types
+//
+define('WO_ASSEMBLY', 0);
+define('WO_UNASSEMBLY', 1);
+define('WO_ADVANCED', 2);
 
-$payment_person_types_array = array (
-                                                       0=> array ('id' => 0, 'name' => _("Miscellaneous")),
-                                                       1=> array ('id' => 1, 'name' => _("Work Order")),
-                                                       2=> array ('id' => 2, 'name' => _("Customer")),
-                                                       3=> array ('id' => 3, 'name' => _("Supplier")),
-                                                       );
+define('WO_LABOUR', 0);
+define('WO_OVERHEAD', 1);
+define('WO_MATERIALS', 2);
 
-class payment_person_types 
+//----------------------------------------------------------------------------------
+//     GL account classes
+//
+define('CL_NONE', 0); // for backward compatibility
+define('CL_ASSETS', 1);
+define('CL_LIABILITIES', 2);
+define('CL_EQUITY', 3);
+define('CL_INCOME', 4);
+define('CL_COGS', 5);
+define('CL_EXPENSE', 6);
+
+function get_class_type_convert($ctype)
 {
+       global $SysPrefs;
 
-       function get_all() 
-       {
-               global $payment_person_types_array;
-               return $payment_person_types_array;
-       }
-
-    function misc()  
-    { 
-       return 0; 
-    }
-
-    function WorkOrder()  
-    { 
-       return 1; 
-    }
-
-    function customer()  
-    { 
-       return 2; 
-    }
-
-    function supplier()  
-    { 
-       return 3; 
-    }
-
-    function dimension()  
-    { 
-       return 4; 
-    }
-
-    //function Project()  { return 4; }
-
-    function type_name($type)
-    {
-       global $payment_person_types_array;
-       return $payment_person_types_array[$type]['name'];
-    }
-
-    function person_name($type, $person_id, $full=true)
-    {
-       switch ($type)
-       {
-               case payment_person_types::misc() :
-                       return $person_id;
-               case payment_person_types::WorkOrder() :
-                       $wo = get_work_order($person_id);
-                       return ($full?payment_person_types::type_name($type) . " ":"") . $wo["wo_ref"];
-               case payment_person_types::customer() :
-                       return ($full?payment_person_types::type_name($type) . " ":"") . get_customer_name($person_id);
-               case payment_person_types::supplier() :
-                       return ($full?payment_person_types::type_name($type) . " ":"") . get_supplier_name($person_id);
-               //case payment_person_types::Project() :
-               //      return ($full?payment_person_types::type_name($type) . " ":"") . get_dimension_string($person_id);
-               default :
-                       //DisplayDBerror("Invalid type sent to person_name");
-                       //return;
-                       return '';
-       }
-    }
-
-    function person_currency($type, $person_id)
-    {
-       switch ($type)
-       {
-               case payment_person_types::misc() :
-               case payment_person_types::WorkOrder() :
-               //case payment_person_types::Project() :
-                       return get_company_currency();
-
-               case payment_person_types::customer() :
-                       return get_customer_currency($person_id);
-
-               case payment_person_types::supplier() :
-                       return get_supplier_currency($person_id);
-
-               default :
-                       return get_company_currency();
-       }
-    }
-
-    function has_items($type)
-    {
-       switch ($type)
-       {
-               case payment_person_types::misc() :
-                       return true;
-               case payment_person_types::WorkOrder() : // 070305 changed to open workorders ES
-                       return db_has_open_workorders();
-               case payment_person_types::customer() :
-                       return db_has_customers();
-               case payment_person_types::supplier() :
-                       return db_has_suppliers();
-               //case payment_person_types::Project() :
-               //      return db_has_dimensions();
-               default :
-                       display_db_error("Invalid type sent to has_items", "");
-                       return;
-       }
-    }
+       if (isset($SysPrefs->use_oldstyle_convert) && $SysPrefs->use_oldstyle_convert == 1)
+               return (($ctype >= CL_INCOME || $ctype == CL_NONE) ? -1 : 1);
+       else    
+               return ((($ctype >= CL_LIABILITIES && $ctype <= CL_INCOME) || $ctype == CL_NONE) ? -1 : 1);
 }
-
 //----------------------------------------------------------------------------------
+//     Quick entry types
+//
+define('QE_PAYMENT', '1');
+define('QE_DEPOSIT', '2');
+define('QE_JOURNAL', '3');
+define('QE_SUPPINV', '4');
 
-$wo_types_array = array (
-                                               0=> array ('id' => 0, 'name' => _("Assemble")),
-                                               1=> array ('id' => 1, 'name' => _("Unassemble")),
-                                               2=> array ('id' => 2, 'name' => _("Advanced Manufacture"))
-                                               );
-
-class wo_types 
-{
+//----------------------------------------------------------------------------------
+//     Special option values for various list selectors.
+//
+define('ANY_TEXT', '');
+define('ANY_NUMERIC', -1);
+define('ALL_TEXT', '');
+define('ALL_NUMERIC', -1);
 
-       function assemble() 
-       { 
-               return 0; 
-       }
+//----------------------------------------------------------------------------------
+// Special class values for tables (start_table())
+define('TABLESTYLE',  1);
+define('TABLESTYLE2', 2);
+define('TABLESTYLE_NOBORDER', 3);
 
-       function unassemble() 
-       { 
-               return 1; 
-       }
+//----------------------------------------------------------------------------------
 
-       function advanced() 
-       { 
-               return 2; 
-       }
+define('TAG_ACCOUNT',   1);
+define('TAG_DIMENSION', 2);
 
-       function get_all() 
-       {
-               global $wo_types_array;
-               return $wo_types_array;;
-       }
+//----------------------------------------------------------------------------------
+// Payment term types
 
-       function name($index) 
-       {
-               global $wo_types_array;
-               return $wo_types_array[$index]['name'];
-       }
-}
+define('PTT_PRE', 1);
+define('PTT_CASH', 2);
+define('PTT_DAYS', 3);
+define('PTT_FOLLOWING', 4);
 
+//----------------------------------------------------------------------------------
+// Tax calculation algorithms used in als and purchase (depends on supplier's invoicing software)
+
+define('TCA_TOTALS', 1); // taxes are calculated from respective net totals for all lines
+define('TCA_LINES', 2); // taxes calculated for every line, then summed
+//
+//     Bank account owner types
+//
+define('BO_UNKNOWN', 0);
+define('BO_COMPANY', 1);
+define('BO_CUSTBRANCH', 2);
+define('BO_SUPPLIER', 3);
+
+include_once($path_to_root . '/includes/sysnames.inc');
+
+// tax register type
+define('TR_OUTPUT', 0); // sales
+define('TR_INPUT', 1); // purchase
+//---------------------------------------------------------------------------------
+// Constants optionally redefined locally
+//
+defined('ICON_EDIT') || define('ICON_EDIT', 'edit.gif');
+defined('ICON_DELETE') || define('ICON_DELETE', 'delete.gif');
+defined('ICON_ADD')    || define('ICON_ADD', 'ok.gif');
+defined('ICON_UPDATE') || define('ICON_UPDATE', 'ok.gif');
+defined('ICON_OK') || define('ICON_OK', 'ok.gif');
+defined('ICON_CANCEL') || define('ICON_CANCEL', 'cancel.png');
+defined('ICON_GL') || define('ICON_GL', 'gl.png');
+defined('ICON_PRINT') || define('ICON_PRINT', 'print.png');
+defined('ICON_PDF') || define('ICON_PDF', 'pdf.gif');
+defined('ICON_DOC') || define('ICON_DOC', 'invoice.gif');
+defined('ICON_CREDIT') || define('ICON_CREDIT', 'credit.gif');
+defined('ICON_RECEIVE') || define('ICON_RECEIVE', 'receive.gif');
+defined('ICON_DOWN') || define('ICON_DOWN', 'download.gif');
+defined('ICON_MONEY') || define('ICON_MONEY', 'money.png');
+defined('ICON_REMOVE') || define('ICON_REMOVE', 'remove.png');
+defined('ICON_REPORT') || define('ICON_REPORT', 'report.png');
+defined('ICON_VIEW') || define('ICON_VIEW', 'view.gif');
+defined('ICON_SUBMIT') || define('ICON_SUBMIT', 'ok.gif');
+defined('ICON_ESCAPE') || define('ICON_ESCAPE', 'escape.png');
+defined('ICON_ALLOC') || define('ICON_ALLOC', 'alloc.png');
+defined('ICON_CLOSED') || define('ICON_CLOSED', 'closed.png');
 
-?>
\ No newline at end of file