/// <summary> /// if value is PropertyItem and parameter is NumberRangeType /// return the values by NumberRangeType /// </summary> /// <param name="value"></param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns></returns> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { PropertyItem propertyItem = value as PropertyItem; if (propertyItem != null && parameter is NumberRangeType) { NumberRangeType rangeType = (NumberRangeType)parameter; //just "NumberRange" string metadataName = nameof(NumberRangeAttribute).Replace(nameof(Attribute), string.Empty); NumberRangeAttribute rangeAttribute = propertyItem.Metadata[metadataName] as NumberRangeAttribute; if (rangeAttribute != null) { switch (rangeType) { case NumberRangeType.Minimum: return(rangeAttribute.Minimum); case NumberRangeType.Maximum: return(rangeAttribute.Maximum); case NumberRangeType.Tick: return(rangeAttribute.Tick); case NumberRangeType.Precision: return(rangeAttribute.Precision); } } } return(value); }
private async Task <Entities.System.NumberRanges.NumberRange> CreateDefault(NumberRangeType rangeType) { var numberRange = new Entities.System.NumberRanges.NumberRange { RangeType = rangeType }; //make configurable switch (rangeType) { case NumberRangeType.Cheque: numberRange.Prefix = "01"; break; case NumberRangeType.Savings: numberRange.Prefix = "TXN"; break; default: throw new ArgumentOutOfRangeException(nameof(rangeType), rangeType, null); } await _db.NumberRanges.AddAsync(numberRange); await _db.SaveChangesAsync(); return(numberRange); }
private async Task <Entities.System.NumberRanges.NumberRange> GetNumberRange(NumberRangeType rangeType) { var numberRange = await _db.NumberRanges.SingleOrDefaultAsync(range => range.RangeType == rangeType); if (numberRange == null) { numberRange = await CreateDefault(rangeType); } return(numberRange); }
public async Task <string> GetNextValue(NumberRangeType rangeType) { var nextValue = await GetLastValue(rangeType) + 1; while (await Exists(nextValue, rangeType)) { nextValue = await GetLastValue(rangeType) + 1; } var numberRange = await GetNumberRange(rangeType); numberRange.LastValue = nextValue; await _db.SaveChangesAsync(); var paddedNextVal = nextValue.ToString($"D{numberRange.RangeEnd.ToString().Length}"); var nextValWithLuhn = ClsLuhnLibrary.WithLuhn_Base10(paddedNextVal); return(nextValWithLuhn); }
private async Task <int> GetLastValue(NumberRangeType rangeType) { var numberRange = await GetNumberRange(rangeType); return(numberRange.LastValue); }
private async Task <bool> Exists(int value, NumberRangeType rangeType) { return(await _db.NumberRanges.AnyAsync(range => range.RangeType == rangeType && range.LastValue == value)); }