Invoice Enhancement Summary

📄 General
← Back to Documentation
# Invoice Enhancement Summary ## Overview Successfully enhanced the Invoice entity to work comprehensively with the Booking system, supporting invoicing for accommodations, spots, services, packages, and additional products. ## Files Created/Modified ### 1. Database Migration **File:** `database/migrations/2025_01_23_084635_enhance_invoices_for_bookings.php` **Enhancements to `invoices` table:** - Added `booking_id` foreign key relationship - Added `company_id` and `workspace_id` for multi-tenancy - Added `client_id` for direct client relationship - Added `invoice_number` with auto-generation (INV-YYYYMMDD-XXXXXX) - Added `invoice_type` enum (proforma, final, credit_note, debit_note) - Enhanced pricing fields: `subtotal`, `tax_rate`, `tax_amount`, `service_fee`, `discount_amount`, `discount_type` - Added `payment_status` enum (unpaid, partially_paid, paid, refunded, cancelled) - Added payment tracking: `payment_method`, `payment_date`, `paid_at` - Added fiscal fields: `fiscal_receipt_number`, `fiscal_status`, `fiscal_printed_at` - Added `metadata` JSON field for flexible data storage - Added cancellation tracking: `cancelled_at`, `cancellation_reason` - Added comprehensive indexes for performance **Enhancements to `invoices_items` table:** - Added polymorphic relationship: `itemable_type`, `itemable_id` - Added `category` enum (accommodation, spot, service, package, product, fee, tax, discount, other) - Enhanced pricing: `unit_price`, `tax_rate`, `tax_amount`, `discount_amount` - Added duration tracking: `duration_type`, `duration_value`, `start_date`, `end_date` - Added indexes for polymorphic queries ### 2. Enhanced Invoice Model **File:** `app/Models/Invoice.php` **Features Added:** - Auto-generation of unique invoice numbers - Auto-generation of UUIDs - Comprehensive relationships: - `booking()` - Link to booking - `client()` - Direct client relationship - `company()` and `workspace()` - Multi-tenancy - `reservation()` - Legacy support - Category-specific item relationships (accommodationItems, spotItems, serviceItems, etc.) - Query scopes: - `paid()`, `unpaid()`, `partiallyPaid()`, `overdue()` - `byType()`, `proforma()`, `final()` - Helper methods: - `isPaid()`, `isUnpaid()`, `isPartiallyPaid()`, `isOverdue()` - `getRemainingAmount()` - `markAsPaid()`, `addPayment()`, `cancel()` - `recalculateTotals()` - Auto-calculate from items - Proper type casting for all fields - Soft deletes support ### 3. Enhanced InvoiceItem Model **File:** `app/Models/InvoiceItem.php` **Features Added:** - Polymorphic `itemable()` relationship to any bookable entity - Auto-calculation of totals on create/update - Category-based scopes (accommodation, spots, services, packages, products, fees) - Helper methods: - `calculateTotals()` - Smart calculation with discounts and taxes - `getSubtotal()`, `getTotalWithoutTax()` - `getDurationInDays()`, `getDurationInNights()` - Static factory methods for easy creation: - `createFromVenueObject()` - For rooms, houses, apartments - `createFromVenueSpot()` - For beach spots, parking - `createFromVenueService()` - For services - `createFromVenuePackage()` - For service packages - `createFromProduct()` - For minibar, insurance, etc. - Comprehensive type casting ### 4. InvoiceService Class **File:** `app/Services/InvoiceService.php` **Core Methods:** - `createFromBooking()` - Main method to generate invoice from booking - Automatically includes all venue objects, spots, services, packages - Handles service fees - Calculates totals - Supports custom options - `createProformaFromBooking()` - Generate draft/proforma invoice - `convertProformaToFinal()` - Convert proforma to final invoice - `addProductToInvoice()` - Add minibar, insurance, damage fees, etc. - `addCustomFee()` - Add cleaning fees, late checkout fees, etc. - `addDiscount()` - Add fixed amount discount - `applyPercentageDiscount()` - Add percentage-based discount - `createCreditNote()` - Generate credit notes for refunds - `getTaxRate()` - Customizable tax calculation (override for custom logic) **Protected Helper Methods:** - `addVenueObjectsToInvoice()` - Process accommodations - `addVenueSpotsToInvoice()` - Process spots - `addServicesToInvoice()` - Process services - `addPackagesToInvoice()` - Process packages - `addServiceFee()` - Add platform fees ### 5. Documentation **File:** `INVOICE_BOOKING_INTEGRATION.md` Comprehensive guide including: - Database schema documentation - 10+ usage examples - Controller integration examples - Filament resource integration - Best practices - Migration instructions - Tax configuration guide - Fiscal receipt integration notes ## Key Features ### 1. Comprehensive Booking Integration - Automatically generates invoices from bookings - Includes all booking components: - Venue objects (rooms, houses, apartments) - Venue spots (beach spots, parking) - Services (medical, legal, beauty) - Packages (service bundles) - Tracks duration and date ranges - Preserves booking relationships ### 2. Flexible Product Management - Add additional products after invoice creation - Support for: - Minibar consumption - Insurance fees - Damage charges - Late checkout fees - Cleaning fees - Any custom products - Polymorphic relationships for flexibility ### 3. Advanced Payment Tracking - Multiple payment statuses - Partial payment support - Payment method tracking - Payment date recording - Overdue invoice detection - Remaining balance calculation ### 4. Invoice Types - **Proforma** - Draft invoices for quotes - **Final** - Official invoices - **Credit Note** - For refunds/returns - **Debit Note** - For additional charges ### 5. Automatic Calculations - Auto-calculate subtotals - Apply discounts (percentage or fixed) - Calculate taxes (configurable rates) - Add service fees - Recalculate on item changes - Support for multiple currencies ### 6. Category-Based Organization - Items organized by category - Easy filtering and display - Separate queries for: - Accommodations - Spots - Services - Packages - Products - Fees - Taxes - Discounts ### 7. Duration Tracking - Track nights for accommodations - Track days for spots - Track hours for services - Track sessions for appointments - Store start and end dates - Calculate duration automatically ### 8. Multi-Tenancy Support - Company-level invoicing - Workspace-level invoicing - Proper scoping and filtering - Isolated data per tenant ### 9. Fiscal Integration Ready - Fiscal receipt number storage - Fiscal status tracking - Print timestamp recording - Metadata for fiscal requirements ### 10. Developer-Friendly - Fluent API design - Type-safe methods - Comprehensive documentation - Factory methods for easy creation - Query scopes for common filters - Helper methods for calculations ## Usage Example ```php use App\Services\InvoiceService; use App\Models\Booking; use App\Models\Product; $invoiceService = new InvoiceService(); $booking = Booking::find(1); // Create invoice from booking (includes all booking items) $invoice = $invoiceService->createFromBooking($booking); // Add minibar charges $minibar = Product::where('name', 'Minibar')->first(); $invoiceService->addProductToInvoice($invoice, $minibar, [ 'quantity' => 3, 'price' => 15.00, ]); // Add cleaning fee $invoiceService->addCustomFee($invoice, 'Cleaning Fee', 30.00); // Apply discount $invoiceService->applyPercentageDiscount($invoice, 10, 'Loyalty discount'); // Record payment $invoice->addPayment(100.00); // Check status if ($invoice->isPartiallyPaid()) { $remaining = $invoice->getRemainingAmount(); echo "Remaining: €{$remaining}"; } ``` ## Migration Steps 1. **Run the migration:** ```bash php artisan migrate ``` 2. **Test the integration:** ```bash php artisan tinker ``` ```php $booking = Booking::first(); $service = app(InvoiceService::class); $invoice = $service->createFromBooking($booking); ``` 3. **Update existing code** to use the new InvoiceService class 4. **Configure tax rates** by overriding `getTaxRate()` in InvoiceService ## Benefits ✅ **Automated Invoice Generation** - Create complete invoices from bookings with one method call ✅ **Flexible Product Management** - Easily add minibar, insurance, fees after booking ✅ **Accurate Calculations** - Automatic subtotal, tax, discount calculations ✅ **Payment Tracking** - Track partial payments, overdue invoices ✅ **Multiple Invoice Types** - Proforma, final, credit notes ✅ **Category Organization** - Easy filtering and display by item type ✅ **Duration Tracking** - Proper handling of nights, days, hours ✅ **Multi-Tenancy** - Company and workspace isolation ✅ **Fiscal Ready** - Fields for fiscal printer integration ✅ **Developer Friendly** - Clean API, comprehensive documentation ## Next Steps 1. **Integrate with Filament Resources** - Add invoice generation actions to BookingResource 2. **Create Invoice PDF Templates** - Design professional invoice layouts 3. **Implement Email Notifications** - Send invoices to clients automatically 4. **Add Fiscal Printer Integration** - Connect to fiscal receipt printers 5. **Create Invoice Reports** - Build analytics and reporting dashboards 6. **Implement Payment Gateway** - Connect to payment processors 7. **Add Invoice Templates** - Support multiple invoice designs 8. **Implement Recurring Invoices** - For subscription-based bookings ## Support For questions or issues: - Review `INVOICE_BOOKING_INTEGRATION.md` for detailed usage examples - Check the InvoiceService class for available methods - Examine the migration file for database schema details - Test with sample bookings in tinker