C_EntProjProfnlSrvcTimeRecg

DDL: C_ENTPROJPROFNLSRVCTIMERECG Type: view_entity CONSUMPTION Package: ODATA_PPM_PRO_CTRL_PROFNL_SRVC

Enterprise Project Time Recording

C_EntProjProfnlSrvcTimeRecg is a Consumption CDS View that provides data about "Enterprise Project Time Recording" in SAP S/4HANA. It reads from 3 data sources (I_BusinessPartner, R_EnterpriseProjectTimeSheet, R_WorkAssignmentKeyMap) and exposes 43 fields with key fields ProjectUUID, ReferencedObjectUUID, WBSElementInternalID, ActivityType, WorkAssignment. It has 3 associations to related views. It is exposed through 1 OData service (UI_ENTPROJCTRLPROFNLSRVC). Part of development package ODATA_PPM_PRO_CTRL_PROFNL_SRVC.

Data Sources (3)

SourceAliasJoin Type
I_BusinessPartner Person inner
R_EnterpriseProjectTimeSheet TimeSheet from
R_WorkAssignmentKeyMap Worker inner

Associations (3)

CardinalityTargetAliasCondition
[0..1] I_EntProjProfnlSrvcBillgElmnt _BillingElement _BillingElement.ProjectUUID = TimeSheet.ProjectUUID and _BillingElement.SalesOrder = TimeSheet.LeadingSalesOrder and _BillingElement.SalesOrderItem = TimeSheet.LeadingSalesOrderItem
[0..1] C_EntProjMemberContactCard _WorkerContactCard _WorkerContactCard.BusinessPartnerUUID = $projection.BusinessPartnerUUID
[1..1] C_EntProjPrftCtrCntctCard _ProfitCenterContactCard _ProfitCenterContactCard.ProfitCenter = $projection.WBSElementProfitCenter

Annotations (9)

NameValueLevelField
EndUserText.label Enterprise Project Time Recording view
AccessControl.authorizationCheck #MANDATORY view
AccessControl.personalData.blocking #REQUIRED view
Metadata.ignorePropagatedAnnotations true view
Metadata.allowExtensions true view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.sizeCategory #XL view
ObjectModel.usageType.dataClass #TRANSACTIONAL view
VDM.viewType #CONSUMPTION view

OData Services (1)

ServiceBindingVersionContractRelease
UI_ENTPROJCTRLPROFNLSRVC UI_ENTPROJCTRLPROFNLSRVC V4 C1 NOT_TO_BE_RELEASED_STABLE

Fields (43)

KeyFieldSource TableSource FieldDescription
KEY ProjectUUID R_EnterpriseProjectTimeSheet ProjectUUID
KEY ReferencedObjectUUID R_EnterpriseProjectTimeSheet ReferencedObjectUUID
KEY WBSElementInternalID R_EnterpriseProjectTimeSheet WBSElementInternalID
KEY ActivityType R_EnterpriseProjectTimeSheet ActivityType
KEY WorkAssignment R_EnterpriseProjectTimeSheet WorkAssignment
KEY WorkItem R_EnterpriseProjectTimeSheet WorkItem
KEY BillableControl R_EnterpriseProjectTimeSheet BillableControl
ProjectElement R_EnterpriseProjectTimeSheet ProjectElement
ProjectElementDescription R_EnterpriseProjectTimeSheet ProjectElementDescription
BusinessPartnerUUID I_BusinessPartner BusinessPartnerUUID
WorkforcePersonExternalID R_WorkAssignmentKeyMap WorkforcePersonExternalID
IsBlocked R_WorkAssignmentKeyMap IsBlocked
IsBusinessPurposeCompleted I_BusinessPartner IsBusinessPurposeCompleted
WBSElementExternalID _BillingElement WBSElementExternalID
WBSDescription _BillingElement WBSDescription
Product _BillingElement Product
BillingPlanUsageCategoryName _BillingElement BillingPlanUsageCategoryName
WBSElementProfitCenter _BillingElement ProfitCenter
ProfitCenterName
EntProjElmntWorkItemName
BillingControlCategoryText
CostCtrActivityTypeName
EngmtProjectServiceOrgName
ProjectDemandSupplyDeliveryOrg
PersonFullName
HoursUnitOfMeasure R_EnterpriseProjectTimeSheet HoursUnitOfMeasure
PreviousMonthRecordedHours
PreviousMonthStaffedEfforts
PreviousMonthMissingHours
CurrentMonthRecordedHours
CurrentMonthStaffedEfforts
CurrentMonthMissingHours
RecordedHoursTillCurrentMonth
StaffedEffortsTillCurrentMonth
MissingHoursTillCurrentMonth
TotalRecordedHours
TotalStaffedEfforts
TotalMissingHours
TotalApprovedHours
TotalUnapprovedHours
_EnterpriseProject R_EnterpriseProjectTimeSheet _EnterpriseProject
_ProfitCenterContactCard _ProfitCenterContactCard
_WorkerContactCard _WorkerContactCard
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: 'Enterprise Project Time Recording'
@AccessControl: {
  authorizationCheck: #MANDATORY,
  personalData.blocking: #REQUIRED
}
@Metadata.ignorePropagatedAnnotations: true
@Metadata.allowExtensions: true
@ObjectModel.usageType:{
  serviceQuality: #D, 
  sizeCategory: #XL,
  dataClass: #TRANSACTIONAL
}
@VDM.viewType: #CONSUMPTION

define view entity C_EntProjProfnlSrvcTimeRecg
  as select from R_EnterpriseProjectTimeSheet as TimeSheet

    inner join   R_WorkAssignmentKeyMap       as Worker on Worker.WorkforceAssignment = TimeSheet.WorkAssignment

    inner join   I_BusinessPartner            as Person on Person.BusinessPartner = Worker.BusinessPartner

  association [0..1] to I_EntProjProfnlSrvcBillgElmnt as _BillingElement          on  _BillingElement.ProjectUUID    = TimeSheet.ProjectUUID
                                                                                  and _BillingElement.SalesOrder     = TimeSheet.LeadingSalesOrder
                                                                                  and _BillingElement.SalesOrderItem = TimeSheet.LeadingSalesOrderItem

  association [0..1] to C_EntProjMemberContactCard    as _WorkerContactCard       on  _WorkerContactCard.BusinessPartnerUUID = $projection.BusinessPartnerUUID

  association [1..1] to C_EntProjPrftCtrCntctCard     as _ProfitCenterContactCard on  _ProfitCenterContactCard.ProfitCenter = $projection.WBSElementProfitCenter
  
{
  key TimeSheet.ProjectUUID,

  key TimeSheet.ReferencedObjectUUID,

  key TimeSheet.WBSElementInternalID,

      @ObjectModel.text.element: [ 'CostCtrActivityTypeName' ]
  key TimeSheet.ActivityType,

  key TimeSheet.WorkAssignment,

      @ObjectModel.text.element: [ 'EntProjElmntWorkItemName' ]
  key TimeSheet.WorkItem,

      @ObjectModel.text.element: [ 'BillingControlCategoryText' ]
  key TimeSheet.BillableControl,

      case TimeSheet.BillableControl
        when 'S1' then 'NON_BILL' else '' end    as ProjDmndBillingControlCategory,


      // Project element

      @ObjectModel.text.element: [ 'ProjectElementDescription' ]
      TimeSheet.ProjectElement,

      @Semantics.text: true
      TimeSheet.ProjectElementDescription,


      // Worker

      @ObjectModel.text.element: [ 'PersonFullName' ]
      @ObjectModel.foreignKey.association: '_WorkerContactCard'
      Person.BusinessPartnerUUID,

      Worker.WorkforcePersonExternalID,
      
      //For DCL

      Worker.IsBlocked,
      @Semantics.booleanIndicator: true
      Person.IsBusinessPurposeCompleted,

      // Billing

      _BillingElement.WBSElementExternalID,

      _BillingElement.WBSDescription,

      _BillingElement.Product,

      _BillingElement.BillingPlanUsageCategoryName,

      @ObjectModel :{
        foreignKey.association: '_ProfitCenterContactCard',
        text.element: [ 'ProfitCenterName' ]
      }
      _BillingElement.ProfitCenter               as WBSElementProfitCenter,

      _BillingElement._ProfitCenter[1: ValidityEndDate >= $session.system_date
                   and ValidityStartDate <= $session.system_date]._Text[1: Language = $session.system_language ].ProfitCenterName,



      // Text

      @Semantics.text: true
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as abap.char( 70 ))               as EntProjElmntWorkItemName,

      @Semantics.text: true
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as val_text )                     as BillingControlCategoryText,

      @Semantics.text: true
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as fis_costctractivitytypename )  as CostCtrActivityTypeName,

      @Semantics.text: true
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as /cpd/pws_ws_org_unit_id_desc ) as EngmtProjectServiceOrgName,


      // Supplied resource

      @ObjectModel.text.element: [ 'EngmtProjectServiceOrgName' ]
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as tv_proj_dmnd_supply_dlvry_id ) as ProjectDemandSupplyDeliveryOrg,

      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '' as bu_name1tx )                   as PersonFullName,


      // KPI


      TimeSheet.HoursUnitOfMeasure,


      // Previous month

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as PreviousMonthRecordedHours,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as PreviousMonthStaffedEfforts,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as PreviousMonthMissingHours,



      // Current month

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as CurrentMonthRecordedHours,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as CurrentMonthStaffedEfforts,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as CurrentMonthMissingHours,



      // Till current month

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as RecordedHoursTillCurrentMonth,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as StaffedEffortsTillCurrentMonth,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as MissingHoursTillCurrentMonth,



      // Total

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as TotalRecordedHours,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as TotalStaffedEfforts,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as TotalMissingHours,



      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as TotalApprovedHours,

      @Semantics.quantity.unitOfMeasure: 'HoursUnitOfMeasure'
      @ObjectModel.virtualElement: true
      @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_EPPM_PROJ_CTRL_PROFNL_SRVC'
      cast( '00.00' as abap.quan( 21, 3 ))       as TotalUnapprovedHours,



      // Association

      TimeSheet._EnterpriseProject,
      _ProfitCenterContactCard,
      _WorkerContactCard

}