diff --git a/.vscode/launch.json b/.vscode/launch.json index 81598112..1871b4f7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -55,7 +55,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": "-8", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index f4d9a5f6..f8c0a025 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,18 +22,18 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImportingAsync WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 1; - internal const long EXPECTED_COLUMN_COUNT = 1301; + internal const long EXPECTED_COLUMN_COUNT = 1302; internal const long EXPECTED_INDEX_COUNT = 153; internal const long EXPECTED_CHECK_CONSTRAINTS = 518; - internal const long EXPECTED_FOREIGN_KEY_CONSTRAINTS = 193; + internal const long EXPECTED_FOREIGN_KEY_CONSTRAINTS = 198; internal const long EXPECTED_VIEWS = 11; internal const long EXPECTED_ROUTINES = 2; //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImportingAsync WHEN NEW TABLES ADDED!!!! - ///////////////////////////////////////////////////////////////// C1301:I153:CC518:FC193:V11:R2 + ///////////////////////////////////////////////////////////////// (C1302:I153:CC518:FC198:V11:R2) + - /* @@ -261,10 +261,11 @@ namespace AyaNova.Util + "signaturetitle TEXT, " + "signatureheader TEXT, " + "signaturefooter TEXT, " - + "customerservicerequestinfotext TEXT, " + "customerallowcsr BOOL DEFAULT FALSE, customerallowcsrintags VARCHAR(255) ARRAY, " + "customerallowviewwo BOOL DEFAULT FALSE, customerallowviewwointags VARCHAR(255) ARRAY, " + + "customerworkorderreport1tags VARCHAR(255) ARRAY, customerworkorderreport2tags VARCHAR(255) ARRAY, " + + "customerworkorderreport3tags VARCHAR(255) ARRAY, customerworkorderreport4tags VARCHAR(255) ARRAY, customerworkorderreport5tags VARCHAR(255) ARRAY, " + "customerallowwowiki BOOL DEFAULT FALSE, customerallowwowikiintags VARCHAR(255) ARRAY, " + "customerallowusersettings BOOL DEFAULT FALSE, customerallowusersettingsintags VARCHAR(255) ARRAY, " + "customerallownotifyserviceimminent BOOL DEFAULT FALSE, customerallownotifyserviceimminentintags VARCHAR(255) ARRAY, " @@ -359,122 +360,122 @@ $BODY$; -/* + /* --- FUNCTION: public.aygetnameex(bigint, integer) - -- DROP FUNCTION IF EXISTS public.aygetnameex(bigint, integer); + -- FUNCTION: public.aygetnameex(bigint, integer) + -- DROP FUNCTION IF EXISTS public.aygetnameex(bigint, integer); -CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAMEEX(AYOBJECTID bigint, AYATYPE integer, TRANSLATIONID integer) RETURNS text LANGUAGE 'plpgsql' COST 100 STABLE PARALLEL UNSAFE AS $BODY$ -DECLARE - aytable TEXT DEFAULT ''; - aynamecolumn TEXT DEFAULT 'name'; - aytkey TEXT DEFAULT 'no'; - returnstr TEXT DEFAULT ''; -BEGIN - case ayatype - when 0 then aytkey= 'NoType'; - when 1 then aytkey= 'Global'; - when 2 then return 'FormUserOptions'; - when 3 then aytable = 'auser'; - when 4 then aytkey= 'ServerState'; - when 5 then aytkey= 'License'; - when 6 then aytkey= 'LogFile'; - when 7 then aytkey= 'PickListTemplate'; - when 8 then aytable = 'acustomer'; - when 9 then aytkey= 'ServerJob'; - when 10 then aytable = 'acontract'; - when 11 then aytkey= 'TrialSeeder'; - when 12 then aytkey= 'ServerMetrics'; - when 13 then aytable = 'atranslation'; - when 14 then aytkey= 'UserOptions'; - when 15 then aytable = 'aheadoffice'; - when 16 then aytable = 'aloanunit'; - when 17 then aytable = 'afileattachment'; aynamecolumn ='displayfilename'; - when 18 then aytable = 'adatalistsavedfilter'; - when 19 then aytable = 'aformcustom'; aynamecolumn = 'formkey'; - when 20 then aytable = 'apart'; aynamecolumn ='partnumber'; - when 21 then aytable = 'apm'; aynamecolumn ='serial'; - when 22 then aytkey= 'PMItem'; - when 23 then aytkey= 'WorkOrderItemExpense'; - when 24 then aytkey= 'WorkOrderItemLabor'; - when 25 then aytable = 'aproject'; - when 26 then aytable = 'apurchaseorder'; aynamecolumn = 'serial'; - when 27 then aytable = 'aquote'; aynamecolumn = 'serial'; - when 28 then aytkey= 'QuoteItem'; - when 29 then aytkey= 'WorkOrderItemLoan'; - when 30 then aytkey= 'WorkOrderItemPart'; - when 31 then aytable = 'aunit'; aynamecolumn = 'serial'; - when 32 then aytable = 'aunitmodel'; aynamecolumn = 'name'; - when 33 then aytable = 'avendor'; - when 34 then aytable = 'aworkorder'; aynamecolumn = 'serial'; - when 35 then aytkey= 'WorkOrderItem'; - when 36 then aytkey= 'WorkOrderItemExpense'; - when 37 then aytkey= 'WorkOrderItemLabor'; - when 38 then aytkey= 'WorkOrderItemLoan'; - when 39 then aytkey= 'WorkOrderItemPart'; - when 40 then aytkey= 'WorkOrderItemPartRequest'; - when 41 then aytkey= 'WorkOrderItemScheduledUser'; - when 42 then aytkey= 'WorkOrderItemTask'; - when 43 then aytkey= 'WorkOrderItemTravel'; - when 44 then aytkey= 'WorkOrderItemUnit'; - when 45 then aytkey= 'WorkOrderItemScheduledUser'; - when 46 then aytkey= 'WorkOrderItemTask'; - when 47 then aytkey= 'GlobalOps'; - when 48 then aytkey= 'BizMetrics'; - when 49 then aytkey= 'Backup'; - when 50 then aytable = 'ainappnotification'; - when 51 then aytkey= 'NotifySubscription'; - when 52 then aytable = 'areminder'; - when 53 then aytkey= 'UnitMeterReading'; - when 54 then aytable = 'acustomerservicerequest'; - when 56 then aytkey= 'OpsNotificationSettings'; - when 57 then aytable = 'areport'; - when 58 then aytkey= 'DashBoardView'; - when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate'; - when 60 then aytable = 'amemo'; - when 61 then aytable = 'areview'; - when 62 then aytable = 'aservicerate'; - when 63 then aytable = 'atravelrate'; - when 64 then aytable = 'ataxcode'; - when 65 then aytable = 'apartassembly'; - when 66 then aytable = 'apartwarehouse'; - when 67 then aytable = 'apartinventory'; aynamecolumn='description'; - when 68 then return format('DataListColumnView %L', ayobjectid); - when 71 then aytable = 'aworkorderstatus'; - when 72 then aytable = 'aTaskGroup'; - when 73 then aytkey= 'WorkOrderItemOutsideService'; - when 74 then aytable = 'aWorkOrderItemPriority'; - when 75 then aytable = 'aWorkOrderItemStatus'; - when 76 then aytkey= 'WorkOrderItemTravel'; - when 77 then aytkey= 'WorkOrderItemUnit'; - when 78 then aytable = 'aquotestatus'; - when 79 then aytkey= 'WorkOrderItemOutsideService'; - when 80 then aytkey= 'WorkOrderItemExpense'; - when 81 then aytkey= 'WorkOrderItemLabor'; - when 82 then aytkey= 'WorkOrderItemLoan'; - when 83 then aytkey= 'WorkOrderItemPart'; - when 84 then aytkey= 'WorkOrderItemPartRequest'; - when 85 then aytkey= 'WorkOrderItemScheduledUser'; - when 86 then aytkey= 'WorkOrderItemTask'; - when 87 then aytkey= 'WorkOrderItemTravel'; - when 88 then aytkey= 'WorkOrderItemUnit'; - when 89 then aytkey= 'WorkOrderItemOutsideService'; - else - RETURN returnstr; - end case; + CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAMEEX(AYOBJECTID bigint, AYATYPE integer, TRANSLATIONID integer) RETURNS text LANGUAGE 'plpgsql' COST 100 STABLE PARALLEL UNSAFE AS $BODY$ + DECLARE + aytable TEXT DEFAULT ''; + aynamecolumn TEXT DEFAULT 'name'; + aytkey TEXT DEFAULT 'no'; + returnstr TEXT DEFAULT ''; + BEGIN + case ayatype + when 0 then aytkey= 'NoType'; + when 1 then aytkey= 'Global'; + when 2 then return 'FormUserOptions'; + when 3 then aytable = 'auser'; + when 4 then aytkey= 'ServerState'; + when 5 then aytkey= 'License'; + when 6 then aytkey= 'LogFile'; + when 7 then aytkey= 'PickListTemplate'; + when 8 then aytable = 'acustomer'; + when 9 then aytkey= 'ServerJob'; + when 10 then aytable = 'acontract'; + when 11 then aytkey= 'TrialSeeder'; + when 12 then aytkey= 'ServerMetrics'; + when 13 then aytable = 'atranslation'; + when 14 then aytkey= 'UserOptions'; + when 15 then aytable = 'aheadoffice'; + when 16 then aytable = 'aloanunit'; + when 17 then aytable = 'afileattachment'; aynamecolumn ='displayfilename'; + when 18 then aytable = 'adatalistsavedfilter'; + when 19 then aytable = 'aformcustom'; aynamecolumn = 'formkey'; + when 20 then aytable = 'apart'; aynamecolumn ='partnumber'; + when 21 then aytable = 'apm'; aynamecolumn ='serial'; + when 22 then aytkey= 'PMItem'; + when 23 then aytkey= 'WorkOrderItemExpense'; + when 24 then aytkey= 'WorkOrderItemLabor'; + when 25 then aytable = 'aproject'; + when 26 then aytable = 'apurchaseorder'; aynamecolumn = 'serial'; + when 27 then aytable = 'aquote'; aynamecolumn = 'serial'; + when 28 then aytkey= 'QuoteItem'; + when 29 then aytkey= 'WorkOrderItemLoan'; + when 30 then aytkey= 'WorkOrderItemPart'; + when 31 then aytable = 'aunit'; aynamecolumn = 'serial'; + when 32 then aytable = 'aunitmodel'; aynamecolumn = 'name'; + when 33 then aytable = 'avendor'; + when 34 then aytable = 'aworkorder'; aynamecolumn = 'serial'; + when 35 then aytkey= 'WorkOrderItem'; + when 36 then aytkey= 'WorkOrderItemExpense'; + when 37 then aytkey= 'WorkOrderItemLabor'; + when 38 then aytkey= 'WorkOrderItemLoan'; + when 39 then aytkey= 'WorkOrderItemPart'; + when 40 then aytkey= 'WorkOrderItemPartRequest'; + when 41 then aytkey= 'WorkOrderItemScheduledUser'; + when 42 then aytkey= 'WorkOrderItemTask'; + when 43 then aytkey= 'WorkOrderItemTravel'; + when 44 then aytkey= 'WorkOrderItemUnit'; + when 45 then aytkey= 'WorkOrderItemScheduledUser'; + when 46 then aytkey= 'WorkOrderItemTask'; + when 47 then aytkey= 'GlobalOps'; + when 48 then aytkey= 'BizMetrics'; + when 49 then aytkey= 'Backup'; + when 50 then aytable = 'ainappnotification'; + when 51 then aytkey= 'NotifySubscription'; + when 52 then aytable = 'areminder'; + when 53 then aytkey= 'UnitMeterReading'; + when 54 then aytable = 'acustomerservicerequest'; + when 56 then aytkey= 'OpsNotificationSettings'; + when 57 then aytable = 'areport'; + when 58 then aytkey= 'DashBoardView'; + when 59 then aytable = 'acustomernote'; aynamecolumn = 'notedate'; + when 60 then aytable = 'amemo'; + when 61 then aytable = 'areview'; + when 62 then aytable = 'aservicerate'; + when 63 then aytable = 'atravelrate'; + when 64 then aytable = 'ataxcode'; + when 65 then aytable = 'apartassembly'; + when 66 then aytable = 'apartwarehouse'; + when 67 then aytable = 'apartinventory'; aynamecolumn='description'; + when 68 then return format('DataListColumnView %L', ayobjectid); + when 71 then aytable = 'aworkorderstatus'; + when 72 then aytable = 'aTaskGroup'; + when 73 then aytkey= 'WorkOrderItemOutsideService'; + when 74 then aytable = 'aWorkOrderItemPriority'; + when 75 then aytable = 'aWorkOrderItemStatus'; + when 76 then aytkey= 'WorkOrderItemTravel'; + when 77 then aytkey= 'WorkOrderItemUnit'; + when 78 then aytable = 'aquotestatus'; + when 79 then aytkey= 'WorkOrderItemOutsideService'; + when 80 then aytkey= 'WorkOrderItemExpense'; + when 81 then aytkey= 'WorkOrderItemLabor'; + when 82 then aytkey= 'WorkOrderItemLoan'; + when 83 then aytkey= 'WorkOrderItemPart'; + when 84 then aytkey= 'WorkOrderItemPartRequest'; + when 85 then aytkey= 'WorkOrderItemScheduledUser'; + when 86 then aytkey= 'WorkOrderItemTask'; + when 87 then aytkey= 'WorkOrderItemTravel'; + when 88 then aytkey= 'WorkOrderItemUnit'; + when 89 then aytkey= 'WorkOrderItemOutsideService'; + else + RETURN returnstr; + end case; - IF aytkey='no' then - EXECUTE format('SELECT %I FROM %I WHERE id = %L', aynamecolumn, aytable, ayobjectid) INTO returnstr; - else - EXECUTE format('select display from atranslationitem where translationid=%L and key=%L', TRANSLATIONID, aytkey) INTO returnstr; - END if; - RETURN returnstr; -END; -$BODY$; + IF aytkey='no' then + EXECUTE format('SELECT %I FROM %I WHERE id = %L', aynamecolumn, aytable, ayobjectid) INTO returnstr; + else + EXECUTE format('select display from atranslationitem where translationid=%L and key=%L', TRANSLATIONID, aytkey) INTO returnstr; + END if; + RETURN returnstr; + END; + $BODY$; -ALTER FUNCTION PUBLIC.AYGETNAME(bigint, integer) OWNER TO POSTGRES; -*/ + ALTER FUNCTION PUBLIC.AYGETNAME(bigint, integer) OWNER TO POSTGRES; + */ //Name fetcher function //CoreBizObject ADD here @@ -986,9 +987,9 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); + "estimatedquantity DECIMAL(19,5) NOT NULL default 0" + ")"); //indexes to speed up scheduling queries - await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_userid ON aworkorderitemscheduleduser (userid)"); - await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_startdate ON aworkorderitemscheduleduser (startdate)"); - await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_stopdate ON aworkorderitemscheduleduser (stopdate)"); + await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_userid ON aworkorderitemscheduleduser (userid)"); + await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_startdate ON aworkorderitemscheduleduser (startdate)"); + await ExecQueryAsync("CREATE INDEX idx_aworkorderitemscheduleduser_stopdate ON aworkorderitemscheduleduser (stopdate)"); //WORKORDERITEM TASK @@ -1334,6 +1335,11 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //Global customer default workorder report default await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customerdefaultworkorderreportid BIGINT REFERENCES areport(id) "); + await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customertagworkorderreport1id BIGINT REFERENCES areport(id) "); + await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customertagworkorderreport2id BIGINT REFERENCES areport(id) "); + await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customertagworkorderreport3id BIGINT REFERENCES areport(id) "); + await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customertagworkorderreport4id BIGINT REFERENCES areport(id) "); + await ExecQueryAsync("ALTER TABLE aglobalbizsettings ADD column customertagworkorderreport5id BIGINT REFERENCES areport(id) "); //Load the stock REPORT TEMPLATES await AyaNova.Biz.PrimeData.PrimeReportTemplates();