Commit 111d85a1 by Elias Sarraf

wip - debug webapp startup issue - renamed projects and cleaned up code a bit

parent 684f7f10
emT3webServer/__history/
emT3webServer/bin/logs/
emT3webServer/Source/__history/
emT3webServer/Win32/Debug/
emT3webServer/bin/static/
emT3webClient/__history/
emT3webClient/css/__history/
emT3webClient/Win32/Debug/
*.local
*.identcache
emT3VCLDemo/__history/
emT3VCLDemo/Win64x/Debug/
emT3Web/__history/
emT3Web/config/__history/
emT3XDataServer/__history/
emT3XDataServer/Source/__history/
emT3XDataServer/Win32/
kgOrdersServer/bin/static/
*.exe
*.local
*.identcache
*.res
*.skincfg
*.tvsconfig
*.txt
[Paths]
HtmlPath=C:\Projects\emT3\emT3web\kgOrdersServer\bin\static
HtmlFile=index.html
DefaultURL=http://127.0.0.1:8000/emT3web
SingleInstance=0
Debug=0
DebugManager=C:\RADTools\TMS\Products\tms.webcore\Bin\Win32\TMSDBGManager.exe
URL=http://127.0.0.1:8000/$(ProjectName)
URLParams=?user_id=1019&task_id=4245&code=749358
Browser=1
BrowserBin=
BrowserParams=
Electron=0
ElectronBuild=0
JSDebugger=0
{
"AuthUrl" : "http://localhost:2004/emsys/emt3/auth/",
"ApiUrl" : "http://localhost:2004/emsys/emt3/api/"
"AuthUrl" : "http://localhost:2001/emsys/emt3/auth/",
"ApiUrl" : "http://localhost:2001/emsys/emt3/api/"
}
program emT3webClient;
program emT3web;
uses
Vcl.Forms,
......
......@@ -3,13 +3,13 @@
<ProjectGuid>{DB6F5DBF-7E4B-45DA-AFFA-6C8DF15BA740}</ProjectGuid>
<ProjectVersion>20.3</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>emT3webClient.dpr</MainSource>
<MainSource>emT3web.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
<ProjectName Condition="'$(ProjectName)'==''">emT3webClient</ProjectName>
<ProjectName Condition="'$(ProjectName)'==''">emT3web</ProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
......@@ -58,7 +58,7 @@
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
<SanitizedProjectName>emT3webClient</SanitizedProjectName>
<SanitizedProjectName>emT3web</SanitizedProjectName>
<VerInfo_Locale>1046</VerInfo_Locale>
<TMSWebProject>2</TMSWebProject>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.802;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;LastCompiledTime=2018/07/25 12:57:53</VerInfo_Keys>
......@@ -182,22 +182,22 @@
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">emT3webClient.dpr</Source>
<Source Name="MainSource">emT3web.dpr</Source>
</Source>
<Excluded_Packages/>
</Delphi.Personality>
<Deployment Version="5">
<DeployFile LocalName="Win32\Debug\emT3webClient.exe" Configuration="Debug" Class="ProjectOutput">
<DeployFile LocalName="Win32\Debug\emT3web.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>emT3webClient.exe</RemoteName>
<RemoteName>emT3web.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\webCharms.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Debug\webKGOrders.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Release\emT3webClient.exe" Configuration="Release" Class="ProjectOutput">
<DeployFile LocalName="Win32\Release\emT3web.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>emT3webClient.exe</RemoteName>
<RemoteName>emT3web.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
......
......@@ -6,10 +6,9 @@ object ApiDatabase: TApiDatabase
ProviderName = 'MySQL'
Database = 'eTask'
Username = 'root'
Server = '192.168.102.129'
Connected = True
Server = '192.168.116.132'
LoginPrompt = False
Left = 75
Left = 71
Top = 65
EncryptedPassword = '9AFF92FF8CFF86FF8CFFCFFFCEFF'
end
......@@ -123,13 +122,13 @@ object ApiDatabase: TApiDatabase
Value = nil
end>
end
object uqWebTasks: TUniQuery
object uqTaskItems: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'select'
' TASK_ITEM_ID,'
' TASK_ID,'
' PROJECT_ID,'
' ITEM_NUM,'
' APPLICATION,'
' APP_VERSION,'
' TASK_DATE,'
......@@ -141,10 +140,9 @@ object ApiDatabase: TApiDatabase
' FORM_SECTION,'
' ISSUE,'
' NOTES'
'from web_tasks'
'from task_items'
'where TASK_ID = :TASK_ID'
'order by TASK_ITEM_ID')
Active = True
'order by ITEM_NUM')
Left = 306
Top = 134
ParamData = <
......@@ -153,70 +151,69 @@ object ApiDatabase: TApiDatabase
Name = 'TASK_ID'
Value = nil
end>
object uqWebTasksTASK_ITEM_ID: TStringField
object uqTaskItemsTASK_ITEM_ID: TStringField
FieldName = 'TASK_ITEM_ID'
Required = True
Size = 7
end
object uqWebTasksTASK_ID: TStringField
object uqTaskItemsTASK_ID: TStringField
FieldName = 'TASK_ID'
Required = True
Size = 7
end
object uqWebTasksPROJECT_ID: TStringField
FieldName = 'PROJECT_ID'
object uqTaskItemsITEM_NUM: TShortintField
FieldName = 'ITEM_NUM'
Required = True
Size = 7
end
object uqWebTasksAPPLICATION: TStringField
object uqTaskItemsAPPLICATION: TStringField
FieldName = 'APPLICATION'
Required = True
Size = 255
end
object uqWebTasksAPP_VERSION: TStringField
object uqTaskItemsAPP_VERSION: TStringField
FieldName = 'APP_VERSION'
Required = True
Size = 50
end
object uqWebTasksTASK_DATE: TDateField
object uqTaskItemsTASK_DATE: TDateField
FieldName = 'TASK_DATE'
Required = True
end
object uqWebTasksSTATUS_DATE: TDateField
object uqTaskItemsSTATUS_DATE: TDateField
FieldName = 'STATUS_DATE'
Required = True
end
object uqWebTasksREPORTED_BY: TStringField
object uqTaskItemsREPORTED_BY: TStringField
FieldName = 'REPORTED_BY'
Required = True
Size = 50
end
object uqWebTasksASSIGNED_TO: TStringField
object uqTaskItemsASSIGNED_TO: TStringField
FieldName = 'ASSIGNED_TO'
Required = True
Size = 50
end
object uqWebTasksSTATUS: TStringField
object uqTaskItemsSTATUS: TStringField
FieldName = 'STATUS'
Required = True
Size = 100
end
object uqWebTasksFIXED_VERSION: TStringField
object uqTaskItemsFIXED_VERSION: TStringField
FieldName = 'FIXED_VERSION'
Required = True
Size = 50
end
object uqWebTasksFORM_SECTION: TStringField
object uqTaskItemsFORM_SECTION: TStringField
FieldName = 'FORM_SECTION'
Required = True
Size = 255
end
object uqWebTasksISSUE: TStringField
object uqTaskItemsISSUE: TStringField
FieldName = 'ISSUE'
Required = True
Size = 1000
end
object uqWebTasksNOTES: TStringField
object uqTaskItemsNOTES: TStringField
FieldName = 'NOTES'
Required = True
Size = 1000
......
......@@ -17,22 +17,22 @@ type
uqUsersSTATUS: TStringField;
uqUsersREPRESENTATIVE: TStringField;
uqSaveTaskRow: TUniQuery;
uqWebTasks: TUniQuery;
uqWebTasksTASK_ITEM_ID: TStringField;
uqWebTasksTASK_ID: TStringField;
uqWebTasksPROJECT_ID: TStringField;
uqWebTasksAPPLICATION: TStringField;
uqWebTasksAPP_VERSION: TStringField;
uqWebTasksTASK_DATE: TDateField;
uqWebTasksSTATUS_DATE: TDateField;
uqWebTasksREPORTED_BY: TStringField;
uqWebTasksASSIGNED_TO: TStringField;
uqWebTasksSTATUS: TStringField;
uqWebTasksFIXED_VERSION: TStringField;
uqWebTasksFORM_SECTION: TStringField;
uqWebTasksISSUE: TStringField;
uqWebTasksNOTES: TStringField;
uqTaskItems: TUniQuery;
uqEnsureBlankRow: TUniQuery;
uqTaskItemsTASK_ITEM_ID: TStringField;
uqTaskItemsTASK_ID: TStringField;
uqTaskItemsITEM_NUM: TShortintField;
uqTaskItemsAPPLICATION: TStringField;
uqTaskItemsAPP_VERSION: TStringField;
uqTaskItemsTASK_DATE: TDateField;
uqTaskItemsSTATUS_DATE: TDateField;
uqTaskItemsREPORTED_BY: TStringField;
uqTaskItemsASSIGNED_TO: TStringField;
uqTaskItemsSTATUS: TStringField;
uqTaskItemsFIXED_VERSION: TStringField;
uqTaskItemsFORM_SECTION: TStringField;
uqTaskItemsISSUE: TStringField;
uqTaskItemsNOTES: TStringField;
procedure DataModuleCreate(Sender: TObject);
procedure uqUsersCalcFields(DataSet: TDataSet);
private
......@@ -55,7 +55,7 @@ uses
procedure TApiDatabase.DataModuleCreate(Sender: TObject);
begin
Logger.Log( 5, 'TApiDatabase.DataModuleCreate' );
LoadDatabaseSettings( ucETaskApi, 'emT3webServer.ini' );
LoadDatabaseSettings( ucETaskApi, 'emT3XDataServer.ini' );
try
ucETaskApi.Connect;
except
......
......@@ -6,6 +6,7 @@ object ApiServerModule: TApiServerModule
Top = 30
end
object XDataServer: TXDataServer
BaseUrl = 'http://localhost:2001/emsys/emt3'
Dispatcher = SparkleHttpSysDispatcher
ModelName = 'Api'
EntitySetPermissions = <>
......
......@@ -19,7 +19,7 @@ type
public
taskItemId: string;
taskId: string;
projectId: string;
itemNum: integer;
application: string;
version: string;
......@@ -41,7 +41,6 @@ type
TTask = class
public
taskId: string;
projectId: string;
items: TList<TTaskItem>;
constructor Create;
destructor Destroy; override;
......@@ -59,7 +58,7 @@ type
public
taskItemId: string;
taskId: string;
projectId: string;
taskNum: integer;
application: string;
version: string;
taskDate: string;
......
......@@ -16,7 +16,7 @@ type
[ServiceImplementation]
TApiService = class(TInterfacedObject, IApiService)
strict private
ApiDB: TApiDatabase;
apiDB: TApiDatabase;
private
procedure EnsureBlankWebTaskRow(const taskId: string);
function SaveTaskRow(const Item: TTaskRowSave): Boolean;
......@@ -31,14 +31,14 @@ implementation
procedure TApiService.AfterConstruction;
begin
inherited;
ApiDB := TApiDatabase.Create(nil);
Logger.Log(4, 'ApiService.AfterConstruction - ApiDB created');
apiDB := TApiDatabase.Create(nil);
Logger.Log(4, 'ApiService.AfterConstruction - apiDB created');
end;
procedure TApiService.BeforeDestruction;
begin
Logger.Log(4, 'ApiService.BeforeDestruction - freeing ApiDB');
ApiDB.Free;
Logger.Log(4, 'ApiService.BeforeDestruction - freeing apiDB');
apiDB.Free;
inherited;
end;
......@@ -53,21 +53,21 @@ begin
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
try
ApiDB.uqWebTasks.Close;
ApiDB.uqWebTasks.ParamByName('TASK_ID').AsString := taskId;
ApiDB.uqWebTasks.Open;
apiDB.uqTaskItems.Close;
apiDB.uqTaskItems.ParamByName('TASK_ID').AsString := taskId;
apiDB.uqTaskItems.Open;
if ApiDB.uqWebTasks.IsEmpty then
if apiDB.uqTaskItems.IsEmpty then
begin
Logger.Log(4, Format('ApiService.GetTaskItems - no rows for TASK_ID="%s", ensuring blank row', [taskId]));
EnsureBlankWebTaskRow(taskId);
ApiDB.uqWebTasks.Close;
ApiDB.uqWebTasks.ParamByName('TASK_ID').AsString := taskId;
ApiDB.uqWebTasks.Open;
apiDB.uqTaskItems.Close;
apiDB.uqTaskItems.ParamByName('TASK_ID').AsString := taskId;
apiDB.uqTaskItems.Open;
end;
if ApiDB.uqWebTasks.IsEmpty then
if apiDB.uqTaskItems.IsEmpty then
begin
Logger.Log(2, Format('ApiService.GetTaskItems - still no rows after ensure blank for TASK_ID="%s"', [taskId]));
Result.count := 0;
......@@ -78,45 +78,44 @@ begin
TXDataOperationContext.Current.Handler.ManagedObjects.Add(task);
task.taskId := taskId;
task.projectId := ApiDB.uqWebTasksPROJECT_ID.AsString;
Result.data.Add(task);
while not ApiDB.uqWebTasks.Eof do
while not apiDB.uqTaskItems.Eof do
begin
item := TTaskItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(item);
item.taskItemId := ApiDB.uqWebTasksTASK_ITEM_ID.AsString;
item.taskId := ApiDB.uqWebTasksTASK_ID.AsString;
item.projectId := ApiDB.uqWebTasksPROJECT_ID.AsString;
item.taskItemId := apiDB.uqTaskItemsTASK_ITEM_ID.AsString;
item.taskId := apiDB.uqTaskItemsTASK_ID.AsString;
item.itemNum := apiDB.uqTaskItemsITEM_NUM.AsInteger;
item.application := ApiDB.uqWebTasksAPPLICATION.AsString;
item.version := ApiDB.uqWebTasksAPP_VERSION.AsString;
item.application := apiDB.uqTaskItemsAPPLICATION.AsString;
item.version := apiDB.uqTaskItemsAPP_VERSION.AsString;
if ApiDB.uqWebTasksTASK_DATE.IsNull then
if apiDB.uqTaskItemsTASK_DATE.IsNull then
item.taskDate := 0
else
item.taskDate := ApiDB.uqWebTasksTASK_DATE.AsDateTime;
item.taskDate := apiDB.uqTaskItemsTASK_DATE.AsDateTime;
item.reportedBy := ApiDB.uqWebTasksREPORTED_BY.AsString;
item.assignedTo := ApiDB.uqWebTasksASSIGNED_TO.AsString;
item.reportedBy := apiDB.uqTaskItemsREPORTED_BY.AsString;
item.assignedTo := apiDB.uqTaskItemsASSIGNED_TO.AsString;
item.status := ApiDB.uqWebTasksSTATUS.AsString;
item.status := apiDB.uqTaskItemsSTATUS.AsString;
if ApiDB.uqWebTasksSTATUS_DATE.IsNull then
if apiDB.uqTaskItemsSTATUS_DATE.IsNull then
item.statusDate := Null
else
item.statusDate := ApiDB.uqWebTasksSTATUS_DATE.AsDateTime;
item.statusDate := apiDB.uqTaskItemsSTATUS_DATE.AsDateTime;
item.fixedVersion := ApiDB.uqWebTasksFIXED_VERSION.AsString;
item.formSection := ApiDB.uqWebTasksFORM_SECTION.AsString;
item.issue := ApiDB.uqWebTasksISSUE.AsString;
item.notes := ApiDB.uqWebTasksNOTES.AsString;
item.fixedVersion := apiDB.uqTaskItemsFIXED_VERSION.AsString;
item.formSection := apiDB.uqTaskItemsFORM_SECTION.AsString;
item.issue := apiDB.uqTaskItemsISSUE.AsString;
item.notes := apiDB.uqTaskItemsNOTES.AsString;
task.items.Add(item);
ApiDB.uqWebTasks.Next;
apiDB.uqTaskItems.Next;
end;
Result.count := Result.data.Count;
......@@ -134,9 +133,9 @@ procedure TApiService.EnsureBlankWebTaskRow(const taskId: string);
begin
Logger.Log(4, Format('ApiService.EnsureBlankWebTaskRow - TASK_ID="%s"', [taskId]));
try
ApiDB.uqEnsureBlankRow.Close;
ApiDB.uqEnsureBlankRow.ParamByName('TASK_ID').AsString := taskId;
ApiDB.uqEnsureBlankRow.ExecSQL;
apiDB.uqEnsureBlankRow.Close;
apiDB.uqEnsureBlankRow.ParamByName('TASK_ID').AsString := taskId;
apiDB.uqEnsureBlankRow.ExecSQL;
except
on E: Exception do
begin
......@@ -161,34 +160,34 @@ begin
Logger.Log(4, Format('ApiService.SaveTaskRow - TASK_ITEM_ID="%s"', [Item.taskItemId]));
try
ApiDB.uqSaveTaskRow.Close;
apiDB.uqSaveTaskRow.Close;
ApiDB.uqSaveTaskRow.ParamByName('TASK_ITEM_ID').AsString := Item.taskItemId;
apiDB.uqSaveTaskRow.ParamByName('TASK_ITEM_ID').AsString := Item.taskItemId;
ApiDB.uqSaveTaskRow.ParamByName('APPLICATION').AsString := Item.application;
ApiDB.uqSaveTaskRow.ParamByName('APP_VERSION').AsString := Item.version;
apiDB.uqSaveTaskRow.ParamByName('APPLICATION').AsString := Item.application;
apiDB.uqSaveTaskRow.ParamByName('APP_VERSION').AsString := Item.version;
if ParseDateOrZero(Item.taskDate, d) then
ApiDB.uqSaveTaskRow.ParamByName('TASK_DATE').AsDateTime := d
apiDB.uqSaveTaskRow.ParamByName('TASK_DATE').AsDateTime := d
else
ApiDB.uqSaveTaskRow.ParamByName('TASK_DATE').Clear;
apiDB.uqSaveTaskRow.ParamByName('TASK_DATE').Clear;
ApiDB.uqSaveTaskRow.ParamByName('REPORTED_BY').AsString := Item.reportedBy;
ApiDB.uqSaveTaskRow.ParamByName('ASSIGNED_TO').AsString := Item.assignedTo;
apiDB.uqSaveTaskRow.ParamByName('REPORTED_BY').AsString := Item.reportedBy;
apiDB.uqSaveTaskRow.ParamByName('ASSIGNED_TO').AsString := Item.assignedTo;
ApiDB.uqSaveTaskRow.ParamByName('STATUS').AsString := Item.status;
apiDB.uqSaveTaskRow.ParamByName('STATUS').AsString := Item.status;
if ParseDateOrZero(Item.statusDate, d) then
ApiDB.uqSaveTaskRow.ParamByName('STATUS_DATE').AsDateTime := d
apiDB.uqSaveTaskRow.ParamByName('STATUS_DATE').AsDateTime := d
else
ApiDB.uqSaveTaskRow.ParamByName('STATUS_DATE').AsDateTime := Date;
apiDB.uqSaveTaskRow.ParamByName('STATUS_DATE').AsDateTime := Date;
ApiDB.uqSaveTaskRow.ParamByName('FIXED_VERSION').AsString := Item.fixedVersion;
ApiDB.uqSaveTaskRow.ParamByName('FORM_SECTION').AsString := Item.formSection;
ApiDB.uqSaveTaskRow.ParamByName('ISSUE').AsString := Item.issue;
ApiDB.uqSaveTaskRow.ParamByName('NOTES').AsString := Item.notes;
apiDB.uqSaveTaskRow.ParamByName('FIXED_VERSION').AsString := Item.fixedVersion;
apiDB.uqSaveTaskRow.ParamByName('FORM_SECTION').AsString := Item.formSection;
apiDB.uqSaveTaskRow.ParamByName('ISSUE').AsString := Item.issue;
apiDB.uqSaveTaskRow.ParamByName('NOTES').AsString := Item.notes;
ApiDB.uqSaveTaskRow.ExecSQL;
apiDB.uqSaveTaskRow.ExecSQL;
Result := True;
Logger.Log(4, 'ApiService.SaveTaskRow - OK');
......
......@@ -30,7 +30,6 @@ object AuthDatabase: TAuthDatabase
'order by w.URL_TIME desc'
'limit 1')
FetchRows = 100
Active = True
Left = 162
Top = 45
ParamData = <
......@@ -105,10 +104,9 @@ object AuthDatabase: TAuthDatabase
Database = 'eTask'
Username = 'root'
Server = '192.168.102.129'
Connected = True
LoginPrompt = False
Left = 67
Top = 131
Left = 69
Top = 133
EncryptedPassword = '9AFF92FF8CFF86FF8CFFCFFFCEFF'
end
object MySQLUniProvider1: TMySQLUniProvider
......
......@@ -51,7 +51,7 @@ uses
procedure TAuthDatabase.DataModuleCreate(Sender: TObject);
begin
Logger.Log( 5, 'TAuthDatabase.DataModuleCreate' );
LoadDatabaseSettings( ucETaskAuth, 'emT3WebServer.ini' );
LoadDatabaseSettings( ucETaskAuth, 'emT3XDataServer.ini' );
try
ucETaskAuth.Connect;
except
......
......@@ -6,6 +6,7 @@ object AuthServerModule: TAuthServerModule
Top = 16
end
object XDataServer: TXDataServer
BaseUrl = 'http://localhost:2001/emsys/emt3'
Dispatcher = SparkleHttpSysDispatcher
ModelName = 'Auth'
EntitySetPermissions = <>
......
......@@ -93,15 +93,15 @@ var
iniStr: string;
begin
Logger.Log( 1, '*******************************************************' );
Logger.Log( 1, '* emT3webServer *' );
Logger.Log( 1, '* emT3XDataServer *' );
Logger.Log(1, Format(' Version: %s ', [FMain.ExeInfo1.FileVersion]));
Logger.Log( 1, '* Developed by EM Systems, Inc. *' );
Logger.Log( 1, '*******************************************************' );
Logger.Log( 1, '' );
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3webServer.ini' );
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3XDataServer.ini' );
try
Logger.Log( 1, 'iniFile: ' + ExtractFilePath(Application.ExeName) + 'emT3webServer.ini' );
Logger.Log( 1, 'iniFile: ' + ExtractFilePath(Application.ExeName) + 'emT3XDataServer.ini' );
Logger.Log( 1, '' );
Logger.Log(1, '--- Settings ---');
......
......@@ -5,8 +5,8 @@ webClientVersion=0.0.1
LogFileNum=175
[Database]
--Server=192.168.116.138
Server=192.168.102.129
Server=192.168.116.128
--Server=192.168.102.129
--Server=192.168.75.133
--Server=192.168.159.10
Database=eTask
......
{
"url": "http://localhost:2004/emsys/emt3",
"url": "http://localhost:2001/emsys/emt3",
"jwtTokenSecret": "super_secret0123super_secret4567",
"adminPassword": "whatisthisusedfor",
"webAppFolder": "static",
......
program emT3webServer;
program emT3XDataServer;
uses
FastMM4,
......@@ -97,7 +97,7 @@ begin
if not DirectoryExists(logsDir) then
CreateDir(logsDir);
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3webServer.ini' );
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3XDataServer.ini' );
try
fileNum := iniFile.ReadInteger( 'Settings', 'LogFileNum', 0 );
FLogFile := logsDir + AFilename + Format( '%.4d', [fileNum] ) + '.log';
......@@ -160,7 +160,7 @@ begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TFMain, FMain);
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3webServer.ini' );
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'emT3XDataServer.ini' );
try
memoLogLevel := iniFile.ReadInteger( 'Settings', 'memoLogLevel', 3 );
fileLogLevel := iniFile.ReadInteger( 'Settings', 'memoLogLevel', 4 );
......
......@@ -8,8 +8,8 @@
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Application</AppType>
<MainSource>emT3webServer.dpr</MainSource>
<ProjectName Condition="'$(ProjectName)'==''">emT3webServer</ProjectName>
<MainSource>emT3XDataServer.dpr</MainSource>
<ProjectName Condition="'$(ProjectName)'==''">emT3XDataServer</ProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
......@@ -69,7 +69,7 @@
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
<SanitizedProjectName>emT3webServer</SanitizedProjectName>
<SanitizedProjectName>emT3XDataServer</SanitizedProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>gtFRExpD28;vclwinx;dacvcl280;FlexCel_Report;fmx;PKIEDB28;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;FireDACCommonODBC;aurelius;TMSCloudPkgDEDXE14;FireDACCommonDriver;sparkle;appanalytics;IndyProtocols;vclx;TatukGIS_DK11_RX11_VCL;FMXTMSFNCMapsPkgDXE14;IndyIPClient;dbxcds;vcledge;dac280;frxe28;bindcompvclwinx;gtScaleRichVwExpD28;VCLTMSFNCUIPackPkgDXE14;gtXPressExpD28;unidac280;gtPDFkitD11ProP;FlexCel_Pdf;bindcompfmx;AdvChartDEDXE14;madBasic_;VCLTMSFNCDashboardPackPkgDXE14;SKIA_FlexCel_Core;TMSVCLUIPackPkgDXE14;inetdb;TatukGIS_DK11_RX11_FMX;AcroPDF;TatukGIS_DK11_RX11;FireDACSqliteDriver;DbxClientDriver;soapmidas;vclCryptoPressStreamD28;vclactnband;gtRBExpD28;fmxFireDAC;dbexpress;DBXMySQLDriver;VclSmp;inet;unidacvcl280;dacfmx280;SigPlus;fcstudiowin;vcltouch;fmxase;VCLTMSFNCMapsPkgDXE14;ipstudiowin;TMSWEBCorePkgLibDXE14;frx28;dbrtl;QRWRunDXE11_w64;TMSWEBCorePkgDXE14;fmxdae;addict4_d28;FlexCel_XlsAdapter;gtAdvGridExpD28;FireDACMSAccDriver;VCL_FlexCel_Core;CustomIPTransport;tmsbcl;ipstudiowinwordxp;gtDocEngD28;gtRaveExpD28;FMXTMSFNCDashboardPackPkgDXE14;vcldsnap;madExcept_;DBXInterBaseDriver;frxDB28;IndySystem;ipstudiowinclient;VCLTMSFNCCorePkgDXE14;vcldb;CamRemoteD11;FMXTMSFNCUIPackPkgDXE14;TMSCloudPkgDXE14;gtQRExpD28;VirtualTreesR;WPViewPDF_RT;FlexCel_Core;vclFireDAC;vquery280;madDisAsm_;bindcomp;FireDACCommon;FlexCel_Render;unidacfmx280;FMXTMSFNCCorePkgDXE14;IndyCore;RESTBackendComponents;gtACEExpD28;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;VCL_FlexCel_Components;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;adortl;TMSVCLUIPackPkgExDXE14;WPViewPDF_DT;TMSVCLUIPackPkgWizDXE14;gtHtmVwExpD28;AdvChartDXE14;gtRichVwExpD28;vclimg;FireDACPgDriver;FireDAC;inetdbxpress;TMSVCLUIPackPkgXlsDXE14;xmlrtl;tethering;PKIECtrl28;crcontrols280;bindcompvcl;dsnap;xdata;CloudService;fmxobj;bindcompvclsmp;addict4db_d28;CEF4Delphi;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)</DCC_UsePackage>
......@@ -198,7 +198,7 @@
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">emT3webServer.dpr</Source>
<Source Name="MainSource">emT3XDataServer.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k290.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
......@@ -208,9 +208,9 @@
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="5">
<DeployFile LocalName="bin\emT3webServer.exe" Configuration="Debug" Class="ProjectOutput">
<DeployFile LocalName="bin\emT3XDataServer.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>emT3webServer.exe</RemoteName>
<RemoteName>emT3XDataServer.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
......
<nav class="navbar navbar-light bg-light login-navbar">
<div class="container-fluid">
<a class="navbar-brand" href="#">Koehler-Gibson Orders</a>
</div>
</nav>
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-auto">
<img id="kgpicture" style="width: 250px; height: 250px;">
</div>
<div class="col-md-6 col-lg-4">
<div class="card login-card">
<div class="card-header">
<h3 id="view.login.title" class="fs-6 card-title">Please Sign In</h3>
</div>
<div class="card-body">
<div role="form">
<div id="view.login.message" class="alert alert-danger">
<button id="view.login.message.button" type="button" class="btn-close" aria-label="Close"></button>
<span id="view.login.message.label"></span>
</div>
<fieldset>
<div class="mb-3">
<input id="view.login.edtusername" class="form-control" type="text" autofocus placeholder="Username">
</div>
<div class="mb-3">
<input id="view.login.edtpassword" class="form-control" type="password" placeholder="Password">
</div>
<div class="mb-3">
<button id="view.login.btnlogin" class="btn btn-primary w-100">Login</button>
</div>
<div class="text-end text-muted small mt-1">
<span id="lbl_client_version"></span>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="wrapper" class="d-flex flex-column vh-100">
<nav class="navbar navbar-expand navbar-light bg-light" style="margin-bottom: 0px">
<div class="container-fluid">
<div class="d-flex align-items-center">
<a id="view.main.apptitle" class="navbar-brand" href="index.html">emT3web</a>
<span id="view.main.version" class="small text-muted ms-2"></span>
</div>
<div class="collapse navbar-collapse show" id="navbarNavDropdown">
<ul class="navbar-nav ms-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fa fa-user fa-fw"></i><span class="panel-title" id="view.main.username">Username</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuLink">
<li>
<a class="dropdown-item" id="dropdown.menu.logout" href="#">
<i class="fa fa-sign-out fa-fw"></i><span> Logout</span>
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!-- Toast wrapper directly under navbar -->
<div id="toast-wrapper" class="position-fixed top-0 start-0 mt-5 ms-4" style="z-index: 1080; min-width: 300px; max-width: 500px">
<div id="bootstrapToast" class="toast align-items-center text-white bg-success border-0 shadow" role="alert" aria-live="assertive" aria-atomic="true">
<div class="d-flex">
<div class="toast-body" id="bootstrapToastBody">Success message</div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>
</div>
<div class="container-fluid d-flex flex-column flex-grow-1" style="min-height: 0">
<div id="main.webpanel" class="flex-grow-1 d-flex flex-column" style="min-height: 0"></div>
</div>
</div>
<div id="spinner" class="position-absolute top-50 start-50 translate-middle d-none">
<div class="lds-roller">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="modal fade" id="main_errormodal" tabindex="-1" aria-labelledby="main_lblmodal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow-lg">
<div class="modal-header">
<h5 class="modal-title" id="main_lblmodal">Error</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body fs-6 fw-bold" id="main_lblmodal_body">
Please contact EMSystems to solve the issue.
</div>
<div class="modal-footer justify-content-center">
<button type="button" id="btn_modal_restart" class="btn btn-primary">
Restart
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="main_confirmation_modal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow-lg">
<div class="modal-header">
<h5 class="modal-title">Confirm</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body fw-bold" id="main_modal_body">Placeholder text</div>
<div class="modal-footer justify-content-center">
<button type="button" class="btn btn-primary me-3" id="btn_confirm_left">
Cancel
</button>
<button type="button" class="btn btn-secondary" id="btn_confirm_right">
Confirm
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="main_notification_modal" tabindex="-1" aria-labelledby="main_lblmodal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow-lg">
<div class="modal-header">
<h5 class="modal-title" id="main_notification_modal">Error</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body fs-6 fw-bold" id="main_notification_modal_body">Please contact EMSystems to solve the issue.</div>
<div class="modal-footer justify-content-center">
<button type="button" id="btn_modal_close" class="btn btn-primary">
Close
</button>
</div>
</div>
</div>
</div>
<div id="pnl_grid" class="h-100"></div>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="64px" height="64px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
<g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.29289 5.29289C5.68342 4.90237 6.31658 4.90237 6.70711 5.29289L12 10.5858L17.2929 5.29289C17.6834 4.90237 18.3166 4.90237 18.7071 5.29289C19.0976 5.68342 19.0976 6.31658 18.7071 6.70711L13.4142 12L18.7071 17.2929C19.0976 17.6834 19.0976 18.3166 18.7071 18.7071C18.3166 19.0976 17.6834 19.0976 17.2929 18.7071L12 13.4142L6.70711 18.7071C6.31658 19.0976 5.68342 19.0976 5.29289 18.7071C4.90237 18.3166 4.90237 17.6834 5.29289 17.2929L10.5858 12L5.29289 6.70711C4.90237 6.31658 4.90237 5.68342 5.29289 5.29289Z" fill="#0F1729"/> </g>
</svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32
32"><defs><style>.cls-1{fill:#00000;}</style></defs><title>Plus</title> <g
id="Icon"><rect class="cls-1" x="7" y="15" width="18" height="1"/><rect class="cls-1" x="1"
y="1" width="1" height="30"/><rect class="cls-1" x="1" y="1" width="30"
height="1"/><rect class="cls-1" x="30" y="1" width="1" height="30"/><rect
class="cls-1" x="1" y="30" width="30" height="1"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32
32"><defs><style>.cls-1{fill:#00000;}</style></defs><title>Plus</title> <g
id="Icon"><rect class="cls-1" x="7" y="15" width="18" height="1"/><rect
class="cls-1" x="15" y="7" width="1" height="18"/><rect class="cls-1" x="1"
y="1" width="1" height="30"/><rect class="cls-1" x="1" y="1" width="30"
height="1"/><rect class="cls-1" x="30" y="1" width="1" height="30"/><rect
class="cls-1" x="1" y="30" width="30" height="1"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#4682B4;}.cls-3{fill:url(#New_Pattern_Swatch_2);}.cls-4{fill:#3a3a38;}</style><pattern id="New_Pattern_Swatch_2" data-name="New Pattern Swatch 2" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Filter</title><g id="Icon"><polygon class="cls-3" points="1.5 6 12.5 15 12.5 30.5 18.5 30.5 18.5 15 29.5 6 29.5 1.5 1.5 1.5 1.5 6"/><path class="cls-4" d="M19,31H12V15.24l-11-9V1H30V6.24l-11,9Zm-6-1h5V14.76l11-9V2H2V5.76l11,9Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#a74ab0;}.cls-3{fill:#d394d6;}.cls-4{fill:#fafafa;}.cls-5{fill:url(#New_Pattern_Swatch_8);}.cls-6{fill:url(#New_Pattern_Swatch_7);}</style><pattern id="New_Pattern_Swatch_8" data-name="New Pattern Swatch 8" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-3" width="68" height="68"/></pattern><pattern id="New_Pattern_Swatch_7" data-name="New Pattern Swatch 7" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Clear</title><g id="Icon"><rect class="cls-4" x="1.86" y="10.34" width="28.28" height="11.31" transform="translate(-6.63 16) rotate(-45)"/><polygon class="cls-5" points="2.71 22 10 29.29 15.79 23.5 8.5 16.21 2.71 22"/><path class="cls-6" d="M10.71,30l20-20L22,1.29,1.29,22,10,30.71V31H31V30ZM22,2.71,29.29,10,16.5,22.79,9.21,15.5ZM2.71,22,8.5,16.21l7.29,7.29L10,29.29Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#fafafa;}.cls-3{fill:url(#New_Pattern_Swatch_2);}.cls-4{fill:#3a3a38;}</style><pattern id="New_Pattern_Swatch_2" data-name="New Pattern Swatch 2" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Filter</title><g id="Icon"><polygon class="cls-3" points="1.5 6 12.5 15 12.5 30.5 18.5 30.5 18.5 15 29.5 6 29.5 1.5 1.5 1.5 1.5 6"/><path class="cls-4" d="M19,31H12V15.24l-11-9V1H30V6.24l-11,9Zm-6-1h5V14.76l11-9V2H2V5.76l11,9Z"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#797774;}.cls-3{fill:#fafafa;}.cls-4{fill:#3a3a38;}.cls-5{fill:url(#New_Pattern_Swatch_4);}</style><pattern id="New_Pattern_Swatch_4" data-name="New Pattern Swatch 4" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Text-Filter</title><g id="Mask"><polygon class="cls-3" points="25.5 9 19 2.5 19 9 25.5 9"/><path class="cls-3" d="M18,10V2H6V30H21V26.18L19.84,25H8V24H18.85l-2-2H8V21h8V19H8V18h8V16H8V15H24v1h2V10ZM8,9h8v1H8Zm0,4V12H24v1Z"/><polygon class="cls-4" points="5 1 5 31 6 31 21 31 21 30 6 30 6 2 18 2 18.5 2 19 2 19 2.5 25.5 9 26 9 26 9.5 26 10 26 16 27 16 27 9.7 27 9 19 1 5 1"/><polygon class="cls-4" points="26 10 26 9.5 26 9 25.5 9 19 9 19 2.5 19 2 18.5 2 18 2 18 10 26 10"/><rect class="cls-3" x="8" y="9" width="8" height="1"/><rect class="cls-5" x="8" y="9" width="8" height="1"/><rect class="cls-3" x="8" y="12" width="16" height="1"/><rect class="cls-5" x="8" y="12" width="16" height="1"/><polygon class="cls-3" points="8 15 8 16 16 16 24 16 24 15 8 15"/><polygon class="cls-5" points="8 15 8 16 16 16 24 16 24 15 8 15"/><rect class="cls-3" x="8" y="18" width="8" height="1"/><rect class="cls-5" x="8" y="18" width="8" height="1"/><polygon class="cls-3" points="8 22 16.87 22 16 21.12 16 21 8 21 8 22"/><polygon class="cls-5" points="8 22 16.87 22 16 21.12 16 21 8 21 8 22"/><polygon class="cls-3" points="8 25 19.84 25 18.85 24 8 24 8 25"/><polygon class="cls-5" points="8 25 19.84 25 18.85 24 8 24 8 25"/></g><g id="Overlay"><polygon class="cls-3" points="31.5 17.5 17.5 17.5 17.5 20.5 22.5 25.56 22.5 31.5 26.5 31.5 26.5 25.56 31.5 20.5 31.5 17.5"/><path class="cls-4" d="M27,32H22V25.77l-5-5.06V17H32v3.71l-5,5.06Zm-4-1h3V25.36l5-5.07V18H18v2.29l5,5.07Z"/></g></svg>
\ No newline at end of file
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Слой_1" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Double_Chevron_Left"><path d="M10.456,16l6.196-6.285c0.391-0.394,0.391-1.034,0-1.428c-0.391-0.394-1.024-0.394-1.414,0l-6.899,6.999 c-0.375,0.379-0.377,1.048,0,1.429l6.9,6.999c0.39,0.394,1.024,0.394,1.414,0c0.391-0.394,0.391-1.034,0-1.428L10.456,16z" fill="#121313"/><path d="M17.456,16l6.196-6.285c0.391-0.394,0.391-1.034,0-1.428c-0.391-0.394-1.024-0.394-1.414,0l-6.899,6.999 c-0.375,0.379-0.377,1.048,0,1.429l6.899,6.999c0.391,0.394,1.024,0.394,1.414,0c0.391-0.394,0.391-1.034,0-1.428L17.456,16z" fill="#121313"/></g><g/><g/><g/><g/><g/><g/></svg>
\ No newline at end of file
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Слой_1" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Double_Chevron_Right"><path d="M23.662,15.286l-6.9-6.999c-0.39-0.394-1.024-0.394-1.414,0c-0.391,0.394-0.391,1.034,0,1.428L21.544,16 l-6.196,6.285c-0.391,0.394-0.391,1.034,0,1.428c0.391,0.394,1.024,0.394,1.414,0l6.899-6.999 C24.038,16.335,24.039,15.666,23.662,15.286z" fill="#121313"/><path d="M16.662,15.286L9.763,8.287c-0.391-0.394-1.024-0.394-1.414,0c-0.391,0.394-0.391,1.034,0,1.428L14.544,16 l-6.196,6.285c-0.391,0.394-0.391,1.034,0,1.428c0.391,0.394,1.024,0.394,1.414,0l6.899-6.999 C17.038,16.335,17.039,15.666,16.662,15.286z" fill="#121313"/></g><g/><g/><g/><g/><g/><g/></svg>
\ No newline at end of file
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Слой_1" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path clip-rule="evenodd" d="M21.698,15.286l-9.002-8.999 c-0.395-0.394-1.035-0.394-1.431,0c-0.395,0.394-0.395,1.034,0,1.428L19.553,16l-8.287,8.285c-0.395,0.394-0.395,1.034,0,1.429 c0.395,0.394,1.036,0.394,1.431,0l9.002-8.999C22.088,16.325,22.088,15.675,21.698,15.286z" fill="#121313" fill-rule="evenodd" id="Chevron_Right"/><g/><g/><g/><g/><g/><g/></svg>
\ No newline at end of file
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Слой_1" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path clip-rule="evenodd" d="M11.262,16.714l9.002,8.999 c0.395,0.394,1.035,0.394,1.431,0c0.395-0.394,0.395-1.034,0-1.428L13.407,16l8.287-8.285c0.395-0.394,0.395-1.034,0-1.429 c-0.395-0.394-1.036-0.394-1.431,0l-9.002,8.999C10.872,15.675,10.872,16.325,11.262,16.714z" fill="#121313" fill-rule="evenodd" id="Chevron_Right"/><g/><g/><g/><g/><g/><g/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#a74ab0;}.cls-3{fill:url(#New_Pattern_Swatch_7);}.cls-4{fill:#1e8bcd;}.cls-5{fill:#3a3a38;}</style><pattern id="New_Pattern_Swatch_7" data-name="New Pattern Swatch 7" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Sort-AZ</title><g id="Icon"><path class="cls-3" d="M2,29.64l7-10V20H3V18h9v1.44L5,29.36V29h7v2H2Z"/><path class="cls-4" d="M5.7,11,4.52,15H1.93L6.33,1H9.54L14,15h-2.7l-1.24-4ZM9.64,9.11,8.56,5.66c-.27-.85-.49-1.8-.69-2.61h0c-.2.81-.4,1.78-.65,2.61L6.11,9.11Z"/><polygon class="cls-5" points="23 25.12 23 6 22 6 22 25.12 16.44 19.56 15.56 20.44 22.5 27.38 29.44 20.44 28.56 19.56 23 25.12"/></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;}.cls-2{fill:#a74ab0;}.cls-3{fill:url(#New_Pattern_Swatch_7);}.cls-4{fill:#1e8bcd;}.cls-5{fill:#3a3a38;}</style><pattern id="New_Pattern_Swatch_7" data-name="New Pattern Swatch 7" width="68" height="68" patternUnits="userSpaceOnUse" viewBox="0 0 68 68"><rect class="cls-1" width="68" height="68"/><rect class="cls-2" width="68" height="68"/></pattern></defs><title>Sort-ZA</title><g id="Icon"><path class="cls-3" d="M2,12.64l7-10V3H3V1h9V2.44L5,12.36V12h7v2H2Z"/><path class="cls-4" d="M5.7,27,4.52,31H1.93l4.4-14H9.54L14,31h-2.7l-1.24-4Zm3.94-1.93L8.56,21.66c-.27-.85-.49-1.8-.69-2.61h0c-.2.81-.4,1.78-.65,2.61L6.11,25.11Z"/><polygon class="cls-5" points="23 25.12 23 6 22 6 22 25.12 16.44 19.56 15.56 20.44 22.5 27.38 29.44 20.44 28.56 19.56 23 25.12"/></g></svg>
\ No newline at end of file
<div class="container h-100 d-flex flex-column mt-0 py-0" style="max-width: 100%;">
<div class="d-flex align-items-center justify-content-between mb-2 flex-shrink-0">
<h5 class="mb-0" id="lbl_project_name"></h5>
<div class="d-flex gap-2">
<button id="btn_add_row" class="btn btn-sm btn-outline-success">Add Row</button>
<button id="btn_reload" class="btn btn-sm btn-outline-primary">Reload</button>
</div>
</div>
<div id="db_grid_tasks" class="flex-grow-1" style="min-height:0;"></div>
</div>
<div class="container-fluid p-2 d-flex flex-column h-100">
<div class="d-flex align-items-center justify-content-between mb-2 flex-shrink-0">
<h5 class="mb-0" id="lbl_project_name"></h5>
<div class="d-flex gap-2">
<button id="btn_add_row" class="btn btn-sm btn-outline-success">Add Row</button>
<button id="btn_reload" class="btn btn-sm btn-outline-primary">Reload</button>
</div>
</div>
<div id="data_grid_tasks" class="flex-grow-1 min-vh-0"></div>
</div>
<div class="container-fluid p-2 d-flex flex-column h-100">
<div class="d-flex align-items-center justify-content-between mb-2 flex-shrink-0">
<h5 class="mb-0" id="lbl_project_name"></h5>
<div class="d-flex gap-2">
<button id="btn_add_row" class="btn btn-sm btn-outline-success">Add Row</button>
<button id="btn_reload" class="btn btn-sm btn-outline-primary">Reload</button>
</div>
</div>
<div id="tasks_table_host" class="flex-grow-1 min-vh-0"></div>
</div>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>TMS Web Project</title>
<style>
</style>
</head>
<body>
</body>
</html>
\ No newline at end of file
{
"AuthUrl" : "http://localhost:2001/emsys/emt3/auth/",
"ApiUrl" : "http://localhost:2001/emsys/emt3/api/"
}
/* Note: Base layout */
html, body{
height:100%;
margin:0;
}
#wrapper{
height:100vh;
display:flex;
flex-direction:column;
min-height:0;
}
/* Note: Embedded forms must be allowed to shrink inside flex containers */
#main\.webpanel{
min-height:0;
flex:1 1 auto;
display:flex;
flex-direction:column;
}
#main\.webpanel > *{
min-height:0;
}
/* Note: Primary button color */
.btn-primary{
background-color:#286090 !important;
border-color:#286090 !important;
color:#fff !important;
}
.btn-primary:hover{
background-color:#204d74 !important;
border-color:#204d74 !important;
}
/* Note: Navbar tweaks */
#view\.main\.apptitle{
display:flex;
align-items:center;
}
.navbar-nav .nav-link.active{
color:#fff !important;
background-color:#004F84 !important;
font-weight:700;
}
.navbar-nav .nav-link:hover{
color:#fff !important;
background-color:#286090 !important;
}
.navbar-toggler{
display:none;
}
/* Note: Dropdown menu items */
.dropdown-menu a{
display:flex;
align-items:center;
width:100%;
padding:.5rem 1rem;
color:#000;
text-decoration:none;
}
.dropdown-menu a:hover{
background-color:#204d74;
color:#fff;
}
.dropdown-menu a span{
flex-grow:1;
}
/* Note: Login card (used on login view) */
.login-card{
display:inline-block;
width:300px;
padding:0;
border-radius:10px;
box-shadow:0 4px 8px rgba(0,0,0,.1);
background-color:#fff;
}
/* Note: Validation helpers */
.is-invalid .form-check-input{
border:1px solid #dc3545 !important;
}
.is-invalid .form-check-label{
color:#dc3545 !important;
}
/* Note: Toast animation */
@keyframes slideInLeft{
from{transform:translateX(-120%);opacity:0;}
to{transform:translateX(0);opacity:1;}
}
.toast.slide-in{
animation:slideInLeft .4s ease-out forwards;
}
/* Note: Spinner overlay */
#spinner{
position:fixed !important;
z-index:9999 !important;
top:50%;
left:50%;
transform:translate(-50%,-50%);
}
/* Note: TasksHTML (table experiment) */
#tasks_table_host{
height:100%;
min-height:0;
}
#tasks_table_host .tasks-vscroll{
height:100%;
overflow-y:auto;
overflow-x:hidden;
}
#tasks_table_host .tasks-hscroll{
overflow-x:auto;
}
#tasks_table_host .tasks-hscroll table{
width:max-content;
min-width:100%;
table-layout:fixed;
}
#tasks_table_host thead th{
position:sticky;
top:0;
z-index:2;
background:var(--bs-body-bg);
}
#tasks_table_host td,
#tasks_table_host th{
padding:.25rem;
}
#tasks_table_host .nowrap-cell{white-space:nowrap;}
#tasks_table_host .wrap-cell{white-space:normal;word-break:break-word;}
#tasks_table_host .cell-input,
#tasks_table_host .cell-textarea{
border:0;
background:transparent;
border-radius:0;
padding:0;
margin:0;
box-shadow:none;
}
#tasks_table_host .cell-input:focus,
#tasks_table_host .cell-textarea:focus{
outline:0;
box-shadow:inset 0 -2px 0 var(--bs-primary);
}
#tasks_table_host .cell-textarea{
resize:none;
overflow:hidden;
white-space:pre-wrap;
}
/* Note: TasksDataGrid (TWebDataGrid experiment) */
#data_grid_tasks{
height:100%;
min-height:0;
}
#data_grid_tasks .ag-cell{
line-height:1.25;
padding-top:4px;
padding-bottom:4px;
}
#data_grid_tasks .ag-cell-inline-editing textarea{
line-height:1.25;
padding:4px 6px;
resize:none;
height:100%;
box-sizing:border-box;
}
.lds-roller {
display: inline-block;
position: relative;
width: 80px;
height: 80px;
}
.lds-roller div {
animation: lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
transform-origin: 40px 40px;
}
.lds-roller div:after {
content: " ";
display: block;
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
background: #204d74;
margin: -5px 0 0 -5px;
}
.lds-roller div:nth-child(1) {
animation-delay: -0.036s;
}
.lds-roller div:nth-child(1):after {
top: 63px;
left: 63px;
}
.lds-roller div:nth-child(2) {
animation-delay: -0.072s;
}
.lds-roller div:nth-child(2):after {
top: 68px;
left: 56px;
}
.lds-roller div:nth-child(3) {
animation-delay: -0.108s;
}
.lds-roller div:nth-child(3):after {
top: 71px;
left: 48px;
}
.lds-roller div:nth-child(4) {
animation-delay: -0.144s;
}
.lds-roller div:nth-child(4):after {
top: 72px;
left: 40px;
}
.lds-roller div:nth-child(5) {
animation-delay: -0.18s;
}
.lds-roller div:nth-child(5):after {
top: 71px;
left: 32px;
}
.lds-roller div:nth-child(6) {
animation-delay: -0.216s;
}
.lds-roller div:nth-child(6):after {
top: 68px;
left: 24px;
}
.lds-roller div:nth-child(7) {
animation-delay: -0.252s;
}
.lds-roller div:nth-child(7):after {
top: 63px;
left: 17px;
}
.lds-roller div:nth-child(8) {
animation-delay: -0.288s;
}
.lds-roller div:nth-child(8):after {
top: 56px;
left: 12px;
}
@keyframes lds-roller {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<noscript>Your browser does not support JavaScript!</noscript>
<link href="data:;base64,=" rel="icon"/>
<title>Em Systems - emT3 Web</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/css/flag-icon.min.css" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css" rel="stylesheet"/>
<link href="css/app.css" rel="stylesheet" type="text/css"/>
<link href="css/spinner.css" rel="stylesheet" type="text/css"/>
<script crossorigin="anonymous" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
<link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="emT3web.js" type="text/javascript"></script>
</head>
<body>
</body>
<script type="text/javascript">rtl.run();</script>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment