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

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
}
}