Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 5
0
        /// <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();
        }