Beispiel #1
0
        public ActionResult Apply(PayrollPeriodApply request)
        {
            try
            {
                #region check model
                //if (!ModelState.IsValid)
                //{
                //    var modelState = ModelState.FirstOrDefault();
                //    var error = modelState.Value.Errors.FirstOrDefault().ErrorMessage;
                //    throw ApiException.Get(false, error, ResultEnum.ModelError, HttpStatusCode.BadRequest);
                //}
                #endregion

                payrollperiodService.ApplyPeriod(request);
                response = BaseResponse <dynamic> .Get(true, ConstantManager.SUCCESS, null, ResultEnum.Success);
            }
            catch (ApiException e)
            {
                result.StatusCode = e.StatusCode;
                response          = BaseResponse <dynamic> .Get(e.Success, e.ErrorMessage, null, e.ErrorStatus);

                result = new JsonResult(response);
            }
            catch (Exception e)
            {
                result.StatusCode = (int)HttpStatusCode.InternalServerError;
                response          = BaseResponse <dynamic> .Get(false, ConstantManager.Fail(e.ToString()), null, ResultEnum.InternalError);
            }
            result = new JsonResult(response);
            return(result);
        }
        public void ApplyPeriod(PayrollPeriodApply request)
        {
            var trans = UnitOfWork.CreateTransac();

            try
            {
                // get period by Id
                var entity = FirstOrDefaultE(r => r.Id == request.Id);
                // get template
                var template      = paySlipTemplateService.GetEById(entity.PaySlipTemplateId.Value);
                var payrolDetails = templateDetailMappingService.GetPayrollByTemplateId(template.Id);
                if (request.GroupId.HasValue)
                {
                    request.ListEmp = employeeService.GetByGroupId(request.GroupId.Value).Select(p => p.Id).ToList();
                }



                foreach (var empId in request.ListEmp)
                {
                    var employee = employeeService.FindEById(empId);
                    if (employee == null)
                    {
                        throw new Exception();
                    }

                    var paySlip = new PaySlip()
                    {
                        EmployeeId      = empId,
                        PayrollPeriodId = entity.Id,
                        FromDate        = entity.FromDate.Value,
                        ToDate          = entity.ToDate.Value,
                    };

                    var listAllPaySlipAttribute = paySlipAttributeService.Get();
                    foreach (var attribute in listAllPaySlipAttribute)
                    {
                        switch (attribute.Code)
                        {
                        case "NBD":
                            paySlip.PayslipAttributeMapping.Add(new PayslipAttributeMapping
                            {
                                PayslipId   = paySlip.Id,
                                AttributeId = attribute.Id,
                                Value       = entity.FromDate.Value.Day
                            });
                            break;

                        case "NKT":
                            paySlip.PayslipAttributeMapping.Add(new PayslipAttributeMapping
                            {
                                PayslipId   = paySlip.Id,
                                AttributeId = attribute.Id,
                                Value       = entity.ToDate.Value.Day
                            });
                            break;

                        case "LCB":
                            paySlip.PayslipAttributeMapping.Add(new PayslipAttributeMapping
                            {
                                PayslipId   = paySlip.Id,
                                AttributeId = attribute.Id,
                                Value       = 0
                            });
                            break;

                        case "TKL":
                            paySlip.PayslipAttributeMapping.Add(new PayslipAttributeMapping
                            {
                                PayslipId   = paySlip.Id,
                                AttributeId = attribute.Id,
                                Value       = entity.ToDate.Value.Month
                            });
                            break;

                        default:
                            break;
                        }
                    }
                    // create PaySlip
                    var payslipId = paySlipService.Add(paySlip);

                    // Create List PaySlipItem
                    if (payrolDetails.Count() == 0)
                    {
                        throw new Exception();
                    }
                    foreach (var payrollDetailSelected in payrolDetails)
                    {
                        var paySlipItem = new PaySlipItem()
                        {
                            Name            = payrollDetailSelected.Name,
                            PayrollDetailId = payrollDetailSelected.Id,
                            PaySlipId       = payslipId
                        };

                        paySlipItemService.Add(paySlipItem);
                    }
                }
                trans.Commit();
            }
            catch (Exception e)
            {
                trans.Dispose();
                throw e;
            }
        }