This commit is contained in:
2021-05-21 18:59:20 +00:00
parent c9366b1728
commit 2bd36f2626
3 changed files with 43 additions and 11 deletions

2
.vscode/launch.json vendored
View File

@@ -53,7 +53,7 @@
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", "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_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"

View File

@@ -238,14 +238,28 @@ namespace AyaNova.Biz
|| proposedObj.TaxBPct != currentObj.TaxBPct || proposedObj.TaxBPct != currentObj.TaxBPct
|| proposedObj.TaxOnTax != currentObj.TaxOnTax)) || proposedObj.TaxOnTax != currentObj.TaxOnTax))
{ {
//MIGRATE_OUTSTANDING - check workorder records once wo is coded here for this tax code in use //todo: possibly, consider returning after any positive below to not swamp the UI with errors??
//also any other object that uses tax codes besides global settings and purchase order items if (isGlobalDefault)
AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("AdministrationGlobalSettings"));
if (await ct.PurchaseOrderItem.AnyAsync(x => x.PurchaseTaxCodeId == proposedObj.Id)) if (await ct.PurchaseOrderItem.AnyAsync(x => x.PurchaseTaxCodeId == proposedObj.Id))
AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder")); AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder"));
if (isGlobalDefault) if (await ct.WorkOrderItemTravel.AnyAsync(x => x.TaxCodeSaleId == proposedObj.Id))
AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("AdministrationGlobalSettings")); 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? //Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(x => x.FormKey == AyaType.TaxCode.ToString()); var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(x => x.FormKey == AyaType.TaxCode.ToString());
if (FormCustomization != null) if (FormCustomization != null)
@@ -284,14 +300,30 @@ namespace AyaNova.Biz
private async Task ValidateCanDeleteAsync(TaxCode inObj) private async Task ValidateCanDeleteAsync(TaxCode inObj)
{ {
//Referential integrity //Referential integrity
//FOREIGN KEY CHECKS //FOREIGN KEY CHECKS
if (await ct.PurchaseOrderItem.AnyAsync(m => m.PurchaseTaxCodeId == inObj.Id))
AddError(ApiErrorCode.VALIDATION_REFERENTIAL_INTEGRITY, "generalerror", await Translate("PurchaseOrder"));
if (ServerGlobalBizSettings.TaxPartPurchaseId == inObj.Id if (ServerGlobalBizSettings.TaxPartPurchaseId == inObj.Id
|| ServerGlobalBizSettings.TaxPartSaleId == inObj.Id || ServerGlobalBizSettings.TaxPartSaleId == inObj.Id
|| ServerGlobalBizSettings.TaxRateSaleId == inObj.Id) || ServerGlobalBizSettings.TaxRateSaleId == inObj.Id)
AddError(ApiErrorCode.INVALID_OPERATION, "generalerror", await Translate("TaxCodeDefault")); 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"));
} }

View File

@@ -253,9 +253,9 @@ namespace AyaNova.Util
await ExecQueryAsync("CREATE TABLE aglobalbizsettings (id INTEGER NOT NULL PRIMARY KEY, " await ExecQueryAsync("CREATE TABLE aglobalbizsettings (id INTEGER NOT NULL PRIMARY KEY, "
+ "searchcasesensitiveonly BOOL DEFAULT FALSE, " + "searchcasesensitiveonly BOOL DEFAULT FALSE, "
+ "useinventory BOOL DEFAULT TRUE, " + "useinventory BOOL DEFAULT TRUE, "
+ "taxpartpurchaseid BIGINT, " + "taxpartpurchaseid BIGINT REFERENCES ataxcode, "
+ "taxpartsaleid BIGINT, " + "taxpartsaleid BIGINT REFERENCES ataxcode, "
+ "taxratesaleid BIGINT, " + "taxratesaleid BIGINT REFERENCES ataxcode, "
+ "workordercompletebyage INTERVAL NOT NULL DEFAULT '00:00:00'" + "workordercompletebyage INTERVAL NOT NULL DEFAULT '00:00:00'"
+ ")"); + ")");