/// <summary>
        /// To Get DepositLogs depending on DepositeDate and ClientCode
        /// </summary>
        /// <param name="clientCode"></param>
        /// <param name="depositDate"></param>
        /// <returns></returns>
        public DepositLogClientDataViewModel GetDepositLogsOfClientForDate(string clientCode, DateTime depositDate)
        {
            DepositLogClientDataViewModel depositLogClientData = new DepositLogClientDataViewModel();

            try
            {
                List <BusinessModel.BusinessModels.ClientPayer> payerDetails = _depositLogResposiotory.GetDepositLogsForClientDate(clientCode, depositDate);
                depositLogClientData.ClientCode = clientCode;
                depositLogClientData.Date       = depositDate.Date;
                depositLogClientData.Payers     = new List <PayerDataViewModel>();
                if (payerDetails?.Count > 0)
                {
                    foreach (BusinessModel.BusinessModels.ClientPayer payer in payerDetails)
                    {
                        PayerDataViewModel clientPayer = new PayerDataViewModel();
                        clientPayer.PayerCode = payer.Payer?.PayerCode;
                        clientPayer.PayerName = payer.Payer?.PayerName;
                        clientPayer.Amount    = payer.DepositLog?.First().Amount;
                        depositLogClientData.Payers.Add(clientPayer);
                    }
                }
                else
                {
                    depositLogClientData.Payers = GetPayersForClient(clientCode);
                }
                depositLogClientData.Total         = depositLogClientData.Payers.Sum(c => c.Amount);
                depositLogClientData.IsMonthClosed = _depositLogResposiotory.IsMonthOfAYearClosedForAClient(clientCode, depositDate.Month, depositDate.Year);
                return(depositLogClientData);
            }
            catch (Exception ex)
            {
                _logger.Log(ex, LogLevel.Error, ex.Message);
                return(depositLogClientData);
            }
        }
        /// <summary>
        /// To Save Deposite logs into Database
        /// </summary>
        /// <param name="clientDepositLog"></param>
        public ValidationViewModel SaveClientDepositLogData(DepositLogClientDataViewModel clientDepositLog)
        {
            ValidationViewModel response         = new ValidationViewModel();
            BusinessResponse    businessResponse = new BusinessResponse();

            try
            {
                List <BusinessModel.BusinessModels.ClientPayer> clientPayers  = new List <ClientPayer>();
                BusinessModel.BusinessModels.DepositLog         depositLogDTO = new BusinessModel.BusinessModels.DepositLog();
                foreach (PayerDataViewModel payer in clientDepositLog.Payers)
                {
                    BusinessModel.BusinessModels.ClientPayer clientPayer = new ClientPayer();
                    clientPayer.Payer           = new BusinessModel.BusinessModels.Payer();
                    clientPayer.Payer.PayerCode = payer.PayerCode;
                    clientPayer.Payer.PayerName = payer.PayerName;

                    clientPayer.DepositLog = new List <BusinessModel.BusinessModels.DepositLog>();
                    clientPayer.DepositLog.Add(new BusinessModel.BusinessModels.DepositLog {
                        DepositDate = clientDepositLog.Date, Amount = payer.Amount
                    });
                    clientPayers.Add(clientPayer);
                }
                businessResponse.IsSuccess = _depositLogResposiotory.SaveDepositLogs(clientPayers, clientDepositLog.ClientCode, clientDepositLog.SavedLastNumberOfBusinessDays);
                if (businessResponse.IsSuccess)
                {
                    businessResponse.Messages.Add(new MessageDTO()
                    {
                        Message = BusinessConstants.DEPOSIT_LOG_SAVE_SUCCESS, MessageType = Infrastructure.Enums.MessageType.Info
                    });
                }
                else
                {
                    businessResponse.Messages.Add(new MessageDTO()
                    {
                        Message = BusinessConstants.DEPOSIT_LOG_SAVE_FAIL, MessageType = Infrastructure.Enums.MessageType.Error
                    });
                }
                return(businessResponse.ToValidationViewModel());
            }
            catch (Exception ex)
            {
                _logger.Log(ex, LogLevel.Error, ex.Message);
                businessResponse.IsSuccess          = false;
                businessResponse.IsExceptionOccured = true;
                businessResponse.Messages.Add(new MessageDTO()
                {
                    Message = BusinessConstants.DEPOSIT_LOG_SAVE_FAIL, MessageType = Infrastructure.Enums.MessageType.Error
                });
                return(businessResponse.ToValidationViewModel());
            }
        }
        /// <summary>
        /// To get ClientPayers associated to Client
        /// </summary>
        /// <param name="clientCode"></param>
        /// <returns></returns>
        public DepositLogClientDataViewModel GetPayerDetailsForClient(string clientCode)
        {
            DepositLogClientDataViewModel clientPayers = new DepositLogClientDataViewModel();

            try
            {
                clientPayers.ClientCode = clientCode;
                clientPayers.Payers     = GetPayersForClient(clientCode);
            }
            catch (Exception ex)
            {
                _logger.Log(ex, LogLevel.Error, ex.Message);
            }
            return(clientPayers);
        }
 public ValidationViewModel SaveClientDepositLogs([FromBody] DepositLogClientDataViewModel depositeLogData)
 {
     return(_depositLogBusiness.SaveClientDepositLogData(depositeLogData));
 }