#region
|
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Linq;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Library;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Models;
|
using DevExpress.XtraEditors;
|
|
#endregion
|
|
namespace CSFrameworkV5.SystemModule
|
{
|
public partial class frmDocNoRule : frmBaseDataDictionary,
|
IFormGridPermission
|
{
|
private bllDocNoRule _BLLInstance;
|
|
public frmDocNoRule()
|
{
|
InitializeComponent();
|
}
|
|
public List<GridPermissionItem> GetGrids()
|
{
|
var list = new List<GridPermissionItem>();
|
list.Add(new GridPermissionItem("单据编码规则", gvSummary));
|
return list;
|
}
|
|
public void SetGridsPermission()
|
{
|
GridPermissionConfig.SetPermission(gvSummary);
|
}
|
|
protected override void
|
ButtonStateChanged(UpdateType currentState) //按钮状态改变时触发的事件
|
{
|
base.ButtonStateChanged(currentState);
|
txtCreationDate.Properties.ReadOnly = true; //禁止修改
|
txtCreatedBy.Properties.ReadOnly = true; //禁止修改
|
|
txtCurrentValue.Enabled = false;
|
txtDocCode.Enabled = currentState == UpdateType.Add;
|
|
txtFlagSpilitNo.Enabled = IsAddOrEditMode;
|
txtFlagIncludeDocCode.Enabled = IsAddOrEditMode;
|
_txtPrefix.Properties.ReadOnly = true;
|
}
|
|
public override void DoAdd(IButtonInfo sender)
|
{
|
base.DoAdd(sender);
|
|
if (IsAddMode)
|
{
|
_BLLInstance.DataBinderRow[sys_DocNoRule.RowID] =
|
Globals.NewRowID();
|
|
SetEditorBindingValue(txtCreatedBy, Loginer.CurrentUser.Account,
|
true);
|
SetEditorBindingValue(txtCreationDate, DateTime.Now, true);
|
SetEditorBindingValue(txxtItem1, "<年年年年>", true);
|
SetEditorBindingValue(txxtItem2, "", true);
|
SetEditorBindingValue(txxtItem3, "", true);
|
SetEditorBindingValue(txxtItem4, "", true);
|
SetEditorBindingValue(txtCurrentValue, "0", true);
|
SetEditorBindingValue(txtNoLength, "8", true);
|
SetEditorBindingValue(txtResetZero, "归零", true);
|
SetEditorBindingValue(txtFlagIncludeDocCode, "Y", true);
|
SetEditorBindingValue(txtFlagSpilitNo, "N", true);
|
|
OnConfigItemChanged();
|
}
|
}
|
|
public override bool DoBeforeDelete(ref string keyValue)
|
{
|
AssertFocusedRow(); //检查是否选择一条记录
|
|
//调用业务逻辑类删除记录
|
var summary =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);
|
keyValue = summary[_BLL.KeyFieldName].ToStringEx(); //主键值
|
|
return Msg.AskQuestion("确定要删除当前记录吗?");
|
}
|
|
/// <summary>
|
/// 绑定修改页面中所有输入框的数据源
|
/// </summary>
|
/// <param name="summary">数据源</param>
|
protected override void DoBindingSummaryEditor(DataTable summary)
|
{
|
DoBindingEditorPanel(pcDetailEditor, summary);
|
//在此可绑定其它自定义的输入框,参考frmCustomer的DoBindingSummaryEditor方法
|
|
DataBinder.BindingTextEdit(txtRuleFormat, summary,
|
sys_DocNoRule.RuleFormat);
|
DataBinder.BindingCheckEdit(txtFlagSpilitNo, summary,
|
sys_DocNoRule.FlagSpilitNo);
|
DataBinder.BindingCheckEdit(txtFlagIncludeDocCode, summary,
|
sys_DocNoRule.FlagIncludeDocCode);
|
}
|
|
public override void DoDelete(IButtonInfo sender)
|
{
|
var keyValue = "";
|
if (false == DoBeforeDelete(ref keyValue)) return;
|
|
var b = _BLLInstance.Delete(txt_DataSet.EditValue.ToStringEx(),
|
keyValue);
|
AssertEqual(b, true, "删除记录时发生错误!");
|
|
DeleteSummaryRow(_SummaryView.FocusedRowHandle); //删除Summary资料行
|
|
if (_SummaryView.FocusedRowHandle < 0) //删除了最後一条记录. 显示Summary页面.
|
{
|
ShowSummaryPage(true);
|
}
|
else
|
{
|
keyValue =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[
|
sys_DocNoRule.RowID].ToStringEx();
|
_BLLInstance.CreateDataBinder(
|
txt_DataSet.EditValue.ToStringEx(), keyValue);
|
DoBindingSummaryEditor(_BLL
|
.DataBinder); //显示主表记录详细资料
|
}
|
|
//最后处理自定义方法
|
DoAfterDelete(keyValue);
|
}
|
|
private void DoPreviewCode()
|
{
|
if (txtRuleFormat.Text == "")
|
{
|
lblPreview.Text = "请定义规则.";
|
}
|
else
|
{
|
// txtRuleFormat="<年年>", "<年年年年>", "<月月>", "<日日>" });
|
var preview = txtRuleFormat.Text;
|
var length = ConvertEx.ToInt(txtNoLength.Text);
|
if (length == 0) length = 5;
|
|
var docCode = "";
|
if (txtFlagIncludeDocCode.Checked)
|
docCode = txtDocCode.EditValue.ToStringEx();
|
|
preview = docCode + preview;
|
preview = preview.Replace("<无>", "");
|
preview = preview.Replace("<年年年年>", "2017");
|
preview = preview.Replace("<年年>", "17");
|
preview = preview.Replace("<月月>", "06");
|
preview = preview.Replace("<日日>", "18");
|
preview = preview + (txtFlagSpilitNo.Checked ? "-" : "") +
|
"8".PadLeft(length, '0');
|
lblPreview.Text = "生成编号:" + preview;
|
|
_txtPrefix.Text = txtDocCode.EditValue.ToStringEx();
|
}
|
}
|
|
public override void DoSave(IButtonInfo sender)
|
{
|
UpdateLastControl(); //更新最后一个输入控件的数据
|
|
if (!ValidatingData()) return; //检查输入完整性
|
|
var ret =
|
_BLLInstance.UpdateToDB(txt_DataSet.EditValue
|
.ToStringEx()); //调用业务逻辑层的Update方法提交数据
|
|
if (ret)
|
{
|
DoAfterSave(_BLL.DataBinder);
|
|
//只有修改状态生成日志
|
//if (_UpdateType == UpdateType.Modify) _BLL.WriteLog(original, _BLL.DataBinder); //保存修改日志
|
|
var key =
|
ConvertEx.ToString(
|
_BLL.DataBinder.Rows[0][_BLL.KeyFieldName]);
|
var dt =
|
_BLLInstance.GetDataByKey(
|
txt_DataSet.EditValue.ToStringEx(), key); //保存后查询数据
|
|
if (dt.Rows.Count > 0)
|
{
|
UpdateSummaryRow(
|
dt.Rows[
|
0]); //刷新表格内的数据.
|
DoSave_ResetState();
|
}
|
else
|
{
|
Msg.Warning(
|
"当前记录已被其它用户删除,刷新数据失败!\r\n程序:frmBaseDataDictionary.DoSave()");
|
}
|
}
|
else
|
{
|
Msg.Warning("保存失败!");
|
}
|
|
if (IsViewMode) DoShowConfigItem();
|
}
|
|
private void DoShowConfigItem()
|
{
|
if (txtRuleFormat.Text != "")
|
{
|
var tmp = txtRuleFormat.Text.Replace("><", ">|<");
|
var items = tmp.Split(new[] { '|' },
|
StringSplitOptions.RemoveEmptyEntries);
|
txxtItem1.Text = items.Length > 0 ? items[0] : "";
|
txxtItem2.Text = items.Length > 1 ? items[1] : "";
|
txxtItem3.Text = items.Length > 2 ? items[2] : "";
|
txxtItem4.Text = items.Length > 3 ? items[3] : "";
|
}
|
}
|
|
public override void DoViewContent(IButtonInfo sender)
|
{
|
AssertFocusedRow(); //检查有无记录.
|
|
var keyValue =
|
_SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[
|
sys_DocNoRule.RowID].ToStringEx();
|
_BLLInstance.CreateDataBinder(txt_DataSet.EditValue.ToStringEx(),
|
keyValue);
|
|
ButtonStateChanged(_UpdateType);
|
|
DoBindingSummaryEditor(_BLL.DataBinder); //绑定数据输入控件
|
ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
|
|
DoPreviewCode();
|
DoShowConfigItem();
|
}
|
|
private void frm_DocNoRule_Load(object sender, EventArgs e)
|
{
|
InitializeForm();
|
SetGridsPermission();
|
}
|
|
protected override void InitializeForm()
|
{
|
_SummaryView = new DevGridView(gvSummary);
|
_DetailGroupControl = pcDetailEditor;
|
_BLL = new bllDocNoRule();
|
_BLLInstance = _BLL as bllDocNoRule;
|
|
//当前账套
|
txt_DataSet.EditValue = Loginer.CurrentUser.DBID;
|
|
DataBinderTools.BoundUser(repM_User);
|
DataBinderTools.BoundUser(txtCreatedBy);
|
DataBinderTools.BoundCheckEdit(repM_Check);
|
DataBinderTools.BoundCheckEdit(txtFlagSpilitNo);
|
DataBinderTools.BoundCheckEdit(txtFlagIncludeDocCode);
|
DataBinderTools.BoundCheckEdit(repM_Check);
|
DataBinderTools.BoundBusinessTables(repM_Doc, false);
|
DataBinderTools.BoundBusinessTables(txtDocCode, false);
|
DataBinderTools.BoundDBDataSet(txt_DataSet, tb_DataSet.DataSetID);
|
|
LoadConfigItem(txxtItem1);
|
LoadConfigItem(txxtItem2);
|
LoadConfigItem(txxtItem3);
|
LoadConfigItem(txxtItem4);
|
|
base.InitializeForm();
|
}
|
|
private void LoadConfigItem(ComboBoxEdit combo)
|
{
|
combo.Properties.Items.Clear();
|
combo.Properties.Items.AddRange(new[]
|
{ "<无>", "<年年年年>", "<年年>", "<月月>", "<日日>" });
|
}
|
|
private void OnConfigItemChanged()
|
{
|
var text = txxtItem1.Text + txxtItem2.Text + txxtItem3.Text +
|
txxtItem4.Text;
|
SetEditorBindingValue(txtRuleFormat, text, true);
|
|
DoPreviewCode();
|
}
|
|
protected override void ShowSummary()
|
{
|
_BLLInstance.GetSummaryData(txt_DataSet.EditValue.ToStringEx(),
|
true); //调用业务逻辑类的GetSummaryData()方法获取数据
|
DoBindingSummaryGrid(_BLL.SummaryTable); //绑定主表的Grid
|
ShowSummaryPage(true); //显示Summary页面.
|
}
|
|
private void txt_DataSet_EditValueChanged(object sender, EventArgs e)
|
{
|
ShowSummary();
|
}
|
|
private void txtDocCode_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode)
|
{
|
SetEditorBindingValue(sender as TextEdit,
|
(sender as TextEdit).EditValue, false);
|
DoPreviewCode();
|
}
|
}
|
|
private void txtFlagIncludeDocCode_CheckedChanged(object sender,
|
EventArgs e)
|
{
|
if (IsAddOrEditMode)
|
{
|
SetEditorBindingValue(sender as CheckEdit,
|
(sender as CheckEdit).EditValue, false);
|
DoPreviewCode();
|
}
|
}
|
|
private void txtFlagSpilitNo_CheckedChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode)
|
{
|
SetEditorBindingValue(sender as CheckEdit,
|
(sender as CheckEdit).EditValue, false);
|
DoPreviewCode();
|
}
|
}
|
|
private void txtNoLength_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode)
|
{
|
SetEditorBindingValue(sender as TextEdit,
|
(sender as TextEdit).EditValue, false);
|
DoPreviewCode();
|
}
|
}
|
|
private void txtNoLength_Validating(object sender, CancelEventArgs e)
|
{
|
if (txxtItem4.Text != "") //有-日日
|
{
|
if (IsAddMode && ConvertEx.ToInt(txtNoLength.Text) < 3)
|
{
|
SetEditorBindingValue(txtNoLength, 3, true);
|
e.Cancel = true;
|
Msg.Warning("序号长度最少3位,最大5位!");
|
}
|
}
|
else
|
{
|
if (IsAddMode && ConvertEx.ToInt(txtNoLength.Text) < 5)
|
{
|
SetEditorBindingValue(txtNoLength, 5, true);
|
e.Cancel = true;
|
Msg.Warning("序号长度最少5位,最大9位!");
|
}
|
}
|
}
|
|
private void txxtItem1_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode) OnConfigItemChanged();
|
}
|
|
private void txxtItem2_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode) OnConfigItemChanged();
|
}
|
|
private void txxtItem3_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode) OnConfigItemChanged();
|
}
|
|
private void txxtItem4_EditValueChanged(object sender, EventArgs e)
|
{
|
if (IsAddOrEditMode) OnConfigItemChanged();
|
}
|
|
//检查主表数据完整性
|
protected override bool ValidatingData()
|
{
|
if (ConvertEx.ToString(txtDocCode.EditValue).Trim() == string.Empty)
|
{
|
Msg.Warning("单据编号不能为空!");
|
txtDocCode.Focus();
|
return false;
|
}
|
|
if (ConvertEx.ToString(txtRuleFormat.EditValue).Trim() ==
|
string.Empty)
|
{
|
Msg.Warning("编码规则不能为空!");
|
txtRuleFormat.Focus();
|
return false;
|
}
|
|
if (txtResetZero.Text == "归零")
|
if (txtRuleFormat.Text.IndexOf("年") < 0)
|
{
|
Msg.Warning("当前规则不支持序号归零!务必定义年份条件!");
|
return false;
|
}
|
|
string[] items =
|
{
|
txxtItem1.Text, txxtItem2.Text, txxtItem3.Text, txxtItem4.Text
|
};
|
var qrYY = from n in items where n.Contains("年年") select n;
|
var qrMM = from n in items where n.Contains("月月") select n;
|
var qrDD = from n in items where n.Contains("日日") select n;
|
|
if (qrYY.ToArray().Length > 1 || qrMM.ToArray().Length > 1 ||
|
qrDD.ToArray().Length > 1)
|
{
|
Msg.Warning("规则子项目重复定义!");
|
return false;
|
}
|
|
//月,日
|
if ((qrMM.ToArray().Length > 0 || qrDD.ToArray().Length > 0) &&
|
txtResetZero.Text != "归零")
|
{
|
Msg.Warning("配置项目包含<月><日>的,必须归零!");
|
txtResetZero.Focus();
|
return false;
|
}
|
|
if (IsAddMode)
|
if (_BLLInstance.CheckNoExistsEx(
|
txt_DataSet.EditValue.ToStringEx(),
|
txtDocCode.EditValue.ToStringEx()))
|
{
|
var msg = "编码规则不能重复添加!";
|
Msg.Warning(msg);
|
return false;
|
}
|
|
return true;
|
}
|
}
|
}
|