Faida Documentation

Profit (Faida) Controller Documentation

File: /controllers/FaidaController.php

Purpose: Manages profit/sales reports, customer specific reports, and promotional bill tracking

Last Updated: December 19, 2024

Total Functions: 17

Lines of Code: 1,106

---

๐Ÿ“‹ Overview

The Faida (Profit) Controller manages profit-related operations and customer-specific promotional reports in the ERP system. It handles:

Primary Functions

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables (Direct Operations)

Table NamePurposeKey Columns
`faida`Main promotional billsid, clientId, premmium, installment_duration, total_amount, comment, user_id, storeId, conditions, presenter
`faidaproduct`Promotional bill productsid, faidaId, productId, pronum, proprice, faidaproducttotalprice, pricetypepro, discounttype
### Related Tables (Read Operations)

Table NamePurposeKey Columns
`client`Customer informationclientid, clientname, clientphone, clientaddress
`product`Product catalogproductId, productName, productBuyPrice, lastbuyprice, meanbuyprice
`storedetail`Product inventorystoredetailid, storeid, productid, productquantity
`storereport`Inventory movementsstorereportid, productid, storeid, productquantity, processname
`quickprofitstore`Store profit trackingstoreId, theDate, sellVal, sellCostBuyPrice
`quickprofitproduct`Product profit trackingproductId, theDate, sellVal, sellCostMeanBuyPrice
### Reference Tables (Lookups)

Table NamePurposeKey Columns
`store`Warehouse/store masterstoreid, storename, storeaddress
`unit`Unit of measuresunitid, unitname, unitsymbol
`productunit`Product-unit relationshipsproductid, unitid, productnumber
`billname`Bill type definitionsbillnameid, billname, billdescription
`billsettings`Bill configurationbillsettingsid, billnameid, property, value
---

๐Ÿ”ง Key Functions

Core Operations

add() (Lines 416-441)

Purpose: Creates a new promotional bill (Faida)

Parameters:

Process Flow:

โ”Œโ”€ Start add() โ”€โ”
Get POST data
Set properties
Get new ID
Add products
โ””โ”€ Complete โ”€โ”€โ”€โ”€โ”˜

Code Example:

$myFaida->clientId = $client_id;
$myFaida->premmium = $premium_time;
$myFaida->total_amount = $total_amount;
$myFaidaId = $myFaidaDAO->insert($myFaida);
addFaida($myFaidaId);

addFaida($myFaidaId) (Lines 443-524)

Purpose: Adds promotional products to a Faida bill and updates inventory

Parameters: $myFaidaId - The promotional bill ID

Process Flow:

โ”Œโ”€ Get Products โ”€โ”
Loop through
Properties
Update Store
Insert history
โ””โ”€ Complete โ”€โ”€โ”€โ”€โ”€โ”˜

Returns: Updates inventory and creates store reports

show() (Lines 526-545)

Purpose: Retrieves all promotional bills for display

Parameters: None (uses session user ID)

Process Flow:

โ”Œโ”€ Query Bills โ”€โ”€โ”
Get all Faida
Get username
Get clientname
โ””โ”€ Return Data โ”€โ”€โ”˜

Returns: Array of promotional bills with user and client names

update() (Lines 547-577)

Purpose: Updates existing promotional bill

Parameters:

Process Flow:

โ”Œโ”€ Get Data โ”€โ”€โ”€โ”€โ”€โ”
From POST
Main record
Products
Products
โ””โ”€ Complete โ”€โ”€โ”€โ”€โ”˜

delete() (Lines 579-586)

Purpose: Deletes a promotional bill and its products

Parameters: $_GET['id'] - The promotional bill ID

Utility Functions

loadClient() (Lines 634-639)

Purpose: Loads all active clients for dropdown selection

Returns: Array of client data

loadUnit() (Lines 641-646)

Purpose: Loads all units for product unit selection

Returns: Array of unit data

loadProductUnitWithProductAndUnit($productId, $unitId) (Lines 648-657)

Purpose: Gets product-unit relationship data

Parameters: $productId, $unitId

Returns: Product unit data object

Inventory Management Functions

decreaseProductQuantity(...) (Lines 660-722)

Purpose: Decreases product quantity in store and handles size/color variants

Parameters: Multiple parameters for store detail, quantity changes, and tracking

Process Flow:

โ”Œโ”€ Calculate โ”€โ”€โ”€โ”€โ”
New quantity
Color variants
Detail record
Calculations
โ””โ”€ Track Report โ”˜

insertStoredetail(...) (Lines 725-759)

Purpose: Inserts new store detail record for product

Parameters: Store, product, and quantity information

getStoreDetails($storeId, $productId, $unittype, $sizeColorStoreDetailId, $sizeId, $colorId) (Lines 787-811)

Purpose: Retrieves current store detail information for a product

Returns: Array with store detail data, ID, and current quantity

Profit Calculation Functions

quickProfitRow(...) (Lines 896-962)

Purpose: Calculates and tracks profit data for promotional sales

Parameters: Product data, quantities, prices, and store information

Process Flow:

โ”Œโ”€ Calculate โ”€โ”€โ”€โ”€โ”
Profit margins
vs Regular
Profit tables
Array totals
โ””โ”€ Complete โ”€โ”€โ”€โ”€โ”˜

ifCollectiveProductReCalculateCost($buyProduct) (Lines 813-848)

Purpose: Recalculates cost for collective/bundle products

Parameters: $buyProduct - Product object

Returns: Updated product object with recalculated costs

lastAndMeanBuyPrice_Sell(...) (Lines 850-894)

Purpose: Updates last and mean buy prices for sold products

Parameters: Price tracking and calculation parameters

Specialized Functions

ifCollectiveDecreaseItsIngriedientsInStore(...) (Lines 964-1034)

Purpose: Handles inventory decrease for collective product ingredients

Parameters: Product data, quantities, and store information

onlineTempStoreDetailFunc(...) (Lines 1036-1054)

Purpose: Updates temporary online store detail for web integration

Parameters: Store, product, size, color, quantity, and edit status

insertStorereportupdate(...) (Lines 1080-1106)

Purpose: Inserts store report entries for audit trail

Parameters: Product, store, quantity changes, and process information

---

๐Ÿ”„ Business Logic Flow

Creating a Promotional Bill

Start โ†’ Validate User โ†’ Load Form Data โ†’ Select Products
  โ†“
Display Form โ†’ User Input โ†’ Submit Data โ†’ Validate Input
  โ†“
Create Faida Record โ†’ Add Products โ†’ Update Inventory โ†’ Generate Reports
  โ†“
Calculate Profits โ†’ Track Changes โ†’ Update Online Store โ†’ Complete

Promotional Product Management

Product Selection โ†’ Unit Calculation โ†’ Price Determination
  โ†“
Discount Application โ†’ Total Calculation โ†’ Inventory Check
  โ†“
Stock Decrease โ†’ Cost Calculation โ†’ Profit Tracking โ†’ Report Generation

Inventory Integration Flow

Product Sale โ†’ Check Store Details โ†’ Update Quantities
  โ†“
Handle Size/Color โ†’ Calculate Costs โ†’ Update Prices
  โ†“
Generate Reports โ†’ Track Movements โ†’ Sync Online Store

---

โš ๏ธ Common Issues

PHP 8.2 Compatibility Issues

1. Object initialization issues: Function creates objects properly using new stdClass()

2. Count() usage: Uses proper array checking with count() and !empty()

3. Type casting: Properly handles numeric conversions

Performance Considerations

1. Complex calculations: Heavy profit calculation functions may impact performance

2. Multiple database operations: Each product addition triggers multiple DB updates

3. Store synchronization: Online store updates add overhead

Business Logic Warnings

1. Inventory validation: No validation for negative stock after promotional sales

2. Price calculations: Complex profit margin calculations may have rounding issues

3. Collective products: Bundle product handling adds complexity

---

๐Ÿ”— Dependencies

Required Files

Database Dependencies

External Dependencies

Related Controllers

---

Database Schema Notes: