Skip to content

Repository files navigation

Quotation Request Management Web App

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.


Features Overview

Vendor Panel

  • 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

Users Dashboard

  • 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

Theme

  • 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.

Requirements

  • PHP 7.4+ with PDO
  • MySQL or MariaDB
  • Apache/Nginx (mod_rewrite optional)
  • ZIP extension (By adding extension=zip in php.ini)
  • GD extension (for image handling if needed)

Installation

  1. Upload the project to your web host (e.g. htdocs/quotation-app)
  2. Navigate to htdocs/quotation-app(select role) or /install/index.php
  3. Enter:
    • MySQL host, user, password, and database name
    • Admin credentials (username/email/password)
  4. Click Install Now

    Warning: Sometimes antivirus detect test_connection.php as, Type of risk: webshell.phpex.post.eval due to its checking for host and database connection(code), so allow this file in antivrius or add in ignore list without any worries.

  5. Installer will:
    • Create DB tables (via schema.sql)
    • Save config.php
    • Redirect to admin login
  6. External Library Folder:
    • FPDF PHP PDF Library (Required)

    fpdf.php must be showed up like this /libs/fpdf/fpdf.php FPDF is used for: Exporting selected quotations as a single PDF via export_selected.php Generating individual PDFs inside ZIP exports via export_selected_zip.php Purchase Order in PDF Payment Request in PDF


Security Measures

  • 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.php secured by .htaccess (optional)

Stats (Dashboard Widgets)

  • Pending Quotations
  • Quotations Today
  • Quotations This Month
  • Total Requests
  • Active Vendors
  • Inactive Vendors
  • Real-time notification(count)

Trigger-Based Recalculation

Triggers handle auto-updates:

  • When a request item is updated/deleted, related quotation totals auto-recalculate.

Clean Package Build

Use zip_me_first.php to generate a deployable ZIP archive of the app, excluding files:

  • uploads runtime data attachments and temp files
  • libs external library folder
  • config.php local credentials
  • zip_me_first.php build script
  • .git version control
  • __MACOSX system folders

Quotation App Directory Structure

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)

Developer Notes

  • 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

About

Quotation Request Management Web App

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages