using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using Dapper; using DataModel.Models; namespace DataModel.Process { /// /// User tracking functions for LotFinderDB interface /// public partial class LotFinderDB { /// /// Finds users with matching user ID or full name /// private const string SQL_SEARCH_USERS = @" SELECT TOP 25 u.AddressNumber, COALESCE(u.UserID,' ') AS UserID, u.FullName, u.LastUpdateDT FROM dbo.JdeUser AS u WHERE u.UserID LIKE '%' + @filter + '%' OR u.FullName LIKE '%' + @filter + '%' OR CAST(u.AddressNumber AS VARCHAR(10)) LIKE '%' + @filter + '%' ORDER BY u.UserID, u.FullName"; /// /// Finds users with matching user ID or full name /// /// Search filter /// Users with matching matching user ID or full name public static List SearchUsers(string filter) { List results = new List(); try { using (SqlConnection connection = GetConnection()) { results.AddRange(connection.Query(SQL_SEARCH_USERS, new{filter})); } } catch (Exception error) { //Log and forward exception logger.Error("SearchUsers: failed to search for user '{0}': {1}.", filter, error.Message); throw new Exception($"Failed to get serach for user '{filter}' from LotFinderDB.", error); } return results; } /// /// Query to find users with matching user IDs /// private const string SQL_LOOKUP_USERS = @" SELECT u.AddressNumber, u.UserID, u.FullName, u.LastUpdateDT FROM dbo.JdeUser AS u INNER JOIN @userIDs u2 ON (u.UserID = u2.UserName OR CAST(u.AddressNumber AS VARCHAR(20)) = u2.UserName) ORDER BY u.UserID"; /// /// Finds users with matching user IDs /// /// User IDs to match /// Users with matching user IDs public static List LookupUsers(List userIDs) { List results = new List(); try { //Create search filter parameter DataTable dataTable = new DataTable(); dataTable.Columns.Add("UserName", typeof(string)); foreach (string userID in userIDs) { dataTable.Rows.Add(userID); } using (SqlConnection connection = GetConnection()) { results = connection.Query(SQL_LOOKUP_USERS, new { userIDs = dataTable.AsTableValuedParameter("OperatorFilterParameter") }).ToList(); } } catch (Exception error) { //Log and forward exception logger.Error("LookupUsers: failed to find matching users: {0}.", error.Message); throw new Exception("LookupUsers: failed to find matching users in LotFinderDB.", error); } return results; } } }