diff --git a/modules/purchase_trade/ctrm_reporting.py b/modules/purchase_trade/ctrm_reporting.py index 5e856a9..83a868a 100644 --- a/modules/purchase_trade/ctrm_reporting.py +++ b/modules/purchase_trade/ctrm_reporting.py @@ -1,7 +1,7 @@ -from sql import Literal, Null +from sql import Literal, Null, Window from sql.aggregate import Max, Min, Sum from sql.conditionals import Case, Coalesce -from sql.functions import CurrentTimestamp +from sql.functions import CurrentTimestamp, RowNumber from trytond.model import ModelSQL, ModelView, fields from trytond.pool import Pool @@ -721,22 +721,13 @@ class CTRMPnlDimension(ModelSQL, ModelView): val.state, val.strategy, ] - row_id = ( - Coalesce(Max(dimension_expr), 0) * 1000000 - + Coalesce(Max(value_expr), 0)) - - return ( + grouped = ( val .join(purchase_assignment, 'LEFT', condition=purchase_assignment.purchase == val.purchase) .join(sale_assignment, 'LEFT', condition=sale_assignment.sale == val.sale) .select( - Literal(0).as_('create_uid'), - CurrentTimestamp().as_('create_date'), - Literal(None).as_('write_uid'), - Literal(None).as_('write_date'), - row_id.as_('id'), val.date.as_('valuation_date'), dimension_expr.as_('dimension'), value_expr.as_('value'), @@ -753,3 +744,36 @@ class CTRMPnlDimension(ModelSQL, ModelView): 'mtm_delta'), where=where, group_by=group_by)) + + row_number = RowNumber(window=Window([], + order_by=[ + grouped.valuation_date.asc, + grouped.dimension.asc, + grouped.value.asc, + grouped.product.asc, + grouped.counterparty.asc, + grouped.currency.asc, + grouped.unit.asc, + grouped.state.asc, + grouped.strategy.asc, + ])) + + return grouped.select( + Literal(0).as_('create_uid'), + CurrentTimestamp().as_('create_date'), + Literal(None).as_('write_uid'), + Literal(None).as_('write_date'), + row_number.as_('id'), + grouped.valuation_date.as_('valuation_date'), + grouped.dimension.as_('dimension'), + grouped.value.as_('value'), + grouped.product.as_('product'), + grouped.counterparty.as_('counterparty'), + grouped.currency.as_('currency'), + grouped.unit.as_('unit'), + grouped.state.as_('state'), + grouped.strategy.as_('strategy'), + grouped.quantity.as_('quantity'), + grouped.amount.as_('amount'), + grouped.mtm.as_('mtm'), + grouped.mtm_delta.as_('mtm_delta'))