- 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
1574 lines
No EOL
39 KiB
JSON
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
|
|
}
|
|
] |