Пример #1
0
 /// <summary>
 /// 区域校验时是否忽略34两位行政区划编码
 /// </summary>
 /// <param name="kind"></param>
 /// <returns></returns>
 protected override bool AreaValidSkip34(VATKind kind)
 {
     if (kind == VATKind.Electronic)
     {//电子发票行政区划可能会具体到市级,吉林、安徽、山东、湖北 都发现具体到市级行政编号的情况,所以电子发票支持只查前2位行政区划
         return(true);
     }
     return(base.AreaValidSkip34(kind));
 }
Пример #2
0
        /// <summary>
        /// 生成增值税发票代码
        /// </summary>
        /// <param name="areaNumber"></param>
        /// <param name="year"></param>
        /// <param name="batch"></param>
        /// <param name="kind"></param>
        /// <returns></returns>
        protected override string GenerateVATCode(string areaNumber, string year, ushort batch, VATKind kind)
        {
            var query = _kindDic.Where(kv => kv.Value == kind);

            if (!query.Any())
            {
                throw new NotSupportedException(ErrorMessage.GenerateWrongKind);
            }
            var rdKind = query.OrderBy(g => Guid.NewGuid()).First().Key;

            return(string.Format("0{0}{1}{2}{3}", areaNumber, year, (batch % 1000).ToString().PadLeft(3, '0'), rdKind));
        }
 /// <summary>
 /// 按输入生成发票代码
 /// </summary>
 /// <param name="areaNumber"></param>
 /// <param name="year"></param>
 /// <param name="batch"></param>
 /// <param name="kind"></param>
 /// <returns></returns>
 protected abstract string GenerateVATCode(string areaNumber, string year, ushort batch, VATKind kind);
 /// <summary>
 /// 按输入生成发票代码
 /// </summary>
 /// <param name="areaNumber">行政区划代码</param>
 /// <param name="year">发票年份</param>
 /// <param name="batch">批次</param>
 /// <param name="kind">发票类型</param>
 /// <returns></returns>
 public virtual string GenerateVATCode(int areaNumber, ushort year, ushort batch, VATKind kind)
 {
     if (areaNumber < 10 || areaNumber > 9999)
     {
         throw new ArgumentException("argument error");
     }
     return(this.GenerateVATCode(areaNumber.ToString().PadRight(4, '0'), (year % 100).ToString().PadLeft(2, '0'), batch, kind));
 }
Пример #5
0
        /// <summary>
        /// 生成增值税发票代码
        /// </summary>
        /// <param name="areaNumber"></param>
        /// <param name="year"></param>
        /// <param name="batch"></param>
        /// <param name="kind"></param>
        /// <returns></returns>
        protected override string GenerateVATCode(string areaNumber, string year, ushort batch, VATKind kind)
        {
            var query = _kindDic.Where(kv => kv.Value == kind);

            if (!query.Any())
            {
                throw new NotSupportedException(ErrorMessage.GenerateWrongKind);
            }
            var rdKind = query.First().Key;

            return(string.Format("{0}{1}{2}{3}{4}0", areaNumber, year, (batch % 10).ToString(), rdKind, _duplicateDic[kind]));
        }
Пример #6
0
 /// <summary>
 /// 区域校验时是否忽略34两位行政区划编码
 /// </summary>
 protected virtual bool AreaValidSkip34(VATKind kind)
 {
     return(false);
 }
Пример #7
0
        /// <summary>
        /// 生成增值税发票代码(注意不支持生成区块链发票)
        /// </summary>
        /// <param name="areaNumber"></param>
        /// <param name="year"></param>
        /// <param name="batch"></param>
        /// <param name="kind"></param>
        /// <param name="electKind">如果发票种类为电子发票时,要生成的电子发票细分类型</param>
        /// <returns></returns>
        protected override string GenerateVATCode(string areaNumber, string year, ushort batch, VATKind kind, ElectronicVATKind?electKind)
        {
            if (electKind.HasValue && kind != VATKind.Electronic)
            {
                throw new ArgumentException($"{nameof(kind)} must be 'Electronic' while {nameof(electKind)} exist");
            }
            var query = _kindDic.Where(kv => kv.Value == kind);

            if (!query.Any())
            {
                throw new NotSupportedException(ErrorMessage.GenerateWrongKind);
            }
            var rdKind = query.OrderBy(g => Guid.NewGuid()).First().Key;

            if (electKind.HasValue)
            {
                rdKind = Convert.ToInt32(electKind).ToString();
            }
            return(string.Format("0{0}{1}{2}{3}", areaNumber, year, (batch % 1000).ToString().PadLeft(3, '0'), rdKind));
        }