using FrameworkDAL.DTO.BIZTransactionClass; using FrameworkDAL.DTO.Formula; using FrameworkDAL.Query.BIZTransactionClass; using FrameworkDAL.Query.Formula; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using Newtonsoft.Json; using System.Text; namespace FrameworkDAL.CustomCode.Formula { public class FormulaDAL : IFormulaDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public FormulaDAL(IQueryExecutor QueryExecutor, IValidation IValidation) { _QueryExecutor = QueryExecutor; _Validation = IValidation; } public async Task GetFormula(int FormulaId, LoginDTO LoginDTO) { string json = ""; try { string sql = FormulaQB.GET_FORMULA; var parameters = new { Formulaid = FormulaId }; FormulaDTO FormulaDTOs = await _QueryExecutor.QuerySingleAsync(LoginDTO, sql, parameters); json = JsonConvert.SerializeObject(FormulaDTOs); return json; } catch (Exception) { throw; } finally { json = null; } } public async Task SaveFormula(FormulaDTO FormulaDTO, LoginDTO LoginDTO) { try { const string Sql = FormulaQB.SAVE_FORMULA; int result = await _QueryExecutor.ExecuteAsync(LoginDTO, Sql, FormulaDTO); string tableName = FormulaDTO.ModuleId == -1499999788 ? "TPAYPROCESSADDON" : "TCOSTPOSTINGADDON"; var sb = new StringBuilder(); string columnName = $"F_{FormulaDTO.FormulaCode.ToUpper()}"; sb.Append($"ALTER TABLE {tableName} ADD {columnName} "); switch (FormulaDTO.FormulaDataType) { case 0: sb.Append("NUMERIC"); if (FormulaDTO.FormulaDataSize > 0) sb.Append("(").Append(FormulaDTO.FormulaDataSize.ToString().Replace(".", ",")).Append(")"); break; case 1: sb.Append("NVARCHAR"); if (FormulaDTO.FormulaDataSize > 0) sb.Append("(").Append(FormulaDTO.FormulaDataSize).Append(")"); break; case 2: sb.Append("INT"); break; case 3: sb.Append("DATETIME"); break; default: throw new Exception("Unsupported DataType"); } sb.AppendLine(";"); // Set default = 0 for numeric if (FormulaDTO.FormulaDataType == 0) { sb.AppendLine($"UPDATE {tableName} SET {columnName} = 0 WHERE {columnName} IS NULL;"); } await _QueryExecutor.ExecuteAsync(LoginDTO, sb.ToString(), null); return result; } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(Error); } } public async Task UpdateFormula(FormulaDTO FormulaDTO, LoginDTO LoginDTO) { try { const string sqlUpdateFormula = FormulaQB.UPDATE_FORMULA; int result = await _QueryExecutor.ExecuteAsync(LoginDTO, sqlUpdateFormula, FormulaDTO); string tableName = FormulaDTO.ModuleId == -1499999788 ? "TPAYPROCESSADDON" : "TCOSTPOSTINGADDON"; string columnName = $"F_{FormulaDTO.FormulaCode.ToUpper()}"; var sb = new StringBuilder(); sb.AppendLine($@" IF NOT EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{tableName}' AND COLUMN_NAME = '{columnName}' ) BEGIN ALTER TABLE {tableName} ADD {columnName} "); switch (FormulaDTO.FormulaDataType) { case 0: sb.Append("NUMERIC"); if (FormulaDTO.FormulaDataSize > 0) sb.Append("(").Append(FormulaDTO.FormulaDataSize.ToString().Replace(".", ",")).Append(")"); sb.AppendLine(";"); sb.AppendLine($"UPDATE {tableName} SET {columnName} = 0 WHERE {columnName} IS NULL;"); break; case 1: sb.Append("NVARCHAR"); if (FormulaDTO.FormulaDataSize > 0) sb.Append("(").Append(FormulaDTO.FormulaDataSize).Append(")"); sb.AppendLine(";"); break; case 2: sb.AppendLine("INT;"); break; case 3: sb.AppendLine("DATETIME;"); break; default: throw new Exception("Unsupported DataType"); } sb.AppendLine("END;"); await _QueryExecutor.ExecuteAsync(LoginDTO, sb.ToString(), null); return result; } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.UpdateErrorMessage}"); throw new Exception(Error); } } public async Task GetSelectListFormula(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO, bool IsCount = false) { try { string Json = ""; if (IsCount == false) { string SQL = FormulaQB.GET_SELECTLIST_FORMULA; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; List FormulaDTOs = (await _QueryExecutor.QueryAsync(LoginDTO, SQL, parameter)).ToList(); Json = JsonConvert.SerializeObject(FormulaDTOs); } else { int Count = 0; Json = Count.ToString(); } return Json; } catch (Exception) { throw; } } public async Task DeleteFormula(int FormulaId, LoginDTO LoginDTO) { try { string Sql = FormulaQB.DELETE_FORMULA; var Parameters = new { Formulaid = FormulaId }; int result = await _QueryExecutor.ExecuteAsync(LoginDTO, Sql, Parameters); if (result > 0) { return $"{SuccessResponse.DeleteSuccessMessage}"; } else { return $"{ErrorResponse.DeleteNotFoundMessage}"; } } catch (Exception ex) { string Error = await _Validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(Error); } } } }