Commit a35bb057 by Mac Stephens

on server update uqMapUnits sql, update getmapunits endpoint, on client update…

on server update uqMapUnits sql, update getmapunits endpoint, on client update loadpointsasync for unit popups
parent d8438015
...@@ -17,7 +17,17 @@ object ApiDatabaseModule: TApiDatabaseModule ...@@ -17,7 +17,17 @@ object ApiDatabaseModule: TApiDatabaseModule
' uc.GPS_LONGITUDE,' ' uc.GPS_LONGITUDE,'
' cdc.CODE_DESC AS CALL_TYPE,' ' cdc.CODE_DESC AS CALL_TYPE,'
' cap.PRIORITY AS PRIORITY,' ' cap.PRIORITY AS PRIORITY,'
' cus.CODE_DESC AS UNIT_STATUS_DESC' ' cus.CODE_DESC AS UNIT_STATUS_DESC,'
' uc.UPDATETIME AS UPDATE_TIME,'
''
' p1.PF_LNAME AS OFFICER1_LNAME,'
' p1.PF_FNAME AS OFFICER1_FNAME,'
' p1.PF_EMPNUM AS OFFICER1_EMPNUM,'
''
' p2.PF_LNAME AS OFFICER2_LNAME,'
' p2.PF_FNAME AS OFFICER2_FNAME,'
' p2.PF_EMPNUM AS OFFICER2_EMPNUM'
''
'FROM UNITS_CURRENT@AVL_LINK uc' 'FROM UNITS_CURRENT@AVL_LINK uc'
'LEFT JOIN CFS_ACTIVE cfs ON uc.UNITID = cfs.UNITID' 'LEFT JOIN CFS_ACTIVE cfs ON uc.UNITID = cfs.UNITID'
...@@ -25,6 +35,10 @@ object ApiDatabaseModule: TApiDatabaseModule ...@@ -25,6 +35,10 @@ object ApiDatabaseModule: TApiDatabaseModule
'TID' 'TID'
'LEFT JOIN CD_DISPATCHCODES cdc ON cdc.CODE = cap.DISPATCHCODE' 'LEFT JOIN CD_DISPATCHCODES cdc ON cdc.CODE = cap.DISPATCHCODE'
'LEFT JOIN CD_UNITSTATUS cus ON cus.CODE = cfs.UNITSTATUS' 'LEFT JOIN CD_UNITSTATUS cus ON cus.CODE = cfs.UNITSTATUS'
'LEFT JOIN DIS_UNIT_ACTIVE dua ON dua.UNITID = uc.UNITID'
'LEFT JOIN PERSONNEL p1 ON p1.PF_NAMEID = dua.OFFICER1ID'
'LEFT JOIN PERSONNEL p2 ON p2.PF_NAMEID = dua.OFFICER2ID'
''
'') '')
ReadOnly = True ReadOnly = True
Left = 464 Left = 464
...@@ -63,6 +77,39 @@ object ApiDatabaseModule: TApiDatabaseModule ...@@ -63,6 +77,39 @@ object ApiDatabaseModule: TApiDatabaseModule
FieldName = 'UNIT_STATUS_DESC' FieldName = 'UNIT_STATUS_DESC'
ReadOnly = True ReadOnly = True
end end
object uqMapUnitsUPDATE_TIME: TDateTimeField
FieldName = 'UPDATE_TIME'
end
object uqMapUnitsOFFICER1_LNAME: TStringField
FieldName = 'OFFICER1_LNAME'
ReadOnly = True
Size = 45
end
object uqMapUnitsOFFICER1_FNAME: TStringField
FieldName = 'OFFICER1_FNAME'
ReadOnly = True
Size = 30
end
object uqMapUnitsOFFICER1_EMPNUM: TStringField
FieldName = 'OFFICER1_EMPNUM'
ReadOnly = True
Size = 10
end
object uqMapUnitsOFFICER2_LNAME: TStringField
FieldName = 'OFFICER2_LNAME'
ReadOnly = True
Size = 45
end
object uqMapUnitsOFFICER2_FNAME: TStringField
FieldName = 'OFFICER2_FNAME'
ReadOnly = True
Size = 30
end
object uqMapUnitsOFFICER2_EMPNUM: TStringField
FieldName = 'OFFICER2_EMPNUM'
ReadOnly = True
Size = 10
end
end end
object uqUnitList: TUniQuery object uqUnitList: TUniQuery
Connection = ucENTCAD Connection = ucENTCAD
......
...@@ -144,6 +144,13 @@ type ...@@ -144,6 +144,13 @@ type
uqComplaintHistory: TUniQuery; uqComplaintHistory: TUniQuery;
uqComplaintContacts: TUniQuery; uqComplaintContacts: TUniQuery;
uqComplaintWarnings: TUniQuery; uqComplaintWarnings: TUniQuery;
uqMapUnitsUPDATE_TIME: TDateTimeField;
uqMapUnitsOFFICER1_LNAME: TStringField;
uqMapUnitsOFFICER1_FNAME: TStringField;
uqMapUnitsOFFICER1_EMPNUM: TStringField;
uqMapUnitsOFFICER2_LNAME: TStringField;
uqMapUnitsOFFICER2_FNAME: TStringField;
uqMapUnitsOFFICER2_EMPNUM: TStringField;
procedure uqComplaintListCalcFields(DataSet: TDataSet); procedure uqComplaintListCalcFields(DataSet: TDataSet);
procedure uqMapComplaintsCalcFields(DataSet: TDataSet); procedure uqMapComplaintsCalcFields(DataSet: TDataSet);
private private
......
...@@ -193,8 +193,11 @@ end; ...@@ -193,8 +193,11 @@ end;
function TApiService.GetUnitMap: TJSONObject; function TApiService.GetUnitMap: TJSONObject;
var var
data: TJSONArray; data: TJSONArray;
item: TJSONObject;
unitStatus: string;
updateTimeText: string;
begin begin
Logger.Log(3, '---TApiService.GetUnitMap initiated'); Logger.Log(4, '---TApiService.GetUnitMap initiated');
Result := TJSONObject.Create; Result := TJSONObject.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
...@@ -204,32 +207,50 @@ begin ...@@ -204,32 +207,50 @@ begin
with ApiDB.uqMapUnits do with ApiDB.uqMapUnits do
begin begin
Open; Open;
try
First; First;
while not Eof do while not Eof do
begin begin
// skip rows without coordinates if (not ApiDB.uqMapUnitsGPS_LATITUDE.IsNull) and (not ApiDB.uqMapUnitsGPS_LONGITUDE.IsNull) then
if (not FieldByName('GPS_LATITUDE').IsNull) and (not FieldByName('GPS_LONGITUDE').IsNull) then
begin begin
var item := TJSONObject.Create; item := TJSONObject.Create;
item.AddPair('UnitId', ApiDB.uqMapUnitsUNITID.AsString); item.AddPair('UnitId', ApiDB.uqMapUnitsUNITID.AsString);
item.AddPair('UnitName', ApiDB.uqMapUnitsUNITNAME.AsString); item.AddPair('UnitName', ApiDB.uqMapUnitsUNITNAME.AsString);
item.AddPair('District', ApiDB.uqMapUnitsUNIT_DISTRICT.AsString); item.AddPair('District', ApiDB.uqMapUnitsUNIT_DISTRICT.AsString);
item.AddPair('Lat', TJSONNumber.Create(ApiDB.uqMapUnitsGPS_LATITUDE.AsFloat)); item.AddPair('Lat', TJSONNumber.Create(ApiDB.uqMapUnitsGPS_LATITUDE.AsFloat));
item.AddPair('Lng', TJSONNumber.Create(ApiDB.uqMapUnitsGPS_LONGITUDE.AsFloat)); item.AddPair('Lng', TJSONNumber.Create(ApiDB.uqMapUnitsGPS_LONGITUDE.AsFloat));
item.AddPair('CallType', ApiDB.uqMapUnitsCALL_TYPE.AsString); item.AddPair('CallType', ApiDB.uqMapUnitsCALL_TYPE.AsString);
item.AddPair('Priority', ApiDB.uqMapUnitsPRIORITY.AsString); item.AddPair('Priority', ApiDB.uqMapUnitsPRIORITY.AsString);
var unitStatus := ApiDB.uqMapUnitsUNIT_STATUS_DESC.AsString; unitStatus := ApiDB.uqMapUnitsUNIT_STATUS_DESC.AsString;
if Trim(unitStatus) = '' then if Trim(unitStatus) = '' then
unitStatus := 'Available'; unitStatus := 'Available';
item.AddPair('Status', unitStatus); item.AddPair('Status', unitStatus);
updateTimeText := '';
if not ApiDB.uqMapUnitsUPDATE_TIME.IsNull then
updateTimeText := FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqMapUnitsUPDATE_TIME.AsDateTime);
item.AddPair('UpdateTime', updateTimeText);
item.AddPair('Officer1Lname', ApiDB.uqMapUnitsOFFICER1_LNAME.AsString);
item.AddPair('Officer1Fname', ApiDB.uqMapUnitsOFFICER1_FNAME.AsString);
item.AddPair('Officer1Empnum', ApiDB.uqMapUnitsOFFICER1_EMPNUM.AsString);
item.AddPair('Officer2Lname', ApiDB.uqMapUnitsOFFICER2_LNAME.AsString);
item.AddPair('Officer2Fname', ApiDB.uqMapUnitsOFFICER2_FNAME.AsString);
item.AddPair('Officer2Empnum', ApiDB.uqMapUnitsOFFICER2_EMPNUM.AsString);
data.AddElement(item); data.AddElement(item);
end; end;
Next; Next;
end; end;
finally
Close;
end;
end; end;
Result.AddPair('count', TJSONNumber.Create(data.Count)); Result.AddPair('count', TJSONNumber.Create(data.Count));
...@@ -237,14 +258,15 @@ begin ...@@ -237,14 +258,15 @@ begin
Result.AddPair('data', data); Result.AddPair('data', data);
except except
data.Free; data.Free;
Logger.Log(2, '---TApiService.GetUnitMap End (error)'); Logger.Log(2, '---TApiService.GetUnitMap error');
raise EXDataHttpException.Create(500, 'Failed to load unit map'); raise EXDataHttpException.Create(500, 'Failed to load unit map');
end; end;
Logger.Log(3, '---TApiService.GetUnitMap End'); Logger.Log(4, '---TApiService.GetUnitMap End');
end; end;
function TApiService.GetComplaintList: TJSONObject; function TApiService.GetComplaintList: TJSONObject;
var var
data: TJSONArray; data: TJSONArray;
......
[Settings] [Settings]
LogFileNum=551 LogFileNum=552
webClientVersion=0.1.0 webClientVersion=0.1.0
...@@ -176,6 +176,10 @@ var ...@@ -176,6 +176,10 @@ var
unitId, callType, priorityText, statusText: string; unitId, callType, priorityText, statusText: string;
complaintId, codeDesc, dispatchDist, priority: string; complaintId, codeDesc, dispatchDist, priority: string;
pngName, iconUrl, rowsHtml: string; pngName, iconUrl, rowsHtml: string;
officer1Lname, officer1Fname, officer1Empnum: string;
officer2Lname, officer2Fname, officer2Empnum: string;
officer1Display, officer2Display: string;
updateTimeText: string;
begin begin
ShowSpinner('spinner'); ShowSpinner('spinner');
FUnitsLoaded := False; FUnitsLoaded := False;
...@@ -203,6 +207,36 @@ begin ...@@ -203,6 +207,36 @@ begin
priorityText := string(item['Priority']); priorityText := string(item['Priority']);
statusText := string(item['Status']); statusText := string(item['Status']);
updateTimeText := string(item['UpdateTime']);
officer1Lname := string(item['Officer1Lname']);
officer1Fname := string(item['Officer1Fname']);
officer1Empnum := string(item['Officer1Empnum']);
officer2Lname := string(item['Officer2Lname']);
officer2Fname := string(item['Officer2Fname']);
officer2Empnum := string(item['Officer2Empnum']);
officer1Display := '';
if Trim(officer1Lname + officer1Fname + officer1Empnum) <> '' then
begin
officer1Display := Trim(officer1Lname);
if Trim(officer1Fname) <> '' then
officer1Display := officer1Display + ', ' + Trim(officer1Fname);
if Trim(officer1Empnum) <> '' then
officer1Display := officer1Display + ' (' + Trim(officer1Empnum) + ')';
end;
officer2Display := '';
if Trim(officer2Lname + officer2Fname + officer2Empnum) <> '' then
begin
officer2Display := Trim(officer2Lname);
if Trim(officer2Fname) <> '' then
officer2Display := officer2Display + ', ' + Trim(officer2Fname);
if Trim(officer2Empnum) <> '' then
officer2Display := officer2Display + ' (' + Trim(officer2Empnum) + ')';
end;
m := lfMap.Markers.Add; m := lfMap.Markers.Add;
m.Latitude := lat; m.Latitude := lat;
m.Longitude := lng; m.Longitude := lng;
...@@ -210,7 +244,7 @@ begin ...@@ -210,7 +244,7 @@ begin
m.Title := m.Title :=
'<div class="d-flex flex-column gap-1 px-1 py-1" style="width:260px;">' + '<div class="d-flex flex-column gap-1 px-1 py-1" style="width:260px;">' +
'<div class="fw-semibold small">' + '<div class="fw-semibold small">' +
'<span class="fw-bold">Unit:</span> ' + uname + '<span class="fw-bold">Unit:</span> ' + uName +
'</div>' + '</div>' +
IfThen(dist <> '', IfThen(dist <> '',
'<div class="small"><span class="fw-bold">District:</span> ' + dist + '</div>', '<div class="small"><span class="fw-bold">District:</span> ' + dist + '</div>',
...@@ -225,9 +259,23 @@ begin ...@@ -225,9 +259,23 @@ begin
'' ''
) + ) +
IfThen(Trim(statusText) <> '', IfThen(Trim(statusText) <> '',
'<div class="small mb-1"><span class="fw-bold">Status:</span> ' + statusText + '</div>', '<div class="small"><span class="fw-bold">Status:</span> ' + statusText + '</div>',
''
) +
IfThen(Trim(officer1Display) <> '',
'<div class="small"><span class="fw-bold">Officer 1:</span> ' + officer1Display + '</div>',
'' ''
) + ) +
IfThen(Trim(officer2Display) <> '',
'<div class="small"><span class="fw-bold">Officer 2:</span> ' + officer2Display + '</div>',
''
) +
IfThen(Trim(updateTimeText) <> '',
'<div class="small mb-1"><span class="fw-bold">Updated:</span> ' + updateTimeText + '</div>',
'<div class="small mb-1"></div>'
) +
'<div class="d-flex justify-content-end mt-0">' + '<div class="d-flex justify-content-end mt-0">' +
'<button type="button" class="btn btn-primary btn-sm px-2 py-1" ' + '<button type="button" class="btn btn-primary btn-sm px-2 py-1" ' +
'onclick="window.showUnitDetails(''' + unitId + ''')">' + 'onclick="window.showUnitDetails(''' + unitId + ''')">' +
......
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