Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
KGOrders
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Cam Hayes
KGOrders
Commits
29f8d956
Commit
29f8d956
authored
May 08, 2025
by
Mac Stephens
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated spinner, added utils.pas
parent
35e846f1
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
365 additions
and
199 deletions
+365
-199
Utils.pas
kgOrdersClient/Utils.pas
+159
-0
View.EditUser.pas
kgOrdersClient/View.EditUser.pas
+4
-7
View.Items.pas
kgOrdersClient/View.Items.pas
+3
-7
View.Main.html
kgOrdersClient/View.Main.html
+10
-0
View.Main.pas
kgOrdersClient/View.Main.pas
+1
-2
View.OrderEntryCorrugated.pas
kgOrdersClient/View.OrderEntryCorrugated.pas
+3
-5
View.OrderEntryCuttingDie.pas
kgOrdersClient/View.OrderEntryCuttingDie.pas
+3
-5
View.OrderEntryWeb.pas
kgOrdersClient/View.OrderEntryWeb.pas
+3
-5
View.Orders.html
kgOrdersClient/View.Orders.html
+3
-0
View.Orders.pas
kgOrdersClient/View.Orders.pas
+22
-29
spinner.css
kgOrdersClient/css/spinner.css
+95
-0
index.html
kgOrdersClient/index.html
+22
-135
webKGOrders.dpr
kgOrdersClient/webKGOrders.dpr
+2
-1
webKGOrders.dproj
kgOrdersClient/webKGOrders.dproj
+32
-0
kgOrdersServer.ini
kgOrdersServer/kgOrdersServer.ini
+3
-3
No files found.
kgOrdersClient/Utils.pas
0 → 100644
View file @
29f8d956
unit
Utils
;
interface
uses
System
.
Classes
,
SysUtils
,
JS
,
Web
,
WEBLib
.
Forms
,
WEBLib
.
Toast
,
DateUtils
;
procedure
ShowStatusMessage
(
const
AMessage
,
AClass
:
string
;
const
AElementId
:
string
);
procedure
HideStatusMessage
(
const
AElementId
:
string
);
procedure
ShowSpinner
(
SpinnerID
:
string
);
procedure
HideSpinner
(
SpinnerID
:
string
);
function
CalculateAge
(
DateOfBirth
:
TDateTime
):
Integer
;
function
FormatPhoneNumber
(
PhoneNumber
:
string
):
string
;
procedure
ApplyReportTitle
(
CurrentReportType
:
string
);
// function FormatDollarValue(ValueStr: string): string;
implementation
procedure
ShowStatusMessage
(
const
AMessage
,
AClass
:
string
;
const
AElementId
:
string
);
var
StatusMessage
:
TJSHTMLElement
;
begin
StatusMessage
:=
TJSHTMLElement
(
document
.
getElementById
(
AElementId
));
if
Assigned
(
StatusMessage
)
then
begin
if
AMessage
=
''
then
begin
StatusMessage
.
style
.
setProperty
(
'display'
,
'none'
);
StatusMessage
.
className
:=
''
;
StatusMessage
.
innerHTML
:=
''
;
end
else
begin
StatusMessage
.
innerHTML
:=
AMessage
;
StatusMessage
.
className
:=
'alert '
+
AClass
;
StatusMessage
.
style
.
setProperty
(
'display'
,
'block'
);
end
end
else
console
.
log
(
'Error: Status message element not found'
);
end
;
procedure
HideStatusMessage
(
const
AElementId
:
string
);
var
StatusMessage
:
TJSHTMLElement
;
begin
StatusMessage
:=
TJSHTMLElement
(
document
.
getElementById
(
AElementId
));
if
Assigned
(
StatusMessage
)
then
begin
StatusMessage
.
style
.
setProperty
(
'display'
,
'none'
);
StatusMessage
.
className
:=
''
;
StatusMessage
.
innerHTML
:=
''
;
end
else
console
.
log
(
'Error: Status message element not found'
);
end
;
procedure
ShowSpinner
(
SpinnerID
:
string
);
var
SpinnerElement
:
TJSHTMLElement
;
begin
SpinnerElement
:=
TJSHTMLElement
(
document
.
getElementById
(
SpinnerID
));
if
Assigned
(
SpinnerElement
)
then
begin
SpinnerElement
.
classList
.
remove
(
'd-none'
);
SpinnerElement
.
classList
.
add
(
'd-block'
);
end
;
end
;
procedure
HideSpinner
(
SpinnerID
:
string
);
var
SpinnerElement
:
TJSHTMLElement
;
begin
SpinnerElement
:=
TJSHTMLElement
(
document
.
getElementById
(
SpinnerID
));
if
Assigned
(
SpinnerElement
)
then
begin
SpinnerElement
.
classList
.
remove
(
'd-block'
);
SpinnerElement
.
classList
.
add
(
'd-none'
);
end
;
end
;
function
CalculateAge
(
DateOfBirth
:
TDateTime
):
Integer
;
var
Today
,
BirthDate
:
TJSDate
;
Year
,
Month
,
Day
,
BirthYear
,
BirthMonth
,
BirthDay
:
NativeInt
;
DOBString
:
string
;
begin
Today
:=
TJSDate
.
New
;
Year
:=
Today
.
FullYear
;
Month
:=
Today
.
Month
+
1
;
Day
:=
Today
.
Date
;
// Formats the DateOfBirth as an ISO 8601 date string
DOBString
:=
FormatDateTime
(
'yyyy-mm-dd'
,
DateOfBirth
);
BirthDate
:=
TJSDate
.
New
(
DOBString
);
if
BirthDate
=
nil
then
begin
Exit
(
0
);
// Exit the function with an age of 0 if the date creation fails
end
;
BirthYear
:=
BirthDate
.
FullYear
;
BirthMonth
:=
BirthDate
.
Month
+
1
;
BirthDay
:=
BirthDate
.
Date
;
Result
:=
Year
-
BirthYear
;
if
(
Month
<
BirthMonth
)
or
((
Month
=
BirthMonth
)
and
(
Day
<
BirthDay
))
then
Dec
(
Result
);
end
;
function
FormatPhoneNumber
(
PhoneNumber
:
string
):
string
;
var
Digits
:
string
;
begin
Digits
:=
PhoneNumber
.
Replace
(
'('
,
''
).
Replace
(
')'
,
''
).
Replace
(
'-'
,
''
).
Replace
(
' '
,
''
);
case
Length
(
Digits
)
of
7
:
Result
:=
Format
(
'%s-%s'
,
[
Copy
(
Digits
,
1
,
3
),
Copy
(
Digits
,
4
,
4
)]);
10
:
Result
:=
Format
(
'(%s) %s-%s'
,
[
Copy
(
Digits
,
1
,
3
),
Copy
(
Digits
,
4
,
3
),
Copy
(
Digits
,
7
,
4
)]);
else
// If the number does not have 7 or 10 digits, whatever they typed is returned
Result
:=
PhoneNumber
;
end
;
end
;
procedure
ApplyReportTitle
(
CurrentReportType
:
string
);
var
CrimeTitleElement
:
TJSHTMLElement
;
begin
CrimeTitleElement
:=
TJSHTMLElement
(
document
.
getElementById
(
'crime_title'
));
if
Assigned
(
CrimeTitleElement
)
then
CrimeTitleElement
.
innerText
:=
CurrentReportType
else
Console
.
Log
(
'Element with ID "crime_title" not found.'
);
end
;
// Used html number input type to restrict the input instead of this function
// function FormatDollarValue(ValueStr: string): string;
// var
// i: Integer;
// begin
// Result := ''; // Initialize the result
// // Filter out any characters that are not digits or decimal point
// for i := 1 to Length(ValueStr) do
// begin
// if (Pos(ValueStr[i], '0123456789.') > 0) then
// begin
// Result := Result + ValueStr[i];
// end;
// end;
// end;
end
.
kgOrdersClient/View.EditUser.pas
View file @
29f8d956
...
@@ -80,7 +80,8 @@ Windows,
...
@@ -80,7 +80,8 @@ Windows,
View
.
Main
,
View
.
Main
,
View
.
Users
,
View
.
Users
,
VCL
.
Dialogs
,
VCL
.
Dialogs
,
ConnectionModule
;
ConnectionModule
,
Utils
;
procedure
TFViewEditUser
.
btnCancelClick
(
Sender
:
TObject
);
procedure
TFViewEditUser
.
btnCancelClick
(
Sender
:
TObject
);
// Cancels the edit or addition
// Cancels the edit or addition
...
@@ -101,9 +102,7 @@ begin
...
@@ -101,9 +102,7 @@ begin
else
else
AddUser
();
AddUser
();
WebTimer1
.
Enabled
:=
true
;
WebTimer1
.
Enabled
:=
true
;
asm
Utils
.
ShowSpinner
(
'spinner'
);
startSpinner
();
end
;
end
;
end
;
function
TFViewEditUser
.
AddUser
():
string
;
function
TFViewEditUser
.
AddUser
():
string
;
...
@@ -221,9 +220,7 @@ end;
...
@@ -221,9 +220,7 @@ end;
procedure
TFViewEditUser
.
WebTimer1Timer
(
Sender
:
TObject
);
procedure
TFViewEditUser
.
WebTimer1Timer
(
Sender
:
TObject
);
begin
begin
WebTimer1
.
Enabled
:=
False
;
WebTimer1
.
Enabled
:=
False
;
asm
Utils
.
HideSpinner
(
'spinner'
);
endSpinner
();
end
;
if
(
not
Info
.
Contains
(
'Failure'
))
then
if
(
not
Info
.
Contains
(
'Failure'
))
then
begin
begin
FViewMain
.
ShowUserForm
(
Info
);
FViewMain
.
ShowUserForm
(
Info
);
...
...
kgOrdersClient/View.Items.pas
View file @
29f8d956
...
@@ -55,7 +55,7 @@ implementation
...
@@ -55,7 +55,7 @@ implementation
uses
uses
JS
,
XData
.
Model
.
Classes
,
JS
,
XData
.
Model
.
Classes
,
ConnectionModule
,
Auth
.
Service
;
ConnectionModule
,
Auth
.
Service
,
Utils
;
{$R *.dfm}
{$R *.dfm}
...
@@ -304,18 +304,14 @@ begin
...
@@ -304,18 +304,14 @@ begin
console
.
log
(
'correct'
);
console
.
log
(
'correct'
);
if
PageNumber
>
0
then
if
PageNumber
>
0
then
begin
begin
asm
Utils
.
ShowSpinner
(
'spinner'
);
startSpinner
();
end
;
xdcResponse
:=
await
(
XDataWebClient1
.
RawInvokeAsync
(
'ILookupService.GetItems'
,
xdcResponse
:=
await
(
XDataWebClient1
.
RawInvokeAsync
(
'ILookupService.GetItems'
,
[
searchOptions
]));
[
searchOptions
]));
itemList
:=
TJSObject
(
xdcResponse
.
Result
);
itemList
:=
TJSObject
(
xdcResponse
.
Result
);
data
:=
TJSArray
(
itemList
[
'data'
]);
data
:=
TJSArray
(
itemList
[
'data'
]);
itemListLength
:=
integer
(
itemList
[
'count'
]);
itemListLength
:=
integer
(
itemList
[
'count'
]);
ClearTable
();
ClearTable
();
asm
Utils
.
HideSpinner
(
'Spinner'
);
setTimeout
(
endSpinner
,
2000
);
end
;
for
i
:=
0
to
data
.
Length
-
1
do
for
i
:=
0
to
data
.
Length
-
1
do
begin
begin
item
:=
TJSObject
(
data
[
i
]);
item
:=
TJSObject
(
data
[
i
]);
...
...
kgOrdersClient/View.Main.html
View file @
29f8d956
...
@@ -62,3 +62,13 @@
...
@@ -62,3 +62,13 @@
</div>
</div>
</div>
</div>
<div
id=
"spinner"
class=
"position-absolute top-50 start-50 translate-middle d-none"
>
<div
class=
"lds-roller"
>
<div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div>
</div>
</div>
kgOrdersClient/View.Main.pas
View file @
29f8d956
...
@@ -50,8 +50,7 @@ type
...
@@ -50,8 +50,7 @@ type
{ Public declarations }
{ Public declarations }
class
procedure
Display
(
LogoutProc
:
TLogoutProc
);
class
procedure
Display
(
LogoutProc
:
TLogoutProc
);
procedure
ShowForm
(
AFormClass
:
TWebFormClass
);
procedure
ShowForm
(
AFormClass
:
TWebFormClass
);
procedure
EditUser
(
Mode
,
Username
,
Password
,
Name
,
Status
,
Email
,
procedure
EditUser
(
Mode
,
Username
,
Password
,
Name
,
Status
,
Email
,
Access
,
Rights
,
Perspective
,
QB
:
string
);
Access
,
Rights
,
Perspective
,
QB
:
string
);
procedure
ViewOrderEntryCorrugated
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
procedure
ViewOrderEntryCorrugated
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
procedure
ViewOrderEntryWeb
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
procedure
ViewOrderEntryWeb
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
procedure
ViewOrderEntryCuttingDie
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
procedure
ViewOrderEntryCuttingDie
(
orderInfo
,
customerInfo
,
mode
,
info
:
string
);
...
...
kgOrdersClient/View.OrderEntryCorrugated.pas
View file @
29f8d956
...
@@ -260,7 +260,7 @@ implementation
...
@@ -260,7 +260,7 @@ implementation
{$R *.dfm}
{$R *.dfm}
uses
uses
View
.
Home
,
View
.
Main
,
View
.
AddOrder
;
View
.
Home
,
View
.
Main
,
View
.
AddOrder
,
Utils
;
procedure
TFOrderEntryCorrugated
.
sendOrderToServer
();
procedure
TFOrderEntryCorrugated
.
sendOrderToServer
();
var
var
...
@@ -532,6 +532,7 @@ begin
...
@@ -532,6 +532,7 @@ begin
end
end
else
else
begin
begin
Utils
.
ShowSpinner
(
'spinner'
);
asm
asm
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
// ensure the modal lives directly under <body>
// ensure the modal lives directly under <body>
...
@@ -543,7 +544,6 @@ begin
...
@@ -543,7 +544,6 @@ begin
keyboard: false
keyboard: false
}
);
}
);
bsModal
.
hide
();
bsModal
.
hide
();
startSpinner
();
end
;
end
;
delOrder
();
delOrder
();
tmrReturn
.
Enabled
:=
true
;
tmrReturn
.
Enabled
:=
true
;
...
@@ -1006,9 +1006,7 @@ end;
...
@@ -1006,9 +1006,7 @@ end;
procedure
TFOrderEntryCorrugated
.
tmrReturnTimer
(
Sender
:
TObject
);
procedure
TFOrderEntryCorrugated
.
tmrReturnTimer
(
Sender
:
TObject
);
begin
begin
asm
Utils
.
HideSpinner
(
'spinner'
);
endSpinner
();
end
;
tmrReturn
.
Enabled
:=
false
;
tmrReturn
.
Enabled
:=
false
;
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
end
;
end
;
...
...
kgOrdersClient/View.OrderEntryCuttingDie.pas
View file @
29f8d956
...
@@ -121,7 +121,7 @@ implementation
...
@@ -121,7 +121,7 @@ implementation
{$R *.dfm}
{$R *.dfm}
uses
uses
View
.
Home
,
View
.
Main
,
View
.
AddOrder
;
View
.
Home
,
View
.
Main
,
View
.
AddOrder
,
Utils
;
function
TFOrderEntryCuttingDie
.
VerifyOrder
:
Boolean
;
function
TFOrderEntryCuttingDie
.
VerifyOrder
:
Boolean
;
var
var
...
@@ -305,6 +305,7 @@ begin
...
@@ -305,6 +305,7 @@ begin
end
end
else
else
begin
begin
Utils
.
ShowSpinner
(
'spinner'
);
asm
asm
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
// ensure the modal lives directly under <body>
// ensure the modal lives directly under <body>
...
@@ -316,7 +317,6 @@ begin
...
@@ -316,7 +317,6 @@ begin
keyboard: false
keyboard: false
}
);
}
);
bsModal
.
hide
();
bsModal
.
hide
();
startSpinner
();
end
;
end
;
delOrder
();
delOrder
();
tmrReturn
.
Enabled
:=
true
;
tmrReturn
.
Enabled
:=
true
;
...
@@ -583,9 +583,7 @@ end;
...
@@ -583,9 +583,7 @@ end;
procedure
TFOrderEntryCuttingDie
.
tmrReturnTimer
(
Sender
:
TObject
);
procedure
TFOrderEntryCuttingDie
.
tmrReturnTimer
(
Sender
:
TObject
);
begin
begin
asm
Utils
.
HideSpinner
(
'spinner'
);
endSpinner
();
end
;
tmrReturn
.
Enabled
:=
false
;
tmrReturn
.
Enabled
:=
false
;
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
end
;
end
;
...
...
kgOrdersClient/View.OrderEntryWeb.pas
View file @
29f8d956
...
@@ -256,7 +256,7 @@ implementation
...
@@ -256,7 +256,7 @@ implementation
{$R *.dfm}
{$R *.dfm}
uses
uses
View
.
Home
,
View
.
Main
,
View
.
AddOrder
;
View
.
Home
,
View
.
Main
,
View
.
AddOrder
,
Utils
;
procedure
TFOrderEntryWeb
.
btnSaveClick
(
Sender
:
TObject
);
procedure
TFOrderEntryWeb
.
btnSaveClick
(
Sender
:
TObject
);
begin
begin
...
@@ -503,6 +503,7 @@ begin
...
@@ -503,6 +503,7 @@ begin
end
end
else
else
begin
begin
Utils
.
ShowSpinner
(
'spinner'
);
asm
asm
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
var
modal
=
document
.
getElementById
(
'confirmation_modal'
);
// ensure the modal is directly under <body>
// ensure the modal is directly under <body>
...
@@ -514,7 +515,6 @@ begin
...
@@ -514,7 +515,6 @@ begin
keyboard: false
keyboard: false
}
);
}
);
bsModal
.
hide
();
bsModal
.
hide
();
startSpinner
();
end
;
end
;
delOrder
();
delOrder
();
tmrReturn
.
Enabled
:=
true
;
tmrReturn
.
Enabled
:=
true
;
...
@@ -934,9 +934,7 @@ end;
...
@@ -934,9 +934,7 @@ end;
procedure
TFOrderEntryWeb
.
tmrReturnTimer
(
Sender
:
TObject
);
procedure
TFOrderEntryWeb
.
tmrReturnTimer
(
Sender
:
TObject
);
begin
begin
asm
Utils
.
HideSpinner
(
'spinner'
);
endSpinner
();
end
;
tmrReturn
.
Enabled
:=
false
;
tmrReturn
.
Enabled
:=
false
;
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
FViewMain
.
ViewOrders
(
'Success: Order Successfully Deleted'
);
end
;
end
;
...
...
kgOrdersClient/View.Orders.html
View file @
29f8d956
...
@@ -71,3 +71,6 @@
...
@@ -71,3 +71,6 @@
</div>
</div>
</div>
</div>
kgOrdersClient/View.Orders.pas
View file @
29f8d956
...
@@ -121,15 +121,29 @@ var
...
@@ -121,15 +121,29 @@ var
implementation
implementation
uses
uses
XData
.
Model
.
Classes
,
View
.
Main
,
View
.
AddOrder
,
View
.
Search
,
View
.
SetStatus
;
XData
.
Model
.
Classes
,
View
.
Main
,
View
.
AddOrder
,
View
.
Search
,
View
.
SetStatus
,
Utils
;
{$R *.dfm}
{$R *.dfm}
class
function
TFViewOrders
.
CreateForm
(
AElementID
,
Info
:
string
):
TWebForm
;
var
localInfo
:
string
;
begin
localInfo
:=
info
;
Application
.
CreateForm
(
TFViewOrders
,
AElementID
,
Result
,
procedure
(
AForm
:
TObject
)
begin
with
TFViewOrders
(
AForm
)
do
begin
TFViewOrders
(
AForm
).
info
:=
LocalInfo
;
end
;
end
);
end
;
procedure
TFViewOrders
.
btnPDFClick
(
Sender
:
TObject
);
procedure
TFViewOrders
.
btnPDFClick
(
Sender
:
TObject
);
begin
begin
asm
Utils
.
ShowSpinner
(
'spinner'
);
startSpinner
();
end
;
GenerateReportPDF
;
GenerateReportPDF
;
end
;
end
;
...
@@ -150,8 +164,8 @@ begin
...
@@ -150,8 +164,8 @@ begin
// Open the PDF in a new browser tab without needing a different form
// Open the PDF in a new browser tab without needing a different form
// This method is much faster too, even for large datasets
// This method is much faster too, even for large datasets
window
.
open
(
pdfURL
,
'_blank'
);
window
.
open
(
pdfURL
,
'_blank'
);
asm
begin
endSpinner
(
);
Utils
.
HideSpinner
(
'Spinner'
);
end
;
end
;
end
;
end
;
...
@@ -174,6 +188,7 @@ var
...
@@ -174,6 +188,7 @@ var
today
:
TDateTime
;
today
:
TDateTime
;
params
:
TStringList
;
params
:
TStringList
;
begin
begin
Utils
.
ShowSpinner
(
'spinner'
);
DMConnection
.
ApiConnection
.
Connected
:=
True
;
DMConnection
.
ApiConnection
.
Connected
:=
True
;
PageNumber
:=
1
;
PageNumber
:=
1
;
TotalPages
:=
1
;
// Initial total pages
TotalPages
:=
1
;
// Initial total pages
...
@@ -255,22 +270,6 @@ begin
...
@@ -255,22 +270,6 @@ begin
getOrders
(
generateSearchOptions
());
getOrders
(
generateSearchOptions
());
end
;
end
;
class
function
TFViewOrders
.
CreateForm
(
AElementID
,
Info
:
string
):
TWebForm
;
var
localInfo
:
string
;
begin
localInfo
:=
info
;
Application
.
CreateForm
(
TFViewOrders
,
AElementID
,
Result
,
procedure
(
AForm
:
TObject
)
begin
with
TFViewOrders
(
AForm
)
do
begin
TFViewOrders
(
AForm
).
info
:=
LocalInfo
;
end
;
end
);
end
;
procedure
TFViewOrders
.
ShowAddOrderForm
();
procedure
TFViewOrders
.
ShowAddOrderForm
();
// displays the add order pop-up so the user can choose a customer
// displays the add order pop-up so the user can choose a customer
...
@@ -655,9 +654,6 @@ var
...
@@ -655,9 +654,6 @@ var
begin
begin
if
PageNumber
>
0
then
if
PageNumber
>
0
then
begin
begin
asm
startSpinner
();
end
;
xdcResponse
:=
await
(
XDataWebClient1
.
RawInvokeAsync
(
'ILookupService.GetOrders'
,
[
searchOptions
]));
xdcResponse
:=
await
(
XDataWebClient1
.
RawInvokeAsync
(
'ILookupService.GetOrders'
,
[
searchOptions
]));
orderList
:=
TJSObject
(
xdcResponse
.
Result
);
orderList
:=
TJSObject
(
xdcResponse
.
Result
);
...
@@ -666,10 +662,6 @@ begin
...
@@ -666,10 +662,6 @@ begin
xdwdsOrders
.
SetJsonData
(
orderList
[
'data'
]);
xdwdsOrders
.
SetJsonData
(
orderList
[
'data'
]);
xdwdsOrders
.
Open
;
xdwdsOrders
.
Open
;
asm
endSpinner
();
end
;
orderListLength
:=
integer
(
orderList
[
'count'
]);
orderListLength
:=
integer
(
orderList
[
'count'
]);
TotalPages
:=
(
(
orderListLength
+
PageSize
-
1
)
div
PageSize
);
TotalPages
:=
(
(
orderListLength
+
PageSize
-
1
)
div
PageSize
);
...
@@ -692,6 +684,7 @@ begin
...
@@ -692,6 +684,7 @@ begin
// Optional: Continue using pagination if needed
// Optional: Continue using pagination if needed
GeneratePagination
(
TotalPages
);
GeneratePagination
(
TotalPages
);
Utils
.
HideSpinner
(
'spinner'
);
end
;
end
;
end
;
end
;
...
...
kgOrdersClient/css/spinner.css
0 → 100644
View file @
29f8d956
.lds-roller
{
display
:
inline-block
;
position
:
relative
;
width
:
80px
;
height
:
80px
;
}
.lds-roller
div
{
animation
:
lds-roller
1.2s
cubic-bezier
(
0.5
,
0
,
0.5
,
1
)
infinite
;
transform-origin
:
40px
40px
;
}
.lds-roller
div
:after
{
content
:
" "
;
display
:
block
;
position
:
absolute
;
width
:
10px
;
height
:
10px
;
border-radius
:
50%
;
background
:
#204d74
;
margin
:
-5px
0
0
-5px
;
}
.lds-roller
div
:nth-child
(
1
)
{
animation-delay
:
-0.036s
;
}
.lds-roller
div
:nth-child
(
1
)
:after
{
top
:
63px
;
left
:
63px
;
}
.lds-roller
div
:nth-child
(
2
)
{
animation-delay
:
-0.072s
;
}
.lds-roller
div
:nth-child
(
2
)
:after
{
top
:
68px
;
left
:
56px
;
}
.lds-roller
div
:nth-child
(
3
)
{
animation-delay
:
-0.108s
;
}
.lds-roller
div
:nth-child
(
3
)
:after
{
top
:
71px
;
left
:
48px
;
}
.lds-roller
div
:nth-child
(
4
)
{
animation-delay
:
-0.144s
;
}
.lds-roller
div
:nth-child
(
4
)
:after
{
top
:
72px
;
left
:
40px
;
}
.lds-roller
div
:nth-child
(
5
)
{
animation-delay
:
-0.18s
;
}
.lds-roller
div
:nth-child
(
5
)
:after
{
top
:
71px
;
left
:
32px
;
}
.lds-roller
div
:nth-child
(
6
)
{
animation-delay
:
-0.216s
;
}
.lds-roller
div
:nth-child
(
6
)
:after
{
top
:
68px
;
left
:
24px
;
}
.lds-roller
div
:nth-child
(
7
)
{
animation-delay
:
-0.252s
;
}
.lds-roller
div
:nth-child
(
7
)
:after
{
top
:
63px
;
left
:
17px
;
}
.lds-roller
div
:nth-child
(
8
)
{
animation-delay
:
-0.288s
;
}
.lds-roller
div
:nth-child
(
8
)
:after
{
top
:
56px
;
left
:
12px
;
}
@keyframes
lds-roller
{
0
%
{
transform
:
rotate
(
0deg
);
}
100
%
{
transform
:
rotate
(
360deg
);
}
}
kgOrdersClient/index.html
View file @
29f8d956
<html><head>
<html><head>
<meta
http-equiv=
"Content-type"
content=
"text/html; charset=utf-8"
>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<meta
content=
"width=device-width, initial-scale=1"
name=
"viewport"
/>
<noscript>
Your browser does not support JavaScript!
</noscript>
<noscript>
Your browser does not support JavaScript!
</noscript>
<link
rel=
"icon"
href=
"data:;base64,="
>
<link
href=
"data:;base64,="
rel=
"icon"
/>
<title>
Web KG Orders
</title>
<title>
Web KG Orders
</title>
<link
href=
"css/app.css"
rel=
"stylesheet"
type=
"text/css"
>
<link
href=
"https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/css/flag-icon.min.css"
rel=
"stylesheet"
/>
<link
href=
"https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/css/flag-icon.min.css"
rel=
"stylesheet"
>
<link
href=
"https://fonts.googleapis.com/icon?family=Material+Icons"
rel=
"stylesheet"
/>
<link
href=
"https://fonts.googleapis.com/icon?family=Material+Icons"
rel=
"stylesheet"
>
<link
href=
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css"
rel=
"stylesheet"
/>
<link
href=
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css"
rel=
"stylesheet"
>
<link
crossorigin=
"anonymous"
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"
rel=
"stylesheet"
/>
<link
crossorigin=
"anonymous"
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"
rel=
"stylesheet"
>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js"
type=
"text/javascript"
></script>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js"
type=
"text/javascript"
></script>
<script
crossorigin=
"anonymous"
integrity=
"sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4="
src=
"https://code.jquery.com/jquery-3.7.1.js"
></script>
<script
src=
"https://code.jquery.com/jquery-3.7.1.js"
integrity=
"sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4="
crossorigin=
"anonymous"
></script>
<script
src=
"$(ProjectName).js"
type=
"text/javascript"
></script>
<script
type=
"text/javascript"
src=
"$(ProjectName).js"
></script>
<title>
EM Systems webKGOrders App
</title>
<script>
<link
href=
"css/app.css"
rel=
"stylesheet"
type=
"text/css"
/>
function
startSpinner
()
{
<link
href=
"css/spinner.css"
rel=
"stylesheet"
type=
"text/css"
>
//window.scrollTo(0, 0);
<script
src=
"$(ProjectName).js"
type=
"text/javascript"
></script>
document
.
body
.
style
.
setProperty
(
'--spinner-top'
,
window
.
scrollY
+
'px'
);
<body>
$
(
".hide-scene"
).
addClass
(
"scene"
);
</body>
}
<script
type=
"text/javascript"
>
rtl
.
run
();
</script>
</html>
function
endSpinner
()
{
$
(
".hide-scene"
).
removeClass
(
"scene"
);
}
</script>
<title>
EM Systems webKGOrders App
</title>
<script
type=
"text/javascript"
src=
"$(ProjectName).js"
></script>
<style>
/*-----svg loader styles-------*/
:root
{
--spinner-top
:
0px
;
}
.hide-scene
{
display
:
none
;
}
.scene
{
position
:
absolute
;
z-index
:
9999999
;
top
:
var
(
--spinner-top
);
width
:
100%
;
height
:
100%
;
perspective
:
600
;
display
:
-webkit-box
;
display
:
-moz-box
;
display
:
-ms-flexbox
;
display
:
-webkit-flex
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.scene
svg
{
width
:
165px
;
height
:
165px
;
/* background-color: lavender; */
}
@keyframes
arrow-spin
{
50
%
{
transform
:
rotateY
(
360deg
);
}
}
/*-------------------------------------------*/
</style>
</head>
<body>
</body>
<script
type=
"text/javascript"
>
rtl
.
run
();
</script>
<div
class=
"hide-scene"
>
<svg
version=
"1.1"
id=
"dc-spinner"
xmlns=
"http://www.w3.org/2000/svg"
x=
"0px"
y=
"0px"
width:
"
38
"
height:
"
38
"
viewBox=
"0 0 38 38"
preserveAspectRatio=
"xMinYMin meet"
>
<circle
cx=
"20"
cy=
"20"
r=
"16"
fill=
"#D3D3D3"
></circle>
<text
x=
"55%"
y=
"54%"
font-family=
"Monaco"
font-size=
"2px"
text-anchor=
"middle"
dy=
".3em"
style=
"letter-spacing:0.6"
>
PROCESSING
<animate
attributeName=
"opacity"
values=
"0;1;0"
dur=
"1.8s"
repeatCount=
"indefinite"
/>
</text>
<path
fill=
"#373a42"
d=
"M20,35c-8.271,0-15-6.729-15-15S11.729,5,20,5s15,6.729,15,15S28.271,35,20,35z M20,5.203
C11.841,5.203,5.203,11.841,5.203,20c0,8.159,6.638,14.797,14.797,14.797S34.797,28.159,34.797,20
C34.797,11.841,28.159,5.203,20,5.203z"
>
</path>
<path
fill=
"#373a42"
d=
"M20,33.125c-7.237,0-13.125-5.888-13.125-13.125S12.763,6.875,20,6.875S33.125,12.763,33.125,20
S27.237,33.125,20,33.125z M20,7.078C12.875,7.078,7.078,12.875,7.078,20c0,7.125,5.797,12.922,12.922,12.922
S32.922,27.125,32.922,20C32.922,12.875,27.125,7.078,20,7.078z"
>
</path>
<path
fill=
"#2AA198"
stroke=
"#2AA198"
stroke-width=
"0.6027"
stroke-miterlimit=
"10"
d=
"M5.203,20
c0-8.159,6.638-14.797,14.797-14.797V5C11.729,5,5,11.729,5,20s6.729,15,15,15v-0.203C11.841,34.797,5.203,28.159,5.203,20z"
>
<animateTransform
attributeName=
"transform"
type=
"rotate"
from=
"0 20 20"
to=
"360 20 20"
calcMode=
"spline"
keySplines=
"0.4, 0, 0.2, 1"
keyTimes=
"0;1"
dur=
"2s"
repeatCount=
"indefinite"
/>
</path>
<path
fill=
"#859900"
stroke=
"#859900"
stroke-width=
"0.2027"
stroke-miterlimit=
"10"
d=
"M7.078,20
c0-7.125,5.797-12.922,12.922-12.922V6.875C12.763,6.875,6.875,12.763,6.875,20S12.763,33.125,20,33.125v-0.203
C12.875,32.922,7.078,27.125,7.078,20z"
>
<animateTransform
attributeName=
"transform"
type=
"rotate"
from=
"0 20 20"
to=
"360 20 20"
dur=
"1.8s"
repeatCount=
"indefinite"
/>
</path>
</svg>
</div>
</html>
kgOrdersClient/webKGOrders.dpr
View file @
29f8d956
...
@@ -23,7 +23,8 @@ uses
...
@@ -23,7 +23,8 @@ uses
View.Search in 'View.Search.pas' {FSearch: TWebForm} {*.html},
View.Search in 'View.Search.pas' {FSearch: TWebForm} {*.html},
View.SetStatus in 'View.SetStatus.pas' {FSetStatus: TWebForm} {*.html},
View.SetStatus in 'View.SetStatus.pas' {FSetStatus: TWebForm} {*.html},
View.OrderEntryCuttingDie in 'View.OrderEntryCuttingDie.pas' {FOrderEntryCuttingDie: TWebForm} {*.html},
View.OrderEntryCuttingDie in 'View.OrderEntryCuttingDie.pas' {FOrderEntryCuttingDie: TWebForm} {*.html},
View.OrderEntryWeb in 'View.OrderEntryWeb.pas' {FOrderEntryWeb: TWebForm} {*.html};
View.OrderEntryWeb in 'View.OrderEntryWeb.pas' {FOrderEntryWeb: TWebForm} {*.html},
Utils in 'Utils.pas';
{$R *.res}
{$R *.res}
...
...
kgOrdersClient/webKGOrders.dproj
View file @
29f8d956
...
@@ -185,9 +185,11 @@
...
@@ -185,9 +185,11 @@
<Form>FOrderEntryWeb</Form>
<Form>FOrderEntryWeb</Form>
<DesignClass>TWebForm</DesignClass>
<DesignClass>TWebForm</DesignClass>
</DCCReference>
</DCCReference>
<DCCReference Include="Utils.pas"/>
<None Include="index.html"/>
<None Include="index.html"/>
<None Include="css\app.css"/>
<None Include="css\app.css"/>
<None Include="config\config.json"/>
<None Include="config\config.json"/>
<None Include="css\spinner.css"/>
<BuildConfiguration Include="Base">
<BuildConfiguration Include="Base">
<Key>Base</Key>
<Key>Base</Key>
</BuildConfiguration>
</BuildConfiguration>
...
@@ -218,9 +220,39 @@
...
@@ -218,9 +220,39 @@
<Deployment Version="5">
<Deployment Version="5">
<DeployFile LocalName="Win32\Debug\webCharms.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Debug\webCharms.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Debug\webKGOrders.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Debug\webKGOrders.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Release\webKGOrders.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>webKGOrders.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="config\config.json" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="config\config.json" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="config\config.json" Configuration="Release" Class="ProjectFile">
<Platform Name="Win32">
<RemoteDir>.\</RemoteDir>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="css\app.css" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="css\app.css" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="css\app.css" Configuration="Release" Class="ProjectFile">
<Platform Name="Win32">
<RemoteDir>.\</RemoteDir>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="css\spinner.css" Configuration="Release" Class="ProjectFile">
<Platform Name="Win32">
<RemoteDir>.\</RemoteDir>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="index.html" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="index.html" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="index.html" Configuration="Release" Class="ProjectFile">
<Platform Name="Win32">
<RemoteDir>.\</RemoteDir>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="template\bootstrap\bootstrap.min.css" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="template\bootstrap\bootstrap.min.css" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="template\bootstrap\bootstrap.min.js" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="template\bootstrap\bootstrap.min.js" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="template\bootstrap\dataTables.bootstrap.css" Configuration="Debug" Class="ProjectFile"/>
<DeployFile LocalName="template\bootstrap\dataTables.bootstrap.css" Configuration="Debug" Class="ProjectFile"/>
...
...
kgOrdersServer/kgOrdersServer.ini
View file @
29f8d956
...
@@ -2,11 +2,11 @@
...
@@ -2,11 +2,11 @@
MemoLogLevel
=
3
MemoLogLevel
=
3
FileLogLevel
=
5
FileLogLevel
=
5
webClientVersion
=
0.9.3
webClientVersion
=
0.9.3
LogFileNum
=
4
46
LogFileNum
=
4
53
[Database]
[Database]
Server
=
192.168.159.131
--
Server
=
192.168.159.131
--
Server
=
192.168.102.130
Server
=
192.168.102.130
--Server
=
192.168.75.133
--Server
=
192.168.75.133
Database
=
kg_order_entry
Database
=
kg_order_entry
Username
=
root
Username
=
root
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment