海马汽车经销商管理系统技术解析(十三)结算

结算

对已竣工的维修工单所产生的配件费、项目工时金额等各项费用进行结算开单。

点击【定位】,弹出dgv(维修工单)。见下图:

点击【结算】,弹出【结算操作框】界面。见下图:

完成结算单据的状态。见下图:

1、数据库功能实现

第一步:数据库

1、表和关系


表1、维修工单表(PW_ServiceWorkBillList)

列名

数据类型

主键/外键

说明

ServiceWorkBillID

int - Identity

主键

维修工单ID

WorkOddNumBer

nchar (20)

 

维修工单号

BespeakBillID

int

外键

预约单表,预约单ID

CarNewsID

int

外键

车辆信息表,车辆信息ID

EntranceMileage

decimal (18, 2)

 

进厂里程

BusinessSort

nchar (20)

 

业务类别

EntranceTime

datetime

 

进厂时间

CarryRepairPerson

nchar (20)

 

送修人

SurplusOilVolume

decimal (18, 2)

 

剩余油量

PlanGathering

decimal (18, 2)

 

预收款

BookingCarDeliveryTime

nchar (20)

 

预计交车时间

LastTimeInTheFactory

nchar (20)

 

上次进厂时间

BespeakOddNumBer

nchar (20)

 

预约单号

MemberSort

nchar (20)

 

会员类别

ServiceAdviser_StaffID

int

外键

员工表,员工ID_服务顾问

InsureCompanyID

nchar (20)

 

保险公司ID

AttributeMinuteID_CarStatus

int

外键

属性明细表,属性明细ID_车辆状态

IfWashCar

bit

 

海马汽车否

OldPieceDispose

nchar (20)

 

旧件处理

InspectRecord

nchar (100)

 

环检记录

ClientDescribe

nchar (100)

 

顾客陈述

Remarks

nchar (100)

 

备注

IfBespeak

bit

 

预约否

IfDebt

bit

 

欠款否

IfResourceRelease

bit

 

资源释放否

表2、结算单表(PW_SettleAccountsBillList

列名

数据类型

主键/外键

说明

SettleAccountsBillID

int

主键

结算单ID

SettleAccountsBillNumber

nchar (20)

 

结算单号

ServiceWorkBillID

int

外键

维修工单表,维修工单ID

PrivilegeBeforeAllMoney

decimal (18, 2)

 

优惠前总金额

PrivilegeAllMoney

decimal (18, 2)

 

优惠总金额

PrivilegeAfferWorkHoursMoney

decimal (18, 2)

 

优惠后工时金额

PrivilegeAfferMaterial

decimal (18, 2)

 

优惠后材料金额

PrivilegeAfferElseMoney

decimal (18, 2)

 

优惠后其他金额

PrivilegeAfferAllMoney

decimal (18, 2)

 

优惠后总金额

功能实现

1、计算各项费用——【结算】按钮点击事件。

第一步:数据库存储过程

IF(@TYPE='FRM_JieSuan_ChaXunleiShiFouYiJieSuan')
 BEGIN
 SELECT     SettleAccountsBillID
 FROM         PW_SettleAccountsBillList
 WHERE PW_SettleAccountsBillList.ServiceWorkBillID=@ServiceWorkBillID
 END

第二步:逻辑层(BLL)

//查询单据结算否
[OperationContract]
        public DataSet FRM_JieSuan_ChaXunleiShiFouYiJieSuan(int intServiceWorkBillID)
        {
            SqlParameter[] mySqlParameters =
        {
            new SqlParameter("@TYPE",SqlDbType.Char),
            new SqlParameter("@ServiceWorkBillID",SqlDbType.Int),
        };
            mySqlParameters[0].Value = "FRM_JieSuan_ChaXunleiShiFouYiJieSuan";
            mySqlParameters[1].Value = intServiceWorkBillID;
            DataTable dt = myDALMethod.QueryDataTable("前台管理_FRM_JieSuan", mySqlParameters);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds; //返回数据集
        }

 

第三步:界面层(UIL)

BLL海马汽车销售系统.前台接待.FRM_QianTaiJieDai_JieSuan.FRM_QianTaiJieDai_JieSuanClient myFRM_QianTaiJieDai_JieSuanClient = 
            new BLL海马汽车销售系统.前台接待.FRM_QianTaiJieDai_JieSuan.FRM_QianTaiJieDai_JieSuanClient();
public static int ServiceWorkBillID = 0; //公共静态变量
public static decimal decYouHuiQianZongJinE=0; //公共静态变量
public static decimal YouHuiQianZongJinE = 0; //公共静态变量
public static decimal decYouHuiZongJinE = 0; //公共静态变量
public static decimal decYouHuiHouGongShiJinE = 0; //公共静态变量
public static decimal decYouHuiHouCaiLiaoJinE = 0; //公共静态变量
public static decimal decYouHuiHouQiTaJinE = 0; //公共静态变量
private void btnJieSuan_Click(object sender, EventArgs e)
        {
            if (txtWorkOddNumBer.Text!="")//如果工单号不为空
            {
                //根据工单号ID查询该单据是否已结算
                DataTable dtJieSuan = myFRM_QianTaiJieDai_JieSuanClient.FRM_JieSuan_ChaXunleiShiFouYiJieSuan(Convert.ToInt32(dtServiceWorkingBill.Rows[0]["ServiceWorkBillID"])).Tables[0];
                if (dtJieSuan.Rows.Count > 0)//如果已结算
                {
                    MessageBox.Show("此单据已结算,请另选!");
                    return;
                }
                if (Convert.ToString(dtServiceWorkingBill.Rows[0]["CarStatus"]).Trim() == "已收款")//如果已收款
                {
                    MessageBox.Show("此单据已收款,请另选!");
                    return;
                }
                decimal decSeviceItemMoney = 0;//变量
                decimal decServiceNeedPartsMoney = 0;//变量
                decimal decAppendItemMoney = 0;//变量
                for (int i = 0; i < dgvServiceItem.Rows.Count; i++)//循环遍历
                {
                    //计算维修项目的优惠后总金额
                    decSeviceItemMoney += Convert.ToDecimal(dgvServiceItem.Rows[i].Cells["优惠后工时金额"].Value);
                }
                for (int j = 0; j < dgvNeedParts.Rows.Count; j++)
                {
                    //计算维修配件的优惠后总金额
                    decServiceNeedPartsMoney += Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["优惠后金额"].Value) ;
                }
                for (int k = 0; k < dgvAppendItem.Rows.Count; k++)
                {
                    //计算附加项目的优惠后总金额
                    decAppendItemMoney += Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["金额"].Value);
                }
                decYouHuiQianZongJinE = decSeviceItemMoney + decServiceNeedPartsMoney + decAppendItemMoney;//优惠后金额合计
                decYouHuiHouGongShiJinE = decSeviceItemMoney;//优惠后工时总金额
                decYouHuiHouCaiLiaoJinE = decServiceNeedPartsMoney;//优惠后配件总金额
                decYouHuiHouQiTaJinE = decAppendItemMoney;//优惠后附加项目总金额
                //初始化变量
                decSeviceItemMoney = 0;
                decServiceNeedPartsMoney = 0;
                decAppendItemMoney = 0;
                for (int i = 0; i < dgvServiceItem.Rows.Count; i++)
                {
                    //计算维修项目优惠前总金额
                    decSeviceItemMoney += Convert.ToDecimal(dgvServiceItem.Rows[i].Cells["优惠前工时金额"].Value);
                }
                for (int j = 0; j < dgvNeedParts.Rows.Count; j++)
                {
                    //计算配件优惠前总金额
                    decServiceNeedPartsMoney += Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["销售单价"].Value) * Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["需求数量"].Value);
                }
                for (int k = 0; k < dgvAppendItem.Rows.Count; k++)
                {
                    //计算附加项目优惠前总金额
                    decAppendItemMoney += Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["金额"].Value) / (Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["折扣"].Value) / 100);
                }
                YouHuiQianZongJinE = decSeviceItemMoney + decServiceNeedPartsMoney + decAppendItemMoney;//优惠前金额合计
                //初始化变量
                decSeviceItemMoney = 0;
                decServiceNeedPartsMoney = 0;
                decAppendItemMoney = 0;
                for (int i = 0; i < dgvServiceItem.Rows.Count; i++)
                {
                    //维修项目优惠总金额
                    decSeviceItemMoney += Convert.ToDecimal(dgvServiceItem.Rows[i].Cells["优惠前工时金额"].Value) * (1 - (Convert.ToDecimal(dgvServiceItem.Rows[i].Cells["折扣2"].Value)/100));
                }
                for (int j = 0; j < dgvNeedParts.Rows.Count; j++)
                {
                    //维修配件优惠总金额
                    decServiceNeedPartsMoney += Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["销售单价"].Value) * Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["需求数量"].Value) * (1 - (Convert.ToDecimal(dgvNeedParts.Rows[j].Cells["折扣1"].Value) / 100));
                }
                for (int k = 0; k < dgvAppendItem.Rows.Count; k++)
                {
                    //附加项目优惠总金额
                    decAppendItemMoney +=(Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["金额"].Value) / (Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["折扣"].Value) / 100))-(Convert.ToDecimal(dgvAppendItem.Rows[k].Cells["金额"].Value));
                }
                decYouHuiZongJinE = decSeviceItemMoney + decServiceNeedPartsMoney + decAppendItemMoney;//优惠金额合计               
                FRM_JieSuan_JieSuan myFRM_JieSuan_JieSuan = new FRM_JieSuan_JieSuan();
        myFRM_JieSuan_JieSuan.ShowDialog();//显示【结算操作框】界面
            }
            else
            {
                MessageBox.Show("请选择单据!");
            }
        }

2、【结算操作框】界面的【确定】按钮点击事件。

第一步:数据库存储过程

IF(@TYPE='FRM_JieSuan_btnConfirm_Click')
 BEGIN
 INSERT     PW_SettleAccountsBillList(SettleAccountsBillNumber, ServiceWorkBillID, PrivilegeBeforeAllMoney, PrivilegeAllMoney, PrivilegeAfferWorkHoursMoney, PrivilegeAfferMaterial, PrivilegeAfferElseMoney, 
                      PrivilegeAfferAllMoney)
VALUES         (@SettleAccountsBillNumber, @ServiceWorkBillID, @PrivilegeBeforeAllMoney,
                @PrivilegeAllMoney, @PrivilegeAfferWorkHoursMoney, @PrivilegeAfferMaterial, 
                @PrivilegeAfferElseMoney,@PrivilegeAfferAllMoney)
 END
 IF(@TYPE='FRM_JieSuan_btnConfirm_Click_UpdateCarStatus')
 BEGIN
 UPDATE     PW_ServiceWorkBillList
SET         AttributeMinuteID_CarStatus =18
WHERE ServiceWorkBillID=@ServiceWorkBillID
 END

第二步:逻辑层(BLL)

//保存结算单
[OperationContract]
        public int FRM_JieSuan_btnConfirm_Click(string strSettleAccountsBillNumber, int intServiceWorkBillID, decimal decPrivilegeBeforeAllMoney, decimal decPrivilegeAllMoney,
            decimal decPrivilegeAfferWorkHoursMoney, decimal decPrivilegeAfferMaterial, decimal decPrivilegeAfferElseMoney, decimal decPrivilegeAfferAllMoney)
        {
            SqlParameter[] mySqlParameters =
        {
            new SqlParameter("@TYPE",SqlDbType.Char),
            new SqlParameter("@SettleAccountsBillNumber",SqlDbType.NChar),
            new SqlParameter("@ServiceWorkBillID",SqlDbType.Int),
            new SqlParameter("@PrivilegeBeforeAllMoney",SqlDbType.Decimal),
            new SqlParameter("@PrivilegeAllMoney",SqlDbType.Decimal),
            new SqlParameter("@PrivilegeAfferWorkHoursMoney",SqlDbType.Decimal),
            new SqlParameter("@PrivilegeAfferMaterial",SqlDbType.Decimal),
            new SqlParameter("@PrivilegeAfferElseMoney",SqlDbType.Decimal),
            new SqlParameter("@PrivilegeAfferAllMoney",SqlDbType.Decimal),
        };
            mySqlParameters[0].Value = "FRM_JieSuan_btnConfirm_Click";
            mySqlParameters[1].Value = strSettleAccountsBillNumber;
            mySqlParameters[2].Value=intServiceWorkBillID;
            mySqlParameters[3].Value = decPrivilegeBeforeAllMoney;
            mySqlParameters[4].Value=decPrivilegeAllMoney;
            mySqlParameters[5].Value = decPrivilegeAfferWorkHoursMoney;
            mySqlParameters[6].Value=decPrivilegeAfferMaterial;
            mySqlParameters[7].Value = decPrivilegeAfferElseMoney;
            mySqlParameters[8].Value=decPrivilegeAfferAllMoney;
            return myDALMethod.UpdateData("前台管理_FRM_JieSuan", mySqlParameters);  
//返回值为1是正常的,小于0是异常。         
        }
//修改车辆状态
        [OperationContract]
        public int FRM_JieSuan_btnConfirm_Click_UpdateCarStatus(int intServiceWorkBillID)
        {
            SqlParameter[] mySqlParameters =
        {
            new SqlParameter("@TYPE",SqlDbType.Char),
            new SqlParameter("@ServiceWorkBillID",SqlDbType.Int),
        };
            mySqlParameters[0].Value = "FRM_JieSuan_btnConfirm_Click_UpdateCarStatus";
            mySqlParameters[1].Value = intServiceWorkBillID;
            return myDALMethod.UpdateData("前台管理_FRM_JieSuan", mySqlParameters); 
           //返回值为1是正常的,小于0是异常。  
        }

第三步:界面层(UIL)

BLL海马汽车销售系统.前台接待.FRM_QianTaiJieDai_JieSuan.FRM_QianTaiJieDai_JieSuanClient myFRM_QianTaiJieDai_JieSuanClient = 
            new BLL海马汽车销售系统.前台接待.FRM_QianTaiJieDai_JieSuan.FRM_QianTaiJieDai_JieSuanClient();
private void btnConfirm_Click(object sender, EventArgs e)
        {
            //提示对话框,如果点击【是】
            if (MessageBox.Show("各项费用是否已核准?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                string strXiaoShouShouKuan = "JS";
                string strSettleAccountsBillNumber = ShengChengDanHao(strXiaoShouShouKuan);//生成结算单号
                //给各个变量赋值
                int intServiceWorkBillID = FRM_JieSuan.ServiceWorkBillID;
                decimal decPrivilegeBeforeAllMoney = Convert.ToDecimal(txtPrivilegeBeforeAllMoney.Text);
                decimal decPrivilegeAllMoney = Convert.ToDecimal(txtPrivilegeAllMoney.Text);
                decimal decPrivilegeAfferWorkHoursMoney = Convert.ToDecimal(txtPrivilegeAfferWorkHoursMoney.Text);
                decimal decPrivilegeAfferMaterial = Convert.ToDecimal(txtPrivilegeAfferMaterial.Text);
                decimal decPrivilegeAfferElseMoney = Convert.ToDecimal(txtPrivilegeAfferElseMoney.Text);
                decimal decPrivilegeAfferAllMoney = Convert.ToDecimal(txtPrivilegeAfferAllMoney.Text);
                //调用方法保存到数据库
                int intJieSuan = myFRM_QianTaiJieDai_JieSuanClient.FRM_JieSuan_btnConfirm_Click(strSettleAccountsBillNumber, intServiceWorkBillID, decPrivilegeBeforeAllMoney,
                    decPrivilegeAllMoney, decPrivilegeAfferWorkHoursMoney, decPrivilegeAfferMaterial, decPrivilegeAfferElseMoney, decPrivilegeAfferAllMoney);
                //调用方法改变【车辆状态】
                int Update = myFRM_QianTaiJieDai_JieSuanClient.FRM_JieSuan_btnConfirm_Click_UpdateCarStatus(intServiceWorkBillID);
                if (intJieSuan > 0)
                {
                    MessageBox.Show("新建结算单成功!");
                    this.Close();
                }
            }
            else
            {
                return;
            }
        }


以上仅供参考学习,禁止用于商业用途!!!























































 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值