/// <summary> /// 用窗体的内容初始化实体对象 /// </summary> POBodyEntity ReadyEntityToSave() { POBodyEntity po = new POBodyEntity(); po.Details = bindingSource1.DataSource as List <PODetailEntity>; //组织表头,不要填写BillID,业务员直接保存名称 po.BillID = txtBillID.Text; po.OrgCode = GlobeSettings.LoginedUser.OrgCode; po.SourceBillID = txtSourceBillID.Text.Trim(); po.Sales = listSales.Text; po.Supplier = ConvertUtil.ToString(listSupplier.EditValue); po.BillType = ConvertUtil.ToString(listBillType.EditValue); po.ContractNO = txtContractNO.Text.Trim(); po.Remark = txtRemark.Text.Trim(); po.Creator = GlobeSettings.LoginedUser.UserName; //下面是可扩展的字段 //po.PO_STR1 = ... //... // //po.PO_DATE2 = ... return(po); }
// 从采购单创建收货单,一个采购单可以创建多个收货单,正常说应该以实收数量来限制收货单入库总量不能大于采购订单量 private void OnChoosePOButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { if (e.Button.Kind == DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) { using (FrmPoQuery frmQuery = new FrmPoQuery()) { //如果只启用一审,则传参一审 string billState = string.Concat(BillStateConst.PO_STATE_CODE_SECOND_APPROVED, ",", BillStateConst.PO_STATE_CODE_RECEIVING); if (CustomFields.ApproveType.ItemValue == "1") { billState = string.Concat(BillStateConst.PO_STATE_CODE_FIRST_APPROVED, ",", BillStateConst.PO_STATE_CODE_RECEIVING); } frmQuery.LockThisState(billState); if (frmQuery.ShowDialog() == DialogResult.OK) { POBodyEntity header = frmQuery.FocusedHeader; txtPO.Text = header.BillID; listBillType.EditValue = header.BillType; listRespPerson.EditValue = header.Sales; listSupplier.EditValue = header.Supplier; txtContractNO.Text = header.ContractNO; bindingSource1.DataSource = header.Details; } } } else { ClearHeader(); } }
public FrmPoEditRemark(POBodyEntity poHeader) { InitializeComponent(); this.PoHeader = poHeader; this.Text = string.Format("编辑备注(单号:{0})", poHeader.BillID); }
private void DoEditOne() { if (ucPoBody1.FocusedRowCount == 0) { MsgBox.Warn("请选中要编辑的行。"); return; } if (ucPoBody1.FocusedRowCount > 1) { MsgBox.Warn("不支持多行操作,请选择其中一行。"); return; } POBodyEntity focusedHeader = ucPoBody1.FocusedHeader; if (focusedHeader.BillState != BillStateConst.PO_STATE_CODE_DRAFT) { MsgBox.Warn(string.Format("单据“{0}”的状态不是草稿,不允许编辑。", focusedHeader.BillID)); return; } FrmPoEdit frmEditBill = new FrmPoEdit(focusedHeader.BillID, false); frmEditBill.MdiParent = this.MdiParent; frmEditBill.Show(); }
/// <summary> /// 取消二审 /// </summary> /// <param name="focusedHeaders"></param> public void CancelSecondApproveBills(List <POBodyEntity> focusedHeaders) { if (GetFocusedRowCount(focusedHeaders) == 0) { MsgBox.Warn("请选中要反审批的行。"); return; } //先从界面上判断一下,减少网络交互和数据库负载 foreach (POBodyEntity header in focusedHeaders) { if (header.BillState != BillStateConst.PO_STATE_CODE_SECOND_APPROVED) { MsgBox.Warn(string.Format("单据“{0}”的状态不允许反审,必须是已经完成二审并且没有开始收货的单据。", header.BillID)); return; } } if (MsgBox.AskOK(string.Format("您选择了“{0}”张单据“{1}”,确认要做反审操作吗?", GetFocusedRowCount(focusedHeaders), GetFocusedBillIDs(focusedHeaders))) != DialogResult.OK) { return; } try { POBodyEntity errHeader = null; string result = poDal.CancelSecondApprove(focusedHeaders, GlobeSettings.LoginedUser.UserName, GlobeSettings.LoginedUser.UserCode, out errHeader); switch (result) { case "1": //成功,刷新界面即可,不再提示 ReloadStateDesc(focusedHeaders); break; case "-1": MsgBox.Warn(string.Format("单据“{0}”操作失败,单据不存在。", errHeader.BillID)); break; case "-2": MsgBox.Warn(string.Format("单据“{0}”反审失败,必须是已通过二审的单据才允许反审。", errHeader.BillID)); break; case "-3": MsgBox.Warn(string.Format("单据“{0}”反审失败,审批人不是您本人,无法反审。", errHeader.BillID)); break; case "-4": MsgBox.Warn(string.Format("更新单据“{0}”状态时失败,请稍后重试。", errHeader.BillID)); break; } } catch (Exception ex) { MsgBox.Err(ex.Message); } }
private void OnHeaderRowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { POBodyEntity header = gvHeader.GetRow(e.RowHandle) as POBodyEntity; if (header != null && header.RowForeColor != null) { e.Appearance.ForeColor = Color.FromArgb(header.RowForeColor.Value); } }
/// <summary> /// 删除选中的单据 /// </summary> /// <param name="selectedHeader"></param> public void DeleteSelectedBill(List <POBodyEntity> focusedHeaders) { if (GetFocusedRowCount(focusedHeaders) == 0) { MsgBox.Warn("请选中要删除的行。"); return; } //先从界面上判断一下,减少网络交互和数据库负载 foreach (POBodyEntity header in focusedHeaders) { if (header.BillState != BillStateConst.PO_STATE_CODE_DRAFT) { MsgBox.Warn(string.Format("单据“{0}”状态不是草稿,无法删除。", header.BillID)); return; } } if (MsgBox.AskOK(string.Format("您选择了“{0}”张单据“{1}”,确认要删除吗?", GetFocusedRowCount(focusedHeaders), GetFocusedBillIDs(focusedHeaders))) != DialogResult.OK) { return; } try { POBodyEntity errHeader = null; string result = poDal.Delete(focusedHeaders, GlobeSettings.LoginedUser.UserName, out errHeader); switch (result) { case "1": //成功,刷新界面即可,不再提示 ipo.ReloadPO(); break; case "-1": MsgBox.Warn(string.Format("删除失败,单据“{0}”不存在。", errHeader.BillID)); break; case "-2": MsgBox.Warn(string.Format("单据“{0}”的状态不是草稿,无法删除。", errHeader.BillID)); break; case "-3": MsgBox.Warn(string.Format("删除单据“{0}”的明细失败,请稍后重试。", errHeader.BillID)); break; case "-4": MsgBox.Warn(string.Format("删除单据“{0}”的表头失败,请稍后重试。", errHeader.BillID)); break; } } catch (Exception ex) { MsgBox.Err(ex.Message); } }
void ShowFocusedDetail() { POBodyEntity po = FocusedHeader; if (po != null && po.Details == null) { po.Details = poQueryDal.GetDetailByBillID(po.BillID); gvHeader.RefreshData(); } }
/// <summary> /// 二审 /// </summary> /// <param name="focusedHeaders"></param> public void SecondApproveBills(List <POBodyEntity> focusedHeaders) { if (GetFocusedRowCount(focusedHeaders) == 0) { MsgBox.Warn("请选中要审批的行。"); return; } //先从界面上判断一下,减少网络交互和数据库负载 foreach (POBodyEntity header in focusedHeaders) { if (header.BillState != BillStateConst.PO_STATE_CODE_FIRST_APPROVED) { MsgBox.Warn(string.Format("单据“{0}”的状态不允许审批,必须是已通过一审并且没有二审的单据。", header.BillID)); return; } } if (MsgBox.AskOK(string.Format("您选择了“{0}”张单据“{1}”,确认要审核通过吗?", GetFocusedRowCount(focusedHeaders), GetFocusedBillIDs(focusedHeaders))) != DialogResult.OK) { return; } try { POBodyEntity errHeader = null; string result = poDal.SecondApprove(focusedHeaders, GlobeSettings.LoginedUser.UserName, GlobeSettings.LoginedUser.UserCode, out errHeader); switch (result) { case "1": //状态更新成功后,刷新界面即可,不再提示 ReloadStateDesc(focusedHeaders); break; case "-1": MsgBox.Warn(string.Format("单据“{0}”操作失败,单据不存在。", errHeader.BillID)); break; case "-2": MsgBox.Warn(string.Format("单据“{0}”操作失败,单据状态必须是一审通过,请刷新后重试。", errHeader.BillID)); break; case "-3": MsgBox.Warn(string.Format("更新单据“{0}”状态时失败,失败原因未知,请稍后重试。", errHeader.BillID)); break; } } catch (Exception ex) { MsgBox.Err(ex.Message); } }
/// <summary> /// 提交选中单据 /// </summary> /// <param name="selectedHeader"></param> public void CommitBill(List <POBodyEntity> focusedHeaders) { if (GetFocusedRowCount(focusedHeaders) == 0) { MsgBox.Warn("请选中要提交的行。"); return; } //先从界面上判断一下,减少网络交互和数据库负载 foreach (POBodyEntity header in focusedHeaders) { if (header.BillState != BillStateConst.PO_STATE_CODE_DRAFT) { MsgBox.Warn(string.Format("单据“{0}”已经提交,不允许多次提交。", header.BillID)); return; } } if (MsgBox.AskOK(string.Format("您选择了“{0}”张单据“{1}”,提交后不再允许编辑,确认要提交吗?", GetFocusedRowCount(focusedHeaders), GetFocusedBillIDs(focusedHeaders))) != DialogResult.OK) { return; } try { POBodyEntity errHeader = null; string result = poDal.Commit(focusedHeaders, GlobeSettings.LoginedUser.UserName, out errHeader); switch (result) { case "1": //成功,刷新界面即可,不再提示 ReloadStateDesc(focusedHeaders); break; case "-1": MsgBox.Warn(string.Format("提交失败,单据“{0}”不存在。", errHeader.BillID)); break; case "-2": MsgBox.Warn(string.Format("单据“{0}”已经提交,不允许多次提交。", errHeader.BillID)); break; case "-3": MsgBox.Warn(string.Format("更新单据“{0}”的状态时失败,请稍后重试或联系管理员解决此问题。", errHeader.BillID)); break; } } catch (Exception ex) { MsgBox.Err(ex.Message); } }
private void OnOKClick(object sender, EventArgs e) { POBodyEntity po = FocusedHeader; if (po == null) { MsgBox.Warn("未选中任何订单行。"); } else { this.DialogResult = DialogResult.OK; } }
void ShowPODetail(POBodyEntity po) { txtBillID.Text = po.BillID; txtSourceBillID.Text = po.SourceBillID; listSales.Text = po.Sales; listSales.ClosePopup(); listSupplier.EditValue = po.Supplier; listBillType.EditValue = po.BillType; txtContractNO.Text = po.ContractNO; txtRemark.Text = po.Remark; txtBillState.Text = po.BillStateDesc; bindingSource1.DataSource = po.Details; }
private void ReloadStateDesc(List <POBodyEntity> headers) { //从集合中取出一个单据的状态,更新集合中的其他单据的状态 if (headers != null && headers.Count > 0) { POBodyEntity poState = poQueryDal.GetBillState(headers[0].BillID); headers.ForEach(h => { h.BillState = poState.BillState; h.BillStateDesc = poState.BillStateDesc; }); //刷新界面 ipo.RefreshState(); } }
/// <summary> /// 删除选中的单据,状态必须为草稿 /// </summary> /// <param name="focusedHeaders"></param> /// <param name="userName"></param> /// <param name="errHeader"></param> /// <returns>1:成功;0:未知;-1:单据未找到;-2:不是草稿;-3:删除明细时,一行都没受影响;-4:删除主表时,一行都没受影响</returns> public string Delete(List <POBodyEntity> focusedHeaders, string userName, out POBodyEntity errHeader) { errHeader = null; DynamicParameters parms = new DynamicParameters(); parms.Add("P_BILL_ID"); parms.Add("P_USER_NAME", userName); parms.AddOut("P_RET_VAL", DbType.String, 2); IMapper map = DatabaseInstance.Instance(); IDbTransaction tran = map.BeginTransaction(); try { string result = string.Empty; foreach (POBodyEntity header in focusedHeaders) { parms.Set("P_BILL_ID", header.BillID); map.Execute("P_PO_DEL_BILL", parms, tran, CommandType.StoredProcedure); result = parms.Get <string>("P_RET_VAL"); if (result != "1") { errHeader = header; break; } } if (result == "1") { tran.Commit(); } else { tran.Rollback(); } return(result); } catch (Exception ex) { tran.Rollback(); throw ex; } }
void ShowPODetail() { if (!string.IsNullOrEmpty(this.BillID)) { POBodyEntity header = poQueryDal.GetBillHeader(this.BillID); if (header != null) { header.Details = poQueryDal.GetDetailByBillID(this.BillID); ShowPODetail(header); //复制并创建新单据 if (this.IsCopyNew) { ClearBillID(); } } } }
/// <summary> /// 处理写入数据库 /// </summary> void SaveToDatabase(bool commitNow) { try { //提交,通过BillID可以得知是否新建 POBodyEntity po = ReadyEntityToSave(); string errMsg = string.Empty; string result = poDal.SaveBill(po, commitNow, GlobeSettings.LoginedUser.UserName, out errMsg); switch (result) { case "1": txtBillID.Text = po.BillID; txtBillState.Text = po.BillStateDesc; MsgBox.OK("保存成功。"); break; case "2": case "4": MsgBox.Warn("更新单据信息失败,可能该单据已经被其他人删除。"); break; case "3": MsgBox.Warn("该单据当前状态不允许编辑。"); break; case "11": MsgBox.Warn(string.Format("保存失败,物料‘{0}’不存在。", errMsg)); break; case "12": MsgBox.Warn(string.Format("保存失败,计量单位‘{0}’不存在。", errMsg)); break; default: MsgBox.Err("保存失败,错误信息未知,请记下操作轨迹,联系管理员协助解决。"); break; } } catch (Exception ex) { MsgBox.Err(ex.Message); } }
public void ViewLog(POBodyEntity focusedHeader) { if (focusedHeader == null) { MsgBox.Warn("请选中要查看的行。"); return; } if (GetFocusedRowCount(ipo.GetFocusedHeaders()) > 1) { MsgBox.Warn("不支持多行操作,请选择其中一行。"); return; } using (FrmViewBillLog frmLog = new FrmViewBillLog(focusedHeader.BillID, BaseCodeConstant.PO_STATE)) { frmLog.ShowDialog(); } }
public void BindingDetail() { POBodyEntity header = FocusedHeader; if (header == null) { gdDetails.DataSource = null; gvDetails.ViewCaption = "未选择单据"; } else { if (header.Details == null) { header.Details = poQueryDal.GetDetailByBillID(header.BillID); } gdDetails.DataSource = header.Details; gvDetails.ViewCaption = string.Format("明细-{0}", header.BillID); } }
public void EditRemark(POBodyEntity focusedHeader) { if (focusedHeader == null) { MsgBox.Warn("请选中要编写备注的行。"); return; } if (GetFocusedRowCount(ipo.GetFocusedHeaders()) > 1) { MsgBox.Warn("不支持多行操作,请选择其中一行。"); return; } using (FrmPoEditRemark frmEditRemark = new FrmPoEditRemark(focusedHeader)) { if (frmEditRemark.ShowDialog() == DialogResult.OK) { ipo.RefreshState(); } } }
/// <summary> /// 保存编辑的采购单 /// </summary> /// <param name="bill"></param> /// <param name="commitNow">false:存为草稿;true:直接提交</param> /// <param name="creator">创建者姓名</param> /// <returns>-1:单据状态不允许编辑;0:更新表头时失败;1:成功</returns> public string SaveBill(POBodyEntity bill, bool commitNow, string creator, out string errMsg) { //记录详细的错误,例如具体是哪个物料不存在了等等 errMsg = string.Empty; IMapper map = DatabaseInstance.Instance(); IDbTransaction trans = map.BeginTransaction(); try { DynamicParameters parms = new DynamicParameters(); parms.Add("P_BILL_ID", bill.BillID); parms.Add("P_ORG_CODE", bill.OrgCode); //直接提交还是另存为草稿 if (commitNow) { parms.Add("P_BILL_STATE", BillStateConst.PO_STATE_CODE_COMMITED); } else { parms.Add("P_BILL_STATE", BillStateConst.PO_STATE_CODE_DRAFT); } parms.Add("P_SOURCE_BILL_ID", bill.SourceBillID); parms.Add("P_SALES", bill.Sales); parms.Add("P_SUPPLIER", bill.Supplier); parms.Add("P_BILL_TYPE", bill.BillType); parms.Add("P_CONTRACT_NO", bill.ContractNO); parms.Add("P_REMARK", bill.Remark); parms.Add("P_PO_STR1", bill.PO_STR1); parms.Add("P_PO_STR2", bill.PO_STR2); parms.Add("P_PO_STR3", bill.PO_STR3); parms.Add("P_PO_STR4", bill.PO_STR4); parms.Add("P_PO_NUM1", bill.PO_NUM1); parms.Add("P_PO_NUM2", bill.PO_NUM2); parms.Add("P_PO_DATE1", bill.PO_DATE1); parms.Add("P_PO_DATE2", bill.PO_DATE2); parms.Add("P_CREATOR", creator); parms.AddOut("P_NEW_BILL_ID", DbType.String, 50); parms.AddOut("P_RET_VAL", DbType.String, 2); //先写入主表 map.Execute("P_PO_SAVE_HEADER", parms, trans, CommandType.StoredProcedure); //获取返回值,只有1表示成功 string retVal = parms.Get <string>("P_RET_VAL"); if (retVal != "1") { trans.Rollback(); return(retVal); } //保存明细 string newBillID = parms.Get <string>("P_NEW_BILL_ID"); parms = new DynamicParameters(); parms.Add("P_BILL_ID", newBillID); parms.Add("P_MTL_CODE"); parms.Add("P_QTY"); parms.Add("P_PRICE"); parms.Add("P_REMARK"); parms.AddOut("P_RET_VAL", DbType.String, 2); //再写明细 foreach (PODetailEntity line in bill.Details) { parms.Set("P_MTL_CODE", line.MaterialCode); parms.Set("P_QTY", line.PlanQty); parms.Set("P_PRICE", line.Price); parms.Set("P_REMARK", line.Remark); map.Execute("P_PO_SAVE_DETAIL", parms, trans, CommandType.StoredProcedure); retVal = parms.Get <string>("P_RET_VAL"); if (retVal != "1") { if (retVal == "11") { errMsg = line.MaterialCode; } trans.Rollback(); break; } } if (retVal == "1") { trans.Commit(); if (commitNow) { bill.BillState = BillStateConst.PO_STATE_CODE_COMMITED; bill.BillStateDesc = BillStateConst.PO_STATE_DESC_COMMITED; } else { bill.BillState = BillStateConst.PO_STATE_CODE_DRAFT; bill.BillStateDesc = BillStateConst.PO_STATE_DESC_DRAFT; } bill.BillID = newBillID; } return(retVal); } catch (Exception ex) //只能是insert语句产生了异常,先回滚再抛出异常信息 { trans.Rollback(); throw ex; } }