예제 #1
0
        private static ProcessingResult ValidateFinPeriods(GLBudgetEntry graph, IEnumerable <GLBudgetLineDetail> records)
        {
            ProcessingResult generalResult = new ProcessingResult();

            var recordsByPeriod = records.GroupBy(record => record.FinPeriodID);

            foreach (var recordsByPeriodGroup in recordsByPeriod)
            {
                string finPeriodID = recordsByPeriodGroup.Key;

                int?[] orgnizationIDs = recordsByPeriodGroup.GroupBy(t => PXAccess.GetParentOrganizationID(t.BranchID))
                                        .Select(g => g.Key)
                                        .ToArray();

                ICollection <OrganizationFinPeriod> finPeriods =
                    PXSelect <OrganizationFinPeriod,
                              Where <OrganizationFinPeriod.organizationID, In <Required <OrganizationFinPeriod.organizationID> >,
                                     And <OrganizationFinPeriod.finPeriodID, Equal <Required <OrganizationFinPeriod.finPeriodID> > > > >
                    .Select(graph, orgnizationIDs, finPeriodID)
                    .RowCast <OrganizationFinPeriod>()
                    .ToArray();

                if (finPeriods.Count != orgnizationIDs.Length)
                {
                    string[] organizationCDs = orgnizationIDs.Except(finPeriods.Select(period => period.OrganizationID))
                                               .Select(PXAccess.GetOrganizationCD)
                                               .ToArray();

                    generalResult.AddErrorMessage(Messages.FinPeriodDoesNotExistForCompanies,
                                                  FinPeriodIDFormattingAttribute.FormatForError(finPeriodID),
                                                  organizationCDs.JoinIntoStringForMessageNoQuotes(20));
                }

                foreach (OrganizationFinPeriod finPeriod in finPeriods)
                {
                    ProcessingResult result = new ProcessingResult();
                    if (finPeriod.Status == FinPeriod.status.Locked)
                    {
                        result.AddErrorMessage(Messages.FinPeriodIsLockedInCompany,
                                               FinPeriodIDFormattingAttribute.FormatForError(finPeriod.FinPeriodID),
                                               PXAccess.GetOrganizationCD(finPeriod.OrganizationID));
                    }

                    generalResult.Aggregate(result);

                    if (generalResult.Messages.Count > 20)
                    {
                        return(generalResult);
                    }
                }
            }
            return(generalResult);
        }
예제 #2
0
        protected virtual ProcessingResult HandleErrorThatPeriodIsClosed(IFinPeriod finPeriod)
        {
            ProcessingResult result = new ProcessingResult();

            if (!CanPostToClosedPeriod())
            {
                result.AddErrorMessage(Messages.FinPeriodIsClosedInCompany,
                                       FinPeriodIDFormattingAttribute.FormatForError(finPeriod.FinPeriodID),
                                       PXAccess.GetOrganizationCD(finPeriod.OrganizationID));
            }

            return(result);
        }
예제 #3
0
        public virtual ProcessingResult CanPostToPeriod(IFinPeriod finPeriod, Type fieldModuleClosed = null)
        {
            ProcessingResult result = new ProcessingResult();

            if (finPeriod.Status == FinPeriod.status.Locked)
            {
                result.AddErrorMessage(Messages.FinPeriodIsLockedInCompany,
                                       FinPeriodIDFormattingAttribute.FormatForError(finPeriod.FinPeriodID),
                                       PXAccess.GetOrganizationCD(finPeriod.OrganizationID));

                return(result);
            }

            if (AllowPostToUnlockedPeriodAnyway)
            {
                return(result);
            }

            if (finPeriod.Status == FinPeriod.status.Inactive)
            {
                result.AddErrorMessage(Messages.FinPeriodIsInactiveInCompany,
                                       FinPeriodIDFormattingAttribute.FormatForError(finPeriod.FinPeriodID),
                                       PXAccess.GetOrganizationCD(finPeriod.OrganizationID));

                return(result);
            }

            if (finPeriod.Status == FinPeriod.status.Closed)
            {
                result = HandleErrorThatPeriodIsClosed(finPeriod);

                if (result.HasWarningOrError)
                {
                    return(result);
                }
            }

            if (fieldModuleClosed != null)
            {
                PXCache cache = Graph.Caches[BqlCommand.GetItemType(fieldModuleClosed)];

                bool?isClosedInModule = (bool)cache.GetValue(finPeriod, fieldModuleClosed.Name);

                if (isClosedInModule == true)
                {
                    result = HandleErrorThatPeriodIsClosed(finPeriod);
                }
            }

            return(result);
        }
        private void ValidateNotMainRowLevelSources(PXCache cache, object oldRow, object newRow, bool externalCall, FinPeriod newMainOrgFinPeriod)
        {
            ValidationResult validationResult = ValidateRowLevelSources(
                CalendarOrganizationIDProvider,
                cache,
                newRow,
                organizationID => FinPeriodRepository
                .GetFinPeriodByMasterPeriodID(organizationID, newMainOrgFinPeriod.MasterFinPeriodID).IsSuccess,
                skipMain: true);

            if (validationResult.HasErrors)
            {
                foreach (var branchValue in validationResult.BranchValuesWithErrors)
                {
                    if (branchValue.SpecificationItem.BranchSourceType != null &&
                        (branchValue.SpecificationItem.BranchSourceFormulaType != null ||
                         PXAccess.FeatureInstalled <FeaturesSet.branch>()))
                    {
                        PXCache branchCache = cache.Graph.Caches[BqlCommand.GetItemType(branchValue.SpecificationItem.BranchSourceType)];
                        object  newBranch   = branchCache.GetItemType().IsAssignableFrom(newRow.GetType())
                                                        ? newRow
                                                        : branchCache.Current;
                        object oldBranch = branchCache.GetItemType().IsAssignableFrom(oldRow.GetType())
                                                        ? oldRow
                                                        : branchCache.Current;

                        string organizationCD =
                            PXAccess.GetOrganizationCD(
                                PXAccess.GetParentOrganizationID(branchValue.SourceBranchIDs.Single()));

                        var exception = new PXSetPropertyException(
                            Messages.RelatedFinPeriodForMasterDoesNotExistForCompany,
                            FormatForError(newMainOrgFinPeriod.MasterFinPeriodID),
                            organizationCD);

                        SetErrorAndResetToOldForField(
                            branchCache,
                            oldBranch,
                            newBranch,
                            branchValue.SpecificationItem.BranchSourceType.Name,
                            exception,
                            externalCall);
                    }
                }
            }
        }
        protected virtual FinPeriod GetAndValidateMainFinPeriod(PXCache cache, object oldRow, object newRow, bool externalCall)
        {
            int?newMainCalendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, newRow);
            int?oldMainCalendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, oldRow);

            string    newMainOrgFinPeriodID = null;
            FinPeriod newMainOrgFinPeriod   = null;

            newMainOrgFinPeriodID = (string)cache.GetValue(newRow, _FieldName);

            if (newMainOrgFinPeriodID == null)
            {
                return(null);
            }

            newMainOrgFinPeriod = FinPeriodRepository.FindByID(newMainCalendarOrgID, newMainOrgFinPeriodID);

            if (newMainOrgFinPeriod == null)
            {
                string errorMessage = null;

                if (newMainCalendarOrgID == FinPeriod.organizationID.MasterValue)
                {
                    errorMessage = PXMessages.LocalizeFormatNoPrefix(Messages.MasterFinPeriodDoesNotExist,
                                                                     FormatForError(newMainOrgFinPeriodID));
                }
                else
                {
                    errorMessage = PXMessages.LocalizeFormatNoPrefix(
                        Messages.FinPeriodDoesNotExistForCompany,
                        FormatForError(newMainOrgFinPeriodID),
                        PXAccess.GetOrganizationCD(newMainCalendarOrgID));
                }

                SetErrorAndResetForMainFields(cache, oldRow, newRow, oldMainCalendarOrgID, newMainCalendarOrgID, externalCall,
                                              new PXSetPropertyException(errorMessage));

                return(null);
            }

            return(newMainOrgFinPeriod);
        }
예제 #6
0
        protected virtual OrganizationFinPeriod GetNearestOpenOrganizationFinPeriodInSubledgerByOrganization <TClosedInSubledgerField>(string orgFinPeriodID, int?organizationID, Func <bool> additionalCondition = null)
            where TClosedInSubledgerField : IBqlField
        {
            OrganizationFinPeriod orgFinPeriod = PXSelect <
                OrganizationFinPeriod,
                Where <OrganizationFinPeriod.finPeriodID, GreaterEqual <Required <OrganizationFinPeriod.finPeriodID> >,
                       And <OrganizationFinPeriod.organizationID, Equal <Required <OrganizationFinPeriod.organizationID> >,
                            And <TClosedInSubledgerField, NotEqual <True>,
                                 And <OrganizationFinPeriod.startDate, NotEqual <OrganizationFinPeriod.endDate> > > > >,
                OrderBy <Asc <OrganizationFinPeriod.finPeriodID> > >
                                                 .SelectWindowed(Graph, 0, 1, orgFinPeriodID, organizationID);

            if (orgFinPeriod == null && (additionalCondition == null || additionalCondition()))
            {
                throw new PXException(
                          Messages.NoOpenPeriodInOrganization,
                          PXAccess.GetOrganizationCD(organizationID));
            }
            return(orgFinPeriod);
        }
예제 #7
0
        public virtual OrganizationFinPeriod GetOpenOrganizationFinPeriodInSubledger <TClosedInSubledgerField>(string orgFinPeriodID, int?branchID)
            where TClosedInSubledgerField : IBqlField
        {
            int?organizationID = PXAccess.GetParentOrganizationID(branchID);
            OrganizationFinPeriod orgFinPeriod = PXSelect <
                OrganizationFinPeriod,
                Where <OrganizationFinPeriod.finPeriodID, Equal <Required <OrganizationFinPeriod.finPeriodID> >,
                       And <OrganizationFinPeriod.organizationID, Equal <Required <OrganizationFinPeriod.organizationID> >,
                            And <TClosedInSubledgerField, NotEqual <True> > > > >
                                                 .SelectWindowed(Graph, 0, 1, orgFinPeriodID, organizationID);

            if (orgFinPeriod == null)
            {
                throw new PXException(
                          Messages.FiscalPeriodClosedInOrganization,
                          FinPeriodIDFormattingAttribute.FormatForError(orgFinPeriodID),
                          PXAccess.GetOrganizationCD(organizationID));
            }
            return(orgFinPeriod);
        }
예제 #8
0
        public virtual ProcessingResult <FinPeriod> GetFinPeriodByMasterPeriodID(int?organizationID, string masterFinPeriodID)
        {
            FinPeriod period = PXSelect <FinPeriod,
                                         Where <FinPeriod.organizationID, Equal <Required <FinPeriod.organizationID> >,
                                                And <FinPeriod.masterFinPeriodID, Equal <Required <FinPeriod.masterFinPeriodID> > > > >
                               .Select(Graph, organizationID, masterFinPeriodID);

            var result = ProcessingResult <FinPeriod> .CreateSuccess(period);

            if (period == null)
            {
                string errorMessage = PXMessages.LocalizeFormatNoPrefix(
                    Messages.RelatedFinPeriodsForMasterDoesNotExistForCompany,
                    PeriodIDAttribute.FormatForError(masterFinPeriodID),
                    PXAccess.GetOrganizationCD(organizationID));

                result.AddErrorMessage(errorMessage);
            }

            return(result);
        }
        public virtual ProcessingResult <FABookPeriod> FindMappedFABookPeriodUsingFinPeriod(int?bookID, int?sourceOrganizationID, string sourcefinPeriodID, int?targetOrganizationID)
        {
            IFinPeriodRepository finPeriodRepository = Graph.GetService <IFinPeriodRepository>();

            string       targetFinPeriodID  = finPeriodRepository.GetMappedPeriod(sourceOrganizationID, sourcefinPeriodID, targetOrganizationID)?.FinPeriodID;
            FABookPeriod targetFABookPeriod = FindByKey(bookID, targetOrganizationID, targetFinPeriodID);

            ProcessingResult <FABookPeriod> result = ProcessingResult <FABookPeriod> .CreateSuccess(targetFABookPeriod);

            if (targetFABookPeriod == null)
            {
                string errorMessage = PXMessages.LocalizeFormat(
                    Messages.PeriodDoesNotExistForBookAndCompany,
                    PeriodIDAttribute.FormatForError(sourcefinPeriodID),
                    FindFABook(bookID).BookCode,
                    PXAccess.GetOrganizationCD(sourceOrganizationID));

                result.AddErrorMessage(errorMessage);
            }

            return(result);
        }
        public virtual ProcessingResult <FABookPeriod> FindMappedFABookPeriod(int?bookID, int?sourceOrganizationID, string sourcefinPeriodID, int?targetOrganizationID)
        {
            FABookPeriod sourceFABookPeriod = FindByKey(bookID, sourceOrganizationID, sourcefinPeriodID);

            ProcessingResult <FABookPeriod> result = ProcessingResult <FABookPeriod> .CreateSuccess(sourceFABookPeriod);

            if (sourceFABookPeriod == null)
            {
                string errorMessage = PXMessages.LocalizeFormat(
                    Messages.PeriodDoesNotExistForBookAndCompany,
                    PeriodIDAttribute.FormatForError(sourcefinPeriodID),
                    FindFABook(bookID).BookCode,
                    PXAccess.GetOrganizationCD(sourceOrganizationID));

                result.AddErrorMessage(errorMessage);
            }
            else if (IsPostingFABook(bookID) && sourceOrganizationID != targetOrganizationID)
            {
                result = GetFABookPeriodByMasterPeriodID(bookID, targetOrganizationID, sourceFABookPeriod?.MasterFinPeriodID);
            }

            return(result);
        }
        public virtual ProcessingResult <FABookPeriod> GetFABookPeriodByMasterPeriodID(int?bookID, int?organizationID, string masterFinPeriodID)
        {
            FABookPeriod period = SelectFrom <FABookPeriod>
                                  .Where <FABookPeriod.bookID.IsEqual <@P.AsInt>
                                          .And <FABookPeriod.organizationID.IsEqual <@P.AsInt> >
                                          .And <FABookPeriod.masterFinPeriodID.IsEqual <@P.AsString> > >
                                  .View
                                  .ReadOnly
                                  .Select(Graph, bookID, organizationID, masterFinPeriodID);

            ProcessingResult <FABookPeriod> result = ProcessingResult <FABookPeriod> .CreateSuccess(period);

            if (period == null)
            {
                string errorMessage = PXMessages.LocalizeFormatNoPrefix(
                    GL.Messages.RelatedFinPeriodsForMasterDoesNotExistForCompany,
                    PeriodIDAttribute.FormatForError(masterFinPeriodID),
                    PXAccess.GetOrganizationCD(organizationID));

                result.AddErrorMessage(errorMessage);
            }

            return(result);
        }
		public virtual ProcessingResult CheckFinPeriod(string finPeriodID, int? branchID)
		{
			ProcessingResult result = new ProcessingResult();
			int? organizationID = PXAccess.GetParentOrganizationID(branchID);
			FinPeriod period = FinPeriodRepository.FindByID(organizationID, finPeriodID);

			if (period == null)
			{
				result.AddErrorMessage(GL.Messages.FinPeriodDoesNotExistForCompany,
						FinPeriodIDFormattingAttribute.FormatForError(finPeriodID),
						PXAccess.GetOrganizationCD(PXAccess.GetParentOrganizationID(branchID)));
			}
			else
			{
				result = FinPeriodUtils.CanPostToPeriod(period);
			}

			if (!result.IsSuccess)
			{
				PXProcessing<THistory>.SetError(new PXException(result.GetGeneralMessage()));
			}

			return result;
		}
예제 #13
0
 public object GetOrganizationCDByID(object organizationID)
 {
     return(PXAccess.GetOrganizationCD((int?)organizationID));
 }
예제 #14
0
        protected override void ValidatePeriodAndSourcesImpl(PXCache cache, object oldRow, object newRow, bool externalCall)
        {
            PeriodKeyProviderBase.KeyWithSourceValuesCollection <
                FABookPeriodKeyProvider.FAKeyWithSourceValues,
                FABookPeriodKeyProvider.FASourceSpecificationItem,
                FABookPeriod.Key> newKeyWithSourceValues =
                FABookPeriodKeyProvider.GetKeys(cache.Graph, cache, newRow);

            PeriodKeyProviderBase.KeyWithSourceValuesCollection <
                FABookPeriodKeyProvider.FAKeyWithSourceValues,
                FABookPeriodKeyProvider.FASourceSpecificationItem,
                FABookPeriod.Key> oldKeyWithSourceValues =
                FABookPeriodKeyProvider.GetKeys(cache.Graph, cache, oldRow);

            FABookPeriod.Key newPeriodKey = newKeyWithSourceValues.ConsolidatedKey;

            newPeriodKey.PeriodID = (string)cache.GetValue(newRow, _FieldName);

            if (!newPeriodKey.Defined)
            {
                return;
            }

            IFABookPeriodRepository periodRepository = cache.Graph.GetService <IFABookPeriodRepository>();

            FABookPeriod period = periodRepository.FindByKey(newPeriodKey.BookID, newPeriodKey.OrganizationID,
                                                             newPeriodKey.PeriodID);

            if (period == null)
            {
                PXSetPropertyException exception = null;

                FABook book = BookMaint.FindByID(cache.Graph, newPeriodKey.BookID);

                if (book.UpdateGL == true)
                {
                    exception = new PXSetPropertyException(PXMessages.LocalizeFormatNoPrefix(
                                                               Messages.PeriodDoesNotExistForBookAndCompany,
                                                               FormatForError(newPeriodKey.PeriodID),
                                                               book.BookCode,
                                                               PXAccess.GetOrganizationCD(newPeriodKey.OrganizationID)));

                    if (FAMainSpecificationItem.OrganizationSourceType != null &&
                        newKeyWithSourceValues.MainItem.SourceOrganizationIDs.First() != null &&
                        newKeyWithSourceValues.MainItem.SourceOrganizationIDs.First() != oldKeyWithSourceValues.MainItem.SourceOrganizationIDs.First())
                    {
                        SetErrorAndResetToOldForField(
                            cache,
                            oldRow,
                            newRow,
                            FAMainSpecificationItem.OrganizationSourceType.Name,
                            exception,
                            externalCall);
                    }

                    if (FAMainSpecificationItem.BranchSourceType != null &&
                        newKeyWithSourceValues.MainItem.SourceBranchIDs.First() != null &&
                        newKeyWithSourceValues.MainItem.SourceBranchIDs.First() != oldKeyWithSourceValues.MainItem.SourceBranchIDs.First())
                    {
                        SetErrorAndResetToOldForField(
                            cache,
                            oldRow,
                            newRow,
                            FAMainSpecificationItem.BranchSourceType.Name,
                            exception,
                            externalCall);
                    }

                    if (FAMainSpecificationItem.AssetSourceType != null &&
                        newKeyWithSourceValues.MainItem.SourceAssetIDs.First() != null &&
                        newKeyWithSourceValues.MainItem.SourceAssetIDs.First() != oldKeyWithSourceValues.MainItem.SourceAssetIDs.First())
                    {
                        SetErrorAndResetToOldForField(
                            cache,
                            oldRow,
                            newRow,
                            FAMainSpecificationItem.AssetSourceType.Name,
                            exception,
                            externalCall);
                    }
                }
                else
                {
                    exception = new PXSetPropertyException(PXMessages.LocalizeFormatNoPrefix(
                                                               Messages.PeriodDoesNotExistForBook,
                                                               FormatForError(newPeriodKey.PeriodID)));
                }

                cache.RaiseExceptionHandling(
                    _FieldName,
                    newRow,
                    FormatForDisplay(newPeriodKey.PeriodID),
                    exception);

                cache.SetValue(
                    newRow,
                    _FieldName,
                    cache.GetValue(oldRow, _FieldName));

                if (FAMainSpecificationItem.BookSourceType != null &&
                    newKeyWithSourceValues.MainItem.SourceBookIDs.First() != null &&
                    newKeyWithSourceValues.MainItem.SourceBookIDs.First() != oldKeyWithSourceValues.MainItem.SourceBookIDs.First())
                {
                    SetErrorAndResetToOldForField(
                        cache,
                        oldRow,
                        newRow,
                        FAMainSpecificationItem.BookSourceType.Name,
                        exception,
                        externalCall);
                }
            }
        }
예제 #15
0
        protected virtual void FAOrganizationBook_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
        {
            FAOrganizationBook book = (FAOrganizationBook)e.Row;

            if (book == null)
            {
                return;
            }

            PXSetPropertyException disableRowException = null;
            FABookYearSetup        setup = PXSelect <FABookYearSetup, Where <FABookYearSetup.bookID, Equal <Current <FAOrganizationBook.bookID> > > > .SelectSingleBound(this, new object[] { book });

            if (setup == null && book.UpdateGL != true)
            {
                disableRowException = new PXSetPropertyException(Messages.CalendarSetupNotFound, PXErrorLevel.RowWarning, book.BookCode);
            }

            OrganizationFinYear nearestFinYear = FinPeriodRepository.FindNearestOrganizationFinYear(book.OrganizationID, "1900");

            if (disableRowException == null &&
                book.OrganizationID != FinPeriod.organizationID.MasterValue &&
                book.UpdateGL == true &&
                nearestFinYear == null)
            {
                disableRowException = new PXSetPropertyException(GL.Messages.OrganizationCalendarDoesNotExist, PXErrorLevel.RowWarning, PXAccess.GetOrganizationCD(book.OrganizationID));
            }

            if (disableRowException != null)
            {
                PXUIFieldAttribute.SetEnabled <FAOrganizationBook.selected>(sender, book, false);
                sender.RaiseExceptionHandling <FAOrganizationBook.selected>(book, null, disableRowException);
            }
        }