Partner Withdrawal Controller Documentation
File: /controllers/partnerwithdrawalController.php
Purpose: Manages partner withdrawals, transfers between partners, and partner financial operations
Last Updated: December 20, 2024
Total Functions: 8+
Lines of Code: ~400+
---
๐ Overview
The Partner Withdrawal Controller handles financial operations related to business partners, including partner withdrawals from business funds, transfers between partners, and partner account management. This controller supports partnership business models where multiple partners have financial stakes and need to manage their capital contributions and withdrawals from the business.
Primary Functions
- โ Process partner withdrawals from business funds
- โ Handle transfers between partner accounts
- โ Manage partner financial balances
- โ Track partner transaction history
- โ Update cash registers and bank accounts for partner operations
- โ Generate daily financial entries for partner activities
- โ Partner account movement tracking
- โ Integration with banking and safe management
Related Controllers
- โข saveController.php - Safe/cash register management
- โข bankaccountController.php - Bank account operations
- โข dailyentry.php - Daily financial entries
- โข accountstree.php - Chart of accounts
- โข transferclientaccountsController.php - Account transfers
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **partnerwithdrawal** | Partner withdrawal records | partnerwithdrawalid, partnerid, amount, withdrawaldate, reason, status | |
| **partnertransferbetween** | Inter-partner transfers | partnertransferbetweenid, frompartnerid, topartnerid, amount, transferdate | |
| **partner** | Partner information | partnerid, partnername, partnerbalance, partnerpercentage |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **save** | Cash registers/safes | saveid, savename, savevalue | |
| **savedaily** | Daily safe transactions | savedailyid, saveid, amount, transactiontype, date | |
| **bankaccount** | Bank accounts | bankaccountid, accountname, balance | |
| **accountmovement** | Account movements | accountmovementid, accountid, amount, movementtype, date |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **bank** | Bank definitions | bankid, bankname | |
| **youtubelink** | Tutorial videos | youtubelinkid, title, url |
๐ Key Functions
1. Partner Withdrawal Processing
Purpose: Handle partner withdrawals from business funds
Expected Functionality:
- โข Validate withdrawal amounts against partner balances
- โข Update partner account balances
- โข Reduce business cash/bank balances
- โข Create withdrawal transaction records
- โข Generate daily financial entries
Process Flow:
1. Validate partner eligibility and balance
2. Check business liquidity for withdrawal
3. Update partner balance (decrease)
4. Update business safe/bank balance (decrease)
5. Create withdrawal transaction record
6. Generate daily entry for accounting
2. Inter-Partner Transfers
Purpose: Transfer funds between partner accounts
Expected Functionality:
- โข Transfer amounts between partner balances
- โข Validate transfer amounts and permissions
- โข Create transfer transaction records
- โข Update partner balance histories
Process Flow:
1. Validate source partner balance
2. Validate transfer amount and permissions
3. Decrease source partner balance
4. Increase destination partner balance
5. Create transfer transaction record
3. Partner Account Management
Purpose: Manage partner financial accounts and balances
Expected Functionality:
- โข View partner account balances and histories
- โข Track partner contributions and withdrawals
- โข Calculate partner profit/loss shares
- โข Generate partner financial statements
4. Financial Integration
Purpose: Integrate partner operations with business financial systems
Expected Functionality:
- โข Update business cash registers for partner withdrawals
- โข Create bank account movements for partner transactions
- โข Generate daily accounting entries
- โข Maintain financial audit trails
---
๐ Workflows
Workflow 1: Partner Withdrawal Process
---
Workflow 2: Inter-Partner Transfer
---
๐ URL Routes & Actions
Expected routes following ERP patterns:
| URL Parameter | Expected Function | Description | Authentication | |
|---|---|---|---|---|
| `do=` (empty) | Default | Display withdrawal form | Required | |
| `do=add` | `add()` | Process partner withdrawal | Required | |
| `do=show` | `show()` | List partner withdrawals | Required | |
| `do=transfer` | `transfer()` | Display transfer form | Required | |
| `do=processtransfer` | `processTransfer()` | Execute partner transfer | Required | |
| `do=edit` | `edit()` | Edit withdrawal record | Required | |
| `do=delete` | `delete()` | Cancel withdrawal | Required |
๐งฎ Calculation Methods
Partner Balance Updates
// Withdrawal processing
function processWithdrawal($partnerId, $amount, $sourceType, $sourceId) {
// Update partner balance
$partner = $partnerDAO->load($partnerId);
$partner->partnerbalance -= $amount;
$partnerDAO->update($partner);
// Update business account
if ($sourceType == 'save') {
$save = $saveDAO->load($sourceId);
$save->savevalue -= $amount;
$saveDAO->update($save);
} else if ($sourceType == 'bank') {
$bank = $bankDAO->load($sourceId);
$bank->balance -= $amount;
$bankDAO->update($bank);
}
}
Inter-Partner Transfer
// Transfer between partners
function transferBetweenPartners($fromPartnerId, $toPartnerId, $amount) {
// Validate source balance
$fromPartner = $partnerDAO->load($fromPartnerId);
if ($fromPartner->partnerbalance < $amount) {
throw new Exception("Insufficient balance");
}
// Update balances
$fromPartner->partnerbalance -= $amount;
$toPartner = $partnerDAO->load($toPartnerId);
$toPartner->partnerbalance += $amount;
// Save updates
$partnerDAO->update($fromPartner);
$partnerDAO->update($toPartner);
}
Daily Entry Generation
// Generate accounting entry for withdrawal
function createWithdrawalEntry($partnerId, $amount, $date) {
// Partner Capital Account (Credit)
createDailyEntry("Partner Capital - " . $partnerName, $amount, 'credit', $date);
// Cash/Bank Account (Debit)
createDailyEntry("Cash Account", $amount, 'debit', $date);
}
---
๐ Security & Permissions
Security Features
- โข Partner identity validation
- โข Balance verification before operations
- โข Transaction audit trails
- โข Financial controls and limits
Security Considerations
- โข Partner permission levels (who can withdraw how much)
- โข Approval workflows for large withdrawals
- โข Multi-signature requirements
- โข Financial audit trail maintenance
---
๐ Performance Considerations
Transaction Management
1. Atomic Operations: Ensure all related updates succeed or fail together
2. Balance Verification: Real-time balance checking
3. Financial Precision: Accurate decimal arithmetic for money
Database Optimization
- โข Index on partner ID and transaction dates
- โข Efficient balance calculation queries
- โข Transaction history archival strategies
---
๐ Common Issues & Troubleshooting
1. Insufficient Balance Errors
Issue: Partner tries to withdraw more than available balance
Solution: Implement real-time balance checking and validation
2. Financial Inconsistencies
Issue: Partner balances don't match business account totals
Solution: Implement balance reconciliation procedures
3. Transaction Integrity
Issue: Partial updates if system fails mid-transaction
Solution: Use database transactions for atomic operations
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข Financial Management Guide - Safe and account operations
- โข Partnership Accounting - Partner capital account management
- โข Transaction Management - Database consistency patterns
---
Documented By: AI Assistant
Review Status: โ ๏ธ Requires detailed function analysis
Next Review: After complete implementation review