crm: migrate DAO to EF Core
This commit is contained in:
parent
d078909a78
commit
039f88378c
@ -95,7 +95,7 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
protected int TenantID { get; private set; }
|
||||
|
||||
protected List<int> SearchByTags(EntityType entityType, int[] exceptIDs, IEnumerable<String> tags)
|
||||
protected List<int> SearchByTags(EntityType entityType, int[] exceptIDs, IEnumerable<string> tags)
|
||||
{
|
||||
if (tags == null || !tags.Any())
|
||||
throw new ArgumentException();
|
||||
@ -108,35 +108,16 @@ namespace ASC.CRM.Core.Dao
|
||||
.Where(x => x.EntityType == entityType && String.Compare(x.Title, tag.Trim(), true) == 0)
|
||||
.Select(x => x.Id).Single());
|
||||
}
|
||||
|
||||
Expression<Func<DbEntityTag, bool>> exp = null;
|
||||
|
||||
var sqlQuery = CRMDbContext.EntityTags.Where(x => x.EntityType == entityType && tagIDs.Contains(x.TagId));
|
||||
|
||||
if (exceptIDs != null && exceptIDs.Length > 0)
|
||||
exp = x => exceptIDs.Contains(x.EntityId) && x.EntityType == entityType;
|
||||
else
|
||||
exp = x => x.EntityType == entityType;
|
||||
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
// exp.Update() Exp.In("tag_id", tagIDs)
|
||||
// return CRMDbContext.CrmEntityTag.Where(exp).GroupBy(x => x.EntityId).Select(x=>)
|
||||
// .Where(x => true).Select(x=>x);
|
||||
|
||||
//var sqlQuery = new SqlQuery("crm_entity_tag")
|
||||
// .Select("entity_id")
|
||||
// .Select("count(*) as count")
|
||||
// .GroupBy("entity_id")
|
||||
// .Having(Exp.Eq("count", tags.Count()));
|
||||
|
||||
//if (exceptIDs != null && exceptIDs.Length > 0)
|
||||
// sqlQuery.Where(Exp.In("entity_id", exceptIDs) & Exp.Eq("entity_type", (int)entityType));
|
||||
//else
|
||||
// sqlQuery.Where(Exp.Eq("entity_type", (int)entityType));
|
||||
|
||||
//sqlQuery.Where(Exp.In("tag_id", tagIDs));
|
||||
|
||||
//return Db.ExecuteList(sqlQuery).ConvertAll(row => Convert.ToInt32(row[0]));
|
||||
sqlQuery = sqlQuery.Where(x => exceptIDs.Contains(x.EntityId));
|
||||
|
||||
return sqlQuery.GroupBy(x => x.EntityId)
|
||||
.Where(x => x.Count() == tags.Count())
|
||||
.Select(x => x.Key)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
protected Dictionary<int, int[]> GetRelativeToEntity(int[] contactID, EntityType entityType, int[] entityID)
|
||||
@ -144,9 +125,9 @@ namespace ASC.CRM.Core.Dao
|
||||
Expression<Func<DbEntityContact, bool>> exp = null;
|
||||
|
||||
if (contactID != null && contactID.Length > 0 && (entityID == null || entityID.Length == 0))
|
||||
exp = x => x.EntityType == (int)entityType && contactID.Contains(x.ContactId);
|
||||
exp = x => x.EntityType == entityType && contactID.Contains(x.ContactId);
|
||||
else if (entityID != null && entityID.Length > 0 && (contactID == null || contactID.Length == 0))
|
||||
exp = x => x.EntityType == (int)entityType && entityID.Contains(x.EntityId);
|
||||
exp = x => x.EntityType == entityType && entityID.Contains(x.EntityId);
|
||||
|
||||
return CRMDbContext.EntityContact.Where(exp).GroupBy(x => x.EntityId).ToDictionary(
|
||||
x => x.Key,
|
||||
@ -162,13 +143,13 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
if (contactID.HasValue && !entityID.HasValue)
|
||||
return CRMDbContext.EntityContact
|
||||
.Where(x => x.EntityType == (int)entityType && x.ContactId == contactID.Value)
|
||||
.Where(x => x.EntityType == entityType && x.ContactId == contactID.Value)
|
||||
.Select(x => x.EntityId)
|
||||
.ToArray();
|
||||
|
||||
if (!contactID.HasValue && entityID.HasValue)
|
||||
return CRMDbContext.EntityContact
|
||||
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID.Value)
|
||||
.Where(x => x.EntityType == entityType && x.EntityId == entityID.Value)
|
||||
.Select(x => x.ContactId)
|
||||
.ToArray();
|
||||
|
||||
@ -183,14 +164,14 @@ namespace ASC.CRM.Core.Dao
|
||||
using var tx = CRMDbContext.Database.BeginTransaction();
|
||||
|
||||
var exists = CRMDbContext.EntityContact
|
||||
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID)
|
||||
.Where(x => x.EntityType == entityType && x.EntityId == entityID)
|
||||
.Select(x => x.ContactId)
|
||||
.ToArray();
|
||||
|
||||
foreach (var existContact in exists)
|
||||
{
|
||||
var items = CRMDbContext.EntityContact
|
||||
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID && x.ContactId == existContact);
|
||||
.Where(x => x.EntityType == entityType && x.EntityId == entityID && x.ContactId == existContact);
|
||||
|
||||
CRMDbContext.EntityContact.RemoveRange(items);
|
||||
}
|
||||
@ -207,7 +188,7 @@ namespace ASC.CRM.Core.Dao
|
||||
CRMDbContext.EntityContact.Add(new DbEntityContact
|
||||
{
|
||||
ContactId = contactID,
|
||||
EntityType = (int)entityType,
|
||||
EntityType = entityType,
|
||||
EntityId = entityID
|
||||
});
|
||||
|
||||
@ -225,7 +206,7 @@ namespace ASC.CRM.Core.Dao
|
||||
expr = x => contactID.Contains(x.ContactId);
|
||||
|
||||
if (entityID != null && entityID.Length > 0)
|
||||
expr = x => entityID.Contains(x.EntityId) && x.EntityType == (int)entityType;
|
||||
expr = x => entityID.Contains(x.EntityId) && x.EntityType == entityType;
|
||||
|
||||
var dbCrmEntity = CRMDbContext.EntityContact;
|
||||
|
||||
@ -268,29 +249,23 @@ namespace ASC.CRM.Core.Dao
|
||||
}
|
||||
|
||||
public string GetOrganisationLogoBase64(int logo_id)
|
||||
{
|
||||
|
||||
{
|
||||
if (logo_id <= 0) throw new ArgumentException();
|
||||
|
||||
|
||||
return CRMDbContext.OrganisationLogo
|
||||
|
||||
return Query(CRMDbContext.OrganisationLogo)
|
||||
.Where(x => x.Id == logo_id)
|
||||
.Select(x => x.Content)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
|
||||
#region HasCRMActivity
|
||||
|
||||
public bool HasActivity()
|
||||
{
|
||||
return Db.ExecuteScalar<bool>(@"select exists(select 1 from crm_case where tenant_id = @tid) or " +
|
||||
"exists(select 1 from crm_deal where tenant_id = @tid) or exists(select 1 from crm_task where tenant_id = @tid) or " +
|
||||
"exists(select 1 from crm_contact where tenant_id = @tid)", new { tid = TenantID });
|
||||
return Query(CRMDbContext.Cases).Any() &&
|
||||
Query(CRMDbContext.Deals).Any() &&
|
||||
Query(CRMDbContext.Tasks).Any() &&
|
||||
Query(CRMDbContext.Contacts).Any();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected IQueryable<T> Query<T>(DbSet<T> set) where T : class, IDbCrm
|
||||
{
|
||||
return set.Where(r => r.TenantId == TenantID);
|
||||
@ -305,13 +280,11 @@ namespace ASC.CRM.Core.Dao
|
||||
return table.Substring(table.IndexOf(" ")).Trim() + "." + tenant;
|
||||
}
|
||||
|
||||
|
||||
protected static Guid ToGuid(object guid)
|
||||
{
|
||||
var str = guid as string;
|
||||
|
||||
return !string.IsNullOrEmpty(str) ? new Guid(str) : Guid.Empty;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -34,37 +34,41 @@ using ASC.CRM.Core.Enums;
|
||||
using ASC.Files.Core;
|
||||
using ASC.Web.CRM.Core.Search;
|
||||
using ASC.Web.Files.Api;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using OrderBy = ASC.CRM.Core.Entities.OrderBy;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SortedByType = ASC.CRM.Core.Enums.SortedByType;
|
||||
|
||||
namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
public class CachedCasesDao : CasesDao
|
||||
{
|
||||
private readonly HttpRequestDictionary<Cases> _casesCache = new HttpRequestDictionary<Cases>("crm_cases");
|
||||
private readonly HttpRequestDictionary<Cases> _casesCache;
|
||||
|
||||
public CachedCasesDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
CRMSecurity cRMSecurity,
|
||||
TenantUtil tenantUtil,
|
||||
FilesIntegration filesIntegration
|
||||
) :
|
||||
FilesIntegration filesIntegration,
|
||||
AuthorizationManager authorizationManager,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
:
|
||||
base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext,
|
||||
cRMSecurity,
|
||||
tenantUtil,
|
||||
filesIntegration)
|
||||
filesIntegration,
|
||||
authorizationManager)
|
||||
|
||||
{
|
||||
|
||||
|
||||
|
||||
_casesCache = new HttpRequestDictionary<Cases>(httpContextAccessor?.HttpContext, "crm_cases");
|
||||
}
|
||||
|
||||
public override Cases GetByID(int caseID)
|
||||
@ -176,7 +180,7 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
CRMSecurity.DemandAccessTo(cases);
|
||||
|
||||
CRMDbContext.Cases.Update(new DbCase
|
||||
var itemToUpdate = new DbCase
|
||||
{
|
||||
Id = cases.ID,
|
||||
CreateBy = cases.CreateBy,
|
||||
@ -186,7 +190,9 @@ namespace ASC.CRM.Core.Dao
|
||||
LastModifedOn = cases.LastModifedOn,
|
||||
TenantId = TenantID,
|
||||
Title = cases.Title
|
||||
});
|
||||
};
|
||||
|
||||
CRMDbContext.Cases.Update(itemToUpdate);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
@ -281,6 +287,7 @@ namespace ASC.CRM.Core.Dao
|
||||
if (casesID <= 0) return null;
|
||||
|
||||
var cases = GetByID(casesID);
|
||||
|
||||
if (cases == null) return null;
|
||||
|
||||
CRMSecurity.DemandDelete(cases);
|
||||
@ -295,6 +302,7 @@ namespace ASC.CRM.Core.Dao
|
||||
public virtual List<Cases> DeleteBatchCases(List<Cases> caseses)
|
||||
{
|
||||
caseses = caseses.FindAll(CRMSecurity.CanDelete).ToList();
|
||||
|
||||
if (!caseses.Any()) return caseses;
|
||||
|
||||
// Delete relative keys
|
||||
@ -310,6 +318,7 @@ namespace ASC.CRM.Core.Dao
|
||||
if (casesID == null || !casesID.Any()) return null;
|
||||
|
||||
var cases = GetCases(casesID).FindAll(CRMSecurity.CanDelete).ToList();
|
||||
|
||||
if (!cases.Any()) return cases;
|
||||
|
||||
// Delete relative keys
|
||||
@ -324,21 +333,33 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
var casesID = caseses.Select(x => x.ID).ToArray();
|
||||
|
||||
var tagdao = FilesIntegration.GetTagDao();
|
||||
|
||||
var tagNames = Db.ExecuteList(Query("crm_relationship_event").Select("id")
|
||||
.Where(Exp.Eq("have_files", true) & Exp.In("entity_id", casesID) & Exp.Eq("entity_type", (int)EntityType.Case)))
|
||||
.Select(row => String.Format("RelationshipEvent_{0}", row[0])).ToArray();
|
||||
var tagdao = FilesIntegration.TagDao();
|
||||
|
||||
var tagNames = Query(CRMDbContext.RelationshipEvent)
|
||||
.Where(x => x.HaveFiles && casesID.Contains(x.EntityId) && x.EntityType == EntityType.Case)
|
||||
.Select(x => String.Format("RelationshipEvent_{0}", x.Id)).ToArray();
|
||||
|
||||
var filesIDs = tagdao.GetTags(tagNames, TagType.System).Where(t => t.EntryType == FileEntryType.File).Select(t => t.EntryId).ToArray();
|
||||
|
||||
using var tx = CRMDbContext.Database.BeginTransaction();
|
||||
|
||||
Db.ExecuteNonQuery(Delete("crm_field_value").Where(Exp.In("entity_id", casesID) & Exp.Eq("entity_type", (int)EntityType.Case)));
|
||||
Db.ExecuteNonQuery(Delete("crm_relationship_event").Where(Exp.In("entity_id", casesID) & Exp.Eq("entity_type", (int)EntityType.Case)));
|
||||
Db.ExecuteNonQuery(Delete("crm_task").Where(Exp.In("entity_id", casesID) & Exp.Eq("entity_type", (int)EntityType.Case)));
|
||||
Db.ExecuteNonQuery(new SqlDelete("crm_entity_tag").Where(Exp.In("entity_id", casesID) & Exp.Eq("entity_type", (int)EntityType.Case)));
|
||||
Db.ExecuteNonQuery(Delete("crm_case").Where(Exp.In("id", casesID)));
|
||||
CRMDbContext.RemoveRange(Query(CRMDbContext.FieldValue)
|
||||
.Where(x => casesID.Contains(x.EntityId) && x.EntityType == EntityType.Case));
|
||||
|
||||
CRMDbContext.RemoveRange(Query(CRMDbContext.RelationshipEvent)
|
||||
.Where(x => casesID.Contains(x.EntityId) && x.EntityType == EntityType.Case));
|
||||
|
||||
CRMDbContext.RemoveRange(Query(CRMDbContext.Tasks)
|
||||
.Where(x => casesID.Contains(x.EntityId) && x.EntityType == EntityType.Case));
|
||||
|
||||
CRMDbContext.RemoveRange(CRMDbContext.EntityTags.Where(x => casesID.Contains(x.EntityId) && x.EntityType == EntityType.Case));
|
||||
|
||||
CRMDbContext.Cases.RemoveRange(caseses.ConvertAll(x => new DbCase
|
||||
{
|
||||
Id = x.ID
|
||||
}));
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
tx.Commit();
|
||||
|
||||
@ -403,12 +424,16 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
if (withParams)
|
||||
{
|
||||
var whereConditional = WhereConditional(exceptIDs, searchText, contactID, isClosed, tags);
|
||||
result = whereConditional != null ? Db.ExecuteScalar<int>(Query("crm_case").Where(whereConditional).SelectCount()) : 0;
|
||||
var dbCasesQuery = GetDbCasesByFilters(exceptIDs, searchText, contactID, isClosed, tags);
|
||||
|
||||
result = dbCasesQuery != null ? dbCasesQuery.Count() : 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var countWithoutPrivate = Db.ExecuteScalar<int>(Query("crm_case").SelectCount());
|
||||
|
||||
var countWithoutPrivate = Query(CRMDbContext.Cases).Count();
|
||||
|
||||
var privateCount = exceptIDs.Count;
|
||||
|
||||
if (privateCount > countWithoutPrivate)
|
||||
@ -428,11 +453,13 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
_cache.Insert(cacheKey, result, TimeSpan.FromSeconds(30));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private Exp WhereConditional(
|
||||
private IQueryable<DbCase> GetDbCasesByFilters(
|
||||
ICollection<int> exceptIDs,
|
||||
String searchText,
|
||||
int contactID,
|
||||
@ -440,7 +467,7 @@ namespace ASC.CRM.Core.Dao
|
||||
IEnumerable<String> tags)
|
||||
{
|
||||
|
||||
var conditions = new List<Exp>();
|
||||
var result = Query(CRMDbContext.Cases);
|
||||
|
||||
var ids = new List<int>();
|
||||
|
||||
@ -455,32 +482,35 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
if (!BundleSearch.TrySelectCase(searchText, out ids))
|
||||
{
|
||||
conditions.Add(BuildLike(new[] { "title" }, keywords));
|
||||
foreach(var k in keywords)
|
||||
{
|
||||
result = result.Where(x => Microsoft.EntityFrameworkCore.EF.Functions.Like(x.Title, k));
|
||||
}
|
||||
}
|
||||
else if (!ids.Any())
|
||||
{
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (contactID > 0)
|
||||
{
|
||||
|
||||
var sqlQuery = new SqlQuery("crm_entity_contact")
|
||||
.Select("entity_id")
|
||||
.Where(Exp.Eq("contact_id", contactID) & Exp.Eq("entity_type", (int)EntityType.Case));
|
||||
|
||||
var sqlQuery = CRMDbContext.EntityContact
|
||||
.Where(x => x.ContactId == contactID && x.EntityType == EntityType.Case);
|
||||
|
||||
if (ids.Count > 0)
|
||||
sqlQuery.Where(Exp.In("entity_id", ids));
|
||||
sqlQuery = sqlQuery.Where(x => ids.Contains(x.EntityId));
|
||||
|
||||
ids = Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList();
|
||||
ids = sqlQuery.Select(x => x.EntityId).ToList();
|
||||
|
||||
if (ids.Count == 0) return null;
|
||||
}
|
||||
|
||||
if (isClosed.HasValue)
|
||||
conditions.Add(Exp.Eq("is_closed", isClosed));
|
||||
{
|
||||
result = result.Where(x => x.IsClosed == isClosed);
|
||||
}
|
||||
|
||||
if (tags != null && tags.Any())
|
||||
{
|
||||
@ -498,27 +528,26 @@ namespace ASC.CRM.Core.Dao
|
||||
if (ids.Count == 0) return null;
|
||||
}
|
||||
|
||||
conditions.Add(Exp.In("id", ids));
|
||||
result = result.Where(x => ids.Contains(x.Id));
|
||||
|
||||
}
|
||||
else if (exceptIDs.Count > 0)
|
||||
{
|
||||
conditions.Add(!Exp.In("id", exceptIDs.ToArray()));
|
||||
result = result.Where(x => !exceptIDs.Contains(x.Id));
|
||||
}
|
||||
|
||||
if (conditions.Count == 0) return null;
|
||||
|
||||
return conditions.Count == 1 ? conditions[0] : conditions.Aggregate((i, j) => i & j);
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<Cases> GetCases(IEnumerable<int> casesID)
|
||||
{
|
||||
|
||||
if (casesID == null || !casesID.Any()) return new List<Cases>();
|
||||
|
||||
var sqlQuery = GetCasesSqlQuery(Exp.In("id", casesID.ToArray()));
|
||||
|
||||
return Db.ExecuteList(sqlQuery).ConvertAll(ToCases).FindAll(CRMSecurity.CanAccessTo);
|
||||
return Query(CRMDbContext.Cases)
|
||||
.Where(x => casesID.Contains(x.Id))
|
||||
.ToList()
|
||||
.ConvertAll(ToCases)
|
||||
.FindAll(CRMSecurity.CanAccessTo);
|
||||
}
|
||||
|
||||
public List<Cases> GetCases(
|
||||
@ -530,44 +559,33 @@ namespace ASC.CRM.Core.Dao
|
||||
int count,
|
||||
OrderBy orderBy)
|
||||
{
|
||||
var sqlQuery = GetCasesSqlQuery(null);
|
||||
|
||||
var withParams = !(String.IsNullOrEmpty(searchText) &&
|
||||
contactID <= 0 &&
|
||||
isClosed == null &&
|
||||
(tags == null || !tags.Any()));
|
||||
|
||||
var whereConditional = WhereConditional(CRMSecurity.GetPrivateItems(typeof(Cases)).ToList(), searchText,
|
||||
var dbCasesQuery = GetDbCasesByFilters(CRMSecurity.GetPrivateItems(typeof(Cases)).ToList(), searchText,
|
||||
contactID, isClosed,
|
||||
tags);
|
||||
|
||||
if (withParams && whereConditional == null)
|
||||
return new List<Cases>();
|
||||
if (dbCasesQuery == null) return new List<Cases>();
|
||||
|
||||
sqlQuery.Where(whereConditional);
|
||||
if (0 < from && from < int.MaxValue) dbCasesQuery.Skip(from);
|
||||
if (0 < count && count < int.MaxValue) dbCasesQuery.Take(count);
|
||||
|
||||
if (0 < from && from < int.MaxValue) sqlQuery.SetFirstResult(from);
|
||||
if (0 < count && count < int.MaxValue) sqlQuery.SetMaxResults(count);
|
||||
dbCasesQuery = dbCasesQuery.OrderBy(x => x.IsClosed);
|
||||
|
||||
sqlQuery.OrderBy("is_closed", true);
|
||||
|
||||
|
||||
if (orderBy != null && Enum.IsDefined(typeof(SortedByType), orderBy.SortedBy))
|
||||
if (orderBy != null && Enum.IsDefined(typeof(Enums.SortedByType), orderBy.SortedBy))
|
||||
switch ((SortedByType)orderBy.SortedBy)
|
||||
{
|
||||
case SortedByType.Title:
|
||||
sqlQuery.OrderBy("title", orderBy.IsAsc);
|
||||
dbCasesQuery = dbCasesQuery.OrderBy(x => x.Title);
|
||||
break;
|
||||
case SortedByType.CreateBy:
|
||||
sqlQuery.OrderBy("create_by", orderBy.IsAsc);
|
||||
dbCasesQuery = dbCasesQuery.OrderBy(x => x.CreateBy);
|
||||
break;
|
||||
case SortedByType.DateAndTime:
|
||||
sqlQuery.OrderBy("create_on", orderBy.IsAsc);
|
||||
dbCasesQuery = dbCasesQuery.OrderBy(x => x.CreateOn);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return Db.ExecuteList(sqlQuery).ConvertAll(ToCases);
|
||||
return dbCasesQuery.ToList().ConvertAll(ToCases);
|
||||
}
|
||||
|
||||
public List<Cases> GetCasesByPrefix(String prefix, int from, int count)
|
||||
@ -579,27 +597,29 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
var keywords = prefix.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();
|
||||
|
||||
var q = GetCasesSqlQuery(null);
|
||||
|
||||
var q = Query(CRMDbContext.Cases);
|
||||
|
||||
if (keywords.Length == 1)
|
||||
{
|
||||
q.Where(Exp.Like("title", keywords[0]));
|
||||
q = q.Where(x => Microsoft.EntityFrameworkCore.EF.Functions.Like(x.Title, keywords[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var k in keywords)
|
||||
{
|
||||
q.Where(Exp.Like("title", k));
|
||||
q = q.Where(x => Microsoft.EntityFrameworkCore.EF.Functions.Like(x.Title, k));
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < from && from < int.MaxValue) q = q.Skip(from);
|
||||
if (0 < count && count < int.MaxValue) q = q.Take(count);
|
||||
|
||||
if (0 < from && from < int.MaxValue) q.SetFirstResult(from);
|
||||
if (0 < count && count < int.MaxValue) q.SetMaxResults(count);
|
||||
|
||||
var sqlResult = Db.ExecuteList(q).ConvertAll(row => ToCases(row)).FindAll(CRMSecurity.CanAccessTo);
|
||||
return sqlResult.OrderBy(cases => cases.Title).ToList();
|
||||
q = q.OrderBy(x => x.Title);
|
||||
|
||||
return q.ToList().ConvertAll(ToCases).FindAll(CRMSecurity.CanAccessTo);
|
||||
}
|
||||
|
||||
|
||||
public virtual List<Cases> GetByID(int[] ids)
|
||||
{
|
||||
return CRMDbContext.Cases
|
||||
@ -619,32 +639,20 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
private Cases ToCases(DbCase dbCase)
|
||||
{
|
||||
if (dbCase == null) return null;
|
||||
|
||||
return new Cases
|
||||
{
|
||||
ID = dbCase.Id,
|
||||
Title = dbCase.Title,
|
||||
CreateBy = dbCase.CreateBy,
|
||||
CreateOn = dbCase.CreateOn,
|
||||
CreateOn = TenantUtil.DateTimeFromUtc(dbCase.CreateOn),
|
||||
IsClosed = dbCase.IsClosed,
|
||||
LastModifedBy = dbCase.LastModifedBy,
|
||||
LastModifedOn = dbCase.LastModifedOn
|
||||
};
|
||||
}
|
||||
|
||||
private SqlQuery GetCasesSqlQuery(Exp where)
|
||||
{
|
||||
|
||||
var sqlQuery = Query("crm_case")
|
||||
.Select("id", "title", "create_by", "create_on", "is_closed");
|
||||
|
||||
if (where != null)
|
||||
{
|
||||
sqlQuery.Where(where);
|
||||
}
|
||||
|
||||
return sqlQuery;
|
||||
}
|
||||
|
||||
public void ReassignCasesResponsible(Guid fromUserId, Guid toUserId)
|
||||
{
|
||||
var cases = GetAllCases();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -23,34 +23,39 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#region Import
|
||||
|
||||
using ASC.Collections;
|
||||
using ASC.Core;
|
||||
using ASC.Core.Common.EF;
|
||||
using ASC.Core.Tenants;
|
||||
using ASC.CRM.Core.EF;
|
||||
using ASC.CRM.Core.Entities;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using ASC.ElasticSearch;
|
||||
using ASC.Web.CRM.Core.Search;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ASC.Collections;
|
||||
using ASC.Common.Data.Sql;
|
||||
using ASC.Common.Data.Sql.Expressions;
|
||||
using ASC.Core.Tenants;
|
||||
using ASC.Common.Data;
|
||||
using ASC.CRM.Core.Entities;
|
||||
using ASC.ElasticSearch;
|
||||
using ASC.Web.CRM.Core.Search;
|
||||
using ASC.CRM.Core.Enums;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
public class CachedContactInfo : ContactInfoDao
|
||||
{
|
||||
private readonly HttpRequestDictionary<ContactInfo> _contactInfoCache = new HttpRequestDictionary<ContactInfo>("crm_contact_info");
|
||||
private readonly HttpRequestDictionary<ContactInfo> _contactInfoCache;
|
||||
|
||||
public CachedContactInfo(int tenantID)
|
||||
: base(tenantID)
|
||||
public CachedContactInfo(
|
||||
DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
TenantUtil tenantUtil,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
: base(
|
||||
dbContextManager,
|
||||
tenantManager,
|
||||
securityContext,
|
||||
tenantUtil)
|
||||
{
|
||||
|
||||
_contactInfoCache = new HttpRequestDictionary<ContactInfo>(httpContextAccessor?.HttpContext, "crm_contact_info");
|
||||
}
|
||||
|
||||
public override ContactInfo GetByID(int id)
|
||||
@ -94,35 +99,56 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public class ContactInfoDao : AbstractDao
|
||||
{
|
||||
public ContactInfoDao(int tenantID)
|
||||
: base(tenantID)
|
||||
public ContactInfoDao(
|
||||
DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
TenantUtil tenantUtil)
|
||||
: base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext)
|
||||
{
|
||||
|
||||
TenantUtil = tenantUtil;
|
||||
}
|
||||
|
||||
TenantUtil TenantUtil { get; }
|
||||
FactoryIndexer<EmailWrapper> emailWrapperIndexer;
|
||||
FactoryIndexer<InfoWrapper> infoWrapperIndexer;
|
||||
|
||||
public virtual ContactInfo GetByID(int id)
|
||||
{
|
||||
var sqlResult = Db.ExecuteList(GetSqlQuery(Exp.Eq("id", id))).ConvertAll(row => ToContactInfo(row));
|
||||
|
||||
if (sqlResult.Count == 0) return null;
|
||||
|
||||
return sqlResult[0];
|
||||
return ToContactInfo(CRMDbContext.ContactsInfo.SingleOrDefault(x => x.Id == id));
|
||||
}
|
||||
|
||||
public virtual void Delete(int id)
|
||||
{
|
||||
Db.ExecuteNonQuery(Delete("crm_contact_info").Where(Exp.Eq("id", id)));
|
||||
FactoryIndexer<InfoWrapper>.DeleteAsync(r => r.Where(a => a.Id, id));
|
||||
var itemToDelete = new DbContactInfo
|
||||
{
|
||||
Id = id
|
||||
};
|
||||
|
||||
CRMDbContext.ContactsInfo.Remove(itemToDelete);
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
infoWrapperIndexer.DeleteAsync(r => r.Where(a => a.Id, id));
|
||||
|
||||
}
|
||||
|
||||
public virtual void DeleteByContact(int contactID)
|
||||
{
|
||||
if (contactID <= 0) return;
|
||||
Db.ExecuteNonQuery(Delete("crm_contact_info").Where(Exp.Eq("contact_id", contactID)));
|
||||
FactoryIndexer<InfoWrapper>.DeleteAsync(r => r.Where(a => a.ContactId, contactID));
|
||||
|
||||
CRMDbContext.RemoveRange(Query(CRMDbContext.ContactsInfo)
|
||||
.Where(x => x.ContactId == contactID));
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
infoWrapperIndexer.DeleteAsync(r => r.Where(a => a.ContactId, contactID));
|
||||
|
||||
var infos = GetList(contactID, ContactInfoType.Email, null, null);
|
||||
FactoryIndexer<EmailWrapper>.Update(new EmailWrapper { Id = contactID, EmailInfoWrapper = infos.Select(r => (EmailInfoWrapper)r).ToList() }, UpdateAction.Replace, r => r.EmailInfoWrapper);
|
||||
|
||||
emailWrapperIndexer.Update(new EmailWrapper { Id = contactID, EmailInfoWrapper = infos.Select(r => (EmailInfoWrapper)r).ToList() }, UpdateAction.Replace, r => r.EmailInfoWrapper);
|
||||
|
||||
}
|
||||
|
||||
public virtual int Update(ContactInfo contactInfo)
|
||||
@ -133,10 +159,10 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
var infos = GetList(contactInfo.ContactID, ContactInfoType.Email, null, null);
|
||||
|
||||
FactoryIndexer<EmailWrapper>.Update(new EmailWrapper { Id = contactInfo.ContactID, EmailInfoWrapper = infos.Select(r => (EmailInfoWrapper)r).ToList() }, UpdateAction.Replace, r => r.EmailInfoWrapper);
|
||||
emailWrapperIndexer.Update(new EmailWrapper { Id = contactInfo.ContactID, EmailInfoWrapper = infos.Select(r => (EmailInfoWrapper)r).ToList() }, UpdateAction.Replace, r => r.EmailInfoWrapper);
|
||||
}
|
||||
|
||||
FactoryIndexer<InfoWrapper>.UpdateAsync(contactInfo);
|
||||
infoWrapperIndexer.UpdateAsync(contactInfo);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -146,16 +172,23 @@ namespace ASC.CRM.Core.Dao
|
||||
if (contactInfo == null || contactInfo.ID == 0 || contactInfo.ContactID == 0)
|
||||
throw new ArgumentException();
|
||||
|
||||
Db.ExecuteNonQuery(Update("crm_contact_info")
|
||||
.Where("id", contactInfo.ID)
|
||||
.Set("data", contactInfo.Data)
|
||||
.Set("category", contactInfo.Category)
|
||||
.Set("is_primary", contactInfo.IsPrimary)
|
||||
.Set("contact_id", contactInfo.ContactID)
|
||||
.Set("type", (int)contactInfo.InfoType)
|
||||
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
|
||||
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
|
||||
);
|
||||
var itemToUpdate = new DbContactInfo
|
||||
{
|
||||
Id = contactInfo.ID,
|
||||
Data = contactInfo.Data,
|
||||
Category = contactInfo.Category,
|
||||
IsPrimary = contactInfo.IsPrimary,
|
||||
ContactId = contactInfo.ContactID,
|
||||
Type = contactInfo.InfoType,
|
||||
LastModifedOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()),
|
||||
LastModifedBy = SecurityContext.CurrentAccount.ID,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.ContactsInfo.Update(itemToUpdate);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
return contactInfo.ID;
|
||||
}
|
||||
|
||||
@ -166,11 +199,11 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
contactInfo.ID = id;
|
||||
|
||||
FactoryIndexer<InfoWrapper>.IndexAsync(contactInfo);
|
||||
infoWrapperIndexer.IndexAsync(contactInfo);
|
||||
|
||||
if (contactInfo.InfoType == ContactInfoType.Email)
|
||||
{
|
||||
FactoryIndexer<EmailWrapper>.Index(new EmailWrapper
|
||||
emailWrapperIndexer.Index(new EmailWrapper
|
||||
{
|
||||
Id = contactInfo.ContactID,
|
||||
TenantId = TenantID,
|
||||
@ -186,16 +219,25 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
private int SaveInDb(ContactInfo contactInfo)
|
||||
{
|
||||
return Db.ExecuteScalar<int>(Insert("crm_contact_info")
|
||||
.InColumnValue("id", 0)
|
||||
.InColumnValue("data", contactInfo.Data)
|
||||
.InColumnValue("category", contactInfo.Category)
|
||||
.InColumnValue("is_primary", contactInfo.IsPrimary)
|
||||
.InColumnValue("contact_id", contactInfo.ContactID)
|
||||
.InColumnValue("type", (int)contactInfo.InfoType)
|
||||
.InColumnValue("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
|
||||
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
|
||||
.Identity(1, 0, true));
|
||||
var itemToInsert = new DbContactInfo
|
||||
{
|
||||
Data = contactInfo.Data,
|
||||
Category = contactInfo.Category,
|
||||
IsPrimary = contactInfo.IsPrimary,
|
||||
ContactId = contactInfo.ContactID,
|
||||
Type = contactInfo.InfoType,
|
||||
LastModifedOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()),
|
||||
LastModifedBy = SecurityContext.CurrentAccount.ID,
|
||||
TenantId = TenantID
|
||||
|
||||
};
|
||||
|
||||
CRMDbContext.Add(itemToInsert);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
return itemToInsert.Id;
|
||||
|
||||
}
|
||||
|
||||
public List<String> GetListData(int contactID, ContactInfoType infoType)
|
||||
@ -210,131 +252,105 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public List<ContactInfo> GetAll(int[] contactID)
|
||||
{
|
||||
|
||||
if (contactID == null || contactID.Length == 0) return null;
|
||||
|
||||
SqlQuery sqlQuery = GetSqlQuery(null);
|
||||
|
||||
sqlQuery.Where(Exp.In("contact_id", contactID));
|
||||
|
||||
return Db.ExecuteList(sqlQuery).ConvertAll(row => ToContactInfo(row));
|
||||
return Query(CRMDbContext.ContactsInfo)
|
||||
.Where(x => contactID.Contains(x.ContactId))
|
||||
.ToList().ConvertAll(ToContactInfo);
|
||||
}
|
||||
|
||||
public virtual List<ContactInfo> GetList(int contactID, ContactInfoType? infoType, int? categoryID, bool? isPrimary)
|
||||
{
|
||||
SqlQuery sqlQuery = GetSqlQuery(null);
|
||||
var items = Query(CRMDbContext.ContactsInfo);
|
||||
|
||||
if (contactID > 0)
|
||||
sqlQuery.Where(Exp.Eq("contact_id", contactID));
|
||||
items = items.Where(x => x.ContactId == contactID);
|
||||
|
||||
if (infoType.HasValue)
|
||||
sqlQuery.Where(Exp.Eq("type", infoType.Value));
|
||||
items = items.Where(x => x.Type == infoType.Value);
|
||||
|
||||
if (categoryID.HasValue)
|
||||
sqlQuery.Where(Exp.Eq("category", categoryID.Value));
|
||||
items = items.Where(x => x.Category == categoryID.Value);
|
||||
|
||||
if (isPrimary.HasValue)
|
||||
sqlQuery.Where(Exp.Eq("is_primary", isPrimary.Value));
|
||||
items = items.Where(x => x.IsPrimary == isPrimary.Value);
|
||||
|
||||
sqlQuery.OrderBy("type", true);
|
||||
// sqlQuery.OrderBy("category", true);
|
||||
// sqlQuery.OrderBy("is_primary", true);
|
||||
items = items.OrderBy(x => x.Type);
|
||||
|
||||
|
||||
return Db.ExecuteList(sqlQuery).ConvertAll(row => ToContactInfo(row));
|
||||
return items.ToList().ConvertAll(row => ToContactInfo(row));
|
||||
}
|
||||
|
||||
|
||||
public int[] UpdateList(List<ContactInfo> items, Contact contact = null)
|
||||
{
|
||||
|
||||
if (items == null || items.Count == 0) return null;
|
||||
|
||||
var result = new List<int>();
|
||||
|
||||
using (var tx = Db.BeginTransaction(true))
|
||||
{
|
||||
foreach (var contactInfo in items)
|
||||
result.Add(UpdateInDb(contactInfo));
|
||||
|
||||
|
||||
tx.Commit();
|
||||
}
|
||||
|
||||
var tx = CRMDbContext.Database.BeginTransaction();
|
||||
|
||||
foreach (var contactInfo in items)
|
||||
result.Add(UpdateInDb(contactInfo));
|
||||
|
||||
tx.Commit();
|
||||
|
||||
if (contact != null)
|
||||
{
|
||||
FactoryIndexer<EmailWrapper>.IndexAsync(EmailWrapper.ToEmailWrapper(contact, items.Where(r => r.InfoType == ContactInfoType.Email).ToList()));
|
||||
emailWrapperIndexer.IndexAsync(EmailWrapper.ToEmailWrapper(contact, items.Where(r => r.InfoType == ContactInfoType.Email).ToList()));
|
||||
|
||||
foreach (var item in items.Where(r => r.InfoType != ContactInfoType.Email))
|
||||
{
|
||||
FactoryIndexer<InfoWrapper>.IndexAsync(item);
|
||||
infoWrapperIndexer.IndexAsync(item);
|
||||
}
|
||||
}
|
||||
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public int[] SaveList(List<ContactInfo> items, Contact contact = null)
|
||||
{
|
||||
if (items == null || items.Count == 0) return null;
|
||||
|
||||
var result = new List<int>();
|
||||
|
||||
var tx = CRMDbContext.Database.BeginTransaction();
|
||||
|
||||
using (var tx = Db.BeginTransaction(true))
|
||||
foreach (var contactInfo in items)
|
||||
{
|
||||
foreach (var contactInfo in items)
|
||||
{
|
||||
var contactInfoId = SaveInDb(contactInfo);
|
||||
contactInfo.ID = contactInfoId;
|
||||
result.Add(contactInfoId);
|
||||
}
|
||||
|
||||
|
||||
tx.Commit();
|
||||
var contactInfoId = SaveInDb(contactInfo);
|
||||
contactInfo.ID = contactInfoId;
|
||||
result.Add(contactInfoId);
|
||||
}
|
||||
|
||||
tx.Commit();
|
||||
|
||||
if (contact != null)
|
||||
{
|
||||
FactoryIndexer<EmailWrapper>.IndexAsync(EmailWrapper.ToEmailWrapper(contact, items.Where(r => r.InfoType == ContactInfoType.Email).ToList()));
|
||||
emailWrapperIndexer.IndexAsync(EmailWrapper.ToEmailWrapper(contact, items.Where(r => r.InfoType == ContactInfoType.Email).ToList()));
|
||||
|
||||
foreach (var item in items.Where(r => r.InfoType != ContactInfoType.Email))
|
||||
{
|
||||
FactoryIndexer<InfoWrapper>.IndexAsync(item);
|
||||
infoWrapperIndexer.IndexAsync(item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
protected static ContactInfo ToContactInfo(object[] row)
|
||||
protected static ContactInfo ToContactInfo(DbContactInfo dbContactInfo)
|
||||
{
|
||||
if (dbContactInfo == null) return null;
|
||||
|
||||
return new ContactInfo
|
||||
{
|
||||
ID = Convert.ToInt32(row[0]),
|
||||
Category = Convert.ToInt32(row[1]),
|
||||
Data = row[2].ToString(),
|
||||
InfoType = (ContactInfoType)Convert.ToInt32(row[3]),
|
||||
IsPrimary = Convert.ToBoolean(row[4]),
|
||||
ContactID = Convert.ToInt32(row[5])
|
||||
ID = dbContactInfo.Id,
|
||||
Category = dbContactInfo.Category,
|
||||
ContactID = dbContactInfo.ContactId,
|
||||
Data = dbContactInfo.Data,
|
||||
InfoType = dbContactInfo.Type,
|
||||
IsPrimary = dbContactInfo.IsPrimary
|
||||
};
|
||||
}
|
||||
|
||||
private SqlQuery GetSqlQuery(Exp where)
|
||||
{
|
||||
var sqlQuery = Query("crm_contact_info")
|
||||
.Select("id",
|
||||
"category",
|
||||
"data",
|
||||
"type",
|
||||
"is_primary",
|
||||
"contact_id");
|
||||
|
||||
if (where != null)
|
||||
sqlQuery.Where(where);
|
||||
|
||||
return sqlQuery;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -35,8 +35,7 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
public class CurrencyInfoDao : AbstractDao
|
||||
{
|
||||
|
||||
|
||||
|
||||
public CurrencyInfoDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext):
|
||||
|
@ -47,7 +47,7 @@ namespace ASC.CRM.Core.Dao
|
||||
DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
TenantUtil tenantUtil
|
||||
TenantUtil tenantUtil
|
||||
) :
|
||||
base(dbContextManager,
|
||||
tenantManager,
|
||||
@ -90,7 +90,7 @@ namespace ASC.CRM.Core.Dao
|
||||
throw new ArgumentException();
|
||||
|
||||
fieldValue = fieldValue.Trim();
|
||||
|
||||
|
||||
var itemToDelete = Query(CRMDbContext.FieldValue)
|
||||
.Where(x => x.EntityId == entityID && x.EntityType == entityType && x.FieldId == fieldID);
|
||||
|
||||
@ -100,17 +100,22 @@ namespace ASC.CRM.Core.Dao
|
||||
if (!String.IsNullOrEmpty(fieldValue))
|
||||
{
|
||||
var lastModifiedOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow());
|
||||
|
||||
var id = Db.ExecuteScalar<int>(
|
||||
Insert("crm_field_value")
|
||||
.InColumnValue("id", 0)
|
||||
.InColumnValue("entity_id", entityID)
|
||||
.InColumnValue("value", fieldValue)
|
||||
.InColumnValue("field_id", fieldID)
|
||||
.InColumnValue("entity_type", (int)entityType)
|
||||
.InColumnValue("last_modifed_on", lastModifiedOn)
|
||||
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
|
||||
.Identity(1, 0, true));
|
||||
|
||||
var dbFieldValue = new DbFieldValue
|
||||
{
|
||||
EntityId = entityID,
|
||||
Value = fieldValue,
|
||||
FieldId = fieldID,
|
||||
EntityType = entityType,
|
||||
LastModifedOn = lastModifiedOn,
|
||||
LastModifedBy = SecurityContext.CurrentAccount.ID,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.Add(dbFieldValue);
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
var id = dbFieldValue.Id;
|
||||
|
||||
FactoryIndexer.IndexAsync(new FieldsWrapper
|
||||
{
|
||||
@ -225,14 +230,14 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
var sortOrder = Query(CRMDbContext.FieldDescription).Select(x => x.SortOrder).Max() + 1;
|
||||
|
||||
var itemToInsert = new DbFieldDescription
|
||||
var itemToInsert = new DbFieldDescription
|
||||
{
|
||||
Label = label,
|
||||
Type = customFieldType,
|
||||
Mask = resultMask,
|
||||
SortOrder = sortOrder,
|
||||
EntityType = entityType,
|
||||
TenantId = TenantID
|
||||
Label = label,
|
||||
Type = customFieldType,
|
||||
Mask = resultMask,
|
||||
SortOrder = sortOrder,
|
||||
EntityType = entityType,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.FieldDescription.Add(itemToInsert);
|
||||
@ -244,32 +249,36 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public String GetValue(EntityType entityType, int entityID, int fieldID)
|
||||
{
|
||||
var sqlQuery = Query(CRMDbContext.FieldValue).Where(x => x.FieldId == fieldID && x.EntityId == entityID);
|
||||
|
||||
Query(CRMDbContext.FieldValue).Where(x => x.FieldId == fieldID && x.EntityId == entityID);
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType || x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType);
|
||||
}
|
||||
|
||||
|
||||
var sqlQuery = Query("crm_field_value")
|
||||
.Select("value")
|
||||
.Where(Exp.Eq("field_id", fieldID)
|
||||
& BuildEntityTypeConditions(entityType, "entity_type")
|
||||
& Exp.Eq("entity_id", entityID));
|
||||
|
||||
return Db.ExecuteScalar<String>(sqlQuery);
|
||||
return sqlQuery.Select(x => x.Value).FirstOrDefault();
|
||||
}
|
||||
|
||||
public List<Int32> GetEntityIds(EntityType entityType, int fieldID, String fieldValue)
|
||||
{
|
||||
var sqlQuery = Query(CRMDbContext.FieldValue)
|
||||
.Where(x => x.FieldId == fieldID && String.Compare(x.Value, fieldValue, true) == 0);
|
||||
|
||||
Query(CRMDbContext.FieldValue).Where(x => x.FieldId == fieldID && String.Compare(x.Value, fieldValue, true) == 0);
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType || x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType);
|
||||
}
|
||||
|
||||
|
||||
var sqlQuery = Query("crm_field_value")
|
||||
.Select("entity_id")
|
||||
.Where(Exp.Eq("field_id", fieldID)
|
||||
& BuildEntityTypeConditions(entityType, "entity_type")
|
||||
& Exp.Eq("value", fieldValue));
|
||||
|
||||
return Db.ExecuteList(sqlQuery).ConvertAll(row => Convert.ToInt32(row[0]));
|
||||
return sqlQuery.Select(x => x.EntityId).ToList();
|
||||
}
|
||||
|
||||
public bool IsExist(int id)
|
||||
@ -279,14 +288,23 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public int GetFieldId(EntityType entityType, String label, CustomFieldType customFieldType)
|
||||
{
|
||||
var result = Db.ExecuteList(GetFieldDescriptionSqlQuery(
|
||||
Exp.Eq("type", (int)customFieldType)
|
||||
& BuildEntityTypeConditions(entityType, "entity_type")
|
||||
& Exp.Eq("label", label))).ConvertAll(row => ToCustomField(row));
|
||||
var sqlQuery = Query(CRMDbContext.FieldDescription).Where(x => x.Type == customFieldType && x.Label == label);
|
||||
|
||||
if (result.Count == 0) return 0;
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType || x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType);
|
||||
}
|
||||
|
||||
else return result[0].ID;
|
||||
|
||||
var result = sqlQuery.FirstOrDefault();
|
||||
|
||||
if (result == null) return 0;
|
||||
|
||||
return result.Id;
|
||||
}
|
||||
|
||||
public void EditItem(CustomField customField)
|
||||
@ -300,12 +318,10 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
var resultMask = "";
|
||||
|
||||
var row = Db.ExecuteList(Query("crm_field_description")
|
||||
.Where(Exp.Eq("id", customField.ID))
|
||||
.Select("type", "mask")).FirstOrDefault();
|
||||
var row = Query(CRMDbContext.FieldDescription).Where(x => x.Id == customField.ID).Select(x => new { x.Type, x.Mask }).Single();
|
||||
|
||||
var fieldType = (CustomFieldType)Convert.ToInt32(row[0]);
|
||||
var oldMask = Convert.ToString(row[1]);
|
||||
var fieldType = row.Type;
|
||||
var oldMask = row.Mask;
|
||||
|
||||
if (fieldType == CustomFieldType.SelectBox)
|
||||
{
|
||||
@ -345,23 +361,27 @@ namespace ASC.CRM.Core.Dao
|
||||
throw ex;
|
||||
}
|
||||
|
||||
Db.ExecuteNonQuery(
|
||||
Update("crm_field_description")
|
||||
.Set("label", customField.Label)
|
||||
.Set("mask", customField.Mask)
|
||||
.Where(Exp.Eq("id", customField.ID)));
|
||||
var itemToUpdate = Query(CRMDbContext.FieldDescription).FirstOrDefault(x => x.Id == customField.ID);
|
||||
|
||||
itemToUpdate.Label = customField.Label;
|
||||
itemToUpdate.Mask = customField.Mask;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var resultMask = GetValidMask(customField.FieldType, customField.Mask);
|
||||
|
||||
Db.ExecuteNonQuery(
|
||||
Update("crm_field_description")
|
||||
.Set("label", customField.Label)
|
||||
.Set("type", (int)customField.FieldType)
|
||||
.Set("mask", resultMask)
|
||||
.Where(Exp.Eq("id", customField.ID)));
|
||||
|
||||
|
||||
var itemToUpdate = Query(CRMDbContext.FieldDescription).FirstOrDefault(x => x.Id == customField.ID);
|
||||
|
||||
itemToUpdate.Label = customField.Label;
|
||||
itemToUpdate.Type = customField.FieldType;
|
||||
itemToUpdate.Mask = customField.Mask;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
@ -390,17 +410,24 @@ namespace ASC.CRM.Core.Dao
|
||||
if (!_supportedEntityType.Contains(entityType))
|
||||
throw new ArgumentException();
|
||||
|
||||
var sqlQuery = Query("crm_field_description tblFD")
|
||||
.Select("count(tblFV.field_id)")
|
||||
.LeftOuterJoin("crm_field_value tblFV", Exp.EqColumns("tblFD.id", "tblFV.field_id"))
|
||||
.OrderBy("tblFD.sort_order", true)
|
||||
.GroupBy("tblFD.id");
|
||||
var sqlQuery = Query(CRMDbContext.FieldDescription).GroupJoin(Query(CRMDbContext.FieldValue),
|
||||
x => x.Id,
|
||||
y => y.FieldId,
|
||||
(x, y) => new { x = x, count = y.Count() }
|
||||
);
|
||||
|
||||
sqlQuery.Where(BuildEntityTypeConditions(entityType, "tblFD.entity_type"));
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType || x.x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType);
|
||||
}
|
||||
|
||||
var queryResult = Db.ExecuteList(sqlQuery);
|
||||
sqlQuery = sqlQuery.OrderBy(x => x.x.SortOrder);
|
||||
|
||||
return JsonConvert.SerializeObject(queryResult.ConvertAll(row => row[0]));
|
||||
return JsonConvert.SerializeObject(sqlQuery.Select(x => x.count).ToList());
|
||||
}
|
||||
|
||||
public int GetContactLinkCount(EntityType entityType, int entityID)
|
||||
@ -408,17 +435,25 @@ namespace ASC.CRM.Core.Dao
|
||||
if (!_supportedEntityType.Contains(entityType))
|
||||
throw new ArgumentException();
|
||||
|
||||
Query();
|
||||
|
||||
var sqlQuery = Query("crm_field_description tblFD")
|
||||
.Select("count(tblFV.field_id)")
|
||||
.LeftOuterJoin("crm_field_value tblFV", Exp.EqColumns("tblFD.id", "tblFV.field_id"))
|
||||
.Where(Exp.Eq("tblFD.id", entityID))
|
||||
.OrderBy("tblFD.sort_order", true);
|
||||
var sqlQuery = Query(CRMDbContext.FieldDescription).GroupJoin(Query(CRMDbContext.FieldValue),
|
||||
x => x.Id,
|
||||
y => y.FieldId,
|
||||
(x, y) => new { x = x, count = y.Count() }
|
||||
);
|
||||
|
||||
sqlQuery.Where(BuildEntityTypeConditions(entityType, "tblFD.entity_type"));
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType || x.x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType);
|
||||
}
|
||||
|
||||
return Db.ExecuteScalar<int>(sqlQuery);
|
||||
sqlQuery = sqlQuery.Where(x => x.x.Id == entityID);
|
||||
sqlQuery = sqlQuery.OrderBy(x => x.x.SortOrder);
|
||||
|
||||
return sqlQuery.Single().count;
|
||||
}
|
||||
|
||||
public List<CustomField> GetEnityFields(EntityType entityType, int entityID, bool includeEmptyFields)
|
||||
@ -434,59 +469,44 @@ namespace ASC.CRM.Core.Dao
|
||||
private List<CustomField> GetEnityFields(EntityType entityType, int[] entityID, bool includeEmptyFields)
|
||||
{
|
||||
// TODO: Refactoring Query!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
if (!_supportedEntityType.Contains(entityType))
|
||||
throw new ArgumentException();
|
||||
|
||||
SqlQuery sqlQuery = Query("crm_field_description tbl_field")
|
||||
.Select("tbl_field.id",
|
||||
"tbl_field_value.entity_id",
|
||||
"tbl_field.label",
|
||||
"tbl_field_value.value",
|
||||
"tbl_field.type",
|
||||
"tbl_field.sort_order",
|
||||
"tbl_field.mask",
|
||||
"tbl_field.entity_type");
|
||||
var sqlQuery = Query(CRMDbContext.FieldDescription).GroupJoin(Query(CRMDbContext.FieldValue),
|
||||
x => x.Id,
|
||||
y => y.FieldId,
|
||||
(x, y) => new { x, y }
|
||||
).SelectMany(x => x.y.DefaultIfEmpty(), (x, y) => new { x.x, y });
|
||||
|
||||
sqlQuery.Where(BuildEntityTypeConditions(entityType, "tbl_field.entity_type"));
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType || x.x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.x.EntityType == entityType);
|
||||
}
|
||||
|
||||
if (entityID != null && entityID.Length > 0)
|
||||
sqlQuery.LeftOuterJoin("crm_field_value tbl_field_value",
|
||||
Exp.EqColumns("tbl_field_value.field_id", "tbl_field.id") &
|
||||
Exp.In("tbl_field_value.entity_id", entityID))
|
||||
.OrderBy("tbl_field.sort_order", true);
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => entityID.Contains(x.y.EntityId));
|
||||
sqlQuery = sqlQuery.OrderBy(x => x.x.SortOrder);
|
||||
}
|
||||
else
|
||||
sqlQuery.LeftOuterJoin("crm_field_value tbl_field_value",
|
||||
Exp.EqColumns("tbl_field_value.field_id", "tbl_field.id"))
|
||||
.Where(Exp.Eq("tbl_field_value.tenant_id", TenantID))
|
||||
.OrderBy("tbl_field_value.entity_id", true)
|
||||
.OrderBy("tbl_field.sort_order", true);
|
||||
{
|
||||
sqlQuery = sqlQuery.OrderBy(x => x.y.EntityId);
|
||||
sqlQuery = sqlQuery.OrderBy(x => x.x.SortOrder);
|
||||
}
|
||||
|
||||
if (!includeEmptyFields)
|
||||
return Db.ExecuteList(sqlQuery)
|
||||
.ConvertAll(row => ToCustomField(row)).FindAll(item =>
|
||||
{
|
||||
if (item.FieldType == CustomFieldType.Heading)
|
||||
return true;
|
||||
sqlQuery = sqlQuery.Where(x => x.y != null && x.x.Type == CustomFieldType.Heading);
|
||||
|
||||
return !String.IsNullOrEmpty(item.Value.Trim());
|
||||
|
||||
}).ToList();
|
||||
|
||||
return Db.ExecuteList(sqlQuery)
|
||||
.ConvertAll(row => ToCustomField(row));
|
||||
return sqlQuery.ToList().ConvertAll(x => ToCustomField(x.x, x.y));
|
||||
}
|
||||
|
||||
public CustomField GetFieldDescription(int fieldID)
|
||||
{
|
||||
|
||||
var sqlQuery = GetFieldDescriptionSqlQuery(null);
|
||||
|
||||
sqlQuery.Where(Exp.Eq("id", fieldID));
|
||||
|
||||
var fields = Db.ExecuteList(sqlQuery).ConvertAll(row => ToCustomField(row));
|
||||
|
||||
return fields.Count == 0 ? null : fields[0];
|
||||
return ToCustomField(Query(CRMDbContext.FieldDescription).FirstOrDefault(x => x.Id == fieldID));
|
||||
}
|
||||
|
||||
public List<CustomField> GetFieldsDescription(EntityType entityType)
|
||||
@ -494,46 +514,18 @@ namespace ASC.CRM.Core.Dao
|
||||
if (!_supportedEntityType.Contains(entityType))
|
||||
throw new ArgumentException();
|
||||
|
||||
SqlQuery sqlQuery = GetFieldDescriptionSqlQuery(null);
|
||||
var sqlQuery = Query(CRMDbContext.FieldDescription);
|
||||
|
||||
sqlQuery.Where(BuildEntityTypeConditions(entityType, "entity_type"));
|
||||
|
||||
return Db.ExecuteList(sqlQuery)
|
||||
.ConvertAll(row => ToCustomField(row));
|
||||
}
|
||||
|
||||
private SqlQuery GetFieldDescriptionSqlQuery(Exp where)
|
||||
{
|
||||
var sqlQuery = Query("crm_field_description")
|
||||
.Select("id",
|
||||
"-1",
|
||||
"label",
|
||||
"\" \"",
|
||||
"type",
|
||||
"sort_order",
|
||||
"mask",
|
||||
"entity_type")
|
||||
.OrderBy("sort_order", true);
|
||||
|
||||
if (where != null)
|
||||
sqlQuery.Where(where);
|
||||
|
||||
return sqlQuery;
|
||||
}
|
||||
|
||||
private Exp BuildEntityTypeConditions(EntityType entityType, String dbFieldName)
|
||||
{
|
||||
switch (entityType)
|
||||
if (entityType == EntityType.Company || entityType == EntityType.Person)
|
||||
{
|
||||
case EntityType.Company:
|
||||
case EntityType.Person:
|
||||
return Exp.In(dbFieldName, new[] { (int)entityType, (int)EntityType.Contact });
|
||||
|
||||
default:
|
||||
return Exp.Eq(dbFieldName, (int)entityType);
|
||||
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType || x.EntityType == EntityType.Contact);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = sqlQuery.Where(x => x.EntityType == entityType);
|
||||
}
|
||||
|
||||
return sqlQuery.ToList().ConvertAll(x => ToCustomField(x));
|
||||
}
|
||||
|
||||
public void DeleteField(int fieldID)
|
||||
@ -554,26 +546,32 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
tx.Commit();
|
||||
tx.Commit();
|
||||
}
|
||||
|
||||
public static CustomField ToCustomField(DbFieldDescription dbFieldDescription,
|
||||
DbFieldValue dbFieldValue)
|
||||
public CustomField ToCustomField(DbFieldDescription dbFieldDescription,
|
||||
DbFieldValue dbFieldValue = null)
|
||||
{
|
||||
if (dbFieldDescription == null || dbFieldValue == null) return null;
|
||||
|
||||
var customField = new CustomField
|
||||
{
|
||||
ID = dbFieldDescription.Id,
|
||||
EntityType = dbFieldDescription.EntityType,
|
||||
FieldType = dbFieldDescription.Type,
|
||||
Label = dbFieldDescription.Label,
|
||||
Mask = dbFieldDescription.Mask,
|
||||
Position = dbFieldDescription.SortOrder
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new CustomField
|
||||
//{
|
||||
// ID = Convert.ToInt32(row[0]),
|
||||
// EntityID = Convert.ToInt32(row[1]),
|
||||
// EntityType = (EntityType)Convert.ToInt32(row[7]),
|
||||
// Label = Convert.ToString(row[2]),
|
||||
// Value = Convert.ToString(row[3]),
|
||||
// FieldType = (CustomFieldType)Convert.ToInt32(row[4]),
|
||||
// Position = Convert.ToInt32(row[5]),
|
||||
// Mask = Convert.ToString(row[6])
|
||||
//};
|
||||
};
|
||||
|
||||
if (dbFieldValue != null)
|
||||
{
|
||||
dbFieldValue.Value = dbFieldValue.Value;
|
||||
dbFieldValue.EntityId = dbFieldValue.EntityId;
|
||||
}
|
||||
|
||||
return customField;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,9 +98,7 @@ namespace ASC.CRM.Core.Dao
|
||||
}
|
||||
|
||||
public class DealDao : AbstractDao
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
{
|
||||
public DealDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
@ -121,10 +119,7 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public AuthorizationManager AuthorizationManager { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
|
||||
public void AddMember(int dealID, int memberID)
|
||||
{
|
||||
SetRelative(memberID, EntityType.Opportunity, dealID);
|
||||
|
@ -33,6 +33,7 @@ using ASC.CRM.Core.EF;
|
||||
using ASC.CRM.Core.Entities;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using ASC.CRM.Resources;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -43,19 +44,18 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
public class CachedDealMilestoneDao : DealMilestoneDao
|
||||
{
|
||||
private readonly HttpRequestDictionary<DealMilestone> _dealMilestoneCache =
|
||||
new HttpRequestDictionary<DealMilestone>("crm_deal_milestone");
|
||||
private readonly HttpRequestDictionary<DealMilestone> _dealMilestoneCache;
|
||||
|
||||
public CachedDealMilestoneDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext)
|
||||
SecurityContext securityContext,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
: base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext)
|
||||
{
|
||||
|
||||
|
||||
|
||||
_dealMilestoneCache = new HttpRequestDictionary<DealMilestone>(httpContextAccessor?.HttpContext, "crm_deal_milestone");
|
||||
}
|
||||
|
||||
private void ResetCache(int id)
|
||||
@ -147,30 +147,12 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public Dictionary<int, int> GetRelativeItemsCount()
|
||||
{
|
||||
var sqlQuery = Query(CRMDbContext.DealMilestones)
|
||||
.GroupJoin(CRMDbContext.Deals,
|
||||
return Query(CRMDbContext.DealMilestones).GroupJoin(CRMDbContext.Deals,
|
||||
x => x.Id,
|
||||
x => x.DealMilestoneId,
|
||||
(x,y) =>
|
||||
{
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
throw new Exception();
|
||||
|
||||
//var sqlQuery = Query("crm_deal_milestone tbl_deal_milestone")
|
||||
// .Select("tbl_deal_milestone.id")
|
||||
// .OrderBy("tbl_deal_milestone.sort_order", true)
|
||||
// .GroupBy("tbl_deal_milestone.id");
|
||||
|
||||
//sqlQuery.LeftOuterJoin("crm_deal tbl_crm_deal",
|
||||
// Exp.EqColumns("tbl_deal_milestone.id", "tbl_crm_deal.deal_milestone_id"))
|
||||
// .Select("count(tbl_crm_deal.deal_milestone_id)");
|
||||
|
||||
//var queryResult = Db.ExecuteList(sqlQuery);
|
||||
//return queryResult.ToDictionary(x => Convert.ToInt32(x[0]), y => Convert.ToInt32(y[1]));
|
||||
x => x.DealMilestoneId,
|
||||
(x, y) => new { x = x, count = y.Count() })
|
||||
.OrderBy(x => x.x.SortOrder)
|
||||
.ToDictionary(x => x.x.Id, y => y.count);
|
||||
}
|
||||
|
||||
public int GetRelativeItemsCount(int id)
|
||||
@ -215,10 +197,15 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public virtual void ChangeColor(int id, String newColor)
|
||||
{
|
||||
var item = CRMDbContext.DealMilestones.First(x => x.Id == id);
|
||||
|
||||
item.Color = newColor;
|
||||
var itemToUpdate = new DbDealMilestone
|
||||
{
|
||||
Id = id,
|
||||
Color = newColor,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.Attach(itemToUpdate);
|
||||
CRMDbContext.Entry(itemToUpdate).Property(x => x.Color).IsModified = true;
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
@ -252,9 +239,13 @@ namespace ASC.CRM.Core.Dao
|
||||
if (HaveContactLink(id))
|
||||
throw new ArgumentException(String.Format("{0}. {1}.", CRMErrorsResource.BasicCannotBeDeleted, CRMErrorsResource.DealMilestoneHasRelatedDeals));
|
||||
|
||||
var item = CRMDbContext.DealMilestones.First(x => x.Id == id);
|
||||
var dbDealMilestones = new DbDealMilestone
|
||||
{
|
||||
Id = id,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.DealMilestones.Remove(item);
|
||||
CRMDbContext.DealMilestones.Remove(dbDealMilestones);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
@ -273,12 +264,14 @@ namespace ASC.CRM.Core.Dao
|
||||
public List<DealMilestone> GetAll(int[] id)
|
||||
{
|
||||
return Query(CRMDbContext.DealMilestones)
|
||||
.Where(x => id.Contains(x.Id)).ToList().ConvertAll(ToDealMilestone);
|
||||
.OrderBy(x => x.SortOrder)
|
||||
.Where(x => id.Contains(x.Id)).ToList().ConvertAll(ToDealMilestone);
|
||||
}
|
||||
|
||||
public List<DealMilestone> GetAll()
|
||||
{
|
||||
return Query(CRMDbContext.DealMilestones)
|
||||
.OrderBy(x => x.SortOrder)
|
||||
.ToList()
|
||||
.ConvertAll(ToDealMilestone);
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public List<int> GetEventsByFile(int id)
|
||||
{
|
||||
var tagdao = FilesIntegration.GetTagDao();
|
||||
var tagdao = FilesIntegration.TagDao();
|
||||
var tags = tagdao.GetTags(id, FileEntryType.File, TagType.System).ToList().FindAll(tag => tag.TagName.StartsWith("RelationshipEvent_"));
|
||||
|
||||
return tags.Select(item => Convert.ToInt32(item.TagName.Split(new[] { '_' })[1])).ToList();
|
||||
|
@ -34,6 +34,7 @@ using ASC.CRM.Core.Enums;
|
||||
using ASC.ElasticSearch;
|
||||
using ASC.Web.CRM.Classes;
|
||||
using ASC.Web.CRM.Core.Search;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -47,17 +48,19 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
public class CachedInvoiceDao : InvoiceDao
|
||||
{
|
||||
private readonly HttpRequestDictionary<Invoice> _invoiceCache = new HttpRequestDictionary<Invoice>("crm_invoice");
|
||||
private readonly HttpRequestDictionary<Invoice> _invoiceCache;
|
||||
|
||||
public CachedInvoiceDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
FactoryIndexer<InvoicesWrapper> factoryIndexer)
|
||||
FactoryIndexer<InvoicesWrapper> factoryIndexer,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
: base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext,
|
||||
factoryIndexer)
|
||||
{
|
||||
_invoiceCache = new HttpRequestDictionary<Invoice>(httpContextAccessor?.HttpContext, "crm_invoice");
|
||||
}
|
||||
|
||||
public override Invoice GetByID(int invoiceID)
|
||||
|
@ -31,6 +31,7 @@ using ASC.CRM.Core.EF;
|
||||
using ASC.CRM.Core.Entities;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using ASC.CRM.Resources;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
@ -43,8 +44,13 @@ namespace ASC.CRM.Core.Dao
|
||||
{
|
||||
private readonly HttpRequestDictionary<ListItem> _listItemCache = new HttpRequestDictionary<ListItem>("crm_list_item");
|
||||
|
||||
public CachedListItem(int tenantID)
|
||||
: base(tenantID)
|
||||
public CachedListItem(
|
||||
DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext)
|
||||
: base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext)
|
||||
{
|
||||
|
||||
|
||||
@ -210,13 +216,13 @@ namespace ASC.CRM.Core.Dao
|
||||
public virtual ListItem GetByID(int id)
|
||||
{
|
||||
if (id < 0) return GetSystemListItem(id);
|
||||
|
||||
return ToListItem(Query(CRMDbContext.ListItem).FirstOrDefault(x => x.Id == id));
|
||||
|
||||
return ToListItem(Query(CRMDbContext.ListItem).FirstOrDefault(x => x.Id == id));
|
||||
}
|
||||
|
||||
public virtual List<ListItem> GetItems(int[] id)
|
||||
{
|
||||
var sqlResult = Db.ExecuteList(GetListItemSqlQuery(Exp.In("id", id))).ConvertAll(ToListItem);
|
||||
var sqlResult = CRMDbContext.ListItem.Where(x => id.Contains(x.Id)).ToList().ConvertAll(ToListItem);
|
||||
|
||||
var systemItem = id.Where(item => item < 0).Select(GetSystemListItem);
|
||||
|
||||
@ -233,21 +239,28 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public virtual void ChangeColor(int id, string newColor)
|
||||
{
|
||||
Db.ExecuteNonQuery(Update("crm_list_item")
|
||||
.Set("color", newColor)
|
||||
.Where(Exp.Eq("id", id)));
|
||||
var listItem = new DbListItem
|
||||
{
|
||||
Id = id,
|
||||
Color = newColor
|
||||
};
|
||||
|
||||
|
||||
CRMDbContext.Attach(listItem);
|
||||
CRMDbContext.Entry(listItem).Property("Color").IsModified = true;
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
public NameValueCollection GetColors(ListType listType)
|
||||
{
|
||||
var where = Exp.Eq("list_type", (int)listType);
|
||||
|
||||
var result = new NameValueCollection();
|
||||
|
||||
Db.ExecuteList(Query("crm_list_item")
|
||||
.Select("id", "color")
|
||||
.Where(where))
|
||||
.ForEach(row => result.Add(row[0].ToString(), row[1].ToString()));
|
||||
Query(CRMDbContext.ListItem)
|
||||
.Where(x => x.ListType == listType)
|
||||
.Select(x => new { x.Id, x.Color })
|
||||
.ToList()
|
||||
.ForEach(x => result.Add(x.Id.ToString(), x.Color.ToString()));
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
@ -260,43 +273,35 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public int GetRelativeItemsCount(ListType listType, int id)
|
||||
{
|
||||
|
||||
SqlQuery sqlQuery;
|
||||
|
||||
|
||||
int result;
|
||||
|
||||
switch (listType)
|
||||
{
|
||||
case ListType.ContactStatus:
|
||||
sqlQuery = Query("crm_contact")
|
||||
.Select("count(*)")
|
||||
.Where(Exp.Eq("status_id", id));
|
||||
result = Query(CRMDbContext.Contacts).Where(x => x.StatusId == id).Count();
|
||||
break;
|
||||
case ListType.ContactType:
|
||||
sqlQuery = Query("crm_contact")
|
||||
.Select("count(*)")
|
||||
.Where(Exp.Eq("contact_type_id", id));
|
||||
result = Query(CRMDbContext.Contacts).Where(x => x.ContactTypeId == id).Count();
|
||||
break;
|
||||
case ListType.TaskCategory:
|
||||
sqlQuery = Query("crm_task")
|
||||
.Select("count(*)")
|
||||
.Where(Exp.Eq("category_id", id));
|
||||
result = Query(CRMDbContext.Tasks).Where(x => x.CategoryId == id).Count();
|
||||
break;
|
||||
case ListType.HistoryCategory:
|
||||
sqlQuery = Query("crm_relationship_event")
|
||||
.Select("count(*)")
|
||||
.Where(Exp.Eq("category_id", id));
|
||||
|
||||
result = Query(CRMDbContext.RelationshipEvent).Where(x => x.CategoryId == id).Count();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentException();
|
||||
|
||||
}
|
||||
|
||||
return Db.ExecuteScalar<int>(sqlQuery);
|
||||
return result;
|
||||
}
|
||||
|
||||
public Dictionary<int, int> GetRelativeItemsCount(ListType listType)
|
||||
{
|
||||
|
||||
|
||||
|
||||
var sqlQuery = Query("crm_list_item tbl_list_item")
|
||||
.Where(Exp.Eq("tbl_list_item.list_type", (int)listType))
|
||||
.Select("tbl_list_item.id")
|
||||
@ -361,26 +366,32 @@ namespace ASC.CRM.Core.Dao
|
||||
var sortOrder = enumItem.SortOrder;
|
||||
|
||||
if (sortOrder == 0)
|
||||
sortOrder = Db.ExecuteScalar<int>(Query("crm_list_item")
|
||||
.Where(Exp.Eq("list_type", (int)listType))
|
||||
.SelectMax("sort_order")) + 1;
|
||||
sortOrder = Query(CRMDbContext.ListItem)
|
||||
.Where(x => x.ListType == listType)
|
||||
.Max(x => x.SortOrder) + 1;
|
||||
|
||||
return Db.ExecuteScalar<int>(
|
||||
Insert("crm_list_item")
|
||||
.InColumnValue("id", 0)
|
||||
.InColumnValue("list_type", (int)listType)
|
||||
.InColumnValue("description", enumItem.Description)
|
||||
.InColumnValue("title", enumItem.Title)
|
||||
.InColumnValue("additional_params", enumItem.AdditionalParams)
|
||||
.InColumnValue("color", enumItem.Color)
|
||||
.InColumnValue("sort_order", sortOrder)
|
||||
.Identity(1, 0, true));
|
||||
var listItem = new DbListItem
|
||||
{
|
||||
ListType = listType,
|
||||
Description = enumItem.Description,
|
||||
Title = enumItem.Title,
|
||||
AdditionalParams = enumItem.AdditionalParams,
|
||||
Color = enumItem.Color,
|
||||
SortOrder = sortOrder,
|
||||
TenantId = TenantID
|
||||
};
|
||||
|
||||
CRMDbContext.Add(listItem);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
return listItem.Id;
|
||||
}
|
||||
|
||||
public virtual void EditItem(ListType listType, ListItem enumItem)
|
||||
{
|
||||
|
||||
if (HaveRelativeItemsLink(listType, enumItem.ID))
|
||||
{
|
||||
switch (listType)
|
||||
{
|
||||
case ListType.ContactStatus:
|
||||
@ -393,52 +404,52 @@ namespace ASC.CRM.Core.Dao
|
||||
default:
|
||||
throw new ArgumentException(string.Format("{0}.", CRMErrorsResource.BasicCannotBeEdited));
|
||||
}
|
||||
}
|
||||
|
||||
Db.ExecuteNonQuery(Update("crm_list_item")
|
||||
.Set("description", enumItem.Description)
|
||||
.Set("title", enumItem.Title)
|
||||
.Set("additional_params", enumItem.AdditionalParams)
|
||||
.Set("color", enumItem.Color)
|
||||
.Where(Exp.Eq("id", enumItem.ID)));
|
||||
var itemToUpdate = Query(CRMDbContext.ListItem).Single(x => x.Id == enumItem.ID);
|
||||
|
||||
itemToUpdate.Description = enumItem.Description;
|
||||
itemToUpdate.Title = enumItem.Title;
|
||||
itemToUpdate.AdditionalParams = enumItem.AdditionalParams;
|
||||
itemToUpdate.Color = enumItem.Color;
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
public virtual void ChangePicture(int id, String newPicture)
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.ListItem).Single(x => x.Id == id);
|
||||
|
||||
Db.ExecuteNonQuery(Update("crm_list_item")
|
||||
.Set("additional_params", newPicture)
|
||||
.Where(Exp.Eq("id", id)));
|
||||
itemToUpdate.AdditionalParams = newPicture;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
private bool HaveRelativeItemsLink(ListType listType, int itemID)
|
||||
{
|
||||
SqlQuery sqlQuery;
|
||||
bool result;
|
||||
|
||||
switch (listType)
|
||||
{
|
||||
|
||||
case ListType.ContactStatus:
|
||||
sqlQuery = Query("crm_contact")
|
||||
.Where(Exp.Eq("status_id", itemID));
|
||||
result = Query(CRMDbContext.Contacts).Where(x => x.StatusId == itemID).Any();
|
||||
break;
|
||||
case ListType.ContactType:
|
||||
sqlQuery = Query("crm_contact")
|
||||
.Where(Exp.Eq("contact_type_id", itemID));
|
||||
|
||||
result = Query(CRMDbContext.Contacts).Where(x => x.ContactTypeId == itemID).Any();
|
||||
break;
|
||||
case ListType.TaskCategory:
|
||||
sqlQuery = Query("crm_task")
|
||||
.Where(Exp.Eq("category_id", itemID));
|
||||
result = Query(CRMDbContext.Tasks).Where(x => x.CategoryId == itemID).Any();
|
||||
break;
|
||||
case ListType.HistoryCategory:
|
||||
sqlQuery = Query("crm_relationship_event")
|
||||
.Where(Exp.Eq("category_id", itemID));
|
||||
result = Query(CRMDbContext.RelationshipEvent).Where(x => x.CategoryId == itemID).Any();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
return Db.ExecuteScalar<int>(sqlQuery.SelectCount()) > 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
public void ChangeRelativeItemsLink(ListType listType, int fromItemID, int toItemID)
|
||||
@ -454,30 +465,44 @@ namespace ASC.CRM.Core.Dao
|
||||
switch (listType)
|
||||
{
|
||||
case ListType.ContactStatus:
|
||||
sqlUpdate = Update("crm_contact")
|
||||
.Set("status_id", toItemID)
|
||||
.Where(Exp.Eq("status_id", fromItemID));
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.Contacts).Single(x => x.StatusId == fromItemID);
|
||||
|
||||
itemToUpdate.StatusId = toItemID;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
}
|
||||
break;
|
||||
case ListType.ContactType:
|
||||
sqlUpdate = Update("crm_contact")
|
||||
.Set("contact_type_id", toItemID)
|
||||
.Where(Exp.Eq("contact_type_id", fromItemID));
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.Contacts).Single(x => x.ContactTypeId == fromItemID);
|
||||
|
||||
itemToUpdate.ContactTypeId = toItemID;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
}
|
||||
break;
|
||||
case ListType.TaskCategory:
|
||||
sqlUpdate = Update("crm_task")
|
||||
.Set("category_id", toItemID)
|
||||
.Where(Exp.Eq("category_id", fromItemID));
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.Tasks).Single(x => x.CategoryId == fromItemID);
|
||||
itemToUpdate.CategoryId = toItemID;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
}
|
||||
break;
|
||||
case ListType.HistoryCategory:
|
||||
sqlUpdate = Update("crm_relationship_event")
|
||||
.Set("category_id", toItemID)
|
||||
.Where(Exp.Eq("category_id", fromItemID));
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.RelationshipEvent).Single(x => x.CategoryId == fromItemID);
|
||||
itemToUpdate.CategoryId = toItemID;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
Db.ExecuteNonQuery(sqlUpdate);
|
||||
CRMDbContext.SaveChanges();
|
||||
}
|
||||
|
||||
public virtual void DeleteItem(ListType listType, int itemID, int toItemID)
|
||||
@ -501,9 +526,10 @@ namespace ASC.CRM.Core.Dao
|
||||
}
|
||||
}
|
||||
|
||||
var itemToRemove = Query(CRMDbContext.ListItem).FirstOrDefault(x => x.Id == itemID);
|
||||
var itemToRemove = new DbListItem { Id = itemID };
|
||||
|
||||
CRMDbContext.Entry(itemToRemove).State = EntityState.Deleted;
|
||||
|
||||
CRMDbContext.ListItem.Remove(itemToRemove);
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
}
|
||||
@ -513,15 +539,19 @@ namespace ASC.CRM.Core.Dao
|
||||
using var tx = CRMDbContext.Database.BeginTransaction();
|
||||
|
||||
for (int index = 0; index < titles.Length; index++)
|
||||
{
|
||||
Db.ExecuteNonQuery(Update("crm_list_item")
|
||||
.Set("sort_order", index)
|
||||
.Where(Exp.Eq("title", titles[index]) & Exp.Eq("list_type", (int)listType)));
|
||||
{
|
||||
var itemToUpdate = Query(CRMDbContext.ListItem)
|
||||
.Single(x => String.Compare(x.Title, titles[index]) == 0 && x.ListType == listType);
|
||||
|
||||
itemToUpdate.SortOrder = index;
|
||||
|
||||
CRMDbContext.Update(itemToUpdate);
|
||||
}
|
||||
|
||||
tx.Commit();
|
||||
|
||||
CRMDbContext.SaveChanges();
|
||||
|
||||
tx.Commit();
|
||||
}
|
||||
|
||||
public static ListItem ToListItem(DbListItem dbListItem)
|
||||
|
@ -95,78 +95,30 @@ namespace ASC.CRM.Core.Dao
|
||||
|
||||
public IEnumerable<int> GetTagsLinkCount(EntityType entityType)
|
||||
{
|
||||
|
||||
|
||||
|
||||
//var temp = Query(CRMDbContext.Tags)
|
||||
// .Join(CRMDbContext.CrmEntityTag,
|
||||
// x => x.Id,
|
||||
// y => y.TagId,
|
||||
// (x, y) => new
|
||||
// {
|
||||
// x,
|
||||
// y
|
||||
|
||||
// })
|
||||
// .Where(x => x.y.EntityType == entityType)
|
||||
// .GroupBy(x=> x.x.Id)
|
||||
// .OrderBy(x => x.x.Title)
|
||||
|
||||
// .Count();
|
||||
|
||||
|
||||
|
||||
//var sqlQuery = new SqlQuery("crm_tag tbl_tag")
|
||||
// .SelectCount("tag_id")
|
||||
// .LeftOuterJoin("crm_entity_tag", Exp.EqColumns("id", "tag_id"))
|
||||
// .Where(Exp.Eq("tbl_tag.entity_type", (int)entityType) & Exp.Eq("tbl_tag.tenant_id", TenantID))
|
||||
// .OrderBy("title", true)
|
||||
// .GroupBy("tbl_tag.id");
|
||||
|
||||
//var queryResult = Db.ExecuteList(sqlQuery);
|
||||
|
||||
// return queryResult.ConvertAll(row => Convert.ToInt32(row[0]));
|
||||
|
||||
throw new NotImplementedException();
|
||||
return Query(CRMDbContext.Tags)
|
||||
.GroupJoin(CRMDbContext.EntityTags,
|
||||
x => x.Id,
|
||||
y => y.TagId,
|
||||
(x, y) => new { x = x, count = y.Count() })
|
||||
.Where(x => x.x.EntityType == entityType)
|
||||
.OrderBy(x => x.x.Title)
|
||||
.Select(x => x.count).ToList();
|
||||
}
|
||||
|
||||
|
||||
public Dictionary<int, List<String>> GetEntitiesTags(EntityType entityType)
|
||||
{
|
||||
var result = new Dictionary<int, List<String>>();
|
||||
|
||||
var sqlQuery =
|
||||
new SqlQuery("crm_entity_tag")
|
||||
.Select("entity_id", "title")
|
||||
.LeftOuterJoin("crm_tag", Exp.EqColumns("id", "tag_id"))
|
||||
.Where(Exp.Eq("crm_tag.entity_type", (int)entityType) & Exp.Eq("crm_tag.tenant_id", TenantID));
|
||||
|
||||
Db.ExecuteList(sqlQuery).ForEach(row =>
|
||||
{
|
||||
var entityID = Convert.ToInt32(row[0]);
|
||||
var tagTitle = Convert.ToString(row[1]);
|
||||
|
||||
if (!result.ContainsKey(entityID))
|
||||
result.Add(entityID, new List<String>
|
||||
{
|
||||
tagTitle
|
||||
});
|
||||
else
|
||||
result[entityID].Add(tagTitle);
|
||||
|
||||
});
|
||||
return result;
|
||||
return CRMDbContext.EntityTags.Join(Query(CRMDbContext.Tags),
|
||||
x => x.TagId,
|
||||
y => y.Id,
|
||||
(x, y) => new { x, y })
|
||||
.Where(x => x.x.EntityType == entityType)
|
||||
.GroupBy(x => x.x.EntityId)
|
||||
.ToDictionary(x => x.Key, x => x.ToList().ConvertAll(x => x.y.Title));
|
||||
}
|
||||
|
||||
public String[] GetEntityTags(EntityType entityType, int entityID)
|
||||
{
|
||||
//SqlQuery sqlQuery = Query("crm_tag")
|
||||
// .Select("title")
|
||||
// .LeftOuterJoin("crm_entity_tag", Exp.EqColumns("id", "tag_id"))
|
||||
// .Where(Exp.Eq("entity_id", entityID) & Exp.Eq("crm_tag.entity_type", (int)entityType));
|
||||
|
||||
//return Db.ExecuteList(sqlQuery).ConvertAll(row => Convert.ToString(row[0])).ToArray();
|
||||
|
||||
return Query(CRMDbContext.Tags)
|
||||
.Join(CRMDbContext.EntityTags,
|
||||
x => x.Id,
|
||||
@ -189,11 +141,6 @@ namespace ASC.CRM.Core.Dao
|
||||
(x, y) => new { x, y })
|
||||
.Where(x => x.y == null && x.x.EntityType == entityType)
|
||||
.Select(x => x.x.Title).ToArray();
|
||||
|
||||
//return Db.ExecuteList(Query("crm_tag")
|
||||
// .Select("title")
|
||||
// .LeftOuterJoin("crm_entity_tag", Exp.EqColumns("tag_id", "id"))
|
||||
// .Where(Exp.Eq("tag_id", Exp.Empty) & Exp.Eq("crm_tag.entity_type", (int)entityType))).ConvertAll(row => Convert.ToString(row[0])).ToArray();
|
||||
}
|
||||
|
||||
public bool CanDeleteTag(EntityType entityType, String tagName)
|
||||
|
@ -34,6 +34,7 @@ using ASC.CRM.Core.Entities;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using ASC.ElasticSearch;
|
||||
using ASC.Web.CRM.Core.Search;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
@ -45,15 +46,16 @@ namespace ASC.CRM.Core.Dao
|
||||
public class CachedTaskDao : TaskDao
|
||||
{
|
||||
|
||||
private readonly HttpRequestDictionary<Task> _contactCache = new HttpRequestDictionary<Task>("crm_task");
|
||||
private readonly HttpRequestDictionary<Task> _contactCache;
|
||||
|
||||
public CachedTaskDao(DbContextManager<CRMDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
SecurityContext securityContext,
|
||||
CRMSecurity cRMSecurity,
|
||||
TenantUtil tenantUtil,
|
||||
FactoryIndexer<TasksWrapper> factoryIndexer
|
||||
):
|
||||
FactoryIndexer<TasksWrapper> factoryIndexer,
|
||||
IHttpContextAccessor httpContextAccessor
|
||||
) :
|
||||
base(dbContextManager,
|
||||
tenantManager,
|
||||
securityContext,
|
||||
@ -61,7 +63,7 @@ namespace ASC.CRM.Core.Dao
|
||||
tenantUtil,
|
||||
factoryIndexer)
|
||||
{
|
||||
|
||||
_contactCache = new HttpRequestDictionary<Task>(httpContextAccessor?.HttpContext, "crm_task");
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,7 +5,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace ASC.CRM.Core.EF
|
||||
{
|
||||
[Table("crm_case")]
|
||||
public partial class DbCase
|
||||
public partial class DbCase : IDbCrm
|
||||
{
|
||||
[Key]
|
||||
[Column("id", TypeName = "int(11)")]
|
||||
|
@ -1,51 +1,71 @@
|
||||
using System;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace ASC.CRM.Core.EF
|
||||
{
|
||||
[Table("crm_contact")]
|
||||
public partial class DbContact
|
||||
public partial class DbContact : IDbCrm
|
||||
{
|
||||
[Key]
|
||||
[Column("id", TypeName = "int(11)")]
|
||||
public int Id { get; set; }
|
||||
[Column("tenant_id", TypeName = "int(11)")]
|
||||
public int TenantId { get; set; }
|
||||
|
||||
[Column("is_company")]
|
||||
public bool IsCompany { get; set; }
|
||||
|
||||
[Column("notes", TypeName = "text")]
|
||||
public string Notes { get; set; }
|
||||
|
||||
[Column("title", TypeName = "varchar(255)")]
|
||||
public string Title { get; set; }
|
||||
|
||||
[Column("first_name", TypeName = "varchar(255)")]
|
||||
public string FirstName { get; set; }
|
||||
|
||||
[Column("last_name", TypeName = "varchar(255)")]
|
||||
public string LastName { get; set; }
|
||||
|
||||
[Column("company_name", TypeName = "varchar(255)")]
|
||||
public string CompanyName { get; set; }
|
||||
|
||||
[Column("industry", TypeName = "varchar(255)")]
|
||||
public string Industry { get; set; }
|
||||
|
||||
[Column("status_id", TypeName = "int(11)")]
|
||||
public int StatusId { get; set; }
|
||||
|
||||
[Column("company_id", TypeName = "int(11)")]
|
||||
public int CompanyId { get; set; }
|
||||
|
||||
[Column("contact_type_id", TypeName = "int(11)")]
|
||||
public int ContactTypeId { get; set; }
|
||||
|
||||
[Required]
|
||||
[Column("create_by", TypeName = "char(38)")]
|
||||
public string CreateBy { get; set; }
|
||||
public Guid CreateBy { get; set; }
|
||||
|
||||
[Column("create_on", TypeName = "datetime")]
|
||||
public DateTime CreateOn { get; set; }
|
||||
|
||||
[Column("last_modifed_on", TypeName = "datetime")]
|
||||
public DateTime? LastModifedOn { get; set; }
|
||||
|
||||
[Column("last_modifed_by", TypeName = "char(38)")]
|
||||
public string LastModifedBy { get; set; }
|
||||
public Guid LastModifedBy { get; set; }
|
||||
|
||||
[Column("display_name", TypeName = "varchar(255)")]
|
||||
public string DisplayName { get; set; }
|
||||
|
||||
[Column("is_shared", TypeName = "tinyint(4)")]
|
||||
public sbyte? IsShared { get; set; }
|
||||
public ShareType? IsShared { get; set; }
|
||||
|
||||
[Column("currency", TypeName = "varchar(3)")]
|
||||
public string Currency { get; set; }
|
||||
|
||||
[Column("tenant_id", TypeName = "int(11)")]
|
||||
public int TenantId { get; set; }
|
||||
|
||||
}
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
using System;
|
||||
using ASC.CRM.Core.Enums;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace ASC.CRM.Core.EF
|
||||
{
|
||||
[Table("crm_contact_info")]
|
||||
public partial class DbContactInfo
|
||||
public partial class DbContactInfo : IDbCrm
|
||||
{
|
||||
[Key]
|
||||
[Column("id", TypeName = "int(10)")]
|
||||
@ -22,19 +23,19 @@ namespace ASC.CRM.Core.EF
|
||||
public int TenantId { get; set; }
|
||||
|
||||
[Column("is_primary", TypeName = "tinyint(4)")]
|
||||
public sbyte IsPrimary { get; set; }
|
||||
public bool IsPrimary { get; set; }
|
||||
|
||||
[Column("contact_id", TypeName = "int(11)")]
|
||||
public int ContactId { get; set; }
|
||||
|
||||
[Column("type", TypeName = "int(255)")]
|
||||
public int Type { get; set; }
|
||||
public ContactInfoType Type { get; set; }
|
||||
|
||||
[Column("last_modifed_on", TypeName = "datetime")]
|
||||
public DateTime? LastModifedOn { get; set; }
|
||||
|
||||
[Column("last_modifed_by", TypeName = "char(38)")]
|
||||
public string LastModifedBy { get; set; }
|
||||
public Guid LastModifedBy { get; set; }
|
||||
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using ASC.CRM.Core.Enums;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
@ -16,7 +14,7 @@ namespace ASC.CRM.Core.EF
|
||||
|
||||
[Key]
|
||||
[Column("entity_type", TypeName = "int(11)")]
|
||||
public int EntityType { get; set; }
|
||||
public EntityType EntityType { get; set; }
|
||||
|
||||
[Key]
|
||||
[Column("contact_id", TypeName = "int(11)")]
|
||||
|
@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace ASC.CRM.Core.EF
|
||||
{
|
||||
[Table("crm_organisation_logo")]
|
||||
public partial class DbOrganisationLogo
|
||||
public partial class DbOrganisationLogo : IDbCrm
|
||||
{
|
||||
[Key]
|
||||
[Column("id", TypeName = "int(11)")]
|
||||
|
@ -5,7 +5,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace ASC.CRM.Core.EF
|
||||
{
|
||||
[Table("crm_projects")]
|
||||
public partial class DbProjects
|
||||
public partial class DbProjects : IDbCrm
|
||||
{
|
||||
[Key]
|
||||
[Column("project_id", TypeName = "int(10)")]
|
||||
|
@ -44,6 +44,6 @@ namespace ASC.CRM.Core.EF
|
||||
public DateTime? LastModifedOn { get; set; }
|
||||
|
||||
[Column("have_files", TypeName = "int(11)")]
|
||||
public int HaveFiles { get; set; }
|
||||
public bool HaveFiles { get; set; }
|
||||
}
|
||||
}
|
@ -35,6 +35,7 @@ using ASC.CRM.Resources;
|
||||
using ASC.Web.Core;
|
||||
using ASC.Web.Core.Users;
|
||||
using ASC.Web.CRM.Classes;
|
||||
using ASC.Web.CRM.Configuration;
|
||||
using ASC.Web.CRM.Core;
|
||||
using Autofac;
|
||||
using System;
|
||||
|
Loading…
Reference in New Issue
Block a user