海马汽车经销商管理系统技术解析(十三)结算
来源:互联网 发布:javzoo最新域名2017 编辑:程序博客网 时间:2024/04/28 14:43
结算
对已竣工的维修工单所产生的配件费、项目工时金额等各项费用进行结算开单。
点击【定位】,弹出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_ServiceWorkBillListSET AttributeMinuteID_CarStatus =18WHERE 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; } }
以上仅供参考学习,禁止用于商业用途!!!
- 海马汽车经销商管理系统技术解析(十三)结算
- 海马汽车经销商管理系统技术解析(十四)出厂
- 海马汽车经销商管理系统技术解析(三)应收管理
- 海马汽车经销商管理系统技术解析(四)保养管理
- 海马汽车经销商管理系统技术解析(一)服务配置流程
- 海马汽车经销商管理系统技术解析(一)新建项目,搭建WCF架构
- 海马汽车经销商管理系统技术解析(二)登陆验证
- 海马汽车经销商管理系统技术解析(二)维修收银
- 海马汽车经销商管理系统技术解析(五)车辆续保提醒
- 海马汽车经销商管理系统技术解析(六)顾客生日祝贺
- 海马汽车经销商管理系统技术解析(七)投诉处理
- 海马汽车经销商管理系统技术解析(四)新增预约
- 海马汽车经销商管理系统技术解析(五)预约修改
- 海马汽车经销商管理系统技术解析(六)定位预约单
- 海马汽车经销商管理系统技术解析(七)预约失败处理
- 海马汽车经销商管理系统技术解析(八)预约变更
- 海马汽车经销商管理系统技术解析(九)预约单转维修工单
- 海马汽车经销商管理系统技术解析(十)预约配件资源释放
- C++学习篇
- Java连接数据库
- OC 基础知识遗漏点
- MFC CSocket简单C/S通信
- TCP/IP------ping、traceroute、ICMP、Telnet
- 海马汽车经销商管理系统技术解析(十三)结算
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊
- 黑马程序员_Java_集合总结
- Lambda表达式详解
- Nginx 内嵌lua脚本,结合Redis使用
- 如何在linux下检测内存泄漏
- Linux定时任务Crontab详解
- Android异常之Service启动Activity
- 【王晓刚】深度学习在图像识别中的研究进展与展望