Skip to content

Commit 63ffaf3

Browse files
authored
[MODLISTS-248] Add Payment terms data to PO Line entity (#1299)
* [MODLISTS-248] Add payment terms data to simple_purchase_order_line entity type * [MODLISTS-248] Add missing essential property for multi_year_payment and payment_terms_prepayment_term columns * [MODLISTS-248] Add translations * [MODLISTS-248] Update translations * [MODLISTS-248] Add expense class fields * [MODLISTS-248] Remove translations from en_US.json * [MODLISTS-248] Use user input as a source for fund_name and make value queryable false * [MODLISTS-248] Remove filterValueGetters and fix paymentTerm getter * [MODLISTS-248] Add filterValueGetter for fiscal year and fund distributions * [MODLISTS-248] Refactor fiscal year and fund distribution handling * [MODLISTS-248] Apply source for fiscal years columns to use dropdown * [MODLISTS-248] Remove unnecessary isIdColumn property * [MODLISTS-248] Add 'code' field to fiscal year distributions and reorder payment term fields * [MODLISTS-248] Update value and filter value getters for 'code' field * [MODLISTS-248] Remove join from getters inside `code` field * [MODLISTS-248] Fix is null or empty case for fund distribution in payment terms * [MODLISTS-248] Remove redundant source declaration
1 parent eef3258 commit 63ffaf3

2 files changed

Lines changed: 311 additions & 0 deletions

File tree

src/main/resources/entity-types/orders/simple_purchase_order_line.json5

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,294 @@
14611461
},
14621462
],
14631463
},
1464+
{
1465+
name: 'multi_year_payment',
1466+
sourceAlias: 'pol',
1467+
dataType: {
1468+
dataType: 'booleanType',
1469+
},
1470+
essential: true,
1471+
queryable: true,
1472+
visibleByDefault: false,
1473+
valueGetter: ":sourceAlias.jsonb->>'multiYearPayment'",
1474+
values: [
1475+
{
1476+
value: 'true',
1477+
label: 'True',
1478+
},
1479+
{
1480+
value: 'false',
1481+
label: 'False',
1482+
},
1483+
],
1484+
},
1485+
{
1486+
name: 'payment_terms_prepayment_term',
1487+
sourceAlias: 'pol',
1488+
dataType: {
1489+
dataType: 'integerType',
1490+
},
1491+
essential: true,
1492+
queryable: true,
1493+
visibleByDefault: false,
1494+
valueGetter: "(:sourceAlias.jsonb->'paymentTerms'->>'prepaymentTerm')::integer",
1495+
valueFunction: '(:value)::integer',
1496+
},
1497+
{
1498+
name: 'payment_terms_starting_fiscal_year_id',
1499+
sourceAlias: 'pol',
1500+
dataType: {
1501+
dataType: 'rangedUUIDType',
1502+
},
1503+
queryable: true,
1504+
visibleByDefault: false,
1505+
essential: true,
1506+
hidden: true,
1507+
valueGetter: ":sourceAlias.jsonb->'paymentTerms'->>'startingFiscalYearId'",
1508+
joinsTo: [
1509+
{
1510+
targetId: 'e61f988a-1d47-4b16-b8be-220a1c38ca8a', // simple_fiscal_year
1511+
targetField: 'id',
1512+
type: 'equality-cast-uuid',
1513+
direction: 'left',
1514+
},
1515+
],
1516+
},
1517+
{
1518+
name: 'payment_terms_starting_fiscal_year_name',
1519+
sourceAlias: 'pol',
1520+
dataType: {
1521+
dataType: 'stringType',
1522+
},
1523+
queryable: true,
1524+
visibleByDefault: false,
1525+
essential: true,
1526+
valueGetter: "( SELECT fy.jsonb->>'name' FROM ${tenant_id}_mod_fqm_manager.src_finance_fiscal_year fy WHERE fy.id = (:sourceAlias.jsonb->'paymentTerms'->>'startingFiscalYearId')::uuid)",
1527+
filterValueGetter: "( SELECT lower(fy.jsonb->>'name') FROM ${tenant_id}_mod_fqm_manager.src_finance_fiscal_year fy WHERE fy.id = (:sourceAlias.jsonb->'paymentTerms'->>'startingFiscalYearId')::uuid)",
1528+
valueFunction: 'lower(:value)',
1529+
idColumnName: 'payment_terms_starting_fiscal_year_id',
1530+
source: {
1531+
entityTypeId: 'e61f988a-1d47-4b16-b8be-220a1c38ca8a', // simple_fiscal_year
1532+
columnName: 'name',
1533+
},
1534+
},
1535+
{
1536+
name: 'payment_terms_fiscal_year_distributions',
1537+
sourceAlias: 'pol',
1538+
dataType: {
1539+
dataType: 'arrayType',
1540+
itemDataType: {
1541+
dataType: 'objectType',
1542+
properties: [
1543+
{
1544+
name: 'fiscal_year_id',
1545+
property: 'fiscalYearId',
1546+
dataType: {
1547+
dataType: 'rangedUUIDType',
1548+
},
1549+
queryable: true,
1550+
hidden: true,
1551+
valueGetter: "( SELECT array_agg(elems.value->>'fiscalYearId') FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS elems)",
1552+
filterValueGetter: "( SELECT array_agg(lower(elems.value->>'fiscalYearId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS elems)",
1553+
valueFunction: 'lower(:value)'
1554+
},
1555+
{
1556+
name: 'fiscal_year_name',
1557+
property: 'fiscal_year_name',
1558+
dataType: {
1559+
dataType: 'stringType',
1560+
},
1561+
queryable: true,
1562+
valueGetter: "( \
1563+
SELECT \
1564+
array_agg(fy.jsonb ->> 'name') \
1565+
FILTER (WHERE (fy.jsonb ->> 'name') IS NOT NULL) \
1566+
AS array_agg \
1567+
FROM \
1568+
jsonb_array_elements(:sourceAlias.jsonb -> 'paymentTerms' -> 'fiscalYearDistributions') fy_dist(value) \
1569+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fiscal_year AS fy \
1570+
ON (fy_dist.value ->> 'fiscalYearId')::uuid = fy.id \
1571+
)",
1572+
filterValueGetter: "( \
1573+
SELECT \
1574+
array_agg(lower(fy.jsonb ->> 'name')) \
1575+
FILTER (WHERE (fy.jsonb ->> 'name') IS NOT NULL) \
1576+
AS array_agg \
1577+
FROM \
1578+
jsonb_array_elements(:sourceAlias.jsonb -> 'paymentTerms' -> 'fiscalYearDistributions') fy_dist(value) \
1579+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fiscal_year AS fy \
1580+
ON (fy_dist.value ->> 'fiscalYearId')::uuid = fy.id \
1581+
)",
1582+
valueFunction: 'lower(:value)',
1583+
idColumnName: 'payment_terms_fiscal_year_distributions[*]->fiscal_year_id',
1584+
source: {
1585+
entityTypeId: 'e61f988a-1d47-4b16-b8be-220a1c38ca8a', // simple_fiscal_year
1586+
columnName: 'name',
1587+
},
1588+
},
1589+
{
1590+
name: 'code',
1591+
property: 'code',
1592+
dataType: {
1593+
dataType: 'stringType',
1594+
},
1595+
source: {
1596+
entityTypeId: '4c63c7f5-1a28-4394-b401-98c02c31492d',
1597+
columnName: 'code',
1598+
},
1599+
queryable: true,
1600+
valueGetter: "( SELECT array_agg(fund_dist.value->>'code') FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1601+
filterValueGetter: "( SELECT array_agg(lower(fund_dist.value->>'code')) FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1602+
valueFunction: 'lower(:value)',
1603+
},
1604+
{
1605+
name: 'fund_id',
1606+
property: 'fundId',
1607+
dataType: {
1608+
dataType: 'rangedUUIDType',
1609+
},
1610+
queryable: true,
1611+
hidden: true,
1612+
valueGetter: "( SELECT array_agg(fund_dist.value->>'fundId') FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1613+
filterValueGetter: "( SELECT array_agg(lower(fund_dist.value->>'fundId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1614+
valueFunction: 'lower(:value)',
1615+
},
1616+
{
1617+
name: 'fund_name',
1618+
property: 'fund_name',
1619+
dataType: {
1620+
dataType: 'stringType',
1621+
},
1622+
queryable: true,
1623+
valueGetter: "( \
1624+
SELECT \
1625+
array_agg(fund.jsonb ->> 'name') \
1626+
FROM \
1627+
jsonb_array_elements(:sourceAlias.jsonb -> 'paymentTerms' -> 'fiscalYearDistributions') fy_dist(value) \
1628+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value -> 'fundDistributions') fund_dist(value) ON true \
1629+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fund AS fund \
1630+
ON (fund_dist.value ->> 'fundId')::uuid = fund.id \
1631+
)",
1632+
filterValueGetter: "( \
1633+
SELECT \
1634+
array_agg(lower(fund.jsonb ->> 'name')) \
1635+
FROM \
1636+
jsonb_array_elements(:sourceAlias.jsonb -> 'paymentTerms' -> 'fiscalYearDistributions') fy_dist(value) \
1637+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value -> 'fundDistributions') fund_dist(value) ON true \
1638+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fund AS fund \
1639+
ON (fund_dist.value ->> 'fundId')::uuid = fund.id \
1640+
)",
1641+
valueFunction: 'lower(:value)',
1642+
},
1643+
{
1644+
name: 'expense_class_id',
1645+
property: 'expenseClassId',
1646+
dataType: {
1647+
dataType: 'rangedUUIDType',
1648+
},
1649+
queryable: true,
1650+
hidden: true,
1651+
valueGetter: "( SELECT array_agg(fund_dist.value->>'expenseClassId') \
1652+
FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist \
1653+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1654+
filterValueGetter: "( SELECT array_agg(lower(fund_dist.value->>'expenseClassId')) \
1655+
FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist \
1656+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1657+
valueFunction: 'lower(:value)',
1658+
},
1659+
{
1660+
name: 'expense_class_name',
1661+
property: 'expense_class_name',
1662+
dataType: {
1663+
dataType: 'stringType',
1664+
},
1665+
queryable: true,
1666+
valueGetter: "( \
1667+
SELECT \
1668+
array_agg(expense_class.jsonb->>'name') \
1669+
FROM \
1670+
jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist \
1671+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true \
1672+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_expense_class AS expense_class \
1673+
ON (fund_dist.value->>'expenseClassId')::uuid = expense_class.id \
1674+
)",
1675+
filterValueGetter: "( \
1676+
SELECT \
1677+
array_agg(lower(expense_class.jsonb->>'name')) \
1678+
FROM \
1679+
jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist \
1680+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true \
1681+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_expense_class AS expense_class \
1682+
ON (fund_dist.value->>'expenseClassId')::uuid = expense_class.id \
1683+
)",
1684+
valueFunction: 'lower(:value)',
1685+
},
1686+
{
1687+
name: 'distribution_type',
1688+
property: 'distributionType',
1689+
dataType: {
1690+
dataType: 'stringType',
1691+
},
1692+
queryable: true,
1693+
valueGetter: "( SELECT array_agg(fund_dist.value->>'distributionType') FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1694+
filterValueGetter: "( SELECT array_agg(lower(fund_dist.value->>'distributionType')) FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1695+
valueFunction: 'lower(:value)',
1696+
values: [
1697+
{
1698+
value: 'amount',
1699+
label: 'Amount',
1700+
},
1701+
{
1702+
value: 'percentage',
1703+
label: 'Percentage',
1704+
},
1705+
],
1706+
},
1707+
{
1708+
name: 'value',
1709+
property: 'value',
1710+
dataType: {
1711+
dataType: 'numberType',
1712+
},
1713+
queryable: false,
1714+
valueGetter: "( SELECT array_agg((fund_dist.value->>'value')::float) \
1715+
FROM jsonb_array_elements(:sourceAlias.jsonb->'paymentTerms'->'fiscalYearDistributions') AS fy_dist \
1716+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value->'fundDistributions') AS fund_dist ON true)",
1717+
valueFunction: '(:value)::float',
1718+
},
1719+
],
1720+
},
1721+
},
1722+
queryable: false,
1723+
visibleByDefault: false,
1724+
essential: true,
1725+
valueGetter: "( \
1726+
SELECT \
1727+
jsonb_agg( \
1728+
jsonb_build_object( \
1729+
'fiscalYearId', fy_dist.value ->> 'fiscalYearId', \
1730+
'fiscal_year_name', fy.jsonb ->> 'name', \
1731+
'fundId', fund_dist.value ->> 'fundId', \
1732+
'code', fund_dist.value ->> 'code', \
1733+
'fund_name', fund.jsonb ->> 'name', \
1734+
'value', (fund_dist.value ->> 'value')::float, \
1735+
'distributionType', fund_dist.value ->> 'distributionType', \
1736+
'expenseClassId', fund_dist.value ->> 'expenseClassId', \
1737+
'expense_class_name', expense_class.jsonb ->> 'name' \
1738+
) \
1739+
ORDER BY fy.jsonb ->> 'name', fund_dist.value ->> 'fundId', fund_dist.value ->> 'expenseClassId' \
1740+
) \
1741+
FROM \
1742+
jsonb_array_elements(:sourceAlias.jsonb -> 'paymentTerms' -> 'fiscalYearDistributions') fy_dist(value) \
1743+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fiscal_year AS fy \
1744+
ON (fy_dist.value ->> 'fiscalYearId')::uuid = fy.id \
1745+
LEFT JOIN LATERAL jsonb_array_elements(fy_dist.value -> 'fundDistributions') fund_dist(value) ON true \
1746+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_fund AS fund \
1747+
ON (fund_dist.value ->> 'fundId')::uuid = fund.id \
1748+
LEFT JOIN ${tenant_id}_mod_fqm_manager.src_finance_expense_class AS expense_class \
1749+
ON (fund_dist.value ->> 'expenseClassId')::uuid = expense_class.id \
1750+
)::text",
1751+
},
14641752
{
14651753
name: 'physical_create_inventory',
14661754
sourceAlias: 'pol',

translations/mod-fqm-manager/en.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,9 +1386,32 @@
13861386
"entityType.simple_purchase_order_line.locations.tenant_id._qualified": "Locations — Tenant ID",
13871387
"entityType.simple_purchase_order_line.locations.tenant_name": "Affiliation",
13881388
"entityType.simple_purchase_order_line.locations.tenant_name._qualified": "Locations — Affiliation",
1389+
"entityType.simple_purchase_order_line.multi_year_payment": "Multi-year prepayment",
13891390
"entityType.simple_purchase_order_line.order_format": "Order format",
13901391
"entityType.simple_purchase_order_line.package_po_line_id": "Package PO line UUID",
13911392
"entityType.simple_purchase_order_line.payment_status": "Payment status",
1393+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions": "Payment terms",
1394+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.distribution_type": "Distribution type",
1395+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.distribution_type._qualified": "Payment terms — Distribution type",
1396+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fiscal_year_id": "Fiscal year UUID",
1397+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fiscal_year_id._qualified": "Payment terms — Fiscal year UUID",
1398+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fiscal_year_name": "Fiscal year",
1399+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fiscal_year_name._qualified": "Payment terms — Fiscal year",
1400+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fund_id": "Fund UUID",
1401+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fund_id._qualified": "Payment terms — Fund UUID",
1402+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.code": "Code",
1403+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.code._qualified": "Payment terms — Code",
1404+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fund_name": "Fund",
1405+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.fund_name._qualified": "Payment terms — Fund",
1406+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.expense_class_id": "Expense class UUID",
1407+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.expense_class_id._qualified": "Payment terms — Expense class UUID",
1408+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.expense_class_name": "Expense class",
1409+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.expense_class_name._qualified": "Payment terms — Expense class",
1410+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.value": "Value",
1411+
"entityType.simple_purchase_order_line.payment_terms_fiscal_year_distributions.value._qualified": "Payment terms — Value",
1412+
"entityType.simple_purchase_order_line.payment_terms_prepayment_term": "Prepayment term",
1413+
"entityType.simple_purchase_order_line.payment_terms_starting_fiscal_year_id": "Starting fiscal year UUID",
1414+
"entityType.simple_purchase_order_line.payment_terms_starting_fiscal_year_name": "Starting fiscal year",
13921415
"entityType.simple_purchase_order_line.physical_create_inventory": "Physical create inventory",
13931416
"entityType.simple_purchase_order_line.physical_expected_receipt_date": "Physical expected receipt date",
13941417
"entityType.simple_purchase_order_line.physical_material_supplier": "Physical material supplier",

0 commit comments

Comments
 (0)