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)); }
public async Task <ResponseDTO <PPDetailSearchByContractPeriodDTO> > CalculateOnAccountByContractAndPeriod([FromUri] PaymentPeriodSearchByContractPeriodRequest search) { var resp = await _paymentPeriodApplicationService.CalculateOnAccountByContractAndPeriodAsync(search); return(resp); }
public async Task <ResponseDTO <PPHeaderSearchByContractPeriodDTO> > SearchCriteriaByContract([FromUri] PaymentPeriodSearchByContractPeriodRequest search) { var resp = await _paymentPeriodApplicationService.SearchPaymentPeriodByContractAsync(search); return(resp); }
public async Task <ResponseDTO> SendPaymentNotificationEMail([FromUri] PaymentPeriodSearchRequest search) { var resp = await _paymentPeriodApplicationService.SearchPaymentPeriodAsync(search); MailConfiguration mailConfig = new MailConfiguration(); var fromEmail = System.Configuration.ConfigurationManager.AppSettings["fromEmail"]; var userName = System.Configuration.ConfigurationManager.AppSettings["userName"]; var password = System.Configuration.ConfigurationManager.AppSettings["password"]; var msg = new StringBuilder(); foreach (var header in resp.Data.Items.ToList()) { var searchByContractAndPeriod = new PaymentPeriodSearchByContractPeriodRequest(); searchByContractAndPeriod.ContractId = header.ContractId; searchByContractAndPeriod.PeriodId = header.PeriodId; var paymentPeriod = await _paymentPeriodApplicationService.SearchPaymentPeriodByContractAsync(searchByContractAndPeriod); var template = File.ReadAllText(System.Web.Hosting.HostingEnvironment.MapPath("~/Templates/PayNotificationTemplate.html")); var data = JsonConvert.DeserializeObject <Dictionary <string, object> >(JsonConvert.SerializeObject(paymentPeriod.Data)); var paymentDetailHtml = string.Empty; if (paymentPeriod.Data.PPDetail.Any()) { try { if (paymentPeriod.Data.Email == null) { msg.AppendLine(string.Format("Email for: {0} is null {1}", paymentPeriod.Data.TenantFullName, Environment.NewLine)); continue; } var toEmail = paymentPeriod.Data.Email; paymentDetailHtml = await CreatePaymentDetailHtml(paymentPeriod.Data.PPDetail); data.Add("PaymentPeriodDetail", paymentDetailHtml); var emailBody = ProcessTemplate(template, data); var mail = new MailMessage { From = new MailAddress(fromEmail), Subject = string.Format("Payment Notification - Renta AmigoTenant - Periodo: {0}", header.PeriodCode), Body = emailBody, IsBodyHtml = true }; mail.To.Add(toEmail); var client = new SmtpClient("smtp.gmail.com") { Port = 587, Credentials = new System.Net.NetworkCredential(userName, password), EnableSsl = true }; client.Send(mail); } catch (Exception ex) { msg.AppendLine(string.Format("ERROR trying to send email for: {0}{1}{2}", paymentPeriod.Data.TenantFullName, Environment.NewLine, ex.StackTrace.ToString())); } } } var response = new ResponseDTO() { IsValid = string.IsNullOrEmpty(msg.ToString()), Messages = new List <ApplicationMessage>() }; response.Messages.Add(new ApplicationMessage() { Key = string.IsNullOrEmpty(msg.ToString()) ? "Ok" : "Error", Message = msg.ToString() }); return(response); }