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.
406 lines
16 KiB
406 lines
16 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Data.Sql;
|
|
using System.Data.SqlClient;
|
|
using ManagementSystem.Utility;
|
|
|
|
namespace ManagementSystem
|
|
{
|
|
public partial class AccountingLedger : Form
|
|
{
|
|
|
|
//程式內共用物件
|
|
public string strFrmStatus = ""; //表單狀態
|
|
public string strPKey = ""; //程式內的Key值
|
|
string strKey = ""; //程式內加密的Key值
|
|
string strActiveUserID = ""; //取得登入作用的使用者帳號
|
|
string strAccountingBookID = ""; //取得作用中的帳本
|
|
SqlConnection sqlConn = UtilityClass.GetConn(MainForm.strAccountingBookID);
|
|
SqlTransaction sqlTran;
|
|
SqlDataAdapter sqlAdapter = new SqlDataAdapter();
|
|
SqlCommand sqlCmd = new SqlCommand();
|
|
DataSet sdInsurance = new System.Data.DataSet();
|
|
|
|
|
|
public AccountingLedger()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
#region 自定義程式
|
|
private void StatusChange(string strStatus) //變更主畫面狀態
|
|
{
|
|
strActiveUserID = MainForm.strActiveUserID;
|
|
strAccountingBookID = MainForm.strAccountingBookID;
|
|
strKey = MainForm.strKey;
|
|
|
|
switch (strStatus.ToUpper())
|
|
{
|
|
case "NONE":
|
|
//本功能無None狀態
|
|
((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "";
|
|
strFrmStatus = "";
|
|
CleanToolbar();
|
|
CleanForm();
|
|
LockForm();
|
|
tsbSearch.Enabled = true;
|
|
tsbOK.Visible = false;
|
|
tsbCancel.Visible = false;
|
|
break;
|
|
case "SEARCH":
|
|
//查詢功能
|
|
((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "搜尋";
|
|
tsbSearch.Visible = false;
|
|
tsbOK.Visible = true;
|
|
tsbCancel.Visible = true;
|
|
UnLockForm();
|
|
break;
|
|
case "ADD":
|
|
//本程式無新增功能
|
|
((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "新增";
|
|
strFrmStatus = "ADD";
|
|
break;
|
|
case "MODIFY":
|
|
//本程式無修改功能
|
|
((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "修改";
|
|
strFrmStatus = "MODIFY";
|
|
break;
|
|
case "DEL":
|
|
//本程式無刪除功能
|
|
((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "刪除";
|
|
strFrmStatus = "DEL";
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
private void GoEvent() //執行動作
|
|
{
|
|
//本程式只有查詢結果
|
|
if (txtAccountingSubID.Text.Trim() == "")
|
|
{
|
|
MessageBox.Show("請輸入科目編號", "提示");
|
|
}
|
|
else
|
|
{
|
|
dgvAccountingLedger.Rows.Clear();
|
|
SearchAccountingLedger(txtAccountingSubID.Text.Trim());
|
|
StatusChange("NONE");
|
|
UtilityClass.SetGridColor(dgvAccountingLedger);
|
|
}
|
|
}
|
|
|
|
private void CleanForm() //清除畫面
|
|
{
|
|
//設定畫面物件狀態
|
|
//清除GridView
|
|
cbAccountingYear.DataSource = UtilityClass.GetAccountingYears(5);
|
|
cbAccountingYear.SelectedIndex = 0;
|
|
txtAccountingSubID.Text = "";
|
|
txtAccountingSubName.Text = "";
|
|
dpAccStart.Text = DateTime.Now.Year.ToString() + "/1/1";
|
|
dpAccEnd.Text = DateTime.Now.ToShortDateString();
|
|
}
|
|
|
|
private void LockForm() //鎖定物件
|
|
{
|
|
txtAccountingSubID.ReadOnly = true;
|
|
txtAccountingSubName.ReadOnly = true;
|
|
cbAccountingYear.Enabled = false;
|
|
dpAccStart.Enabled = false;
|
|
dpAccEnd.Enabled = false;
|
|
btnGetSubAccID.Enabled = false;
|
|
}
|
|
|
|
private void UnLockForm() //物件解鎖
|
|
{
|
|
txtAccountingSubID.ReadOnly = false;
|
|
txtAccountingSubName.ReadOnly = false;
|
|
cbAccountingYear.Enabled = true;
|
|
dpAccStart.Enabled = true;
|
|
dpAccEnd.Enabled = true;
|
|
btnGetSubAccID.Enabled = true;
|
|
}
|
|
|
|
private void CleanToolbar() //清除工具列
|
|
{
|
|
//設定Toolbar狀態
|
|
tsbSearch.Visible = true;
|
|
tsbAdd.Visible = false;
|
|
tsbEdit.Visible = false;
|
|
tsbDelete.Visible = false;
|
|
tsbSave.Visible = false;
|
|
tsbOK.Visible = false;
|
|
tsbCancel.Visible = false;
|
|
}
|
|
|
|
public void ReturnAccountList(string strAccountList) //取得資料
|
|
{
|
|
//strAccList[0] : IndexID
|
|
//strAccList[1] : 科目代碼
|
|
//strAccList[2] : 科目名稱
|
|
string[] strAccList = strAccountList.Split('|');
|
|
txtAccountingSubID.Text = strAccList[1];
|
|
txtAccountingSubName.Text = strAccList[2];
|
|
}
|
|
|
|
private DataTable GetAccountingSubjectByID(string strAccountingSubID)
|
|
{
|
|
try
|
|
{
|
|
DataTable dtTemp = new DataTable();
|
|
if (strAccountingSubID.Trim() != "")
|
|
{
|
|
//宣告物件
|
|
string strSQL = string.Format("Select AccountingSubID, AccountingClass, DCClass, AccountingSubName From OTB_FNC_AccountingSubjects Where AccountingSubID = '{0}' And AccountingBookID = '{1}'", 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"];
|
|
}
|
|
}
|
|
|
|
return dtTemp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private DataTable GetAccountingSubjectByName(string strAccountingSubName)
|
|
{
|
|
try
|
|
{
|
|
DataTable dtTemp = new DataTable();
|
|
if (strAccountingSubName.Trim() != "")
|
|
{
|
|
//宣告物件
|
|
string strSQL = string.Format("Select AccountingSubID, AccountingClass, DCClass, AccountingSubName From OTB_FNC_AccountingSubjects Where AccountingSubName = '{0}' And AccountingBookID ='{1}'", strAccountingSubName, 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"];
|
|
}
|
|
}
|
|
|
|
return dtTemp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private void SearchAccountingLedger(string strAccountingSubID)
|
|
{
|
|
try
|
|
{
|
|
DataTable dtTemp = new DataTable();
|
|
if (strAccountingSubID.Trim() != "")
|
|
{
|
|
//宣告物件
|
|
string strDebit = "";
|
|
string strCredit = "";
|
|
double dbBalance = 0;
|
|
string strSQL = string.Format("Select * From OTB_FNC_AccountingJournal Where 1 = 1 And AccountingBookID = '{0}' And AccountingSubID = '{1}' And AccountingDate Between '{2} 00:00:00' And '{3} 23:59:59' Order By AccountingDate", strAccountingBookID, strAccountingSubID, dpAccStart.Text.Trim(), dpAccEnd.Text.Trim());
|
|
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)
|
|
{
|
|
foreach (DataRow drData in dtTemp.Rows)
|
|
{
|
|
DataGridViewRow dgvRow = new DataGridViewRow();
|
|
dgvRow.CreateCells(dgvAccountingLedger);
|
|
dgvRow.Cells[0].Value = drData["AccountingID"].ToString(); //傳票編號
|
|
dgvRow.Cells[1].Value = drData["AccountingDate"].ToString(); //傳票日期
|
|
dgvRow.Cells[2].Value = drData["Memo"].ToString(); //摘要
|
|
strDebit = (string)UtilityClass.DecryptDES(drData["Debit"].ToString(), strKey);
|
|
strCredit = UtilityClass.DecryptDES(drData["Credit"].ToString(), strKey);
|
|
dgvRow.Cells[3].Value = UtilityClass.MarkNumber(strDebit); //借方金額
|
|
dgvRow.Cells[4].Value = UtilityClass.MarkNumber(strCredit); //貸方金額
|
|
dbBalance += Convert.ToDouble(string.IsNullOrEmpty(strDebit) ? "0" : strDebit) - Convert.ToDouble(string.IsNullOrEmpty(strCredit) ? "0" : strCredit); //計算餘額
|
|
dgvRow.Cells[5].Value = UtilityClass.MarkNumber(dbBalance); //餘額
|
|
dgvAccountingLedger.Rows.Add(dgvRow);
|
|
}
|
|
//將資料移到最下面
|
|
dgvAccountingLedger.CurrentCell = dgvAccountingLedger.Rows[dtTemp.Rows.Count - 1].Cells[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorHandler.WriteErrorLog("AccountingEntries.cs", ex);
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 事件觸發及問題處理
|
|
private void AccountingLedger_Load(object sender, EventArgs e)
|
|
{
|
|
StatusChange("NONE");
|
|
}
|
|
|
|
private void tsbSearch_Click(object sender, EventArgs e)
|
|
{
|
|
StatusChange("SEARCH");
|
|
}
|
|
|
|
private void tsbClean_Click(object sender, EventArgs e)
|
|
{
|
|
CleanForm();
|
|
lbAccountingName.Text = "";
|
|
dgvAccountingLedger.Rows.Clear();
|
|
}
|
|
|
|
private void tsbCancel_Click(object sender, EventArgs e)
|
|
{
|
|
StatusChange("NONE");
|
|
lbAccountingName.Text = "";
|
|
}
|
|
|
|
private void tsbExit_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void btnGetSubAccID_Click(object sender, EventArgs e)
|
|
{
|
|
PickAccountingSubject pkItemForm = new PickAccountingSubject();
|
|
string strAccountingSubID = txtAccountingSubID.Text.Trim();
|
|
string strAccountingSubName = txtAccountingSubName.Text.Trim();
|
|
if(strAccountingSubID != "")
|
|
{
|
|
pkItemForm.txtAccountingSubID.Text = strAccountingSubID;
|
|
}
|
|
if (strAccountingSubName != "")
|
|
{
|
|
pkItemForm.txtAccountingSubName.Text = strAccountingSubName;
|
|
}
|
|
pkItemForm.Owner = this;
|
|
pkItemForm.strOwnerForm = "AccountingLedger";
|
|
pkItemForm.StartPosition = FormStartPosition.CenterParent;
|
|
pkItemForm.ShowDialog();
|
|
}
|
|
|
|
private void txtAccountingSubID_Leave(object sender, EventArgs e)
|
|
{
|
|
//物件宣告
|
|
string strAccountingSubID = "";
|
|
string strAccountingSubName = "";
|
|
|
|
strAccountingSubID = txtAccountingSubID.Text.Trim();
|
|
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 = GetAccountingSubjectByID(strAccountingSubID).Rows[0]["AccountingSubName"].ToString();
|
|
txtAccountingSubName.Text = strAccountingSubName;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void txtAccountingSubName_Leave(object sender, EventArgs e)
|
|
{
|
|
//物件宣告
|
|
string strAccountingSubID = "";
|
|
string strAccountingSubName = "";
|
|
|
|
strAccountingSubName = txtAccountingSubName.Text.Trim();
|
|
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 = GetAccountingSubjectByName(strAccountingSubName).Rows[0]["AccountingSubID"].ToString();
|
|
txtAccountingSubID.Text = strAccountingSubID;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private void tsbOK_Click(object sender, EventArgs e)
|
|
{
|
|
lbAccountingName.Text = txtAccountingSubName.Text.Trim();
|
|
GoEvent();
|
|
}
|
|
|
|
private void cbAccountingYear_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (cbAccountingYear.SelectedValue.ToString() == DateTime.Now.Year.ToString())
|
|
{
|
|
dpAccStart.Text = DateTime.Now.Year.ToString() + "/1/1";
|
|
dpAccEnd.Text = DateTime.Now.ToShortDateString();
|
|
}
|
|
else
|
|
{
|
|
dpAccStart.Text = cbAccountingYear.SelectedValue.ToString() + "/1/1";
|
|
dpAccEnd.Text = cbAccountingYear.SelectedValue.ToString() + "/12/31";
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|