コード例 #1
0
        /// <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));
        }
コード例 #2
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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails)
 {
     return(taxSlab.Id == -1 ? InsertTaxSlab(taxSlab, taxSlabDetails) : UpdateTaxSlab(taxSlab, taxSlabDetails));
 }
コード例 #7
0
 public int InsertUpdateTaxSlab(TaxSlab taxSlab, IEnumerable <TaxSlabDetail> taxSlabDetails)
 {
     return(_repository.InsertUpdateTaxSlab(taxSlab, taxSlabDetails));
 }
コード例 #8
0
 /// <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);
 }