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