예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
        }