/// <param name="attachedToOriginalSchedule"> /// Flag added to handle <see cref="DRScheduleDetail"/>'s status /// in the same way as <see cref="DRProcess"/> had done for documents /// attached to original schedule. /// </param> public void ReevaluateSchedule( DRSchedule schedule, DRProcess.DRScheduleParameters scheduleParameters, DRDeferredCode deferralCode, decimal?lineAmount, bool attachedToOriginalSchedule) { _schedule = schedule; _schedule.DocDate = scheduleParameters.DocDate; _schedule.BAccountID = scheduleParameters.BAccountID; _schedule.BAccountLocID = scheduleParameters.BAccountLocID; _schedule.FinPeriodID = scheduleParameters.FinPeriodID; _schedule.TranDesc = scheduleParameters.TranDesc; _schedule.IsCustom = false; _schedule.IsDraft = _isDraft; _schedule.BAccountType = _schedule.Module == BatchModule.AP ? BAccountType.VendorType : BAccountType.CustomerType; _schedule.TermStartDate = scheduleParameters.TermStartDate; _schedule.TermEndDate = scheduleParameters.TermEndDate; _schedule.ProjectID = scheduleParameters.ProjectID; _schedule.TaskID = scheduleParameters.TaskID; _schedule = _drEntityStorage.Update(_schedule); IList <DRScheduleDetail> scheduleDetails = _drEntityStorage.GetScheduleDetails(_schedule.ScheduleID); ReevaluateComponentAmounts(scheduleDetails, lineAmount); foreach (DRScheduleDetail scheduleDetail in scheduleDetails) { scheduleDetail.DocDate = _schedule.DocDate; scheduleDetail.BAccountID = _schedule.BAccountID; FinPeriod detailFinPeriod = FinPeriodRepository .GetFinPeriodByMasterPeriodID(PXAccess.GetParentOrganizationID(scheduleDetail.BranchID), _schedule.FinPeriodID).GetValueOrRaiseError(); scheduleDetail.FinPeriodID = detailFinPeriod.FinPeriodID; scheduleDetail.TranPeriodID = detailFinPeriod.MasterFinPeriodID; if (!attachedToOriginalSchedule) { scheduleDetail.Status = _isDraft ? DRScheduleStatus.Draft : (scheduleDetail.IsResidual == null ? DRScheduleStatus.Closed : DRScheduleStatus.Open); } else { scheduleDetail.Status = _isDraft ? DRScheduleStatus.Draft : (scheduleDetail.IsOpen == true ? DRScheduleStatus.Open : DRScheduleStatus.Closed); } _drEntityStorage.Update(scheduleDetail); if (scheduleDetail.IsResidual != true) { DRDeferredCode detailDeferralCode = _drEntityStorage.GetDeferralCode(scheduleDetail.DefCode); IEnumerable <DRScheduleTran> componentTransactions = _drEntityStorage.GetDeferralTransactions(scheduleDetail.ScheduleID, scheduleDetail.ComponentID, scheduleDetail.DetailLineNbr); if (componentTransactions.Any()) { ReevaluateTransactionAmounts(scheduleDetail, detailDeferralCode, componentTransactions); } if (!_isDraft) { if (!componentTransactions.Any()) { componentTransactions = _drEntityStorage.CreateDeferralTransactions(_schedule, scheduleDetail, detailDeferralCode, _branchID); } _drEntityStorage.CreateCreditLineTransaction(scheduleDetail, deferralCode, _branchID); _drEntityStorage.NonDraftDeferralTransactionsPrepared(scheduleDetail, detailDeferralCode, componentTransactions); } } } }