Commit 37788721 by Mac Stephens

Merge remote-tracking branch 'origin/mac3'

parents 6417f9f6 7c0f2fe8
...@@ -24,18 +24,6 @@ object FViewOrders: TFViewOrders ...@@ -24,18 +24,6 @@ object FViewOrders: TFViewOrders
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblSearch: TWebLabel
Left = 594
Top = 116
Width = 47
Height = 13
Caption = 'Search = '
ElementID = 'lblsearch'
ElementFont = efCSS
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object btnAddOrder: TWebButton object btnAddOrder: TWebButton
Left = 59 Left = 59
Top = 79 Top = 79
...@@ -340,6 +328,20 @@ object FViewOrders: TFViewOrders ...@@ -340,6 +328,20 @@ object FViewOrders: TFViewOrders
DisplayText = 'Ship Done' DisplayText = 'Ship Done'
end> end>
end end
object edtSearch: TWebEdit
Left = 428
Top = 110
Width = 121
Height = 22
ChildOrder = 10
ElementClassName = 'form-control'
ElementID = 'edtsearch'
ElementFont = efCSS
Enabled = False
HeightStyle = ssAuto
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object XDataWebClient1: TXDataWebClient object XDataWebClient1: TXDataWebClient
Connection = DMConnection.ApiConnection Connection = DMConnection.ApiConnection
Left = 28 Left = 28
......
...@@ -36,11 +36,13 @@ ...@@ -36,11 +36,13 @@
<!-- Entries Label Section d-flex justify-content-between w-100 mt-2--> <!-- Entries Label Section d-flex justify-content-between w-100 mt-2-->
<div class="row"> <div class="row">
<div class="col text-start"> <div class="col-auto">
<label id="lblentries"></label> <label id="lblentries"></label>
</div> </div>
<div class="col text-end"> </div>
<label id="lblsearch"></label> <div class="row">
<div class="col-12">
<input id="edtsearch" type="text" class="form-control" style="width: 100%;"/>
</div> </div>
</div> </div>
......
...@@ -58,7 +58,7 @@ type ...@@ -58,7 +58,7 @@ type
wdbtcOrders: TWebDBTableControl; wdbtcOrders: TWebDBTableControl;
wcbPageSize: TWebComboBox; wcbPageSize: TWebComboBox;
wlcbOrderBy: TWebLookupComboBox; wlcbOrderBy: TWebLookupComboBox;
lblSearch: TWebLabel; edtSearch: TWebEdit;
procedure WebFormCreate(Sender: TObject); procedure WebFormCreate(Sender: TObject);
procedure btnAddOrderClick(Sender: TObject); procedure btnAddOrderClick(Sender: TObject);
procedure btnSearchClick(Sender: TObject); procedure btnSearchClick(Sender: TObject);
...@@ -291,7 +291,7 @@ begin ...@@ -291,7 +291,7 @@ begin
orderType := newform.wcbOrderType.Text; orderType := newform.wcbOrderType.Text;
searchOptions := generateSearchOptions(); searchOptions := generateSearchOptions();
lblSearch.Caption := searchOptions; edtSearch.Text := searchOptions;
getOrders(searchOptions); getOrders(searchOptions);
end; end;
end end
...@@ -646,13 +646,13 @@ searchOptions: string; ...@@ -646,13 +646,13 @@ searchOptions: string;
begin begin
searchOptions := '&pagenumber=' + IntToStr(PageNumber) + searchOptions := '&pagenumber=' + IntToStr(PageNumber) +
'&pagesize=' + IntToStr(PageSize) + '&pagesize=' + IntToStr(PageSize) +
'&orderby=' + OrderBy + '&orderby=' + OrderBy;
//Status 1 //Status 1
'&filterType1=' + filterType1;
if ( (filterType1 <> '') and (filterType1 <> 'NONE') ) then if ( (filterType1 <> '') and (filterType1 <> 'NONE') ) then
begin begin
searchOptions := searchOptions + searchOptions := searchOptions +
'&filterType1=' + filterType1 +
'&null1=' + BoolToStr(null1); '&null1=' + BoolToStr(null1);
if (not (null1)) then if (not (null1)) then
begin begin
...@@ -664,11 +664,11 @@ begin ...@@ -664,11 +664,11 @@ begin
// Status2 // Status2
searchOptions := searchOptions +
'&filterType2=' + filterType2;
if ( (filterType2 <> '') and (filterType2 <> 'NONE') ) then if ( (filterType2 <> '') and (filterType2 <> 'NONE') ) then
begin begin
searchOptions := searchOptions + '&null2=' + BoolToStr(null2); searchOptions := searchOptions +
'&filterType2=' + filterType2 +
'&null2=' + BoolToStr(null2);
if (not (null2)) then if (not (null2)) then
begin begin
searchOptions := searchOptions + searchOptions := searchOptions +
...@@ -677,7 +677,8 @@ begin ...@@ -677,7 +677,8 @@ begin
end; end;
end; end;
if ( ( orderType <> '' ) AND ( orderType <> 'ANY' ) ) then console.log(orderType);
if ( ( orderType <> '' ) AND ( orderType <> 'Any' ) ) then
searchOptions := searchOptions + '&orderType=' + orderType; searchOptions := searchOptions + '&orderType=' + orderType;
if jobName <> '' then if jobName <> '' then
......
...@@ -40,7 +40,7 @@ object FSearch: TFSearch ...@@ -40,7 +40,7 @@ object FSearch: TFSearch
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblStartDate1: TWebLabel object lblStartDate1: TWebLabel
Left = 200 Left = 404
Top = 442 Top = 442
Width = 56 Width = 56
Height = 14 Height = 14
...@@ -55,7 +55,7 @@ object FSearch: TFSearch ...@@ -55,7 +55,7 @@ object FSearch: TFSearch
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblEndDate1: TWebLabel object lblEndDate1: TWebLabel
Left = 384 Left = 588
Top = 442 Top = 442
Width = 47 Width = 47
Height = 14 Height = 14
...@@ -100,8 +100,8 @@ object FSearch: TFSearch ...@@ -100,8 +100,8 @@ object FSearch: TFSearch
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblStartDate2: TWebLabel object lblStartDate2: TWebLabel
Left = 200 Left = 404
Top = 516 Top = 520
Width = 56 Width = 56
Height = 14 Height = 14
Caption = 'Start Date:' Caption = 'Start Date:'
...@@ -115,8 +115,8 @@ object FSearch: TFSearch ...@@ -115,8 +115,8 @@ object FSearch: TFSearch
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblEndDate2: TWebLabel object lblEndDate2: TWebLabel
Left = 384 Left = 588
Top = 516 Top = 520
Width = 47 Width = 47
Height = 14 Height = 14
Caption = 'End Date' Caption = 'End Date'
...@@ -277,6 +277,7 @@ object FSearch: TFSearch ...@@ -277,6 +277,7 @@ object FSearch: TFSearch
ItemIndex = -1 ItemIndex = -1
Items.Strings = ( Items.Strings = (
'NONE' 'NONE'
'ORDER DATE'
'PROOF DUE' 'PROOF DUE'
'PROOF DONE' 'PROOF DONE'
'ART DUE' 'ART DUE'
...@@ -326,7 +327,7 @@ object FSearch: TFSearch ...@@ -326,7 +327,7 @@ object FSearch: TFSearch
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object dtpStartDate1: TWebDateTimePicker object dtpStartDate1: TWebDateTimePicker
Left = 200 Left = 404
Top = 462 Top = 462
Width = 127 Width = 127
Height = 22 Height = 22
...@@ -348,7 +349,7 @@ object FSearch: TFSearch ...@@ -348,7 +349,7 @@ object FSearch: TFSearch
Text = '' Text = ''
end end
object dtpEndDate1: TWebDateTimePicker object dtpEndDate1: TWebDateTimePicker
Left = 384 Left = 588
Top = 462 Top = 462
Width = 135 Width = 135
Height = 22 Height = 22
...@@ -370,7 +371,7 @@ object FSearch: TFSearch ...@@ -370,7 +371,7 @@ object FSearch: TFSearch
Text = '' Text = ''
end end
object cbNull1: TWebCheckBox object cbNull1: TWebCheckBox
Left = 566 Left = 188
Top = 462 Top = 462
Width = 185 Width = 185
Height = 22 Height = 22
...@@ -409,6 +410,7 @@ object FSearch: TFSearch ...@@ -409,6 +410,7 @@ object FSearch: TFSearch
ItemIndex = -1 ItemIndex = -1
Items.Strings = ( Items.Strings = (
'NONE' 'NONE'
'ORDER DATE'
'PROOF DUE' 'PROOF DUE'
'PROOF DONE' 'PROOF DONE'
'ART DUE' 'ART DUE'
...@@ -421,8 +423,8 @@ object FSearch: TFSearch ...@@ -421,8 +423,8 @@ object FSearch: TFSearch
'SHIP DONE') 'SHIP DONE')
end end
object dtpStartDate2: TWebDateTimePicker object dtpStartDate2: TWebDateTimePicker
Left = 200 Left = 404
Top = 536 Top = 540
Width = 127 Width = 127
Height = 22 Height = 22
HeightStyle = ssAuto HeightStyle = ssAuto
...@@ -437,8 +439,8 @@ object FSearch: TFSearch ...@@ -437,8 +439,8 @@ object FSearch: TFSearch
Text = '' Text = ''
end end
object dtpEndDate2: TWebDateTimePicker object dtpEndDate2: TWebDateTimePicker
Left = 384 Left = 588
Top = 536 Top = 540
Width = 135 Width = 135
Height = 22 Height = 22
HeightStyle = ssAuto HeightStyle = ssAuto
...@@ -453,7 +455,7 @@ object FSearch: TFSearch ...@@ -453,7 +455,7 @@ object FSearch: TFSearch
Text = '' Text = ''
end end
object cbNull2: TWebCheckBox object cbNull2: TWebCheckBox
Left = 566 Left = 188
Top = 536 Top = 536
Width = 185 Width = 185
Height = 22 Height = 22
......
...@@ -173,16 +173,11 @@ var ...@@ -173,16 +173,11 @@ var
SQL: string; SQL: string;
rptOrders: TrptOrders; // Local instance of rptOrders rptOrders: TrptOrders; // Local instance of rptOrders
begin begin
// Create instance of rptOrders
rptOrders := TrptOrders.Create(nil); rptOrders := TrptOrders.Create(nil);
try try
// Generate SQL dynamically using the existing GetOrders logic
SQL := GenerateOrdersSQL(searchOptions).SQL; SQL := GenerateOrdersSQL(searchOptions).SQL;
// Prepare the report dataset
result := rptOrders.PrepareReport(SQL); result := rptOrders.PrepareReport(SQL);
// Generate the PDF report
//rptOrders.GeneratePDF; //rptOrders.GeneratePDF;
// Optionally, log success // Optionally, log success
...@@ -217,7 +212,7 @@ begin ...@@ -217,7 +212,7 @@ begin
if startDate <> '' then if startDate <> '' then
begin begin
result := result + ' AND ' + quotedStr(endDate) + ' <= STATUS_DATE'; result := result + ' AND ' + quotedStr(startDate) + ' <= STATUS_DATE';
end; end;
if ( ( endDate <> '1899/12/30' ) AND ( endDate <> '' ) ) then if ( ( endDate <> '1899/12/30' ) AND ( endDate <> '' ) ) then
...@@ -268,18 +263,32 @@ end; ...@@ -268,18 +263,32 @@ end;
function TLookupService.generateStatusWhereSQL(status: TStatusSearchInfo): string; function TLookupService.generateStatusWhereSQL(status: TStatusSearchInfo): string;
begin begin
result := ' AND '; if status.filterType <> 'ORDER_DATE' then
if status.null then begin
begin if status.null then
result := result + 'not exists (select 1 from ' + status.statusTableLong + begin
' ' + status.statusTableShort + ' where ' result := result + ' AND not exists (select 1 from ' + status.statusTableLong +
+ status.statusTableShort +'.ORDER_ID = o.ORDER_ID ' + ' ' + status.statusTableShort + ' where '
'AND ' + status.statusTableShort + '.ORDER_STATUS = ' + + status.statusTableShort +'.ORDER_ID = o.ORDER_ID ' +
quotedStr(status.statusType) + ') AND ' + 'AND ' + status.statusTableShort + '.ORDER_STATUS = ' +
generateStatusSelectSQL(status.altStatusTableShort, status.altStatusTableLong, status.startDate, status.endDate, status.statusType); quotedStr(status.statusType) + ') AND ' +
generateStatusSelectSQL(status.altStatusTableShort, status.altStatusTableLong, status.startDate, status.endDate, status.statusType);
end
else
result := result + ' AND ' + generateStatusSelectSQL(status.statusTableShort, status.statusTableLong, status.startDate, status.endDate, status.statusType);
end end
else else
result := result + generateStatusSelectSQL(status.statusTableShort, status.statusTableLong, status.startDate, status.endDate, status.statusType); begin
if status.startDate <> '' then
begin
result := result + ' AND ' + quotedStr(status.startDate) + ' <= o.ORDER_DATE';
end;
if ( ( status.endDate <> '1899/12/30' ) AND ( status.endDate <> '' ) ) then
begin
result := result + ' AND ' + quotedStr(status.endDate) + ' >= o.ORDER_DATE';
end;
end;
end; end;
function TLookupService.generateOrdersSQL(searchOptions: string): TSQLQuery; function TLookupService.generateOrdersSQL(searchOptions: string): TSQLQuery;
...@@ -375,24 +384,34 @@ begin ...@@ -375,24 +384,34 @@ begin
result.whereSQL := whereSQL; result.whereSQL := whereSQL;
end; end;
function TLookupService.getColorCount(colors: string): string; function TLookupService.GetColorCount(colors: string): string;
var var
colorObject: TJSONObject; colorObject: TJSONObject;
colorList: TJSONArray; colorList: TJSONArray;
temp: string;
temp2: string;
begin begin
if colors = '' then if colors = '' then
result := '0' Result := '0'
else else
begin begin
colorObject := TJSONObject.ParseJSONValue(colors) as TJSONObject; colorObject := TJSONObject.ParseJSONValue(colors) as TJSONObject;
colorList := TJSONArray(colorObject.GetValue('items')); try
//temp := colorList.toString; if Assigned(colorObject) then
result := IntToStr(colorList.Count); begin
colorList := colorObject.GetValue<TJSONArray>('items');
if Assigned(colorList) then
Result := IntToStr(colorList.Count)
else
Result := '0';
end
else
Result := '0';
finally
colorObject.Free;
end;
end; end;
end; end;
function TLookupService.GetOrders(searchOptions: string): TOrderList; function TLookupService.GetOrders(searchOptions: string): TOrderList;
var var
SQL: string; SQL: string;
...@@ -400,69 +419,76 @@ var ...@@ -400,69 +419,76 @@ var
Order: TOrderItem; Order: TOrderItem;
colors: string; colors: string;
ColorType: string; ColorType: string;
SQLArray: TArray<string>;
SQLQuery: TSQLQuery; SQLQuery: TSQLQuery;
begin begin
SQLQuery := generateOrdersSQL(searchOptions); SQLQuery := generateOrdersSQL(searchOptions);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(SQLQuery); // Added SQLQuery to ManagedObjects
SQL := SQLQuery.SQL; Result := TOrderList.Create;
whereSQL := SQLQuery.whereSQL; try
Result.data := TList<TOrderItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
doQuery(ordersDB.UniQuery1, SQL); SQL := SQLQuery.SQL;
whereSQL := SQLQuery.whereSQL;
Result:= TOrderList.Create; doQuery(ordersDB.UniQuery1, SQL);
Result.data := TList<TOrderItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data ); while not ordersDB.UniQuery1.Eof do
while not ordersDB.UniQuery1.Eof do
begin
Order := TOrderItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Order );
Result.data.Add( Order );
order.ID := ordersDB.UniQuery1.FieldByName('ORDER_ID').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('_', ' ');
if ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString = 'web_plate' then
begin
colorType := 'quantity_and_colors_qty_colors';
SQL := 'Select quantity_and_colors_qty_colors from web_plate_orders where order_id = ' + order.ID;
end
else
begin begin
colorType := 'colors_colors'; Order := TOrderItem.Create;
SQL := 'Select colors_colors from corrugated_plate_orders where order_id = ' + order.ID; TXDataOperationContext.Current.Handler.ManagedObjects.Add(Order);
end; Result.data.Add(Order);
Order.ID := ordersDB.UniQuery1.FieldByName('ORDER_ID').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('_', ' ');
if ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString = 'web_plate' then
begin
ColorType := 'quantity_and_colors_qty_colors';
SQL := 'Select quantity_and_colors_qty_colors from web_plate_orders where order_id = ' + Order.ID;
end
else
begin
ColorType := 'colors_colors';
SQL := 'Select colors_colors from corrugated_plate_orders where order_id = ' + Order.ID;
end;
doQuery(ordersDB.UniQuery2, SQL); doQuery(ordersDB.UniQuery2, SQL);
colors := ordersDB.UniQuery2.FieldByName(ColorType).AsString; colors := ordersDB.UniQuery2.FieldByName(ColorType).AsString;
order.colors := getColorCount(colors); Order.colors := GetColorCount(colors);
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
SQL := 'SELECT COUNT(*) AS total_count ' + whereSQL;
doQuery(ordersDB.UniQuery1, SQL); SQL := 'SELECT COUNT(*) AS total_count ' + whereSQL;
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except
Result.Free; // Cleaned up memory in case of exceptions
end;
end; end;
function TLookupService.GetOrder(orderInfo: string): TFullOrder; function TLookupService.GetOrder(orderInfo: string): TFullOrder;
var var
orderType: string; orderType: string;
...@@ -818,23 +844,140 @@ begin ...@@ -818,23 +844,140 @@ begin
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
end; end;
// -- Keeping this here in case you need to revert to it for some reason.
// -- The new version handles the memory issue on the exception.
//function TLookupService.AddCorrugatedOrder(orderInfo: string): TJSONObject;
//var
// JSONData, ResponseData: TJSONObject;
// SQL: string;
// Pair: TJSONPair;
// Field: TField;
// DateFormat: TFormatSettings;
// ORDER_ID: integer;
// mode: string;
//begin
// DateFormat := TFormatSettings.Create;
// DateFormat.ShortDateFormat := 'yyyy-mm-dd';
// DateFormat.DateSeparator := '-';
// JSONData := TJSONObject.ParseJSONValue(orderInfo) as TJSONObject;
// if JSONData = nil then
// raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception
// mode := JSONData.GetValue<string>('mode');
// if mode = 'ADD' then
// SQL := 'select * from corrugated_plate_orders where ORDER_ID = 0 and ORDER_ID <> 0'
// else
// begin
// ORDER_ID := JSONData.GetValue<integer>('ORDER_ID');
// SQL := 'select * from corrugated_plate_orders where ORDER_ID = ' + IntToStr(ORDER_ID);
// end;
// doQuery(ordersDB.UniQuery1, SQL);
// try
// if mode = 'ADD' then
// ordersDB.UniQuery1.Insert
// else
// ordersDB.UniQuery1.Edit;
//
// for Pair in JSONData do
// begin
// Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset
// if Assigned(Field) then
// begin
// // handles any dates or datetimes
// if (Field is TDateTimeField) and (Pair.JsonValue.Value <> '') then
// TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value)
// else if Pair.JsonValue.Value <> '' then
// Field.AsString := Pair.JsonValue.Value;
// end;
// end;
//
// // Post the record to the database
// ordersDB.UniQuery1.Post;
//
// if mode = 'ADD' then
// begin
// SQL := 'select * from orders where ORDER_ID = 0 and ORDER_ID <> 0';
// doQuery(ordersDB.UniQuery1, SQL);
// ordersDB.UniQuery1.Insert;
// end
// else
// begin
// SQL := 'select * from orders where ORDER_ID = ' + IntToStr(ORDER_ID);
// doQuery(ordersDB.UniQuery1, SQL);
// end;
//
// ordersDB.UniQuery1.FieldByName('COMPANY_ID').AsString := JSONData.GetValue<string>('COMPANY_ID');
// ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString := 'corrugated_plate';
//
// if mode = 'ADD' then
// ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsDateTime := Now;
//
// if JSONData.GetValue<string>('staff_fields_price') = '' then
// ordersDB.UniQuery1.FieldByName('PRICE').AsString := '0'
// else
// ordersDB.UniQuery1.FieldByName('PRICE').AsString := JSONData.GetValue<string>('staff_fields_price');
//
// ordersDB.UniQuery1.FieldByName('JOB_NAME').AsString := JSONData.GetValue<string>('staff_fields_job_name');
// ordersDB.UniQuery1.FieldByName('USER_ID').AsString := JSONData.GetValue<string>('USER_ID');
// ordersDB.UniQuery1.FieldByName('LOCATION').AsString := JSONData.GetValue<string>('staff_fields_art_location');
//
// ordersDB.UniQuery1.Post;
//
// ordersDB.UniQuery1.Close;
// if mode = 'ADD' then
// begin
// ordersDB.UniQuery1.SQL.Text := 'SELECT LAST_INSERT_ID() AS OrderID'; // Use database's method to get the last inserted ID
// ordersDB.UniQuery1.Open;
// ORDER_ID := ordersDB.UniQuery1.FieldByName('OrderID').AsInteger;
// end;
//
// if JSONData.GetValue<string>('staff_fields_proof_date') <> '' then
// AddStatusSchedule('PROOF', JSONData, ORDER_ID);
// if JSONData.GetValue<string>('staff_fields_ship_date') <> '' then
// AddStatusSchedule('SHIP', JSONData, ORDER_ID);
// if JSONData.GetValue<string>('staff_fields_art_due') <> '' then
// AddStatusSchedule('ART', JSONData, ORDER_ID);
// if JSONData.GetValue<string>('staff_fields_plate_due') <> '' then
// AddStatusSchedule('PLATE', JSONData, ORDER_ID);
// if JSONData.GetValue<string>('staff_fields_mount_due') <> '' then
// AddStatusSchedule('MOUNT', JSONData, ORDER_ID);
//
// Result := TJSONObject.Create.AddPair('status', 'success');
// TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
// except
// on E: Exception do
// begin
// Result := TJSONObject.Create.AddPair('error', E.Message);
// end;
// end;
//end;
function TLookupService.AddCorrugatedOrder(orderInfo: string): TJSONObject; function TLookupService.AddCorrugatedOrder(orderInfo: string): TJSONObject;
var var
JSONData, ResponseData: TJSONObject; JSONData: TJSONObject;
SQL: string; SQL: string;
Pair: TJSONPair; Pair: TJSONPair;
Field: TField; Field: TField;
DateFormat: TFormatSettings; DateFormat: TFormatSettings;
CurrDate: TDateTime;
ORDER_ID: integer; ORDER_ID: integer;
mode: string; mode: string;
begin begin
DateFormat := TFormatSettings.Create; DateFormat := TFormatSettings.Create;
DateFormat.ShortDateFormat := 'yyyy-mm-dd'; DateFormat.ShortDateFormat := 'yyyy-mm-dd';
DateFormat.DateSeparator := '-'; DateFormat.DateSeparator := '-';
// Initialize Result object and add it to ManagedObjects upfront
Result := TJSONObject.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
JSONData := TJSONObject.ParseJSONValue(orderInfo) as TJSONObject; JSONData := TJSONObject.ParseJSONValue(orderInfo) as TJSONObject;
if JSONData = nil then if JSONData = nil then
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception begin
Result.AddPair('error', 'Invalid JSON format'); // Populate error in Result
Exit;
end;
mode := JSONData.GetValue<string>('mode'); mode := JSONData.GetValue<string>('mode');
if mode = 'ADD' then if mode = 'ADD' then
SQL := 'select * from corrugated_plate_orders where ORDER_ID = 0 and ORDER_ID <> 0' SQL := 'select * from corrugated_plate_orders where ORDER_ID = 0 and ORDER_ID <> 0'
...@@ -843,8 +986,10 @@ begin ...@@ -843,8 +986,10 @@ begin
ORDER_ID := JSONData.GetValue<integer>('ORDER_ID'); ORDER_ID := JSONData.GetValue<integer>('ORDER_ID');
SQL := 'select * from corrugated_plate_orders where ORDER_ID = ' + IntToStr(ORDER_ID); SQL := 'select * from corrugated_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
...@@ -852,18 +997,16 @@ begin ...@@ -852,18 +997,16 @@ begin
for Pair in JSONData do for Pair in JSONData do
begin begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value);
if Assigned(Field) then if Assigned(Field) then
begin begin
// handles any dates or datetimes
if (Field is TDateTimeField) and (Pair.JsonValue.Value <> '') then if (Field is TDateTimeField) and (Pair.JsonValue.Value <> '') then
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value) TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value, DateFormat)
else if Pair.JsonValue.Value <> '' then else if Pair.JsonValue.Value <> '' then
Field.AsString := Pair.JsonValue.Value; Field.AsString := Pair.JsonValue.Value;
end; end;
end; end;
// Post the record to the database
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
if mode = 'ADD' then if mode = 'ADD' then
...@@ -896,6 +1039,7 @@ begin ...@@ -896,6 +1039,7 @@ begin
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
if mode = 'ADD' then if mode = 'ADD' then
begin begin
ordersDB.UniQuery1.SQL.Text := 'SELECT LAST_INSERT_ID() AS OrderID'; // Use database's method to get the last inserted ID ordersDB.UniQuery1.SQL.Text := 'SELECT LAST_INSERT_ID() AS OrderID'; // Use database's method to get the last inserted ID
...@@ -914,16 +1058,17 @@ begin ...@@ -914,16 +1058,17 @@ begin
if JSONData.GetValue<string>('staff_fields_mount_due') <> '' then if JSONData.GetValue<string>('staff_fields_mount_due') <> '' then
AddStatusSchedule('MOUNT', JSONData, ORDER_ID); AddStatusSchedule('MOUNT', JSONData, ORDER_ID);
Result := TJSONObject.Create.AddPair('status', 'success'); // Updated so an object isn't being created in the exception for memory control
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); Result.AddPair('status', 'success');
except except
on E: Exception do on E: Exception do
begin begin
Result := TJSONObject.Create.AddPair('error', E.Message); Result.AddPair('error', E.Message);
end; end;
end; end;
end; end;
function TLookupService.AddStatusSchedule(StatusType: string; order: TJSONObject; ORDER_ID: integer): string; function TLookupService.AddStatusSchedule(StatusType: string; order: TJSONObject; ORDER_ID: integer): string;
var var
SQL: string; SQL: string;
......
...@@ -133,7 +133,7 @@ begin ...@@ -133,7 +133,7 @@ begin
colorList := TJSONArray(colorObject.GetValue('items')); colorList := TJSONArray(colorObject.GetValue('items'));
result := IntToStr(colorList.Count); result := IntToStr(colorList.Count);
finally finally
colorObject.Free; // Free TJSONObject to avoid leaks colorObject.Free;
end; end;
end; end;
end; end;
...@@ -161,7 +161,7 @@ begin ...@@ -161,7 +161,7 @@ begin
frxOrders.Export(frxPDFExport1); frxOrders.Export(frxPDFExport1);
//frxOrders.ShowPreparedReport; //frxOrders.ShowPreparedReport;
finally finally
frxOrders.Clear; // Clear the report to avoid memory bloat frxOrders.Clear; // Clears the report to avoid memory bloat
end; end;
Logger.Log(5, 'PDF saved to: ' + ReportFileName); Logger.Log(5, 'PDF saved to: ' + ReportFileName);
......
...@@ -7,7 +7,6 @@ uses ...@@ -7,7 +7,6 @@ uses
procedure LoadDatabaseSettings( uc: TUniConnection; iniFilename: string ); procedure LoadDatabaseSettings( uc: TUniConnection; iniFilename: string );
procedure DoQuery( uq: TUniQuery; sql: string ); procedure DoQuery( uq: TUniQuery; sql: string );
function CalculateAge( const dob, dt: TDateTime ): Integer;
implementation implementation
...@@ -39,33 +38,5 @@ begin ...@@ -39,33 +38,5 @@ begin
uq.Open; uq.Open;
end; end;
function CalculateAge( const dob, dt: TDateTime): Integer;
var
age: Integer;
y1, m1, d1, y2, m2, d2: Word;
begin
Result := 0;
if dt < dob then
Exit;
DecodeDate( dob, y1, m1, d1);
DecodeDate( dt, y2, m2, d2);
age := y2 - y1;
// Feb 29
//if ( (m1=2) and (d1=29) ) and ( not IsLeapYear(y2) ) then
// d1 := 28;
if (m1 = 2) and (d1 = 29) and (not (IsLeapYear (y2))) then
begin
m1 := 3;
d1 := 1;
end;
if (m2 < m1) or ((m2 = m1) and (d2 < d1)) then
Dec(age);
Result := age
end;
end. end.
[Settings] [Settings]
MemoLogLevel=4 MemoLogLevel=4
FileLogLevel=5 FileLogLevel=5
LogFileNum=63 LogFileNum=90
webClientVersion=1.0.0 webClientVersion=1.0.0
[Database] [Database]
......
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