Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        private async Task <int> GetLastValue(NumberRangeType rangeType)
        {
            var numberRange = await GetNumberRange(rangeType);

            return(numberRange.LastValue);
        }
Exemplo n.º 6
0
 private async Task <bool> Exists(int value, NumberRangeType rangeType)
 {
     return(await _db.NumberRanges.AnyAsync(range => range.RangeType == rangeType && range.LastValue == value));
 }