From 81547b774ff44b48e43494353b56b2a2821eff1a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Sun, 7 Mar 2021 15:39:36 +0000 Subject: [PATCH] --- server/AyaNova/DataList/TaxCodeDataList.cs | 2 +- server/AyaNova/biz/ContractBiz.cs | 16 +++---- server/AyaNova/biz/PurchaseOrderBiz.cs | 6 +-- server/AyaNova/biz/TaxCodeBiz.cs | 8 ++-- server/AyaNova/models/Contract.cs | 6 +-- server/AyaNova/models/ContractPartOverride.cs | 2 +- .../models/ContractServiceRateOverride.cs | 2 +- .../models/ContractTravelRateOverride.cs | 2 +- server/AyaNova/models/TaxCode.cs | 4 +- server/AyaNova/util/AySchema.cs | 13 ++--- server/AyaNova/util/Seeder.cs | 48 +++++++++---------- 11 files changed, 55 insertions(+), 54 deletions(-) diff --git a/server/AyaNova/DataList/TaxCodeDataList.cs b/server/AyaNova/DataList/TaxCodeDataList.cs index 8cbcfe04..22380441 100644 --- a/server/AyaNova/DataList/TaxCodeDataList.cs +++ b/server/AyaNova/DataList/TaxCodeDataList.cs @@ -54,7 +54,7 @@ namespace AyaNova.DataList TKey = "TaxCodeTaxA", FieldKey = "TaxCodeTaxA", UiFieldDataType = (int)UiFieldDataType.Decimal, - SqlValueColumnName = "ataxcode.taxa" + SqlValueColumnName = "ataxcode.taxapct" }); FieldDefinitions.Add(new DataListFieldDefinition diff --git a/server/AyaNova/biz/ContractBiz.cs b/server/AyaNova/biz/ContractBiz.cs index 6f22e1d7..8b972457 100644 --- a/server/AyaNova/biz/ContractBiz.cs +++ b/server/AyaNova/biz/ContractBiz.cs @@ -280,8 +280,8 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverridePct == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverridePct"); if (item.OverrideType == ContractOverrideType.NotSet) AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } @@ -312,8 +312,8 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverridePct == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverridePct"); if (item.OverrideType == ContractOverrideType.NotSet) AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } @@ -344,8 +344,8 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverridePct == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverridePct"); if (item.OverrideType == ContractOverrideType.NotSet) AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } @@ -385,8 +385,8 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverridePct == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverridePct"); if (item.OverrideType == ContractOverrideType.NotSet) AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index 43203d98..ed46292c 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -192,13 +192,13 @@ namespace AyaNova.Biz if (tax != null) { //Tax A is always just tax A percent times net... - dTaxA = tax.TaxA * dNet; + dTaxA = (tax.TaxAPct/100) * dNet; //Tax B on the other hand could be simple or tax on tax... if (!tax.TaxOnTax) - dTaxB = tax.TaxB * dNet;//simple + dTaxB = (tax.TaxBPct/100) * dNet;//simple else - dTaxB = (dNet + dTaxA) * tax.TaxB;//tax on tax + dTaxB = (dNet + dTaxA) * (tax.TaxBPct/100);//tax on tax } //set line total and taxes display values item.TaxAViz = dTaxA; diff --git a/server/AyaNova/biz/TaxCodeBiz.cs b/server/AyaNova/biz/TaxCodeBiz.cs index b314e50f..b975e05e 100644 --- a/server/AyaNova/biz/TaxCodeBiz.cs +++ b/server/AyaNova/biz/TaxCodeBiz.cs @@ -215,8 +215,8 @@ namespace AyaNova.Biz .AddText(obj.Name) .AddText(obj.Wiki) .AddText(obj.Tags) - .AddText(obj.TaxA) - .AddText(obj.TaxB) + .AddText(obj.TaxAPct) + .AddText(obj.TaxBPct) .AddCustomFields(obj.CustomFields); } @@ -236,8 +236,8 @@ namespace AyaNova.Biz if (!isNew) if (proposedObj.Name != currentObj.Name - || proposedObj.TaxA != currentObj.TaxA - || proposedObj.TaxB != currentObj.TaxB + || proposedObj.TaxAPct != currentObj.TaxAPct + || proposedObj.TaxBPct != currentObj.TaxBPct || proposedObj.TaxOnTax != currentObj.TaxOnTax) { //MIGRATE_OUTSTANDING - check workorder records once wo is coded here for this tax code in use diff --git a/server/AyaNova/models/Contract.cs b/server/AyaNova/models/Contract.cs index 2bad0778..0d93b2a6 100644 --- a/server/AyaNova/models/Contract.cs +++ b/server/AyaNova/models/Contract.cs @@ -30,15 +30,15 @@ namespace AyaNova.Models [Required] public bool ContractTravelRatesOnly { get; set; } [Required] - public decimal PartsOverride { get; set; } + public decimal PartsOverridePct { get; set; } [Required] public ContractOverrideType PartsOverrideType { get; set; } [Required] - public decimal ServiceRatesOverride { get; set; } + public decimal ServiceRatesOverridePct { get; set; } [Required] public ContractOverrideType ServiceRatesOverrideType { get; set; } [Required] - public decimal TravelRatesOverride { get; set; } + public decimal TravelRatesOverridePct { get; set; } [Required] public ContractOverrideType TravelRatesOverrideType { get; set; } public string AlertNotes { get; set; }//alert on workorder etc diff --git a/server/AyaNova/models/ContractPartOverride.cs b/server/AyaNova/models/ContractPartOverride.cs index 93f0332b..a2995007 100644 --- a/server/AyaNova/models/ContractPartOverride.cs +++ b/server/AyaNova/models/ContractPartOverride.cs @@ -13,7 +13,7 @@ namespace AyaNova.Models [Required] public long ContractId { get; set; } [Required] - public decimal Override { get; set; } + public decimal OverridePct { get; set; } [Required] public ContractOverrideType OverrideType { get; set; } [Required] diff --git a/server/AyaNova/models/ContractServiceRateOverride.cs b/server/AyaNova/models/ContractServiceRateOverride.cs index 6e9c8059..0c9c780f 100644 --- a/server/AyaNova/models/ContractServiceRateOverride.cs +++ b/server/AyaNova/models/ContractServiceRateOverride.cs @@ -13,7 +13,7 @@ namespace AyaNova.Models [Required] public long ContractId { get; set; } [Required] - public decimal Override { get; set; } + public decimal OverridePct { get; set; } [Required] public ContractOverrideType OverrideType { get; set; } [Required] diff --git a/server/AyaNova/models/ContractTravelRateOverride.cs b/server/AyaNova/models/ContractTravelRateOverride.cs index 5cc0a622..3e867049 100644 --- a/server/AyaNova/models/ContractTravelRateOverride.cs +++ b/server/AyaNova/models/ContractTravelRateOverride.cs @@ -13,7 +13,7 @@ namespace AyaNova.Models [Required] public long ContractId { get; set; } [Required] - public decimal Override { get; set; } + public decimal OverridePct { get; set; } [Required] public ContractOverrideType OverrideType { get; set; } [Required] diff --git a/server/AyaNova/models/TaxCode.cs b/server/AyaNova/models/TaxCode.cs index 83f8d7c1..af98c007 100644 --- a/server/AyaNova/models/TaxCode.cs +++ b/server/AyaNova/models/TaxCode.cs @@ -24,9 +24,9 @@ namespace AyaNova.Models public List Tags { get; set; } [Required] - public decimal TaxA { get; set; } + public decimal TaxAPct { get; set; } [Required] - public decimal TaxB { get; set; } + public decimal TaxBPct { get; set; } public bool TaxOnTax { get; set; } public TaxCode() diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index a4cf6283..6ff03794 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -46,6 +46,7 @@ namespace AyaNova.Util CURRENCY: DECIMAL(38,18) (to support potential of cryptocurrencies) largest Etherium value fits in this (36bytes) TAX/PERCENTAGES/PDF PAGE SCALE: DECIMAL(8,5) largest tax I could find would fit in this, that's 3 digits to left and 5 to right + Taxes are in face value not fractional value, i.e. "7" not .07 in db Inventory/incidents general numbers (19,5) Latitude/longitude 9,6 @@ -596,7 +597,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //TAXCODE await ExecQueryAsync("CREATE TABLE ataxcode (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name TEXT NOT NULL UNIQUE, active BOOL NOT NULL, " + "notes TEXT, wiki TEXT, customfields TEXT, tags VARCHAR(255) ARRAY, " - + "taxa DECIMAL(8,5) NOT NULL default 0, taxb DECIMAL(8,5) NOT NULL default 0, taxontax BOOL NOT NULL default false)"); + + "taxapct DECIMAL(8,5) NOT NULL default 0, taxbpct DECIMAL(8,5) NOT NULL default 0, taxontax BOOL NOT NULL default false)"); //MEMO await ExecQueryAsync("CREATE TABLE amemo (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name TEXT NOT NULL, " @@ -660,8 +661,8 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //CONTRACT await ExecQueryAsync("CREATE TABLE acontract (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name TEXT NOT NULL UNIQUE, active BOOL NOT NULL, " + "notes TEXT, wiki TEXT, customfields TEXT, tags VARCHAR(255) ARRAY, " - + "responsetime INTERVAL NOT NULL, contractserviceratesonly BOOL NOT NULL, contracttravelratesonly BOOL NOT NULL, partsoverride DECIMAL(8,5) NOT NULL, partsoverridetype INTEGER NOT NULL, " - + "serviceratesoverride DECIMAL(8,5) NOT NULL, serviceratesoverridetype INTEGER NOT NULL, travelratesoverride DECIMAL(8,5) NOT NULL, travelratesoverridetype INTEGER NOT NULL, " + + "responsetime INTERVAL NOT NULL, contractserviceratesonly BOOL NOT NULL, contracttravelratesonly BOOL NOT NULL, partsoverridepct DECIMAL(8,5) NOT NULL, partsoverridetype INTEGER NOT NULL, " + + "serviceratesoverridepct DECIMAL(8,5) NOT NULL, serviceratesoverridetype INTEGER NOT NULL, travelratesoverridepct DECIMAL(8,5) NOT NULL, travelratesoverridetype INTEGER NOT NULL, " + "alertnotes text " + ")"); await ExecQueryAsync("ALTER TABLE acustomer ADD column contractid BIGINT NULL REFERENCES acontract"); @@ -678,15 +679,15 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //CONTRACTPARTOVERRIDE await ExecQueryAsync("CREATE TABLE acontractpartoverride (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, contractid BIGINT NOT NULL REFERENCES acontract ON DELETE CASCADE, " - + " override DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); + + " overridepct DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); //CONTRACTSERVICERATEOVERRIDE await ExecQueryAsync("CREATE TABLE acontractservicerateoverride (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, contractid BIGINT NOT NULL REFERENCES acontract ON DELETE CASCADE, " - + " override DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); + + " overridepct DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); //CONTRACTTRAVELRATEOVERRIDE await ExecQueryAsync("CREATE TABLE acontracttravelrateoverride (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, contractid BIGINT NOT NULL REFERENCES acontract ON DELETE CASCADE, " - + " override DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); + + " overridepct DECIMAL(8,5) NOT NULL, overridetype INTEGER NOT NULL, tags VARCHAR(255) ARRAY)"); //HEADOFFICE diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index ff3a9fb9..28480124 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -571,20 +571,20 @@ namespace AyaNova.Util 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.PartsOverridePct = 5m; c.PartsOverrideType = ContractOverrideType.PriceDiscount; - c.ServiceRatesOverride = 0m; + c.ServiceRatesOverridePct = 0m; c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount; - c.TravelRatesOverride = 0; + c.TravelRatesOverridePct = 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 }); + c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "blue" }.ToList(), OverridePct = 5m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "blue" }.ToList(), OverridePct = 5m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "blue" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); using (AyContext ct = ServiceProviderProvider.DBContext) { @@ -606,20 +606,20 @@ namespace AyaNova.Util 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.PartsOverridePct = .1m; c.PartsOverrideType = ContractOverrideType.PriceDiscount; - c.ServiceRatesOverride = 0m; + c.ServiceRatesOverridePct = 0m; c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount; - c.TravelRatesOverride = 0; + c.TravelRatesOverridePct = 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 }); + c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "red" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "red" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "red" }.ToList(), OverridePct = 5m, OverrideType = ContractOverrideType.PriceDiscount }); using (AyContext ct = ServiceProviderProvider.DBContext) { @@ -641,20 +641,20 @@ namespace AyaNova.Util 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.PartsOverridePct = .2m; c.PartsOverrideType = ContractOverrideType.PriceDiscount; - c.ServiceRatesOverride = .2m; + c.ServiceRatesOverridePct = .2m; c.ServiceRatesOverrideType = ContractOverrideType.PriceDiscount; - c.TravelRatesOverride = .2m; + c.TravelRatesOverridePct = .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 }); + c.ContractServiceRateOverrideItems.Add(new ContractServiceRateOverride() { Tags = new string[] { "green" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractTravelRateOverrideItems.Add(new ContractTravelRateOverride() { Tags = new string[] { "green" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); + c.ContractPartOverrideItems.Add(new ContractPartOverride() { Tags = new string[] { "green" }.ToList(), OverridePct = 10m, OverrideType = ContractOverrideType.PriceDiscount }); using (AyContext ct = ServiceProviderProvider.DBContext) { @@ -849,8 +849,8 @@ namespace AyaNova.Util tc.Notes = "Example sales only tax"; tc.Active = true; tc.Tags = RandomTags(); - tc.TaxA = 0; - tc.TaxB = 0.07m; + tc.TaxAPct = 0; + tc.TaxBPct = 7m; tc.TaxOnTax = false; using (AyContext ct = ServiceProviderProvider.DBContext) { @@ -872,8 +872,8 @@ namespace AyaNova.Util tc.Active = true; tc.Notes = "Example goods only tax"; tc.Tags = RandomTags(); - tc.TaxB = 0; - tc.TaxA = 0.07m; + tc.TaxBPct = 0; + tc.TaxAPct = 7m; tc.TaxOnTax = false; using (AyContext ct = ServiceProviderProvider.DBContext) { @@ -895,8 +895,8 @@ namespace AyaNova.Util tc.Active = true; tc.Notes = "Example sales and goods tax"; tc.Tags = RandomTags(); - tc.TaxA = 0.07m; - tc.TaxB = 0.07m; + tc.TaxAPct = 7m; + tc.TaxBPct = 7m; tc.TaxOnTax = false; using (AyContext ct = ServiceProviderProvider.DBContext) {