Пример #1
0
        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();
            }
        }
Пример #2
0
        //【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();
            }
        }