179 lines
6.5 KiB
C#
179 lines
6.5 KiB
C#
|
using System.Data;
|
|||
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Reflection;
|
|||
|
using HRM.BO;
|
|||
|
using HRM.DA;
|
|||
|
using System.Linq;
|
|||
|
using Microsoft.AspNetCore.Authorization;
|
|||
|
|
|||
|
namespace HRM.UI.Controllers
|
|||
|
{
|
|||
|
[ApiController]
|
|||
|
[Route("api/DynamicPicker")]
|
|||
|
[Authorize]
|
|||
|
public class DynamicPickerController : ControllerBase
|
|||
|
{
|
|||
|
private string ServiceAssemblyName = "HRM.DA";
|
|||
|
private string BOAssemblyName = "HRM.BO";
|
|||
|
|
|||
|
public DynamicPickerController()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
[HttpPost]
|
|||
|
[Route("PickerSearch")]
|
|||
|
public ActionResult<ICollection> PickerSearch(DynamicPicker cty)
|
|||
|
{
|
|||
|
Type t = this.GetTypeofObject(cty.sourceObject, true);
|
|||
|
var obj = Activator.CreateInstance(t); //return Ok();
|
|||
|
string fName = "Get";
|
|||
|
if (cty.searchFunctionName != null && cty.searchFunctionName != "undefined")
|
|||
|
{
|
|||
|
fName = cty.searchFunctionName;
|
|||
|
}
|
|||
|
|
|||
|
#region function parameter setup
|
|||
|
|
|||
|
// var svalues = cty.seachControls.Where(x => x.value != null && x.value != "undefined" && x.value != "");
|
|||
|
|
|||
|
object[] param = new object[cty.searchControls.Count()];
|
|||
|
Type[] paramtypes = new Type[cty.searchControls.Count()];
|
|||
|
int i = 0;
|
|||
|
bool emptyvalue = false;
|
|||
|
foreach (DynamicPickerSearch item in cty.searchControls)
|
|||
|
{
|
|||
|
if (item.value == "undefined" && item.value == "")
|
|||
|
{
|
|||
|
emptyvalue = true;
|
|||
|
}
|
|||
|
if(item.PropertyName.ToUpper() == "PAYROLLTYPEID" )
|
|||
|
{
|
|||
|
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
|||
|
if(currentUser.PayrollTypeID !=null)
|
|||
|
param[i] = currentUser.PayrollTypeID;
|
|||
|
else if (cty.PayrollTypeID !=null)
|
|||
|
{
|
|||
|
param[i] = cty.PayrollTypeID;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
throw new Exception("Failed to get PayrollTypeID");
|
|||
|
}
|
|||
|
|
|||
|
paramtypes[i] = typeof(int);
|
|||
|
i = i + 1;
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
switch (item.controlType)
|
|||
|
{
|
|||
|
case EnumDynamicControlType.TextBox:
|
|||
|
{
|
|||
|
if (emptyvalue == true) param[i] = string.Empty;
|
|||
|
else param[i] = item.value;
|
|||
|
paramtypes[i] = typeof(string);
|
|||
|
break;
|
|||
|
}
|
|||
|
case EnumDynamicControlType.DropDownEnumData:
|
|||
|
{
|
|||
|
paramtypes[i] = this.GetTypeofObject(item.PropertyName, false);
|
|||
|
if (emptyvalue == true) param[i] = null;
|
|||
|
else Enum.TryParse(paramtypes[i], item.value, out param[i]);
|
|||
|
|
|||
|
// This code is used to get only active status data for dynamic-picker
|
|||
|
#region Active Status
|
|||
|
|
|||
|
param = new object[2];
|
|||
|
param[i] = EnumStatus.Active;
|
|||
|
param[i + 1] = (int)CurrentUser.GetCurrentUser(HttpContext.User).PayrollTypeID;
|
|||
|
|
|||
|
paramtypes = new Type[2];
|
|||
|
paramtypes[i] = typeof(EnumStatus);
|
|||
|
paramtypes[i + 1] = typeof(int);
|
|||
|
|
|||
|
#endregion Active Status
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
case EnumDynamicControlType.DropDownServerData:
|
|||
|
{
|
|||
|
int Newintvlaue = 0;
|
|||
|
if (emptyvalue == true) param[i] = null;
|
|||
|
else Int32.TryParse(item.value, out Newintvlaue);
|
|||
|
param[i] = Newintvlaue;
|
|||
|
paramtypes[i] = ((string) param[i]).GetType();
|
|||
|
break;
|
|||
|
}
|
|||
|
case EnumDynamicControlType.CheckBox:
|
|||
|
paramtypes[i] = ((Boolean) param[i]).GetType();
|
|||
|
break;
|
|||
|
case EnumDynamicControlType.DateTime:
|
|||
|
paramtypes[i] = ((DateTime) param[i]).GetType();
|
|||
|
|
|||
|
break;
|
|||
|
case EnumDynamicControlType.NumText:
|
|||
|
paramtypes[i] = ((int) param[i]).GetType();
|
|||
|
|
|||
|
break;
|
|||
|
case EnumDynamicControlType.IntNumText:
|
|||
|
paramtypes[i] = Convert.ToInt32(param[i]).GetType(); // ((int) param[i]).GetType();
|
|||
|
int intvlaue = 0;
|
|||
|
if (emptyvalue == true) param[i] = null;
|
|||
|
else Int32.TryParse(item.value, out intvlaue);
|
|||
|
param[i] = intvlaue;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
i = i + 1;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
MethodInfo voidMethodInfo = t.GetMethod(fName, paramtypes);
|
|||
|
object ost = voidMethodInfo.Invoke(obj, param);
|
|||
|
dynamic collection = ost as IEnumerable;
|
|||
|
return collection;
|
|||
|
}
|
|||
|
|
|||
|
private Type GetTypeofObject(string objectName, bool IsService)
|
|||
|
{
|
|||
|
string AssName = IsService == false
|
|||
|
? this.BOAssemblyName + "." + objectName
|
|||
|
: this.ServiceAssemblyName + "." + objectName + "Service";
|
|||
|
Assembly assem = Assembly.Load(IsService == false ? this.BOAssemblyName : this.ServiceAssemblyName);
|
|||
|
|
|||
|
Type t = assem.GetType(AssName);
|
|||
|
return t;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public class DynamicPicker
|
|||
|
{
|
|||
|
public string sourceObject { get; set; }
|
|||
|
public List<DynamicPickerSearch> searchControls { get; set; }
|
|||
|
public string IDColumnName { get; set; }
|
|||
|
public string parentID { get; set; }
|
|||
|
public string parentColumnName { get; set; }
|
|||
|
public string searchFunctionName { get; set; }
|
|||
|
public int? PayrollTypeID { get; set; }
|
|||
|
public DynamicPicker()
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class DynamicPickerSearch
|
|||
|
{
|
|||
|
public string value { get; set; }
|
|||
|
public string PropertyName { get; set; }
|
|||
|
public string controlID { get; set; }
|
|||
|
|
|||
|
public EnumDynamicControlType controlType { get; set; }
|
|||
|
}
|
|||
|
}
|