This commit is contained in:
2020-12-29 19:44:19 +00:00
parent b4ae5054a9
commit 4e249d5c9b
3 changed files with 105 additions and 3 deletions

2
.vscode/launch.json vendored
View File

@@ -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": "false",
"AYANOVA_SERVER_TEST_MODE": "true",
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"

View File

@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using AyaNova.Biz;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace AyaNova.Models
{
//NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal,
//otherwise the server will call it an invalid record if the field isn't sent from client
//NOTE: following pattern outlined here:
//https://dba.stackexchange.com/a/19368
public class ServiceBank
{
public long Id { get; set; }
public uint Concurrency { get; set; }
[Required]
public string Name { get; set; }
[Required]
public DateTime EntryDate { get; set; }
[Required]
public DateTime LastEntryDate { get; set; }
[Required]
public long ObjectId { get; set; }
[Required]
public AyaType ObjectType { get; set; }
[Required]
public long SourceId { get; set; }
[Required]
public AyaType SourceType { get; set; }
[Required]
public decimal Incidents { get; set; }
[Required]
public decimal IncidentsBalance { get; set; }
[Required]
public decimal LastIncidentsBalance { get; set; }
[Required]
public decimal Currency { get; set; }
[Required]
public decimal CurencyBalance { get; set; }
[Required]
public decimal LastCurencyBalance { get; set; }
[Required]
public decimal Hours { get; set; }
[Required]
public decimal HoursBalance { get; set; }
[Required]
public decimal LastHoursBalance { get; set; }
public ServiceBank()
{
EntryDate = DateTime.UtcNow;
}
}//eoc
}//eons
/*
CREATE TABLE [dbo].[ASERVICEBANK](
[AID] [uniqueidentifier] NOT NULL,
[ACREATED] [datetime] NOT NULL,//displays as "Entered" in v7 ui
[ACREATOR] [uniqueidentifier] NOT NULL,
[ADESCRIPTION] [nvarchar](255) NULL,
[ASOURCEROOTOBJECTTYPE] [smallint] NOT NULL,
[AEFFECTIVEDATE] [datetime] NULL,//docs for v7 say for what have you purposes, not relevant, for v8 IMPORT AS transactiondat
[AINCIDENTS] [decimal](19, 5) NULL,
[AINCIDENTSBALANCE] [decimal](19, 5) NULL,
[ACURRENCY] [decimal](19, 5) NULL,
[ACURRENCYBALANCE] [decimal](19, 5) NULL,
[AHOURS] [decimal](19, 5) NULL,
[AHOURSBALANCE] [decimal](19, 5) NULL,
[AAPPLIESTOROOTOBJECTID] [uniqueidentifier] NOT NULL,
[AAPPLIESTOROOTOBJECTTYPE] [smallint] NOT NULL,
[ASOURCEROOTOBJECTID] [uniqueidentifier] NULL,
*/

View File

@@ -22,8 +22,8 @@ namespace AyaNova.Util
//!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImporting WHEN NEW TABLES ADDED!!!!
private const int DESIRED_SCHEMA_LEVEL = 15;
internal const long EXPECTED_COLUMN_COUNT = 570;
internal const long EXPECTED_INDEX_COUNT = 171;
internal const long EXPECTED_COLUMN_COUNT = 587;
internal const long EXPECTED_INDEX_COUNT = 176;
//!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImporting WHEN NEW TABLES ADDED!!!!
@@ -617,6 +617,27 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
await ExecQueryAsync("CREATE INDEX areview_completeddate_idx ON areview (completeddate);");
await ExecQueryAsync("CREATE INDEX areview_tags ON areview using GIN(tags)");
//SERVICE BANK
await ExecQueryAsync("CREATE TABLE aservicebank (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text not null, " +
"entrydate timestamp not null, lastentrydate timestamp not null, objecttype integer not null, objectid bigint not null, sourcetype integer not null, sourceid bigint not null, " +
"incidents decimal(19,4) not null, incidentsbalance decimal(19,4) not null, lastincidentsbalance decimal(19,4), " +
"currency decimal(19,4) not null, currencybalance decimal(19,4) not null, lastcurrencybalance decimal(19,4), " +
"hours decimal(19,4) not null, hoursbalance decimal(19,4) not null, lasthoursbalance decimal(19,4), "+
"UNIQUE (entrydate, objectid, objecttype), " +
"UNIQUE (entrydate, objectid, objecttype, incidentsbalance, hoursbalance, currencybalance), " +
"UNIQUE (lastentrydate, objectid, objecttype, lastincidentsbalance, lasthoursbalance, lastcurrencybalance), " +
"CONSTRAINT fk_ServiceBank_self FOREIGN KEY (lastentrydate, objectid, objecttype, lastincidentsbalance, lasthoursbalance, lastcurrencybalance) references aservicebank(entrydate, objectid, objecttype, incidentsbalance, hoursbalance, currencybalance), " +
"CONSTRAINT CHK_Servicebank_Valid_IncidentBalance CHECK(incidentsbalance >= 0 AND (incidentsbalance = COALESCE(lastincidentsbalance, 0) + incidents)), " +
"CONSTRAINT CHK_Servicebank_Valid_CurrencyBalance CHECK(currencybalance >= 0 AND (currencybalance = COALESCE(lastcurrencybalance, 0) + currency)), " +
"CONSTRAINT CHK_Servicebank_Valid_HoursBalance CHECK(hoursbalance >= 0 AND (hoursbalance = COALESCE(lasthoursbalance, 0) + hours)), " +
"CONSTRAINT CHK_ServiceBank_Valid_Dates_Sequence CHECK(lastentrydate < entrydate), " +
"CONSTRAINT CHK_ServiceBank_Valid_Previous_Columns CHECK((lastentrydate IS NULL AND lastincidentsbalance IS NULL AND lastcurrencybalance IS NULL AND lasthoursbalance IS NULL) OR (lastentrydate IS NOT NULL AND lastincidentsbalance IS NOT NULL AND lastcurrencybalance IS NOT NULL AND lasthoursbalance IS NOT NULL)) "+
" )");
await ExecQueryAsync("CREATE INDEX aservicebank_typeid_idx ON aservicebank (objectid, objecttype );");
//CUSTOMER
await ExecQueryAsync("CREATE TABLE acustomer (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text not null unique, active bool, " +
"notes text, wiki text, customfields text, tags varchar(255) ARRAY, " +