P_PurchaseOrderItemMonitor

DDL: P_PURCHASEORDERITEMMONITOR Type: view_entity COMPOSITE Package: ODATA_MM_PUR_POITEMS_MONI

Purchase Order Item Monitor

P_PurchaseOrderItemMonitor is a Composite CDS View that provides data about "Purchase Order Item Monitor" in SAP S/4HANA. It reads from 1 data source (I_PurchaseOrderItem) and exposes 12 fields with key fields PurchaseOrder, PurchaseOrderItem. It has 2 associations to related views. Part of development package ODATA_MM_PUR_POITEMS_MONI.

Data Sources (1)

SourceAliasJoin Type
I_PurchaseOrderItem _PurchaseOrderItem from

Associations (2)

CardinalityTargetAliasCondition
[0..1] P_POItemNextOpenSchedLineQuan _NextOpenScheduleLine $projection.PurchaseOrder = _NextOpenScheduleLine.PurchaseOrder and $projection.PurchaseOrderItem = _NextOpenScheduleLine.PurchaseOrderItem
[0..1] P_PurOrdItemAggrCast _PurchaseOrderItemHistory $projection.PurchaseOrder = _PurchaseOrderItemHistory.PurchaseOrder and $projection.PurchaseOrderItem = _PurchaseOrderItemHistory.PurchaseOrderItem

Annotations (6)

NameValueLevelField
AccessControl.authorizationCheck #PRIVILEGED_ONLY view
VDM.private true view
VDM.viewType #COMPOSITE view
ObjectModel.usageType.serviceQuality #A view
ObjectModel.usageType.sizeCategory #L view
ObjectModel.usageType.dataClass #TRANSACTIONAL view

Fields (12)

KeyFieldSource TableSource FieldDescription
KEY PurchaseOrder PurchaseOrder
KEY PurchaseOrderItem PurchaseOrderItem
PurchaseOrderQuantityUnit I_PurchaseOrderItem PurchaseOrderQuantityUnit
DocumentCurrency I_PurchaseOrderItem DocumentCurrency
Material I_PurchaseOrderItem Material
CompanyCode I_PurchaseOrderItem CompanyCode
Plant I_PurchaseOrderItem Plant
quan133endasScheduleLineOpenQty
GoodsReceiptQuantityendasGoodsReceiptQty
curr152endendasStillToBeDeliveredValue
InvoiceReceiptQtyendasInvoiceReceiptQty
_PurchaseOrderItemHistory _PurchaseOrderItemHistory
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY
@VDM.private: true
@VDM.viewType: #COMPOSITE
@ObjectModel.usageType.serviceQuality: #A
@ObjectModel.usageType.sizeCategory: #L
@ObjectModel.usageType.dataClass: #TRANSACTIONAL


define view entity P_PurchaseOrderItemMonitor
  as select from I_PurchaseOrderItem as _PurchaseOrderItem
  //  //used to fetch the Earliest Schedule Line Delivery Date and Open Quantity

  association [0..1] to P_POItemNextOpenSchedLineQuan as _NextOpenScheduleLine     on  $projection.PurchaseOrder     = _NextOpenScheduleLine.PurchaseOrder
                                                                                   and $projection.PurchaseOrderItem = _NextOpenScheduleLine.PurchaseOrderItem


  // used to fetch aggregated invoice qty , value and GR value from history table

  association [0..1] to P_PurOrdItemAggrCast          as _PurchaseOrderItemHistory on  $projection.PurchaseOrder     = _PurchaseOrderItemHistory.PurchaseOrder
                                                                                   and $projection.PurchaseOrderItem = _PurchaseOrderItemHistory.PurchaseOrderItem


{
  key  PurchaseOrder,
  key  PurchaseOrderItem,
       _PurchaseOrderItem.PurchaseOrderQuantityUnit,
       _PurchaseOrderItem.DocumentCurrency,

       //Fields to apply filters

       _PurchaseOrderItem.Material,
       _PurchaseOrderItem.CompanyCode,
       _PurchaseOrderItem.Plant,

       case when (_PurchaseOrderItem.GoodsReceiptIsExpected <> 'X' or _PurchaseOrderItem.IsCompletelyDelivered = 'X' or _PurchaseOrderItem.PurchaseOrderItemCategory = 'A' or _NextOpenScheduleLine.ScheduleLineDeliveryDate is null) then cast('00000000' as abap.dats)
       else _NextOpenScheduleLine.ScheduleLineDeliveryDate
       end                      as ScheduleLineDeliveryDate,

       @Semantics.quantity.unitOfMeasure: 'PurchaseOrderQuantityUnit'
       case when (_PurchaseOrderItem.GoodsReceiptIsExpected <> 'X' or _PurchaseOrderItem.IsCompletelyDelivered = 'X' or _PurchaseOrderItem.PurchaseOrderItemCategory = 'A' or _NextOpenScheduleLine.ScheduleLineDeliveryDate is null) then cast( 0 as abap.quan(13,3))
       when _PurchaseOrderItem.IsReturnsItem = 'X' then -abs(cast( _NextOpenScheduleLine.OpenPurchaseOrderQuantity as abap.quan(13,3)))
       else cast( _NextOpenScheduleLine.OpenPurchaseOrderQuantity as abap.quan(13,3))
       end                      as ScheduleLineOpenQty,

       @Semantics.quantity.unitOfMeasure: 'PurchaseOrderQuantityUnit'
       case when (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' or _PurchaseOrderItemHistory.GoodsReceiptQuantity is null) then cast (0 as abap.quan(13, 3))
       when _PurchaseOrderItem.IsReturnsItem = 'X' then -abs(_PurchaseOrderItemHistory.GoodsReceiptQuantity)
       else _PurchaseOrderItemHistory.GoodsReceiptQuantity
       end                      as GoodsReceiptQty,

       cast(case when _PurchaseOrderItem.IsCompletelyDelivered = 'X' and _PurchaseOrderItem.IsFinallyInvoiced = 'X'
                 then 'X'
                 else ''
                 end as xfeld ) as IsCompleted,

       @Semantics.amount.currencyCode: 'DocumentCurrency'
       case when (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' and _PurchaseOrderItem.ProductType = '1') then cast (0 as abap.curr(15, 2))
       when (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' and _PurchaseOrderItem.ProductType = '2') then  _PurchaseOrderItemHistory.GoodsReceiptAmount
       when (_PurchaseOrderItemHistory.GoodsReceiptQuantity is null or _PurchaseOrderItem.OrderQuantity is null or _PurchaseOrderItem.OrderQuantity = 0) then cast (0 as abap.curr(15, 2))
       when _PurchaseOrderItem.IsReturnsItem = 'X' then -abs( _PurchaseOrderItemHistory.GoodsReceiptAmount )
       else  _PurchaseOrderItemHistory.GoodsReceiptAmount
       end                      as GoodsReceiptAmountInCoCodeCrcy,

       @Semantics.quantity.unitOfMeasure: 'PurchaseOrderQuantityUnit'
       case when (_PurchaseOrderItem.GoodsReceiptIsExpected <> 'X' or _PurchaseOrderItem.IsCompletelyDelivered = 'X' or _PurchaseOrderItem.PurchaseOrderItemCategory = 'A') then cast(0 as abap.quan(13, 3))
       when _PurchaseOrderItem.IsReturnsItem = 'X'
       then
        case when _PurchaseOrderItemHistory.GoodsReceiptQuantity is null then -abs(_PurchaseOrderItem.OrderQuantity)
        else -abs(_PurchaseOrderItem.OrderQuantity - abs(_PurchaseOrderItemHistory.GoodsReceiptQuantity))
        end
       else
        case when _PurchaseOrderItemHistory.GoodsReceiptQuantity is null  then _PurchaseOrderItem.OrderQuantity
        else _PurchaseOrderItem.OrderQuantity - _PurchaseOrderItemHistory.GoodsReceiptQuantity
        end
       end                      as StillToBeDeliveredQuantity,


       @Semantics.amount.currencyCode: 'DocumentCurrency'
       case when (_PurchaseOrderItem.GoodsReceiptIsExpected <> 'X' or _PurchaseOrderItem.IsCompletelyDelivered = 'X' or _PurchaseOrderItem.GoodsReceiptIsNonValuated  = 'X' or
                 (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' and _PurchaseOrderItem.ProductType = '1'))
            then cast(0 as abap.curr(15, 2))
       when (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' and _PurchaseOrderItem.ProductType = '2')
       then
         case when _PurchaseOrderItemHistory.GoodsReceiptAmount is null then _PurchaseOrderItem.NetAmount
         else _PurchaseOrderItem.NetAmount -  _PurchaseOrderItemHistory.GoodsReceiptAmount
         end
       when _PurchaseOrderItem.OrderQuantity is null or _PurchaseOrderItem.OrderQuantity = 0 or _PurchaseOrderItem.NetPriceQuantity = 0 then cast (0 as abap.curr(15, 2))
       when _PurchaseOrderItem.IsReturnsItem = 'X'
       then
       case when _PurchaseOrderItemHistory.GoodsReceiptQuantity is null or  _PurchaseOrderItemHistory.GoodsReceiptQuantity = 0 then -abs(_PurchaseOrderItem.NetAmount)
       else -abs(_PurchaseOrderItem.NetAmount - abs(- _PurchaseOrderItemHistory.GoodsReceiptAmount) )
       end
       else
       case
         when _PurchaseOrderItemHistory.GoodsReceiptQuantity is null or  _PurchaseOrderItemHistory.GoodsReceiptQuantity = 0
         then _PurchaseOrderItem.NetAmount
         else
         cast(  (
         cast( _PurchaseOrderItem.NetPriceAmount as abap.dec(15,2) ) / cast( _PurchaseOrderItem.NetPriceQuantity as abap.dec(13,3)) )
         * ( _PurchaseOrderItem.OrderQuantity - abs(_PurchaseOrderItemHistory.GoodsReceiptQuantity) ) as abap.curr( 15, 2 ) )

       end
       end                      as StillToBeDeliveredValue,

       @Semantics.quantity.unitOfMeasure: 'PurchaseOrderQuantityUnit'
       case when (_PurchaseOrderItem.PurchaseOrderItemCategory = 'A' or _PurchaseOrderItemHistory.InvoiceReceiptQty is null) then cast (0 as abap.quan(13, 3))
       else _PurchaseOrderItemHistory.InvoiceReceiptQty
       end                      as InvoiceReceiptQty,


       @Semantics.amount.currencyCode: 'DocumentCurrency'
       case when _PurchaseOrderItemHistory.InvoiceReceiptAmount is null then cast(0 as abap.curr(15,2))
       else  _PurchaseOrderItemHistory.InvoiceReceiptAmount
       end                      as InvoiceReceiptAmount,


       @Semantics.quantity.unitOfMeasure: 'PurchaseOrderQuantityUnit'
       case when (_PurchaseOrderItem.InvoiceIsExpected <> 'X' or _PurchaseOrderItem.IsFinallyInvoiced = 'X' or _PurchaseOrderItem.PurchaseOrderItemCategory = 'A') then cast(0 as abap.quan(13, 3))
       when (_PurchaseOrderItemHistory.InvoiceReceiptQty is null and _PurchaseOrderItem.IsReturnsItem = 'X') then -abs(_PurchaseOrderItem.OrderQuantity)
       when _PurchaseOrderItemHistory.InvoiceReceiptQty is null then _PurchaseOrderItem.OrderQuantity
       when _PurchaseOrderItemHistory.InvoiceReceiptQty >= _PurchaseOrderItem.OrderQuantity then cast(0 as abap.quan(13, 3))
       when _PurchaseOrderItem.IsReturnsItem = 'X' then -abs(_PurchaseOrderItem.OrderQuantity - abs(_PurchaseOrderItemHistory.InvoiceReceiptQty))
       else _PurchaseOrderItem.OrderQuantity - _PurchaseOrderItemHistory.InvoiceReceiptQty
       end                      as StillToInvoiceQuantity,

       @Semantics.amount.currencyCode: 'DocumentCurrency'
       case when (InvoiceIsExpected <> 'X' or IsFinallyInvoiced = 'X') then  cast(0 as abap.curr(15, 2))
       when (_PurchaseOrderItemHistory.InvoiceReceiptAmount is null and IsReturnsItem = 'X') then -abs(NetAmount)
       when _PurchaseOrderItemHistory.InvoiceReceiptAmount is null then NetAmount
       when ( NetAmount <= abs(_PurchaseOrderItemHistory.InvcRcptAmtWthoutNonDcblTaxAmt) ) and IsReturnsItem = 'X' then  cast(0 as abap.curr(15, 2))
       when _PurchaseOrderItemHistory.InvcRcptAmtWthoutNonDcblTaxAmt >= NetAmount then  cast(0 as abap.curr(15, 2))

       when PurchaseOrderItemCategory = 'A' then NetAmount - _PurchaseOrderItemHistory.InvcRcptAmtWthoutNonDcblTaxAmt
       when OrderQuantity is null or OrderQuantity = 0 then  cast(0 as abap.curr(15, 2))
       when IsReturnsItem = 'X' then -abs(NetAmount - abs(_PurchaseOrderItemHistory.InvcRcptAmtWthoutNonDcblTaxAmt))
       when   _PurchaseOrderItemHistory.InvoiceReceiptQty  >= OrderQuantity then  cast(0 as abap.curr(15, 2))
       else NetAmount - _PurchaseOrderItemHistory.InvcRcptAmtWthoutNonDcblTaxAmt
       end                      as StillToInvoiceValue,

       _PurchaseOrderItemHistory

}
where
      _PurchaseOrderItem.PurchasingDocumentDeletionCode =  ''
  and _PurchaseOrder.PurchasingDocumentDeletionCode     =  ''
  and _PurchaseOrder.PurchasingCompletenessStatus       <> 'X'
  //  and POSchedLineReqFileds2.POItem.PurchaseOrderItemCategory                     <> '9'  "Not appicable for Public Cloud

  and _PurchaseOrderItem.PurchaseOrderItemCategory      <> '1'
  and not(
    _PurchaseOrderItem.IsStatisticalItem                =  'X'
  )