A PHP & MySQL-based web application for managing vendor quotations. Built without frameworks, this app allows your company to post requests (e.g., furniture, electrical, food) and receive quotations from vendors, compare them, and manage approvals.
- Public access without login
- List of all active requests
- Submit quotation for a specific request
- Upload multiple attachments
- CAPTCHA verification
- Real-time filters (by category & date) with AJAX
- Responsive mobile support
- Live validation and file size/type filtering
- Login-secured panel with session management
- Dashboard with summary stats (real-time update)
- Manage requests and request items
- Assign categories to requests
- Request generated by specific user/society
- Upload attachments with each request
- Edit/delete requests and attachments
- Open/Close requests
- Trash/recycle bin for quotations (soft delete)
- Bulk and single operations Delete, Restore, Approve, Reject, Open/Close
- Compare quotations (total and per-item matrix)
- Export PDF:
- Selected Quotations
- Selected Quotations ZIP (with attachments)
- Purchase Order
- Payment Request
- Notification system:
- Bell icon with live quote updates
- Toastr visual + sound alerts
- Mark-as-read when quote viewed
- AJAX file deletion, Toastr messages
- Profile management (change email/password)
- Full responsive design using Bootstrap 5.3
- Datatable for requests and quotations tables
- User/Vendors management (only for admin)
- Three roles: Admin, Student and OSAS
- Light/Dark Mode Toggle: Users can switch between light and dark themes.
- Persistent Theme Preference: The user's selected theme is saved (e.g., in local storage) and reapplied automatically the next time they visit.
- PHP 7.4+ with PDO
- MySQL or MariaDB
- Apache/Nginx (mod_rewrite optional)
- ZIP extension (By adding
extension=zipin php.ini) - GD extension (for image handling if needed)
- Upload the project to your web host (e.g.
htdocs/quotation-app) - Navigate to
htdocs/quotation-app(select role) or/install/index.php - Enter:
- MySQL host, user, password, and database name
- Admin credentials (username/email/password)
- Click Install Now
Warning: Sometimes antivirus detect
test_connection.phpas, Type of risk:webshell.phpex.post.evaldue to its checking for host and database connection(code), so allow this file in antivrius or add in ignore list without any worries. - Installer will:
- Create DB tables (via
schema.sql) - Save
config.php - Redirect to admin login
- Create DB tables (via
- External Library Folder:
- FPDF PHP PDF Library (Required)
fpdf.php must be showed up like this
/libs/fpdf/fpdf.phpFPDF is used for: Exporting selected quotations as a single PDF viaexport_selected.phpGenerating individual PDFs inside ZIP exports viaexport_selected_zip.phpPurchase Order in PDF Payment Request in PDF
- Prepared SQL statements (PDO)
- File validation:
- Allowed extensions
- MIME type check
- Max size: individual (1 MB), total (5 MB)
- CAPTCHA to block bots
- Toastr error handling
- Admin login protection
config.phpsecured by.htaccess(optional)
- Pending Quotations
- Quotations Today
- Quotations This Month
- Total Requests
- Active Vendors
- Inactive Vendors
- Real-time notification(count)
Triggers handle auto-updates:
- When a request item is updated/deleted, related quotation totals auto-recalculate.
Use zip_me_first.php to generate a deployable ZIP archive of the app, excluding files:
uploadsruntime data attachments and temp fileslibsexternal library folderconfig.phplocal credentialszip_me_first.phpbuild script.gitversion control__MACOSXsystem folders
quotation-app/
│
├── assets/ # Static assets
│ ├── css/ # Stylesheets
│ │ ├── air-datepicker.css # Datepicker plugin styles
│ │ ├── main.css # Main stylesheet
│ │ ├── payment_request.css # Payment request print styling
│ │ ├── purchase_order.css # Purchase order print styling
│ │ ├── view_quotation.css # View quotation stylesheet
│ │ └── view_request.css # View request stylesheet
│ ├── images/ # Image storage
│ │ ├── .htaccess
│ │ ├── favicon.png
│ │ ├── theme-logo-dark.png
│ │ └── theme-logo-light.png
│ ├── js/ # JavaScript files
│ │ ├── air-datepicker.js # Datepicker plugin
│ │ ├── main.js # Main JavaScript
│ │ └── themeswitch.js # Dark/light theme switcher
│ └── .htaccess # Asset protection rules
│
├── authenticate/ # Authenticated area (secure modules)
│ ├── ajax/ # AJAX endpoints
│ │ ├── check_new_quotes.php # Check for new quotations
│ │ ├── dashboard_stats.php # Dashboard stats data
│ │ ├── delete_request_attachment.php # Delete request attachment
│ │ ├── delete_request_item.php # Delete request item
│ │ └── notifications.php # Notifications fetcher
│ ├── includes/ # Shared includes
│ │ ├── auth.php # Authentication/authorization
│ │ ├── csrf.php # CSRF protection
│ │ ├── db.php # Database connection
│ │ ├── footer.php # Common footer
│ │ ├── functions.php # Helper functions
│ │ └── header.php # Common header
│ ├── add_request.php # Add new request
│ ├── add_user.php # Add new user
│ ├── bulk_quotation_action.php # Bulk actions on quotations
│ ├── bulk_request_action.php # Bulk actions on requests
│ ├── compare.php # Compare quotations
│ ├── dashboard.php # Dashboard overview
│ ├── delete_request.php # Delete request
│ ├── delete_user.php # Delete user
│ ├── edit_request.php # Edit request details
│ ├── edit_user.php # Edit user details
│ ├── export_selected.php # Export selected quotations
│ ├── export_selected_zip.php # Export selected quotations (ZIP)
│ ├── generate_payment_request.php # Generate payment requests
│ ├── generate_purchase_order.php # Generate purchase orders
│ ├── index.php # Authenticated index page
│ ├── login.php # Login page
│ ├── logout.php # Logout handler
│ ├── mark_all_read.php # Mark notifications as read
│ ├── permanent_delete_quotation.php # Permanently delete quotation
│ ├── print_payment_request.php # Print payment_request
│ ├── print_purchase_order.php # Print purchase order
│ ├── profile.php # User profile
│ ├── quotations.php # Manage quotations
│ ├── request_approval.php # Approve/deny requests
│ ├── request_category.php # Manage request categories
│ ├── requests.php # Request management
│ ├── societies.php # Societies management
│ ├── update_quotation_status.php # Update quotation status
│ ├── update_request.php # Update request
│ ├── user_management.php # Manage users
│ ├── vendors.php # Vendor management
│ ├── view_quotation.php # View quotation details
│ └── view_request.php # View request details
│
├── install/ # Installer
│ ├── index.php # Installation script
│ ├── schema.sql # Database schema
│ └── test_connection.php # Test DB connection
│
├── libs/ # External libraries
│ ├── README.md
│ └── fpdf/ # FPDF library (PDF generation)
│
├── uploads/ # Uploaded files
│ ├── .htaccess # Security restrictions
│ ├── quotation_attachments/ # Uploaded quotation files
│ ├── request_attachments/ # Uploaded request files
│ └── tmp/ # Temporary files
│
├── vendor/ # Vendor-facing area
│ ├── assets/ # Vendor assets
│ │ ├── css/
│ │ │ └── main.css # Vendor stylesheet
│ │ │ └── quote.css # Vendor quote stylesheet
│ │ └── js/
│ │ └── main.js # Vendor JavaScript
│ ├── fetch_requests.php # Fetch requests for vendors
│ ├── includes/ # Vendor includes
│ │ ├── db.php
│ │ ├── footer.php
│ │ └── header.php
│ ├── index.php # Vendor dashboard
│ ├── quote.php # Vendor quotation form
│ └── submit_quote.php # Vendor quotation submission
│
├── .htaccess # Apache rewrite & access rules
├── 403.php # Custom 403 Forbidden page
├── 404.php # Custom 404 Not Found page
├── LICENSE # License information
├── README.md # Project documentation
├── baseurl.php # Base URL config
├── config.php # App configuration (Auto-generate by installer)
├── index.php # Homepage/entry point
└── zip_me_first.php # Utility script (zip/export)
- No third-party frameworks (plain PHP, MySQL, JS)
- Bootstrap 5.3.3 UI
- Font Awesome icons used
- Responsive, accessible UI
- AJAX used for:
- Vendor filtering
- Attachment deletion
- Notifications etc
© 2025 Quotation Management System