Commit bd2cab6e by Mac Stephens

big update to http exception handling - both client and server api calls updated…

big update to http exception handling - both client and server api calls updated with new error modal
parent 7a8ad9bf
...@@ -9,6 +9,7 @@ procedure ShowStatusMessage(const AMessage, AClass: string; const AElementId: st ...@@ -9,6 +9,7 @@ procedure ShowStatusMessage(const AMessage, AClass: string; const AElementId: st
procedure HideStatusMessage(const AElementId: string); procedure HideStatusMessage(const AElementId: string);
procedure ShowSpinner(SpinnerID: string); procedure ShowSpinner(SpinnerID: string);
procedure HideSpinner(SpinnerID: string); procedure HideSpinner(SpinnerID: string);
procedure ShowErrorModal(const msg: string);
function CalculateAge(DateOfBirth: TDateTime): Integer; function CalculateAge(DateOfBirth: TDateTime): Integer;
function FormatPhoneNumber(PhoneNumber: string): string; function FormatPhoneNumber(PhoneNumber: string): string;
procedure ApplyReportTitle(CurrentReportType: string); procedure ApplyReportTitle(CurrentReportType: string);
...@@ -82,6 +83,39 @@ begin ...@@ -82,6 +83,39 @@ begin
end; end;
end; end;
// The $IFNDEF WIN32 was recommended by Holger to deal with any modal issues
procedure ShowErrorModal(const msg: string);
begin
{$IFNDEF WIN32}
asm
var modal = document.getElementById('main_errormodal');
var label = document.getElementById('main_lblmodal_body');
var reloadBtn = document.getElementById('btn_modal_restart');
if (label) label.innerText = msg;
// Ensure modal is a direct child of <body>
if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal);
}
// Bind hard reload to button
if (reloadBtn) {
reloadBtn.onclick = function () {
window.location.reload(true); // hard reload, bypass cache
};
}
// Show the Bootstrap modal
var bsModal = new bootstrap.Modal(modal, { keyboard: false });
bsModal.show();
end;
{$ENDIF}
end;
function CalculateAge(DateOfBirth: TDateTime): Integer; function CalculateAge(DateOfBirth: TDateTime): Integer;
var var
......
...@@ -125,39 +125,32 @@ begin ...@@ -125,39 +125,32 @@ begin
if PageNumber > 0 then if PageNumber > 0 then
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomers', [searchOptions])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomers', [searchOptions]));
customerList := TJSObject(xdcResponse.Result); customerList := TJSObject(xdcResponse.Result);
// Load data into the dataset
xdwdsCustomers.Close; xdwdsCustomers.Close;
xdwdsCustomers.SetJsonData(customerList['data']); xdwdsCustomers.SetJsonData(customerList['data']);
xdwdsCustomers.Open; xdwdsCustomers.Open;
Utils.HideSpinner('spinner');
customerListLength := integer(customerList['count']); customerListLength := integer(customerList['count']);
TotalPages := ( (customerListLength + PageSize - 1) div PageSize); TotalPages := ( (customerListLength + PageSize - 1) div PageSize);
if customerListLength = 0 then if customerListLength = 0 then
begin lblEntries.Caption := 'No entries found'
lblEntries.Caption := 'No entries found';
end
else if (PageNumber * PageSize) < customerListLength then else if (PageNumber * PageSize) < customerListLength then
// Currently these do the same thing. If you want to limit the number of entries
// You will need to edit the server side, and then change this if statement so the label
// Correctly displayes. I believe it is IntToStr(PageSize * PageNum)
begin
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) + lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(customerListLength) + ' - ' + IntToStr(customerListLength) +
' of ' + IntToStr(customerListLength); ' of ' + IntToStr(customerListLength)
end else
else if (PageNumber * PageSize) >= customerListLength then
begin
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) + lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(customerListLength) + ' - ' + IntToStr(customerListLength) +
' of ' + IntToStr(customerListLength); ' of ' + IntToStr(customerListLength);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve customers: ' + E.ErrorResult.ErrorMessage);
end; end;
Utils.HideSpinner('spinner');
end; end;
end; end;
......
...@@ -103,7 +103,7 @@ begin ...@@ -103,7 +103,7 @@ begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
end; end;
function TFViewEditUser.AddUser(): string; function TFViewEditUser.AddUser: string;
// Sends UserInfo over to the server so it can be added to the database // Sends UserInfo over to the server so it can be added to the database
var var
userInfo: string; userInfo: string;
...@@ -120,12 +120,17 @@ begin ...@@ -120,12 +120,17 @@ begin
'&rights=' + edtRights.Text + '&rights=' + edtRights.Text +
'&QB=' + edtQB.Text; '&QB=' + edtQB.Text;
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddUser', try
[userInfo])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddUser', [userInfo]));
responseString := TJSObject(xdcResponse.Result); responseString := TJSObject(xdcResponse.Result);
Info := string(responseString['value']); Info := string(responseString['value']);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not add user: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFViewEditUser.HideNotification; procedure TFViewEditUser.HideNotification;
begin begin
pnlMessage.ElementHandle.hidden := True; pnlMessage.ElementHandle.hidden := True;
......
...@@ -306,13 +306,13 @@ begin ...@@ -306,13 +306,13 @@ begin
if PageNumber > 0 then if PageNumber > 0 then
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
try
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();
Utils.HideSpinner('Spinner');
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]);
...@@ -333,9 +333,15 @@ begin ...@@ -333,9 +333,15 @@ begin
' of ' + IntToStr(itemListLength); ' of ' + IntToStr(itemListLength);
end; end;
GeneratePagination(TotalPages); GeneratePagination(TotalPages);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve items: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end; end;
end; end;
procedure TFViewItems.btnApplyClick(Sender: TObject); procedure TFViewItems.btnApplyClick(Sender: TObject);
// Button that effectively functions as a GetItems() button // Button that effectively functions as a GetItems() button
var var
...@@ -356,11 +362,16 @@ procedure TFViewItems.AddItem(itemOptions: string); ...@@ -356,11 +362,16 @@ procedure TFViewItems.AddItem(itemOptions: string);
var var
xdcResponse: TXDataClientResponse; xdcResponse: TXDataClientResponse;
begin begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddItem', try
[itemOptions])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddItem', [itemOptions]));
getItems(GenerateSearchOptions()); getItems(GenerateSearchOptions());
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not add item: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFViewItems.wcbPageSizeChange(Sender: TObject); procedure TFViewItems.wcbPageSizeChange(Sender: TObject);
// gets a new amount of items based when the page size is changed // gets a new amount of items based when the page size is changed
begin begin
......
...@@ -69,6 +69,27 @@ ...@@ -69,6 +69,27 @@
</div> </div>
</div> </div>
<div class="modal fade" id="main_errormodal" tabindex="-1" aria-labelledby="main_lblmodal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content shadow-lg">
<div class="modal-header">
<h5 class="modal-title" id="main_lblmodal">Error</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="main_lblmodal_body">
Please contact EMSystems to solve the issue.
</div>
<div class="modal-footer justify-content-center">
<button type="button" id="btn_modal_restart" class="btn btn-primary">Restart WebApp</button>
</div>
</div>
</div>
</div>
...@@ -315,4 +315,5 @@ begin ...@@ -315,4 +315,5 @@ begin
FChildForm := TFViewUsers.CreateForm(WebPanel1.ElementID, Info); FChildForm := TFViewUsers.CreateForm(WebPanel1.ElementID, Info);
end; end;
end. end.
...@@ -553,7 +553,7 @@ var ...@@ -553,7 +553,7 @@ var
searchOptions, pdfURL: string; searchOptions, pdfURL: string;
jsObject: TJSObject; jsObject: TJSObject;
begin begin
try
// Call the server method to generate the PDF // Call the server method to generate the PDF
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCorrugatedPDF', [orderID])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCorrugatedPDF', [orderID]));
jsObject := JS.TJSObject(xdcResponse.Result); jsObject := JS.TJSObject(xdcResponse.Result);
...@@ -562,8 +562,13 @@ begin ...@@ -562,8 +562,13 @@ 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');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate corrugated PDF: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFOrderEntryCorrugated.AddCorrugatedOrder(orderJSON: TJSONObject); procedure TFOrderEntryCorrugated.AddCorrugatedOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server // sends the order JSON object to the server
var var
...@@ -585,10 +590,16 @@ procedure TFOrderEntryCorrugated.DelOrder(); ...@@ -585,10 +590,16 @@ procedure TFOrderEntryCorrugated.DelOrder();
var var
Response: TXDataClientResponse; Response: TXDataClientResponse;
begin begin
try
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.DelOrder', Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.DelOrder',
[OrderID, 'corrugated', JS.toString(AuthService.TokenPayload.Properties['user_id'])])); [OrderID, 'corrugated', JS.toString(AuthService.TokenPayload.Properties['user_id'])]));
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not delete order: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
class function TFOrderEntryCorrugated.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm; class function TFOrderEntryCorrugated.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var var
localMode: string; localMode: string;
...@@ -606,7 +617,6 @@ begin ...@@ -606,7 +617,6 @@ begin
end; end;
end end
); );
end; end;
procedure TFOrderEntryCorrugated.addColorRow(num: string; Color: string; LPI: string; Size: string); procedure TFOrderEntryCorrugated.addColorRow(num: string; Color: string; LPI: string; Size: string);
...@@ -821,8 +831,8 @@ var ...@@ -821,8 +831,8 @@ var
colorListJSON: TJSONArray; colorListJSON: TJSONArray;
items: TJSObject; items: TJSObject;
begin begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrder', try
[Order_ID])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrder', [Order_ID]));
order := TJSObject(xdcResponse.Result); order := TJSObject(xdcResponse.Result);
data := TJSArray(order['data']); data := TJSArray(order['data']);
XDataWebDataSet1.Close; XDataWebDataSet1.Close;
...@@ -953,7 +963,10 @@ begin ...@@ -953,7 +963,10 @@ begin
items := TJSObject(order['ITEMS']); items := TJSObject(order['ITEMS']);
xdwdsQBItem.SetJsonData(items['data']); xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open; xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFOrderEntryCorrugated.getCustomer(customerID: string); procedure TFOrderEntryCorrugated.getCustomer(customerID: string);
...@@ -964,8 +977,8 @@ var ...@@ -964,8 +977,8 @@ var
address: string; address: string;
items: TJSObject; items: TJSObject;
begin begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomer', try
[customerID])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomer', [customerID]));
customer := TJSObject(xdcResponse.Result); customer := TJSObject(xdcResponse.Result);
XDataWebDataSet1.Close; XDataWebDataSet1.Close;
XDataWebDataSet1.SetJsonData(customer); XDataWebDataSet1.SetJsonData(customer);
...@@ -989,6 +1002,10 @@ begin ...@@ -989,6 +1002,10 @@ begin
dtpMountDue.Date := 0; dtpMountDue.Date := 0;
dtpShipDate.Date := 0; dtpShipDate.Date := 0;
dtpApprovedDate.Date := 0; dtpApprovedDate.Date := 0;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve customer: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFOrderEntryCorrugated.WebFormShow(Sender: TObject); procedure TFOrderEntryCorrugated.WebFormShow(Sender: TObject);
......
...@@ -394,7 +394,7 @@ var ...@@ -394,7 +394,7 @@ var
searchOptions, pdfURL: string; searchOptions, pdfURL: string;
jsObject: TJSObject; jsObject: TJSObject;
begin begin
try
// Call the server method to generate the PDF // Call the server method to generate the PDF
console.log(orderID); console.log(orderID);
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCuttingPDF', [orderID])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCuttingPDF', [orderID]));
...@@ -404,22 +404,33 @@ begin ...@@ -404,22 +404,33 @@ 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');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate cutting die PDF: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFOrderEntryCuttingDie.AddCuttingDieOrder(orderJSON: TJSONObject); procedure TFOrderEntryCuttingDie.AddCuttingDieOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server // sends the order JSON object to the server
var var
Response: TXDataClientResponse; Response: TXDataClientResponse;
jsObj: TJSObject; jsObj: TJSObject;
begin begin
try
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddCuttingDieOrder', Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddCuttingDieOrder',
[orderJSON.ToString])); [orderJSON.ToString]));
jsObj := JS.TJSObject(Response.Result); jsObj := JS.TJSObject(Response.Result);
if mode = 'ADD' then if mode = 'ADD' then
OrderID := String(jsObj.Properties['OrderID']); OrderID := String(jsObj.Properties['OrderID']);
mode := 'EDIT'; mode := 'EDIT';
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not save cutting die order: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
class function TFOrderEntryCuttingDie.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm; class function TFOrderEntryCuttingDie.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var var
localMode: string; localMode: string;
...@@ -438,7 +449,6 @@ begin ...@@ -438,7 +449,6 @@ begin
end; end;
end end
); );
end; end;
procedure TFOrderEntryCuttingDie.btnAddClick(Sender: TObject); procedure TFOrderEntryCuttingDie.btnAddClick(Sender: TObject);
...@@ -513,6 +523,8 @@ var ...@@ -513,6 +523,8 @@ var
data: TJSArray; data: TJSArray;
order, items: TJSObject; order, items: TJSObject;
begin begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCuttingDieOrder', xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCuttingDieOrder',
[Order_ID])); [Order_ID]));
order := TJSObject(xdcResponse.Result); order := TJSObject(xdcResponse.Result);
...@@ -522,7 +534,6 @@ begin ...@@ -522,7 +534,6 @@ begin
XDataWebDataSet1.Open; XDataWebDataSet1.Open;
// Check boxes and dates need to be manually set // Check boxes and dates need to be manually set
if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then
dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value) dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value)
else else
...@@ -555,8 +566,14 @@ begin ...@@ -555,8 +566,14 @@ begin
xdwdsQBItem.SetJsonData(items['data']); xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open; xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end; end;
procedure TFOrderEntryCuttingDie.getCustomer(customerID: string); procedure TFOrderEntryCuttingDie.getCustomer(customerID: string);
// gets a customer from the database then loads the appropiate fields // gets a customer from the database then loads the appropiate fields
var var
......
...@@ -593,7 +593,7 @@ var ...@@ -593,7 +593,7 @@ var
searchOptions, pdfURL: string; searchOptions, pdfURL: string;
jsObject: TJSObject; jsObject: TJSObject;
begin begin
try
// Call the server method to generate the PDF // Call the server method to generate the PDF
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderWebPDF', [orderID])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderWebPDF', [orderID]));
jsObject := JS.TJSObject(xdcResponse.Result); jsObject := JS.TJSObject(xdcResponse.Result);
...@@ -602,23 +602,33 @@ begin ...@@ -602,23 +602,33 @@ 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');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate web order PDF: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
procedure TFOrderEntryWeb.AddWebOrder(orderJSON: TJSONObject); procedure TFOrderEntryWeb.AddWebOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server // sends the order JSON object to the server
var var
Response: TXDataClientResponse; Response: TXDataClientResponse;
jsObj: TJSObject; jsObj: TJSObject;
begin begin
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddWebOrder', try
[orderJSON.ToString])); Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddWebOrder', [orderJSON.ToString]));
jsObj := JS.TJSObject(Response.Result); jsObj := JS.TJSObject(Response.Result);
if mode = 'ADD' then if mode = 'ADD' then
OrderID := String(jsObj.Properties['OrderID']); OrderID := String(jsObj.Properties['OrderID']);
console.log(OrderID); console.log(OrderID);
mode := 'EDIT'; mode := 'EDIT';
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not save web order: ' + E.ErrorResult.ErrorMessage);
end;
end; end;
class function TFOrderEntryWeb.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm; class function TFOrderEntryWeb.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var var
localMode: string; localMode: string;
...@@ -784,6 +794,8 @@ var ...@@ -784,6 +794,8 @@ var
colorListJSON: TJSONArray; colorListJSON: TJSONArray;
items: TJSObject; items: TJSObject;
begin begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetWebOrder', xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetWebOrder',
[Order_ID])); [Order_ID]));
order := TJSObject(xdcResponse.Result); order := TJSObject(xdcResponse.Result);
...@@ -791,6 +803,7 @@ begin ...@@ -791,6 +803,7 @@ begin
XDataWebDataSet1.Close; XDataWebDataSet1.Close;
XDataWebDataSet1.SetJsonData(order); XDataWebDataSet1.SetJsonData(order);
XDataWebDataSet1.Open; XDataWebDataSet1.Open;
if XDataWebDataSet1quantity_and_colors_qty_colors.Value <> '' then if XDataWebDataSet1quantity_and_colors_qty_colors.Value <> '' then
begin begin
colorObject := TJSObject(TJSJSON.parse(XDataWebDataSet1quantity_and_colors_qty_colors.Value)); colorObject := TJSObject(TJSJSON.parse(XDataWebDataSet1quantity_and_colors_qty_colors.Value));
...@@ -803,7 +816,6 @@ begin ...@@ -803,7 +816,6 @@ begin
end; end;
// Dates need to be manually set // Dates need to be manually set
if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then
dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value) dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value)
else else
...@@ -829,12 +841,10 @@ begin ...@@ -829,12 +841,10 @@ begin
dtpPDFDate1.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_1.Value) dtpPDFDate1.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_1.Value)
else else
dtpPDFDate1.Date := 0; dtpPDFDate1.Date := 0;
if not (XDataWebDataSet1proofing_pdf_date_2.AsString = '') then if not (XDataWebDataSet1proofing_pdf_date_2.AsString = '') then
dtpPDFDate2.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_2.Value) dtpPDFDate2.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_2.Value)
else else
dtpPDFDate2.Date := 0; dtpPDFDate2.Date := 0;
if not (XDataWebDataSet1proofing_pdf_date_3.AsString = '') then if not (XDataWebDataSet1proofing_pdf_date_3.AsString = '') then
dtpPDFDate3.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_3.Value) dtpPDFDate3.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_3.Value)
else else
...@@ -844,12 +854,10 @@ begin ...@@ -844,12 +854,10 @@ begin
dtpInkJetDate1.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_1.Value) dtpInkJetDate1.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_1.Value)
else else
dtpInkJetDate1.Date := 0; dtpInkJetDate1.Date := 0;
if not (XDataWebDataSet1proofing_ink_jet_date_2.AsString = '') then if not (XDataWebDataSet1proofing_ink_jet_date_2.AsString = '') then
dtpInkJetDate2.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_2.Value) dtpInkJetDate2.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_2.Value)
else else
dtpInkJetDate2.Date := 0; dtpInkJetDate2.Date := 0;
if not (XDataWebDataSet1proofing_ink_jet_date_3.AsString = '') then if not (XDataWebDataSet1proofing_ink_jet_date_3.AsString = '') then
dtpInkJetDate3.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_3.Value) dtpInkJetDate3.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_3.Value)
else else
...@@ -859,18 +867,15 @@ begin ...@@ -859,18 +867,15 @@ begin
dtpColorContractDate1.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_1.Value) dtpColorContractDate1.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_1.Value)
else else
dtpColorContractDate1.Date := 0; dtpColorContractDate1.Date := 0;
if not (XDataWebDataSet1proofing_color_contrac_date_2.AsString = '') then if not (XDataWebDataSet1proofing_color_contrac_date_2.AsString = '') then
dtpColorContractDate2.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_2.Value) dtpColorContractDate2.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_2.Value)
else else
dtpColorContractDate2.Date := 0; dtpColorContractDate2.Date := 0;
if not (XDataWebDataSet1proofing_digital_color_date_1.AsString = '') then if not (XDataWebDataSet1proofing_digital_color_date_1.AsString = '') then
dtpDigitalColorDate.Date := StrToDateTime(XDataWebDataSet1proofing_digital_color_date_1.Value) dtpDigitalColorDate.Date := StrToDateTime(XDataWebDataSet1proofing_digital_color_date_1.Value)
else else
dtpDigitalColorDate.Date := 0; dtpDigitalColorDate.Date := 0;
if mode = 'EDIT' then if mode = 'EDIT' then
begin begin
CustomerID := XDataWebDataSet1COMPANY_ID.AsString; CustomerID := XDataWebDataSet1COMPANY_ID.AsString;
...@@ -883,9 +888,15 @@ begin ...@@ -883,9 +888,15 @@ begin
items := TJSObject(order['ITEMS']); items := TJSObject(order['ITEMS']);
xdwdsQBItem.SetJsonData(items['data']); xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open; xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end; end;
procedure TFOrderEntryWeb.getCustomer(customerID: string); procedure TFOrderEntryWeb.getCustomer(customerID: string);
// gets a customer from the database then loads the appropiate fields // gets a customer from the database then loads the appropiate fields
var var
......
object FViewOrders: TFViewOrders object FViewOrders: TFViewOrders
Width = 676 Width = 676
Height = 480 Height = 480
Caption = 'main.errorpanel'
CSSLibrary = cssBootstrap CSSLibrary = cssBootstrap
ElementFont = efCSS ElementFont = efCSS
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
......
...@@ -13,7 +13,7 @@ uses ...@@ -13,7 +13,7 @@ uses
WEBLib.Forms, WEBLib.Dialogs, WEBLib.Menus, WEBLib.ExtCtrls, WEBLib.StdCtrls, WEBLib.Forms, WEBLib.Dialogs, WEBLib.Menus, WEBLib.ExtCtrls, WEBLib.StdCtrls,
WEBLib.JSON, Auth.Service, XData.Web.Client, WebLib.Storage, WEBLib.JSON, Auth.Service, XData.Web.Client, WebLib.Storage,
ConnectionModule, App.Types, Vcl.StdCtrls, Vcl.Controls, WEBLib.DBCtrls, ConnectionModule, App.Types, Vcl.StdCtrls, Vcl.Controls, WEBLib.DBCtrls,
XData.Web.JsonDataset, WEBLib.DB, Data.DB, XData.Web.Dataset, XData.Web.JsonDataset, WEBLib.DB, Data.DB, XData.Web.Dataset, XData.Web.DatasetCommon,
WEBLib.Grids; WEBLib.Grids;
type type
...@@ -156,6 +156,8 @@ var ...@@ -156,6 +156,8 @@ var
searchOptions, pdfURL: string; searchOptions, pdfURL: string;
jsObject: TJSObject; jsObject: TJSObject;
begin begin
Utils.ShowSpinner('spinner');
try
searchOptions := edtSearch.Text; searchOptions := edtSearch.Text;
// Call the server method to generate the PDF // Call the server method to generate the PDF
...@@ -163,16 +165,16 @@ begin ...@@ -163,16 +165,16 @@ begin
jsObject := JS.TJSObject(xdcResponse.Result); jsObject := JS.TJSObject(xdcResponse.Result);
pdfURL := JS.toString(jsObject.Properties['value']); pdfURL := JS.toString(jsObject.Properties['value']);
// Open the PDF in a new browser tab without needing a different form // Open the PDF in a new browser tab
// This method is much faster too, even for large datasets
window.open(pdfURL, '_blank'); window.open(pdfURL, '_blank');
begin except
Utils.HideSpinner('Spinner'); on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate report PDF: ' + E.ErrorResult.ErrorMessage);
end; end;
Utils.HideSpinner('spinner');
end; end;
procedure TFViewOrders.WebButton1Click(Sender: TObject); procedure TFViewOrders.WebButton1Click(Sender: TObject);
begin begin
if OrderID <> '' then if OrderID <> '' then
...@@ -651,57 +653,56 @@ begin ...@@ -651,57 +653,56 @@ begin
end); end);
PageItem.appendChild(PageLink); PageItem.appendChild(PageLink);
PaginationElement.appendChild(PageItem); PaginationElement.appendChild(PageItem);
end; end;
procedure TFViewOrders.GetOrders(searchOptions: string); procedure TFViewOrders.GetOrders(searchOptions: string);
// retrieves a list of orders that fit a given search criteria
// searchOptions: search info to be sent to the server
var var
xdcResponse: TXDataClientResponse; xdcResponse: TXDataClientResponse;
orderList: TJSObject; orderList: TJSObject;
orderListLength: integer; orderListLength, TotalPages: Integer;
TotalPages: integer;
begin begin
Utils.ShowSpinner('spinner'); Utils.ShowSpinner('spinner');
if PageNumber > 0 then try
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync(
'ILookupService.GetOrders', [searchOptions]));
if Assigned(xdcResponse.Result) then
begin begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrders', [searchOptions]));
orderList := TJSObject(xdcResponse.Result); orderList := TJSObject(xdcResponse.Result);
// Load data into the dataset
xdwdsOrders.Close; xdwdsOrders.Close;
xdwdsOrders.SetJsonData(orderList['data']); xdwdsOrders.SetJsonData(orderList['data']);
xdwdsOrders.Open; xdwdsOrders.Open;
orderListLength := integer(orderList['count']); orderListLength := Integer(orderList['count']);
TotalPages := ( (orderListLength + PageSize - 1) div PageSize); TotalPages := (orderListLength + PageSize - 1) div PageSize;
GeneratePagination(TotalPages);
// Update label
if orderListLength = 0 then if orderListLength = 0 then
begin lblEntries.Caption := 'No entries found'
lblEntries.Caption := 'No entries found';
end
else if (PageNumber * PageSize) < orderListLength then else if (PageNumber * PageSize) < orderListLength then
begin lblEntries.Caption := Format('Showing entries %d - %d of %d',
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) + [(PageNumber - 1) * PageSize + 1, PageNumber * PageSize, orderListLength])
' - ' + IntToStr(PageNumber * PageSize) + else
' of ' + IntToStr(orderListLength); lblEntries.Caption := Format('Showing entries %d - %d of %d',
end [(PageNumber - 1) * PageSize + 1, orderListLength, orderListLength]);
else if (PageNumber * PageSize) >= orderListLength then
begin
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(orderListLength) +
' of ' + IntToStr(orderListLength);
end; end;
// Optional: Continue using pagination if needed except
GeneratePagination(TotalPages); on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve orders: ' + E.ErrorResult.ErrorMessage);
end;
finally
Utils.HideSpinner('spinner'); Utils.HideSpinner('spinner');
end; end;
end; end;
procedure TFViewOrders.btnAddOrderClick(Sender: TObject); procedure TFViewOrders.btnAddOrderClick(Sender: TObject);
begin begin
ShowAddOrderForm(); ShowAddOrderForm();
......
...@@ -97,21 +97,26 @@ var ...@@ -97,21 +97,26 @@ var
customerList: TJSObject; customerList: TJSObject;
i: integer; i: integer;
begin begin
try
// Fetch data from XData service // Fetch data from XData service
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.getQBCustomers', [])); xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.getQBCustomers', []));
customerList := TJSObject(xdcResponse.Result); customerList := TJSObject(xdcResponse.Result);
// Load data into TXDataWebDataset // Load data into TXDataWebDataset
xdwdsCustomers.Close; xdwdsCustomers.Close;
xdwdsCustomers.SetJsonData(customerList); xdwdsCustomers.SetJsonData(customerList);
xdwdsCustomers.Open; xdwdsCustomers.Open;
// Manually populate the grid // Manually populate the grid
PopulateGridManually; PopulateGridManually;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve QuickBooks customers: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner'); Utils.HideSpinner('spinner');
end; end;
procedure TFSelectCustomer.PopulateGridManually; procedure TFSelectCustomer.PopulateGridManually;
// populates the grid with customers manually. // populates the grid with customers manually.
var var
......
...@@ -6,7 +6,7 @@ uses ...@@ -6,7 +6,7 @@ uses
System.SysUtils, System.Classes, Web, WEBLib.Graphics, WEBLib.Forms, WEBLib.Dialogs, System.SysUtils, System.Classes, Web, WEBLib.Graphics, WEBLib.Forms, WEBLib.Dialogs,
Vcl.Controls, Vcl.StdCtrls, WEBLib.StdCtrls, WEBLib.Controls, WEBLib.Grids, WebLib.Lists, Vcl.Controls, Vcl.StdCtrls, WEBLib.StdCtrls, WEBLib.Controls, WEBLib.Grids, WebLib.Lists,
XData.Web.Client, WEBLib.ExtCtrls, DB, XData.Web.JsonDataset, XData.Web.Client, WEBLib.ExtCtrls, DB, XData.Web.JsonDataset,
XData.Web.Dataset, XData.Web.Connection, Vcl.Forms, WEBLib.DBCtrls, JS; XData.Web.Dataset, XData.Web.Connection, Vcl.Forms, WEBLib.DBCtrls, JS, Utils;
type type
TFViewUsers = class(TWebForm) TFViewUsers = class(TWebForm)
...@@ -330,10 +330,11 @@ var ...@@ -330,10 +330,11 @@ var
data: TJSArray; data: TJSArray;
user: TJSObject; user: TJSObject;
userListLength: integer; userListLength: integer;
begin begin
if PageNumber > 0 then if PageNumber > 0 then
begin begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetUsers', xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetUsers',
[searchOptions])); [searchOptions]));
...@@ -368,6 +369,11 @@ begin ...@@ -368,6 +369,11 @@ begin
' of ' + IntToStr(userListLength); ' of ' + IntToStr(userListLength);
end; end;
GeneratePagination(TotalPages); GeneratePagination(TotalPages);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve users: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end; end;
end; end;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<FrameworkType>VCL</FrameworkType> <FrameworkType>VCL</FrameworkType>
<MainSource>webKGOrders.dpr</MainSource> <MainSource>webKGOrders.dpr</MainSource>
<Base>True</Base> <Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config> <Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform> <Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms> <TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType> <AppType>Application</AppType>
......
...@@ -138,18 +138,19 @@ var ...@@ -138,18 +138,19 @@ var
SQL: string; SQL: string;
customer: TCustomerItem; customer: TCustomerItem;
begin begin
try
SQL := 'select * from customers'; SQL := 'select * from customers';
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
result := TCustomerList.Create; result := TCustomerList.Create;
Result.data := TList<TCustomerItem>.Create; Result.data := TList<TCustomerItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data ); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
result.count := 0; result.count := 0;
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
customer := TCustomerItem.Create; customer := TCustomerItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( customer ); TXDataOperationContext.Current.Handler.ManagedObjects.Add(customer);
customer.NAME := ordersDB.UniQuery1.FieldByName('NAME').AsString; customer.NAME := ordersDB.UniQuery1.FieldByName('NAME').AsString;
customer.CUSTOMER_ID := ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger; customer.CUSTOMER_ID := ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger;
...@@ -165,8 +166,16 @@ begin ...@@ -165,8 +166,16 @@ begin
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except
on E: Exception do
begin
Logger.Log(2, 'Error in GetCustomers: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve customer list: ' + E.Message);
end;
end;
end; end;
function TLookupService.GetCustomer(ID: string): TCustomerItem; function TLookupService.GetCustomer(ID: string): TCustomerItem;
// Gets one specific customer from the ID given by the client. This is used for // Gets one specific customer from the ID given by the client. This is used for
// the OrderEntry forms. // the OrderEntry forms.
...@@ -175,6 +184,7 @@ var ...@@ -175,6 +184,7 @@ var
ADDRESS: TAddressItem; ADDRESS: TAddressItem;
USER: TUserItem; USER: TUserItem;
begin begin
try
if ID = '' then if ID = '' then
SQL := 'select * FROM customers c LEFT JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = -1' SQL := 'select * FROM customers c LEFT JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = -1'
else else
...@@ -232,10 +242,16 @@ begin ...@@ -232,10 +242,16 @@ begin
result.USERS.Add(USER); result.USERS.Add(USER);
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
except
on E: Exception do
begin
Logger.Log(2, 'Error in GetCustomer: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve customer: ' + E.Message);
end;
end;
end; 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 // Generates a report pdf based on the last search (if any) Linked to rOrders
// file which does most of the work. // file which does most of the work.
...@@ -247,6 +263,7 @@ var ...@@ -247,6 +263,7 @@ var
begin begin
rptOrderList := TrptOrderList.Create(nil); rptOrderList := TrptOrderList.Create(nil);
try try
try
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions // parse the searchOptions
...@@ -265,15 +282,18 @@ begin ...@@ -265,15 +282,18 @@ begin
SQL := GenerateOrdersSQL(searchOptions).SQL; SQL := GenerateOrdersSQL(searchOptions).SQL;
result := rptOrderList.PrepareReport(SQL, CompanyName); result := rptOrderList.PrepareReport(SQL, CompanyName);
//rptOrderList.GeneratePDF;
// Optionally, log success // Optionally, log success
Logger.log(5, 'PDF Report successfully generated for searchOptions: ' + searchOptions); Logger.log(5, 'PDF Report successfully generated for searchOptions: ' + searchOptions);
except
on E: Exception do
raise EXDataHttpException.Create(500, 'Failed to generate PDF: ' + E.Message);
end;
finally finally
rptOrderList.Free; rptOrderList.Free;
end; end;
end; end;
function TLookupService.AddShippingAddress(AddressInfo: string): TJSONObject; function TLookupService.AddShippingAddress(AddressInfo: string): TJSONObject;
var var
JSONData: TJSONObject; JSONData: TJSONObject;
...@@ -480,7 +500,7 @@ begin ...@@ -480,7 +500,7 @@ begin
end; end;
end end
else else
Result := TJSONObject.Create.AddPair('status', 'Failure:Company Account Name Must Be Unique'); Result := TJSONObject.Create.AddPair('status', 'Failure: Company Account Name Must Be Unique');
end; end;
function TLookupService.GenerateOrderCorrugatedPDF(orderID: string): string; function TLookupService.GenerateOrderCorrugatedPDF(orderID: string): string;
...@@ -490,6 +510,7 @@ var ...@@ -490,6 +510,7 @@ var
begin begin
rptOrderCorrugated := TrptOrderCorrugated.Create(nil); rptOrderCorrugated := TrptOrderCorrugated.Create(nil);
try try
try
// Generate SQL query for a single order // Generate SQL query for a single order
SQL := 'SELECT * FROM corrugated_plate_orders WHERE ORDER_ID = ' + orderID; SQL := 'SELECT * FROM corrugated_plate_orders WHERE ORDER_ID = ' + orderID;
...@@ -498,6 +519,13 @@ begin ...@@ -498,6 +519,13 @@ begin
// Optionally log success // Optionally log success
Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID); Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID);
except
on E: Exception do
begin
Logger.Log(1, 'Error generating corrugated PDF: ' + E.Message);
raise EXDataHttpException.Create(500, 'Error generating corrugated PDF: ' + E.Message);
end;
end;
finally finally
rptOrderCorrugated.Free; rptOrderCorrugated.Free;
end; end;
...@@ -510,15 +538,23 @@ var ...@@ -510,15 +538,23 @@ var
begin begin
rptOrderWeb := TrptOrderWeb.Create(nil); rptOrderWeb := TrptOrderWeb.Create(nil);
try try
try
// Generate SQL query for a single order // Generate SQL query for a single order
//SQL := 'SELECT * FROM web_plate_orders w WHERE w.ORDER_ID = ' + orderID ; //SQL := 'SELECT * FROM web_plate_orders w WHERE w.ORDER_ID = ' + orderID ;
SQL := 'SELECT * FROM web_plate_orders w LEFT JOIN qb_sales_orders q ON w.ORDER_ID = q.ORDER_ID WHERE w.ORDER_ID = ' + orderID ; SQL := 'SELECT * FROM web_plate_orders w LEFT JOIN qb_sales_orders q ON w.ORDER_ID = q.ORDER_ID WHERE w.ORDER_ID = ' + orderID;
// Prepare the report with the query // Prepare the report with the query
Result := rptOrderWeb.PrepareReport(SQL); Result := rptOrderWeb.PrepareReport(SQL);
// Optionally log success // Optionally log success
Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID); Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID);
except
on E: Exception do
begin
Logger.Log(1, 'Error generating web PDF: ' + E.Message);
raise EXDataHttpException.Create(500, 'Error generating web PDF: ' + E.Message);
end;
end;
finally finally
rptOrderWeb.Free; rptOrderWeb.Free;
end; end;
...@@ -531,6 +567,7 @@ var ...@@ -531,6 +567,7 @@ var
begin begin
rptOrderCutting := TrptOrderCutting.Create(nil); rptOrderCutting := TrptOrderCutting.Create(nil);
try try
try
// Generate SQL query for a single order // Generate SQL query for a single order
SQL := 'SELECT * FROM cutting_die_orders WHERE ORDER_ID = ' + orderID; SQL := 'SELECT * FROM cutting_die_orders WHERE ORDER_ID = ' + orderID;
...@@ -539,12 +576,20 @@ begin ...@@ -539,12 +576,20 @@ begin
// Optionally log success // Optionally log success
Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID); Logger.Log(5, 'PDF Report successfully generated for order ID: ' + orderID);
except
on E: Exception do
begin
Logger.Log(1, 'Error generating cutting die PDF: ' + E.Message);
raise EXDataHttpException.Create(500, 'Error generating cutting die PDF: ' + E.Message);
end;
end;
finally finally
rptOrderCutting.Free; rptOrderCutting.Free;
end; end;
end; end;
function TLookupService.generateSubQuery(currStatus: string): string; function TLookupService.generateSubQuery(currStatus: string): string;
// Generates the subquery in order to retrieve all the status due/done dates // Generates the subquery in order to retrieve all the status due/done dates
// This must be a subquery because there are at most 5 different entries which // This must be a subquery because there are at most 5 different entries which
...@@ -817,13 +862,14 @@ var ...@@ -817,13 +862,14 @@ var
SQLQuery: TSQLQuery; SQLQuery: TSQLQuery;
begin begin
SQLQuery := generateOrdersSQL(searchOptions); SQLQuery := generateOrdersSQL(searchOptions);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(SQLQuery); // Added SQLQuery to ManagedObjects TXDataOperationContext.Current.Handler.ManagedObjects.Add(SQLQuery);
Result := TOrderList.Create; Result := TOrderList.Create;
try TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
Result.data := TList<TOrderItem>.Create; Result.data := TList<TOrderItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
try
SQL := SQLQuery.SQL; SQL := SQLQuery.SQL;
whereSQL := SQLQuery.whereSQL; whereSQL := SQLQuery.whereSQL;
...@@ -835,24 +881,27 @@ begin ...@@ -835,24 +881,27 @@ begin
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Order); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Order);
Result.data.Add(Order); Result.data.Add(Order);
Order.DBID := ordersDB.UniQuery1.FieldByName('ORDER_ID').AsString; with ordersDB.UniQuery1 do
Order.ID := ordersDB.UniQuery1.FieldByName('SHORT_NAME').AsString; begin
Order.companyName := ordersDB.UniQuery1.FieldByName('COMPANY_NAME').AsString; Order.DBID := FieldByName('ORDER_ID').AsString;
Order.jobName := ordersDB.UniQuery1.FieldByName('JOB_NAME').AsString; Order.ID := FieldByName('SHORT_NAME').AsString;
Order.orderDate := ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsString; Order.companyName := FieldByName('COMPANY_NAME').AsString;
Order.proofDue := ordersDB.UniQuery1.FieldByName('PROOF_DUE').AsString; Order.jobName := FieldByName('JOB_NAME').AsString;
Order.proofDone := ordersDB.UniQuery1.FieldByName('PROOF_DONE').AsString; Order.orderDate := FieldByName('ORDER_DATE').AsString;
Order.artDue := ordersDB.UniQuery1.FieldByName('ART_DUE').AsString; Order.proofDue := FieldByName('PROOF_DUE').AsString;
Order.artDone := ordersDB.UniQuery1.FieldByName('ART_DONE').AsString; Order.proofDone := FieldByName('PROOF_DONE').AsString;
Order.plateDue := ordersDB.UniQuery1.FieldByName('PLATE_DUE').AsString; Order.artDue := FieldByName('ART_DUE').AsString;
Order.plateDone := ordersDB.UniQuery1.FieldByName('PLATE_DONE').AsString; Order.artDone := FieldByName('ART_DONE').AsString;
Order.mountDue := ordersDB.UniQuery1.FieldByName('MOUNT_DUE').AsString; Order.plateDue := FieldByName('PLATE_DUE').AsString;
Order.mountDone := ordersDB.UniQuery1.FieldByName('MOUNT_DONE').AsString; Order.plateDone := FieldByName('PLATE_DONE').AsString;
Order.shipDue := ordersDB.UniQuery1.FieldByName('SHIP_DUE').AsString; Order.mountDue := FieldByName('MOUNT_DUE').AsString;
Order.shipDone := ordersDB.UniQuery1.FieldByName('SHIP_DONE').AsString; Order.mountDone := FieldByName('MOUNT_DONE').AsString;
Order.price := ordersDB.UniQuery1.FieldByName('PRICE').AsString; Order.shipDue := FieldByName('SHIP_DUE').AsString;
Order.qbRefNum := ordersDB.UniQuery1.FieldByName('QB_REF_NUM').AsString; Order.shipDone := FieldByName('SHIP_DONE').AsString;
Order.orderType := ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString.Replace('_', ' '); Order.price := FieldByName('PRICE').AsString;
Order.qbRefNum := FieldByName('QB_REF_NUM').AsString;
Order.orderType := FieldByName('ORDER_TYPE').AsString.Replace('_', ' ');
end;
if ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString = 'web_plate' then if ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString = 'web_plate' then
begin begin
...@@ -877,10 +926,14 @@ begin ...@@ -877,10 +926,14 @@ begin
SQL := 'SELECT COUNT(*) AS total_count ' + whereSQL; SQL := 'SELECT COUNT(*) AS total_count ' + whereSQL;
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except except
Result.Free; // Cleaned up memory in case of exceptions on E: Exception do
begin
Logger.Log(2, 'Error in GetOrders: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve order list: ' + E.Message);
end;
end; end;
end; end;
...@@ -897,6 +950,7 @@ var ...@@ -897,6 +950,7 @@ var
ADDRESS: TAddressItem; ADDRESS: TAddressItem;
begin begin
orderID := orderInfo; orderID := orderInfo;
try
SQL := 'select ORDER_TYPE from orders where ORDER_ID = ' + quotedStr(orderID); SQL := 'select ORDER_TYPE from orders where ORDER_ID = ' + quotedStr(orderID);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
orderType := ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString; orderType := ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString;
...@@ -1087,8 +1141,16 @@ begin ...@@ -1087,8 +1141,16 @@ begin
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
result.ITEMS := GetItems(''); result.ITEMS := GetItems('');
except
on E: Exception do
begin
Logger.Log(2, 'Error in GetOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve order: ' + E.Message);
end;
end;
end; end;
function TLookupService.GetWebOrder(orderInfo: string): TWebOrder; function TLookupService.GetWebOrder(orderInfo: string): TWebOrder;
var var
orderType: string; orderType: string;
...@@ -1096,6 +1158,7 @@ var ...@@ -1096,6 +1158,7 @@ var
SQL: string; SQL: string;
ADDRESS: TAddressItem; ADDRESS: TAddressItem;
begin begin
try
orderID := orderInfo; orderID := orderInfo;
SQL := 'select * from web_plate_orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID where ORDER_ID = ' + quotedStr(orderID); SQL := 'select * from web_plate_orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID where ORDER_ID = ' + quotedStr(orderID);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
...@@ -1199,7 +1262,6 @@ begin ...@@ -1199,7 +1262,6 @@ begin
result.upc_distortion_percent := ordersDB.UniQuery1.FieldByName('upc_distortion_percent').AsString; result.upc_distortion_percent := ordersDB.UniQuery1.FieldByName('upc_distortion_percent').AsString;
result.upc_distortion_amount := ordersDB.UniQuery1.FieldByName('upc_distortion_amount').AsString; result.upc_distortion_amount := ordersDB.UniQuery1.FieldByName('upc_distortion_amount').AsString;
// General // General
result.general_comments := ordersDB.UniQuery1.FieldByName('general_comments').AsString; result.general_comments := ordersDB.UniQuery1.FieldByName('general_comments').AsString;
...@@ -1208,7 +1270,7 @@ begin ...@@ -1208,7 +1270,7 @@ begin
SQL := 'SELECT s.ship_block FROM customers c JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + IntToStr(result.COMPANY_ID); SQL := 'SELECT s.ship_block FROM customers c JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + IntToStr(result.COMPANY_ID);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
result.ADDRESS_LIST := TList<TAddressItem>.Create; result.ADDRESS_LIST := TList<TAddressItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.ADDRESS_LIST ); TXDataOperationContext.Current.Handler.ManagedObjects.Add( result.ADDRESS_LIST );
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
...@@ -1222,10 +1284,16 @@ begin ...@@ -1222,10 +1284,16 @@ begin
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
result.ITEMS := GetItems(''); result.ITEMS := GetItems('');
except
on E: Exception do
begin
Logger.Log(2, 'Error in GetWebOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve web order: ' + E.Message);
end;
end;
end; end;
function TLookupService.GetCuttingDieOrder(orderInfo: string): TCuttingDie; function TLookupService.GetCuttingDieOrder(orderInfo: string): TCuttingDie;
var var
orderType: string; orderType: string;
...@@ -1233,6 +1301,7 @@ var ...@@ -1233,6 +1301,7 @@ var
SQL: string; SQL: string;
ADDRESS: TAddressItem; ADDRESS: TAddressItem;
begin begin
try
orderID := orderInfo; orderID := orderInfo;
SQL := 'select * from cutting_die_orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID where ORDER_ID = ' + quotedStr(orderID); SQL := 'select * from cutting_die_orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID where ORDER_ID = ' + quotedStr(orderID);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
...@@ -1265,7 +1334,7 @@ begin ...@@ -1265,7 +1334,7 @@ begin
SQL := 'SELECT s.ship_block FROM customers c JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + IntToStr(result.COMPANY_ID); SQL := 'SELECT s.ship_block FROM customers c JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + IntToStr(result.COMPANY_ID);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
result.ADDRESS_LIST := TList<TAddressItem>.Create; result.ADDRESS_LIST := TList<TAddressItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.ADDRESS_LIST ); TXDataOperationContext.Current.Handler.ManagedObjects.Add( result.ADDRESS_LIST );
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
...@@ -1279,10 +1348,17 @@ begin ...@@ -1279,10 +1348,17 @@ begin
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
result.ITEMS := GetItems(''); result.ITEMS := GetItems('');
except
on E: Exception do
begin
raise EXDataHttpException.Create(500, 'Could not retrieve cutting die order: ' + E.Message);
end;
end;
end; end;
function TLookupService.GetItems(searchOptions: string): TItemList; function TLookupService.GetItems(searchOptions: string): TItemList;
// retrueves all the quickbooks items for the items page on client. // retrieves all the quickbooks items for the items page on client.
// searchOptions: probably not needed but adds limits to the page to prevent // searchOptions: probably not needed but adds limits to the page to prevent
// table on client side from getting too long. This table currently has about 27 // table on client side from getting too long. This table currently has about 27
// entries so probably not needed. // entries so probably not needed.
...@@ -1296,6 +1372,7 @@ var ...@@ -1296,6 +1372,7 @@ var
SQL: string; SQL: string;
item: TItemItem; item: TItemItem;
begin begin
try
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions // parse the searchOptions
...@@ -1310,13 +1387,11 @@ begin ...@@ -1310,13 +1387,11 @@ begin
PageSize := StrToInt(params.Values['pagesize']); PageSize := StrToInt(params.Values['pagesize']);
OrderBy := params.Values['orderby']; OrderBy := params.Values['orderby'];
limit := IntToStr(PageSize); limit := IntToStr(PageSize);
offset := IntToStr((PageNum - 1) * PageSize); offset := IntToStr((PageNum - 1) * PageSize);
SQL := SQL + ' limit ' + limit + ' offset ' + offset; SQL := SQL + ' limit ' + limit + ' offset ' + offset;
end; end;
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result:= TItemList.Create; Result:= TItemList.Create;
...@@ -1340,6 +1415,13 @@ begin ...@@ -1340,6 +1415,13 @@ begin
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except
on E: Exception do
begin
Logger.Log(2, 'Error in GetItems: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve item list: ' + E.Message);
end;
end;
end; end;
function TLookupService.GetUsers(searchOptions: string): TUserList; function TLookupService.GetUsers(searchOptions: string): TUserList;
...@@ -1350,21 +1432,22 @@ var ...@@ -1350,21 +1432,22 @@ var
SQL: string; SQL: string;
user: TUserItem; user: TUserItem;
begin begin
try
if searchOptions = '' then if searchOptions = '' then
SQL := 'select * from users order by NAME ASC' SQL := 'select * from users order by NAME ASC'
else else
SQL := 'select * from users where username=' + quotedStr(searchOptions); SQL := 'select * from users where username=' + quotedStr(searchOptions);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result:= TUserList.Create; Result := TUserList.Create;
Result.data := TList<TUserItem>.Create; Result.data := TList<TUserItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data ); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
user := TUserItem.Create; user := TUserItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( user ); TXDataOperationContext.Current.Handler.ManagedObjects.Add(user);
Result.data.Add( user ); Result.data.Add(user);
user.userID := ordersDB.UniQuery1.FieldByName('USER_ID').AsString; user.userID := ordersDB.UniQuery1.FieldByName('USER_ID').AsString;
user.username := ordersDB.UniQuery1.FieldByName('USER_NAME').AsString; user.username := ordersDB.UniQuery1.FieldByName('USER_NAME').AsString;
user.password := ordersDB.UniQuery1.FieldByName('PASSWORD').AsString; user.password := ordersDB.UniQuery1.FieldByName('PASSWORD').AsString;
...@@ -1378,10 +1461,17 @@ begin ...@@ -1378,10 +1461,17 @@ begin
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
SQL:= 'select count(*) as total_count from users';
SQL := 'select count(*) as total_count from users';
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except
on E: Exception do
begin
raise EXDataHttpException.Create(500, 'Unable to retrieve users: ' + E.Message);
end;
end;
end; end;
function TLookupService.EditUser(const editOptions: string): string; function TLookupService.EditUser(const editOptions: string): string;
...@@ -1467,7 +1557,7 @@ begin ...@@ -1467,7 +1557,7 @@ begin
end;} end;}
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
Result := 'Success:Edit Successful'; Result := 'Success: Edit Successful';
end; end;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
end; end;
...@@ -1789,13 +1879,11 @@ begin ...@@ -1789,13 +1879,11 @@ begin
OrdersDB.UniQuery1.FieldByName(StatusField).AsString := Date; OrdersDB.UniQuery1.FieldByName(StatusField).AsString := Date;
OrdersDB.UniQuery1.Post; OrdersDB.UniQuery1.Post;
finally finally
order.Free; order.Free;
end; end;
end; end;
result := 'success'; result := 'success';
except except
on E: Exception do on E: Exception do
...@@ -1804,7 +1892,7 @@ begin ...@@ -1804,7 +1892,7 @@ begin
end; end;
function TLookupService.AddUser(userInfo:string): string; function TLookupService.AddUser(userInfo: string): string;
// Adds a user to the database // Adds a user to the database
// userInfo - user information being added // userInfo - user information being added
var var
...@@ -1823,6 +1911,7 @@ var ...@@ -1823,6 +1911,7 @@ var
hashPW: string; hashPW: string;
params: TStringList; params: TStringList;
begin begin
try
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions // parse the searchOptions
...@@ -1871,8 +1960,13 @@ begin ...@@ -1871,8 +1960,13 @@ begin
end end
else else
Result := 'Failure:Username already taken'; Result := 'Failure:Username already taken';
except
on E: Exception do
raise EXDataHttpException.Create(500, 'AddUser failed: ' + E.Message);
end;
end; end;
function TLookupService.AddItem(itemInfo: string): string; function TLookupService.AddItem(itemInfo: string): string;
// Adds an item to the database // Adds an item to the database
// itemInfo: item info to add to database // itemInfo: item info to add to database
...@@ -1883,6 +1977,7 @@ var ...@@ -1883,6 +1977,7 @@ var
Status: boolean; Status: boolean;
SQL: string; SQL: string;
begin begin
try
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions // parse the searchOptions
...@@ -1912,8 +2007,13 @@ begin ...@@ -1912,8 +2007,13 @@ begin
end end
else else
Result := 'Failure: Item already exists'; Result := 'Failure: Item already exists';
except
on E: Exception do
raise EXDataHttpException.Create(500, 'AddItem failed: ' + E.Message);
end;
end; end;
function TLookupService.DelUser(username: string): string; function TLookupService.DelUser(username: string): string;
// deletes a user. not currently implemented definitely needs touching up to avoid // deletes a user. not currently implemented definitely needs touching up to avoid
// deleting users prematurely. // deleting users prematurely.
...@@ -1939,7 +2039,6 @@ begin ...@@ -1939,7 +2039,6 @@ begin
end; end;
end; end;
function TLookupService.AddWebOrder(orderInfo: string): TJSONObject; function TLookupService.AddWebOrder(orderInfo: string): TJSONObject;
// Adds corrugated order to the database. This process is done in 3 different // Adds corrugated order to the database. This process is done in 3 different
// tables so if any changes are made make sure to check orders, corrugated_plate_orders // tables so if any changes are made make sure to check orders, corrugated_plate_orders
...@@ -1980,8 +2079,10 @@ begin ...@@ -1980,8 +2079,10 @@ begin
ORDER_ID := JSONData.GetValue<integer>('ORDER_ID'); ORDER_ID := JSONData.GetValue<integer>('ORDER_ID');
SQL := 'select * from web_plate_orders where ORDER_ID = ' + IntToStr(ORDER_ID); SQL := 'select * from web_plate_orders where ORDER_ID = ' + IntToStr(ORDER_ID);
end; end;
doQuery(ordersDB.UniQuery1, SQL);
try try
doQuery(ordersDB.UniQuery1, SQL);
if mode = 'ADD' then if mode = 'ADD' then
ordersDB.UniQuery1.Insert ordersDB.UniQuery1.Insert
else else
...@@ -2032,11 +2133,13 @@ begin ...@@ -2032,11 +2133,13 @@ begin
except except
on E: Exception do on E: Exception do
begin begin
Result := TJSONObject.Create.AddPair('error', E.Message); Logger.Log(2, 'Error in AddWebOrder: ' + E.Message);
end raise EXDataHttpException.Create(500, 'Unable to add or edit web order: ' + E.Message);
end;
end; end;
end; end;
function TLookupService.AddCuttingDieOrder(orderInfo: string): TJSONObject; function TLookupService.AddCuttingDieOrder(orderInfo: string): TJSONObject;
var var
JSONData, ResponseData: TJSONObject; JSONData, ResponseData: TJSONObject;
...@@ -2121,11 +2224,13 @@ begin ...@@ -2121,11 +2224,13 @@ begin
except except
on E: Exception do on E: Exception do
begin begin
Result := TJSONObject.Create.AddPair('error', E.Message); Logger.Log(2, 'Error in AddCuttingDieOrder: ' + E.Message);
end raise EXDataHttpException.Create(500, 'Unable to add cutting die order: ' + E.Message);
end;
end; end;
end; end;
function TLookupService.delOrder(OrderID, orderType, UserID: string): TJSONObject; function TLookupService.delOrder(OrderID, orderType, UserID: string): TJSONObject;
var var
table: string; table: string;
...@@ -2146,6 +2251,7 @@ var ...@@ -2146,6 +2251,7 @@ var
JSONObject: TJSONObject; JSONObject: TJSONObject;
DataObject: TJSONObject; DataObject: TJSONObject;
begin begin
try
if orderType = 'corrugated' then if orderType = 'corrugated' then
begin begin
table := 'corrugated_plate_orders'; table := 'corrugated_plate_orders';
...@@ -2253,8 +2359,16 @@ begin ...@@ -2253,8 +2359,16 @@ begin
sql := 'delete from orders where ORDER_ID = ' + OrderID; sql := 'delete from orders where ORDER_ID = ' + OrderID;
OrdersDB.UniQuery1.SQL.Text := SQL; OrdersDB.UniQuery1.SQL.Text := SQL;
OrdersDB.UniQuery1.ExecSQL; OrdersDB.UniQuery1.ExecSQL;
except
on E: Exception do
begin
Logger.Log(2, 'Error in delOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to delete order: ' + E.Message);
end;
end;
end; end;
procedure TLookupService.AddToRevisionsTable(OrderID: string; table: string; order: TJSONObject); procedure TLookupService.AddToRevisionsTable(OrderID: string; table: string; order: TJSONObject);
var var
SQL, UserID: string; SQL, UserID: string;
...@@ -2309,7 +2423,6 @@ begin ...@@ -2309,7 +2423,6 @@ begin
ordersDB.UniQuery1.FieldByName('REVISION_USER_ID').AsString := order.GetValue<string>('USER_ID'); ordersDB.UniQuery1.FieldByName('REVISION_USER_ID').AsString := order.GetValue<string>('USER_ID');
// Post the record to the database // Post the record to the database
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
end; end;
function TLookupService.getQBCustomers: TJSONArray; function TLookupService.getQBCustomers: TJSONArray;
...@@ -2336,6 +2449,7 @@ begin ...@@ -2336,6 +2449,7 @@ begin
restResponse := TRESTResponse.Create(nil); restResponse := TRESTResponse.Create(nil);
try try
try
restRequest.Client := restClient; restRequest.Client := restClient;
restRequest.Response := restResponse; restRequest.Response := restResponse;
...@@ -2380,7 +2494,6 @@ begin ...@@ -2380,7 +2494,6 @@ begin
for I := 0 to CustomerList.Count - 1 do for I := 0 to CustomerList.Count - 1 do
begin begin
Customer := CustomerList.Items[I] as TJSONObject; Customer := CustomerList.Items[I] as TJSONObject;
ParsedCustomer := TJSONObject.Create; ParsedCustomer := TJSONObject.Create;
...@@ -2389,11 +2502,9 @@ begin ...@@ -2389,11 +2502,9 @@ begin
try try
ParsedCustomer.AddPair('In KGOrders', not(ordersDB.UniQuery1.IsEmpty)); ParsedCustomer.AddPair('In KGOrders', not(ordersDB.UniQuery1.IsEmpty));
ParsedCustomer.AddPair('Id', Customer.GetValue<string>('Id')); ParsedCustomer.AddPair('Id', Customer.GetValue<string>('Id'));
ParsedCustomer.AddPair('CompanyName', Customer.GetValue<string>('DisplayName')); ParsedCustomer.AddPair('CompanyName', Customer.GetValue<string>('DisplayName'));
// Handle Bill Address // Handle Bill Address
if Customer.GetValue('BillAddr') is TJSONObject then if Customer.GetValue('BillAddr') is TJSONObject then
begin begin
...@@ -2438,7 +2549,13 @@ begin ...@@ -2438,7 +2549,13 @@ begin
raise; raise;
end; end;
end; end;
except
on E: Exception do
begin
Logger.Log(2, 'Error in getQBCustomers: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve QuickBooks customers: ' + E.Message);
end;
end;
finally finally
iniFile.Free; iniFile.Free;
restClient.Free; restClient.Free;
...@@ -2447,6 +2564,7 @@ begin ...@@ -2447,6 +2564,7 @@ begin
end; end;
end; end;
procedure TLookupService.AddAddrBlock(prefix: string; AddrJSON: TJSONObject); procedure TLookupService.AddAddrBlock(prefix: string; AddrJSON: TJSONObject);
begin begin
//TODO //TODO
......
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
MemoLogLevel=3 MemoLogLevel=3
FileLogLevel=5 FileLogLevel=5
webClientVersion=0.9.4 webClientVersion=0.9.4
LogFileNum=701 LogFileNum=719
[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
...@@ -17,6 +17,6 @@ Password=emsys01 ...@@ -17,6 +17,6 @@ Password=emsys01
CompanyID=9341454272655710 CompanyID=9341454272655710
ClientID=ABgO14uvjh8XqLud7spQ8lkb98AUpcdA7HbyMJfCAtl65sQ5yy ClientID=ABgO14uvjh8XqLud7spQ8lkb98AUpcdA7HbyMJfCAtl65sQ5yy
ClientSecret=bQ06TRemHeAGFzVHRaTUvUoBU9jpU9itK6MOMgqN ClientSecret=bQ06TRemHeAGFzVHRaTUvUoBU9jpU9itK6MOMgqN
RefreshToken=RT1-60-H0-1758811104981v5rmhboxz6ul6wqho RefreshToken=RT1-7-H0-1758919884sgbdvdaawcewm26l9f9k
AccessToken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwieC5vcmciOiJIMCJ9..KXZ2aHmt3JzwsJaoKRo_BA.GUVXmUIAgHt28CVuT1CDpBWLVxzhkpXwoUhIxfUvWlSzzc5HBrtOUd7GRQtij2NciITS4W_Gsyc5J_SLNjayFfrTPuZDfFFTmfnfkCOEvzw_dWgXLshTSFX9kkLdHH7IMIuRwNsvH907ECdWMazzY0r0wuGWcU4c1EphwYXqAeorH43ONIBtl0JTbiNtCUVdptn5UCF2VgN74bO3MbfSTtQIN8lKFJgGAKsnXolpK71D4OYS2-YW9dH8XFL1K8FD5fauNWb-pn4MxwQ1Y_vOEIB_bF26IM7Pdh7uG-mQSO-ljhXWTEqYmWjK-Z9P_Igznwcqy6RIhtEu216dGpF43JIuGgHxta_yRJLGYsdWjnQbIqW6VvZ4x8jwuLGX0cCu2mKcxkjgghABol6D34lWQcov3Q32oa5ZlIkTzolOxTnlYZ-hhtQBcY-X08CfnPJ3y2Yq4FKAFiu7wBRQ5V0l1RzyPHCkGDJKNNv-yY5aTpRkPwsjdko9xgIAB4gWSyGV-PKoSURNu5jodxQkAcMMIh59y7QuKM5WytAfAtpklGfqEj-vn-d2cWY9-zWfmw0D1KVakH0da5xxdnqr5qO4a1w_b2RT6zVfNvfJRApSlMpes1DZ6Bo_K0yo5rxzUpg0.kkYUlFG-TCl21bRQWpVMaA AccessToken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwieC5vcmciOiJIMCJ9..OvT3ztJMwwJz7VSYEwhdBg.9iJ-2Gigq5PPVxIDTNVmIyQJOXn0UBlrFYXov83TIjLu8KvS7E4s4FSlgIc11AG-jYWu4fWHwFVwRIqeOPqEtzSrMk_hAGc07jotA9mi6MD8UpAWl_1Y1fPKuBYSe9X_00DlhCclLIMP04fn77iU71DdxC0MweciovuHDK3Gy-X26DDR_yueejvjPoHsEwhMSVshbmElgaNe2dOqtDPIuwre22piNPST7ws9o6v0wuq3juYEtW1h7qZM-S-c5yZgG25RzzFG0mShbzdfnpHimhW2n6-IGr7-ESveMOfeMHuW5M0q-QGK0IuMLIqTrRKyDl_3LXOHZSQWuAuvFpLE_EXcuRrm1JXgl43nh5U2y0MzG6JnN2pQhY_tjKdvNZmvj2XCHLKOmifLUanOhWq20bg__aZLM69iJC3VBlZeKvhqZMgNeAffle3yOX6d5cVNHCmGoZnqMXUebPzKqp-dgvoDx7qaa780Tozh2l32DDFmAStTgIYtuUxI9y5g18SnD9en2RcrUIksSEyOUMZrbfyEcN3zA0DSw6K6sqhcFAW_rMFoUqZK2sV0rZYGwmOpCN82ka_8uXke28fInem7aXpxaqOQOuxFEbBUpZxS-oTJ879-LtRs6gE8OzrwjIgF.sqyNz-sm9cjo343x7HnRvw
LastRefresh=6/16/2025 10:38:38 AM LastRefresh=6/17/2025 4:51:25 PM
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