/// <summary> /// Load data when the invoice is supplied /// </summary> /// <param name="invoiceNo"></param> private void PopulateFields(string invoiceNo) { if (IsUpdate) { if (!string.IsNullOrWhiteSpace(invoiceNo)) { tblInv_Info invoiceInfo = _repositoryWrapper.InvoiceInfo.GetById(invoiceNo); if (invoiceInfo == null) { return; } string invoicePaid = (invoiceInfo.Inv_Paid)? "Yes" : "No"; if (rblInvoicePaid.Items.FindByText(invoicePaid) != null) { rblInvoicePaid.Items.FindByText(invoicePaid).Selected = true; } txtComments.Text = invoiceInfo.Comments; DdlClientId.SelectedValue = invoiceInfo.Client_id; LoadClientInfo(invoiceInfo.Client_id); LoadCartGrid(invoiceNo, invoiceInfo.Client_id); } } }
/// <summary> /// Replace Invoice Detauils /// </summary> /// <param name="document"></param> /// <param name="inv_Info"></param> private static void ReplaceInvoiceDetails(DocX document, tblInv_Info inv_Info) { document.ReplaceText("{InvNum}", inv_Info.Inv_Num); document.ReplaceText("{InvDate}", inv_Info.Inv_Date.ToDateFormat()); document.ReplaceText("{PaymentDate}", inv_Info.Inv_Paid ? "Payment Date" : string.Empty); document.ReplaceText("{PDate}", inv_Info.Inv_Paid ? $": {inv_Info.Inv_Paid_Date.FromNullableDateToDateFormat()}": string.Empty); }
/// <summary> /// Generate Invoince and convert it to PDF /// T1 - File name /// T2 - Content Type /// T3 - Byte array /// </summary> /// <param name="invoiceNo"></param> /// <param name="repositoryWrapper"></param> /// <param name="templatePath"></param> /// <returns></returns> public static Tuple <string, string, byte[]> GenerateInvoice(string invoiceNo, IRepositoryWrapper repositoryWrapper, string templatePath) { var templateFile = $"{templatePath}{ConfigurationManager.AppSettings["FileName"]}"; if (string.IsNullOrEmpty(templateFile)) { throw new Exception("Invoice Template file could not be found"); } if (!File.Exists(templateFile)) { throw new Exception($"Template file does not exists on location:{Path.GetDirectoryName(templateFile)}"); } tblInv_Info inv_Info = repositoryWrapper.InvoiceInfo.GetById(invoiceNo); if (inv_Info == null) { throw new Exception($"No Invoice exists with invoice Number:{invoiceNo}"); } tblClientInfo clientInfo = repositoryWrapper.ClientInfo.GetById(inv_Info.Client_id); List <spGetCartItems_Result> cartItems = repositoryWrapper.InvoiceItems.GetCartItems(invoiceNo, inv_Info.Client_id); string fileName = string.Empty; using (DocX document = DocX.Load(templateFile)) { ReplaceClientDetails(document, clientInfo); ReplaceInvoiceDetails(document, inv_Info); ReplaceInvoiceItems(document, cartItems, inv_Info.Inv_Paid); //save the new file fileName = $@"{Path.GetDirectoryName(templateFile)}\{invoiceNo}.docx"; document.SaveAs(fileName); } var fileExtension = Path.GetExtension(fileName); if (string.IsNullOrWhiteSpace(fileExtension)) { return(null); } if (!new[] { ".doc", ".docx" }.Contains(fileExtension)) { return(null); } var pdfFileName = $@"{Path.GetDirectoryName(fileName)}\{Path.GetFileName(fileName).Replace(fileExtension, ".pdf")}"; return(ConvertToPDF(fileName, pdfFileName)); }
/// <summary> /// Send an email to Client /// </summary> /// <param name="invoiceNumber">Invoice Number</param> /// <param name="subject">Optional Email subject</param> /// <param name="content">Optional Email Content</param> /// <param name="templatePath">Invice Template path</param> /// <param name="repositoryWrapper"></param> /// <param name="emailSender"></param> /// <param name="textFormat"></param> /// <param name="CC"></param> /// <param name="BCC"></param> public static void SendEmail(string invoiceNumber, string templatePath, IRepositoryWrapper repositoryWrapper, IEmailSender emailSender, MimeKit.Text.TextFormat textFormat = MimeKit.Text.TextFormat.Html, IEnumerable <string> CC = null, IEnumerable <string> BCC = null, string subject = null, string content = null) { subject = subject ?? "Your Shopping Item(s)"; content = content ?? "Hi <br/> Please see attached invoice for your shopping items.<br/><br/><br/> Regards,<br/>Alt Health Sales Team."; tblInv_Info inv_Info = repositoryWrapper.InvoiceInfo.GetById(invoiceNumber); if (string.IsNullOrWhiteSpace(inv_Info?.Client_id ?? string.Empty)) { return; } tblClientInfo tblClientInfo = repositoryWrapper.ClientInfo.GetById(inv_Info.Client_id); if (string.IsNullOrWhiteSpace(tblClientInfo?.C_Email ?? string.Empty)) { return; } Tuple <string, string, byte[]> invoice = DocumentHelper.GenerateInvoice(invoiceNumber, repositoryWrapper, templatePath); Dictionary <string, byte[]> attachments = new Dictionary <string, byte[]> { { invoice.Item1, invoice.Item3 } }; emailSender.SendEmail(new EmailHelper.Classes.Message(new[] { tblClientInfo.C_Email }, subject, content, CC, BCC, textFormat, attachments)); }
/// <summary> /// Save Invoice details /// </summary> private void Save() { bool IsValid = !string.IsNullOrWhiteSpace(txtQuantity.Text) && !string.IsNullOrWhiteSpace(DdlSuplimentID.SelectedValue); if (!IsValid && !grdCartItems.HasRows()) { lblError.Text = "Add atleast one item in shopping cart"; return; } // Save Invoice info bool invoicePaid = bool.Parse(rblInvoicePaid.SelectedValue); tblInv_Info inv_Info = new tblInv_Info { Inv_Num = lblInvoiceNo.Text, Inv_Date = DateTime.Now, Inv_Paid = invoicePaid, Comments = txtComments.Text, Client_id = DdlClientId.SelectedValue }; var invoiceInfo = _repositoryWrapper.InvoiceInfo.GetById(inv_Info.Inv_Num); if (invoiceInfo != null) { inv_Info.Inv_Date = invoiceInfo.Inv_Date; inv_Info.Inv_Paid_Date = invoicePaid && invoiceInfo.Inv_Paid_Date == null ? DateTime.Now : invoiceInfo.Inv_Paid_Date; _repositoryWrapper.InvoiceInfo.Update(inv_Info, inv_Info.Inv_Num); } else { _repositoryWrapper.InvoiceInfo.Add(inv_Info); } if (!IsValid) { return; } int quantity = int.Parse(txtQuantity.Text); if (quantity == 0) { lblError.Text = "The Quantiy must be greater than 0"; return; } //Check stock KeyValuePair <bool, tblSupplement> supplement = IsStockAvailable(DdlSuplimentID.SelectedValue, quantity, lblInvoiceNo.Text); if (!supplement.Key) { lblError.Text = $"The quantity supplied:{quantity} exceeds the stock we have.Please reduce your quantity to be less than or equal to :{supplement.Value?.Current_Stock_Levels}"; return; } //Save Invoice Items tblInv_items invoiceItem = new tblInv_items { Item_Price = supplement.Value.Cost_incl, Item_Quantity = quantity, Supplement_id = DdlSuplimentID.SelectedValue, Inv_Num = inv_Info.Inv_Num }; var dbInvoiceItem = _repositoryWrapper.InvoiceItems.Get(where : item => item.Inv_Num == invoiceItem.Inv_Num && item.Supplement_id == invoiceItem.Supplement_id); int dbQuantity = 0; if (dbInvoiceItem == null) { _repositoryWrapper.InvoiceItems.Add(invoiceItem); } else { dbQuantity = dbInvoiceItem.Item_Quantity; _repositoryWrapper.InvoiceItems.Update(invoiceItem, new object[] { invoiceItem.Supplement_id, invoiceItem.Inv_Num }); } UpdateStockLevels(supplement.Value.Supplement_id, -invoiceItem.Item_Quantity, dbQuantity); LoadCartGrid(invoiceItem.Inv_Num, inv_Info.Client_id); ClearControls(); }