@AccessControl.authorizationCheck: #CHECK
@VDM.viewType: #CONSUMPTION
@VDM.usage.type: [ #TRANSACTIONAL_PROCESSING_SERVICE ]
@Search.searchable: true
@ObjectModel: {
semanticKey: [ 'ProjectBillingRequestUUID' ],
representativeKey: 'ProjectBillingRequestUUID'
}
@ObjectModel.usageType: {
sizeCategory: #L,
dataClass: #TRANSACTIONAL,
serviceQuality: #C
}
@UI.headerInfo: {
typeName: 'Project Billing Request',
typeNamePlural: 'Project Billing Requests',
title: { label: 'Manage Project Billing Requests' }
}
@EndUserText.label: 'Details of Project Billing Request'
@UI.presentationVariant: [{ requestAtLeast: ['ProjBillingDocRequestListText'] }]
@Consumption.dbHints: ['NO_SUBPLAN_SHARING'] -- Performance testing
define root view entity C_ProjectBillingRequestTP
provider contract transactional_query
as projection on R_ProjectBillingRequestTP as _ProjectBillingRequestTP
association [1..1] to C_ProjectBillingCustomerCard as _CustomerContactCard on $projection.Customer = _CustomerContactCard.Customer
{
@UI.hidden: true
@EndUserText.label: 'Item ID'
@EndUserText.quickInfo: 'Item ID'
key ProjectBillingRequestUUID,
@UI.hidden: true
@EndUserText.label: 'Project ID'
@EndUserText.quickInfo: 'Project ID'
ProjectInternalID,
@UI.hidden: true
ProjectBillingRequestStatus,
@UI.hidden: true
ProjBillgReqApprovalStatus,
@UI.hidden: true
ProjectBillingRequestType,
@UI.hidden: true
@EndUserText.label: 'Sales Document'
@EndUserText.quickInfo: 'Sales Document'
SalesDocument,
@UI.hidden: true
ProjectBillingCategory,
@UI.hidden: true
ProjBillgReqLastChgdBy,
@UI.hidden: true
ProjBillgReqLastChgdAtDteTme,
@UI.hidden: true
ProjBillgReqCreatedBy,
@UI.hidden: true
ProjBillgReqCreatedAtDteTme,
@UI.hidden: true
_ProjectBillingRequestItem,
@EndUserText.label: 'Document Currency'
@EndUserText.quickInfo: 'Document Currency'
//_EnterpriseProject.Currency as DocumentCurrency, -- For Performance ATC
DocumentCurrency,
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.85 }
@EndUserText.label: 'Project Billing Request'
@EndUserText.quickInfo: 'Project Billing Request'
ProjectBillingRequest, //Draft ID
@EndUserText.label: 'Billing Element'
@EndUserText.quickInfo: 'Billing Element'
@UI: { lineItem: [ { position: 40, importance: #HIGH } ] }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual WBSElementExternalID : abap.char( 30 ),
@EndUserText.label: 'Billing Method'
@EndUserText.quickInfo: 'Billing Method'
@UI: { lineItem: [ { position: 50, importance: #HIGH } ] }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual BillingPlanUsageCategoryName : abap.char( 60 ),
@EndUserText.label: 'Project'
@EndUserText.quickInfo: 'Project'
@UI: { lineItem: [ { position: 10, importance: #HIGH } ] }
//_EnterpriseProject.Project as CustomerProject, -- For Performance ATC
Project as CustomerProject,
@EndUserText.label: 'Profit Center'
@EndUserText.quickInfo: 'Profit Center'
@UI: { lineItem: [ { position: 30, importance: #HIGH } ] }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProfitCenterName : abap.char( 30 ),
@UI: { lineItem: [{ position: 60, importance: #HIGH }] }
@UI.hidden: true
@Consumption.filter.hidden: true
@EndUserText.label: 'Billing Due Date'
@EndUserText.quickInfo: 'Billing Due Date'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual BillingPlanBillingDate : abap.dats( 8 ),
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual UtilitiesBillingReason : abap.char( 1 ),
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjectBillgRequestMessageText : abap.string,
@UI: { lineItem: [{ position: 90, importance: #HIGH }] }
@EndUserText.label: 'Billed'
@EndUserText.quickInfo: 'Billed' //Net Billed
@Semantics.amount.currencyCode: 'DocumentCurrency'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual BilledRevenueAmtInDocCrcy : abap.curr( 23 , 2 ),
@EndUserText.label: 'Estimated Actuals'
@EndUserText.quickInfo: 'Estimated Actuals'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@Consumption.filter.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual NetValueAmountInDocCurrency : abap.curr( 23 , 2 ),
@EndUserText.label: 'To Bill'
@EndUserText.quickInfo: 'To Bill'
@UI: { lineItem: [{ position: 110, importance: #HIGH }] }
@Semantics.amount.currencyCode: 'DocumentCurrency'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual BillableRevenueAmtInDocCrcy : abap.curr( 23 , 2 ),
@EndUserText.label: 'To Write Off'
@EndUserText.quickInfo: 'To Write Off'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual WrittenOffRevenueAmtInDocCrcy : abap.curr( 23 , 2 ),
@EndUserText.label: 'To Postpone'
@EndUserText.quickInfo: 'To Postpone'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual PostponedRevenueAmtInDocCrcy : abap.curr( 23 , 2 ),
@UI: { lineItem: [{ position: 80, importance: #HIGH }] }
@EndUserText.label: 'Cap'
@EndUserText.quickInfo: 'Cap'
@Semantics.amount.currencyCode: 'DocumentCurrency'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual CappedNetAmount : abap.curr( 23 , 2 ),
@EndUserText.label: 'Customer'
@EndUserText.quickInfo: 'Customer'
@UI: { lineItem: [ { position: 20, importance: #HIGH } ] }
//@ObjectModel.text.element: ['CustomerName']
@ObjectModel: { foreignKey.association: '_CustomerContactCard' }
@UI.textArrangement: #TEXT_ONLY
_CustomerToBusinessPartner.Customer as Customer,
@UI.hidden: true
@Consumption.filter.hidden: true
@EndUserText.label: 'Customer'
@EndUserText.quickInfo: 'Customer'
_CustomerToBusinessPartner._Customer.CustomerName as CustomerName,
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@UI.hidden: true
virtual BillingPlanUsageCategory : abap.char( 2 ),
// Project Popover on ObjectPage
@UI.hidden: true
// _EnterpriseProject.ProjectStartDate as ProjectStartDate, -- For Performance ATC
ProjectStartDate,
@UI.hidden: true
// _EnterpriseProject.ProjectEndDate as ProjectEndDate, -- For Performance ATC
ProjectEndDate,
@UI.hidden: true
// _EnterpriseProject.ProfitCenter, -- For Performance ATC
ProfitCenter,
@UI.hidden: true
// _EnterpriseProject.ControllingArea, -- For Performance ATC
ControllingArea,
@EndUserText.label: 'Amount/Cost to Postpone'
@EndUserText.quickInfo: 'Amount/Cost to Postpone'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ToBePostponedAmtInProjectCrcy : abap.curr( 23 , 2 ),
@EndUserText.label: 'Amount/Cost to Write Off'
@EndUserText.quickInfo: 'Amount/Cost to Write Off'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ToBeWrittenOffAmtInProjectCrcy : abap.curr( 23 , 2 ),
@EndUserText.label: 'Amount/Cost to Bill'
@EndUserText.quickInfo: 'Amount/Cost to Bill'
@Semantics: { amount : {currencyCode: 'DocumentCurrency'} }
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ToBeBilledAmtInProjCurrency : abap.curr( 23 , 2 ),
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillingDocRequestListText : abap.char( 300 ),
@Consumption.filter.hidden: true
@UI.hidden: true
_ProjectBillingRequestStatus,
_CustomerContactCard,
_EnterpriseProject,
_ProjectBillingReqItemTP : redirected to composition child C_ProjectBillingRequestItemTP
}
where
ProjectBillingCategory <> 'ICBL'
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_CUSTOMER",
"I_CUSTOMERTOBUSINESSPARTNER",
"R_PROJECTBILLINGREQUESTTP"
],
"ASSOCIATED":
[
"C_PROJECTBILLINGCUSTOMERCARD",
"C_PROJECTBILLINGREQUESTITEMTP",
"I_ENTERPRISEPROJECT",
"I_PROJECTBILLINGREQUESTITEM",
"I_PROJECTBILLINGREQUESTSTATUS",
"R_PROJECTBILLINGREQUESTITEMTP"
],
"BASE":
[
"R_PROJECTBILLINGREQUESTTP"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/