public virtual void ValidateFinPeriod(IEnumerable <IAccountable> records, Type fieldModuleClosed = null) { var recordsByPeriod = records.AsEnumerable().GroupBy(record => record.FinPeriodID); ProcessingResult generalResult = new ProcessingResult(); foreach (var recordsByPeriodGroup in recordsByPeriod) { int?[] orgnizationIDs = recordsByPeriodGroup.GroupBy(t => PXAccess.GetParentOrganizationID(t.BranchID)) .Select(g => g.Key) .ToArray(); ValidateFinPeriod(recordsByPeriodGroup.Key, orgnizationIDs, fieldModuleClosed, generalResult); } generalResult.RaiseIfHasError(); }
public virtual OrganizationFinPeriod GetNearestOpenOrganizationMappedFABookPeriodInSubledger <TClosedInSubledgerField>(int?bookID, int?sourceBranchID, string sourcefinPeriodID, int?targetBranchID) where TClosedInSubledgerField : IBqlField { if (!FABookPeriodRepositoryHelper.IsPostingFABook(bookID)) { return(null); } IFinPeriodUtils finPeriodUtils = Graph.GetService <IFinPeriodUtils>(); IFinPeriodRepository finPeriodRepository = Graph.GetService <IFinPeriodRepository>(); IFABookPeriodRepository faBookPeriodRepository = Graph.GetService <IFABookPeriodRepository>(); int?sourceOrganizationID = PXAccess.GetParentOrganizationID(sourceBranchID); int?targetOrganizationID = PXAccess.GetParentOrganizationID(targetBranchID); // Mapped book period - first way: // FABookPeriod of sourceBranchID -> master book Period -> FABookPeriod of targetBranchID // ProcessingResult <FABookPeriod> targetFABookPeriod = faBookPeriodRepository.FindMappedFABookPeriod( bookID, sourceOrganizationID, sourcefinPeriodID, targetOrganizationID); // Mapped book period - second way: // finPeriodID of sourceBranchID -> masterFinPeriod -> FinPeriodID of targetBranchID -> FABookPeriod of targetBranchID // if (targetFABookPeriod.Result == null) { ProcessingResult <FABookPeriod> targetFABookPeriodSecondWay = faBookPeriodRepository.FindMappedFABookPeriodUsingFinPeriod( bookID, sourceOrganizationID, sourcefinPeriodID, targetOrganizationID); targetFABookPeriodSecondWay.RaiseIfHasError(); targetFABookPeriod = targetFABookPeriodSecondWay; } OrganizationFinPeriod period = finPeriodUtils.GetNearestOpenOrganizationFinPeriodInSubledger <TClosedInSubledgerField>(targetFABookPeriod.ThisOrRaiseIfHasError().Result); return(period); }
public void ValidateFinPeriod <T>(IEnumerable <T> records, Func <T, string> getFinPeriodID, Func <T, int?[]> getBranchIDs, Type fieldModuleClosed = null) { var recordsByPeriod = records.GroupBy(record => getFinPeriodID(record)); ProcessingResult generalResult = new ProcessingResult(); foreach (var recordsByPeriodGroup in recordsByPeriod) { int?[] orgnizationIDs = recordsByPeriodGroup .SelectMany(record => getBranchIDs(record).Select(PXAccess.GetParentOrganizationID)) .Distinct() .ToArray(); ValidateFinPeriod(recordsByPeriodGroup.Key, orgnizationIDs, fieldModuleClosed, generalResult); } generalResult.RaiseIfHasError(); }