From f1dbe5c7524ecb6b31166d6a0446ddc169e240e9 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 5 Mar 2021 19:10:53 +0000 Subject: [PATCH] --- server/AyaNova/biz/ContractBiz.cs | 61 +++++++++++++++++++++++++------ server/AyaNova/models/Contract.cs | 4 +- server/AyaNova/resource/de.json | 2 + server/AyaNova/resource/en.json | 2 + server/AyaNova/resource/es.json | 2 + server/AyaNova/resource/fr.json | 2 + server/AyaNova/util/AySchema.cs | 2 +- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/server/AyaNova/biz/ContractBiz.cs b/server/AyaNova/biz/ContractBiz.cs index 01ba94ca..8bbe9d9f 100644 --- a/server/AyaNova/biz/ContractBiz.cs +++ b/server/AyaNova/biz/ContractBiz.cs @@ -273,10 +273,10 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); - if (item.OverrideType == ContractOverrideType.NotSet) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); + if (item.Override == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverrideType == ContractOverrideType.NotSet) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } } @@ -305,10 +305,10 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); - if (item.OverrideType == ContractOverrideType.NotSet) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); + if (item.Override == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverrideType == ContractOverrideType.NotSet) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } } @@ -337,15 +337,52 @@ namespace AyaNova.Biz } } } - if (item.Override == 0) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); - if (item.OverrideType == ContractOverrideType.NotSet) - AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); + if (item.Override == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverrideType == ContractOverrideType.NotSet) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); } } + //VALIDATE CONTRACT RATE / PART ITEMS + if (proposedObj.ServiceRateItems.Count ==0) + { + if(proposedObj.ContractServiceRatesOnly){ + AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, $"ContractRatesOnly"); + } + } + else + { + List allTags = new List(); + for (int i = 0; i < proposedObj.ContractPartOverrideItems.Count; i++) + { + var item = proposedObj.ContractPartOverrideItems[i]; + if (item.Tags.Count < 1) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Tags"); + else + { + //add to list, check for dupes + foreach (string s in item.Tags) + { + if (allTags.Contains(s)) + { + AddError(ApiErrorCode.VALIDATION_NOT_UNIQUE, $"ContractPartOverrideItems[{i}].Tags"); + break; + } + else + { + allTags.Add(s); + } + } + } + if (item.Override == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].Override"); + if (item.OverrideType == ContractOverrideType.NotSet) + AddError(ApiErrorCode.VALIDATION_REQUIRED, $"ContractPartOverrideItems[{i}].OverrideType"); + } + } diff --git a/server/AyaNova/models/Contract.cs b/server/AyaNova/models/Contract.cs index 151db836..2bad0778 100644 --- a/server/AyaNova/models/Contract.cs +++ b/server/AyaNova/models/Contract.cs @@ -26,7 +26,9 @@ namespace AyaNova.Models [Required] public TimeSpan ResponseTime { get; set; } [Required] - public bool ContractRatesOnly { get; set; } + public bool ContractServiceRatesOnly { get; set; } + [Required] + public bool ContractTravelRatesOnly { get; set; } [Required] public decimal PartsOverride { get; set; } [Required] diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index 91a4955a..50f8a8ae 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -200,6 +200,8 @@ "ContractOverrideType": "Preisanpassungsart", "ContractOverrideTypePriceDiscount": "Preis minus Prozentsatz", "ContractOverrideTypeMarkup": "Kosten plus Prozentsatz", + "ContractServiceRatesOnly":"Nur auf Vertragsservicetarife beschränkt", + "ContractTravelRatesOnly":"Nur für vertraglich vereinbarte Reisetarife", "CoordinateTypesDecimalDegrees": "Dezimalgrad (DDD,ddd°)", "CoordinateTypesDegreesDecimalMinutes": "Grad Minuten (DDD° MM,mmm)", "CoordinateTypesDegreesMinutesSeconds": "Grad Minuten Sekunden (DDD° MM' SS,sss')", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 119b61c2..5e21c8ed 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -200,6 +200,8 @@ "ContractOverrideType": "Price adjustment type", "ContractOverrideTypePriceDiscount": "Price minus percentage", "ContractOverrideTypeMarkup": "Cost plus percentage", + "ContractServiceRatesOnly":"Restricted to contract Service rates only", + "ContractTravelRatesOnly":"Restricted to contract Travel rates only", "CoordinateTypesDecimalDegrees": "Decimal degrees (DDD.ddd°)", "CoordinateTypesDegreesDecimalMinutes": "Degrees minutes (DDD° MM.mmm)", "CoordinateTypesDegreesMinutesSeconds": "Degrees Minutes Seconds (DDD° MM' SS.sss')", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index e139aebe..af47d272 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -200,6 +200,8 @@ "ContractOverrideType": "Tipo de ajuste de precio", "ContractOverrideTypePriceDiscount": "Precio menos porcentaje", "ContractOverrideTypeMarkup": "Costo más porcentaje", + "ContractServiceRatesOnly":"Restringido a tarifas de servicio contratadas únicamente", + "ContractTravelRatesOnly":"Restringido a contratar tarifas de viaje únicamente", "CoordinateTypesDecimalDegrees": "Grados decimales (GGG,ggg°)", "CoordinateTypesDegreesDecimalMinutes": "Grados minutos (GGG° MM,mmm)", "CoordinateTypesDegreesMinutesSeconds": "Grados Minutos Segundos (GGG° MM' SS,sss')", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index 77e74139..71ecae71 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -200,6 +200,8 @@ "ContractOverrideType": "Type d'ajustement de prix", "ContractOverrideTypePriceDiscount": "Prix moins pourcentage", "ContractOverrideTypeMarkup": "Coût plus pourcentage", + "ContractServiceRatesOnly":"Limité aux tarifs de service contractuels uniquement", + "ContractTravelRatesOnly":"Limité aux tarifs contractuels de voyage uniquement", "CoordinateTypesDecimalDegrees": "Degrés décimaux (DDD,ddd°)", "CoordinateTypesDegreesDecimalMinutes": "Degrés minutes (DDD° MM,mmm)", "CoordinateTypesDegreesMinutesSeconds": "Degrés Minutes Secondes (DDD° MM' SS,sss')", diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 084e2b59..99dc2c69 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -657,7 +657,7 @@ $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, contractratesonly BOOL NOT NULL, partsoverride DECIMAL(5,5) NOT NULL, partsoverridetype INTEGER NOT NULL, " + + "responsetime INTERVAL NOT NULL, contractserviceratesonly BOOL NOT NULL, contracttravelratesonly BOOL NOT NULL, partsoverride DECIMAL(5,5) NOT NULL, partsoverridetype INTEGER NOT NULL, " + "serviceratesoverride DECIMAL(5,5) NOT NULL, serviceratesoverridetype INTEGER NOT NULL, travelratesoverride DECIMAL(5,5) NOT NULL, travelratesoverridetype INTEGER NOT NULL, " + "alertnotes text " + ")");