/// <summary> /// Calculate monthly income tax /// </summary> public static decimal GetIncomeTax(this TaxSlab taxSlab, decimal income) { var incomeTax = (taxSlab.BaseTax + ((income - (taxSlab.MinimumIncome - 1)) * taxSlab.VariableTaxPercentage)) / 12; return(decimal.Round(incomeTax, 0)); }
private int UpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { // first update taxSlab var mdTaxSlab = Mapper.Map <MdTaxSlab>(taxSlab); mdTaxSlab._id = new ObjectId(this.TaxSlab.FirstOrDefault(x => x.Id == taxSlab.Id)._id.ToString()); _mongoDbContext.TaxSlab.ReplaceOneAsync(s => s.Id == mdTaxSlab.Id, mdTaxSlab); // delete taxSlabDetails from database which are not passed by user var slabDetails = taxSlabDetails as TaxSlabDetail[] ?? taxSlabDetails.ToArray(); var ids = new HashSet <int>(slabDetails.Select(x => x.Id)); var results = this.TaxSlabDetails.Where(x => !ids.Contains(x.Id) && x.TaxSlabId == mdTaxSlab.Id); foreach (var mdTaxSlabDetail in results) { _mongoDbContext.TaxSlabDetails.DeleteOne(det => det.Id == mdTaxSlabDetail.Id); } // taxSlabDetails update or insert. var taxSlabDetailsId = this.TaxSlabDetails.OrderByDescending(a => a.Id).FirstOrDefault()?.Id ?? 0; var index = 1; foreach (var taxSlabDetail in slabDetails) { if (taxSlabDetail.Id == -1) { // Insert new entry in database var mdTaxSlabDetail = Mapper.Map <MdTaxSlabDetail>(taxSlabDetail); mdTaxSlabDetail.Id = taxSlabDetailsId + index++; mdTaxSlabDetail.TaxSlabId = mdTaxSlab.Id; _mongoDbContext.TaxSlabDetails.InsertOneAsync(mdTaxSlabDetail); } else if (this.TaxSlabDetails.Any(det => det.Id == taxSlabDetail.Id)) { // taxSlabDetail exist in database so update it var mdTaxSlabDetail = Mapper.Map <MdTaxSlabDetail>(taxSlabDetail); mdTaxSlabDetail._id = new ObjectId(this.TaxSlabDetails.FirstOrDefault(x => x.Id == taxSlabDetail.Id)._id.ToString()); mdTaxSlabDetail.TaxSlabId = mdTaxSlab.Id; _mongoDbContext.TaxSlabDetails.ReplaceOne(s => s.Id == mdTaxSlabDetail.Id, mdTaxSlabDetail); } } return(mdTaxSlab.Id); }
public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { try { string taxSlabDetail = taxSlabDetails.Serialize(); int taxSlabId; using (var connection = new SqlConnection(_connectionString)) { connection.Open(); using (var command = new SqlCommand()) { command.Connection = connection; command.CommandType = CommandType.StoredProcedure; if (taxSlab.Id == -1) { command.CommandText = "proc_tax_slab_create"; command.Parameters.Add("@id", SqlDbType.Int); command.Parameters["@id"].Direction = ParameterDirection.Output; } else { command.CommandText = "proc_tax_slab_update"; command.Parameters.AddWithValue("@id", taxSlab.Id); } command.Parameters.AddWithValue("@from_year", taxSlab.FromYear); command.Parameters.AddWithValue("@to_year", taxSlab.ToYear); command.Parameters.AddWithValue("@category", taxSlab.Category); command.Parameters.AddWithValue("@tax_slab_details", taxSlabDetail); command.ExecuteNonQuery(); taxSlabId = Convert.ToInt32(command.Parameters["@id"].Value); } } return(taxSlabId); } catch (Exception) { return(0); } }
public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { if (taxSlab.Id == -1) { taxSlab.Id = TaxSlabTestData.Max(ts => ts.Id) + 1; TaxSlabTestData.Add(taxSlab); TaxSlabDetailTestData.AddRange(taxSlabDetails); } else { var obj = TaxSlabTestData.FirstOrDefault(ts => ts.Id == taxSlab.Id); if (obj != null) { obj = taxSlab; //var index = TaxSlabTestData.Select((ts, ind) => new { Index = ind }).FirstOrDefault().Index; //TaxSlabTestData[index] = taxSlab; } } return(taxSlab.Id); }
private int InsertTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { // taxSlab insertion var taxSlabId = this.TaxSlab.OrderByDescending(a => a.Id).FirstOrDefault()?.Id ?? 0; var mdTaxSlab = Mapper.Map <MdTaxSlab>(taxSlab); mdTaxSlab.Id = Convert.ToInt32(taxSlabId) + 1; _mongoDbContext.TaxSlab.InsertOneAsync(mdTaxSlab); // taxSlabDetails insertion var taxSlabDetailsId = this.TaxSlabDetails.OrderByDescending(a => a.Id).FirstOrDefault()?.Id ?? 0; var index = 1; foreach (var taxSlabDetail in taxSlabDetails) { var mdTaxSlabDetail = Mapper.Map <MdTaxSlabDetail>(taxSlabDetail); mdTaxSlabDetail.Id = taxSlabDetailsId + index++; mdTaxSlabDetail.TaxSlabId = mdTaxSlab.Id; _mongoDbContext.TaxSlabDetails.InsertOneAsync(mdTaxSlabDetail); } return(mdTaxSlab.Id); }
public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { return(taxSlab.Id == -1 ? InsertTaxSlab(taxSlab, taxSlabDetails) : UpdateTaxSlab(taxSlab, taxSlabDetails)); }
public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails) { return(_repository.InsertUpdateTaxSlab(taxSlab, taxSlabDetails)); }
/// <summary> /// Get the ceiling value of the previous slab, if any /// </summary> /// <param name="value"></param> /// <returns></returns> public static decimal GetPreviousTaxSlabMax(this TaxSlab value) { return(value.MinimumIncome > 0 ? value.MinimumIncome - 1 : 0); }