|
Server IP : 217.21.85.138 / Your IP : 216.73.216.103 Web Server : LiteSpeed System : Linux in-mum-web906.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u915722082 ( 915722082) PHP Version : 7.4.33 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 Directory (0755) : /home/u915722082/public_html/js/../pms/admin/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<!--proposals.php-->
<?php
session_start();
if (!isset($_SESSION['admin_id'])) {
header("Location: login.php");
exit;
}
// ADMIN/MANAGER ONLY ACCESS
if ($_SESSION['role'] === 'Employee') {
header("Location: employee.php");
exit;
}
require_once '../config/config.php';
require_once '../config/db.php';
$current_user_role = $_SESSION['role'] ?? 'Manager';
$current_user_id = $_SESSION['admin_id'];
$current_user_name = $_SESSION['user_name'] ?? 'Admin';
// Get all customers
$customers_query = "SELECT customer_id, customer_code, customer_name, email, phone FROM tbl_customers WHERE customer_status = 'Active' ORDER BY customer_name ASC";
$customers_result = mysqli_query($con, $customers_query);
// Get all templates
$templates_query = "SELECT template_id, template_name, category FROM tbl_proposal_templates WHERE is_active = 'Yes' ORDER BY template_name ASC";
$templates_result = mysqli_query($con, $templates_query);
// Get all proposals WITH customer email
$proposals_query = "SELECT p.*,
c.customer_name, c.customer_code, c.email as customer_email,
t.template_name,
u.fname as created_by_name
FROM tbl_proposals p
LEFT JOIN tbl_customers c ON p.customer_id = c.customer_id
LEFT JOIN tbl_proposal_templates t ON p.template_id = t.template_id
LEFT JOIN tbl_user u ON p.created_by = u.uid
ORDER BY p.created_at DESC";
$proposals_result = mysqli_query($con, $proposals_query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="../" />
<title>Proposals - TDS Admin Hub</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,400,500,600,700" />
<link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css" />
<link href="assets/css/style.bundle.css" rel="stylesheet" type="text/css" />
<!-- Summernote CSS -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.css" rel="stylesheet">
<style>
.line-item-row {
background: #f9f9f9;
border-radius: 6px;
padding: 10px;
margin-bottom: 10px;
}
.total-section {
background: #f0f9ff;
border: 2px solid #0ea5e9;
border-radius: 8px;
padding: 20px;
}
/* Fix table stretch */
#proposalsTable {
table-layout: auto;
width: 100%;
}
#proposalsTable td {
white-space: nowrap;
}
/* Action buttons container */
.action-buttons-container {
display: flex;
gap: 4px;
flex-wrap: nowrap;
justify-content: flex-end;
}
</style>
</head>
<body id="kt_app_body" data-kt-app-layout="dark-sidebar" data-kt-app-header-fixed="true"
data-kt-app-sidebar-enabled="true" data-kt-app-sidebar-fixed="true"
data-kt-app-sidebar-hoverable="true" data-kt-app-sidebar-push-header="true"
data-kt-app-sidebar-push-toolbar="true" data-kt-app-sidebar-push-footer="true"
data-kt-app-toolbar-enabled="true" class="app-default">
<script>
var defaultThemeMode = "light";
var themeMode;
if (document.documentElement) {
if (document.documentElement.hasAttribute("data-bs-theme-mode")) {
themeMode = document.documentElement.getAttribute("data-bs-theme-mode");
} else {
if (localStorage.getItem("data-bs-theme") !== null) {
themeMode = localStorage.getItem("data-bs-theme");
} else {
themeMode = defaultThemeMode;
}
}
if (themeMode === "system") {
themeMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
document.documentElement.setAttribute("data-bs-theme", themeMode);
}
</script>
<div class="d-flex flex-column flex-root app-root" id="kt_app_root">
<div class="app-page flex-column flex-column-fluid" id="kt_app_page">
<?php include 'includes/header.php'; ?>
<div class="app-wrapper flex-column flex-row-fluid" id="kt_app_wrapper">
<?php include 'includes/sidebar.php'; ?>
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
<div class="d-flex flex-column flex-column-fluid">
<div id="kt_app_toolbar" class="app-toolbar py-3 py-lg-6">
<div id="kt_app_toolbar_container" class="app-container container-xxl d-flex flex-stack">
<div class="page-title d-flex flex-column justify-content-center flex-wrap me-3">
<h1 class="page-heading d-flex text-gray-900 fw-bold fs-3 flex-column my-0">
📄 Business Proposals
</h1>
<ul class="breadcrumb breadcrumb-separatorless fw-semibold fs-7 my-0 pt-1">
<li class="breadcrumb-item text-muted">
<a href="admin/dashboard.php" class="text-muted text-hover-primary">Home</a>
</li>
<li class="breadcrumb-item">
<span class="bullet bg-gray-500 w-5px h-2px"></span>
</li>
<li class="breadcrumb-item text-muted">Proposals</li>
</ul>
</div>
</div>
</div>
<div id="kt_app_content" class="app-content flex-column-fluid">
<div id="kt_app_content_container" class="app-container container-xxl">
<!-- Proposals Table Card -->
<div class="card">
<div class="card-header border-0 pt-6">
<div class="card-title">
<div class="d-flex align-items-center position-relative my-1">
<i class="ki-duotone ki-magnifier fs-3 position-absolute ms-5">
<span class="path1"></span>
<span class="path2"></span>
</i>
<input type="text" id="searchProposal"
class="form-control form-control-solid w-250px ps-13"
placeholder="Search proposals..." />
</div>
</div>
<div class="card-toolbar">
<div class="d-flex justify-content-end align-items-center">
<!-- Filter -->
<select class="form-select form-select-solid w-150px me-3" id="filterStatus"
data-control="select2" data-hide-search="true">
<option value="all" selected>All</option>
<option value="Draft">Draft</option>
<option value="Sent">Sent</option>
<option value="Negotiate">Negotiate</option>
<option value="Accepted">Accepted</option>
<option value="Rejected">Rejected</option>
<option value="Expired">Expired</option>
</select>
<!-- Add Button -->
<button type="button" class="btn btn-primary text-nowrap"
data-bs-toggle="modal" data-bs-target="#proposalModal"
onclick="openAddModal()">
<i class="ki-duotone ki-plus fs-2"></i>
Create Proposal
</button>
</div>
</div>
</div>
<div class="card-body py-4">
<div class="table-responsive">
<table class="table align-middle table-row-dashed fs-6 gy-5" id="proposalsTable">
<thead>
<tr class="text-start text-muted fw-bold fs-7 text-uppercase gs-0">
<th class="min-w-100px">Proposal Code</th>
<th class="min-w-200px">Title</th>
<th class="min-w-150px">Customer</th>
<th class="min-w-100px">Date</th>
<th class="min-w-100px">Amount</th>
<th class="min-w-100px">Status</th>
<th class="text-end min-w-400px">Actions</th>
</tr>
</thead>
<tbody class="text-gray-600 fw-semibold">
<?php if(mysqli_num_rows($proposals_result) > 0): ?>
<?php while ($proposal = mysqli_fetch_assoc($proposals_result)): ?>
<tr data-status="<?php echo $proposal['status']; ?>">
<td>
<span class="text-gray-800 fw-bold">
<?php echo htmlspecialchars($proposal['proposal_code']); ?>
</span>
</td>
<td>
<div class="d-flex flex-column">
<span class="text-gray-800 fw-bold mb-1">
<?php echo htmlspecialchars($proposal['proposal_title']); ?>
</span>
<span class="text-muted fs-7">
<?php echo $proposal['template_name']; ?>
</span>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span class="text-gray-800 fw-bold">
<?php echo htmlspecialchars($proposal['customer_name']); ?>
</span>
<span class="text-muted fs-7">
<?php echo $proposal['customer_code']; ?>
</span>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span><?php echo date('d-M-Y', strtotime($proposal['proposal_date'])); ?></span>
<span class="text-muted fs-7">
Valid: <?php echo date('d-M-Y', strtotime($proposal['valid_until'])); ?>
</span>
</div>
</td>
<td>
<span class="text-gray-800 fw-bold">
₹<?php echo number_format($proposal['final_amount'], 2); ?>
</span>
</td>
<td>
<?php
$status_colors = [
'Draft' => 'warning',
'Sent' => 'info',
'Negotiate' => 'primary',
'Accepted' => 'success',
'Rejected' => 'danger',
'Expired' => 'secondary'
];
$color = $status_colors[$proposal['status']] ?? 'secondary';
?>
<span class="badge badge-light-<?php echo $color; ?>">
<?php echo $proposal['status']; ?>
</span>
</td>
<td class="text-end">
<div class="d-flex justify-content-end gap-2">
<!-- Actions Dropdown (Metronic Style) -->
<button class="btn btn-sm btn-light btn-active-light-primary dropdown-toggle"
type="button"
id="actionsDropdown<?php echo $proposal['proposal_id']; ?>"
data-bs-toggle="dropdown"
aria-expanded="false">
Actions
</button>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="actionsDropdown<?php echo $proposal['proposal_id']; ?>">
<!-- Send (only for Draft/Negotiate) -->
<?php if(in_array($proposal['status'], ['Draft', 'Negotiate'])): ?>
<li>
<a class="dropdown-item d-flex align-items-center" href="#"
onclick="event.preventDefault(); sendProposal(<?php echo $proposal['proposal_id']; ?>, '<?php echo addslashes($proposal['proposal_code']); ?>', '<?php echo addslashes($proposal['customer_name']); ?>', '<?php echo addslashes($proposal['customer_email'] ?? ''); ?>');">
<i class="ki-duotone ki-send fs-3 me-2 text-info">
<span class="path1"></span>
<span class="path2"></span>
</i>
<span>Send</span>
</a>
</li>
<?php endif; ?>
<!-- Accept (only if not Accepted) -->
<?php if($proposal['status'] !== 'Accepted'): ?>
<li>
<a class="dropdown-item d-flex align-items-center" href="#"
onclick="event.preventDefault(); acceptProposal(<?php echo $proposal['proposal_id']; ?>, '<?php echo addslashes($proposal['proposal_code']); ?>');">
<i class="ki-duotone ki-check-circle fs-3 me-2 text-success">
<span class="path1"></span>
<span class="path2"></span>
</i>
<span>Accept</span>
</a>
</li>
<?php endif; ?>
<!-- Reject (only if not Rejected) -->
<?php if($proposal['status'] !== 'Rejected'): ?>
<li>
<a class="dropdown-item d-flex align-items-center" href="#"
onclick="event.preventDefault(); rejectProposal(<?php echo $proposal['proposal_id']; ?>, '<?php echo addslashes($proposal['proposal_code']); ?>');">
<i class="ki-duotone ki-cross-circle fs-3 me-2 text-danger">
<span class="path1"></span>
<span class="path2"></span>
</i>
<span>Reject</span>
</a>
</li>
<?php endif; ?>
</ul>
<!-- Status Change Button (Draft/Negotiate only) -->
<?php if(in_array($proposal['status'], ['Draft', 'Negotiate'])): ?>
<button class="btn btn-icon btn-light btn-active-light-warning btn-sm"
onclick='changeProposalStatus(<?php echo $proposal['proposal_id']; ?>, "<?php echo $proposal['status']; ?>", "<?php echo addslashes($proposal['proposal_code']); ?>")'
title="Change Status">
<i class="ki-duotone ki-arrows-circle fs-3">
<span class="path1"></span>
<span class="path2"></span>
</i>
</button>
<?php endif; ?>
<!-- View Button -->
<button class="btn btn-icon btn-light btn-active-light-primary btn-sm"
onclick='viewProposal(<?php echo $proposal['proposal_id']; ?>)'
title="View">
<i class="ki-duotone ki-eye fs-3">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
</button>
<!-- History Button -->
<button class="btn btn-icon btn-light btn-active-light-info btn-sm"
onclick='viewProposalHistory(<?php echo $proposal['proposal_id']; ?>, "<?php echo addslashes($proposal['proposal_code']); ?>")'
title="View History">
<i class="ki-duotone ki-time fs-3">
<span class="path1"></span>
<span class="path2"></span>
</i>
</button>
<!-- Edit Button (only for Draft) -->
<?php if($proposal['status'] === 'Draft'): ?>
<button class="btn btn-icon btn-light btn-active-light-primary btn-sm"
onclick='editProposal(<?php echo $proposal['proposal_id']; ?>)'
title="Edit">
<i class="ki-duotone ki-pencil fs-3">
<span class="path1"></span>
<span class="path2"></span>
</i>
</button>
<?php endif; ?>
<!-- Delete Button (only for Draft) -->
<?php if($proposal['status'] === 'Draft'): ?>
<button class="btn btn-icon btn-light btn-active-light-danger btn-sm"
onclick="deleteProposal(<?php echo $proposal['proposal_id']; ?>, '<?php echo addslashes($proposal['proposal_code']); ?>')"
title="Delete">
<i class="ki-duotone ki-trash fs-3">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
</i>
</button>
<?php endif; ?>
</div>
</td>
</tr>
<?php endwhile; ?>
<?php else: ?>
<tr>
<td colspan="7" class="text-center py-10">
<div class="d-flex flex-column align-items-center">
<i class="ki-duotone ki-document fs-3x text-gray-400 mb-3">
<span class="path1"></span>
<span class="path2"></span>
</i>
<span class="text-gray-600 fs-5">No proposals found</span>
<span class="text-muted fs-7">Click "Create Proposal" to create your first proposal</span>
</div>
</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>
</div>
</div>
</div>
</div>
<!-- Create/Edit Proposal Modal -->
<!-- Create/Edit Proposal Modal -->
<div class="modal fade" id="proposalModal" tabindex="-1" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
<div class="modal-dialog modal-dialog-centered mw-1000px modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h2 class="fw-bolder" id="modalTitle">Create New Proposal</h2>
<div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
<i class="ki-duotone ki-cross fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<form id="proposalForm" method="POST">
<div class="modal-body py-10 px-lg-17" style="max-height: 75vh; overflow-y: auto;">
<input type="hidden" name="action" id="action" value="add_proposal">
<input type="hidden" name="proposal_id" id="proposal_id" value="">
<div id="alertBox"></div>
<!-- Basic Information -->
<div class="mb-10">
<h3 class="fw-bold text-gray-800 mb-5">Basic Information</h3>
<div class="row mb-7">
<div class="col-md-6">
<label class="required fs-6 fw-semibold mb-2">Select Customer</label>
<select class="form-select form-select-solid"
name="customer_id" id="customer_id" required
onchange="loadCustomerTemplate()">
<option value="">Choose Customer...</option>
<?php
mysqli_data_seek($customers_result, 0);
while ($cust = mysqli_fetch_assoc($customers_result)):
?>
<option value="<?php echo $cust['customer_id']; ?>"
data-name="<?php echo htmlspecialchars($cust['customer_name']); ?>"
data-email="<?php echo htmlspecialchars($cust['email']); ?>"
data-phone="<?php echo htmlspecialchars($cust['phone']); ?>">
<?php echo htmlspecialchars($cust['customer_name']); ?> (<?php echo $cust['customer_code']; ?>)
</option>
<?php endwhile; ?>
</select>
</div>
<div class="col-md-6">
<label class="required fs-6 fw-semibold mb-2">Select Template</label>
<select class="form-select form-select-solid"
name="template_id" id="template_id" required
onchange="loadTemplateContent()">
<option value="">Choose Template...</option>
<?php
mysqli_data_seek($templates_result, 0);
while ($tpl = mysqli_fetch_assoc($templates_result)):
?>
<option value="<?php echo $tpl['template_id']; ?>">
<?php echo htmlspecialchars($tpl['template_name']); ?> (<?php echo $tpl['category']; ?>)
</option>
<?php endwhile; ?>
</select>
<small class="text-muted">Will auto-load from customer's default</small>
</div>
</div>
<div class="mb-7">
<label class="required fs-6 fw-semibold mb-2">Proposal Title</label>
<input type="text" class="form-control form-control-solid"
name="proposal_title" id="proposal_title"
placeholder="e.g., Website Development Project" required />
</div>
<div class="mb-7">
<label class="required fs-6 fw-semibold mb-2">Proposal Description</label>
<textarea class="form-control form-control-solid"
name="proposal_description" id="proposal_description"
rows="4"
placeholder="Describe the proposal details, scope of work, deliverables..."
required></textarea>
</div>
<div class="row mb-7">
<div class="col-md-6">
<label class="required fs-6 fw-semibold mb-2">Proposal Date</label>
<input type="date" class="form-control form-control-solid"
name="proposal_date" id="proposal_date"
value="<?php echo date('Y-m-d'); ?>" required />
</div>
<div class="col-md-6">
<label class="required fs-6 fw-semibold mb-2">Valid Until</label>
<input type="date" class="form-control form-control-solid"
name="valid_until" id="valid_until"
value="<?php echo date('Y-m-d', strtotime('+30 days')); ?>" required />
</div>
</div>
</div>
<!-- Line Items -->
<div class="mb-10">
<div class="d-flex justify-content-between align-items-center mb-5">
<h3 class="fw-bold text-gray-800 m-0">Line Items</h3>
<button type="button" class="btn btn-sm btn-light-primary" onclick="addLineItem()">
<i class="ki-duotone ki-plus fs-3"></i>
Add Item
</button>
</div>
<div id="lineItemsContainer">
<!-- Line items will be added here -->
</div>
</div>
<!-- Totals -->
<div class="mb-10 total-section">
<div class="row mb-3">
<div class="col-8 text-end">
<span class="fs-5 fw-semibold">Subtotal:</span>
</div>
<div class="col-4 text-end">
<span class="fs-5 fw-bold" id="subtotal_display">₹0.00</span>
</div>
</div>
<div class="row mb-3">
<div class="col-4">
<label class="fs-6 fw-semibold mb-2">Discount</label>
<div class="input-group">
<input type="number" class="form-control"
name="discount_percentage" id="discount_percentage"
placeholder="%" step="0.01" value="0" onchange="calculateTotals()" />
<span class="input-group-text">%</span>
</div>
</div>
<div class="col-4 text-end pt-8">
<span class="fs-6 fw-semibold">-<span id="discount_display">₹0.00</span></span>
</div>
</div>
<div class="separator my-5"></div>
<div class="row">
<div class="col-8 text-end">
<span class="fs-3 fw-bold text-primary">TOTAL:</span>
</div>
<div class="col-4 text-end">
<span class="fs-3 fw-bolder text-primary" id="total_display">₹0.00</span>
</div>
</div>
<input type="hidden" name="total_amount" id="total_amount" value="0">
<input type="hidden" name="discount_amount" id="discount_amount" value="0">
<input type="hidden" name="final_amount" id="final_amount" value="0">
<input type="hidden" name="proposal_items" id="proposal_items" value="[]">
</div>
<!-- Status -->
<div class="mb-10">
<h3 class="fw-bold text-gray-800 mb-5">Status</h3>
<select class="form-select form-select-solid"
name="status" id="status" required>
<option value="Draft" selected>Draft</option>
<option value="Sent">Sent</option>
<option value="Negotiate">Negotiate</option>
<option value="Accepted">Accepted</option>
<option value="Rejected">Rejected</option>
</select>
</div>
<!-- Internal Notes -->
<div class="mb-10">
<h3 class="fw-bold text-gray-800 mb-5">Internal Notes</h3>
<textarea class="form-control form-control-solid"
name="internal_notes" id="internal_notes"
rows="3" placeholder="Notes for internal use only (not visible to customer)"></textarea>
</div>
</div>
<div class="modal-footer flex-center">
<button type="reset" class="btn btn-light me-3" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-secondary me-3" onclick="saveDraft()">
<span class="indicator-label">
<i class="ki-duotone ki-save-2 fs-3 me-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
Save as Draft
</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span>
</span>
</button>
<button type="submit" class="btn btn-primary" id="submitBtn">
<span class="indicator-label">Save Proposal</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span>
</span>
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Proposal History Modal -->
<div class="modal fade" id="historyModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered mw-800px">
<div class="modal-content">
<div class="modal-header">
<h2 class="fw-bolder" id="historyModalTitle">Proposal History</h2>
<div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
<i class="ki-duotone ki-cross fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<div class="modal-body py-6 px-lg-10">
<!-- Counters Summary - Fixed Position -->
<div class="row g-4 mb-8">
<div class="col-6 col-md-3">
<div class="border border-gray-300 rounded py-3 px-4">
<div class="d-flex align-items-center">
<i class="ki-duotone ki-send fs-2x text-info me-2">
<span class="path1"></span>
<span class="path2"></span>
</i>
<div class="fs-2 fw-bold text-gray-800 lh-1" id="sentCountDisplay">0</div>
</div>
<div class="fw-semibold fs-7 text-gray-400 mt-2">Times Sent</div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="border border-gray-300 rounded py-3 px-4">
<div class="d-flex align-items-center">
<i class="ki-duotone ki-message-text fs-2x text-warning me-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
<div class="fs-2 fw-bold text-gray-800 lh-1" id="negotiateCountDisplay">0</div>
</div>
<div class="fw-semibold fs-7 text-gray-400 mt-2">Negotiations</div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="border border-gray-300 rounded py-3 px-4">
<div class="d-flex align-items-center">
<i class="ki-duotone ki-cross-circle fs-2x text-danger me-2">
<span class="path1"></span>
<span class="path2"></span>
</i>
<div class="fs-2 fw-bold text-gray-800 lh-1" id="rejectedCountDisplay">0</div>
</div>
<div class="fw-semibold fs-7 text-gray-400 mt-2">Rejections</div>
</div>
</div>
<div class="col-6 col-md-3">
<div class="border border-gray-300 rounded py-3 px-4">
<div class="d-flex align-items-center">
<i class="ki-duotone ki-calendar-remove fs-2x text-secondary me-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
</i>
<div class="fs-2 fw-bold text-gray-800 lh-1" id="expiredCountDisplay">0</div>
</div>
<div class="fw-semibold fs-7 text-gray-400 mt-2">Expirations</div>
</div>
</div>
</div>
<!-- Timeline - Scrollable Section -->
<div class="separator mb-5"></div>
<h3 class="fw-bold text-gray-800 mb-4 fs-5">Status Change History</h3>
<div style="max-height: 300px; overflow-y: auto; padding-right: 10px;">
<div class="timeline">
<div id="historyTimeline">
<!-- Timeline items will be inserted here -->
</div>
</div>
</div>
</div>
<div class="modal-footer py-4">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Change Status Modal -->
<div class="modal fade" id="changeStatusModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered mw-600px">
<div class="modal-content">
<div class="modal-header">
<h2 class="fw-bolder">Change Proposal Status</h2>
<div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
<i class="ki-duotone ki-cross fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<form id="changeStatusForm">
<div class="modal-body py-10 px-lg-17">
<input type="hidden" name="action" value="update_proposal_status">
<input type="hidden" name="proposal_id" id="status_proposal_id">
<div class="mb-7">
<label class="fs-6 fw-semibold mb-2">Current Status</label>
<input type="text" class="form-control form-control-solid"
id="current_status_display" readonly />
</div>
<div class="mb-7">
<label class="required fs-6 fw-semibold mb-2">Change To</label>
<select class="form-select form-select-solid"
name="new_status" id="new_status" required
data-control="select2"
data-hide-search="true"
data-dropdown-parent="#changeStatusModal">
<option value="">Select Status...</option>
<option value="Draft">Draft</option>
<option value="Negotiate">Negotiate</option>
</select>
<div class="form-text">Accept, Reject, and Send actions have dedicated buttons</div>
</div>
<div class="mb-7">
<label class="fs-6 fw-semibold mb-2">Remarks (Optional)</label>
<textarea class="form-control form-control-solid"
name="remarks" id="status_remarks"
rows="3" placeholder="Add any notes about this status change..."></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary" id="statusSubmitBtn">
<span class="indicator-label">Update Status</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span>
</span>
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Reject Proposal Modal -->
<div class="modal fade" id="rejectModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered mw-600px">
<div class="modal-content">
<div class="modal-header">
<h2 class="fw-bolder">Reject Proposal</h2>
<div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
<i class="ki-duotone ki-cross fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<form id="rejectForm">
<div class="modal-body py-10 px-lg-17">
<input type="hidden" name="action" value="reject_proposal">
<input type="hidden" name="proposal_id" id="reject_proposal_id">
<div class="mb-7">
<label class="fs-6 fw-semibold mb-2">Proposal Code</label>
<div class="fs-4 fw-bold text-gray-800" id="reject_proposal_code"></div>
</div>
<div class="mb-7">
<label class="required fs-6 fw-semibold mb-2">Rejection Reason</label>
<select class="form-select form-select-solid"
name="reject_reason" id="reject_reason" required
data-control="select2"
data-hide-search="true"
data-dropdown-parent="#rejectModal"
data-placeholder="Select reason...">
<option value="">Select reason...</option>
<option value="Budget constraints">Budget constraints</option>
<option value="Timeline not feasible">Timeline not feasible</option>
<option value="Scope mismatch">Scope mismatch</option>
<option value="Found alternative solution">Found alternative solution</option>
<option value="Project postponed">Project postponed</option>
<option value="Technical requirements not met">Technical requirements not met</option>
<option value="Other">Other</option>
</select>
</div>
<div class="mb-7">
<label class="fs-6 fw-semibold mb-2">Additional Remarks (Optional)</label>
<textarea class="form-control form-control-solid"
name="remarks" id="reject_remarks"
rows="3" placeholder="Add any additional details..."></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-danger" id="rejectSubmitBtn">
<span class="indicator-label">Confirm Rejection</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span>
</span>
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="assets/plugins/global/plugins.bundle.js"></script>
<script src="assets/js/scripts.bundle.js"></script>
<!-- Summernote JS -->
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.js"></script>
<script src="admin/js/proposals.js?v=<?php echo time(); ?>"></script>
<?php include 'includes/chat_widget.php'; ?>
</body>
</html>