using DbAPI.Connections; using DbAPI.Errors; using DbAPI.Logging; using DbAPI.CustomerDetails; using DTS.Common.Classes.Channels; using DTS.Common.Interface.Database; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using DTS.Common.Interface.TestMetaData; using DTS.Common.Classes.CustomerDetails; namespace DbAPI.CustomerDetails { /// /// Handles Customer Details functions /// internal class CustomerDetails : ICustomerDetails { public ulong CustomerDetailsInsert(IUserDbRecord user, IConnectionDetails connection, CustomerDetailsDbRecord customerDetailsDbRecord, out int newId, out string errorString) { errorString = string.Empty; newId = -1; if (!DbAPI.Connections.IsUserLoggedIn(user, connection)) { return ErrorCodes.ERROR_ACCESS_DENIED; } var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_CustomerDetailsInsert"); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; } var errorNumberULong = ErrorCodes.ERROR_SUCCESS; try { cmd.CommandType = CommandType.StoredProcedure; #region params cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.Name }); cmd.Parameters.Add(new SqlParameter("@CustomerName", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerName }); cmd.Parameters.Add(new SqlParameter("@CustomerTestRefNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerTestRefNumber }); cmd.Parameters.Add(new SqlParameter("@ProjectRefNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.ProjectRefNumber }); cmd.Parameters.Add(new SqlParameter("@CustomerOrderNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerOrderNumber }); cmd.Parameters.Add(new SqlParameter("@CustomerCostUnit", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerCostUnit }); cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = customerDetailsDbRecord.LocalOnly }); cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = customerDetailsDbRecord.LastModified }); cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = customerDetailsDbRecord.LastModifiedBy }); cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = 1 }); var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(newIdParam); var errorNumberParam = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumberParam); var errorMessageParam = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessageParam); #endregion params cmd.ExecuteNonQuery(); if ((int)errorNumberParam.Value != 0) { errorNumberULong = (ulong)errorNumberParam.Value; } else { newId = (int)newIdParam.Value; } } finally { cmd.Connection.Dispose(); } return errorNumberULong; } public ulong CustomerDetailsUpdate(IUserDbRecord user, IConnectionDetails connection, CustomerDetailsDbRecord customerDetailsDbRecord, out string errorString) { errorString = string.Empty; if (!DbAPI.Connections.IsUserLoggedIn(user, connection)) { return ErrorCodes.ERROR_ACCESS_DENIED; } var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_CustomerDetailsUpdate"); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; } var errorNumberULong = ErrorCodes.ERROR_SUCCESS; try { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.Name }); cmd.Parameters.Add(new SqlParameter("@CustomerName", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerName }); cmd.Parameters.Add(new SqlParameter("@CustomerTestRefNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerTestRefNumber }); cmd.Parameters.Add(new SqlParameter("@ProjectRefNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.ProjectRefNumber }); cmd.Parameters.Add(new SqlParameter("@CustomerOrderNumber", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerOrderNumber }); cmd.Parameters.Add(new SqlParameter("@CustomerCostUnit", SqlDbType.NVarChar, 255) { Value = customerDetailsDbRecord.CustomerCostUnit }); cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = customerDetailsDbRecord.LocalOnly }); cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = customerDetailsDbRecord.LastModified }); cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = customerDetailsDbRecord.LastModifiedBy }); cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = 1 }); var errorNumberParam = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumberParam); var errorMessageParam = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessageParam); cmd.ExecuteNonQuery(); if ((int)errorNumberParam.Value != 0) { errorNumberULong = (ulong)errorNumberParam.Value; } } catch (Exception ex) { //Concatenate any error string returned from the stored procedure call errorString = $"{ex.Message}; {errorString}"; return errorNumberULong; } finally { cmd.Connection.Dispose(); } return errorNumberULong; } public ulong CustomerDetailsGet(IUserDbRecord user, IConnectionDetails connection, string name, out ICustomerDetailsDbRecord[] customerDetailsDbRecords) { customerDetailsDbRecords = null; if (!DbAPI.Connections.IsUserLoggedIn(user, connection)) { return ErrorCodes.ERROR_ACCESS_DENIED; } var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_CustomerDetailsGet"); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; } var list = new List(); try { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar) { Value = name }); var reader = cmd.ExecuteReader(); while (reader.Read()) { try { var cd = new CustomerDetailsDbRecord(reader); if (!cd.IsInvalidBlank()) { list.Add(cd); } } catch (Exception ex) { LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message); return ErrorCodes.ERROR_UNKNOWN; } } return ErrorCodes.ERROR_SUCCESS; } catch (Exception ex) { LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message); return ErrorCodes.ERROR_UNKNOWN; } finally { cmd.Connection.Dispose(); customerDetailsDbRecords = list.ToArray(); } } public ulong CustomerDetailsDelete(IUserDbRecord user, IConnectionDetails connection, string name, out string errorString) { errorString = string.Empty; if (!DbAPI.Connections.IsUserLoggedIn(user, connection)) { return ErrorCodes.ERROR_ACCESS_DENIED; } var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_CustomerDetailsDelete"); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; } var errorNumberULong = ErrorCodes.ERROR_SUCCESS; try { try { cmd.CommandType = CommandType.StoredProcedure; #region params cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = string.IsNullOrEmpty(name) ? null : name }); var errorNumberParam = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumberParam); var errorMessageParam = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessageParam); #endregion params cmd.ExecuteNonQuery(); if ((int)errorNumberParam.Value != 0) { errorNumberULong = (ulong)errorNumberParam.Value; errorString = (string)errorMessageParam.Value; } } finally { cmd.Connection.Dispose(); } } catch (Exception ex) { //Concatenate any error string returned from the stored procedure call errorString = $"{ex.Message}; {errorString}"; return errorNumberULong; } finally { cmd.Connection.Dispose(); } return errorNumberULong; } } }