Commit 8a90f791 by Mac Stephens

fixed the editing issue by adding cancel and delete flag to addcorrugated,…

fixed the editing issue by adding cancel and delete flag to addcorrugated, addcutting, and addweb, removed message box from add order modal, changed location and added slide in for showtoast
parent 4413072f
...@@ -190,6 +190,7 @@ begin ...@@ -190,6 +190,7 @@ begin
toastBody.innerText = ParsedText; toastBody.innerText = ParsedText;
toastEl.classList.remove('bg-success', 'bg-danger', 'bg-warning', 'bg-info'); toastEl.classList.remove('bg-success', 'bg-danger', 'bg-warning', 'bg-info');
toastEl.classList.remove('slide-in');
switch (ToastKind) { switch (ToastKind) {
case 'danger': case 'danger':
...@@ -205,12 +206,21 @@ begin ...@@ -205,12 +206,21 @@ begin
toastEl.classList.add('bg-success'); toastEl.classList.add('bg-success');
} }
// Add slide-in animation
toastEl.classList.add('slide-in');
var toast = new bootstrap.Toast(toastEl, { delay: 2500 }); var toast = new bootstrap.Toast(toastEl, { delay: 2500 });
toast.show(); toast.show();
// Remove animation class after it's done (so it can be reapplied)
setTimeout(function() {
toastEl.classList.remove('slide-in');
}, 500);
end; end;
end; end;
procedure ApplyReportTitle(CurrentReportType: string); procedure ApplyReportTitle(CurrentReportType: string);
var var
CrimeTitleElement: TJSHTMLElement; CrimeTitleElement: TJSHTMLElement;
......
object FAddOrder: TFAddOrder object FAddOrder: TFAddOrder
Width = 871 Width = 871
Height = 477 Height = 428
OnShow = WebFormShow OnShow = WebFormShow
object WebLabel1: TWebLabel object WebLabel1: TWebLabel
Left = 4 Left = 4
Top = 81 Top = 49
Width = 95 Width = 95
Height = 15 Height = 15
Caption = 'Search Customers' Caption = 'Search Customers'
...@@ -13,7 +13,7 @@ object FAddOrder: TFAddOrder ...@@ -13,7 +13,7 @@ object FAddOrder: TFAddOrder
end end
object WebLabel2: TWebLabel object WebLabel2: TWebLabel
Left = 135 Left = 135
Top = 81 Top = 49
Width = 113 Width = 113
Height = 15 Height = 15
Caption = 'Selected Customer ID' Caption = 'Selected Customer ID'
...@@ -22,7 +22,7 @@ object FAddOrder: TFAddOrder ...@@ -22,7 +22,7 @@ object FAddOrder: TFAddOrder
end end
object WebLabel3: TWebLabel object WebLabel3: TWebLabel
Left = 283 Left = 283
Top = 81 Top = 49
Width = 134 Width = 134
Height = 15 Height = 15
Caption = 'Selected Customer Name' Caption = 'Selected Customer Name'
...@@ -31,7 +31,7 @@ object FAddOrder: TFAddOrder ...@@ -31,7 +31,7 @@ object FAddOrder: TFAddOrder
end end
object edtSearch: TWebEdit object edtSearch: TWebEdit
Left = 4 Left = 4
Top = 102 Top = 70
Width = 121 Width = 121
Height = 22 Height = 22
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
...@@ -40,7 +40,7 @@ object FAddOrder: TFAddOrder ...@@ -40,7 +40,7 @@ object FAddOrder: TFAddOrder
end end
object edtID: TWebEdit object edtID: TWebEdit
Left = 135 Left = 135
Top = 102 Top = 70
Width = 142 Width = 142
Height = 22 Height = 22
ChildOrder = 1 ChildOrder = 1
...@@ -50,7 +50,7 @@ object FAddOrder: TFAddOrder ...@@ -50,7 +50,7 @@ object FAddOrder: TFAddOrder
end end
object TMSFNCGrid1: TTMSFNCGrid object TMSFNCGrid1: TTMSFNCGrid
Left = 0 Left = 0
Top = 160 Top = 111
Width = 871 Width = 871
Height = 317 Height = 317
Align = alBottom Align = alBottom
...@@ -204,10 +204,11 @@ object FAddOrder: TFAddOrder ...@@ -204,10 +204,11 @@ object FAddOrder: TFAddOrder
ScrollMode = scmItemScrolling ScrollMode = scmItemScrolling
DesignTimeSampleData = True DesignTimeSampleData = True
OnCellClick = TMSFNCGrid1CellClick OnCellClick = TMSFNCGrid1CellClick
ExplicitTop = 112
end end
object cbCorrugatedPlate: TWebCheckBox object cbCorrugatedPlate: TWebCheckBox
Left = 4 Left = 4
Top = 49 Top = 17
Width = 113 Width = 113
Height = 22 Height = 22
Caption = 'Corrugated Plate' Caption = 'Corrugated Plate'
...@@ -219,7 +220,7 @@ object FAddOrder: TFAddOrder ...@@ -219,7 +220,7 @@ object FAddOrder: TFAddOrder
end end
object cbWebPlate: TWebCheckBox object cbWebPlate: TWebCheckBox
Left = 134 Left = 134
Top = 49 Top = 17
Width = 83 Width = 83
Height = 22 Height = 22
Caption = 'Web Plate' Caption = 'Web Plate'
...@@ -230,7 +231,7 @@ object FAddOrder: TFAddOrder ...@@ -230,7 +231,7 @@ object FAddOrder: TFAddOrder
end end
object btnCancel: TWebButton object btnCancel: TWebButton
Left = 542 Left = 542
Top = 101 Top = 69
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Cancel' Caption = 'Cancel'
...@@ -241,7 +242,7 @@ object FAddOrder: TFAddOrder ...@@ -241,7 +242,7 @@ object FAddOrder: TFAddOrder
end end
object btnConfirm: TWebButton object btnConfirm: TWebButton
Left = 436 Left = 436
Top = 101 Top = 69
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Select' Caption = 'Select'
...@@ -252,7 +253,7 @@ object FAddOrder: TFAddOrder ...@@ -252,7 +253,7 @@ object FAddOrder: TFAddOrder
end end
object cbCuttingDie: TWebCheckBox object cbCuttingDie: TWebCheckBox
Left = 239 Left = 239
Top = 49 Top = 17
Width = 83 Width = 83
Height = 22 Height = 22
Caption = 'Cutting Die' Caption = 'Cutting Die'
...@@ -261,30 +262,9 @@ object FAddOrder: TFAddOrder ...@@ -261,30 +262,9 @@ object FAddOrder: TFAddOrder
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
OnClick = cbCuttingDieClick OnClick = cbCuttingDieClick
end end
object edtNotification: TWebEdit
Left = 4
Top = 16
Width = 510
Height = 22
HelpType = htKeyword
TabStop = False
ChildOrder = 8
ElementFont = efCSS
Enabled = False
Font.Charset = ANSI_CHARSET
Font.Color = clRed
Font.Height = -13
Font.Name = 'Arial'
Font.Style = []
HeightPercent = 100.000000000000000000
HideSelection = False
ParentFont = False
TabOrder = 1
WidthPercent = 100.000000000000000000
end
object edtName: TWebEdit object edtName: TWebEdit
Left = 283 Left = 283
Top = 102 Top = 70
Width = 142 Width = 142
Height = 22 Height = 22
ChildOrder = 1 ChildOrder = 1
......
...@@ -11,7 +11,7 @@ uses ...@@ -11,7 +11,7 @@ uses
VCL.TMSFNCGridOptions, Vcl.Controls, VCL.TMSFNCCustomControl, VCL.TMSFNCGridOptions, Vcl.Controls, VCL.TMSFNCCustomControl,
VCL.TMSFNCCustomScrollControl, VCL.TMSFNCGridData, VCL.TMSFNCCustomGrid, VCL.TMSFNCCustomScrollControl, VCL.TMSFNCGridData, VCL.TMSFNCCustomGrid,
VCL.TMSFNCGrid, Vcl.StdCtrls, WEBLib.StdCtrls, XData.Web.Client, Data.DB, VCL.TMSFNCGrid, Vcl.StdCtrls, WEBLib.StdCtrls, XData.Web.Client, Data.DB,
XData.Web.JsonDataset, XData.Web.Dataset, WEBLib.DB, ConnectionModule; XData.Web.JsonDataset, XData.Web.Dataset, WEBLib.DB, ConnectionModule, Utils;
type type
TFAddOrder = class(TWebForm) TFAddOrder = class(TWebForm)
...@@ -30,7 +30,6 @@ type ...@@ -30,7 +30,6 @@ type
xdwdsCustomersSHORT_NAME: TStringField; xdwdsCustomersSHORT_NAME: TStringField;
wdsCustomers: TWebDataSource; wdsCustomers: TWebDataSource;
cbCuttingDie: TWebCheckBox; cbCuttingDie: TWebCheckBox;
edtNotification: TWebEdit;
xdwdsCustomersstaff_fields_invoice_to: TStringField; xdwdsCustomersstaff_fields_invoice_to: TStringField;
xdwdsCustomersCUSTOMER_ID: TIntegerField; xdwdsCustomersCUSTOMER_ID: TIntegerField;
WebLabel3: TWebLabel; WebLabel3: TWebLabel;
...@@ -67,25 +66,25 @@ begin ...@@ -67,25 +66,25 @@ begin
Close; Close;
end; end;
procedure TFAddOrder.btnConfirmClick(Sender: TObject); procedure TFAddOrder.btnConfirmClick(Sender: TObject);
begin begin
confirm := true; confirm := true;
edtNotification.ElementHandle.style.setProperty('color', '#8B0000', 'important');
if ( ( not cbCorrugatedPlate.Checked ) and ( not cbWebPlate.Checked ) and ( not cbCuttingDie.Checked ) ) then if ( ( not cbCorrugatedPlate.Checked ) and ( not cbWebPlate.Checked ) and ( not cbCuttingDie.Checked ) ) then
begin begin
edtNotification.Text := 'Please Select an Order Type'; ShowToast('Please Select an Order Type', 'danger');
confirm := false; confirm := false;
end; end;
if edtID.Text = '' then if edtID.Text = '' then
begin begin
edtNotification.Text := 'Please Select a Customer'; ShowToast('Please Select a Customer', 'danger');
confirm := false; confirm := false;
end; end;
if ( ( not cbCorrugatedPlate.Checked ) and ( not cbWebPlate.Checked ) and ( not cbCuttingDie.Checked ) and (edtID.Text = '' )) then if ( ( not cbCorrugatedPlate.Checked ) and ( not cbWebPlate.Checked ) and ( not cbCuttingDie.Checked ) and (edtID.Text = '' )) then
begin begin
edtNotification.Text := 'Please Select an Order Type and a Customer'; ShowToast('Please Select an Order Type and a Customer', 'danger');
confirm := false; confirm := false;
end; end;
...@@ -95,6 +94,7 @@ begin ...@@ -95,6 +94,7 @@ begin
end; end;
end; end;
procedure TFAddOrder.WebFormShow(Sender: TObject); procedure TFAddOrder.WebFormShow(Sender: TObject);
begin begin
confirm := false; confirm := false;
...@@ -108,23 +108,27 @@ begin ...@@ -108,23 +108,27 @@ begin
cbCuttingDie.Checked := False; cbCuttingDie.Checked := False;
end; end;
procedure TFAddOrder.cbCuttingDieClick(Sender: TObject); procedure TFAddOrder.cbCuttingDieClick(Sender: TObject);
begin begin
cbCorrugatedPlate.Checked := False; cbCorrugatedPlate.Checked := False;
cbWebPlate.Checked := False; cbWebPlate.Checked := False;
end; end;
procedure TFAddOrder.cbWebPlateClick(Sender: TObject); procedure TFAddOrder.cbWebPlateClick(Sender: TObject);
begin begin
cbCorrugatedPlate.Checked := False; cbCorrugatedPlate.Checked := False;
cbCuttingDie.Checked := False; cbCuttingDie.Checked := False;
end; end;
procedure TFAddOrder.edtSearchChange(Sender: TObject); procedure TFAddOrder.edtSearchChange(Sender: TObject);
begin begin
ApplyFilter; ApplyFilter;
end; end;
[async] procedure TFAddOrder.getCustomers(); [async] procedure TFAddOrder.getCustomers();
// retrieves customer list from server // retrieves customer list from server
var var
...@@ -144,6 +148,7 @@ begin ...@@ -144,6 +148,7 @@ begin
PopulateGridManually; PopulateGridManually;
end; end;
procedure TFAddOrder.PopulateGridManually; procedure TFAddOrder.PopulateGridManually;
// populates the grid with customers manually. // populates the grid with customers manually.
var var
...@@ -191,6 +196,7 @@ begin ...@@ -191,6 +196,7 @@ begin
DBID := TMSFNCGrid1.Cells[0, ARow]; DBID := TMSFNCGrid1.Cells[0, ARow];
end; end;
procedure TFAddOrder.ApplyFilter; procedure TFAddOrder.ApplyFilter;
// filters the grid based on search textbox contents. // filters the grid based on search textbox contents.
var var
......
...@@ -42,6 +42,7 @@ object FViewCustomers: TFViewCustomers ...@@ -42,6 +42,7 @@ object FViewCustomers: TFViewCustomers
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
Text = '500' Text = '500'
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
OnChange = wcbPageSizeChange
ItemIndex = -1 ItemIndex = -1
Items.Strings = ( Items.Strings = (
'100' '100'
......
...@@ -36,6 +36,7 @@ type ...@@ -36,6 +36,7 @@ type
procedure btnAddCustomerClick(Sender: TObject); procedure btnAddCustomerClick(Sender: TObject);
procedure wdbtcCustomersDblClickCell(Sender: TObject; ACol, ARow: Integer); procedure wdbtcCustomersDblClickCell(Sender: TObject; ACol, ARow: Integer);
procedure edtFilterChange(Sender: TObject); procedure edtFilterChange(Sender: TObject);
procedure wcbPageSizeChange(Sender: TObject);
private private
{ Private declarations } { Private declarations }
procedure GeneratePagination(TotalPages: Integer); procedure GeneratePagination(TotalPages: Integer);
...@@ -173,6 +174,13 @@ begin ...@@ -173,6 +174,13 @@ begin
end; end;
procedure TFViewCustomers.wcbPageSizeChange(Sender: TObject);
begin
PageSize := StrToInt(wcbPageSize.Text);
getCustomers(GenerateSearchOptions());
end;
procedure TFViewCustomers.wdbtcCustomersDblClickCell(Sender: TObject; ACol, procedure TFViewCustomers.wdbtcCustomersDblClickCell(Sender: TObject; ACol,
ARow: Integer); ARow: Integer);
begin begin
......
...@@ -49,8 +49,9 @@ ...@@ -49,8 +49,9 @@
</nav> </nav>
<!-- Toast wrapper directly under navbar --> <!-- Toast wrapper directly under navbar -->
<div id="toast-wrapper" <div id="toast-wrapper"
class="position-fixed start-50 translate-middle-x mt-2" class="position-fixed top-0 start-0 mt-4 ms-4"
style="z-index: 1080; top: 60px; min-width: 300px; max-width: 500px;"> style="z-index: 1080; min-width: 300px; max-width: 500px;">
<div id="bootstrapToast" <div id="bootstrapToast"
class="toast align-items-center text-white bg-success border-0 shadow" class="toast align-items-center text-white bg-success border-0 shadow"
...@@ -102,6 +103,24 @@ ...@@ -102,6 +103,24 @@
</div> </div>
</div> </div>
<div class="modal fade" id="confirmation_modal" tabindex="-1" aria-labelledby="confirmation_modal_label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow-lg">
<div class="modal-header">
<h5 class="modal-title" id="confirmation_modal_label">Confirm</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body fs-6 fw-bold" id="modal_body">
Are you sure you want to delete this order?
</div>
<div class="modal-footer justify-content-center">
<button type="button" class="btn btn-secondary me-3" data-bs-dismiss="modal" id="btn_confirm_cancel">Cancel</button>
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" id="btn_confirm_delete">Delete</button>
</div>
</div>
</div>
</div>
......
...@@ -1155,7 +1155,7 @@ object FOrderEntryCorrugated: TFOrderEntryCorrugated ...@@ -1155,7 +1155,7 @@ object FOrderEntryCorrugated: TFOrderEntryCorrugated
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object btn_confirm_delete: TWebButton object btn_modal_confirm: TWebButton
Left = 1094 Left = 1094
Top = 414 Top = 414
Width = 96 Width = 96
...@@ -1165,7 +1165,7 @@ object FOrderEntryCorrugated: TFOrderEntryCorrugated ...@@ -1165,7 +1165,7 @@ object FOrderEntryCorrugated: TFOrderEntryCorrugated
ElementID = 'btn_confirm_delete' ElementID = 'btn_confirm_delete'
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
OnClick = btn_confirm_deleteClick OnClick = btn_modal_confirmClick
end end
object btnEdit: TWebButton object btnEdit: TWebButton
Left = 1202 Left = 1202
......
...@@ -195,7 +195,7 @@ type ...@@ -195,7 +195,7 @@ type
btnDelete: TWebButton; btnDelete: TWebButton;
btnClose: TWebButton; btnClose: TWebButton;
edtOrderNum: TWebEdit; edtOrderNum: TWebEdit;
btn_confirm_delete: TWebButton; btn_modal_confirm: TWebButton;
tmrReturn: TWebTimer; tmrReturn: TWebTimer;
btnEdit: TWebButton; btnEdit: TWebButton;
btnAdd: TWebButton; btnAdd: TWebButton;
...@@ -217,7 +217,7 @@ type ...@@ -217,7 +217,7 @@ type
procedure sendOrderToServer(); procedure sendOrderToServer();
procedure btnCloseClick(Sender: TObject); procedure btnCloseClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject);
procedure btn_confirm_deleteClick(Sender: TObject); procedure btn_modal_confirmClick(Sender: TObject);
procedure tmrReturnTimer(Sender: TObject); procedure tmrReturnTimer(Sender: TObject);
function VerifyOrder(): boolean; function VerifyOrder(): boolean;
procedure XDataWebDataSet1AfterEdit(DataSet: TDataSet); procedure XDataWebDataSet1AfterEdit(DataSet: TDataSet);
...@@ -237,6 +237,7 @@ type ...@@ -237,6 +237,7 @@ type
procedure ShowAddAddressForm(); procedure ShowAddAddressForm();
[async] procedure SendAddressToServer(AddressJSON: TJSONObject); [async] procedure SendAddressToServer(AddressJSON: TJSONObject);
private private
FModalAction: string;
FAgencyCode: string; FAgencyCode: string;
FCurrentReportType: string; FCurrentReportType: string;
FSelectProc: TSelectProc; FSelectProc: TSelectProc;
...@@ -487,25 +488,23 @@ end; ...@@ -487,25 +488,23 @@ end;
procedure TFOrderEntryCorrugated.btnDeleteClick(Sender: TObject); procedure TFOrderEntryCorrugated.btnDeleteClick(Sender: TObject);
begin begin
FModalAction := 'delete';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?'; document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?';
document.getElementById('btn_confirm_cancel').innerText := 'Cancel'; document.getElementById('btn_confirm_cancel').innerText := 'Cancel';
document.getElementById('btn_confirm_delete').innerText := 'Delete'; document.getElementById('btn_confirm_delete').innerText := 'Delete';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
procedure TFOrderEntryCorrugated.btnEditClick(Sender: TObject); procedure TFOrderEntryCorrugated.btnEditClick(Sender: TObject);
begin begin
EditMode(); EditMode();
...@@ -521,39 +520,34 @@ begin ...@@ -521,39 +520,34 @@ begin
end; end;
procedure TFOrderEntryCorrugated.btn_confirm_deleteClick(Sender: TObject); procedure TFOrderEntryCorrugated.btn_modal_confirmClick(Sender: TObject);
begin begin
if document.getElementById('btn_confirm_delete').innerText = 'Yes' then if FModalAction = 'cancel' then
begin begin
FViewMain.change := false; FViewMain.change := false;
if OrderID <> '' then if OrderID <> '' then
begin FViewMain.ViewOrderEntryCorrugated(OrderID, '', 'EDIT', 'Failure: Changes Discarded')
FViewMain.ViewOrderEntryCorrugated(OrderID, '', 'EDIT', 'Failure: Changes Discarded');
end
else else
FViewMain.ViewOrders(''); FViewMain.ViewOrders('');
end end
else else if FModalAction = 'delete' then
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// ensure the modal lives directly under <body>
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var bsModal = new bootstrap.Modal(modal, { keyboard: false });
var bsModal = new bootstrap.Modal(modal, {
keyboard: false
});
bsModal.hide(); bsModal.hide();
end; end;
delOrder(); DelOrder();
tmrReturn.Enabled := true; tmrReturn.Enabled := true;
end; end;
end; end;
[async] procedure TFOrderEntryCorrugated.GenerateReportPDF; [async] procedure TFOrderEntryCorrugated.GenerateReportPDF;
// sends the search to the server which then sends back a pdf of the results // sends the search to the server which then sends back a pdf of the results
var var
...@@ -821,26 +815,23 @@ end; ...@@ -821,26 +815,23 @@ end;
procedure TFOrderEntryCorrugated.btnCancelClick(Sender: TObject); procedure TFOrderEntryCorrugated.btnCancelClick(Sender: TObject);
begin begin
FModalAction := 'cancel';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes?'; document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes?';
document.getElementById('btn_confirm_cancel').innerText := 'No'; document.getElementById('btn_confirm_cancel').innerText := 'No';
document.getElementById('btn_confirm_delete').innerText := 'Yes'; document.getElementById('btn_confirm_delete').innerText := 'Yes';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
procedure TFOrderEntryCorrugated.btnCloseClick(Sender: TObject); procedure TFOrderEntryCorrugated.btnCloseClick(Sender: TObject);
begin begin
FViewMain.ViewOrders(''); FViewMain.ViewOrders('');
......
...@@ -101,6 +101,7 @@ type ...@@ -101,6 +101,7 @@ type
procedure ShowAddAddressForm(); procedure ShowAddAddressForm();
[async] procedure SendAddressToServer(AddressJSON: TJSONObject); [async] procedure SendAddressToServer(AddressJSON: TJSONObject);
private private
FModalAction: string;
FAgencyCode: string; FAgencyCode: string;
FCurrentReportType: string; FCurrentReportType: string;
FSelectProc: TSelectProc; FSelectProc: TSelectProc;
...@@ -322,25 +323,25 @@ begin ...@@ -322,25 +323,25 @@ begin
window.scrollTo(0, 0); window.scrollTo(0, 0);
end; end;
procedure TFOrderEntryCuttingDie.btnDeleteClick(Sender: TObject); procedure TFOrderEntryCuttingDie.btnDeleteClick(Sender: TObject);
begin begin
FModalAction := 'delete';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?'; document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?';
document.getElementById('btn_confirm_cancel').innerText := 'Cancel'; document.getElementById('btn_confirm_cancel').innerText := 'Cancel';
document.getElementById('btn_confirm_delete').innerText := 'Delete'; document.getElementById('btn_confirm_delete').innerText := 'Delete';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
procedure TFOrderEntryCuttingDie.btnEditClick(Sender: TObject); procedure TFOrderEntryCuttingDie.btnEditClick(Sender: TObject);
begin begin
EditMode(); EditMode();
...@@ -361,32 +362,26 @@ end; ...@@ -361,32 +362,26 @@ end;
procedure TFOrderEntryCuttingDie.btn_confirm_deleteClick(Sender: TObject); procedure TFOrderEntryCuttingDie.btn_confirm_deleteClick(Sender: TObject);
begin begin
if document.getElementById('btn_confirm_delete').innerText = 'Yes' then if FModalAction = 'cancel' then
begin begin
FViewMain.change := false; FViewMain.change := false;
if OrderID <> '' then if OrderID <> '' then
begin FViewMain.ViewOrderEntryCuttingDie(OrderID, '', 'EDIT', 'Failure: Changes Discarded')
FViewMain.ViewOrderEntryCuttingDie(OrderID, '', 'EDIT', 'Failure: Changes Discarded');
end
else else
FViewMain.ViewOrders(''); FViewMain.ViewOrders('');
end end
else else if FModalAction = 'delete' then
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// ensure the modal lives directly under <body>
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var bsModal = new bootstrap.Modal(modal, { keyboard: false });
var bsModal = new bootstrap.Modal(modal, {
keyboard: false
});
bsModal.hide(); bsModal.hide();
end; end;
delOrder(); DelOrder();
tmrReturn.Enabled := true; tmrReturn.Enabled := true;
end; end;
end; end;
...@@ -495,20 +490,17 @@ end; ...@@ -495,20 +490,17 @@ end;
procedure TFOrderEntryCuttingDie.btnCancelClick(Sender: TObject); procedure TFOrderEntryCuttingDie.btnCancelClick(Sender: TObject);
begin begin
document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes to the customer?'; FModalAction := 'cancel';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes?';
document.getElementById('btn_confirm_cancel').innerText := 'No'; document.getElementById('btn_confirm_cancel').innerText := 'No';
document.getElementById('btn_confirm_delete').innerText := 'Yes'; document.getElementById('btn_confirm_delete').innerText := 'Yes';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
......
...@@ -234,6 +234,7 @@ type ...@@ -234,6 +234,7 @@ type
procedure ShowAddAddressForm(); procedure ShowAddAddressForm();
[async] procedure SendAddressToServer(AddressJSON: TJSONObject); [async] procedure SendAddressToServer(AddressJSON: TJSONObject);
private private
FModalAction: string;
FAgencyCode: string; FAgencyCode: string;
FCurrentReportType: string; FCurrentReportType: string;
FSelectProc: TSelectProc; FSelectProc: TSelectProc;
...@@ -414,20 +415,17 @@ end; ...@@ -414,20 +415,17 @@ end;
procedure TFOrderEntryWeb.btnDeleteClick(Sender: TObject); procedure TFOrderEntryWeb.btnDeleteClick(Sender: TObject);
begin begin
FModalAction := 'delete';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?'; document.getElementById('modal_body').innerHTML := 'Are you sure you want to delete this order?';
document.getElementById('btn_confirm_cancel').innerText := 'Cancel'; document.getElementById('btn_confirm_cancel').innerText := 'Cancel';
document.getElementById('btn_confirm_delete').innerText := 'Delete'; document.getElementById('btn_confirm_delete').innerText := 'Delete';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
...@@ -560,32 +558,26 @@ end; ...@@ -560,32 +558,26 @@ end;
procedure TFOrderEntryWeb.btn_confirm_deleteClick(Sender: TObject); procedure TFOrderEntryWeb.btn_confirm_deleteClick(Sender: TObject);
begin begin
if document.getElementById('btn_confirm_delete').innerText = 'Yes' then if FModalAction = 'cancel' then
begin begin
FViewMain.change := false; FViewMain.change := false;
if OrderID <> '' then if OrderID <> '' then
begin FViewMain.ViewOrderEntryWeb(OrderID, '', 'EDIT', 'Failure: Changes Discarded')
FViewMain.ViewOrderEntryWeb(OrderID, '', 'EDIT', 'Failure:Changes Discarded');
end
else else
FViewMain.ViewOrders(''); FViewMain.ViewOrders('');
end end
else else if FModalAction = 'delete' then
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// ensure the modal is directly under <body>
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var bsModal = new bootstrap.Modal(modal, { keyboard: false });
var bsModal = new bootstrap.Modal(modal, {
keyboard: false
});
bsModal.hide(); bsModal.hide();
end; end;
delOrder(); DelOrder();
tmrReturn.Enabled := true; tmrReturn.Enabled := true;
end; end;
end; end;
...@@ -771,22 +763,17 @@ end; ...@@ -771,22 +763,17 @@ end;
procedure TFOrderEntryWeb.btnCancelClick(Sender: TObject); procedure TFOrderEntryWeb.btnCancelClick(Sender: TObject);
begin begin
console.log('click'); FModalAction := 'cancel';
document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes?'; document.getElementById('modal_body').innerHTML := 'Are you sure you want to cancel all changes?';
document.getElementById('btn_confirm_cancel').innerText := 'No'; document.getElementById('btn_confirm_cancel').innerText := 'No';
document.getElementById('btn_confirm_delete').innerText := 'Yes'; document.getElementById('btn_confirm_delete').innerText := 'Yes';
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
// Ensure modal is a direct child of <body> to avoid z-index/backdrop issues
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal); document.body.appendChild(modal);
} }
var confirmationModal = new bootstrap.Modal(modal, { keyboard: false });
var confirmationModal = new bootstrap.Modal(modal, {
keyboard: false
});
confirmationModal.show(); confirmationModal.show();
end; end;
end; end;
......
...@@ -163,8 +163,6 @@ begin ...@@ -163,8 +163,6 @@ begin
) )
); );
asm asm
var modal = document.getElementById('confirmation_modal'); var modal = document.getElementById('confirmation_modal');
if (modal && modal.parentNode !== document.body) { if (modal && modal.parentNode !== document.body) {
...@@ -179,7 +177,20 @@ begin ...@@ -179,7 +177,20 @@ begin
FPendingPdfTab := window.open('', '_blank'); FPendingPdfTab := window.open('', '_blank');
if Assigned(FPendingPdfTab) then if Assigned(FPendingPdfTab) then
FPendingPdfTab.document.write('<html><body style="font-family:Arial;padding:2rem;">Generating PDF</body></html>'); FPendingPdfTab.document.write(
'<!DOCTYPE html>' +
'<html lang="en">' +
'<head>' +
'<meta charset="UTF-8">' +
'<meta name="viewport" content="width=device-width, initial-scale=1.0">' +
'<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">' +
'</head>' +
'<body class="d-flex flex-column justify-content-center align-items-center vh-100 bg-light">' +
'<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"></div>' +
'<div class="mt-3 fs-5 text-muted">Generating PDF, please wait</div>' +
'</body>' +
'</html>'
);
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
GenerateReportPDFAsync(FPendingPdfTab); GenerateReportPDFAsync(FPendingPdfTab);
...@@ -187,14 +198,26 @@ begin ...@@ -187,14 +198,26 @@ begin
end; end;
procedure TFViewOrders.HandlePDFConfirmation; procedure TFViewOrders.HandlePDFConfirmation;
begin begin
// Open tab only now // Open tab only now
FPendingPdfTab := window.open('', '_blank'); FPendingPdfTab := window.open('', '_blank');
if Assigned(FPendingPdfTab) then if Assigned(FPendingPdfTab) then
FPendingPdfTab.document.write('<html><body style="font-family:Arial;padding:2rem;">Generating PDF</body></html>'); FPendingPdfTab.document.write(
'<!DOCTYPE html>' +
'<html lang="en">' +
'<head>' +
'<meta charset="UTF-8">' +
'<meta name="viewport" content="width=device-width, initial-scale=1.0">' +
'<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">' +
'</head>' +
'<body class="d-flex flex-column justify-content-center align-items-center vh-100 bg-light">' +
'<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"></div>' +
'<div class="mt-3 fs-5 text-muted">Generating PDF, please wait</div>' +
'</body>' +
'</html>'
);
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
GenerateReportPDFAsync(FPendingPdfTab); GenerateReportPDFAsync(FPendingPdfTab);
...@@ -202,7 +225,6 @@ begin ...@@ -202,7 +225,6 @@ begin
end; end;
[async] procedure TFViewOrders.GenerateReportPDFAsync(APdfTab: TJSWindow); [async] procedure TFViewOrders.GenerateReportPDFAsync(APdfTab: TJSWindow);
var var
xdcResponse: TXDataClientResponse; xdcResponse: TXDataClientResponse;
...@@ -210,7 +232,7 @@ var ...@@ -210,7 +232,7 @@ var
jsObject: TJSObject; jsObject: TJSObject;
begin begin
try try
searchOptions := edtSearch.Text; searchOptions := edtSearch.Text + '&forPDF=true';
xdcResponse := await( xdcResponse := await(
XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderListPDF', XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderListPDF',
......
...@@ -71,6 +71,7 @@ begin ...@@ -71,6 +71,7 @@ begin
else else
begin begin
confirm := true; confirm := true;
ShowToast('Success: Status updated!');
Close; Close;
end; end;
end; end;
......
...@@ -367,6 +367,21 @@ is-invalid .form-check-input { ...@@ -367,6 +367,21 @@ is-invalid .form-check-input {
} }
@keyframes slideInLeft {
from {
transform: translateX(-120%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.toast.slide-in {
animation: slideInLeft 0.4s ease-out forwards;
}
......
...@@ -255,8 +255,6 @@ end; ...@@ -255,8 +255,6 @@ end;
function TLookupService.GenerateOrderListPDF(searchOptions: string): string; function TLookupService.GenerateOrderListPDF(searchOptions: string): string;
// Generates a report pdf based on the last search (if any) Linked to rOrders
// file which does most of the work.
var var
SQL: string; SQL: string;
rptOrderList: TrptOrderList; rptOrderList: TrptOrderList;
...@@ -268,9 +266,16 @@ begin ...@@ -268,9 +266,16 @@ begin
try try
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions
params.Delimiter := '&'; params.Delimiter := '&';
params.DelimitedText := searchOptions; params.DelimitedText := searchOptions;
// Strip paging if this is a PDF export
if params.Values['forPDF'] = 'true' then
begin
params.Values['pagesize'] := '';
params.Values['pagenumber'] := '';
end;
companyID := params.Values['companyID']; companyID := params.Values['companyID'];
if companyID <> '' then if companyID <> '' then
begin begin
...@@ -281,11 +286,10 @@ begin ...@@ -281,11 +286,10 @@ begin
else else
CompanyName := ''; CompanyName := '';
SQL := GenerateOrdersSQL(searchOptions).SQL; SQL := GenerateOrdersSQL(params.DelimitedText).SQL;
result := rptOrderList.PrepareReport(SQL, CompanyName); result := rptOrderList.PrepareReport(SQL, CompanyName);
// Optionally, log success Logger.log(5, 'PDF Report successfully generated for searchOptions: ' + params.DelimitedText);
Logger.log(5, 'PDF Report successfully generated for searchOptions: ' + searchOptions);
except except
on E: Exception do on E: Exception do
raise EXDataHttpException.Create(500, 'Failed to generate PDF: ' + E.Message); raise EXDataHttpException.Create(500, 'Failed to generate PDF: ' + E.Message);
...@@ -296,6 +300,7 @@ begin ...@@ -296,6 +300,7 @@ begin
end; end;
function TLookupService.AddShippingAddress(AddressInfo: string): TJSONObject; function TLookupService.AddShippingAddress(AddressInfo: string): TJSONObject;
var var
JSONData: TJSONObject; JSONData: TJSONObject;
...@@ -721,104 +726,81 @@ function TLookupService.generateOrdersSQL(searchOptions: string): TSQLQuery; ...@@ -721,104 +726,81 @@ function TLookupService.generateOrdersSQL(searchOptions: string): TSQLQuery;
// searchOptions: search information sent form client to be parsed. // searchOptions: search information sent form client to be parsed.
var var
params: TStringList; params: TStringList;
PageNum: integer; PageNum, PageSize: integer;
PageSize: integer; OrderBy, offset, limit: string;
OrderBy: string; SQL, whereSQL, orderBySQL: string;
offset: string; OrderID, CompanyID, JobName, orderType: string;
limit: string; status1, status2: TStatusSearchInfo;
SQL: string; ForPDF: Boolean;
whereSQL: string;
orderBySQL: string;
OrderID: string;
CompanyID: string;
JobName: string;
orderType: string;
// These variables apply to the first status sent from the client
status1: TStatusSearchInfo;
// These variables apply to the second status sent from the client
status2: TStatusSearchInfo;
begin begin
result := TSQLQuery.Create; result := TSQLQuery.Create;
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions
params.Delimiter := '&'; params.Delimiter := '&';
params.DelimitedText := searchOptions; params.DelimitedText := searchOptions;
orderBySQL := ''; ForPDF := SameText(params.Values['forPDF'], 'true');
PageNum := StrToInt(params.Values['pagenumber']);
PageSize := StrToInt(params.Values['pagesize']); if not ForPDF then
begin
PageNum := StrToIntDef(params.Values['pagenumber'], 1);
PageSize := StrToIntDef(params.Values['pagesize'], 500);
offset := IntToStr((PageNum - 1) * PageSize);
limit := IntToStr(PageSize);
end;
OrderBy := params.Values['orderby']; OrderBy := params.Values['orderby'];
orderType := params.Values['orderType'].ToLower(); orderType := params.Values['orderType'].ToLower();
OrderID := params.Values['orderID']; OrderID := params.Values['orderID'];
companyID := params.Values['companyID']; companyID := params.Values['companyID'];
jobName := params.Values['jobName']; jobName := params.Values['jobName'];
// Search infomation for first status type
status1 := createStatusSearchInfo(params, '1'); status1 := createStatusSearchInfo(params, '1');
// Search Information for second status type
status2 := createStatusSearchInfo(params, '2'); status2 := createStatusSearchInfo(params, '2');
offset := IntToStr((PageNum - 1) * PageSize); SQL := 'SELECT o.ORDER_ID, c.SHORT_NAME, o.LOCATION AS Loc, c.NAME AS COMPANY_NAME, o.JOB_NAME, o.ORDER_TYPE, ' +
limit := IntToStr(PageSize); generateSubquery('PROOF') +
generateSubquery('ART') +
SQL := 'SELECT o.ORDER_ID, c.SHORT_NAME, o.LOCATION AS Loc, c.NAME AS COMPANY_NAME, o.JOB_NAME, o.ORDER_TYPE, '; generateSubquery('PLATE') +
generateSubquery('MOUNT') +
// Generate the subqueries that get the Status Dates(Due and Done) generateSubquery('SHIP');
SQL := SQL + generateSubquery('PROOF');
SQL := SQL + generateSubquery('ART');
SQL := SQL + generateSubquery('PLATE');
SQL := SQL + generateSubquery('MOUNT');
SQL := SQL + generateSubquery('SHIP');
// Generate the Where SQL based on if there is a status filter applied or not whereSQL := ' FROM orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID ' +
whereSQL := 'from orders o join customers c on ' + 'LEFT JOIN qb_sales_orders qb ON qb.ORDER_ID = o.ORDER_ID ' +
'c.CUSTOMER_ID = o.COMPANY_ID left join qb_sales_orders qb on qb.ORDER_ID = o.ORDER_ID ' + 'LEFT JOIN corrugated_plate_orders cpo ON o.ORDER_ID = cpo.ORDER_ID ' +
' LEFT JOIN corrugated_plate_orders cpo ON o.ORDER_ID = cpo.ORDER_ID ' + 'LEFT JOIN web_plate_orders wpo ON o.ORDER_ID = wpo.ORDER_ID ' +
'LEFT JOIN web_plate_orders wpo ON o.ORDER_ID = wpo.ORDER_ID ' + 'LEFT JOIN cutting_die_orders cdo ON o.ORDER_ID = cdo.ORDER_ID WHERE 0 = 0';
'LEFT JOIN cutting_die_orders cdo ON o.ORDER_ID = cdo.ORDER_ID where 0 = 0';
if ( ( status1.filterType <> '' ) and ( status1.filterType <> 'NONE' ) ) then if (status1.filterType <> '') and (status1.filterType <> 'NONE') then
whereSQL := whereSQL + generateStatusWhereSQL(status1); whereSQL := whereSQL + generateStatusWhereSQL(status1);
if (status2.filterType <> '') and (status2.filterType <> 'NONE') then
if ( (status2.filterType <> '' ) and ( status2.filterType <> 'NONE' ) ) then
whereSQL := whereSQL + generateStatusWhereSQL(status2); whereSQL := whereSQL + generateStatusWhereSQL(status2);
if (orderType <> '') and (orderType <> 'any') then
if ( ( orderType <> '' ) and ( orderType <> 'any' ) ) then
begin begin
if ( orderType <> 'cutting die') then if (orderType <> 'cutting die') then
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + quotedStr(orderType + '_plate') whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr(orderType + '_plate')
else else
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + quotedStr('cutting_die'); whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr('cutting_die');
end; end;
if OrderID <> '' then
if orderID <> '' then whereSQL := whereSQL + ' AND o.ORDER_ID = ' + OrderID;
whereSQL := whereSQL + ' AND o.ORDER_ID = ' + orderID;
if companyID <> '' then if companyID <> '' then
whereSQL := whereSQL + ' AND c.CUSTOMER_ID = ' + companyID; whereSQL := whereSQL + ' AND c.CUSTOMER_ID = ' + companyID;
if jobName <> '' then if jobName <> '' then
whereSQL := whereSQL + ' AND o.JOB_NAME LIKE ' + quotedStr('%' + jobName + '%'); whereSQL := whereSQL + ' AND o.JOB_NAME LIKE ' + QuotedStr('%' + jobName + '%');
orderBySQL := ' ORDER BY ' + OrderBy;
orderBySQL := 'ORDER BY ' + OrderBy; SQL := SQL + ' o.PRICE, qb.QB_REF_NUM, ' +
'COALESCE(cpo.staff_fields_po_number, wpo.staff_fields_po_number, cdo.staff_fields_po_number) AS po_number, ' +
SQL := SQL + 'o.PRICE, qb.QB_REF_NUM, ' + 'COALESCE(cpo.staff_fields_quickbooks_item, wpo.staff_fields_quickbooks_item, cdo.staff_fields_quickbooks_item) AS quickbooks_item, ' +
'coalesce( cpo.staff_fields_po_number, wpo.staff_fields_po_number, cdo.staff_fields_po_number ) AS po_number, ' + 'COALESCE(cpo.staff_fields_order_date, wpo.staff_fields_order_date, cdo.staff_fields_order_date) AS ORDER_DATE ';
'coalesce( cpo.staff_fields_quickbooks_item, wpo.staff_fields_quickbooks_item, cdo.staff_fields_quickbooks_item ) AS quickbooks_item, ' +
'coalesce( cpo.staff_fields_order_date, wpo.staff_fields_order_date, cdo.staff_fields_order_date ) AS ORDER_DATE ' +
whereSQL + ' ' + orderBySQL + ' LIMIT ' + limit + ' OFFSET ' + offset;
if not ForPDF then
SQL := SQL + whereSQL + orderBySQL + ' LIMIT ' + limit + ' OFFSET ' + offset
else
SQL := SQL + whereSQL + orderBySQL;
// send the SQL and whereSQL back. whereSQL is needed to get the total count.
// probably a way to getthe TotalCount in original SQL but it was giving me issues
result.SQL := SQL; result.SQL := SQL;
result.whereSQL := whereSQL; result.whereSQL := whereSQL;
end; end;
......
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