網上查了好多資料終於讓我搗鼓出來了!
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 }
