migrate DAO to EF Core

This commit is contained in:
Alexey Bannov 2020-03-11 18:10:53 +03:00
parent 08d999bc1d
commit cc2824a660
53 changed files with 2022 additions and 1830 deletions

View File

@ -17,6 +17,7 @@
<ProjectReference Include="..\..\..\common\ASC.Core.Common\ASC.Core.Common.csproj" />
<ProjectReference Include="..\..\..\web\ASC.Web.Core\ASC.Web.Core.csproj" />
<ProjectReference Include="..\..\..\web\ASC.Web.Studio\ASC.Web.Studio.csproj" />
<ProjectReference Include="..\..\ASC.Files\Server\ASC.Files.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -85,7 +85,7 @@ namespace ASC.Web.CRM.Classes
{
var apiUrl = String.Format("{0}project/securityinfo.json", SetupInfo.WebApiBaseUrl);
var cacheKey = String.Format("{0}-{1}", ASC.Core.SecurityContext.CurrentAccount.ID, apiUrl);
var cacheKey = String.Format("{0}-{1}", SecurityContext.CurrentAccount.ID, apiUrl);
bool canCreateProject;

View File

@ -58,16 +58,6 @@ namespace ASC.CRM.Core.Dao
CRMDbContext = dbContextManager.Get(CRMConstants.DatabaseId);
TenantID = tenantManager.GetCurrentTenant().TenantId;
SecurityContext = securityContext;
}
/*
protected readonly String _invoiceItemCacheKey;
protected readonly String _invoiceTaxCacheKey;
protected readonly String _invoiceLineCacheKey;
*/
protected AbstractDao(int tenantID)
{
TenantID = tenantID;
_supportedEntityType.Add(EntityType.Company);
_supportedEntityType.Add(EntityType.Person);
@ -93,8 +83,16 @@ namespace ASC.CRM.Core.Dao
_cache.Insert(_invoiceLineCacheKey, String.Empty);
}
*/
}
/*
protected readonly String _invoiceItemCacheKey;
protected readonly String _invoiceTaxCacheKey;
protected readonly String _invoiceLineCacheKey;
*/
protected int TenantID { get; private set; }
protected List<int> SearchByTags(EntityType entityType, int[] exceptIDs, IEnumerable<String> tags)
@ -106,17 +104,17 @@ namespace ASC.CRM.Core.Dao
foreach (var tag in tags) {
tagIDs.Add(CRMDbContext
.CrmTag
.Where(x => x.EntityType == (int)entityType && String.Compare(x.Title, tag.Trim(), true) == 0)
.Tags
.Where(x => x.EntityType == entityType && String.Compare(x.Title, tag.Trim(), true) == 0)
.Select(x => x.Id).Single());
}
Expression<Func<CrmEntityTag, bool>> exp = null;
Expression<Func<DbEntityTag, bool>> exp = null;
if (exceptIDs != null && exceptIDs.Length > 0)
exp = x => exceptIDs.Contains(x.EntityId) && x.EntityType == (int)entityType;
exp = x => exceptIDs.Contains(x.EntityId) && x.EntityType == entityType;
else
exp = x => x.EntityType == (int)entityType;
exp = x => x.EntityType == entityType;
throw new NotImplementedException();
@ -143,14 +141,14 @@ namespace ASC.CRM.Core.Dao
protected Dictionary<int, int[]> GetRelativeToEntity(int[] contactID, EntityType entityType, int[] entityID)
{
Expression<Func<CrmEntityContact, bool>> exp = null;
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);
else if (entityID != null && entityID.Length > 0 && (contactID == null || contactID.Length == 0))
exp = x => x.EntityType == (int)entityType && entityID.Contains(x.EntityId);
return CRMDbContext.CrmEntityContact.Where(exp).GroupBy(x => x.EntityId).ToDictionary(
return CRMDbContext.EntityContact.Where(exp).GroupBy(x => x.EntityId).ToDictionary(
x => x.Key,
x => x.Select(x => Convert.ToInt32(x.ContactId)).ToArray());
}
@ -163,13 +161,13 @@ namespace ASC.CRM.Core.Dao
protected int[] GetRelativeToEntityInDb(int? contactID, EntityType entityType, int? entityID)
{
if (contactID.HasValue && !entityID.HasValue)
return CRMDbContext.CrmEntityContact
return CRMDbContext.EntityContact
.Where(x => x.EntityType == (int)entityType && x.ContactId == contactID.Value)
.Select(x => x.EntityId)
.ToArray();
if (!contactID.HasValue && entityID.HasValue)
return CRMDbContext.CrmEntityContact
return CRMDbContext.EntityContact
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID.Value)
.Select(x => x.ContactId)
.ToArray();
@ -184,17 +182,17 @@ namespace ASC.CRM.Core.Dao
using var tx = CRMDbContext.Database.BeginTransaction();
var exists = CRMDbContext.CrmEntityContact
var exists = CRMDbContext.EntityContact
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID)
.Select(x => x.ContactId)
.ToArray();
foreach (var existContact in exists)
{
var items = CRMDbContext.CrmEntityContact
var items = CRMDbContext.EntityContact
.Where(x => x.EntityType == (int)entityType && x.EntityId == entityID && x.ContactId == existContact);
CRMDbContext.CrmEntityContact.RemoveRange(items);
CRMDbContext.EntityContact.RemoveRange(items);
}
if (!(contactID == null || contactID.Length == 0))
@ -206,7 +204,7 @@ namespace ASC.CRM.Core.Dao
protected void SetRelative(int contactID, EntityType entityType, int entityID)
{
CRMDbContext.CrmEntityContact.Add(new CrmEntityContact
CRMDbContext.EntityContact.Add(new DbEntityContact
{
ContactId = contactID,
EntityType = (int)entityType,
@ -221,7 +219,7 @@ namespace ASC.CRM.Core.Dao
if ((contactID == null || contactID.Length == 0) && (entityID == null || entityID.Length == 0))
throw new ArgumentException();
Expression<Func<CrmEntityContact, bool>> expr = null;
Expression<Func<DbEntityContact, bool>> expr = null;
if (contactID != null && contactID.Length > 0)
expr = x => contactID.Contains(x.ContactId);
@ -229,7 +227,7 @@ namespace ASC.CRM.Core.Dao
if (entityID != null && entityID.Length > 0)
expr = x => entityID.Contains(x.EntityId) && x.EntityType == (int)entityType;
var dbCrmEntity = CRMDbContext.CrmEntityContact;
var dbCrmEntity = CRMDbContext.EntityContact;
dbCrmEntity.RemoveRange(dbCrmEntity.Where(expr));
@ -255,14 +253,14 @@ namespace ASC.CRM.Core.Dao
public int SaveOrganisationLogo(byte[] bytes)
{
var entity = new CrmOrganisationLogo
var entity = new DbOrganisationLogo
{
Content = Convert.ToBase64String(bytes),
CreateOn = DateTime.UtcNow,
CreateBy = SecurityContext.CurrentAccount.ID.ToString()
};
CRMDbContext.CrmOrganisationLogo.Add(entity);
CRMDbContext.OrganisationLogo.Add(entity);
CRMDbContext.SaveChanges();
@ -275,7 +273,7 @@ namespace ASC.CRM.Core.Dao
if (logo_id <= 0) throw new ArgumentException();
return CRMDbContext.CrmOrganisationLogo
return CRMDbContext.OrganisationLogo
.Where(x => x.Id == logo_id)
.Select(x => x.Content)
.FirstOrDefault();
@ -301,15 +299,20 @@ namespace ASC.CRM.Core.Dao
protected string GetTenantColumnName(string table)
{
var tenant = "tenant_id";
if (!table.Contains(" ")) return tenant;
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

@ -26,10 +26,13 @@
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.Web.CRM.Core.Search;
using ASC.Web.Files.Api;
using System;
using System.Collections.Generic;
using System.Globalization;
@ -81,23 +84,31 @@ namespace ASC.CRM.Core.Dao
public class CasesDao : AbstractDao
{
public CasesDao(int tenantID)
: base(tenantID)
{
}
#region Property
public CRMSecurity CRMSecurity { get; }
#endregion
public CasesDao(CRMSecurity cRMSecurity)
public CasesDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
CRMSecurity cRMSecurity,
TenantUtil tenantUtil,
FilesIntegration filesIntegration
) :
base(dbContextManager,
tenantManager,
securityContext)
{
CRMSecurity = cRMSecurity;
TenantUtil = tenantUtil;
FilesIntegration = filesIntegration;
}
public CoreContext CoreContext { get; }
public FilesIntegration FilesIntegration { get; }
public TenantUtil TenantUtil { get; }
public CRMSecurity CRMSecurity { get; }
public void AddMember(int caseID, int memberID)
{
SetRelative(memberID, EntityType.Case, caseID);
@ -125,16 +136,17 @@ namespace ASC.CRM.Core.Dao
public virtual int[] SaveCasesList(List<Cases> items)
{
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
var result = items.Select(item => CreateCasesInDb(item.Title)).ToArray();
tx.Commit();
// Delete relative keys
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "cases.*"));
return result;
}
}
public Cases CloseCases(int caseID)
{
@ -146,12 +158,22 @@ namespace ASC.CRM.Core.Dao
CRMSecurity.DemandAccessTo(cases);
Db.ExecuteNonQuery(
Update("crm_case")
.Set("is_closed", true)
.Where("id", caseID)
);
CRMDbContext.Cases.Update(new DbCase
{
Id = cases.ID,
CreateBy = cases.CreateBy,
CreateOn = cases.CreateOn,
IsClosed = true,
LastModifedBy = cases.LastModifedBy,
LastModifedOn = cases.LastModifedOn,
TenantId = TenantID,
Title = cases.Title
});
CRMDbContext.SaveChanges();
cases.IsClosed = true;
return cases;
}
@ -165,12 +187,22 @@ namespace ASC.CRM.Core.Dao
CRMSecurity.DemandAccessTo(cases);
Db.ExecuteNonQuery(
Update("crm_case")
.Set("is_closed", false)
.Where("id", caseID)
);
CRMDbContext.Cases.Update(new DbCase
{
Id = cases.ID,
CreateBy = cases.CreateBy,
CreateOn = cases.CreateOn,
IsClosed = false,
LastModifedBy = cases.LastModifedBy,
LastModifedOn = cases.LastModifedOn,
TenantId = TenantID,
Title = cases.Title
});
CRMDbContext.SaveChanges();
cases.IsClosed = false;
return cases;
}
@ -185,16 +217,23 @@ namespace ASC.CRM.Core.Dao
private int CreateCasesInDb(String title)
{
return Db.ExecuteScalar<int>(
Insert("crm_case")
.InColumnValue("id", 0)
.InColumnValue("title", title)
.InColumnValue("is_closed", false)
.InColumnValue("create_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true));
var dbCase = new DbCase
{
Title = title,
IsClosed = false,
CreateOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()),
CreateBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()),
LastModifedBy = SecurityContext.CurrentAccount.ID,
TenantId = TenantID
};
CRMDbContext.Cases.Add(dbCase);
CRMDbContext.SaveChanges();
return dbCase.Id;
}
public virtual void UpdateCases(Cases cases)
@ -204,14 +243,19 @@ namespace ASC.CRM.Core.Dao
// Delete relative keys
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "invoice.*"));
Db.ExecuteNonQuery(
Update("crm_case")
.Set("title", cases.Title)
.Set("is_closed", cases.IsClosed)
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Where("id", cases.ID)
);
CRMDbContext.Cases.Update(new DbCase
{
Id = cases.ID,
Title = cases.Title,
IsClosed = cases.IsClosed,
LastModifedOn = TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()),
LastModifedBy = SecurityContext.CurrentAccount.ID,
TenantId = TenantID,
CreateBy = cases.CreateBy,
CreateOn = cases.CreateOn
});
CRMDbContext.SaveChanges();
}
public virtual Cases DeleteCases(int casesID)
@ -262,15 +306,16 @@ namespace ASC.CRM.Core.Dao
{
var casesID = caseses.Select(x => x.ID).ToArray();
using (var tagdao = FilesIntegration.GetTagDao())
{
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 filesIDs = tagdao.GetTags(tagNames, TagType.System).Where(t => t.EntryType == FileEntryType.File).Select(t => t.EntryId).ToArray();
using (var tx = Db.BeginTransaction(true))
{
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)));
@ -278,21 +323,19 @@ namespace ASC.CRM.Core.Dao
Db.ExecuteNonQuery(Delete("crm_case").Where(Exp.In("id", casesID)));
tx.Commit();
}
caseses.ForEach(item => CoreContext.AuthorizationManager.RemoveAllAces(item));
if (0 < tagNames.Length)
{
using (var filedao = FilesIntegration.GetFileDao())
{
var filedao = FilesIntegration.GetFileDao();
foreach (var filesID in filesIDs)
{
filedao.DeleteFile(filesID);
}
}
}
}
//todo: remove indexes
}
@ -540,7 +583,10 @@ namespace ASC.CRM.Core.Dao
public virtual List<Cases> GetByID(int[] ids)
{
return Db.ExecuteList(GetCasesSqlQuery(Exp.In("id", ids))).ConvertAll(ToCases);
return CRMDbContext.Cases
.Where(x => ids.Contains(x.Id))
.ToList()
.ConvertAll(ToCases);
}
public virtual Cases GetByID(int id)
@ -552,22 +598,23 @@ namespace ASC.CRM.Core.Dao
return cases.Count == 0 ? null : cases[0];
}
#region Private Methods
private static Cases ToCases(object[] row)
private Cases ToCases(DbCase dbCase)
{
return new Cases
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
CreateBy = ToGuid(row[2]),
CreateOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[3].ToString())),
IsClosed = Convert.ToBoolean(row[4])
ID = dbCase.Id,
Title = dbCase.Title,
CreateBy = dbCase.CreateBy,
CreateOn = 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");
@ -579,9 +626,6 @@ namespace ASC.CRM.Core.Dao
return sqlQuery;
}
#endregion
public void ReassignCasesResponsible(Guid fromUserId, Guid toUserId)
{
var cases = GetAllCases();

View File

@ -26,9 +26,13 @@
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 System;
using System.Collections.Generic;
using System.Globalization;
@ -92,22 +96,26 @@ namespace ASC.CRM.Core.Dao
}
}
public class ContactDao : AbstractDao
{
#region Constructor
public ContactDao(int tenantID)
: base(tenantID)
public ContactDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
CRMSecurity cRMSecurity) :
base(dbContextManager,
tenantManager,
securityContext)
{
CRMSecurity = cRMSecurity;
}
#endregion
#region Members
public CRMSecurity CRMSecurity { get; }
private readonly String _displayNameSeparator = "!=!";
#endregion
@ -1139,7 +1147,7 @@ namespace ASC.CRM.Core.Dao
.Set("status_id", contact.StatusID)
.Set("company_id", companyID)
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.Set("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Set("display_name", displayName)
.Set("is_shared", (int)contact.ShareType)
.Set("contact_type_id", contact.ContactTypeID)
@ -1327,10 +1335,10 @@ namespace ASC.CRM.Core.Dao
.InColumnValue("industry", contact.Industry)
.InColumnValue("status_id", contact.StatusID)
.InColumnValue("company_id", companyID)
.InColumnValue("create_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("create_on", TenantUtil.DateTimeToUtc(contact.CreateOn == DateTime.MinValue ? TenantUtil.DateTimeNow() : contact.CreateOn))
.InColumnValue("last_modifed_on", TenantUtil.DateTimeToUtc(contact.CreateOn == DateTime.MinValue ? TenantUtil.DateTimeNow() : contact.CreateOn))
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("display_name", displayName)
.InColumnValue("is_shared", (int)contact.ShareType)
.InColumnValue("contact_type_id", contact.ContactTypeID)

View File

@ -157,7 +157,7 @@ namespace ASC.CRM.Core.Dao
.Set("contact_id", contactInfo.ContactID)
.Set("type", (int)contactInfo.InfoType)
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.Set("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
);
return contactInfo.ID;
}
@ -197,7 +197,7 @@ namespace ASC.CRM.Core.Dao
.InColumnValue("contact_id", contactInfo.ContactID)
.InColumnValue("type", (int)contactInfo.InfoType)
.InColumnValue("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true));
}

View File

@ -30,6 +30,9 @@ using System;
using System.Collections.Generic;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
#endregion
@ -37,9 +40,17 @@ namespace ASC.CRM.Core.Dao
{
public class CurrencyInfoDao : AbstractDao
{
public CurrencyInfoDao(int tenantID)
: base(tenantID)
public CurrencyInfoDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext):
base(dbContextManager,
tenantManager,
securityContext)
{
}
public virtual List<CurrencyInfo> GetAll()

View File

@ -23,44 +23,42 @@
*
*/
#region Import
using System;
using System.Collections.Generic;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using System.Linq;
using ASC.Core;
#endregion
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
namespace ASC.CRM.Core.Dao
{
public class CurrencyRateDao : AbstractDao
{
public CurrencyRateDao(int tenantID)
: base(tenantID)
public CurrencyRateDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext) :
base(dbContextManager,
tenantManager,
securityContext)
{
}
public virtual List<CurrencyRate> GetAll()
{
return Db.ExecuteList(GetSqlQuery(null)).ConvertAll(ToCurrencyRate);
return CRMDbContext.CurrencyRate.Where(x => x.TenantId == TenantID).ToList().ConvertAll(ToCurrencyRate);
}
public virtual CurrencyRate GetByID(int id)
{
var rates = Db.ExecuteList(GetSqlQuery(Exp.Eq("id", id))).ConvertAll(ToCurrencyRate);
return rates.Count > 0 ? rates[0] : null;
return ToCurrencyRate(CRMDbContext.CurrencyRate.FirstOrDefault(x => x.Id == id));
}
public CurrencyRate GetByCurrencies(string fromCurrency, string toCurrency)
{
var rates = Db.ExecuteList(GetSqlQuery(Exp.Eq("from_currency", fromCurrency.ToUpper()) & Exp.Eq("to_currency", toCurrency.ToUpper())))
.ConvertAll(ToCurrencyRate);
return rates.Count > 0 ? rates[0] : null;
return ToCurrencyRate(CRMDbContext.CurrencyRate.FirstOrDefault(x => x.TenantId == TenantID && String.Compare(x.FromCurrency, fromCurrency, true) == 0 &&
String.Compare(x.ToCurrency, toCurrency, true) == 0));
}
public int SaveOrUpdate(CurrencyRate currencyRate)
@ -71,31 +69,38 @@ namespace ASC.CRM.Core.Dao
if (currencyRate.ID > 0 && currencyRate.Rate == 0)
return Delete(currencyRate.ID);
if (Db.ExecuteScalar<int>(Query("crm_currency_rate").SelectCount().Where(Exp.Eq("id", currencyRate.ID))) == 0)
if (CRMDbContext.CurrencyRate.Where(x => x.Id == currencyRate.ID).Any())
{
var query = Insert("crm_currency_rate")
.InColumnValue("id", 0)
.InColumnValue("from_currency", currencyRate.FromCurrency.ToUpper())
.InColumnValue("to_currency", currencyRate.ToCurrency.ToUpper())
.InColumnValue("rate", currencyRate.Rate)
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("create_on", DateTime.UtcNow)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", DateTime.UtcNow)
.Identity(1, 0, true);
var itemToInsert = new DbCurrencyRate
{
FromCurrency = currencyRate.FromCurrency.ToUpper(),
ToCurrency = currencyRate.ToCurrency.ToUpper(),
Rate = currencyRate.Rate,
CreateBy = SecurityContext.CurrentAccount.ID,
CreateOn = DateTime.UtcNow,
LastModifedBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = DateTime.UtcNow,
TenantId = TenantID
};
currencyRate.ID = Db.ExecuteScalar<int>(query);
CRMDbContext.CurrencyRate.Add(itemToInsert);
CRMDbContext.SaveChanges();
currencyRate.ID = itemToInsert.Id;
}
else
{
Db.ExecuteNonQuery(
Update("crm_currency_rate")
.Set("from_currency", currencyRate.FromCurrency.ToUpper())
.Set("to_currency", currencyRate.ToCurrency.ToUpper())
.Set("rate", currencyRate.Rate)
.Set("last_modifed_on", DateTime.UtcNow)
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Where(Exp.Eq("id", currencyRate.ID)));
var itemToUpdate = CRMDbContext.CurrencyRate.FirstOrDefault(x => x.Id == currencyRate.ID);
itemToUpdate.FromCurrency = currencyRate.FromCurrency.ToUpper();
itemToUpdate.ToCurrency = currencyRate.ToCurrency.ToUpper();
itemToUpdate.Rate = currencyRate.Rate;
itemToUpdate.LastModifedBy = SecurityContext.CurrentAccount.ID;
itemToUpdate.LastModifedOn = DateTime.UtcNow;
itemToUpdate.TenantId = TenantID;
CRMDbContext.Update(itemToUpdate);
CRMDbContext.SaveChanges();
}
return currencyRate.ID;
@ -105,63 +110,62 @@ namespace ASC.CRM.Core.Dao
{
if (id <= 0) throw new ArgumentException();
var sqlQuery = Delete("crm_currency_rate")
.Where(Exp.Eq("id", id));
var itemToDelete = new DbCurrencyRate { Id = id };
Db.ExecuteNonQuery(sqlQuery);
CRMDbContext.CurrencyRate.Attach(itemToDelete);
CRMDbContext.CurrencyRate.Remove(itemToDelete);
CRMDbContext.SaveChanges();
return id;
}
public List<CurrencyRate> SetCurrencyRates(List<CurrencyRate> rates)
{
using (var tx = Db.BeginTransaction())
{
Db.ExecuteNonQuery(Delete("crm_currency_rate"));
using var tx = CRMDbContext.Database.BeginTransaction();
var items = CRMDbContext.CurrencyRate.Where(x => x.TenantId == TenantID);
CRMDbContext.RemoveRange(items);
foreach (var rate in rates)
{
var query = Insert("crm_currency_rate")
.InColumnValue("id", 0)
.InColumnValue("from_currency", rate.FromCurrency.ToUpper())
.InColumnValue("to_currency", rate.ToCurrency.ToUpper())
.InColumnValue("rate", rate.Rate)
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("create_on", DateTime.UtcNow)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", DateTime.UtcNow)
.Identity(1, 0, true);
var itemToInsert = new DbCurrencyRate {
FromCurrency = rate.FromCurrency.ToUpper(),
ToCurrency = rate.ToCurrency.ToUpper(),
Rate = rate.Rate,
CreateBy = SecurityContext.CurrentAccount.ID,
CreateOn = DateTime.UtcNow,
LastModifedBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = DateTime.UtcNow,
TenantId = TenantID
};
rate.ID = Db.ExecuteScalar<int>(query);
CRMDbContext.CurrencyRate.Add(itemToInsert);
CRMDbContext.SaveChanges();
rate.ID = itemToInsert.Id;
}
tx.Commit();
return rates;
}
}
private SqlQuery GetSqlQuery(Exp where)
private static CurrencyRate ToCurrencyRate(DbCurrencyRate dbCurrencyRate)
{
var sqlQuery = Query("crm_currency_rate")
.Select("id",
"from_currency",
"to_currency",
"rate");
if (dbCurrencyRate == null) return null;
if (where != null)
sqlQuery.Where(where);
return sqlQuery;
}
private static CurrencyRate ToCurrencyRate(object[] row)
return new CurrencyRate
{
return new CurrencyRate{
ID = Convert.ToInt32(row[0]),
FromCurrency = Convert.ToString(row[1]),
ToCurrency = Convert.ToString(row[2]),
Rate = Convert.ToDecimal(row[3])
ID = dbCurrencyRate.Id,
FromCurrency = dbCurrencyRate.FromCurrency,
ToCurrency = dbCurrencyRate.ToCurrency,
Rate = dbCurrencyRate.Rate,
CreateBy = dbCurrencyRate.CreateBy,
CreateOn = dbCurrencyRate.CreateOn,
LastModifedBy = dbCurrencyRate.LastModifedBy,
LastModifedOn = dbCurrencyRate.LastModifedOn
};
}
}

View File

@ -100,7 +100,7 @@ namespace ASC.CRM.Core.Dao
.InColumnValue("field_id", fieldID)
.InColumnValue("entity_type", (int)entityType)
.InColumnValue("last_modifed_on", lastModifiedOn)
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true)
);

View File

@ -24,24 +24,23 @@
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Globalization;
using ASC.Collections;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
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.Files.Core;
using ASC.Web.Files.Api;
using ASC.Web.CRM.Core.Search;
using ASC.Web.Files.Api;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using OrderBy = ASC.CRM.Core.Entities.OrderBy;
using ASC.CRM.Core.Enums;
namespace ASC.CRM.Core.Dao
{
@ -93,11 +92,21 @@ namespace ASC.CRM.Core.Dao
{
#region Constructor
public DealDao(int tenantID)
: base(tenantID)
public DealDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
CRMSecurity cRMSecurity) :
base(dbContextManager,
tenantManager,
securityContext)
{
}
public TenantUtil TenantUtil { get; }
public CRMSecurity CRMSecurity { get; }
#endregion
#region Methods
@ -180,9 +189,9 @@ namespace ASC.CRM.Core.Dao
.InColumnValue("actual_close_date", TenantUtil.DateTimeToUtc(deal.ActualCloseDate))
.InColumnValue("per_period_value", deal.PerPeriodValue)
.InColumnValue("create_on", TenantUtil.DateTimeToUtc(deal.CreateOn == DateTime.MinValue ? TenantUtil.DateTimeNow() : deal.CreateOn))
.InColumnValue("create_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", TenantUtil.DateTimeToUtc(deal.CreateOn == DateTime.MinValue ? TenantUtil.DateTimeNow() : deal.CreateOn))
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true));
// if (deal.ContactID > 0)
@ -231,7 +240,7 @@ namespace ASC.CRM.Core.Dao
.Set("per_period_value", deal.PerPeriodValue)
.Set("actual_close_date", TenantUtil.DateTimeToUtc(deal.ActualCloseDate))
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(TenantUtil.DateTimeNow()))
.Set("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
.Where(Exp.Eq("id", deal.ID))
);
@ -885,12 +894,16 @@ namespace ASC.CRM.Core.Dao
/// <param name="lastModifedDate"></param>
public void SetDealLastModifedDate(int opportunityid, DateTime lastModifedDate)
{
Db.ExecuteNonQuery(
Update("crm_deal")
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(lastModifedDate))
.Where(Exp.Eq("id", opportunityid)));
// Delete relative keys
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "deals.*"));
}
}
}

View File

@ -27,7 +27,12 @@
#region Import
using ASC.Collections;
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
using ASC.CRM.Resources;
using System;
using System.Collections.Generic;
using System.Linq;
@ -99,31 +104,48 @@ namespace ASC.CRM.Core.Dao
#region Constructor
public DealMilestoneDao(int tenantID)
: base(tenantID)
public DealMilestoneDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext) :
base(dbContextManager,
tenantManager,
securityContext)
{
}
#endregion
public virtual void Reorder(int[] ids)
{
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
for (int index = 0; index < ids.Length; index++)
{
Query(CRMDbContext.DealMilestones)
}
tx.Commit();
throw new NotImplementedException();
// .Where(x => ids.Contains(x.Id));
Db.ExecuteNonQuery(Update("crm_deal_milestone")
.Set("sort_order", index)
.Where(Exp.Eq("id", ids[index])));
tx.Commit();
}
}
public int GetCount()
{
return Db.ExecuteScalar<int>(Query("crm_deal_milestone").SelectCount());
return Query(CRMDbContext.DealMilestones).Count();
}
@ -144,12 +166,8 @@ namespace ASC.CRM.Core.Dao
public int GetRelativeItemsCount(int id)
{
var sqlQuery = Query("crm_deal")
.Select("count(*)")
.Where(Exp.Eq("deal_milestone_id", id));
return Db.ExecuteScalar<int>(sqlQuery);
return Query(CRMDbContext.Deals)
.Count(x => x.DealMilestoneId == id);
}
public virtual int Create(DealMilestone item)
@ -186,34 +204,37 @@ namespace ASC.CRM.Core.Dao
public virtual void ChangeColor(int id, String newColor)
{
Db.ExecuteNonQuery(Update("crm_deal_milestone")
.Set("color", newColor)
.Where(Exp.Eq("id", id)));
var item = CRMDbContext.DealMilestones.First(x => x.Id == id);
item.Color = newColor;
CRMDbContext.SaveChanges();
}
public virtual void Edit(DealMilestone item)
{
if (HaveContactLink(item.ID))
throw new ArgumentException(String.Format("{0}. {1}.", CRMErrorsResource.BasicCannotBeEdited, CRMErrorsResource.DealMilestoneHasRelatedDeals));
Db.ExecuteNonQuery(Update("crm_deal_milestone")
.Set("title", item.Title)
.Set("description", item.Description)
.Set("color", item.Color)
.Set("probability", item.Probability)
.Set("status", (int)item.Status)
.Where(Exp.Eq("id", item.ID)));
Query(CRMDbContext.DealMilestones)
.First(x => x.Id == item.ID);
//CRMDbContext.DealMilestones.Update();
//Db.ExecuteNonQuery(Update("crm_deal_milestone")
// .Set("title", item.Title)
// .Set("description", item.Description)
// .Set("color", item.Color)
// .Set("probability", item.Probability)
// .Set("status", (int)item.Status)
// .Where(Exp.Eq("id", item.ID)));
}
public bool HaveContactLink(int dealMilestoneID)
{
SqlQuery sqlQuery = Query("crm_deal")
.Where(Exp.Eq("deal_milestone_id", dealMilestoneID))
.SelectCount()
.SetMaxResults(1);
return Db.ExecuteScalar<int>(sqlQuery) >= 1;
return Query(CRMDbContext.Deals)
.Any(x => x.DealMilestoneId == dealMilestoneID);
}
public virtual void Delete(int id)
@ -221,69 +242,78 @@ namespace ASC.CRM.Core.Dao
if (HaveContactLink(id))
throw new ArgumentException(String.Format("{0}. {1}.", CRMErrorsResource.BasicCannotBeDeleted, CRMErrorsResource.DealMilestoneHasRelatedDeals));
Db.ExecuteNonQuery(Delete("crm_deal_milestone").Where(Exp.Eq("id", id)));
var item = CRMDbContext.DealMilestones.First(x => x.Id == id);
CRMDbContext.DealMilestones.Remove(item);
CRMDbContext.SaveChanges();
}
public virtual DealMilestone GetByID(int id)
{
var dealMilestones = Db.ExecuteList(GetDealMilestoneQuery(Exp.Eq("id", id))).ConvertAll(row => ToDealMilestone(row));
if (dealMilestones.Count == 0)
return null;
//var dealMilestones = Db.ExecuteList(GetDealMilestoneQuery(Exp.Eq("id", id))).ConvertAll(row => ToDealMilestone(row));
return dealMilestones[0];
//if (dealMilestones.Count == 0)
// return null;
//return dealMilestones[0];
}
public Boolean IsExist(int id)
{
return Db.ExecuteScalar<bool>("select exists(select 1 from crm_deal_milestone where tenant_id = @tid and id = @id)",
new { tid = TenantID, id = id });
return Query(CRMDbContext.DealMilestones).Any(x => x.Id == id);
}
public List<DealMilestone> GetAll(int[] id)
{
return Db.ExecuteList(GetDealMilestoneQuery(Exp.In("id", id))).ConvertAll(row => ToDealMilestone(row));
// return Db.ExecuteList(GetDealMilestoneQuery(Exp.In("id", id))).ConvertAll(row => ToDealMilestone(row));
}
public List<DealMilestone> GetAll()
{
return Db.ExecuteList(GetDealMilestoneQuery(null)).ConvertAll(row => ToDealMilestone(row));
// return Db.ExecuteList(GetDealMilestoneQuery(null)).ConvertAll(row => ToDealMilestone(row));
}
private SqlQuery GetDealMilestoneQuery(Exp where)
{
SqlQuery sqlQuery = Query("crm_deal_milestone")
.Select("id",
"title",
"description",
"color",
"probability",
"status",
"sort_order")
.OrderBy("sort_order", true);
//private SqlQuery GetDealMilestoneQuery(Exp where)
//{
// SqlQuery sqlQuery = Query("crm_deal_milestone")
// .Select("id",
// "title",
// "description",
// "color",
// "probability",
// "status",
// "sort_order")
// .OrderBy("sort_order", true);
if (where != null)
sqlQuery.Where(where);
// if (where != null)
// sqlQuery.Where(where);
return sqlQuery;
// return sqlQuery;
}
//}
private static DealMilestone ToDealMilestone(object[] row)
private static DealMilestone ToDealMilestone(DbDealMilestone dbDealMilestone)
{
return new DealMilestone
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
Description = Convert.ToString(row[2]),
Color = Convert.ToString(row[3]),
Probability = Convert.ToInt32(row[4]),
Status = (DealMilestoneStatus)Convert.ToInt32(row[5]),
SortOrder = Convert.ToInt32(row[6])
ID = dbDealMilestone.Id,
Title = dbDealMilestone.Title,
Color = dbDealMilestone.Color,
Status = dbDealMilestone.Status,
Description = dbDealMilestone.Description,
Probability = dbDealMilestone.Probability,
SortOrder = dbDealMilestone.SortOrder
};
}
}
}

View File

@ -28,6 +28,8 @@ using System;
using System.Collections.Generic;
using System.Linq;
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
using ASC.Files.Core;
using ASC.Web.Files.Api;
@ -35,29 +37,34 @@ namespace ASC.CRM.Core.Dao
{
public class FileDao : AbstractDao
{
public FileDao(int tenantID)
: base(tenantID)
public FileDao(FilesIntegration filesIntegration,
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext):
base(dbContextManager,
tenantManager,
securityContext)
{
FilesIntegration = filesIntegration;
}
#region Public Methods
public FilesIntegration FilesIntegration { get; }
public File GetFile(int id, int version)
{
using (var dao = FilesIntegration.GetFileDao())
{
var dao = FilesIntegration.GetFileDao();
var file = 0 < version ? dao.GetFile(id, version) : dao.GetFile(id);
return file;
}
}
public void DeleteFile(int id)
{
using (var dao = FilesIntegration.GetFileDao())
{
var dao = FilesIntegration.GetFileDao();
dao.DeleteFile(id);
}
}
public object GetRoot()
{
@ -71,21 +78,18 @@ namespace ASC.CRM.Core.Dao
public File SaveFile(File file, System.IO.Stream stream)
{
using (var dao = FilesIntegration.GetFileDao())
{
var dao = FilesIntegration.GetFileDao();
return dao.SaveFile(file, stream);
}
}
public List<int> GetEventsByFile(int id)
{
using (var tagdao = FilesIntegration.GetTagDao())
{
var tagdao = FilesIntegration.GetTagDao();
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();
}
}
#endregion
}
}

View File

@ -32,8 +32,12 @@ using System.Text.RegularExpressions;
using ASC.Collections;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
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.Classes;
using ASC.Web.CRM.Core.Search;
@ -93,11 +97,18 @@ namespace ASC.CRM.Core.Dao
new KeyValuePair<InvoiceStatus, InvoiceStatus>(InvoiceStatus.Paid, InvoiceStatus.Sent)//Bug 23450
};
public InvoiceDao(int tenantID)
: base(tenantID)
public InvoiceDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
public CRMSecurity CRMSecurity { get; }
public Boolean IsExist(int invoiceID)
{
return IsExistFromDb(invoiceID);
@ -106,6 +117,7 @@ namespace ASC.CRM.Core.Dao
public Boolean IsExistFromDb(int invoiceID)
{
return Db.ExecuteScalar<bool>(@"select exists(select 1 from crm_invoice where tenant_id = @tid and id = @id)",
new { tid = TenantID, id = invoiceID });
}
@ -124,8 +136,6 @@ namespace ASC.CRM.Core.Dao
return Db.ExecuteScalar<int>(q) > 0;
}
#region Get
public virtual List<Invoice> GetAll()
{
return Db.ExecuteList(GetInvoiceSqlQuery(null, null)).ConvertAll(ToInvoice);
@ -454,10 +464,6 @@ namespace ASC.CRM.Core.Dao
return Global.TenantSettings.InvoiceSetting ?? InvoiceSetting.DefaultSettings;
}
#endregion
#region SaveOrUpdate
public virtual int SaveOrUpdateInvoice(Invoice invoice)
{
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "invoice.*"));
@ -664,11 +670,6 @@ namespace ASC.CRM.Core.Dao
return tenantSettings.InvoiceSetting;
}
#endregion
#region Delete
public virtual Invoice DeleteInvoice(int invoiceID)
{
if (invoiceID <= 0) return null;
@ -714,10 +715,6 @@ namespace ASC.CRM.Core.Dao
invoices.ForEach(invoice => FactoryIndexer<InvoicesWrapper>.DeleteAsync(invoice));
}
#endregion
#region Private Methods
private static Invoice ToInvoice(object[] row)
{
return new Invoice

View File

@ -24,19 +24,18 @@
*/
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.Web.CRM.Classes;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.Caching;
using ASC.Collections;
using ASC.Common.Data;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.Core;
using ASC.Core.Tenants;
using ASC.CRM.Core.Entities;
using ASC.Web.CRM.Classes;
namespace ASC.CRM.Core.Dao
{
@ -44,8 +43,17 @@ namespace ASC.CRM.Core.Dao
{
private readonly HttpRequestDictionary<InvoiceItem> _invoiceItemCache = new HttpRequestDictionary<InvoiceItem>("crm_invoice_item");
public CachedInvoiceItemDao(int tenantID)
: base(tenantID)
public CachedInvoiceItemDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
TenantUtil tenantUtil,
CRMSecurity cRMSecurity
) : base(dbContextManager,
tenantManager,
securityContext,
tenantUtil,
cRMSecurity)
{
}
@ -82,11 +90,23 @@ namespace ASC.CRM.Core.Dao
public class InvoiceItemDao : AbstractDao
{
public InvoiceItemDao(int tenantID)
: base(tenantID)
public InvoiceItemDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
TenantUtil tenantUtil,
CRMSecurity cRMSecurity
) : base(dbContextManager,
tenantManager,
securityContext)
{
TenantUtil = tenantUtil;
CRMSecurity = cRMSecurity;
}
public CRMSecurity CRMSecurity { get; }
public TenantUtil TenantUtil { get; }
public Boolean IsExist(int invoiceItemID)
{
@ -95,18 +115,14 @@ namespace ASC.CRM.Core.Dao
public Boolean IsExistInDb(int invoiceItemID)
{
return Db.ExecuteScalar<bool>(@"select exists(select 1 from crm_invoice_item where tenant_id = @tid and id = @id)",
new { tid = TenantID, id = invoiceItemID });
return Query(CRMDbContext.InvoiceItem).Any(x => x.Id == invoiceItemID);
}
public Boolean CanDelete(int invoiceItemID)
{
return Db.ExecuteScalar<int>(@"select count(*) from crm_invoice_line where tenant_id = @tid and invoice_item_id = @id",
new { tid = TenantID, id = invoiceItemID }) == 0;
return Query(CRMDbContext.InvoiceLine).Any(x => x.InvoiceItemId == invoiceItemID);
}
#region Get
public virtual List<InvoiceItem> GetAll()
{
return GetAllInDb();
@ -249,11 +265,6 @@ namespace ASC.CRM.Core.Dao
return result;
}
#endregion
#region SaveOrUpdate
public virtual InvoiceItem SaveOrUpdateInvoiceItem(InvoiceItem invoiceItem)
{
/*_cache.Remove(_invoiceItemCacheKey);
@ -336,11 +347,6 @@ namespace ASC.CRM.Core.Dao
return invoiceItem;
}
#endregion
#region Delete
public virtual InvoiceItem DeleteInvoiceItem(int invoiceItemID)
{
var invoiceItem = GetByID(invoiceItemID);
@ -348,7 +354,10 @@ namespace ASC.CRM.Core.Dao
CRMSecurity.DemandDelete(invoiceItem);
Db.ExecuteNonQuery(Delete("crm_invoice_item").Where("id", invoiceItemID));
// Db.ExecuteNonQuery(Delete("crm_invoice_item").Where("id", invoiceItemID));
/*_cache.Remove(_invoiceItemCacheKey);
_cache.Insert(_invoiceItemCacheKey, String.Empty);*/
@ -372,11 +381,6 @@ namespace ASC.CRM.Core.Dao
return items;
}
#endregion
#region Private Methods
private void DeleteBatchItemsExecute(List<InvoiceItem> items)
{
var ids = items.Select(x => x.ID).ToArray();
@ -388,25 +392,45 @@ namespace ASC.CRM.Core.Dao
//}
}
private static InvoiceItem ToInvoiceItem(object[] row)
private InvoiceItem ToInvoiceItem(DbInvoiceItem dbInvoiceItem)
{
return new InvoiceItem
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
Description = Convert.ToString(row[2]),
StockKeepingUnit = Convert.ToString(row[3]),
Price = Convert.ToDecimal(row[4]),
StockQuantity = Convert.ToDecimal(row[5]),
TrackInventory = Convert.ToBoolean(row[6]),
InvoiceTax1ID = Convert.ToInt32(row[7]),
InvoiceTax2ID = Convert.ToInt32(row[8]),
Currency = Convert.ToString(row[9]),
CreateOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[10].ToString())),
CreateBy = ToGuid(row[11]),
LastModifedOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[12].ToString())),
LastModifedBy = ToGuid(row[13])
ID = dbInvoiceItem.Id,
Title = dbInvoiceItem.Title,
Description = dbInvoiceItem.Description,
StockKeepingUnit = dbInvoiceItem.StockKeepingUnit,
Price = dbInvoiceItem.Price,
StockQuantity = dbInvoiceItem.StockQuantity,
TrackInventory = dbInvoiceItem.TrackInventory,
InvoiceTax1ID = dbInvoiceItem.InvoiceTax1Id,
InvoiceTax2ID = dbInvoiceItem.InvoiceTax2Id,
Currency = dbInvoiceItem.Currency,
CreateOn = TenantUtil.DateTimeFromUtc(dbInvoiceItem.CreateOn),
CreateBy = dbInvoiceItem.CreateBy,
LastModifedOn = TenantUtil.DateTimeFromUtc(dbInvoiceItem.LastModifedOn),
LastModifedBy = dbInvoiceItem.LastModifedBy
};
//return new InvoiceItem
// {
// ID = Convert.ToInt32(row[0]),
// Title = Convert.ToString(row[1]),
// Description = Convert.ToString(row[2]),
// StockKeepingUnit = Convert.ToString(row[3]),
// Price = Convert.ToDecimal(row[4]),
// StockQuantity = Convert.ToDecimal(row[5]),
// TrackInventory = Convert.ToBoolean(row[6]),
// InvoiceTax1ID = Convert.ToInt32(row[7]),
// InvoiceTax2ID = Convert.ToInt32(row[8]),
// Currency = Convert.ToString(row[9]),
// CreateOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[10].ToString())),
// CreateBy = ToGuid(row[11]),
// LastModifedOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[12].ToString())),
// LastModifedBy = ToGuid(row[13])
// };
}
private SqlQuery GetInvoiceItemSqlQuery(Exp where)
@ -485,6 +509,5 @@ namespace ASC.CRM.Core.Dao
return conditions.Count == 1 ? conditions[0] : conditions.Aggregate((i, j) => i & j);
}
#endregion
}
}

View File

@ -24,17 +24,16 @@
*/
using ASC.Collections;
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
using ASC.CRM.Core.Entities;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using ASC.Collections;
using ASC.Common.Data;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.CRM.Core.Entities;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;
namespace ASC.CRM.Core.Dao
@ -43,8 +42,12 @@ namespace ASC.CRM.Core.Dao
{
private readonly HttpRequestDictionary<InvoiceLine> _invoiceLineCache = new HttpRequestDictionary<InvoiceLine>("crm_invoice_line");
public CachedInvoiceLineDao(int tenantID)
: base(tenantID)
public CachedInvoiceLineDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
@ -81,9 +84,14 @@ namespace ASC.CRM.Core.Dao
public class InvoiceLineDao : AbstractDao
{
public InvoiceLineDao(int tenantID)
: base(tenantID)
public InvoiceLineDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
@ -109,23 +117,22 @@ namespace ASC.CRM.Core.Dao
});
}
#region Get
public virtual List<InvoiceLine> GetAll()
{
return Db.ExecuteList(GetInvoiceLineSqlQuery(null)).ConvertAll(ToInvoiceLine);
return Query(CRMDbContext.InvoiceLine)
.ToList()
.ConvertAll(ToInvoiceLine);
}
public virtual List<InvoiceLine> GetByID(int[] ids)
{
return Db.ExecuteList(GetInvoiceLineSqlQuery(Exp.In("id", ids))).ConvertAll(ToInvoiceLine);
return Query(CRMDbContext.InvoiceLine).Where(x => ids.Contains(x.Id)).ToList()
.ConvertAll(ToInvoiceLine);
}
public virtual InvoiceLine GetByID(int id)
{
var invoiceLines = Db.ExecuteList(GetInvoiceLineSqlQuery(Exp.Eq("id", id))).ConvertAll(ToInvoiceLine);
return invoiceLines.Count > 0 ? invoiceLines[0] : null;
return ToInvoiceLine(Query(CRMDbContext.InvoiceLine).FirstOrDefault(x => x.Id == id));
}
public List<InvoiceLine> GetInvoiceLines(int invoiceID)
@ -135,14 +142,13 @@ namespace ASC.CRM.Core.Dao
public List<InvoiceLine> GetInvoiceLinesInDb(int invoiceID)
{
return Db.ExecuteList(GetInvoiceLineSqlQuery(Exp.Eq("invoice_id", invoiceID)).OrderBy("sort_order", true)).ConvertAll(ToInvoiceLine);
return Query(CRMDbContext.InvoiceLine)
.Where(x => x.InvoiceId == invoiceID)
.OrderBy(x => x.SortOrder)
.ToList()
.ConvertAll(ToInvoiceLine);
}
#endregion
#region SaveOrUpdate
public virtual int SaveOrUpdateInvoiceLine(InvoiceLine invoiceLine)
{
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "invoice.*"));
@ -160,6 +166,7 @@ namespace ASC.CRM.Core.Dao
invoiceLine.Description = String.Empty;
}
if (Db.ExecuteScalar<int>(Query("crm_invoice_line").SelectCount().Where(Exp.Eq("id", invoiceLine.ID))) == 0)
{
invoiceLine.ID = Db.ExecuteScalar<int>(
@ -195,18 +202,17 @@ namespace ASC.CRM.Core.Dao
return invoiceLine.ID;
}
#endregion
#region Delete
public virtual void DeleteInvoiceLine(int invoiceLineID)
{
var invoiceLine = GetByID(invoiceLineID);
if (invoiceLine == null) return;
Db.ExecuteNonQuery(Delete("crm_invoice_line").Where("id", invoiceLineID));
var itemToDelete = new DbInvoiceLine { Id = invoiceLineID };
CRMDbContext.Attach(itemToDelete);
CRMDbContext.Remove(itemToDelete);
CRMDbContext.SaveChanges();
/*_cache.Remove(_invoiceItemCacheKey);
_cache.Insert(_invoiceLineCacheKey, String.Empty);*/
@ -214,7 +220,10 @@ namespace ASC.CRM.Core.Dao
public void DeleteInvoiceLines(int invoiceID)
{
Db.ExecuteNonQuery(Delete("crm_invoice_line").Where(Exp.Eq("invoice_id", invoiceID)));
var itemToDelete = Query(CRMDbContext.InvoiceLine).Where(x => x.InvoiceId == invoiceID);
CRMDbContext.RemoveRange(itemToDelete);
CRMDbContext.SaveChanges();
/*_cache.Remove(_invoiceItemCacheKey);
_cache.Insert(_invoiceLineCacheKey, String.Empty);*/
@ -227,63 +236,32 @@ namespace ASC.CRM.Core.Dao
public Boolean CanDeleteInDb(int invoiceLineID)
{
var invoiceID = Query(CRMDbContext.InvoiceLine)
.Where(x => x.Id == invoiceLineID)
.Select(x => x.InvoiceId);
var invoiceID = Db.ExecuteScalar<int>(Query("crm_invoice_line").Select("invoice_id")
.Where(Exp.Eq("id", invoiceLineID)));
if (!invoiceID.Any()) return false;
if (invoiceID == 0) return false;
var count = Db.ExecuteScalar<int>(Query("crm_invoice_line").SelectCount()
.Where(Exp.Eq("invoice_id", invoiceID)));
return count > 1;
return Query(CRMDbContext.InvoiceLine).Where(x => x.InvoiceId == invoiceLineID).Any();
}
#endregion
#region Private Methods
private static InvoiceLine ToInvoiceLine(object[] row)
private InvoiceLine ToInvoiceLine(DbInvoiceLine dbInvoiceLine)
{
if (dbInvoiceLine == null) return null;
return new InvoiceLine
{
ID = Convert.ToInt32(row[0]),
InvoiceID = Convert.ToInt32(row[1]),
InvoiceItemID = Convert.ToInt32(row[2]),
InvoiceTax1ID = Convert.ToInt32(row[3]),
InvoiceTax2ID = Convert.ToInt32(row[4]),
SortOrder = Convert.ToInt32(row[5]),
Description = Convert.ToString(row[6]),
Quantity = Convert.ToDecimal(row[7]),
Price = Convert.ToDecimal(row[8]),
Discount = Convert.ToDecimal(row[9])
ID = dbInvoiceLine.Id,
InvoiceID = dbInvoiceLine.InvoiceId,
InvoiceItemID = dbInvoiceLine.InvoiceItemId,
InvoiceTax1ID = dbInvoiceLine.InvoiceTax1Id,
InvoiceTax2ID = dbInvoiceLine.InvoiceTax2Id,
SortOrder = dbInvoiceLine.SortOrder,
Description = dbInvoiceLine.Description,
Quantity = dbInvoiceLine.Quantity,
Price = dbInvoiceLine.Price,
Discount = dbInvoiceLine.Discount
};
}
private SqlQuery GetInvoiceLineSqlQuery(Exp where)
{
var sqlQuery = Query("crm_invoice_line")
.Select(
"id",
"invoice_id",
"invoice_item_id",
"invoice_tax1_id",
"invoice_tax2_id",
"sort_order",
"description",
"quantity",
"price",
"discount");
if (where != null)
{
sqlQuery.Where(where);
}
return sqlQuery;
}
#endregion
}
}

View File

@ -24,17 +24,16 @@
*/
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 System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using ASC.Collections;
using ASC.Common.Data;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.Core;
using ASC.Core.Tenants;
using ASC.CRM.Core.Entities;
namespace ASC.CRM.Core.Dao
{
@ -80,68 +79,67 @@ namespace ASC.CRM.Core.Dao
public class InvoiceTaxDao : AbstractDao
{
public InvoiceTaxDao(int tenantID)
: base(tenantID)
public InvoiceTaxDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext
)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
public TenantUtil TenantUtil { get; }
public CRMSecurity CRMSecurity { get; }
public Boolean IsExist(int invoiceTaxID)
{
return Db.ExecuteScalar<bool>(
@"select exists(select 1 from crm_invoice_tax where tenant_id = @tid and id = @id)",
new {tid = TenantID, id = invoiceTaxID});
return CRMDbContext.InvoiceTax.Where(x => x.Id == invoiceTaxID).Any();
}
public Boolean IsExist(String invoiceName)
{
var q = new SqlQuery("crm_invoice_tax")
.Select("1")
.Where("tenant_id", TenantID)
.Where("name", invoiceName)
.SetMaxResults(1);
return Db.ExecuteScalar<bool>(q);
return Query(CRMDbContext.InvoiceTax).Where(x => String.Compare(x.Name, invoiceName, true) == 0).Any();
}
public Boolean CanDelete(int invoiceTaxID)
{
var count1 = Db.ExecuteScalar<int>(@"select count(*) from crm_invoice_item where tenant_id = @tid and (invoice_tax1_id = @id or invoice_tax2_id = @id)",
new { tid = TenantID, id = invoiceTaxID });
var count2 = Db.ExecuteScalar<int>(@"select count(*) from crm_invoice_line where tenant_id = @tid and (invoice_tax1_id = @id or invoice_tax2_id = @id)",
new { tid = TenantID, id = invoiceTaxID });
return count1 == 0 && count2 == 0;
return !Query(CRMDbContext.InvoiceItem)
.Where(x => x.InvoiceTax1Id == invoiceTaxID || x.InvoiceTax2Id == invoiceTaxID).Any() &&
!Query(CRMDbContext.InvoiceLine)
.Where(x => x.InvoiceTax1Id == invoiceTaxID || x.InvoiceTax2Id == invoiceTaxID).Any();
}
#region Get
public virtual List<InvoiceTax> GetAll()
{
return Db.ExecuteList(GetInvoiceTaxSqlQuery(null)).ConvertAll(ToInvoiceTax);
return Query(CRMDbContext.InvoiceTax)
.ToList()
.ConvertAll(ToInvoiceTax);
}
public DateTime GetMaxLastModified()
{
return Db.ExecuteScalar<DateTime>(Query("crm_invoice_tax").Select("last_modifed_on"));
throw new NotImplementedException();
// return Query(CRMDbContext.InvoiceItem).Select(x => x.la)
// return Db.ExecuteScalar<DateTime>(Query("crm_invoice_tax").Select("last_modifed_on"));
}
public virtual List<InvoiceTax> GetByID(int[] ids)
{
return Db.ExecuteList(GetInvoiceTaxSqlQuery(Exp.In("id", ids))).ConvertAll(ToInvoiceTax);
return Query(CRMDbContext.InvoiceTax)
.Where(x => ids.Contains(x.Id))
.ToList()
.ConvertAll(ToInvoiceTax);
}
public virtual InvoiceTax GetByID(int id)
{
var invoiceTaxes = Db.ExecuteList(GetInvoiceTaxSqlQuery(Exp.Eq("id", id))).ConvertAll(ToInvoiceTax);
return invoiceTaxes.Count > 0 ? invoiceTaxes[0] : null;
return ToInvoiceTax(CRMDbContext.InvoiceTax.FirstOrDefault(x => x.Id == id));
}
#endregion
#region SaveOrUpdate
public virtual InvoiceTax SaveOrUpdateInvoiceTax(InvoiceTax invoiceTax)
{
/*_cache.Remove(_invoiceItemCacheKey);
@ -158,31 +156,55 @@ namespace ASC.CRM.Core.Dao
invoiceTax.LastModifedBy = SecurityContext.CurrentAccount.ID;
invoiceTax.LastModifedOn = DateTime.UtcNow;
if (Db.ExecuteScalar<int>(Query("crm_invoice_tax").SelectCount().Where(Exp.Eq("id", invoiceTax.ID))) == 0)
if (!Query(CRMDbContext.InvoiceTax).Where(x => x.Id == invoiceTax.ID).Any())
{
invoiceTax.CreateOn = DateTime.UtcNow;
invoiceTax.CreateBy = SecurityContext.CurrentAccount.ID;
invoiceTax.ID = Db.ExecuteScalar<int>(
Insert("crm_invoice_tax")
.InColumnValue("id", 0)
.InColumnValue("name", invoiceTax.Name)
.InColumnValue("description", invoiceTax.Description)
.InColumnValue("rate", invoiceTax.Rate)
.InColumnValue("create_on", invoiceTax.CreateOn)
.InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", invoiceTax.LastModifedOn)
.InColumnValue("last_modifed_by", invoiceTax.LastModifedBy)
.Identity(1, 0, true));
var itemToInsert = new DbInvoiceTax
{
Id = 0,
Name = invoiceTax.Name,
Description = invoiceTax.Description,
Rate = invoiceTax.Rate,
CreateOn = invoiceTax.CreateOn,
CreateBy = invoiceTax.CreateBy,
LastModifedBy = invoiceTax.LastModifedBy,
LastModifedOn = invoiceTax.LastModifedOn,
TenantId = TenantID
};
CRMDbContext.InvoiceTax.Add(itemToInsert);
CRMDbContext.SaveChanges();
//invoiceTax.ID = Db.ExecuteScalar<int>(
// Insert("crm_invoice_tax")
// .InColumnValue("id", 0)
// .InColumnValue("name", invoiceTax.Name)
// .InColumnValue("description", invoiceTax.Description)
// .InColumnValue("rate", invoiceTax.Rate)
// .InColumnValue("create_on", invoiceTax.CreateOn)
// .InColumnValue("create_by", SecurityContext.CurrentAccount.ID)
// .InColumnValue("last_modifed_on", invoiceTax.LastModifedOn)
// .InColumnValue("last_modifed_by", invoiceTax.LastModifedBy)
// .Identity(1, 0, true));
}
else
{
var oldInvoiceTax = Db.ExecuteList(GetInvoiceTaxSqlQuery(Exp.Eq("id", invoiceTax.ID)))
.ConvertAll(ToInvoiceTax)
.FirstOrDefault();
var oldInvoiceTax = GetByID(invoiceTax.ID);
CRMSecurity.DemandEdit(oldInvoiceTax);
// throw new NotImplementedException();
CRMDbContext.InvoiceTax.Add(itemToInsert);
CRMDbContext.SaveChanges();
Db.ExecuteNonQuery(
Update("crm_invoice_tax")
.Set("name", invoiceTax.Name)
@ -196,11 +218,6 @@ namespace ASC.CRM.Core.Dao
return invoiceTax;
}
#endregion
#region Delete
public virtual InvoiceTax DeleteInvoiceTax(int invoiceTaxID)
{
var invoiceTax = GetByID(invoiceTaxID);
@ -209,54 +226,48 @@ namespace ASC.CRM.Core.Dao
CRMSecurity.DemandDelete(invoiceTax);
Db.ExecuteNonQuery(Delete("crm_invoice_tax").Where("id", invoiceTaxID));
var itemToDelete = new DbInvoiceTax
{
Id = invoiceTaxID
};
CRMDbContext.Attach(invoiceTax);
CRMDbContext.Remove(itemToDelete);
CRMDbContext.SaveChanges();
/* _cache.Remove(_invoiceItemCacheKey);
_cache.Insert(_invoiceTaxCacheKey, String.Empty);*/
return invoiceTax;
}
#endregion
#region Private Methods
private static InvoiceTax ToInvoiceTax(object[] row)
private InvoiceTax ToInvoiceTax(DbInvoiceTax dbInvoiceTax)
{
if (dbInvoiceTax == null) return null;
return new InvoiceTax
{
ID = Convert.ToInt32(row[0]),
Name = Convert.ToString(row[1]),
Description = Convert.ToString(row[2]),
Rate = Convert.ToDecimal(row[3]),
CreateOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[4].ToString())),
CreateBy = ToGuid(row[5]),
LastModifedOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[6].ToString())),
LastModifedBy = ToGuid(row[7])
ID = dbInvoiceTax.Id,
Name = dbInvoiceTax.Name,
Description = dbInvoiceTax.Description,
Rate = dbInvoiceTax.Rate,
CreateOn = dbInvoiceTax.CreateOn,
CreateBy = dbInvoiceTax.CreateBy,
LastModifedOn = TenantUtil.DateTimeFromUtc(dbInvoiceTax.LastModifedOn),
LastModifedBy = dbInvoiceTax.LastModifedBy
};
}
private SqlQuery GetInvoiceTaxSqlQuery(Exp where)
{
var sqlQuery = Query("crm_invoice_tax")
.Select(
"id",
"name",
"description",
"rate",
"create_on",
"create_by",
"last_modifed_on",
"last_modifed_by");
if (where != null)
{
sqlQuery.Where(where);
}
return sqlQuery;
}
#endregion
//return new InvoiceTax
// {
// ID = Convert.ToInt32(row[0]),
// Name = Convert.ToString(row[1]),
// Description = Convert.ToString(row[2]),
// Rate = Convert.ToDecimal(row[3]),
// CreateOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[4].ToString())),
// CreateBy = ToGuid(row[5]),
// LastModifedOn = TenantUtil.DateTimeFromUtc(DateTime.Parse(row[6].ToString())),
// LastModifedBy = ToGuid(row[7])
// };
}
}
}

View File

@ -23,36 +23,26 @@
*
*/
#region Import
using ASC.Collections;
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Classes;
using ASC.CRM.Core.EF;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
using ASC.CRM.Resources;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using ASC.Collections;
using ASC.Web.CRM.Classes;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.CRM.Core.Entities;
using ASC.Web.CRM.Resources;
#endregion
namespace ASC.CRM.Core.Dao
{
public class CachedListItem : ListItemDao
{
#region Members
private readonly HttpRequestDictionary<ListItem> _listItemCache = new HttpRequestDictionary<ListItem>("crm_list_item");
#endregion
#region Constructor
public CachedListItem(int tenantID)
: base(tenantID)
{
@ -60,10 +50,6 @@ namespace ASC.CRM.Core.Dao
}
#endregion
#region Members
public override void ChangeColor(int id, string newColor)
{
ResetCache(id);
@ -113,66 +99,56 @@ namespace ASC.CRM.Core.Dao
{
_listItemCache.Reset(id.ToString());
}
#endregion
}
public class ListItemDao : AbstractDao
{
#region Constructor
public ListItemDao(int tenantID)
: base(tenantID)
public ListItemDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
#endregion
public bool IsExist(ListType listType, String title)
{
var q = new SqlQuery("crm_list_item")
.Select("1")
.Where("tenant_id", TenantID)
.Where("list_type", (int)listType)
.Where("title", title)
.SetMaxResults(1);
return Db.ExecuteScalar<bool>(q);
return CRMDbContext.ListItem
.Where(x => x.TenantId == TenantID && x.ListType == listType && String.Compare(x.Title, title, true) == 0)
.Any();
}
public bool IsExist(int id)
{
return Db.ExecuteScalar<bool>("select exists(select 1 from crm_list_item where tenant_id = @tid and id = @id)",
new { tid = TenantID, id = id });
return CRMDbContext.ListItem.Where(x => x.Id == id).Any();
}
public List<ListItem> GetItems()
{
var sqlQuery = GetListItemSqlQuery(null).OrderBy("sort_order", true);
return Db.ExecuteList(sqlQuery).ConvertAll(ToListItem);
return Query(CRMDbContext.ListItem)
.OrderBy(x => x.SortOrder)
.ToList()
.ConvertAll(ToListItem);
}
public List<ListItem> GetItems(ListType listType)
{
var sqlQuery = GetListItemSqlQuery(Exp.Eq("list_type", (int)listType))
.OrderBy("sort_order", true);
return Db.ExecuteList(sqlQuery).ConvertAll(ToListItem);
return Query(CRMDbContext.ListItem)
.Where(x => x.ListType == listType)
.OrderBy(x => x.SortOrder)
.ToList()
.ConvertAll(ToListItem);
}
public int GetItemsCount(ListType listType)
{
SqlQuery sqlQuery = Query("crm_list_item").SelectCount().Where(Exp.Eq("list_type", (int)listType))
.OrderBy("sort_order", true);
return Db.ExecuteScalar<int>(sqlQuery);
return Query(CRMDbContext.ListItem)
.Where(x => x.ListType == listType)
.OrderBy(x => x.SortOrder).Count();
}
public ListItem GetSystemListItem(int id)
@ -235,9 +211,7 @@ namespace ASC.CRM.Core.Dao
{
if (id < 0) return GetSystemListItem(id);
var result = Db.ExecuteList(GetListItemSqlQuery(Exp.Eq("id", id))).ConvertAll(ToListItem);
return result.Count > 0 ? result[0] : null;
return ToListItem(Query(CRMDbContext.ListItem).FirstOrDefault(x => x.Id == id));
}
public virtual List<ListItem> GetItems(int[] id)
@ -251,7 +225,10 @@ namespace ASC.CRM.Core.Dao
public virtual List<ListItem> GetAll()
{
return Db.ExecuteList(GetListItemSqlQuery(null)).ConvertAll(ToListItem);
return CRMDbContext
.ListItem
.ToList()
.ConvertAll(ToListItem);
}
public virtual void ChangeColor(int id, string newColor)
@ -277,9 +254,8 @@ namespace ASC.CRM.Core.Dao
public ListItem GetByTitle(ListType listType, string title)
{
var result = Db.ExecuteList(GetListItemSqlQuery(Exp.Eq("title", title) & Exp.Eq("list_type", (int)listType))).ConvertAll(ToListItem);
return result.Count > 0 ? result[0] : null;
return ToListItem(Query(CRMDbContext.ListItem)
.FirstOrDefault(x => String.Compare(x.Title, title, true) == 0 && x.ListType == listType));
}
public int GetRelativeItemsCount(ListType listType, int id)
@ -428,6 +404,7 @@ namespace ASC.CRM.Core.Dao
public virtual void ChangePicture(int id, String newPicture)
{
Db.ExecuteNonQuery(Update("crm_list_item")
.Set("additional_params", newPicture)
.Where(Exp.Eq("id", id)));
@ -474,8 +451,6 @@ namespace ASC.CRM.Core.Dao
if (!IsExist(toItemID))
throw new ArgumentException("", "toItemID");
SqlUpdate sqlUpdate;
switch (listType)
{
case ListType.ContactStatus:
@ -526,60 +501,44 @@ namespace ASC.CRM.Core.Dao
}
}
Db.ExecuteNonQuery(Delete("crm_list_item").Where(Exp.Eq("id", itemID) & Exp.Eq("list_type", (int)listType)));
var itemToRemove = Query(CRMDbContext.ListItem).FirstOrDefault(x => x.Id == itemID);
CRMDbContext.ListItem.Remove(itemToRemove);
CRMDbContext.SaveChanges();
}
public virtual void ReorderItems(ListType listType, String[] titles)
{
using (var tx = Db.BeginTransaction())
{
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)));
}
tx.Commit();
}
}
private SqlQuery GetListItemSqlQuery(Exp where)
public static ListItem ToListItem(DbListItem dbListItem)
{
var result = Query("crm_list_item")
.Select(
"id",
"title",
"description",
"color",
"sort_order",
"additional_params",
"list_type"
);
if (dbListItem == null) return null;
if (where != null)
result.Where(where);
return result;
}
public static ListItem ToListItem(object[] row)
{
var result = new ListItem
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
Description = Convert.ToString(row[2]),
Color = Convert.ToString(row[3]),
SortOrder = Convert.ToInt32(row[4]),
AdditionalParams = Convert.ToString(row[5])
ID = dbListItem.Id,
Title = dbListItem.Title,
Description = dbListItem.Description,
Color = dbListItem.Color,
SortOrder = dbListItem.SortOrder,
AdditionalParams = dbListItem.AdditionalParams,
ListType = dbListItem.ListType
};
ListType listType;
if (Enum.TryParse(Convert.ToString(row[6]), out listType))
{
result.ListType = listType;
}
return result;
}
}

View File

@ -36,6 +36,7 @@ using ASC.Web.CRM.Classes;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
#endregion

View File

@ -48,9 +48,6 @@ namespace ASC.CRM.Core.Dao
public class ManagerDao : AbstractDao
{
#region Constructor
public ManagerDao(int tenantID, String storageKey)
: base(tenantID, storageKey)
{
@ -58,10 +55,6 @@ namespace ASC.CRM.Core.Dao
}
#endregion
#region Methods
public void Add(Guid managerID)
{
DbManager.ExecuteNonQuery(Insert("crm_manager").InColumnValue("id", managerID));
@ -86,8 +79,6 @@ namespace ASC.CRM.Core.Dao
return managers;
}
#endregion
}
}

View File

@ -321,8 +321,8 @@ namespace ASC.CRM.Core.Dao
if (item.CreateOn == DateTime.MinValue)
item.CreateOn = TenantUtil.DateTimeNow();
item.CreateBy = ASC.Core.SecurityContext.CurrentAccount.ID;
item.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;
item.CreateBy = SecurityContext.CurrentAccount.ID;
item.LastModifedBy = SecurityContext.CurrentAccount.ID;
if (item.CategoryID == (int)HistoryCategorySystem.MailMessage)
{

View File

@ -46,28 +46,16 @@ namespace ASC.CRM.Core.Dao
{
public class SearchDao : AbstractDao
{
#region Members
private Dictionary<EntityType, IEnumerable<int>> _findedIDs;
private bool _fullTextSearchEnable;
private DaoFactory DaoFactory { get; set; }
#endregion
#region Constructor
public SearchDao(int tenantID, DaoFactory daoFactory)
: base(tenantID)
{
DaoFactory = daoFactory;
}
#endregion
#region Methods
#region Public
public SearchResultItem[] Search(String searchText)
{
var keywords = searchText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
@ -132,10 +120,6 @@ namespace ASC.CRM.Core.Dao
return ToSearchResultItem(Db.ExecuteList(searchQuery));
}
#endregion
#region Private
private Dictionary<EntityType, IEnumerable<int>> SearchByRelationshipEvent(String[] keywords)
{
var historyQuery = Query("crm_relationship_event")
@ -434,9 +418,5 @@ namespace ASC.CRM.Core.Dao
throw new ArgumentException();
}
}
#endregion
#endregion
}
}

View File

@ -24,34 +24,31 @@
*/
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
using ASC.CRM.Core.Enums;
using ASC.CRM.Resources;
using Microsoft.EntityFrameworkCore.Internal;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using ASC.Common.Data;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.CRM.Core.Entities;
using Newtonsoft.Json;
using ASC.Web.CRM.Resources;
using ASC.CRM.Core.Enums;
namespace ASC.CRM.Core.Dao
{
public class TagDao : AbstractDao
{
#region Constructor
public TagDao(int tenantID)
: base(tenantID)
public TagDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext) :
base(dbContextManager,
tenantManager,
securityContext)
{
}
#endregion
#region Methods
public bool IsExist(EntityType entityType, String tagName)
{
if (String.IsNullOrEmpty(tagName))
@ -62,46 +59,32 @@ namespace ASC.CRM.Core.Dao
private bool IsExistInDb(EntityType entityType, String tagName)
{
var q = new SqlQuery("crm_tag")
.Select("1")
.Where("tenant_id", TenantID)
.Where("entity_type", (int)entityType)
.Where("trim(lower(title))", tagName.Trim().ToLower())
.SetMaxResults(1);
return Db.ExecuteScalar<bool>(q);
return Query(CRMDbContext.Tags)
.Where(x => x.EntityType == entityType && String.Compare(x.Title, tagName, true) == 0).Any();
}
private int GetTagId(EntityType entityType, String tagName)
{
var q = new SqlQuery("crm_tag")
.Select("id")
.Where("tenant_id", TenantID)
.Where("entity_type", (int)entityType)
.Where("trim(lower(title))", tagName.Trim().ToLower())
.SetMaxResults(1);
return Db.ExecuteScalar<int>(q);
return Query(CRMDbContext.Tags)
.Where(x => x.EntityType == entityType && String.Compare(x.Title, tagName, true) == 0)
.Select(x => x.Id)
.SingleOrDefault();
}
public String[] GetAllTags(EntityType entityType)
{
return Db.ExecuteList(
Query("crm_tag")
.Select("title")
.Where(Exp.Eq("entity_type", (int)entityType))
.OrderBy("title", true)).ConvertAll(row => row[0].ToString()).ToArray();
return CRMDbContext.Tags
.Where(x => x.EntityType == entityType)
.OrderBy(x => x.Title)
.Select(x => x.Title)
.ToArray();
}
public List<KeyValuePair<EntityType, string>> GetAllTags()
{
return Db.ExecuteList(
Query("crm_tag")
.Select("title", "entity_type")
.OrderBy("title", true))
.ConvertAll(row => new KeyValuePair<EntityType, string>(
(EntityType)Enum.Parse(typeof(EntityType), row[1].ToString(), true),
row[0].ToString()));
return Query(CRMDbContext.Tags)
.OrderBy(x => x.Title)
.Select(x => new KeyValuePair<EntityType, string> (x.EntityType, x.Title)).ToList();
}
public String GetTagsLinkCountJSON(EntityType entityType)
@ -112,21 +95,42 @@ namespace ASC.CRM.Core.Dao
public IEnumerable<int> GetTagsLinkCount(EntityType entityType)
{
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]));
//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();
}
public Dictionary<int, List<String>> GetEntitiesTags(EntityType entityType)
{
var result = new Dictionary<int, List<String>>();
var sqlQuery =
@ -154,31 +158,47 @@ namespace ASC.CRM.Core.Dao
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));
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 Db.ExecuteList(sqlQuery).ConvertAll(row => Convert.ToString(row[0])).ToArray();
return Query(CRMDbContext.Tags)
.Join(CRMDbContext.EntityTags,
x => x.Id,
y => y.TagId,
(x, y) => new
{
x, y
})
.Where(x => x.y.EntityId == entityID && x.y.EntityType == entityType)
.Select(x => x.x.Title).ToArray();
}
public String[] GetUnusedTags(EntityType entityType)
public string[] GetUnusedTags(EntityType entityType)
{
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();
return Query(CRMDbContext.Tags)
.GroupJoin(CRMDbContext.EntityTags.DefaultIfEmpty(),
x => x.Id,
y => y.TagId,
(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)
{
var tagID = Db.ExecuteScalar<int>(Query("crm_tag").Select("id")
.Where(Exp.Eq("trim(lower(title))", tagName.Trim().ToLower()) & Exp.Eq("entity_type", (int)entityType)));
return tagID != 0;
return Query(CRMDbContext.Tags)
.Where(x => string.Compare(x.Title, tagName, true) == 0 && x.EntityType == entityType)
.Select(x => x.Id).SingleOrDefault() != 0;
}
public void DeleteTag(EntityType entityType, String tagName)
@ -190,59 +210,72 @@ namespace ASC.CRM.Core.Dao
public void DeleteTagFromEntity(EntityType entityType, int entityID, String tagName)
{
var tagID = Db.ExecuteScalar<int>(Query("crm_tag").Select("id")
.Where(Exp.Eq("trim(lower(title))", tagName.Trim().ToLower()) & Exp.Eq("entity_type", (int)entityType)));
var tagID = Query(CRMDbContext.Tags)
.Where(x => String.Compare(x.Title, tagName, true) == 0 && x.EntityType == entityType)
.Select(x => x.Id).SingleOrDefault();
if (tagID == 0) return;
var sqlQuery = new SqlDelete("crm_entity_tag")
.Where(Exp.Eq("entity_type", (int)entityType) & Exp.Eq("tag_id", tagID));
var itemsToRemove = CRMDbContext.EntityTags.Where(x => x.EntityType == entityType && x.TagId == tagID);
if (entityID > 0)
sqlQuery.Where(Exp.Eq("entity_id", entityID));
itemsToRemove = itemsToRemove.Where(x => x.EntityId == entityID);
Db.ExecuteNonQuery(sqlQuery);
CRMDbContext.RemoveRange(itemsToRemove);
if (entityID == 0)
Db.ExecuteNonQuery(Delete("crm_tag")
.Where(Exp.Eq("id", tagID) & Exp.Eq("entity_type", (int)entityType)));
CRMDbContext.Tags.RemoveRange(Query(CRMDbContext.Tags).Where(x => x.Id == tagID && x.EntityType == entityType));
CRMDbContext.SaveChanges();
}
public void DeleteAllTagsFromEntity(EntityType entityType, int entityID)
{
if (entityID <= 0) return;
var sqlQuery = new SqlDelete("crm_entity_tag")
.Where(Exp.Eq("entity_type", (int)entityType) & Exp.Eq("entity_id", entityID));
var itemsToRemove = CRMDbContext.EntityTags.Where(x => x.EntityType == entityType && x.EntityId == entityID);
Db.ExecuteNonQuery(sqlQuery);
CRMDbContext.EntityTags.RemoveRange(itemsToRemove);
CRMDbContext.SaveChanges();
}
public void DeleteUnusedTags(EntityType entityType)
{
if (!_supportedEntityType.Contains(entityType))
throw new ArgumentException();
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
var sqlSubQuery = Query("crm_tag")
.Select("id")
.LeftOuterJoin("crm_entity_tag", Exp.EqColumns("tag_id", "id"))
.Where(Exp.Eq("crm_tag.entity_type", (int)entityType) & Exp.Eq("tag_id", Exp.Empty));
var tagIDs = Db.ExecuteList(sqlSubQuery).ConvertAll(row => Convert.ToInt32(row[0]));
//var temp = from e in CRMDbContext.Tags
// select new { };
if (tagIDs.Count > 0)
Db.ExecuteNonQuery(Delete("crm_tag").Where(Exp.In("id", tagIDs) & Exp.Eq("entity_type", (int)entityType)));
// Query(CRMDbContext.Tags).Join()
// .Select(x => x.Id);
//var sqlSubQuery = Query("crm_tag")
// .Select("id")
// .LeftOuterJoin("crm_entity_tag", Exp.EqColumns("tag_id", "id"))
// .Where(Exp.Eq("crm_tag.entity_type", (int)entityType) & Exp.Eq("tag_id", Exp.Empty));
//List<int> tagIDs = Db.ExecuteList(sqlSubQuery).ConvertAll(row => Convert.ToInt32(row[0]));
// Query(CRMDbContext.Tags).Join()
//if (tagIDs.Count > 0)
//{
// var itemToDelete = Query(CRMDbContext.Tags).Where(x => x.EntityType == entityType && tagIDs.Contains(x.Id));
// CRMDbContext.RemoveRange(itemToDelete);
//}
CRMDbContext.SaveChanges();
tx.Commit();
}
}
public int AddTag(EntityType entityType, String tagName, bool returnExisted = false)
{
tagName = CorrectTag(tagName);
@ -264,12 +297,17 @@ namespace ASC.CRM.Core.Dao
private int AddTagInDb(EntityType entityType, String tagName)
{
return Db.ExecuteScalar<int>(
Insert("crm_tag")
.InColumnValue("id", 0)
.InColumnValue("title", tagName)
.InColumnValue("entity_type", (int)entityType)
.Identity(1, 0, true));
var dbTag = new DbTag
{
Title = tagName,
EntityType = entityType
};
CRMDbContext.Tags.Add(dbTag);
CRMDbContext.SaveChanges();
return dbTag.Id;
}
@ -277,15 +315,12 @@ namespace ASC.CRM.Core.Dao
{
tags = tags.Select(CorrectTag).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray();
var tagNamesAndIds = new Dictionary<string, int>();
using var tx = CRMDbContext.Database.BeginTransaction();
using (var tx = Db.BeginTransaction())
{
Db.ExecuteList(Query("crm_tag").Select("id", "title")
.Where(Exp.In("trim(lower(title))", tags.ToList().ConvertAll(t => t.ToLower())) & Exp.Eq("entity_type", (int)entityType)))
.ForEach(row =>
{ tagNamesAndIds[row[1].ToString()] = (int)row[0]; });
var tagNamesAndIds = Query(CRMDbContext.Tags)
.Where(x => tags.Contains(x.Title) && x.EntityType == entityType)
.Select(x => new { x.Id, x.Title })
.ToDictionary(x => x.Title, x => x.Id);
var tagsForCreate = tags.Where(t => !tagNamesAndIds.ContainsKey(t));
@ -295,10 +330,9 @@ namespace ASC.CRM.Core.Dao
}
tx.Commit();
return tagNamesAndIds;
}
}
private int AddTagToEntityInDb(EntityType entityType, int entityID, String tagName)
{
@ -307,16 +341,21 @@ namespace ASC.CRM.Core.Dao
if (String.IsNullOrEmpty(tagName) || entityID == 0)
throw new ArgumentException();
var tagID = Db.ExecuteScalar<int>(Query("crm_tag").Select("id")
.Where(Exp.Eq("trim(lower(title))", tagName.ToLower()) & Exp.Eq("entity_type", (int)entityType)));
var tagID = Query(CRMDbContext.Tags)
.Where(x => String.Compare(x.Title, tagName, true) == 0 && x.EntityType == entityType)
.Select(x => x.Id).SingleOrDefault();
if (tagID == 0)
tagID = AddTagInDb(entityType, tagName);
Db.ExecuteNonQuery(new SqlInsert("crm_entity_tag", true)
.InColumnValue("entity_id", entityID)
.InColumnValue("entity_type", (int)entityType)
.InColumnValue("tag_id", tagID));
CRMDbContext.EntityTags.Add(new DbEntityTag
{
EntityId = entityID,
EntityType = entityType,
TagId = tagID
});
CRMDbContext.SaveChanges();
return tagID;
}
@ -333,87 +372,105 @@ namespace ASC.CRM.Core.Dao
if (String.IsNullOrEmpty(tagName) || contactID == null || contactID.Length == 0)
throw new ArgumentException();
using (var tx = Db.BeginTransaction())
{
var tagID = Db.ExecuteScalar<int>(Query("crm_tag").Select("id")
.Where(Exp.Eq("trim(lower(title))", tagName.ToLower()) & Exp.Eq("entity_type", (int)EntityType.Contact)));
using var tx = CRMDbContext.Database.BeginTransaction();
var tagID = Query(CRMDbContext.Tags)
.Where(x => String.Compare(x.Title, tagName, true) == 0 && x.EntityType == EntityType.Contact)
.Select(x => x.Id).SingleOrDefault();
if (tagID == 0)
tagID = AddTagInDb(EntityType.Contact, tagName);
foreach (var id in contactID)
{
Db.ExecuteNonQuery(new SqlInsert("crm_entity_tag", true)
.InColumnValue("entity_id", id)
.InColumnValue("entity_type", (int)EntityType.Contact)
.InColumnValue("tag_id", tagID));
CRMDbContext.EntityTags.Add(new DbEntityTag
{
EntityId = id,
EntityType = EntityType.Contact,
TagId = tagID
});
}
CRMDbContext.SaveChanges();
tx.Commit();
return tagID;
}
}
public int DeleteTagFromContacts(int[] contactID, String tagName)
{
if (String.IsNullOrEmpty(tagName) || contactID == null || contactID.Length == 0)
throw new ArgumentException();
using (var tx = Db.BeginTransaction())
{
var tagID = Db.ExecuteScalar<int>(Query("crm_tag").Select("id")
.Where(Exp.Eq("trim(lower(title))", tagName.Trim().ToLower()) & Exp.Eq("entity_type", (int)EntityType.Contact)));
using var tx = CRMDbContext.Database.BeginTransaction();
var tagID = Query(CRMDbContext.Tags)
.Where(x => String.Compare(x.Title, tagName, true) == 0 && x.EntityType == EntityType.Contact)
.Select(x => x.Id)
.SingleOrDefault();
if (tagID == 0)
throw new ArgumentException();
var itemsToRemove = CRMDbContext
.EntityTags
.Where(x => x.EntityType == EntityType.Contact &&
x.TagId == tagID &&
contactID.Contains(x.EntityId));
foreach (var id in contactID)
{
Db.ExecuteNonQuery(new SqlDelete("crm_entity_tag")
.Where(Exp.Eq("entity_id", id) &
Exp.Eq("entity_type", (int)EntityType.Contact) &
Exp.Eq("tag_id", tagID)));
CRMDbContext.EntityTags.RemoveRange(itemsToRemove);
CRMDbContext.SaveChanges();
}
tx.Commit();
return tagID;
}
}
public void SetTagToEntity(EntityType entityType, int entityID, String[] tags)
{
using (var tx = Db.BeginTransaction())
{
Db.ExecuteNonQuery(new SqlDelete("crm_entity_tag")
.Where(Exp.Eq("entity_id", entityID) & Exp.Eq("entity_type", (int)entityType)));
using var tx = CRMDbContext.Database.BeginTransaction();
var itemsToDelete = CRMDbContext.EntityTags.Where(x => x.EntityId == entityID && x.EntityType == entityType);
CRMDbContext.EntityTags.RemoveRange(itemsToDelete);
foreach (var tagName in tags.Where(t => !string.IsNullOrWhiteSpace(t)))
{
AddTagToEntityInDb(entityType, entityID, tagName);
}
CRMDbContext.SaveChanges();
tx.Commit();
}
}
private void AddTagToEntityInDb(EntityType entityType, int entityID, int tagID)
{
Db.ExecuteNonQuery(new SqlInsert("crm_entity_tag", true)
.InColumnValue("entity_id", entityID)
.InColumnValue("entity_type", (int)entityType)
.InColumnValue("tag_id", tagID));
CRMDbContext.EntityTags.Add(new DbEntityTag
{
EntityId = entityID,
EntityType = entityType,
TagId = tagID
});
CRMDbContext.SaveChanges();
}
public void AddTagToEntity(EntityType entityType, int entityID, int[] tagIDs)
{
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
foreach (var tagID in tagIDs)
{
AddTagToEntityInDb(entityType, entityID, tagID);
}
CRMDbContext.SaveChanges();
tx.Commit();
}
}
private static string CorrectTag(string tag)
{
@ -425,6 +482,5 @@ namespace ASC.CRM.Core.Dao
.Replace("\r", string.Empty);
}
#endregion
}
}

View File

@ -24,23 +24,22 @@
*/
using ASC.Collections;
using ASC.Common.Logging;
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 System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using ASC.Collections;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.Common.Logging;
using ASC.Core;
using ASC.Core.Tenants;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
using ASC.ElasticSearch;
using ASC.Web.CRM.Core.Search;
namespace ASC.CRM.Core.Dao
{
public class CachedTaskDao : TaskDao
@ -92,57 +91,75 @@ namespace ASC.CRM.Core.Dao
public class TaskDao : AbstractDao
{
#region Constructor
public TaskDao(int tenantID)
: base(tenantID)
public TaskDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext,
CRMSecurity cRMSecurity,
TenantUtil tenantUtil,
FactoryIndexer<TasksWrapper> factoryIndexer
) :
base(dbContextManager,
tenantManager,
securityContext)
{
CRMSecurity = cRMSecurity;
TenantUtil = tenantUtil;
FactoryIndexer = factoryIndexer;
}
#endregion
public FactoryIndexer<TasksWrapper> FactoryIndexer { get; }
#region Methods
public TenantUtil TenantUtil { get; }
public CRMSecurity CRMSecurity { get; }
public void OpenTask(int taskID)
public void OpenTask(int taskId)
{
var task = GetByID(taskID);
var task = GetByID(taskId);
if (task == null)
throw new ArgumentException();
CRMSecurity.DemandEdit(task);
Db.ExecuteNonQuery(
Update("crm_task")
.Set("is_closed", false)
.Where(Exp.Eq("id", taskID))
);
DbTask entity = new DbTask()
{
Id = taskId,
IsClosed = false
};
CRMDbContext.Tasks.Update(entity);
CRMDbContext.SaveChanges();
}
public void CloseTask(int taskID)
public void CloseTask(int taskId)
{
var task = GetByID(taskID);
var task = GetByID(taskId);
if (task == null)
throw new ArgumentException();
CRMSecurity.DemandEdit(task);
Db.ExecuteNonQuery(
Update("crm_task")
.Set("is_closed", true)
.Where(Exp.Eq("id", taskID))
);
DbTask entity = new DbTask()
{
Id = taskId,
IsClosed = true
};
CRMDbContext.Tasks.Update(entity);
CRMDbContext.SaveChanges();
}
public virtual Task GetByID(int taskID)
{
var tasks = Db.ExecuteList(GetTaskQuery(Exp.Eq("id", taskID)))
.ConvertAll(row => ToTask(row));
var crmTask = CRMDbContext.Tasks.Where(x => x.Id == taskID).SingleOrDefault();
return tasks.Count > 0 ? tasks[0] : null;
if (crmTask == default(DbTask)) return null;
return ToTask(crmTask);
}
public List<Task> GetTasks(EntityType entityType, int entityID, bool? onlyActiveTask)
@ -152,11 +169,13 @@ namespace ASC.CRM.Core.Dao
}
public int GetAllTasksCount()
{
return Db.ExecuteScalar<int>(Query("crm_task").SelectCount());
return CRMDbContext.Tasks.Count();
}
public List<Task> GetAllTasks()
{
return Db.ExecuteList(
GetTaskQuery(null)
.OrderBy("deadline", true)
@ -168,27 +187,19 @@ namespace ASC.CRM.Core.Dao
{
if (!ids.Any()) return;
Db.ExecuteNonQuery(new SqlUpdate("crm_task").Set("exec_alert", true).Where(Exp.In("id", ids.ToArray())));
CRMDbContext.Tasks.UpdateRange(ids.Select(x => new DbTask { ExecAlert = true, Id = x })); ;
CRMDbContext.SaveChanges();
}
public List<object[]> GetInfoForReminder(DateTime scheduleDate)
{
var sqlQuery = new SqlQuery("crm_task")
.Select(
"tenant_id",
"id",
"deadline",
"alert_value",
"responsible_id"
)
.Where(
Exp.Eq("is_closed", false) &
!Exp.Eq("alert_value", 0) &
Exp.Eq("exec_alert", false) &
Exp.Between("DATE_ADD(deadline, interval -alert_value minute)", scheduleDate.AddHours(-1), scheduleDate.AddHours(1))
);
return Db.ExecuteList(sqlQuery);
return CRMDbContext.Tasks.Where(x =>
x.IsClosed == false &&
x.AlertValue != 0 &&
x.ExecAlert == false &&
( x.Deadline.AddMinutes(-x.AlertValue) >= scheduleDate.AddHours(-1) && x.Deadline.AddMinutes(-x.AlertValue) <= scheduleDate.AddHours(-1))
).Select(x => new object[]{ x.TenantId, x.Id, x.Deadline, x.AlertValue, x.ResponsibleId }).ToList();
}
public List<Task> GetTasks(
@ -302,7 +313,7 @@ namespace ASC.CRM.Core.Dao
if (keywords.Length > 0)
{
List<int> tasksIds;
if (!FactoryIndexer<TasksWrapper>.TrySelectIds(s => s.MatchAll(searchText), out tasksIds))
if (!FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out tasksIds))
{
sqlQuery.Where(BuildLike(new[] { taskTableAlias + ".title", taskTableAlias + ".description" }, keywords));
}
@ -427,7 +438,7 @@ namespace ASC.CRM.Core.Dao
.Select("tbl_tsk.id")
.InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id"))
.InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") &
Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.subject", SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Company|', tbl_ctc.id)"))
.Where(Exp.Eq("tbl_ctc.is_shared", 0))
@ -454,7 +465,7 @@ namespace ASC.CRM.Core.Dao
.Select("tbl_tsk.id")
.InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id"))
.InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") &
Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.subject", SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Person|', tbl_ctc.id)"))
.Where(Exp.Eq("tbl_ctc.is_shared", 0))
@ -481,7 +492,7 @@ namespace ASC.CRM.Core.Dao
sqlQuery = Query("crm_task tbl_tsk")
.Select("tbl_tsk.id")
.InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") &
Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.subject", SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Deal|', tbl_tsk.entity_id)"))
.Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Opportunity) & Exp.Eq("tbl_tsk.contact_id", 0));
@ -506,7 +517,7 @@ namespace ASC.CRM.Core.Dao
sqlQuery = Query("crm_task tbl_tsk")
.Select("tbl_tsk.id")
.InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") &
Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.subject", SecurityContext.CurrentAccount.ID.ToString()) &
Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) &
Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Cases|', tbl_tsk.entity_id)"))
.Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Case) & Exp.Eq("tbl_tsk.contact_id", 0));
@ -694,6 +705,10 @@ namespace ASC.CRM.Core.Dao
public IEnumerable<Guid> GetResponsibles(int categoryID)
{
// CRMDbContext.Tasks.Select(x=>x.ResponsibleId)
var q = Query("crm_task")
.Select("responsible_id")
.GroupBy(1);
@ -710,15 +725,10 @@ namespace ASC.CRM.Core.Dao
public Dictionary<int, int> GetTasksCount(int[] contactID)
{
var sqlQuery = Query("crm_task")
.Select("contact_id")
.SelectCount()
.Where(Exp.In("contact_id", contactID))
.GroupBy("contact_id");
var sqlResult = Db.ExecuteList(sqlQuery);
return sqlResult.ToDictionary(item => Convert.ToInt32(item[0]), item => Convert.ToInt32(item[1]));
return CRMDbContext.Tasks
.Where(x => contactID.Contains(x.ContactId))
.GroupBy(x => x.ContactId)
.ToDictionary(x => x.Key, x => x.Count());
}
public int GetTasksCount(int contactID)
@ -781,10 +791,30 @@ namespace ASC.CRM.Core.Dao
if (newTask.ID == 0 || Db.ExecuteScalar<int>(Query("crm_task").SelectCount().Where(Exp.Eq("id", newTask.ID))) == 0)
{
newTask.CreateOn = DateTime.UtcNow;
newTask.CreateBy = ASC.Core.SecurityContext.CurrentAccount.ID;
newTask.CreateBy = SecurityContext.CurrentAccount.ID;
newTask.LastModifedOn = DateTime.UtcNow;
newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;
newTask.LastModifedBy = SecurityContext.CurrentAccount.ID;
new DbTask
{
Title = newTask.Title,
Description = newTask.Description,
Deadline = TenantUtil.DateTimeToUtc(newTask.DeadLine),
ResponsibleId = newTask.ResponsibleID,
ContactId = newTask.ContactID,
EntityType = newTask.EntityType,
EntityId = newTask.EntityID,
IsClosed = newTask.IsClosed,
CategoryId = newTask.CategoryID,
CreateOn = newTask.CreateOn,
CreateBy = newTask.CreateBy,
LastModifedOn = newTask.LastModifedOn,
LastModifedBy = newTask.LastModifedBy,
AlertValue = newTask.AlertValue,
TenantId = TenantID
};
newTask.ID = Db.ExecuteScalar<int>(
Insert("crm_task")
@ -817,7 +847,7 @@ namespace ASC.CRM.Core.Dao
newTask.CreateBy = oldTask.CreateBy;
newTask.LastModifedOn = DateTime.UtcNow;
newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID;
newTask.LastModifedBy = SecurityContext.CurrentAccount.ID;
newTask.IsClosed = oldTask.IsClosed;
@ -838,7 +868,8 @@ namespace ASC.CRM.Core.Dao
.Where(Exp.Eq("id", newTask.ID)));
}
FactoryIndexer<TasksWrapper>.IndexAsync(newTask);
FactoryIndexer.IndexAsync(newTask);
return newTask;
}
@ -854,35 +885,41 @@ namespace ASC.CRM.Core.Dao
newTask.CategoryID == 0)
throw new ArgumentException();
var result = Db.ExecuteScalar<int>(
Insert("crm_task")
.InColumnValue("id", 0)
.InColumnValue("title", newTask.Title)
.InColumnValue("description", newTask.Description)
.InColumnValue("deadline", TenantUtil.DateTimeToUtc(newTask.DeadLine))
.InColumnValue("responsible_id", newTask.ResponsibleID)
.InColumnValue("contact_id", newTask.ContactID)
.InColumnValue("entity_type", (int)newTask.EntityType)
.InColumnValue("entity_id", newTask.EntityID)
.InColumnValue("is_closed", newTask.IsClosed)
.InColumnValue("category_id", newTask.CategoryID)
.InColumnValue("create_on", newTask.CreateOn == DateTime.MinValue ? DateTime.UtcNow : newTask.CreateOn)
.InColumnValue("create_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", newTask.CreateOn == DateTime.MinValue ? DateTime.UtcNow : newTask.CreateOn)
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("alert_value", (int)newTask.AlertValue)
.Identity(1, 0, true));
var dbTask = new DbTask
{
Title = newTask.Title,
Description = newTask.Description,
Deadline = TenantUtil.DateTimeToUtc(newTask.DeadLine),
ResponsibleId = newTask.ResponsibleID,
ContactId = newTask.ContactID,
EntityType = newTask.EntityType,
EntityId = newTask.EntityID,
IsClosed = newTask.IsClosed,
CategoryId = newTask.CategoryID,
CreateOn = newTask.CreateOn == DateTime.MinValue ? DateTime.UtcNow : newTask.CreateOn,
CreateBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = newTask.CreateOn == DateTime.MinValue ? DateTime.UtcNow : newTask.CreateOn,
LastModifedBy = SecurityContext.CurrentAccount.ID,
AlertValue = newTask.AlertValue,
TenantId = TenantID
};
newTask.ID = result;
FactoryIndexer<TasksWrapper>.IndexAsync(newTask);
CRMDbContext.Tasks.Add(dbTask);
return result;
CRMDbContext.SaveChanges();
newTask.ID = dbTask.Id;
FactoryIndexer.IndexAsync(newTask);
return newTask.ID;
}
public virtual int[] SaveTaskList(List<Task> items)
{
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
var result = new List<int>();
foreach (var item in items)
@ -890,11 +927,12 @@ namespace ASC.CRM.Core.Dao
result.Add(SaveTaskInDb(item));
}
CRMDbContext.SaveChanges();
tx.Commit();
return result.ToArray();
}
}
public virtual void DeleteTask(int taskID)
@ -905,10 +943,11 @@ namespace ASC.CRM.Core.Dao
CRMSecurity.DemandEdit(task);
Db.ExecuteNonQuery(Delete("crm_task").Where("id", taskID));
CRMDbContext.Tasks.Remove(new DbTask { Id = taskID });
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "tasks.*"));
FactoryIndexer<TasksWrapper>.DeleteAsync(task);
FactoryIndexer.DeleteAsync(task);
}
public List<Task> CreateByTemplate(List<TaskTemplate> templateItems, EntityType entityType, int entityID)
@ -917,8 +956,8 @@ namespace ASC.CRM.Core.Dao
var result = new List<Task>();
using (var tx = Db.BeginTransaction())
{
using var tx = CRMDbContext.Database.BeginTransaction();
foreach (var templateItem in templateItems)
{
var task = new Task
@ -955,41 +994,23 @@ namespace ASC.CRM.Core.Dao
result.Add(task);
Db.ExecuteNonQuery(Insert("crm_task_template_task")
.InColumnValue("task_id", task.ID)
.InColumnValue("task_template_id", templateItem.ID));
CRMDbContext.TaskTemplateTask.Add(new DbTaskTemplateTask
{
TaskId = task.ID,
TaskTemplateId = templateItem.ID,
TenantId = TenantID
});
}
tx.Commit();
}
CRMDbContext.SaveChanges();
return result;
}
#region Private Methods
private static Task ToTask(object[] row)
{
return new Task
{
ID = Convert.ToInt32(row[0]),
ContactID = Convert.ToInt32(row[1]),
Title = Convert.ToString(row[2]),
Description = Convert.ToString(row[3]),
DeadLine = TenantUtil.DateTimeFromUtc(Convert.ToDateTime(row[4])),
ResponsibleID = ToGuid(row[5]),
IsClosed = Convert.ToBoolean(row[6]),
CategoryID = Convert.ToInt32(row[7]),
EntityID = Convert.ToInt32(row[8]),
EntityType = (EntityType)Convert.ToInt32(row[9]),
CreateOn = TenantUtil.DateTimeFromUtc(Convert.ToDateTime(row[10])),
CreateBy = ToGuid(row[11]),
AlertValue = Convert.ToInt32(row[12])
};
}
private String[] GetTaskColumnsTable(String alias)
{
if (!String.IsNullOrEmpty(alias))
@ -1017,34 +1038,34 @@ namespace ASC.CRM.Core.Dao
return result.ConvertAll(item => String.Concat(alias, item)).ToArray();
}
private SqlQuery GetTaskQuery(Exp where, String alias)
{
//private SqlQuery GetTaskQuery(Exp where, String alias)
//{
var sqlQuery = Query("crm_task");
// var sqlQuery = Query("crm_task");
if (!String.IsNullOrEmpty(alias))
{
sqlQuery = new SqlQuery(String.Concat("crm_task ", alias))
.Where(Exp.Eq(alias + ".tenant_id", TenantID));
sqlQuery.Select(GetTaskColumnsTable(alias));
// if (!String.IsNullOrEmpty(alias))
// {
// sqlQuery = new SqlQuery(String.Concat("crm_task ", alias))
// .Where(Exp.Eq(alias + ".tenant_id", TenantID));
// sqlQuery.Select(GetTaskColumnsTable(alias));
}
else
sqlQuery.Select(GetTaskColumnsTable(String.Empty));
// }
// else
// sqlQuery.Select(GetTaskColumnsTable(String.Empty));
if (where != null)
sqlQuery.Where(where);
// if (where != null)
// sqlQuery.Where(where);
return sqlQuery;
// return sqlQuery;
}
//}
private SqlQuery GetTaskQuery(Exp where)
{
return GetTaskQuery(where, String.Empty);
//private SqlQuery GetTaskQuery(Exp where)
//{
// return GetTaskQuery(where, String.Empty);
}
//}
#endregion
@ -1063,9 +1084,6 @@ namespace ASC.CRM.Core.Dao
}
}
#endregion
/// <summary>
/// Test method
/// </summary>
@ -1073,10 +1091,16 @@ namespace ASC.CRM.Core.Dao
/// <param name="creationDate"></param>
public void SetTaskCreationDate(int taskId, DateTime creationDate)
{
Db.ExecuteNonQuery(
Update("crm_task")
.Set("create_on", TenantUtil.DateTimeToUtc(creationDate))
.Where(Exp.Eq("id", taskId)));
DbTask entity = new DbTask()
{
Id = taskId,
CreateOn = TenantUtil.DateTimeToUtc(creationDate)
};
CRMDbContext.Tasks.Update(entity);
CRMDbContext.SaveChanges();
// Delete relative keys
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "tasks.*"));
}
@ -1088,12 +1112,23 @@ namespace ASC.CRM.Core.Dao
/// <param name="lastModifedDate"></param>
public void SetTaskLastModifedDate(int taskId, DateTime lastModifedDate)
{
Db.ExecuteNonQuery(
Update("crm_task")
.Set("last_modifed_on", TenantUtil.DateTimeToUtc(lastModifedDate))
.Where(Exp.Eq("id", taskId)));
DbTask entity = new DbTask()
{
Id = taskId,
LastModifedOn = TenantUtil.DateTimeToUtc(lastModifedDate)
};
CRMDbContext.Tasks.Update(entity);
CRMDbContext.SaveChanges();
// Delete relative keys
_cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "tasks.*"));
}
public Task ToTask(DbTask dbTask)
{
throw new NotImplementedException();
}
}
}

View File

@ -23,95 +23,59 @@
*
*/
#region Import
using ASC.Core;
using ASC.Core.Common.EF;
using ASC.CRM.Core.EF;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using ASC.Common.Data.Sql;
using ASC.Common.Data.Sql.Expressions;
using ASC.Core.Tenants;
using ASC.CRM.Core.Entities;
#endregion
using System.Linq;
namespace ASC.CRM.Core.Dao
{
public class CachedTaskTemplateContainerDao : TaskTemplateContainerDao
{
#region Constructor
public CachedTaskTemplateContainerDao(int tenantID)
: base(tenantID)
{
}
#endregion
}
public class CachedTaskTemplateDao : TaskTemplateDao
{
#region Constructor
public CachedTaskTemplateDao(int tenantID)
: base(tenantID)
{
}
#endregion
}
public class TaskTemplateContainerDao : AbstractDao
{
#region Constructor
public TaskTemplateContainerDao(int tenantID)
: base(tenantID)
public TaskTemplateContainerDao(
DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
#endregion
#region Methods
public virtual int SaveOrUpdate(TaskTemplateContainer item)
{
if (item.ID == 0 && Db.ExecuteScalar<int>(Query("crm_task_template_container").SelectCount().Where(Exp.Eq("id", item.ID))) == 0)
var dbTaskTemplateContainer = new DbTaskTemplateContainer
{
Id = item.ID,
Title = item.Title,
EntityType = item.EntityType,
CreateOn = DateTime.UtcNow,
CreateBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = DateTime.UtcNow,
LastModifedBy = SecurityContext.CurrentAccount.ID,
TenantId = TenantID
};
item.ID = Db.ExecuteScalar<int>(
Insert("crm_task_template_container")
.InColumnValue("id", 0)
.InColumnValue("title", item.Title)
.InColumnValue("entity_type", (int)item.EntityType)
.InColumnValue("create_on", DateTime.UtcNow)
.InColumnValue("create_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", DateTime.UtcNow)
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true));
if (item.ID == 0 && Query(CRMDbContext.TaskTemplateContainer).Where(x => x.Id == item.ID).Any())
{
CRMDbContext.TaskTemplateContainer.Add(dbTaskTemplateContainer);
item.ID = dbTaskTemplateContainer.Id;
CRMDbContext.SaveChanges();
}
else
{
CRMDbContext.TaskTemplateContainer.Attach(dbTaskTemplateContainer);
Db.ExecuteScalar<int>(
Update("crm_task_template_container")
.Set("title", item.Title)
.Set("entity_type", (int)item.EntityType)
.Set("last_modifed_on", DateTime.UtcNow)
.Set("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Where(Exp.Eq("id", item.ID)));
CRMDbContext.SaveChanges();
}
@ -120,24 +84,23 @@ namespace ASC.CRM.Core.Dao
public virtual void Delete(int id)
{
if (id <= 0)
throw new ArgumentException();
Db.ExecuteNonQuery(Delete("crm_task_template_container").Where("id", id));
var itemToDelete = new DbTaskTemplateContainer { Id = id };
CRMDbContext.TaskTemplateContainer.Attach(itemToDelete);
CRMDbContext.TaskTemplateContainer.Remove(itemToDelete);
CRMDbContext.SaveChanges();
}
public virtual TaskTemplateContainer GetByID(int id)
{
if (id <= 0)
throw new ArgumentException();
var result = Db.ExecuteList(GetQuery(null).Where(Exp.Eq("id", id))).ConvertAll(row => ToObject(row));
if (result.Count == 0) return null;
return result[0];
return ToObject(Query(CRMDbContext.TaskTemplateContainer).FirstOrDefault(x => x.Id == id));
}
public virtual List<TaskTemplateContainer> GetItems(EntityType entityType)
@ -145,91 +108,81 @@ namespace ASC.CRM.Core.Dao
if (!_supportedEntityType.Contains(entityType))
throw new ArgumentException("", entityType.ToString());
return Db.ExecuteList(GetQuery(Exp.Eq("entity_type", (int)entityType)))
.ConvertAll(row => ToObject(row));
return Query(CRMDbContext.TaskTemplateContainer)
.Where(x => x.EntityType == entityType)
.ToList()
.ConvertAll(ToObject);
}
#endregion
protected SqlQuery GetQuery(Exp where)
protected TaskTemplateContainer ToObject(DbTaskTemplateContainer dbTaskTemplateContainer)
{
if (dbTaskTemplateContainer == null) return null;
var sqlQuery = Query("crm_task_template_container")
.Select("id",
"title",
"entity_type");
if (where != null)
sqlQuery.Where(where);
return sqlQuery;
}
protected TaskTemplateContainer ToObject(object[] row)
{
return new TaskTemplateContainer
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
EntityType = (EntityType)Convert.ToInt32(row[2])
ID = dbTaskTemplateContainer.Id,
Title = dbTaskTemplateContainer.Title,
EntityType = dbTaskTemplateContainer.EntityType
};
}
}
public class TaskTemplateDao : AbstractDao
{
#region Constructor
public TaskTemplateDao(int tenantID)
: base(tenantID)
public TaskTemplateDao(DbContextManager<CRMDbContext> dbContextManager,
TenantManager tenantManager,
SecurityContext securityContext)
: base(dbContextManager,
tenantManager,
securityContext)
{
}
#endregion
#region Methods
public int SaveOrUpdate(TaskTemplate item)
{
if (item.ID == 0 && Db.ExecuteScalar<int>(Query("crm_task_template").SelectCount().Where(Exp.Eq("id", item.ID))) == 0)
if (item.ID == 0)
{
var itemToInsert = new DbTaskTemplate
{
Id = item.ID,
Title = item.Title,
CategoryId = item.CategoryID,
Description = item.Description,
ResponsibleId = item.ResponsibleID,
IsNotify = item.isNotify,
Offset = item.Offset.Ticks,
DeadLineIsFixed = item.DeadLineIsFixed,
ContainerId = item.ContainerID,
CreateOn = DateTime.UtcNow,
CreateBy = SecurityContext.CurrentAccount.ID,
LastModifedOn = DateTime.UtcNow,
LastModifedBy = SecurityContext.CurrentAccount.ID,
TenantId = TenantID
};
item.ID = Db.ExecuteScalar<int>(
Insert("crm_task_template")
.InColumnValue("id", 0)
.InColumnValue("title", item.Title)
.InColumnValue("category_id", item.CategoryID)
.InColumnValue("description", item.Description)
.InColumnValue("responsible_id", item.ResponsibleID)
.InColumnValue("is_notify", item.isNotify)
.InColumnValue("offset", item.Offset.Ticks)
.InColumnValue("deadLine_is_fixed", item.DeadLineIsFixed)
.InColumnValue("container_id", item.ContainerID)
.InColumnValue("create_on", DateTime.UtcNow)
.InColumnValue("create_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.InColumnValue("last_modifed_on", DateTime.UtcNow)
.InColumnValue("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Identity(1, 0, true));
CRMDbContext.TaskTemplates.Add(itemToInsert);
CRMDbContext.SaveChanges();
}
else
{
Db.ExecuteNonQuery(
Update("crm_task_template")
.Set("title", item.Title)
.Set("category_id", item.CategoryID)
.Set("description", item.Description)
.Set("responsible_id", item.ResponsibleID)
.Set("is_notify", item.isNotify)
.Set("offset", item.Offset.Ticks)
.Set("deadLine_is_fixed", item.DeadLineIsFixed)
.Set("container_id", item.ContainerID)
.Set("last_modifed_on", DateTime.UtcNow)
.Set("last_modifed_by", ASC.Core.SecurityContext.CurrentAccount.ID)
.Where("id", item.ID));
//Db.ExecuteNonQuery(
// Update("crm_task_template")
// .Set("title", item.Title)
// .Set("category_id", item.CategoryID)
// .Set("description", item.Description)
// .Set("responsible_id", item.ResponsibleID)
// .Set("is_notify", item.isNotify)
// .Set("offset", item.Offset.Ticks)
// .Set("deadLine_is_fixed", item.DeadLineIsFixed)
// .Set("container_id", item.ContainerID)
// .Set("last_modifed_on", DateTime.UtcNow)
// .Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
// .Where("id", item.ID));
//CRMDbContext.TaskTemplates.Add(itemToInsert);
//CRMDbContext.SaveChanges();
}
return item.ID;
@ -237,36 +190,47 @@ namespace ASC.CRM.Core.Dao
public TaskTemplate GetNext(int taskID)
{
using (var tx = Db.BeginTransaction())
using var tx = CRMDbContext.Database.BeginTransaction();
var temp = Query(CRMDbContext.TaskTemplateTask)
.Join(CRMDbContext.TaskTemplates,
x => new { x.TenantId, x.TaskTemplateId },
y => new { y.TenantId, y.Id },
(x, y) => new
{
var sqlResult = Db.ExecuteList(
Query("crm_task_template_task tblTTT")
.Select("tblTT.container_id")
.Select("tblTT.sort_order")
.LeftOuterJoin("crm_task_template tblTT", Exp.EqColumns("tblTT.tenant_id", "tblTTT.tenant_id") & Exp.EqColumns("tblTT.id", "tblTTT.task_template_id"))
.Where(Exp.Eq("tblTTT.task_id", taskID) & Exp.Eq("tblTT.tenant_id", TenantID)));
x, y
});
if (sqlResult.Count == 0) return null;
//var sqlResult = Db.ExecuteList(
// Query("crm_task_template_task tblTTT")
// .Select("tblTT.container_id")
// .Select("tblTT.sort_order")
// .LeftOuterJoin("crm_task_template tblTT", Exp.EqColumns("tblTT.tenant_id", "tblTTT.tenant_id") & Exp.EqColumns("tblTT.id", "tblTTT.task_template_id"))
// .Where(Exp.Eq("tblTTT.task_id", taskID) & Exp.Eq("tblTT.tenant_id", TenantID)));
var result = Db.ExecuteList(GetQuery(Exp.Eq("container_id", sqlResult[0][0]) &
Exp.Gt("sort_order", sqlResult[0][1]) &
Exp.Eq("deadLine_is_fixed", false)).SetMaxResults(1)).ConvertAll(
row => ToObject(row));
//if (sqlResult.Count == 0) return null;
Db.ExecuteNonQuery(Delete("crm_task_template_task").Where(Exp.Eq("task_id", taskID)));
//var result = Db.ExecuteList(GetQuery(Exp.Eq("container_id", sqlResult[0][0]) &
// Exp.Gt("sort_order", sqlResult[0][1]) &
// Exp.Eq("deadLine_is_fixed", false)).SetMaxResults(1)).ConvertAll(
// row => ToObject(row));
//Db.ExecuteNonQuery(Delete("crm_task_template_task").Where(Exp.Eq("task_id", taskID)));
tx.Commit();
if (result.Count == 0) return null;
// if (result.Count == 0) return null;
// return result[0];
return result[0];
}
}
public List<TaskTemplate> GetAll()
{
return Db.ExecuteList(GetQuery(null))
.ConvertAll(row => ToObject(row));
return Query(CRMDbContext.TaskTemplates)
.OrderBy(x => x.SortOrder)
.ToList()
.ConvertAll(ToObject);
}
public List<TaskTemplate> GetList(int containerID)
@ -274,8 +238,11 @@ namespace ASC.CRM.Core.Dao
if (containerID <= 0)
throw new NotImplementedException();
return Db.ExecuteList(GetQuery(Exp.Eq("container_id", containerID)))
.ConvertAll(row => ToObject(row));
return Query(CRMDbContext.TaskTemplates)
.Where(x => x.ContainerId == containerID)
.OrderBy(x=> x.SortOrder)
.ToList()
.ConvertAll(ToObject);
}
public virtual TaskTemplate GetByID(int id)
@ -283,12 +250,7 @@ namespace ASC.CRM.Core.Dao
if (id <= 0)
throw new NotImplementedException();
var items = Db.ExecuteList(GetQuery(Exp.Eq("id", id))).ConvertAll(row => ToObject(row));
if (items.Count == 0)
return null;
return items[0];
return ToObject(CRMDbContext.TaskTemplates.FirstOrDefault(x => x.Id == id));
}
public virtual void Delete(int id)
@ -296,53 +258,34 @@ namespace ASC.CRM.Core.Dao
if (id <= 0)
throw new NotImplementedException();
Db.ExecuteNonQuery(Delete("crm_task_template").Where("id", id));
var itemToRemove = new DbTaskTemplate
{
Id = id
};
CRMDbContext.Entry(itemToRemove).State = EntityState.Deleted;
CRMDbContext.SaveChanges();
}
protected TaskTemplate ToObject(object[] row)
protected TaskTemplate ToObject(DbTaskTemplate dbTaskTemplate)
{
if (dbTaskTemplate == null) return null;
return new TaskTemplate
{
ID = Convert.ToInt32(row[0]),
Title = Convert.ToString(row[1]),
CategoryID = Convert.ToInt32(row[2]),
Description = Convert.ToString(row[3]),
ResponsibleID = ToGuid(row[4]),
isNotify = Convert.ToBoolean(row[5]),
Offset = TimeSpan.FromTicks((long)row[6]),
DeadLineIsFixed = Convert.ToBoolean(row[7]),
ContainerID = Convert.ToInt32(row[8]),
CreateOn = TenantUtil.DateTimeFromUtc(Convert.ToDateTime(row[9])),
CreateBy = ToGuid(row[10])
ID = dbTaskTemplate.Id,
Title = dbTaskTemplate.Title,
CategoryID = dbTaskTemplate.CategoryId,
Description = dbTaskTemplate.Description,
ResponsibleID = dbTaskTemplate.ResponsibleId,
isNotify = dbTaskTemplate.IsNotify,
Offset = TimeSpan.FromTicks(dbTaskTemplate.Offset),
DeadLineIsFixed = dbTaskTemplate.DeadLineIsFixed,
ContainerID = dbTaskTemplate.ContainerId,
CreateOn = dbTaskTemplate.CreateOn,
CreateBy = dbTaskTemplate.CreateBy
};
}
protected SqlQuery GetQuery(Exp where)
{
var sqlQuery = Query("crm_task_template")
.Select("id",
"title",
"category_id",
"description",
"responsible_id",
"is_notify",
"offset",
"deadLine_is_fixed",
"container_id",
"create_on",
"create_by"
);
if (where != null)
sqlQuery.Where(where);
sqlQuery.OrderBy("sort_order", true);
return sqlQuery;
}
#endregion
}
}

View File

@ -7,42 +7,33 @@ namespace ASC.CRM.Core.EF
{
public partial class CRMDbContext : BaseDbContext
{
//public CRMDbContext()
//{
//}
//public CRMDbContext(DbContextOptions<CRMDbContext> options)
// : base(options)
//{
//}
public virtual DbSet<CrmCase> CrmCase { get; set; }
public virtual DbSet<CrmContact> CrmContact { get; set; }
public virtual DbSet<CrmContactInfo> CrmContactInfo { get; set; }
public virtual DbSet<CrmCurrencyInfo> CrmCurrencyInfo { get; set; }
public virtual DbSet<CrmCurrencyRate> CrmCurrencyRate { get; set; }
public virtual DbSet<CrmDeal> CrmDeal { get; set; }
public virtual DbSet<CrmDealMilestone> CrmDealMilestone { get; set; }
public virtual DbSet<CrmEntityContact> CrmEntityContact { get; set; }
public virtual DbSet<CrmEntityTag> CrmEntityTag { get; set; }
public virtual DbSet<CrmFieldDescription> CrmFieldDescription { get; set; }
public virtual DbSet<CrmFieldValue> CrmFieldValue { get; set; }
public virtual DbSet<CrmInvoice> CrmInvoice { get; set; }
public virtual DbSet<CrmInvoiceItem> CrmInvoiceItem { get; set; }
public virtual DbSet<CrmInvoiceLine> CrmInvoiceLine { get; set; }
public virtual DbSet<CrmInvoiceTax> CrmInvoiceTax { get; set; }
public virtual DbSet<CrmListItem> CrmListItem { get; set; }
public virtual DbSet<CrmOrganisationLogo> CrmOrganisationLogo { get; set; }
public virtual DbSet<CrmProjects> CrmProjects { get; set; }
public virtual DbSet<CrmRelationshipEvent> CrmRelationshipEvent { get; set; }
public virtual DbSet<CrmReportFile> CrmReportFile { get; set; }
public virtual DbSet<CrmTag> CrmTag { get; set; }
public virtual DbSet<CrmTask> CrmTask { get; set; }
public virtual DbSet<CrmTaskTemplate> CrmTaskTemplate { get; set; }
public virtual DbSet<CrmTaskTemplateContainer> CrmTaskTemplateContainer { get; set; }
public virtual DbSet<CrmTaskTemplateTask> CrmTaskTemplateTask { get; set; }
public virtual DbSet<CrmVoipCalls> CrmVoipCalls { get; set; }
public virtual DbSet<CrmVoipNumber> CrmVoipNumber { get; set; }
public virtual DbSet<DbCase> Cases { get; set; }
public virtual DbSet<DbContact> Contacts { get; set; }
public virtual DbSet<DbContactInfo> ContactsInfo { get; set; }
public virtual DbSet<DbCurrencyInfo> CurrencyInfo { get; set; }
public virtual DbSet<DbCurrencyRate> CurrencyRate { get; set; }
public virtual DbSet<DbDeal> Deals { get; set; }
public virtual DbSet<DbDealMilestone> DealMilestones { get; set; }
public virtual DbSet<DbEntityContact> EntityContact { get; set; }
public virtual DbSet<DbEntityTag> EntityTags { get; set; }
public virtual DbSet<DbFieldDescription> FieldDescription { get; set; }
public virtual DbSet<DbFieldValue> FieldValue { get; set; }
public virtual DbSet<DbInvoice> Invoices { get; set; }
public virtual DbSet<DbInvoiceItem> InvoiceItem { get; set; }
public virtual DbSet<DbInvoiceLine> InvoiceLine { get; set; }
public virtual DbSet<DbInvoiceTax> InvoiceTax { get; set; }
public virtual DbSet<DbListItem> ListItem { get; set; }
public virtual DbSet<DbOrganisationLogo> OrganisationLogo { get; set; }
public virtual DbSet<DbProjects> Projects { get; set; }
public virtual DbSet<DbRelationshipEvent> RelationshipEvent { get; set; }
public virtual DbSet<DbReportFile> ReportFile { get; set; }
public virtual DbSet<DbTag> Tags { get; set; }
public virtual DbSet<DbTask> Tasks { get; set; }
public virtual DbSet<DbTaskTemplate> TaskTemplates { get; set; }
public virtual DbSet<DbTaskTemplateContainer> TaskTemplateContainer { get; set; }
public virtual DbSet<DbTaskTemplateTask> TaskTemplateTask { get; set; }
public virtual DbSet<DbVoipCalls> VoipCalls { get; set; }
public virtual DbSet<DbVoipNumber> VoipNumber { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
@ -53,7 +44,7 @@ namespace ASC.CRM.Core.EF
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CrmCase>(entity =>
modelBuilder.Entity<DbCase>(entity =>
{
entity.HasIndex(e => e.CreateOn)
.HasName("create_on");
@ -77,7 +68,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmContact>(entity =>
modelBuilder.Entity<DbContact>(entity =>
{
entity.HasIndex(e => e.CreateOn)
.HasName("create_on");
@ -132,7 +123,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmContactInfo>(entity =>
modelBuilder.Entity<DbContactInfo>(entity =>
{
entity.HasIndex(e => e.LastModifedOn)
.HasName("last_modifed_on");
@ -149,7 +140,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmCurrencyInfo>(entity =>
modelBuilder.Entity<DbCurrencyInfo>(entity =>
{
entity.HasKey(e => e.Abbreviation)
.HasName("PRIMARY");
@ -171,7 +162,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmCurrencyRate>(entity =>
modelBuilder.Entity<DbCurrencyRate>(entity =>
{
entity.HasIndex(e => e.FromCurrency)
.HasName("from_currency");
@ -196,7 +187,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmDeal>(entity =>
modelBuilder.Entity<DbDeal>(entity =>
{
entity.HasIndex(e => e.CreateOn)
.HasName("create_on");
@ -235,7 +226,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmDealMilestone>(entity =>
modelBuilder.Entity<DbDealMilestone>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -254,7 +245,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmEntityContact>(entity =>
modelBuilder.Entity<DbEntityContact>(entity =>
{
entity.HasKey(e => new { e.EntityId, e.EntityType, e.ContactId })
.HasName("PRIMARY");
@ -263,7 +254,7 @@ namespace ASC.CRM.Core.EF
.HasName("IX_Contact");
});
modelBuilder.Entity<CrmEntityTag>(entity =>
modelBuilder.Entity<DbEntityTag>(entity =>
{
entity.HasKey(e => new { e.EntityId, e.EntityType, e.TagId })
.HasName("PRIMARY");
@ -272,7 +263,7 @@ namespace ASC.CRM.Core.EF
.HasName("tag_id");
});
modelBuilder.Entity<CrmFieldDescription>(entity =>
modelBuilder.Entity<DbFieldDescription>(entity =>
{
entity.HasIndex(e => new { e.TenantId, e.EntityType, e.SortOrder })
.HasName("entity_type");
@ -286,7 +277,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmFieldValue>(entity =>
modelBuilder.Entity<DbFieldValue>(entity =>
{
entity.HasIndex(e => e.FieldId)
.HasName("field_id");
@ -306,7 +297,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmInvoice>(entity =>
modelBuilder.Entity<DbInvoice>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -358,7 +349,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmInvoiceItem>(entity =>
modelBuilder.Entity<DbInvoiceItem>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -388,7 +379,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmInvoiceLine>(entity =>
modelBuilder.Entity<DbInvoiceLine>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -398,7 +389,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmInvoiceTax>(entity =>
modelBuilder.Entity<DbInvoiceTax>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -420,7 +411,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmListItem>(entity =>
modelBuilder.Entity<DbListItem>(entity =>
{
entity.HasIndex(e => new { e.TenantId, e.ListType })
.HasName("list_type");
@ -442,7 +433,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmOrganisationLogo>(entity =>
modelBuilder.Entity<DbOrganisationLogo>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -456,7 +447,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmProjects>(entity =>
modelBuilder.Entity<DbProjects>(entity =>
{
entity.HasKey(e => new { e.TenantId, e.ContactId, e.ProjectId })
.HasName("PRIMARY");
@ -468,7 +459,7 @@ namespace ASC.CRM.Core.EF
.HasName("project_id");
});
modelBuilder.Entity<CrmRelationshipEvent>(entity =>
modelBuilder.Entity<DbRelationshipEvent>(entity =>
{
entity.HasIndex(e => e.ContactId)
.HasName("IX_Contact");
@ -495,7 +486,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmReportFile>(entity =>
modelBuilder.Entity<DbReportFile>(entity =>
{
entity.HasKey(e => e.FileId)
.HasName("PRIMARY");
@ -514,7 +505,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmTag>(entity =>
modelBuilder.Entity<DbTag>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -524,7 +515,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_bin");
});
modelBuilder.Entity<CrmTask>(entity =>
modelBuilder.Entity<DbTask>(entity =>
{
entity.HasIndex(e => e.CreateOn)
.HasName("create_on");
@ -568,7 +559,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmTaskTemplate>(entity =>
modelBuilder.Entity<DbTaskTemplate>(entity =>
{
entity.HasIndex(e => new { e.TenantId, e.ContainerId })
.HasName("template_id");
@ -597,7 +588,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmTaskTemplateContainer>(entity =>
modelBuilder.Entity<DbTaskTemplateContainer>(entity =>
{
entity.HasIndex(e => new { e.TenantId, e.EntityType })
.HasName("entity_type");
@ -617,13 +608,13 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmTaskTemplateTask>(entity =>
modelBuilder.Entity<DbTaskTemplateTask>(entity =>
{
entity.HasKey(e => new { e.TenantId, e.TaskId, e.TaskTemplateId })
.HasName("PRIMARY");
});
modelBuilder.Entity<CrmVoipCalls>(entity =>
modelBuilder.Entity<DbVoipCalls>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");
@ -661,7 +652,7 @@ namespace ASC.CRM.Core.EF
.HasCollation("utf8_general_ci");
});
modelBuilder.Entity<CrmVoipNumber>(entity =>
modelBuilder.Entity<DbVoipNumber>(entity =>
{
entity.HasIndex(e => e.TenantId)
.HasName("tenant_id");

View File

@ -1,32 +1,37 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_case")]
public partial class CrmCase
public partial class DbCase
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("is_closed")]
public bool IsClosed { 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("tenant_id", TypeName = "int(11)")]
public int TenantId { 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,13 +1,11 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_contact")]
public partial class CrmContact
public partial class DbContact
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -1,33 +1,40 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_contact_info")]
public partial class CrmContactInfo
public partial class DbContactInfo
{
[Key]
[Column("id", TypeName = "int(10)")]
public int Id { get; set; }
[Required]
[Column("data", TypeName = "text")]
public string Data { get; set; }
[Column("category", TypeName = "int(255)")]
public int Category { get; set; }
[Column("tenant_id", TypeName = "int(255)")]
public int TenantId { get; set; }
[Column("is_primary", TypeName = "tinyint(4)")]
public sbyte IsPrimary { get; set; }
[Column("contact_id", TypeName = "int(11)")]
public int ContactId { get; set; }
[Column("type", TypeName = "int(255)")]
public int 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; }
}
}

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_currency_info")]
public partial class CrmCurrencyInfo
public partial class DbCurrencyInfo
{
[Required]
[Column("resource_key", TypeName = "varchar(255)")]

View File

@ -1,13 +1,11 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_currency_rate")]
public partial class CrmCurrencyRate
public partial class DbCurrencyRate
{
[Key]
[Column("id", TypeName = "int(11)")]
@ -22,13 +20,14 @@ namespace ASC.CRM.Core.EF
public decimal Rate { 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("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
[Column("last_modifed_by", TypeName = "char(38)")]
public string LastModifedBy { get; set; }
public Guid? LastModifedBy { get; set; }
[Column("last_modifed_on", TypeName = "datetime")]
public DateTime? LastModifedOn { get; set; }
}

View File

@ -1,52 +1,92 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_deal")]
public partial class CrmDeal
public partial class DbDeal : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("description", TypeName = "text")]
public string Description { get; set; }
[Required]
[Column("responsible_id", TypeName = "char(38)")]
public string ResponsibleId { get; set; }
public Guid ResponsibleId { get; set; }
[Column("contact_id", TypeName = "int(11)")]
public int ContactId { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { get; set; }
[Column("bid_currency", TypeName = "varchar(255)")]
public string BidCurrency { get; set; }
[Column("bid_value", TypeName = "decimal(50,9)")]
public decimal BidValue { get; set; }
[Column("bid_type", TypeName = "int(11)")]
public int BidType { get; set; }
[Column("deal_milestone_id", TypeName = "int(11)")]
public int DealMilestoneId { get; set; }
[Column("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
[Column("expected_close_date", TypeName = "datetime")]
public DateTime ExpectedCloseDate { get; set; }
[Column("per_period_value", TypeName = "int(11)")]
public int PerPeriodValue { get; set; }
[Column("deal_milestone_probability", TypeName = "int(11)")]
public int? DealMilestoneProbability { 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("actual_close_date", TypeName = "datetime")]
public DateTime? ActualCloseDate { get; set; }
}

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_deal_milestone")]
public partial class CrmDealMilestone
public partial class DbDealMilestone : IDbCrm
{
[Key]
[Column("id", TypeName = "int(10)")]

View File

@ -1,4 +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 System.ComponentModel.DataAnnotations;
@ -7,16 +8,19 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_entity_contact")]
public partial class CrmEntityContact
public partial class DbEntityContact
{
[Key]
[Column("entity_id", TypeName = "int(11)")]
public int EntityId { get; set; }
[Key]
[Column("entity_type", TypeName = "int(11)")]
public int EntityType { get; set; }
[Key]
[Column("contact_id", TypeName = "int(11)")]
public int ContactId { get; set; }
}
}

View File

@ -1,4 +1,6 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using ASC.CRM.Core.Enums;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@ -7,16 +9,19 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_entity_tag")]
public partial class CrmEntityTag
public partial class DbEntityTag
{
[Key]
[Column("tag_id", TypeName = "int(11)")]
public int TagId { get; set; }
[Key]
[Column("entity_id", TypeName = "int(11)")]
public int EntityId { get; set; }
[Key]
[Column("entity_type", TypeName = "int(10)")]
public int EntityType { get; set; }
public EntityType EntityType { get; set; }
}
}

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_field_description")]
public partial class CrmFieldDescription
public partial class DbFieldDescription
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -1,13 +1,11 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_field_value")]
public partial class CrmFieldValue
public partial class DbFieldValue
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_invoice")]
public partial class CrmInvoice
public partial class DbInvoice
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_invoice_item")]
public partial class CrmInvoiceItem
public partial class DbInvoiceItem : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]
@ -26,7 +26,7 @@ namespace ASC.CRM.Core.EF
[Column("stock_quantity", TypeName = "decimal(10,2)")]
public decimal StockQuantity { get; set; }
[Column("track_inventory", TypeName = "tinyint(4)")]
public sbyte TrackInventory { get; set; }
public bool TrackInventory { get; set; }
[Column("invoice_tax1_id", TypeName = "int(11)")]
public int InvoiceTax1Id { get; set; }
[Column("invoice_tax2_id", TypeName = "int(11)")]
@ -34,15 +34,19 @@ namespace ASC.CRM.Core.EF
[Required]
[Column("currency", TypeName = "varchar(255)")]
public string Currency { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { 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("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
}

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_invoice_line")]
public partial class CrmInvoiceLine
public partial class DbInvoiceLine : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -7,28 +7,36 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_invoice_tax")]
public partial class CrmInvoiceTax
public partial class DbInvoiceTax : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("name", TypeName = "varchar(255)")]
public string Name { get; set; }
[Required]
[Column("description", TypeName = "text")]
public string Description { get; set; }
[Column("rate", TypeName = "decimal(10,2)")]
public decimal Rate { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { 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("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
}

View File

@ -1,30 +1,35 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using ASC.CRM.Core.Enums;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_list_item")]
public partial class CrmListItem
public partial class DbListItem : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("sort_order", TypeName = "int(11)")]
public int SortOrder { get; set; }
[Column("color", TypeName = "varchar(255)")]
public string Color { get; set; }
[Column("additional_params", TypeName = "varchar(255)")]
public string AdditionalParams { get; set; }
[Column("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
[Column("list_type", TypeName = "int(255)")]
public int? ListType { get; set; }
public ListType ListType { get; set; }
[Column("description", TypeName = "varchar(255)")]
public string Description { get; set; }
}

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_organisation_logo")]
public partial class CrmOrganisationLogo
public partial class DbOrganisationLogo
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -1,20 +1,20 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_projects")]
public partial class CrmProjects
public partial class DbProjects
{
[Key]
[Column("project_id", TypeName = "int(10)")]
public int ProjectId { get; set; }
[Key]
[Column("contact_id", TypeName = "int(10)")]
public int ContactId { get; set; }
[Key]
[Column("tenant_id", TypeName = "int(10)")]
public int TenantId { get; set; }

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_relationship_event")]
public partial class CrmRelationshipEvent
public partial class DbRelationshipEvent
{
[Key]
[Column("id", TypeName = "int(11)")]

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_report_file")]
public partial class CrmReportFile
public partial class DbReportFile
{
[Key]
[Column("file_id", TypeName = "int(11)")]

View File

@ -1,23 +1,24 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using ASC.CRM.Core.Enums;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_tag")]
public partial class CrmTag
public partial class DbTag : IDbCrm
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
[Column("entity_type", TypeName = "int(11)")]
public int EntityType { get; set; }
public EntityType EntityType { get; set; }
}
}

View File

@ -1,51 +1,66 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using ASC.CRM.Core.Enums;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_task")]
public partial class CrmTask
public partial class DbTask
{
[Key]
[Column("id", TypeName = "int(11)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("description", TypeName = "text")]
public string Description { get; set; }
[Column("deadline", TypeName = "datetime")]
public DateTime Deadline { get; set; }
[Required]
[Column("responsible_id", TypeName = "char(38)")]
public string ResponsibleId { get; set; }
public Guid ResponsibleId { get; set; }
[Column("contact_id", TypeName = "int(11)")]
public int ContactId { get; set; }
[Column("is_closed", TypeName = "int(1)")]
public int IsClosed { get; set; }
public bool IsClosed { get; set; }
[Column("tenant_id", TypeName = "int(11)")]
public int TenantId { get; set; }
[Column("entity_type", TypeName = "int(11)")]
public int EntityType { get; set; }
public EntityType EntityType { get; set; }
[Column("entity_id", TypeName = "int(11)")]
public int EntityId { get; set; }
[Column("category_id", TypeName = "int(11)")]
public int CategoryId { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { 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("alert_value", TypeName = "int(10)")]
public int AlertValue { get; set; }
[Column("exec_alert", TypeName = "int(10)")]
public int ExecAlert { get; set; }
public bool ExecAlert { get; set; }
}
}

View File

@ -7,41 +7,55 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_task_template")]
public partial class CrmTaskTemplate
public partial class DbTaskTemplate : IDbCrm
{
[Key]
[Column("id", TypeName = "int(10)")]
public int Id { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { get; set; }
[Column("last_modifed_on", TypeName = "datetime")]
public DateTime LastModifedOn { get; set; }
[Required]
[Column("last_modifed_by", TypeName = "char(38)")]
public string LastModifedBy { get; set; }
public Guid LastModifedBy { get; set; }
[Required]
[Column("title", TypeName = "varchar(255)")]
public string Title { get; set; }
[Column("category_id", TypeName = "int(10)")]
public int CategoryId { get; set; }
[Column("description", TypeName = "tinytext")]
public string Description { get; set; }
[Required]
[Column("responsible_id", TypeName = "char(38)")]
public string ResponsibleId { get; set; }
public Guid ResponsibleId { get; set; }
[Column("is_notify", TypeName = "tinyint(4)")]
public sbyte IsNotify { get; set; }
public bool IsNotify { get; set; }
[Column("offset", TypeName = "bigint(20)")]
public long Offset { get; set; }
[Column("sort_order", TypeName = "int(11)")]
public int SortOrder { get; set; }
[Column("deadLine_is_fixed", TypeName = "tinyint(4)")]
public sbyte DeadLineIsFixed { get; set; }
public bool DeadLineIsFixed { get; set; }
[Column("tenant_id", TypeName = "int(10)")]
public int TenantId { get; set; }
[Column("container_id", TypeName = "int(10)")]
public int ContainerId { get; set; }
}

View File

@ -1,4 +1,5 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using ASC.CRM.Core.Enums;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@ -7,27 +8,34 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_task_template_container")]
public partial class CrmTaskTemplateContainer
public partial class DbTaskTemplateContainer : IDbCrm
{
[Key]
[Column("id", TypeName = "int(10)")]
public int Id { get; set; }
[Required]
[Column("title", TypeName = "varchar(256)")]
public string Title { get; set; }
[Column("entity_type", TypeName = "int(10)")]
public int EntityType { get; set; }
public EntityType EntityType { get; set; }
[Column("tenant_id", TypeName = "int(10)")]
public int TenantId { get; set; }
[Column("create_on", TypeName = "datetime")]
public DateTime CreateOn { get; set; }
[Required]
[Column("create_by", TypeName = "char(38)")]
public string CreateBy { get; set; }
public Guid CreateBy { get; set; }
[Column("last_modifed_on", TypeName = "datetime")]
public DateTime LastModifedOn { get; set; }
[Required]
[Column("last_modifed_by", TypeName = "char(38)")]
public string LastModifedBy { get; set; }
public Guid LastModifedBy { get; set; }
}
}

View File

@ -1,20 +1,19 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_task_template_task")]
public partial class CrmTaskTemplateTask
public partial class DbTaskTemplateTask : IDbCrm
{
[Key]
[Column("task_id", TypeName = "int(10)")]
public int TaskId { get; set; }
[Key]
[Column("task_template_id", TypeName = "int(10)")]
public int TaskTemplateId { get; set; }
[Key]
[Column("tenant_id", TypeName = "int(10)")]
public int TenantId { get; set; }

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_voip_calls")]
public partial class CrmVoipCalls
public partial class DbVoipCalls
{
[Key]
[Column("id", TypeName = "varchar(50)")]

View File

@ -7,7 +7,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace ASC.CRM.Core.EF
{
[Table("crm_voip_number")]
public partial class CrmVoipNumber
public partial class DbVoipNumber
{
[Key]
[Column("id", TypeName = "varchar(50)")]

View File

@ -72,8 +72,7 @@ namespace ASC.CRM.Services.NotifyService {
/// ----------------------------------------
///
/// #each
///
/// &quot; [rest of string was truncated]&quot;;.
/// /// [rest of string was truncated]&quot;;.
/// </summary>
public static string pattern_AddRelationshipEvent {
get {
@ -194,7 +193,7 @@ namespace ASC.CRM.Services.NotifyService {
///#end
///#if($AdditionalData.get_item(&quot;CaseRelativeUrl&quot;))
///
///Link with case: &quot;$Addit [rest of string was truncated]&quot;;.
///Link with [rest of string was truncated]&quot;;.
/// </summary>
public static string pattern_ResponsibleForTask {
get {
@ -225,7 +224,7 @@ namespace ASC.CRM.Services.NotifyService {
///#end
///#if($AdditionalData.get_item(&quot;CaseRelativeUrl&quot;))
///
///Link with case: &quot;$AdditionalData.get_item(&quot;CaseTitle&quot;)&quot;:&quot;${__VirtualRootPath}/$AdditionalData.get_item(&quot;CaseRelativeUrl&quot;) [rest of string was truncated]&quot;;.
///Link with case: &quot;$AdditionalData.get_item(&quot;CaseTitle&quot;)&quot;:&quot;${__VirtualRootPath}/$AdditionalData.get_item(&quot;CaseRe [rest of string was truncated]&quot;;.
/// </summary>
public static string pattern_TaskReminder {
get {