Beispiel #1
0
 protected void printHr(PrinterGraphics printer)
 {
     printer.TrimY(-5);
     printer.DrawStringLineLoop("-", 8);
     printer.TrimY(-4);
 }
Beispiel #2
0
        /// <summary>
        /// 根据Graphics绘制收银条
        /// </summary>
        protected int drawRecipt(Graphics g, DineForPrinting protocol, bool isFullDineMenus)
        {
            PrinterGraphics printerG = new PrinterGraphics(g, protocol.PrinterFormat.PaperSize, protocol.PrinterFormat.Font, protocol.PrinterFormat.PaddingRight);

            printerG.DrawStringLine($"欢迎光临{protocol.Hotel.Name}", protocol.PrinterFormat.ReciptBigFontSize, align: StringAlignment.Center);
            printerG.DrawStringLine($"TEL: {protocol.Hotel.Tel}", protocol.PrinterFormat.ReciptSmallFontSize, align: StringAlignment.Center);
            printerG.DrawStringLine($"{protocol.Hotel.Address}", protocol.PrinterFormat.ReciptSmallFontSize, align: StringAlignment.Center);
            printerG.DrawStringLine($"收据", protocol.PrinterFormat.ReciptSmallFontSize, align: StringAlignment.Center);
            printerG.TrimY(5);

            printerG.DrawStringLine($"单号: {protocol.Dine.Id}", protocol.PrinterFormat.ReciptFontSize);
            printerG.DrawStringLine($"时间: {protocol.Dine.BeginTime.ToString("M-d HH:mm")}", protocol.PrinterFormat.ReciptFontSize);

            if (protocol.Dine.Type == HotelDAO.Models.DineType.ToStay)
            {
                printerG.DrawStringLine($"餐桌: {protocol.Dine.Desk.Name}", protocol.PrinterFormat.ReciptFontSize);
            }
            else if (protocol.Dine.Type == HotelDAO.Models.DineType.ToGo)
            {
                printerG.DrawStringLine($"外卖: {protocol.Dine.Desk.Name}", protocol.PrinterFormat.ReciptBigFontSize);
                if (protocol.Dine.TakeOut.RecordId != null)
                {
                    printerG.DrawStringLine($"外卖平台编号: {protocol.Dine.TakeOut.RecordId}", protocol.PrinterFormat.ReciptBigFontSize);
                }
                printerG.DrawStringLine($"手机: {protocol.User.PhoneNumber}", protocol.PrinterFormat.ReciptBigFontSize);
                printerG.DrawStringLine($"地址: {protocol.Dine.TakeOut.Address}", protocol.PrinterFormat.ReciptBigFontSize);
            }

            printHr(printerG);

            printGridRecipt(printerG, new string[] { "名称", "数量", "单价", "折后小计" }, protocol.PrinterFormat.ReciptFontSize);

            printHr(printerG);

            decimal priceAll = 0m;

            foreach (DineMenu dineMenu in protocol.Dine.DineMenus.Where(p => p.Status != HotelDAO.Models.DineMenuStatus.Returned))
            {
                // 打印具体菜品信息
                printGridRecipt(printerG, new string[] {
                    dineMenu.Menu.Name,
                    dineMenu.Count.ToString(),
                    dineMenu.OriPrice.ToString(),
                    (dineMenu.Price * dineMenu.Count).ToString()
                }, protocol.PrinterFormat.ReciptFontSize);

                priceAll += dineMenu.Price * dineMenu.Count;

                // 如果菜品为套餐,则打印套餐包含的具体菜品信息
                if (dineMenu.Menu.IsSetMeal)
                {
                    List <SetMealMenu> setMealMenus = dineMenu.Menu.SetMealMenus;
                    for (int i = 0; i < setMealMenus.Count; i++)
                    {
                        char tab = '├';
                        if (i == setMealMenus.Count - 1)
                        {
                            tab = '└';
                        }
                        printGridRecipt(printerG, new string[] {
                            $"{tab} {setMealMenus[i].Name}",
                            setMealMenus[i].Count.ToString(),
                            null, null
                        }, protocol.PrinterFormat.ReciptFontSize);
                    }
                }

                // 打印菜品的备注信息
                var remarks = dineMenu.Remarks.ToList();
                for (int i = 0; i < dineMenu.Remarks.Count; i++)
                {
                    char tab = '├';
                    if (i == dineMenu.Remarks.Count - 1)
                    {
                        tab = '└';
                    }
                    printGridRecipt(printerG, new string[] {
                        $"{tab} {remarks[i].Name}",
                        null,
                        0 == remarks[i].Price ? null : remarks[i].Price.ToString(),
                        0 == remarks[i].Price ? null : remarks[i].Price.ToString()
                    }, protocol.PrinterFormat.ReciptFontSize);

                    priceAll += remarks[i].Price;
                }
            }
            ;

            printHr(printerG);

            if (isFullDineMenus)
            {
                priceAll = protocol.Dine.Price;
            }
            printGrid55f(printerG, new string[] { "总计", priceAll.ToString() }, protocol.PrinterFormat.ReciptBigFontSize);

            if (protocol.Dine.Discount < 1)
            {
                printerG.DrawStringLine($"{protocol.Dine.DiscountName}: {protocol.Dine.Discount * 10}折", protocol.PrinterFormat.ReciptFontSize);
            }

            string paidWay = protocol.Dine.IsOnline ? "线上支付" : "线下支付";

            printerG.DrawStringLine($"支付方式: {paidWay}", protocol.PrinterFormat.ReciptFontSize);
            foreach (DinePaidDetail dinePaidDetail in protocol.Dine.DinePaidDetails)
            {
                decimal dinePaidDetailPrice = dinePaidDetail.Price;
                if (dinePaidDetail.PayKind.Type == HotelDAO.Models.PayKindType.Cash)
                {
                    dinePaidDetailPrice += protocol.Dine.Change;
                }
                printerG.DrawStringLine($"{dinePaidDetail.PayKind.Name}: ¥{dinePaidDetailPrice}", protocol.PrinterFormat.ReciptFontSize);
            }
            if (protocol.Dine.IsPaid)
            {
                printerG.DrawStringLine($"找零: ¥{protocol.Dine.Change}", protocol.PrinterFormat.ReciptFontSize);
            }
            else
            {
                printerG.DrawStringLine("未支付", protocol.PrinterFormat.ReciptFontSize);
            }

            printEnd(printerG);

            g.Dispose();

            return(printerG.GetHeight());
        }
Beispiel #3
0
 protected void printEnd(PrinterGraphics printer)
 {
     printer.TrimY(10);
     printer.DrawStringLineLoop("*", 8);
     printer.TrimY(100);
 }