public async Task <ResponseDTO <PPDetailSearchByContractPeriodDTO> > CalculateOnAccountByContractAndPeriodAsync(PaymentPeriodSearchByContractPeriodRequest search) { Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true; if (search.PeriodId.HasValue) { queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId); } if (search.ContractId.HasValue) { queryFilter = queryFilter.And(p => p.ContractId == search.ContractId); } var header = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter); var onAccountPaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.OnAccount); var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.OnAccount); var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending); var onAccountDetail = new PPDetailSearchByContractPeriodDTO(); if (header != null) { if (header != null) { onAccountDetail.PaymentPeriodId = -2; onAccountDetail.ContractId = header.ContractId; onAccountDetail.PeriodId = header.PeriodId; onAccountDetail.PaymentAmount = 0; onAccountDetail.PaymentTypeId = onAccountPaymenType.GeneralTableId; onAccountDetail.PaymentTypeValue = onAccountPaymenType.Value; onAccountDetail.PaymentTypeCode = onAccountPaymenType.Code; onAccountDetail.PaymentTypeName = onAccountPaymenType.Code; onAccountDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending; onAccountDetail.PaymentPeriodStatusId = entityStatusPayment.EntityStatusId; onAccountDetail.IsRequired = false; onAccountDetail.IsSelected = false; onAccountDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Added; onAccountDetail.PaymentDescription = onAccountPaymenType.Value; onAccountDetail.ConceptId = concept.Data.ConceptId; onAccountDetail.TenantId = header.TenantId; onAccountDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending; return(ResponseBuilder.Correct(onAccountDetail)); } } return(null); }
public async Task <ResponseDTO <PPDetailSearchByContractPeriodDTO> > CalculateLateFeeByContractAndPeriodAsync(PaymentPeriodSearchByContractPeriodRequest search) { Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true; if (search.PeriodId.HasValue) { queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId); } if (search.ContractId.HasValue) { queryFilter = queryFilter.And(p => p.ContractId == search.ContractId); } var header = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter); var lateFeePaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.LateFee); var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.LateFee); var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending); var lateFeeDetail = new PPDetailSearchByContractPeriodDTO(); if (header != null) { //var header = paymentsPeriod.FirstOrDefault(); var delayDays = DateTime.Today.Subtract(header.PeriodDueDate.Value).TotalDays; queryFilter = queryFilter.And(p => p.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.LateFee); var existLateFeeInDB = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter); if (header != null) { if (existLateFeeInDB == null && delayDays > 0) { lateFeeDetail.PaymentPeriodId = -1; lateFeeDetail.ContractId = header.ContractId; lateFeeDetail.PeriodId = header.PeriodId; lateFeeDetail.PaymentAmount = 25 * (decimal?)delayDays; lateFeeDetail.PaymentTypeId = lateFeePaymenType.GeneralTableId; lateFeeDetail.PaymentTypeValue = lateFeePaymenType.Value; lateFeeDetail.PaymentTypeCode = lateFeePaymenType.Code; lateFeeDetail.PaymentTypeName = lateFeePaymenType.Code; lateFeeDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending; lateFeeDetail.PaymentPeriodStatusId = entityStatusPayment.EntityStatusId; lateFeeDetail.IsRequired = false; lateFeeDetail.IsSelected = false; lateFeeDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Added; lateFeeDetail.PaymentDescription = lateFeePaymenType.Value; lateFeeDetail.ConceptId = concept.Data.ConceptId; lateFeeDetail.TenantId = header.TenantId; lateFeeDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending; return(ResponseBuilder.Correct(lateFeeDetail)); } else if (existLateFeeInDB != null) { var entity = _mapper.Map <PPSearchByContractPeriodDTO, PPDetailSearchByContractPeriodDTO>(existLateFeeInDB); entity.PaymentAmount = 25 * (decimal?)delayDays; entity.TableStatus = DTOs.Requests.Common.ObjectStatus.Modified; return(ResponseBuilder.Correct(entity)); } } } return(null); }
public async Task <ResponseDTO <PPHeaderSearchByContractPeriodDTO> > SearchPaymentPeriodByContractAsync(PaymentPeriodSearchByContractPeriodRequest search) { Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true; if (search.PeriodId.HasValue) { queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId); } if (search.ContractId.HasValue) { queryFilter = queryFilter.And(p => p.ContractId == search.ContractId); } var paymentsPeriod = await _paymentPeriodSearchByContractDataAccess.ListAsync(queryFilter); var lateFeePaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.LateFee); var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending); var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.LateFee); var ppHeaderSearchByContractPeriodDTO = new PPHeaderSearchByContractPeriodDTO(); if (paymentsPeriod.Any()) { var header = paymentsPeriod.FirstOrDefault(); ppHeaderSearchByContractPeriodDTO.HouseName = header.HouseName; ppHeaderSearchByContractPeriodDTO.PeriodCode = header.PeriodCode; ppHeaderSearchByContractPeriodDTO.PeriodId = header.PeriodId; ppHeaderSearchByContractPeriodDTO.TenantFullName = header.TenantFullName; ppHeaderSearchByContractPeriodDTO.ContractId = header.ContractId; ppHeaderSearchByContractPeriodDTO.DueDate = header.DueDate; ppHeaderSearchByContractPeriodDTO.Email = header.Email; var detailList = new List <PPDetailSearchByContractPeriodDTO>(); var lateFeeDetail = new PPDetailSearchByContractPeriodDTO(); var delayDays = DateTime.Today.Subtract(header.PeriodDueDate.Value).TotalDays; var isLateFeeIncluded = false; var existLateFeeInDB = paymentsPeriod.Any(q => q.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.LateFee); foreach (var item in paymentsPeriod) { var detail = new PPDetailSearchByContractPeriodDTO(); detail.ContractId = item.ContractId; detail.PaymentPeriodId = item.PaymentPeriodId; detail.PaymentTypeValue = item.PaymentTypeValue; detail.PaymentAmount = item.PaymentAmount; detail.PaymentDescription = item.PaymentDescription; detail.PaymentPeriodStatusCode = item.PaymentPeriodStatusCode; detail.PaymentPeriodStatusName = item.PaymentPeriodStatusName; detail.IsRequired = item.IsRequired; detail.PaymentTypeCode = item.PaymentTypeCode; detail.IsSelected = item.IsRequired.Value && item.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Pending ? true : false; detail.InvoiceDetailId = item.InvoiceDetailId; detail.InvoiceId = item.InvoiceId; detail.InvoiceNo = item.InvoiceNo; detail.InvoiceDate = item.InvoiceDate; detailList.Add(detail); if (!existLateFeeInDB && delayDays > 0 && detail.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.Rent) { lateFeeDetail.PaymentPeriodId = -1; lateFeeDetail.ContractId = header.ContractId; lateFeeDetail.PeriodId = header.PeriodId; lateFeeDetail.PaymentAmount = 25 * (decimal?)delayDays; lateFeeDetail.PaymentTypeId = lateFeePaymenType.GeneralTableId; lateFeeDetail.PaymentTypeValue = lateFeePaymenType.Value; lateFeeDetail.PaymentTypeCode = lateFeePaymenType.Code; lateFeeDetail.PaymentTypeName = lateFeePaymenType.Code; lateFeeDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending; lateFeeDetail.PaymentPeriodStatusId = entityStatusPayment.EntityStatusId; lateFeeDetail.IsRequired = false; lateFeeDetail.IsSelected = false; lateFeeDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Added; lateFeeDetail.PaymentDescription = lateFeePaymenType.Value; lateFeeDetail.ConceptId = concept.Data.ConceptId; lateFeeDetail.TenantId = header.TenantId; lateFeeDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending; if (item.PaymentTypeSequence + 1 == lateFeePaymenType.Sequence) { //Inserting at Final detailList.Add(lateFeeDetail); isLateFeeIncluded = true; } } } //Inserting at Final if (!isLateFeeIncluded && lateFeeDetail.PaymentPeriodId.HasValue) { detailList.Add(lateFeeDetail); } ppHeaderSearchByContractPeriodDTO.PPDetail = detailList; } return(ResponseBuilder.Correct(ppHeaderSearchByContractPeriodDTO)); }