예제 #1
0
        public IActionResult CalculateTax(string taxType, [FromBody] TaxCalculation taxCalcModel)
        {
            decimal tax = 0M;

            string  postalCode   = taxCalcModel.PostalCode;
            decimal annualIncome = taxCalcModel.AnnualIncome;

            switch (taxType)
            {
            case "Progressive":
                tax = _calculateTax.CalculateProgressiveTax(annualIncome);
                break;

            case "Flat Value":
                tax = _calculateTax.CalculateFlatValueTax(annualIncome);
                break;

            case "Flat Rate":
                tax = _calculateTax.CalculateFlatRateTax(annualIncome);
                break;
            }

            TaxCalculation calculation = new TaxCalculation()
            {
                AnnualIncome = annualIncome,
                PostalCode   = postalCode,
                TaxResult    = tax,
                Timestamp    = DateTime.Now
            };

            //Insert result in database
            _dataLayer.AddNewTaxCalculationResult(calculation);

            return(Ok(tax.ToString()));
        }
예제 #2
0
        public TaxCalculation Put([FromBody] TaxCalculation calculation)
        {
            calculation.CreatedDate = DateTime.UtcNow;
            _calculationComms.AddCalculation(calculation);

            return(calculation);
        }
예제 #3
0
        static void Main(string[] args)
        {
            ILogger        logger         = new XmlLogger();
            TaxCalculation taxCalculation = new TaxCalculation(logger);

            Console.WriteLine(taxCalculation.Calculation(10, 0));
        }
예제 #4
0
        public bool DeleteCalculation(TaxCalculation calculation)
        {
            _context.Attach(calculation).State = Microsoft.EntityFrameworkCore.EntityState.Deleted;
            _context.SaveChanges();

            return(true);
        }
예제 #5
0
        public (string, int) GetCalcTaxStageText()
        {
            switch (_calcTaxStage)
            {
            case 1:
                return("\U0001F4B5\U0001F4B6 Выберите валюту покупки автомобиля:", _calcTaxStage);

            case 2:
                return("\U0001F4C4 Введите стоимость автомобиля:", _calcTaxStage);

            case 3:
                return("\U000026FD Выберите тип двигателя:", _calcTaxStage);

            case 4:
                return((CarEngineType == EngineType.Electro) ? "\U0001F50B Введите ёмкость батареи (кВт/ч):" : "\U00002747 Введите объём двигателя (куб.см):", _calcTaxStage);

            case 5:
                return("\U0001F3AB Введите год выпуска автомобиля:", _calcTaxStage);

            case 6:
                return("\U0001F4B5\U0001F4B6 Выберите валюту транспортировки до границы Украины:", _calcTaxStage);

            case 7:
                return("\U0001F4C4 Введите цену транспортировки до границы Украины:", _calcTaxStage);

            default:
                string tax = TaxCalculation.CalculateTax(this);
                LogService.PrintLogText($"{_Customer.FirstName} {_Customer.LastName}", "calculated customs tax");
                return(tax, -1);
            }
        }
예제 #6
0
 public static void Go(Customer customer)
 {
     customer.TaxEuroForm = null;
     customer.ActionType  = ActionType.TaxCalculation;
     customer.TaxForm     = new TaxForm(customer);
     TaxCalculation.TaxCalculationProcess(Bot, customer);
 }
예제 #7
0
        static void Main(string[] args)
        {
            TaxCalculation txc = new TaxCalculation(LogType.XML);

            Console.WriteLine(txc.Calculate(10, 5));
            Console.WriteLine(txc.Calculate(0, 0));
            Console.Read();
        }
예제 #8
0
        public TaxCalculation AddCalculation(TaxCalculation calculation)
        {
            calculation.CalculatedTax = Math.Round(calculation.CalculatedTax, 2);
            calculation.Income        = Math.Round(calculation.Income, 2);
            _context.Add(calculation);
            _context.SaveChanges();

            return(calculation);
        }
예제 #9
0
            static void Main()
            {
                //call the dll
                TaxCalculation taxCalculation = new TaxCalculation();
                taxCalculation.CalculateTax(900000.00f);
                Console.Read();



            }
예제 #10
0
        public TaxCalculation TaxCalculationInspetor(TaxCalculation calculation, IQueryProvider <PostalCode> postalCodes
                                                     , IProgressiveTaxCalculator progressiveTaxCalculator, IFlatRateTaxCalculator flatRateTaxCalculator, IFlatValueTaxCalculator flatValueTaxCalculator)
        {
            var postalCode = calculation.PostalCode;

            var taxTypeId = postalCodes.Query.Where(i => i.CodeName == postalCode).First().TaxTypeId;

            calculation = TaxTypeSelector(calculation, (int)taxTypeId, progressiveTaxCalculator, flatRateTaxCalculator, flatValueTaxCalculator);

            return(calculation);
        }
예제 #11
0
        public TaxCalculation UpdateCalculation(TaxCalculation calculation)
        {
            calculation.CalculatedTax = Math.Round(calculation.CalculatedTax, 2);
            calculation.Income        = Math.Round(calculation.Income, 2);

            _context.Attach(calculation).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            _context.Update(calculation);
            _context.SaveChanges();

            return(calculation);
        }
예제 #12
0
        public bool Save(TaxCalculation taxCalculation)
        {
            _taxDbContext.TaxCalculation.Add(taxCalculation);
            var result = _taxDbContext.SaveChanges();

            if (result > double.Epsilon)
            {
                return(true);
            }

            return(false);
        }
예제 #13
0
        private async Task <int> SaveCalculation(int taxCalcTypeId, decimal annualIncome, decimal taxDue)
        {
            var taxCalculationResult = new TaxCalculation
            {
                AnnualIncome         = annualIncome,
                TaxCalculationTypeId = taxCalcTypeId,
                TaxDue = taxDue
            };

            var result = await _taxCalculationRepository.InsertOrUpdateTaxCalculationAsync(taxCalculationResult);

            return(result);
        }
예제 #14
0
        public TaxCalculation ProcessTax(TaxCalculation calculation)
        {
            if (calculation.Income >= 200000)
            {
                calculation.CalculatedTax = 10000;
            }
            else
            {
                calculation.CalculatedTax = GetActualTax((decimal)GetPercentage(5), calculation.Income);
            }

            return(calculation);
        }
예제 #15
0
        private async Task SaveCalculation(TaxCalculationRequest request, TaxCalculationResponse response, TaxYear taxYear)
        {
            var calculation = new TaxCalculation
            {
                AnnualIncome    = request.AnnualIncome,
                TaxAmount       = response.TaxAmount,
                CalculationType = response.CalculationType,
                CreatedBy       = request.RequestedBy,
                CreationDate    = _clock.GetCurrentDateTime(),
                PostalCode      = request.PostalCode,
                TaxYear         = taxYear
            };

            await _calculationRepository.AddAsync(calculation).ConfigureAwait(false);
        }
예제 #16
0
        public TaxCalculation TaxTypeSelector(TaxCalculation calculation, int taxTypeId
                                              , IProgressiveTaxCalculator progressiveTaxCalculator, IFlatRateTaxCalculator flatRateTaxCalculator, IFlatValueTaxCalculator flatValueTaxCalculator)
        {
            if ((TaxTypeEnum)taxTypeId == TaxTypeEnum.ProgressiveTax)
            {
                calculation = progressiveTaxCalculator.ProcessTax(calculation);
            }
            else if ((TaxTypeEnum)taxTypeId == TaxTypeEnum.FlatRateTax)
            {
                calculation = flatRateTaxCalculator.ProcessTax(calculation);
            }
            else if ((TaxTypeEnum)taxTypeId == TaxTypeEnum.FlatValueTax)
            {
                calculation = flatValueTaxCalculator.ProcessTax(calculation);
            }

            return(calculation);
        }
예제 #17
0
        public bool PublishMessage(TaxCalculation taxCalculation)
        {
            try
            {
                using (var channel = _rabbitConnection.Connect().CreateModel())
                {
                    var message = Newtonsoft.Json.JsonConvert.SerializeObject(taxCalculation);
                    var body    = Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(exchange: _setting.ExchangeName,
                                         routingKey: _setting.RoutingKey,
                                         basicProperties: null,
                                         body: body);
                }
            }
            catch (Exception)
            { return(false); }

            return(true);
        }
예제 #18
0
        public static void Go(Customer customer)
        {
            ActiveCustomersCollection.TryGetValue(customer.ChatId, out customer);
            if (customer == null)
            {
                return;
            }
            switch (customer.ActionType)
            {
            case ActionType.TaxCalculation:
                TaxCalculation.TaxCalculationProcess(Bot, customer);
                break;

            case ActionType.TaxEuroCalculation:
                TaxEuroCalculation.TaxCalculationProcess(Bot, customer);
                break;

            default:
                break;
            }
        }
예제 #19
0
        public void Can_Get_TaxType_By_CodeName_And_Calculate_Tax()
        {
            A.CallTo(() => _postalCodeQueryProvider.Query).WithAnyArguments().Returns(AcceleratorTestData.PostalCodes);
            A.CallTo(() => _taxCalculationTypesQueryProvider.Query).WithAnyArguments().Returns(AcceleratorTestData.TaxTypes);

            var calculation = new TaxCalculation();

            calculation.Id            = 1;
            calculation.FullName      = "Joe Soup";
            calculation.Income        = 784684;
            calculation.CreatedDate   = System.DateTime.UtcNow;
            calculation.CalculatedTax = 0;
            calculation.PostalCode    = "Area0007";

            _acceleratorController = new AcceleratorController(_taxCalculationQueryProvider, _postalCodeQueryProvider, _taxCalculationTypesQueryProvider
                                                               , _progressiveRatesQueryProvider, _inspector, _progressiveTaxCalculator, _flatRateTaxCalculator, _flatValueTaxCalculator);

            var results = _acceleratorController.Get(calculation);

            Assert.IsNotNull(results.Value);
        }
예제 #20
0
        public TaxCalculation ProcessTax(TaxCalculation calculation)
        {
            decimal income = calculation.Income;

            decimal monthlyIncome = income / 12;

            if (monthlyIncome <= 8350)//10%
            {
                decimal perc = (decimal)GetPercentage(10);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }

            else if (monthlyIncome >= 8351 && monthlyIncome <= 33950) //15%
            {
                decimal perc = (decimal)GetPercentage(15);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }

            else if (monthlyIncome >= 33951 && monthlyIncome <= 82250)
            { // 25%
                decimal perc = (decimal)GetPercentage(25);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }
            else if (monthlyIncome >= 82251 && monthlyIncome <= 171550)
            { //28%
                decimal perc = (decimal)GetPercentage(28);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }
            else if (monthlyIncome >= 171551 && monthlyIncome <= 372950)
            {//33%
                decimal perc = (decimal)GetPercentage(33);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }
            else if (monthlyIncome >= 372951)
            {//35%
                decimal perc = (decimal)GetPercentage(35);
                calculation.CalculatedTax = GetActualTax(perc, income);
            }
            return(calculation);
        }
        /// <summary>
        /// 签名失败处理数据
        /// </summary>
        private void SignFilureData()
        {
            //签名失败,客户端处理税款明细
            if (Credit != null && Credit.Productes != null)
            {
                TaxList = Credit.Productes.GroupBy(a => a.TaxType.Id).Select(g => new InvoiceTax
                {
                    TaxItemCode = g.First().TaxType.Label,
                    TaxItemDesc = g.First().TaxType.Name,
                    TaxRate     = g.First().TaxType.Rate,

                    TaxAmount = g.Sum(b =>
                    {
                        return(TaxCalculation.Calculation(b.TaxInclusive, b.TaxType.CalculationMode, b.Price, b.Count, b.TaxType.Rate, b.TaxType.FixTaxAmount));
                    })
                }).ToList();
                if (TaxList != null && TaxList.Count > 0)
                {
                    TotalTaxAmount = Math.Round(TaxList.Sum(a => a.TaxAmount), 2);
                }
            }
        }
예제 #22
0
        public async Task Add_Should_Save_TaxCalculation()
        {
            //Arrange
            var options = new DbContextOptionsBuilder <ApplicationContext>()
                          .UseInMemoryDatabase(databaseName: GetType().Name + Guid.NewGuid())
                          .Options;

            await using var context = new ApplicationContext(options);

            var taxCalculation = new TaxCalculation
            {
                CalculationType = TaxCalculationType.FLAT_RATE,
                TaxYear         = new TaxYear(),
                AnnualIncome    = 300000,
                CreatedBy       = Guid.Parse("b11ac84a-028e-4288-ae85-49f647cee187"),
                CreationDate    = new DateTime(2020, 10, 10),
                PostalCode      = "1212",
                TaxAmount       = 200.45M
            };

            _repository = new TaxCalculationRepository(context);

            //Act
            await _repository.AddAsync(taxCalculation);

            //Assert
            var entity = await context.TaxCalculations.FirstOrDefaultAsync();

            Assert.IsNotNull(entity);
            Assert.AreEqual(taxCalculation.TaxYear, entity.TaxYear);
            Assert.AreEqual(taxCalculation.CalculationType, entity.CalculationType);
            Assert.AreEqual(taxCalculation.AnnualIncome, entity.AnnualIncome);
            Assert.AreEqual(taxCalculation.CreatedBy, entity.CreatedBy);
            Assert.AreEqual(taxCalculation.CreationDate, entity.CreationDate);
            Assert.AreEqual(taxCalculation.PostalCode, entity.PostalCode);
            Assert.AreEqual(taxCalculation.TaxAmount, entity.TaxAmount);
        }
예제 #23
0
 public TaxCalculation ProcessTax(TaxCalculation calculation)
 {
     calculation.CalculatedTax = GetActualTax((decimal)GetPercentage(17.5), calculation.Income);
     return(calculation);
 }
예제 #24
0
        public async Task <IActionResult> Submit(TaxCalculation model)
        {
            if (ModelState.IsValid)
            {
                IEnumerable <TaxType> postalCodes = null;
                decimal calculationResult         = 0M;

                string baseUri = _configuration["ApiBaseUri:BaseUri"];

                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri(baseUri);

                    using (var response = await client.GetAsync($"{baseUri}TaxServices"))
                    {
                        string apiResponse = await response.Content.ReadAsStringAsync();

                        postalCodes = JsonConvert.DeserializeObject <List <TaxType> >(apiResponse);
                    }
                }

                var singlePostalcode = postalCodes.Where(p => p.PostalCode == model.PostalCode);
                if (!singlePostalcode.Any())
                {
                    ModelState.AddModelError("PostalCode", "Postal Code is not catered for, please enter postal code from this selection (7441, A100, 7000, 1000).");
                    return(View("Index", model));
                }
                else
                {
                    //call api to calculate tax and insert in database
                    string taxType = singlePostalcode.FirstOrDefault().Type;

                    TaxCalculation calculation = new TaxCalculation()
                    {
                        AnnualIncome = model.AnnualIncome,
                        PostalCode   = model.PostalCode,
                    };

                    var client = new RestClient(baseUri);

                    string url = $"{baseUri}TaxServices/CalculateTax/";

                    var request = new RestRequest(url, Method.POST);
                    var json    = JsonConvert.SerializeObject(calculation);
                    request.AddParameter("taxType", taxType, ParameterType.QueryString);
                    request.AddParameter("text/json", json, ParameterType.RequestBody);

                    var response = client.Execute(request);

                    string strCalculationResult = JsonConvert.DeserializeObject <string>(response.Content);

                    calculationResult = Convert.ToDecimal(strCalculationResult);
                }

                var postalCode   = model.PostalCode;
                var annualIncome = model.AnnualIncome;
                var taxResult    = calculationResult;
                return(RedirectToAction("TaxCalculationSubmitted", new { postalCode, annualIncome, taxResult }));
            }
            else
            {
                return(View("Index", model));
            }
        }
        private void Save(SignRequest request, SignResponse signResponse)
        {
            //保存销售订单主表
            InvoiceAbbreviation invoiceAbbreviation = new InvoiceAbbreviation
            {
                CashierId      = Const.CashierId,
                TaxpayerTin    = TaxPayerInfo.Tin,
                TotalTaxAmount = TotalTaxAmount,
                TenderAmount   = ActualPay,
                Change         = Change,
                QrcodePath     = "",
            };

            if (Credit != null)
            {
                invoiceAbbreviation.SalesorderNum = Credit.OrderNumber;
                if (Credit.SelectedPaymentType != null)
                {
                    invoiceAbbreviation.PaymentType = Credit.SelectedPaymentType.Code;
                }
                invoiceAbbreviation.BuyerTin    = Credit.Buyer.Tin;
                invoiceAbbreviation.BuyerName   = Credit.Buyer.Name;
                invoiceAbbreviation.TotalAmount = Credit.GrandTotal;
            }
            //if (request != null)
            //{
            //    invoiceAbbreviation.HashCode = request.Hash;
            //}
            ///sdc取值
            if (signResponse != null)
            {
                invoiceAbbreviation.TaxpayerName = signResponse.TaxpayerName;     //sdc取值
                //invoiceAbbreviation.TaxpayerLocation = signResponse.LocationName;//sdc取值
                invoiceAbbreviation.TaxpayerAddress = signResponse.Addreess;      //sdc取值
                //invoiceAbbreviation.TaxpayerDistrit = signResponse.District;//sdc取值
                invoiceAbbreviation.InvoiceNumber   = signResponse.InvoiceNumber; //sdc取值
                invoiceAbbreviation.IssueDate       = request.IssueTime;          //sdc取值
                invoiceAbbreviation.VerificationUrl = signResponse.VerificationUrl;
            }
            Const.dB.Insert <InvoiceAbbreviation>(invoiceAbbreviation);
            //保存订单销售子表
            InvoiceItems invoiceItem = null;

            if (Credit != null && Credit.Productes != null)
            {
                foreach (var item in Credit.Productes)
                {
                    invoiceItem    = new InvoiceItems();
                    invoiceItem.Sn = null;

                    invoiceItem.TaxtypeId     = item.TaxType.Id;
                    invoiceItem.SalesorderNum = Credit.OrderNumber;
                    invoiceItem.GoodsId       = item.No;
                    invoiceItem.GoodsGin      = item.BarCode;
                    invoiceItem.GoodsDesc     = item.Name;
                    invoiceItem.GoodsPrice    = item.Price;
                    invoiceItem.GoodsQty      = item.Count;
                    invoiceItem.TotalAmount   = item.Price * item.Count;

                    invoiceItem.TaxtypeId = item.TaxType.Id;
                    invoiceItem.TaxItem   = item.TaxType.Name;
                    invoiceItem.TaxRate   = item.TaxType.Rate;
                    invoiceItem.TaxAmount = TaxCalculation.Calculation(item.TaxInclusive, item.TaxType.CalculationMode, item.Price, item.Count, item.TaxType.Rate, item.TaxType.FixTaxAmount);

                    Const.dB.Insert <InvoiceItems>(invoiceItem);
                }
            }
        }
 public CalculationFacade()
 {
     basePremiumCalculation = new BasePremiumCalculation();
     taxCalculation         = new TaxCalculation();
     discountCalculation    = new DiscountCalculation();
 }
예제 #27
0
 public TaxCalculation Patch([FromBody] TaxCalculation calculation)
 {
     _calculationComms.UpdateCalculation(calculation);
     return(calculation);
 }
예제 #28
0
 public void AddNewTaxCalculationResult(TaxCalculation taxCalculation)
 {
     _appDbContext.Add <TaxCalculation>(taxCalculation);
     _appDbContext.SaveChanges();
 }
예제 #29
0
        static void Main(string[] args)
        {
            TaxCalculation taxCalculation = new TaxCalculation(LogType.TXT);

            Console.WriteLine(taxCalculation.Calculation(5, 0));
        }
예제 #30
0
 public async Task AddAsync(TaxCalculation calculation)
 {
     _context.TaxCalculations.Add(calculation);
     await _context.SaveChangesAsync();
 }