Commit 8a2f5e16 by Mac Stephens

Refactor emT3 reported/assigned dropdown flow and server-backed assigned-name management.

Simplify name manager and update date handling for nullable fields.
parent 9cdecee0
......@@ -20,7 +20,7 @@ type
FUnauthorizedAccessProc: TUnauthorizedAccessProc;
public
const clientVersion = '0.8.5';
const clientVersion = '0.8.6';
procedure InitApp(SuccessProc: TSuccessProc;
UnauthorizedAccessProc: TUnauthorizedAccessProc);
procedure SetClientConfig(Callback: TVersionCheckCallback);
......
......@@ -72,5 +72,19 @@ span.card {
border: none;
}
.th-resize {
position: relative;
}
.th-resize-handle {
position: absolute;
top: 0;
right: 0;
width: 8px;
height: 100%;
cursor: col-resize;
user-select: none;
}
......@@ -94,13 +94,13 @@
<DCC_RemoteDebug>false</DCC_RemoteDebug>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=0.8.5.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.9.8.0;Comments=;LastCompiledTime=2018/08/27 15:18:29</VerInfo_Keys>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=0.8.6.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.9.8.0;Comments=;LastCompiledTime=2018/08/27 15:18:29</VerInfo_Keys>
<AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_MinorVer>8</VerInfo_MinorVer>
<VerInfo_Release>5</VerInfo_Release>
<TMSWebBrowser>1</TMSWebBrowser>
<VerInfo_Release>6</VerInfo_Release>
<TMSUseJSDebugger>2</TMSUseJSDebugger>
<TMSWebBrowser>1</TMSWebBrowser>
<TMSWebSingleInstance>1</TMSWebSingleInstance>
<TMSWebOutputPath>..\emT3XDataServer\bin\static</TMSWebOutputPath>
</PropertyGroup>
......
object ApiDatabase: TApiDatabase
OnCreate = DataModuleCreate
Height = 358
Width = 519
Height = 453
Width = 641
object ucETaskApi: TUniConnection
AutoCommit = False
ProviderName = 'MySQL'
Database = 'eTask'
LoginPrompt = False
Left = 51
Top = 67
Left = 255
Top = 379
end
object MySQLUniProvider1: TMySQLUniProvider
Left = 56
Top = 14
Left = 354
Top = 378
end
object uqUsers: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'SELECT USER_ID, NAME, STATUS from users ORDER BY NAME')
OnCalcFields = uqUsersCalcFields
Left = 408
Top = 20
Left = 538
Top = 24
object uqUsersUSER_ID: TIntegerField
FieldName = 'USER_ID'
Required = True
......@@ -56,8 +56,8 @@ object ApiDatabase: TApiDatabase
' ISSUE = :ISSUE,'
' NOTES = :NOTES'
'WHERE TASK_ITEM_ID = :TASK_ITEM_ID')
Left = 408
Top = 242
Left = 538
Top = 232
ParamData = <
item
DataType = ftUnknown
......@@ -141,8 +141,8 @@ object ApiDatabase: TApiDatabase
'from task_items'
'where TASK_ID = :TASK_ID'
'order by ITEM_NUM')
Left = 62
Top = 138
Left = 56
Top = 26
ParamData = <
item
DataType = ftUnknown
......@@ -248,8 +248,8 @@ object ApiDatabase: TApiDatabase
' '#39#39','
' '#39#39
')')
Left = 412
Top = 300
Left = 536
Top = 282
ParamData = <
item
DataType = ftUnknown
......@@ -281,8 +281,8 @@ object ApiDatabase: TApiDatabase
'left join project p'
' on p.PROJECT_ID = t.PROJECT_ID'
'where t.TASK_ID = :TASK_ID')
Left = 60
Top = 242
Left = 54
Top = 82
ParamData = <
item
DataType = ftUnknown
......@@ -330,46 +330,6 @@ object ApiDatabase: TApiDatabase
Size = 30
end
end
object uqTaskItemUsers: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'select'
' TASK_ITEM_USER_ID,'
' TASK_ID,'
' USER_TYPE,'
' NAME'
'from task_item_user'
'where TASK_ID = :TASK_ID'
'order by USER_TYPE, NAME')
Left = 62
Top = 188
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end>
object uqTaskItemUsersTASK_ITEM_USER_ID: TStringField
FieldName = 'TASK_ITEM_USER_ID'
Required = True
Size = 50
end
object uqTaskItemUsersTASK_ID: TStringField
FieldName = 'TASK_ID'
Required = True
Size = 7
end
object uqTaskItemUsersUSER_TYPE: TStringField
FieldName = 'USER_TYPE'
Required = True
Size = 8
end
object uqTaskItemUsersNAME: TStringField
FieldName = 'NAME'
Required = True
Size = 50
end
end
object uqTaskItemCodes: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
......@@ -381,7 +341,7 @@ object ApiDatabase: TApiDatabase
'WHERE CODE_TYPE = '#39'STATUS'#39
'ORDER BY CODE')
Left = 60
Top = 296
Top = 140
object uqTaskItemCodesCODE: TStringField
FieldName = 'CODE'
Required = True
......@@ -521,7 +481,7 @@ object ApiDatabase: TApiDatabase
'where TASK_ITEM_ID = :TASK_ITEM_ID'
' and TASK_ID = :TASK_ID')
Left = 234
Top = 232
Top = 242
ParamData = <
item
DataType = ftUnknown
......@@ -546,8 +506,8 @@ object ApiDatabase: TApiDatabase
' coalesce(max(ITEM_NUM), 0) as MAX_ITEM_NUM'
'from task_items'
'where TASK_ID = :TASK_ID')
Left = 236
Top = 290
Left = 234
Top = 296
ParamData = <
item
DataType = ftUnknown
......@@ -561,8 +521,8 @@ object ApiDatabase: TApiDatabase
'delete from task_items'
'where TASK_ITEM_ID = :TASK_ITEM_ID'
' and TASK_ID = :TASK_ID')
Left = 408
Top = 182
Left = 536
Top = 180
ParamData = <
item
DataType = ftUnknown
......@@ -582,8 +542,8 @@ object ApiDatabase: TApiDatabase
'set ITEM_NUM = ITEM_NUM - 1'
'where TASK_ID = :TASK_ID'
' and ITEM_NUM > :OLD_ITEM_NUM')
Left = 408
Top = 130
Left = 536
Top = 126
ParamData = <
item
DataType = ftUnknown
......@@ -603,8 +563,8 @@ object ApiDatabase: TApiDatabase
'set ITEM_NUM = ITEM_NUM + 1'
'where TASK_ID = :TASK_ID'
' and ITEM_NUM > :INSERT_AFTER_ITEM_NUM')
Left = 408
Top = 80
Left = 538
Top = 76
ParamData = <
item
DataType = ftUnknown
......@@ -617,4 +577,202 @@ object ApiDatabase: TApiDatabase
Value = nil
end>
end
object uqProjectReportedUsers: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'select distinct'
' tiu.NAME'
'from task_item_user tiu'
'join tasks project_tasks'
' on project_tasks.TASK_ID = tiu.TASK_ID'
'join tasks target_task'
' on target_task.PROJECT_ID = project_tasks.PROJECT_ID'
'where target_task.TASK_ID = :TASK_ID'
' and tiu.USER_TYPE = '#39'Reported'#39
'order by tiu.NAME')
Left = 58
Top = 256
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end>
object uqProjectReportedUsersNAME: TStringField
FieldName = 'NAME'
Required = True
Size = 50
end
end
object uqTaskAssignedUsers: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'select distinct'
' TASK_ITEM_USER_ID,'
' TASK_ID,'
' USER_TYPE,'
' NAME'
'from task_item_user'
'where TASK_ID = :TASK_ID'
' and USER_TYPE = '#39'Assigned'#39
'order by NAME')
Left = 60
Top = 200
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end>
object uqTaskAssignedUsersTASK_ITEM_USER_ID: TStringField
FieldName = 'TASK_ITEM_USER_ID'
Required = True
Size = 50
end
object uqTaskAssignedUsersTASK_ID: TStringField
FieldName = 'TASK_ID'
Required = True
Size = 7
end
object uqTaskAssignedUsersUSER_TYPE: TStringField
FieldName = 'USER_TYPE'
Required = True
Size = 8
end
object uqTaskAssignedUsersNAME: TStringField
FieldName = 'NAME'
Required = True
Size = 50
end
end
object uqAssignedInsert: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'insert into task_item_user ('
' TASK_ITEM_USER_ID,'
' TASK_ID,'
' USER_TYPE,'
' NAME'
')'
'values ('
' :TASK_ITEM_USER_ID,'
' :TASK_ID,'
' '#39'Assigned'#39','
' :NAME'
')')
Left = 382
Top = 24
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ITEM_USER_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'NAME'
Value = nil
end>
end
object uqAssignedRename: TUniQuery
LocalUpdate = True
Connection = ucETaskApi
SQL.Strings = (
'update task_item_user'
'set NAME = :NEW_NAME'
'where TASK_ITEM_USER_ID = :TASK_ITEM_USER_ID'
' and TASK_ID = :TASK_ID'
' and USER_TYPE = '#39'Assigned'#39)
Left = 382
Top = 84
ParamData = <
item
DataType = ftUnknown
Name = 'NEW_NAME'
Value = nil
end
item
DataType = ftUnknown
Name = 'TASK_ITEM_USER_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end>
end
object uqAssignedDelete: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'delete from task_item_user'
'where TASK_ITEM_USER_ID = :TASK_ITEM_USER_ID'
' and TASK_ID = :TASK_ID'
' and USER_TYPE = '#39'Assigned'#39)
Left = 384
Top = 140
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ITEM_USER_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end>
end
object uqRenameAssignedTo: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'update task_items'
'set ASSIGNED_TO = :NEW_NAME'
'where TASK_ID = :TASK_ID'
' and lower(ASSIGNED_TO) = lower(:OLD_NAME)')
Left = 386
Top = 196
ParamData = <
item
DataType = ftUnknown
Name = 'NEW_NAME'
Value = nil
end
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'OLD_NAME'
Value = nil
end>
end
object uqBlankAssignedTo: TUniQuery
Connection = ucETaskApi
SQL.Strings = (
'update task_items'
'set ASSIGNED_TO = '#39#39
'where TASK_ID = :TASK_ID'
' and lower(ASSIGNED_TO) = lower(:NAME)')
Left = 388
Top = 254
ParamData = <
item
DataType = ftUnknown
Name = 'TASK_ID'
Value = nil
end
item
DataType = ftUnknown
Name = 'NAME'
Value = nil
end>
end
end
......@@ -44,11 +44,6 @@ type
uqTaskHeaderPROJECT_ID: TStringField;
uqTaskHeaderSUBJECT: TStringField;
uqTaskHeaderPROJECT_NAME: TStringField;
uqTaskItemUsers: TUniQuery;
uqTaskItemUsersTASK_ITEM_USER_ID: TStringField;
uqTaskItemUsersTASK_ID: TStringField;
uqTaskItemUsersUSER_TYPE: TStringField;
uqTaskItemUsersNAME: TStringField;
uqTaskItemCodes: TUniQuery;
uqTaskItemCodesCODE: TStringField;
uqTaskItemCodesCODE_DESC: TStringField;
......@@ -66,6 +61,18 @@ type
uqDeleteTaskRow: TUniQuery;
uqShiftTaskRowsAfterDelete: TUniQuery;
uqShiftTaskRowsForInsert: TUniQuery;
uqProjectReportedUsers: TUniQuery;
uqTaskAssignedUsers: TUniQuery;
uqAssignedInsert: TUniQuery;
uqAssignedRename: TUniQuery;
uqAssignedDelete: TUniQuery;
uqRenameAssignedTo: TUniQuery;
uqBlankAssignedTo: TUniQuery;
uqProjectReportedUsersNAME: TStringField;
uqTaskAssignedUsersTASK_ITEM_USER_ID: TStringField;
uqTaskAssignedUsersTASK_ID: TStringField;
uqTaskAssignedUsersUSER_TYPE: TStringField;
uqTaskAssignedUsersNAME: TStringField;
procedure DataModuleCreate(Sender: TObject);
procedure uqUsersCalcFields(DataSet: TDataSet);
private
......
......@@ -26,7 +26,7 @@ type
reportedBy: string;
assignedTo: string;
status: string;
statusDate: Variant;
statusDate: TDateTime;
fixedVersion: string;
formSection: string;
issue: string;
......@@ -68,6 +68,13 @@ type
destructor Destroy; override;
end;
TTaskUserOptionsResponse = class
public
assignedToOptions: TList<TTaskUserOption>;
constructor Create;
destructor Destroy; override;
end;
TTaskRowSave = class
public
taskItemId: integer;
......@@ -87,6 +94,8 @@ type
end;
type
[ServiceContract, Model(API_MODEL)]
IApiService = interface(IInvokable)
......@@ -94,7 +103,9 @@ type
function GetTaskItems(taskId: string): TTaskItemsResponse;
[HttpPost] function AddTaskRow(taskId: string; insertAfterItemNum: Integer): Boolean;
[HttpPost] function SaveTaskRow(Item: TTaskRowSave): Boolean;
function TestApi(messageText: string): TJSONObject;
[HttpPost] function AddAssignedName(taskId: string; name: string): TTaskUserOptionsResponse;
[HttpPost] function RenameAssignedName(taskId: string; oldName: string; newName: string): TTaskUserOptionsResponse;
[HttpPost] function DeleteAssignedName(taskId: string; name: string): TTaskUserOptionsResponse;
procedure MoveTaskRow(const taskId: Integer; const taskItemId: Integer; const newItemNum: Integer);
function DeleteTaskRow(const taskId: Integer; const taskItemId: Integer): Boolean;
end;
......@@ -119,6 +130,18 @@ begin
inherited;
end;
constructor TTaskUserOptionsResponse.Create;
begin
inherited;
assignedToOptions := TList<TTaskUserOption>.Create;
end;
destructor TTaskUserOptionsResponse.Destroy;
begin
assignedToOptions.Free;
inherited;
end;
initialization
RegisterServiceType(TypeInfo(IApiService));
......
[Settings]
MemoLogLevel=4
FileLogLevel=4
webClientVersion=0.8.5
LogFileNum=146
webClientVersion=0.8.6
LogFileNum=152
[Database]
--Server=192.168.116.131
......
......@@ -114,10 +114,10 @@
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_ExeOutput>.\bin</DCC_ExeOutput>
<DCC_UnitSearchPath>C:\RADTOOLS\FastMM4;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<VerInfo_Keys>CompanyName=EM Systems;FileDescription=$(MSBuildProjectName);FileVersion=0.8.5.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.9.11;Comments=</VerInfo_Keys>
<VerInfo_Keys>CompanyName=EM Systems;FileDescription=$(MSBuildProjectName);FileVersion=0.8.6.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.9.11;Comments=</VerInfo_Keys>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_MinorVer>8</VerInfo_MinorVer>
<VerInfo_Release>5</VerInfo_Release>
<VerInfo_Release>6</VerInfo_Release>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
......
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