diff --git a/OnlineSales.sln b/OnlineSales.sln index db39225a..0048e7e6 100644 --- a/OnlineSales.sln +++ b/OnlineSales.sln @@ -126,6 +126,6 @@ Global $0.DotNetNamingPolicy = $1 $1.DirectoryNamespaceAssociation = PrefixedHierarchical $0.TextStylePolicy = $3 - version = 1.2.26-pre + version = 1.2.27-pre EndGlobalSection EndGlobal diff --git a/plugins/OnlineSales.Plugin.EmailSync/OnlineSales.Plugin.EmailSync.csproj b/plugins/OnlineSales.Plugin.EmailSync/OnlineSales.Plugin.EmailSync.csproj index 8bbb0aed..6ae49f09 100644 --- a/plugins/OnlineSales.Plugin.EmailSync/OnlineSales.Plugin.EmailSync.csproj +++ b/plugins/OnlineSales.Plugin.EmailSync/OnlineSales.Plugin.EmailSync.csproj @@ -5,7 +5,7 @@ true enable enable - 1.2.26-pre + 1.2.27-pre true Debug;Release;Migration diff --git a/plugins/OnlineSales.Plugin.EmailSync/Tasks/EmailSyncTask.cs b/plugins/OnlineSales.Plugin.EmailSync/Tasks/EmailSyncTask.cs index ff8ba9aa..4fc25dc3 100644 --- a/plugins/OnlineSales.Plugin.EmailSync/Tasks/EmailSyncTask.cs +++ b/plugins/OnlineSales.Plugin.EmailSync/Tasks/EmailSyncTask.cs @@ -168,7 +168,14 @@ private async Task GetEmailLogs(string userName, ImapAccountFolder dbFolder, IMa if (!existedMessagesUids.Contains(message.MessageId)) { - var fromEmail = message.From.Mailboxes.Single().Address; + var fromMailbox = message.From.Mailboxes.FirstOrDefault(); + + if (fromMailbox == null) + { + continue; + } + + var fromEmail = fromMailbox.Address; if (!ignoredEmails.Contains(fromEmail)) { diff --git a/plugins/OnlineSales.Plugin.ReverseProxy/OnlineSales.Plugin.ReverseProxy.csproj b/plugins/OnlineSales.Plugin.ReverseProxy/OnlineSales.Plugin.ReverseProxy.csproj index f2045eb8..df58b536 100644 --- a/plugins/OnlineSales.Plugin.ReverseProxy/OnlineSales.Plugin.ReverseProxy.csproj +++ b/plugins/OnlineSales.Plugin.ReverseProxy/OnlineSales.Plugin.ReverseProxy.csproj @@ -5,7 +5,7 @@ enable true enable - 1.2.26-pre + 1.2.27-pre Release;Debug diff --git a/plugins/OnlineSales.Plugin.SendGrid/OnlineSales.Plugin.SendGrid.csproj b/plugins/OnlineSales.Plugin.SendGrid/OnlineSales.Plugin.SendGrid.csproj index 9ef3e7c1..9c7c999e 100644 --- a/plugins/OnlineSales.Plugin.SendGrid/OnlineSales.Plugin.SendGrid.csproj +++ b/plugins/OnlineSales.Plugin.SendGrid/OnlineSales.Plugin.SendGrid.csproj @@ -5,7 +5,7 @@ true enable enable - 1.2.26-pre + 1.2.27-pre true Debug;Release;Migration diff --git a/plugins/OnlineSales.Plugin.Sms/OnlineSales.Plugin.Sms.csproj b/plugins/OnlineSales.Plugin.Sms/OnlineSales.Plugin.Sms.csproj index 4850646f..b09f5c71 100644 --- a/plugins/OnlineSales.Plugin.Sms/OnlineSales.Plugin.Sms.csproj +++ b/plugins/OnlineSales.Plugin.Sms/OnlineSales.Plugin.Sms.csproj @@ -5,7 +5,7 @@ true enable enable - 1.2.26-pre + 1.2.27-pre true Debug;Release;Migration diff --git a/plugins/OnlineSales.Plugin.TestPlugin/OnlineSales.Plugin.TestPlugin.csproj b/plugins/OnlineSales.Plugin.TestPlugin/OnlineSales.Plugin.TestPlugin.csproj index fb9dcd4d..8a13c6b6 100644 --- a/plugins/OnlineSales.Plugin.TestPlugin/OnlineSales.Plugin.TestPlugin.csproj +++ b/plugins/OnlineSales.Plugin.TestPlugin/OnlineSales.Plugin.TestPlugin.csproj @@ -5,7 +5,7 @@ true enable enable - 1.2.26-pre + 1.2.27-pre true Debug;Release;Migration diff --git a/plugins/OnlineSales.Plugin.Vsto/Migrations/VstoDbContextModelSnapshot.cs b/plugins/OnlineSales.Plugin.Vsto/Migrations/VstoDbContextModelSnapshot.cs index c5e5c213..84ba9a11 100644 --- a/plugins/OnlineSales.Plugin.Vsto/Migrations/VstoDbContextModelSnapshot.cs +++ b/plugins/OnlineSales.Plugin.Vsto/Migrations/VstoDbContextModelSnapshot.cs @@ -19,11 +19,30 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("ProductVersion", "7.0.9") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("ContactDeal", b => + { + b.Property("ContactsId") + .HasColumnType("integer") + .HasColumnName("contacts_id"); + + b.Property("DealsId") + .HasColumnType("integer") + .HasColumnName("deals_id"); + + b.HasKey("ContactsId", "DealsId") + .HasName("pk_contact_deal"); + + b.HasIndex("DealsId") + .HasDatabaseName("ix_contact_deal_deals_id"); + + b.ToTable("contact_deal", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") @@ -231,6 +250,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -284,6 +307,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -424,18 +451,27 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("body"); - b.Property("ContactId") + b.Property("CommentableId") .HasColumnType("integer") - .HasColumnName("contact_id"); + .HasColumnName("commentable_id"); + + b.Property("CommentableType") + .IsRequired() + .HasColumnType("text") + .HasColumnName("commentable_type"); - b.Property("ContentId") + b.Property("ContactId") .HasColumnType("integer") - .HasColumnName("content_id"); + .HasColumnName("contact_id"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -470,6 +506,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -484,9 +524,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ContactId") .HasDatabaseName("ix_comment_contact_id"); - b.HasIndex("ContentId") - .HasDatabaseName("ix_comment_content_id"); - b.HasIndex("ParentId") .HasDatabaseName("ix_comment_parent_id"); @@ -517,10 +554,18 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("address2"); + b.Property("Birthday") + .HasColumnType("timestamp with time zone") + .HasColumnName("birthday"); + b.Property("CityName") .HasColumnType("text") .HasColumnName("city_name"); + b.Property("CompanyName") + .HasColumnType("text") + .HasColumnName("company_name"); + b.Property("ContinentCode") .HasColumnType("integer") .HasColumnName("continent_code"); @@ -533,6 +578,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -541,6 +590,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("created_by_user_agent"); + b.Property("Department") + .HasColumnType("text") + .HasColumnName("department"); + b.Property("DomainId") .HasColumnType("integer") .HasColumnName("domain_id"); @@ -554,6 +607,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("first_name"); + b.Property("JobTitle") + .HasColumnType("text") + .HasColumnName("job_title"); + b.Property("Language") .HasColumnType("text") .HasColumnName("language"); @@ -562,10 +619,22 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("last_name"); + b.Property("MiddleName") + .HasColumnType("text") + .HasColumnName("middle_name"); + b.Property("Phone") .HasColumnType("text") .HasColumnName("phone"); + b.Property("Prefix") + .HasColumnType("text") + .HasColumnName("prefix"); + + b.Property>("SocialMedia") + .HasColumnType("jsonb") + .HasColumnName("social_media"); + b.Property("Source") .HasColumnType("text") .HasColumnName("source"); @@ -586,6 +655,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -637,6 +710,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -661,6 +738,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -726,6 +807,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -744,6 +829,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("language"); + b.Property("PublishedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("published_at"); + b.Property("Slug") .IsRequired() .HasColumnType("text") @@ -772,6 +861,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -793,7 +886,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) }); }); - modelBuilder.Entity("OnlineSales.Entities.Domain", b => + modelBuilder.Entity("OnlineSales.Entities.Deal", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -806,88 +899,93 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("integer") .HasColumnName("account_id"); - b.Property("AccountStatus") - .HasColumnType("integer") - .HasColumnName("account_status"); - - b.Property("CatchAll") - .HasColumnType("boolean") - .HasColumnName("catch_all"); + b.Property("ActualCloseDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("actual_close_date"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); - b.Property("Description") + b.Property("CreatedById") .HasColumnType("text") - .HasColumnName("description"); - - b.Property("Disposable") - .HasColumnType("boolean") - .HasColumnName("disposable"); + .HasColumnName("created_by_id"); - b.Property("DnsCheck") - .HasColumnType("boolean") - .HasColumnName("dns_check"); + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); - b.Property>("DnsRecords") - .HasColumnType("jsonb") - .HasColumnName("dns_records"); + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); - b.Property("FaviconUrl") + b.Property("DealCurrency") .HasColumnType("text") - .HasColumnName("favicon_url"); + .HasColumnName("deal_currency"); - b.Property("Free") - .HasColumnType("boolean") - .HasColumnName("free"); + b.Property("DealPipelineId") + .HasColumnType("integer") + .HasColumnName("deal_pipeline_id"); - b.Property("HttpCheck") - .HasColumnType("boolean") - .HasColumnName("http_check"); + b.Property("DealPipelineStageId") + .HasColumnType("integer") + .HasColumnName("deal_pipeline_stage_id"); - b.Property("MxCheck") - .HasColumnType("boolean") - .HasColumnName("mx_check"); + b.Property("DealValue") + .HasColumnType("numeric") + .HasColumnName("deal_value"); - b.Property("Name") - .IsRequired() - .HasColumnType("text") - .HasColumnName("name"); + b.Property("ExpectedCloseDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("expected_close_date"); b.Property("Source") .HasColumnType("text") .HasColumnName("source"); - b.Property("Title") - .HasColumnType("text") - .HasColumnName("title"); - b.Property("UpdatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); - b.Property("Url") + b.Property("UpdatedById") .HasColumnType("text") - .HasColumnName("url"); + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_id"); b.HasKey("Id") - .HasName("pk_domain"); + .HasName("pk_deal"); b.HasIndex("AccountId") - .HasDatabaseName("ix_domain_account_id"); + .HasDatabaseName("ix_deal_account_id"); - b.HasIndex("Name") - .IsUnique() - .HasDatabaseName("ix_domain_name"); + b.HasIndex("DealPipelineId") + .HasDatabaseName("ix_deal_deal_pipeline_id"); - b.ToTable("domain", null, t => + b.HasIndex("DealPipelineStageId") + .HasDatabaseName("ix_deal_deal_pipeline_stage_id"); + + b.HasIndex("UserId") + .HasDatabaseName("ix_deal_user_id"); + + b.ToTable("deal", null, t => { t.ExcludeFromMigrations(); }); }); - modelBuilder.Entity("OnlineSales.Entities.EmailGroup", b => + modelBuilder.Entity("OnlineSales.Entities.DealPipeline", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -900,6 +998,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -908,11 +1010,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("created_by_user_agent"); - b.Property("Language") - .IsRequired() - .HasColumnType("text") - .HasColumnName("language"); - b.Property("Name") .IsRequired() .HasColumnType("text") @@ -926,6 +1023,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -935,15 +1036,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnName("updated_by_user_agent"); b.HasKey("Id") - .HasName("pk_email_group"); + .HasName("pk_deal_pipeline"); - b.ToTable("email_group", null, t => + b.ToTable("deal_pipeline", null, t => { t.ExcludeFromMigrations(); }); }); - modelBuilder.Entity("OnlineSales.Entities.EmailLog", b => + modelBuilder.Entity("OnlineSales.Entities.DealPipelineStage", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -952,19 +1053,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("Body") - .IsRequired() - .HasColumnType("text") - .HasColumnName("body"); - - b.Property("ContactId") - .HasColumnType("integer") - .HasColumnName("contact_id"); - b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -973,41 +1069,31 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("created_by_user_agent"); - b.Property("FromEmail") - .IsRequired() - .HasColumnType("text") - .HasColumnName("from_email"); + b.Property("DealPipelineId") + .HasColumnType("integer") + .HasColumnName("deal_pipeline_id"); - b.Property("Recipient") + b.Property("Name") .IsRequired() .HasColumnType("text") - .HasColumnName("recipient"); + .HasColumnName("name"); - b.Property("ScheduleId") + b.Property("Order") .HasColumnType("integer") - .HasColumnName("schedule_id"); + .HasColumnName("order"); b.Property("Source") .HasColumnType("text") .HasColumnName("source"); - b.Property("Status") - .HasColumnType("integer") - .HasColumnName("status"); - - b.Property("Subject") - .IsRequired() - .HasColumnType("text") - .HasColumnName("subject"); - - b.Property("TemplateId") - .HasColumnType("integer") - .HasColumnName("template_id"); - b.Property("UpdatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1017,15 +1103,18 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnName("updated_by_user_agent"); b.HasKey("Id") - .HasName("pk_email_log"); + .HasName("pk_deal_pipeline_stage"); - b.ToTable("email_log", null, t => + b.HasIndex("DealPipelineId") + .HasDatabaseName("ix_deal_pipeline_stage_deal_pipeline_id"); + + b.ToTable("deal_pipeline_stage", null, t => { t.ExcludeFromMigrations(); }); }); - modelBuilder.Entity("OnlineSales.Entities.EmailSchedule", b => + modelBuilder.Entity("OnlineSales.Entities.Discount", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -1038,6 +1127,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1046,14 +1139,17 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("created_by_user_agent"); - b.Property("GroupId") + b.Property("OrderId") .HasColumnType("integer") - .HasColumnName("group_id"); + .HasColumnName("order_id"); - b.Property("Schedule") - .IsRequired() - .HasColumnType("text") - .HasColumnName("schedule"); + b.Property("OrderItemId") + .HasColumnType("integer") + .HasColumnName("order_item_id"); + + b.Property("PromotionId") + .HasColumnType("integer") + .HasColumnName("promotion_id"); b.Property("Source") .HasColumnType("text") @@ -1063,6 +1159,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1071,19 +1171,30 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("updated_by_user_agent"); + b.Property("Value") + .HasColumnType("numeric") + .HasColumnName("value"); + b.HasKey("Id") - .HasName("pk_email_schedule"); + .HasName("pk_discount"); - b.HasIndex("GroupId") - .HasDatabaseName("ix_email_schedule_group_id"); + b.HasIndex("OrderId") + .HasDatabaseName("ix_discount_order_id"); - b.ToTable("email_schedule", null, t => + b.HasIndex("OrderItemId") + .IsUnique() + .HasDatabaseName("ix_discount_order_item_id"); + + b.HasIndex("PromotionId") + .HasDatabaseName("ix_discount_promotion_id"); + + b.ToTable("discount", null, t => { t.ExcludeFromMigrations(); }); }); - modelBuilder.Entity("OnlineSales.Entities.EmailTemplate", b => + modelBuilder.Entity("OnlineSales.Entities.Domain", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -1092,41 +1203,370 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("BodyTemplate") - .IsRequired() - .HasColumnType("text") - .HasColumnName("body_template"); + b.Property("AccountId") + .HasColumnType("integer") + .HasColumnName("account_id"); + + b.Property("AccountStatus") + .HasColumnType("integer") + .HasColumnName("account_status"); + + b.Property("CatchAll") + .HasColumnType("boolean") + .HasColumnName("catch_all"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); - b.Property("CreatedByIp") - .HasColumnType("text") - .HasColumnName("created_by_ip"); - - b.Property("CreatedByUserAgent") + b.Property("Description") .HasColumnType("text") - .HasColumnName("created_by_user_agent"); + .HasColumnName("description"); - b.Property("FromEmail") - .IsRequired() - .HasColumnType("text") - .HasColumnName("from_email"); + b.Property("Disposable") + .HasColumnType("boolean") + .HasColumnName("disposable"); - b.Property("FromName") - .IsRequired() - .HasColumnType("text") - .HasColumnName("from_name"); + b.Property("DnsCheck") + .HasColumnType("boolean") + .HasColumnName("dns_check"); - b.Property("GroupId") - .HasColumnType("integer") - .HasColumnName("group_id"); + b.Property>("DnsRecords") + .HasColumnType("jsonb") + .HasColumnName("dns_records"); - b.Property("Language") - .IsRequired() + b.Property("FaviconUrl") .HasColumnType("text") - .HasColumnName("language"); + .HasColumnName("favicon_url"); + + b.Property("Free") + .HasColumnType("boolean") + .HasColumnName("free"); + + b.Property("HttpCheck") + .HasColumnType("boolean") + .HasColumnName("http_check"); + + b.Property("MxCheck") + .HasColumnType("boolean") + .HasColumnName("mx_check"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_domain"); + + b.HasIndex("AccountId") + .HasDatabaseName("ix_domain_account_id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_domain_name"); + + b.ToTable("domain", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + + modelBuilder.Entity("OnlineSales.Entities.EmailGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("Language") + .IsRequired() + .HasColumnType("text") + .HasColumnName("language"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.HasKey("Id") + .HasName("pk_email_group"); + + b.ToTable("email_group", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + + modelBuilder.Entity("OnlineSales.Entities.EmailLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ContactId") + .HasColumnType("integer") + .HasColumnName("contact_id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("FromEmail") + .IsRequired() + .HasColumnType("text") + .HasColumnName("from_email"); + + b.Property("HtmlBody") + .HasColumnType("text") + .HasColumnName("html_body"); + + b.Property("MessageId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message_id"); + + b.Property("Recipients") + .IsRequired() + .HasColumnType("text") + .HasColumnName("recipients"); + + b.Property("ScheduleId") + .HasColumnType("integer") + .HasColumnName("schedule_id"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("Status") + .HasColumnType("integer") + .HasColumnName("status"); + + b.Property("Subject") + .IsRequired() + .HasColumnType("text") + .HasColumnName("subject"); + + b.Property("TemplateId") + .HasColumnType("integer") + .HasColumnName("template_id"); + + b.Property("TextBody") + .HasColumnType("text") + .HasColumnName("text_body"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.HasKey("Id") + .HasName("pk_email_log"); + + b.HasIndex("ContactId") + .HasDatabaseName("ix_email_log_contact_id"); + + b.ToTable("email_log", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + + modelBuilder.Entity("OnlineSales.Entities.EmailSchedule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("GroupId") + .HasColumnType("integer") + .HasColumnName("group_id"); + + b.Property("Schedule") + .IsRequired() + .HasColumnType("text") + .HasColumnName("schedule"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.HasKey("Id") + .HasName("pk_email_schedule"); + + b.HasIndex("GroupId") + .HasDatabaseName("ix_email_schedule_group_id"); + + b.ToTable("email_schedule", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + + modelBuilder.Entity("OnlineSales.Entities.EmailTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BodyTemplate") + .IsRequired() + .HasColumnType("text") + .HasColumnName("body_template"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("EmailGroupId") + .HasColumnType("integer") + .HasColumnName("email_group_id"); + + b.Property("FromEmail") + .IsRequired() + .HasColumnType("text") + .HasColumnName("from_email"); + + b.Property("FromName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("from_name"); + + b.Property("Language") + .IsRequired() + .HasColumnType("text") + .HasColumnName("language"); b.Property("Name") .IsRequired() @@ -1154,6 +1594,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1165,8 +1609,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id") .HasName("pk_email_template"); - b.HasIndex("GroupId") - .HasDatabaseName("ix_email_template_group_id"); + b.HasIndex("EmailGroupId") + .HasDatabaseName("ix_email_template_email_group_id"); b.ToTable("email_template", null, t => { @@ -1174,6 +1618,89 @@ protected override void BuildModel(ModelBuilder modelBuilder) }); }); + modelBuilder.Entity("OnlineSales.Entities.File", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Extension") + .IsRequired() + .HasColumnType("text") + .HasColumnName("extension"); + + b.Property("MimeType") + .IsRequired() + .HasColumnType("text") + .HasColumnName("mime_type"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("ScopeUid") + .IsRequired() + .HasColumnType("text") + .HasColumnName("scope_uid"); + + b.Property("Size") + .HasColumnType("bigint") + .HasColumnName("size"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.HasKey("Id") + .HasName("pk_file"); + + b.ToTable("file", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + modelBuilder.Entity("OnlineSales.Entities.IpDetails", b => { b.Property("Ip") @@ -1227,6 +1754,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1258,6 +1789,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1292,6 +1827,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1329,6 +1868,89 @@ protected override void BuildModel(ModelBuilder modelBuilder) }); }); + modelBuilder.Entity("OnlineSales.Entities.MailServer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("HeloMessage") + .HasColumnType("text") + .HasColumnName("helo_message"); + + b.Property("JoinMessage") + .HasColumnType("text") + .HasColumnName("join_message"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Port") + .HasColumnType("integer") + .HasColumnName("port"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.Property("Verified") + .HasColumnType("boolean") + .HasColumnName("verified"); + + b.Property("WellKnown") + .HasColumnType("boolean") + .HasColumnName("well_known"); + + b.HasKey("Id") + .HasName("pk_mail_server"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_mail_server_name"); + + b.ToTable("mail_server", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + modelBuilder.Entity("OnlineSales.Entities.Media", b => { b.Property("Id") @@ -1342,6 +1964,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1387,6 +2013,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1417,6 +2047,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("affiliate_name"); + b.Property("Commission") + .HasColumnType("numeric") + .HasColumnName("commission"); + b.Property("ContactId") .HasColumnType("integer") .HasColumnName("contact_id"); @@ -1429,6 +2063,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1467,6 +2105,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("ref_no"); + b.Property("Refund") + .HasColumnType("numeric") + .HasColumnName("refund"); + b.Property("Source") .HasColumnType("text") .HasColumnName("source"); @@ -1483,6 +2125,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1520,6 +2166,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1537,11 +2187,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("numeric") .HasColumnName("currency_total"); - b.Property("LicenseCode") - .IsRequired() - .HasColumnType("text") - .HasColumnName("license_code"); - b.Property("OrderId") .HasColumnType("integer") .HasColumnName("order_id"); @@ -1571,6 +2216,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_at"); + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + b.Property("UpdatedByIp") .HasColumnType("text") .HasColumnName("updated_by_ip"); @@ -1591,6 +2240,82 @@ protected override void BuildModel(ModelBuilder modelBuilder) }); }); + modelBuilder.Entity("OnlineSales.Entities.Promotion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasColumnType("text") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + + b.Property("CreatedByIp") + .HasColumnType("text") + .HasColumnName("created_by_ip"); + + b.Property("CreatedByUserAgent") + .HasColumnType("text") + .HasColumnName("created_by_user_agent"); + + b.Property("EndDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_date"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Source") + .HasColumnType("text") + .HasColumnName("source"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_at"); + + b.Property("UpdatedById") + .HasColumnType("text") + .HasColumnName("updated_by_id"); + + b.Property("UpdatedByIp") + .HasColumnType("text") + .HasColumnName("updated_by_ip"); + + b.Property("UpdatedByUserAgent") + .HasColumnType("text") + .HasColumnName("updated_by_user_agent"); + + b.HasKey("Id") + .HasName("pk_promotion"); + + b.HasIndex("Code") + .IsUnique() + .HasDatabaseName("ix_promotion_code"); + + b.ToTable("promotion", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + modelBuilder.Entity("OnlineSales.Entities.TaskExecutionLog", b => { b.Property("Id") @@ -1654,6 +2379,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property("CreatedById") + .HasColumnType("text") + .HasColumnName("created_by_id"); + b.Property("CreatedByIp") .HasColumnType("text") .HasColumnName("created_by_ip"); @@ -1707,6 +2436,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("created_at"); + b.Property>("Data") + .HasColumnType("jsonb") + .HasColumnName("data"); + b.Property("DisplayName") .IsRequired() .HasColumnType("text") @@ -1818,6 +2551,23 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("vsto_user_version", (string)null); }); + modelBuilder.Entity("ContactDeal", b => + { + b.HasOne("OnlineSales.Entities.Contact", null) + .WithMany() + .HasForeignKey("ContactsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_contact_deal_contact_contacts_id"); + + b.HasOne("OnlineSales.Entities.Deal", null) + .WithMany() + .HasForeignKey("DealsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_contact_deal_deal_deals_id"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) @@ -1884,13 +2634,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasConstraintName("fk_comment_contact_contact_id"); - b.HasOne("OnlineSales.Entities.Content", "Content") - .WithMany("Comments") - .HasForeignKey("ContentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired() - .HasConstraintName("fk_comment_content_content_id"); - b.HasOne("OnlineSales.Entities.Comment", "Parent") .WithMany() .HasForeignKey("ParentId") @@ -1898,21 +2641,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Contact"); - b.Navigation("Content"); - b.Navigation("Parent"); }); modelBuilder.Entity("OnlineSales.Entities.Contact", b => { b.HasOne("OnlineSales.Entities.Account", "Account") - .WithMany() + .WithMany("Contacts") .HasForeignKey("AccountId") .OnDelete(DeleteBehavior.Restrict) .HasConstraintName("fk_contact_account_account_id"); b.HasOne("OnlineSales.Entities.Domain", "Domain") - .WithMany() + .WithMany("Contacts") .HasForeignKey("DomainId") .OnDelete(DeleteBehavior.Restrict) .IsRequired() @@ -1952,10 +2693,85 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Schedule"); }); - modelBuilder.Entity("OnlineSales.Entities.Domain", b => + modelBuilder.Entity("OnlineSales.Entities.Deal", b => { b.HasOne("OnlineSales.Entities.Account", "Account") + .WithMany("Deals") + .HasForeignKey("AccountId") + .HasConstraintName("fk_deal_account_account_id"); + + b.HasOne("OnlineSales.Entities.DealPipeline", "DealPipeline") + .WithMany() + .HasForeignKey("DealPipelineId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deal_deal_pipeline_deal_pipeline_id"); + + b.HasOne("OnlineSales.Entities.DealPipelineStage", "DealPipelineStage") + .WithMany() + .HasForeignKey("DealPipelineStageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deal_deal_pipeline_stage_deal_pipeline_stage_id"); + + b.HasOne("OnlineSales.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deal_users_user_id"); + + b.Navigation("Account"); + + b.Navigation("CreatedBy"); + + b.Navigation("DealPipeline"); + + b.Navigation("DealPipelineStage"); + }); + + modelBuilder.Entity("OnlineSales.Entities.DealPipelineStage", b => + { + b.HasOne("OnlineSales.Entities.DealPipeline", "DealPipeline") + .WithMany("PipelineStages") + .HasForeignKey("DealPipelineId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_deal_pipeline_stage_deal_pipeline_deal_pipeline_id"); + + b.Navigation("DealPipeline"); + }); + + modelBuilder.Entity("OnlineSales.Entities.Discount", b => + { + b.HasOne("OnlineSales.Entities.Order", "Order") + .WithMany("Discounts") + .HasForeignKey("OrderId") + .HasConstraintName("fk_discount_order_order_id"); + + b.HasOne("OnlineSales.Entities.OrderItem", "OrderItem") + .WithOne("Discount") + .HasForeignKey("OnlineSales.Entities.Discount", "OrderItemId") + .HasConstraintName("fk_discount_order_item_order_item_id"); + + b.HasOne("OnlineSales.Entities.Promotion", "Promotion") .WithMany() + .HasForeignKey("PromotionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_discount_promotion_promotion_id"); + + b.Navigation("Order"); + + b.Navigation("OrderItem"); + + b.Navigation("Promotion"); + }); + + modelBuilder.Entity("OnlineSales.Entities.Domain", b => + { + b.HasOne("OnlineSales.Entities.Account", "Account") + .WithMany("Domains") .HasForeignKey("AccountId") .OnDelete(DeleteBehavior.Restrict) .HasConstraintName("fk_domain_account_account_id"); @@ -1963,6 +2779,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Account"); }); + modelBuilder.Entity("OnlineSales.Entities.EmailLog", b => + { + b.HasOne("OnlineSales.Entities.Contact", "Contact") + .WithMany() + .HasForeignKey("ContactId") + .HasConstraintName("fk_email_log_contact_contact_id"); + + b.Navigation("Contact"); + }); + modelBuilder.Entity("OnlineSales.Entities.EmailSchedule", b => { b.HasOne("OnlineSales.Entities.EmailGroup", "Group") @@ -1977,14 +2803,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("OnlineSales.Entities.EmailTemplate", b => { - b.HasOne("OnlineSales.Entities.EmailGroup", "Group") - .WithMany() - .HasForeignKey("GroupId") + b.HasOne("OnlineSales.Entities.EmailGroup", "EmailGroup") + .WithMany("EmailTemplates") + .HasForeignKey("EmailGroupId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_email_template_email_group_group_id"); + .HasConstraintName("fk_email_template_email_group_email_group_id"); - b.Navigation("Group"); + b.Navigation("EmailGroup"); }); modelBuilder.Entity("OnlineSales.Entities.LinkLog", b => @@ -2002,7 +2828,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("OnlineSales.Entities.Order", b => { b.HasOne("OnlineSales.Entities.Contact", "Contact") - .WithMany() + .WithMany("Orders") .HasForeignKey("ContactId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() @@ -2014,7 +2840,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("OnlineSales.Entities.OrderItem", b => { b.HasOne("OnlineSales.Entities.Order", "Order") - .WithMany() + .WithMany("OrderItems") .HasForeignKey("OrderId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() @@ -2033,9 +2859,45 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Contact"); }); - modelBuilder.Entity("OnlineSales.Entities.Content", b => + modelBuilder.Entity("OnlineSales.Entities.Account", b => + { + b.Navigation("Contacts"); + + b.Navigation("Deals"); + + b.Navigation("Domains"); + }); + + modelBuilder.Entity("OnlineSales.Entities.Contact", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("OnlineSales.Entities.DealPipeline", b => + { + b.Navigation("PipelineStages"); + }); + + modelBuilder.Entity("OnlineSales.Entities.Domain", b => + { + b.Navigation("Contacts"); + }); + + modelBuilder.Entity("OnlineSales.Entities.EmailGroup", b => + { + b.Navigation("EmailTemplates"); + }); + + modelBuilder.Entity("OnlineSales.Entities.Order", b => + { + b.Navigation("Discounts"); + + b.Navigation("OrderItems"); + }); + + modelBuilder.Entity("OnlineSales.Entities.OrderItem", b => { - b.Navigation("Comments"); + b.Navigation("Discount"); }); #pragma warning restore 612, 618 } diff --git a/plugins/OnlineSales.Plugin.Vsto/OnlineSales.Plugin.Vsto.csproj b/plugins/OnlineSales.Plugin.Vsto/OnlineSales.Plugin.Vsto.csproj index c60b2206..8cbe8657 100644 --- a/plugins/OnlineSales.Plugin.Vsto/OnlineSales.Plugin.Vsto.csproj +++ b/plugins/OnlineSales.Plugin.Vsto/OnlineSales.Plugin.Vsto.csproj @@ -5,7 +5,7 @@ true enable enable - 1.2.26-pre + 1.2.27-pre true Debug;Release;Migration diff --git a/plugins/OnlineSales.Plugin.Vsto/VstoLocalLinksWatcher.cs b/plugins/OnlineSales.Plugin.Vsto/VstoLocalLinksWatcher.cs index 93173566..3e7cdded 100644 --- a/plugins/OnlineSales.Plugin.Vsto/VstoLocalLinksWatcher.cs +++ b/plugins/OnlineSales.Plugin.Vsto/VstoLocalLinksWatcher.cs @@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using OnlineSales.Data; +using OnlineSales.Entities; using OnlineSales.Plugin.Vsto.Data; using Quartz.Util; using Serilog; @@ -13,6 +14,8 @@ namespace OnlineSales.Plugin.Vsto; public class VstoLocalLinksWatcher : IDisposable { + public const string VstoLinkSource = "Vsto"; + public readonly string VstoLocalPath; public readonly string VstoRequestPath; @@ -95,7 +98,7 @@ private void Init() exeFiles = Directory.GetFiles(VstoLocalPath, "*.exe", SearchOption.AllDirectories); } - var allLinks = new HashSet(new LinkComparer()); + var allLinks = new HashSet(new LinkComparer()); foreach (var exeFile in exeFiles) { var parentDir = Directory.GetParent(exeFile); @@ -113,29 +116,32 @@ private void Init() using (var scope = serviceProvider.CreateScope()) { var dbContext = PluginDbContextBase.GetPluginDbContext(scope); - if (dbContext.Links != null) + + var vstoLinks = dbContext.Links! + .Where(l => l.Source == VstoLinkSource) + .ToHashSet(); + + foreach (var link in vstoLinks) { - foreach (var link in dbContext.Links) + if (!allLinks.Contains(link, new LinkComparer())) { - if (!allLinks.Contains(link, new LinkComparer())) - { - dbContext.Links.Remove(link); - } + dbContext.Links!.Remove(link); } - - dbContext.SaveChangesAsync().Wait(); } + + dbContext.SaveChangesAsync().Wait(); } } } - private void RemoveLinks(HashSet removedLinks) + private void RemoveLinks(HashSet removedLinks) { using (var serviceProvider = services!.BuildServiceProvider()) { using (var scope = serviceProvider.CreateScope()) { var dbContext = PluginDbContextBase.GetPluginDbContext(scope); + if (dbContext.Links != null) { foreach (var link in removedLinks) @@ -149,7 +155,7 @@ private void RemoveLinks(HashSet removedLinks) } } - private void AddLinks(HashSet addedLinks) + private void AddLinks(HashSet addedLinks) { using (var serviceProvider = services!.BuildServiceProvider()) { @@ -172,9 +178,9 @@ private void AddLinks(HashSet addedLinks) } } - private sealed class LinkComparer : IEqualityComparer + private sealed class LinkComparer : IEqualityComparer { - public bool Equals(OnlineSales.Entities.Link? l1, OnlineSales.Entities.Link? l2) + public bool Equals(Link? l1, Link? l2) { if (l1 == null && l2 == null) { @@ -190,7 +196,7 @@ public bool Equals(OnlineSales.Entities.Link? l1, OnlineSales.Entities.Link? l2) } } - public int GetHashCode(OnlineSales.Entities.Link obj) + public int GetHashCode(Link obj) { return obj.Uid.GetHashCode(); } @@ -206,7 +212,7 @@ private sealed class ExeDirectory private readonly DirectoryInfo parenDir; - private HashSet links; + private HashSet links; private bool valid = false; @@ -239,7 +245,7 @@ public ExeDirectory(VstoLocalLinksWatcher linksWatcher, DirectoryInfo di) watcher.EnableRaisingEvents = true; } - public HashSet GetLinks() + public HashSet GetLinks() { return links; } @@ -258,15 +264,16 @@ public void StopAndClear() } } - private HashSet CreateLinks() + private HashSet CreateLinks() { - var result = new HashSet(new LinkComparer()); + var result = new HashSet(new LinkComparer()); if (valid) { var resourceName = Path.GetFileNameWithoutExtension(vstoFile!.Name) + "_"; var relPath = Path.GetRelativePath(linksWatcher.VstoLocalPath, parenDir.FullName).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); var versionDirs = GetVersionDirs(resourceName); + foreach (var versionDir in versionDirs) { if (versionDir != null) @@ -274,11 +281,12 @@ public void StopAndClear() var version = versionDir.Name.Substring(resourceName.Length).Replace('_', '.'); var name = relPath.Replace(Path.AltDirectorySeparatorChar, '_') + "_" + version; - result.Add(new OnlineSales.Entities.Link + result.Add(new Link { Uid = name, Destination = Path.Combine(linksWatcher.VstoRequestPath, relPath, exeFile!.Name).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + "?=" + version, Name = name, + Source = VstoLinkSource, }); } } diff --git a/src/OnlineSales/OnlineSales.csproj b/src/OnlineSales/OnlineSales.csproj index d9d05475..cfff0153 100644 --- a/src/OnlineSales/OnlineSales.csproj +++ b/src/OnlineSales/OnlineSales.csproj @@ -7,7 +7,7 @@ OnlineSales true 98270385-43f2-4d3c-98d5-02d0d77fc2d9 - 1.2.26-pre + 1.2.27-pre OnlineSales True OnlineSales diff --git a/tests/OnlineSales.Tests/OnlineSales.Tests.csproj b/tests/OnlineSales.Tests/OnlineSales.Tests.csproj index 47ce1f43..12416790 100644 --- a/tests/OnlineSales.Tests/OnlineSales.Tests.csproj +++ b/tests/OnlineSales.Tests/OnlineSales.Tests.csproj @@ -6,7 +6,7 @@ enable false - 1.2.26-pre + 1.2.27-pre Debug;Release;Migration