/// <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); } } }
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; } }
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); } } } }
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())); } } }