You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

996 lines
48 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ManagementSystem.Utility;
using ManagementSystem;
namespace ManagementSystem
{
public partial class AccountingEntries : Form
{
//程式內共用物件
public string strFrmStatus = ""; //表單狀態
public string strPKey = ""; //程式內的Key值
public string strOwnerForm = ""; //呼叫的Form Name
public string strKey = ""; //程式內加密的Key值
public string strActiveUserID = ""; //取得登入作用的使用者帳號
public string strAccountingBookID = ""; //取得作用中的帳本
public string strAccountingYear = ""; //取得分錄年份
SqlConnection sqlConn = UtilityClass.GetConn(MainForm.strAccountingBookID);
SqlTransaction sqlTran;
SqlDataAdapter sqlAdapter = new SqlDataAdapter();
SqlCommand sqlCmd = new SqlCommand();
DataSet sdInsurance = new System.Data.DataSet();
public DataGridViewCellEventArgs dgeArgs;
public AccountingEntries()
{
InitializeComponent();
}
#region 自定義程式
private void ReSum() //重新統計借貸方的總額
{
string strAddedDebit = "0";
string strAddedCredit = "0";
string strdDebit = "0";
string strCredit = "0";
foreach (DataGridViewRow drAccountingItem in dgvDataMaintain.Rows)
{
if (drAccountingItem.Cells["cDebit"].Value != null)
{
strdDebit = string.IsNullOrEmpty(drAccountingItem.Cells["cDebit"].Value.ToString()) ? "0" : drAccountingItem.Cells["cDebit"].Value.ToString().Replace(",","");
strAddedDebit = (Convert.ToInt32(strAddedDebit) + Convert.ToInt32(strdDebit)).ToString();
}
if (drAccountingItem.Cells["cCredit"].Value != null)
{
strCredit = string.IsNullOrEmpty(drAccountingItem.Cells["cCredit"].Value.ToString()) ? "0" : drAccountingItem.Cells["cCredit"].Value.ToString().Replace(",", "");
strAddedCredit = (Convert.ToInt32(strAddedCredit) + Convert.ToInt32(strCredit)).ToString();
}
}
lbDebit.Text = UtilityClass.MarkNumber(strAddedDebit);
lbCredit.Text = UtilityClass.MarkNumber(strAddedCredit);
}
private void StatusChange(string strStatus) //變更主畫面狀態
{
strActiveUserID = MainForm.strActiveUserID;
strAccountingBookID = MainForm.strAccountingBookID;
strKey = MainForm.strKey;
switch (strStatus.ToUpper())
{
case "NONE":
//本功能無None狀態
strFrmStatus = "";
break;
case "SEARCH":
//本程式並無查詢功能
Application.DoEvents();
break;
case "ADD":
UnLockForm();
txtAccountingID.Text = "";
dpAccountingDate.Value = DateTime.Now;
dpAccountingDate.Focus();
strFrmStatus = "ADD";
break;
case "MODIFY":
UnLockForm();
txtAccountingID.Text = strPKey;
//先取得該分錄的基本資料
GetAccountingListByID(strPKey);
dpAccountingDate.Focus();
strFrmStatus = "MODIFY";
break;
case "CLOSE":
UnLockForm();
strFrmStatus = "CLOSE";
break;
case "DEL":
btnSave.Text = "確認刪除";
txtAccountingID.Text = strPKey;
//應先取得該分錄的基本資料
GetAccountingListByID(strPKey);
dpAccountingDate.Enabled = false;
dgvDataMaintain.AllowUserToAddRows = false;
dgvDataMaintain.ReadOnly = true;
btnCancle.Enabled = false;
btnClose.Focus();
strFrmStatus = "DEL";
break;
}
}
private bool CheckForm() //確認分錄是否正確
{
string strCheckResult = "";
string strDebit = "";
string strCredit = "";
double dbDebit = 0; //借方總額
double dbCredit = 0; //借方總額
//確認借貸是否平衡
foreach (DataGridViewRow dgRow in dgvDataMaintain.Rows)
{
strDebit = (string)dgRow.Cells["cDebit"].Value;
strCredit = (string)dgRow.Cells["cCredit"].Value;
if(!string.IsNullOrEmpty(strDebit))
{
dbDebit += Convert.ToDouble(strDebit.Replace(",",""));
}
if (!string.IsNullOrEmpty(strCredit))
{
dbCredit += Convert.ToDouble(strCredit.Replace(",", ""));
}
}
if (dbDebit != dbCredit)
{
strCheckResult = "借貸不平衡";
}
//確認是否有開帳
string strChackDate = dpAccountingDate.Text == "" ? DateTime.Now.ToString() : dpAccountingDate.Text;
string strCheckSQL = "Select * From OTB_FNC_AccountingBookStatus Where IsOpen = 'Y' And AccountingYear = Year(Convert(DateTime,'" + Convert.ToDateTime(strChackDate).ToString("yyyy/MM/dd HH:mm:ss") + "'))";
if (!UtilityClass.IsExist(strCheckSQL))
{
strCheckResult = "該會計年度尚未開帳! 請先至開帳功能進行開帳動作";
}
if (strCheckResult != "")
{
MessageBox.Show(strCheckResult);
return false;
}
return true;
}
private void CleanForm() //清除畫面
{
//設定畫面物件狀態
//清除GridView
StatusChange(strFrmStatus);
}
private void UnLockForm() //解除限制唯讀物件
{
dpAccountingDate.Enabled = true;
}
private void LockForm() //限制唯讀物件
{
dpAccountingDate.Enabled = false;
}
private void GetAccountingListByID(string strAccountingSubID)
{
try
{
string strDebit = "";
string strCredit = "";
DataTable dtTemp = new DataTable();
if (strAccountingSubID.Trim() != "")
{
//宣告物件
string strSQL = string.Format("Select AccountingSubID, AccountingSubName, AccountingDate, Memo, Debit, Credit, ProjectNumber, ProjectCName From OTB_FNC_AccountingJournal Where AccountingID = '{0}' And AccountingBookID ='{1}' Order by AccountingOrder", strAccountingSubID, strAccountingBookID);
using (SqlDataAdapter sqlAdapter = new SqlDataAdapter())
{
//添加參數
sqlAdapter.SelectCommand = new SqlCommand();
sqlAdapter.SelectCommand.Connection = sqlConn;
sqlAdapter.SelectCommand.CommandText = strSQL;
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
//進行查詢
dtTemp = UtilityClass.GetSQLResult(strSQL).Tables["Result"];
if (dtTemp.Rows.Count > 0)
{
//strAccountingDate = Convert.ToDateTime(dtTemp.Rows[0]["AccountingDate"].ToString()).ToString("yyyy/MM/dd HH:mm:ss");
dpAccountingDate.Text = Convert.ToDateTime(dtTemp.Rows[0]["AccountingDate"].ToString()).ToString("yyyy/MM/dd HH:mm:ss");
foreach (DataRow drAccounting in dtTemp.Rows)
{
DataGridViewRow dgvRow = new DataGridViewRow();
dgvRow.CreateCells(dgvDataMaintain);
dgvRow.Cells[1].Value = drAccounting["AccountingSubID"].ToString(); //科目代號
dgvRow.Cells[2].Value = drAccounting["AccountingSubName"].ToString(); //科目名稱
dgvRow.Cells[3].Value = drAccounting["Memo"].ToString(); //摘要
strDebit = UtilityClass.DecryptDES(drAccounting["Debit"].ToString(), strKey);
strCredit = UtilityClass.DecryptDES(drAccounting["Credit"].ToString(), strKey);
dgvRow.Cells[4].Value = UtilityClass.MarkNumber(strDebit); //借方金額
dgvRow.Cells[5].Value = UtilityClass.MarkNumber(strCredit); //貸方金額
dgvRow.Cells[7].Value = drAccounting["ProjectCName"].ToString(); //專案名稱
dgvRow.Cells[8].Value = drAccounting["ProjectNumber"].ToString(); //專案代碼
dgvDataMaintain.Rows.Add(dgvRow);
}
}
}
}
}
catch (Exception ex)
{
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
}
}
public void ReturnAccountList(string strAccountList)
{
string[] strAccList = strAccountList.Split('|');
dgvDataMaintain.Rows[Convert.ToInt32(strAccList[0])].Cells["cAccountingSubID"].Value = strAccList[1].ToString();
dgvDataMaintain.Rows[Convert.ToInt32(strAccList[0])].Cells["cAccountingSubName"].Value = strAccList[2].ToString();
}
public string GetNewAccountID()
{
//宣告物件
string strNewAccountID = "";
int intMaxID = 0;
//確認當日是否有取過傳票編號
StringBuilder sbCheckNewAccountID = new StringBuilder();
StringBuilder sbUpdateNewAccountID = new StringBuilder();
sbCheckNewAccountID.Append("Select * From OTB_FNC_AccountingMaxNumber Where AccountingBookID = '"+ strAccountingBookID + "' ");
sbCheckNewAccountID.Append("And CountYear = '" + DateTime.Now.Year.ToString() + "' ");
sbCheckNewAccountID.Append("And CountMonth = '" + DateTime.Now.Month.ToString() + "' ");
sbCheckNewAccountID.Append("And CountDay = '" + DateTime.Now.Day.ToString() + "' ");
DataSet dsTemp = UtilityClass.GetSQLResult(sbCheckNewAccountID.ToString());
if (dsTemp.Tables["Result"].Rows.Count > 0)
{
//當日已經有取得傳票編號
intMaxID = Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountMax"].ToString()) + 1;
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountYear"]).ToString("0000"); //年碼
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountMonth"]).ToString("00"); //月碼
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountDay"]).ToString("00"); //日碼
strNewAccountID += intMaxID.ToString("000"); //流水碼
//更新傳票編號
sbUpdateNewAccountID.Append("Update OTB_FNC_AccountingMaxNumber Set CountMax = CountMax + 1 ");
sbUpdateNewAccountID.Append(", ModifyUser = '" + strActiveUserID + "', ModifyDate = Getdate() ");
sbUpdateNewAccountID.Append("Where AccountingBookID = '" + strAccountingBookID + "' ");
sbUpdateNewAccountID.Append("And CountYear = '" + dsTemp.Tables["Result"].Rows[0]["CountYear"].ToString() + "'");
sbUpdateNewAccountID.Append("And CountMonth = '" + dsTemp.Tables["Result"].Rows[0]["CountMonth"].ToString() + "'");
sbUpdateNewAccountID.Append("And CountDay = '" + dsTemp.Tables["Result"].Rows[0]["CountDay"].ToString() + "'");
UtilityClass.RunSQLNonReturn(sbUpdateNewAccountID.ToString());
}
else
{
//當日未取過傳票編號
intMaxID = 1;
strNewAccountID += DateTime.Now.Year.ToString("0000"); //年碼
strNewAccountID += DateTime.Now.Month.ToString("00"); //月碼
strNewAccountID += DateTime.Now.Day.ToString("00"); //日碼
strNewAccountID += intMaxID.ToString("000"); //流水碼
//新增傳票編號
sbUpdateNewAccountID.Append("Insert into OTB_FNC_AccountingMaxNumber(AccountingBookID, CountYear, CountMonth, CountDay, CountMax, Memo,CreateUser, CreateDate, ModifyUser, ModifyDate) ");
sbUpdateNewAccountID.Append("Values ('" + strAccountingBookID + "',Year(getdate()),Month(getdate()),day(getdate()),1,null,'" + strActiveUserID + "',Getdate(),'" + strActiveUserID + "',Getdate())");
UtilityClass.RunSQLNonReturn(sbUpdateNewAccountID.ToString());
}
return strNewAccountID;
}
public string GetNewAccountID(string strYear)
{
//宣告物件
string strNewAccountID = "";
int intMaxID = 0;
//確認當日是否有取過傳票編號
StringBuilder sbCheckNewAccountID = new StringBuilder();
StringBuilder sbUpdateNewAccountID = new StringBuilder();
sbCheckNewAccountID.Append("Select TOP 1 * From OTB_FNC_AccountingMaxNumber Where AccountingBookID = '" + strAccountingBookID + "' ");
sbCheckNewAccountID.Append("And CountYear = '" + strYear + "' ");
sbCheckNewAccountID.Append("Order By CountMonth DESC,CountDay DESC");
DataSet dsTemp = UtilityClass.GetSQLResult(sbCheckNewAccountID.ToString());
if (dsTemp.Tables["Result"].Rows.Count > 0)
{
//當日已經有取得傳票編號
intMaxID = Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountMax"].ToString()) + 1;
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountYear"]).ToString("0000"); //年碼
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountMonth"]).ToString("00"); //月碼
strNewAccountID += Convert.ToInt32(dsTemp.Tables["Result"].Rows[0]["CountDay"]).ToString("00"); //日碼
strNewAccountID += intMaxID.ToString("000"); //流水碼
//更新傳票編號
sbUpdateNewAccountID.Append("Update OTB_FNC_AccountingMaxNumber Set CountMax = CountMax + 1 ");
sbUpdateNewAccountID.Append(", ModifyUser = '" + strActiveUserID + "', ModifyDate = Getdate() ");
sbUpdateNewAccountID.Append("Where AccountingBookID = '" + strAccountingBookID + "' ");
sbUpdateNewAccountID.Append("And CountYear = '" + dsTemp.Tables["Result"].Rows[0]["CountYear"].ToString() + "'");
sbUpdateNewAccountID.Append("And CountMonth = '" + dsTemp.Tables["Result"].Rows[0]["CountMonth"].ToString() + "'");
sbUpdateNewAccountID.Append("And CountDay = '" + dsTemp.Tables["Result"].Rows[0]["CountDay"].ToString() + "'");
UtilityClass.RunSQLNonReturn(sbUpdateNewAccountID.ToString());
}
else
{
//當日未取過傳票編號
intMaxID = 1;
strNewAccountID += DateTime.Now.Year.ToString("0000"); //年碼
strNewAccountID += DateTime.Now.Month.ToString("00"); //月碼
strNewAccountID += DateTime.Now.Day.ToString("00"); //日碼
strNewAccountID += intMaxID.ToString("000"); //流水碼
//新增傳票編號
sbUpdateNewAccountID.Append("Insert into OTB_FNC_AccountingMaxNumber(AccountingBookID, CountYear, CountMonth, CountDay, CountMax, Memo,CreateUser, CreateDate, ModifyUser, ModifyDate) ");
sbUpdateNewAccountID.Append("Values ('" + strAccountingBookID + "',Year(getdate()),Month(getdate()),day(getdate()),1,null,'" + strActiveUserID + "',Getdate(),'" + strActiveUserID + "',Getdate())");
UtilityClass.RunSQLNonReturn(sbUpdateNewAccountID.ToString());
}
return strNewAccountID;
}
private void AddEvent(bool isNew) //新增事件
{
try
{
//宣告物件
string strNewAccountingID = "";
if(isNew) //判斷是否為
{
strNewAccountingID = GetNewAccountID();
}
else
{
strNewAccountingID = strPKey;
}
int intDataCount = dgvDataMaintain.Rows.Count - 1;
StringBuilder strSQL = new StringBuilder();
int intOrder = 0; //分錄排序欄位
string strAccountingSubID = ""; //科目代號
string strAccountingSubName = ""; //科目名稱
string strMemo = ""; //備註
string strDebit = ""; //借方金額
string strCredit = ""; //貸方金額
string strProjectNumber = ""; //專案代碼
string strProjectCName = ""; //專案名稱
string strClosedAccounting = ""; //是否為關帳分錄
foreach(DataGridViewRow dgRow in dgvDataMaintain.Rows)
{
//設定初始值
intOrder++;
strAccountingSubID = ((string)dgRow.Cells["cAccountingSubID"].Value); //科目代號
strAccountingSubName = ((string)dgRow.Cells["cAccountingSubName"].Value); //科目名稱
strMemo = ((string)dgRow.Cells["cMemo"].Value); //備註
strDebit = (string)dgRow.Cells["cDebit"].Value; //借方金額
strCredit = (string)dgRow.Cells["cCredit"].Value; //貸方金額
strProjectNumber = (string)dgRow.Cells["cProjectID"].Value; //專案代碼
strProjectCName = (string)dgRow.Cells["cProjectName"].Value; //專案代碼
strClosedAccounting = (string)dgRow.Cells["cClosedAccounting"].Value; //關帳分錄
if (!string.IsNullOrEmpty(strAccountingSubID))
{
string strChackDate = dpAccountingDate.Text == "" ? DateTime.Now.ToString() : dpAccountingDate.Text;
if (string.IsNullOrEmpty(strDebit)) { strDebit = "";} //處理借方金額為null值
if (string.IsNullOrEmpty(strCredit)) { strCredit = ""; } //處理貸方金額為null值
strSQL.Clear();
strSQL.Append("Insert Into OTB_FNC_AccountingJournal(AccountingBookID, AccountingID, AccountingDate, AccountingOrder, AccountingSubID, AccountingSubName, ProjectNumber, ProjectCName, Memo, Debit, Credit, ClosedAccounting, CreateDate, CreateUser, ModifyDate, ModifyUser)");
strSQL.Append(" Values ('" + strAccountingBookID + "','" + strNewAccountingID + "'," );
strSQL.Append("Convert(DateTime,'" + Convert.ToDateTime(strChackDate).ToString("yyyy/MM/dd HH:mm:ss") + "'),");
strSQL.Append(intOrder.ToString() + ",");
strSQL.Append("'" + strAccountingSubID + "',");
strSQL.Append("'" + strAccountingSubName + "',");
strSQL.Append("'" + strProjectNumber + "',");
strSQL.Append("'" + strProjectCName + "',");
strSQL.Append("'" + strMemo + "',");
strSQL.Append("'" + (strDebit == "" ? "" : UtilityClass.EncryptDES(strDebit.Replace(",",""), strKey)) + "',");
strSQL.Append("'" + (strCredit == "" ? "" : UtilityClass.EncryptDES(strCredit.Replace(",", ""), strKey)) + "',");
strSQL.Append("'" + (strClosedAccounting == "" ? "" : strClosedAccounting + "',"));
strSQL.Append("Convert(DateTime,'" + Convert.ToDateTime(strChackDate).ToString("yyyy/MM/dd HH:mm:ss") + "'),'" + strActiveUserID + "',Getdate(),'" + strActiveUserID + "') ");
//添加參數
sqlAdapter.InsertCommand = new SqlCommand();
sqlAdapter.InsertCommand.Connection = sqlConn;
sqlAdapter.InsertCommand.CommandText = strSQL.ToString();
sqlAdapter.InsertCommand.Transaction = sqlTran;
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
sqlAdapter.InsertCommand.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
private void AddEvent(string strYear) //新增某一個年度的分錄
{
try
{
//宣告物件
string strNewAccountingID = "";
if (strYear == "") //判斷是否為
{
strNewAccountingID = GetNewAccountID();
}
else
{
strNewAccountingID = GetNewAccountID(strYear);
}
int intDataCount = dgvDataMaintain.Rows.Count - 1;
StringBuilder strSQL = new StringBuilder();
int intOrder = 0; //分錄排序欄位
string strAccountingSubID = ""; //科目代號
string strAccountingSubName = ""; //科目名稱
string strMemo = ""; //備註
string strDebit = ""; //借方金額
string strCredit = ""; //貸方金額
string strProjectNumber = ""; //專案代碼
string strProjectCName = ""; //專案名稱
string strClosedAccounting = ""; //是否為關帳分錄
foreach (DataGridViewRow dgRow in dgvDataMaintain.Rows)
{
//設定初始值
intOrder++;
strAccountingSubID = ((string)dgRow.Cells["cAccountingSubID"].Value); //科目代號
strAccountingSubName = ((string)dgRow.Cells["cAccountingSubName"].Value); //科目名稱
strMemo = ((string)dgRow.Cells["cMemo"].Value); //備註
strDebit = (string)dgRow.Cells["cDebit"].Value; //借方金額
strCredit = (string)dgRow.Cells["cCredit"].Value; //貸方金額
strProjectNumber = (string)dgRow.Cells["cProjectID"].Value; //專案代碼
strProjectCName = (string)dgRow.Cells["cProjectName"].Value; //專案代碼
strClosedAccounting = (string)dgRow.Cells["cClosedAccounting"].Value; //關帳分錄
if (!string.IsNullOrEmpty(strAccountingSubID))
{
string strChackDate = dpAccountingDate.Text == "" ? DateTime.Now.ToString() : dpAccountingDate.Text;
if (string.IsNullOrEmpty(strDebit)) { strDebit = ""; } //處理借方金額為null值
if (string.IsNullOrEmpty(strCredit)) { strCredit = ""; } //處理貸方金額為null值
strSQL.Clear();
strSQL.Append("Insert Into OTB_FNC_AccountingJournal(AccountingBookID, AccountingID, AccountingDate, AccountingOrder, AccountingSubID, AccountingSubName, ProjectNumber, ProjectCName, Memo, Debit, Credit, ClosedAccounting, CreateDate, CreateUser, ModifyDate, ModifyUser)");
strSQL.Append(" Values ('" + strAccountingBookID + "','" + strNewAccountingID + "',");
strSQL.Append("Convert(DateTime,'" + Convert.ToDateTime(strNewAccountingID.Substring(0, 4) + "/" + strNewAccountingID.Substring(4, 2) + "/" + strNewAccountingID.Substring(6, 2) + " 23:59:59").ToString("yyyy/MM/dd HH:mm:ss") + "'),");
strSQL.Append(intOrder.ToString() + ",");
strSQL.Append("'" + strAccountingSubID + "',");
strSQL.Append("'" + strAccountingSubName + "',");
strSQL.Append("'" + strProjectNumber + "',");
strSQL.Append("'" + strProjectCName + "',");
strSQL.Append("'" + strMemo + "',");
strSQL.Append("'" + (strDebit == "" ? "" : UtilityClass.EncryptDES(strDebit.Replace(",", ""), strKey)) + "',");
strSQL.Append("'" + (strCredit == "" ? "" : UtilityClass.EncryptDES(strCredit.Replace(",", ""), strKey)) + "',");
strSQL.Append("'" + (strClosedAccounting == "" ? "" : strClosedAccounting + "',"));
strSQL.Append("Convert(DateTime,'" + Convert.ToDateTime(strChackDate).ToString("yyyy/MM/dd HH:mm:ss") + "'),'" + strActiveUserID + "',Getdate(),'" + strActiveUserID + "') ");
//添加參數
sqlAdapter.InsertCommand = new SqlCommand();
sqlAdapter.InsertCommand.Connection = sqlConn;
sqlAdapter.InsertCommand.CommandText = strSQL.ToString();
sqlAdapter.InsertCommand.Transaction = sqlTran;
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
sqlAdapter.InsertCommand.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
private void DelEvent() //刪除事件
{
try
{
//宣告物件
string strSQL = string.Format("Delete OTB_FNC_AccountingJournal Where AccountingID = '{0}' And AccountingBookID = '{1}'", strPKey,strAccountingBookID);
//添加參數
sqlAdapter.DeleteCommand = new SqlCommand();
sqlAdapter.DeleteCommand.Connection = sqlConn;
sqlAdapter.DeleteCommand.CommandText = strSQL.ToString();
sqlAdapter.DeleteCommand.Transaction = sqlTran;
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
sqlAdapter.DeleteCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
public void SaveEvent() //儲存事件
{
//進行資料整理
switch (strFrmStatus)
{
case "ADD":
//新增事件
try
{
if (CheckForm()) //資料確認
{
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
if(sqlTran == null)
{
sqlTran = sqlConn.BeginTransaction(); //開始交易
}
AddEvent(true); //進行資料的新增(取新傳票編號)
StatusChange("NONE");
switch (strOwnerForm)
{
case "AccountingJournalMaintain":
sqlTran.Commit();
((AccountingJournalMaintain)this.Owner).StatusChange("NONE"); //還原母Form的狀態
((AccountingJournalMaintain)this.Owner).GoEvent(); //進行母Form查詢功能
break;
case "AccountingJournalMaintain_Reversal":
sqlTran.Commit();
((AccountingJournalMaintain)this.Owner).StatusChange("NONE"); //還原母Form的狀態
((AccountingJournalMaintain)this.Owner).GoEvent(); //進行母Form查詢功能
break;
case "PayPlanManagement_Receive":
((PayPlanManagement)this.Owner).blIsAdded = true;
((PayPlanManagement)this.Owner).CreateAR(dgeArgs); //增加應收帳款記錄
((PayPlanManagement)this.Owner).GoEvent(); //進行母Form儲存功能
sqlTran.Commit();
break;
case "PayPlanManagement_Pay":
((PayPlanManagement)this.Owner).blIsAdded = true;
((PayPlanManagement)this.Owner).CreateAP(dgeArgs); //增加應付帳款記錄
((PayPlanManagement)this.Owner).GoEvent(); //進行母Form儲存功能
sqlTran.Commit();
break;
case "AccountsReceivable":
((AccountsReceivable)this.Owner).blIsAdded = true;
((AccountsReceivable)this.Owner).UpdateAR(dgeArgs); //更新母Form的收款狀況
((AccountsReceivable)this.Owner).StatusChange("SEARCH");
((AccountsReceivable)this.Owner).GoEvent(); //進行母Form儲存功能
sqlTran.Commit();
break;
case "AccountsPay":
((AccountsPayable)this.Owner).blIsAdded = true;
((AccountsPayable)this.Owner).UpdateAP(dgeArgs); //更新母Form的付款狀況
((AccountsPayable)this.Owner).StatusChange("SEARCH");
((AccountsPayable)this.Owner).GoEvent(); //進行母Form儲存功能
sqlTran.Commit();
break;
case "AccountingOpeningEntry":
sqlTran.Commit();
break;
}
this.Close();
}
}
catch (Exception ex)
{
sqlTran.Rollback();
MessageBox.Show("資料新增失敗", "提示");
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
}
break;
case "CLOSE":
//關帳事件
try
{
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
if (sqlTran == null)
{
sqlTran = sqlConn.BeginTransaction(); //開始交易
}
AddEvent(strAccountingYear); //進行資料的新增(取新傳票編號)
//AddEvent(true);
StatusChange("NONE");
switch (strOwnerForm)
{
case "AccountingOpeningEntry":
sqlTran.Commit();
break;
}
this.Close();
}
catch (Exception ex)
{
sqlTran.Rollback();
MessageBox.Show("關帳失敗", "提示");
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
}
break;
case "MODIFY":
//修改事件
try
{
if (CheckForm()) //資料確認
{
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
sqlTran = sqlConn.BeginTransaction(); //開始交易
DelEvent(); //先將資料進行刪除
AddEvent(false); //將資料重新新增(但不取新傳票編號)
sqlTran.Commit();
MessageBox.Show("資料修改成功", "提示");
StatusChange("NONE");
((AccountingJournalMaintain)this.Owner).StatusChange("NONE"); //還原母Form的狀態
((AccountingJournalMaintain)this.Owner).GoEvent(); //進行母Form查詢功能
this.Close();
}
}
catch (Exception ex)
{
sqlTran.Rollback();
MessageBox.Show("資料修改失敗", "提示");
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
}
break;
case "DEL":
//刪除事件
try
{
if (MessageBox.Show("請問您是否確認刪除本分錄資料", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
{
sqlConn.Open();
}
sqlTran = sqlConn.BeginTransaction(); //開始交易
DelEvent(); //將資料進行刪除
sqlTran.Commit();
MessageBox.Show("資料刪除成功", "提示");
StatusChange("NONE");
((AccountingJournalMaintain)this.Owner).StatusChange("NONE"); //還原母Form的狀態
((AccountingJournalMaintain)this.Owner).GoEvent(); //進行母Form查詢功能
this.Close();
}
}
catch (Exception ex)
{
sqlTran.Rollback();
MessageBox.Show("資料刪除失敗", "提示");
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
}
break;
}
}
public void ReturnProjectInfo(string[] strProjectInfo)
{
txtProjectName.Text = strProjectInfo[1].ToString();
txtProjectNumber.Text = strProjectInfo[0].ToString();
}
public void ReturnProjectInfo(int intIndexID, string[] strProjectInfo)
{
dgvDataMaintain.Rows[intIndexID].Cells["cProjectID"].Value = strProjectInfo[0].ToString();
dgvDataMaintain.Rows[intIndexID].Cells["cProjectName"].Value = strProjectInfo[1].ToString();
}
#endregion
#region 事件觸發及問題處理
private void btnSave_Click(object sender, EventArgs e)
{
SaveEvent();
}
private void btnCancle_Click(object sender, EventArgs e)
{
CleanForm();
}
private void btnClose_Click(object sender, EventArgs e)
{
((AccountingJournalMaintain)this.Owner).StatusChange("NONE"); //還原母Form的狀態
this.Close();
}
private void AccountingEntries_Load(object sender, EventArgs e)
{
CleanForm();
switch (strOwnerForm)
{
case "AccountingJournalMaintain":
label4.Visible = false;
txtProjectName.Visible = false;
txtProjectNumber.Visible = false;
btnGetProject.Visible = false;
break;
}
}
private void dgvDataMaintain_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//物件宣告
string strAccountingSubID = "";
string strAccountingSubName = "";
string strDebit = "";
string strCredit = "";
string strProjectName = "";
//Cell[0] : 選窗Button
//Cell[1] : 科目代碼(cAccountingSubID)
//Cell[2] : 科目名稱(cAccountingSubName)
//Cell[3] : 摘要(cMemo)
//Cell[4] : 借方金額(cDebit)
//Cell[5] : 貸方金額(cCredit)
//Cell[6] : 選窗Button
//Cell[7] : 專案名稱(cProjectName)
//Cell[8] : 專案代碼(cProjectID)
//科目代碼變動
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cAccountingSubID")
{
strAccountingSubID = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubID"].Value;
if (string.IsNullOrEmpty(strAccountingSubID))
{
return;
}
else
{
string strCheckSQL = string.Format("Select * From OTB_FNC_AccountingSubjects Where AccountingSubID = '{0}' And AccountingBookID = '{1}'", strAccountingSubID, strAccountingBookID);
if (UtilityClass.IsExist(strCheckSQL))
{
strAccountingSubName = UtilityClass.GetAccountingSubjectByID(strAccountingSubID, strAccountingBookID).Rows[0]["AccountingSubName"].ToString();
dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubName"].Value = strAccountingSubName;
}
else
{
PickAccountingSubject pkItemForm = new PickAccountingSubject();
pkItemForm.txtAccountingSubID.Text = strAccountingSubID;
pkItemForm.intIndex = e.RowIndex;
pkItemForm.strOwnerForm = "AccountingEntries";
pkItemForm.Owner = this;
pkItemForm.StartPosition = FormStartPosition.CenterParent;
pkItemForm.ShowDialog();
}
}
}
//科目名稱變動
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cAccountingSubName")
{
strAccountingSubName = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubName"].Value;
if (string.IsNullOrEmpty(strAccountingSubName))
{
return;
}
else
{
string strCheckSQL = string.Format("Select * From OTB_FNC_AccountingSubjects Where AccountingSubName = '{0}' And AccountingBookID = '{1}'", strAccountingSubName, strAccountingBookID);
if (UtilityClass.IsExist(strCheckSQL))
{
strAccountingSubID = UtilityClass.GetAccountingSubjectByName(strAccountingSubName).Rows[0]["AccountingSubID"].ToString();
dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubID"].Value = strAccountingSubID;
}
else
{
PickAccountingSubject pkItemForm = new PickAccountingSubject();
pkItemForm.txtAccountingSubName.Text = strAccountingSubName;
pkItemForm.intIndex = e.RowIndex;
pkItemForm.strOwnerForm = "AccountingEntries";
pkItemForm.Owner = this;
pkItemForm.StartPosition = FormStartPosition.CenterParent;
pkItemForm.ShowDialog();
}
}
}
//數字呈現方式調整
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cDebit")
{
strDebit = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value;
if (string.IsNullOrEmpty(strDebit))
{
return;
}
else
{
strDebit = strDebit.Replace(",", "");
dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value = UtilityClass.MarkNumber(strDebit);
}
}
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cCredit")
{
strCredit = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value;
if (string.IsNullOrEmpty(strCredit))
{
return;
}
else
{
strCredit = strCredit.Replace(",", "");
dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value = UtilityClass.MarkNumber(strCredit);
}
}
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cProjectName")
{
strProjectName = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cProjectName"].Value;
if (string.IsNullOrEmpty(strProjectName))
{
dgvDataMaintain.Rows[e.RowIndex].Cells["cProjectID"].Value = "";
}
}
}
private void dgvDataMaintain_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
//物件宣告
string strErrorMsg = "";
//Cell[0] : 選窗Button
//Cell[1] : 科目代碼(cAccountingSubID)
//Cell[2] : 科目名稱(cAccountingSubName)
//Cell[3] : 摘要(cMemo)
//Cell[4] : 借方金額(cDebit)
//Cell[5] : 貸方金額(cCredit)
if (!
(
string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubID"].Value) &
string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubName"].Value) &
string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value) & string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value))
) //判斷是否所有條件均為未填
{
if (string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubID"].Value))
{
strErrorMsg = "科目代碼不得為空白";
}
if (string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cAccountingSubName"].Value))
{
strErrorMsg = "科目名稱不得為空白";
}
if (string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value) & string.IsNullOrEmpty((string)dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value))
{
strErrorMsg = "借貸方不得均為空白";
}
}
if (strErrorMsg != "")
{
dgvDataMaintain.Rows[e.RowIndex].ErrorText = strErrorMsg;
e.Cancel = true;
}
}
private void dgvDataMaintain_CellValidated(object sender, DataGridViewCellEventArgs e)
{
dgvDataMaintain.Rows[e.RowIndex].ErrorText = "";
ReSum();
}
private void dgvDataMaintain_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//當GridView中的Button被按下
var SenderGrid = (DataGridView)sender;
if (SenderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && SenderGrid.Columns[e.ColumnIndex].Name == "cAdd" && e.RowIndex >= 0)
{
PickAccountingSubject pkItemForm = new PickAccountingSubject();
pkItemForm.intIndex = e.RowIndex;
pkItemForm.strOwnerForm = "AccountingEntries";
pkItemForm.Owner = this;
pkItemForm.strAccountingBookID = strAccountingBookID;
pkItemForm.StartPosition = FormStartPosition.CenterParent;
pkItemForm.ShowDialog();
}
if (SenderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && SenderGrid.Columns[e.ColumnIndex].Name == "cAddProject" && e.RowIndex >= 0)
{
PickProject pkItemForm = new PickProject();
pkItemForm.intIndex = e.RowIndex;
pkItemForm.strOwnerForm = "AccountingEntries_Detail";
pkItemForm.Owner = this;
pkItemForm.StartPosition = FormStartPosition.CenterParent;
pkItemForm.ShowDialog();
}
}
private void dgvDataMaintain_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
//物件宣告
string strDebit = "";
string strCredit = "";
//Cell[0] : 選窗Button
//Cell[1] : 科目代碼(cAccountingSubID)
//Cell[2] : 科目名稱(cAccountingSubName)
//Cell[3] : 摘要(cMemo)
//Cell[4] : 借方金額(cDebit)
//Cell[5] : 貸方金額(cCredit)
//數字呈現方式調整
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cDebit")
{
strDebit = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value;
if (string.IsNullOrEmpty(strDebit))
{
return;
}
else
{
dgvDataMaintain.Rows[e.RowIndex].Cells["cDebit"].Value = strDebit.Replace(",", "");
}
}
if (dgvDataMaintain.Columns[e.ColumnIndex].Name.ToString() == "cCredit")
{
strCredit = (string)dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value;
if (string.IsNullOrEmpty(strCredit))
{
return;
}
else
{
dgvDataMaintain.Rows[e.RowIndex].Cells["cCredit"].Value = strCredit.Replace(",", "");
}
}
}
private void btnGetProject_Click(object sender, EventArgs e)
{
PickProject pkItemForm = new PickProject();
pkItemForm.txtProjectName.Text = txtProjectName.Text.Trim();
pkItemForm.strOwnerForm = "AccountingEntries";
pkItemForm.Owner = this;
pkItemForm.StartPosition = FormStartPosition.CenterParent;
pkItemForm.ShowDialog();
}
#endregion
}
}