2016-06-27 01:45:38 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Data;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.ServiceModel;
|
|
|
|
|
|
|
|
|
|
|
|
using BeWo.Data;
|
|
|
|
|
|
using BeWo.Data.Access;
|
|
|
|
|
|
using BeWo.Data.Entities;
|
2019-07-12 17:36:37 +02:00
|
|
|
|
using BeWo.Service.Plugins;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
using BeWo.Service.ServiceContracts;
|
|
|
|
|
|
|
|
|
|
|
|
using BS.Shared;
|
|
|
|
|
|
using BS.Shared.Core;
|
|
|
|
|
|
using BS.Shared.DataContracts;
|
2017-08-23 17:11:53 +02:00
|
|
|
|
using Newtonsoft.Json;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
using Utils = BeWo.Service.Core.Utils;
|
|
|
|
|
|
|
|
|
|
|
|
namespace BeWo.Service.ServiceImplementations
|
|
|
|
|
|
{
|
|
|
|
|
|
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
|
|
|
|
|
|
public class QueryServiceImp : IQueryService
|
|
|
|
|
|
{
|
2017-08-23 17:11:53 +02:00
|
|
|
|
public string ExecuteQuery(long pQueryOid, List<QueryParamDC> parameter)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2017-08-23 17:11:53 +02:00
|
|
|
|
DataTable table = null;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
Query lQuery = DAOFactory.GenericDAO.LoadByID<Query>(pQueryOid);
|
|
|
|
|
|
|
|
|
|
|
|
string sql = lQuery.Sql;
|
|
|
|
|
|
if (!String.IsNullOrEmpty(sql))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (parameter != null && parameter.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
sql = this.ReplaceQueryParameter(sql, parameter);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-23 17:11:53 +02:00
|
|
|
|
table = DAOFactory.AdoDAO.ExecuteQuery(sql).Tables[0];
|
|
|
|
|
|
}
|
|
|
|
|
|
if (table == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
table = new DataTable("emptytable");
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
2017-08-23 17:11:53 +02:00
|
|
|
|
var temp = BS.Shared.Core.Utils.XMLSerializeToString(table);
|
|
|
|
|
|
return temp;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw Utils.CreateBeWoFaultException(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public List<QueryDC> GetAllQueriesOfType(QueryType pType)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2019-07-12 17:36:37 +02:00
|
|
|
|
var qs = PluginLoader.FindClass<QueryService>();
|
|
|
|
|
|
return qs.GetAllQueriesOfType(pType);
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw Utils.CreateBeWoFaultException(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-08-23 17:11:53 +02:00
|
|
|
|
public string PrepareQueryReport(string dataTableJsonString, string id)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
var lResult = id + ".xml";
|
|
|
|
|
|
|
|
|
|
|
|
var lDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, MultitenancyOperationContextExt.Current.Tenant + @"\temp");
|
|
|
|
|
|
var lPath = Path.Combine(lDir, lResult);
|
|
|
|
|
|
|
2017-08-23 17:11:53 +02:00
|
|
|
|
var table = BS.Shared.Core.Utils.XMLDeserializeFromString<DataTable>(dataTableJsonString);
|
|
|
|
|
|
BS.Shared.Core.Utils.XMLSerialize(lPath, table);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
|
|
|
|
|
return lResult;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw Utils.CreateBeWoFaultException(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Hack: We don´t use the ReportTypes in Webservice Calls,
|
|
|
|
|
|
// but the Client needs to know them for Calling ASP Sites
|
|
|
|
|
|
public void ReportTypes(ReportTypes pType)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string GetParamterKeyName(QueryParamDC item)
|
|
|
|
|
|
{
|
|
|
|
|
|
return GetParamterKeyName(item.Name);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string GetParamterKeyName(string itemName)
|
|
|
|
|
|
{
|
|
|
|
|
|
string key = itemName;
|
|
|
|
|
|
key = key.Replace(" ", "_");
|
|
|
|
|
|
|
|
|
|
|
|
return key;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string ReplaceQueryParameter(string sql, List<QueryParamDC> parameter)
|
|
|
|
|
|
{
|
|
|
|
|
|
string newsql = sql;
|
|
|
|
|
|
foreach (var item in parameter)
|
|
|
|
|
|
{
|
2017-02-01 13:53:59 +01:00
|
|
|
|
//if (item.Value != null)
|
|
|
|
|
|
//{
|
|
|
|
|
|
switch (item.ParamType)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
2017-02-01 13:53:59 +01:00
|
|
|
|
case QueryParameterType.SupportConcept:
|
|
|
|
|
|
case QueryParameterType.Employee:
|
|
|
|
|
|
case QueryParameterType.Customer:
|
|
|
|
|
|
case QueryParameterType.Team:
|
2019-09-17 17:44:57 +02:00
|
|
|
|
case QueryParameterType.Organisation:
|
2017-02-01 13:53:59 +01:00
|
|
|
|
long oid2 = 0;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
if (item.Value != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
Int64.TryParse(item.Value.ToString(), out oid2);
|
|
|
|
|
|
}
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item), String.Format("{0}", oid2));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.Month:
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
if (item.Value is DateTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime dt = (DateTime)item.Value;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item) + "_MM", String.Format("{0:MM}", dt));
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item) + "_Start", String.Format("{0:yyyy-MM}-01", dt));
|
|
|
|
|
|
dt = dt.AddMonths(1);
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item) + "_End", String.Format("{0:yyyy-MM}-01", dt));
|
|
|
|
|
|
}
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.Date:
|
|
|
|
|
|
if (item.Value != null && item.Value is DateTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime dt = (DateTime)item.Value;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item), String.Format("{0:yyyy-MM-dd}", dt));
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.DateRange:
|
|
|
|
|
|
if (item.Value is DateTimeSpan)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTimeSpan dts = (DateTimeSpan)item.Value;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
string[] itemNames = item.Name.Split(new[] { '_' });
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(itemNames[0]), String.Format("{0:yyyy-MM-dd}", dts.StartDate));
|
|
|
|
|
|
if (itemNames.Length > 1)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
2017-02-01 13:53:59 +01:00
|
|
|
|
DateTime endDate = dts.EndDate;
|
|
|
|
|
|
if (endDate < DateTime.MaxValue.Date)
|
|
|
|
|
|
endDate = endDate.AddDays(1);
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(itemNames[1]), String.Format("{0:yyyy-MM-dd}", endDate));
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
2017-02-01 13:53:59 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.Year:
|
|
|
|
|
|
if (item.Value is DateTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
DateTime dt = (DateTime)item.Value;
|
|
|
|
|
|
|
|
|
|
|
|
newsql = newsql.Replace(":year", String.Format("{0:yyyy-MM-dd}", dt));
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item) + "_Start", String.Format("{0:yyyy-MM}-01", dt));
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item) + "_End", String.Format("{0:yyyy-MM}-01", dt.AddYears(1)));
|
|
|
|
|
|
|
|
|
|
|
|
newsql = newsql.Replace(":yyyy", String.Format("{0:yyyy}", dt));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.CurrentUser:
|
|
|
|
|
|
case QueryParameterType.CurrentEmployee:
|
|
|
|
|
|
if (item.Value != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
long oid;
|
|
|
|
|
|
if (Int64.TryParse(item.Value.ToString(), out oid))
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
2017-02-01 13:53:59 +01:00
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item), String.Format("{0}", oid));
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
2017-02-01 13:53:59 +01:00
|
|
|
|
}
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2017-02-01 13:53:59 +01:00
|
|
|
|
break;
|
|
|
|
|
|
case QueryParameterType.ValueListEntryType:
|
|
|
|
|
|
if (item.Value != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
long oid;
|
|
|
|
|
|
if (Int64.TryParse(item.Value.ToString(), out oid))
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
2017-02-01 13:53:59 +01:00
|
|
|
|
String[] names = item.Name.Split('_');
|
|
|
|
|
|
newsql = newsql.Replace(":" + names[0], String.Format("{0}", oid));
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
2017-02-01 13:53:59 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
if (item.Value != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
newsql = newsql.Replace(":" + GetParamterKeyName(item.Name), item.Value.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
2017-02-01 13:53:59 +01:00
|
|
|
|
//}
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return newsql;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|