// 
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using UnivateProperties_API.Context;
namespace UnivateProperties_API.Migrations
{
    [DbContext(typeof(DataContext))]
    [Migration("20190906105051_Process")]
    partial class Process
    {
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
                .HasAnnotation("ProductVersion", "2.2.4-servicing-10062")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);
            modelBuilder.Entity("UnivateProperties_API.Model.Bank.Bank", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Name");
                    b.Property("UniversalBranchCode");
                    b.HasKey("Id");
                    b.ToTable("Banks");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Bank.BankAccount", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AccountHolder");
                    b.Property("AccountNumber");
                    b.Property("BankId");
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("OwnerId");
                    b.HasKey("Id");
                    b.HasIndex("BankId");
                    b.HasIndex("OwnerId");
                    b.ToTable("BankAccounts");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Communication.Email", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("BCC");
                    b.Property("Body");
                    b.Property("CC");
                    b.Property("Comment");
                    b.Property("Created");
                    b.Property("IsBodyHtml");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("SenderId");
                    b.Property("Subject");
                    b.Property("To");
                    b.Property("ToDisplay");
                    b.HasKey("Id");
                    b.HasIndex("SenderId");
                    b.ToTable("Emails");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Communication.SMTPAccount", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Address");
                    b.Property("Created");
                    b.Property("DisplayName");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("SMTPHostId");
                    b.HasKey("Id");
                    b.HasIndex("SMTPHostId");
                    b.ToTable("Accounts");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Communication.SMTPHost", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Host");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("NeedsAuthorize");
                    b.Property("Password");
                    b.Property("UseSSL");
                    b.Property("User");
                    b.HasKey("Id");
                    b.ToTable("Hosts");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Misc.Address", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("City");
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PostalCode");
                    b.Property("Street");
                    b.Property("StreetNumber");
                    b.Property("Suburb");
                    b.HasKey("Id");
                    b.ToTable("Addresses");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.ProcessFlow.BidItem", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Amount");
                    b.Property("BidMakerId");
                    b.Property("Comment");
                    b.Property("Created");
                    b.Property("DeclinedReason");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PropertyId");
                    b.Property("StatusId");
                    b.Property("TimeshareWeekId");
                    b.HasKey("Id");
                    b.HasIndex("BidMakerId");
                    b.HasIndex("PropertyId");
                    b.HasIndex("StatusId");
                    b.HasIndex("TimeshareWeekId");
                    b.ToTable("BidItems");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.ProcessFlow.ProcessFlow", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PropertyID");
                    b.Property("StatusID");
                    b.Property("TimeshareID");
                    b.HasKey("Id");
                    b.HasIndex("PropertyID");
                    b.HasIndex("StatusID");
                    b.HasIndex("TimeshareID");
                    b.ToTable("ProcessFlows");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.Property", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AddressLine1");
                    b.Property("AddressLine2");
                    b.Property("AddressLine3");
                    b.Property("AgencyId");
                    b.Property("AgentId");
                    b.Property("CityId");
                    b.Property("Created");
                    b.Property("CreatedBy");
                    b.Property("Description");
                    b.Property("IsSale");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("OperationalCosts");
                    b.Property("OwnerId");
                    b.Property("Price");
                    b.Property("PricePer");
                    b.Property("PropertyName");
                    b.Property("PropertyTypeId");
                    b.Property("ProvinceId");
                    b.Property("Published");
                    b.Property("ShortDescription");
                    b.Property("StatusId");
                    b.Property("SuburbId");
                    b.Property("Unit");
                    b.HasKey("Id");
                    b.HasIndex("AgencyId");
                    b.HasIndex("AgentId");
                    b.HasIndex("CityId");
                    b.HasIndex("OwnerId");
                    b.HasIndex("PropertyTypeId");
                    b.HasIndex("ProvinceId");
                    b.HasIndex("StatusId");
                    b.HasIndex("SuburbId");
                    b.ToTable("Properties");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.PropertyImage", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Image");
                    b.Property("IsDefault");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PropertyId");
                    b.HasKey("Id");
                    b.HasIndex("PropertyId");
                    b.ToTable("PropertyImages");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.PropertyType", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("UsageType");
                    b.HasKey("Id");
                    b.ToTable("PropertyTypes");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.PropertyUserField", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PropertyId");
                    b.Property("UserDefinedFieldId");
                    b.Property("Value");
                    b.HasKey("Id");
                    b.HasIndex("PropertyId");
                    b.HasIndex("UserDefinedFieldId");
                    b.ToTable("PropertyUserFields");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.UserDefinedField", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("FieldName");
                    b.Property("FieldType");
                    b.Property("GroupId");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Rank");
                    b.HasKey("Id");
                    b.HasIndex("GroupId");
                    b.ToTable("UserDefinedFields");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.UserDefinedGroup", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Rank");
                    b.Property("UsageType");
                    b.HasKey("Id");
                    b.ToTable("UserDefinedGroups");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Region.City", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Code");
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("ProvinceId");
                    b.HasKey("Id");
                    b.HasIndex("ProvinceId");
                    b.ToTable("Cities");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Region.Province", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Code");
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.HasKey("Id");
                    b.ToTable("Provinces");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Region.Suburb", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("CityId");
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PostalCode");
                    b.HasKey("Id");
                    b.HasIndex("CityId");
                    b.ToTable("Suburbs");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.Season", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Name");
                    b.HasKey("Id");
                    b.ToTable("Seasons");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.Status", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Code");
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("StatusType");
                    b.HasKey("Id");
                    b.ToTable("Status");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.TimeshareWeek", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AgencyId");
                    b.Property("AgentAsRep");
                    b.Property("AgentId");
                    b.Property("ArrivalDate");
                    b.Property("BankedWith");
                    b.Property("Bedrooms");
                    b.Property("Created");
                    b.Property("CurrentYearBanked");
                    b.Property("DepartureDate");
                    b.Property("LeviesPaidInFull");
                    b.Property("LevyAmount");
                    b.Property("MaxSleep");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Module");
                    b.Property("OriginalPurchaseDate");
                    b.Property("OriginalPurchasePrice");
                    b.Property("OtherResort");
                    b.Property("OwnerId");
                    b.Property("ReferedByAgent");
                    b.Property("RegionId");
                    b.Property("ResortCode");
                    b.Property("ResortName");
                    b.Property("Season");
                    b.Property("SellPrice");
                    b.Property("StatusId");
                    b.Property("WeekNumber");
                    b.Property("WeekPlacedForRental");
                    b.HasKey("Id");
                    b.HasIndex("AgencyId");
                    b.HasIndex("AgentId");
                    b.HasIndex("OwnerId");
                    b.HasIndex("RegionId");
                    b.HasIndex("StatusId");
                    b.ToTable("Weeks");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.UnitConfiguration", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Adults");
                    b.Property("Bedrooms");
                    b.Property("Children");
                    b.Property("Code");
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.HasKey("Id");
                    b.HasIndex("Code")
                        .IsUnique();
                    b.ToTable("UnitConfigurations");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.UnitConfigurationType", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Description");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("UnitConfigurationId");
                    b.HasKey("Id");
                    b.HasIndex("UnitConfigurationId");
                    b.ToTable("UnitConfigurationTypes");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.Agency", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AgencyName");
                    b.Property("CompanyRegNumber");
                    b.Property("Created");
                    b.Property("EAABEFFCNumber");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.HasKey("Id");
                    b.ToTable("Agencies");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.Agent", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AgencyId");
                    b.Property("CellNumber");
                    b.Property("Created");
                    b.Property("Email");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Name");
                    b.Property("Surname");
                    b.Property("Telephone");
                    b.Property("UserId");
                    b.HasKey("Id");
                    b.HasIndex("AgencyId");
                    b.HasIndex("UserId");
                    b.ToTable("Agents");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.Individual", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("AddressId");
                    b.Property("CellNumber");
                    b.Property("CompanyRegNumber");
                    b.Property("Created");
                    b.Property("Email");
                    b.Property("IdNumber");
                    b.Property("IncomeTaxNumber");
                    b.Property("MaritalStatus");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("Name");
                    b.Property("Surname");
                    b.Property("Telephone");
                    b.Property("UserId");
                    b.HasKey("Id");
                    b.HasIndex("AddressId");
                    b.HasIndex("UserId");
                    b.ToTable("Individuals");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.User", b =>
                {
                    b.Property("Id")
                        .ValueGeneratedOnAdd();
                    b.Property("Created");
                    b.Property("Modified");
                    b.Property("ModifiedBy");
                    b.Property("PasswordHash");
                    b.Property("PasswordSalt");
                    b.Property("Role");
                    b.Property("Token");
                    b.Property("Username");
                    b.Property("Verified");
                    b.HasKey("Id");
                    b.ToTable("Users");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Bank.BankAccount", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Bank.Bank", "Bank")
                        .WithMany()
                        .HasForeignKey("BankId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Users.Individual", "Owner")
                        .WithMany()
                        .HasForeignKey("OwnerId");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Communication.Email", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Communication.SMTPAccount", "Sender")
                        .WithMany("Emails")
                        .HasForeignKey("SenderId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Communication.SMTPAccount", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Communication.SMTPHost", "SMTPHost")
                        .WithMany("SMTPAccounts")
                        .HasForeignKey("SMTPHostId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.ProcessFlow.BidItem", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Users.Individual", "BidMaker")
                        .WithMany()
                        .HasForeignKey("BidMakerId");
                    b.HasOne("UnivateProperties_API.Model.Properties.Property", "Property")
                        .WithMany("BidItems")
                        .HasForeignKey("PropertyId");
                    b.HasOne("UnivateProperties_API.Model.Timeshare.Status", "Status")
                        .WithMany()
                        .HasForeignKey("StatusId");
                    b.HasOne("UnivateProperties_API.Model.Timeshare.TimeshareWeek", "TimeshareWeek")
                        .WithMany("BidItems")
                        .HasForeignKey("TimeshareWeekId");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.ProcessFlow.ProcessFlow", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Properties.Property", "Property")
                        .WithMany("ProcessFlows")
                        .HasForeignKey("PropertyID");
                    b.HasOne("UnivateProperties_API.Model.Timeshare.Status", "Status")
                        .WithMany()
                        .HasForeignKey("StatusID")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Timeshare.TimeshareWeek", "Timeshare")
                        .WithMany("ProcessFlows")
                        .HasForeignKey("TimeshareID");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.Property", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Users.Agency", "Agency")
                        .WithMany("Properties")
                        .HasForeignKey("AgencyId");
                    b.HasOne("UnivateProperties_API.Model.Users.Agent", "Agent")
                        .WithMany("Properties")
                        .HasForeignKey("AgentId");
                    b.HasOne("UnivateProperties_API.Model.Region.City", "City")
                        .WithMany()
                        .HasForeignKey("CityId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Users.Individual", "Owner")
                        .WithMany("Properties")
                        .HasForeignKey("OwnerId");
                    b.HasOne("UnivateProperties_API.Model.Properties.PropertyType", "PropertyType")
                        .WithMany()
                        .HasForeignKey("PropertyTypeId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Region.Province", "Province")
                        .WithMany()
                        .HasForeignKey("ProvinceId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Timeshare.Status", "Status")
                        .WithMany()
                        .HasForeignKey("StatusId");
                    b.HasOne("UnivateProperties_API.Model.Region.Suburb", "Suburb")
                        .WithMany()
                        .HasForeignKey("SuburbId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.PropertyImage", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Properties.Property", "Property")
                        .WithMany("PropertyImages")
                        .HasForeignKey("PropertyId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.PropertyUserField", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Properties.Property", "Property")
                        .WithMany("PropertyUserFields")
                        .HasForeignKey("PropertyId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Properties.UserDefinedField", "UserDefinedField")
                        .WithMany()
                        .HasForeignKey("UserDefinedFieldId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Properties.UserDefinedField", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Properties.UserDefinedGroup", "Group")
                        .WithMany("Fields")
                        .HasForeignKey("GroupId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Region.City", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Region.Province", "Province")
                        .WithMany()
                        .HasForeignKey("ProvinceId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Region.Suburb", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Region.City", "City")
                        .WithMany()
                        .HasForeignKey("CityId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.TimeshareWeek", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Users.Agency", "Agency")
                        .WithMany()
                        .HasForeignKey("AgencyId");
                    b.HasOne("UnivateProperties_API.Model.Users.Agent", "Agent")
                        .WithMany()
                        .HasForeignKey("AgentId");
                    b.HasOne("UnivateProperties_API.Model.Users.Individual", "Owner")
                        .WithMany()
                        .HasForeignKey("OwnerId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Region.Province", "Region")
                        .WithMany()
                        .HasForeignKey("RegionId")
                        .OnDelete(DeleteBehavior.Cascade);
                    b.HasOne("UnivateProperties_API.Model.Timeshare.Status", "Status")
                        .WithMany()
                        .HasForeignKey("StatusId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Timeshare.UnitConfigurationType", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Timeshare.UnitConfiguration", "UnitConfiguration")
                        .WithMany("Types")
                        .HasForeignKey("UnitConfigurationId")
                        .OnDelete(DeleteBehavior.Cascade);
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.Agent", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Users.Agency", "Agency")
                        .WithMany("Agents")
                        .HasForeignKey("AgencyId");
                    b.HasOne("UnivateProperties_API.Model.Users.User", "User")
                        .WithMany()
                        .HasForeignKey("UserId");
                });
            modelBuilder.Entity("UnivateProperties_API.Model.Users.Individual", b =>
                {
                    b.HasOne("UnivateProperties_API.Model.Misc.Address", "Address")
                        .WithMany()
                        .HasForeignKey("AddressId");
                    b.HasOne("UnivateProperties_API.Model.Users.User", "User")
                        .WithMany()
                        .HasForeignKey("UserId");
                });
#pragma warning restore 612, 618
        }
    }
}