public async Task <bool> AddOrUpdateCollateralCustomerConsumptionAsync(CollateralCustomerConsumptionObj model)
        {
            var creditCollateralCustomerConsumptionDb = await _dataContext.credit_collateralcustomerconsumption.FirstOrDefaultAsync(x => x.CollateralCustomerConsumptionId == model.CollateralCustomerConsumptionId);

            if (creditCollateralCustomerConsumptionDb != null)
            {
                creditCollateralCustomerConsumptionDb.CollateralCustomerId            = model.CollateralCustomerId;
                creditCollateralCustomerConsumptionDb.CollateralCustomerConsumptionId = model.CollateralCustomerConsumptionId;
                creditCollateralCustomerConsumptionDb.LoanApplicationId = model.LoanApplicationId;
                creditCollateralCustomerConsumptionDb.Amount            = model.ActualCollateralValue;
                creditCollateralCustomerConsumptionDb.Active            = true;
                creditCollateralCustomerConsumptionDb.Deleted           = false;
                creditCollateralCustomerConsumptionDb.UpdatedBy         = model.CreatedBy;
                creditCollateralCustomerConsumptionDb.UpdatedOn         = DateTime.Now;
            }
            else
            {
                var item = new credit_collateralcustomerconsumption
                {
                    CollateralCustomerId            = model.CollateralCustomerId,
                    CollateralCustomerConsumptionId = model.CollateralCustomerConsumptionId,
                    CustomerId        = model.CustomerId,
                    LoanApplicationId = model.LoanApplicationId,
                    Amount            = model.ActualCollateralValue,
                    Active            = true,
                    Deleted           = false,
                    CreatedBy         = model.CreatedBy,
                    CreatedOn         = DateTime.Now,
                    UpdatedBy         = model.CreatedBy,
                    UpdatedOn         = DateTime.Now,
                };
                await _dataContext.credit_collateralcustomerconsumption.AddAsync(item);
            }
            return(await _dataContext.SaveChangesAsync() > 0);
        }
        public async Task <ActionResult <CollateralCustomerRespObj> > CalculateCurrentCustomerCollateralValue([FromQuery] CollateralCustomerSearchObj search)
        {
            try
            {
                var customerCollateral        = _repo.GetCollateralCustomer(search.CollateralCustomerId);
                var collateral                = _repo.GetCollateralType(customerCollateral.CollateralTypeId);
                var loanApplication           = _loanApplicationRepository.GetLoanApplication(search.LoanApplicationId);
                var allCollateralConsumptions = await _collateralCustomerConsumptionRepository
                                                .GetCollateralCustomerConsumptionByCollateralCustomerIdAsync(search.CollateralCustomerId);

                decimal totalConsumptionOnCollateral = 0;

                foreach (var coll in allCollateralConsumptions)
                {
                    totalConsumptionOnCollateral += coll.Amount;
                }

                var collateralValueWithHairCutConsidered = customerCollateral.CollateralValue;

                if (collateral.HairCut != 0 && collateral.HairCut != null)
                {
                    collateralValueWithHairCutConsidered = (customerCollateral.CollateralValue * (100 - collateral.HairCut.Value)) / 100;
                }

                var response = new CollateralCustomerConsumptionObj
                {
                    //ActualCollateralValue = customerCollateral.collateralValue,
                    Amount = 0,
                    CollateralCurrentAmount         = collateralValueWithHairCutConsidered - totalConsumptionOnCollateral,
                    CollateralCustomerId            = customerCollateral.CollateralCustomerId,
                    CollateralCustomerConsumptionId = search.collateralCustomerConsumptionId
                };

                if (search.collateralCustomerConsumptionId != 0)
                {
                    var consumption = await _collateralCustomerConsumptionRepository.GetCollateralCustomerConsumptionById(search.collateralCustomerConsumptionId);

                    response.ActualCollateralValue    = consumption.Amount;
                    response.CollateralCurrentAmount += consumption.Amount;
                }

                if (response != null)
                {
                    return(new CollateralCustomerRespObj
                    {
                        CollateralCustomerConsumption = response,
                        Status = new APIResponseStatus {
                            IsSuccessful = false, Message = new APIResponseMessage {
                                FriendlyMessage = "Successful"
                            }
                        }
                    });
                }
                return(new CollateralCustomerRespObj
                {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage {
                            FriendlyMessage = "Error Occurred"
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                var errorCode = ErrorID.Generate(5);
                _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                return(new CollateralCustomerRespObj
                {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage {
                            FriendlyMessage = "Error Occurred", TechnicalMessage = ex?.Message, MessageId = errorCode
                        }
                    }
                });
            }
        }
        public async Task <ActionResult <CollateralCustomerRespObj> > AddOrUpdateCollateralCustomerConsumptionAsync([FromBody] CollateralCustomerConsumptionObj model)
        {
            try
            {
                var user = await _serverRequest.UserDataAsync();

                var createdBy = user.UserName;
                model.CreatedBy = createdBy;
                model.UpdatedBy = createdBy;
                var isDone = await _collateralCustomerConsumptionRepository.AddOrUpdateCollateralCustomerConsumptionAsync(model);

                return(new CollateralCustomerRespObj
                {
                    Status = new APIResponseStatus {
                        IsSuccessful = true, Message = new APIResponseMessage {
                            FriendlyMessage = "Successful"
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                var errorCode = ErrorID.Generate(5);
                _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                return(new CollateralCustomerRespObj
                {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage {
                            FriendlyMessage = "Error Occurred", TechnicalMessage = ex?.Message, MessageId = errorCode
                        }
                    }
                });
            }
        }