C# POS 小票打印


網上查了好多資料終於讓我搗鼓出來了!

public partial class Models_JXC_Sale_actNewSalePage : WebPartBase
{

    public string saild_id_ = System.DateTime.Now.ToString("yyyyMMddhhmmss");
    public string date_ = DateTime.Now.ToString();
    public DataTable datas_ = new DataTable();

    public double discount_ = 0;   //優惠金額
    public double amount_ = 0; // 應收金額
    public double recv_cash_ = 0;  // 收款金額

    public string card_no_ = ""; // 會員卡號
    public double mark_in_ = 0; // 本次積分

    private System.Windows.Forms.PrintPreviewDialog printv_pos = null;
    private System.Drawing.Printing.PrintDocument printd_pos = null;

    public string SVIDS = "";
    public string WHIDS = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsFirstLoad)
        {
            btnPrinter.Enabled = false;
            Session["mdp"] = "";
            Session["mdSLID"] = "0";
            IsFirstLoad = false;
            SVIDS = SVID.ToString();
            WHIDS = WHID.ToString();
        }
        else
        {
            btnPrinter.Enabled = true;
            if (Session["mdp"].ToString() == Session["mdSLID"].ToString())
            {
                CreateBlendListReport(Session["mdSLID"].ToString());
            }
        }
        if (cSaleDate.Text == "")
        {
            cSaleDate.Value = DateTime.Now;
        }


        this.printv_pos = new System.Windows.Forms.PrintPreviewDialog();
        this.printd_pos = new System.Drawing.Printing.PrintDocument();


        this.printv_pos.AutoScrollMargin = new System.Drawing.Size(0, 0);
        this.printv_pos.AutoScrollMinSize = new System.Drawing.Size(0, 0);
        this.printv_pos.ClientSize = new System.Drawing.Size(400, 300);
        this.printv_pos.Document = this.printd_pos;
        this.printv_pos.Enabled = true;
        this.printv_pos.Name = "printPreviewDialog1";
        this.printv_pos.Visible = false;
        // 
        // printd_pos
        // 
        this.printd_pos.DocumentName = "京華茶葉店POS小票";
        this.printd_pos.OriginAtMargins = true;
        this.printd_pos.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printd_pos_PrintPage);


        datas_.Clear();
    }

    private int getYc(double cm)
    {
        return (int)(cm / 25.4) * 100;
    }

    public string GetPrintStr()
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("*********" + "京華茶葉連鎖店" + "***********\n");

        sb.Append("  流水號:" + this.saild_id_ + "\n");
        sb.Append("  日  期:" + date_ + "\n");

        sb.Append("  商品編號" + "\t" + "數量" + "\t" + "單價" + "\t" + "金額" + "\n");
        for (int i = 0; i < this.datas_.Rows.Count; i++)
        {
            sb.Append("  " + datas_.Rows[i][16] + "\t" + datas_.Rows[i][5] + "\t" + datas_.Rows[i][4] + "\t" + datas_.Rows[i][8] + "\n");
            sb.Append("  " + datas_.Rows[i][17]);
            sb.Append("\n");
        }

        sb.Append("\n");


        sb.Append("  優惠金額:" + discount_ + "\n");
        sb.Append("  應收金額:" + amount_ + "\n");
        sb.Append("  實收金額:" + recv_cash_ + "\n");
        sb.Append("                         \n");
        sb.Append("  會員卡號:" + card_no_ + "\n");
        sb.Append("  本次積分:" + mark_in_ + "\n");
        sb.Append("***************************************\n");
        string myfoot = string.Format("  {0}\n", "歡迎下次光臨!");
        sb.Append(myfoot);
        return sb.ToString();
    }

    /// <summary>
    /// POS打印
    /// </summary>
    public void print()
    {
        this.printd_pos.PrintController = new System.Drawing.Printing.StandardPrintController();
        this.printd_pos.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printd_pos_PrintPage);

        //設置邊距
        System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(5, 5, 5, 5);
        this.printd_pos.DefaultPageSettings.Margins = margins;

        this.printd_pos.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("First custom size", getYc(58), 600);
        //this.printDocument1.PrinterSettings.PrinterName = "";
        //Margins margins = new Margins(

        //this.printv_pos.Document = this.printd_pos;

        printv_pos.PrintPreviewControl.AutoZoom = false;
        printv_pos.PrintPreviewControl.Zoom = 1;

        // this.printv_pos.ShowDialog(win);

        try
        {
            printd_pos.Print();
        }
        catch (Exception ex)
        {
            MessageBox(ex.Message);
            printd_pos.PrintController.OnEndPrint(printd_pos, new PrintEventArgs());
        }

    }

    private void printd_pos_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        Graphics g = e.Graphics;
        string strFile = GetPrintStr();
        Font ft = new Font("宋體", 8.5F, FontStyle.Regular);
        Point pt = new Point(0, 0);
        g.DrawString(strFile, ft, new SolidBrush(Color.Black), pt);
    }

    #region 商品種類的無刷新事件
    protected void ASPxCBProductType_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        string ParentID = e.Parameter.ToString().Split(';')[0].ToString();
        Session["ParentID"] = ParentID;
        pc2.InnerHtml = createdivstr(ParentID);
    }

    #region 二級產品信息查詢一系列實現步驟
    private string createdivstr(string ParentID)  //根據一級產品大類ID查詢對應的二級產品類型
    {
        string divstr = "";
        divstr += "<table>";
        JXCProductService.ProductServiceClient ProductS = new JXCProductService.ProductServiceClient();
        DataTable dt = ProductS.GetProductCategorystrdt(" AND ProductCategoryCode<>'0'  AND IsSale=1   AND ParentCategoryID=" + ParentID);
        ProductS.Close();
        int icount = 1;
        divstr += "<tr>";
        divstr += "<td>";
        foreach (DataRow dr in dt.Rows) //循環顯示二級產品信息並格式化操作
        {
            divstr += "<input type=\"radio\" name=\"b\" onclick=\"javascript:ProductView.PerformCallback('" + dr["PCID"].ToString() + "')\">" + dr["ProductCategoryCode"].ToString() + "-" + dr["ProductCategoryName"].ToString() + "</input>";
            if (icount % 5 == 0)
            {
                divstr += "</td>";
                divstr += "</tr>";
                divstr += "<tr>";
                divstr += "<td>";
            }
            icount++;
        }
        if (icount % 5 == 1)
        {
            divstr = divstr.Substring(0, divstr.Length - 8);
        }
        else
        {
            divstr += "</td>";
            divstr += "</tr>";
        }
        divstr += "</table>";
        return divstr;
    }
    #endregion


    protected void Product_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        JXCSaleService.SaleServiceClient SaleS = new JXCSaleService.SaleServiceClient();


        string salestrbp = e.Parameter.Split('&')[0];
        string salestrremark = e.Parameter.Split('&')[1];
        string[] str = salestrremark.Split(';');
        #region 保存單頭
        JXCSaleService.JXCSaleBills sbs = new JXCSaleService.JXCSaleBills();
        sbs.SVID = SVID;  //門店的ID
        sbs.GUID = Guid.NewGuid();
        sbs.Isable = 0;

        double unionpayCard = 0; // cUnionpayCard.Text.Trim();
        double coolCard = 0;// cCoolCard.Text.Trim();
        double checks = 0;// cCheck.Text.Trim();
        double alipay = 0;// cAlipay.Text.Trim();
        string entryPeople = cEntryPeople.Text.Trim();


        //銀聯卡手續費
        double unionpayCommission = 0.00;
        //雅酷卡手續費
        double coolCommission = 0.00;
        //實收金額
        double paidAmount = 0.00;
        //應收金額
        double amountReceivable = 0.00;
        //現金金額
        double cashs = 0.00;
        if (str != null)
        {
            //備注
            sbs.SaleRemark = str[0];
            //實收金額
            paidAmount = double.Parse(str[1]);
            //應收金額
            amountReceivable = double.Parse(str[2]);
            //現金金額
            if (str[3] != "")
            {
                cashs = double.Parse(str[3]);
            }
            if (str[4] != "")
            {
                unionpayCard = double.Parse(str[4]);
            }

            if (str[5] != "")
            {
                coolCard = double.Parse(str[5]);
            }
            if (str[6] != "")
            {
                checks = double.Parse(str[6]);
            }
            if (str[7] != "")
            {
                alipay = double.Parse(str[7]);
            }
        }
        //現金
        sbs.Cash = cashs;
        //銀聯卡金額

        sbs.UnionpayCard = unionpayCard;
        //銀聯卡支付的1%,20000以上20封頂

        if (unionpayCard < 20000)
        {
            JXC.JXCBase.RefreshBasedt();
            DataRow[] drs = JXC.JXCBase.BaseDT.Select(" InfoName='銀聯支付手續費'");
            unionpayCommission = unionpayCard * double.Parse(drs[0]["InfoCode"].ToString());
        }
        else
        {
            JXC.JXCBase.RefreshBasedt();
            DataRow[] drs = JXC.JXCBase.BaseDT.Select(" InfoName='銀聯支付手續費封頂'");
            unionpayCommission = double.Parse(drs[0]["InfoCode"].ToString());
        }


        //雅酷卡金額

        sbs.CoolCard = coolCard;
        //雅酷卡支付的10%。
        DataRow[] drs1 = JXC.JXCBase.BaseDT.Select(" InfoName='雅酷卡支付手續費'");
        coolCommission = coolCard * double.Parse(drs1[0]["InfoCode"].ToString());

        //銀聯手續費
        sbs.UnionpayCommission = unionpayCommission;
        //雅酷卡手續費
        sbs.CoolCommission = coolCommission;
        //手續費=銀聯卡手續費+雅酷卡手續費
        sbs.Commission = unionpayCommission + coolCommission;
        //銷售金額=實收金額-手續費
        sbs.SalesAmount = paidAmount - unionpayCommission - coolCommission;
        //讓利金額=應收金額-實收金額
        sbs.ConcessionsAmount = amountReceivable - paidAmount;
        //支票

        sbs.Checkes = checks;


        //支付寶

        sbs.Alipay = alipay;
        if (paidAmount <= 0)
        {
            pc4.InnerText = "請輸入銷售商品的數量!";
            btnPrinter.Enabled = false;
            return;

        }

        if (paidAmount != (cashs + unionpayCard + coolCard + checks + alipay))
        {
            pc4.InnerText = "實收金額與現金,銀聯卡,雅酷卡,支票,支付寶之和不相等!";
            btnPrinter.Enabled = false;
            return;

        }

        //客戶類型
        sbs.BuyerType = BuyerType.Text.Trim();
        if (BuyerType.Text.Trim() == "會員")
        {
            //會員卡號
            if (str[8].ToString() == "")
            {
                pc4.InnerText = "請填寫會員卡號";
                btnPrinter.Enabled = false;
                return;
            }
            else
            {
                sbs.CardNo = str[8].ToString();

                JXCQCService.QCServiceClient qc = new JXCQCService.QCServiceClient();
                DataTable dtqc = new DataTable();

                dtqc = qc.GetBuyerMember(" and MemberCardNO=" + str[8].ToString());
                if (dtqc != null)
                {
                    if (dtqc.Rows.Count > 0)
                    {
                        double jifen = 0.0;
                        double sumJiFen = 0.0;
                        jifen = double.Parse(dtqc.Rows[0][6].ToString()) + paidAmount;
                        sumJiFen = double.Parse(dtqc.Rows[0][11].ToString()) + paidAmount;
                        bool count1 = qc.UpdateBM2(jifen, sumJiFen, str[8].ToString());
                        sbs.BMID = int.Parse(dtqc.Rows[0][0].ToString());
                    }
                    else
                    {
                        JXCQCService.JXC_S_BuyerMember bm = new JXCQCService.JXC_S_BuyerMember();
                        JXCSelfService.SelfServiceClient self = new JXCSelfService.SelfServiceClient();
                        DataTable dtMD = self.BindMD(" and SVID=" + SVID);

                        bm.MemberName = str[8].ToString();
                        bm.MemberCardNO = str[8].ToString();
                        bm.MemberCategory = UserName;
                        bm.PhoneNumber = "";
                        bm.MemberType = "個人";
                        bm.MemberPoints = decimal.Parse(paidAmount.ToString());
                        bm.DiscountRate = "九折";
                        bm.CreateTime = DateTime.Now.ToString("yyyy-MM-dd");
                        bm.IntergralCounts = 0;
                        bm.IntergralSumCounts = decimal.Parse(paidAmount.ToString());
                        bm.SVID = SVID;
                        if (dtMD != null)
                        {
                            if (dtMD.Rows.Count > 0)
                            {
                                bm.SalesName = dtMD.Rows[0][1].ToString();
                            }
                        }

                        bool reslut = qc.InsertBM(bm);
                        DataTable dtbm = new DataTable();

                        dtbm = qc.GetBuyerMember(" and MemberCardNO=" + str[8].ToString());
                        if (dtbm.Rows.Count > 0)
                        {
                            sbs.BMID = int.Parse(dtbm.Rows[0][0].ToString());
                        }
                    }
                }

            }

        }
        else
        {
            sbs.CardNo = str[8].ToString();
        }

        if (cSaleDate.Text != "")
        {
            //銷售日期
            sbs.SaleTime = DateTime.Parse(cSaleDate.Text.ToString());
        }
        else
        {
            sbs.SaleTime = DateTime.Now;
        }

        JXCSelfService.SelfServiceClient selfService = new JXCSelfService.SelfServiceClient();

        DataTable dt = selfService.GetDayAndDate(SVID);
        if (dt.Rows[0][0].ToString() != "" & dt.Rows[0][0].ToString() != null)
        {
            if (DateTime.Parse(sbs.SaleTime.ToString("yyyy-MM-dd")) <= DateTime.Parse(dt.Rows[0][0].ToString()))
            {
                pc3.InnerText = "您選擇的銷售日期已經日結,請先刪除該日期的日結報表!";
                btnPrinter.Enabled = false;
                return;
            }
        }

        //錄入人
        if (entryPeople != "")
        {
            sbs.Payee = entryPeople;
        }
        else
        {
            sbs.Payee = UserName;
        }


        int result = SaleS.InsertSaleBills(sbs);
        #endregion
        bool Condition = true;
        if (result > 0)
        {
            #region 保存明細
            string bpstr = salestrbp.ToString().Substring(0, salestrbp.Length - 2);
            string bpssss = bpstr.Split('*')[1];
            string[] bpids = bpssss.Split('$');
            foreach (string bps in bpids)
            {
                JXCSaleService.JXCSaleBillDetail sbd = new JXCSaleService.JXCSaleBillDetail();
                string[] orderpid = bps.Split(';');
                sbd.BPID = int.Parse(orderpid[0]);
                sbd.SaleCounts = double.Parse(orderpid[1]);
                sbd.PredictSaleAmount = double.Parse(orderpid[2]);
                sbd.SLID = result;
                Condition = SaleS.InsertSaleBillDetail(sbd);
            }
            #endregion
        }
        if (result > 0 && Condition)
        {
            int isable = int.Parse(salestrbp.ToString().Substring(salestrbp.Length - 1, 1));
            Dictionary<object, object> ht = new Dictionary<object, object>();
            ht.Add("isable", isable);
            ht.Add("SLID", result);
            if (SaleS.UpdateByht(ht, "JXC_S_SaleBill"))
            {
                pc3.InnerText = "保存成功!";
                btnPrinter.Enabled = true;
                Session["mdSLID"] = result; //獲得銷售單ID


                datas_ = SaleS.GetSaleBillItemsBySlid(Convert.ToInt32(Session["mdSLID"]));

                discount_ = amountReceivable - paidAmount;   //優惠金額
                amount_ = amountReceivable; // 應收金額
                recv_cash_ = paidAmount;  // 收款金額

                card_no_ = str[8].ToString(); // 會員卡號
                if (card_no_ != "")
                {
                    mark_in_ = paidAmount; // 本次積分
                }
                print();

            } //調用銷售信息方法   
            else
            {
                pc3.InnerText = "保存失敗!請聯系管理員!";
            }
        }
        else
        {
            pc3.InnerText = "保存失敗!請聯系管理員!";
        }
        SaleS.Close();
        cEntryPeople.Text = "";


    }



    protected void ProductView_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        if (e.Parameter != "")
        {
            Session["getpcID"] = e.Parameter.ToString();
            GetDataViewBind();
        }

    }
    #endregion
    protected void btnNew_Click(object sender, EventArgs e)
    {
        Session["SaleGUID"] = GetGuid();
    }
    #region 綁定DataView
    protected void GetDataViewBind()
    {
        JXCProductService.ProductServiceClient psProdData = new JXCProductService.ProductServiceClient();
        DataTable dt = new DataTable();
        if (!JXC.fun.IsNull(this, "getpcID"))
        {
            if (!JXC.fun.IsNull(this, "ParentID"))
            {
                dt = psProdData.GetProDataViewInformation2(Convert.ToInt32(Session["getpcID"]), SVID, WHID);
            }
        }
        ASPxDataView1.DataSource = dt;
        ASPxDataView1.DataBind();
        psProdData.Close();
    }
    #endregion

    /// <summary>
    /// 打印門店訂單方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPrinter_Click(object sender, EventArgs e)
    {
        //CreateBlendListReport(Session["mdSLID"].ToString());
        //Session["mdp"] = Session["mdSLID"].ToString();

        print();
    }

    #region 報表打印的代碼
    protected void CreateBlendListReport(string slid)
    {
        if (slid != null || slid != "")
        {
            JXCSelfService.SelfServiceClient saleItem = new JXCSelfService.SelfServiceClient();
            XtraReport xpst = null;
            DataTable dt = new DataTable();
            hidFidMDSale.Value = Session["mdSLID"].ToString();
            ASPxPCmdSalePrint.Top = 100;
            ASPxPCmdSalePrint.Left = 200;
            ASPxPCmdSalePrint.ShowOnPageLoad = true;
            xpst = XtraReport.FromFile(Server.MapPath("~") + "\\Models\\JXC\\Reports\\SaleList.repx", true);
            if (Session["mdSLID"] != null)
            {
                xpst.DataSource = saleItem.GetSaleBillItemsBySlid(Convert.ToInt32(Session["mdSLID"]));
            }
            xpst.Parameters["times"].Value = DateTime.Now.ToString("yyyy年MM月dd日");
            xpst.CreateDocument();
            RvmdPrint.Report = xpst;
            RvmdPrint.DataBind();
            saleItem.Close();
        }
        else
        {
            MessageBox("抱歉,暫無報表。");
        }
    }
    #endregion


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM