Bankaccount Documentation
Bank Account Controller Documentation
File: /controllers/bankaccountController.php
Purpose: Complete CRUD management of bank accounts with accounting integration and balance tracking
Last Updated: December 20, 2024
Total Functions: 15
Lines of Code: ~769
---
๐ Overview
The Bank Account Controller is a comprehensive financial module that manages all aspects of bank account operations within the ERP system. It provides:
- โข Complete CRUD operations for bank account management
- โข Automated chart of accounts integration
- โข Double-entry accounting with journal entry generation
- โข Real-time balance tracking and account movement logging
- โข Multi-currency support and Visa card integration
- โข Account activation/deactivation with audit trails
- โข API integration support with external banking systems
- โข Bulk operations for account management efficiency
- โข Transaction history and balance reconciliation
Primary Functions
- โ Create new bank accounts with accounting integration
- โ Update account information and settings
- โ Activate/deactivate accounts with status management
- โ Track account balances with movement history
- โ Generate automated journal entries for all transactions
- โ Manage currency types and Visa card settings
- โ Bulk operations for multiple account management
- โ Integration with chart of accounts system
- โ API support for external system integration
- โ Comprehensive audit trail maintenance
Related Controllers
- โข bankAccountDeficitController.php - Account deficit management
- โข bankAccountOpController.php - Transaction history viewing
- โข depositcheckController.php - Check deposits
- โข checkwithdrawalController.php - Check withdrawals
- โข dailyentry.php - Journal entry management
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **bankaccount** | Bank account master data | accountid, accountname, accountnumber, accountbeginingbalance, bankid, visa, visaDisPer, treeId, conditions, userid | |
| **bank** | Bank master information | bankid, bankname, bankcode | |
| **accountmovement** | Account transaction log | accountmovementid, accountid, accountmovementamount, accountmovementbefore, accountmovementafter, tablename |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **accountstree** | Chart of accounts | accountstreeid, name, parentid, accounttype, customName | |
| **dailyentry** | Journal entry headers | dailyentryid, entryComment, entryDate | |
| **dailyentrycreditor** | Credit side entries | dailyentrycreditorid, dailyentryid, accountstreeid, value | |
| **dailyentrydebtor** | Debit side entries | dailyentrydebtoreid, dailyentryid, accountstreeid, value |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **youtubelink** | Tutorial/help links | youtubelinkid, title, url | |
| **user** | System users | userid, username |
๐๏ธ Database Schema Details
bankaccount Table Structure
CREATE TABLE bankaccount (
accountid INT PRIMARY KEY AUTO_INCREMENT,
accountname VARCHAR(255) NOT NULL,
accountnumber VARCHAR(100),
accountbeginingbalance DECIMAL(15,2) DEFAULT 0.00,
accountcurrencytype VARCHAR(10) DEFAULT 'USD',
accountdate DATE,
bankid INT NOT NULL,
visa TINYINT DEFAULT 0, -- 0=regular, 1=visa card account
visaDisPer DECIMAL(5,2) DEFAULT 0.00, -- Visa discount percentage
treeId INT, -- Link to chart of accounts
conditions TINYINT DEFAULT 0, -- 0=active, 1=inactive
userid INT,
webApiId INT DEFAULT 0, -- External API integration ID
comment TEXT,
FOREIGN KEY (bankid) REFERENCES bank(bankid),
FOREIGN KEY (treeId) REFERENCES accountstree(accountstreeid),
FOREIGN KEY (userid) REFERENCES user(userid)
);
---
๐ Key Functions
1. Default Action - Add Account Form
Location: Line 122
Purpose: Display form for creating new bank accounts
Process Flow:
1. Load Available Banks:
$bankData = loadBanks();
$smarty->assign("bankData", $bankData);
```
2. **Setup Navigation**:
```php
$breadcrumbObject->add('ุงุฏุงุฑุฉ ุงูุจููู><a href="bankaccountController.php?do=show">ุญุณุงุจุงุช ุงูุจููู</a> > ุงุถุงูุฉ ุญุณุงุจ', 'bankaccountController.php', 0);
```
3. **Display Form**: Uses `add.html` template with bank dropdown
---
### 2. **add()** - Create New Bank Account
**Location**: Line 388
**Purpose**: Complete bank account creation with accounting integration
**Function Signature**:
php
function add()
**Process Flow**:
#### **Step 1: Extract and Validate Form Data**
php
$bankId = $_POST['bankid'];
$accountName = $_POST['accountname'];
$accountNumber = $_POST['accountnumber'];
$accountBeginingbalance = $_POST['accountbeginingbalance'];
$accountCurrencytype = $_POST['accountcurrencytype'];
$comment = $_POST['comment'];
$visa = (int) $_POST['visa'];
$visaDisPer = (float) $_POST['visaDisPer'];
#### **Step 2: Create Account Record**
php
$myBankaccount->accountbeginingbalance = $accountBeginingbalance;
$myBankaccount->accountcurrencytype = $accountCurrencytype;
$myBankaccount->accountdate = date("Y-m-d");
$myBankaccount->accountname = $accountName;
$myBankaccount->accountnumber = $accountNumber;
$myBankaccount->bankid = $bankId;
$myBankaccount->visa = $visa;
$myBankaccount->visaDisPer = $visaDisPer;
$myBankaccount->conditions = 0; // Active by default
$myBankaccount->userid = $_SESSION["userid"];
$myBankaccount->webApiId = (int) $_POST['webApiId'];
$accountId = $myBankaccountRecord->insert($myBankaccount, $comment);
#### **Step 3: Create Initial Account Movement (if balance > 0)**
php
if ($accountBeginingbalance > 0) {
insertAccountmovement(0, $accountBeginingbalance, 0, $accountBeginingbalance,
"ุงุถุงูุฉ ุญุณุงุจ ูู ุจูู", $accountId, $accountId, $bankId, "bankaccountController.php");
}
#### **Step 4: Integrate with Chart of Accounts**
php
$bankData = $myBankRecord->load($bankId);
$treeid = addTreeElement("$accountName / $bankData->bankname", 38, 3, 0, 1, '', 0, 0);
$myBankaccount->treeId = $treeid;
$myBankaccountRecord->update($myBankaccount, $comment);
#### **Step 5: Generate Opening Journal Entry**
php
$dailyEntry->entryComment = 'ุชู ุงุถุงูุฉ ุญุณุงุจ ' . $accountName;
// Debit: Bank Account (Asset)
$dailyEntryDebtor->accountstreeid = $treeid;
$dailyEntryDebtor->value = $accountBeginingbalance;
// Credit: Equity/Capital Account
$dailyEntryCreditor->accountstreeid = 121; // Capital account
$dailyEntryCreditor->value = $accountBeginingbalance;
insertEntery($dailyEntry, $dailyEntryDebtorArray, $dailyEntryCreditorArray, 1);
**Return Value**: 1 on success, 2 on error
---
### 3. **show()** - Display Account List
**Location**: Line 170
**Purpose**: Show all bank accounts or filter by specific bank
**Process Flow**:
1. **Determine Display Mode**:
```php
$bankId = $_REQUEST['bankid'];
if (isset($bankId) && $bankId != "-1") {
$bankaccountData = showByBankId($bankId);
} else {
$bankaccountData = showAll();
}
```
2. **Load Support Data**:
```php
$bankData = loadBanks();
$youtubes = $youtubeLinkDAO->queryAll();
```
3. **Display Results**: Uses `show.html` template with account listing
---
### 4. **showAll()** - Load All Accounts
**Location**: Line 478
**Purpose**: Retrieve all bank accounts with ordering
**Function Signature**:
php
function showAll()
**Implementation**:
php
global $myBankaccountEx;
$bankaccountData = $myBankaccountEx->queryWithOrder();
return $bankaccountData;
---
### 5. **showByBankId($bankid)** - Filter by Bank
**Location**: Line 488
**Purpose**: Retrieve accounts for specific bank
**Function Signature**:
php
function showByBankId($bankid)
**Implementation**:
php
global $myBankaccountEx;
$bankaccountData = $myBankaccountEx->queryWithBankId($bankid);
return $bankaccountData;
---
### 6. **edit()** - Load Account for Editing
**Location**: Line 566
**Purpose**: Load specific account data for modification
**Function Signature**:
php
function edit()
**Process Flow**:
php
$accountId = $_GET['accountid'];
$loadData = $myBankaccountEx->loadBankAccount($accountId);
return $loadData;
**Used by**: Edit form (`do=edit`) and details view (`do=details`)
---
### 7. **update()** - Modify Existing Account
**Location**: Line 578
**Purpose**: Update account information with chart of accounts synchronization
**Function Signature**:
php
function update()
**Process Flow**:
#### **Step 1: Extract Update Data**
php
$bankId = $_POST['bankid'];
$accountName = $_POST['accountname'];
$accountNumber = $_POST['accountnumber'];
$accountBeginingbalance = $_POST['accountbeginingbalance'];
$accountCurrencytype = $_POST['accountcurrencytype'];
$visa = (int) $_POST['visa'];
$visaDisPer = (float) $_POST['visaDisPer'];
$accountId = $_POST['accountid'];
#### **Step 2: Load Current Data**
php
$oldData = $myBankaccountRecord->load($accountId);
#### **Step 3: Update Account Record**
php
$myBankaccount->accountbeginingbalance = $accountBeginingbalance;
$myBankaccount->accountcurrencytype = $accountCurrencytype;
$myBankaccount->accountname = $accountName;
$myBankaccount->accountnumber = $accountNumber;
$myBankaccount->bankid = $bankId;
$myBankaccount->visa = $visa;
$myBankaccount->visaDisPer = $visaDisPer;
$myBankaccount->treeId = $oldData->treeId;
$myBankaccount->accountid = $accountId;
$myBankaccountRecord->update($myBankaccount, $comment);
#### **Step 4: Update Chart of Accounts**
php
$treeId = $oldData->treeId;
$treedata = $accountsTreeDAO->load($treeId);
$bankData = $myBankRecord->load($bankId);
$treedata->name = "$accountName / $bankData->bankname";
$treedata->customName = "$accountName / $bankData->bankname";
editTreeElement($treedata);
**Return Value**: 1 on success, 2 on error
---
### 8. **deletetemp($accountId)** - Deactivate Account
**Location**: Line 498
**Purpose**: Soft delete (deactivate) bank account
**Function Signature**:
php
function deletetemp($accountId)
**Process Flow**:
php
$myBankaccount->accountdate = date("Y-m-d");
$myBankaccount->conditions = 1; // Set to inactive
$myBankaccount->userid = $_SESSION["userid"];
$myBankaccount->accountid = $accountId;
$myBankaccountEx->updateConditions($myBankaccount);
**Return Value**: 1 on success, 2 on error
---
### 9. **returndelete($accountId)** - Reactivate Account
**Location**: Line 533
**Purpose**: Restore previously deactivated account
**Function Signature**:
php
function returndelete($accountId)
**Process Flow**:
php
$myBankaccount->accountdate = date("Y-m-d");
$myBankaccount->conditions = 0; // Set to active
$myBankaccount->userid = $_SESSION["userid"];
$myBankaccount->accountid = $accountId;
$myBankaccountEx->updateConditions($myBankaccount);
---
### 10. **executeOperation()** - Bulk Operations
**Location**: Line 638
**Purpose**: Execute bulk operations on multiple accounts
**Function Signature**:
php
function executeOperation()
**Process Flow**:
1. **Extract Operation Parameters**:
```php
$operationType = $_POST['operation'];
$choosedItemArr = $_POST['choosedItem'];
```
2. **Process Each Selected Account**:
```php
foreach ($choosedItemArr as $accountId) {
$bankaccountData = $myBankaccountRecord->load($accountId);
$accountName = $bankaccountData->accountname;
if ($operationType == '1') {
deletetemp($accountId); // Deactivate
} elseif ($operationType == "2") {
returndelete($accountId); // Reactivate
} elseif ($operationType == "3") {
delete($accountId); // Hard delete
}
}
```
3. **Generate Operation Report**: Creates summary of completed operations
---
### 11. **Balance Management Functions**
#### **getAccountBalanceBefore($accountid)**
**Location**: Line 689
**Purpose**: Retrieve current account balance
php
function getAccountBalanceBefore($accountid) {
global $myBankaccountRecord;
$bankaccountData = $myBankaccountRecord->load($accountid);
return $bankaccountData->accountbeginingbalance;
}
#### **getAccountBalanceAndPlus($accountid, $amount)**
**Location**: Line 701
**Purpose**: Calculate balance after addition
php
function getAccountBalanceAndPlus($accountid, $accountmovementamount) {
$bankaccountData = $myBankaccountRecord->load($accountid);
$accountBalanceBefore = $bankaccountData->accountbeginingbalance;
$accountBalanceAfter = $accountBalanceBefore + $accountmovementamount;
return array($accountBalanceBefore, $accountBalanceAfter);
}
#### **getAccountBalanceAndMins($accountid, $amount)**
**Location**: Line 716
**Purpose**: Calculate balance after subtraction
php
function getAccountBalanceAndMins($accountid, $accountmovementamount) {
$bankaccountData = $myBankaccountRecord->load($accountid);
$accountBalanceBefore = $bankaccountData->accountbeginingbalance;
$accountBalanceAfter = $accountBalanceBefore - $accountmovementamount;
return array($accountBalanceBefore, $accountBalanceAfter);
}
#### **updateBankAccount($accountid, $newBalance)**
**Location**: Line 731
**Purpose**: Update account balance after transactions
php
function updateBankAccount($accountid, $accountBalanceAfter) {
global $myBankaccount;
global $myBankaccountEx;
$myBankaccount->accountbeginingbalance = $accountBalanceAfter;
$myBankaccount->userid = $_SESSION['userid'];
$myBankaccount->accountid = $accountid;
$myBankaccountEx->updateAccountbeginingbalance($myBankaccount);
}
---
### 12. **insertAccountmovement()** - Transaction Logging
**Location**: Line 746
**Purpose**: Create account movement record for audit trail
**Function Signature**:
php
function insertAccountmovement($accountbefore, $accountamount, $accountmovementtype,
$accountafter, $processname, $accountmovementmodelid, $accountid, $bankid, $tablename)
**Implementation**:
php
$myAccountmovement->accountid = $accountid;
$myAccountmovement->accountmovementafter = $accountafter;
$myAccountmovement->accountmovementamount = $accountamount;
$myAccountmovement->accountmovementbefore = $accountbefore;
$myAccountmovement->accountmovementdate = date("Y-m-d H:i:s");
$myAccountmovement->accountmovementmodelid = $accountmovementmodelid;
$myAccountmovement->accountmovementtype = $accountmovementtype;
$myAccountmovement->bankid = $bankid;
$myAccountmovement->processname = $processname;
$myAccountmovement->tablename = $tablename;
$myAccountmovement->userid = $_SESSION['userid'];
$myAccountmovementRecord->insert($myAccountmovement);
---
## ๐ Workflows
### Workflow 1: Bank Account Creation
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ START: Create New Bank Account โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Display Account Creation Form โ
โ - Load available banks for selection โ
โ - Show account configuration options โ
โ - Include currency and Visa card settings โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Process Form Submission โ
โ - Validate required fields โ
โ - Extract account details โ
โ - Begin database transaction โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Create Account Record โ
โ - Insert into bankaccount table โ
โ - Set initial balance and configuration โ
โ - Assign to current user โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Chart of Accounts Integration โ
โ - Create account tree element โ
โ - Set account hierarchy (under Bank Assets) โ
โ - Update account with tree ID โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. Create Initial Account Movement (if balance > 0) โ
โ - Log opening balance transaction โ
โ - Record in accountmovement table โ
โ - Set source as bankaccountController โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. Generate Opening Journal Entry โ
โ - Create daily entry header โ
โ - Debit: Bank Account (Asset) โ
โ - Credit: Capital/Equity Account โ
โ - Amount: Opening balance โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 7. Commit Transaction โ
โ - Finalize all database changes โ
โ - Return success/error status โ
โ - Redirect to appropriate page โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
---
### Workflow 2: Account Balance Management
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ START: Account Transaction Occurs โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Load Current Account Balance โ
โ - Query bankaccount table โ
โ - Get accountbeginingbalance โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Calculate New Balance โ
โ - For deposits: balance + amount โ
โ - For withdrawals: balance - amount โ
โ - Validate sufficient funds (if required) โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Create Account Movement Record โ
โ - Record before/after balances โ
โ - Set transaction amount and type โ
โ - Link to source transaction โ
โ - Set process description โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Update Account Balance โ
โ - Update accountbeginingbalance โ
โ - Set modification timestamp โ
โ - Record modifying user โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. Generate Journal Entry (if applicable) โ
โ - Create appropriate debit/credit entries โ
โ - Link to transaction source โ
โ - Maintain accounting equation balance โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
---
## ๐ URL Routes & Actions
| URL Parameter | Function Called | Description |
|---------------|----------------|-------------|
| `do=` (empty) | Default action | Display add account form |
| `do=add` | `add()` | Process new account creation |
| `do=show` | Display accounts | Show account list (all or by bank) |
| `do=edit` | `edit()` | Load account for modification |
| `do=update` | `update()` | Process account updates |
| `do=details` | `edit()` | View account details (read-only) |
| `do=deletetemp` | `deletetemp()` | Deactivate account |
| `do=returndelete` | `returndelete()` | Reactivate account |
| `do=executeOperation` | `executeOperation()` | Execute bulk operations |
| `do=sucess` | - | Show success message |
| `do=error` | - | Show error message |
### Required Parameters by Action
**Add Account** (`do=add`):
- `bankid` - Bank ID (required)
- `accountname` - Account name (required)
- `accountnumber` - Account number (optional)
- `accountbeginingbalance` - Opening balance (required)
- `accountcurrencytype` - Currency type (required)
- `visa` - Visa card flag (0/1)
- `visaDisPer` - Visa discount percentage
- `webApiId` - External API ID (optional)
- `comment` - Description (optional)
**Show Accounts** (`do=show`):
- `bankid` - Bank filter (-1 for all banks)
**Update Account** (`do=update`):
- `accountid` - Account ID (required)
- All fields from add operation
- `accountdate` - Account modification date
- `conditions` - Account status (0=active, 1=inactive)
**Bulk Operations** (`do=executeOperation`):
- `operation` - Operation type (1=deactivate, 2=reactivate, 3=delete)
- `choosedItem[]` - Array of account IDs
---
## ๐งฎ Calculation Methods
### Balance Calculations
php
// Current balance retrieval
$currentBalance = getAccountBalanceBefore($accountid);
// Addition calculation
list($balanceBefore, $balanceAfter) = getAccountBalanceAndPlus($accountid, $amount);
// Subtraction calculation
list($balanceBefore, $balanceAfter) = getAccountBalanceAndMins($accountid, $amount);
// Balance update
updateBankAccount($accountid, $newBalance);
### Journal Entry Logic
php
// Opening balance entry (account creation)
// Debit: Bank Account (Asset) - Increases asset
// Credit: Capital Account (Equity) - Increases equity
// Transaction entries handled by individual controllers
// Each controller calls balance update functions
---
## ๐ Security & Permissions
### Authentication & Authorization
- All actions require authentication: `include_once("../public/authentication.php")`
- User ownership tracking in all records
- Session-based user identification
- Transaction-based operations for data consistency
### Input Validation
php
// Secure input handling
$bankId = $_POST['bankid']; // Required bank selection
$accountName = $_POST['accountname']; // Required account name
$accountBeginingbalance = $_POST['accountbeginingbalance']; // Numeric validation
$visa = (int) $_POST['visa']; // Type casting for safety
$visaDisPer = (float) $_POST['visaDisPer']; // Float validation
### Transaction Safety
- Database transactions for atomic operations
- Rollback on errors to maintain data integrity
- Foreign key constraints for referential integrity
- Audit trail through account movement logging
---
## ๐ฏ Special Features
### 1. **Visa Card Integration**
php
// Visa card account configuration
$myBankaccount->visa = $visa; // 0=regular account, 1=visa account
$myBankaccount->visaDisPer = $visaDisPer; // Discount percentage for visa transactions
### 2. **Multi-Currency Support**
php
// Currency type configuration
$myBankaccount->accountcurrencytype = $accountCurrencytype; // USD, EUR, etc.
### 3. **API Integration**
php
// External banking API integration
$myBankaccount->webApiId = (int) $_POST['webApiId']; // External system reference
### 4. **Chart of Accounts Integration**
php
// Automatic account hierarchy management
$treeid = addTreeElement("$accountName / $bankData->bankname", 38, 3, 0, 1, '', 0, 0);
// Links bank account to chart of accounts for financial reporting
### 5. **CURL/API Support**
php
// API response handling
if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
// Return JSON response for API calls
$data = array('status' => 1, 'message' => 'ุชู ุช ุงูุนู ููู ุจูุฌุงุญ', 'message_en' => 'Success');
echo json_encode($data);
} else {
// Regular web interface redirect
header("location:?do=sucess");
}
---
## ๐งช Common Use Cases
### 1. **New Bank Account Setup**
Scenario: Company opens new checking account
- โข Select bank from dropdown
- โข Enter account name: "Main Checking Account"
- โข Enter account number: "1234567890"
- โข Set opening balance: $10,000.00
- โข Set currency: USD
- โข Configure as regular account (not Visa)
- โข System creates chart of accounts entry
- โข Opening journal entry generated automatically
### 2. **Visa Card Account Configuration**
Scenario: Setup company credit card account
- โข Create account with visa flag = 1
- โข Set visa discount percentage: 2.5%
- โข System applies discount to qualifying transactions
- โข Special reporting for visa transactions
### 3. **Account Deactivation**
Scenario: Close old account
- โข Use bulk operations to select multiple accounts
- โข Choose deactivate operation
- โข Accounts marked as inactive (conditions = 1)
- โข Hidden from active selections but retained for history
### 4. **Multi-Currency Account**
Scenario: International business operations
- โข Create EUR account for European transactions
- โข Create GBP account for UK operations
- โข Maintain separate balances per currency
- โข Support currency-specific reporting
---
## ๐ Troubleshooting
### Common Issues
1. **Chart of Accounts Integration Failure**
```
Issue: Account created but no tree element
Cause: addTreeElement() function failure
Solution: Check accounts tree table and parent ID 38 exists
```
2. **Balance Calculation Errors**
```
Issue: Account balance doesn't match transaction history
Cause: Missing or incorrect account movements
Solution: Verify accountmovement table completeness
```
3. **Journal Entry Missing**
```
Issue: Opening balance created but no journal entry
Cause: insertEntery() function failure
Solution: Check daily entry tables and function availability
```
### Debug Queries
sql
-- Check account and tree integration
SELECT ba.accountname, ba.accountbeginingbalance, at.name, at.accountstreeid
FROM bankaccount ba
LEFT JOIN accountstree at ON ba.treeId = at.accountstreeid
WHERE ba.conditions = 0;
-- Verify account movements
SELECT accountid, SUM(CASE WHEN accountmovementtype = 0 THEN accountmovementamount ELSE -accountmovementamount END) as net_movement
FROM accountmovement
GROUP BY accountid;
-- Check journal entry consistency
SELECT de.entryComment, SUM(dedd.value) as total_debit, SUM(dedc.value) as total_credit
FROM dailyentry de
LEFT JOIN dailyentrydebtor dedd ON de.dailyentryid = dedd.dailyentryid
LEFT JOIN dailyentrycreditor dedc ON de.dailyentryid = dedc.dailyentryid
WHERE de.entryComment LIKE '%ุญุณุงุจ%'
GROUP BY de.dailyentryid;
```
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข bankAccountDeficitController.md - Deficit management
- โข bankAccountOpController.md - Transaction viewing
- โข Chart of Accounts Documentation - Tree structure management
- โข Journal Entry Documentation - Double-entry accounting
- โข API Integration Guide - External system connectivity
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When API integration features are enhanced