Commit 80ed6f36 by emsys

Merge branch 'master' into websockets

parents 376416dd 63541f7e
......@@ -9,17 +9,19 @@ emiMobileServer/doc/
emiMobileServer/Win32/
emiMobileServer/*.log
emiMobileServer/*.txt
emiMobileServer/bin/logs/
emiMobileServer/bin/static/
emiMobileServer/Source/__history
emiMobileServer/Source/__recovery/
emiMobileServer/logs/*
*.local
*.exe
*.identcache
*.res
*.tvsconfig
*.dxsettings
*.zip
*.log
*.dll
......@@ -590,17 +590,66 @@ object ApiDatabaseModule: TApiDatabaseModule
' a.STRPREFIX,'
' a.STRNAME,'
' a.STRSUFFIX,'
' a.CITY'
' a.CITY,'
' 0 as status'
'FROM COMPLAINT_ACTIVE ca'
'JOIN COMPLAINT_TIMES ct'
' ON ca.COMPLAINTID = ct.COMPLAINTID'
'LEFT JOIN CD_DISPATCHCODES cdc'
' ON ca.DISPATCHCODE = cdc.CODE'
'JOIN CD_DISTRICT cd'
'LEFT JOIN CD_DISTRICT cd'
' ON cd.AGENCYCODE = ca.DISPATCHDISTRICT'
'LEFT JOIN ADDRESS a'
' ON ca.ADDRESSID = a.ADDRESSID'
'WHERE ca.COMPLAINTID = :COMPLAINTID'
''
'union'
''
'SELECT'
' ca.COMPLAINTID,'
' ca.CFSID,'
' ca.COMPLAINT,'
' ca.PRIORITY,'
' ca.DISPATCHCODE,'
' cdc.CODE_DESC AS DISPATCH_CODE_DESC,'
' cd.CODE_DESC AS DISPATCHDISTRICT,'
' ca.ADDRESS,'
' ca.BUSINESS,'
' ct.DATEREPORTED,'
' ct.DATERECEIVED,'
' ct.DATEDISPATCHED,'
' ct.DATERESPONDED,'
' ct.DATEARRIVED,'
' ct.DATECLEARED,'
''
' -- For enabling/disabling buttons (disable when = '#39'-1'#39')'
' ca.HISTORY,'
' ca.CONTACTS,'
' ca.WARNINGS,'
''
' -- For Contacts + Warnings lookups'
' ca.ADDRESSID,'
' ca.AGENCY,'
''
' -- For History matching (address parts)'
' a.STRNUMBER,'
' a.STRHNUMBER,'
' a.STRPREFIX,'
' a.STRNAME,'
' a.STRSUFFIX,'
' a.CITY,'
' 1 as status'
'FROM COMPLAINT_ARCHIVE ca'
'JOIN COMPLAINT_TIMES ct'
' ON ca.COMPLAINTID = ct.COMPLAINTID'
'LEFT JOIN CD_DISPATCHCODES cdc'
' ON ca.DISPATCHCODE = cdc.CODE'
'LEFT JOIN CD_DISTRICT cd'
' ON cd.AGENCYCODE = ca.DISPATCHDISTRICT'
'LEFT JOIN ADDRESS a'
' ON ca.ADDRESSID = a.ADDRESSID'
'WHERE ca.COMPLAINTID = :COMPLAINTID;')
'WHERE ca.COMPLAINTID = :COMPLAINTID;'
'')
ReadOnly = True
Left = 80
Top = 302
......@@ -713,6 +762,10 @@ object ApiDatabaseModule: TApiDatabaseModule
FieldName = 'BUSINESS'
Size = 35
end
object uqComplaintDetailsSTATUS: TFloatField
FieldName = 'STATUS'
ReadOnly = True
end
end
object ucENTCAD: TUniConnection
ProviderName = 'Oracle'
......@@ -807,8 +860,10 @@ object ApiDatabaseModule: TApiDatabaseModule
Calculated = True
end
object uqMapComplaintspngName: TStringField
DisplayWidth = 100
FieldKind = fkCalculated
FieldName = 'pngName'
Size = 100
Calculated = True
end
object uqMapComplaintsBUSINESS: TStringField
......@@ -908,6 +963,7 @@ object ApiDatabaseModule: TApiDatabaseModule
' where ca.complaintid = :COMPLAINTID'
')'
'select'
' c.complaintid,'
' c.complaint,'
' c.apartment,'
' c.datereported,'
......@@ -929,14 +985,39 @@ object ApiDatabaseModule: TApiDatabaseModule
'and (ctx.city is null or c.city = ctx.city)'
'order by c.datereported desc')
ReadOnly = True
Left = 328
Left = 330
Top = 72
ParamData = <
item
DataType = ftUnknown
Name = 'COMPLAINTID'
Value = nil
Value = Null
end>
object uqComplaintHistoryCOMPLAINTID: TFloatField
FieldName = 'COMPLAINTID'
Required = True
end
object uqComplaintHistoryCOMPLAINT: TStringField
FieldName = 'COMPLAINT'
Size = 10
end
object uqComplaintHistoryAPARTMENT: TStringField
FieldName = 'APARTMENT'
Size = 6
end
object uqComplaintHistoryDATEREPORTED: TDateTimeField
FieldName = 'DATEREPORTED'
end
object uqComplaintHistoryDPRIORITY: TStringField
FieldName = 'DPRIORITY'
ReadOnly = True
Size = 120
end
object uqComplaintHistoryDCALLTYPE: TStringField
FieldName = 'DCALLTYPE'
ReadOnly = True
Size = 60
end
end
object uqComplaintContacts: TUniQuery
Connection = ucENTCAD
......
......@@ -172,6 +172,13 @@ type
uqMapUnitsDIS_UNITID: TFloatField;
uqMapComplaintsBUSINESS: TStringField;
uqComplaintDetailsBUSINESS: TStringField;
uqComplaintDetailsSTATUS: TFloatField;
uqComplaintHistoryCOMPLAINTID: TFloatField;
uqComplaintHistoryCOMPLAINT: TStringField;
uqComplaintHistoryAPARTMENT: TStringField;
uqComplaintHistoryDATEREPORTED: TDateTimeField;
uqComplaintHistoryDPRIORITY: TStringField;
uqComplaintHistoryDCALLTYPE: TStringField;
procedure uqComplaintListCalcFields(DataSet: TDataSet);
procedure uqMapComplaintsCalcFields(DataSet: TDataSet);
private
......
......@@ -22,6 +22,7 @@ type
[HttpGet] function GetComplaintMap: TJSONObject;
[HttpGet] function GetUnitMap: TJSONObject;
[HttpGet] function GetComplaintDetails(const ComplaintId: string): TJSONObject;
[HttpGet] function GetComplaintArchiveDetails(const ComplaintId: string): TJSONObject;
[HttpGet] function GetComplaintMemos(const CfsId: string): TJSONObject;
[HttpGet] function GetComplaintHistory(const ComplaintId: string): TJSONObject;
[HttpGet] function GetComplaintContacts(const ComplaintId: string): TJSONObject;
......
......@@ -24,6 +24,7 @@ type
function GetComplaintMap: TJSONObject;
function GetUnitMap: TJSONObject;
function GetComplaintDetails(const ComplaintId: string): TJSONObject;
function GetComplaintArchiveDetails(const ComplaintId: string): TJSONObject;
function GetComplaintHistory(const ComplaintId: string): TJSONObject;
function GetComplaintContacts(const ComplaintId: string): TJSONObject;
function GetComplaintWarnings(const ComplaintId: string): TJSONObject;
......@@ -443,7 +444,6 @@ begin
end;
function TApiService.GetComplaintDetails(const ComplaintId: string): TJSONObject;
var
obj: TJSONObject;
......@@ -525,6 +525,91 @@ begin
end;
function TApiService.GetComplaintArchiveDetails(const ComplaintId: string): TJSONObject;
var
obj: TJSONObject;
begin
Logger.Log(3,'---TApiService.GetComplaintArchiveDetails initiated: '+ComplaintId);
Result := TJSONObject.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
try
with ApiDB.uqComplaintDetails do
begin
ParamByName('COMPLAINTID').AsString := ComplaintId;
Open;
try
if Eof then raise EXDataHttpException.Create(404,'Complaint not found');
if not Locate('STATUS', 1, []) then
raise EXDataHttpException.Create(404,'Complaint archive not found');
obj := TJSONObject.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(obj);
obj.AddPair('ComplaintId', ApiDB.uqComplaintDetailsCOMPLAINTID.AsString);
obj.AddPair('CFSId', ApiDB.uqComplaintDetailsCFSID.AsString);
obj.AddPair('Complaint', ApiDB.uqComplaintDetailsCOMPLAINT.AsString);
obj.AddPair('Priority', ApiDB.uqComplaintDetailsPRIORITY.AsString);
obj.AddPair('DispatchCode', ApiDB.uqComplaintDetailsDISPATCHCODE.AsString);
obj.AddPair('DispatchCodeDesc', ApiDB.uqComplaintDetailsDISPATCH_CODE_DESC.AsString);
obj.AddPair('DispatchDistrict', ApiDB.uqComplaintDetailsDISPATCHDISTRICT.AsString);
obj.AddPair('Address', ApiDB.uqComplaintDetailsADDRESS.AsString);
obj.AddPair('Business', ApiDB.uqComplaintDetailsBUSINESS.AsString);
obj.AddPair('History', ApiDB.uqComplaintDetailsHISTORY.AsString);
obj.AddPair('Contacts', ApiDB.uqComplaintDetailsCONTACTS.AsString);
obj.AddPair('Warnings', ApiDB.uqComplaintDetailsWARNINGS.AsString);
if ApiDB.uqComplaintDetailsDATEREPORTED.IsNull then
obj.AddPair('DateReported', '')
else
obj.AddPair('DateReported', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATEREPORTED.AsDateTime));
if ApiDB.uqComplaintDetailsDATERECEIVED.IsNull then
obj.AddPair('DateReceived', '')
else
obj.AddPair('DateReceived', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATERECEIVED.AsDateTime));
if ApiDB.uqComplaintDetailsDATEDISPATCHED.IsNull then
obj.AddPair('DateDispatched', '')
else
obj.AddPair('DateDispatched', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATEDISPATCHED.AsDateTime));
if ApiDB.uqComplaintDetailsDATERESPONDED.IsNull then
obj.AddPair('DateResponded', '')
else
obj.AddPair('DateResponded', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATERESPONDED.AsDateTime));
if ApiDB.uqComplaintDetailsDATEARRIVED.IsNull then
obj.AddPair('DateArrived', '')
else
obj.AddPair('DateArrived', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATEARRIVED.AsDateTime));
if ApiDB.uqComplaintDetailsDATECLEARED.IsNull then
obj.AddPair('DateCleared', '')
else
obj.AddPair('DateCleared', FormatDateTime('yyyy-mm-dd hh:nn:ss', ApiDB.uqComplaintDetailsDATECLEARED.AsDateTime));
Result.AddPair('data', obj);
finally
Close;
end;
end;
except
on E: EXDataHttpException do
begin
Logger.Log(3,'---TApiService.GetComplaintArchiveDetails not found');
raise;
end;
on E: Exception do
begin
Logger.Log(3,'---TApiService.GetComplaintArchiveDetails error: '+E.Message);
raise EXDataHttpException.Create(500,'Failed to load complaint archive details');
end;
end;
Logger.Log(3,'---TApiService.GetComplaintArchiveDetails End');
end;
function TApiService.GetComplaintMemos(const CfsId: string): TJSONObject;
var
data: TJSONArray;
......@@ -612,16 +697,17 @@ begin
rowObj := TJSONObject.Create;
dataArr.AddElement(rowObj);
rowObj.AddPair('Complaint', FieldByName('COMPLAINT').AsString);
rowObj.AddPair('Apartment', FieldByName('APARTMENT').AsString);
rowObj.AddPair('ComplaintId', ApiDB.uqComplaintHistoryCOMPLAINTID.AsString);
rowObj.AddPair('Complaint', ApiDB.uqComplaintHistoryCOMPLAINT.AsString);
rowObj.AddPair('Apartment', ApiDB.uqComplaintHistoryAPARTMENT.AsString);
if FieldByName('DATEREPORTED').IsNull then
if ApiDB.uqComplaintHistoryDATEREPORTED.IsNull then
rowObj.AddPair('DateReported', '')
else
rowObj.AddPair('DateReported', FormatDateTime('yyyy-mm-dd', FieldByName('DATEREPORTED').AsDateTime));
rowObj.AddPair('DateReported', FormatDateTime('yyyy-mm-dd', ApiDB.uqComplaintHistoryDATEREPORTED.AsDateTime));
rowObj.AddPair('DPriority', FieldByName('DPRIORITY').AsString);
rowObj.AddPair('DCallType', FieldByName('DCALLTYPE').AsString);
rowObj.AddPair('DPriority', ApiDB.uqComplaintHistoryDPRIORITY.AsString);
rowObj.AddPair('DCallType', ApiDB.uqComplaintHistoryDCALLTYPE.AsString);
Inc(returnedCount);
Next;
......
......@@ -3,7 +3,7 @@ unit Common.Config;
interface
const
defaultServerUrl = 'http://localhost:2009/emiMobile/';
defaultServerUrl = 'http://0.0.0.0:2009/emiMobile/';
type
TServerConfig = class
......
......@@ -186,6 +186,6 @@ begin
iniFile.Free;
end;
Logger.AddAppender(TMemoLogAppender.Create( memoLogLevel, FMain.memoinfo ));
Logger.AddAppender(TFileLogAppender.Create( fileLogLevel, 'webPoliceReports' ));
Logger.AddAppender(TFileLogAppender.Create( fileLogLevel, 'emiMobileServer' ));
Application.Run;
end.
......@@ -104,7 +104,7 @@
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_ExeOutput>.</DCC_ExeOutput>
<DCC_ExeOutput>.\bin</DCC_ExeOutput>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_MinorVer>9</VerInfo_MinorVer>
<VerInfo_Release>3</VerInfo_Release>
......@@ -196,12 +196,7 @@
<Source>
<Source Name="MainSource">emiMobileServer.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k290.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp290.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k290.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp290.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
<Excluded_Packages/>
</Delphi.Personality>
<Deployment Version="5">
<DeployFile LocalName="emiMobileServer.exe" Configuration="Debug" Class="ProjectOutput">
......
{
"type": "FeatureCollection",
"name": "BFDDistrict",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District A", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.838580621137581, 42.832640624242444 ], [ -78.838579379349227, 42.832637828223341 ], [ -78.853769883224203, 42.832256243942119 ], [ -78.85371958445721, 42.832194871720155 ], [ -78.853733424580213, 42.83219689697404 ], [ -78.860055694936989, 42.831634192917498 ], [ -78.86013734228284, 42.832269841506786 ], [ -78.859896026339129, 42.832680803438883 ], [ -78.860331112959102, 42.833777534545568 ], [ -78.86034975462735, 42.834904906086862 ], [ -78.85768545019738, 42.835848144550688 ], [ -78.858114869151507, 42.837605053389701 ], [ -78.857536532421037, 42.838545513856914 ], [ -78.858096352651074, 42.839687337785485 ], [ -78.861864583480241, 42.838698386233297 ], [ -78.86205975340269, 42.838902003038619 ], [ -78.862692380919711, 42.838804946201897 ], [ -78.862728132922896, 42.839242703902777 ], [ -78.859568800903887, 42.840181676978965 ], [ -78.859407395065432, 42.841296969378085 ], [ -78.865712578238899, 42.852676330854607 ], [ -78.87162174026551, 42.851292456357271 ], [ -78.872016282892517, 42.851882361006176 ], [ -78.872097013700895, 42.852401028660957 ], [ -78.868731884242095, 42.853274149621917 ], [ -78.869204890923257, 42.85390708456859 ], [ -78.872490649359548, 42.852817958505078 ], [ -78.876741180919694, 42.858996499122377 ], [ -78.874396356987731, 42.859770389677344 ], [ -78.873619753263739, 42.859660821705866 ], [ -78.87399285072668, 42.859861633865819 ], [ -78.874543180109029, 42.860234969333924 ], [ -78.875014936030652, 42.860593987099257 ], [ -78.8750512940248, 42.85997418590776 ], [ -78.876811140388725, 42.859277953228293 ], [ -78.882510814894758, 42.867189761467436 ], [ -78.878932430206248, 42.868654634149287 ], [ -78.879480450569972, 42.869349562574541 ], [ -78.883495141721355, 42.868167220890896 ], [ -78.883750388309764, 42.868756350747567 ], [ -78.880095121304095, 42.870078422117274 ], [ -78.880646408234384, 42.870624672382412 ], [ -78.884421489903062, 42.869274555253369 ], [ -78.890271939124617, 42.87558582502659 ], [ -78.887965695107951, 42.876802504379924 ], [ -78.890098621163943, 42.876205913975724 ], [ -78.890590430583615, 42.876593705838609 ], [ -78.890916063781987, 42.877700346284939 ], [ -78.883205768958902, 42.877189774239035 ], [ -78.882993797488041, 42.877925279047915 ], [ -78.882327302445603, 42.877883805165943 ], [ -78.880207061295906, 42.877067857368601 ], [ -78.87805895026365, 42.874522552122691 ], [ -78.877556716095029, 42.874857610217347 ], [ -78.875958954885036, 42.873857441685928 ], [ -78.875159693178475, 42.873656461201733 ], [ -78.873157675465777, 42.873156643168144 ], [ -78.87265780839121, 42.873155108530398 ], [ -78.872054850493441, 42.872990241069282 ], [ -78.871559627886398, 42.872856077792747 ], [ -78.871258478968869, 42.873855583344678 ], [ -78.870956750411864, 42.874756419191691 ], [ -78.87055656243021, 42.876156833702851 ], [ -78.870258536657332, 42.877056203810682 ], [ -78.870259928280817, 42.877356655895099 ], [ -78.869957241093033, 42.878057077538543 ], [ -78.86975904878048, 42.87875723695614 ], [ -78.869556577509613, 42.879355910320399 ], [ -78.869387780475122, 42.879951837575966 ], [ -78.869358376966289, 42.88005615122713 ], [ -78.869159247170458, 42.880555980676171 ], [ -78.86905751475463, 42.88115722766284 ], [ -78.86885745593024, 42.881456810125457 ], [ -78.864656316400058, 42.880655101515977 ], [ -78.859757939693296, 42.879956310487458 ], [ -78.857356707881706, 42.879457262118258 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.851756334480143, 42.8785568410702 ], [ -78.850856794926287, 42.878457395030267 ], [ -78.848757851920865, 42.877957459459736 ], [ -78.847059027846299, 42.877656785921261 ], [ -78.84545768790359, 42.877457442727305 ], [ -78.8440576714939, 42.87725761889191 ], [ -78.842556244378372, 42.876857758658176 ], [ -78.841757388131555, 42.876755214333393 ], [ -78.841556799502669, 42.876955998075758 ], [ -78.839957561167893, 42.87815595557732 ], [ -78.839358996383396, 42.878656627987034 ], [ -78.839156194113883, 42.879255275929467 ], [ -78.83835691774442, 42.879056837484171 ], [ -78.837456569994913, 42.878756929372337 ], [ -78.836758064766627, 42.878555457288982 ], [ -78.835756447512608, 42.878157034814144 ], [ -78.834855713376044, 42.87775563809948 ], [ -78.833955401951215, 42.877455839483304 ], [ -78.833058755274735, 42.877155998336157 ], [ -78.832856931977261, 42.877057576053375 ], [ -78.829257334160488, 42.878157567817688 ], [ -78.828657889567353, 42.878457937354909 ], [ -78.8267574133816, 42.880956240808032 ], [ -78.825555243453209, 42.882657282618005 ], [ -78.824056066742116, 42.884759488306194 ], [ -78.816657238717056, 42.884857093087646 ], [ -78.816056162884067, 42.884756847493165 ], [ -78.815257702748966, 42.884755696219727 ], [ -78.814156862880751, 42.884755313966757 ], [ -78.809555878954654, 42.884657430116576 ], [ -78.808555783918976, 42.884656712606812 ], [ -78.807556279992795, 42.884757426604551 ], [ -78.806257466997707, 42.884655722425009 ], [ -78.805055921622497, 42.884655256607296 ], [ -78.803757485744924, 42.88465776349981 ], [ -78.803455133300602, 42.884655628692954 ], [ -78.802455159595638, 42.884657546665778 ], [ -78.801354855037332, 42.884755737814196 ], [ -78.800855880420585, 42.885055770186042 ], [ -78.800455932255147, 42.884856198273617 ], [ -78.799555682779072, 42.884556101935864 ], [ -78.799654572990747, 42.877657757946196 ], [ -78.799856701247919, 42.874655534437835 ], [ -78.799857449623246, 42.871656406417138 ], [ -78.799635042492156, 42.871657704791218 ], [ -78.799608714716484, 42.871083266097898 ], [ -78.799283115590782, 42.871049664274494 ], [ -78.799454480449356, 42.868457790234544 ], [ -78.799407204649867, 42.867320014669311 ], [ -78.800073311118354, 42.866957357716529 ], [ -78.800044716534117, 42.864412395692526 ], [ -78.800371824261092, 42.864428623694991 ], [ -78.800013598039598, 42.864409573490128 ], [ -78.799945757015792, 42.86264032885358 ], [ -78.799955478268046, 42.861355618675994 ], [ -78.800087783614686, 42.854413335610161 ], [ -78.800402549685344, 42.847371835462368 ], [ -78.800465911964508, 42.845722712118793 ], [ -78.799110043197146, 42.84636759509597 ], [ -78.79856968562261, 42.845972008220215 ], [ -78.796901482216654, 42.845326143395887 ], [ -78.798679696151751, 42.842891687094514 ], [ -78.79742912862821, 42.842044107335376 ], [ -78.796593525881221, 42.841252458318557 ], [ -78.796593277967546, 42.841180348947155 ], [ -78.79561273987504, 42.841001923524573 ], [ -78.796653480378495, 42.838356812365419 ], [ -78.7973547812921, 42.83845708334983 ], [ -78.798455419987192, 42.838658042838404 ], [ -78.799854997104532, 42.83905596076432 ], [ -78.800114269943663, 42.839298827327589 ], [ -78.800121452152496, 42.841353971681812 ], [ -78.800954430165106, 42.841352391840893 ], [ -78.80105438597424, 42.839756154286384 ], [ -78.800954249264223, 42.838856343380748 ], [ -78.800955176875547, 42.838057919673417 ], [ -78.801056798578884, 42.837256505681758 ], [ -78.800956591162702, 42.836356612199886 ], [ -78.800957162531574, 42.835456609345087 ], [ -78.800856332175471, 42.834356493668217 ], [ -78.800856905099536, 42.833456490495223 ], [ -78.800854452246867, 42.832756825752362 ], [ -78.800854678804555, 42.831757987354088 ], [ -78.801656174913674, 42.831756462252542 ], [ -78.805656489050051, 42.831757053110763 ], [ -78.807255799586315, 42.831756626304951 ], [ -78.808654312733736, 42.831858151928195 ], [ -78.809556107062647, 42.831757511090629 ], [ -78.812457260200006, 42.83195756431401 ], [ -78.813556600253534, 42.831856606340295 ], [ -78.814854467616954, 42.831958231069144 ], [ -78.815254119976032, 42.832157755265499 ], [ -78.815357794453462, 42.831957212445182 ], [ -78.817654269166127, 42.831958024622892 ], [ -78.818556087729135, 42.831857422619095 ], [ -78.819555557802161, 42.831956835203073 ], [ -78.820756081390527, 42.831957151448407 ], [ -78.82385750949274, 42.831857222247173 ], [ -78.823955379359887, 42.831157347180735 ], [ -78.823956394179447, 42.830457675485583 ], [ -78.823857834211026, 42.829055689472924 ], [ -78.8239569963159, 42.82775761128412 ], [ -78.823956878334343, 42.826756138706585 ], [ -78.824270151467147, 42.826743955649128 ], [ -78.825254871013783, 42.826740809659682 ], [ -78.832859733663142, 42.826702349425297 ], [ -78.832970726887567, 42.825928159785164 ], [ -78.833854758436914, 42.825955589258797 ], [ -78.837158375362606, 42.825915168567825 ], [ -78.837726797591174, 42.829447708027431 ], [ -78.838478504947247, 42.832640028620709 ], [ -78.838580621137581, 42.832640624242444 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 1, "NAME": "District E", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.83135838731252, 42.946055876655677 ], [ -78.830457761013733, 42.946856231049658 ], [ -78.829957986127056, 42.947054948618003 ], [ -78.836858858528231, 42.958456982912189 ], [ -78.83595805615208, 42.9583548178936 ], [ -78.831759186240831, 42.95835580296653 ], [ -78.83115725851971, 42.958255557825574 ], [ -78.829958131354147, 42.958255431111702 ], [ -78.828856385827848, 42.958356577970008 ], [ -78.82765685495157, 42.958254878182295 ], [ -78.826158798016664, 42.958255266970681 ], [ -78.825355700985639, 42.958256967700528 ], [ -78.824656694550697, 42.958156975888137 ], [ -78.822157505617739, 42.958156839199646 ], [ -78.820756503617915, 42.958156954762991 ], [ -78.819557377904218, 42.958156719090624 ], [ -78.818656729926502, 42.958057024236993 ], [ -78.817356630933958, 42.958057000472493 ], [ -78.815756379360749, 42.958655648454581 ], [ -78.814655722805838, 42.959055735912756 ], [ -78.814256710692703, 42.959256842446351 ], [ -78.813656408143274, 42.959557158732345 ], [ -78.812055603843234, 42.960056977439621 ], [ -78.810858317851512, 42.960556082171166 ], [ -78.80855649993903, 42.961455128370673 ], [ -78.808556641406597, 42.95905538611283 ], [ -78.807555691674963, 42.958955334769527 ], [ -78.8075556846577, 42.956555317351551 ], [ -78.803555667103964, 42.956555344613861 ], [ -78.803555710222753, 42.954555352043627 ], [ -78.808655616610892, 42.954655346219724 ], [ -78.808755637596704, 42.952255322156944 ], [ -78.810356727315778, 42.952155355087633 ], [ -78.810955498629298, 42.949456959125619 ], [ -78.803256895252787, 42.949356848211345 ], [ -78.798260549765104, 42.94926379980847 ], [ -78.798454639809037, 42.948655260106889 ], [ -78.798550139049141, 42.945208809996167 ], [ -78.798557412588266, 42.943856009896109 ], [ -78.798554783338417, 42.94095575828883 ], [ -78.798757866985625, 42.938156613636551 ], [ -78.798756824676403, 42.937857507547143 ], [ -78.798855410796321, 42.937256444303237 ], [ -78.798854712408485, 42.937056116455338 ], [ -78.798856706061073, 42.936556785168193 ], [ -78.798756895109364, 42.935755765988517 ], [ -78.798856604707169, 42.93545649758471 ], [ -78.798855208018779, 42.935055841755414 ], [ -78.798856159105142, 42.934257431455606 ], [ -78.798954580601659, 42.933557506750603 ], [ -78.798956563688861, 42.933055376437686 ], [ -78.798955520699749, 42.932756297523177 ], [ -78.798954477630886, 42.932457191154541 ], [ -78.798956609322019, 42.929856033293724 ], [ -78.799155762886727, 42.922757308165004 ], [ -78.799055197727725, 42.92175595902475 ], [ -78.798956070218281, 42.919056125478022 ], [ -78.799055128618349, 42.918556609769276 ], [ -78.799454283045222, 42.918457105177296 ], [ -78.800054256740182, 42.918156889411847 ], [ -78.800456783714296, 42.917955796927018 ], [ -78.801057105067628, 42.917757125798815 ], [ -78.80155672747378, 42.917555844750758 ], [ -78.802056207188116, 42.917357360535163 ], [ -78.802454989226121, 42.917156268155487 ], [ -78.80345780545899, 42.916756401201226 ], [ -78.803856903703789, 42.916656853904762 ], [ -78.804755137489181, 42.91625725926454 ], [ -78.805657092775974, 42.915857650327247 ], [ -78.806954527440098, 42.915355711896147 ], [ -78.807755983281623, 42.91505503448947 ], [ -78.808057645039966, 42.914856911604382 ], [ -78.808456723670673, 42.914757375724776 ], [ -78.809456090238214, 42.914456297072078 ], [ -78.810056088429604, 42.914156028667882 ], [ -78.810555550332339, 42.913957424994436 ], [ -78.811357082867673, 42.913656831921934 ], [ -78.811856489182247, 42.913455506238051 ], [ -78.812456391220152, 42.913155197963881 ], [ -78.81355576688965, 42.912656379465048 ], [ -78.813556198439798, 42.914640829675548 ], [ -78.81330446664127, 42.914579715671721 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.814556580901453, 42.914756112336519 ], [ -78.815557162713134, 42.914756885970576 ], [ -78.816557594465252, 42.914757459094126 ], [ -78.817558165651363, 42.914755416513607 ], [ -78.818256145722728, 42.914756757777305 ], [ -78.819155785294967, 42.914757624719542 ], [ -78.820156244305437, 42.914755559662552 ], [ -78.821156446253028, 42.914657505838498 ], [ -78.821455090218222, 42.914656885101166 ], [ -78.822257239703006, 42.914556434655353 ], [ -78.822455128322289, 42.91455602152439 ], [ -78.823156988267698, 42.914557269928117 ], [ -78.823556423863408, 42.914556432537715 ], [ -78.824056614264222, 42.91455538195617 ], [ -78.825057080580791, 42.914556072803187 ], [ -78.826255435013962, 42.914556225453076 ], [ -78.827457447884839, 42.91455638519686 ], [ -78.828857461438815, 42.914556162759148 ], [ -78.829156067087453, 42.914555439698631 ], [ -78.832157862254618, 42.914655993557794 ], [ -78.832557335549936, 42.914655124679904 ], [ -78.837555965261672, 42.914655027677036 ], [ -78.838858697395693, 42.914654926337406 ], [ -78.842957736990499, 42.914656597685237 ], [ -78.84325638045668, 42.9146559200761 ], [ -78.843558756955673, 42.914655233203135 ], [ -78.847758513806397, 42.914656613445167 ], [ -78.848758980528913, 42.914656987399198 ], [ -78.851958257798302, 42.914655013461626 ], [ -78.852656778433314, 42.914754922998405 ], [ -78.85365812200979, 42.914955609374736 ], [ -78.853657047324589, 42.913855292993048 ], [ -78.853657967521158, 42.912357137990234 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.854656859806852, 42.911155703833316 ], [ -78.855556445588121, 42.91115617512046 ], [ -78.856459765022805, 42.91115682250279 ], [ -78.859259447418182, 42.911155597178706 ], [ -78.862059586429183, 42.911255770601677 ], [ -78.865556836779717, 42.911156710343533 ], [ -78.865159677833972, 42.912455539180336 ], [ -78.864658777656672, 42.913954923753735 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.861957308400946, 42.917556052161366 ], [ -78.860856832722632, 42.918557465223657 ], [ -78.859760042753081, 42.91955616966203 ], [ -78.859157947244356, 42.920155784666115 ], [ -78.858856876572062, 42.920455618453111 ], [ -78.858656530175679, 42.920755181814776 ], [ -78.856956990718302, 42.922257434331961 ], [ -78.856057477592657, 42.923156769606393 ], [ -78.853759739771817, 42.925357311533098 ], [ -78.852759287171324, 42.926256941150747 ], [ -78.851959523004112, 42.926955789183971 ], [ -78.851458130539228, 42.9275551540956 ], [ -78.851056247518528, 42.927855175636331 ], [ -78.850959569531824, 42.9279568697158 ], [ -78.85075872187268, 42.928154952031669 ], [ -78.849357066205357, 42.929554815991274 ], [ -78.848059054160757, 42.93075689229353 ], [ -78.847158434247248, 42.931456021774324 ], [ -78.846359083627647, 42.932256379439686 ], [ -78.845956921275459, 42.932556383500874 ], [ -78.845458740353124, 42.933056852948276 ], [ -78.844457613641666, 42.933854860213494 ], [ -78.843558140727509, 42.934855728084706 ], [ -78.842557083794873, 42.935656434765868 ], [ -78.842356232851728, 42.935857191087443 ], [ -78.841656567483184, 42.936456960649835 ], [ -78.841158271807103, 42.936954722350357 ], [ -78.839856210702692, 42.938156713358005 ], [ -78.838758734174164, 42.939155187600356 ], [ -78.837456087930008, 42.940255602049938 ], [ -78.835856446299658, 42.941757314897934 ], [ -78.835056290608691, 42.942456016559234 ], [ -78.834357116302002, 42.943157289902665 ], [ -78.833657690718923, 42.94385576071415 ], [ -78.833356381137804, 42.944155526831231 ], [ -78.832258592102392, 42.945156654906228 ], [ -78.83135838731252, 42.946055876655677 ] ] ], [ [ [ -78.81388190979429, 42.914719903009498 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.813556198439798, 42.914640829675548 ], [ -78.81388190979429, 42.914719903009498 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District B", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.877556716095029, 42.874857610217347 ], [ -78.87805895026365, 42.874522552122691 ], [ -78.879767789463699, 42.87705099553893 ], [ -78.882677989722453, 42.878305611941379 ], [ -78.882994922991031, 42.877911145090273 ], [ -78.886812483749637, 42.878206759469876 ], [ -78.888732385034302, 42.878825339982058 ], [ -78.890247479896416, 42.881469631441725 ], [ -78.889835470396079, 42.882279055795166 ], [ -78.88897192071019, 42.881844428097786 ], [ -78.889386931765287, 42.881187695916303 ], [ -78.888452123743221, 42.879939802637892 ], [ -78.887206299012334, 42.879344207919118 ], [ -78.886363932196801, 42.879208313175972 ], [ -78.884891941620182, 42.879517868154529 ], [ -78.883809384665241, 42.88006768014219 ], [ -78.883881226506304, 42.880141055142744 ], [ -78.88543589722687, 42.879590628920212 ], [ -78.885349153009415, 42.880294746526879 ], [ -78.884856472862353, 42.880493851630128 ], [ -78.883953613363957, 42.880826369804623 ], [ -78.88391652991092, 42.880965390027278 ], [ -78.885261140223761, 42.880731366039186 ], [ -78.885412749814421, 42.880704405359175 ], [ -78.885432935061019, 42.881989614876254 ], [ -78.884934189912883, 42.882187199689177 ], [ -78.885149591608595, 42.882417749431362 ], [ -78.885990282873877, 42.881942759172496 ], [ -78.886902106250716, 42.881435964598211 ], [ -78.887623976098538, 42.881872685765536 ], [ -78.887295848770606, 42.88218147594376 ], [ -78.886665517494535, 42.882707970148083 ], [ -78.886325573274505, 42.883318314140141 ], [ -78.887935188133397, 42.882305309596234 ], [ -78.888194750681521, 42.882788008753764 ], [ -78.888461862582389, 42.883204230311826 ], [ -78.888197905618881, 42.883428944037398 ], [ -78.887713659596528, 42.883745449631128 ], [ -78.888459338075492, 42.884289799437973 ], [ -78.88896187969182, 42.884981344336815 ], [ -78.890170993132699, 42.886575763198067 ], [ -78.890483014674359, 42.886922466630416 ], [ -78.891329524845204, 42.887212943140796 ], [ -78.891358175386998, 42.887199415290638 ], [ -78.892133110897007, 42.887504971882784 ], [ -78.892385934056861, 42.887695510810936 ], [ -78.893348314393322, 42.888403903499388 ], [ -78.894057755479366, 42.888933744445872 ], [ -78.894612242514853, 42.889338469797835 ], [ -78.895036384546501, 42.889659996207968 ], [ -78.895501392294435, 42.890011208150497 ], [ -78.896121211532275, 42.890469582881344 ], [ -78.89683887897786, 42.890993347367832 ], [ -78.898918617390336, 42.892541080916487 ], [ -78.899432482892905, 42.892922022847635 ], [ -78.899905427513588, 42.893261231452982 ], [ -78.900631448154058, 42.893814911921822 ], [ -78.901000451860682, 42.894477001624736 ], [ -78.901287413342885, 42.894960225054838 ], [ -78.90149248475656, 42.895324097147316 ], [ -78.901762135284699, 42.895734270535478 ], [ -78.901820719343334, 42.895950462273227 ], [ -78.90191675573098, 42.898106772035554 ], [ -78.901983845860258, 42.899191788067803 ], [ -78.902018825485499, 42.900005496587902 ], [ -78.902111235070834, 42.901882460953765 ], [ -78.901354550045156, 42.901657838954542 ], [ -78.901009778825738, 42.901115975466546 ], [ -78.900610944128658, 42.900787295131039 ], [ -78.900920393124537, 42.901298197182662 ], [ -78.9009544677413, 42.901756192436423 ], [ -78.901617220150982, 42.902200478390171 ], [ -78.901603239445336, 42.902900259891958 ], [ -78.901588792822579, 42.903248195747921 ], [ -78.901565452389505, 42.904327206356093 ], [ -78.901560896419539, 42.906155900137307 ], [ -78.90160098289445, 42.914954584158387 ], [ -78.90117482292824, 42.914955618835442 ], [ -78.900833802550821, 42.914856453154684 ], [ -78.899063170890415, 42.914861349800091 ], [ -78.898064267951455, 42.914847414843535 ], [ -78.897133551252566, 42.914849969619191 ], [ -78.895662005310712, 42.914861026418535 ], [ -78.894377258499588, 42.914955942341805 ], [ -78.892967674896013, 42.914959763240532 ], [ -78.890079862876149, 42.915058955206973 ], [ -78.888175984523798, 42.915154442931687 ], [ -78.886661367371204, 42.91515846580203 ], [ -78.885854268732928, 42.91515247522581 ], [ -78.885368298366402, 42.91525127115856 ], [ -78.884273792034705, 42.915254153367037 ], [ -78.883068729321764, 42.915257314605014 ], [ -78.882272685221139, 42.915251269836823 ], [ -78.881860056726552, 42.915357218260048 ], [ -78.881359298348983, 42.915256972327974 ], [ -78.880060763516965, 42.915356407999973 ], [ -78.878357872938679, 42.915256651587946 ], [ -78.876760500452249, 42.915356819507785 ], [ -78.873359629522184, 42.915357198709401 ], [ -78.872758628860012, 42.915356003171667 ], [ -78.868857549841991, 42.915354823057719 ], [ -78.86655787398773, 42.915355047378718 ], [ -78.865057126814094, 42.915356061113151 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.864658777656672, 42.913954923753735 ], [ -78.865159677833972, 42.912455539180336 ], [ -78.865556836779717, 42.911156710343533 ], [ -78.862059586429183, 42.911255770601677 ], [ -78.859259447418182, 42.911155597178706 ], [ -78.856459765022805, 42.91115682250279 ], [ -78.855556445588121, 42.91115617512046 ], [ -78.854656859806852, 42.911155703833316 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.853657494698368, 42.910557187534138 ], [ -78.853659033437623, 42.910054973192565 ], [ -78.853756797638667, 42.909355082581932 ], [ -78.853658635474773, 42.908254994396067 ], [ -78.853759022902551, 42.908156005376249 ], [ -78.853759265986639, 42.907357483109244 ], [ -78.853758953862595, 42.906457521063999 ], [ -78.85375875366897, 42.905557531173962 ], [ -78.853758278971, 42.903757578583011 ], [ -78.853657613396891, 42.902056531765901 ], [ -78.853656698573374, 42.900155000825954 ], [ -78.853656069099998, 42.899156258847228 ], [ -78.853656302324623, 42.898355046346644 ], [ -78.85365785349488, 42.897855629658302 ], [ -78.853756805541735, 42.897457533816237 ], [ -78.853758344049041, 42.896955400639861 ], [ -78.853757469063879, 42.896755099652516 ], [ -78.853857405997729, 42.896557304389624 ], [ -78.853858943823525, 42.896055198573613 ], [ -78.853757551303204, 42.895056693911634 ], [ -78.853756908447806, 42.894055152318728 ], [ -78.853759577852927, 42.892957539513091 ], [ -78.853758060564701, 42.89175575126616 ], [ -78.853758304791938, 42.890957254144233 ], [ -78.853756111813098, 42.890455129209947 ], [ -78.853756712784602, 42.889755383336748 ], [ -78.853759059883188, 42.887755088297254 ], [ -78.853758944339788, 42.885156604458061 ], [ -78.853714464176306, 42.884361065673055 ], [ -78.853661332722666, 42.883318515317931 ], [ -78.85365725150217, 42.88325541562201 ], [ -78.853557511100931, 42.881757490201359 ], [ -78.853656661060612, 42.88055546197964 ], [ -78.853958681519828, 42.879657470565625 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.857356707881706, 42.879457262118258 ], [ -78.859757939693296, 42.879956310487458 ], [ -78.864656316400058, 42.880655101515977 ], [ -78.86885745593024, 42.881456810125457 ], [ -78.86905751475463, 42.88115722766284 ], [ -78.869159247170458, 42.880555980676171 ], [ -78.869358376966289, 42.88005615122713 ], [ -78.869387780475122, 42.879951837575966 ], [ -78.869556577509613, 42.879355910320399 ], [ -78.86975904878048, 42.87875723695614 ], [ -78.869957241093033, 42.878057077538543 ], [ -78.870259928280817, 42.877356655895099 ], [ -78.870258536657332, 42.877056203810682 ], [ -78.87055656243021, 42.876156833702851 ], [ -78.870956750411864, 42.874756419191691 ], [ -78.871258478968869, 42.873855583344678 ], [ -78.871559627886398, 42.872856077792747 ], [ -78.87265780839121, 42.873155108530398 ], [ -78.873157675465777, 42.873156643168144 ], [ -78.87405764897936, 42.873357381992662 ], [ -78.875159693178475, 42.873656461201733 ], [ -78.875958954885036, 42.873857441685928 ], [ -78.87665858052506, 42.874256231783569 ], [ -78.877556716095029, 42.874857610217347 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District C", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.837456569994913, 42.878756929372337 ], [ -78.83835691774442, 42.879056837484171 ], [ -78.839156194113883, 42.879255275929467 ], [ -78.839358996383396, 42.878656627987034 ], [ -78.839957561167893, 42.87815595557732 ], [ -78.841556799502669, 42.876955998075758 ], [ -78.841757388131555, 42.876755214333393 ], [ -78.842556244378372, 42.876857758658176 ], [ -78.8440576714939, 42.87725761889191 ], [ -78.84545768790359, 42.877457442727305 ], [ -78.847059027846299, 42.877656785921261 ], [ -78.848757851920865, 42.877957459459736 ], [ -78.850856794926287, 42.878457395030267 ], [ -78.851756334480143, 42.8785568410702 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.853958681519828, 42.879657470565625 ], [ -78.853656661060612, 42.88055546197964 ], [ -78.853557511100931, 42.881757490201359 ], [ -78.85365725150217, 42.88325541562201 ], [ -78.853661332722666, 42.883318515317931 ], [ -78.853714464176306, 42.884361065673055 ], [ -78.853758944339788, 42.885156604458061 ], [ -78.853759059883188, 42.887755088297254 ], [ -78.853756712784602, 42.889755383336748 ], [ -78.853756111813098, 42.890455129209947 ], [ -78.853758304791938, 42.890957254144233 ], [ -78.853758060564701, 42.89175575126616 ], [ -78.853759577852927, 42.892957539513091 ], [ -78.853756908447806, 42.894055152318728 ], [ -78.853757551303204, 42.895056693911634 ], [ -78.853858943823525, 42.896055198573613 ], [ -78.853857405997729, 42.896557304389624 ], [ -78.853757469063879, 42.896755099652516 ], [ -78.853758344049041, 42.896955400639861 ], [ -78.853756805541735, 42.897457533816237 ], [ -78.85365785349488, 42.897855629658302 ], [ -78.853656302324623, 42.898355046346644 ], [ -78.853656069099998, 42.899156258847228 ], [ -78.853656698573374, 42.900155000825954 ], [ -78.853657613396891, 42.902056531765901 ], [ -78.853758278971, 42.903757578583011 ], [ -78.85375875366897, 42.905557531173962 ], [ -78.853758953862595, 42.906457521063999 ], [ -78.853759265986639, 42.907357483109244 ], [ -78.853759022902551, 42.908156005376249 ], [ -78.853658635474773, 42.908254994396067 ], [ -78.853756797638667, 42.909355082581932 ], [ -78.853659033437623, 42.910054973192565 ], [ -78.853657494698368, 42.910557187534138 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.853657967521158, 42.912357137990234 ], [ -78.853657047324589, 42.913855292993048 ], [ -78.85365812200979, 42.914955609374736 ], [ -78.852656778433314, 42.914754922998405 ], [ -78.851958257798302, 42.914655013461626 ], [ -78.848758980528913, 42.914656987399198 ], [ -78.847758513806397, 42.914656613445167 ], [ -78.843558756955673, 42.914655233203135 ], [ -78.84325638045668, 42.9146559200761 ], [ -78.842957736990499, 42.914656597685237 ], [ -78.838858697395693, 42.914654926337406 ], [ -78.837555965261672, 42.914655027677036 ], [ -78.832557335549936, 42.914655124679904 ], [ -78.832157862254618, 42.914655993557794 ], [ -78.829156067087453, 42.914555439698631 ], [ -78.828857461438815, 42.914556162759148 ], [ -78.827457447884839, 42.91455638519686 ], [ -78.826255435013962, 42.914556225453076 ], [ -78.825057080580791, 42.914556072803187 ], [ -78.824056614264222, 42.91455538195617 ], [ -78.823556423863408, 42.914556432537715 ], [ -78.823156988267698, 42.914557269928117 ], [ -78.822455128322289, 42.91455602152439 ], [ -78.822257239703006, 42.914556434655353 ], [ -78.821455090218222, 42.914656885101166 ], [ -78.821156446253028, 42.914657505838498 ], [ -78.820156244305437, 42.914755559662552 ], [ -78.819155785294967, 42.914757624719542 ], [ -78.818256145722728, 42.914756757777305 ], [ -78.817558165651363, 42.914755416513607 ], [ -78.816557594465252, 42.914757459094126 ], [ -78.815557162713134, 42.914756885970576 ], [ -78.814556580901453, 42.914756112336519 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.81355576688965, 42.912656379465048 ], [ -78.812456391220152, 42.913155197963881 ], [ -78.811856489182247, 42.913455506238051 ], [ -78.811357082867673, 42.913656831921934 ], [ -78.810555550332339, 42.913957424994436 ], [ -78.810056088429604, 42.914156028667882 ], [ -78.809456090238214, 42.914456297072078 ], [ -78.808456723670673, 42.914757375724776 ], [ -78.808057645039966, 42.914856911604382 ], [ -78.807755983281623, 42.91505503448947 ], [ -78.806954527440098, 42.915355711896147 ], [ -78.805657092775974, 42.915857650327247 ], [ -78.804755137489181, 42.91625725926454 ], [ -78.803856903703789, 42.916656853904762 ], [ -78.80345780545899, 42.916756401201226 ], [ -78.802454989226121, 42.917156268155487 ], [ -78.802056207188116, 42.917357360535163 ], [ -78.80155672747378, 42.917555844750758 ], [ -78.801057105067628, 42.917757125798815 ], [ -78.800456783714296, 42.917955796927018 ], [ -78.800054256740182, 42.918156889411847 ], [ -78.799454283045222, 42.918457105177296 ], [ -78.799055128618349, 42.918556609769276 ], [ -78.799056743783282, 42.913655973762616 ], [ -78.799054506892517, 42.909855743480577 ], [ -78.799155722941677, 42.906757665138031 ], [ -78.799254604981854, 42.898756254692366 ], [ -78.79935567367923, 42.895655454002004 ], [ -78.799357519475777, 42.88975613471235 ], [ -78.799555682779072, 42.884556101935864 ], [ -78.800455932255147, 42.884856198273617 ], [ -78.800855880420585, 42.885055770186042 ], [ -78.801354855037332, 42.884755737814196 ], [ -78.802455159595638, 42.884657546665778 ], [ -78.803455133300602, 42.884655628692954 ], [ -78.803757485744924, 42.88465776349981 ], [ -78.805055921622497, 42.884655256607296 ], [ -78.806257466997707, 42.884655722425009 ], [ -78.807556279992795, 42.884757426604551 ], [ -78.808555783918976, 42.884656712606812 ], [ -78.809555878954654, 42.884657430116576 ], [ -78.814156862880751, 42.884755313966757 ], [ -78.815257702748966, 42.884755696219727 ], [ -78.816056162884067, 42.884756847493165 ], [ -78.816657238717056, 42.884857093087646 ], [ -78.824051345503236, 42.884759550740974 ], [ -78.824056055970587, 42.884756717006105 ], [ -78.825555243453209, 42.882657282618005 ], [ -78.8267574133816, 42.880956240808032 ], [ -78.828657889567353, 42.878457937354909 ], [ -78.829257334160488, 42.878157567817688 ], [ -78.832856931977261, 42.877057576053375 ], [ -78.833058755274735, 42.877155998336157 ], [ -78.833955401951215, 42.877455839483304 ], [ -78.834855713376044, 42.87775563809948 ], [ -78.835756447512608, 42.878157034814144 ], [ -78.836758064766627, 42.878555457288982 ], [ -78.837456569994913, 42.878756929372337 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District D", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.848357925732358, 42.958557155360594 ], [ -78.847558550346733, 42.958556314278027 ], [ -78.847159103369592, 42.958655986661867 ], [ -78.846658049234421, 42.95855559052405 ], [ -78.845757772716311, 42.958554968924986 ], [ -78.844659429161581, 42.958554682819461 ], [ -78.843456598624755, 42.958554733406494 ], [ -78.842257051866881, 42.958455875641029 ], [ -78.841158635672457, 42.958455665861948 ], [ -78.840157571072865, 42.958455117420101 ], [ -78.838958216436993, 42.958455112938751 ], [ -78.838158434253145, 42.95835531882836 ], [ -78.836858858528231, 42.958456982912189 ], [ -78.829957986127056, 42.947054948618003 ], [ -78.830457761013733, 42.946856231049658 ], [ -78.83135838731252, 42.946055876655677 ], [ -78.832258592102392, 42.945156654906228 ], [ -78.833356381137804, 42.944155526831231 ], [ -78.833657690718923, 42.94385576071415 ], [ -78.834357116302002, 42.943157289902665 ], [ -78.835056290608691, 42.942456016559234 ], [ -78.835856446299658, 42.941757314897934 ], [ -78.837456087930008, 42.940255602049938 ], [ -78.838758734174164, 42.939155187600356 ], [ -78.839856210702692, 42.938156713358005 ], [ -78.841158271807103, 42.936954722350357 ], [ -78.841656567483184, 42.936456960649835 ], [ -78.842356232851728, 42.935857191087443 ], [ -78.842557083794873, 42.935656434765868 ], [ -78.843558140727509, 42.934855728084706 ], [ -78.844457613641666, 42.933854860213494 ], [ -78.845458740353124, 42.933056852948276 ], [ -78.845956921275459, 42.932556383500874 ], [ -78.846359083627647, 42.932256379439686 ], [ -78.847158434247248, 42.931456021774324 ], [ -78.848059054160757, 42.93075689229353 ], [ -78.849357066205357, 42.929554815991274 ], [ -78.85075872187268, 42.928154952031669 ], [ -78.850959569531824, 42.9279568697158 ], [ -78.851056247518528, 42.927855175636331 ], [ -78.851458130539228, 42.9275551540956 ], [ -78.851959523004112, 42.926955789183971 ], [ -78.852759287171324, 42.926256941150747 ], [ -78.853759739771817, 42.925357311533098 ], [ -78.856057477592657, 42.923156769606393 ], [ -78.856956990718302, 42.922257434331961 ], [ -78.858656530175679, 42.920755181814776 ], [ -78.858856876572062, 42.920455618453111 ], [ -78.859157947244356, 42.920155784666115 ], [ -78.859760042753081, 42.91955616966203 ], [ -78.860856832722632, 42.918557465223657 ], [ -78.861957308400946, 42.917556052161366 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.865057126814094, 42.915356061113151 ], [ -78.86655787398773, 42.915355047378718 ], [ -78.868857549841991, 42.915354823057719 ], [ -78.872758628860012, 42.915356003171667 ], [ -78.873359629522184, 42.915357198709401 ], [ -78.876760500452249, 42.915356819507785 ], [ -78.878357872938679, 42.915256651587946 ], [ -78.880060763516965, 42.915356407999973 ], [ -78.881359298348983, 42.915256972327974 ], [ -78.881860056726552, 42.915357218260048 ], [ -78.882272685221139, 42.915251269836823 ], [ -78.883068729321764, 42.915257314605014 ], [ -78.884273792034705, 42.915254153367037 ], [ -78.885368298366402, 42.91525127115856 ], [ -78.885854268732928, 42.91515247522581 ], [ -78.886672422971984, 42.915158436510609 ], [ -78.888164928925264, 42.915154472368307 ], [ -78.890066028293106, 42.915055944996219 ], [ -78.892973197591445, 42.914958732545394 ], [ -78.894377258499588, 42.914955942341805 ], [ -78.895675824733544, 42.914860988717805 ], [ -78.897168322242848, 42.914856907221662 ], [ -78.898109668762928, 42.914847290026792 ], [ -78.899051243879498, 42.914856809077392 ], [ -78.899673117636056, 42.914855092483272 ], [ -78.900855119132444, 42.914855753392153 ], [ -78.901159417838116, 42.914956980417145 ], [ -78.901511530128445, 42.914956002391477 ], [ -78.901259500262299, 42.915790463407561 ], [ -78.901039376175646, 42.9165211626134 ], [ -78.900803422995168, 42.917340120508733 ], [ -78.900642632086601, 42.917922293370644 ], [ -78.900352803555677, 42.918873736097275 ], [ -78.899966689539511, 42.920198582505577 ], [ -78.899497029021163, 42.92189358586883 ], [ -78.89950199452521, 42.921893572156002 ], [ -78.898955778359166, 42.924051207509997 ], [ -78.898959314199004, 42.924744023208717 ], [ -78.898966106163485, 42.926074777878405 ], [ -78.898997580075644, 42.927369108017722 ], [ -78.899015346081342, 42.927982092585005 ], [ -78.899797131705569, 42.930131477834024 ], [ -78.899824713903755, 42.930304182471211 ], [ -78.89998968080755, 42.930434992570987 ], [ -78.900817098187616, 42.93108823657095 ], [ -78.900824857978293, 42.930585100877963 ], [ -78.90132628418371, 42.930980937805437 ], [ -78.901834110429547, 42.930639013085603 ], [ -78.902728823511509, 42.930443681928907 ], [ -78.903109151324642, 42.930357845634006 ], [ -78.901834110429547, 42.930639013085603 ], [ -78.900659484006212, 42.929123959777144 ], [ -78.900580076597706, 42.926266420627407 ], [ -78.900429083107412, 42.922319764339214 ], [ -78.900760203399443, 42.921241687908463 ], [ -78.900915847459643, 42.920702745364295 ], [ -78.901546249652824, 42.919608991462646 ], [ -78.901818736656523, 42.919099082084145 ], [ -78.902109568540993, 42.917890121065405 ], [ -78.902235137734323, 42.917263840573362 ], [ -78.902332190342975, 42.916885163554234 ], [ -78.902181178734878, 42.915320070874564 ], [ -78.902124132571586, 42.914957051428722 ], [ -78.901515270083607, 42.914955690463479 ], [ -78.901515776779945, 42.914868491601403 ], [ -78.901518012111453, 42.914820720145464 ], [ -78.902133312499032, 42.914818734938109 ], [ -78.902013473047873, 42.912693915230498 ], [ -78.902533701297116, 42.911804550020491 ], [ -78.902754669155058, 42.91241524030513 ], [ -78.902915198716912, 42.912829692706374 ], [ -78.903067379972413, 42.913542508969392 ], [ -78.903271021262256, 42.914633587956949 ], [ -78.903586313334159, 42.916226591537594 ], [ -78.903778949397676, 42.917099452743621 ], [ -78.904186211959313, 42.919245250066467 ], [ -78.904440341493142, 42.920518157479009 ], [ -78.90462435719698, 42.921631183782786 ], [ -78.904737308753241, 42.922409657703007 ], [ -78.904809627095929, 42.922969833964459 ], [ -78.904909494683295, 42.923729878069061 ], [ -78.904963312104968, 42.924134968048868 ], [ -78.905138306699939, 42.92523964937368 ], [ -78.905314300750192, 42.926570915527613 ], [ -78.905514378516472, 42.927872068041225 ], [ -78.906210330417593, 42.929508631350856 ], [ -78.906212496791639, 42.929923496936539 ], [ -78.904706019158724, 42.93010111178603 ], [ -78.905197192220299, 42.930046811396345 ], [ -78.906216361094181, 42.92992699817907 ], [ -78.906115574986444, 42.932064584547803 ], [ -78.906825072161936, 42.93409383314517 ], [ -78.904965379070646, 42.932881019280011 ], [ -78.904645083186239, 42.932662492287299 ], [ -78.904309426718299, 42.932455367033597 ], [ -78.904007372774672, 42.932239695581686 ], [ -78.903451768029086, 42.931871460603965 ], [ -78.902201542601702, 42.931008740628926 ], [ -78.90202594441206, 42.930895716102775 ], [ -78.901875034453923, 42.930711282252666 ], [ -78.901398118730953, 42.931022774185323 ], [ -78.901651811431563, 42.931225910422974 ], [ -78.902350261746577, 42.931882739510314 ], [ -78.902915944600963, 42.932388693438718 ], [ -78.902629510589421, 42.932600797271924 ], [ -78.90386120948564, 42.933656869024439 ], [ -78.904459278893853, 42.933756743178414 ], [ -78.907262208987191, 42.93695979109124 ], [ -78.908521859033641, 42.938597978997493 ], [ -78.908726708704449, 42.939380438521361 ], [ -78.908730080667112, 42.939389593415029 ], [ -78.909516776232223, 42.94249073687056 ], [ -78.908916416369607, 42.943086737261048 ], [ -78.909717332335276, 42.943989928321862 ], [ -78.908911507135457, 42.944586541589423 ], [ -78.909517706327776, 42.945094129940117 ], [ -78.908916874063678, 42.945605236619571 ], [ -78.910401234703158, 42.953596504184752 ], [ -78.91267796524653, 42.95575904357041 ], [ -78.911761223912649, 42.95645513001049 ], [ -78.908360118215342, 42.958956305281539 ], [ -78.907559933526329, 42.959556760400766 ], [ -78.906759942770009, 42.96015441060144 ], [ -78.906559296799884, 42.960355305505615 ], [ -78.905758658446118, 42.960854199466368 ], [ -78.905059515844783, 42.961454324852951 ], [ -78.90406141411782, 42.962055311372481 ], [ -78.903362054777176, 42.962655454327887 ], [ -78.902561472684425, 42.963154298160894 ], [ -78.901761289295081, 42.963754712362615 ], [ -78.9009612024266, 42.964355120648463 ], [ -78.899159550375217, 42.965655144949189 ], [ -78.898359376221833, 42.966255535118037 ], [ -78.896461726581393, 42.96485586650212 ], [ -78.894559418319659, 42.963256015240091 ], [ -78.893858268674535, 42.962755823238531 ], [ -78.893261164733602, 42.962156457059415 ], [ -78.892959509184109, 42.960856745493309 ], [ -78.890458983145905, 42.958355523664345 ], [ -78.888960817281159, 42.958356844401585 ], [ -78.885061244442412, 42.958455047304646 ], [ -78.883058932473872, 42.958454819792294 ], [ -78.882158658648564, 42.958454484475844 ], [ -78.881758903828015, 42.958455527314996 ], [ -78.881157861160332, 42.958555843687328 ], [ -78.880059519299948, 42.958555897250605 ], [ -78.879260144717819, 42.958555277552378 ], [ -78.878557723983036, 42.95855709124055 ], [ -78.878060939280772, 42.958555572638929 ], [ -78.875158678177471, 42.958656381264539 ], [ -78.87425840060051, 42.958655874070374 ], [ -78.873260883445468, 42.958655715870663 ], [ -78.872457771560946, 42.958655030696043 ], [ -78.871460329053207, 42.958654856616953 ], [ -78.870358249228573, 42.958654826503142 ], [ -78.869259942906652, 42.958654886107276 ], [ -78.865557719794268, 42.958655787081888 ], [ -78.861257477462374, 42.958556554292315 ], [ -78.858359034813049, 42.958657010029732 ], [ -78.855657578720312, 42.958556430976316 ], [ -78.854656835161208, 42.958654869409195 ], [ -78.853957814556878, 42.958554946837822 ], [ -78.853659403684276, 42.958657229161389 ], [ -78.853259671690395, 42.958655373694626 ], [ -78.852859914568072, 42.958656315615869 ], [ -78.85175743026079, 42.958554639873995 ], [ -78.850958457227449, 42.958655289085193 ], [ -78.850558737387288, 42.958656222882844 ], [ -78.85005767815349, 42.958555923956126 ], [ -78.849459880382412, 42.958554516542854 ], [ -78.848357925732358, 42.958557155360594 ] ] ], [ [ [ -78.901518012111453, 42.914820720145464 ], [ -78.901516053815271, 42.914820815724703 ], [ -78.901516056764024, 42.91482072644893 ], [ -78.901518012111453, 42.914820720145464 ] ] ], [ [ [ -78.901516053815271, 42.914820815724703 ], [ -78.901515776779945, 42.914868491601403 ], [ -78.901511709782966, 42.91495540755421 ], [ -78.901511626800385, 42.914955682310051 ], [ -78.901511599202905, 42.914955682248291 ], [ -78.901516053815271, 42.914820815724703 ] ] ], [ [ [ -78.901515270083607, 42.914955690463479 ], [ -78.901515268331408, 42.914955992002454 ], [ -78.901511530128445, 42.914956002391477 ], [ -78.901511626800385, 42.914955682310051 ], [ -78.901515270083607, 42.914955690463479 ] ] ] ] } }
]
}
{
"AuthUrl" : "http://localhost:2009/emimobile/auth/",
"ApiUrl" : "http://localhost:2009/emimobile/api/",
"AppUrl" : "http://localhost:2009/emimobile/app/"
}
\ No newline at end of file
.login-card {
display: inline-block;
width: 300px; /* Adjust width as needed */
padding: 0;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
background-color: #fff;
}
.card-header {
width: 100%;
text-align: left; /* Align text to the left */
background-color: #f8f9fa; /* Match the card background */
padding: 0.75rem 1.25rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
border-top-left-radius: 10px;
border-top-right-radius: 10px;
margin: 0; /* Remove any margin */
box-sizing: border-box; /* Ensure padding is included in the element's total width and height */
}
.mr-2 {
margin-right: 0.5rem;
}
.card-title {
margin: 0;
font-size: 1.25rem; /* Adjust font size as needed */
}
.card-body {
padding: 2rem;
}
.table tbody tr:hover {
background-color: #d1e7fd; /* Light blue color for hover effect */
cursor: pointer;
}
.form-input{
display: table;
}
.form-cells{
display: table-cell
}
.table tbody tr {
transition: background-color 0.3s ease;
}
.table {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 5px;
}
@media (max-width: 1200px) {
.table-responsive {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.table thead {
display: none;
}
.table tbody, .table tr, .table td {
display: block;
width: 100%;
}
.table tr {
margin-bottom: 1rem;
}
.table td {
text-align: right;
padding-left: 50%; /* Adjust padding to accommodate the data-label */
position: relative;
}
.table td::before {
content: attr(data-label);
position: absolute;
left: 0;
width: 50%;
padding-left: 15px; /* Adjust as necessary */
font-weight: bold;
text-align: left;
}
.table td .transcript {
margin-top: 20px; /* Set top margin to 20px */
text-align: left; /* Ensure text alignment is left */
margin-left: 8px;
white-space: normal; /* Prevent text from being cut off */
}
}
.login-navbar {
max-width: 1200px; /* Set the max-width to match a medium screen */
margin: auto;
border-bottom-left-radius: 10px; /* Round the bottom left corner */
border-bottom-right-radius: 10px; /* Round the bottom right corner */
border: 1px solid #d3d3d3;
}
.navbar-toggler {
display: none;
}
.dropdown-menu a {
display: flex; /* Use flexbox for alignment */
align-items: center; /* Vertically center the content */
width: 100%; /* Ensure they take up the full width */
padding: 0.5rem 1rem; /* Add padding to make them clickable */
color: #000; /* Adjust the text color if necessary */
text-decoration: none; /* Remove underlines */
}
.dropdown-menu a:hover {
background-color: #204d74;
color: #fff;
}
.dropdown-menu a span {
flex-grow: 1; /* Make the span take up the remaining space */
}
/* Style for the selected number */
.selected-number .page-link {
background-color: #204d74;
color: #fff !important;
}
/* Style for the unselected numbers and text (previous/next) */
.pagination .page-item a,
.pagination .page-item span {
color: #204d74;
}
.pagination .page-item.active .page-link,
.pagination .page-item.active .page-link:hover,
.pagination .page-item.active .page-link:focus {
background-color: #204d74;
border-color: #204d74;
color: #fff !important;
}
/* This is needed to get rid of the line that was appearing. */
span.card {
border: none;
}
.modal-backdrop {
z-index: 1040 !important;
}
.modal {
z-index: 1055 !important;
}
object FViewComplaintArchive: TFViewComplaintArchive
Width = 640
Height = 480
object tblRemarksArc: TWebDBTableControl
Left = 102
Top = 128
Width = 191
Height = 147
ElementId = 'tbl_remarks_arc'
BorderColor = clSilver
ChildOrder = 8
ElementFont = efCSS
ElementHeaderClassName = 'table-light'
ElementTableClassName =
'table table-sm table-striped table-hover table-bordered mb-0 ali' +
'gn-middle'
Footer.ButtonActiveElementClassName = 'btn btn-primary'
Footer.ButtonElementClassName = 'btn btn-light'
Footer.DropDownElementClassName = 'form-control'
Footer.InputElementClassName = 'form-control'
Footer.LinkActiveElementClassName = 'link-primary'
Footer.LinkElementClassName = 'link-secondary'
Footer.ListElementClassName = 'pagination'
Footer.ListItemElementClassName = 'page-item'
Footer.ListLinkElementClassName = 'page-link'
Header.ButtonActiveElementClassName = 'btn btn-primary'
Header.ButtonElementClassName = 'btn btn-light'
Header.DropDownElementClassName = 'form-control'
Header.InputElementClassName = 'form-control'
Header.LinkActiveElementClassName = 'link-primary'
Header.LinkElementClassName = 'link-secondary'
Header.ListElementClassName = 'pagination'
Header.ListItemElementClassName = 'page-item'
Header.ListLinkElementClassName = 'page-link'
WordWrap = True
Columns = <
item
ElementClassName = 'd-none'
DataField = 'MemoType'
Title = 'Type'
TitleElementClassName = 'd-none'
end
item
DataField = 'Timestamp'
Title = 'Timestamp'
end
item
DataField = 'Remarks'
Title = 'Remarks'
end>
DataSource = wdsRemarksArc
end
object btnUntArc: TWebButton
Left = 378
Top = 85
Width = 96
Height = 25
Caption = 'UNT'
ChildOrder = 1
ElementID = 'btn_unt_arc'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
TabStop = False
WidthPercent = 100.000000000000000000
OnClick = btnUntArcClick
end
object btnREMArc: TWebButton
Left = 276
Top = 85
Width = 96
Height = 25
Caption = 'REM'
ChildOrder = 1
ElementID = 'btn_rem_arc'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
TabStop = False
WidthPercent = 100.000000000000000000
OnClick = btnREMArcClick
end
object btnE911Arc: TWebButton
Left = 166
Top = 85
Width = 96
Height = 25
Caption = 'E-911'
ChildOrder = 1
ElementID = 'btn_e911_arc'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
TabStop = False
WidthPercent = 100.000000000000000000
OnClick = btnE911ArcClick
end
object btnCmpArc: TWebButton
Left = 64
Top = 85
Width = 96
Height = 25
Caption = 'CMP'
ChildOrder = 1
ElementID = 'btn_cmp_arc'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
TabStop = False
WidthPercent = 100.000000000000000000
OnClick = btnCmpArcClick
end
object btnComplaintViewOnMapArc: TWebButton
Left = 342
Top = 259
Width = 96
Height = 25
Caption = 'Map'
ChildOrder = 1
ElementID = 'btn_complaint_view_on_map_arc'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnClick = btnComplaintViewOnMapArcClick
end
object xdwcComplaintArchive: TXDataWebClient
Connection = DMConnection.ApiConnection
Left = 292
Top = 310
end
object xdwdsRemarksArc: TXDataWebDataSet
Left = 68
Top = 316
object xdwdsRemarksArcMemoId: TStringField
FieldName = 'MemoId'
end
object xdwdsRemarksArcCFSId: TStringField
FieldName = 'CFSId'
end
object xdwdsRemarksArcMemoType: TStringField
FieldName = 'MemoType'
end
object xdwdsRemarksArcTimestamp: TStringField
FieldName = 'Timestamp'
end
object xdwdsRemarksArcBadgeNumber: TStringField
FieldName = 'BadgeNumber'
end
object xdwdsRemarksArcRemarks: TStringField
FieldName = 'Remarks'
end
end
object wdsRemarksArc: TWebDataSource
DataSet = xdwdsRemarksArc
Left = 156
Top = 314
end
end
<div class="d-flex flex-column h-100 w-100 overflow-hidden">
<div class="flex-grow-1 d-flex flex-column overflow-auto bg-light p-2 p-md-3" style="min-height:0;">
<!-- Sticky block: Summary header + summary body -->
<div class="sticky-top bg-light" style="z-index:20;">
<!-- Summary header -->
<div class="card border-0 shadow-sm mb-2">
<div class="card-header bg-white py-2">
<button
class="btn btn-link text-decoration-none p-0 w-100 d-flex align-items-center justify-content-between summary-toggle"
type="button"
data-bs-toggle="collapse"
data-bs-target="#cdetails_summary_arc"
aria-expanded="true"
aria-controls="cdetails_summary_arc">
<span class="fw-semibold text-dark" id="lbl_summary_title_arc">Summary</span>
<span class="summary-chevron" aria-hidden="true">
<svg class="summary-chevron-icon" viewBox="0 0 16 16" focusable="false">
<path fill="currentColor" d="M7.646 5.354a.5.5 0 0 1 .708 0l5 5a.5.5 0 0 1-.708.708L8 6.414 3.354 11.06a.5.5 0 1 1-.708-.708l5-5z"/>
</svg>
</span>
</button>
</div>
</div>
<!-- Summary body -->
<div id="cdetails_summary_arc" class="collapse show">
<div class="card border-0 shadow-sm mb-2">
<div class="card-body py-2">
<table class="table table-sm mb-0 w-100">
<tbody>
<tr>
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Priority:</th>
<td class="w-100" id="lbl_priority_arc"></td>
</tr>
<tr>
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Status:</th>
<td class="w-100" id="lbl_status_arc"></td>
</tr>
<tr>
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Dispatch Code:</th>
<td class="w-100" id="lbl_dispatch_code_arc"></td>
</tr>
<tr>
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Dispatch District:</th>
<td class="w-100" id="lbl_dispatch_district_arc"></td>
</tr>
<tr>
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Address:</th>
<td class="w-100" id="lbl_address_arc"></td>
</tr>
<tr id="row_business_arc" class="d-none">
<th scope="row" class="fw-semibold text-nowrap pe-2 w-auto">Business:</th>
<td class="w-100" id="lbl_business_arc"></td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Remarks toggle filters -->
<div class="pb-2">
<div class="d-flex flex-wrap gap-2 justify-content-center mt-2" id="row_remarks_toggles_arc">
<button type="button" class="btn btn-success btn-sm px-3 active" id="btn_cmp_arc" aria-pressed="true">CMP</button>
<button type="button" class="btn btn-success btn-sm px-3 active" id="btn_e911_arc" aria-pressed="true">E-911</button>
<button type="button" class="btn btn-success btn-sm px-3 active" id="btn_rem_arc" aria-pressed="true">REM</button>
<button type="button" class="btn btn-success btn-sm px-3 active" id="btn_unt_arc" aria-pressed="true">UNT</button>
</div>
</div>
</div>
</div>
<!-- Remarks table (scrolls with page) -->
<div class="card border-0 shadow-sm">
<div class="card-body p-0">
<div id="tbl_remarks_arc"></div>
</div>
</div>
</div>
<button id="btn_complaint_view_on_map_arc"
type="button"
class="btn btn-primary btn-sm shadow position-fixed"
style="right: 15px; bottom: 25px; z-index: 1040;">
Map
</button>
</div>
unit View.ComplaintArchive;
interface
uses
System.SysUtils, System.Classes, JS, Web,
WEBLib.Graphics, WEBLib.Controls, WEBLib.Forms, WEBLib.Dialogs,
Vcl.Controls, Vcl.StdCtrls, Data.DB,
WEBLib.StdCtrls, WEBLib.Grids, WEBLib.DBCtrls, WEBLib.DB,
XData.Web.Client, XData.Web.JsonDataset, XData.Web.Dataset,
ConnectionModule;
type
TFViewComplaintArchive = class(TWebForm)
tblRemarksArc: TWebDBTableControl;
xdwcComplaintArchive: TXDataWebClient;
xdwdsRemarksArc: TXDataWebDataSet;
xdwdsRemarksArcMemoId: TStringField;
xdwdsRemarksArcCFSId: TStringField;
xdwdsRemarksArcMemoType: TStringField;
xdwdsRemarksArcTimestamp: TStringField;
xdwdsRemarksArcBadgeNumber: TStringField;
xdwdsRemarksArcRemarks: TStringField;
wdsRemarksArc: TWebDataSource;
btnUntArc: TWebButton;
btnREMArc: TWebButton;
btnE911Arc: TWebButton;
btnCmpArc: TWebButton;
btnComplaintViewOnMapArc: TWebButton;
procedure WebFormCreate(Sender: TObject);
procedure btnCmpArcClick(Sender: TObject);
procedure btnE911ArcClick(Sender: TObject);
procedure btnREMArcClick(Sender: TObject);
procedure btnUntArcClick(Sender: TObject);
procedure btnComplaintViewOnMapArcClick(Sender: TObject);
private
FComplaintId: string;
FCfsId: string;
FAllMemos: TJSArray;
FShowCMP: Boolean;
FShowE911: Boolean;
FShowREM: Boolean;
FShowUNT: Boolean;
procedure WireUi;
procedure SetTextById(const Id, Value: string);
procedure SetHiddenById(const Id: string; Hidden: Boolean);
procedure SetButtonActive(aButton: TWebButton; Active: Boolean);
[async] procedure LoadArchiveAsync;
[async] procedure LoadMemosAsync;
procedure ApplyMemoFilters;
function GetMemoTypeCode(const MemoType: string): string;
function MemoTypeLabel(const MemoType: string): string;
public
class function CreateForm(const AHostId, AComplaintId: string): TFViewComplaintArchive;
end;
implementation
uses
View.Main;
{$R *.dfm}
class function TFViewComplaintArchive.CreateForm(const AHostId, AComplaintId: string): TFViewComplaintArchive;
begin
Result := TFViewComplaintArchive(inherited CreateNew(AHostId));
Result.FComplaintId := AComplaintId;
end;
procedure TFViewComplaintArchive.WebFormCreate(Sender: TObject);
begin
FAllMemos := nil;
FShowCMP := True;
FShowE911 := True;
FShowREM := True;
FShowUNT := True;
WireUi;
LoadArchiveAsync;
end;
procedure TFViewComplaintArchive.WireUi;
begin
// Nothing required here beyond component OnClick handlers;
// all element IDs are bound via the DFM.
end;
procedure TFViewComplaintArchive.SetTextById(const Id, Value: string);
var
el: TJSElement;
begin
el := Document.getElementById(Id);
if el <> nil then
el.innerHTML := Value;
end;
procedure TFViewComplaintArchive.SetHiddenById(const Id: string; Hidden: Boolean);
var
el: TJSHTMLElement;
begin
el := TJSHTMLElement(Document.getElementById(Id));
if el = nil then
Exit;
if Hidden then
el.classList.add('d-none')
else
el.classList.remove('d-none');
end;
procedure TFViewComplaintArchive.SetButtonActive(aButton: TWebButton; Active: Boolean);
var
el: TJSHTMLElement;
begin
if (aButton = nil) or (aButton.ElementHandle = nil) then
Exit;
el := TJSHTMLElement(aButton.ElementHandle);
if Active then
begin
el.classList.add('active');
el.setAttribute('aria-pressed', 'true');
end
else
begin
el.classList.remove('active');
el.setAttribute('aria-pressed', 'false');
end;
end;
[async] procedure TFViewComplaintArchive.LoadArchiveAsync;
var
resp: TXDataClientResponse;
rootObj: TJSObject;
dataObj: TJSObject;
business: string;
begin
resp := await(xdwcComplaintArchive.RawInvokeAsync('IApiService.GetComplaintArchiveDetails', [FComplaintId]));
rootObj := TJSObject(resp.Result);
dataObj := TJSObject(rootObj['data']);
// Summary title (optional)
SetTextById('lbl_summary_title_arc', 'Summary');
SetTextById('lbl_priority_arc', string(dataObj['Priority']));
SetTextById('lbl_dispatch_code_arc', string(dataObj['DispatchCodeDesc']));
SetTextById('lbl_dispatch_district_arc', string(dataObj['DispatchDistrict']));
SetTextById('lbl_address_arc', string(dataObj['Address']));
business := string(dataObj['Business']);
if business <> '' then
begin
SetTextById('lbl_business_arc', business);
SetHiddenById('row_business_arc', False);
end
else
SetHiddenById('row_business_arc', True);
// Status: same logic style as details; simplest is derive from timestamps if you want,
// but archive view can just show blank unless you prefer the full logic.
// If your archive endpoint includes a computed Status, you can display it directly.
if dataObj.hasOwnProperty('Status') then
SetTextById('lbl_status_arc', string(dataObj['Status']))
else
SetTextById('lbl_status_arc', '');
// CFSId is needed for memos
FCfsId := string(dataObj['CFSId']);
await(LoadMemosAsync);
end;
function TFViewComplaintArchive.MemoTypeLabel(const MemoType: string): string;
var
c: string;
begin
c := GetMemoTypeCode(MemoType);
if c = 'CMP' then Exit('CMP');
if c = 'E911' then Exit('E-911');
if c = 'REM' then Exit('REM');
if c = 'UNT' then Exit('UNT');
Result := MemoType;
end;
function TFViewComplaintArchive.GetMemoTypeCode(const MemoType: string): string;
var
mt: string;
begin
mt := LowerCase(Trim(MemoType));
// Match whatever your server returns in GetComplaintMemos:
// Keep these mappings aligned with ComplaintDetails.
if (mt = 'cmp') or (mt = 'complaint') then Exit('CMP');
if (mt = 'e-911') or (mt = 'e911') then Exit('E911');
if (mt = 'rem') or (mt = 'remarks') then Exit('REM');
if (mt = 'unt') or (mt = 'unit') then Exit('UNT');
Result := UpperCase(mt);
end;
[async] procedure TFViewComplaintArchive.LoadMemosAsync;
var
resp: TXDataClientResponse;
rootObj: TJSObject;
dataArr: TJSArray;
i: Integer;
memoObj: TJSObject;
memoType: string;
begin
// Reset dataset
xdwdsRemarksArc.Close;
resp := await(xdwcComplaintArchive.RawInvokeAsync('IApiService.GetComplaintMemos', [FCfsId]));
rootObj := TJSObject(resp.Result);
dataArr := TJSArray(rootObj['data']);
// Save master array for filtering
FAllMemos := dataArr;
// Add/normalize memo type label/code (client-side)
for i := 0 to dataArr.length - 1 do
begin
memoObj := TJSObject(dataArr[i]);
memoType := string(memoObj['MemoType']);
memoObj['MemoTypeCode'] := GetMemoTypeCode(memoType);
memoObj['MemoType'] := MemoTypeLabel(memoType);
end;
ApplyMemoFilters;
end;
procedure TFViewComplaintArchive.ApplyMemoFilters;
var
filtered: TJSArray;
i: Integer;
memoObj: TJSObject;
code: string;
ok: Boolean;
begin
if FAllMemos = nil then
Exit;
filtered := TJSArray.new;
for i := 0 to FAllMemos.length - 1 do
begin
memoObj := TJSObject(FAllMemos[i]);
code := string(memoObj['MemoTypeCode']);
ok := False;
if (code = 'CMP') and FShowCMP then ok := True;
if (code = 'E911') and FShowE911 then ok := True;
if (code = 'REM') and FShowREM then ok := True;
if (code = 'UNT') and FShowUNT then ok := True;
if ok then
filtered.push(memoObj);
end;
xdwdsRemarksArc.SetJsonData(filtered);
xdwdsRemarksArc.Open;
end;
procedure TFViewComplaintArchive.btnCmpArcClick(Sender: TObject);
begin
FShowCMP := not FShowCMP;
SetButtonActive(btnCmpArc, FShowCMP);
ApplyMemoFilters;
end;
procedure TFViewComplaintArchive.btnE911ArcClick(Sender: TObject);
begin
FShowE911 := not FShowE911;
SetButtonActive(btnE911Arc, FShowE911);
ApplyMemoFilters;
end;
procedure TFViewComplaintArchive.btnREMArcClick(Sender: TObject);
begin
FShowREM := not FShowREM;
SetButtonActive(btnREMArc, FShowREM);
ApplyMemoFilters;
end;
procedure TFViewComplaintArchive.btnUntArcClick(Sender: TObject);
begin
FShowUNT := not FShowUNT;
SetButtonActive(btnUntArc, FShowUNT);
ApplyMemoFilters;
end;
procedure TFViewComplaintArchive.btnComplaintViewOnMapArcClick(Sender: TObject);
begin
if Assigned(FViewMain) then
FViewMain.ShowMapFocusComplaint(FComplaintId);
end;
end.
object FViewComplaintDetails: TFViewComplaintDetails
Width = 800
Height = 672
Caption = 'tbl_logs'
CSSLibrary = cssBootstrap
ElementFont = efCSS
object btnHistory: TWebButton
......@@ -361,8 +360,8 @@ object FViewComplaintDetails: TFViewComplaintDetails
ListSource = wdsWarnings
end
object btnComplaintViewOnMap: TWebButton
Left = 510
Top = 430
Left = 687
Top = 496
Width = 96
Height = 25
Caption = 'Map'
......@@ -376,12 +375,12 @@ object FViewComplaintDetails: TFViewComplaintDetails
end
object xdwcComplaintDetails: TXDataWebClient
Connection = DMConnection.ApiConnection
Left = 378
Top = 424
Left = 384
Top = 422
end
object xdwdsRemarks: TXDataWebDataSet
Left = 40
Top = 350
Top = 348
object xdwdsRemarksMemoId: TStringField
FieldName = 'MemoId'
end
......@@ -403,12 +402,15 @@ object FViewComplaintDetails: TFViewComplaintDetails
end
object wdsRemarks: TWebDataSource
DataSet = xdwdsRemarks
Left = 126
Top = 350
Left = 128
Top = 348
end
object xdwdsHistory: TXDataWebDataSet
Left = 238
Top = 348
object xdwdsHistoryComplaintId: TStringField
FieldName = 'ComplaintId'
end
object xdwdsHistoryComplaint: TStringField
FieldName = 'Complaint'
end
......@@ -428,11 +430,11 @@ object FViewComplaintDetails: TFViewComplaintDetails
object wdsHistory: TWebDataSource
DataSet = xdwdsHistory
Left = 328
Top = 350
Top = 348
end
object xdwdsContacts: TXDataWebDataSet
Left = 436
Top = 352
Left = 438
Top = 348
object xdwdsContactsName: TStringField
FieldName = 'Name'
end
......@@ -448,12 +450,12 @@ object FViewComplaintDetails: TFViewComplaintDetails
end
object wdsContacts: TWebDataSource
DataSet = xdwdsContacts
Left = 530
Top = 352
Left = 532
Top = 348
end
object xdwdsWarnings: TXDataWebDataSet
Left = 634
Top = 492
Left = 612
Top = 422
object xdwdsWarningsCodeDesc: TStringField
FieldName = 'CodeDesc'
end
......@@ -466,7 +468,7 @@ object FViewComplaintDetails: TFViewComplaintDetails
end
object wdsWarnings: TWebDataSource
DataSet = xdwdsWarnings
Left = 728
Top = 492
Left = 712
Top = 422
end
end
......@@ -97,8 +97,8 @@
<button id="btn_complaint_view_on_map"
type="button"
class="btn btn-primary btn-sm shadow position-fixed"
style="right: 12px; bottom: 72px; z-index: 1040;">
View On Map
style="right: 15px; bottom: 25px; z-index: 1040;">
Map
</button>
</div>
......@@ -54,6 +54,7 @@ type
btnUnt: TWebButton;
lstWarnings: TWebDBListControl;
btnComplaintViewOnMap: TWebButton;
xdwdsHistoryComplaintId: TStringField;
procedure btnRemarksClick(Sender: TObject);
procedure btnHistoryClick(Sender: TObject);
......@@ -560,6 +561,7 @@ begin
rootObj := TJSObject(resp.Result);
dataObj := TJSObject(rootObj['data']);
complaintText := string(dataObj['Complaint']);
priorityText := string(dataObj['Priority']);
dispatchDescText := string(dataObj['DispatchCodeDesc']);
......
......@@ -56,8 +56,8 @@ object FViewComplaints: TFViewComplaints
'ustify-content-center gap-1"><button type="button" class="btn bt' +
'n-primary btn-sm complaint-details-btn" data-id="(%ComplaintId%)' +
'">Details</button><button type="button" class="btn btn-primary b' +
'tn-sm btn-complaint-map" data-id="(%ComplaintId%)">View On Map</' +
'button></div></div></div>'
'tn-sm btn-complaint-map" data-id="(%ComplaintId%)">Map</button><' +
'/div></div></div>'
ListSource = wdsComplaints
end
object xdwcComplaints: TXDataWebClient
......@@ -121,10 +121,4 @@ object FViewComplaints: TFViewComplaints
Left = 156
Top = 410
end
object tmrRefresh: TWebTimer
Interval = 30000
OnTimer = tmrRefreshTimer
Left = 164
Top = 44
end
end
......@@ -31,20 +31,19 @@ type
xdwdsComplaintsPriorityColor: TStringField;
xdwdsComplaintsPriorityTextColor: TStringField;
xdwdsComplaintsDistrictSector: TStringField;
tmrRefresh: TWebTimer;
xdwdsComplaintsBusiness: TStringField;
procedure WebFormCreate(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure tmrRefreshTimer(Sender: TObject);
procedure WebFormDestroy(Sender: TObject);
private
FSelectProc: TSelectProc;
FLoading: Boolean;
FFirstLoad: Boolean;
[async] procedure GetComplaints;
procedure HandleListClick(e: TJSMouseEvent);
procedure ShowHideBusinessRows;
public
property OnShowDetails: TSelectProc read FSelectProc write FSelectProc;
procedure RefreshData;
end;
var
......@@ -57,19 +56,12 @@ implementation
procedure TFViewComplaints.WebFormCreate(Sender: TObject);
begin
Document.addEventListener('click', @HandleListClick);
ShowSpinner('spinner');
tmrRefresh.Enabled := False;
FFirstLoad := True;
GetComplaints;
tmrRefresh.Enabled := True;
asm
if (!window.showComplaintDetails) {
window.showComplaintDetails = function (id) {
console.log('JS bridge showComplaintDetails called, id=', id);
try {
pas['View.Main'].FViewMain.ShowComplaintDetails(id);
} catch (e) {
console.log('Error in TFViewMain.ShowComplaintDetails', e);
}
pas['View.Main'].FViewMain.ShowComplaintDetails(id);
};
}
end;
......@@ -139,18 +131,12 @@ begin
end;
end;
procedure TFViewComplaints.WebFormDestroy(Sender: TObject);
begin
Document.removeEventListener('click', @HandleListClick);
end;
//Note: HTML for individual complaint cards can be found in the twebdblistcontrol HTMLString property
procedure TFViewComplaints.btnRefreshClick(Sender: TObject);
begin
GetComplaints;
end;
[async] procedure TFViewComplaints.GetComplaints;
var
xdcResponse: TXDataClientResponse;
......@@ -161,7 +147,9 @@ begin
Exit;
FLoading := True;
ShowSpinner('spinner');
if FFirstLoad then
ShowSpinner('spinner');
try
try
xdcResponse := await(xdwcComplaints.RawInvokeAsync('IApiService.GetComplaintList', []));
......@@ -182,13 +170,18 @@ begin
Utils.ShowErrorModal(E.Message);
end;
finally
HideSpinner('spinner');
FLoading := False;
if FFirstLoad then
begin
HideSpinner('spinner');
FFirstLoad := False;
end;
end;
end;
procedure TFViewComplaints.tmrRefreshTimer(Sender: TObject);
procedure TFViewComplaints.RefreshData;
begin
Console.Log('Complaints.RefreshData');
GetComplaints;
end;
......
......@@ -76,7 +76,6 @@ procedure TFViewEditUser.btnCancelClick(Sender: TObject);
// Cancels the edit or addition
begin
Info := 'Failure:Changes discarded!';
FViewMain.ShowUserForm(Info);
end;
procedure TFViewEditUser.btnCloseNotificationClick(Sender: TObject);
......@@ -222,7 +221,6 @@ begin
if (not Info.Contains('Failure')) then
begin
console.log('Navigating back to user list...');
FViewMain.ShowUserForm(Info);
end
else
begin
......
object FViewMain: TFViewMain
Width = 640
Height = 586
Width = 1208
Height = 810
CSSLibrary = cssBootstrap
ElementFont = efCSS
OnCreate = WebFormCreate
......@@ -16,18 +16,6 @@ object FViewMain: TFViewMain
Visible = False
WidthPercent = 100.000000000000000000
end
object wllblUserProfile: TWebLinkLabel
Left = 529
Top = 21
Width = 63
Height = 15
ElementID = 'dropdown.menu.userprofile'
Visible = False
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnClick = wllblUserProfileClick
Caption = ' User Profile'
end
object wllblLogout: TWebLinkLabel
Left = 551
Top = 85
......@@ -61,7 +49,6 @@ object FViewMain: TFViewMain
Visible = False
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnClick = lblCallsListClick
Caption = 'Calls'
end
object lblUsers: TWebLinkLabel
......@@ -74,7 +61,6 @@ object FViewMain: TFViewMain
Visible = False
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnClick = lblUsersClick
Caption = 'Users'
end
object lblMainTitle: TWebLabel
......@@ -88,12 +74,12 @@ object FViewMain: TFViewMain
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object WebPanel1: TWebPanel
object pnlMain: TWebPanel
Left = 136
Top = 110
Width = 471
Height = 369
ElementID = 'main.webpanel'
ElementID = 'pnl_main'
ChildOrder = 3
TabOrder = 0
end
......@@ -108,7 +94,7 @@ object FViewMain: TFViewMain
end
object WebMemo1: TWebMemo
Left = 136
Top = 467
Top = 469
Width = 471
Height = 83
ElementID = 'main.debugmemo'
......@@ -121,8 +107,8 @@ object FViewMain: TFViewMain
WidthPercent = 100.000000000000000000
end
object btnMap: TWebButton
Left = 148
Top = 58
Left = 212
Top = 580
Width = 59
Height = 25
Caption = 'Map'
......@@ -135,8 +121,8 @@ object FViewMain: TFViewMain
OnClick = btnMapClick
end
object btnComplaints: TWebButton
Left = 213
Top = 58
Left = 285
Top = 580
Width = 68
Height = 25
Caption = 'Complaints'
......@@ -149,8 +135,8 @@ object FViewMain: TFViewMain
OnClick = btnComplaintsClick
end
object btnUnits: TWebButton
Left = 294
Top = 58
Left = 364
Top = 580
Width = 59
Height = 25
Caption = 'Units'
......@@ -162,6 +148,55 @@ object FViewMain: TFViewMain
WidthPercent = 100.000000000000000000
OnClick = btnUnitsClick
end
object pnlMap: TWebPanel
Left = 708
Top = 99
Width = 237
Height = 436
ElementID = 'pnl_map'
ChildOrder = 3
TabOrder = 6
end
object pnlUnits: TWebPanel
Left = 740
Top = 180
Width = 227
Height = 139
ElementID = 'pnl_units'
ChildOrder = 3
TabOrder = 7
end
object pnlComplaints: TWebPanel
Left = 740
Top = 346
Width = 227
Height = 145
ElementID = 'pnl_complaints'
ChildOrder = 3
TabOrder = 8
end
object pnlDetails: TWebPanel
Left = 992
Top = 277
Width = 163
Height = 114
ElementID = 'pnl_details'
ChildOrder = 15
ElementFont = efCSS
TabOrder = 9
object btnDetailsModalClose: TWebButton
Left = 127
Top = 8
Width = 28
Height = 23
ElementID = 'btn_details_modal_close'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnClick = btnDetailsModalCloseClick
end
end
object xdwcBadgeCounts: TXDataWebClient
Connection = DMConnection.ApiConnection
Left = 44
......@@ -173,4 +208,10 @@ object FViewMain: TFViewMain
Left = 42
Top = 360
end
object tmrGlobalRefresh: TWebTimer
Interval = 30000
OnTimer = tmrGlobalRefreshTimer
Left = 42
Top = 434
end
end
......@@ -13,16 +13,33 @@
<!-- Right: Connection label -->
<span id="view.main.lblconnection" class="navbar-text text-light ms-auto"></span>
</div>
</div>
</nav>
<!-- Main content: fills space between navbars -->
<main id="main.webpanel" class="flex-grow-1 position-relative p-0 overflow-hidden" style="min-height:0;">
<!-- TWebPanel content gets injected here -->
</main>
<div id="pnl_main" class="flex-grow-1 position-relative p-0 overflow-hidden d-none" style="min-height:0;"></div>
<div id="pnl_map" class="flex-grow-1 position-relative p-0 overflow-hidden" style="min-height:0;"></div>
<div id="pnl_units" class="flex-grow-1 position-relative p-0 overflow-hidden d-none" style="min-height:0;"></div>
<div id="pnl_complaints" class="flex-grow-1 position-relative p-0 overflow-hidden d-none" style="min-height:0;"></div>
<!-- Details modal (new panel pnl_details) -->
<div id="pnl_details"
class="position-fixed top-0 start-0 w-100 h-100 d-none d-flex justify-content-center align-items-center"
style="background: rgba(0,0,0,0.5); z-index:1060;">
<div class="card shadow-lg w-100 mx-2 d-flex flex-column" style="max-width: 98vw; height: 96%;">
<div class="card-header d-flex align-items-center justify-content-between">
<h5 class="card-title mb-0" id="lbl_details_title">Details</h5>
<button id="btn_details_modal_close" type="button" class="btn-close" aria-label="Close"></button>
</div>
<div class="card-body p-0 flex-grow-1 overflow-hidden" style="min-height:0;">
<div id="pnl_details_host" class="h-100"></div>
</div>
</div>
</div>
<!-- Bottom Nav -->
<nav class="navbar navbar-dark bg-primary py-2 flex-shrink-0">
<nav id="bottom_nav" class="navbar navbar-dark bg-primary py-2 flex-shrink-0">
<div class="container-fluid">
<div class="d-flex justify-content-center gap-3 w-100">
<button id="view.main.btnmap" type="button" class="btn btn-primary">
......@@ -86,4 +103,3 @@
</div>
</div>
</div>
......@@ -6,14 +6,13 @@ uses
System.SysUtils, System.Classes, JS, Web, WEBLib.Graphics, WEBLib.Controls,
WEBLib.Forms, WEBLib.Dialogs, WEBLib.ExtCtrls, Vcl.Controls, Vcl.StdCtrls,
WEBLib.StdCtrls, Data.DB, XData.Web.JsonDataset, XData.Web.Dataset,
App.Types, ConnectionModule, XData.Web.Client;
App.Types, ConnectionModule, XData.Web.Client, View.Map, View.Units, View.Complaints;
type
TFViewMain = class(TWebForm)
lblUsername: TWebLabel;
wllblUserProfile: TWebLinkLabel;
wllblLogout: TWebLinkLabel;
WebPanel1: TWebPanel;
pnlMain: TWebPanel;
WebMessageDlg1: TWebMessageDlg;
lblAppTitle: TWebLabel;
WebMemo1: TWebMemo;
......@@ -25,39 +24,59 @@ type
btnUnits: TWebButton;
tmrBadgeCounts: TWebTimer;
lblMainTitle: TWebLabel;
pnlMap: TWebPanel;
pnlUnits: TWebPanel;
pnlComplaints: TWebPanel;
tmrGlobalRefresh: TWebTimer;
pnlDetails: TWebPanel;
btnDetailsModalClose: TWebButton;
procedure WebFormCreate(Sender: TObject);
procedure mnuLogoutClick(Sender: TObject);
procedure wllblUserProfileClick(Sender: TObject);
procedure wllblLogoutClick(Sender: TObject);
procedure lblCallsListClick(Sender: TObject);
procedure lblUsersClick(Sender: TObject);
procedure btnUnitsClick(Sender: TObject);
procedure btnComplaintsClick(Sender: TObject);
procedure btnMapClick(Sender: TObject);
procedure tmrBadgeCountsTimer(Sender: TObject);
procedure tmrGlobalRefreshTimer(Sender: TObject);
procedure btnDetailsModalCloseClick(Sender: TObject);
private
{ Private declarations }
FUserInfo: string;
FSearchSettings: string;
FChildForm: TWebForm;
FMapForm: TFViewMap;
FUnitsForm: TFViewUnits;
FComplaintsForm: TFViewComplaints;
FDetailsForm: TWebForm;
FLogoutProc: TLogoutProc;
FSearchProc: TSearchProc;
procedure ShowCrudForm( AFormClass: TWebFormClass );
//procedure EditUser( AParam, BParam, CParam, DParam, EParam: string);
function GetUserInfo: string;
[async] procedure RefreshBadgesAsync;
procedure ShowUnitDetails(UnitId: string);
procedure SetHeaderTitle(const title: string);
procedure HideDetailsModal;
procedure ShowDetailsModal(const titleText: string);
type TActivePanel = (apNone, apMap, apUnits, apComplaints);
var
FActivePanel: TActivePanel;
FGlobalRefreshTick: Integer;
FMapRefreshTick: Integer;
FUnitsRefreshTick: Integer;
FComplaintsRefreshTick: Integer;
procedure SetActivePanel(panel: TActivePanel);
procedure MarkPanelCreatedUpToDate(panel: TActivePanel);
procedure RefreshPanelIfNeeded(panel: TActivePanel);
procedure RefreshActivePanelFromTimer;
public
{ Public declarations }
class procedure Display(LogoutProc: TLogoutProc);
procedure ShowForm( AFormClass: TWebFormClass );
procedure EditUser( Mode, FullName, Username, Phone, Email: string; admin, active: boolean);
procedure ShowUserForm(Info: string);
procedure ShowComplaintDetails(ComplaintId: string);
procedure SetActiveNavButton(const BtnId: string);
procedure ShowMapFocusUnit(const unitId: string);
procedure ShowMapFocusComplaint(const complaintId: string);
procedure HidePanel(aPanel: TWebPanel);
procedure ShowPanel(aPanel: TWebPanel);
end;
var
......@@ -69,10 +88,7 @@ uses
Auth.Service,
View.Login,
View.UserProfile,
View.Map,
View.Complaints,
View.ComplaintDetails,
View.Units,
View.Admin,
View.Users,
View.EditUser,
......@@ -81,104 +97,156 @@ uses
{$R *.dfm}
const
DETAILS_HOST_ID = 'pnl_details_host';
procedure TFViewMain.WebFormCreate(Sender: TObject);
var
userName: string;
begin
FUserInfo := GetUserInfo;
userName := JS.toString(AuthService.TokenPayload.Properties['user_name']);
lblUsername.Caption := ' ' + userName.ToLower + ' ';
FChildForm := nil;
if (not (JS.toBoolean(AuthService.TokenPayload.Properties['user_admin']))) then
FDetailsForm := nil;
FActivePanel := apNone;
FGlobalRefreshTick := 0;
FMapRefreshTick := 0;
FUnitsRefreshTick := 0;
FComplaintsRefreshTick := 0;
if (not (JS.toBoolean(AuthService.TokenPayload.Properties['user_admin']))) then
lblUsers.Visible := false;
Utils.HideSpinner('spinner');
ShowForm(TFViewMap);
HidePanel(pnlMain);
ShowPanel(pnlMap);
HidePanel(pnlUnits);
HidePanel(pnlComplaints);
HidePanel(pnlDetails);
if not Assigned(FMapForm) then
begin
Application.CreateForm(TFViewMap, pnlMap.ElementID, TWebForm(FMapForm));
MarkPanelCreatedUpToDate(apMap);
end;
SetHeaderTitle('Map');
SetActiveNavButton('view.main.btnmap');
SetActivePanel(apMap);
RefreshBadgesAsync;
end;
procedure TFViewMain.SetHeaderTitle(const title: string);
var el: TJSElement;
procedure TFViewMain.SetActivePanel(panel: TActivePanel);
begin
el := Document.getElementById('lbl_main_title');
if el <> nil then
el.innerHTML := title
else
console.log('SetHeaderTitle: lbl_main_title not found');
FActivePanel := panel;
end;
procedure TFViewMain.lblUsersClick(Sender: TObject);
procedure TFViewMain.MarkPanelCreatedUpToDate(panel: TActivePanel);
begin
ShowForm(TFViewUsers);
case panel of
apMap: FMapRefreshTick := FGlobalRefreshTick;
apUnits: FUnitsRefreshTick := FGlobalRefreshTick;
apComplaints: FComplaintsRefreshTick := FGlobalRefreshTick;
end;
end;
procedure TFViewMain.lblCallsListClick(Sender: TObject);
procedure TFViewMain.RefreshPanelIfNeeded(panel: TActivePanel);
var
needsRefresh: Boolean;
begin
ShowForm(TFViewComplaints);
if FGlobalRefreshTick <= 0 then
Exit;
needsRefresh := False;
case panel of
apMap: needsRefresh := (FMapRefreshTick <> FGlobalRefreshTick);
apUnits: needsRefresh := (FUnitsRefreshTick <> FGlobalRefreshTick);
apComplaints: needsRefresh := (FComplaintsRefreshTick <> FGlobalRefreshTick);
end;
if not needsRefresh then
Exit;
Console.Log('GlobalRefresh: refreshing panel=' + IntToStr(Ord(panel)) + ' at tick=' + IntToStr(FGlobalRefreshTick));
case panel of
apMap:
if Assigned(FMapForm) then
FMapForm.RefreshData;
apUnits:
if Assigned(FUnitsForm) then
FUnitsForm.RefreshData;
apComplaints:
if Assigned(FComplaintsForm) then
FComplaintsForm.RefreshData;
end;
case panel of
apMap: FMapRefreshTick := FGlobalRefreshTick;
apUnits: FUnitsRefreshTick := FGlobalRefreshTick;
apComplaints: FComplaintsRefreshTick := FGlobalRefreshTick;
end;
end;
procedure TFViewMain.mnuLogoutClick(Sender: TObject);
procedure TFViewMain.RefreshActivePanelFromTimer;
begin
FLogoutProc;
RefreshPanelIfNeeded(FActivePanel);
end;
procedure TFViewMain.wllblLogoutClick(Sender: TObject);
procedure TFViewMain.SetHeaderTitle(const title: string);
var el: TJSElement;
begin
FLogoutProc;
el := Document.getElementById('lbl_main_title');
if el <> nil then
el.innerHTML := title
else
console.log('SetHeaderTitle: lbl_main_title not found');
end;
procedure TFViewMain.wllblUserProfileClick(Sender: TObject);
procedure TFViewMain.mnuLogoutClick(Sender: TObject);
begin
ShowCrudForm(TFViewUserProfile);
FLogoutProc;
end;
function TFViewMain.GetUserInfo: string;
var
userStr: string;
procedure TFViewMain.wllblLogoutClick(Sender: TObject);
begin
userStr := '?username=' + JS.toString(AuthService.TokenPayload.Properties['user_name']);
userStr := userStr + '&fullname=' + JS.toString(AuthService.TokenPayload.Properties['user_fullname']);
userStr := userStr + '&agency=' + JS.toString(AuthService.TokenPayload.Properties['user_agency']);
userStr := userStr + '&badge=' + JS.toString(AuthService.TokenPayload.Properties['user_badge']);
userStr := userStr + '&userid=' + JS.toString(AuthService.TokenPayload.Properties['user_id']);
userStr := userStr + '&personnelid=' + JS.toString(AuthService.TokenPayload.Properties['user_personnelid']);
Result := userStr;
FLogoutProc;
end;
procedure TFViewMain.btnComplaintsClick(Sender: TObject);
begin
SetHeaderTitle('Complaints');
SetActiveNavButton('view.main.btncomplaints');
ShowForm(TFViewComplaints);
end;
if (FChildForm is TFViewComplaints) then
TFViewComplaints(FChildForm).OnShowDetails :=
procedure(AComplaintId: string)
begin
ShowComplaintDetails(AComplaintId);
end;
procedure TFViewMain.btnDetailsModalCloseClick(Sender: TObject);
begin
HideDetailsModal;
end;
procedure TFViewMain.btnMapClick(Sender: TObject);
begin
SetHeaderTitle('Map');
SetActiveNavButton('view.main.btnmap');
ShowForm(TFViewMap);
end;
procedure TFViewMain.btnUnitsClick(Sender: TObject);
begin
SetHeaderTitle('Units');
SetActiveNavButton('view.main.btnunits');
ShowForm(TFViewUnits);
end;
class procedure TFViewMain.Display(LogoutProc: TLogoutProc);
begin
if Assigned(FViewMain) then
......@@ -188,47 +256,130 @@ begin
end;
procedure TFViewMain.ShowCrudForm(AFormClass: TWebFormClass);
procedure TFViewMain.ShowForm(AFormClass: TWebFormClass);
begin
ShowForm(AFormClass);
end;
HideDetailsModal;
if AFormClass = TFViewMap then
begin
ShowPanel(pnlMap);
HidePanel(pnlUnits);
HidePanel(pnlComplaints);
HidePanel(pnlMain);
procedure TFViewMain.ShowForm(AFormClass: TWebFormClass);
begin
if Assigned(FChildForm) then
SetHeaderTitle('Map');
SetActiveNavButton('view.main.btnmap');
SetActivePanel(apMap);
if not Assigned(FMapForm) then
begin
Application.CreateForm(TFViewMap, pnlMap.ElementID, TWebForm(FMapForm));
MarkPanelCreatedUpToDate(apMap);
end
else
RefreshPanelIfNeeded(apMap);
Exit;
end;
if AFormClass = TFViewUnits then
begin
HidePanel(pnlMap);
ShowPanel(pnlUnits);
HidePanel(pnlComplaints);
HidePanel(pnlMain);
SetHeaderTitle('Units');
SetActiveNavButton('view.main.btnunits');
SetActivePanel(apUnits);
if not Assigned(FUnitsForm) then
begin
Application.CreateForm(TFViewUnits, pnlUnits.ElementID, TWebForm(FUnitsForm));
MarkPanelCreatedUpToDate(apUnits);
end
else
RefreshPanelIfNeeded(apUnits);
Exit;
end;
if AFormClass = TFViewComplaints then
begin
HidePanel(pnlMap);
HidePanel(pnlUnits);
ShowPanel(pnlComplaints);
HidePanel(pnlMain);
SetHeaderTitle('Complaints');
SetActiveNavButton('view.main.btncomplaints');
SetActivePanel(apComplaints);
if not Assigned(FComplaintsForm) then
begin
Application.CreateForm(TFViewComplaints, pnlComplaints.ElementID, TWebForm(FComplaintsForm));
MarkPanelCreatedUpToDate(apComplaints);
end
else
RefreshPanelIfNeeded(apComplaints);
Exit;
end;
// everything else (admin/users/etc)
SetActivePanel(apNone);
HidePanel(pnlMap);
HidePanel(pnlUnits);
HidePanel(pnlComplaints);
ShowPanel(pnlMain);
if Assigned(FChildForm) and (FChildForm <> FMapForm) and (FChildForm <> FUnitsForm) and (FChildForm <> FComplaintsForm) then
FChildForm.Free;
Application.CreateForm(AFormClass, WebPanel1.ElementID, FChildForm);
Application.CreateForm(AFormClass, pnlMain.ElementID, FChildForm);
end;
procedure TFViewMain.EditUser( Mode, FullName, Username, Phone, Email: string; Admin, Active: boolean);
procedure TFViewMain.HidePanel(aPanel: TWebPanel);
var
el: TJSHTMLElement;
begin
if Assigned(FChildForm) then
FChildForm.Free;
FChildForm := TFViewEditUser.CreateForm(WebPanel1.ElementID, Mode, FullName, Username, Phone, Email, Admin, Active);
if (aPanel = nil) or (aPanel.ElementHandle = nil) then
Exit;
el := TJSHTMLElement(aPanel.ElementHandle);
el.classList.add('d-none');
end;
procedure TFViewMain.ShowUserForm(Info: string);
procedure TFViewMain.ShowPanel(aPanel: TWebPanel);
var
el: TJSHTMLElement;
begin
if Assigned(FChildForm) then
FChildForm.Free;
FChildForm := TFViewUsers.CreateForm(WebPanel1.ElementID, Info);
if (aPanel = nil) or (aPanel.ElementHandle = nil) then
Exit;
el := TJSHTMLElement(aPanel.ElementHandle);
el.classList.remove('d-none');
end;
procedure TFViewMain.ShowComplaintDetails(ComplaintId: string);
begin
SetHeaderTitle('Complaint Details');
if Assigned(FChildForm) then
FChildForm.Free;
FChildForm := TFViewComplaintDetails.CreateForm(WebPanel1.ElementID, ComplaintId);
ShowDetailsModal('Complaint Details');
if Assigned(FDetailsForm) then
FDetailsForm.Free;
FDetailsForm := TFViewComplaintDetails.CreateForm(DETAILS_HOST_ID, ComplaintId);
end;
procedure TFViewMain.ShowUnitDetails(UnitId: string);
begin
SetHeaderTitle('Unit Details');
if Assigned(FChildForm) then
FChildForm.Free;
FChildForm := TFViewUnitDetails.CreateForm(WebPanel1.ElementID, UnitId);
ShowDetailsModal('Unit Details');
if Assigned(FDetailsForm) then
FDetailsForm.Free;
FDetailsForm := TFViewUnitDetails.CreateForm(DETAILS_HOST_ID, UnitId);
end;
......@@ -240,12 +391,10 @@ begin
c := TJSHTMLElement(btnComplaints.ElementHandle);
u := TJSHTMLElement(btnUnits.ElementHandle);
// clear
m.classList.remove('active');
c.classList.remove('active');
u.classList.remove('active');
// set
if btnId = 'view.main.btnmap' then
m.classList.add('active')
else if btnId = 'view.main.btncomplaints' then
......@@ -262,6 +411,13 @@ begin
end;
procedure TFViewMain.tmrGlobalRefreshTimer(Sender: TObject);
begin
Inc(FGlobalRefreshTick);
Console.Log('GlobalRefresh tick=' + IntToStr(FGlobalRefreshTick) + ' activePanel=' + IntToStr(Ord(FActivePanel)));
RefreshActivePanelFromTimer;
end;
[async] procedure TFViewMain.RefreshBadgesAsync;
var
resp: TXDataClientResponse;
......@@ -296,8 +452,6 @@ procedure TFViewMain.ShowMapFocusUnit(const unitId: string);
var
pendingUnitId: string;
begin
SetHeaderTitle('Map');
SetActiveNavButton('view.main.btnmap');
ShowForm(TFViewMap);
pendingUnitId := unitId;
......@@ -305,8 +459,8 @@ begin
window.setTimeout(
procedure
begin
if (FChildForm <> nil) and (FChildForm is TFViewMap) then
TFViewMap(FChildForm).FocusUnit(pendingUnitId);
if Assigned(FMapForm) then
FMapForm.FocusUnit(pendingUnitId);
end, 50);
end;
......@@ -314,19 +468,43 @@ procedure TFViewMain.ShowMapFocusComplaint(const complaintId: string);
var
pendingComplaintId: string;
begin
SetHeaderTitle('Map');
SetActiveNavButton('view.main.btnmap');
ShowForm(TFViewMap);
pendingComplaintId := complaintId;
pendingComplaintId := complaintId;
window.setTimeout(
procedure
begin
if (FChildForm <> nil) and (FChildForm is TFViewMap) then
TFViewMap(FChildForm).FocusComplaint(pendingComplaintId);
if Assigned(FMapForm) then
FMapForm.FocusComplaint(pendingComplaintId);
end, 50);
end;
//------------------------------------------------------------------------------
procedure TFViewMain.HideDetailsModal;
begin
HidePanel(pnlDetails);
if Assigned(FDetailsForm) then
begin
FDetailsForm.Free;
FDetailsForm := nil;
end;
end;
procedure TFViewMain.ShowDetailsModal(const titleText: string);
var
el: TJSElement;
begin
ShowPanel(pnlDetails);
el := Document.getElementById('lbl_details_title');
if el <> nil then
el.innerHTML := titleText;
end;
end.
......@@ -72,17 +72,11 @@ object FViewMap: TFViewMap
Left = 232
Top = 696
end
object tmrRefresh: TWebTimer
Interval = 30000
OnTimer = tmrRefreshTimer
Left = 358
Top = 696
end
object tmrLocate: TWebTimer
Enabled = False
Interval = 100
OnTimer = tmrLocateTimer
Left = 174
Top = 74
Left = 222
Top = 52
end
end
......@@ -23,7 +23,7 @@
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="map_filter_location">
<label class="form-check-label" for="map_filter_location">Show Location</label>
<label class="form-check-label" for="map_filter_location">Show My Location</label>
</div>
</div>
<div class="d-grid gap-2 mt-4">
......@@ -50,7 +50,6 @@
class="btn btn-primary border shadow position-absolute bottom-0 end-0 me-2 mb-4"
style="z-index:1000;">
<i class="fa fa-crosshairs"></i>
<span class="d-none d-sm-inline">Locate</span>
</button>
<!-- Filters (top-right) -->
......
......@@ -16,7 +16,6 @@ type
lfMap: TTMSFNCLeaflet;
httpReqGeoJson: TWebHttpRequest;
xdwcMap: TXDataWebClient;
tmrRefresh: TWebTimer;
btnFindLocation: TWebButton;
tmrLocate: TWebTimer;
......@@ -25,7 +24,6 @@ type
procedure lfMapCustomizeMarker(Sender: TObject;
var ACustomizeMarker: string);
procedure lfMapCustomizeCSS(Sender: TObject; var ACustomizeCSS: string);
procedure tmrRefreshTimer(Sender: TObject);
procedure btnFindLocationClick(Sender: TObject);
procedure tmrLocateTimer(Sender: TObject);
private
......@@ -50,6 +48,7 @@ type
public
procedure FocusUnit(const unitId: string);
procedure FocusComplaint(const complaintId: string);
procedure RefreshData;
end;
var
......@@ -70,20 +69,16 @@ begin
httpReqGeoJson.Execute;
asm
window.showComplaintDetails = function (id) {
console.log('JS bridge showComplaintDetails called, id=', id);
try {
pas['View.Main'].FViewMain.ShowComplaintDetails(id);
} catch (e) {
console.log('Error in TFViewMain.ShowComplaintDetails', e);
}
};
window.showUnitDetails = function (id) {
console.log('JS bridge showUnitDetails called, id=', id);
try {
pas['View.Main'].FViewMain.ShowUnitDetails(id);
} catch (e) {
console.log('Error in TFViewMain.ShowUnitDetails', e);
}
};
end;
......@@ -155,9 +150,7 @@ begin
try
lfMap.Polygons.Clear;
Console.Log('GeoJSON len=' + AResponse.Length.ToString);
lfMap.LoadGeoJSONFromText(AResponse, True, Trim(FPendingUnitId) = '');
Console.Log('Loaded polygons count=' + lfMap.Polygons.Count.ToString);
for i := 0 to lfMap.Polygons.Count - 1 do
begin
......@@ -290,7 +283,6 @@ begin
// --- Swap Markers (no blank map while loading) ---------------------------
lfMap.BeginUpdate;
try
// Delete old unit/complaint markers right before adding new ones
for i := lfMap.Markers.Count - 1 downto 0 do
begin
m := lfMap.Markers[i];
......@@ -299,7 +291,7 @@ begin
lfMap.Markers.Delete(i);
end;
// Add unit markers
// Unit markers
if unitsData <> nil then
begin
for i := 0 to unitsData.Length - 1 do
......@@ -404,12 +396,11 @@ begin
'</div>';
m.DataString := 'unit|' + unitId;
console.log('Unit marker ds=' + m.DataString);
m.IconURL := CarIconForDistrict(dist);
end;
end;
// Add complaint markers
// Complaint markers
if complaintsData <> nil then
begin
for i := 0 to complaintsData.Length - 1 do
......@@ -645,14 +636,6 @@ begin
FDoFocusZoom := False;
end;
procedure TFViewMap.tmrRefreshTimer(Sender: TObject);
begin
if FLoadingPoints then
Exit;
LoadPointsAsync(False);
end;
procedure TFViewMap.btnFindLocationClick(Sender: TObject);
var
coord: TTMSFNCMapsCoordinateRec;
......@@ -662,6 +645,13 @@ begin
coord := CreateCoordinate(userLocationMarker.Latitude, userLocationMarker.Longitude);
lfMap.SetCenterCoordinate(coord);
FPendingFocusCoord := coord;
FPendingFocusZoom := 17;
FDoFocusZoom := True;
tmrLocate.Interval := 250;
tmrLocate.Enabled := True;
end;
......@@ -758,6 +748,12 @@ begin
end;
procedure TFViewMap.RefreshData;
begin
Console.Log('Map.RefreshData');
LoadPointsAsync(False);
end;
end.
......@@ -95,7 +95,7 @@
<button id="btn_unit_view_on_map"
type="button"
class="btn btn-primary btn-sm shadow position-fixed"
style="right: 12px; bottom: 72px; z-index: 1040;">
style="right: 15px; bottom: 25px; z-index: 1040;">
Map
</button>
</div>
......
......@@ -53,7 +53,7 @@ object FViewUnits: TFViewUnits
'pe="button" class="btn btn-primary btn-sm btn-unit-details" data' +
'-unitid="(%UnitId%)">Details</button> <button type="button"' +
' class="btn btn-primary btn-sm btn-unit-map" data-unitid="(%Unit' +
'Id%)">View On Map</button> </div> </div></div>'
'Id%)">Map</button> </div> </div></div>'
ListSource = wdsUnits
end
object wdsUnits: TWebDataSource
......@@ -96,10 +96,4 @@ object FViewUnits: TFViewUnits
Left = 58
Top = 410
end
object tmrRefresh: TWebTimer
Interval = 30000
OnTimer = tmrRefreshTimer
Left = 172
Top = 22
end
end
......@@ -25,16 +25,14 @@ type
xdwdsUnitsOfficer1: TStringField;
xdwdsUnitsOfficer2: TStringField;
xdwdsUnitsCallType: TStringField;
tmrRefresh: TWebTimer;
procedure WebFormCreate(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure tmrRefreshTimer(Sender: TObject);
private
FLoading: Boolean;
FFirstLoad: Boolean;
[async] procedure GetUnits;
procedure HandleListClick(e: TJSMouseEvent);
public
procedure RefreshData;
end;
var
......@@ -49,19 +47,13 @@ procedure TFViewUnits.WebFormCreate(Sender: TObject);
begin
DMConnection.ApiConnection.Connected := True;
Document.addEventListener('click', @HandleListClick);
tmrRefresh.Enabled := False;
FFirstLoad := True;
GetUnits;
tmrRefresh.Enabled := True;
asm
if (!window.showUnitDetails) {
window.showUnitDetails = function (id) {
console.log('JS bridge showUnitDetails called, id=', id);
try {
pas['View.Main'].FViewMain.ShowUnitDetails(id);
} catch (e) {
console.log('Error in TFViewMain.ShowUnitDetails', e);
}
pas['View.Main'].FViewMain.ShowUnitDetails(id);
};
}
end;
......@@ -106,68 +98,56 @@ begin
e.stopPropagation;
asm
try {
pas['View.Main'].FViewMain.ShowMapFocusUnit(unitId);
} catch (e) {
console.log('ShowMapFocusUnit failed', e);
}
pas['View.Main'].FViewMain.ShowMapFocusUnit(unitId);
end;
end;
end;
end;
procedure TFViewUnits.btnRefreshClick(Sender: TObject);
begin
GetUnits;
end;
procedure TFViewUnits.GetUnits;
[async] procedure TFViewUnits.GetUnits;
var
xdcResponse: TXDataClientResponse;
respObj: TJSObject;
unitCount: Integer;
begin
if FLoading then Exit;
if FLoading then
Exit;
FLoading := True;
console.log('GetUnits: Invoking API...');
Utils.ShowSpinner('spinner');
if FFirstLoad then
Utils.ShowSpinner('spinner');
try
try
xdcResponse := await(xdwcUnits.RawInvokeAsync('IApiService.GetUnitList', []));
console.log('RawInvoke returned:', xdcResponse.Result);
respObj := TJSObject(xdcResponse.Result);
xdwdsUnits.Close;
console.log('Units dataset closed');
xdwdsUnits.SetJsonData(respObj['data']);
console.log('JsonData set on units dataset:', respObj['data']);
xdwdsUnits.Open;
console.log('Units dataset opened. Record count:', xdwdsUnits.RecordCount);
unitCount := Integer(respObj['count']);
lblEntries.Caption := Format('%d units', [unitCount]);
console.log('Units label updated:', lblEntries.Caption);
except
on E: EXDataClientRequestException do
begin
console.log('XData exception (units):', E.ErrorResult.ErrorMessage);
Utils.ShowErrorModal(E.ErrorResult.ErrorMessage);
end;
on E: Exception do
Utils.ShowErrorModal(E.Message);
end;
finally
if FFirstLoad then
Utils.HideSpinner('spinner');
FFirstLoad := False;
FLoading := False;
Utils.HideSpinner('spinner');
console.log('GetUnits complete');
end;
end;
procedure TFViewUnits.tmrRefreshTimer(Sender: TObject);
procedure TFViewUnits.RefreshData;
begin
Console.Log('Units.RefreshData');
GetUnits;
end;
......
......@@ -150,7 +150,6 @@ begin
isActive := false
else
isActive := true;
FViewMain.EditUser('Edit', Username.innerText, FullName.innerText, PhoneNum.innerText, Email.innerText, isAdmin, isActive);
end;
......@@ -483,8 +482,7 @@ end;
procedure TFViewUsers.btnAddUserClick(Sender: TObject);
begin
//Info := '';
FViewMain.EditUser('Add', '', '', '', '', false, true);
//Info := '';mm
end;
procedure TFViewUsers.btnCloseNotificationClick(Sender: TObject);
......
{
"type": "FeatureCollection",
"name": "BFDDistrict",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District A", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.838580621137581, 42.832640624242444 ], [ -78.838579379349227, 42.832637828223341 ], [ -78.853769883224203, 42.832256243942119 ], [ -78.85371958445721, 42.832194871720155 ], [ -78.853733424580213, 42.83219689697404 ], [ -78.860055694936989, 42.831634192917498 ], [ -78.86013734228284, 42.832269841506786 ], [ -78.859896026339129, 42.832680803438883 ], [ -78.860331112959102, 42.833777534545568 ], [ -78.86034975462735, 42.834904906086862 ], [ -78.85768545019738, 42.835848144550688 ], [ -78.858114869151507, 42.837605053389701 ], [ -78.857536532421037, 42.838545513856914 ], [ -78.858096352651074, 42.839687337785485 ], [ -78.861864583480241, 42.838698386233297 ], [ -78.86205975340269, 42.838902003038619 ], [ -78.862692380919711, 42.838804946201897 ], [ -78.862728132922896, 42.839242703902777 ], [ -78.859568800903887, 42.840181676978965 ], [ -78.859407395065432, 42.841296969378085 ], [ -78.865712578238899, 42.852676330854607 ], [ -78.87162174026551, 42.851292456357271 ], [ -78.872016282892517, 42.851882361006176 ], [ -78.872097013700895, 42.852401028660957 ], [ -78.868731884242095, 42.853274149621917 ], [ -78.869204890923257, 42.85390708456859 ], [ -78.872490649359548, 42.852817958505078 ], [ -78.876741180919694, 42.858996499122377 ], [ -78.874396356987731, 42.859770389677344 ], [ -78.873619753263739, 42.859660821705866 ], [ -78.87399285072668, 42.859861633865819 ], [ -78.874543180109029, 42.860234969333924 ], [ -78.875014936030652, 42.860593987099257 ], [ -78.8750512940248, 42.85997418590776 ], [ -78.876811140388725, 42.859277953228293 ], [ -78.882510814894758, 42.867189761467436 ], [ -78.878932430206248, 42.868654634149287 ], [ -78.879480450569972, 42.869349562574541 ], [ -78.883495141721355, 42.868167220890896 ], [ -78.883750388309764, 42.868756350747567 ], [ -78.880095121304095, 42.870078422117274 ], [ -78.880646408234384, 42.870624672382412 ], [ -78.884421489903062, 42.869274555253369 ], [ -78.890271939124617, 42.87558582502659 ], [ -78.887965695107951, 42.876802504379924 ], [ -78.890098621163943, 42.876205913975724 ], [ -78.890590430583615, 42.876593705838609 ], [ -78.890916063781987, 42.877700346284939 ], [ -78.883205768958902, 42.877189774239035 ], [ -78.882993797488041, 42.877925279047915 ], [ -78.882327302445603, 42.877883805165943 ], [ -78.880207061295906, 42.877067857368601 ], [ -78.87805895026365, 42.874522552122691 ], [ -78.877556716095029, 42.874857610217347 ], [ -78.875958954885036, 42.873857441685928 ], [ -78.875159693178475, 42.873656461201733 ], [ -78.873157675465777, 42.873156643168144 ], [ -78.87265780839121, 42.873155108530398 ], [ -78.872054850493441, 42.872990241069282 ], [ -78.871559627886398, 42.872856077792747 ], [ -78.871258478968869, 42.873855583344678 ], [ -78.870956750411864, 42.874756419191691 ], [ -78.87055656243021, 42.876156833702851 ], [ -78.870258536657332, 42.877056203810682 ], [ -78.870259928280817, 42.877356655895099 ], [ -78.869957241093033, 42.878057077538543 ], [ -78.86975904878048, 42.87875723695614 ], [ -78.869556577509613, 42.879355910320399 ], [ -78.869387780475122, 42.879951837575966 ], [ -78.869358376966289, 42.88005615122713 ], [ -78.869159247170458, 42.880555980676171 ], [ -78.86905751475463, 42.88115722766284 ], [ -78.86885745593024, 42.881456810125457 ], [ -78.864656316400058, 42.880655101515977 ], [ -78.859757939693296, 42.879956310487458 ], [ -78.857356707881706, 42.879457262118258 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.851756334480143, 42.8785568410702 ], [ -78.850856794926287, 42.878457395030267 ], [ -78.848757851920865, 42.877957459459736 ], [ -78.847059027846299, 42.877656785921261 ], [ -78.84545768790359, 42.877457442727305 ], [ -78.8440576714939, 42.87725761889191 ], [ -78.842556244378372, 42.876857758658176 ], [ -78.841757388131555, 42.876755214333393 ], [ -78.841556799502669, 42.876955998075758 ], [ -78.839957561167893, 42.87815595557732 ], [ -78.839358996383396, 42.878656627987034 ], [ -78.839156194113883, 42.879255275929467 ], [ -78.83835691774442, 42.879056837484171 ], [ -78.837456569994913, 42.878756929372337 ], [ -78.836758064766627, 42.878555457288982 ], [ -78.835756447512608, 42.878157034814144 ], [ -78.834855713376044, 42.87775563809948 ], [ -78.833955401951215, 42.877455839483304 ], [ -78.833058755274735, 42.877155998336157 ], [ -78.832856931977261, 42.877057576053375 ], [ -78.829257334160488, 42.878157567817688 ], [ -78.828657889567353, 42.878457937354909 ], [ -78.8267574133816, 42.880956240808032 ], [ -78.825555243453209, 42.882657282618005 ], [ -78.824056066742116, 42.884759488306194 ], [ -78.816657238717056, 42.884857093087646 ], [ -78.816056162884067, 42.884756847493165 ], [ -78.815257702748966, 42.884755696219727 ], [ -78.814156862880751, 42.884755313966757 ], [ -78.809555878954654, 42.884657430116576 ], [ -78.808555783918976, 42.884656712606812 ], [ -78.807556279992795, 42.884757426604551 ], [ -78.806257466997707, 42.884655722425009 ], [ -78.805055921622497, 42.884655256607296 ], [ -78.803757485744924, 42.88465776349981 ], [ -78.803455133300602, 42.884655628692954 ], [ -78.802455159595638, 42.884657546665778 ], [ -78.801354855037332, 42.884755737814196 ], [ -78.800855880420585, 42.885055770186042 ], [ -78.800455932255147, 42.884856198273617 ], [ -78.799555682779072, 42.884556101935864 ], [ -78.799654572990747, 42.877657757946196 ], [ -78.799856701247919, 42.874655534437835 ], [ -78.799857449623246, 42.871656406417138 ], [ -78.799635042492156, 42.871657704791218 ], [ -78.799608714716484, 42.871083266097898 ], [ -78.799283115590782, 42.871049664274494 ], [ -78.799454480449356, 42.868457790234544 ], [ -78.799407204649867, 42.867320014669311 ], [ -78.800073311118354, 42.866957357716529 ], [ -78.800044716534117, 42.864412395692526 ], [ -78.800371824261092, 42.864428623694991 ], [ -78.800013598039598, 42.864409573490128 ], [ -78.799945757015792, 42.86264032885358 ], [ -78.799955478268046, 42.861355618675994 ], [ -78.800087783614686, 42.854413335610161 ], [ -78.800402549685344, 42.847371835462368 ], [ -78.800465911964508, 42.845722712118793 ], [ -78.799110043197146, 42.84636759509597 ], [ -78.79856968562261, 42.845972008220215 ], [ -78.796901482216654, 42.845326143395887 ], [ -78.798679696151751, 42.842891687094514 ], [ -78.79742912862821, 42.842044107335376 ], [ -78.796593525881221, 42.841252458318557 ], [ -78.796593277967546, 42.841180348947155 ], [ -78.79561273987504, 42.841001923524573 ], [ -78.796653480378495, 42.838356812365419 ], [ -78.7973547812921, 42.83845708334983 ], [ -78.798455419987192, 42.838658042838404 ], [ -78.799854997104532, 42.83905596076432 ], [ -78.800114269943663, 42.839298827327589 ], [ -78.800121452152496, 42.841353971681812 ], [ -78.800954430165106, 42.841352391840893 ], [ -78.80105438597424, 42.839756154286384 ], [ -78.800954249264223, 42.838856343380748 ], [ -78.800955176875547, 42.838057919673417 ], [ -78.801056798578884, 42.837256505681758 ], [ -78.800956591162702, 42.836356612199886 ], [ -78.800957162531574, 42.835456609345087 ], [ -78.800856332175471, 42.834356493668217 ], [ -78.800856905099536, 42.833456490495223 ], [ -78.800854452246867, 42.832756825752362 ], [ -78.800854678804555, 42.831757987354088 ], [ -78.801656174913674, 42.831756462252542 ], [ -78.805656489050051, 42.831757053110763 ], [ -78.807255799586315, 42.831756626304951 ], [ -78.808654312733736, 42.831858151928195 ], [ -78.809556107062647, 42.831757511090629 ], [ -78.812457260200006, 42.83195756431401 ], [ -78.813556600253534, 42.831856606340295 ], [ -78.814854467616954, 42.831958231069144 ], [ -78.815254119976032, 42.832157755265499 ], [ -78.815357794453462, 42.831957212445182 ], [ -78.817654269166127, 42.831958024622892 ], [ -78.818556087729135, 42.831857422619095 ], [ -78.819555557802161, 42.831956835203073 ], [ -78.820756081390527, 42.831957151448407 ], [ -78.82385750949274, 42.831857222247173 ], [ -78.823955379359887, 42.831157347180735 ], [ -78.823956394179447, 42.830457675485583 ], [ -78.823857834211026, 42.829055689472924 ], [ -78.8239569963159, 42.82775761128412 ], [ -78.823956878334343, 42.826756138706585 ], [ -78.824270151467147, 42.826743955649128 ], [ -78.825254871013783, 42.826740809659682 ], [ -78.832859733663142, 42.826702349425297 ], [ -78.832970726887567, 42.825928159785164 ], [ -78.833854758436914, 42.825955589258797 ], [ -78.837158375362606, 42.825915168567825 ], [ -78.837726797591174, 42.829447708027431 ], [ -78.838478504947247, 42.832640028620709 ], [ -78.838580621137581, 42.832640624242444 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 1, "NAME": "District E", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.83135838731252, 42.946055876655677 ], [ -78.830457761013733, 42.946856231049658 ], [ -78.829957986127056, 42.947054948618003 ], [ -78.836858858528231, 42.958456982912189 ], [ -78.83595805615208, 42.9583548178936 ], [ -78.831759186240831, 42.95835580296653 ], [ -78.83115725851971, 42.958255557825574 ], [ -78.829958131354147, 42.958255431111702 ], [ -78.828856385827848, 42.958356577970008 ], [ -78.82765685495157, 42.958254878182295 ], [ -78.826158798016664, 42.958255266970681 ], [ -78.825355700985639, 42.958256967700528 ], [ -78.824656694550697, 42.958156975888137 ], [ -78.822157505617739, 42.958156839199646 ], [ -78.820756503617915, 42.958156954762991 ], [ -78.819557377904218, 42.958156719090624 ], [ -78.818656729926502, 42.958057024236993 ], [ -78.817356630933958, 42.958057000472493 ], [ -78.815756379360749, 42.958655648454581 ], [ -78.814655722805838, 42.959055735912756 ], [ -78.814256710692703, 42.959256842446351 ], [ -78.813656408143274, 42.959557158732345 ], [ -78.812055603843234, 42.960056977439621 ], [ -78.810858317851512, 42.960556082171166 ], [ -78.80855649993903, 42.961455128370673 ], [ -78.808556641406597, 42.95905538611283 ], [ -78.807555691674963, 42.958955334769527 ], [ -78.8075556846577, 42.956555317351551 ], [ -78.803555667103964, 42.956555344613861 ], [ -78.803555710222753, 42.954555352043627 ], [ -78.808655616610892, 42.954655346219724 ], [ -78.808755637596704, 42.952255322156944 ], [ -78.810356727315778, 42.952155355087633 ], [ -78.810955498629298, 42.949456959125619 ], [ -78.803256895252787, 42.949356848211345 ], [ -78.798260549765104, 42.94926379980847 ], [ -78.798454639809037, 42.948655260106889 ], [ -78.798550139049141, 42.945208809996167 ], [ -78.798557412588266, 42.943856009896109 ], [ -78.798554783338417, 42.94095575828883 ], [ -78.798757866985625, 42.938156613636551 ], [ -78.798756824676403, 42.937857507547143 ], [ -78.798855410796321, 42.937256444303237 ], [ -78.798854712408485, 42.937056116455338 ], [ -78.798856706061073, 42.936556785168193 ], [ -78.798756895109364, 42.935755765988517 ], [ -78.798856604707169, 42.93545649758471 ], [ -78.798855208018779, 42.935055841755414 ], [ -78.798856159105142, 42.934257431455606 ], [ -78.798954580601659, 42.933557506750603 ], [ -78.798956563688861, 42.933055376437686 ], [ -78.798955520699749, 42.932756297523177 ], [ -78.798954477630886, 42.932457191154541 ], [ -78.798956609322019, 42.929856033293724 ], [ -78.799155762886727, 42.922757308165004 ], [ -78.799055197727725, 42.92175595902475 ], [ -78.798956070218281, 42.919056125478022 ], [ -78.799055128618349, 42.918556609769276 ], [ -78.799454283045222, 42.918457105177296 ], [ -78.800054256740182, 42.918156889411847 ], [ -78.800456783714296, 42.917955796927018 ], [ -78.801057105067628, 42.917757125798815 ], [ -78.80155672747378, 42.917555844750758 ], [ -78.802056207188116, 42.917357360535163 ], [ -78.802454989226121, 42.917156268155487 ], [ -78.80345780545899, 42.916756401201226 ], [ -78.803856903703789, 42.916656853904762 ], [ -78.804755137489181, 42.91625725926454 ], [ -78.805657092775974, 42.915857650327247 ], [ -78.806954527440098, 42.915355711896147 ], [ -78.807755983281623, 42.91505503448947 ], [ -78.808057645039966, 42.914856911604382 ], [ -78.808456723670673, 42.914757375724776 ], [ -78.809456090238214, 42.914456297072078 ], [ -78.810056088429604, 42.914156028667882 ], [ -78.810555550332339, 42.913957424994436 ], [ -78.811357082867673, 42.913656831921934 ], [ -78.811856489182247, 42.913455506238051 ], [ -78.812456391220152, 42.913155197963881 ], [ -78.81355576688965, 42.912656379465048 ], [ -78.813556198439798, 42.914640829675548 ], [ -78.81330446664127, 42.914579715671721 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.814556580901453, 42.914756112336519 ], [ -78.815557162713134, 42.914756885970576 ], [ -78.816557594465252, 42.914757459094126 ], [ -78.817558165651363, 42.914755416513607 ], [ -78.818256145722728, 42.914756757777305 ], [ -78.819155785294967, 42.914757624719542 ], [ -78.820156244305437, 42.914755559662552 ], [ -78.821156446253028, 42.914657505838498 ], [ -78.821455090218222, 42.914656885101166 ], [ -78.822257239703006, 42.914556434655353 ], [ -78.822455128322289, 42.91455602152439 ], [ -78.823156988267698, 42.914557269928117 ], [ -78.823556423863408, 42.914556432537715 ], [ -78.824056614264222, 42.91455538195617 ], [ -78.825057080580791, 42.914556072803187 ], [ -78.826255435013962, 42.914556225453076 ], [ -78.827457447884839, 42.91455638519686 ], [ -78.828857461438815, 42.914556162759148 ], [ -78.829156067087453, 42.914555439698631 ], [ -78.832157862254618, 42.914655993557794 ], [ -78.832557335549936, 42.914655124679904 ], [ -78.837555965261672, 42.914655027677036 ], [ -78.838858697395693, 42.914654926337406 ], [ -78.842957736990499, 42.914656597685237 ], [ -78.84325638045668, 42.9146559200761 ], [ -78.843558756955673, 42.914655233203135 ], [ -78.847758513806397, 42.914656613445167 ], [ -78.848758980528913, 42.914656987399198 ], [ -78.851958257798302, 42.914655013461626 ], [ -78.852656778433314, 42.914754922998405 ], [ -78.85365812200979, 42.914955609374736 ], [ -78.853657047324589, 42.913855292993048 ], [ -78.853657967521158, 42.912357137990234 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.854656859806852, 42.911155703833316 ], [ -78.855556445588121, 42.91115617512046 ], [ -78.856459765022805, 42.91115682250279 ], [ -78.859259447418182, 42.911155597178706 ], [ -78.862059586429183, 42.911255770601677 ], [ -78.865556836779717, 42.911156710343533 ], [ -78.865159677833972, 42.912455539180336 ], [ -78.864658777656672, 42.913954923753735 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.861957308400946, 42.917556052161366 ], [ -78.860856832722632, 42.918557465223657 ], [ -78.859760042753081, 42.91955616966203 ], [ -78.859157947244356, 42.920155784666115 ], [ -78.858856876572062, 42.920455618453111 ], [ -78.858656530175679, 42.920755181814776 ], [ -78.856956990718302, 42.922257434331961 ], [ -78.856057477592657, 42.923156769606393 ], [ -78.853759739771817, 42.925357311533098 ], [ -78.852759287171324, 42.926256941150747 ], [ -78.851959523004112, 42.926955789183971 ], [ -78.851458130539228, 42.9275551540956 ], [ -78.851056247518528, 42.927855175636331 ], [ -78.850959569531824, 42.9279568697158 ], [ -78.85075872187268, 42.928154952031669 ], [ -78.849357066205357, 42.929554815991274 ], [ -78.848059054160757, 42.93075689229353 ], [ -78.847158434247248, 42.931456021774324 ], [ -78.846359083627647, 42.932256379439686 ], [ -78.845956921275459, 42.932556383500874 ], [ -78.845458740353124, 42.933056852948276 ], [ -78.844457613641666, 42.933854860213494 ], [ -78.843558140727509, 42.934855728084706 ], [ -78.842557083794873, 42.935656434765868 ], [ -78.842356232851728, 42.935857191087443 ], [ -78.841656567483184, 42.936456960649835 ], [ -78.841158271807103, 42.936954722350357 ], [ -78.839856210702692, 42.938156713358005 ], [ -78.838758734174164, 42.939155187600356 ], [ -78.837456087930008, 42.940255602049938 ], [ -78.835856446299658, 42.941757314897934 ], [ -78.835056290608691, 42.942456016559234 ], [ -78.834357116302002, 42.943157289902665 ], [ -78.833657690718923, 42.94385576071415 ], [ -78.833356381137804, 42.944155526831231 ], [ -78.832258592102392, 42.945156654906228 ], [ -78.83135838731252, 42.946055876655677 ] ] ], [ [ [ -78.81388190979429, 42.914719903009498 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.813556198439798, 42.914640829675548 ], [ -78.81388190979429, 42.914719903009498 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District B", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.877556716095029, 42.874857610217347 ], [ -78.87805895026365, 42.874522552122691 ], [ -78.879767789463699, 42.87705099553893 ], [ -78.882677989722453, 42.878305611941379 ], [ -78.882994922991031, 42.877911145090273 ], [ -78.886812483749637, 42.878206759469876 ], [ -78.888732385034302, 42.878825339982058 ], [ -78.890247479896416, 42.881469631441725 ], [ -78.889835470396079, 42.882279055795166 ], [ -78.88897192071019, 42.881844428097786 ], [ -78.889386931765287, 42.881187695916303 ], [ -78.888452123743221, 42.879939802637892 ], [ -78.887206299012334, 42.879344207919118 ], [ -78.886363932196801, 42.879208313175972 ], [ -78.884891941620182, 42.879517868154529 ], [ -78.883809384665241, 42.88006768014219 ], [ -78.883881226506304, 42.880141055142744 ], [ -78.88543589722687, 42.879590628920212 ], [ -78.885349153009415, 42.880294746526879 ], [ -78.884856472862353, 42.880493851630128 ], [ -78.883953613363957, 42.880826369804623 ], [ -78.88391652991092, 42.880965390027278 ], [ -78.885261140223761, 42.880731366039186 ], [ -78.885412749814421, 42.880704405359175 ], [ -78.885432935061019, 42.881989614876254 ], [ -78.884934189912883, 42.882187199689177 ], [ -78.885149591608595, 42.882417749431362 ], [ -78.885990282873877, 42.881942759172496 ], [ -78.886902106250716, 42.881435964598211 ], [ -78.887623976098538, 42.881872685765536 ], [ -78.887295848770606, 42.88218147594376 ], [ -78.886665517494535, 42.882707970148083 ], [ -78.886325573274505, 42.883318314140141 ], [ -78.887935188133397, 42.882305309596234 ], [ -78.888194750681521, 42.882788008753764 ], [ -78.888461862582389, 42.883204230311826 ], [ -78.888197905618881, 42.883428944037398 ], [ -78.887713659596528, 42.883745449631128 ], [ -78.888459338075492, 42.884289799437973 ], [ -78.88896187969182, 42.884981344336815 ], [ -78.890170993132699, 42.886575763198067 ], [ -78.890483014674359, 42.886922466630416 ], [ -78.891329524845204, 42.887212943140796 ], [ -78.891358175386998, 42.887199415290638 ], [ -78.892133110897007, 42.887504971882784 ], [ -78.892385934056861, 42.887695510810936 ], [ -78.893348314393322, 42.888403903499388 ], [ -78.894057755479366, 42.888933744445872 ], [ -78.894612242514853, 42.889338469797835 ], [ -78.895036384546501, 42.889659996207968 ], [ -78.895501392294435, 42.890011208150497 ], [ -78.896121211532275, 42.890469582881344 ], [ -78.89683887897786, 42.890993347367832 ], [ -78.898918617390336, 42.892541080916487 ], [ -78.899432482892905, 42.892922022847635 ], [ -78.899905427513588, 42.893261231452982 ], [ -78.900631448154058, 42.893814911921822 ], [ -78.901000451860682, 42.894477001624736 ], [ -78.901287413342885, 42.894960225054838 ], [ -78.90149248475656, 42.895324097147316 ], [ -78.901762135284699, 42.895734270535478 ], [ -78.901820719343334, 42.895950462273227 ], [ -78.90191675573098, 42.898106772035554 ], [ -78.901983845860258, 42.899191788067803 ], [ -78.902018825485499, 42.900005496587902 ], [ -78.902111235070834, 42.901882460953765 ], [ -78.901354550045156, 42.901657838954542 ], [ -78.901009778825738, 42.901115975466546 ], [ -78.900610944128658, 42.900787295131039 ], [ -78.900920393124537, 42.901298197182662 ], [ -78.9009544677413, 42.901756192436423 ], [ -78.901617220150982, 42.902200478390171 ], [ -78.901603239445336, 42.902900259891958 ], [ -78.901588792822579, 42.903248195747921 ], [ -78.901565452389505, 42.904327206356093 ], [ -78.901560896419539, 42.906155900137307 ], [ -78.90160098289445, 42.914954584158387 ], [ -78.90117482292824, 42.914955618835442 ], [ -78.900833802550821, 42.914856453154684 ], [ -78.899063170890415, 42.914861349800091 ], [ -78.898064267951455, 42.914847414843535 ], [ -78.897133551252566, 42.914849969619191 ], [ -78.895662005310712, 42.914861026418535 ], [ -78.894377258499588, 42.914955942341805 ], [ -78.892967674896013, 42.914959763240532 ], [ -78.890079862876149, 42.915058955206973 ], [ -78.888175984523798, 42.915154442931687 ], [ -78.886661367371204, 42.91515846580203 ], [ -78.885854268732928, 42.91515247522581 ], [ -78.885368298366402, 42.91525127115856 ], [ -78.884273792034705, 42.915254153367037 ], [ -78.883068729321764, 42.915257314605014 ], [ -78.882272685221139, 42.915251269836823 ], [ -78.881860056726552, 42.915357218260048 ], [ -78.881359298348983, 42.915256972327974 ], [ -78.880060763516965, 42.915356407999973 ], [ -78.878357872938679, 42.915256651587946 ], [ -78.876760500452249, 42.915356819507785 ], [ -78.873359629522184, 42.915357198709401 ], [ -78.872758628860012, 42.915356003171667 ], [ -78.868857549841991, 42.915354823057719 ], [ -78.86655787398773, 42.915355047378718 ], [ -78.865057126814094, 42.915356061113151 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.864658777656672, 42.913954923753735 ], [ -78.865159677833972, 42.912455539180336 ], [ -78.865556836779717, 42.911156710343533 ], [ -78.862059586429183, 42.911255770601677 ], [ -78.859259447418182, 42.911155597178706 ], [ -78.856459765022805, 42.91115682250279 ], [ -78.855556445588121, 42.91115617512046 ], [ -78.854656859806852, 42.911155703833316 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.853657494698368, 42.910557187534138 ], [ -78.853659033437623, 42.910054973192565 ], [ -78.853756797638667, 42.909355082581932 ], [ -78.853658635474773, 42.908254994396067 ], [ -78.853759022902551, 42.908156005376249 ], [ -78.853759265986639, 42.907357483109244 ], [ -78.853758953862595, 42.906457521063999 ], [ -78.85375875366897, 42.905557531173962 ], [ -78.853758278971, 42.903757578583011 ], [ -78.853657613396891, 42.902056531765901 ], [ -78.853656698573374, 42.900155000825954 ], [ -78.853656069099998, 42.899156258847228 ], [ -78.853656302324623, 42.898355046346644 ], [ -78.85365785349488, 42.897855629658302 ], [ -78.853756805541735, 42.897457533816237 ], [ -78.853758344049041, 42.896955400639861 ], [ -78.853757469063879, 42.896755099652516 ], [ -78.853857405997729, 42.896557304389624 ], [ -78.853858943823525, 42.896055198573613 ], [ -78.853757551303204, 42.895056693911634 ], [ -78.853756908447806, 42.894055152318728 ], [ -78.853759577852927, 42.892957539513091 ], [ -78.853758060564701, 42.89175575126616 ], [ -78.853758304791938, 42.890957254144233 ], [ -78.853756111813098, 42.890455129209947 ], [ -78.853756712784602, 42.889755383336748 ], [ -78.853759059883188, 42.887755088297254 ], [ -78.853758944339788, 42.885156604458061 ], [ -78.853714464176306, 42.884361065673055 ], [ -78.853661332722666, 42.883318515317931 ], [ -78.85365725150217, 42.88325541562201 ], [ -78.853557511100931, 42.881757490201359 ], [ -78.853656661060612, 42.88055546197964 ], [ -78.853958681519828, 42.879657470565625 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.857356707881706, 42.879457262118258 ], [ -78.859757939693296, 42.879956310487458 ], [ -78.864656316400058, 42.880655101515977 ], [ -78.86885745593024, 42.881456810125457 ], [ -78.86905751475463, 42.88115722766284 ], [ -78.869159247170458, 42.880555980676171 ], [ -78.869358376966289, 42.88005615122713 ], [ -78.869387780475122, 42.879951837575966 ], [ -78.869556577509613, 42.879355910320399 ], [ -78.86975904878048, 42.87875723695614 ], [ -78.869957241093033, 42.878057077538543 ], [ -78.870259928280817, 42.877356655895099 ], [ -78.870258536657332, 42.877056203810682 ], [ -78.87055656243021, 42.876156833702851 ], [ -78.870956750411864, 42.874756419191691 ], [ -78.871258478968869, 42.873855583344678 ], [ -78.871559627886398, 42.872856077792747 ], [ -78.87265780839121, 42.873155108530398 ], [ -78.873157675465777, 42.873156643168144 ], [ -78.87405764897936, 42.873357381992662 ], [ -78.875159693178475, 42.873656461201733 ], [ -78.875958954885036, 42.873857441685928 ], [ -78.87665858052506, 42.874256231783569 ], [ -78.877556716095029, 42.874857610217347 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District C", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.837456569994913, 42.878756929372337 ], [ -78.83835691774442, 42.879056837484171 ], [ -78.839156194113883, 42.879255275929467 ], [ -78.839358996383396, 42.878656627987034 ], [ -78.839957561167893, 42.87815595557732 ], [ -78.841556799502669, 42.876955998075758 ], [ -78.841757388131555, 42.876755214333393 ], [ -78.842556244378372, 42.876857758658176 ], [ -78.8440576714939, 42.87725761889191 ], [ -78.84545768790359, 42.877457442727305 ], [ -78.847059027846299, 42.877656785921261 ], [ -78.848757851920865, 42.877957459459736 ], [ -78.850856794926287, 42.878457395030267 ], [ -78.851756334480143, 42.8785568410702 ], [ -78.854257382550315, 42.87885554952485 ], [ -78.853958681519828, 42.879657470565625 ], [ -78.853656661060612, 42.88055546197964 ], [ -78.853557511100931, 42.881757490201359 ], [ -78.85365725150217, 42.88325541562201 ], [ -78.853661332722666, 42.883318515317931 ], [ -78.853714464176306, 42.884361065673055 ], [ -78.853758944339788, 42.885156604458061 ], [ -78.853759059883188, 42.887755088297254 ], [ -78.853756712784602, 42.889755383336748 ], [ -78.853756111813098, 42.890455129209947 ], [ -78.853758304791938, 42.890957254144233 ], [ -78.853758060564701, 42.89175575126616 ], [ -78.853759577852927, 42.892957539513091 ], [ -78.853756908447806, 42.894055152318728 ], [ -78.853757551303204, 42.895056693911634 ], [ -78.853858943823525, 42.896055198573613 ], [ -78.853857405997729, 42.896557304389624 ], [ -78.853757469063879, 42.896755099652516 ], [ -78.853758344049041, 42.896955400639861 ], [ -78.853756805541735, 42.897457533816237 ], [ -78.85365785349488, 42.897855629658302 ], [ -78.853656302324623, 42.898355046346644 ], [ -78.853656069099998, 42.899156258847228 ], [ -78.853656698573374, 42.900155000825954 ], [ -78.853657613396891, 42.902056531765901 ], [ -78.853758278971, 42.903757578583011 ], [ -78.85375875366897, 42.905557531173962 ], [ -78.853758953862595, 42.906457521063999 ], [ -78.853759265986639, 42.907357483109244 ], [ -78.853759022902551, 42.908156005376249 ], [ -78.853658635474773, 42.908254994396067 ], [ -78.853756797638667, 42.909355082581932 ], [ -78.853659033437623, 42.910054973192565 ], [ -78.853657494698368, 42.910557187534138 ], [ -78.85365967619083, 42.911056511983595 ], [ -78.853657967521158, 42.912357137990234 ], [ -78.853657047324589, 42.913855292993048 ], [ -78.85365812200979, 42.914955609374736 ], [ -78.852656778433314, 42.914754922998405 ], [ -78.851958257798302, 42.914655013461626 ], [ -78.848758980528913, 42.914656987399198 ], [ -78.847758513806397, 42.914656613445167 ], [ -78.843558756955673, 42.914655233203135 ], [ -78.84325638045668, 42.9146559200761 ], [ -78.842957736990499, 42.914656597685237 ], [ -78.838858697395693, 42.914654926337406 ], [ -78.837555965261672, 42.914655027677036 ], [ -78.832557335549936, 42.914655124679904 ], [ -78.832157862254618, 42.914655993557794 ], [ -78.829156067087453, 42.914555439698631 ], [ -78.828857461438815, 42.914556162759148 ], [ -78.827457447884839, 42.91455638519686 ], [ -78.826255435013962, 42.914556225453076 ], [ -78.825057080580791, 42.914556072803187 ], [ -78.824056614264222, 42.91455538195617 ], [ -78.823556423863408, 42.914556432537715 ], [ -78.823156988267698, 42.914557269928117 ], [ -78.822455128322289, 42.91455602152439 ], [ -78.822257239703006, 42.914556434655353 ], [ -78.821455090218222, 42.914656885101166 ], [ -78.821156446253028, 42.914657505838498 ], [ -78.820156244305437, 42.914755559662552 ], [ -78.819155785294967, 42.914757624719542 ], [ -78.818256145722728, 42.914756757777305 ], [ -78.817558165651363, 42.914755416513607 ], [ -78.816557594465252, 42.914757459094126 ], [ -78.815557162713134, 42.914756885970576 ], [ -78.814556580901453, 42.914756112336519 ], [ -78.81355622336676, 42.914755411822256 ], [ -78.81355576688965, 42.912656379465048 ], [ -78.812456391220152, 42.913155197963881 ], [ -78.811856489182247, 42.913455506238051 ], [ -78.811357082867673, 42.913656831921934 ], [ -78.810555550332339, 42.913957424994436 ], [ -78.810056088429604, 42.914156028667882 ], [ -78.809456090238214, 42.914456297072078 ], [ -78.808456723670673, 42.914757375724776 ], [ -78.808057645039966, 42.914856911604382 ], [ -78.807755983281623, 42.91505503448947 ], [ -78.806954527440098, 42.915355711896147 ], [ -78.805657092775974, 42.915857650327247 ], [ -78.804755137489181, 42.91625725926454 ], [ -78.803856903703789, 42.916656853904762 ], [ -78.80345780545899, 42.916756401201226 ], [ -78.802454989226121, 42.917156268155487 ], [ -78.802056207188116, 42.917357360535163 ], [ -78.80155672747378, 42.917555844750758 ], [ -78.801057105067628, 42.917757125798815 ], [ -78.800456783714296, 42.917955796927018 ], [ -78.800054256740182, 42.918156889411847 ], [ -78.799454283045222, 42.918457105177296 ], [ -78.799055128618349, 42.918556609769276 ], [ -78.799056743783282, 42.913655973762616 ], [ -78.799054506892517, 42.909855743480577 ], [ -78.799155722941677, 42.906757665138031 ], [ -78.799254604981854, 42.898756254692366 ], [ -78.79935567367923, 42.895655454002004 ], [ -78.799357519475777, 42.88975613471235 ], [ -78.799555682779072, 42.884556101935864 ], [ -78.800455932255147, 42.884856198273617 ], [ -78.800855880420585, 42.885055770186042 ], [ -78.801354855037332, 42.884755737814196 ], [ -78.802455159595638, 42.884657546665778 ], [ -78.803455133300602, 42.884655628692954 ], [ -78.803757485744924, 42.88465776349981 ], [ -78.805055921622497, 42.884655256607296 ], [ -78.806257466997707, 42.884655722425009 ], [ -78.807556279992795, 42.884757426604551 ], [ -78.808555783918976, 42.884656712606812 ], [ -78.809555878954654, 42.884657430116576 ], [ -78.814156862880751, 42.884755313966757 ], [ -78.815257702748966, 42.884755696219727 ], [ -78.816056162884067, 42.884756847493165 ], [ -78.816657238717056, 42.884857093087646 ], [ -78.824051345503236, 42.884759550740974 ], [ -78.824056055970587, 42.884756717006105 ], [ -78.825555243453209, 42.882657282618005 ], [ -78.8267574133816, 42.880956240808032 ], [ -78.828657889567353, 42.878457937354909 ], [ -78.829257334160488, 42.878157567817688 ], [ -78.832856931977261, 42.877057576053375 ], [ -78.833058755274735, 42.877155998336157 ], [ -78.833955401951215, 42.877455839483304 ], [ -78.834855713376044, 42.87775563809948 ], [ -78.835756447512608, 42.878157034814144 ], [ -78.836758064766627, 42.878555457288982 ], [ -78.837456569994913, 42.878756929372337 ] ] ] ] } },
{ "type": "Feature", "properties": { "SBE4_ID": 0, "NAME": "District D", "FROMLEFT": 0, "TOLEFT": 0, "FROMRIGHT": 0, "TORIGHT": 0, "DIRECTION": null, "STREET": null, "ST_TYPE": null, "ST_PREFIX": null, "ST_SUFFIX": null, "CITY_LEFT": null, "CITY_RIGHT": null, "LO_X_PRE": null, "LO_X_NAME": null, "LO_X_TYPE": null, "LO_X_SUF": null, "HI_X_PRE": null, "HI_X_NAME": null, "HI_X_TYPE": null, "HI_X_SUF": null, "LHS": null, "RHS": null, "BDY_LEFT": null, "BDY_RIGHT": null, "ST_CODE": null, "RECNUM_L": 0, "RECNUM_R": 0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -78.848357925732358, 42.958557155360594 ], [ -78.847558550346733, 42.958556314278027 ], [ -78.847159103369592, 42.958655986661867 ], [ -78.846658049234421, 42.95855559052405 ], [ -78.845757772716311, 42.958554968924986 ], [ -78.844659429161581, 42.958554682819461 ], [ -78.843456598624755, 42.958554733406494 ], [ -78.842257051866881, 42.958455875641029 ], [ -78.841158635672457, 42.958455665861948 ], [ -78.840157571072865, 42.958455117420101 ], [ -78.838958216436993, 42.958455112938751 ], [ -78.838158434253145, 42.95835531882836 ], [ -78.836858858528231, 42.958456982912189 ], [ -78.829957986127056, 42.947054948618003 ], [ -78.830457761013733, 42.946856231049658 ], [ -78.83135838731252, 42.946055876655677 ], [ -78.832258592102392, 42.945156654906228 ], [ -78.833356381137804, 42.944155526831231 ], [ -78.833657690718923, 42.94385576071415 ], [ -78.834357116302002, 42.943157289902665 ], [ -78.835056290608691, 42.942456016559234 ], [ -78.835856446299658, 42.941757314897934 ], [ -78.837456087930008, 42.940255602049938 ], [ -78.838758734174164, 42.939155187600356 ], [ -78.839856210702692, 42.938156713358005 ], [ -78.841158271807103, 42.936954722350357 ], [ -78.841656567483184, 42.936456960649835 ], [ -78.842356232851728, 42.935857191087443 ], [ -78.842557083794873, 42.935656434765868 ], [ -78.843558140727509, 42.934855728084706 ], [ -78.844457613641666, 42.933854860213494 ], [ -78.845458740353124, 42.933056852948276 ], [ -78.845956921275459, 42.932556383500874 ], [ -78.846359083627647, 42.932256379439686 ], [ -78.847158434247248, 42.931456021774324 ], [ -78.848059054160757, 42.93075689229353 ], [ -78.849357066205357, 42.929554815991274 ], [ -78.85075872187268, 42.928154952031669 ], [ -78.850959569531824, 42.9279568697158 ], [ -78.851056247518528, 42.927855175636331 ], [ -78.851458130539228, 42.9275551540956 ], [ -78.851959523004112, 42.926955789183971 ], [ -78.852759287171324, 42.926256941150747 ], [ -78.853759739771817, 42.925357311533098 ], [ -78.856057477592657, 42.923156769606393 ], [ -78.856956990718302, 42.922257434331961 ], [ -78.858656530175679, 42.920755181814776 ], [ -78.858856876572062, 42.920455618453111 ], [ -78.859157947244356, 42.920155784666115 ], [ -78.859760042753081, 42.91955616966203 ], [ -78.860856832722632, 42.918557465223657 ], [ -78.861957308400946, 42.917556052161366 ], [ -78.864157479774619, 42.915355554909951 ], [ -78.865057126814094, 42.915356061113151 ], [ -78.86655787398773, 42.915355047378718 ], [ -78.868857549841991, 42.915354823057719 ], [ -78.872758628860012, 42.915356003171667 ], [ -78.873359629522184, 42.915357198709401 ], [ -78.876760500452249, 42.915356819507785 ], [ -78.878357872938679, 42.915256651587946 ], [ -78.880060763516965, 42.915356407999973 ], [ -78.881359298348983, 42.915256972327974 ], [ -78.881860056726552, 42.915357218260048 ], [ -78.882272685221139, 42.915251269836823 ], [ -78.883068729321764, 42.915257314605014 ], [ -78.884273792034705, 42.915254153367037 ], [ -78.885368298366402, 42.91525127115856 ], [ -78.885854268732928, 42.91515247522581 ], [ -78.886672422971984, 42.915158436510609 ], [ -78.888164928925264, 42.915154472368307 ], [ -78.890066028293106, 42.915055944996219 ], [ -78.892973197591445, 42.914958732545394 ], [ -78.894377258499588, 42.914955942341805 ], [ -78.895675824733544, 42.914860988717805 ], [ -78.897168322242848, 42.914856907221662 ], [ -78.898109668762928, 42.914847290026792 ], [ -78.899051243879498, 42.914856809077392 ], [ -78.899673117636056, 42.914855092483272 ], [ -78.900855119132444, 42.914855753392153 ], [ -78.901159417838116, 42.914956980417145 ], [ -78.901511530128445, 42.914956002391477 ], [ -78.901259500262299, 42.915790463407561 ], [ -78.901039376175646, 42.9165211626134 ], [ -78.900803422995168, 42.917340120508733 ], [ -78.900642632086601, 42.917922293370644 ], [ -78.900352803555677, 42.918873736097275 ], [ -78.899966689539511, 42.920198582505577 ], [ -78.899497029021163, 42.92189358586883 ], [ -78.89950199452521, 42.921893572156002 ], [ -78.898955778359166, 42.924051207509997 ], [ -78.898959314199004, 42.924744023208717 ], [ -78.898966106163485, 42.926074777878405 ], [ -78.898997580075644, 42.927369108017722 ], [ -78.899015346081342, 42.927982092585005 ], [ -78.899797131705569, 42.930131477834024 ], [ -78.899824713903755, 42.930304182471211 ], [ -78.89998968080755, 42.930434992570987 ], [ -78.900817098187616, 42.93108823657095 ], [ -78.900824857978293, 42.930585100877963 ], [ -78.90132628418371, 42.930980937805437 ], [ -78.901834110429547, 42.930639013085603 ], [ -78.902728823511509, 42.930443681928907 ], [ -78.903109151324642, 42.930357845634006 ], [ -78.901834110429547, 42.930639013085603 ], [ -78.900659484006212, 42.929123959777144 ], [ -78.900580076597706, 42.926266420627407 ], [ -78.900429083107412, 42.922319764339214 ], [ -78.900760203399443, 42.921241687908463 ], [ -78.900915847459643, 42.920702745364295 ], [ -78.901546249652824, 42.919608991462646 ], [ -78.901818736656523, 42.919099082084145 ], [ -78.902109568540993, 42.917890121065405 ], [ -78.902235137734323, 42.917263840573362 ], [ -78.902332190342975, 42.916885163554234 ], [ -78.902181178734878, 42.915320070874564 ], [ -78.902124132571586, 42.914957051428722 ], [ -78.901515270083607, 42.914955690463479 ], [ -78.901515776779945, 42.914868491601403 ], [ -78.901518012111453, 42.914820720145464 ], [ -78.902133312499032, 42.914818734938109 ], [ -78.902013473047873, 42.912693915230498 ], [ -78.902533701297116, 42.911804550020491 ], [ -78.902754669155058, 42.91241524030513 ], [ -78.902915198716912, 42.912829692706374 ], [ -78.903067379972413, 42.913542508969392 ], [ -78.903271021262256, 42.914633587956949 ], [ -78.903586313334159, 42.916226591537594 ], [ -78.903778949397676, 42.917099452743621 ], [ -78.904186211959313, 42.919245250066467 ], [ -78.904440341493142, 42.920518157479009 ], [ -78.90462435719698, 42.921631183782786 ], [ -78.904737308753241, 42.922409657703007 ], [ -78.904809627095929, 42.922969833964459 ], [ -78.904909494683295, 42.923729878069061 ], [ -78.904963312104968, 42.924134968048868 ], [ -78.905138306699939, 42.92523964937368 ], [ -78.905314300750192, 42.926570915527613 ], [ -78.905514378516472, 42.927872068041225 ], [ -78.906210330417593, 42.929508631350856 ], [ -78.906212496791639, 42.929923496936539 ], [ -78.904706019158724, 42.93010111178603 ], [ -78.905197192220299, 42.930046811396345 ], [ -78.906216361094181, 42.92992699817907 ], [ -78.906115574986444, 42.932064584547803 ], [ -78.906825072161936, 42.93409383314517 ], [ -78.904965379070646, 42.932881019280011 ], [ -78.904645083186239, 42.932662492287299 ], [ -78.904309426718299, 42.932455367033597 ], [ -78.904007372774672, 42.932239695581686 ], [ -78.903451768029086, 42.931871460603965 ], [ -78.902201542601702, 42.931008740628926 ], [ -78.90202594441206, 42.930895716102775 ], [ -78.901875034453923, 42.930711282252666 ], [ -78.901398118730953, 42.931022774185323 ], [ -78.901651811431563, 42.931225910422974 ], [ -78.902350261746577, 42.931882739510314 ], [ -78.902915944600963, 42.932388693438718 ], [ -78.902629510589421, 42.932600797271924 ], [ -78.90386120948564, 42.933656869024439 ], [ -78.904459278893853, 42.933756743178414 ], [ -78.907262208987191, 42.93695979109124 ], [ -78.908521859033641, 42.938597978997493 ], [ -78.908726708704449, 42.939380438521361 ], [ -78.908730080667112, 42.939389593415029 ], [ -78.909516776232223, 42.94249073687056 ], [ -78.908916416369607, 42.943086737261048 ], [ -78.909717332335276, 42.943989928321862 ], [ -78.908911507135457, 42.944586541589423 ], [ -78.909517706327776, 42.945094129940117 ], [ -78.908916874063678, 42.945605236619571 ], [ -78.910401234703158, 42.953596504184752 ], [ -78.91267796524653, 42.95575904357041 ], [ -78.911761223912649, 42.95645513001049 ], [ -78.908360118215342, 42.958956305281539 ], [ -78.907559933526329, 42.959556760400766 ], [ -78.906759942770009, 42.96015441060144 ], [ -78.906559296799884, 42.960355305505615 ], [ -78.905758658446118, 42.960854199466368 ], [ -78.905059515844783, 42.961454324852951 ], [ -78.90406141411782, 42.962055311372481 ], [ -78.903362054777176, 42.962655454327887 ], [ -78.902561472684425, 42.963154298160894 ], [ -78.901761289295081, 42.963754712362615 ], [ -78.9009612024266, 42.964355120648463 ], [ -78.899159550375217, 42.965655144949189 ], [ -78.898359376221833, 42.966255535118037 ], [ -78.896461726581393, 42.96485586650212 ], [ -78.894559418319659, 42.963256015240091 ], [ -78.893858268674535, 42.962755823238531 ], [ -78.893261164733602, 42.962156457059415 ], [ -78.892959509184109, 42.960856745493309 ], [ -78.890458983145905, 42.958355523664345 ], [ -78.888960817281159, 42.958356844401585 ], [ -78.885061244442412, 42.958455047304646 ], [ -78.883058932473872, 42.958454819792294 ], [ -78.882158658648564, 42.958454484475844 ], [ -78.881758903828015, 42.958455527314996 ], [ -78.881157861160332, 42.958555843687328 ], [ -78.880059519299948, 42.958555897250605 ], [ -78.879260144717819, 42.958555277552378 ], [ -78.878557723983036, 42.95855709124055 ], [ -78.878060939280772, 42.958555572638929 ], [ -78.875158678177471, 42.958656381264539 ], [ -78.87425840060051, 42.958655874070374 ], [ -78.873260883445468, 42.958655715870663 ], [ -78.872457771560946, 42.958655030696043 ], [ -78.871460329053207, 42.958654856616953 ], [ -78.870358249228573, 42.958654826503142 ], [ -78.869259942906652, 42.958654886107276 ], [ -78.865557719794268, 42.958655787081888 ], [ -78.861257477462374, 42.958556554292315 ], [ -78.858359034813049, 42.958657010029732 ], [ -78.855657578720312, 42.958556430976316 ], [ -78.854656835161208, 42.958654869409195 ], [ -78.853957814556878, 42.958554946837822 ], [ -78.853659403684276, 42.958657229161389 ], [ -78.853259671690395, 42.958655373694626 ], [ -78.852859914568072, 42.958656315615869 ], [ -78.85175743026079, 42.958554639873995 ], [ -78.850958457227449, 42.958655289085193 ], [ -78.850558737387288, 42.958656222882844 ], [ -78.85005767815349, 42.958555923956126 ], [ -78.849459880382412, 42.958554516542854 ], [ -78.848357925732358, 42.958557155360594 ] ] ], [ [ [ -78.901518012111453, 42.914820720145464 ], [ -78.901516053815271, 42.914820815724703 ], [ -78.901516056764024, 42.91482072644893 ], [ -78.901518012111453, 42.914820720145464 ] ] ], [ [ [ -78.901516053815271, 42.914820815724703 ], [ -78.901515776779945, 42.914868491601403 ], [ -78.901511709782966, 42.91495540755421 ], [ -78.901511626800385, 42.914955682310051 ], [ -78.901511599202905, 42.914955682248291 ], [ -78.901516053815271, 42.914820815724703 ] ] ], [ [ [ -78.901515270083607, 42.914955690463479 ], [ -78.901515268331408, 42.914955992002454 ], [ -78.901511530128445, 42.914956002391477 ], [ -78.901511626800385, 42.914955682310051 ], [ -78.901515270083607, 42.914955690463479 ] ] ] ] } }
]
}
......@@ -4,6 +4,7 @@ span.card {
border: none;
}
/* --- Login Screen Styling --- */
.login-card {
display: inline-block; /* Or use d-flex on the parent to center it */
......@@ -85,3 +86,5 @@ html, body {
}
......@@ -23,7 +23,8 @@ uses
View.ErrorPage in 'View.ErrorPage.pas' {FViewErrorPage: TWebForm} {*.html},
View.ComplaintDetails in 'View.ComplaintDetails.pas' {FViewComplaintDetails: TWebForm} {*.html},
View.UnitDetails in 'View.UnitDetails.pas' {FViewUnitDetails: TWebForm} {*.html},
uMapFilters in 'uMapFilters.pas';
uMapFilters in 'uMapFilters.pas',
View.ComplaintArchive in 'View.ComplaintArchive.pas' {FViewComplaintArchive: TWebForm} {*.html};
{$R *.res}
......
......@@ -97,8 +97,9 @@
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_Release>3</VerInfo_Release>
<TMSWebBrowser>1</TMSWebBrowser>
<TMSWebSingleInstance>1</TMSWebSingleInstance>
<TMSUseJSDebugger>2</TMSUseJSDebugger>
<TMSWebOutputPath>..\emiMobileServer\bin\static</TMSWebOutputPath>
<TMSWebSingleInstance>1</TMSWebSingleInstance>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
......@@ -188,6 +189,11 @@
<DesignClass>TWebForm</DesignClass>
</DCCReference>
<DCCReference Include="uMapFilters.pas"/>
<DCCReference Include="View.ComplaintArchive.pas">
<Form>FViewComplaintArchive</Form>
<FormType>dfm</FormType>
<DesignClass>TWebForm</DesignClass>
</DCCReference>
<None Include="index.html"/>
<None Include="css\app.css"/>
<None Include="css\spinner.css"/>
......@@ -506,12 +512,7 @@
<Source>
<Source Name="MainSource">webEmiMobile.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k290.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp290.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k290.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp290.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
<Excluded_Packages/>
</Delphi.Personality>
<Deployment Version="5">
<DeployFile Condition="'$(SKIADIR)'==''" Required="true" LocalName="$(BDS)\bin64\sk4d.dll" Configuration="Debug" Class="Skia">
......
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