Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace TaxLibrarySample001
- {
- public class TaxHelper
- {
- public static decimal GetTaxResult(decimal income)
- {
- decimal result = 0;
- foreach (var Item in GetTaxTable().OrderBy(r => r.Tax))
- {
- if (Item.ParentTax == null)
- {
- if (income > 0 && income <= Item.To)
- result += (income - Item.from) * Item.Tax;
- else
- result += (Item.To - Item.from) * Item.Tax;
- continue;
- }
- if (income > Item.ParentTax.To && income <= Item.To)
- result += (income - Item.ParentTax.To) * Item.Tax;
- if (income > Item.To)
- result += (Item.To - Item.ParentTax.To) * Item.Tax;
- }
- return result;
- }
- internal static IEnumerable<TaxTable> GetTaxTable(Func<TaxTable, bool> filter = null)
- {
- List<TaxTable> taxes = new List<TaxTable>();
- taxes.Add(new TaxTable { from = 0, To = 540000, Tax = 0.05m, ParentTax = null });
- taxes.Add(new TaxTable { from = 540001, To = 1210000, Tax = 0.12m, ParentTax = new TaxTable { from = 0, To = 540000, Tax = 0.05m } });
- taxes.Add(new TaxTable { from = 1210001, To = 2420000, Tax = 0.2m, ParentTax = new TaxTable { from = 540001, To = 1210000, Tax = 0.12m } });
- taxes.Add(new TaxTable { from = 2420001, To = 4530000, Tax = 0.3m, ParentTax = new TaxTable { from = 1210001, To = 2420000, Tax = 0.2m } });
- taxes.Add(new TaxTable { from = 4530001, To = 10310000, Tax = 0.4m, ParentTax = new TaxTable { from = 2420001, To = 4530000, Tax = 0.3m } });
- taxes.Add(new TaxTable { from = 10310001, To = 999999999999999, Tax = 0.5m, ParentTax = new TaxTable { from = 4530001, To = 10310000, Tax = 0.4m } });
- if (filter == null)
- return taxes;
- return taxes.Where(filter);
- }
- }
- internal class TaxTable
- {
- public decimal from { get; set; }
- public decimal To { get; set; }
- public decimal Tax { get; set; }
- public TaxTable ParentTax { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement