From 2bd36f26268e525c4913b092df7f7fa40bb6163c Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 21 May 2021 18:59:20 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/biz/TaxCodeBiz.cs | 46 +++++++++++++++++++++++++++----- server/AyaNova/util/AySchema.cs | 6 ++--- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 8fd97968..0e2049e9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/biz/TaxCodeBiz.cs b/server/AyaNova/biz/TaxCodeBiz.cs index eb7b2dff..5e68d6e3 100644 --- a/server/AyaNova/biz/TaxCodeBiz.cs +++ b/server/AyaNova/biz/TaxCodeBiz.cs @@ -238,14 +238,28 @@ namespace AyaNova.Biz || proposedObj.TaxBPct != currentObj.TaxBPct || proposedObj.TaxOnTax != currentObj.TaxOnTax)) { - //MIGRATE_OUTSTANDING - check workorder records once wo is coded here for this tax code in use - //also any other object that uses tax codes besides global settings and purchase order items + //todo: possibly, consider returning after any positive below to not swamp the UI with errors?? + if (isGlobalDefault) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("AdministrationGlobalSettings")); if (await ct.PurchaseOrderItem.AnyAsync(x => x.PurchaseTaxCodeId == proposedObj.Id)) AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder")); - if (isGlobalDefault) - AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("AdministrationGlobalSettings")); + if (await ct.WorkOrderItemTravel.AnyAsync(x => x.TaxCodeSaleId == proposedObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemTravel")); + + if (await ct.WorkOrderItemPart.AnyAsync(x => x.TaxPartSaleId == proposedObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemPart")); + + if (await ct.WorkOrderItemLoan.AnyAsync(x => x.TaxCodeId == proposedObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemLoan")); + + if (await ct.WorkOrderItemLabor.AnyAsync(x => x.TaxCodeSaleId == proposedObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemLabor")); + + if (await ct.WorkOrderItemExpense.AnyAsync(x => x.ChargeTaxCodeId == proposedObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemExpense")); + } @@ -267,6 +281,8 @@ namespace AyaNova.Biz } } + + //Any form customizations to validate? var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(x => x.FormKey == AyaType.TaxCode.ToString()); if (FormCustomization != null) @@ -284,14 +300,30 @@ namespace AyaNova.Biz private async Task ValidateCanDeleteAsync(TaxCode inObj) { //Referential integrity - //FOREIGN KEY CHECKS - if (await ct.PurchaseOrderItem.AnyAsync(m => m.PurchaseTaxCodeId == inObj.Id)) - AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder")); + //FOREIGN KEY CHECKS if (ServerGlobalBizSettings.TaxPartPurchaseId == inObj.Id || ServerGlobalBizSettings.TaxPartSaleId == inObj.Id || ServerGlobalBizSettings.TaxRateSaleId == inObj.Id) AddError(ApiErrorCode.INVALID_OPERATION, "generalerror", await Translate("TaxCodeDefault")); + + if (await ct.PurchaseOrderItem.AnyAsync(x => x.PurchaseTaxCodeId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder")); + + if (await ct.WorkOrderItemTravel.AnyAsync(x => x.TaxCodeSaleId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemTravel")); + + if (await ct.WorkOrderItemPart.AnyAsync(x => x.TaxPartSaleId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemPart")); + + if (await ct.WorkOrderItemLoan.AnyAsync(x => x.TaxCodeId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemLoan")); + + if (await ct.WorkOrderItemLabor.AnyAsync(x => x.TaxCodeSaleId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemLabor")); + + if (await ct.WorkOrderItemExpense.AnyAsync(x => x.ChargeTaxCodeId == inObj.Id)) + AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("WorkOrderItemExpense")); } diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 54c1bd35..645f2414 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -253,9 +253,9 @@ namespace AyaNova.Util await ExecQueryAsync("CREATE TABLE aglobalbizsettings (id INTEGER NOT NULL PRIMARY KEY, " + "searchcasesensitiveonly BOOL DEFAULT FALSE, " + "useinventory BOOL DEFAULT TRUE, " - + "taxpartpurchaseid BIGINT, " - + "taxpartsaleid BIGINT, " - + "taxratesaleid BIGINT, " + + "taxpartpurchaseid BIGINT REFERENCES ataxcode, " + + "taxpartsaleid BIGINT REFERENCES ataxcode, " + + "taxratesaleid BIGINT REFERENCES ataxcode, " + "workordercompletebyage INTERVAL NOT NULL DEFAULT '00:00:00'" + ")");