This commit is contained in:
2021-03-05 21:38:13 +00:00
parent b4b792187b
commit d206fac03d
3 changed files with 158 additions and 8 deletions

View File

@@ -49,6 +49,9 @@ namespace AyaNova.Models
public string WarrantyTerms { get; set; }
public bool UsesBanking { get; set; }
public long? ContractId { get; set; }
[NotMapped]
public string ContractViz { get; set; }
public DateTime? ContractExpires { get; set; }
public bool Metered { get; set; }
public bool LifeTimeWarranty { get; set; }
public string Text1 { get; set; }

View File

@@ -798,7 +798,8 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
+ "serial TEXT NOT NULL, customerid BIGINT NOT NULL REFERENCES acustomer(id), parentunitid BIGINT NULL REFERENCES aunit(id), "
+ "unitmodelid BIGINT NULL REFERENCES aunitmodel(id), unithasownaddress BOOL, boughthere BOOL, purchasedfromvendorid BIGINT NULL REFERENCES avendor(id), "
+ "receipt TEXT NULL, purchaseddate TIMESTAMP NULL, description TEXT NULL, replacedbyunitid BIGINT NULL REFERENCES aunit(id), "
+ "overridemodelwarranty BOOL, warrantylength INTEGER NULL, warrantyterms TEXT NULL, contractid BIGINT NULL REFERENCES acontract, usesbanking BOOL, metered BOOL, lifetimewarranty BOOL, "
+ "overridemodelwarranty BOOL, warrantylength INTEGER NULL, warrantyterms TEXT NULL, contractid BIGINT NULL REFERENCES acontract, "
+ "contractexpires TIMESTAMP NULL, usesbanking BOOL, metered BOOL, lifetimewarranty BOOL, "
+ "text1 TEXT NULL, text2 TEXT NULL, text3 TEXT NULL, text4 TEXT NULL, address TEXT NULL, city TEXT NULL, region TEXT NULL, country TEXT NULL, latitude DECIMAL(8,6) NULL, longitude DECIMAL(9,6) NULL, "
+ "CONSTRAINT unq_unitserialmodelid UNIQUE (serial, unitmodelid) "
+ " )");

View File

@@ -8,6 +8,7 @@ using Bogus;
using AyaNova.Api.ControllerHelpers;
using System.Diagnostics;
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace AyaNova.Util
@@ -553,6 +554,123 @@ namespace AyaNova.Util
await SeedUserAsync(log, 1, AuthorizationRoles.OpsAdminLimited, UserType.NotService, false, "TEST_INACTIVE", "TEST_INACTIVE", 0, KnownUserTags);
#endif
/////////////////////////////////////////////////////
//CONTRACTS
{
await SeedTravelRateAsync(log, 1, "Bronze travel rate", true);//1
await SeedTravelRateAsync(log, 1, "Silver travel rate", true);//2
await SeedTravelRateAsync(log, 1, "Gold travel rate", true);//3
await SeedServiceRateAsync(log, 1, "Bronze service rate", true);//1
await SeedServiceRateAsync(log, 1, "Silver service rate", true);//2
await SeedServiceRateAsync(log, 1, "Gold service rate", true);//3
{
Contract c = new Contract();
c.Name = "Bronze";
c.Active = true;
c.Notes = "These are notes providing additional information when users view the contract";
c.AlertNotes = "These are alert notes displayed on workorders about this contract";
c.PartsOverride = .05m;
c.PartsOverrideType = ContractOverrideType.PriceDiscount;
c.ServiceRatesOverride = 0m;
c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount;
c.TravelRatesOverride = 0;
c.TravelRatesOverrideType = ContractOverrideType.PriceDiscount;
c.ResponseTime = TimeSpan.Zero;
c.ContractServiceRatesOnly = true;
c.ServiceRateItems.Add(new ContractServiceRate() { ServiceRateId = 1 });
c.ContractTravelRatesOnly = true;
c.TravelRateItems.Add(new ContractTravelRate() { TravelRateId = 1 });
c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "blue" }.ToList(), Override = .05m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "blue" }.ToList(), Override = .05m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "blue" }.ToList(), Override = .01m, OverrideType = ContractOverrideType.PriceDiscount });
using (AyContext ct = ServiceProviderProvider.DBContext)
{
ContractBiz biz = ContractBiz.GetBiz(ct);
var NewObject = await biz.CreateAsync(c);
if (NewObject == null)
{
var err = $"Seeder::SeedKnownObjects error creating Bronze contract\r\n{biz.GetErrorsAsString()}";
log.LogError(err);
throw new System.Exception(err);
}
}
}
{
Contract c = new Contract();
c.Name = "Silver";
c.Active = true;
c.Notes = "These are notes providing additional information when users view the contract";
c.AlertNotes = "These are alert notes displayed on workorders about this contract";
c.PartsOverride = .1m;
c.PartsOverrideType = ContractOverrideType.PriceDiscount;
c.ServiceRatesOverride = 0m;
c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount;
c.TravelRatesOverride = 0;
c.TravelRatesOverrideType = ContractOverrideType.PriceDiscount;
c.ResponseTime = TimeSpan.Zero;
c.ContractServiceRatesOnly = true;
c.ServiceRateItems.Add(new ContractServiceRate() { ServiceRateId = 2 });
c.ContractTravelRatesOnly = true;
c.TravelRateItems.Add(new ContractTravelRate() { TravelRateId = 2 });
c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "red" }.ToList(), Override = .1m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "red" }.ToList(), Override = .1m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "red" }.ToList(), Override = .05m, OverrideType = ContractOverrideType.PriceDiscount });
using (AyContext ct = ServiceProviderProvider.DBContext)
{
ContractBiz biz = ContractBiz.GetBiz(ct);
var NewObject = await biz.CreateAsync(c);
if (NewObject == null)
{
var err = $"Seeder::SeedKnownObjects error creating Silver contract\r\n{biz.GetErrorsAsString()}";
log.LogError(err);
throw new System.Exception(err);
}
}
}
{
Contract c = new Contract();
c.Name = "Gold";
c.Active = true;
c.Notes = "These are notes providing additional information when users view the contract";
c.AlertNotes = "These are alert notes displayed on workorders about this contract";
c.PartsOverride = .2m;
c.PartsOverrideType = ContractOverrideType.PriceDiscount;
c.ServiceRatesOverride = .2m;
c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount;
c.TravelRatesOverride = .2m;
c.TravelRatesOverrideType = ContractOverrideType.PriceDiscount;
c.ResponseTime = new TimeSpan(24, 0, 0);//24 hour response time
c.ContractServiceRatesOnly = false;
c.ServiceRateItems.Add(new ContractServiceRate() { ServiceRateId = 3 });
c.ContractTravelRatesOnly = false;
c.TravelRateItems.Add(new ContractTravelRate() { TravelRateId = 3 });
c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "green" }.ToList(), Override = .1m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "green" }.ToList(), Override = .1m, OverrideType = ContractOverrideType.PriceDiscount });
c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "green" }.ToList(), Override = .1m, OverrideType = ContractOverrideType.PriceDiscount });
using (AyContext ct = ServiceProviderProvider.DBContext)
{
ContractBiz biz = ContractBiz.GetBiz(ct);
var NewObject = await biz.CreateAsync(c);
if (NewObject == null)
{
var err = $"Seeder::SeedKnownObjects error creating Gold contract\r\n{biz.GetErrorsAsString()}";
log.LogError(err);
throw new System.Exception(err);
}
}
}
}
{
long HeadOfficeIdForCustomer = 0;
@@ -580,6 +698,9 @@ namespace AyaNova.Util
ho.EmailAddress = Fake.Internet.ExampleEmail();
ho.ContractId = 3;//gold contract
ho.ContractExpires = DateTime.UtcNow.AddYears(1);
using (AyContext ct = ServiceProviderProvider.DBContext)
{
HeadOfficeBiz biz = HeadOfficeBiz.GetBiz(ct);
@@ -810,6 +931,8 @@ namespace AyaNova.Util
}
}
///////////////////////////////////////////////
}
@@ -1212,7 +1335,7 @@ namespace AyaNova.Util
//////////////////////////////////////////////////////
//SERVICERATE
//
public async Task SeedServiceRateAsync(ILogger log, int count)
public async Task SeedServiceRateAsync(ILogger log, int count, string presetName = null, bool contractOnly = false)
{
for (int x = 0; x < count; x++)
@@ -1220,8 +1343,15 @@ namespace AyaNova.Util
ServiceRate o = new ServiceRate();
do
{
var color = Fake.Commerce.Color();
o.Name = $"{char.ToUpper(color[0]) + color.Substring(1)} {Fake.Lorem.Word()}";
if (!string.IsNullOrWhiteSpace(presetName))
{
o.Name = presetName;
}
else
{
var color = Fake.Commerce.Color();
o.Name = $"{char.ToUpper(color[0]) + color.Substring(1)} {Fake.Lorem.Word()}";
}
} while (!HashRateNames.Add(o.Name));
o.AccountNumber = Fake.Finance.Account();
o.Active = true;
@@ -1231,6 +1361,7 @@ namespace AyaNova.Util
o.Cost = Fake.Random.Decimal(0.25m, 50);
o.Charge = o.Cost * 1.55m;
o.Unit = "hour";
o.ContractOnly = contractOnly;
//This seems wrong to do in a loop but is 4 times faster this way ?!?
@@ -1253,7 +1384,7 @@ namespace AyaNova.Util
//////////////////////////////////////////////////////
//TRAVELRATE
//
public async Task SeedTravelRateAsync(ILogger log, int count)
public async Task SeedTravelRateAsync(ILogger log, int count, string presetName = null, bool contractOnly = false)
{
var Units = new[] { "km", "miles", "hours" };
@@ -1262,8 +1393,15 @@ namespace AyaNova.Util
TravelRate o = new TravelRate();
do
{
var color = Fake.Commerce.Color();
o.Name = $"{char.ToUpper(color[0]) + color.Substring(1)} {Fake.Lorem.Word()}";
if (!string.IsNullOrWhiteSpace(presetName))
{
o.Name = presetName;
}
else
{
var color = Fake.Commerce.Color();
o.Name = $"{char.ToUpper(color[0]) + color.Substring(1)} {Fake.Lorem.Word()}";
}
} while (!HashRateNames.Add(o.Name));
o.AccountNumber = Fake.Finance.Account();
o.Active = true;
@@ -1273,7 +1411,7 @@ namespace AyaNova.Util
o.Cost = Fake.Random.Decimal(0.25m, 10);
o.Charge = o.Cost * 2m;
o.Unit = Fake.PickRandom(Units);
o.ContractOnly = contractOnly;
//This seems wrong to do in a loop but is 4 times faster this way ?!?
@@ -1397,6 +1535,14 @@ namespace AyaNova.Util
o.PurchasedDate = Fake.Date.Between(seedStartWindow, DateTime.Now).ToUniversalTime();
o.Description = Fake.Commerce.ProductName();
o.ReplacedByUnitId = null;
//Has unit contract 5% chance (1/20)
if (Fake.Random.Number(1, 20) == 5)
{
o.ContractId = Fake.Random.Number(1, 3);
o.ContractExpires = DateTime.UtcNow.AddYears(1);
}
//for now no banked units in seeds
o.UsesBanking = false;
o.Metered = false;//for now no meters either