Odoo
Customer invoices with line details
Odoo invoice cards with totals, payment state and an inline product-line table.
Customer invoices and credit notes from Odoo's PostgreSQL model tables, with product lines embedded in the invoice Details screen. The relations and field names follow Odoo's official account invoice report source, which joins account_move, account_move_line and res_partner.
Prepare Odoo / PostgreSQL:
1. Ask the database administrator for a dedicated PostgreSQL login with SELECT only on account_move, account_move_line and res_partner.
2. Restrict network access and use TLS or a VPN. Never reuse the Odoo owner/superuser.
3. This is a database package, not Odoo JSON-RPC. Test it after every major Odoo upgrade because internal database access is version-sensitive.
Official source reference: https://github.com/odoo/odoo/blob/19.0/addons/account/report/account_invoice_report.py
Configure Cifru on iPhone/iPad:
1. Sources → Add source → PostgreSQL and enter the dedicated read-only connection.
2. Test the connection, then import the package and map its single database slot.
3. Cifru checks both statements as SELECT-only and runs a read/compatibility test before applying.
4. Plan Pro is required because this package contains custom read-only SQL.
5. The package contains no Odoo database name, host, company data or credential.
Ce creează pachetul
- Home: Customer invoices
- Detalii: Invoice lines
- Sub-buton: Customer invoice lines
Sursele se mapează local și se verifică înainte de aplicare.
Interogări personalizatePRO2 SQL
Interogările personalizate sunt funcții PRO. Cifru repetă validarea read-only pe sursa locală înainte de execuție.
$.components.workspaceSelection.datasets.0.sqlQuerySELECT
m.id,
m.name AS invoice_number,
m.invoice_date,
m.invoice_date_due,
p.name AS customer_name,
m.amount_untaxed,
m.amount_total,
m.amount_residual,
m.state,
m.payment_state,
m.move_type
FROM account_move m
LEFT JOIN res_partner p ON p.id = m.partner_id
WHERE m.move_type IN ('out_invoice', 'out_refund')static read-only checks passed
$.components.workspaceSelection.datasets.1.sqlQuerySELECT
l.id,
l.move_id,
l.product_id,
l.name AS line_description,
l.quantity,
l.price_unit,
l.price_subtotal,
l.price_total
FROM account_move_line l
INNER JOIN account_move m ON m.id = l.move_id
WHERE m.move_type IN ('out_invoice', 'out_refund')
AND (l.display_type IS NULL OR l.display_type = 'product')static read-only checks passed
Vezi JSON-ul care se importărestrâns implicit
{
"components": {
"sourceSlots": [
{
"displayName": "Odoo PostgreSQL database",
"id": "D4EDE62F-2391-503A-9ACA-50D356B0605D",
"kind": "postgreSQL",
"requiredObjects": [
"account_move",
"account_move_line",
"res_partner"
],
"requiresCustomSQL": true
}
],
"workspaceSelection": {
"commonFields": [],
"datasets": [
{
"cacheMode": "cached",
"calculatedFields": [],
"customQueryIntegrationName": "Odoo",
"endpointPath": "",
"fetchSortRules": [],
"id": "F891A24E-12E2-50E1-8523-AA09DB5D66D1",
"mappings": [
{
"commonFieldKey": "",
"key": "id",
"label": "Invoice ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "id",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "document_number",
"key": "invoice_number",
"label": "Invoice number",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "invoice_number",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "document_date",
"key": "invoice_date",
"label": "Invoice date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "invoice_date",
"type": "date",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "invoice_date_due",
"label": "Due date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "invoice_date_due",
"type": "date",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "customer_name",
"key": "customer_name",
"label": "Customer",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "customer_name",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "amount_untaxed",
"label": "Untaxed",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "amount_untaxed",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "amount_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "amount_total",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "amount_residual",
"label": "Outstanding",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "amount_residual",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "state",
"label": "Invoice state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "state",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "payment_state",
"label": "Payment state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "payment_state",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "move_type",
"label": "Document type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "move_type",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 1000,
"name": "Customer invoices",
"primaryKey": "id",
"refreshPolicy": {
"enabled": true,
"intervalMinutes": 15
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"id",
"invoice_number",
"invoice_date",
"invoice_date_due",
"customer_name"
],
"sourceID": "D4EDE62F-2391-503A-9ACA-50D356B0605D",
"sqlQuery": "SELECT\n m.id,\n m.name AS invoice_number,\n m.invoice_date,\n m.invoice_date_due,\n p.name AS customer_name,\n m.amount_untaxed,\n m.amount_total,\n m.amount_residual,\n m.state,\n m.payment_state,\n m.move_type\nFROM account_move m\nLEFT JOIN res_partner p ON p.id = m.partner_id\nWHERE m.move_type IN ('out_invoice', 'out_refund')",
"tableName": ""
},
{
"cacheMode": "cached",
"calculatedFields": [],
"customQueryIntegrationName": "Odoo",
"endpointPath": "",
"fetchSortRules": [],
"id": "484D2F56-9256-573C-BE6B-C89A238FDF04",
"mappings": [
{
"commonFieldKey": "",
"key": "id",
"label": "Line ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "id",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "move_id",
"label": "Invoice ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "move_id",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "product_id",
"label": "Product ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "product_id",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "product_name",
"key": "line_description",
"label": "Line",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "line_description",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "quantity",
"key": "quantity",
"label": "Quantity",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "quantity",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "price_unit",
"label": "Unit price",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "price_unit",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "price_subtotal",
"label": "Untaxed amount",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "price_subtotal",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "price_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "price_total",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
}
],
"maxRows": 5000,
"name": "Customer invoice lines",
"primaryKey": "id",
"refreshPolicy": {
"enabled": true,
"intervalMinutes": 15
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"id",
"move_id",
"product_id",
"line_description",
"quantity"
],
"sourceID": "D4EDE62F-2391-503A-9ACA-50D356B0605D",
"sqlQuery": "SELECT\n l.id,\n l.move_id,\n l.product_id,\n l.name AS line_description,\n l.quantity,\n l.price_unit,\n l.price_subtotal,\n l.price_total\nFROM account_move_line l\nINNER JOIN account_move m ON m.id = l.move_id\nWHERE m.move_type IN ('out_invoice', 'out_refund')\n AND (l.display_type IS NULL OR l.display_type = 'product')",
"tableName": ""
}
],
"pages": [
{
"actions": [
{
"id": "6DA2C90E-6AE6-5B7F-88C9-0B06343547C2",
"kind": "showRelated",
"relatedInitiallyExpanded": true,
"relatedPresentation": "inline",
"relatedPreviewLimit": 12,
"relatedRowStyle": "table",
"relatedShowsCount": true,
"relationID": "693A3304-88F1-5B3A-83C4-CF028469B345",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "484D2F56-9256-573C-BE6B-C89A238FDF04",
"title": "Invoice lines",
"urlKey": ""
}
],
"badgeKey": "amount_total",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_number",
"label": "Invoice number",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "customer_name",
"label": "Customer",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_date",
"label": "Invoice date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_date_due",
"label": "Due date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "state",
"label": "Invoice state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "payment_state",
"label": "Payment state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "amount_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "amount_residual",
"label": "Outstanding",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"datasetID": "F891A24E-12E2-50E1-8523-AA09DB5D66D1",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "id",
"label": "Invoice ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_number",
"label": "Invoice number",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_date",
"label": "Invoice date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "invoice_date_due",
"label": "Due date",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "customer_name",
"label": "Customer",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "amount_untaxed",
"label": "Untaxed",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "highlight",
"isVisible": true,
"key": "amount_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "highlight",
"isVisible": true,
"key": "amount_residual",
"label": "Outstanding",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "state",
"label": "Invoice state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "payment_state",
"label": "Payment state",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "move_type",
"label": "Document type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"fixedFilters": [],
"id": "5ABA3FC3-6423-55DF-8588-3D77C874A6E7",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": true,
"sortRules": [
{
"direction": "descending",
"id": "11F55E83-358A-525C-92D9-59F5972A72F4",
"key": "invoice_date",
"type": "date"
}
],
"subtitle": "",
"subtitleKey": "customer_name",
"systemImage": "doc.text",
"title": "Customer invoices",
"titleKey": "invoice_number"
},
{
"actions": [],
"badgeKey": "price_total",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "line_description",
"label": "Line",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "quantity",
"label": "Quantity",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "price_unit",
"label": "Unit price",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "price_subtotal",
"label": "Untaxed amount",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "price_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"datasetID": "484D2F56-9256-573C-BE6B-C89A238FDF04",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "id",
"label": "Line ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "move_id",
"label": "Invoice ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "product_id",
"label": "Product ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "line_description",
"label": "Line",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "highlight",
"isVisible": true,
"key": "quantity",
"label": "Quantity",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "price_unit",
"label": "Unit price",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "price_subtotal",
"label": "Untaxed amount",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "highlight",
"isVisible": true,
"key": "price_total",
"label": "Total",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"fixedFilters": [],
"id": "B6776FDB-9E47-5D6C-807B-3D8B1B51F97B",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [],
"subtitle": "",
"subtitleKey": "",
"systemImage": "tablecells",
"title": "Customer invoice lines",
"titleKey": "line_description"
}
],
"relations": [
{
"childDatasetID": "484D2F56-9256-573C-BE6B-C89A238FDF04",
"childKey": "move_id",
"id": "693A3304-88F1-5B3A-83C4-CF028469B345",
"name": "Invoice lines",
"parentDatasetID": "F891A24E-12E2-50E1-8523-AA09DB5D66D1",
"parentKey": "id"
}
],
"widgets": []
}
},
"format": "cifru-configuration-package",
"formatVersion": 1,
"manifest": {
"applicationName": "Odoo",
"configurationLanguages": [
"en"
],
"countries": [
"ALL"
],
"createdAt": "2026-07-24T16:26:43Z",
"description": "Customer invoices and credit notes from Odoo's PostgreSQL model tables, with product lines embedded in the invoice Details screen. The relations and field names follow Odoo's official account invoice report source, which joins account_move, account_move_line and res_partner.\n\nPrepare Odoo / PostgreSQL:\n1. Ask the database administrator for a dedicated PostgreSQL login with SELECT only on account_move, account_move_line and res_partner.\n2. Restrict network access and use TLS or a VPN. Never reuse the Odoo owner/superuser.\n3. This is a database package, not Odoo JSON-RPC. Test it after every major Odoo upgrade because internal database access is version-sensitive.\nOfficial source reference: https://github.com/odoo/odoo/blob/19.0/addons/account/report/account_invoice_report.py\n\nConfigure Cifru on iPhone/iPad:\n1. Sources → Add source → PostgreSQL and enter the dedicated read-only connection.\n2. Test the connection, then import the package and map its single database slot.\n3. Cifru checks both statements as SELECT-only and runs a read/compatibility test before applying.\n4. Plan Pro is required because this package contains custom read-only SQL.\n5. The package contains no Odoo database name, host, company data or credential.",
"licenseCode": "Cifru-Community-1.0",
"minimumCifruVersion": "1.0",
"minimumPlan": "pro",
"packageID": "7FC13D74-E8A1-5B91-A95F-FA3186A5D6D7",
"rootButtonCount": 1,
"summary": "Odoo invoice cards with totals, payment state and an inline product-line table.",
"tags": [
"Odoo",
"ERP",
"invoices",
"PostgreSQL"
],
"title": "Customer invoices with line details"
}
}