private void Balance() { //显示结算窗口,考虑支付被取消或修改 FrmBalance frm = new FrmBalance(txtPay.Text); if (frm.ShowDialog() != DialogResult.OK) { if (frm.Tag.ToString() == "Esc")//客户放弃购买(忘记带钱等) { RestForm(); } } else//正式进入结算环节 { SMMembers members = null; if (frm.Tag.ToString().Contains("&"))//输入了会员卡号 { string[] info = frm.Tag.ToString().Split('&'); txtAmount.Text = info[0]; members = new SMMembers() { MemberId = Convert.ToInt32(info[1]), Points = (int)(Convert.ToDouble(txtPay.Text) / 10.0) }; } else { txtAmount.Text = frm.Tag.ToString(); } //找零 txtChange.Text = (Convert.ToDecimal(txtPay.Text) - Convert.ToDecimal(txtAmount.Text)).ToString(); //创建消费对象 SalesList saleObj = new SalesList() { SerialNum = txtSerialNum.Text, TotalMoney = Convert.ToDecimal(txtPay.Text.Trim()), RealReceive = Convert.ToDecimal(txtAmount.Text.Trim()), ReturnMoney = Convert.ToDecimal(txtChange.Text.Trim()), SalesPersonId = Program.Sale.SalePersonId }; //封装消费明细列表 foreach (Produts item in productList) { saleObj.ListDetail.Add( new SalesListDetail() { SerialNum = txtSerialNum.Text, ProductId = item.ProductId, ProductName = item.ProductName, Quantity = item.Quantity, UnitPrice = item.UnitPrice, Discount = item.Discount, SubTotalMoney = item.SubTotal } ); } try { productManager.SaveSalerInfo(saleObj, members); } catch (Exception ex) { MessageBox.Show($"保存销售数据的时候发生异常!{ex.Message}", "异常提示"); return; } //小票打印 printDocument.Print(); PrintPriview(); //重置主界面 RestForm(); } }
//【1.1】到【1.5】先搭建构架;还没有实现存储过程 //【1.1】到【1.4】取消结算 //【1.5】到【1.20】正式开始结算([包含了客户卖东西的数据库中的表]和[收银员记录客户消费具体的信息表在数据库中显示]和[VIP会员的积分记录]) private void Balance() { //【1.1】 //显示结算窗口,考虑支付被取消或修改,并传递txtPay应付多少钱文本框 FrmBalance frm = new FrmBalance(txtPay.Text); //【1.2】 //如果打开FrmBalance不成功进入 if (frm.ShowDialog() != DialogResult.OK) { //客户放弃购买(忘记带钱等);在购买界面时键盘上按了Escape按钮,给Tag传了一个Tag数据,则frm.Tag.ToString() == "Esc"现在相等,进入if语句 //【1.3】 if (frm.Tag.ToString() == "Esc") { //【1.4】 //支付完成重置界面:就是把原有的界面里面的商品清空,从新开始 RestForm();//【二】弄完后进入【三.1】FrmBalance窗口里 } } //【1.5】 else//正式进入结算环节 { //【1.6】 //实例化会员类 SMMembersModel10 members = null; //Contains("&")表示&这个字符是否出现在此字符串中 //【1.7】 //获取含有&tag值 if (frm.Tag.ToString().Contains("&"))//输入了会员卡号 { //【1.8】 //把含有&的Tag值,分割两部分,用string数组记录 //这两部分分别是【客户实际付的钱数】和【VIP的编号】 string[] info = frm.Tag.ToString().Split('&'); //【1.9】【客户实际付的钱数】 txtAmount.Text = info[0]; //【1.10】 members = new SMMembersModel10() { //【1.11】【VIP的编号】 MemberId = info[1], //【1.12】给具体购买的商品的总金额/10 Points = (int)(Convert.ToDouble(txtPay.Text) / 10.0) }; } else { //【1.13】没有会员,直接获取【客户实际付的钱数】 txtAmount.Text = frm.Tag.ToString(); } //【1.14】 //找零 //【客户实际付的钱数】-【具体购买的商品的总金额】 txtChange.Text = (Convert.ToDecimal(txtAmount.Text) - Convert.ToDecimal(txtPay.Text)).ToString(); /*txtChange.Text = (Convert.ToDecimal(txtPay.Text) - Convert.ToDecimal(txtAmount.Text)).ToString();*/ //【1.15】上面弄完后,saleObj的每个数据就会附上具体的数据 //创建消费对象 SalesListModel1 saleObj = new SalesListModel1() { SerialNum = txtSerialNum.Text, TotalMoney = Convert.ToDecimal(txtPay.Text.Trim()), RealReceive = Convert.ToDecimal(txtAmount.Text.Trim()), ReturnMoney = Convert.ToDecimal(txtChange.Text.Trim()), SalesPersonId = Program.Seles.SalesPersonId }; //【1.16】 //封装消费明细列表 //productList放商品的具体数据盒子 foreach (ProdutsModel item in productList) { //【1.17】 //给saleObj里面的ListDetail属性里面添加方法 //ListDetail就是SalesListDetailModel的接收容器 //给 saleObj.ListDetail.Add里面添加new SalesListDetailModel(){}的原因是saleObj.ListDetail这个方法接收的是SalesListDetailModel类型的泛型所以用new SalesListDetailModel(){}添加 saleObj.ListDetail.Add( //【1.18】 new SalesListDetailModel() { //把商品列表中的所有信息给了SalesListDetailModel类里面 SerialNum = txtSerialNum.Text, ProductId = item.ProductId, ProductName = item.ProductName, Quantity = item.Quantity, UnitPrice = item.UnitPrice, Discount = item.Discount, SubTotalMoney = item.SubTotal } ); } try { //【1.19】 /// <summary> /// SaveSalerInfo: /// 【1】AddSalesList销售主表:以发票的形式记录消费的客户的小票数据,放在SalesList表里面记录客户的买的东西 /// 【2】AddSalesListDetail商品销售统计表:就是顾客买的东西记录一下,放在AddSalesListDetail表里面记录收银员的给客户卖东西是的账本 /// 【3】RefreshMemberPoint修改会员积分:如果有会员则修改会员积分 /// </summary> //把结算的内容相互通过数据库事务相互牵连 //saleObj(包含了在主窗口中文本框中的所有数据,还获取了ListDetail里面添加的所有数据)获取所有的商品表并数据传递到数据库里 //members把会员所需要的数据传递到数据库里 manager2.SaveSalerInfo(saleObj, members); } //【1.20】 catch (Exception ex) { MessageBox.Show($"保存销售数据的时候发生异常!{ex.Message}", "异常提示"); return; } //小票打印 //【1】在工具箱里获取打印工具printDocument(printDocument打印工具的名字) //【3】Print开始文档的打印进程 printDocument.Print(); //【4】小票打印预览 PrintPriview(); //重置主界面 RestForm(); } }