This is how the application is organized on a technical level.

The application is dersigned in the MVC Style


index.php
   This is the main entry point. All requests go through it.
   It is the pages router
   For example, 
     you write index.php?page=GeneralLedger/chartOfAccounts
     router translates this to controllers/GeneralLedger/chartOfAccounts.php

settings loader
     from common.php
     for db settings and default user

db initializer
     start connetion to database before any controller
     end connection after controller and view finish them work

Page loading and rendering
Page loading and rendering, step by step and life cycle
  
First, you type in browser: someaddress/index.php?page=index

   1 index.php load settings, connect to db
   2 index.php load controllers/index.php
   3 controllers/index.php checks user, if session expired or user unexists -> redirect to page=login
   4 controllers/index.php load user info from session, including user permissions
   5 controllers/index.php load translation model
   6 controllers/index.php load views/index.php and render that
   7 views/index.php uses translation model to translate interface and user for showing user info.
      Also it uses user permissions to hide or to show some ui elements

Page Model / View / Controller with Example: 
index.php?page=GeneralLedger/chartOfAccounts
   controller -> controllers/GeneralLedger/chartOfAccounts.php
   model -> models/GeneralLedger/chartOfAccounts.php
   view -> views/GeneralLedger/chartOfAccounts.php

Controller
controller responds for
    loading GeneralLedger/chartOfAccounts page, render that
    handling ajax requests:
    delete row from ledgerchartofaccounts
    get row from leddgerchartofaccounts
    update row in leddgerchartofaccounts

View
view responds
    render all aspects of GeneralLedger/chartOfAccounts page
    Beside rendering common interface items like sidebar and top,  it contains three subpage which activated by mode param in address:
    - grid mode, in which view renders grid with buttons for print, edit, delete etc
    - view mode is activated if click on edit button in row
    - edit mode is activated if click on edit button in view mode

   view relies on the model for all things(load data, editing, deleting) on controller and model

   it shoud be easy to customize.

Model
model responds
    - working with database(table ledgerchartofaccounts)
      loading many rows, one row, updating and deleting row
    - naming conversion like "GLBudgetPeriod1" => "GL Budget Period 1"
    - grouping fields like  "Main" => [ "GLAccountNumber", "GLAccountName"] or "Current" => ["GLCurrentYearPeriod1", "GLCurrentYearPeriod2"]
      this info used by view for rendering tabs and content in tabs
    - loading values for GLBalanceType and GLAccountType from ledgeraccounttypes and ledgerbalancetype

How to make new screens in the system
  Now each screen(GeneralLedger/chartOfAccounts, GeneralLedger/bankAccounts etc) is just a model. The page is generated by that model.
  Models arelocated in /models.
  If you type in browser something like this index.php?page=grid&action=GeneralLedger/ledgerAccountGroup
  then model models/GeneralLedger/ledgerAccountGroup is loaded.   
  So, to create new screen you first need to make new model.
 
    + copy existing model, like models/GeneralLedger/chartOfAccounts to models/SomeCategory/somepage.php.
    + edit new model code(table name, columns, titles)
    + open in browser index.php?page=grid&action=SomeCategory/somepage

    Each model contains the following information:
  - table name for working on
  - id field name which used for selecting and deleting specific row
  - column names for grid
  - column names grouped by categories for displaying tabs(Main, Current, Budget etc).
    description for each column contains:
    + name
    + type input for editing,
    + default value
    + optional dataProviders to fill different dropdowns(like a choosing Currencies, GL Bank Account etc)
    + optional disable editing field
    + dropdowns like CurrencyID
  - column names and their displayed names for translating
  - titles for dashboard and breadcrumb
   
  After model is filled - screen is done.
 
All screens are rendered by one view(views/gridView). For some screens view must be modified and a new view created. Please loo at the other examples in the system for more information.