WFDASH-WEBAPP/pb-exports/quotes-quote_items.json
SJCoetz 47b01bddfa feat: add picking slips, bulk print tracking, supplier map
- Add Supplier Map component to suppliers page and reorganize sidebar navigation
- Implement picking slip PDF generation with supplier per line item and picked-by signature footer
- Add invoice bulk print tracking API and view models to track printed invoice state
- Extend company search and form to support email/telephone fields and improve searchability
- Fix data table debounce race condition by using useRef for onSearch handler
- Fix supplier page fetch race condition with debounced timeout
- Reduce list page item counts to 10 per page for customers, companies, and suppliers
- Update company search filter to include email and telephone in search queries
- Add comprehensive test suite for new and existing components and APIs
- Add pdf-lib dependency for PDF generation and update related tooling
- Clean up unused code and fix minor linting issues
2026-07-10 10:47:11 +02:00

1574 lines
No EOL
39 KiB
JSON

[
{
"id": "pbc_2248925113",
"listRule": "@request.auth.id != ''",
"viewRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id != ''",
"name": "quote_attachments",
"type": "base",
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"help": "",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"cascadeDelete": true,
"collectionId": "pbc_2527524235",
"help": "",
"hidden": false,
"id": "relation1802619892",
"maxSelect": 1,
"minSelect": 0,
"name": "quote",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1007413605",
"max": 255,
"min": 1,
"name": "filename",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "file2359244304",
"maxSelect": 10,
"maxSize": 26214400,
"mimeTypes": [
"application/pdf",
"image/png",
"image/jpeg",
"image/gif",
"image/webp",
"application/msword",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"text/csv",
"text/plain",
"application/octet-stream"
],
"name": "file",
"presentable": false,
"protected": false,
"required": true,
"system": false,
"thumbs": [
"150x150",
"600x600"
],
"type": "file"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1102887660",
"max": 100,
"min": 0,
"name": "content_type",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "number1615430137",
"max": null,
"min": 0,
"name": "size_bytes",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text4291420662",
"max": 255,
"min": 0,
"name": "email_message_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"hidden": false,
"id": "autodate3061522008",
"name": "uploaded_at",
"onCreate": true,
"onUpdate": false,
"presentable": false,
"system": false,
"type": "autodate"
},
{
"help": "inbound: came in with the original RFQ email. outbound: operator uploaded to send with the quote. generated: PDF rendered by /api/v1/quotes/[id]/pdf.",
"hidden": false,
"id": "sel_quote_attachments_direction",
"maxSelect": 1,
"name": "direction",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"inbound",
"outbound",
"generated"
]
},
{
"cascadeDelete": false,
"collectionId": "pbc_470828888",
"help": "",
"hidden": false,
"id": "relation2382133908",
"maxSelect": 1,
"minSelect": 0,
"name": "quote_item",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"help": "",
"hidden": false,
"id": "select1002749145",
"maxSelect": 1,
"name": "kind",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"pdf",
"image",
"doc",
"other"
]
}
],
"indexes": [
"CREATE INDEX idx_quote_attachments_quote ON quote_attachments (quote)",
"CREATE INDEX idx_quote_attachments_message_id ON quote_attachments (email_message_id)"
],
"system": false
},
{
"id": "pbc_1664100866",
"listRule": "@request.auth.id != ''",
"viewRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id != ''",
"name": "quote_item_attachments",
"type": "base",
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"help": "",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"cascadeDelete": true,
"collectionId": "pbc_470828888",
"help": "",
"hidden": false,
"id": "relation2382133908",
"maxSelect": 1,
"minSelect": 0,
"name": "quote_item",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1007413605",
"max": 500,
"min": 0,
"name": "filename",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "file2359244304",
"maxSelect": 1,
"maxSize": 20971520,
"mimeTypes": [
"image/*",
"application/pdf"
],
"name": "file",
"presentable": false,
"protected": false,
"required": true,
"system": false,
"thumbs": null,
"type": "file"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1102887660",
"max": 0,
"min": 0,
"name": "content_type",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "number1615430137",
"max": null,
"min": null,
"name": "size_bytes",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"help": "",
"hidden": false,
"id": "select1602912115",
"maxSelect": 1,
"name": "source",
"presentable": false,
"required": true,
"system": false,
"type": "select",
"values": [
"agent_proof",
"operator_proof",
"manual"
]
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text18589324",
"max": 0,
"min": 0,
"name": "notes",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"hidden": false,
"id": "autodate3061522008",
"name": "uploaded_at",
"onCreate": true,
"onUpdate": false,
"presentable": false,
"system": false,
"type": "autodate"
}
],
"indexes": [],
"system": false
},
{
"id": "pbc_470828888",
"listRule": "@request.auth.id != ''",
"viewRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id != ''",
"name": "quote_items",
"type": "base",
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"help": "",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"hidden": false,
"id": "autodate2990389176",
"name": "created",
"onCreate": true,
"onUpdate": false,
"presentable": false,
"system": true,
"type": "autodate"
},
{
"hidden": false,
"id": "autodate3332085495",
"name": "updated",
"onCreate": true,
"onUpdate": true,
"presentable": false,
"system": true,
"type": "autodate"
},
{
"cascadeDelete": false,
"collectionId": "pbc_2527524235",
"help": "",
"hidden": false,
"id": "relation1802619892",
"maxSelect": 1,
"minSelect": 0,
"name": "quote",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1843675174",
"max": 0,
"min": 0,
"name": "description",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text2888347927",
"max": 0,
"min": 0,
"name": "quote_number",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text692179049",
"max": 0,
"min": 0,
"name": "quote_reference",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "number2683508278",
"max": null,
"min": null,
"name": "quantity",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"cascadeDelete": false,
"collectionId": "pbc_3355664324",
"help": "",
"hidden": false,
"id": "relation2603248766",
"maxSelect": 1,
"minSelect": 0,
"name": "supplier",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"help": "",
"hidden": false,
"id": "number2437584093",
"max": null,
"min": null,
"name": "cost_price",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"help": "",
"hidden": false,
"id": "number2737583402",
"max": null,
"min": null,
"name": "selling_price",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text18589324",
"max": 0,
"min": 0,
"name": "notes",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "bool537097956",
"name": "is_processed",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"help": "",
"hidden": false,
"id": "number637752195",
"max": null,
"min": null,
"name": "markup",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1806133073",
"max": 0,
"min": 0,
"name": "quote_pdf_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "bool2811803484",
"name": "user_edited",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text261109956",
"max": 0,
"min": 0,
"name": "sku",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text3306765901",
"max": 0,
"min": 0,
"name": "pricing_source",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1790500595",
"max": 0,
"min": 0,
"name": "matched_price_list_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text770256397",
"max": 0,
"min": 0,
"name": "pricing_notes",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"cascadeDelete": false,
"collectionId": "pbc_3292755704",
"help": "",
"hidden": false,
"id": "relation105650625",
"maxSelect": 1,
"minSelect": 0,
"name": "category",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"help": "",
"hidden": false,
"id": "select3833842770",
"maxSelect": 1,
"name": "claim_status",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"unclaimed",
"claimed",
"priced",
"awaiting_supplier",
"send_failed"
]
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text694952315",
"max": 0,
"min": 0,
"name": "claimed_by",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "date2096107013",
"max": "",
"min": "",
"name": "claimed_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "date3537997662",
"max": "",
"min": "",
"name": "claim_expires_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text2321152280",
"max": 0,
"min": 0,
"name": "outbound_message_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "date1866183355",
"max": "",
"min": "",
"name": "outbound_sent_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "date7783269",
"max": "",
"min": "",
"name": "supplier_replied_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "number2474955903",
"max": null,
"min": null,
"name": "supplier_reply_count",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"autogeneratePattern": "",
"help": "Operator's final description that goes on the quote (vs `description` which is what the customer asked for in the original RFQ). Empty = fall back to `description` at render time.",
"hidden": false,
"id": "text837254488",
"max": 0,
"min": 0,
"name": "quote_description",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
}
],
"indexes": [
"CREATE INDEX `idx_qi_sku` ON `quote_items` (`sku`)",
"CREATE INDEX `idx_qi_claim_status` ON `quote_items` (`claim_status`)",
"CREATE INDEX `idx_qi_outbound_message_id` ON `quote_items` (`outbound_message_id`)",
"CREATE INDEX `idx_qi_category` ON `quote_items` (`category`)"
],
"system": false
},
{
"id": "pbc_2799432415",
"listRule": "@request.auth.id != ''",
"viewRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id != ''",
"name": "quote_replies",
"type": "base",
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"help": "",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"cascadeDelete": true,
"collectionId": "pbc_2527524235",
"help": "",
"hidden": false,
"id": "relation1802619892",
"maxSelect": 1,
"minSelect": 0,
"name": "quote",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"exceptDomains": null,
"help": "",
"hidden": false,
"id": "email3739507051",
"name": "from_email",
"onlyDomains": null,
"presentable": false,
"required": true,
"system": false,
"type": "email"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text733324261",
"max": 255,
"min": 0,
"name": "from_name",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text4224597626",
"max": 500,
"min": 1,
"name": "subject",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text3133793799",
"max": 10000,
"min": 0,
"name": "body_plain",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1308443783",
"max": 20000,
"min": 0,
"name": "body_html",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "date1833926553",
"max": "",
"min": "",
"name": "received_at",
"presentable": false,
"required": true,
"system": false,
"type": "date"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text4291420662",
"max": 255,
"min": 0,
"name": "email_message_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text2773059511",
"max": 255,
"min": 0,
"name": "in_reply_to",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text99397075",
"max": 5000,
"min": 0,
"name": "quoted_text",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
}
],
"indexes": [
"CREATE INDEX idx_quote_replies_quote ON quote_replies (quote)",
"CREATE INDEX idx_quote_replies_message_id ON quote_replies (email_message_id)",
"CREATE INDEX idx_quote_replies_in_reply_to ON quote_replies (in_reply_to)"
],
"system": false
},
{
"id": "pbc_2527524235",
"listRule": "@request.auth.id != ''",
"viewRule": "@request.auth.id != ''",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id != ''",
"name": "quotes",
"type": "base",
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"help": "",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"hidden": false,
"id": "autodate2990389176",
"name": "created",
"onCreate": true,
"onUpdate": false,
"presentable": false,
"system": true,
"type": "autodate"
},
{
"hidden": false,
"id": "autodate3332085495",
"name": "updated",
"onCreate": true,
"onUpdate": true,
"presentable": false,
"system": true,
"type": "autodate"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text2888347927",
"max": 0,
"min": 0,
"name": "quote_number",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text692179049",
"max": 0,
"min": 0,
"name": "quote_reference",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text3792928957",
"max": 0,
"min": 0,
"name": "external_number",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text2893706074",
"max": 0,
"min": 0,
"name": "rfq_number",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "number637752195",
"max": null,
"min": null,
"name": "markup",
"onlyInt": false,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"cascadeDelete": false,
"collectionId": "pbc_108570809",
"help": "",
"hidden": false,
"id": "relation2168032777",
"maxSelect": 1,
"minSelect": 0,
"name": "customer",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"cascadeDelete": false,
"collectionId": "pbc_3866053794",
"help": "",
"hidden": false,
"id": "relation1337919823",
"maxSelect": 1,
"minSelect": 0,
"name": "company",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text694952315",
"max": 0,
"min": 0,
"name": "claimed_by",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1843675174",
"max": 0,
"min": 0,
"name": "description",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "select2063623452",
"maxSelect": 0,
"name": "status",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"new",
"claimed",
"processed",
"emailed",
"approval_pending",
"approved",
"rejected",
"problem",
"complete",
"cancelled",
"follow_up",
"email_failed",
"unmatched_bounce",
"templa",
"template",
"sending",
"mail_failed"
]
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1319357245",
"max": 0,
"min": 0,
"name": "approved_by",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text18589324",
"max": 0,
"min": 0,
"name": "notes",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"exceptDomains": null,
"help": "",
"hidden": false,
"id": "email580557119",
"name": "email_sender",
"onlyDomains": null,
"presentable": false,
"required": false,
"system": false,
"type": "email"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1175344821",
"max": 0,
"min": 0,
"name": "email_subject",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1151216439",
"max": 0,
"min": 0,
"name": "email_body",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "bool774142673",
"name": "has_attachments",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"help": "",
"hidden": false,
"id": "select4002074209",
"maxSelect": 0,
"name": "company_letterhead",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"CNL",
"ISHERWOOD",
"JEI"
]
},
{
"help": "",
"hidden": false,
"id": "bool1814108466",
"name": "email_delivered",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"help": "",
"hidden": false,
"id": "date1135204232",
"max": "",
"min": "",
"name": "email_delivered_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "bool3503092907",
"name": "email_opened",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"help": "",
"hidden": false,
"id": "date2214610735",
"max": "",
"min": "",
"name": "email_opened_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text1808127753",
"max": 0,
"min": 0,
"name": "email_tracking_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "",
"hidden": false,
"id": "bool614143858",
"name": "has_new_reply",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"help": "",
"hidden": false,
"id": "date654414221",
"max": "",
"min": "",
"name": "last_reply_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "date316279742",
"max": "",
"min": "",
"name": "email_failed_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "",
"hidden": false,
"id": "date4279644558",
"max": "",
"min": "",
"name": "pdf_generated_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"autogeneratePattern": "",
"help": "",
"hidden": false,
"id": "text4291420662",
"max": 0,
"min": 0,
"name": "email_message_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "Quote date printed on the PDF. If blank, the PDF falls back to quote.created.",
"hidden": false,
"id": "date_quote_date",
"max": "",
"min": "",
"name": "quote_date",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"help": "Validity period in days (e.g. 30, 60). If blank, defaults to 30.",
"hidden": false,
"id": "number_validity_days",
"max": null,
"min": null,
"name": "validity_days",
"onlyInt": true,
"presentable": false,
"required": false,
"system": false,
"type": "number"
},
{
"help": "True if this quote is a reusable template (scaffolding, not a real customer quote).",
"hidden": false,
"id": "bool_is_template",
"name": "is_template",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"cascadeDelete": false,
"collectionId": "pbc_2527524235",
"help": "If this template was cloned from a real quote, the source quote id.",
"hidden": false,
"id": "relation_template_source",
"maxSelect": 1,
"minSelect": 0,
"name": "template_source_id",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"cascadeDelete": false,
"collectionId": "pbc_2527524235",
"help": "If this quote was generated from a template, the template quote id.",
"hidden": false,
"id": "relation_generated_from_template",
"maxSelect": 1,
"minSelect": 0,
"name": "generated_from_template_id",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"help": "User-set follow-up reminder date. Dashboard widget shows quotes where follow_up_due <= today and follow-up is still pending.",
"hidden": false,
"id": "date_follow_up_due",
"max": "",
"min": "",
"name": "follow_up_due",
"presentable": false,
"required": false,
"system": false,
"type": "date"
},
{
"autogeneratePattern": "",
"help": "Comma-separated CC addresses for the outbound quote email. Persisted so the operator's last choice becomes the default next time.",
"hidden": false,
"id": "text_email_cc",
"max": 2000,
"min": 0,
"name": "email_cc",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "Comma-separated BCC addresses for the outbound quote email. Defaults to the customer's sales rep.",
"hidden": false,
"id": "text_email_bcc",
"max": 2000,
"min": 0,
"name": "email_bcc",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "Operator-edited subject for the outbound quote email. Empty falls back to `Re: {email_subject}` at send time.",
"hidden": false,
"id": "text_email_subject_outbound",
"max": 500,
"min": 0,
"name": "email_subject_outbound",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "Operator-edited body for the outbound quote email. Empty falls back to a default `please find attached quote {quote_number}` template at send time.",
"hidden": false,
"id": "text_email_message",
"max": 10000,
"min": 0,
"name": "email_message",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "When true (default), the outbound email includes the per-letterhead supplier authorization letter (CNL or ISHERWOOD as applicable). Requires the letterhead_settings.auth_letter field to be uploaded.",
"hidden": false,
"id": "bool_attach_auth_letters",
"name": "attach_auth_letters",
"presentable": false,
"required": false,
"system": false,
"type": "bool"
},
{
"autogeneratePattern": "",
"help": "RFC 5322 Message-ID stamped on the outbound email. Lets the inbound monitor match future bounce/DSN emails back to the specific outbound attempt.",
"hidden": false,
"id": "text_email_outbound_message_id",
"max": 500,
"min": 0,
"name": "email_outbound_message_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "JSON array of quote_attachments record IDs sent with the outbound email. Captured at send time so retry sends the same set, not whatever happens to be attached at retry.",
"hidden": false,
"id": "text_email_outbound_attachment_ids",
"max": 5000,
"min": 0,
"name": "email_outbound_attachment_ids",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"help": "Last failure reason from the outbound send. Cleared on retry. Visible in the UI banner and the quote card timeline.",
"hidden": false,
"id": "text_email_error",
"max": 5000,
"min": 0,
"name": "email_error",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"help": "When status flipped to `sending`. Lets the UI flag stuck sends (>2 min) and operators measure SMTP turnaround.",
"hidden": false,
"id": "date_sending_started_at",
"max": "",
"min": "",
"name": "sending_started_at",
"presentable": false,
"required": false,
"system": false,
"type": "date"
}
],
"indexes": [
"CREATE INDEX idx_quotes_email_message_id ON quotes (email_message_id)"
],
"system": false
}
]