v45
This commit is contained in:
parent
871eb7711b
commit
48562f356c
BIN
assets/docs/financials/doc_balance_sheets_1772314825.xlsx
Normal file
BIN
assets/docs/financials/doc_balance_sheets_1772314825.xlsx
Normal file
Binary file not shown.
BIN
assets/docs/financials/doc_cash_flow_statements_1772314825.xlsx
Normal file
BIN
assets/docs/financials/doc_cash_flow_statements_1772314825.xlsx
Normal file
Binary file not shown.
BIN
assets/docs/financials/doc_gross_margin_1772314825.xlsx
Normal file
BIN
assets/docs/financials/doc_gross_margin_1772314825.xlsx
Normal file
Binary file not shown.
BIN
assets/docs/financials/doc_income_statements_1772314825.xlsx
Normal file
BIN
assets/docs/financials/doc_income_statements_1772314825.xlsx
Normal file
Binary file not shown.
BIN
assets/docs/financials/doc_revenue_breakdown_1772314825.xlsx
Normal file
BIN
assets/docs/financials/doc_revenue_breakdown_1772314825.xlsx
Normal file
Binary file not shown.
@ -13,13 +13,18 @@ $countries = require_once 'includes/countries.php';
|
||||
$success = '';
|
||||
$error = '';
|
||||
|
||||
$stmt = db()->prepare("SELECT * FROM startups WHERE founder_id = ?");
|
||||
$stmt->execute([$_SESSION['user_id']]);
|
||||
$existingStartup = $stmt->fetch();
|
||||
$startupId = $_GET['id'] ?? null;
|
||||
$existingStartup = null;
|
||||
|
||||
if ($startupId) {
|
||||
$stmt = db()->prepare("SELECT * FROM startups WHERE id = ? AND founder_id = ?");
|
||||
$stmt->execute([$startupId, $_SESSION['user_id']]);
|
||||
$existingStartup = $stmt->fetch();
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$name = $_POST['name'] ?? '';
|
||||
$description = $_POST['description'] ?? ''; // New field for Short Pitch
|
||||
$description = $_POST['description'] ?? '';
|
||||
$legal_name = $_POST['legal_name'] ?? '';
|
||||
$country = $_POST['country'] ?? '';
|
||||
$industry = $_POST['industry'] ?? '';
|
||||
@ -37,6 +42,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
|
||||
$current_cash_balance = $_POST['current_cash_balance'] ?? 0.0;
|
||||
$burn_rate = $_POST['burn_rate'] ?? 0.0;
|
||||
$founder_return_rate = isset($_POST['founder_return_rate']) && $_POST['founder_return_rate'] !== '' ? (float)$_POST['founder_return_rate'] : null;
|
||||
|
||||
$doc_fields = [
|
||||
'doc_income_statements',
|
||||
@ -115,43 +121,40 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
}
|
||||
|
||||
if ($existingStartup) {
|
||||
// Count columns: 24 columns in SET clause
|
||||
$stmt = db()->prepare("UPDATE startups SET
|
||||
name = ?, description = ?, legal_name = ?, country = ?, industry = ?, sub_industry = ?, business_model = ?, product_service = ?, operational_stage = ?,
|
||||
cofounder_equity_pct = ?, cofounder_equity_type = ?, cofounder_responsibilities = ?, desired_cofounder_experience = ?, cofounder_commitment = ?, other_partnership_details = ?,
|
||||
current_cash_balance = ?, burn_rate = ?,
|
||||
doc_income_statements = ?, doc_balance_sheets = ?, doc_cash_flow_statements = ?, doc_revenue_breakdown = ?, doc_gross_margin = ?,
|
||||
recommended_return_rate = ?, recommended_return_reasoning = ?
|
||||
recommended_return_rate = ?, recommended_return_reasoning = ?, founder_return_rate = ?
|
||||
WHERE id = ? AND founder_id = ?");
|
||||
|
||||
// Execute parameters: 24 columns + 2 WHERE params = 26
|
||||
$stmt->execute([
|
||||
$name, $description, $legal_name, $country, $industry, $sub_industry, $business_model, $product_service, $operational_stage,
|
||||
$cofounder_equity_pct, $cofounder_equity_type, $cofounder_responsibilities, $desired_cofounder_experience, $cofounder_commitment, $other_partnership_details,
|
||||
$current_cash_balance, $burn_rate,
|
||||
$uploaded_paths['doc_income_statements'], $uploaded_paths['doc_balance_sheets'], $uploaded_paths['doc_cash_flow_statements'],
|
||||
$uploaded_paths['doc_revenue_breakdown'], $uploaded_paths['doc_gross_margin'],
|
||||
$recommended_return_rate, $recommended_return_reasoning, $existingStartup['id'], $_SESSION['user_id']
|
||||
$recommended_return_rate, $recommended_return_reasoning, $founder_return_rate,
|
||||
$existingStartup['id'], $_SESSION['user_id']
|
||||
]);
|
||||
$final_id = $existingStartup['id'];
|
||||
} else {
|
||||
// Count columns: 26 columns
|
||||
$stmt = db()->prepare("INSERT INTO startups (
|
||||
name, description, legal_name, country, industry, sub_industry, business_model, product_service, operational_stage,
|
||||
cofounder_equity_pct, cofounder_equity_type, cofounder_responsibilities, desired_cofounder_experience, cofounder_commitment, other_partnership_details,
|
||||
current_cash_balance, burn_rate,
|
||||
doc_income_statements, doc_balance_sheets, doc_cash_flow_statements, doc_revenue_breakdown, doc_gross_margin,
|
||||
founder_id, recommended_return_rate, recommended_return_reasoning, status
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'private')");
|
||||
founder_id, recommended_return_rate, recommended_return_reasoning, founder_return_rate, status
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'private')");
|
||||
|
||||
// Execute parameters: 25 ? placeholders + 'private' literal = 26 items
|
||||
$stmt->execute([
|
||||
$name, $description, $legal_name, $country, $industry, $sub_industry, $business_model, $product_service, $operational_stage,
|
||||
$cofounder_equity_pct, $cofounder_equity_type, $cofounder_responsibilities, $desired_cofounder_experience, $cofounder_commitment, $other_partnership_details,
|
||||
$current_cash_balance, $burn_rate,
|
||||
$uploaded_paths['doc_income_statements'], $uploaded_paths['doc_balance_sheets'], $uploaded_paths['doc_cash_flow_statements'],
|
||||
$uploaded_paths['doc_revenue_breakdown'], $uploaded_paths['doc_gross_margin'],
|
||||
$_SESSION['user_id'], $recommended_return_rate, $recommended_return_reasoning
|
||||
$_SESSION['user_id'], $recommended_return_rate, $recommended_return_reasoning, $founder_return_rate
|
||||
]);
|
||||
$final_id = db()->lastInsertId();
|
||||
}
|
||||
@ -195,6 +198,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
<?php if ($success): ?>
|
||||
<div style="background: rgba(48, 209, 88, 0.1); color: #30d158; padding: 15px; border-radius: 12px; border: 1px solid #30d158; margin-bottom: 25px;">
|
||||
<i class="fas fa-check-circle"></i> <?= $success ?>
|
||||
<?php if (!$startupId): ?>
|
||||
<div style="margin-top: 15px;">
|
||||
<a href="start_funding_round.php?id=<?= $final_id ?>" class="btn btn-primary" style="display: inline-block;">Launch Funding Round Now</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
@ -281,6 +289,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 20px; border-top: 1px solid #333; padding-top: 20px;">
|
||||
<label style="display: block; margin-bottom: 8px; font-weight: 700;">Proposed Investor Return (%)</label>
|
||||
<input type="number" step="0.1" name="founder_return_rate" value="<?= htmlspecialchars($existingStartup['founder_return_rate'] ?? '') ?>" placeholder="e.g. 8.5" style="width: 100%; padding: 12px; border-radius: 8px; background: #222; border: 1px solid var(--accent-color); color: #fff; font-size: 16px; font-weight: 700;">
|
||||
<small style="color: #aaa; display: block; margin-top: 8px;">Your proposed annual dividend yield. The platform also computes a recommendation based on your financials.</small>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 30px;">
|
||||
<h3 style="font-size: 16px; margin-bottom: 15px; color: #fff;">Upload Financial Documents (PDF/Images)</h3>
|
||||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px;">
|
||||
|
||||
@ -46,8 +46,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
db()->beginTransaction();
|
||||
try {
|
||||
// Update startup with round-specific settings
|
||||
$stmt = db()->prepare("UPDATE startups SET status = ?, founder_return_rate = ? WHERE id = ?");
|
||||
$stmt->execute([$status, $founder_rate, $startup_id]);
|
||||
// We also update funding_target so that general views show the current target
|
||||
$stmt = db()->prepare("UPDATE startups SET status = ?, founder_return_rate = ?, funding_target = ? WHERE id = ?");
|
||||
$stmt->execute([$status, $founder_rate, $goal, $startup_id]);
|
||||
|
||||
// Create the round
|
||||
$stmt = db()->prepare("INSERT INTO funding_rounds (startup_id, funding_goal, status) VALUES (?, ?, 'Active')");
|
||||
@ -70,7 +71,7 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Step 2: Start Funding Round — <?= htmlspecialchars($platformName) ?></title>
|
||||
<title>Launch Funding Round — <?= htmlspecialchars($platformName) ?></title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
@ -79,7 +80,7 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
|
||||
<div class="container" style="max-width: 600px; margin: 0 auto;">
|
||||
<div class="card" style="padding: 40px;">
|
||||
<h1 style="font-size: 28px; font-weight: 800; margin-bottom: 10px;">Step 2: Launch Funding Round</h1>
|
||||
<h1 style="font-size: 28px; font-weight: 800; margin-bottom: 10px;">Launch Funding Round</h1>
|
||||
<p style="color: var(--text-secondary); margin-bottom: 30px;">
|
||||
Set your investment targets and return rates for <strong><?= htmlspecialchars($startup['name']) ?></strong>.
|
||||
</p>
|
||||
@ -92,7 +93,7 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div style="background: rgba(0, 255, 0, 0.1); border: 1px solid rgba(0, 255, 0, 0.3); color: #55ff55; padding: 15px; border-radius: 12px; margin-bottom: 25px;">
|
||||
<?= htmlspecialchars($success) ?>
|
||||
<i class="fas fa-check-circle"></i> <?= htmlspecialchars($success) ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div style="background: rgba(0, 242, 255, 0.05); border: 1px solid var(--accent-blue); padding: 20px; border-radius: 16px; margin-bottom: 30px; text-align: center;">
|
||||
@ -105,12 +106,14 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
<div style="margin-bottom: 20px;">
|
||||
<label style="display: block; margin-bottom: 8px; font-weight: 600; font-size: 14px;">Funding Goal (£) *</label>
|
||||
<input type="number" name="funding_goal" min="100" step="100" required placeholder="e.g. 50000"
|
||||
value="<?= htmlspecialchars($startup['funding_target'] ?: '') ?>"
|
||||
style="width: 100%; padding: 14px; background: var(--surface-color); border: 1px solid var(--border-color); border-radius: 12px; color: #fff; font-size: 18px; font-weight: 700;">
|
||||
</div>
|
||||
|
||||
<div style="margin-bottom: 25px;">
|
||||
<label style="display: block; margin-bottom: 8px; font-weight: 600; font-size: 14px;">Your Proposed Dividend (%) <span style="font-weight: 400; opacity: 0.6;">(Optional)</span></label>
|
||||
<input type="number" name="founder_return_rate" step="0.1" min="0" max="100" placeholder="e.g. 8.5"
|
||||
value="<?= htmlspecialchars($startup['founder_return_rate'] !== null ? $startup['founder_return_rate'] : '') ?>"
|
||||
style="width: 100%; padding: 14px; background: var(--surface-color); border: 1px solid var(--border-color); border-radius: 12px; color: #fff; font-size: 16px;">
|
||||
<small style="color: var(--text-secondary); display: block; margin-top: 8px; line-height: 1.4;">
|
||||
This is the annual return rate you propose to investors. It will be displayed alongside the platform recommendation.
|
||||
@ -120,8 +123,8 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
<div style="margin-bottom: 30px;">
|
||||
<label style="display: block; margin-bottom: 8px; font-weight: 600; font-size: 14px;">Listing Status</label>
|
||||
<select name="listing_status" style="width: 100%; padding: 14px; background: var(--surface-color); border: 1px solid var(--border-color); border-radius: 12px; color: #fff;">
|
||||
<option value="public">Public (Visible to all investors)</option>
|
||||
<option value="private">Private (Only visible via direct link)</option>
|
||||
<option value="public" <?= $startup['status'] === 'public' ? 'selected' : '' ?>>Public (Visible to all investors)</option>
|
||||
<option value="private" <?= $startup['status'] === 'private' ? 'selected' : '' ?>>Private (Only visible via direct link)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -135,4 +138,4 @@ $platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
46
startups.php
46
startups.php
@ -121,16 +121,16 @@ $myStartups = $stmt->fetchAll();
|
||||
<i class="fas fa-rocket" style="font-size: 64px; color: var(--accent-blue); opacity: 0.2; margin-bottom: 30px;"></i>
|
||||
<h3>No startups found</h3>
|
||||
<p style="color: var(--text-secondary);">Start your journey by listing your first startup or idea.</p>
|
||||
<a href="create_startup.php" class="btn btn-primary" style="margin-top: 25px;">Start Funding Round</a>
|
||||
<a href="create_startup.php" class="btn btn-primary" style="margin-top: 25px;">List First Startup</a>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php foreach ($myStartups as $startup):
|
||||
$goal = $startup['active_goal'] ?? $startup['funding_target'];
|
||||
$raised = $startup['active_raised'] ?? $startup['funding_raised'];
|
||||
$progress = ($raised > 0 && ($raised / ($goal ?: 1)) * 100 < 1) ? 1 : round(($raised / ($goal ?: 1)) * 100);
|
||||
$goal = $startup['active_goal'] ?: 0;
|
||||
$raised = $startup['active_raised'] ?: 0;
|
||||
$progress = ($goal > 0) ? round(($raised / $goal) * 100) : 0;
|
||||
$isTrending = in_array($startup['id'], $trendingIds);
|
||||
?>
|
||||
<div class="card" style="position: relative;">
|
||||
<div class="card" style="position: relative; display: flex; flex-direction: column;">
|
||||
<?php if ($isTrending): ?>
|
||||
<div class="trending-badge">
|
||||
<i class="fas fa-fire"></i> Trending
|
||||
@ -140,22 +140,32 @@ $myStartups = $stmt->fetchAll();
|
||||
<div>
|
||||
<h3 style="margin: 0;"><?= htmlspecialchars($startup['name']) ?></h3>
|
||||
</div>
|
||||
<span style="font-size: 10px; text-transform: uppercase; padding: 4px 8px; background: rgba(0, 242, 255, 0.1); color: var(--accent-blue); border-radius: 4px; border: 1px solid rgba(0, 242, 255, 0.3);">
|
||||
<?= $startup['round_status'] === 'Active' ? 'Active Round' : 'No Active Round' ?>
|
||||
<span style="font-size: 10px; text-transform: uppercase; padding: 4px 8px; background: <?= $startup['round_status'] === 'Active' ? 'rgba(48, 209, 88, 0.1)' : 'rgba(255, 255, 255, 0.05)' ?>; color: <?= $startup['round_status'] === 'Active' ? '#30d158' : '#aaa' ?>; border-radius: 4px; border: 1px solid <?= $startup['round_status'] === 'Active' ? 'rgba(48, 209, 88, 0.3)' : 'rgba(255, 255, 255, 0.1)' ?>;">
|
||||
<?= $startup['round_status'] === 'Active' ? 'Active Round' : 'Inactive' ?>
|
||||
</span>
|
||||
</div>
|
||||
<p style="font-size: 14px; color: var(--text-secondary); margin-bottom: 25px; line-height: 1.6; height: 42px; overflow: hidden;">
|
||||
<?= htmlspecialchars(substr($startup['description'], 0, 120)) ?>...
|
||||
<?= htmlspecialchars(substr($startup['description'], 0, 120)) ?><?= strlen($startup['description']) > 120 ? '...' : '' ?>
|
||||
</p>
|
||||
<div style="margin-bottom: 10px; font-weight: 600; display: flex; justify-content: space-between; font-size: 13px;">
|
||||
<span>£<?= number_format($raised) ?> Raised</span>
|
||||
<span style="color: var(--text-secondary);"><?= $progress ?>%</span>
|
||||
</div>
|
||||
<div style="width: 100%; height: 6px; background: var(--border-color); border-radius: 3px; overflow: hidden; margin-bottom: 25px;">
|
||||
<div style="width: <?= min(100, $progress) ?>%; height: 100%; background: var(--gradient-primary);"></div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 10px;">
|
||||
<a href="startup_details.php?id=<?= $startup['id'] ?>" class="btn btn-outline" style="flex: 1; padding: 10px; font-size: 13px;">View Details</a>
|
||||
|
||||
<?php if ($startup['round_status'] === 'Active'): ?>
|
||||
<div style="margin-bottom: 10px; font-weight: 600; display: flex; justify-content: space-between; font-size: 13px;">
|
||||
<span>£<?= number_format($raised) ?> Raised</span>
|
||||
<span style="color: var(--text-secondary);"><?= $progress ?>%</span>
|
||||
</div>
|
||||
<div style="width: 100%; height: 6px; background: var(--border-color); border-radius: 3px; overflow: hidden; margin-bottom: 25px;">
|
||||
<div style="width: <?= min(100, $progress) ?>%; height: 100%; background: var(--gradient-primary);"></div>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div style="margin-bottom: 25px; padding: 15px; background: rgba(255,255,255,0.02); border-radius: 12px; border: 1px dashed var(--border-color); text-align: center;">
|
||||
<a href="start_funding_round.php?id=<?= $startup['id'] ?>" style="color: var(--accent-blue); text-decoration: none; font-size: 13px; font-weight: 700;">
|
||||
<i class="fas fa-plus-circle"></i> Launch Funding Round
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div style="display: flex; gap: 10px; margin-top: auto;">
|
||||
<a href="startup_details.php?id=<?= $startup['id'] ?>" class="btn btn-outline" style="flex: 1; padding: 10px; font-size: 13px;">View Profile</a>
|
||||
<a href="create_startup.php?id=<?= $startup['id'] ?>" class="btn btn-secondary" style="padding: 10px; font-size: 13px;"><i class="fas fa-edit"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
@ -176,4 +186,4 @@ $myStartups = $stmt->fetchAll();
|
||||
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
Loading…
x
Reference in New Issue
Block a user