| Server IP : 72.60.21.38 / Your IP : 216.73.216.25 Web Server : LiteSpeed System : Linux uk-fast-web1372.main-hosting.eu 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64 User : u390967363 ( 390967363) PHP Version : 8.2.30 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/u390967363/domains/aibenproperties.com/public_html/app/ |
Upload File : |
<?php
session_start();
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/functions.php';
$role = $_SESSION['user_role'] ?? 'guest';
$role_norm = strtolower(str_replace([' ', '-'], '_', (string)$role));
if (!isset($_SESSION['user_id']) || !in_array($role_norm, ['super_admin','admin','sales_manager','agent','marketer','customer_rep','chairman_ceo'])) {
include __DIR__ . '/includes/header.php';
echo '<div class="container p-4"><div class="alert alert-danger">Access denied.</div></div>';
include __DIR__ . '/includes/footer.php';
exit;
}
$companyId = getCurrentCompanyId();
$notice = null;
$type = 'info';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['sales_action']) && $_POST['sales_action'] === 'submit_draft') {
$clientId = isset($_POST['client_id']) && ctype_digit($_POST['client_id']) ? (int)$_POST['client_id'] : null;
$payload = [
'client_name' => trim($_POST['client_name'] ?? ''),
'project' => trim($_POST['project'] ?? ''),
'original_value' => (float)($_POST['original_value'] ?? 0),
'discount_amount' => (float)($_POST['discount_amount'] ?? 0),
'discount_approved_by_role' => trim($_POST['discount_approved_by_role'] ?? ''),
'discount_approved_by_name' => trim($_POST['discount_approved_by_name'] ?? ''),
'final_value' => (float)($_POST['final_value'] ?? 0),
'txn' => [
'date' => $_POST['txn_date'] ?? '',
'amount' => (float)($_POST['txn_amount'] ?? 0),
'type' => $_POST['txn_type'] ?? 'Bank Transfer',
'notes' => trim($_POST['txn_notes'] ?? '')
],
'commission' => [
'pct' => (float)($_POST['commission_pct'] ?? 0),
'amount' => (float)($_POST['commission_amount'] ?? 0),
'role' => $_POST['beneficiary_role'] ?? '',
'name' => trim($_POST['beneficiary_name'] ?? ''),
'acct' => trim($_POST['beneficiary_account'] ?? ''),
'bank' => trim($_POST['beneficiary_bank'] ?? ''),
]
];
try {
$methodToken = strtolower(str_replace(' ', '_', $payload['txn']['type']));
$cols = ['amount','status'];
$vals = [$payload['txn']['amount'], 'pending_confirmation'];
$ph = ['?','?'];
if ($clientId) { $cols[]='user_id'; $vals[]=$clientId; $ph[]='?'; }
if ($companyId && function_exists('tableHasColumn') && tableHasColumn('payments','company_id')) { $cols[]='company_id'; $vals[]=$companyId; $ph[]='?'; }
$methodCol = function_exists('tableHasColumn') && tableHasColumn('payments','method') ? 'method' : (function_exists('tableHasColumn') && tableHasColumn('payments','payment_method') ? 'payment_method' : null);
if ($methodCol) { $cols[]=$methodCol; $vals[]=$methodToken; $ph[]='?'; }
if (!empty($payload['txn']['date'])) {
if (function_exists('tableHasColumn') && tableHasColumn('payments','payment_date')) { $cols[]='payment_date'; $vals[]=$payload['txn']['date']; $ph[]='?'; }
elseif (function_exists('tableHasColumn') && tableHasColumn('payments','date')) { $cols[]='date'; $vals[]=$payload['txn']['date']; $ph[]='?'; }
}
if (function_exists('tableHasColumn') && tableHasColumn('payments','reference')) {
$cols[]='reference'; $vals[]='sales_submission'; $ph[]='?';
} elseif (function_exists('tableHasColumn') && tableHasColumn('payments','transaction_id')) {
$cols[]='transaction_id'; $vals[]='sales_submission'; $ph[]='?';
}
$sql = "INSERT INTO payments (" . implode(',', $cols) . ") VALUES (" . implode(',', $ph) . ")";
$st = $pdo->prepare($sql); $st->execute($vals);
$payId = (int)$pdo->lastInsertId();
$dealId = null;
try {
$hasDeals = $pdo->query("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'deals'")->fetchColumn();
if ((int)$hasDeals > 0) {
$colsD = []; $valsD = []; $phD = [];
$ref = 'SR-' . date('Ym') . '-' . $payId;
// choose value column
$dealValue = $payload['final_value'] > 0 ? $payload['final_value'] : ($payload['original_value'] - $payload['discount_amount']);
$dealValue = max(0, (float)$dealValue);
// map common columns safely
$hasCompany = function_exists('tableHasColumn') && tableHasColumn('deals','company_id');
$colListStmt = $pdo->query("DESCRIBE deals");
$existingCols = array_map(fn($c) => $c['Field'], $colListStmt->fetchAll(PDO::FETCH_ASSOC));
$push = function($col,$val) use (&$colsD,&$valsD,&$phD,$existingCols){ if (in_array($col, $existingCols, true)) { $colsD[]=$col; $valsD[]=$val; $phD[]='?'; } };
$push('reference', $ref);
$push('client_id', $clientId ?: null);
$push('agent_id', (int)($_SESSION['user_id'] ?? 0) ?: null);
$push('type', 'sale');
$push('stage', 'submitted');
$push('value', $dealValue);
$push('deal_value', $dealValue);
$push('original_value', $payload['original_value']);
$push('discount_amount', $payload['discount_amount']);
$push('final_value', $payload['final_value']);
$push('discount_approved_by_role', $payload['discount_approved_by_role']);
$push('discount_approved_by_name', $payload['discount_approved_by_name']);
$push('date', date('Y-m-d'));
if ($hasCompany && ($companyId ?? null)) $push('company_id', $companyId);
if (in_array('created_at', $existingCols, true)) $push('created_at', date('Y-m-d H:i:s'));
if (!empty($colsD)) {
$insD = $pdo->prepare("INSERT INTO deals (" . implode(',', $colsD) . ") VALUES (" . implode(',', $phD) . ")");
$insD->execute($valsD);
$dealId = (int)$pdo->lastInsertId();
}
// link payment to deal if possible
if ($dealId && function_exists('tableHasColumn') && tableHasColumn('payments','deal_id')) {
$up = $pdo->prepare("UPDATE payments SET deal_id = ? WHERE id = ?" . (($companyId && function_exists('tableHasColumn') && tableHasColumn('payments','company_id')) ? " AND company_id = ?" : ""));
$pp = [$dealId,$payId]; if ($companyId && function_exists('tableHasColumn') && tableHasColumn('payments','company_id')) $pp[] = $companyId;
$up->execute($pp);
}
}
} catch (Exception $e) {
// Non-blocking: deal persistence best-effort only
}
logActivity($_SESSION['user_id'], 'SALES_SUBMIT_TO_FIN', json_encode(['payment_id'=>$payId,'deal_id'=>$dealId] + $payload));
$notice = 'Submission sent to Finance for verification and approval.';
$type = 'success';
} catch (Exception $e) {
$notice = 'Failed to submit: ' . $e->getMessage();
$type = 'danger';
}
}
// Load clients for selector
$clients = [];
try {
$q = "SELECT id, name, email FROM users WHERE role = 'client'";
if ($companyId && function_exists('tableHasColumn') && tableHasColumn('users','company_id')) { $q .= " AND company_id = " . (int)$companyId; }
$q .= " ORDER BY name";
$clients = $pdo->query($q)->fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e) {}
include __DIR__ . '/includes/header.php';
?>
<div class="container-fluid px-4">
<div class="d-flex justify-content-between align-items-center mt-4 mb-3">
<div>
<h2 class="fw-bold text-navy">Sales & Revenue</h2>
<div class="text-muted">Unified sales submission engine (foundation)</div>
</div>
<div>
<a href="transactions.php" class="btn btn-sm btn-outline-secondary"><i class="fa-solid fa-receipt me-2"></i>View Payments</a>
</div>
</div>
<?php if ($notice): ?>
<div class="alert alert-<?= htmlspecialchars($type) ?>"><?= htmlspecialchars($notice) ?></div>
<?php endif; ?>
<form method="POST" action="sales-revenue.php" class="row g-4">
<input type="hidden" name="sales_action" value="submit_draft">
<div class="col-12">
<div class="card shadow-sm">
<div class="card-header bg-white"><strong>Section 1 – Deal Info</strong></div>
<div class="card-body row g-3">
<div class="col-md-4">
<label class="form-label">Client Name</label>
<input name="client_name" class="form-control" required>
</div>
<div class="col-md-4">
<label class="form-label">Select Client (optional)</label>
<select name="client_id" class="form-select">
<option value="">-- Choose Client --</option>
<?php foreach ($clients as $c): ?>
<option value="<?= (int)$c['id'] ?>"><?= htmlspecialchars($c['name'] . ' — ' . ($c['email'] ?? '')) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label">Project</label>
<input name="project" class="form-control" required>
</div>
<div class="col-md-4">
<label class="form-label">Original Deal Value</label>
<input type="number" step="0.01" min="0" name="original_value" class="form-control" required>
</div>
<div class="col-md-3">
<label class="form-label">Discount Amount</label>
<input type="number" step="0.01" min="0" name="discount_amount" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Discount Approved By</label>
<select name="discount_approved_by_role" class="form-select">
<option value="">Select</option>
<option>Admin</option>
<option>Executive</option>
<option>Chairman</option>
<option>HR</option>
<option>Other</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label">Approved By Name</label>
<input name="discount_approved_by_name" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Final Deal Value</label>
<input type="number" step="0.01" min="0" name="final_value" class="form-control">
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="card shadow-sm">
<div class="card-header bg-white"><strong>Section 2 – Structured Transaction Entry</strong></div>
<div class="card-body row g-3">
<div class="col-md-3">
<label class="form-label">Date</label>
<input type="date" name="txn_date" class="form-control" required>
</div>
<div class="col-md-3">
<label class="form-label">Amount</label>
<input type="number" step="0.01" min="0" name="txn_amount" class="form-control" required>
</div>
<div class="col-md-3">
<label class="form-label">Payment Type</label>
<select name="txn_type" class="form-select">
<option>Bank Transfer</option>
<option>POS</option>
<option>Cash</option>
<option>Cheque</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label">Notes</label>
<input name="txn_notes" class="form-control" placeholder="Optional">
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="card shadow-sm">
<div class="card-header bg-white"><strong>Section 3 – Commission</strong></div>
<div class="card-body row g-3">
<div class="col-md-3">
<label class="form-label">Commission %</label>
<input type="number" step="0.01" min="0" name="commission_pct" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Commission Amount</label>
<input type="number" step="0.01" min="0" name="commission_amount" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Beneficiary Role</label>
<select name="beneficiary_role" class="form-select">
<option>Marketer</option>
<option>Agent</option>
<option>Internal Staff</option>
<option>Contact Centre</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label">Beneficiary Name</label>
<input name="beneficiary_name" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Account Number</label>
<input name="beneficiary_account" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Bank</label>
<input name="beneficiary_bank" class="form-control">
</div>
</div>
</div>
</div>
<div class="col-12 text-end">
<button class="btn btn-primary"><i class="fa-solid fa-paper-plane me-2"></i>Save as Draft</button>
</div>
</form>
<div class="text-muted small mt-2">Commission becomes payable only after Finance approval.</div>
</div>
<?php include __DIR__ . '/includes/footer.php'; ?>