{"body": [{"id": "quotationsTable", "type": "table", "options": {"rowClick": "selectRecord", "tableName": "quotations", "rowActions": [{"icon": "fa-eye", "class": "btn btn-info btn-xs", "label": "View", "action": "openSelectedDetail", "ariaLabel": "View quotation details"}, {"icon": "fa-paper-plane", "class": "btn btn-primary btn-xs", "label": "Send", "action": "quotations:send", "confirm": "Send this quotation to the customer?", "ariaLabel": "Send quotation to customer", "condition": "status == \"draft\""}, {"icon": "fa-file-invoice", "class": "btn btn-success btn-xs", "label": "Convert", "action": "quotations:convert", "confirm": "Convert this quotation to an invoice?", "ariaLabel": "Convert quotation to invoice", "condition": "status == \"sent\" || status == \"accepted\""}, {"icon": "fa-check", "class": "btn btn-success btn-xs", "label": "Accept", "action": "quotations:accept", "confirm": "Accept this quotation?", "ariaLabel": "Accept quotation", "condition": "status == \"sent\""}, {"icon": "fa-times", "class": "btn btn-error btn-xs", "label": "Reject", "action": "quotations:reject", "confirm": "Reject this quotation?", "ariaLabel": "Reject quotation", "condition": "status == \"sent\""}, {"icon": "fa-copy", "class": "btn btn-ghost btn-xs", "label": "Duplicate", "action": "quotations:duplicate", "ariaLabel": "Duplicate quotation"}, {"icon": "fa-file-pdf", "class": "btn btn-secondary btn-xs", "label": "PDF", "action": "quotations:pdf", "ariaLabel": "Download quotation PDF"}, {"icon": "fa-trash", "class": "btn btn-error btn-xs btn-outline", "label": "Delete", "action": "records:delete", "confirm": "Are you sure you want to delete this quotation?", "ariaLabel": "Delete quotation", "condition": "status == \"draft\" || status == \"expired\""}], "columnLabels": {"date": "Date", "status": "Status", "sent_at": "Sent", "expires_at": "Expires", "tax_amount": "Tax", "customer_id": "Customer", "total_amount": "Amount", "quotation_number": "Quote #"}, "columnsToShow": ["quotation_number", "date", "customer_id", "total_amount", "tax_amount", "status", "sent_at", "expires_at"], "primaryKeyField": "quotation_id", "showGlobalSearch": true}}], "title": "Quotations Management", "footer": [{"type": "button", "class": "btn btn-ghost", "label": "Close", "action": "close", "ariaLabel": "Close quotations module"}], "header": [{"icon": "fa-plus", "type": "button", "class": "btn btn-primary", "label": "New Quotation", "action": {"handler": "openQuotationForm"}, "ariaLabel": "Create new quotation"}, {"type": "filter-select", "options": {"label": "Status", "options": [{"label": "All", "value": ""}, {"label": "Draft", "value": "draft"}, {"label": "Sent", "value": "sent"}, {"label": "Accepted", "value": "accepted"}, {"label": "Rejected", "value": "rejected"}, {"label": "Expired", "value": "expired"}, {"label": "Converted", "value": "converted"}], "data_column": "status"}}, {"type": "filter-date-range", "options": {"label": "Date Range", "data_column": "date"}}, {"icon": "fa-sync", "type": "button", "class": "btn btn-ghost", "label": "Refresh", "action": "refresh", "ariaLabel": "Refresh quotations list"}], "modulePath": "quotations", "dataSources": {"quotations": {"table": "quotations", "syncPolicy": "default", "autoRefresh": true, "refreshInterval": 30000}}}