public async Task <IActionResult> PutEmployeeDetails(EmployeDetailsToGetDto model)
        {
            var modelToDb = await _uow.EmployeeRepository.Get(x => x.NationalId == model.NationalId, includes : "EmployeeOrder").SingleOrDefaultAsync();

            if (modelToDb == null)
            {
                return(NotFound());
            }
            modelToDb = UpdateEmployeeBasicData(modelToDb, model);
            var orderResult = await UpdateEmployeeOrder(modelToDb, model);

            if (orderResult == null)
            {
                return(BadRequest());
            }
            else
            {
                modelToDb = orderResult;
            }
            var postResult = await UpdateEmployeePost(modelToDb, model);

            if (postResult == null)
            {
                return(BadRequest());
            }
            else
            {
                modelToDb = postResult;
            }
            _uow.EmployeeRepository.Update(modelToDb);
            await _uow.SaveChangesAsync();

            return(Ok());
        }
 private Employee UpdateEmployeeBasicData(Employee modelToDb, EmployeDetailsToGetDto model)
 {
     modelToDb.KnownAs      = model.KnownAs;
     modelToDb.DepartmentId = model.Department.Id;
     modelToDb.BankOption   = model.BankOption;
     modelToDb.ATMOption    = model.ATMOption;
     modelToDb.Phone        = model.Phone;
     modelToDb.Email        = model.Email;
     return(modelToDb);
 }
        private async Task <Employee> UpdateEmployeeOrder(Employee modelToDb, EmployeDetailsToGetDto model)
        {
            if (modelToDb.HasATM == false && modelToDb.HasBank == false)
            {
                modelToDb.NationalId = model.NationalId;
                modelToDb.Name       = model.Name;
            }
            if (modelToDb.HasOrder && model.HasOrder)
            {
                var orderEntery = _uow.OrderRepository.Get(x => x.EmployeeId == model.Id).Result.SingleOrDefault();
                if (orderEntery == null)
                {
                    return(null);
                }
                orderEntery.BranchCode         = model.Order.orderBranchCode;
                orderEntery.OrderAccountNumber = model.Order.OrderAccountNum;
                _uow.OrderRepository.Update(orderEntery);
            }

            if (!modelToDb.HasOrder && model.HasOrder)
            {
                if (model.Order == null)
                {
                    return(null);
                }
                modelToDb.HasOrder      = true;
                modelToDb.EmployeeOrder = new EmployeeOrder()
                {
                    EmployeeId         = model.Id,
                    BranchCode         = model.Order.orderBranchCode,
                    OrderAccountNumber = model.Order.OrderAccountNum,
                };
            }
            else if (!model.HasOrder && modelToDb.HasOrder)
            {
                var modelToDelete = await _uow.OrderRepository.Get(x => x.Id == modelToDb.Id);

                if (modelToDelete == null)
                {
                    return(null);
                }
                modelToDb.HasOrder = false;
                if (modelToDb.BankOption == PaymentTypeConst.PaymentOrder)
                {
                    modelToDb.BankOption = string.Empty;
                }
                if (modelToDb.ATMOption == PaymentTypeConst.PaymentOrder)
                {
                    modelToDb.ATMOption = string.Empty;
                }
                _uow.OrderRepository.Delete(modelToDelete.SingleOrDefault());
            }
            return(modelToDb);
        }
        private async Task <Employee> UpdateEmployeePost(Employee modelToDb, EmployeDetailsToGetDto model)
        {
            if (modelToDb.HasATM == false && modelToDb.HasBank == false)
            {
                modelToDb.NationalId = model.NationalId;
                modelToDb.Name       = model.Name;
            }
            if (modelToDb.HasPost && model.HasPost)
            {
                var postEntery = _uow.PostRepository.Get(x => x.EmployeeId == model.Id).Result.SingleOrDefault();
                if (postEntery == null)
                {
                    return(null);
                }
                postEntery.PostTo      = model.Post.PostTo;
                postEntery.PostAddress = model.Post.PostAddress;
                postEntery.PostPhone   = model.Post.PostPhone;
                _uow.PostRepository.Update(postEntery);
            }

            if (!modelToDb.HasPost && model.HasPost)
            {
                modelToDb.HasPost      = true;
                modelToDb.EmployeePost = new EmployeePost()
                {
                    EmployeeId  = model.Id,
                    PostTo      = model.Post.PostTo,
                    PostAddress = model.Post.PostAddress,
                    PostPhone   = model.Post.PostPhone,
                };
            }
            else if (!model.HasPost && modelToDb.HasPost)
            {
                var modelToDelete = await _uow.PostRepository.Get(x => x.EmployeeId == modelToDb.Id);

                if (modelToDelete == null)
                {
                    return(null);
                }
                modelToDb.HasPost = false;
                if (modelToDb.BankOption == PaymentTypeConst.PersonalPost)
                {
                    modelToDb.BankOption = string.Empty;
                }
                if (modelToDb.ATMOption == PaymentTypeConst.PersonalPost)
                {
                    modelToDb.ATMOption = string.Empty;
                }
                _uow.PostRepository.Delete(modelToDelete.SingleOrDefault());
            }
            return(modelToDb);
        }
 private EmployeDetailsToGetDto GetEmployeePost(EmployeDetailsToGetDto empToReturn, Employee empFromDb)
 {
     if (empToReturn.HasPost)
     {
         empToReturn.Post = new EmployeePostDto()
         {
             Id          = empFromDb.EmployeePost.Id,
             PostTo      = empFromDb.EmployeePost.PostTo,
             PostAddress = empFromDb.EmployeePost.PostAddress,
             PostPhone   = empFromDb.EmployeePost.PostPhone
         };
     }
     return(empToReturn);
 }
        private async Task <EmployeDetailsToGetDto> GetEmployeeOrder(EmployeDetailsToGetDto empToReturn, Employee empFromDb)
        {
            if (empToReturn.HasOrder)
            {
                BankBranch branch = await _uow.BankBranchRepository.Get(empFromDb.EmployeeOrder.BranchCode.Value);

                Models.Bank bank = _uow.BankRepository.Get(x => x.Id == branch.BankId).Result.SingleOrDefault();

                empToReturn.Order = new EmployeeOrderDto()
                {
                    Id = empFromDb.EmployeeOrder.Id,
                    OrderAccountNum = empFromDb.EmployeeOrder.OrderAccountNumber,
                    orderBranchCode = empFromDb.EmployeeOrder.BranchCode.Value,
                    OrderBankName   = bank.BankName,
                    OrderBranchName = branch.BranchName
                };
            }
            return(empToReturn);
        }
        public async Task <IActionResult> putAddEmployeeOrderBank(string id, EmployeDetailsToGetDto model)
        {
            var modelToDb = await _uow.EmployeeRepository.Get(model.Id);

            if (modelToDb == null)
            {
                return(NotFound());
            }
            if (modelToDb.HasOrder)
            {
                modelToDb.EmployeeOrder = new EmployeeOrder()
                {
                };
            }
            else
            {
            }
            await _uow.SaveChangesAsync();

            return(Ok());
        }