crm: migrate DAO to EF Core

This commit is contained in:
Alexey Bannov 2020-03-26 21:57:06 +03:00
parent d078909a78
commit 039f88378c
21 changed files with 1401 additions and 1256 deletions

View File

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

View File

@ -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

View File

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

View File

@ -35,8 +35,7 @@ namespace ASC.CRM.Core.Dao
{
public class CurrencyInfoDao : AbstractDao
{
public CurrencyInfoDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext):

View File

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

View File

@ -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);

View File

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

View File

@ -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();

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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");
}

View File

@ -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)")]

View File

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

View File

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

View File

@ -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)")]

View File

@ -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)")]

View File

@ -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)")]

View File

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

View File

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