public static void Print(string barcode, string head, List <PrintGroupProduct> printGroupProducts, string total, string sumDiscount, List <PrintTypePay> printPays, decimal rendu, string footer, PrintClientInfo infoOfClient, bool duplicateF) { var printDialog = new PrintDialog(); var docContext = CreateDocumentContext(barcode, head, printGroupProducts, total, sumDiscount, printPays, rendu, footer, infoOfClient, duplicateF); var docString = TemplatePathCheckPrint.Render(docContext); try { var doc = (FlowDocument)XamlReader.Parse(docString); var paginator = ((IDocumentPaginatorSource)doc).DocumentPaginator; doc.PageWidth = 285; doc.PagePadding = new Thickness(11, 0, 0, 0); doc.ColumnGap = 0; doc.ColumnWidth = 0; var queue = printDialog.PrintQueue; var writer = PrintQueue.CreateXpsDocumentWriter(queue); writer.Write(paginator); } catch (System.Exception ex) { var text = ex.Message + docString + "."; FunctionsService.ShowMessageSb(text); LogService.Log(TraceLevel.Error, 11, text); } }
public ClassPrintCheck(XContainer rootElement, bool duplicate) { Duplicate = duplicate; var listProduct = new List <PrintGroupProduct>(); _tva = new List <string>(); foreach (var p in RepositoryTypePay.TypePays) { var money = rootElement.GetXAttribute("check", p.NameCourt.Trim()); if (money != null) { _attr.Add(new PrintTypePay(p, money.Value.ToDecimal())); } } Rendu = rootElement.GetXAttributeValue("check", "Rendu").ToDecimal(); var xe = rootElement.GetXElements("check", "product"); var sum = 0.0m; var sumDiscounts = 0.0m; foreach (var e in xe) { var discount = e.GetXElementValue("Discount").ToDecimal(); var sumDiscount = -e.GetXElementValue("sumDiscount").ToDecimal(); var codebare = e.GetXElementValue("CodeBare").Trim(); var qty = e.GetXElementValue("qty").ToDecimal(); var name = e.GetXElementValue("Name"); var total = e.GetXElementValue("total").ToDecimal() - sumDiscount; var price = e.GetXElementValue("price").ToDecimal(); var categories = RepositoryGroupProduct.GetGroupNameById(e.GetXElementValue("grp").ToInt()); var tva = e.GetXElementValue("tva").ToInt(); var customerId = e.GetXElementValue("CustomerId").ToGuid(); var p = new PrintProduct(customerId, categories, codebare, name, qty, total, price, tva, discount, sumDiscount); #region DISCOUNT if (discount > 0) { var discountcategories = "Remise " + p.ProcentDiscount + "%"; var discountIndx = listProduct.FindIndex(l => l.Categories == discountcategories); if (discountIndx == -1) { var pn = new PrintProduct(Guid.Empty, discountcategories, Barcode, name, qty, total, price, tva, discount, sumDiscount); listProduct.Add(new PrintGroupProduct(discountcategories, pn)); } else { // groupProduct.product pn = new groupProduct.product(Guid.Empty, discountcategories, "", name, 1, sumDiscount, 0, tva_, Discount, sumDiscount); var pn = new PrintProduct(Guid.Empty, discountcategories, Barcode, name, qty, total, price, tva, discount, sumDiscount); var repeat = listProduct[discountIndx].Products.FindIndex(l => l.Name == name); if (repeat != -1) { listProduct[discountIndx].Products[repeat].Total += pn.SumDiscount; listProduct[discountIndx].Products[repeat].Price = pn.Price; listProduct[discountIndx].Products[repeat].TvaTotal += pn.TvaTotal; listProduct[discountIndx].Products[repeat].Ht += pn.Ht; listProduct[discountIndx].Products[repeat].SumDiscount += pn.SumDiscount; } else { listProduct[discountIndx].Products.Add(pn); } } sumDiscounts -= sumDiscount; } #endregion var indx = listProduct.FindIndex(l => l.Categories == p.Categories); if (indx != -1) { var f = listProduct[indx].Products.FindIndex(l => (l.CustomerId == p.CustomerId) && l.Price == p.Price); if (f == -1) { listProduct[indx].Products.Add(p); } else { if (listProduct[indx].Products[f].Categories != "Remise " + p.ProcentDiscount + "%") { listProduct[indx].Products[f].Qty += p.Qty; listProduct[indx].Products[f].Total += p.Total; listProduct[indx].Products[f].Price = p.Price; listProduct[indx].Products[f].TvaTotal += p.TvaTotal; listProduct[indx].Products[f].Ht += p.Ht; listProduct[indx].Products[f].SumDiscount += p.SumDiscount; } } } else { listProduct.Add(new PrintGroupProduct(categories, p)); } sum += total; } listProduct = listProduct.OrderBy(l => l.Categories).ToList(); var listProductDiscount = listProduct.FindAll(l => l.Categories.IndexOf("Discount") != -1); listProduct.RemoveAll(l => l.Categories.IndexOf("Discount") != -1); var listProductDiscountRemise = listProduct.FindAll(l => l.Categories.IndexOf("Remise") != -1); listProduct.RemoveAll(l => l.Categories.IndexOf("Remise") != -1); listProduct.AddRange(listProductDiscount); listProduct.AddRange(listProductDiscountRemise); Head = File.ReadAllText(PathH); Footer = File.ReadAllText(PathF); Barcode = rootElement.GetXAttributeValue("check", "barcodeCheck"); Totals = (sum - sumDiscounts).ToString("0.00"); SumDiscount = sumDiscounts.ToString("0.00"); #region DiscountPoints var a0 = rootElement.GetXAttribute("check", "DCBC"); var a1 = rootElement.GetXAttribute("check", "DCBC_BiloPoints"); var a2 = rootElement.GetXAttribute("check", "DCBC_DobavilePoints"); var a3 = rootElement.GetXAttribute("check", "DCBC_OtnayliPoints"); var a4 = rootElement.GetXAttribute("check", "DCBC_OstalosPoints"); var a5 = rootElement.GetXAttribute("check", "DCBC_name"); var bcdc = a0?.Value; if (!string.IsNullOrEmpty(bcdc)) { C = new PrintClientInfo { Dcbc = a0.Value, DcbcBiloPoints = a1.Value, DcbcDobavilePoints = a2.Value, DcbcOtnayliP = a3.Value, DcbcOstalosPoints = a4.Value, DcbcName = a5.Value } } ; #endregion DotLiquidService.Print(Barcode, Head, listProduct, Totals, SumDiscount, _attr, Rendu, Footer, C, duplicate); }
private static Hash CreateDocumentContext(string barcode, string head, IEnumerable <PrintGroupProduct> printGroupProducts, string total, string sumDiscount, IEnumerable <PrintTypePay> printPays, decimal rendu, string footer, PrintClientInfo printClientInfo, bool duplicateF) { var tvases = RepositoryTva.Tvases.Select(t => new PrintTva(t, 0, t.Value, 0)).ToList(); var listGroup = new List <dynamic>(); foreach (var group in printGroupProducts) { var listProducts = new List <dynamic>(); foreach (var product in group.Products) { listProducts.Add(new { name = product.Name.Length > 30 ? SpecTransform(product.Name.Substring(0, 30)) : SpecTransform(product.Name), total = product.Total.ToString("0.00"), qty = product.Qty, price = product.Price.ToString("0.00") }); var indx = tvases.FindIndex(l => l.Tva.Id == product.TvaId); if (indx != -1) { tvases[indx].Ttc += product.TvaTotal; tvases[indx].Ht += product.Ht; } } listGroup.Add(new { categories = SpecTransform(group.Categories), Products = listProducts }); } var listPay = new List <dynamic>(); foreach (var pay in printPays.Where(pay => pay.Money != 0)) { listPay.Add(new { name = pay.Type.CheckName, money = pay.Money.ToString("0.00") }); } var listTva = new List <dynamic>(); decimal totalTva = 0; decimal totalTvaht = 0; foreach (var tva in tvases.Where(tva => tva.Ttc != 0)) { listTva.Add(new { name = tva.TvaDecimal + "%", money = tva.Ttc.ToString("0.00"), ht = tva.Ht.ToString("0.00") }); totalTva += tva.Ttc; totalTvaht += tva.Ht; } if (listTva.Count == 1) { totalTva = 0; totalTvaht = 0; } var numeroTicket = Environment.NewLine + Config.NameTicket + " - " + DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToShortTimeString(); var incodeBarcode = "*" + barcode + "*"; var context = new { Duplicate = duplicateF ? "*** DUPLICATA ***" : null, GroupProducts = listGroup, Header = head, TotalTTC = total, Pays = listPay, TVA = listTva, TotalTVA = totalTva == 0 ? null : totalTva.ToString("0.00"), TotalTVAHT = totalTvaht == 0 ? null : totalTvaht.ToString("0.00"), BARCODE = barcode, Rendu = (rendu == 0 ? null : rendu.ToString()), Discount = sumDiscount == "0,00" ? null : sumDiscount, Footer = footer, NumeroTicket = numeroTicket, DCBC_name = printClientInfo != null ? printClientInfo.DcbcName : null, DCBC = printClientInfo != null ? printClientInfo.Dcbc.Substring(0, 5) + "xx-xxx-xx" + printClientInfo.Dcbc.Substring(printClientInfo.Dcbc.Length - 1, 1) : null, DCBC_BiloPoints = printClientInfo != null ? printClientInfo.DcbcBiloPoints : null, DCBC_DobavilePoints = printClientInfo != null ? printClientInfo.DcbcDobavilePoints : null, DCBC_OstalosPoints = printClientInfo != null ? printClientInfo.DcbcOstalosPoints : null, DCBC_OtnayliP = printClientInfo != null ? printClientInfo.DcbcOtnayliP : null, IncodeBarcode = incodeBarcode, Facture = ClassProMode.ModePro ? "" : null }; return(Hash.FromAnonymousObject(context)); }
public Graphics PrintCheck(string barcode, string head, List <PrintGroupProduct> lProduct, string total, string sumDiscount, List <PrintTypePay> lPay, decimal rendu, string footer, PrintClientInfo infoOfClient, Graphics gt) { var rect = new List <Rectangle>(); var x1 = 0; var y1 = 0; var w = 280 * 20; var h = 134 * 20; var fillRectangleImg = new Rectangle(x1, y1, w, h); y1 = h; h = 15 * head.Split('\n').Length *20; var fillRectangleHead = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleHead); string duplicate = null; var fillRectangleDuplicate = new Rectangle(); if (Duplicate) { y1 = y1 + h; h = 25; duplicate = "*** DUPLICATA ***"; fillRectangleDuplicate = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleDuplicate); } y1 = y1 + h; h = 25; const string vente = "*** VENTE ***"; var fillRectangleVente = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleVente); y1 = y1 + h; var de = new TemplateCheck(); de.DrawElements(lProduct, x1, y1, out x1, out y1); h = 10; const string totalLine = "__________________"; var fillRectangleTotal = new Rectangle(x1 + 135, y1 - 6, 150, h); rect.Add(fillRectangleTotal); h = 20; const string totalLabel = "TOTAL :"; var fillRectangleTotal1 = new Rectangle(x1 + 145, y1 + 1, 70, h); var totalText = total; var fillRectangleTotal2 = new Rectangle(x1 + 210, y1, 70, h); y1 = y1 + h; de.DrawPays(lPay, x1, y1 + 5, out x1, out y1); w = 280; h = 15; var Rendu = "Rendu :"; var fillRectangleRendu = new Rectangle(x1 + 20, y1, 140, h); var fontRendu = new Font("Arial", 9); rect.Add(fillRectangleRendu); var renduVal = rendu.ToString("0.00 €"); var fillRectangleRenduVal = new Rectangle(x1 + 170, y1, 90, h); rect.Add(fillRectangleRenduVal); y1 = y1 + h; h = 25; var titleTva = "*** TVA ***"; var fillRectangleTitleTva = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleTitleTva); y1 = y1 + h; de.DrawTvases(x1, y1, out x1, out y1); string titleRemise = null; string discount = null; string discount1 = null; var fillRectangleTitleRemise = new Rectangle(); var fillRectangleDiscount = new Rectangle(); var fillRectangleDiscount1 = new Rectangle(); if (decimal.Parse(sumDiscount) > 0) { y1 = y1 + h; w = 280; h = 20; titleRemise = "*** REMISE ***"; fillRectangleTitleRemise = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleTitleRemise); y1 = y1 + h; h = 20; discount = "Total remise sur ce ticket : "; fillRectangleDiscount = new Rectangle(x1, y1, 200, h); discount1 = sumDiscount; fillRectangleDiscount1 = new Rectangle(x1 + 200, y1, 80, h); } #region INFO OF CLIENT string dcbcName = null; string dcbcBiloPoints = null; string dcbcBiloPoints1 = null; string dobavilePoints = null; string dobavilePoints1 = null; string ostalosPoints = null; string ostalosPoints1 = null; string carte = null; var fillRectangleDcbcName = new Rectangle(); var fillRectangleDcbcBiloPoints = new Rectangle(); var fillRectangleDcbcBiloPoints1 = new Rectangle(); var fillRectangleDobavilePoints = new Rectangle(); var fillRectangleDobavilePoints1 = new Rectangle(); var fillRectangleOtnayliP = new Rectangle(); var fillRectangleOtnayliP1 = new Rectangle(); var fillRectangleOstalosPoints = new Rectangle(); var fillRectangleOstalosPoints1 = new Rectangle(); var fillRectangleTCarte = new Rectangle(); if (infoOfClient != null) { y1 = y1 + h; w = 280; h = 20; carte = "*** CARTE FIDELITE ***"; fillRectangleTCarte = new Rectangle(x1, y1, w, h); rect.Add(fillRectangleTCarte); y1 = y1 + h; w = 280; h = 20; dcbcName = infoOfClient.DcbcName + " - " + infoOfClient.Dcbc; fillRectangleDcbcName = new Rectangle(x1, y1, w, h); y1 = y1 + h; h = 12; dcbcBiloPoints = "Ancien solde de points : "; fillRectangleDcbcBiloPoints = new Rectangle(x1, y1, 180, h); dcbcBiloPoints1 = infoOfClient.DcbcBiloPoints; fillRectangleDcbcBiloPoints1 = new Rectangle(x1 + 180, y1, 80, h); y1 = y1 + h; h = 12; dobavilePoints = "Points fidelité acquis : "; fillRectangleDobavilePoints = new Rectangle(x1, y1, 180, h); dobavilePoints1 = infoOfClient.DcbcDobavilePoints; fillRectangleDobavilePoints1 = new Rectangle(x1 + 180, y1, 80, h); y1 = y1 + h; h = 12; ostalosPoints = "Nouveau solde de points : "; fillRectangleOstalosPoints1 = new Rectangle(x1, y1, 180, h); ostalosPoints1 = infoOfClient.DcbcOstalosPoints; fillRectangleOstalosPoints = new Rectangle(x1 + 180, y1, 80, h); } #endregion y1 = y1 + h; w = 260; h = 40; var fillRectangleBarCodeImg = new Rectangle(x1 + 10, y1 + 5, w, h); y1 = y1 + h + 5; w = 280; h = 30; var numeroTicket = barcode + Environment.NewLine + Config.NameTicket + " - " + DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToShortTimeString(); var fillRectangleNumeroTicket = new Rectangle(x1, y1, w, h); y1 = y1 + h; w = 280; h = 20 * footer.Split('\n').Length; var fillRectangleFooter = new Rectangle(x1, y1, w, h); y1 = y1 + 20; var textFont = new Font("Arial", 9); var textBrush = new SolidBrush(Color.Black); var textFormatL = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center }; var textFormatR = new StringFormat { Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Center }; var textFormatC = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; /*Total VENTE*/ var fontTotal = new Font("Arial", 10, FontStyle.Bold); /*Title*/ var fontTitle = new Font("Arial", 12, FontStyle.Bold); var formatTitle = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; /* Arial , 8 , Bold*/ var fontArialBold = new Font("Arial", 8, FontStyle.Bold); var textFormat = new StringFormat { Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Far }; int nWidth = w, nHeight = y1; var b1 = new Bitmap(nWidth, nHeight); using (var g = Graphics.FromImage(b1)) { g.CompositingQuality = CompositingQuality.HighQuality; foreach (var e in de.PrintElements) { g.DrawString(e.Text, e.Font, textBrush, e.Rectangle, e.StringFormat); rect.Add(e.Rectangle); } g.DrawString(titleTva, fontTitle, textBrush, fillRectangleTitleTva, formatTitle); foreach (var e in de.PrintTvases) { g.DrawString(e.Text, e.Font, textBrush, e.Rectangle, e.StringFormat); rect.Add(e.Rectangle); } foreach (var e in de.PrintPays) { g.DrawString(e.Text, e.Font, textBrush, e.Rectangle, e.StringFormat); rect.Add(e.Rectangle); } g.DrawImage(Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\images\\anahit_9.jpg"), fillRectangleImg); g.DrawString(head, fontRendu, textBrush, fillRectangleHead, textFormatC); if (duplicate != null) { g.DrawString(duplicate, fontTitle, textBrush, fillRectangleDuplicate, formatTitle); } g.DrawString(vente, fontTitle, textBrush, fillRectangleVente, formatTitle); g.DrawString(totalLine, fontTotal, textBrush, fillRectangleTotal, textFormat); g.DrawString(totalLabel, fontTotal, textBrush, fillRectangleTotal1, textFormatL); g.DrawString(totalText, fontTotal, textBrush, fillRectangleTotal2, textFormatR); if (rendu != 0.0m) { g.DrawString(Rendu, fontRendu, textBrush, fillRectangleRendu, textFormatL); g.DrawString(renduVal, fontRendu, textBrush, fillRectangleRenduVal, textFormatR); } if (decimal.Parse(sumDiscount) > 0) { g.DrawString(titleRemise, fontTitle, textBrush, fillRectangleTitleRemise, formatTitle); g.DrawString(discount, fontArialBold, textBrush, fillRectangleDiscount, textFormatL); g.DrawString(discount1, fontArialBold, textBrush, fillRectangleDiscount1, textFormatR); } if (infoOfClient != null) { g.DrawString(carte, fontTitle, textBrush, fillRectangleTCarte, formatTitle); g.DrawString(dcbcName, fontRendu, textBrush, fillRectangleDcbcName, textFormatL); g.DrawString(dcbcBiloPoints, fontRendu, textBrush, fillRectangleDcbcBiloPoints, textFormatL); g.DrawString(dobavilePoints, fontRendu, textBrush, fillRectangleDobavilePoints, textFormatL); g.DrawString(null, fontRendu, textBrush, fillRectangleOtnayliP, textFormatL); g.DrawString(ostalosPoints, fontRendu, textBrush, fillRectangleOstalosPoints1, textFormatL); g.DrawString(dcbcBiloPoints1, fontRendu, textBrush, fillRectangleDcbcBiloPoints1, textFormatL); g.DrawString(dobavilePoints1, fontRendu, textBrush, fillRectangleDobavilePoints1, textFormatL); g.DrawString(null, fontRendu, textBrush, fillRectangleOtnayliP1, textFormatL); g.DrawString(ostalosPoints1, fontRendu, textBrush, fillRectangleOstalosPoints, textFormatL); } g.DrawImage(new ClassImageBarCode().GetBc(barcode), fillRectangleBarCodeImg); g.DrawString(numeroTicket, fontRendu, textBrush, fillRectangleNumeroTicket, textFormatC); g.DrawString(Footer, textFont, textBrush, fillRectangleFooter, textFormatL); } b1.Save("D:\\test.bmp"); Printimage(CreateBitmapSourceFromBitmap(b1)); return(gt); }