using System; using System.Collections.Generic; using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace bnhtrade.Core.Data.Database.Account { public class ReadAccountCode : Connection { private Data.Database.SqlWhereBuilder sqlWhere = new SqlWhereBuilder(); public ReadAccountCode() { } /// /// Gets the full chart of accounts /// /// Dictionary where the database record id is the key public Dictionary All() { Innit(); var list = Execute(null, null); var dictionary = new Dictionary(); foreach (var item in list) { dictionary.Add(item.Value.Id, item.Value); } return dictionary; } public Dictionary ByAccountId(List accountIdList) { Innit(); var resultDict = new Dictionary(); if (accountIdList == null || !accountIdList.Any()) { return resultDict; } sqlWhere.In("tblAccountChartOf.AccountChartOfID", accountIdList, " WHERE "); resultDict = Execute(sqlWhere.SqlWhereString, sqlWhere.ParameterList); return resultDict; } public Dictionary ByAccountCode(List accountCodeList) { Innit(); var resultDict = new Dictionary(); if (accountCodeList == null || !accountCodeList.Any()) { return resultDict; } sqlWhere.In("tblAccountChartOf.AccountCode", accountCodeList, " WHERE "); resultDict = Execute(sqlWhere.SqlWhereString, sqlWhere.ParameterList); return resultDict; } private Dictionary Execute(string sqlWhere, Dictionary parameters) { var resultDict = new Dictionary(); //build sql query string sqlString = @" SELECT tblAccountChartOf.AccountChartOfID ,tblAccountChartOf.AccountCode ,tblAccountChartOf.AccountName ,tblAccountChartOf.Description ,tblAccountChartOfType.AccountChartOfType ,tblAccountChartOfType.BasicType ,tblAccountChartOfType.Multiplier FROM tblAccountChartOf INNER JOIN tblAccountChartOfType ON tblAccountChartOf.AccountChartOfTypeID = tblAccountChartOfType.AccountChartOfTypeID " + sqlWhere; using (SqlConnection conn = new SqlConnection(SqlConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sqlString, conn)) { if (parameters != null) { foreach (var parameter in parameters) { cmd.Parameters.AddWithValue(parameter.Key, parameter.Value); } } using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { uint tablePk = (uint)reader.GetInt32(0); uint accountCode = (uint)reader.GetInt32(1); string title = reader.GetString(2); string description = null; if (!reader.IsDBNull(3)) { description = reader.GetString(3); } string type = reader.GetString(4); string basicType = reader.GetString(5); int multiplier = reader.GetInt32(6); var result = new Model.Account.Account(tablePk, accountCode, title, description, type, basicType, multiplier); resultDict.Add(tablePk, result); } } } } } return resultDict; } private void Innit() { sqlWhere.Init(); } } }