public async Task SendEmailToSupplierDetailingPaymentAsync(inv_invoice invoice, int phase) { EmailMessageObj em = new EmailMessageObj { ToAddresses = new List <EmailAddressObj>() }; var supplier = await _dataContext.cor_supplier.FindAsync(invoice.SupplierId); if (supplier != null) { em.ToAddresses.Add(new EmailAddressObj { Address = supplier.Email, Name = supplier.Name }); } var path = $"#/main/lpos"; var path2 = $"{_uRIs.SelfClient}/{path}"; em.Subject = $"Phase {phase} Payment"; em.Content = $"Dear Supplier <br> Invoice Number '{invoice.InvoiceNumber}' Phase '{phase}'" + $" has successfully been paid for." + $"<br>Please click <a href='{path2}'> here </a> to see details of Payment"; em.FromAddresses = new List <EmailAddressObj>(); em.SendIt = true; em.SaveIt = false; em.Template = (int)EmailTemplate.Default; await _serverRequest.SendMessageAsync(em); }
public async Task <bool> CreateUpdateInvoiceAsync(inv_invoice model) { if (model.InvoiceId > 0) { var itemToUpdate = await _dataContext.inv_invoice.FindAsync(model.InvoiceId); _dataContext.Entry(itemToUpdate).CurrentValues.SetValues(model); } else { await _dataContext.inv_invoice.AddAsync(model); } return(await _dataContext.SaveChangesAsync() > 0); }
public List <FinancialTransaction> BuildTaxEntryRequestObject(inv_invoice invoice) { var supplierType = new cor_suppliertype(); List <cor_taxsetup> tx = new List <cor_taxsetup>(); List <FinancialTransaction> fts = new List <FinancialTransaction>(); var supplierDetail = _suprepo.GetSupplierAsync(invoice.SupplierId).Result; if (supplierDetail != null) { var phase = _dataContext.cor_paymentterms.FirstOrDefault(d => d.PaymentTermId == invoice.PaymentTermId); var lpo = _dataContext.purch_plpo.FirstOrDefault(r => r.PLPOId == phase.LPOId); supplierType = _dataContext.cor_suppliertype.FirstOrDefault(rt => rt.SupplierTypeId == supplierDetail.SupplierTypeId); if (!string.IsNullOrEmpty(lpo.Taxes)) { var applicableTax = lpo.Taxes.Split(',').Select(int.Parse).ToList(); tx = _dataContext.cor_taxsetup.Where(q => applicableTax.Contains(q.TaxSetupId)).ToList(); } } if (tx.Count() > 0) { var banks = _financeServer.GetAllBanksAsync().Result; var creditGl = banks.bank.FirstOrDefault(q => q.BankGlId == invoice.PaymentBankId).SubGl; var currentPhase = _dataContext.cor_paymentterms.FirstOrDefault(q => q.PaymentTermId == invoice.PaymentTermId); foreach (var tax in tx) { var entryobj = new FinancialTransaction { Amount = currentPhase.Amount / 100 * Convert.ToDecimal(tax.Percentage), ApprovedBy = "staff", ApprovedDate = DateTime.Now, CompanyId = invoice.CompanyId, CreditGL = tax.SubGL, DebitGL = supplierType.CreditGL, CurrencyId = 0, ReferenceNo = invoice.InvoiceNumber, Description = $"Invoice {invoice.InvoiceNumber} {tax.TaxName} Tax", OperationId = (int)OperationsEnum.PaymentApproval, TransactionDate = DateTime.Now, }; fts.Add(entryobj); } return(fts); } return(new List <FinancialTransaction>()); }
public FinancialTransaction BuildSupplierSecondEntryRequestObject(inv_invoice invoice) { var banks = _financeServer.GetAllBanksAsync().Result; var creditGl = banks.bank.FirstOrDefault(q => q.BankGlId == invoice.PaymentBankId).SubGl; var currentPhase = _dataContext.cor_paymentterms.FirstOrDefault(q => q.PaymentTermId == invoice.PaymentTermId); return(new FinancialTransaction { Amount = currentPhase.Amount, ApprovedBy = "staff", ApprovedDate = DateTime.Now, CompanyId = invoice.CompanyId, CreditGL = creditGl, DebitGL = invoice.CreditGl, CurrencyId = 0, ReferenceNo = invoice.InvoiceNumber, Description = $"Invoice {invoice.InvoiceNumber}", OperationId = (int)OperationsEnum.PaymentApproval, TransactionDate = DateTime.Now, }); }
public FinancialTransaction BuildSupplierFirstEntryRequestObject(cor_paymentterms request, inv_invoice invoice) { cor_suppliertype suppliertype = new cor_suppliertype(); var lpo = _repo.GetLPOsAsync(request.LPOId).Result; var supplierDetail = _suprepo.GetSupplierAsync(lpo.WinnerSupplierId).Result; if (supplierDetail != null) { suppliertype = _suprepo.GetSupplierTypeAsync(supplierDetail.SupplierTypeId).Result; } return(new FinancialTransaction { Amount = request.NetAmount, ApprovedBy = "staff", ApprovedDate = DateTime.Now, CompanyId = lpo.CompanyId, CreditGL = suppliertype.CreditGL, DebitGL = suppliertype.DebitGL, CurrencyId = 0, ReferenceNo = invoice.InvoiceNumber, Description = $"Proposal Phase {request.Phase}", OperationId = (int)OperationsEnum.PaymentApproval, TransactionDate = DateTime.Now, }); }
public async Task <PaymentTermsRegRespObj> TransferPaymentAsync(inv_invoice invoice) { var paymentResponse = new PaymentTermsRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage() } }; try { var banks = await _financeServer.GetAllBanksAsync(); var currencies = await _serverRequest.GetSingleCurrencyAsync(invoice.CurrencyId); var CurrencyCode = currencies.commonLookups.FirstOrDefault(q => q.LookupId == invoice.CurrencyId)?.code; var suplierBankDetails = _dataContext.cor_bankaccountdetail.Where(d => d.SupplierId == invoice.SupplierId).ToList(); if (suplierBankDetails.Count() == 0) { paymentResponse.Status.Message.FriendlyMessage = "UnIdentified Supplier Bank Details"; return(paymentResponse); } var singlesupbnDet = suplierBankDetails.FirstOrDefault(a => invoice.SupplierBankId == a.BankAccountDetailId); if (singlesupbnDet == null) { paymentResponse.Status.Message.FriendlyMessage = "Unable to find Supplier Bank Details"; return(paymentResponse); } if (string.IsNullOrEmpty(CurrencyCode)) { paymentResponse.Status.Message.FriendlyMessage = "UnIdentified Currency"; return(paymentResponse); } if (banks.bank.Count() > 0) { if (!banks.bank.Select(w => w.BankGlId).Contains(singlesupbnDet.Bank)) { paymentResponse.Status.Message.FriendlyMessage = "UnIdentified Supplier Bank Details"; return(paymentResponse); } var trans = new TransferObj(); trans.account_bank = banks.bank.FirstOrDefault(q => q.BankGlId == invoice.PaymentBankId)?.BankCode; trans.account_number = singlesupbnDet.AccountNumber; trans.amount = Convert.ToInt64(invoice.Amount); trans.currency = CurrencyCode; trans.debit_currency = CurrencyCode; trans.narration = $"'{invoice.Description}' Payment"; trans.reference = invoice.InvoiceNumber; var res = await _financeServer.MakePaymentsAsync(trans); if (res.status == null || !res.status.Contains("success")) { paymentResponse.Status.Message.FriendlyMessage = res.message; //return paymentResponse; } var entryRequest1 = BuildSupplierSecondEntryRequestObject(invoice); var invoiceentry = await _financeServer.PassEntryAsync(entryRequest1); if (!invoiceentry.Status.IsSuccessful) { paymentResponse.Status.IsSuccessful = false; paymentResponse.Status.Message.FriendlyMessage = $"Unable to pass invoice entry : '{invoiceentry.Status.Message.FriendlyMessage}'"; _logger.Information(invoiceentry.Status.Message.FriendlyMessage); return(paymentResponse); } var entryRequest2 = BuildTaxEntryRequestObject(invoice); if (entryRequest2.Count() > 0) { foreach (var tx in entryRequest2) { var taxEntry = await _financeServer.PassEntryAsync(tx); if (!taxEntry.Status.IsSuccessful) { paymentResponse.Status.IsSuccessful = false; paymentResponse.Status.Message.FriendlyMessage = $"Unable to pass tax entry : '{taxEntry.Status.Message.FriendlyMessage}'"; _logger.Information(taxEntry.Status.Message.FriendlyMessage); return(paymentResponse); } } } paymentResponse.Status.IsSuccessful = true; return(paymentResponse); } else { paymentResponse.Status.Message.FriendlyMessage = "No bank Found"; return(paymentResponse); } } catch (Exception ex) { paymentResponse.Status.Message.FriendlyMessage = ex?.Message; return(paymentResponse); } }
private cor_approvaldetail BuildApprovalDetailObject(PaymentRequestStaffApprovalCommand request, inv_invoice currentItem, int staffId) { var approvalDeatil = new cor_approvaldetail(); var previousDetail = _detailService.GetApprovalDetailsAsync(request.TargetId, currentItem.WorkflowToken).Result; approvalDeatil.ArrivalDate = currentItem.CreatedOn ?? DateTime.Now; if (previousDetail.Count() > 0) { approvalDeatil.ArrivalDate = previousDetail.OrderByDescending(s => s.ApprovalDetailId).FirstOrDefault().Date; } approvalDeatil.Comment = request.ApprovalComment; approvalDeatil.Date = DateTime.Today; approvalDeatil.StatusId = request.ApprovalStatus; approvalDeatil.TargetId = request.TargetId; approvalDeatil.StaffId = staffId; approvalDeatil.ReferredStaffId = request.ReferredStaffId; approvalDeatil.WorkflowToken = currentItem.WorkflowToken; return(approvalDeatil); }