Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
emT3web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mac Stephens
emT3web
Commits
15978bbd
Commit
15978bbd
authored
Apr 09, 2026
by
Mac Stephens
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev'
parents
5c56b645
8a2f5e16
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
812 additions
and
203 deletions
+812
-203
ConnectionModule.pas
emT3Web/ConnectionModule.pas
+1
-1
View.TaskItems.pas
emT3Web/View.TaskItems.pas
+192
-9
app.css
emT3Web/css/app.css
+14
-0
emT3web.dproj
emT3Web/emT3web.dproj
+3
-3
uNameManager.pas
emT3Web/uNameManager.pas
+125
-84
Api.Database.dfm
emT3XDataServer/Source/Api.Database.dfm
+224
-66
Api.Database.pas
emT3XDataServer/Source/Api.Database.pas
+12
-5
Api.Service.pas
emT3XDataServer/Source/Api.Service.pas
+25
-2
Api.ServiceImpl.pas
emT3XDataServer/Source/Api.ServiceImpl.pas
+212
-29
emT3XDataServer.ini
emT3XDataServer/bin/emT3XDataServer.ini
+2
-2
emT3XDataServer.dproj
emT3XDataServer/emT3XDataServer.dproj
+2
-2
No files found.
emT3Web/ConnectionModule.pas
View file @
15978bbd
...
...
@@ -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
);
...
...
emT3Web/View.TaskItems.pas
View file @
15978bbd
...
...
@@ -77,6 +77,14 @@ type
procedure
EditorKeyDown
(
Event
:
TJSEvent
);
procedure
CaptureTableScroll
;
procedure
RestoreTableScroll
;
[
async
]
function
AddAssignedName
(
const
AName
:
string
):
TJSArray
;
[
async
]
function
RenameAssignedName
(
const
AOldName
,
ANewName
:
string
):
TJSArray
;
[
async
]
function
DeleteAssignedName
(
const
AName
:
string
):
TJSArray
;
function
ExtractAssignedOptionNames
(
const
ResponseResult
:
TJSObject
):
TJSArray
;
[
async
]
procedure
HandleAddAssignedName
(
const
ARowIndex
:
Integer
;
const
ANewName
:
string
);
[
async
]
procedure
HandleRenameAssignedName
(
const
AOldName
,
ANewName
:
string
);
[
async
]
procedure
HandleDeleteAssignedName
(
const
AName
:
string
);
function
FindAssignedOptionIgnoreCase
(
const
AItems
:
TJSArray
;
const
AName
:
string
):
string
;
public
end
;
...
...
@@ -106,13 +114,21 @@ begin
begin
Result
:=
GetOptionsForField
(
AFieldName
);
end
,
procedure
begin
RenderTable
;
end
,
procedure
(
const
ATriggerId
:
string
)
begin
FocusTrigger
(
ATriggerId
);
end
,
procedure
(
const
ARowIndex
:
Integer
;
const
ANewName
:
string
)
begin
HandleAddAssignedName
(
ARowIndex
,
ANewName
);
end
,
procedure
(
const
AOldName
,
ANewName
:
string
)
begin
HandleRenameAssignedName
(
AOldName
,
ANewName
);
end
,
procedure
(
const
AName
:
string
)
begin
HandleDeleteAssignedName
(
AName
);
end
);
...
...
@@ -653,7 +669,7 @@ var
'value="'
+
HtmlEncode
(
Value
)
+
'"'
+
w
+
'>'
;
end
;
function
SelectList
(
const
FieldName
,
Current
:
string
;
const
AIdx
:
Integer
;
const
Items
:
TJSArray
):
string
;
function
SelectList
(
const
FieldName
,
Current
:
string
;
const
AIdx
:
Integer
;
const
Items
:
TJSArray
;
const
AllowEdit
:
Boolean
):
string
;
var
i
:
Integer
;
itemText
:
string
;
...
...
@@ -688,6 +704,7 @@ var
'data-trigger-id="'
+
triggerId
+
'">'
+
HtmlEncode
(
itemText
)
+
'</button>'
;
end
;
if
AllowEdit
then
Result
:=
Result
+
'<div class="dropdown-divider my-1"></div>'
+
'<div class="px-2 py-1 text-end">'
+
...
...
@@ -697,7 +714,9 @@ var
'data-trigger-id="'
+
triggerId
+
'">'
+
'<i class="fas fa-pencil-alt"></i>'
+
'</button>'
+
'</div>'
+
'</div>'
;
Result
:=
Result
+
'</div>'
+
'</div>'
;
end
;
...
...
@@ -735,7 +754,7 @@ begin
html
:=
'<div class="tasks-vscroll">'
+
'<div class="tasks-hscroll">'
+
'<table class="table table-sm table-bordered align-middle mb-0" style="min-width:
20
00px;">'
+
'<table class="table table-sm table-bordered align-middle mb-0" style="min-width:
17
00px;">'
+
'<colgroup>'
+
'<col style="width:40px">'
+
// Item Num
'<col style="width:200px">'
+
// App
...
...
@@ -773,8 +792,8 @@ begin
TdNowrap
(
TextInput
(
'application'
,
xdwdsTasksapplication
.
AsString
,
rowIdx
,
180
))
+
TdNowrap
(
TextInput
(
'version'
,
xdwdsTasksversion
.
AsString
,
rowIdx
,
80
))
+
TdNowrap
(
DateInput
(
'taskDate'
,
xdwdsTaskstaskDate
.
AsString
,
rowIdx
,
110
))
+
TdNowrap
(
SelectList
(
'reportedBy'
,
xdwdsTasksreportedBy
.
AsString
,
rowIdx
,
FReportedByOptions
))
+
TdNowrap
(
SelectList
(
'assignedTo'
,
xdwdsTasksassignedTo
.
AsString
,
rowIdx
,
FAssignedToOptions
))
+
TdNowrap
(
SelectList
(
'reportedBy'
,
xdwdsTasksreportedBy
.
AsString
,
rowIdx
,
FReportedByOptions
,
False
))
+
TdNowrap
(
SelectList
(
'assignedTo'
,
xdwdsTasksassignedTo
.
AsString
,
rowIdx
,
FAssignedToOptions
,
True
))
+
TdNowrap
(
StatusSelect
(
xdwdsTasksstatus
.
AsString
,
rowIdx
))
+
TdNowrap
(
DateInput
(
'statusDate'
,
xdwdsTasksstatusDate
.
AsString
,
rowIdx
,
110
))
+
TdNowrap
(
TextInput
(
'formSection'
,
xdwdsTasksformSection
.
AsString
,
rowIdx
,
160
))
+
...
...
@@ -1119,6 +1138,9 @@ begin
if
(
idx
<
0
)
or
(
fieldName
=
''
)
then
Exit
;
if
not
SameText
(
fieldName
,
'assignedTo'
)
then
Exit
;
FNameManager
.
OpenManager
(
fieldName
,
idx
,
triggerId
);
end
;
...
...
@@ -1213,6 +1235,167 @@ begin
end
;
function
TFTaskItems
.
ExtractAssignedOptionNames
(
const
ResponseResult
:
TJSObject
):
TJSArray
;
begin
if
not
Assigned
(
ResponseResult
)
then
Exit
(
TJSArray
.
new
);
Result
:=
ExtractOptionNames
(
TJSArray
(
ResponseResult
[
'assignedToOptions'
]));
end
;
[
async
]
function
TFTaskItems
.
AddAssignedName
(
const
AName
:
string
):
TJSArray
;
var
response
:
TXDataClientResponse
;
resultObj
:
TJSObject
;
begin
Result
:=
nil
;
try
response
:=
await
(
xdwcTasks
.
RawInvokeAsync
(
'IApiService.AddAssignedName'
,
[
FTaskId
,
Trim
(
AName
)]
));
resultObj
:=
TJSObject
(
response
.
Result
);
Result
:=
ExtractAssignedOptionNames
(
resultObj
);
FAssignedToOptions
:=
Result
;
except
on
E
:
EXDataClientRequestException
do
begin
console
.
log
(
'AddAssignedName ERROR: '
+
E
.
ErrorResult
.
ErrorMessage
);
Utils
.
ShowErrorModal
(
E
.
ErrorResult
.
ErrorMessage
);
Exit
;
end
;
end
;
end
;
[
async
]
function
TFTaskItems
.
RenameAssignedName
(
const
AOldName
,
ANewName
:
string
):
TJSArray
;
var
response
:
TXDataClientResponse
;
resultObj
:
TJSObject
;
begin
Result
:=
nil
;
try
response
:=
await
(
xdwcTasks
.
RawInvokeAsync
(
'IApiService.RenameAssignedName'
,
[
FTaskId
,
Trim
(
AOldName
),
Trim
(
ANewName
)]
));
resultObj
:=
TJSObject
(
response
.
Result
);
Result
:=
ExtractAssignedOptionNames
(
resultObj
);
FAssignedToOptions
:=
Result
;
except
on
E
:
EXDataClientRequestException
do
begin
console
.
log
(
'RenameAssignedName ERROR: '
+
E
.
ErrorResult
.
ErrorMessage
);
Utils
.
ShowErrorModal
(
E
.
ErrorResult
.
ErrorMessage
);
Exit
;
end
;
end
;
end
;
[
async
]
function
TFTaskItems
.
DeleteAssignedName
(
const
AName
:
string
):
TJSArray
;
var
response
:
TXDataClientResponse
;
resultObj
:
TJSObject
;
begin
Result
:=
nil
;
try
response
:=
await
(
xdwcTasks
.
RawInvokeAsync
(
'IApiService.DeleteAssignedName'
,
[
FTaskId
,
Trim
(
AName
)]
));
resultObj
:=
TJSObject
(
response
.
Result
);
Result
:=
ExtractAssignedOptionNames
(
resultObj
);
FAssignedToOptions
:=
Result
;
except
on
E
:
EXDataClientRequestException
do
begin
console
.
log
(
'DeleteAssignedName ERROR: '
+
E
.
ErrorResult
.
ErrorMessage
);
Utils
.
ShowErrorModal
(
E
.
ErrorResult
.
ErrorMessage
);
Exit
;
end
;
end
;
end
;
function
TFTaskItems
.
FindAssignedOptionIgnoreCase
(
const
AItems
:
TJSArray
;
const
AName
:
string
):
string
;
var
i
:
Integer
;
itemText
:
string
;
begin
Result
:=
''
;
if
not
Assigned
(
AItems
)
then
Exit
;
for
i
:=
0
to
AItems
.
length
-
1
do
begin
itemText
:=
string
(
AItems
[
i
]);
if
SameText
(
itemText
,
Trim
(
AName
))
then
Exit
(
itemText
);
end
;
end
;
[
async
]
procedure
TFTaskItems
.
HandleAddAssignedName
(
const
ARowIndex
:
Integer
;
const
ANewName
:
string
);
var
newOptions
:
TJSArray
;
resolvedName
:
string
;
begin
newOptions
:=
await
(
AddAssignedName
(
ANewName
));
if
not
Assigned
(
newOptions
)
then
Exit
;
FAssignedToOptions
:=
newOptions
;
resolvedName
:=
FindAssignedOptionIgnoreCase
(
FAssignedToOptions
,
ANewName
);
if
resolvedName
=
''
then
resolvedName
:=
Trim
(
ANewName
);
if
not
xdwdsTasks
.
Active
then
Exit
;
GotoRowIndex
(
ARowIndex
);
if
xdwdsTasks
.
Eof
then
Exit
;
xdwdsTasks
.
Edit
;
xdwdsTasksassignedTo
.
AsString
:=
resolvedName
;
xdwdsTasks
.
Post
;
RenderTable
;
await
(
SaveRow
(
ARowIndex
));
end
;
[
async
]
procedure
TFTaskItems
.
HandleRenameAssignedName
(
const
AOldName
,
ANewName
:
string
);
var
newOptions
:
TJSArray
;
begin
newOptions
:=
await
(
RenameAssignedName
(
AOldName
,
ANewName
));
if
not
Assigned
(
newOptions
)
then
Exit
;
FAssignedToOptions
:=
newOptions
;
CaptureTableScroll
;
LoadTasks
(
FTaskId
);
end
;
[
async
]
procedure
TFTaskItems
.
HandleDeleteAssignedName
(
const
AName
:
string
);
var
newOptions
:
TJSArray
;
begin
newOptions
:=
await
(
DeleteAssignedName
(
AName
));
if
not
Assigned
(
newOptions
)
then
Exit
;
FAssignedToOptions
:=
newOptions
;
CaptureTableScroll
;
LoadTasks
(
FTaskId
);
end
;
end
.
...
...
emT3Web/css/app.css
View file @
15978bbd
...
...
@@ -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
;
}
emT3Web/emT3web.dproj
View file @
15978bbd
...
...
@@ -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>
...
...
emT3Web/uNameManager.pas
View file @
15978bbd
This diff is collapsed.
Click to expand it.
emT3XDataServer/Source/Api.Database.dfm
View file @
15978bbd
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 =
40
8
Top = 2
0
Left =
53
8
Top = 2
4
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 =
40
8
Top = 2
4
2
Left =
53
8
Top = 2
3
2
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 =
24
2
Left =
54
Top =
8
2
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 = 2
3
2
Top = 2
4
2
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 = 23
6
Top = 29
0
Left = 23
4
Top = 29
6
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 = 18
2
Left =
536
Top = 18
0
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 = 1
30
Left =
536
Top = 1
26
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 =
40
8
Top =
80
Left =
53
8
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
emT3XDataServer/Source/Api.Database.pas
View file @
15978bbd
...
...
@@ -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
...
...
emT3XDataServer/Source/Api.Service.pas
View file @
15978bbd
...
...
@@ -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
));
...
...
emT3XDataServer/Source/Api.ServiceImpl.pas
View file @
15978bbd
This diff is collapsed.
Click to expand it.
emT3XDataServer/bin/emT3XDataServer
2
.ini
→
emT3XDataServer/bin/emT3XDataServer.ini
View file @
15978bbd
[Settings]
MemoLogLevel
=
4
FileLogLevel
=
4
webClientVersion
=
0.8.
5
LogFileNum
=
1
46
webClientVersion
=
0.8.
6
LogFileNum
=
1
52
[Database]
Server
=
192.168.116.131
...
...
emT3XDataServer/emT3XDataServer.dproj
View file @
15978bbd
...
...
@@ -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>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment