/// <summary>
        /// Checks whether the specified numbering subsequences can intersect.
        /// </summary>
        /// <returns>If the specified numbering subsequences can intersect, the method returns <tt>True</tt>;
        /// otherwise, the method returns <tt>False</tt>.</returns>
        protected static bool CanSequencesIntersect(NumberingSequence firstSequence, NumberingSequence secondSequence)
        {
            string firstStart  = null;
            string firstMask   = MakeMask(firstSequence.StartNbr, ref firstStart);
            string secondStart = null;
            string secondMask  = MakeMask(secondSequence.StartNbr, ref secondStart);

            if (firstMask != secondMask)
            {
                return(false);
            }

            string firstEnd = null;

            MakeMask(firstSequence.EndNbr, ref firstEnd);
            string secondEnd = null;

            MakeMask(secondSequence.EndNbr, ref secondEnd);
            long firstStartNbr  = long.Parse(firstStart);
            long firstEndNbr    = long.Parse(firstEnd);
            long secondStartNbr = long.Parse(secondStart);
            long secondEndNbr   = long.Parse(secondEnd);

            if ((firstStartNbr >= secondStartNbr && firstStartNbr <= secondEndNbr) || (secondStartNbr >= firstStartNbr && secondStartNbr <= firstEndNbr))
            {
                return(true);
            }
            return(false);
        }
		protected virtual void NumberingSequence_LastNbr_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
		{
			NumberingSequence row = e.Row as NumberingSequence;
			if (row != null)
			{
				if (string.IsNullOrEmpty(row.LastNbr) && !string.IsNullOrEmpty(row.StartNbr))
				{
					char[] startNumber = row.StartNbr.ToCharArray();
					char lastChar = startNumber[startNumber.GetUpperBound(0)];

					if (char.IsDigit(lastChar))
					{
						int digit = int.Parse(new string(new char[1] { lastChar }));

						if (digit > 0)
						{
							startNumber[startNumber.GetUpperBound(0)] = (digit - 1).ToString().ToCharArray()[0];
						}

					}

					row.LastNbr = new string(startNumber);
				}
			}
		}
		protected virtual void NumberingSequence_WarnNbr_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
		{
			NumberingSequence row = e.Row as NumberingSequence;
			if (row != null)
			{
				if (!string.IsNullOrEmpty(row.EndNbr) && string.IsNullOrEmpty(row.WarnNbr))
				{
					if (row.EndNbr.Length >= 3)
					{
						if (char.IsDigit(row.EndNbr[row.EndNbr.Length - 1]) &&
							char.IsDigit(row.EndNbr[row.EndNbr.Length - 2]) &&
							char.IsDigit(row.EndNbr[row.EndNbr.Length - 3])
							)
						{
							int number = int.Parse(row.EndNbr.Substring(row.EndNbr.Length - 3, 3));

							if (number > 100)
							{
								int warningNumber = number - 100;

								string str = string.Format("{0:000}", warningNumber);
								row.WarnNbr = row.EndNbr.Substring(0, row.EndNbr.Length - 3) + str;
							}

						}
					}
				}
			}
		}
		protected virtual void NumberingSequence_EndNbr_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
		{
			NumberingSequence row = e.Row as NumberingSequence;
			if (row != null)
			{

				if (!string.IsNullOrEmpty(row.StartNbr) && string.IsNullOrEmpty(row.EndNbr))

				{
					char[] result = row.StartNbr.ToCharArray();

					for (int i = result.Length - 1; i >= 0; i--)
					{
						if (char.IsDigit(result[i]))
						{
							result[i] = '9';
						}
						else
							break;
					}

					row.EndNbr = new string(result);
				}
			}
		}
Exemplo n.º 5
0
        private void CheckNumbers(PXCache cache, object row)
        {
            NumberingSequence currow = row as NumberingSequence;

            if (currow == null)
            {
                return;
            }

            currow.StartNbr = currow.StartNbr.SafeTrimStart();
            currow.EndNbr   = currow.EndNbr.SafeTrimStart();
            currow.LastNbr  = currow.LastNbr.SafeTrimStart();
            currow.WarnNbr  = currow.WarnNbr.SafeTrimStart();

            string nbr    = null;
            string s_mask = (currow.StartNbr == null) ? null : NumberingDetector.MakeMask(currow.StartNbr, ref nbr);
            string s_nbr  = nbr;
            string e_mask = (currow.EndNbr == null) ? null : NumberingDetector.MakeMask(currow.EndNbr, ref nbr);
            string e_nbr  = nbr;
            string l_mask = (currow.LastNbr == null) ? null : NumberingDetector.MakeMask(currow.LastNbr, ref nbr);
            string l_nbr  = nbr;
            string w_mask = (currow.WarnNbr == null) ? null : NumberingDetector.MakeMask(currow.WarnNbr, ref nbr);
            string w_nbr  = nbr;

            if (s_mask != e_mask || l_mask != null && s_mask != l_mask || w_mask != null && s_mask != w_mask)
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.SameNumberingMask, PXErrorLevel.RowError));
                return;
            }
            if (currow.StartNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.StartNumMustBeGreaterEndNum, PXErrorLevel.RowError));
                return;
            }
            if (currow.WarnNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.WarnNumMustBeLessEndNum, PXErrorLevel.RowError));
                return;
            }
            if (currow.WarnNbr?.CompareTo(currow.StartNbr) <= 0)
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.WarnNumMustBeGreaterStartNum, PXErrorLevel.RowError));
                return;
            }
            if (currow.LastNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.LastNumMustBeLessEndNum, PXErrorLevel.RowError));
                return;
            }
            if (currow.LastNbr?.CompareTo(currow.StartNbr) < 0 && !EqualLastAndStartMinusOne(s_nbr, l_nbr))
            {
                cache.RaiseExceptionHandling <NumberingSequence.numberingID>(currow, currow.NumberingID, new PXSetPropertyException(Messages.LastNumMustBeGreaterOrEqualStartNum, PXErrorLevel.RowError));
                return;
            }
        }
Exemplo n.º 6
0
        private void CheckNumbers(object row)
        {
            NumberingSequence currow = row as NumberingSequence;

            if (currow == null)
            {
                return;
            }

            currow.StartNbr = currow.StartNbr.SafeTrimStart();
            currow.EndNbr   = currow.EndNbr.SafeTrimStart();
            currow.LastNbr  = currow.LastNbr.SafeTrimStart();
            currow.WarnNbr  = currow.WarnNbr.SafeTrimStart();

            string nbr    = null;
            string s_mask = (currow.StartNbr == null) ? null : NumberingDetector.MakeMask(currow.StartNbr, ref nbr);
            string s_nbr  = nbr;
            string e_mask = (currow.EndNbr == null) ? null : NumberingDetector.MakeMask(currow.EndNbr, ref nbr);
            string e_nbr  = nbr;
            string l_mask = (currow.LastNbr == null) ? null : NumberingDetector.MakeMask(currow.LastNbr, ref nbr);
            string l_nbr  = nbr;
            string w_mask = (currow.WarnNbr == null) ? null : NumberingDetector.MakeMask(currow.WarnNbr, ref nbr);
            string w_nbr  = nbr;

            if (s_mask != e_mask || l_mask != null && s_mask != l_mask || w_mask != null && s_mask != w_mask)
            {
                throw new PXException(Messages.SameNumberingMask);
            }
            if (currow.StartNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                throw new PXException(Messages.StartNumMustBeGreaterEndNum);
            }
            if (currow.WarnNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                throw new PXException(Messages.WarnNumMustBeLessEndNum);
            }
            if (currow.WarnNbr?.CompareTo(currow.StartNbr) <= 0)
            {
                throw new PXException(Messages.WarnNumMustBeGreaterStartNum);
            }
            if (currow.LastNbr?.CompareTo(currow.EndNbr) >= 0)
            {
                throw new PXException(Messages.LastNumMustBeLessEndNum);
            }
            if (currow.LastNbr?.CompareTo(currow.StartNbr) < 0 && !EqualLastAndStartMinusOne(s_nbr, l_nbr))
            {
                throw new PXException(Messages.LastNumMustBeGreaterOrEqualStartNum);
            }
        }
		protected virtual void NumberingSequence_StartDate_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
		{
			NumberingSequence row = e.Row as NumberingSequence;
			if (row != null)
			{
				if (row.StartDate == null)
				{
					PXResultset<NumberingSequence> resultset = PXSelect<NumberingSequence, Where<NumberingSequence.numberingID, Equal<Current<Numbering.numberingID>>>>.SelectWindowed(this, 0, 2);
					if (resultset.Count < 1)
					{
						row.StartDate = new DateTime(1900, 1, 1);
					}
				}
			}
		}
Exemplo n.º 8
0
        protected virtual void NumberingSequence_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
        {
            NumberingSequence num = (NumberingSequence)e.Row;

            foreach (PXResult <Dimension, Segment> r in PXSelectJoin <Dimension, InnerJoin <Segment, On <Segment.dimensionID, Equal <Dimension.dimensionID> > >, Where <Dimension.numberingID, Equal <Optional <Numbering.numberingID> >, And <Segment.autoNumber, Equal <Optional <Segment.autoNumber> > > > > .Select(this, ((NumberingSequence)e.Row).NumberingID, (bool)true))
            {
                Dimension dim    = r;
                Segment   segrow = r;

                if (num.StartNbr.Length != segrow.Length)
                {
                    cache.RaiseExceptionHandling <NumberingSequence.startNbr>(num, num.StartNbr, new PXSetPropertyException(Messages.NumberingViolatesSegmentDef, segrow.DimensionID, segrow.SegmentID.ToString()));
                }

                string mask = Regex.Replace(Regex.Replace(num.StartNbr, "[0-9]", "9"), "[^0-9]", "?");
                if (segrow.EditMask == "?" && mask.Contains("9") || segrow.EditMask == "9" && mask.Contains("?"))
                {
                    cache.RaiseExceptionHandling <NumberingSequence.startNbr>(num, num.StartNbr, new PXSetPropertyException(Messages.NumberingViolatesSegmentDef, segrow.DimensionID, segrow.SegmentID.ToString()));
                }
            }
        }