Beispiel #1
0
        /// <summary>
        /// Loads the employee from CSVF ile.
        /// </summary>
        /// <returns>The employee from CSV File.</returns>
        /// <param name="viewModel">View model.</param>
        private IEnumerable <Employee> LoadEmployeeFromCSVFile(PaySlipViewModel viewModel)
        {
            var stream = viewModel.EmployeeSalaryFile.OpenReadStream();
            IEnumerable <Employee> employees = _employeeCsvHelper.ReadFromCsvFile <Employee>(stream).ToList();

            return(employees);
        }
Beispiel #2
0
        public async Task <IActionResult> PutPaySlip(string id, PaySlipViewModel paySlip)
        {
            if (string.Compare(paySlip.Id, id) != 0)
            {
                throw new Exception(string.Format("Id và Id của phiếu chi không giống nhau!"));
            }

            try
            {
                await Task.Run(() =>
                {
                    paySlip.DateModified = DateTime.Now;
                    _payslipService.Update(paySlip);
                    _payslipService.SaveChanges();
                    return(Ok());
                });
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PaySlipExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        /// <summary>
        /// Creates the pay slip view.
        /// </summary>
        /// <param name="payroll">The payroll.</param>
        /// <param name="employee">The employee.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">payroll</exception>
        public IPaySlipViewModel CreatePaySlipView(IPayroll payroll, IPayScale payScale, decimal taxRate, IList <IPayScaleBenefit> payScaleBenefits,
                                                   ICompanyDetail companyDetail, IDigitalFile companyLogo, IEmployee employee, ILevel level, IGrade grade, IList <IPayrollEmployeeReward> rewardCollection,
                                                   IList <IPayrollEmployeeDeduction> employeeDeductionCollection, IList <IPayrollEmployeeLoan> loanCollection, decimal pensionContribution, decimal spouseConsolidation,
                                                   decimal childrenConsolidation, decimal consolidationTaxRelief, decimal taxableIncome)
        {
            if (payroll == null)
            {
                throw new ArgumentNullException(nameof(payroll));
            }

            var viewModel = new PaySlipViewModel
            {
                CompanyDetail       = companyDetail,
                Payroll             = payroll,
                Employee            = employee,
                Loan                = loanCollection,
                Reward              = rewardCollection,
                EmployeeDeduction   = employeeDeductionCollection,
                Level               = level,
                Grade               = grade,
                PayScale            = payScale,
                PayScaleCollection  = payScaleBenefits,
                CompanyLogo         = companyLogo,
                TaxRate             = taxRate,
                PensionContribution = pensionContribution,
                Dependant           = spouseConsolidation,
                Children            = childrenConsolidation,
                TaxCollation        = consolidationTaxRelief,
                TaxationAmount      = taxableIncome,
            };

            return(viewModel);
        }
        public PaySlipViewModel GetPaySlip(PaySlipBindingModel model)
        {
            #region Negative values validations

            if (model.AnnualSalary <= 0)
            {
                throw new Exception("Salary should be positive value");
            }
            if (model.SuperRate < 0)
            {
                throw new Exception("Super Rate should be positive value");
            }

            #endregion

            var annualSalary = model.AnnualSalary;
            var grossIncome  = annualSalary.CalculateGrossIncome();
            var incomeTax    = annualSalary.GetTaxSlabAmount();
            var netIncome    = (grossIncome - incomeTax).RoundOffDoller();
            var superAmount  = (grossIncome * model.SuperRate / 100).RoundOffDoller();
            var viewModel    = new PaySlipViewModel
            {
                Name        = $"{model.FirstName} {model.LastName}",
                NetIncome   = netIncome,
                GrossIncome = grossIncome,
                IncomeTax   = incomeTax,
                PayPeriod   = model.StartDate,
                SuperAmount = superAmount
            };
            return(viewModel);
        }
Beispiel #5
0
        public IActionResult Index(PaySlipViewModel viewModel)
        {
            if (viewModel.EmployeeSalaryFile == null)
            {
                viewModel.MessageLevel = "danger";
                viewModel.ErrorMessage = $"please select file first";
                return(View(viewModel));
            }
            IEnumerable <Employee> employees = null;

            try
            {
                employees = LoadEmployeeFromCSVFile(viewModel);
            }
            catch (Exception e)
            {
                _logger.LogInformation($"Parse employee csv file failure: {e.Message}");
                viewModel.MessageLevel = "danger";
                viewModel.ErrorMessage = $"Parse CSV file {viewModel.EmployeeSalaryFile.FileName} failure";

                return(View(viewModel));
            }

            if (employees == null)
            {
                return(View(viewModel));
            }

            try
            {
                viewModel.Employees = employees.Select(employee => new EmployeeViewModel(employee));
            }
            catch (Exception e)
            {
                _logger.LogInformation($"Transfer employee failure: {e.Message}");

                return(View(viewModel));
            }

            try
            {
                GeneratePaySlip(employees, viewModel);
                CachePaySlipsToSession(viewModel);
            }
            catch (Exception e)
            {
                _logger.LogInformation($"Generate Pay Slip error: {e.Message}");

                return(View(viewModel));
            }

            viewModel.MessageLevel = "success";
            viewModel.ErrorMessage = "Generate pay slip success";
            return(View(viewModel));
        }
Beispiel #6
0
 public bool Update(PaySlipViewModel payslipVm)
 {
     try
     {
         var payslip = Mapper.Map <PaySlipViewModel, PaySlip>(payslipVm);
         _payslipRepository.Update(payslip);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Beispiel #7
0
        public async Task <ActionResult <PaySlipViewModel> > PostPaySlip(PaySlipViewModel paySlip)
        {
            if (paySlip != null)
            {
                try
                {
                    await Task.Run(() =>
                    {
                        paySlip.DateCreated = DateTime.Now;
                        _payslipService.Add(paySlip);
                        _payslipService.SaveChanges();
                        return(Ok("Thêm phiếu chi thành công!"));
                    });
                }
                catch
                {
                    throw new Exception(string.Format("Lỗi khi thêm dữ liệu"));
                }
            }

            return(CreatedAtAction("GetPaySlip", new { id = paySlip.Id }, paySlip));
        }
Beispiel #8
0
        public bool Add(PaySlipViewModel payslipVm)
        {
            try
            {
                var payslip = Mapper.Map <PaySlipViewModel, PaySlip>(payslipVm);

                payslip.Id = TextHelper.RandomNumber(10);

                _payslipRepository.Add(payslip);
                SaveChanges();


                if (payslip.PaySlipTypeId == 1)                            // =1 là loại chi tạm ứng
                {
                    var Tamung = payslip.Total;                            // tiền tạm ứng

                    if (!string.IsNullOrEmpty(payslip.ReceivePersonnelId)) // mã nv khác rỗng
                    {
                        var timeSheet = _context.Timesheets.Where(x => x.Month == payslip.Date.Month && x.Year == payslip.Date.Year && x.PersonnelId == payslip.ReceivePersonnelId).SingleOrDefault();
                        timeSheet.AdvancePayment   += Tamung; // update tạm ứng trong chấm công
                        timeSheet.TotalActualSalary = timeSheet.SalaryOfDay * Convert.ToDecimal(timeSheet.TotalWorkday)
                                                      + timeSheet.Allowance + timeSheet.Bonus - timeSheet.AdvancePayment - timeSheet.InsurancePremiums;
                        _context.Timesheets.Update(timeSheet);
                        _context.SaveChanges();
                    }
                }



                return(true);
            }
            catch
            {
                return(false);
            }
        }
Beispiel #9
0
        public void GeneratePaySlip(IEnumerable <Employee> employees, PaySlipViewModel viewModel)
        {
            IEnumerable <IPaySlip> PaySilps = _calculator.CalculatePaySlips(employees);

            viewModel.PaySilps = PaySilps.Select(paySlip => new PaySlipResultViewModel((PaySlip)paySlip));
        }
Beispiel #10
0
        public IActionResult Index()
        {
            var viewModel = new PaySlipViewModel();

            return(View(viewModel));
        }
Beispiel #11
0
        private void CachePaySlipsToSession(PaySlipViewModel viewModel)
        {
            var bytes = PublicCsvHelper.EnumerableToCsvBytes(viewModel.PaySilps);

            HttpContext.Session.Set(PaySlipSessionKey, bytes);
        }
Beispiel #12
0
        public IActionResult DownloadPaySlip(PaySlipViewModel viewModel)
        {
            var bytes = HttpContext.Session.Get(PaySlipSessionKey);

            return(File(bytes, "text/csv", "output.csv"));
        }