1.0.2
02 Jun 2026
  • Migrated billing_customers.billing_address / shipping_address JSON columns into the core polymorphic `addresses` table (type = billing|shipping) and dropped the legacy JSON columns
  • BillingCustomer now exposes addresses() / billingAddress() / shippingAddress() relations backed by App\Models\Address instead of JSON blobs
  • Customer display name now resolves as company_name, then contact_name, then the linked user's name — fixing stale names copied at customer-creation time
  • Standardised inconsistent legacy address keys (address_line1 / line1 / street, country / country_code) onto the core address columns, fixing previously broken invoice / credit-note PDF address blocks
  • Made billing_customers.contact_name / contact_email nullable; when empty they fall back to the linked user's name / email / phone
  • Changed billing_invoices.issue_date from DATE to DATETIME so invoices capture the exact time of issue (existing rows default to 00:00:00); the create/edit forms now use a datetime-local picker normalized from the admin display timezone, and invoice lists show a relative issue date with the full datetime on hover
1.0.1
12 May 2026
  • Added source_type / source_id columns and a (source_type, source_id) unique index to billing_invoices for webhook idempotency
  • Made billing_invoices.created_by nullable so invoices generated from webhooks (no authenticated user) can be persisted
  • Listens to App\Events\PaymentSucceeded dispatched by every Payable model and auto-generates a paid BillingInvoice with line items via the new BillableForInvoice contract
  • Added InvoicePaidReceiptNotification that emails the customer the invoice as a PDF attachment plus a link to the public invoice URL
  • Added two admin toggles on the billing settings page: 'Auto-Generate Invoices' (billing_auto_invoice_enabled) and 'Email PDF Receipt' (billing_auto_send_paid_invoice_pdf)
  • Re-seeded the billing permission set and granted it to the admin role to cover installs that may be missing entries