using framework_library;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace framework_business
{
public class xCalendar
{
///
/// Listy of users based on calendar configuration and search prefix
///
///
///
///
public static List SearchCalendar(string prefix, int calendarId)
{
List users = new List();
DataTable dt = new DataTable();
try
{
oSetup _setup = handler.ReturnSetup(false);
foreach (oCalendarEventModule mod in xData.GetTypedByCriteriaSpecific("recId", typeof(oCalendarEventModule), "calendarId", calendarId.ToString()))
{
pNums.Module module = (pNums.Module)Enum.ToObject(typeof(pNums.Module), mod.moduleId);
switch (module)
{
case pNums.Module.Users:
string query = "SELECT recId, name + ' ' + surname AS [user] FROM pal_User ";
query += "WHERE customerCode = '" + _setup.code + "' AND ((surname LIKE '%" + prefix + "%') OR (name LIKE '%" + prefix + "%') OR (email LIKE '%" + prefix + "%') OR (tel LIKE '%" + prefix + "%')) ";
dt = xData.GetCustomTypedTable(query, true);
foreach (DataRow row in dt.Rows)
{
users.Add(string.Format("{0}-{1}", row["user"].ToString(), row["recId"].ToString()));
}
break;
case pNums.Module.Surface://search for calendar users in a surface app
List mapParams = new List();
//surface Id
oDynamicParam param1 = new oDynamicParam();
param1.paramDisplayName = "SurfaceID";
param1.paramObject = mod.entityId;
mapParams.Add(param1);
//Name Field
oDynamicParam param2 = new oDynamicParam();
param2.paramDisplayName = "NameField";
param2.paramObject = mod.entityNameField;
mapParams.Add(param2);
//Surname Field
oDynamicParam param3 = new oDynamicParam();
param3.paramDisplayName = "SurnameField";
param3.paramObject = mod.entitySurnameField;
mapParams.Add(param3);
//Email Field
oDynamicParam param4 = new oDynamicParam();
param4.paramDisplayName = "EmailField";
param4.paramObject = mod.entityEmailField;
mapParams.Add(param4);
//Mobile Field
oDynamicParam param5 = new oDynamicParam();
param5.paramDisplayName = "MobileField";
param5.paramObject = mod.entityMobileField;
mapParams.Add(param5);
//Prefix Field
oDynamicParam param6 = new oDynamicParam();
param6.paramDisplayName = "Prefix";
param6.paramObject = prefix;
mapParams.Add(param6);
dt = xData.GetTypedTableByProc("recId", typeof(oSurfaceItem), "sp_GetSurfaceCalendarUsersBySearch", mapParams);
foreach (DataRow row in dt.Rows)
{
users.Add(string.Format("{0}-{1}", row[3].ToString() + " " + row[4].ToString(), row[0].ToString()));
}
break;
}
}
}
catch (Exception ex)
{
exception.HandleException("xCalendar:", MethodBase.GetCurrentMethod().Name, ex, 0);
}
return users;
}
///
/// Returns an ArrayList of oUser
/// The source of each user is determined on how the calednar is setup
///
///
///
///
public static ArrayList GetUsersForCalendar(int calendarId, string userIds)
{
ArrayList result = new ArrayList();
DataTable dt = new DataTable();
try
{
oSetup _setup = handler.ReturnSetup(false);
foreach (oCalendarEventModule mod in xData.GetTypedByCriteriaSpecific("recId", typeof(oCalendarEventModule), "calendarId", calendarId.ToString()))
{
pNums.Module module = (pNums.Module)Enum.ToObject(typeof(pNums.Module), mod.moduleId);
switch (module)
{
case pNums.Module.Users:
result = xData.GetTypedByCriteriaSpecific("recId", typeof(oUser), "recId", userIds, "surname", "pal_", true);
break;
case pNums.Module.Surface://search for calendar users in a surface app
List mapParams = new List();
//surface Id
oDynamicParam param1 = new oDynamicParam();
param1.paramDisplayName = "SurfaceID";
param1.paramObject = mod.entityId;
mapParams.Add(param1);
//Name Field
oDynamicParam param2 = new oDynamicParam();
param2.paramDisplayName = "NameField";
param2.paramObject = mod.entityNameField;
mapParams.Add(param2);
//Surname Field
oDynamicParam param3 = new oDynamicParam();
param3.paramDisplayName = "SurnameField";
param3.paramObject = mod.entitySurnameField;
mapParams.Add(param3);
//Email Field
oDynamicParam param4 = new oDynamicParam();
param4.paramDisplayName = "EmailField";
param4.paramObject = mod.entityEmailField;
mapParams.Add(param4);
//Mobile Field
oDynamicParam param5 = new oDynamicParam();
param5.paramDisplayName = "MobileField";
param5.paramObject = mod.entityMobileField;
mapParams.Add(param5);
//Prefix Field
oDynamicParam param6 = new oDynamicParam();
param6.paramDisplayName = "ItemIDs";
param6.paramObject = userIds;
mapParams.Add(param6);
//CVH 2017-11-15 Don't execute proc if no user Ids, otherwise exception
if (userIds.Length > 0)
dt = xData.GetTypedTableByProc("recId", typeof(oSurfaceItem), "sp_GetSurfaceCalendarUsersByIDs", mapParams);
foreach (DataRow row in dt.Rows)
{
oUser usr = new oUser();
usr.customerCode = _setup.code;
usr.recId = int.Parse(row[0].ToString());
usr.name = row[3].ToString();
usr.surname = row[4].ToString();
usr.email = row[5].ToString();
usr.tel = row[6].ToString();
result.Add(usr);
}
break;
}
}
}
catch (Exception ex)
{
exception.HandleException("xCalendar:", MethodBase.GetCurrentMethod().Name, ex, 0);
}
return result;
}
}
}