public virtual string CalcFinPeriodIDForMaster(PXCache cache, object row, string masterFinPeriodID)
 {
     return(FinPeriodRepository
            .GetFinPeriodByMasterPeriodID(
                CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, row),
                masterFinPeriodID)
            .Result
            ?.FinPeriodID);
 }
        protected override void ValidatePeriodAndSourcesImpl(PXCache cache, object oldRow, object newRow,
                                                             bool externalCall)
        {
            int?newMainCalendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, newRow);
            int?oldMainCalendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, oldRow);

            if (HeaderMasterFinPeriodIDType != null && CalculatePeriodByHeader)
            {
                if (newMainCalendarOrgID != oldMainCalendarOrgID)
                {
                    string headerMasterPeriodID = GetHeaderMasterFinPeriodID(cache, newRow);

                    if (headerMasterPeriodID != null)
                    {
                        ProcessingResult <FinPeriod> procResult = FinPeriodRepository.GetFinPeriodByMasterPeriodID(newMainCalendarOrgID, headerMasterPeriodID);

                        if (!procResult.IsSuccess)
                        {
                            SetErrorAndResetToOldForField(
                                cache,
                                oldRow,
                                newRow,
                                CalendarOrganizationIDProvider.GetSourcesSpecification(cache, newRow).MainSpecificationItem.BranchSourceType.Name,
                                new PXSetPropertyException(procResult.GetGeneralMessage()),
                                externalCall);
                        }
                    }
                }
            }
            else
            {
                FinPeriod newMainOrgFinPeriod = GetAndValidateMainFinPeriod(cache, oldRow, newRow, externalCall);

                if (newMainOrgFinPeriod == null)
                {
                    return;
                }

                ValidateRelatedToMainFinPeriods(cache, oldRow, newRow, externalCall, newMainCalendarOrgID, oldMainCalendarOrgID, newMainOrgFinPeriod);

                ValidateNotMainRowLevelSources(cache, oldRow, newRow, externalCall, newMainOrgFinPeriod);
            }
        }
        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);
        }
        protected override void RedefaultPeriodID(PXCache cache, object row)
        {
            if (HeaderMasterFinPeriodIDType != null)
            {
                if (CalculatePeriodByHeader)
                {
                    string newFinPeriodID = null;

                    int?calendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, row);

                    if (calendarOrgID != null)
                    {
                        FinPeriod orgFinPeriod =
                            FinPeriodRepository.GetFinPeriodByMasterPeriodID(
                                calendarOrgID,
                                GetHeaderMasterFinPeriodID(cache, row))
                            .Result;

                        if (orgFinPeriod != null)
                        {
                            newFinPeriodID = FormatForDisplay(orgFinPeriod.FinPeriodID);
                        }
                    }

                    cache.SetValueExt(row, _FieldName, newFinPeriodID);
                }
            }
            else
            {
                base.RedefaultPeriodID(cache, row);

                if (AutoCalculateMasterPeriod)
                {
                    SetMasterPeriodID(cache, row);
                }
            }
        }
        public virtual string CalcMasterPeriodID(PXCache cache, object row)
        {
            string finPeriodID;

            finPeriodID = (string)cache.GetValue(row, _FieldName);

            int?calendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(cache.Graph, cache, row);

            if (calendarOrgID == FinPeriod.organizationID.MasterValue)
            {
                return(finPeriodID);
            }

            string masterFinPeriodID = null;

            if (finPeriodID != null)
            {
                FinPeriod orgFinPeriod = FinPeriodRepository.FindByID(calendarOrgID, finPeriodID);

                masterFinPeriodID = orgFinPeriod?.MasterFinPeriodID;
            }

            return(masterFinPeriodID);
        }
        public override void FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
        {
            SetUseMasterCalendarValue(sender, e.Row);

            if (HeaderMasterFinPeriodIDType != null && CalculatePeriodByHeader)
            {
                int?calendarOrgID = CalendarOrganizationIDProvider.GetCalendarOrganizationID(sender.Graph, sender, e.Row);

                FinPeriod orgFinPeriod =
                    FinPeriodRepository.GetFinPeriodByMasterPeriodID(
                        calendarOrgID,
                        GetHeaderMasterFinPeriodID(sender, e.Row))
                    .Result;

                if (orgFinPeriod != null)
                {
                    e.NewValue = FormatForDisplay(orgFinPeriod.FinPeriodID);
                }
            }
            else
            {
                base.FieldDefaulting(sender, e);
            }
        }