@EndUserText.label: 'Item Details of Project Billing Request'
@VDM.viewType: #CONSUMPTION
@AccessControl.authorizationCheck: #MANDATORY
//@AccessControl.privilegedAssociations: [ '_UserContactCard' ]
@AccessControl.privilegedAssociations: [ '_ProjBillgUserContactCard' ]
@AccessControl.personalData.blocking: #REQUIRED
@VDM.usage.type: [ #TRANSACTIONAL_PROCESSING_SERVICE ]
//@Metadata.allowExtensions: true
//@Search.searchable: true
@ObjectModel.usageType: {
sizeCategory: #XL,
dataClass: #TRANSACTIONAL,
serviceQuality: #C
}
@ObjectModel: {
semanticKey: [ 'WBSElement' ],
representativeKey: 'ProjectBillingRequestItemUUID'
}
//Customer Optimizer is trying to join via DOCLN instead of BELNR hence use hint
//@Consumption.dbHints: [ 'CS_JOIN_REDUCTION_MULTICOLUMN_FIRST(\'ACDOCA.BELNR\')' ]
// Add NO_SUBPLAN_SHARING as it shows good result in case of restricted user (see DCL) with no influence on unrestricted one
@Consumption.dbHints: [ 'CS_JOIN_REDUCTION_MULTICOLUMN_FIRST(\'ACDOCA.BELNR\')', 'NO_SUBPLAN_SHARING', 'NO_USE_HEX_PLAN' ]
@UI.presentationVariant: [{ requestAtLeast: ['ProjBillgReqItmHasPostponedVal', 'ProjectBillingRequestUUID' ] }]
define view entity C_ProjectBillingRequestItmTP_2
as projection on R_ProjectBillingRequestItemTP as ProjectBillingRequestItem // Alias was added as it is necessary for configuration in scfd_registry
// association [0..1] to I_UserContactCard as _UserContactCard on $projection.BusinessPartnerUUID = _UserContactCard.BusinessPartnerUUID
// and _UserContactCard.Person <> ''
association [0..1] to C_ProjBillgUserContactCard as _ProjBillgUserContactCard on $projection.BusinessPartnerUUID = _ProjBillgUserContactCard.BusinessPartnerUUID
association [0..1] to E_JournalEntryItem as _JournalEntryItemExtension on $projection.Ledger = _JournalEntryItemExtension.SourceLedger
and $projection.CompanyCode = _JournalEntryItemExtension.CompanyCode
and $projection.FiscalYear = _JournalEntryItemExtension.FiscalYear
and $projection.AccountingDocument = _JournalEntryItemExtension.AccountingDocument
and $projection.LedgerGLLineItem = _JournalEntryItemExtension.LedgerGLLineItem
{
@UI.hidden: true
@EndUserText.label: 'Item ID'
@EndUserText.quickInfo: 'Item ID'
key ProjectBillingRequestItem.ProjectBillingRequestItemUUID,
@UI.hidden: true
ProjectBillingRequestItem.ProjectBillingRequestUUID,
@UI.lineItem: [{position: 60, importance: #HIGH }]
@EndUserText.label: 'Work Package'
@EndUserText.quickInfo: 'Work Package'
@ObjectModel.sort.enabled: true
@ObjectModel.text.element: ['WBSDescription']
@UI.textArrangement: #TEXT_SEPARATE
_ProjectBillingElementEntryTP._WBSElement.WBSElementExternalID as WBSElement,
@EndUserText.label: 'Work Package Name'
@EndUserText.quickInfo: 'Work Package Name'
@Semantics.text:true
_ProjectBillingElementEntryTP._WBSElement.WBSDescription as WBSDescription,
@UI.lineItem: [{position: 30}]
@EndUserText.label: 'Billing Element'
@EndUserText.quickInfo: 'Billing Element'
@ObjectModel.text.element: ['BillingWBSElementDescription']
@UI.textArrangement: #TEXT_SEPARATE
_ProjectBillingElementEntryTP._ProjectBillingElement._WBSElement.WBSElementExternalID as BillingWBSElementExternalID,
@EndUserText.label: 'Billing Element Description'
@EndUserText.quickInfo: 'Billing Element Description'
@Semantics.text:true
_ProjectBillingElementEntryTP._ProjectBillingElement._WBSElement.WBSDescription as BillingWBSElementDescription,
@UI.hidden: true
@UI.lineItem: [{position: 210, importance: #HIGH }]
@EndUserText.label: 'Product'
@EndUserText.quickInfo: 'Material'
@ObjectModel.sort.enabled: true
@ObjectModel.text.element: ['MaterialName']
@Consumption.semanticObject: 'Material'
@Semantics.text:true
ProjectBillingRequestItem.Material,
@EndUserText.label: 'Product'
@EndUserText.quickInfo: 'Product'
ProjectBillingRequestItem._Material._Text.MaterialName as MaterialName : localized,
@UI.hidden:true
ProjectBillingRequestItem._Material._MaterialGroup._Text.MaterialGroupName as MaterialGroupName : localized,
@UI: { lineItem: [ { position: 10, importance: #HIGH } ] , identification: [{valueQualifier: 'timeAndExpenseItemsFacetID', position: 10},{valueQualifier: 'FixedPriceFacetID', position: 10}] }
@EndUserText.label: 'Material Group Name'
@EndUserText.quickInfo: 'Material Group Name'
@ObjectModel.sort.enabled: true
@ObjectModel.text.element: ['MaterialGroupName']
@Consumption.semanticObject: 'MaterialGroup'
ProjectBillingRequestItem._Material.MaterialGroup,
// ProjectBillingRequestItem.MaterialGroup,
@UI.lineItem: [{position: 220, importance: #HIGH }]
@EndUserText.label: 'Activity Type'
@EndUserText.quickInfo: 'Activity Type'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.CostCtrActivityTypeDesc,
@UI: { lineItem: [ { position: 70, importance: #HIGH } ] }
@EndUserText.label: 'Work Item'
@EndUserText.quickInfo: 'Work Item'
@ObjectModel.sort.enabled: true
@ObjectModel.text.element: ['WorkItemName']
@Consumption.semanticObject: 'WorkItem'
@Consumption.valueHelpDefinition: [{ entity: { name: 'C_ProjBillgReqWrkPckgWrkItmVH', element: 'WorkItem' } ,
additionalBinding: [{ localElement: 'ProjectBillingRequestUUID',
element: 'ProjectBillingRequestUUID',
usage: #FILTER}] } ]
ProjectBillingRequestItem.WorkItem,
@UI: { lineItem: [ { position: 50, importance: #HIGH } ] }
@EndUserText.label: 'Service Date'
@EndUserText.quickInfo: 'Service Date'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ServicesRenderedDate,
@UI: { lineItem: [ { position: 150, importance: #HIGH } ]}
@Semantics.quantity.unitOfMeasure: 'NetPriceQuantityUnit'
@EndUserText.label: 'Net Rate Unit'
@EndUserText.quickInfo: 'Net Rate Unit'
@ObjectModel.sort.enabled: true
NetPriceQuantity,
@UI.hidden: true
ProjectBillingRequestItem.ProjBillgElmntEntrItmUUID,
@UI.hidden: true
ProjectBillingRequestItem.ProjectBillingElementUUID,
@EndUserText.label: 'Sales Document Item'
@EndUserText.quickInfo: 'Sales Document Item'
@UI.hidden: true
ProjectBillingRequestItem.SalesDocumentItem,
@UI.hidden: true
@EndUserText.label: 'Sales Document / Item'
@EndUserText.quickInfo: 'Sales Document / Item'
@ObjectModel.text.element: ['SalesOrderItemConcatenatedID']
@UI.textArrangement: #TEXT_ONLY
ProjectBillingRequestItem.SalesDocument as SalesDocument,
@UI: { lineItem: [ { position: 200, importance: #HIGH } ] }
@UI.hidden: true
@EndUserText.label: 'Sales Document / Item'
@EndUserText.quickInfo: 'Sales Document / Item'
@Consumption.semanticObject: 'SalesDocument' // Uncommenting due to UI inconsistencies
@Semantics.text:true
ProjectBillingRequestItem.SalesOrderItemConcatenatedID,
@UI: { lineItem: [ { position: 90, importance: #HIGH } ] }
@Semantics.amount.currencyCode: 'TransactionCurrency'
@EndUserText.label: 'Amount / Cost to Bill'
@EndUserText.quickInfo: 'Amount / Cost to Bill'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBeBilledAmtInTransCrcy,
@UI: { lineItem: [ { position: 100, importance: #HIGH } ]}
@Semantics.amount.currencyCode: 'TransactionCurrency'
@EndUserText.label: 'Amount / Cost to Postpone'
@EndUserText.quickInfo: 'Amount / Cost to Postpone'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBePostponedAmtInTransacCrcy,
@UI.hidden: true
@Semantics.amount.currencyCode: 'ProjectCurrency'
ProjectBillingRequestItem.ToBePostponedAmtInProjectCrcy,
@UI.hidden: true
@Semantics.amount.currencyCode: 'GlobalCurrency'
ProjectBillingRequestItem.ToBePostponedAmtInGlobalCrcy,
@UI: { lineItem: [ { position: 110, importance: #HIGH } ] }
@Semantics.amount.currencyCode: 'TransactionCurrency'
@EndUserText.label: 'Amount / Cost to Write Off'
@EndUserText.quickInfo: 'Amount / Cost to Write Off'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBeWrittenOffAmtInTransCrcy,
@UI: { lineItem: [ { position: 120, importance: #HIGH } ]}
@EndUserText.label: 'Open Quantity'
@EndUserText.quickInfo: 'Open Quantity'
@Semantics.quantity.unitOfMeasure: 'QuantityUnit'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.OpenQuantity,
@UI: { lineItem: [ { position: 130, importance: #HIGH } ] }
@EndUserText.label: 'Quantity to Bill'
@EndUserText.quickInfo: 'Quantity to Bill'
@Semantics.quantity.unitOfMeasure: 'QuantityUnit'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBeBilledQuantity,
@UI: { lineItem: [ { position: 140, importance: #HIGH } ] }
@EndUserText.label: 'Quantity to Postpone'
@EndUserText.quickInfo: 'Quantity to Postpone'
@Semantics.quantity.unitOfMeasure: 'QuantityUnit'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBePostponedQuantity,
@UI: { lineItem: [ { position: 150, importance: #HIGH } ]}
@EndUserText.label: 'Quantity to Write Off'
@EndUserText.quickInfo: 'Quantity to Write Off'
@Semantics.quantity.unitOfMeasure: 'QuantityUnit'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ToBeWrittenOffQuantity,
@UI.hidden: true
@Semantics.amount.currencyCode: 'ProjectCurrency'
ProjectBillingRequestItem.ToBeWrittenOffAmtInProjectCrcy,
@UI.hidden: true
@Semantics.amount.currencyCode: 'GlobalCurrency'
ProjectBillingRequestItem.ToBeWrittenOffAmtInGlobalCrcy,
@UI.hidden: true
@Semantics.amount.currencyCode: 'ProjectCurrency'
ProjectBillingRequestItem.ToBeBilledAmtInProjCurrency,
@UI.hidden: true
@Semantics.amount.currencyCode: 'GlobalCurrency'
ProjectBillingRequestItem.ToBeBilledAmtInGlobCurrency,
@UI:{ lineItem: [{ position: 20, type: #AS_CONTACT, value: '_ProjBillgUserContactCard', label: 'Performed By', importance: #HIGH } ] } //, identification: [{valueQualifier: 'timeAndExpenseItemsFacetID', position: 10}]}
@EndUserText.label: 'Performed By'
@EndUserText.quickInfo: 'Performed By'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem._PersonWorkAgreement_1.PersonFullName as PersonFullName,
@UI.hidden: true
ProjectBillingRequestItem.BusinessPartnerUUID as BusinessPartnerUUID,
@UI.hidden: true
@EndUserText.label: 'Created By User'
@EndUserText.quickInfo: 'Created By User'
ProjectBillingRequestItem.ProjBillgReqItmCrtedByUser as ProjBillgReqItmCrtedByUser,
@UI.hidden: true
@EndUserText.label: 'Created At Time'
@EndUserText.quickInfo: 'Created At Time'
ProjectBillingRequestItem.ProjBillgReqItmCrtedAtDteTme as ProjBillgReqItmCrtedAtDteTme,
@UI.hidden: true
ProjectBillingRequestItem.ProjBillgReqItmLastChgdBy,
@UI.hidden: true
ProjectBillingRequestItem.ProjBillgReqItmLastChgdDteTme,
@Semantics.currencyCode: true
ProjectBillingRequestItem.DocumentCurrency,
@Semantics.unitOfMeasure: true
ProjectBillingRequestItem.QuantityUnit,
@Semantics.unitOfMeasure: true
ProjectBillingRequestItem.NetPriceQuantityUnit,
@Semantics.currencyCode: true
ProjectBillingRequestItem.ProjectCurrency,
@Semantics.currencyCode: true
ProjectBillingRequestItem.GlobalCurrency,
@Semantics.currencyCode: true
ProjectBillingRequestItem.TransactionCurrency,
@UI: { lineItem: [ { position: 80, importance: #HIGH } ] }
@EndUserText.label: 'Open Amount / Cost'
@EndUserText.quickInfo: 'Open Amount / Cost'
@Semantics.amount.currencyCode: 'TransactionCurrency'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.OpenAmountInTransCrcy,
@UI: { lineItem: [ { position: 210, importance: #HIGH } ] }
@EndUserText.label: 'Open Amount / Cost in Project Currency'
@EndUserText.quickInfo: 'Open Amount / Cost in Project Currency'
@Semantics.amount.currencyCode: 'ProjectCurrency'
ProjectBillingRequestItem.OpenAmountInProjectCurrency,
@EndUserText.label: 'Open Amount / Cost in Global Currency'
@EndUserText.quickInfo: 'Open Amount / Cost in Global Currency'
@Semantics.amount.currencyCode: 'GlobalCurrency'
ProjectBillingRequestItem.OpenAmountInGlobalCurrency,
@Semantics.amount.currencyCode: 'DocumentCurrency'
ProjectBillingRequestItem.OpenRevenueAmtInDocCrcy,
@UI: { lineItem: [ { position: 160, importance: #HIGH } ] }
@Semantics.amount.currencyCode: 'DocumentCurrency'
@EndUserText.label: 'To Bill'
@EndUserText.quickInfo: 'To Bill' //Billable Amount
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.BillableRevenueAmtInDocCrcy, //Billable Amount
@UI.hidden: true
ProjectBillingRequestItem.ManualBillgSelForPrjBlgReqItem,
ProjectBillingRequestItem.BillingControlCategory,
@UI.hidden: true
ProjectBillingRequestItem.DueBillingDate,
@UI.hidden: true
ProjectBillingRequestItem.ProjBillgReqItmSourceType,
ProjectBillingRequestItem.ProjectBillingRequestItemDesc,
@EndUserText.label: 'Note'
@EndUserText.quickInfo: 'Note'
@Semantics.text: true
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.ProjBillingRequestItemLongText as ProjBillingRequestItemLongText,
@UI.hidden: true
@ObjectModel.text.element: ['TimeSheetOvertimeCategoryText']
ProjectBillingRequestItem.TimeSheetOvertimeCategory,
@EndUserText.label: 'Overtime Category'
@EndUserText.quickInfo: 'Overtime Category'
_TimeSheetOvertimeCatText.TimeSheetOvertimeCategoryText,
@EndUserText.label: 'Customer Material'
@EndUserText.quickInfo: 'Customer Material'
@ObjectModel.sort.enabled: true
_CustomerMaterial.MaterialByCustomer,
@EndUserText.label: 'Customer Material Description'
@EndUserText.quickInfo: 'Customer Material Description'
@ObjectModel.sort.enabled: true
_CustomerMaterial.MaterialDescriptionByCustomer,
// @UI.hidden: true //to be deleted after ICO auth concept is done
// ProjectBillingRequestItem.ProjBillgElmntEntrSourceType as ProjBillgElmntEntrSourceType, //For diff bet fixed price n T&E
@EndUserText.label: 'Billing Control Category'
@EndUserText.quickInfo: 'Billing Control Category'
_BillingControlCategoryText.BillingControlCategoryText as BillingControlCategoryText,
@UI.hidden: true
ProjectBillingRequestItem.Ledger,
@UI.hidden:true
cast( ProjectBillingRequestItem.FiscalYear as fis_gjahr_no_conv preserving type ) as FiscalYear,
@UI.hidden: true
@EndUserText.label: 'Journal Entry/Item/Fiscal Year'
@EndUserText.quickInfo: 'Journal Entry/Item/Fiscal Year'
@ObjectModel.text.element: ['JournalEntrySemanticKey']
@UI.textArrangement: #TEXT_ONLY
@Consumption.semanticObject: 'AccountingDocument'
ProjectBillingRequestItem.AccountingDocument,
@EndUserText.label: 'Journal Entry Item'
@EndUserText.quickInfo: 'Journal Entry Item'
@UI.hidden: true
ProjectBillingRequestItem.LedgerGLLineItem,
@UI.hidden: true
@EndUserText.label: 'Company Code'
@EndUserText.quickInfo: 'Company Code'
//_ProjectBillingElementEntryTP._WBSElement.CompanyCode as CompanyCode,
ProjectBillingRequestItem.CompanyCode as CompanyCode,
@UI.hidden:true
@EndUserText.label: 'Journal Entry/Item/Fiscal Year'
@EndUserText.quickInfo: 'Journal Entry/Item/Fiscal Year'
@ObjectModel.sort.enabled: true
@Semantics.text:true
// @ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
// virtual JournalEntrySemanticKey : abap.char( 30 ),
JournalEntrySemanticKey as JournalEntrySemanticKey,
@UI.hidden: true
@EndUserText.label: 'Cost Rate'
@EndUserText.quickInfo: 'Cost Rate'
@Semantics.amount.currencyCode: 'TransactionCurrency'
@ObjectModel.sort.enabled: false
@ObjectModel.filter.enabled: false
@Consumption.filter.hidden: true
//@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
//virtual BaseUnitActualCost : abap.curr( 23, 2 ),
BaseUnitActualCost,
@UI.hidden: true
NetPriceAmountInDocCrcy as NetPriceAmountInDocCrcyFoFltr,
@Semantics.amount.currencyCode: 'DocumentCurrency'
@EndUserText.label: 'Net Rate'
@EndUserText.quickInfo: 'Net Rate'
@ObjectModel.filter.enabled: true
@ObjectModel.sort.enabled: false
//@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual NetPriceAmountInDocCrcy : abap.curr( 23, 2 ),
@UI.hidden: true
@EndUserText.label: 'Work Item'
@EndUserText.quickInfo: 'Work Item'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@Semantics.text:true
virtual WorkItemName : /cpd/pfp_workitem_name,
@Semantics.amount.currencyCode: 'TransactionCurrency'
@EndUserText.label: 'Amount / Cost to Postpone'
@EndUserText.quickInfo: 'Amount / Cost to Postpone'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual OnAcctToBePostpnAmtInTransCrcy : abap.curr( 23, 2 ),
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillgReqItmHasBillableVal : boolean,
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillgReqItmHasWrtOffVal : boolean,
@UI.hidden: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillgReqItmHasPostponedVal : boolean,
@EndUserText.label: 'Billing Element'
@EndUserText.quickInfo: 'Manual Billing Element'
@ObjectModel.text.element: ['BillingWBSElementDescription']
@UI.textArrangement: #TEXT_SEPARATE
@ObjectModel.sort.enabled: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
// @Consumption.valueHelpDefinition: [{ entity: { name: 'C_PrjBlgReqManualItmWBSVH', element: 'WBSElement' } ,
// additionalBinding: [{ localElement: 'ProjectBillingRequestUUID',
// element: 'ProjectBillingRequestUUID',
// usage: #FILTER_AND_RESULT },
// { localElement: 'BillingWBSElementDescription', element: 'WBSDescription', usage: #RESULT }] }]
@Consumption.valueHelpDefinition: [{ entity: { name: 'C_PrjBlgReqManualItmWBSVH', element: 'WBSElement' } ,
additionalBinding: [{ localElement: 'ProjectBillingRequestUUID',
element: 'ProjectBillingRequestUUID',
usage: #FILTER_AND_RESULT },
{ localElement: 'BillingPlanUsageCategory',
element: 'BillingPlanUsageCategory',
usage: #FILTER },
{ localElement: 'BillingWBSElementDescription',
element: 'WBSDescription',
usage: #RESULT },
{ localElement: 'ProjectBillingElementUUID',
element: 'ProjectBillingElementUUID',
usage: #RESULT },
{ localElement: 'MaterialName',
element: 'MaterialName',
usage: #RESULT },
{ localElement: 'MaterialGroup',
element: 'MaterialGroup',
usage: #RESULT },
{ localElement: 'MaterialGroupName',
element: 'MaterialGroupName',
usage: #RESULT },
{ localElement: 'MaterialByCustomer',
element: 'MaterialByCustomer',
usage: #RESULT },
{ localElement: 'MaterialDescriptionByCustomer',
element: 'MaterialDescriptionByCustomer',
usage: #RESULT },
{ localElement: 'SalesOrderItemConcatenatedID',
element: 'SalesOrderItemConcatenatedID',
usage: #RESULT } ] }]
virtual ProjectBillingReqManualItemWBS : pbri_manualwbs,
@EndUserText.label: 'Material'
@EndUserText.quickInfo: 'Manual Material'
@ObjectModel.text.element: ['Material']
@UI.textArrangement: #TEXT_ONLY
@ObjectModel.sort.enabled: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
@Consumption.valueHelpDefinition: [{ entity: { name: 'C_PrjBlgReqManualItmMaterialVH', element: 'Material' } }]
virtual ProjBillgReqManualItemMaterial : pbri_manualmatl,
@EndUserText.label: 'To Bill'
@EndUserText.quickInfo: 'To Bill'
@Semantics.amount.currencyCode: 'DocumentCurrency'
@Consumption.filter.hidden:false
@ObjectModel.filter.enabled: true
@ObjectModel.sort.enabled: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual PrjBlgReqItmMnlBllbleRevnAmt : pbri_billablerevnindoccrcy,
@EndUserText.label: 'Service Date'
@EndUserText.quickInfo: 'Service Date'
@Consumption.filter.hidden:false
@ObjectModel.filter.enabled: true
@ObjectModel.sort.enabled: true
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillgReqItmMnlSrvcRndrdDte : pbri_manualdate,
@EndUserText.label: 'Quantity'
@EndUserText.quickInfo: 'Quantity'
@Consumption.filter.hidden:false
@ObjectModel.filter.enabled: true
@ObjectModel.sort.enabled: true
@Semantics.quantity.unitOfMeasure: 'QuantityUnit'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
virtual ProjBillgReqItmMnlToBeBlldQty : pbri_tobebilledqty,
@EndUserText.label: 'Billing Due Date'
@EndUserText.quickInfo: 'Billing Due Date'
@Consumption.filter.hidden:false
@ObjectModel.filter.enabled: true
@ObjectModel.sort.enabled: true
@ObjectModel.sort.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS_SORT'
@ObjectModel.filter.transformedBy: 'ABAP:CL_PBE_VIRTUALFIELDS'
@ObjectModel.virtualElementCalculatedBy:'ABAP:CL_PBE_VIRTUALFIELDS'
virtual BillingPlanBillingDate : abap.dats(8),
// @UI.hidden: true
// @Semantics.amount.currencyCode: 'ProjectCurrency'
// _ProjectBillingElementEntryTP.OriginalAmountInProjectCrcy, - not used
_ProjectBillingElementEntryTP.PrjBlgElmEntrLastChgdAtDteTme,
@EndUserText.label: 'Service Start Date'
@EndUserText.quickInfo: 'Service Start Date'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.BillingPlanServiceStartDate,
@EndUserText.label: 'Service End Date'
@EndUserText.quickInfo: 'Service End Date'
@ObjectModel.sort.enabled: true
ProjectBillingRequestItem.BillingPlanServiceEndDate,
@UI.hidden: true
_ProjectBillingElementEntryTP._ProjectBillingElement._SalesDocItemBillPlan.BillingPlanUsageCategory as BillingPlanUsageCategory,
@UI.hidden: true
ProjectBillingRequestStatus as ProjectBillingRequestStatus,
//Associations
//_UserContactCard,
_ProjBillgUserContactCard,
ProjectBillingRequestItem._ProjectBillingRequest,
_ProjectBillingRequestTP : redirected to parent C_ProjectBillingRequestTP_2
}
where
ProjectBillingCategory <> 'ICBL'
and(
ProjectBillingRequestStatus <> 'C'
or(
Material is not initial
and(
ProjBillgReqItmSourceType = 'B'
or ProjBillgReqItmSourceType = 'M'
or Material = 'A002'
or(
DueBillingDate <= ProjectBillingRequestItem.UserLocalDate
and ServicesRenderedDate <= DueBillingDate
)
or(
DueBillingDate > ProjectBillingRequestItem.UserLocalDate
and ServicesRenderedDate <= ProjectBillingRequestItem.UserLocalDate
)
)
)
)