63 lines
2.7 KiB
PHP
63 lines
2.7 KiB
PHP
<?php
|
|
require_once __DIR__ . '/db/config.php';
|
|
|
|
function syncRepayments() {
|
|
$db = db();
|
|
$now = date('Y-m-d');
|
|
|
|
// Find all active investments where a payment is due
|
|
$stmt = $db->prepare("
|
|
SELECT i.*, s.founder_id
|
|
FROM investments i
|
|
JOIN startups s ON i.startup_id = s.id
|
|
WHERE i.status = 'approved' AND i.next_payment_date <= ? AND i.next_payment_date IS NOT NULL
|
|
");
|
|
$stmt->execute([$now]);
|
|
$dueInvestments = $stmt->fetchAll();
|
|
|
|
foreach ($dueInvestments as $inv) {
|
|
$db->beginTransaction();
|
|
try {
|
|
$amountToPay = $inv['monthly_dividend'];
|
|
|
|
// Ensure we don't overpay
|
|
if ($inv['paid_amount'] + $amountToPay > $inv['total_return']) {
|
|
$amountToPay = $inv['total_return'] - $inv['paid_amount'];
|
|
}
|
|
|
|
if ($amountToPay > 0) {
|
|
// 1. Deduct from founder
|
|
$stmt = $db->prepare("UPDATE users SET balance = balance - ? WHERE id = ?");
|
|
$stmt->execute([$amountToPay, $inv['founder_id']]);
|
|
|
|
// 2. Add to investor
|
|
$stmt = $db->prepare("UPDATE users SET balance = balance + ? WHERE id = ?");
|
|
$stmt->execute([$amountToPay, $inv['investor_id']]);
|
|
|
|
// 3. Update investment record
|
|
$newPaidAmount = $inv['paid_amount'] + $amountToPay;
|
|
$newStatus = ($newPaidAmount >= $inv['total_return']) ? 'completed' : 'approved';
|
|
$nextPayment = date('Y-m-d', strtotime($inv['next_payment_date'] . ' +1 month'));
|
|
|
|
// If completed, clear next payment date
|
|
if ($newStatus === 'completed') {
|
|
$nextPayment = null;
|
|
}
|
|
|
|
$stmt = $db->prepare("UPDATE investments SET paid_amount = ?, status = ?, next_payment_date = ? WHERE id = ?");
|
|
$stmt->execute([$newPaidAmount, $newStatus, $nextPayment, $inv['id']]);
|
|
|
|
// 4. Create a notification for both parties (Optional but good)
|
|
$stmt = $db->prepare("INSERT INTO notifications (user_id, content) VALUES (?, ?)");
|
|
$stmt->execute([$inv['investor_id'], "You received a dividend payment of £" . number_format($amountToPay, 2) . " from " . $inv['id']]);
|
|
$stmt->execute([$inv['founder_id'], "A dividend payment of £" . number_format($amountToPay, 2) . " was paid to an investor."]);
|
|
}
|
|
|
|
$db->commit();
|
|
} catch (Exception $e) {
|
|
$db->rollBack();
|
|
// Log error or ignore for now
|
|
}
|
|
}
|
|
}
|