public async Task <ApiResponse> Handle(EditEmployeeAccountSalaryCommand request, CancellationToken cancellationToken)
        {
            ApiResponse response = new ApiResponse();

            try
            {
                var existrecord = await _dbContext.EmployeePayrollAccountHead.Where(x => x.EmployeeId == request.EmployeePayrollAccount.FirstOrDefault().EmployeeId).ToListAsync();

                if (existrecord.Any())
                {
                    _dbContext.EmployeePayrollAccountHead.RemoveRange(existrecord);
                    await _dbContext.SaveChangesAsync();
                }

                List <EmployeePayrollAccountHead> employeepayrollAccountlist = new List <EmployeePayrollAccountHead>();

                foreach (var list in request.EmployeePayrollAccount)
                {
                    EmployeePayrollAccountHead obj = new EmployeePayrollAccountHead();
                    obj.EmployeeId        = list.EmployeeId;
                    obj.AccountNo         = list.AccountNo;
                    obj.Description       = list.Description;
                    obj.PayrollHeadName   = list.PayrollHeadName;
                    obj.PayrollHeadTypeId = list.PayrollHeadTypeId;
                    obj.TransactionTypeId = list.TransactionTypeId;
                    obj.PayrollHeadId     = list.PayrollHeadId;
                    obj.IsDeleted         = false;

                    employeepayrollAccountlist.Add(obj);
                }

                await _dbContext.EmployeePayrollAccountHead.AddRangeAsync(employeepayrollAccountlist);

                await _dbContext.SaveChangesAsync();

                response.StatusCode = StaticResource.successStatusCode;
                response.Message    = "Success";
            }
            catch (Exception ex)
            {
                response.StatusCode = StaticResource.failStatusCode;
                response.Message    = ex.Message;
            }
            return(response);
        }
        public async Task <ApiResponse> Handle(EditEmployeeProfessionalDetailCommand request, CancellationToken cancellationToken)
        {
            ApiResponse response = new ApiResponse();

            try
            {
                EmployeeProfessionalDetail existrecord = await _dbContext.EmployeeProfessionalDetail.FirstOrDefaultAsync(x => x.IsDeleted == false &&
                                                                                                                         x.EmployeeId == request.EmployeeId);

                if (existrecord == null)
                {
                    throw new Exception(StaticResource.RecordNotFound);
                }
                existrecord.EmployeeTypeId         = request.EmployeeTypeId;
                existrecord.OfficeId               = request.OfficeId;
                existrecord.DepartmentId           = request.DepartmentId;
                existrecord.DesignationId          = request.DesignationId;
                existrecord.EmployeeContractTypeId = request.EmployeeContractTypeId;
                existrecord.HiredOn           = request.HiredOn;
                existrecord.FiredOn           = request.FiredOn;
                existrecord.FiredReason       = request.FiredReason;
                existrecord.ResignationOn     = request.ResignationOn;
                existrecord.TrainingBenefits  = request.TrainingBenefits;
                existrecord.JobDescription    = request.JobDescription;
                existrecord.ResignationReason = request.ResignationReason;
                existrecord.AttendanceGroupId = request.AttendanceGroupId;
                existrecord.MembershipSupportInPoliticalParty = request.MembershipSupportInPoliticalParty;
                existrecord.ModifiedById = request.ModifiedById;
                existrecord.ModifiedDate = request.ModifiedDate;
                await _dbContext.SaveChangesAsync();

                var employeeinfo = await _dbContext.EmployeeDetail.FirstOrDefaultAsync(x => x.EmployeeID == request.EmployeeId && x.IsDeleted == false);

                if (employeeinfo != null)
                {
                    employeeinfo.EmployeeTypeId = request.EmployeeTypeId;
                    await _dbContext.SaveChangesAsync();;
                }

                //when employee is active
                if (request.EmployeeTypeId == (int)EmployeeTypeStatus.Active)
                {
                    bool employeeSalaryHeadAlreadyExists = _dbContext.EmployeePayroll.Any(x => x.IsDeleted == false && x.EmployeeID == request.EmployeeId);

                    // add salary head and payroll heads only if it does not already exists for an employee
                    if (!employeeSalaryHeadAlreadyExists)
                    {
                        //Get Default payrollaccountheads and save it to the newly created employee
                        List <SalaryHeadDetails> salaryHeadDetails = await _dbContext.SalaryHeadDetails.Where(x => x.IsDeleted == false).ToListAsync();

                        List <EmployeePayroll> EmployeePayrollList = new List <EmployeePayroll>();

                        foreach (SalaryHeadDetails salaryHead in salaryHeadDetails)
                        {
                            EmployeePayroll employeePayroll = new EmployeePayroll();
                            employeePayroll.AccountNo         = salaryHead.AccountNo;
                            employeePayroll.HeadTypeId        = salaryHead.HeadTypeId;
                            employeePayroll.SalaryHeadId      = salaryHead.SalaryHeadId;
                            employeePayroll.IsDeleted         = false;
                            employeePayroll.TransactionTypeId = salaryHead.TransactionTypeId;
                            employeePayroll.EmployeeID        = request.EmployeeId.Value;
                            EmployeePayrollList.Add(employeePayroll);
                        }

                        await _dbContext.EmployeePayroll.AddRangeAsync(EmployeePayrollList);

                        await _dbContext.SaveChangesAsync();


                        //Get Default payrollaccountheads and save it to the newly created employee
                        List <PayrollAccountHead> payrollAccountHeads = await _dbContext.PayrollAccountHead.Where(x => x.IsDeleted == false).ToListAsync();

                        List <EmployeePayrollAccountHead> employeePayrollAccountHeads = new List <EmployeePayrollAccountHead>();

                        foreach (var employeePayrollAccount in payrollAccountHeads)
                        {
                            EmployeePayrollAccountHead employeePayrollAccountHead = new EmployeePayrollAccountHead();

                            employeePayrollAccountHead.IsDeleted         = false;
                            employeePayrollAccountHead.AccountNo         = employeePayrollAccount.AccountNo;
                            employeePayrollAccountHead.Description       = employeePayrollAccount.Description;
                            employeePayrollAccountHead.EmployeeId        = request.EmployeeId.Value;
                            employeePayrollAccountHead.PayrollHeadId     = employeePayrollAccount.PayrollHeadId;
                            employeePayrollAccountHead.PayrollHeadName   = employeePayrollAccount.PayrollHeadName;
                            employeePayrollAccountHead.PayrollHeadTypeId = employeePayrollAccount.PayrollHeadTypeId;
                            employeePayrollAccountHead.TransactionTypeId = employeePayrollAccount.TransactionTypeId;

                            employeePayrollAccountHeads.Add(employeePayrollAccountHead);
                        }

                        await _dbContext.EmployeePayrollAccountHead.AddRangeAsync(employeePayrollAccountHeads);

                        await _dbContext.SaveChangesAsync();
                    }
                }

                response.StatusCode = StaticResource.successStatusCode;
                response.Message    = "Success";
            }
            catch (Exception ex)
            {
                response.StatusCode = StaticResource.failStatusCode;
                response.Message    = ex.Message;
            }
            return(response);
        }
예제 #3
0
        public async Task <ApiResponse> Handle(UpdatePayrollAccountHeadAllEmployeesCommand request, CancellationToken cancellationToken)
        {
            ApiResponse response = new ApiResponse();

            try
            {
                //NOTE: Do not remove code for saving payroll heads for employees that do not exist in EmployeePayrollAccountHead table
                //List<EmployeeProfessionalDetail> employeesNotInPayrollAccountHeadTable = new List<EmployeeProfessionalDetail>();
                //List<EmployeeProfessionalDetail> employeeList = await _uow.GetDbContext().EmployeeProfessionalDetail.Where(x => x.IsDeleted == false).ToListAsync();

                IEnumerable <int> employeeIds = _dbContext.EmployeeDetail
                                                .Where(x => x.IsDeleted == false).Select(x => x.EmployeeID).ToList();

                IEnumerable <int> employeeWithNoPayrollHead;
                IEnumerable <int> employeeWithPayrollHead;

                List <EmployeePayrollAccountHead> xEmployeePayrollAccountHead = await _dbContext.EmployeePayrollAccountHead.Where(x => x.IsDeleted == false).ToListAsync();

                employeeWithPayrollHead = xEmployeePayrollAccountHead.Select(x => x.EmployeeId).Distinct().ToList();

                employeeWithNoPayrollHead = employeeIds.Except(employeeWithPayrollHead);

                foreach (PayrollHeadModel payrollHead in request.PayrollHead)
                {
                    PayrollAccountHead xPayrollAccountHead = _dbContext.PayrollAccountHead.FirstOrDefault(x => x.PayrollHeadId == payrollHead.PayrollHeadId);

                    xPayrollAccountHead.AccountNo         = payrollHead.AccountNo;
                    xPayrollAccountHead.Description       = payrollHead.Description;
                    xPayrollAccountHead.PayrollHeadId     = payrollHead.PayrollHeadId;
                    xPayrollAccountHead.PayrollHeadName   = payrollHead.PayrollHeadName;
                    xPayrollAccountHead.PayrollHeadTypeId = payrollHead.PayrollHeadTypeId;
                    xPayrollAccountHead.TransactionTypeId = payrollHead.TransactionTypeId;
                    xPayrollAccountHead.ModifiedById      = request.ModifiedById;
                    xPayrollAccountHead.ModifiedDate      = request.ModifiedDate;
                    xPayrollAccountHead.IsDeleted         = false;

                    await _dbContext.SaveChangesAsync();

                    List <EmployeePayrollAccountHead> xEmployeePayrollAccount = xEmployeePayrollAccountHead.Where(x => x.IsDeleted == false && x.PayrollHeadId == payrollHead.PayrollHeadId).ToList();

                    if (xEmployeePayrollAccount.Any())
                    {
                        xEmployeePayrollAccount.ForEach(x =>
                        {
                            x.AccountNo         = payrollHead.AccountNo; x.Description = payrollHead.Description;
                            x.PayrollHeadTypeId = payrollHead.PayrollHeadTypeId; x.TransactionTypeId = payrollHead.TransactionTypeId;
                        });
                        _dbContext.EmployeePayrollAccountHead.UpdateRange(xEmployeePayrollAccountHead);
                        await _dbContext.SaveChangesAsync();
                    }

                    List <EmployeePayrollAccountHead> employeePayrollHeads = new List <EmployeePayrollAccountHead>();

                    //Adding New Payroll Heads for Employees not having Payroll Head already saved
                    foreach (int employeeId in employeeWithNoPayrollHead)
                    {
                        EmployeePayrollAccountHead employeePayrollAccountHead = new EmployeePayrollAccountHead();
                        employeePayrollAccountHead.AccountNo         = payrollHead.AccountNo;
                        employeePayrollAccountHead.CreatedById       = request.ModifiedById;
                        employeePayrollAccountHead.Description       = payrollHead.Description;
                        employeePayrollAccountHead.EmployeeId        = employeeId;
                        employeePayrollAccountHead.IsDeleted         = false;
                        employeePayrollAccountHead.PayrollHeadId     = payrollHead.PayrollHeadId;
                        employeePayrollAccountHead.PayrollHeadName   = payrollHead.PayrollHeadName;
                        employeePayrollAccountHead.PayrollHeadTypeId = payrollHead.PayrollHeadTypeId;
                        employeePayrollAccountHead.TransactionTypeId = payrollHead.TransactionTypeId;
                        employeePayrollHeads.Add(employeePayrollAccountHead);
                    }

                    _dbContext.EmployeePayrollAccountHead.AddRange(employeePayrollHeads);
                    await _dbContext.SaveChangesAsync();
                }

                response.StatusCode = StaticResource.successStatusCode;
                response.Message    = "Success";
            }
            catch (Exception ex)
            {
                response.StatusCode = StaticResource.failStatusCode;
                response.Message    = ex.Message;
            }

            return(response);
        }