@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType.dataClass: #MIXED
@ObjectModel.usageType.serviceQuality: #D
@ObjectModel.usageType.sizeCategory: #S
@VDM.private: true
@VDM.viewType: #COMPOSITE
@AccessControl.authorizationCheck:#NOT_REQUIRED
@AbapCatalog.sqlViewName: 'PSODUEDATEREUSE8'
/*
DOCUMENTATION ( 4.3.2015 by AT):
---------------------------------
P_SalesOrderInDelivItmDueDate encapsulates the due date logic (and the basic fields like
SalesOrder, SalesOrganization, ...) for issue type DE03 on ITEM level.
The consuming cds views (that are the issue models DE03) typically cover a issue specific filtering (based
on the status fields below). Furthermore they'll add some formal attributes like issue or issue category.
DueDate logic:
- considered fields are
TransportationPlanningStatus, TransportationPlanningDate,
OverallPickingStatus, PickingDate,
PlannedGoodsIssueDate
- in case one of TransportationPlanning or Picking is open, the Date corresponding to the open status is chosen
- in case of both of TransportationPlanning or Picking is open, the smallest date of both is chosen
- in case of both of TransportationPlanning or Picking are completed/irrelevant, the PlannedGoodsIssueDate is chosen
Note (added 27.9.2019 by AT):
- all item status (that were missing in P_SalesOrderInDelivDueDate) now also in P_SalesOrderInDelivDueDate
- compare note of same date in P_SalesOrderInDelivDueDate for more details
- THIS model is now no longer used (=obsolete)
*/
define view P_SalesOrderInDelivItmDueDate
as select from I_DeliveryDocument as DDH
inner join I_DeliveryDocumentItem as DDI on
DDH.DeliveryDocument = DDI.DeliveryDocument /*and
( DDI.ReferenceSDDocumentCategory = 'C' or
DDI.ReferenceSDDocumentCategory = 'I' or
DDI.ReferenceSDDocumentCategory = 'L' ) */
inner join I_SalesDocumentBasic as SOH on -- I_SalesDocument
DDI.ReferenceSDDocument = SOH.SalesDocument /*and
( DDI.ReferenceSDDocumentCategory = 'C' or
DDI.ReferenceSDDocumentCategory = 'I' or
DDI.ReferenceSDDocumentCategory = 'L' )*/
left outer to one join P_SalesDocumentBusinessData as VBKD on SOH.SalesDocument = VBKD.SlsDocBusinessData
and VBKD.SlsDocBusinessDataItem = '000000'
{
//Key
key SOH.SalesDocument as SalesOrder,
key DDI.DeliveryDocument,
key DDI.DeliveryDocumentItem,
//Organization
SOH.SalesOrganization,
SOH.DistributionChannel,
SOH.OrganizationDivision,
SOH.SalesDocumentType,
//Misc
SOH.RequestedDeliveryDate,
SOH.OverallSDProcessStatus,
SOH.SalesDocumentDate,
SOH.SalesGroup,
SOH.SalesOffice,
SOH.SoldToParty,
VBKD.PurchaseOrderByCustomer,
//Status&Reasons
DDH.DeliveryBlockReason,
DDH.OverallGoodsMovementStatus,
DDI.GoodsMovementStatus ,
DDH.OverallDelivReltdBillgStatus,
DDI.ItemGeneralIncompletionStatus,
DDI.ItemBillingIncompletionStatus,
DDI.ItemPackingIncompletionStatus,
DDI.ItemPickingIncompletionStatus,
DDI.ItemDeliveryIncompletionStatus,
DDI.ItemGdsMvtIncompletionSts,
DDI.TrdCmplncEmbargoSts, --AT23.9.2019 Trade Compliance Issue DE07 CE2002
DDI.TrdCmplncSnctndListChkSts,
DDI.TrdCmplncLegalControlSts,
//Dates
DDH.PlannedGoodsIssueDate,
DDH.BillingDocumentDate,
DDH.OverallPickingStatus,
case when --CASE 1: TPStatus is open, OPStatus is open
( DDH.TransportationPlanningStatus = 'A' or DDH.TransportationPlanningStatus = 'B' ) and
( DDH.OverallPickingStatus = 'A' or DDH.OverallPickingStatus = 'B' )
then
case when
DDH.PickingDate < DDH.TransportationPlanningDate
then DDH.PickingDate
else DDH.TransportationPlanningDate
end
else case when -- CASE 2: TPStatus is open, OPStatus is completed/irrelevant
( DDH.TransportationPlanningStatus = 'A' or DDH.TransportationPlanningStatus = 'B' ) and
( DDH.OverallPickingStatus = 'C' or DDH.OverallPickingStatus = ' ' )
then DDH.TransportationPlanningDate
else case when -- CASE 3: TPStatus is completed/irrelevant, OPStatus is open
( DDH.TransportationPlanningStatus = 'C' or DDH.TransportationPlanningStatus = ' ' ) and
( DDH.OverallPickingStatus = 'A' or DDH.OverallPickingStatus = 'B' )
then DDH.PickingDate
else case when -- CASE 4: TPStatus is completed/irrelevant, OPStatus is completed/irrelevant
( DDH.TransportationPlanningStatus = 'C' or DDH.TransportationPlanningStatus = ' ' ) and
( DDH.OverallPickingStatus = 'C' or DDH.OverallPickingStatus = ' ' )
then DDH.PlannedGoodsIssueDate
end -- of CASE4
end -- of CASE3
end -- of CASE2
end -- of CASE1
as DueDate
}
where DDH.SDDocumentCategory = 'J'
;
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_DELIVERYDOCUMENT",
"I_DELIVERYDOCUMENTITEM",
"I_SALESDOCUMENTBASIC",
"P_SALESDOCUMENTBUSINESSDATA"
],
"ASSOCIATED":
[],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/