Commit 42f8e3e6 by Cam Hayes

Merge remote-tracking branch 'origin/mac3' into cam3

parents 284ccb7b facf79ff
......@@ -9,6 +9,7 @@ procedure ShowStatusMessage(const AMessage, AClass: string; const AElementId: st
procedure HideStatusMessage(const AElementId: string);
procedure ShowSpinner(SpinnerID: string);
procedure HideSpinner(SpinnerID: string);
procedure ShowErrorModal(const msg: string);
function CalculateAge(DateOfBirth: TDateTime): Integer;
function FormatPhoneNumber(PhoneNumber: string): string;
procedure ApplyReportTitle(CurrentReportType: string);
......@@ -82,6 +83,39 @@ begin
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;
var
......
......@@ -125,39 +125,32 @@ begin
if PageNumber > 0 then
begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomers', [searchOptions]));
customerList := TJSObject(xdcResponse.Result);
// Load data into the dataset
xdwdsCustomers.Close;
xdwdsCustomers.SetJsonData(customerList['data']);
xdwdsCustomers.Open;
Utils.HideSpinner('spinner');
customerListLength := integer(customerList['count']);
TotalPages := ( (customerListLength + PageSize - 1) div PageSize);
if customerListLength = 0 then
begin
lblEntries.Caption := 'No entries found';
end
lblEntries.Caption := 'No entries found'
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) +
' - ' + IntToStr(customerListLength) +
' of ' + IntToStr(customerListLength);
end
else if (PageNumber * PageSize) >= customerListLength then
begin
' of ' + IntToStr(customerListLength)
else
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(customerListLength) +
' of ' + IntToStr(customerListLength);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve customers: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
end;
......
......@@ -103,7 +103,7 @@ begin
Utils.ShowSpinner('spinner');
end;
function TFViewEditUser.AddUser(): string;
function TFViewEditUser.AddUser: string;
// Sends UserInfo over to the server so it can be added to the database
var
userInfo: string;
......@@ -120,12 +120,17 @@ begin
'&rights=' + edtRights.Text +
'&QB=' + edtQB.Text;
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddUser',
[userInfo]));
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddUser', [userInfo]));
responseString := TJSObject(xdcResponse.Result);
Info := string(responseString['value']);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not add user: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFViewEditUser.HideNotification;
begin
pnlMessage.ElementHandle.hidden := True;
......
......@@ -48,7 +48,6 @@ object FViewItems: TFViewItems
Height = 25
Caption = 'Add'
ChildOrder = 7
ElementClassName = 'btn btn-light'
ElementID = 'btnadd'
ElementFont = efCSS
HeightStyle = ssAuto
......@@ -110,6 +109,7 @@ object FViewItems: TFViewItems
ElementPosition = epRelative
Role = 'null'
TabOrder = 5
Visible = False
object lblMessage: TWebLabel
Left = 28
Top = 9
......@@ -148,7 +148,6 @@ object FViewItems: TFViewItems
Height = 25
Caption = 'Save'
ChildOrder = 79
ElementClassName = 'btn btn-light'
ElementID = 'btnconfirm'
ElementFont = efCSS
ElementPosition = epRelative
......@@ -160,12 +159,11 @@ object FViewItems: TFViewItems
end
object btnCancel: TWebButton
Left = 565
Top = 259
Top = 256
Width = 96
Height = 25
Caption = 'Cancel'
ChildOrder = 79
ElementClassName = 'btn btn-light'
ElementID = 'btncancel'
ElementFont = efCSS
ElementPosition = epRelative
......@@ -182,7 +180,6 @@ object FViewItems: TFViewItems
Height = 25
Caption = 'Delete'
ChildOrder = 79
ElementClassName = 'btn btn-light'
ElementID = 'btndelete'
ElementFont = efCSS
HeightStyle = ssAuto
......@@ -197,7 +194,6 @@ object FViewItems: TFViewItems
Height = 25
Caption = 'Edit'
ChildOrder = 83
ElementClassName = 'btn btn-light'
ElementID = 'btnedit'
ElementFont = efCSS
HeightStyle = ssAuto
......
......@@ -62,7 +62,7 @@
</div>
</form>
<table class="table table-responsive table-striped table-bordered" id="tblPhoneGrid">
<table class="table table-responsive table-striped table-hover table-bordered" id="tblPhoneGrid">
<thead class="thead-dark">
<tr>
<th scope="col">ID</th>
......
......@@ -2,7 +2,7 @@
// to sort the entries, filter their search, and search for a specific person.
// Authors:
// Cameron Hayes
// Mac ...
// Mac Stephens
unit View.Items;
......@@ -115,46 +115,74 @@ begin
cbStatus.enabled := true;
end;
procedure TFViewItems.AddRowToTable(ID, Name, Description, Status: string);
// Adds rows to the table
// ID: item ID
// Name: item name
// Description: item description
// Status: inactive or active
// Adds one row to #tblPhoneGrid and lets Bootstrap 5.3 highlight the row
// with its built-in `table-active` class when the user clicks it.
var
NewRow, Cell, P, Button, Audio: TJSHTMLElement;
NewRow, Cell: TJSHTMLElement;
begin
NewRow := TJSHTMLElement(document.createElement('tr'));
// Item ID Cell
// Row-select click handler
NewRow.addEventListener('click',
procedure(Event: TJSMouseEvent)
var
TBody : TJSHTMLElement;
Rows : TJSHTMLCollection;
I : Integer;
RowElem : TJSHTMLElement;
begin
// Grab the <tbody> once and cast it
TBody := TJSHTMLElement(
(document.getElementById('tblPhoneGrid') as TJSHTMLElement)
.getElementsByTagName('tbody')[0]
);
// Remove 'table-active' from every existing row
Rows := TBody.children;
for I := 0 to Rows.length - 1 do
begin
RowElem := TJSHTMLElement(Rows.item(I)); // ? cast Node ? HTMLElement
RowElem.classList.remove('table-primary');
end;
// Add highlight to the clicked row
TJSHTMLElement(Event.currentTarget).classList.add('table-primary');
end
);
Cell := TJSHTMLElement(document.createElement('td'));
Cell.setAttribute('data-label', 'Item ID');
Cell.innerText := ID;
NewRow.appendChild(Cell);
// Name Cell
Cell := TJSHTMLElement(document.createElement('td'));
Cell.setAttribute('data-label', 'Name');
Cell.innerText := Name;
NewRow.appendChild(Cell);
// Description Cell
Cell := TJSHTMLElement(document.createElement('td'));
Cell.setAttribute('data-label', 'Description');
Cell.innerText := Description;
NewRow.appendChild(Cell);
// Status Cell
Cell := TJSHTMLElement(document.createElement('td'));
Cell.setAttribute('data-label', 'Status');
Cell.innerText := Status;
NewRow.appendChild(Cell);
// Appends new rows to the table body
TJSHTMLElement(document.getElementById('tblPhoneGrid').getElementsByTagName('tbody')[0]).appendChild(NewRow);
TJSHTMLElement(
(document.getElementById('tblPhoneGrid') as TJSHTMLElement)
.getElementsByTagName('tbody')[0]
).appendChild(NewRow);
Utils.HideSpinner('spinner');
end;
procedure TFViewItems.GeneratePagination(TotalPages: Integer);
// Generates pagination for the table.
// TotalPages: Total amount of pages generated by the search
......@@ -339,13 +367,13 @@ begin
if PageNumber > 0 then
begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetItems',
[searchOptions]));
itemList := TJSObject(xdcResponse.Result);
data := TJSArray(itemList['data']);
itemListLength := integer(itemList['count']);
ClearTable();
Utils.HideSpinner('Spinner');
for i := 0 to data.Length - 1 do
begin
item := TJSObject(data[i]);
......@@ -366,6 +394,11 @@ begin
' of ' + IntToStr(itemListLength);
end;
GeneratePagination(TotalPages);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve items: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
end;
......@@ -466,11 +499,16 @@ procedure TFViewItems.AddItem(itemOptions: string);
var
xdcResponse: TXDataClientResponse;
begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddItem',
[itemOptions]));
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddItem', [itemOptions]));
getItems(GenerateSearchOptions());
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not add item: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFViewItems.wcbPageSizeChange(Sender: TObject);
// gets a new amount of items based when the page size is changed
begin
......
......@@ -69,6 +69,27 @@
</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
FChildForm := TFViewUsers.CreateForm(WebPanel1.ElementID, Info);
end;
end.
......@@ -553,7 +553,7 @@ var
searchOptions, pdfURL: string;
jsObject: TJSObject;
begin
try
// Call the server method to generate the PDF
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCorrugatedPDF', [orderID]));
jsObject := JS.TJSObject(xdcResponse.Result);
......@@ -562,8 +562,13 @@ begin
// Open the PDF in a new browser tab without needing a different form
// This method is much faster too, even for large datasets
window.open(pdfURL, '_blank');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate corrugated PDF: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFOrderEntryCorrugated.AddCorrugatedOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server
var
......@@ -585,10 +590,16 @@ procedure TFOrderEntryCorrugated.DelOrder();
var
Response: TXDataClientResponse;
begin
try
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.DelOrder',
[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;
class function TFOrderEntryCorrugated.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var
localMode: string;
......@@ -606,7 +617,6 @@ begin
end;
end
);
end;
procedure TFOrderEntryCorrugated.addColorRow(num: string; Color: string; LPI: string; Size: string);
......@@ -821,8 +831,8 @@ var
colorListJSON: TJSONArray;
items: TJSObject;
begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrder',
[Order_ID]));
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrder', [Order_ID]));
order := TJSObject(xdcResponse.Result);
data := TJSArray(order['data']);
XDataWebDataSet1.Close;
......@@ -953,7 +963,10 @@ begin
items := TJSObject(order['ITEMS']);
xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFOrderEntryCorrugated.getCustomer(customerID: string);
......@@ -964,8 +977,8 @@ var
address: string;
items: TJSObject;
begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomer',
[customerID]));
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomer', [customerID]));
customer := TJSObject(xdcResponse.Result);
XDataWebDataSet1.Close;
XDataWebDataSet1.SetJsonData(customer);
......@@ -989,6 +1002,10 @@ begin
dtpMountDue.Date := 0;
dtpShipDate.Date := 0;
dtpApprovedDate.Date := 0;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve customer: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFOrderEntryCorrugated.WebFormShow(Sender: TObject);
......
......@@ -394,7 +394,7 @@ var
searchOptions, pdfURL: string;
jsObject: TJSObject;
begin
try
// Call the server method to generate the PDF
console.log(orderID);
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderCuttingPDF', [orderID]));
......@@ -404,22 +404,33 @@ begin
// Open the PDF in a new browser tab without needing a different form
// This method is much faster too, even for large datasets
window.open(pdfURL, '_blank');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate cutting die PDF: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFOrderEntryCuttingDie.AddCuttingDieOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server
var
Response: TXDataClientResponse;
jsObj: TJSObject;
begin
try
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddCuttingDieOrder',
[orderJSON.ToString]));
jsObj := JS.TJSObject(Response.Result);
if mode = 'ADD' then
OrderID := String(jsObj.Properties['OrderID']);
mode := 'EDIT';
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not save cutting die order: ' + E.ErrorResult.ErrorMessage);
end;
end;
class function TFOrderEntryCuttingDie.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var
localMode: string;
......@@ -438,7 +449,6 @@ begin
end;
end
);
end;
procedure TFOrderEntryCuttingDie.btnAddClick(Sender: TObject);
......@@ -513,6 +523,8 @@ var
data: TJSArray;
order, items: TJSObject;
begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCuttingDieOrder',
[Order_ID]));
order := TJSObject(xdcResponse.Result);
......@@ -522,7 +534,6 @@ begin
XDataWebDataSet1.Open;
// Check boxes and dates need to be manually set
if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then
dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value)
else
......@@ -555,8 +566,14 @@ begin
xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
procedure TFOrderEntryCuttingDie.getCustomer(customerID: string);
// gets a customer from the database then loads the appropiate fields
var
......
......@@ -593,7 +593,7 @@ var
searchOptions, pdfURL: string;
jsObject: TJSObject;
begin
try
// Call the server method to generate the PDF
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GenerateOrderWebPDF', [orderID]));
jsObject := JS.TJSObject(xdcResponse.Result);
......@@ -602,23 +602,33 @@ begin
// Open the PDF in a new browser tab without needing a different form
// This method is much faster too, even for large datasets
window.open(pdfURL, '_blank');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate web order PDF: ' + E.ErrorResult.ErrorMessage);
end;
end;
procedure TFOrderEntryWeb.AddWebOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server
var
Response: TXDataClientResponse;
jsObj: TJSObject;
begin
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddWebOrder',
[orderJSON.ToString]));
try
Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddWebOrder', [orderJSON.ToString]));
jsObj := JS.TJSObject(Response.Result);
if mode = 'ADD' then
OrderID := String(jsObj.Properties['OrderID']);
console.log(OrderID);
mode := 'EDIT';
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not save web order: ' + E.ErrorResult.ErrorMessage);
end;
end;
class function TFOrderEntryWeb.CreateForm(AElementID, orderInfo, customerInfo, mode, info: string): TWebForm;
var
localMode: string;
......@@ -784,6 +794,8 @@ var
colorListJSON: TJSONArray;
items: TJSObject;
begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetWebOrder',
[Order_ID]));
order := TJSObject(xdcResponse.Result);
......@@ -791,6 +803,7 @@ begin
XDataWebDataSet1.Close;
XDataWebDataSet1.SetJsonData(order);
XDataWebDataSet1.Open;
if XDataWebDataSet1quantity_and_colors_qty_colors.Value <> '' then
begin
colorObject := TJSObject(TJSJSON.parse(XDataWebDataSet1quantity_and_colors_qty_colors.Value));
......@@ -803,7 +816,6 @@ begin
end;
// Dates need to be manually set
if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then
dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value)
else
......@@ -829,12 +841,10 @@ begin
dtpPDFDate1.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_1.Value)
else
dtpPDFDate1.Date := 0;
if not (XDataWebDataSet1proofing_pdf_date_2.AsString = '') then
dtpPDFDate2.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_2.Value)
else
dtpPDFDate2.Date := 0;
if not (XDataWebDataSet1proofing_pdf_date_3.AsString = '') then
dtpPDFDate3.Date := StrToDateTime(XDataWebDataSet1proofing_pdf_date_3.Value)
else
......@@ -844,12 +854,10 @@ begin
dtpInkJetDate1.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_1.Value)
else
dtpInkJetDate1.Date := 0;
if not (XDataWebDataSet1proofing_ink_jet_date_2.AsString = '') then
dtpInkJetDate2.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_2.Value)
else
dtpInkJetDate2.Date := 0;
if not (XDataWebDataSet1proofing_ink_jet_date_3.AsString = '') then
dtpInkJetDate3.Date := StrToDateTime(XDataWebDataSet1proofing_ink_jet_date_3.Value)
else
......@@ -859,18 +867,15 @@ begin
dtpColorContractDate1.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_1.Value)
else
dtpColorContractDate1.Date := 0;
if not (XDataWebDataSet1proofing_color_contrac_date_2.AsString = '') then
dtpColorContractDate2.Date := StrToDateTime(XDataWebDataSet1proofing_color_contrac_date_2.Value)
else
dtpColorContractDate2.Date := 0;
if not (XDataWebDataSet1proofing_digital_color_date_1.AsString = '') then
dtpDigitalColorDate.Date := StrToDateTime(XDataWebDataSet1proofing_digital_color_date_1.Value)
else
dtpDigitalColorDate.Date := 0;
if mode = 'EDIT' then
begin
CustomerID := XDataWebDataSet1COMPANY_ID.AsString;
......@@ -883,9 +888,15 @@ begin
items := TJSObject(order['ITEMS']);
xdwdsQBItem.SetJsonData(items['data']);
xdwdsQBITEM.Open;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve order: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
procedure TFOrderEntryWeb.getCustomer(customerID: string);
// gets a customer from the database then loads the appropiate fields
var
......
object FViewOrders: TFViewOrders
Width = 676
Height = 480
Caption = 'main.errorpanel'
CSSLibrary = cssBootstrap
ElementFont = efCSS
Font.Charset = DEFAULT_CHARSET
......
......@@ -13,7 +13,7 @@ uses
WEBLib.Forms, WEBLib.Dialogs, WEBLib.Menus, WEBLib.ExtCtrls, WEBLib.StdCtrls,
WEBLib.JSON, Auth.Service, XData.Web.Client, WebLib.Storage,
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;
type
......@@ -156,6 +156,8 @@ var
searchOptions, pdfURL: string;
jsObject: TJSObject;
begin
Utils.ShowSpinner('spinner');
try
searchOptions := edtSearch.Text;
// Call the server method to generate the PDF
......@@ -163,16 +165,16 @@ begin
jsObject := JS.TJSObject(xdcResponse.Result);
pdfURL := JS.toString(jsObject.Properties['value']);
// Open the PDF in a new browser tab without needing a different form
// This method is much faster too, even for large datasets
// Open the PDF in a new browser tab
window.open(pdfURL, '_blank');
begin
Utils.HideSpinner('Spinner');
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not generate report PDF: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
procedure TFViewOrders.WebButton1Click(Sender: TObject);
begin
if OrderID <> '' then
......@@ -651,57 +653,56 @@ begin
end);
PageItem.appendChild(PageLink);
PaginationElement.appendChild(PageItem);
end;
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
xdcResponse: TXDataClientResponse;
orderList: TJSObject;
orderListLength: integer;
TotalPages: integer;
orderListLength, TotalPages: Integer;
begin
Utils.ShowSpinner('spinner');
if PageNumber > 0 then
try
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync(
'ILookupService.GetOrders', [searchOptions]));
if Assigned(xdcResponse.Result) then
begin
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrders', [searchOptions]));
orderList := TJSObject(xdcResponse.Result);
// Load data into the dataset
xdwdsOrders.Close;
xdwdsOrders.SetJsonData(orderList['data']);
xdwdsOrders.Open;
orderListLength := integer(orderList['count']);
TotalPages := ( (orderListLength + PageSize - 1) div PageSize);
orderListLength := Integer(orderList['count']);
TotalPages := (orderListLength + PageSize - 1) div PageSize;
GeneratePagination(TotalPages);
// Update label
if orderListLength = 0 then
begin
lblEntries.Caption := 'No entries found';
end
lblEntries.Caption := 'No entries found'
else if (PageNumber * PageSize) < orderListLength then
begin
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(PageNumber * PageSize) +
' of ' + IntToStr(orderListLength);
end
else if (PageNumber * PageSize) >= orderListLength then
begin
lblEntries.Caption := 'Showing entries ' + IntToStr((PageNumber - 1) * PageSize + 1) +
' - ' + IntToStr(orderListLength) +
' of ' + IntToStr(orderListLength);
lblEntries.Caption := Format('Showing entries %d - %d of %d',
[(PageNumber - 1) * PageSize + 1, PageNumber * PageSize, orderListLength])
else
lblEntries.Caption := Format('Showing entries %d - %d of %d',
[(PageNumber - 1) * PageSize + 1, orderListLength, orderListLength]);
end;
// Optional: Continue using pagination if needed
GeneratePagination(TotalPages);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve orders: ' + E.ErrorResult.ErrorMessage);
end;
finally
Utils.HideSpinner('spinner');
end;
end;
procedure TFViewOrders.btnAddOrderClick(Sender: TObject);
begin
ShowAddOrderForm();
......
......@@ -97,21 +97,26 @@ var
customerList: TJSObject;
i: integer;
begin
try
// Fetch data from XData service
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.getQBCustomers', []));
customerList := TJSObject(xdcResponse.Result);
// Load data into TXDataWebDataset
xdwdsCustomers.Close;
xdwdsCustomers.SetJsonData(customerList);
xdwdsCustomers.Open;
// Manually populate the grid
PopulateGridManually;
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve QuickBooks customers: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
procedure TFSelectCustomer.PopulateGridManually;
// populates the grid with customers manually.
var
......
......@@ -6,7 +6,7 @@ uses
System.SysUtils, System.Classes, Web, WEBLib.Graphics, WEBLib.Forms, WEBLib.Dialogs,
Vcl.Controls, Vcl.StdCtrls, WEBLib.StdCtrls, WEBLib.Controls, WEBLib.Grids, WebLib.Lists,
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
TFViewUsers = class(TWebForm)
......@@ -330,10 +330,11 @@ var
data: TJSArray;
user: TJSObject;
userListLength: integer;
begin
if PageNumber > 0 then
begin
Utils.ShowSpinner('spinner');
try
xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetUsers',
[searchOptions]));
......@@ -368,6 +369,11 @@ begin
' of ' + IntToStr(userListLength);
end;
GeneratePagination(TotalPages);
except
on E: EXDataClientRequestException do
Utils.ShowErrorModal('Could not retrieve users: ' + E.ErrorResult.ErrorMessage);
end;
Utils.HideSpinner('spinner');
end;
end;
......
......@@ -5,7 +5,7 @@
<FrameworkType>VCL</FrameworkType>
<MainSource>webKGOrders.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
......@@ -208,7 +208,6 @@
<DCCReference Include="Utils.pas"/>
<DCCReference Include="View.AddItem.pas">
<Form>fViewAddItem</Form>
<FormType>dfm</FormType>
<DesignClass>TWebForm</DesignClass>
</DCCReference>
<None Include="index.html"/>
......
......@@ -139,18 +139,19 @@ var
SQL: string;
customer: TCustomerItem;
begin
try
SQL := 'select * from customers';
doQuery(ordersDB.UniQuery1, SQL);
result := TCustomerList.Create;
Result.data := TList<TCustomerItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data );
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
result.count := 0;
while not ordersDB.UniQuery1.Eof do
begin
customer := TCustomerItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( customer );
TXDataOperationContext.Current.Handler.ManagedObjects.Add(customer);
customer.NAME := ordersDB.UniQuery1.FieldByName('NAME').AsString;
customer.CUSTOMER_ID := ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger;
......@@ -166,8 +167,16 @@ begin
ordersDB.UniQuery1.Next;
end;
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;
function TLookupService.GetCustomer(ID: string): TCustomerItem;
// Gets one specific customer from the ID given by the client. This is used for
// the OrderEntry forms.
......@@ -176,6 +185,7 @@ var
ADDRESS: TAddressItem;
USER: TUserItem;
begin
try
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'
else
......@@ -233,10 +243,16 @@ begin
result.USERS.Add(USER);
ordersDB.UniQuery1.Next;
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;
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.
......@@ -248,6 +264,7 @@ var
begin
rptOrderList := TrptOrderList.Create(nil);
try
try
params := TStringList.Create;
params.StrictDelimiter := true;
// parse the searchOptions
......@@ -266,15 +283,18 @@ begin
SQL := GenerateOrdersSQL(searchOptions).SQL;
result := rptOrderList.PrepareReport(SQL, CompanyName);
//rptOrderList.GeneratePDF;
// Optionally, log success
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
rptOrderList.Free;
end;
end;
function TLookupService.AddShippingAddress(AddressInfo: string): TJSONObject;
var
JSONData: TJSONObject;
......@@ -481,7 +501,7 @@ begin
end;
end
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;
function TLookupService.GenerateOrderCorrugatedPDF(orderID: string): string;
......@@ -491,6 +511,7 @@ var
begin
rptOrderCorrugated := TrptOrderCorrugated.Create(nil);
try
try
// Generate SQL query for a single order
SQL := 'SELECT * FROM corrugated_plate_orders WHERE ORDER_ID = ' + orderID;
......@@ -499,6 +520,13 @@ begin
// Optionally log success
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
rptOrderCorrugated.Free;
end;
......@@ -511,15 +539,23 @@ var
begin
rptOrderWeb := TrptOrderWeb.Create(nil);
try
try
// 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 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
Result := rptOrderWeb.PrepareReport(SQL);
// Optionally log success
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
rptOrderWeb.Free;
end;
......@@ -532,6 +568,7 @@ var
begin
rptOrderCutting := TrptOrderCutting.Create(nil);
try
try
// Generate SQL query for a single order
SQL := 'SELECT * FROM cutting_die_orders WHERE ORDER_ID = ' + orderID;
......@@ -540,12 +577,20 @@ begin
// Optionally log success
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
rptOrderCutting.Free;
end;
end;
function TLookupService.generateSubQuery(currStatus: string): string;
// 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
......@@ -818,13 +863,14 @@ var
SQLQuery: TSQLQuery;
begin
SQLQuery := generateOrdersSQL(searchOptions);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(SQLQuery); // Added SQLQuery to ManagedObjects
TXDataOperationContext.Current.Handler.ManagedObjects.Add(SQLQuery);
Result := TOrderList.Create;
try
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
Result.data := TList<TOrderItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
try
SQL := SQLQuery.SQL;
whereSQL := SQLQuery.whereSQL;
......@@ -836,24 +882,27 @@ begin
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Order);
Result.data.Add(Order);
Order.DBID := ordersDB.UniQuery1.FieldByName('ORDER_ID').AsString;
Order.ID := ordersDB.UniQuery1.FieldByName('SHORT_NAME').AsString;
Order.companyName := ordersDB.UniQuery1.FieldByName('COMPANY_NAME').AsString;
Order.jobName := ordersDB.UniQuery1.FieldByName('JOB_NAME').AsString;
Order.orderDate := ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsString;
Order.proofDue := ordersDB.UniQuery1.FieldByName('PROOF_DUE').AsString;
Order.proofDone := ordersDB.UniQuery1.FieldByName('PROOF_DONE').AsString;
Order.artDue := ordersDB.UniQuery1.FieldByName('ART_DUE').AsString;
Order.artDone := ordersDB.UniQuery1.FieldByName('ART_DONE').AsString;
Order.plateDue := ordersDB.UniQuery1.FieldByName('PLATE_DUE').AsString;
Order.plateDone := ordersDB.UniQuery1.FieldByName('PLATE_DONE').AsString;
Order.mountDue := ordersDB.UniQuery1.FieldByName('MOUNT_DUE').AsString;
Order.mountDone := ordersDB.UniQuery1.FieldByName('MOUNT_DONE').AsString;
Order.shipDue := ordersDB.UniQuery1.FieldByName('SHIP_DUE').AsString;
Order.shipDone := ordersDB.UniQuery1.FieldByName('SHIP_DONE').AsString;
Order.price := ordersDB.UniQuery1.FieldByName('PRICE').AsString;
Order.qbRefNum := ordersDB.UniQuery1.FieldByName('QB_REF_NUM').AsString;
Order.orderType := ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString.Replace('_', ' ');
with ordersDB.UniQuery1 do
begin
Order.DBID := FieldByName('ORDER_ID').AsString;
Order.ID := FieldByName('SHORT_NAME').AsString;
Order.companyName := FieldByName('COMPANY_NAME').AsString;
Order.jobName := FieldByName('JOB_NAME').AsString;
Order.orderDate := FieldByName('ORDER_DATE').AsString;
Order.proofDue := FieldByName('PROOF_DUE').AsString;
Order.proofDone := FieldByName('PROOF_DONE').AsString;
Order.artDue := FieldByName('ART_DUE').AsString;
Order.artDone := FieldByName('ART_DONE').AsString;
Order.plateDue := FieldByName('PLATE_DUE').AsString;
Order.plateDone := FieldByName('PLATE_DONE').AsString;
Order.mountDue := FieldByName('MOUNT_DUE').AsString;
Order.mountDone := FieldByName('MOUNT_DONE').AsString;
Order.shipDue := FieldByName('SHIP_DUE').AsString;
Order.shipDone := FieldByName('SHIP_DONE').AsString;
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
begin
......@@ -878,10 +927,14 @@ begin
SQL := 'SELECT COUNT(*) AS total_count ' + whereSQL;
doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close;
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;
......@@ -898,6 +951,7 @@ var
ADDRESS: TAddressItem;
begin
orderID := orderInfo;
try
SQL := 'select ORDER_TYPE from orders where ORDER_ID = ' + quotedStr(orderID);
doQuery(ordersDB.UniQuery1, SQL);
orderType := ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString;
......@@ -1088,8 +1142,16 @@ begin
ordersDB.UniQuery1.Close;
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;
function TLookupService.GetWebOrder(orderInfo: string): TWebOrder;
var
orderType: string;
......@@ -1097,6 +1159,7 @@ var
SQL: string;
ADDRESS: TAddressItem;
begin
try
orderID := orderInfo;
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);
......@@ -1200,7 +1263,6 @@ begin
result.upc_distortion_percent := ordersDB.UniQuery1.FieldByName('upc_distortion_percent').AsString;
result.upc_distortion_amount := ordersDB.UniQuery1.FieldByName('upc_distortion_amount').AsString;
// General
result.general_comments := ordersDB.UniQuery1.FieldByName('general_comments').AsString;
......@@ -1209,7 +1271,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);
doQuery(ordersDB.UniQuery1, SQL);
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
begin
......@@ -1223,10 +1285,16 @@ begin
ordersDB.UniQuery1.Close;
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;
function TLookupService.GetCuttingDieOrder(orderInfo: string): TCuttingDie;
var
orderType: string;
......@@ -1234,6 +1302,7 @@ var
SQL: string;
ADDRESS: TAddressItem;
begin
try
orderID := orderInfo;
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);
......@@ -1266,7 +1335,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);
doQuery(ordersDB.UniQuery1, SQL);
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
begin
......@@ -1280,10 +1349,17 @@ begin
ordersDB.UniQuery1.Close;
result.ITEMS := GetItems('');
except
on E: Exception do
begin
raise EXDataHttpException.Create(500, 'Could not retrieve cutting die order: ' + E.Message);
end;
end;
end;
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
// table on client side from getting too long. This table currently has about 27
// entries so probably not needed.
......@@ -1297,6 +1373,7 @@ var
SQL: string;
item: TItemItem;
begin
try
params := TStringList.Create;
params.StrictDelimiter := true;
// parse the searchOptions
......@@ -1311,13 +1388,11 @@ begin
PageSize := StrToInt(params.Values['pagesize']);
OrderBy := params.Values['orderby'];
limit := IntToStr(PageSize);
offset := IntToStr((PageNum - 1) * PageSize);
SQL := SQL + ' limit ' + limit + ' offset ' + offset;
end;
doQuery(ordersDB.UniQuery1, SQL);
Result:= TItemList.Create;
......@@ -1341,6 +1416,13 @@ begin
doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
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;
function TLookupService.GetUsers(searchOptions: string): TUserList;
......@@ -1351,21 +1433,22 @@ var
SQL: string;
user: TUserItem;
begin
try
if searchOptions = '' then
SQL := 'select * from users order by NAME ASC'
else
SQL := 'select * from users where username=' + quotedStr(searchOptions);
doQuery(ordersDB.UniQuery1, SQL);
Result:= TUserList.Create;
Result := TUserList.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
begin
user := TUserItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( user );
Result.data.Add( user );
TXDataOperationContext.Current.Handler.ManagedObjects.Add(user);
Result.data.Add(user);
user.userID := ordersDB.UniQuery1.FieldByName('USER_ID').AsString;
user.username := ordersDB.UniQuery1.FieldByName('USER_NAME').AsString;
user.password := ordersDB.UniQuery1.FieldByName('PASSWORD').AsString;
......@@ -1379,10 +1462,17 @@ begin
ordersDB.UniQuery1.Next;
end;
ordersDB.UniQuery1.Close;
SQL:= 'select count(*) as total_count from users';
SQL := 'select count(*) as total_count from users';
doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close;
except
on E: Exception do
begin
raise EXDataHttpException.Create(500, 'Unable to retrieve users: ' + E.Message);
end;
end;
end;
function TLookupService.EditUser(const editOptions: string): string;
......@@ -1468,7 +1558,7 @@ begin
end;}
ordersDB.UniQuery1.Post;
Result := 'Success:Edit Successful';
Result := 'Success: Edit Successful';
end;
ordersDB.UniQuery1.Close;
end;
......@@ -1790,13 +1880,11 @@ begin
OrdersDB.UniQuery1.FieldByName(StatusField).AsString := Date;
OrdersDB.UniQuery1.Post;
finally
order.Free;
end;
end;
result := 'success';
except
on E: Exception do
......@@ -1805,7 +1893,7 @@ begin
end;
function TLookupService.AddUser(userInfo:string): string;
function TLookupService.AddUser(userInfo: string): string;
// Adds a user to the database
// userInfo - user information being added
var
......@@ -1824,6 +1912,7 @@ var
hashPW: string;
params: TStringList;
begin
try
params := TStringList.Create;
params.StrictDelimiter := true;
// parse the searchOptions
......@@ -1872,6 +1961,10 @@ begin
end
else
Result := 'Failure:Username already taken';
except
on E: Exception do
raise EXDataHttpException.Create(500, 'AddUser failed: ' + E.Message);
end;
end;
function TLookupService.AddItem(itemInfo: string): TJSONObject;
......@@ -1919,6 +2012,7 @@ begin
end;
end;
function TLookupService.DelUser(username: string): string;
// deletes a user. not currently implemented definitely needs touching up to avoid
// deleting users prematurely.
......@@ -1944,7 +2038,6 @@ begin
end;
end;
function TLookupService.AddWebOrder(orderInfo: string): TJSONObject;
// 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
......@@ -1985,8 +2078,10 @@ begin
ORDER_ID := JSONData.GetValue<integer>('ORDER_ID');
SQL := 'select * from web_plate_orders where ORDER_ID = ' + IntToStr(ORDER_ID);
end;
doQuery(ordersDB.UniQuery1, SQL);
try
doQuery(ordersDB.UniQuery1, SQL);
if mode = 'ADD' then
ordersDB.UniQuery1.Insert
else
......@@ -2037,11 +2132,13 @@ begin
except
on E: Exception do
begin
Result := TJSONObject.Create.AddPair('error', E.Message);
end
Logger.Log(2, 'Error in AddWebOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to add or edit web order: ' + E.Message);
end;
end;
end;
function TLookupService.AddCuttingDieOrder(orderInfo: string): TJSONObject;
var
JSONData, ResponseData: TJSONObject;
......@@ -2126,11 +2223,13 @@ begin
except
on E: Exception do
begin
Result := TJSONObject.Create.AddPair('error', E.Message);
end
Logger.Log(2, 'Error in AddCuttingDieOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to add cutting die order: ' + E.Message);
end;
end;
end;
function TLookupService.delOrder(OrderID, orderType, UserID: string): TJSONObject;
var
table: string;
......@@ -2151,6 +2250,7 @@ var
JSONObject: TJSONObject;
DataObject: TJSONObject;
begin
try
if orderType = 'corrugated' then
begin
table := 'corrugated_plate_orders';
......@@ -2258,8 +2358,16 @@ begin
sql := 'delete from orders where ORDER_ID = ' + OrderID;
OrdersDB.UniQuery1.SQL.Text := SQL;
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;
procedure TLookupService.AddToRevisionsTable(OrderID: string; table: string; order: TJSONObject);
var
SQL, UserID: string;
......@@ -2314,7 +2422,6 @@ begin
ordersDB.UniQuery1.FieldByName('REVISION_USER_ID').AsString := order.GetValue<string>('USER_ID');
// Post the record to the database
ordersDB.UniQuery1.Post;
end;
function TLookupService.getQBCustomers: TJSONArray;
......@@ -2341,6 +2448,7 @@ begin
restResponse := TRESTResponse.Create(nil);
try
try
restRequest.Client := restClient;
restRequest.Response := restResponse;
......@@ -2385,7 +2493,6 @@ begin
for I := 0 to CustomerList.Count - 1 do
begin
Customer := CustomerList.Items[I] as TJSONObject;
ParsedCustomer := TJSONObject.Create;
......@@ -2394,11 +2501,9 @@ begin
try
ParsedCustomer.AddPair('In KGOrders', not(ordersDB.UniQuery1.IsEmpty));
ParsedCustomer.AddPair('Id', Customer.GetValue<string>('Id'));
ParsedCustomer.AddPair('CompanyName', Customer.GetValue<string>('DisplayName'));
// Handle Bill Address
if Customer.GetValue('BillAddr') is TJSONObject then
begin
......@@ -2443,7 +2548,13 @@ begin
raise;
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
iniFile.Free;
restClient.Free;
......
......@@ -2,11 +2,11 @@
MemoLogLevel=3
FileLogLevel=5
webClientVersion=0.9.4
LogFileNum=710
LogFileNum=721
[Database]
Server=192.168.159.131
--Server=192.168.102.130
--Server=192.168.159.131
Server=192.168.102.130
--Server=192.168.75.133
Database=kg_order_entry
Username=root
......
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