结算
对已竣工的维修工单所产生的配件费、项目工时金额等各项费用进行结算开单。
点击【定位】,弹出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;
}
}
以上仅供参考学习,禁止用于商业用途!!!