@AbapCatalog.sqlViewName: 'CREQTRACKCTR'
@AbapCatalog.compiler.compareFilter: true
@VDM.viewType: #CONSUMPTION
@AccessControl.authorizationCheck: #MANDATORY
@EndUserText.label: 'Purchase Contracts by Requirement Tracking'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType.dataClass: #TRANSACTIONAL
@ObjectModel.usageType.serviceQuality: #C
@ObjectModel.usageType.sizeCategory: #L
@ObjectModel.semanticKey: [ 'Material', 'Supplier', 'ValidityEndDate' ]
@AccessControl.personalData.blocking: #BLOCKED_DATA_EXCLUDED
//@AccessControl.privilegedAssociations: [ '_ReleasedQuantity', '_ContractAmount', '_PurchaseContractReleaseCode' ]
@Search.searchable: true
@VDM.lifecycle.contract.type:#NONE
define view C_RequirementTrackingPurCtr
as select from I_PurchaseContractItem
association [0..1] to I_PurchasingDocumentItem as _PurchasingDocumentItem on $projection.PurchaseContract = _PurchasingDocumentItem.PurchasingDocument
and $projection.PurchaseContractItem = _PurchasingDocumentItem.PurchasingDocumentItem
// association [0..1] to C_ContrLatestReleaseValueHelp as _ContrLatestReleaseVH on $projection.PurchaseContract = _ContrLatestReleaseVH.PurchaseContract
// and $projection.PurchaseContractItem = _ContrLatestReleaseVH.PurchaseContractItem
// association [0..1] to P_CONTRACTAMOUNT as _ContractAmount on $projection.PurchaseContract = _ContractAmount.PurchaseContract
// and $projection.PurchaseContractItem = _ContractAmount.PurchaseContractItem
//
association [0..1] to P_OpenTargetQuantity as _ReleasedQuantity on $projection.PurchaseContract = _ReleasedQuantity.PurchaseContract
and $projection.PurchaseContractItem = _ReleasedQuantity.PurchaseContractItem
association [1..1] to C_ContractStatusValueHelp as _ContractStatusVH on $projection.PurchaseContract = _ContractStatusVH.PurchaseContract
and $projection.PurchaseContractItem = _ContractStatusVH.PurchaseContractItem
// association [1..1] to P_PurContractValidity as _PurContractValidity on $projection.PurchaseContract = _PurContractValidity.PurchaseContract
// and $projection.PurchaseContractItem = _PurContractValidity.PurchaseContractItem
association [0..1] to P_PurchaseContractReleaseCode as _PurchaseContractReleaseCode on $projection.PurchaseContract = _PurchaseContractReleaseCode.PurchaseContract
// association [1..1] to I_ProcurementDomainValues as _DomainText on _DomainText.Name = 'VDM_BLOCKED_SUPPLIER'
// and _DomainText.Language = $session.system_language
// and _DomainText.DomainValue = 'X'
// association [1..1] to I_ProcmtBlockedSupplier as _ProcmtBlockedSupplier on _ProcmtBlockedSupplier.PurchasingIsBlockedForSupplier = 'X' //$projection.PurchasingIsBlocked
//PFCDS clean up newly added associations
association [0..1] to I_AccountAssignmentCategory as _AccountAssignmentCategory on $projection.AccountAssignmentCategory = _AccountAssignmentCategory.AccountAssignmentCategory
association [0..1] to P_PurchaseContractHistory as _PurchaseContractHistory on $projection.PurchaseContract = _PurchaseContractHistory.PurchaseContract
and $projection.PurchaseContractItem = _PurchaseContractHistory.PurchaseContractItem
association [0..1] to I_CompanyCode as _CompanyCode on $projection.companycode = _CompanyCode.CompanyCode
association [1..1] to I_ProcmtBlockedSupplierTxt as _ProcmtBlockedSupplierTxt on _ProcmtBlockedSupplierTxt.PurchasingIsBlockedForSupplier = 'X'
and _ProcmtBlockedSupplierTxt.Language = $session.system_language //$projection.PurchasingIsBlocked
association [0..1] to I_PurgDocumentItemCategoryText as _PurgDocumentItemCategoryText on $projection.PurchasingDocumentItemCategory = _PurgDocumentItemCategoryText.PurchasingDocumentItemCategory
and _PurgDocumentItemCategoryText.Language = $session.system_language
association [1..1] to I_Supplier as _Supplier on $projection.supplier = _Supplier.Supplier
association [1..1] to I_PurchasingOrganization as _PurchasingOrganization on $projection.purchasingorganization = _PurchasingOrganization.PurchasingOrganization
association [1..1] to I_PurchasingGroup as _PurchasingGroup on $projection.purchasinggroup = _PurchasingGroup.PurchasingGroup
association [1..1] to I_PurchasingDocumentType as _PurchasingDocumentType on $projection.purchasingdocumentcategory = _PurchasingDocumentType.PurchasingDocumentCategory
and $projection.PurchasingDocumentType = _PurchasingDocumentType.PurchasingDocumentType
association [1..1] to I_PurchasingDocumentCategory as _PurchasingDocumentCategory on $projection.purchasingdocumentcategory = _PurchasingDocumentCategory.PurchasingDocumentCategory
//association[1..1] to I_UserContactCard as _UserContactCard on _UserContactCard.ContactCardID = $projection.createdbyuser
{
@Consumption.semanticObject: 'PurchaseContract'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
key PurchaseContract,
@EndUserText.label: 'Item'
@Consumption.semanticObject: 'PurchaseContractItem'
key PurchaseContractItem,
@EndUserText.label: 'Purchase Contract Item'
@UI.lineItem.position: 10
concat(PurchaseContract, concat('/', PurchaseContractItem)) as FormattedPurchaseContractItem,
@UI.lineItem.position: 20
@Consumption.semanticObject: 'Material'
// @ObjectModel: { text.element: [ 'MaterialName' ] }
@ObjectModel.foreignKey.association: '_Material'
I_PurchaseContractItem.Material,
// @UI.hidden: true
// @EndUserText: {
// label: 'Material Description'
// }
// _Material._Text[1: Language = $session.system_language].MaterialName,
// @Consumption.semanticObject: 'MaterialGroup'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
@UI.lineItem.position: 40
// @ObjectModel: { text.element: [ 'MaterialGroupName' ] }
@ObjectModel.foreignKey.association: '_MaterialGroup'
I_PurchaseContractItem.MaterialGroup,
// @UI.hidden: true
// @EndUserText: {
// label: 'Material Group Description'
// }
// cast(I_PurchaseContractItem._MaterialGroup._Text[1: Language = $session.system_language].MaterialGroupName as wgbez) as MaterialGroupName,
@UI.lineItem.position: 50
@Semantics.quantity.unitOfMeasure: 'OrderQuantityUnit'
I_PurchaseContractItem.TargetQuantity,
@UI.hidden: true
OrderQuantityUnit,
@UI.lineItem.position: 60
@Semantics.amount.currencyCode: 'DocumentCurrency'
ContractNetPriceAmount,
@Semantics.quantity.unitOfMeasure: 'OrderPriceUnit'
@UI.lineItem.position: 70
NetPriceQuantity,
@UI.hidden
OrderPriceUnit,
@EndUserText.label: 'Total Value'
@UI.lineItem.position: 80
@Semantics.amount.currencyCode: 'DocumentCurrency'
TargetAmount,
@UI.hidden: true
@EndUserText.label: 'Document Currency'
I_PurchaseContractItem.DocumentCurrency,
@UI.lineItem.position: 90
// cast(_ContrLatestReleaseVH.ReleaseOrderDate as vdm_latestreleasedate) as ReleaseOrderDate,
cast(_PurchaseContractHistory.ReleaseOrderDate as vdm_latestreleasedate) as ReleaseOrderDate,
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
@UI.lineItem.position: 100
@Consumption.semanticObject: 'Supplier'
@ObjectModel.foreignKey.association: '_Supplier'
// @ObjectModel: { text.element: [ 'SupplierName' ] }
I_PurchaseContractItem._PurchaseContract.Supplier,
// @UI.hidden: true
// @EndUserText: {
// label: 'Supplier Name'
// }
// I_PurchaseContractItem._PurchaseContract._Supplier.SupplierName,
@UI.lineItem.position: 110
case
when I_PurchaseContractItem._PurchaseContract.ValidityEndDate <> '' then cast( I_PurchaseContractItem._PurchaseContract.ValidityEndDate as bdatu )
else
cast( '00000000' as bdatu ) end as ValidityEndDate,
@EndUserText.label: 'Account Assignment Category'
@ObjectModel.foreignKey.association: '_AccountAssignmentCategory'
// @ObjectModel.text.element: [ 'AcctAssignmentCategoryName' ]
AccountAssignmentCategory,
// @UI.hidden: true
// @EndUserText: {
// label: 'Account Assignment Category Description'
// }
// _PurchasingDocumentItem._AccountAssignmentCategory._Text [1: Language = $session.system_language ].AcctAssignmentCategoryName,
// @ObjectModel.text.element: [ 'CompanyCodeName' ]
// @Consumption.semanticObject: 'CompanyCode'
@ObjectModel.foreignKey.association: '_CompanyCode'
I_PurchaseContractItem._PurchaseContract.CompanyCode,
// @UI.hidden: true
// @EndUserText: {
// label: 'Company Name'
// }
// _PurchaseContract._CompanyCode.CompanyCodeName,
// @Consumption.semanticObject: 'PurchasingOrganization'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
// @ObjectModel.text.element: [ 'PurchasingOrganizationName' ]
@EndUserText.label: 'Purchasing Organization'
@ObjectModel.foreignKey.association: '_PurchasingOrganization'
I_PurchaseContractItem._PurchaseContract.PurchasingOrganization,
// @UI.hidden: true
// @EndUserText: {
// label: 'Purchasing Organization Name'
// }
// I_PurchaseContractItem._PurchaseContract._PurchasingOrganization.PurchasingOrganizationName,
//
// @Consumption.semanticObject: 'PurchasingGroup'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
// @ObjectModel.text.element: [ 'PurchasingGroupName' ]
@ObjectModel.foreignKey.association: '_PurchasingGroup'
I_PurchaseContractItem._PurchaseContract.PurchasingGroup,
// @UI.hidden: true
// @EndUserText: {
// label: 'Purchasing Group Name'
// }
// I_PurchaseContractItem._PurchaseContract._PurchasingGroup.PurchasingGroupName,
//
// @Consumption.semanticObject: 'Plant'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
// @ObjectModel.text.element: [ 'PlantName' ]
@ObjectModel.foreignKey.association: '_Plant'
I_PurchaseContractItem.Plant,
// @UI.hidden: true
// @EndUserText: {
// label: 'Plant Name'
// }
// _Plant.PlantName,
// @ObjectModel.text.element: [ 'StorageLocationName' ]
// @Consumption.semanticObject: 'StorageLocation'
@ObjectModel.foreignKey.association: '_StorageLocation'
I_PurchaseContractItem.StorageLocation,
// @UI.hidden: true
// @EndUserText: {
// label: 'Storage Location Name'
// }
// _StorageLocation.StorageLocationName,
TaxCode,
@EndUserText.label: 'Target Value'
@Semantics.amount.currencyCode: 'DocumentCurrency'
cast(I_PurchaseContractItem._PurchaseContract.PurchaseContractTargetAmount as abap.curr(18, 2)) as PurchaseContractTargetAmount,
// _ContractAmount.PurchaseContractTargetAmount,
@EndUserText.label: 'Open Target Quantity'
@Semantics.quantity.unitOfMeasure: 'OrderQuantityUnit'
case when _ReleasedQuantity.QuantityReleasedTillDate > TargetQuantity
then cast ('0' as abap.quan(13,3))
when _ReleasedQuantity.QuantityReleasedTillDate is null
then TargetQuantity
else
cast (TargetQuantity - _ReleasedQuantity.QuantityReleasedTillDate as abap.quan(13,3))
end as OpenTargetQuantity,
@UI.hidden: true
case
when _ContractStatusVH.PurchaseContractValidityStatus = '01'
then 1
else 0
end as DueDateCriticality,
//
@UI.lineItem.position: 30
@EndUserText.label: 'Validity Status'
@ObjectModel.text.element: [ 'PurContrValidityStatusName' ]
@UI.lineItem.criticality: 'DueDateCriticality'
@UI.lineItem.criticalityRepresentation: #WITHOUT_ICON
@UI.lineItem: [{cssDefault.width: '10rem'}]
cast( _ContractStatusVH.PurchaseContractValidityStatus as mm_contract_status_id ) as PurchaseContractValidityStatus,
@UI.hidden: true
_ContractStatusVH.PurContrValidityStatusName,
// cast (_PurchaseContract._ReleaseCode._ReleaseCodeText.ReleaseCodeName as vdm_releasecode) as ReleaseCodeName,
cast (_PurchaseContractReleaseCode.ReleaseCodeName as vdm_releasecode) as ReleaseCodeName,
@ObjectModel.text.element: [ 'UserDescription' ]
// @ObjectModel.foreignKey.association: '_UserContactCard'
@UI.hidden: true
I_PurchaseContractItem._PurchaseContract.CreatedByUser,
@EndUserText.label: 'Created By'
@Semantics.text: true
I_PurchaseContractItem. _PurchaseContract._CreatedByUser.UserDescription,
I_PurchaseContractItem._PurchaseContract.CreationDate,
@EndUserText.label: 'Valid From'
case
when I_PurchaseContractItem._PurchaseContract.ValidityStartDate <> '' then cast( I_PurchaseContractItem._PurchaseContract.ValidityStartDate as adatu )
else
cast( '00000000' as adatu ) end as ValidityStartDate,
@EndUserText.label: 'Purchasing Info Record'
@Consumption.semanticObject: 'PurchasingInfoRecord'
_PurchasingDocumentItem.PurchasingInfoRecord,
//
@EndUserText.label: 'Purchasing Document Type'
@ObjectModel.foreignKey.association: '_PurchasingDocumentType'
// @ObjectModel.text.element: [ 'PurchasingDocumentTypeName' ]
I_PurchaseContractItem._PurchaseContract.PurchaseContractType as PurchasingDocumentType,
@EndUserText.label: 'Purchasing Document Category'
@ObjectModel.foreignKey.association: '_PurchasingDocumentCategory'
I_PurchaseContractItem._PurchaseContract.PurchasingDocumentCategory,
// @UI.hidden: true
// @EndUserText: {
// label: 'Document Type Description'
// }
// I_PurchaseContractItem._PurchaseContract._PurchasingDocumentType._Text[1: Language = $session.system_language].PurchasingDocumentTypeName,
//
@EndUserText.label: 'Item Category'
@ObjectModel: { text.element: [ 'PurgDocItemCategoryName' ] }
_PurgDocumentItemCategoryText.PurgDocExternalItemCategory,
//_PurchasingDocumentItem._PurgDocumentItemCategory._Text[1: Language = $session.system_language ].PurgDocExternalItemCategory,
@UI.hidden: true
@Semantics.text: true
@EndUserText: {
label: 'Item Category Text'
}
_PurgDocumentItemCategoryText.PurgDocItemCategoryName,
// _PurchasingDocumentItem._PurgDocumentItemCategory._Text[1: Language = $session.system_language ].PurgDocItemCategoryName,
@UI.hidden: true
PurchasingDocumentItemCategory,
@ObjectModel.text.element: [ 'PurgCatName' ]
PurchasingCategory,
@UI.hidden: true
@EndUserText: {
label: 'Purchasing Category Name'
}
PurgCatName,
PurchaseContractItemText as PurchasingText,
@EndUserText.label: 'Requirement Tracking Number'
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 1 }
RequirementTracking,
@EndUserText.label: 'Supplier Block Status'
cast(case when
I_PurchaseContractItem._PurchaseContract._Supplier.PurchasingIsBlocked = 'X'
then
_ProcmtBlockedSupplierTxt.SupplierName //DomainText
else
' '
end as vdm_purblockforsupplier) as PurchasingIsBlockedForSupplier,
//released value
//invoice value
//Is Supplier Blocked or Supplier Block Status <Need to be reviewed by KM>
//Item Count <Need to be reviewed by KM>
// _ContrLatestReleaseVH,
_ContractStatusVH,
//text associations exposed and the name fields are removed
_Material,
_MaterialGroup,
_Plant,
_StorageLocation,
@Consumption.filter.hidden: true
_AccountAssignmentCategory,
_CompanyCode,
_Supplier,
_PurchasingOrganization,
_PurchasingGroup,
_PurchasingDocumentType,
_PurchasingDocumentCategory
// _UserContactCard
// _PurchasingDocumentItem,
// _ProcmtBlockedSupplier
}
where
PurchasingContractDeletionCode = ' '
and I_PurchaseContractItem._PurchaseContract.PurchasingDocumentDeletionCode = ' '
and(
(
I_PurchaseContractItem._PurchaseContract.Supplier = ' '
)
or(
//_PurchasingDocumentItem._PurchasingDocument._Supplier.IsBusinessPurposeCompleted <> 'X'
I_PurchaseContractItem._PurchaseContract._Supplier.IsBusinessPurposeCompleted <> 'X'
)
)