<?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>.
***********************************************************************/
/*
	Security sections groups various areas on both functionality and privilege levels.
	Often analytic inquires are available only for management, and configuration
	for administration or management staff. This is why we have those three
	section type inside near every FA module.

	Section codes 0-99 are reserved for core FA functionalities.
	Every security section can contain up to 256 different areas.
	External modules can extend security roles system by adding rows to 
	$security_sections and $security_areas using section codes >=100.
	Security areas and sections created by extension modules/plugins
	have dynamically assigned 3-byte integer codes. The highest byte is zero
	for sections/areas defined in this file, and extid+1 for those defined 
	by extensions 
*/
define('SS_SADMIN',	1<<8);	// site admin
define('SS_SETUP',	2<<8);	// company level setup
define('SS_SPEC',	3<<8);	// special administration

define('SS_SALES_C',11<<8); // configuration
define('SS_SALES',	12<<8);	// transactions
define('SS_SALES_A',13<<8); // analytic functions/reports/inquires

define('SS_PURCH_C',21<<8);
define('SS_PURCH',	22<<8);
define('SS_PURCH_A',23<<8);

define('SS_ITEMS_C',31<<8);
define('SS_ITEMS',	32<<8);
define('SS_ITEMS_A',33<<8);

define('SS_ASSETS_C',36<<8);
define('SS_ASSETS',	37<<8);
define('SS_ASSETS_A',38<<8);

define('SS_MANUF_C',41<<8);
define('SS_MANUF',	42<<8);
define('SS_MANUF_A',43<<8);

define('SS_DIM_C',	51<<8);
define('SS_DIM',	52<<8);
define('SS_DIM_A',	53<<8);

define('SS_GL_C',	61<<8);
define('SS_GL',		62<<8);
define('SS_GL_A',	63<<8);

define('SS_DASH',	81<<8);

define('SS_STORE_T',	71<<8);
define('SS_STORE_I',	72<<8);
define('SS_STORE_M',	73<<8);

define('SS_REP_ACC',	74<<8);

$security_sections = array(
 	SS_SADMIN => _("System administration"),
 	SS_SETUP => _("Company setup"),
 	SS_SPEC => _("Special maintenance"),
 	SS_SALES_C => _("Sales configuration"),
 	SS_SALES => _("Sales transactions"),
 	SS_SALES_A => _("Sales related reports"),
 	SS_PURCH_C => _("Purchase configuration"),
 	SS_PURCH => _("Purchase transactions"),
 	SS_PURCH_A => _("Purchase analytics"),
 	SS_ITEMS_C => _("Inventory configuration"),
 	SS_ITEMS => _("Inventory operations"),
 	SS_ITEMS_A => _("Inventory analytics"),
	SS_ASSETS_C => _("Fixed Assets configuration"),
	SS_ASSETS => _("Fixed Assets operations"),
	SS_ASSETS_A => _("Fixed Assets analytics"),
 	SS_MANUF_C => _("Manufacturing configuration"),
 	SS_MANUF => _("Manufacturing transactions"),
 	SS_MANUF_A => _("Manufacturing analytics"),
 	SS_DIM_C => _("Dimensions configuration"),
 	SS_DIM => _("Dimensions"),
 	SS_GL_C => _("Banking & GL configuration"),
 	SS_GL => _("Banking & GL transactions"),
 	SS_GL_A => _("Banking & GL analytics"),
 	 	SS_STORE_I => _("Store inquiries and Reports"),
 	SS_STORE_T => _("Store transactions"),
 	SS_STORE_M => _("Store Maintenance"),
 	SS_DASH => _("Dashboard Section"),
 	SS_REP_ACC =>  _("All Reports Rights")
);

/*
	This table stores security areas available in FA. 
	Key is area identifier used to check user rights, values are
	codes stored for each role in security_roles table and description used
	in roles editor.

	Set of allowed access areas codes is retrieved during user login from
	security_roles table, and cached in user profile.

	Special value 'SA_OPEN' is used for publicly available pages like login/logout.
*/
$security_areas =array(


  // Dashboard Right 

				'SA_SHOW_CUSTOMER' =>array(SS_DASH|1, _("Show Customer's")),
				'SA_SHOW_CURR_BALANCE' =>array(SS_DASH|2, _("Show Current Balance")),
				'SA_SHOW_SUPPLIERS' =>array(SS_DASH|3, _("Show Supplier's")),
				'SA_SHOW_ITEMS' =>array(SS_DASH|4, _("Show Items's")),
				'SA_SHOW_PAYBLES' =>array(SS_DASH|5, _("Show Payables")),
				'SA_RECEIVABLE' =>array(SS_DASH|6, _("Receivable")),




				'SA_SALES_ORDER_PENDING' =>array(SS_DASH|7, _("Sales Order Pending")),
				'SA_DELIVERY_NOTE_PENDING' =>array(SS_DASH|8, _("Delivery Note Pending")),
				'SA_PENDING_SALES_INVOICE' =>array(SS_DASH|9, _("Pending Sales Invocie")),
               
               // SA_REQUISITION
				//SA_STORE_REQUEST
				//SA_PRODUCTION_PLANNING


				'SA_PENDING_RQUISITION' =>array(SS_DASH|10, _("Pending Requisition / Order ")),
				'SA_PENDING_STORE_REQUEST' =>array(SS_DASH|11, _("Pending Store Request ")),
				'SA_PENDING_QC_ORDER' =>array(SS_DASH|12, _("Pending QC Order ")),


				'SA_PENDING_PURCHASE_ORDER_REC' =>array(SS_DASH|13, _("Pending purchase Order Receive (GRN) ")),
				'SA_PENDING_PURCHASE_INV' =>array(SS_DASH|14, _("Pending Purchase Invoice.")),
				'SA_PENDING_WORK_ORDER' =>array(SS_DASH|15, _("Pending Workorder ")),


                 
                'SA_SHOW_PRODUCTON_PLANR' =>array(SS_DASH|16, _("Show Production Plane ")),
				'SA_SHOW_CLASS_BALANCE' =>array(SS_DASH|17, _("Show Class Balance.")),
				'SA_SALES_GRAPH' =>array(SS_DASH|18, _("Show Sales Graph ")),


				'SA_SHOW_CUSTOMER_PAI_CHART' =>array(SS_DASH|19, _("Show Customer Pai Chart")),
				'SA_SHOW_SUPPLIER_PAI_CHART' =>array(SS_DASH|20, _("Show Supplier Pai Chart")),
				'SA_SHOW_EXPENSE_GRAPH' =>array(SS_DASH|21, _("Show Exapense Graph")),
				'SA_SHOW_TAX_GRAPH' =>array(SS_DASH|22, _("Show Tax Graph")),




                
                'SA_SHOW_PAYMENT' =>array(SS_DASH|23, _("Show Payment")),
				'SA_SHOW_SALES_INVOICES' =>array(SS_DASH|24, _("Show Sales Invocie")),
				'SA_SHOW_DUE_SALES_INVOICE' =>array(SS_DASH|25, _("Show Over Due Sales Invoice")),
				'SA_SHOW_BANK_ACC_BAL' =>array(SS_DASH|26, _("Show Bank Account Balance")),



				'SA_SHOW_OVERDUE_RECURRENT_SALES_INV' =>array(SS_DASH|27, _("Show Over Due Recurrent Sales Invoice")),
				'SA_SHOW_AVG_DAILY_SALES' =>array(SS_DASH|28, _("Show Average Daily Sales")),
				 'SA_SHOW_DUE_PURCH_INV' =>array(SS_DASH|29, _("Show Over Due Purchase Invoice")),
				'SA_SHOW_TOP_TEN_INV_ITEM' =>array(SS_DASH|30, _("Show Top 10 Inventry Items")),
				'SA_SHOW_MOST_STAGANT_ITEM' =>array(SS_DASH|31, _("Show Most Stagnant Items")),
				


				'POST_DATED_CHEQUE' =>array(SS_DASH|33, _("Show Post Dated Cheque")),
				'GET_OVERDUE_INVOICE' =>array(SS_DASH|34, _("Show Overdue Invoice")),
				'GET_INVENTORY_RECORD' =>array(SS_DASH|35, _("Show Inventory Record")),
				'GET_SUPPLIER_PAYMENT' =>array(SS_DASH|36, _("Show Supplier Payment")),
				

				// 'SA_RECEIVABLE' =>array(SS_DASH|6, _("Receivable")),
				// 'SA_RECEIVABLE' =>array(SS_DASH|6, _("Receivable")),
		

				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),	
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),
				// 'SA_CREATECOMPANY' =>array(SS_DASH|1, _("Install/update companies")),




//
//	Site administration
//
	'SA_CREATECOMPANY' =>array(SS_SADMIN|1, _("Install/update companies")),
	'SA_CREATELANGUAGE' => array(SS_SADMIN|2, _("Install/update languages")),
	'SA_CREATEMODULES' => array(SS_SADMIN|3, _("Install/upgrade modules")),
	'SA_SOFTWAREUPGRADE' => array(SS_SADMIN|4, _("Software upgrades")),
//
//	Company setup
//
	'SA_SETUPCOMPANY' => array(SS_SETUP|1, _("Company parameters")),
	'SA_SECROLES' => array(SS_SETUP|2, _("Access levels edition")),
	'SA_USERS' => array(SS_SETUP|3, _("Users setup")),
	'SA_POSSETUP' => array(SS_SETUP|4, _("Point of sales definitions")),
	'SA_PRINTERS' => array(SS_SETUP|5, _("Printers configuration")),
	'SA_PRINTPROFILE' => array(SS_SETUP|6, _("Print profiles")),
	'SA_PAYTERMS' => array(SS_SETUP|7, _("Payment terms")),
	'SA_SHIPPING' => array(SS_SETUP|8, _("Shipping ways")),
	'SA_CRSTATUS' => array(SS_SETUP|9, _("Credit status definitions changes")),
	'SA_INVENTORYLOCATION' => array(SS_SETUP|10, _("Inventory locations changes")),
	'SA_INVENTORYMOVETYPE'  => array(SS_SETUP|11, _("Inventory movement types")),
	'SA_WORKCENTRES' => array(SS_SETUP|12, _("Manufacture work centres")),
	'SA_FORMSETUP' => array(SS_SETUP|13, _("Forms setup")),
	'SA_CRMCATEGORY' => array(SS_SETUP|14, _("Contact categories")),
	'SA_LATTER_HAED' => array(SS_SETUP|15, _("Latter Head")),
	'SA_LATTER_HAED_SETTING' => array(SS_SETUP|16, _("Latter Head Setting")),
//
// Special and common functions
//
	'SA_VOIDTRANSACTION' => array(SS_SPEC|1, _("Voiding transactions")),
	'SA_BACKUP' => array(SS_SPEC|2, _("Database backup/restore")),
	'SA_VIEWPRINTTRANSACTION' => array(SS_SPEC|3, _("Common view/print transactions interface")),
	'SA_ATTACHDOCUMENT' => array(SS_SPEC|4, _("Attaching documents")),
	'SA_SETUPDISPLAY' => array(SS_SPEC|5, _("Display preferences")),
	'SA_CHGPASSWD' => array(SS_SPEC|6, _("Password changes")),
	'SA_EDITOTHERSTRANS' => array(SS_SPEC|7, _("Edit other users transactions")),

	'SA_GL_ACC_SEARCH_VIEW' => array(SS_SPEC|8, _("GL Dropdown Search view")),

	'DELETE_TRANSFER_INQUERY' => array(SS_SPEC|9, _("Delete Transfer Inquery")),
		'FREZE_SALES_PRICE' => array(SS_SPEC|10, _("allow change sales order price/discount")),

//
// Sales related functionality
//
	'SA_SALESTYPES' => array(SS_SALES_C|1, _("Sales types")),
	'SA_SALESPRICE' => array(SS_SALES_C|2, _("Sales prices edition")),
	'SA_SALESMAN' => array(SS_SALES_C|3, _("Sales staff maintenance")),
	'SA_SALESAREA' => array(SS_SALES_C|4, _("Sales areas maintenance")),
	'SA_SALESGROUP' => array(SS_SALES_C|5, _("Sales groups changes")),
	'SA_STEMPLATE' => array(SS_SALES_C|6, _("Sales templates")),
	'SA_SRECURRENT' => array(SS_SALES_C|7, _("Recurrent invoices definitions")),
	'SA_UNITMAPPING' => array(SS_SALES_C|8, _("Unit mapping")),

	'SA_SALESTRANSVIEW' => array(SS_SALES|1,  _("Sales transactions view")),
	'SA_CUSTOMER' => array(SS_SALES|2,  _("Sales customer and branches changes")),
	'SA_SALESQUOTE' => array(SS_SALES|10, _("Sales quotations")),
	'SA_SALESORDER' => array(SS_SALES|3, _("Sales orders edition")),
	'SA_SALESORDERENTRY' => array(SS_SALES|11, _("Sales orders entry form right")),
	'SA_SALESORDERENTRYEDIT' => array(SS_SALES|12, _("Sales orders entry edit")),
	'SA_SALESDELIVERY' => array(SS_SALES|4, _("Sales deliveries edition")),
	'SA_SALESINVOICE' => array(SS_SALES|5, _("Sales invoices edition")),
	'SA_SALESCREDITINV' => array(SS_SALES|6, _("Sales credit notes against invoice")),
	'SA_SALESCREDIT' => array(SS_SALES|7, _("Sales freehand credit notes")),
	'SA_SALESPAYMNT' => array(SS_SALES|8, _("Customer payments entry")),
	'SA_SALESALLOC' => array(SS_SALES|9, _("Customer payments allocation")),

	'SA_SALESANALYTIC' => array(SS_SALES_A|1, _("Sales analytical reports")),
	'SA_SALESBULKREP' => array(SS_SALES_A|2, _("Sales document bulk reports")),
	'SA_PRICEREP' => array(SS_SALES_A|3, _("Sales prices listing")),
	'SA_SALESMANREP' => array(SS_SALES_A|4, _("Sales staff listing")),
	'SA_CUSTBULKREP' => array(SS_SALES_A|5, _("Customer bulk listing")),
	'SA_CUSTSTATREP' => array(SS_SALES_A|6, _("Customer status report")),
	'SA_CUSTPAYMREP' => array(SS_SALES_A|7, _("Customer payments report")),
	'SA_PAY_TERM' => array(SS_SALES_A|8, _("Pay Term")),
	'SA_CHARGES' => array(SS_SALES_A|9, _("Charges")),
	'SA_PACKING_LIST' => array(SS_SALES_C|10, _("Packing List")),
	'SA_BILL_OF_EXCHANGE' => array(SS_SALES_C|11, _("Bill Of Exchange")),

//
// Purchase related functions
//
	'SA_PURCHASEPRICING' => array(SS_PURCH_C|1, _("Purchase price changes")),
	'SA_SUPPTRANSVIEW' => array(SS_PURCH|1, _("Supplier transactions view")),
	'SA_SUPPTRANSINQ' => array(SS_PURCH|14, _("Supplier transactions inquires")),
	'SA_SUPP_OUT_STANDING_ORDER' => array(SS_PURCH|15, _("Out Standing Purchase Order Inquiry")),
	'SA_REQ_DIRECT_PURCHASE' => array(SS_PURCH|16, _("Rquisition Direct Purchase")),
	'SA_INWARD_AND_OUTWARD' => array(SS_PURCH|17, _("Purchase InWard and OutWard")),
	'SA_SUPPLIER' => array(SS_PURCH|2, _("Suppliers changes")),
	'SA_PURCHASEORDERENTRY' => array(SS_PURCH|19, _("Purchase order entry form right")),
	'SA_PURCHASEORDERENTRYEDIT' => array(SS_PURCH|20, _("Purchase order entry edit")),
	'SA_PURCHASEORDER' => array(SS_PURCH|3, _("Purchase order entry")),
	'SA_GRN' => array(SS_PURCH|4, _("Purchase receive")),
	'SA_SUPPLIERINVOICE' => array(SS_PURCH|5, _("Supplier invoices")),
	'SA_GRNDELETE' => array(SS_PURCH|9, _("Deleting GRN items during invoice entry")),
	'SA_SUPPLIERCREDIT' => array(SS_PURCH|6, _("Supplier credit notes")),
	'SA_SUPPLIERPAYMNT' => array(SS_PURCH|7, _("Supplier payments")),
	'SA_SUPPLIERALLOC' => array(SS_PURCH|8, _("Supplier payments allocations")),
	'SA_QC_SETUP' => array(SS_PURCH|10, _("QC Setup Form")),
	'SA_CREATE_QC' => array(SS_PURCH|11, _("QC Receive")),
	'SA_REQUISITION' => array(SS_PURCH|12, _("Requisition Entry")),
	'SA_PURCHASEQUOTATION' => array(SS_PURCH|13, _("Purchase Quotation Entry")),
	'SA_CITY' => array(SS_PURCH|18, _("City")),
	'SA_SUPPLIERANALYTIC' => array(SS_PURCH_A|1, _("Supplier analytical reports")),
	'SA_SUPPBULKREP' => array(SS_PURCH_A|2, _("Supplier document bulk reports")),
	'SA_SUPPPAYMREP' => array(SS_PURCH_A|3, _("Supplier payments report")),
	'SA_REQUISITION_INTERNAL_VIEW_DETAIL' => array(SS_PURCH_A|4, _("Requisition View Details")),
	'SA_FILE_SYSTEM' => array(SS_PURCH_A|20, _("File System")),
	'SA_CHARGES_RATE_PER' => array(SS_PURCH_A|21, _("Charges Rate Percentage")),
//
// Inventory 
//
	'SA_ITEM' => array(SS_ITEMS_C|1, _("Stock items add/edit")),
	'SA_SALESKIT' => array(SS_ITEMS_C|2, _("Sales kits")),
	'SA_ITEMCATEGORY' => array(SS_ITEMS_C|3, _("Item categories")),
	'SA_UOM' => array(SS_ITEMS_C|4, _("Units of measure")),

	'SA_ITEMSSTATVIEW' => array(SS_ITEMS|1, _("Stock status view")),
	'SA_ITEMSTRANSVIEW' => array(SS_ITEMS|2, _("Stock transactions view")),
	'SA_FORITEMCODE' => array(SS_ITEMS|3, _("Foreign item codes entry")),
	'SA_LOCATIONTRANSFER' => array(SS_ITEMS|4, _("Inventory location transfers")),
	'SA_INVENTORYADJUSTMENT' => array(SS_ITEMS|5, _("Inventory adjustments")),
	'SA_INVENTORYCUNSUMPTION' => array(SS_ITEMS|8, _("Inventory Consumption")),
	'SA_PRODUCTION_PLANNING' => array(SS_ITEMS|6, _("Production Planning")),
	'SA_TRANSDER_INQUIRY' => array(SS_ITEMS|7, _("Inventry Transfer Inquiry")),
	'SA_LOGISTIC' => array(SS_ITEMS|9, _("Logistic Rights")),

	'SA_REORDER' => array(SS_ITEMS_A|1, _("Reorder levels")),
	'SA_ITEMSANALYTIC' => array(SS_ITEMS_A|2, _("Items analytical reports and inquiries")),
	'SA_ITEMSVALREP' => array(SS_ITEMS_A|3, _("Inventory valuation report")),

//
// Fixed Assets
//
	'SA_ASSET' => array(SS_ASSETS_C|1, _("Fixed Asset items add/edit")),
	'SA_ASSETCATEGORY' => array(SS_ASSETS_C|2, _("Fixed Asset categories")),
	'SA_ASSETCLASS' => array(SS_ASSETS_C|4, _("Fixed Asset classes")),

	'SA_ASSETSTRANSVIEW' => array(SS_ASSETS|1, _("Fixed Asset transactions view")),
	'SA_ASSETTRANSFER' => array(SS_ASSETS|2, _("Fixed Asset location transfers")),
	'SA_ASSETDISPOSAL' => array(SS_ASSETS|3, _("Fixed Asset disposals")),
    'SA_DEPRECIATION' => array(SS_ASSETS|4, _("Depreciation")),

	'SA_ASSETSANALYTIC' => array(SS_ASSETS_A|1, _("Fixed Asset analytical reports and inquiries")),

//
// Manufacturing module 
//
	'SA_BOM' => array(SS_MANUF_C|1, _("Bill of Materials")),

	'SA_MANUFTRANSVIEW' => array(SS_MANUF|1, _("Manufacturing operations view")),
	'SA_WORKORDERENTRY' => array(SS_MANUF|2, _("Work order entry")),
	'SA_MANUFISSUE' => array(SS_MANUF|3, _("Material issues entry")),
	'SA_MANUFRECEIVE' => array(SS_MANUF|4, _("Final product receive")),
	'SA_MANUFRELEASE' => array(SS_MANUF|5, _("Work order releases")),

	'SA_WORKORDERANALYTIC' => array(SS_MANUF_A|1, _("Work order analytical reports and inquiries")),
	'SA_WORKORDERCOST' => array(SS_MANUF_A|2, _("Manufacturing cost inquiry")),
	'SA_MANUFBULKREP' => array(SS_MANUF_A|3, _("Work order bulk reports")),
	'SA_BOMREP' => array(SS_MANUF_A|4, _("Bill of materials reports")),
//
// Dimensions
//
	'SA_DIMTAGS' => array(SS_DIM_C|1, _("Dimension tags")),

	'SA_DIMTRANSVIEW' => array(SS_DIM|1, _("Dimension view")),

	'SA_DIMENSION' => array(SS_DIM|2, _("Dimension entry")),

	'SA_DIMENSIONREP' => array(SS_DIM|3, _("Dimension reports")),
//
// Banking and General Ledger
//
	'SA_ITEMTAXTYPE' => array(SS_GL_C|1, _("Item tax type definitions")),
	'SA_GLACCOUNT' => array(SS_GL_C|2, _("GL accounts edition")),
	'SA_GLACCOUNTGROUP' => array(SS_GL_C|3, _("GL account groups")),
	'SA_GLACCOUNTCLASS' => array(SS_GL_C|4, _("GL account classes")),
	'SA_QUICKENTRY' => array(SS_GL_C|5, _("Quick GL entry definitions")),
	'SA_CURRENCY' => array(SS_GL_C|6, _("Currencies")),
	'SA_BANKACCOUNT' => array(SS_GL_C|7, _("Bank accounts")),
	'SA_TAXRATES' => array(SS_GL_C|8, _("Tax rates")),
	'SA_TAXGROUPS' => array(SS_GL_C|12, _("Tax groups")),
	'SA_FISCALYEARS' => array(SS_GL_C|9, _("Fiscal years maintenance")),
	'SA_GLSETUP' => array(SS_GL_C|10, _("Company GL setup")),
	'SA_GLACCOUNTTAGS' => array(SS_GL_C|11, _("GL Account tags")),
	'SA_GLCLOSE' => array(SS_GL_C|14, _("Closing GL transactions")),
	'SA_GLREOPEN' => array(SS_GL_C|15, _("Reopening GL transactions")), // see below
	'SA_MULTIFISCALYEARS' => array(SS_GL_C|13, _("Allow entry on non closed Fiscal years")),
	'SA_BANKSEQUENCE' => array(SS_GL_C|16, _("Bank check serial")),
	

	'SA_BANKTRANSVIEW' => array(SS_GL|1, _("Bank transactions view")),
	'SA_GLTRANSVIEW' => array(SS_GL|2, _("GL postings view")),
	'SA_EXCHANGERATE' => array(SS_GL|3, _("Exchange rate table changes")),
	'SA_PAYMENT' => array(SS_GL|4, _("Bank payments")),
	'SA_DEPOSIT' => array(SS_GL|5, _("Bank deposits")),
	'SA_BANKTRANSFER' => array(SS_GL|6, _("Bank account transfers")),
	'SA_RECONCILE' => array(SS_GL|7, _("Bank reconciliation")),
	'SA_JOURNALENTRY' => array(SS_GL|8, _("Manual journal entries")),
	'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_CANCEL_CHEQUE' => array(SS_GL|13, _("Cancel Cheque")),
	'SA_DOLLAR_BOOKING' => array(SS_GL|14, _("Dollar Booking")),

	'SA_GLANALYTIC' => array(SS_GL_A|1, _("GL analytical reports and inquiries")),
	'SA_TAXREP' => array(SS_GL_A|2, _("Tax reports and inquiries")),
	'SA_BANKREP' => array(SS_GL_A|3, _("Bank reports and inquiries")),
	'SA_GLREP' => array(SS_GL_A|4, _("GL reports and inquiries")),

	   // store and space

	'SA_STORE_REQUEST' => array(SS_STORE_T|1, _("Store Request Entey")),
	'SA_STORE_REQUEST_INQUIRY' => array(SS_STORE_I|2, _("Store Request Inquiry")),

    // ALL REPORTS ROGHTS SAPARATE

	'SA_REP_CUSTOMER_BALANCE' => array(SS_REP_ACC|1, _("Customer Balances")),
	'SA_REP_AGED_CUST_REP' => array(SS_REP_ACC|2, _("Aged Customer Analysis")),
	'SA_REP_CUST_TRIAL_BALANCE' => array(SS_REP_ACC|3, _("Customer Trial Balance")),
	'SA_REP_CUST_DETAIL_LISTING' => array(SS_REP_ACC|4, _("Customer Detail Listing")),
	'SA_REP_SALES_SUMMARY' => array(SS_REP_ACC|5, _("Sales Summary Report")),
	'SA_REP_PRICE_LISTING' => array(SS_REP_ACC|6, _("Price Listing")),
	'SA_REP_ORDER_STATUS_LISTING' => array(SS_REP_ACC|7, _("Order Status Listing")),
	'SA_REP_SALESMAN_LISTING' => array(SS_REP_ACC|8, _("Salesman Listing")),
	'SA_REP_PRINT_INVOCIES' => array(SS_REP_ACC|9, _("Print Invoices")),
	'SA_REP_PRINT_CREDIT_NOTES' => array(SS_REP_ACC|10, _("Print Credit Notes")),
	'SA_REP_PRINT_DELIVERIS' => array(SS_REP_ACC|11, _("Print Deliveries")),
	'SA_REP_PRINT_STATEMNTS' => array(SS_REP_ACC|12, _("Print Statements")),
	'SA_REP_PRINT_SALES_ORDER' => array(SS_REP_ACC|13, _("Print Sales Orders")),
	'SA_REP_PRINT_SALES_QUOTATION' => array(SS_REP_ACC|14, _("Print Sales Quotations")),
	'SA_REP_SUPPLIER_BALANCES' => array(SS_REP_ACC|15, _("Supplier Balances")),
	'SA_REP_AGED_SUPP_ANALYSES' => array(SS_REP_ACC|16, _("Aged Supplier Analyses")),
	'SA_REP_SUPP_TRIAL_BALANCES' => array(SS_REP_ACC|17, _("Supplier Trial Balances")),
	'SA_REP_PAYMENT_REPORT' => array(SS_REP_ACC|18, _("Payment Report")),
	'SA_REP_OUTSTANDING_GRNS_REPORT' => array(SS_REP_ACC|19, _("Outstanding GRNs Report")),
	'SA_REP_SUPP_DETAIL_LISTING' => array(SS_REP_ACC|20, _("Supplier Detail Listing")),
	'SA_REP_PRINT_PURCH_ORDER' => array(SS_REP_ACC|21, _("Print Purchase Orders")),
	'SA_REP_PRINT_REMITTANCES' => array(SS_REP_ACC|22, _("Print Remittances")),

	'SA_REP_INVENTORY_VALUATION_REPORT' => array(SS_REP_ACC|23, _("Inventory Valuation Report")),
	'SA_REP_INVENTORY_PLANNING_REPORT' => array(SS_REP_ACC|24, _("Inventory Planning Report")),
	'SA_STOCK_CHECK_SHEETS' => array(SS_REP_ACC|25, _("Stock Check Sheets")),
	'SA_REP_INVENTORY_SALES_REPORT' => array(SS_REP_ACC|26, _("Inventory Sales Report")),
	'SA_REP_GRN_VALUATION_REPORT' => array(SS_REP_ACC|27, _("GRN Valuation Report")),
	'SA_REP_INVENTORY_PURCHASING_REPORT' => array(SS_REP_ACC|28, _("Inventory Purchasing Report")),
	'SA_REP_INVENTORY_MOVEMENT_REPORT' => array(SS_REP_ACC|29, _("Inventory Movement Report")),
	'SA_REP_COSTED_INVENTORY_MOVEMENT_REPORT' => array(SS_REP_ACC|30, _("Costed Inventory Movement Report")),
	'SA_ITEM_SALES_SUMMARY_REPORT' => array(SS_REP_ACC|31, _("Item Sales Summary Report")),
	'SA_REP_INVENTORY_PURCH_TRANS_BASED' => array(SS_REP_ACC|32, _("Inventory Purchasing - Transaction Based")),
	'SA_REP_PRINT_RECEIPTS_REPORT' => array(SS_REP_ACC|33, _("Print Receipts")),
	'SA_REP_SALES_REPORT' => array(SS_REP_ACC|34, _("Sales Report")),
	'SA_REP_TOTAL_SALES_CUSTOMER_WISE_REPORT' => array(SS_REP_ACC|35, _("Total Sales Customer Wise Report")),
	'SA_REP_TOTAL_CREDIT_NOTE_CUSTOMER_WISE_REPORT' => array(SS_REP_ACC|36, _("Total Credit Note Customer Wise Report")),
	'SA_REP_SALES_DETAIL_REPORT' => array(SS_REP_ACC|37, _("Sales Detail Report")),
	'SA_REP_CREDIT_NOTE_DETAIL_REPORT' => array(SS_REP_ACC|38, _("Credit Note Detail Report")),
	'SA_REP_AGING_BILL_WISE_CUST_REPORT' => array(SS_REP_ACC|39, _("Aging Bill Wise Report")),
	'SA_REP_OF_PARTIES_NOT_SALE_REPORT' => array(SS_REP_ACC|40, _("Report Of Parties Not Sale")),
	'SA_REP_AGING_BILL_WISE_SUPP_REPORT' => array(SS_REP_ACC|41, _("Aging Bill Wise Report")),
	'SA_REP_PURCHASE_ANALAYSIS_REPORT' => array(SS_REP_ACC|42, _("Purchase Analaysis Report")),
	'SA_REP_AGED_SUPPLIER_IVOICE_ANALYSIS' => array(SS_REP_ACC|43, _("Aged Supplier Invoice Analyses")),
	'SA_REP_PRINT_PUCHASE_QUOTAION' => array(SS_REP_ACC|44, _("Print Purchase Quotation")),
	'SA_REP_CLOSING_STOCK_SUMMARY' => array(SS_REP_ACC|45, _("Closing Stock Summary Report")),
	'SA_REP_LEAS_TIME_OF_ITEM' => array(SS_REP_ACC|46, _("Lead Time of Item")),
	'SA_REP_INVENTORY_AGING_REPORT' => array(SS_REP_ACC|47, _("Inventory Aging Report")),
	'SA_REP_ITEM_WISE_PURCAHSE' => array(SS_REP_ACC|48, _("Item Wise Purchase Report")),
	'SA_REP_SUPPLIER_WISE_PURCHASE' => array(SS_REP_ACC|49, _("Supplier Wise Purchase Report")),
	'SA_REP_PURCHASE_SUMMARY_SUPPLIER' => array(SS_REP_ACC|50, _("Purchase Summary Supplier Report")),
	'SA_REP_STOCK_LEDGER_REPORT' => array(SS_REP_ACC|50, _("Stock Ledger Report")),
	'SA_REP_BILL_OF_MATERIAL_LISTING' => array(SS_REP_ACC|51, _("Bill of Material Listing")),
	'SA_REP_WORK_ORDER_LISTING' => array(SS_REP_ACC|52, _("Work Order Listing")),
	'SA_REP_PRINT_WO' => array(SS_REP_ACC|53, _("Print Work Orders")),
	'SA_REP_COST_OF_PRODUCTION' => array(SS_REP_ACC|54, _("Cost Of Production Report")),
	'SA_REP_MATERIAL_CONSUMPTION' => array(SS_REP_ACC|55, _("Material Consumption Report")),
	'SA_REP_WASTAGE_REPORT' => array(SS_REP_ACC|56, _("Wastage Report")),
	'SA_REP_PRODUCTION_SUMMARY_REPORT' => array(SS_REP_ACC|57, _("Production Summary Report")),
	'SA_REP_FIXED_ASSETS_REPORT' => array(SS_REP_ACC|58, _("Fixed Assets Report")),
	'SA_REP_DIMENSION_SUMMARY' => array(SS_REP_ACC|59, _("Dimension Summary")),
	'SA_REP_BANK_STATEMENT' => array(SS_REP_ACC|60, _("Bank Statement")),
	'SA_REP_BANK_STATEMENT_RECONCILE' => array(SS_REP_ACC|61, _("Bank Statement w/ &Reconcile")),
	'SA_REP_GERNAL_LEDGER' => array(SS_REP_ACC|62, _("General Ledger")),
	'SA_REP_LIST_OF_JOURNAL_ENTRIES' => array(SS_REP_ACC|62, _("List of Journal Entries")),
	'SA_REP_GL_ACCOUNT_TRANSACTION' => array(SS_REP_ACC|63, _("GL Account Transactions")),
	'SA_REP_ANNUAL_EXPENSE_BREAKDOWN' => array(SS_REP_ACC|64, _("Annual Expense Breakdown")),
	'SA_REP_BALANCE_SHEET' => array(SS_REP_ACC|65, _("Balance Sheet")),
	'SA_REP_PROFIT_AND_LOSS_STAT' => array(SS_REP_ACC|66, _("Profit and Loss Statement")),
	'SA_REP_TRAIL_BALANCE' => array(SS_REP_ACC|67, _("Trial Balance")),
	'SA_REP_TAX_REPORT' => array(SS_REP_ACC|68, _("Tax Report")),
	'SA_REP_AUDIT_TRAIL' => array(SS_REP_ACC|69, _("Audit Trail")),
		'SA_REP_INVENTORY_MOVEMENT' => array(SS_REP_ACC|70, _("Inventory Movement Inquiry Report")),
	'SA_REP_OUSTANDING_DEV_REPORT' => array(SS_REP_ACC|71, _("Outstanding Sales Orders Report")),
						'SA_REP_OUSTANDING_PO_REPORT' => array(SS_REP_ACC|72, _("Outstanding Purchase Order Report")),	
	'SA_REP_FILESYSTEM' => array(SS_REP_ACC|73, _("File System Report")),	
	'SA_PRODUCTION_COSTING_REP' => array(SS_REP_ACC|74, _("Production Costing Report")),	
);

if (!@$SysPrefs->allow_gl_reopen)
	unset($security_areas['SA_GLREOPEN']);
/*
	This function should be called whenever we want to extend core access level system
	with new security areas and/or sections i.e.: 
	. on any page with non-standard security areas
	. in security roles editor
	The call should be placed between session.inc inclusion and page() call.
	Up to 155 security sections and 155 security areas for any extension can be installed.
*/
function add_access_extensions()
{
	global $security_areas, $security_sections, $installed_extensions;

	foreach($installed_extensions as $extid => $ext) {
		$accext = hook_invoke($ext['package'], 'install_access', $dummy);
		if ($accext == null) continue;

		$scode = 100;
		$acode = 100;
		$extsections = $accext[1];
		$extareas = $accext[0];
		$extcode = $extid<<16;
		
		$trans = array();
		foreach($extsections as $code =>$name) {
			$trans[$code] = $scode<<8;
			// reassign section codes
			$security_sections[$trans[$code]|$extcode] = $name;
			$scode++;
		}
		foreach($extareas as $code => $area) {
			$section = $area[0]&0xff00;
			// extension modules:
			// if area belongs to nonstandard section
			// use translated section codes and
			// preserve lower part of area code
			if (isset($trans[$section])) {
				$section = $trans[$section];
			} 
				// otherwise assign next available
				// area code >99
			$area[0] = $extcode | $section | ($acode++);
			$security_areas[$code] = $area;
		}
	}
}

function check_edit_access($name)
{
	global $input_security;

	$access = @$input_security[$name];

	if (!$access)
		$access = @$input_security['']; // default access level

	if (!$access)
		return true; // if constraint is not defined edit access is allowed

	return  user_check_access($access);
}
/*
	Returns POST value or null if edit access to $name control is forbidden.
*/
function access_post($name, $dflt=null)
{
	if (!check_edit_access($name))
		return $dflt;
	else
		return get_post($name, $dflt);
}

/*
	Returns numeric input value or null if edit access to $name control is forbidden.
*/
function access_num($name, $dflt=null)
{
	if (!check_edit_access($name))
		return $dflt;
	else
		return input_num($name, $dflt);
}
