#region
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Drawing;
|
using System.IO;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Language;
|
using CSFrameworkV5.Library.CommonClass;
|
using GSBase;
|
|
#endregion
|
|
namespace CSFrameworkV5.Library
|
{
|
/// *************************************************************************/
|
/// *
|
/// * 文件名 :frmBaseBusinessForm.cs
|
/// * 程序说明 : 业务窗体基类
|
/// * 业务窗体是指有主从表结构数据操作的窗体.
|
/// * 原创作者 :www.csframework.com
|
/// *
|
/// * Copyright 2006-2021 C/S框架网 www.csframework.com
|
/// *
|
/// **************************************************************************/
|
/// <summary>
|
/// 业务窗体是指有主从表结构数据操作的窗体
|
/// </summary>
|
public partial class frmBaseBusinessForm : frmBaseDataForm,
|
IBusinessSupportable
|
{
|
/// <summary>
|
/// 业务单据窗体的业务逻辑层
|
/// </summary>
|
protected bllBaseBusiness _BLL = new bllUnknow();
|
|
private bllReports _BLLInstance;
|
private DataSet PrintSet; //打印数据源
|
|
public frmBaseBusinessForm()
|
{
|
InitializeComponent();
|
}
|
|
public bllBaseBusiness BLL => _BLL;
|
|
/// <summary>
|
/// 当改变按钮状态时调用此方法
|
/// </summary>
|
/// <param name="currentState">当前的状态</param>
|
protected override void ButtonStateChanged(UpdateType currentState)
|
{
|
base.ButtonStateChanged(currentState);
|
}
|
|
/// <summary>
|
/// 新增记录
|
/// </summary>
|
/// <param name="sender"></param>
|
public override void DoAdd(IButtonInfo sender)
|
{
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
_BLL.GetDataByKey("0", true); //下载一个空业务单据
|
_BLL.NewBusiness(); //增加一条主表记录
|
|
DoBindingSummaryEditor(_BLL
|
.DataBinder); //显示主表记录详细资料
|
DoBindingDetailGrid(_BLL.CurrentBusiness); //绑定明细表
|
base.DoAdd(sender);
|
ShowDetailPage(true);
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
// 2024-05-27 新增 BEGIN
|
protected void BindDetailGrids()
|
{
|
AssertFocusedRow();
|
var docNo =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)
|
[_BLL.KeyFieldName]
|
.ToStringEx();
|
_BLL.GetDataByKey(docNo, true);
|
DoBindingDetailGrid(_BLL.CurrentBusiness);
|
}
|
|
// 2024-05-27 新增 BEGIN
|
protected virtual void OnGridViewClick(object sender, EventArgs e)
|
{
|
BindDetailGrids();
|
}
|
|
protected virtual bool DoBeforeDelete(DataRow row)
|
{
|
if (_BLL.IsOwnerChange(row) == false)
|
{
|
Msg.Warning(
|
"您不能删除别人创建的单据!\r\n1.您与制单人不构成上下级关系\r\n2.制单人是分配临时的权限!");
|
return false;
|
}
|
|
if (_BLL.IsApproved(row))
|
{
|
Msg.Warning("单据已经审核,不能删除!");
|
return false;
|
}
|
|
return true;
|
}
|
|
protected virtual bool DoBeforeEdit(DataRow row)
|
{
|
if (_BLL.IsOwnerChange(row) == false)
|
{
|
Msg.Warning(
|
"您不能修改别人创建的单据!\r\n1.您与制单人不构成上下级关系\r\n2.制单人是分配临时的权限!");
|
return false;
|
}
|
|
if (_BLL.IsApproved(row))
|
{
|
Msg.Warning("单据已经审核,不能修改!");
|
return false;
|
}
|
|
return true;
|
}
|
|
/// <summary>
|
/// 绑定明细表格的数据源
|
/// </summary>
|
/// <param name="dataSource"></param>
|
protected virtual void DoBindingDetailGrid(DataSet dataSource)
|
{
|
}
|
|
/// <summary>
|
/// 绑定主表当前记录的所有输入控件的数据源
|
/// </summary>
|
/// <param name="dataSource"></param>
|
protected virtual void DoBindingSummaryEditor(DataTable dataSource)
|
{
|
}
|
|
/// <summary>
|
/// 取消修改
|
/// </summary>
|
/// <param name="sender"></param>
|
public override void DoCancel(IButtonInfo sender)
|
{
|
if (!Msg.AskQuestion("要取消修改吗?")) return;
|
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
if (_UpdateType == UpdateType.Add)
|
{
|
base.DoCancel(sender);
|
ShowSummaryPage(
|
true); //只显示Summary页面. 因为禁止使用DetailPage,所以并没有刷新Detail页面数据.
|
}
|
else
|
{
|
base.DoCancel(sender);
|
DoViewContent(sender); //刷新Detail页面资料.
|
}
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 删除记录
|
/// </summary>
|
/// <param name="sender"></param>
|
public override void DoDelete(IButtonInfo sender)
|
{
|
AssertFocusedRow(); //是否选择记录
|
|
var row = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
|
if (!DoBeforeDelete(row)) return; //删除记录前业务逻辑检查(比如记录已经审核、存档或关联数据等)
|
|
if (Msg.AskQuestion("确定要删除当前记录?"))
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
var b = _BLL.Delete(row[_BLL.KeyFieldName]
|
.ToStringEx()); //调用底层接口,删除数据
|
AssertEqual(b, true, "删除记录时发生错误!");
|
_SummaryView.RemoveRow(_SummaryView
|
.FocusedRowHandle); //删除表格中当前记录(删除缓存记录)
|
base.DoDelete(sender);
|
ShowSummaryPage(true);
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 修改单据
|
/// </summary>
|
/// <param name="sender"></param>
|
public override void DoEdit(IButtonInfo sender)
|
{
|
AssertFocusedRow();
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
var row =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
|
|
if (!DoBeforeEdit(row)) return;
|
|
base.DoEdit(sender);
|
DoViewContent(sender);
|
ShowDetailPage(true);
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 当用户在Summary页选择一条记录. 显示当前记录的详细资料及明细表资料.
|
/// </summary>
|
/// <param name="sender"></param>
|
public override void DoViewContent(IButtonInfo sender)
|
{
|
AssertFocusedRow();
|
var docNo =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[
|
_BLL.KeyFieldName].ToStringEx();
|
_BLL.GetDataByKey(docNo, true);
|
|
var summary = _BLL.CurrentBusiness.Tables[_BLL.SummaryTableName];
|
DoBindingSummaryEditor(
|
summary); //显示主表记录详细资料
|
DoBindingDetailGrid(_BLL.CurrentBusiness); //绑定明细表
|
PrintSet = _BLL.CurrentBusiness;
|
base.DoViewContent(sender);
|
ShowDetailPage(
|
false); //用户点击ViewContent按钮可以显示Summary页
|
}
|
|
public override void Refresh()
|
{
|
base.Refresh();
|
}
|
|
|
/// <summary>
|
/// 获取当前记录的指定字段的值
|
/// </summary>
|
/// <param name="fieldName">字段名</param>
|
/// <returns></returns>
|
protected string GetSummaryFieldValue(string fieldName)
|
{
|
if (_SummaryView == null) return "";
|
|
if (_SummaryView.IsValidRowHandle(_SummaryView.FocusedRowHandle))
|
return ConvertEx.ToString(
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[
|
fieldName]);
|
|
return "";
|
}
|
|
/// <summary>
|
/// 初始化数据窗体的常用按钮
|
/// </summary>
|
public override void InitButtons()
|
{
|
base.InitButtons();
|
Buttons.AddRange(GetBusinessButtons());
|
Buttons.AddRange(GetPrintableButtons());
|
}
|
|
/// <summary>
|
/// 设置为修改状态
|
/// </summary>
|
protected override void SetEditMode()
|
{
|
base.SetEditMode();
|
|
_buttons.GetButtonByName("btnApproval").Enable = false;
|
_buttons.GetButtonByName("btnApprovalUndo").Enable = false;
|
_buttons.GetButtonByName("btnShowModifyHistory").Enable = false;
|
}
|
|
/// <summary>
|
/// 删除单据:只删除明细记录,主表金额清零!!!
|
/// </summary>
|
/// <param name="row"></param>
|
protected virtual void SetSummaryRowZero(DataRow row)
|
{
|
}
|
|
/// <summary>
|
/// 设置为查看状态
|
/// </summary>
|
protected override void SetViewMode()
|
{
|
base.SetViewMode();
|
|
_buttons.GetButtonByName("btnApproval").Enable =
|
ButtonAuthorized(ButtonAuthority.APPROVAL);
|
_buttons.GetButtonByName("btnApprovalUndo").Enable =
|
ButtonAuthorized(ButtonAuthority.APPROVAL);
|
_buttons.GetButtonByName("btnShowModifyHistory").Enable =
|
ButtonAuthorized(ButtonAuthority.SHOW_MOD_HISTORY);
|
}
|
|
#region IBusinessSupportable 成员
|
|
/// <summary>
|
/// 打印
|
/// </summary>
|
/// <returns></returns>
|
public virtual void DoPrint(IButtonInfo button)
|
{
|
var tmpFile = "";
|
var ReportsName =
|
PrintSet.Tables[0].Rows[0]["AppNAME"].ToString();
|
var myReport = new MyFastReportMain();
|
var SYSReports = _BLL.GetReports(ReportsName);
|
foreach (DataRow dr in SYSReports.Rows)
|
{
|
var bs = (byte[])dr["Data"];
|
if (bs == null) bs = new byte[] { };
|
|
//写入到临时文件
|
tmpFile = Path.Combine(Application.StartupPath,
|
ReportsName + ".frx");
|
File.WriteAllBytes(tmpFile, bs);
|
}
|
|
// string ReportFormat = Environment.CurrentDirectory + "\\SN.frx";
|
try
|
{
|
var reportString = File.ReadAllText(tmpFile);
|
myReport.Print(PrintType.PrintReport, PrintSet, reportString);
|
File.Delete(tmpFile);
|
}
|
catch (Exception)
|
{
|
Msg.Warning("该模块未设置打印模版!!!");
|
}
|
}
|
|
/// <summary>
|
/// 打印设计
|
/// </summary>
|
/// <returns></returns>
|
public virtual void DoPrintT(IButtonInfo button)
|
{
|
var tmpFile = "";
|
var ReportsName =
|
PrintSet.Tables[0].Rows[0]["AppNAME"].ToString();
|
var myReport = new MyFastReportMain();
|
var SYSReports = _BLL.GetReports(ReportsName);
|
foreach (DataRow dr in SYSReports.Rows)
|
{
|
var bs = (byte[])dr["Data"];
|
if (bs == null) bs = new byte[] { };
|
|
//写入到临时文件
|
tmpFile = Path.Combine(Application.StartupPath,
|
ReportsName + ".frx");
|
File.WriteAllBytes(tmpFile, bs);
|
}
|
|
// string ReportFormat = Environment.CurrentDirectory + "\\SN.frx";
|
try
|
{
|
var reportString = File.ReadAllText(tmpFile);
|
myReport.Print(PrintType.DesignReport, PrintSet, reportString);
|
File.Delete(tmpFile);
|
}
|
catch (Exception)
|
{
|
Msg.Warning("该模块未设置打印模版!!!");
|
}
|
}
|
|
/// <summary>
|
/// 打印预览
|
/// </summary>
|
/// <returns></returns>
|
public virtual void DoPrintUN(IButtonInfo button)
|
{
|
var tmpFile = "";
|
var ReportsName =
|
PrintSet.Tables[0].Rows[0]["AppNAME"].ToString();
|
var myReport = new MyFastReportMain();
|
var SYSReports = _BLL.GetReports(ReportsName);
|
foreach (DataRow dr in SYSReports.Rows)
|
{
|
var bs = (byte[])dr["Data"];
|
if (bs == null) bs = new byte[] { };
|
|
//写入到临时文件
|
tmpFile = Path.Combine(Application.StartupPath,
|
ReportsName + ".frx");
|
File.WriteAllBytes(tmpFile, bs);
|
}
|
|
// string ReportFormat = Environment.CurrentDirectory + "\\SN.frx";
|
try
|
{
|
var reportString = File.ReadAllText(tmpFile);
|
myReport.Print(PrintType.PreviewReport, PrintSet, reportString);
|
File.Delete(tmpFile);
|
}
|
catch (Exception)
|
{
|
Msg.Warning("该模块未设置打印模版!!!");
|
}
|
}
|
|
|
public virtual IButtonInfo[] GetPrintableButtons()
|
{
|
var list = new List<IButtonInfo>();
|
|
//打印
|
if (ButtonAuthorized(ButtonAuthority.PRINT))
|
{
|
var btnPrint = ToolbarRegister.CreateButton("btnPrint",
|
LanLib.Get("打印"),
|
ToolBarGroup.打印功能, Globals.LoadBitmap("32_Print.png"),
|
new Size(57, 28), true, true, DoPrint);
|
list.Add(btnPrint);
|
}
|
|
if (ButtonAuthorized(ButtonAuthority.PRINT))
|
{
|
var btnPrint = ToolbarRegister.CreateButton("btnPrint",
|
LanLib.Get("报表设计"),
|
ToolBarGroup.打印功能, Globals.LoadBitmap("32_Print.png"),
|
new Size(57, 28), true, true, DoPrintT);
|
list.Add(btnPrint);
|
}
|
|
if (ButtonAuthorized(ButtonAuthority.PRINT))
|
{
|
var btnPrint = ToolbarRegister.CreateButton("btnPrint",
|
LanLib.Get("预览"),
|
ToolBarGroup.打印功能, Globals.LoadBitmap("32_Print.png"),
|
new Size(57, 28), true, true, DoPrintUN);
|
list.Add(btnPrint);
|
}
|
|
return list.ToArray();
|
}
|
|
/// <summary>
|
/// 返回业务单据窗体的按钮数组
|
/// </summary>
|
/// <returns></returns>
|
public virtual IButtonInfo[] GetBusinessButtons()
|
{
|
var list = new ArrayList();
|
|
//审核/反审
|
if (ButtonAuthorized(ButtonAuthority.APPROVAL))
|
{
|
list.Add(ToolbarRegister.CreateButton("btnApproval", "审核",
|
ToolBarGroup.审核功能,
|
Globals.LoadBitmap("24_Approval.ico"), new Size(57, 28),
|
true, false, DoApproval));
|
list.Add(ToolbarRegister.CreateButton("btnApprovalUndo", "反审",
|
ToolBarGroup.审核功能,
|
Globals.LoadBitmap("24_ApprovalUndo.ico"), new Size(57, 28),
|
true, false, DoApprovalUndo));
|
}
|
|
//查看日志
|
if (ButtonAuthorized(ButtonAuthority.SHOW_MOD_HISTORY))
|
list.Add(ToolbarRegister.CreateButton("btnShowModifyHistory",
|
"查看日志", ToolBarGroup.扩展功能1,
|
Globals.LoadBitmap("32_EditLog.png"), new Size(57, 28),
|
true, true, DoShowModifyHistory));
|
|
var ii = (IButtonInfo[])list.ToArray(typeof(IButtonInfo));
|
return ii;
|
}
|
|
/// <summary>
|
/// 审核单据
|
/// </summary>
|
/// <param name="button"></param>
|
public virtual void DoApproval(IButtonInfo button)
|
{
|
AssertFocusedRow();
|
|
var row = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
|
var docNo = row[_BLL.KeyFieldName].ToStringEx();
|
|
if (_BLL.IsApproved(row))
|
{
|
Msg.Warning($"单据<{docNo}>已经审核,不可重复操作!");
|
}
|
else
|
{
|
if (Msg.AskQuestion($"确定要审核单据<{docNo}>吗?"))
|
{
|
_BLL.ApprovalBusiness(row); //审核单据
|
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
|
DoViewContent(null); //显示单据明细
|
}
|
}
|
}
|
|
public virtual void DoApprovalUndo(IButtonInfo button)
|
{
|
AssertFocusedRow();
|
|
var row = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
|
var docNo = row[_BLL.KeyFieldName].ToStringEx();
|
|
if (!_BLL.IsApproved(row))
|
{
|
Msg.Warning($"单据<{docNo}>没有审核,不需要反审核操作!");
|
}
|
else
|
{
|
if (Msg.AskQuestion($"确定要反审核单据<{docNo}>吗?"))
|
{
|
_BLL.ApprovalBusinessUndo(row); //审核单据
|
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
|
DoViewContent(null); //显示单据明细
|
}
|
}
|
}
|
|
/// <summary>
|
/// 查看单据的修改历史记录
|
/// </summary>
|
/// <param name="button"></param>
|
public virtual void DoShowModifyHistory(IButtonInfo button)
|
{
|
AssertFocusedRow();
|
var form = MdiTools.OpenChildForm(MdiParent as IMdiForm,
|
typeof(frmLogEditHistory), false);
|
if (form != null)
|
{
|
var keyValue = "";
|
if (tcBusiness.SelectedTabPageIndex == 0) //数据查看
|
keyValue =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[
|
_BLL.KeyFieldName].ToStringEx();
|
else //数据编辑
|
keyValue = _BLL.DataBinder != null
|
? _BLL.DataBindRow[_BLL.KeyFieldName].ToStringEx()
|
: "";
|
|
(form as frmLogEditHistory).ShowData(_BLL.SummaryTableName,
|
keyValue, DateTime.Today);
|
}
|
}
|
|
/// <summary>
|
/// 外部调用接口,显示单据
|
/// </summary>
|
/// <param name="docNo">单据号码</param>
|
public virtual void ShowBusiness(string docNo)
|
{
|
Msg.ShowInformation("请在派生类实现些方法,主键:" + docNo);
|
}
|
|
#endregion
|
}
|
}
|