@AbapCatalog.sqlViewName: 'IRAPERFOBLGNRVXP'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #('TRANSACTIONAL_DATA')
@ClientHandling.algorithm: #SESSION_VARIABLE
@EndUserText.label: 'RA Perf Oblgn To Revenue Expl Item'
@ObjectModel.usageType: {sizeCategory: #XXL, serviceQuality: #C, dataClass: #MIXED}
@VDM.viewType: #COMPOSITE
define view I_RAPerfOblgnToRevnExplItem as select from I_RAPerformanceObligation as PerfOblgn
left outer to one join P_RAHighLvlPerfOblgnRevnAmt as _RevnAmt
on PerfOblgn.PerformanceObligation = _RevnAmt.RAHigherLevelPerfOblgn
and PerfOblgn.RevenueAccountingContract = _RevnAmt.RevenueAccountingContract
left outer join I_RevenueAccountingMapping as _Mapping on PerfOblgn.PerformanceObligation = _Mapping.PerformanceObligation
association [0..1] to P_RAPerfOblgnIsFrozen as _IsFrozen
on $projection.PerformanceObligation = _IsFrozen.PerformanceObligation
{
key PerfOblgn.PerformanceObligation,
key coalesce(_Mapping.RASndgCompDocumentItem, '') as RASndgCompDocumentItem,
key PerfOblgn.RevenueAccountingContract,
_Mapping.RevnAcctgSenderComponent,
PerformanceObligationClass,
RAPerfOblgnCategory,
PerfOblgn.CompanyCode,
PerfOblgn.AccountingPrinciple,
RAPerfOblgnDistinctType,
RAPerformanceObligationType,
PerfOblgnCreatedByUser,
PerfOblgnCreationDate,
PerfOblgnLastChangedByUsr,
PerfOblgnLastChangeDate,
BusinessPartner,
Customer,
RevnAcctgSalesOrganization,
RevnAcctgPerfOblgnStatus,
case
when RevnAcctgPerfOblgnStatus = 'C' then 3 -- 'Completed' | 3: green colour
when RevnAcctgPerfOblgnStatus = 'D' then 3 -- 'Manually Completed' | 3: green colour
when RevnAcctgPerfOblgnStatus = 'I' then 0 -- 'In Process' | 0: neutral colour
else 2 -- 'Pending' | 2: yellow colour
-- Not used here | 0: unknown
end as RAPerfOblgnStatusCriticality,
PerfOblgnFulfillmentType,
PerfOblgnEventType,
PerfOblgnIsFinallyInvoiced,
RAFulfillmentIsValueBased,
case RAFulfillmentIsValueBased
when '' then 'X'
else ''
end as RAFulfilledAmountIsHidden,
PerfOblgn.PerfOblgnHasManualSpreading,
OrderID,
Segment,
ProfitCenter,
PerformanceObligationStartDate,
PerformanceObligationEndDate,
RAPerfOblgnFinalizationDate,
_Mapping.RevnAcctgOperationalDocument,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
SSPriceInSalesDocCrcy,
@Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
PerfOblgnEffectiveQuantity,
PerfOblgnEffectiveQuantityUnit,
RAUnivRevnRecgnIntegType,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast(_RevnAmt.ContractualPrcInSlsDocCrcy as farr_cds_contractual_price preserving type) as ContractualPrcInSlsDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast(_RevnAmt.AllocatedPriceInSalesDocCrcy as farr_allocated_amt preserving type ) as AllocatedPriceInSalesDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast(_RevnAmt.AllocatedPriceInSalesDocCrcy as farr_cds_pob_total_revn ) as RAPerfOblgnTotRevnInSlsDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast(_RevnAmt.AllocatedPriceInSalesDocCrcy - _RevnAmt.ContractualPrcInSlsDocCrcy as farr_corr_amt) as AllocEffctAmountInSalesDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast( coalesce(RARecognizedRevnInSlsDocCrcy, 0) + coalesce(RecgdCatchUpAmtInSlsDocCrcy, 0 ) as farr_recog_amt) as UpToCurPeriodRecognizedRevenue,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast( _RevnAmt.AllocatedPriceInSalesDocCrcy - coalesce( RARecognizedRevnInSlsDocCrcy, 0 ) - coalesce( RecgdCatchUpAmtInSlsDocCrcy , 0 ) as farr_open_revenue) as RATotalOpenRevnInSlsDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast( RARecognizedRevnInSlsDocCrcy as farr_cds_fulfillmt_revn ) as RAFlfmtRecgdRevnInSlsDocCrcy,
@Semantics.amount.currencyCode: 'SalesDocumentCurrency'
cast( RecgdCatchUpAmtInSlsDocCrcy as farr_cds_rev_catchup_amt ) as RecgdCatchUpAmtInSlsDocCrcy,
@Semantics.currencyCode: true
_RevnAmt.SalesDocumentCurrency,
@Semantics.quantity.unitOfMeasure: 'RatioUnit'
cast( case _RevnAmt.AllocatedPriceInSalesDocCrcy
when 0 then 100
else 100*round(division(RARecognizedRevnInSlsDocCrcy + RecgdCatchUpAmtInSlsDocCrcy, _RevnAmt.AllocatedPriceInSalesDocCrcy, 6), 4)
end as farr_fulfilled_rev_progress )as RecognizedRevnUpToCurPerdPct,
case
when _IsFrozen.RAPerfOblgnIsFrozen is null then cast(' ' as boole_d)
else cast('X' as boole_d) end as RAPerfOblgnIsFrozen,
@Semantics.unitOfMeasure: true
cast( '%' as farr_quantity_unit ) as RatioUnit,
_CreatedByUser.UserDescription as CreatedByUserDescription,
_ChangedByUser.UserDescription as LastChangedByUserDescription,
FunctionalArea,
BusinessArea,
CostCenter,
WBSElementExternalID,
//use case to avoid the empty profitability segment to be displayed as '0' insteand of blank
case PerfOblgn.ProfitabilitySegment_2
when '0000000000' then ''
else PerfOblgn.ProfitabilitySegment_2
end as ProfitabilitySegment,
ControllingArea,
PerfOblgn._RevenueAccountingContract.IsBusinessPurposeCompleted,
/* association */
_RevenueAccountingContract,
_BusinessPartner,
_Customer,
_AccountingPrinciple,
_CompanyCode,
_FunctionalArea,
_BusinessArea,
_Order,
_SalesOrganization,
_Segment,
_WBSElement,
_CurrentCostCenter,
_CurrentProfitCenter
}
where PerfOblgn.PerfOblgnIsSoftDeleted = ''
and PerfOblgn._RevenueAccountingContract.RAContractIsCreatedByContrMgr = 'X'
and RAPerfOblgnDistinctType <> 'N'
and PerfOblgn.RAPerfOblgnCategory <> 'B' //billing element
and PerfOblgn.RAPerfOblgnCategory <> 'C' //acquisition cost
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_RAPERFORMANCEOBLIGATION",
"I_REVENUEACCOUNTINGCONTRACT",
"I_REVENUEACCOUNTINGMAPPING",
"I_USER",
"P_RAHIGHLVLPERFOBLGNREVNAMT",
"P_RAPERFOBLGNISFROZEN"
],
"ASSOCIATED":
[
"I_ACCOUNTINGPRINCIPLE",
"I_BUSINESSAREA",
"I_BUSINESSPARTNER",
"I_COMPANYCODE",
"I_COSTCENTER",
"I_CUSTOMER",
"I_FUNCTIONALAREA",
"I_ORDER",
"I_PROFITCENTER",
"I_REVENUEACCOUNTINGCONTRACT",
"I_SALESORGANIZATION",
"I_SEGMENT",
"I_WBSELEMENTBYEXTERNALID",
"P_RAPERFOBLGNISFROZEN"
],
"BASE":
[
"I_RAPERFORMANCEOBLIGATION"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/