Commit 95296f5f by Cam Hayes

Customers form is complete and linked with quickbooks

parent 45495f71
...@@ -117,6 +117,7 @@ type ...@@ -117,6 +117,7 @@ type
function VerifyCustomer(): boolean; function VerifyCustomer(): boolean;
function VerifyAddress(): boolean; function VerifyAddress(): boolean;
procedure Clear(); procedure Clear();
procedure ShowSelectCustomerForm();
var var
customerID: string; customerID: string;
notification: string; notification: string;
...@@ -134,7 +135,7 @@ implementation ...@@ -134,7 +135,7 @@ implementation
{$R *.dfm} {$R *.dfm}
uses View.Main, View.Customers; uses View.Main, View.Customers, View.SelectCustomer;
procedure TFViewAddCustomer.Clear(); procedure TFViewAddCustomer.Clear();
// Clears the shipping address fields. // Clears the shipping address fields.
...@@ -148,6 +149,28 @@ begin ...@@ -148,6 +149,28 @@ begin
edtFirstLine.Text := ''; edtFirstLine.Text := '';
end; end;
procedure TFViewAddCustomer.ShowSelectCustomerForm();
// displays the add order pop-up so the user can choose a customer
var
newform: TFSelectCustomer;
begin
newform := TFSelectCustomer.CreateNew;
newform.Caption := 'Select Customer and Order Type';
newForm.Popup := True;
newForm.Border := fbDialog;
// used to manage Back button handling to close subform
window.location.hash := 'subform';
newform.ShowModal(
procedure(AValue: TModalResult)
begin
end
);
end;
procedure TFViewAddCustomer.DelAddress; procedure TFViewAddCustomer.DelAddress;
// Deletes a shipping address. // Deletes a shipping address.
var var
...@@ -210,7 +233,7 @@ end; ...@@ -210,7 +233,7 @@ end;
procedure TFViewAddCustomer.btnAddClick(Sender: TObject); procedure TFViewAddCustomer.btnAddClick(Sender: TObject);
// Takes the user to the Add Customer Page. // Takes the user to the Add Customer Page.
begin begin
FViewMain.ViewAddCustomer('', ''); ShowSelectCustomerForm();
end; end;
procedure TFViewAddCustomer.btnCancelClick(Sender: TObject); procedure TFViewAddCustomer.btnCancelClick(Sender: TObject);
...@@ -601,16 +624,16 @@ begin ...@@ -601,16 +624,16 @@ begin
memoAddressBlock.Text := string(customer['staff_fields_invoice_to']); memoAddressBlock.Text := string(customer['staff_fields_invoice_to']);
if ( not xdwdsShipTo.IsEmpty ) then edtShippingAddress.Text := xdwdsShipTo.FieldByName('shipping_address').AsString;
begin edtShippingCity.Text := xdwdsShipTo.FieldByName('city').AsString;
edtShippingAddress.Text := xdwdsShipTo.FieldByName('shipping_address').AsString; edtShippingState.Text := xdwdsShipTo.FieldByName('state').AsString;
edtShippingCity.Text := xdwdsShipTo.FieldByName('city').AsString; edtShippingZip.Text := xdwdsShipTo.FieldByName('zip').AsString;
edtShippingState.Text := xdwdsShipTo.FieldByName('state').AsString; edtShippingContact.Text := xdwdsShipTo.FieldByName('contact').AsString;
edtShippingZip.Text := xdwdsShipTo.FieldByName('zip').AsString; memoShipBlock.Text := xdwdsShipTo.FieldByName('ADDRESS').AsString;
edtShippingContact.Text := xdwdsShipTo.FieldByName('contact').AsString; if memoShipBlock.Lines.Count > 0 then
memoShipBlock.Text := xdwdsShipTo.FieldByName('ADDRESS').AsString; edtFirstLine.Text := memoShipBlock.Lines[0]
edtFirstLine.Text := memoShipBlock.Lines[0]; else
end; edtFirstLine.Text := '';
end; end;
......
...@@ -12,7 +12,7 @@ object FAddOrder: TFAddOrder ...@@ -12,7 +12,7 @@ object FAddOrder: TFAddOrder
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel2: TWebLabel object WebLabel2: TWebLabel
Left = 143 Left = 135
Top = 81 Top = 81
Width = 113 Width = 113
Height = 15 Height = 15
...@@ -20,6 +20,15 @@ object FAddOrder: TFAddOrder ...@@ -20,6 +20,15 @@ object FAddOrder: TFAddOrder
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel3: TWebLabel
Left = 283
Top = 81
Width = 134
Height = 15
Caption = 'Selected Customer Name'
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object edtSearch: TWebEdit object edtSearch: TWebEdit
Left = 4 Left = 4
Top = 102 Top = 102
...@@ -30,7 +39,7 @@ object FAddOrder: TFAddOrder ...@@ -30,7 +39,7 @@ object FAddOrder: TFAddOrder
OnChange = edtSearchChange OnChange = edtSearchChange
end end
object edtID: TWebEdit object edtID: TWebEdit
Left = 143 Left = 135
Top = 102 Top = 102
Width = 142 Width = 142
Height = 22 Height = 22
...@@ -220,8 +229,8 @@ object FAddOrder: TFAddOrder ...@@ -220,8 +229,8 @@ object FAddOrder: TFAddOrder
OnClick = cbWebPlateClick OnClick = cbWebPlateClick
end end
object btnCancel: TWebButton object btnCancel: TWebButton
Left = 436 Left = 542
Top = 105 Top = 101
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Cancel' Caption = 'Cancel'
...@@ -231,8 +240,8 @@ object FAddOrder: TFAddOrder ...@@ -231,8 +240,8 @@ object FAddOrder: TFAddOrder
OnClick = btnCancelClick OnClick = btnCancelClick
end end
object btnConfirm: TWebButton object btnConfirm: TWebButton
Left = 328 Left = 436
Top = 105 Top = 101
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Select' Caption = 'Select'
...@@ -273,6 +282,16 @@ object FAddOrder: TFAddOrder ...@@ -273,6 +282,16 @@ object FAddOrder: TFAddOrder
TabOrder = 1 TabOrder = 1
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object edtName: TWebEdit
Left = 283
Top = 102
Width = 142
Height = 22
ChildOrder = 1
Enabled = False
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object XDataWebClient1: TXDataWebClient object XDataWebClient1: TXDataWebClient
Connection = DMConnection.ApiConnection Connection = DMConnection.ApiConnection
Left = 780 Left = 780
......
...@@ -33,6 +33,8 @@ type ...@@ -33,6 +33,8 @@ type
edtNotification: TWebEdit; edtNotification: TWebEdit;
xdwdsCustomersstaff_fields_invoice_to: TStringField; xdwdsCustomersstaff_fields_invoice_to: TStringField;
xdwdsCustomersCUSTOMER_ID: TIntegerField; xdwdsCustomersCUSTOMER_ID: TIntegerField;
WebLabel3: TWebLabel;
edtName: TWebEdit;
procedure WebFormShow(Sender: TObject); procedure WebFormShow(Sender: TObject);
procedure edtSearchChange(Sender: TObject); procedure edtSearchChange(Sender: TObject);
procedure cbCorrugatedPlateClick(Sender: TObject); procedure cbCorrugatedPlateClick(Sender: TObject);
...@@ -185,6 +187,7 @@ end; ...@@ -185,6 +187,7 @@ end;
procedure TFAddOrder.TMSFNCGrid1CellClick(Sender: TObject; ACol, ARow: Integer); procedure TFAddOrder.TMSFNCGrid1CellClick(Sender: TObject; ACol, ARow: Integer);
begin begin
edtID.Text := TMSFNCGrid1.Cells[1, ARow]; edtID.Text := TMSFNCGrid1.Cells[1, ARow];
edtName.Text := TMSFNCGrid1.Cells[2, ARow];
DBID := TMSFNCGrid1.Cells[0, ARow]; DBID := TMSFNCGrid1.Cells[0, ARow];
end; end;
......
...@@ -221,7 +221,6 @@ end; ...@@ -221,7 +221,6 @@ end;
procedure TFViewCustomers.btnAddCustomerClick(Sender: TObject); procedure TFViewCustomers.btnAddCustomerClick(Sender: TObject);
begin begin
ShowSelectCustomerForm(); ShowSelectCustomerForm();
//FViewMain.ViewAddCustomer(string(notification['CustomerID']), string(notification['status']));
end; end;
procedure TFViewCustomers.edtFilterChange(Sender: TObject); procedure TFViewCustomers.edtFilterChange(Sender: TObject);
......
...@@ -13,7 +13,7 @@ object FSelectCustomer: TFSelectCustomer ...@@ -13,7 +13,7 @@ object FSelectCustomer: TFSelectCustomer
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel2: TWebLabel object WebLabel2: TWebLabel
Left = 143 Left = 279
Top = 81 Top = 81
Width = 134 Width = 134
Height = 15 Height = 15
...@@ -21,6 +21,15 @@ object FSelectCustomer: TFSelectCustomer ...@@ -21,6 +21,15 @@ object FSelectCustomer: TFSelectCustomer
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel3: TWebLabel
Left = 131
Top = 81
Width = 113
Height = 15
Caption = 'Selected Customer ID'
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object edtSearch: TWebEdit object edtSearch: TWebEdit
Left = 4 Left = 4
Top = 102 Top = 102
...@@ -30,8 +39,8 @@ object FSelectCustomer: TFSelectCustomer ...@@ -30,8 +39,8 @@ object FSelectCustomer: TFSelectCustomer
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object edtID: TWebEdit object edtName: TWebEdit
Left = 143 Left = 279
Top = 102 Top = 102
Width = 142 Width = 142
Height = 22 Height = 22
...@@ -195,13 +204,11 @@ object FSelectCustomer: TFSelectCustomer ...@@ -195,13 +204,11 @@ object FSelectCustomer: TFSelectCustomer
LeftCol = 0 LeftCol = 0
ScrollMode = scmItemScrolling ScrollMode = scmItemScrolling
DesignTimeSampleData = True DesignTimeSampleData = True
OnCellDblClick = TMSFNCGrid1CellDblClick OnCellClick = TMSFNCGrid1CellClick
ExplicitLeft = 12
ExplicitTop = 185
end end
object btnCancel: TWebButton object btnCancel: TWebButton
Left = 436 Left = 556
Top = 105 Top = 101
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Cancel' Caption = 'Cancel'
...@@ -210,8 +217,8 @@ object FSelectCustomer: TFSelectCustomer ...@@ -210,8 +217,8 @@ object FSelectCustomer: TFSelectCustomer
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object btnConfirm: TWebButton object btnConfirm: TWebButton
Left = 328 Left = 440
Top = 105 Top = 101
Width = 96 Width = 96
Height = 25 Height = 25
Caption = 'Select' Caption = 'Select'
...@@ -241,10 +248,20 @@ object FSelectCustomer: TFSelectCustomer ...@@ -241,10 +248,20 @@ object FSelectCustomer: TFSelectCustomer
TabOrder = 1 TabOrder = 1
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object edtID: TWebEdit
Left = 131
Top = 102
Width = 142
Height = 22
ChildOrder = 1
Enabled = False
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object XDataWebClient1: TXDataWebClient object XDataWebClient1: TXDataWebClient
Connection = DMConnection.ApiConnection Connection = DMConnection.ApiConnection
Left = 560 Left = 630
Top = 61 Top = 47
end end
object xdwdsCustomers: TXDataWebDataSet object xdwdsCustomers: TXDataWebDataSet
Connection = DMConnection.ApiConnection Connection = DMConnection.ApiConnection
...@@ -289,6 +306,9 @@ object FSelectCustomer: TFSelectCustomer ...@@ -289,6 +306,9 @@ object FSelectCustomer: TFSelectCustomer
object xdwdsCustomersBillAddrZip: TStringField object xdwdsCustomersBillAddrZip: TStringField
FieldName = 'BillAddrZip' FieldName = 'BillAddrZip'
end end
object xdwdsCustomersInKGOrders: TBooleanField
FieldName = 'In KGOrders'
end
end end
object wdsCustomers: TWebDataSource object wdsCustomers: TWebDataSource
DataSet = xdwdsCustomers DataSet = xdwdsCustomers
......
...@@ -17,7 +17,7 @@ type ...@@ -17,7 +17,7 @@ type
WebLabel1: TWebLabel; WebLabel1: TWebLabel;
WebLabel2: TWebLabel; WebLabel2: TWebLabel;
edtSearch: TWebEdit; edtSearch: TWebEdit;
edtID: TWebEdit; edtName: TWebEdit;
TMSFNCGrid1: TTMSFNCGrid; TMSFNCGrid1: TTMSFNCGrid;
btnCancel: TWebButton; btnCancel: TWebButton;
btnConfirm: TWebButton; btnConfirm: TWebButton;
...@@ -38,10 +38,14 @@ type ...@@ -38,10 +38,14 @@ type
xdwdsCustomersBillAddrCity: TStringField; xdwdsCustomersBillAddrCity: TStringField;
xdwdsCustomersBillAddrState: TStringField; xdwdsCustomersBillAddrState: TStringField;
xdwdsCustomersBillAddrZip: TStringField; xdwdsCustomersBillAddrZip: TStringField;
WebLabel3: TWebLabel;
edtID: TWebEdit;
xdwdsCustomersInKGOrders: TBooleanField;
procedure WebFormCreate(Sender: TObject); procedure WebFormCreate(Sender: TObject);
procedure WebFormShow(Sender: TObject); procedure WebFormShow(Sender: TObject);
procedure TMSFNCGrid1CellDblClick(Sender: TObject; ACol, ARow: Integer); procedure TMSFNCGrid1CellDblClick(Sender: TObject; ACol, ARow: Integer);
procedure btnConfirmClick(Sender: TObject); procedure btnConfirmClick(Sender: TObject);
procedure TMSFNCGrid1CellClick(Sender: TObject; ACol, ARow: Integer);
private private
{ Private declarations } { Private declarations }
[Async] procedure GetCustomers(); [Async] procedure GetCustomers();
...@@ -56,8 +60,7 @@ var ...@@ -56,8 +60,7 @@ var
implementation implementation
{$R *.dfm {$R *.dfm}
}
uses View.Main; uses View.Main;
...@@ -83,7 +86,10 @@ begin ...@@ -83,7 +86,10 @@ begin
if edtID.Text = '' then if edtID.Text = '' then
edtNotification.Text := 'Please Select a Customer' edtNotification.Text := 'Please Select a Customer'
else else
begin
xdwdsCustomers.Locate('Id', edtID.Text, []);
SendCustomerToServer(); SendCustomerToServer();
end;
end; end;
[async] procedure TFSelectCustomer.getCustomers(); [async] procedure TFSelectCustomer.getCustomers();
...@@ -124,9 +130,9 @@ begin ...@@ -124,9 +130,9 @@ begin
TMSFNCGrid1.ColumnCount := 4; TMSFNCGrid1.ColumnCount := 4;
TMSFNCGrid1.RowCount := 1; TMSFNCGrid1.RowCount := 1;
TMSFNCGrid1.Cells[0, 0] := 'Quickbooks ID'; TMSFNCGrid1.Cells[0, 0] := 'Quickbooks ID';
TMSFNCGrid1.Cells[1, 0] := 'Customer ID'; TMSFNCGrid1.Cells[1, 0] := 'Customer Name';
TMSFNCGrid1.Cells[2, 0] := 'Customer Name'; TMSFNCGrid1.Cells[2, 0] := 'Address';
TMSFNCGrid1.Cells[3, 0] := 'Address'; TMSFNCGrid1.Cells[3, 0] := 'In KGOrders';
// Populate the grid with data from the dataset // Populate the grid with data from the dataset
xdwdsCustomers.First; xdwdsCustomers.First;
...@@ -136,9 +142,9 @@ begin ...@@ -136,9 +142,9 @@ begin
begin begin
TMSFNCGrid1.RowCount := RowIndex + 1; TMSFNCGrid1.RowCount := RowIndex + 1;
TMSFNCGrid1.Cells[0, RowIndex] := xdwdsCustomers.FieldByName('Id').AsString; TMSFNCGrid1.Cells[0, RowIndex] := xdwdsCustomers.FieldByName('Id').AsString;
// TMSFNCGrid1.Cells[1, RowIndex] := xdwdsCustomers.FieldByName('SHORT_NAME').AsString; TMSFNCGrid1.Cells[1, RowIndex] := xdwdsCustomers.FieldByName('CompanyName').AsString;
TMSFNCGrid1.Cells[2, RowIndex] := xdwdsCustomers.FieldByName('CompanyName').AsString; TMSFNCGrid1.Cells[2, RowIndex] := xdwdsCustomers.FieldByName('BillAddr').AsString;
TMSFNCGrid1.Cells[3, RowIndex] := xdwdsCustomers.FieldByName('BillAddr').AsString; TMSFNCGrid1.Cells[3, RowIndex] := xdwdsCustomers.FieldByName('In KGOrders').AsString;
Inc(RowIndex); Inc(RowIndex);
xdwdsCustomers.Next; xdwdsCustomers.Next;
end; end;
...@@ -148,6 +154,13 @@ begin ...@@ -148,6 +154,13 @@ begin
end; end;
end; end;
procedure TFSelectCustomer.TMSFNCGrid1CellClick(Sender: TObject; ACol,
ARow: Integer);
begin
edtID.Text := TMSFNCGrid1.Cells[0, ARow];
edtName.Text := TMSFNCGrid1.Cells[1, ARow];
end;
procedure TFSelectCustomer.TMSFNCGrid1CellDblClick(Sender: TObject; ACol, procedure TFSelectCustomer.TMSFNCGrid1CellDblClick(Sender: TObject; ACol,
ARow: Integer); ARow: Integer);
begin begin
......
...@@ -43,6 +43,8 @@ object FData: TFData ...@@ -43,6 +43,8 @@ object FData: TFData
Lines.Strings = ( Lines.Strings = (
'Memo1') 'Memo1')
TabOrder = 1 TabOrder = 1
ExplicitLeft = -2
ExplicitTop = 435
end end
object DBAdvGrid1: TDBAdvGrid object DBAdvGrid1: TDBAdvGrid
Left = 6 Left = 6
...@@ -1602,8 +1604,8 @@ object FData: TFData ...@@ -1602,8 +1604,8 @@ object FData: TFData
object uqWeb: TUniQuery object uqWeb: TUniQuery
SQL.Strings = ( SQL.Strings = (
'select * from web_plate_orders') 'select * from web_plate_orders')
Left = 745 Left = 743
Top = 464 Top = 476
object uqWebORDER_ID: TIntegerField object uqWebORDER_ID: TIntegerField
FieldName = 'ORDER_ID' FieldName = 'ORDER_ID'
Required = True Required = True
......
...@@ -2370,64 +2370,61 @@ begin ...@@ -2370,64 +2370,61 @@ 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;
sql := 'select CUSTOMER_ID from customers where QB_LIST_ID = ' + Customer.GetValue<string>('Id'); sql := 'select CUSTOMER_ID from customers where QB_LIST_ID = ' + Customer.GetValue<string>('Id');
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
if ordersDB.UniQuery1.IsEmpty then try
begin ParsedCustomer.AddPair('In KGOrders', not(ordersDB.UniQuery1.IsEmpty));
try
ParsedCustomer.AddPair('Id', Customer.GetValue<string>('Id'));
ParsedCustomer.AddPair('CompanyName', Customer.GetValue<string>('DisplayName'));
// Handle Bill Address ParsedCustomer.AddPair('Id', Customer.GetValue<string>('Id'));
if Customer.GetValue('BillAddr') is TJSONObject then ParsedCustomer.AddPair('CompanyName', Customer.GetValue<string>('DisplayName'));
begin
BillAddr := Customer.GetValue('BillAddr') as TJSONObject;
ParsedCustomer.AddPair('BillAddrLine1', TJSONString.Create(BillAddr.GetValue<string>('Line1', '')));
ParsedCustomer.AddPair('BillAddrCity', TJSONString.Create(BillAddr.GetValue<string>('City', '')));
ParsedCustomer.AddPair('BillAddrState', TJSONString.Create(BillAddr.GetValue<string>('CountrySubDivisionCode', '')));
ParsedCustomer.AddPair('BillAddrZip', TJSONString.Create(BillAddr.GetValue<string>('PostalCode', '')));
ParsedCustomer.AddPair('BillAddr',
TJSONString.Create(
Customer.GetValue<string>('DisplayName') + sLineBreak +
BillAddr.GetValue('Line1', '') + ',' + sLineBreak +
BillAddr.GetValue('City', '') + ', ' +
BillAddr.GetValue('CountrySubDivisionCode', '') + ' ' +
BillAddr.GetValue('PostalCode', '')
)
);
end;
// Handle Ship Address // Handle Bill Address
if Customer.GetValue('ShipAddr') is TJSONObject then if Customer.GetValue('BillAddr') is TJSONObject then
begin begin
BillAddr := Customer.GetValue('ShipAddr') as TJSONObject; BillAddr := Customer.GetValue('BillAddr') as TJSONObject;
ParsedCustomer.AddPair('ShipAddrLine1', TJSONString.Create(BillAddr.GetValue<string>('Line1', ''))); ParsedCustomer.AddPair('BillAddrLine1', TJSONString.Create(BillAddr.GetValue<string>('Line1', '')));
ParsedCustomer.AddPair('ShipAddrCity', TJSONString.Create(BillAddr.GetValue<string>('City', ''))); ParsedCustomer.AddPair('BillAddrCity', TJSONString.Create(BillAddr.GetValue<string>('City', '')));
ParsedCustomer.AddPair('ShipAddrState', TJSONString.Create(BillAddr.GetValue<string>('CountrySubDivisionCode', ''))); ParsedCustomer.AddPair('BillAddrState', TJSONString.Create(BillAddr.GetValue<string>('CountrySubDivisionCode', '')));
ParsedCustomer.AddPair('ShipAddrZip', TJSONString.Create(BillAddr.GetValue<string>('PostalCode', ''))); ParsedCustomer.AddPair('BillAddrZip', TJSONString.Create(BillAddr.GetValue<string>('PostalCode', '')));
ParsedCustomer.AddPair('ShipAddr', ParsedCustomer.AddPair('BillAddr',
TJSONString.Create( TJSONString.Create(
Customer.GetValue<string>('DisplayName') + sLineBreak + Customer.GetValue<string>('DisplayName') + sLineBreak +
BillAddr.GetValue('Line1', '') + ',' + sLineBreak + BillAddr.GetValue('Line1', '') + ',' + sLineBreak +
BillAddr.GetValue('City', '') + ', ' + BillAddr.GetValue('City', '') + ', ' +
BillAddr.GetValue('CountrySubDivisionCode', '') + ' ' + BillAddr.GetValue('CountrySubDivisionCode', '') + ' ' +
BillAddr.GetValue('PostalCode', '') BillAddr.GetValue('PostalCode', '')
) )
); );
end; end;
Result.AddElement(ParsedCustomer); // Handle Ship Address
except if Customer.GetValue('ShipAddr') is TJSONObject then
ParsedCustomer.Free; begin
raise; BillAddr := Customer.GetValue('ShipAddr') as TJSONObject;
ParsedCustomer.AddPair('ShipAddrLine1', TJSONString.Create(BillAddr.GetValue<string>('Line1', '')));
ParsedCustomer.AddPair('ShipAddrCity', TJSONString.Create(BillAddr.GetValue<string>('City', '')));
ParsedCustomer.AddPair('ShipAddrState', TJSONString.Create(BillAddr.GetValue<string>('CountrySubDivisionCode', '')));
ParsedCustomer.AddPair('ShipAddrZip', TJSONString.Create(BillAddr.GetValue<string>('PostalCode', '')));
ParsedCustomer.AddPair('ShipAddr',
TJSONString.Create(
Customer.GetValue<string>('DisplayName') + sLineBreak +
BillAddr.GetValue('Line1', '') + ',' + sLineBreak +
BillAddr.GetValue('City', '') + ', ' +
BillAddr.GetValue('CountrySubDivisionCode', '') + ' ' +
BillAddr.GetValue('PostalCode', '')
)
);
end; end;
end;
Result.AddElement(ParsedCustomer);
except
ParsedCustomer.Free;
raise;
end;
end; end;
finally finally
...@@ -2556,112 +2553,123 @@ var ...@@ -2556,112 +2553,123 @@ var
Pair: TJSONPair; Pair: TJSONPair;
Field: TField; Field: TField;
DateFormat: TFormatSettings; DateFormat: TFormatSettings;
CustomerID: integer; CustomerID: Integer;
mode: string; mode: string;
temp: string; temp: string;
msg: string; msg: string;
unique: boolean; QB_LIST_ID: string;
unique: Boolean;
begin begin
DateFormat := TFormatSettings.Create; DateFormat := TFormatSettings.Create;
DateFormat.ShortDateFormat := 'yyyy-mm-dd'; DateFormat.ShortDateFormat := 'yyyy-mm-dd';
DateFormat.DateSeparator := '-'; DateFormat.DateSeparator := '-';
JSONData := TJSONObject.ParseJSONValue(customerInfo) as TJSONObject;
JSONData := TJSONObject.ParseJSONValue(CustomerInfo) as TJSONObject;
if JSONData = nil then if JSONData = nil then
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception raise Exception.Create('Invalid JSON format');
mode := JSONData.GetValue<string>('mode'); mode := JSONData.GetValue<string>('mode');
QB_LIST_ID := JSONData.GetValue<string>('QB_LIST_ID');
if mode = 'ADD' then if mode = 'ADD' then
begin begin
// Update RevisionID // Update RevisionID
SQL := 'UPDATE idfield set KEYVALUE = KEYVALUE + 1 WHERE KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID'); SQL := 'UPDATE idfield SET KEYVALUE = KEYVALUE + 1 WHERE KEYNAME = ' + QuotedStr('GEN_CUSTOMER_ID');
OrdersDB.UniQuery1.SQL.Text := SQL; OrdersDB.UniQuery1.SQL.Text := SQL;
OrdersDB.UniQuery1.ExecSQL; OrdersDB.UniQuery1.ExecSQL;
// Retrieve updated RevisionID // Retrieve updated RevisionID
SQL := 'select KEYVALUE from idfield where KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID'); SQL := 'SELECT KEYVALUE FROM idfield WHERE KEYNAME = ' + QuotedStr('GEN_CUSTOMER_ID');
doQuery(OrdersDB.UniQuery1, SQL); doQuery(OrdersDB.UniQuery1, SQL);
CustomerID := OrdersDB.UniQuery1.FieldByName('KEYVALUE').AsInteger; CustomerID := OrdersDB.UniQuery1.FieldByName('KEYVALUE').AsInteger;
end
else
CustomerID := JSONData.GetValue<integer>('CUSTOMER_ID');
if mode = 'ADD' then
SQL := 'select * from customers where CUSTOMER_ID = 0 and CUSTOMER_ID <> 0'
else
begin
SQL := 'select * from customers where CUSTOMER_ID = ' + IntToStr(CustomerID);
end; end;
doQuery(ordersDB.UniQuery1, SQL);
try SQL := 'SELECT * FROM customers WHERE QB_LIST_ID = ' + QuotedStr(QB_LIST_ID);
if mode = 'ADD' then doQuery(OrdersDB.UniQuery1, SQL);
ordersDB.UniQuery1.Insert
else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do try
if OrdersDB.UniQuery1.IsEmpty then
begin begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset OrdersDB.UniQuery1.Insert;
if Assigned(Field) then
for Pair in JSONData do
begin begin
if (Field is TDateTimeField) then Field := OrdersDB.UniQuery1.FindField(Pair.JsonString.Value);
if Assigned(Field) then
begin begin
if (Pair.JsonValue.Value = '') or (Pair.JsonValue.Value = 'null') or (Pair.JsonValue.Value = '12/30/1899') then if Field is TDateTimeField then
Field.Clear // This sets the field to NULL (empty) begin
else if (Pair.JsonValue.Value = '') or (Pair.JsonValue.Value = 'null') or (Pair.JsonValue.Value = '12/30/1899') then
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value); Field.Clear
end else
else if Pair.JsonValue.Value <> '' then TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value, DateFormat);
Field.AsString := Pair.JsonValue.Value; end
else if Pair.JsonValue.Value <> '' then
Field.AsString := Pair.JsonValue.Value;
end;
end; end;
end;
ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger := CustomerID; OrdersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger := CustomerID;
JSONData.AddPair('customer_id', CustomerID); JSONData.AddPair('customer_id', TJSONNumber.Create(CustomerID));
// Post the record to the database OrdersDB.UniQuery1.Post;
ordersDB.UniQuery1.Post;
if mode = 'ADD' then
msg := 'Success:Customer Successfully Added'
else
msg := 'Success:Customer Successfully Edited';
if mode = 'ADD' then
msg := 'Success:Customer Successfully Added'
else
msg := 'Success:Customer Successfully Edited';
Result := TJSONObject.Create.AddPair('status', msg); Result := TJSONObject.Create;
Result.AddPair('CustomerID', CustomerID); Result.AddPair('status', msg);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); Result.AddPair('CustomerID', CustomerID);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
//Add Shipping Information // Add Shipping Information
SQL := 'select * from customers_ship where customer_id = 0 and customer_id <> 0';
doQuery(ordersDB.UniQuery1, SQL);
ordersDB.UniQuery1.Insert;
for Pair in JSONData do if JSONData.GetValue<string>('ship_block') <> '' then
begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset
if Assigned(Field) then
begin begin
if (Field is TDateTimeField) then SQL := 'SELECT * FROM customers_ship WHERE customer_id = 0 AND customer_id <> 0';
doQuery(OrdersDB.UniQuery1, SQL);
OrdersDB.UniQuery1.Insert;
for Pair in JSONData do
begin begin
if (Pair.JsonValue.Value = '') or (Pair.JsonValue.Value = 'null') or (Pair.JsonValue.Value = '12/30/1899') then Field := OrdersDB.UniQuery1.FindField(Pair.JsonString.Value);
Field.Clear // This sets the field to NULL (empty) if Assigned(Field) then
else begin
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value); if Field is TDateTimeField then
end begin
else if Pair.JsonValue.Value <> '' then if (Pair.JsonValue.Value = '') or (Pair.JsonValue.Value = 'null') or (Pair.JsonValue.Value = '12/30/1899') then
Field.AsString := Pair.JsonValue.Value; Field.Clear
else
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value, DateFormat);
end
else if Pair.JsonValue.Value <> '' then
Field.AsString := Pair.JsonValue.Value;
end;
end;
OrdersDB.UniQuery1.Post;
end; end;
end;
ordersDB.UniQuery1.Post;
except end
else
begin
msg := 'Failure:Customer Already in Database';
CustomerID := OrdersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger;
Result := TJSONObject.Create;
Result.AddPair('status', msg);
Result.AddPair('CustomerID', CustomerID);
end;
except
on E: Exception do on E: Exception do
begin begin
Result := TJSONObject.Create.AddPair('error', E.Message); Result := TJSONObject.Create;
end Result.AddPair('error', E.Message);
end;
end; end;
end; end;
initialization initialization
RegisterServiceType(TLookupService); RegisterServiceType(TLookupService);
end. end.
......
...@@ -11,6 +11,7 @@ object fQB: TfQB ...@@ -11,6 +11,7 @@ object fQB: TfQB
Font.Name = 'Segoe UI' Font.Name = 'Segoe UI'
Font.Style = [] Font.Style = []
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 15 TextHeight = 15
object Memo1: TMemo object Memo1: TMemo
Left = 0 Left = 0
...@@ -44,8 +45,8 @@ object fQB: TfQB ...@@ -44,8 +45,8 @@ object fQB: TfQB
TabOrder = 2 TabOrder = 2
end end
object Button2: TButton object Button2: TButton
Left = 148 Left = 135
Top = 18 Top = 22
Width = 87 Width = 87
Height = 25 Height = 25
Caption = 'Get Customers' Caption = 'Get Customers'
...@@ -197,8 +198,8 @@ object fQB: TfQB ...@@ -197,8 +198,8 @@ object fQB: TfQB
22) 22)
end end
object Button3: TButton object Button3: TButton
Left = 260 Left = 228
Top = 18 Top = 22
Width = 139 Width = 139
Height = 25 Height = 25
Caption = 'Get Customer By ID' Caption = 'Get Customer By ID'
...@@ -206,12 +207,351 @@ object fQB: TfQB ...@@ -206,12 +207,351 @@ object fQB: TfQB
OnClick = Button3Click OnClick = Button3Click
end end
object Button4: TButton object Button4: TButton
Left = 460 Left = 373
Top = 18 Top = 22
Width = 95 Width = 95
Height = 25 Height = 25
Caption = 'Add Estimate' Caption = 'Add Estimate'
TabOrder = 6 TabOrder = 6
OnClick = Button4Click OnClick = Button4Click
end end
object Button5: TButton
Left = 472
Top = 22
Width = 169
Height = 25
Caption = 'Show Customers with Orders'
TabOrder = 7
OnClick = Button5Click
end
object uq: TUniQuery
Connection = ApiDatabase.ucKG
SQL.Strings = (
'select * from web_plate_orders')
Left = 743
Top = 36
object uqORDER_ID: TIntegerField
FieldName = 'ORDER_ID'
Required = True
end
object uqCOMPANY_ID: TIntegerField
FieldName = 'COMPANY_ID'
Required = True
end
object uqUSER_ID: TIntegerField
FieldName = 'USER_ID'
Required = True
end
object uqORDER_DATE: TDateTimeField
FieldName = 'ORDER_DATE'
end
object uqSTART_DATE: TDateField
FieldName = 'START_DATE'
end
object uqEND_DATE: TDateField
FieldName = 'END_DATE'
end
object uqORDER_STATUS: TStringField
FieldName = 'ORDER_STATUS'
Size = 10
end
object uqSCHED_JSON: TStringField
FieldName = 'SCHED_JSON'
Size = 4096
end
object uqstaff_fields_order_date: TDateField
FieldName = 'staff_fields_order_date'
end
object uqstaff_fields_proof_date: TDateField
FieldName = 'staff_fields_proof_date'
end
object uqstaff_fields_ship_date: TDateField
FieldName = 'staff_fields_ship_date'
end
object uqstaff_fields_ship_via: TStringField
FieldName = 'staff_fields_ship_via'
Size = 45
end
object uqstaff_fields_price: TStringField
FieldName = 'staff_fields_price'
Size = 10
end
object uqstaff_fields_invoice_to: TStringField
FieldName = 'staff_fields_invoice_to'
Size = 128
end
object uqstaff_fields_invoice_attention: TStringField
FieldName = 'staff_fields_invoice_attention'
Size = 256
end
object uqstaff_fields_ship_to: TStringField
FieldName = 'staff_fields_ship_to'
Size = 128
end
object uqstaff_fields_ship_attention: TStringField
FieldName = 'staff_fields_ship_attention'
Size = 256
end
object uqstaff_fields_po_number: TStringField
FieldName = 'staff_fields_po_number'
Size = 16
end
object uqstaff_fields_job_name: TStringField
FieldName = 'staff_fields_job_name'
Size = 45
end
object uqstaff_fields_art_due: TDateField
FieldName = 'staff_fields_art_due'
end
object uqstaff_fields_plate_due: TDateField
FieldName = 'staff_fields_plate_due'
end
object uqplates_job_number: TStringField
FieldName = 'plates_job_number'
Size = 16
end
object uqsupplied_by_customer_b_w_or_co: TStringField
FieldName = 'supplied_by_customer_b_w_or_co'
Size = 4
end
object uqsupplied_by_customer_plates: TStringField
FieldName = 'supplied_by_customer_plates'
Size = 4
end
object uqsupplied_by_customer_sample: TStringField
FieldName = 'supplied_by_customer_sample'
Size = 45
end
object uqsupplied_by_customer_dimension: TStringField
FieldName = 'supplied_by_customer_dimension'
Size = 4
end
object uqsupplied_by_customer_other: TStringField
FieldName = 'supplied_by_customer_other'
Size = 45
end
object uqsupplied_by_customer_disk: TStringField
FieldName = 'supplied_by_customer_disk'
Size = 4
end
object uqsupplied_by_customer_e_mail: TStringField
FieldName = 'supplied_by_customer_e_mail'
Size = 128
end
object uqsupplied_by_customer_ftp: TStringField
FieldName = 'supplied_by_customer_ftp'
Size = 128
end
object uqplates_plate_material: TStringField
FieldName = 'plates_plate_material'
Size = 16
end
object uqplates_thickness: TStringField
FieldName = 'plates_thickness'
Size = 5
end
object uqsupplied_by_customer_total_inc: TStringField
FieldName = 'supplied_by_customer_total_inc'
Size = 32
end
object uqsupplied_by_customer_sheets_us: TStringField
FieldName = 'supplied_by_customer_sheets_us'
Size = 32
end
object uqsupplied_by_customer_initials: TStringField
FieldName = 'supplied_by_customer_initials'
Size = 16
end
object uqproofing_pdf: TStringField
FieldName = 'proofing_pdf'
Size = 1
end
object uqproofing_pdf_to: TStringField
FieldName = 'proofing_pdf_to'
Size = 256
end
object uqproofing_pdf_date_1: TDateField
FieldName = 'proofing_pdf_date_1'
end
object uqproofing_pdf_date_2: TDateField
FieldName = 'proofing_pdf_date_2'
end
object uqproofing_pdf_date_3: TDateField
FieldName = 'proofing_pdf_date_3'
end
object uqproofing_full_size_ink_jet_for: TStringField
FieldName = 'proofing_full_size_ink_jet_for'
Size = 1
end
object uqproofing_ink_jet_to: TStringField
FieldName = 'proofing_ink_jet_to'
Size = 256
end
object uqproofing_ink_jet_to_2: TStringField
FieldName = 'proofing_ink_jet_to_2'
Size = 256
end
object uqproofing_ink_jet_date_1: TDateField
FieldName = 'proofing_ink_jet_date_1'
end
object uqproofing_ink_jet_date_2: TDateField
FieldName = 'proofing_ink_jet_date_2'
end
object uqproofing_ink_jet_date_3: TDateField
FieldName = 'proofing_ink_jet_date_3'
end
object uqproofing_color_contract: TStringField
FieldName = 'proofing_color_contract'
Size = 17
end
object uqproofing_color_contrac_to: TStringField
FieldName = 'proofing_color_contrac_to'
Size = 256
end
object uqproofing_color_contrac_date_1: TDateField
FieldName = 'proofing_color_contrac_date_1'
end
object uqproofing_color_contrac_date_2: TDateField
FieldName = 'proofing_color_contrac_date_2'
end
object uqproofing_digital_color_key: TStringField
FieldName = 'proofing_digital_color_key'
Size = 10
end
object uqproofing_digital_color_to: TStringField
FieldName = 'proofing_digital_color_to'
Size = 256
end
object uqproofing_digital_color_date_1: TDateField
FieldName = 'proofing_digital_color_date_1'
end
object uqquantity_and_colors_press_name: TStringField
FieldName = 'quantity_and_colors_press_name'
Size = 64
end
object uqquantity_and_colors_anilox_info: TStringField
FieldName = 'quantity_and_colors_anilox_info'
Size = 64
end
object uqplate_marks_microdots: TStringField
FieldName = 'plate_marks_microdots'
Size = 10
end
object uqplate_marks_microdots_comments: TStringField
FieldName = 'plate_marks_microdots_comments'
Size = 128
end
object uqplate_marks_crosshairs: TStringField
FieldName = 'plate_marks_crosshairs'
Size = 10
end
object uqplate_marks_crosshairs_comments: TStringField
FieldName = 'plate_marks_crosshairs_comments'
Size = 128
end
object uqplate_marks_color_bars: TStringField
FieldName = 'plate_marks_color_bars'
Size = 10
end
object uqplate_marks_color_bars_comments: TStringField
FieldName = 'plate_marks_color_bars_comments'
Size = 128
end
object uqplate_marks_other: TStringField
FieldName = 'plate_marks_other'
Size = 16
end
object uqplate_marks_other_comments: TStringField
FieldName = 'plate_marks_other_comments'
Size = 128
end
object uqprint_orientation_print_orient: TStringField
FieldName = 'print_orientation_print_orient'
Size = 10
end
object uqlayout_around: TStringField
FieldName = 'layout_around'
Size = 10
end
object uqlayout_accross: TStringField
FieldName = 'layout_accross'
Size = 10
end
object uqlayout_surface_print: TStringField
FieldName = 'layout_surface_print'
Size = 10
end
object uqlayout_reverse_print: TStringField
FieldName = 'layout_reverse_print'
Size = 10
end
object uqlayout_cylinder_repeat: TStringField
FieldName = 'layout_cylinder_repeat'
Size = 16
end
object uqlayout_cutoff_dimension: TStringField
FieldName = 'layout_cutoff_dimension'
Size = 16
end
object uqlayout_pitch: TStringField
FieldName = 'layout_pitch'
Size = 16
end
object uqlayout_teeth: TStringField
FieldName = 'layout_teeth'
Size = 16
end
object uqlayout_bleed: TStringField
FieldName = 'layout_bleed'
Size = 16
end
object uqlayout_cutback: TStringField
FieldName = 'layout_cutback'
Size = 16
end
object uqlayout_minimum_trap_dim: TStringField
FieldName = 'layout_minimum_trap_dim'
Size = 10
end
object uqlayout_maximum_trap_dim: TStringField
FieldName = 'layout_maximum_trap_dim'
Size = 10
end
object uqupc_size: TStringField
FieldName = 'upc_size'
Size = 16
end
object uqupc_bar_width_reduction: TStringField
FieldName = 'upc_bar_width_reduction'
Size = 16
end
object uqquantity_and_colors_qty_colors: TStringField
FieldName = 'quantity_and_colors_qty_colors'
Size = 4096
end
object uqgeneral_comments: TStringField
FieldName = 'general_comments'
Size = 4096
end
object uqstaff_fields_quickbooks_item: TStringField
FieldName = 'staff_fields_quickbooks_item'
Size = 45
end
object uqstaff_fields_quantity: TStringField
FieldName = 'staff_fields_quantity'
Size = 10
end
object uqupc_distortion_percent: TStringField
FieldName = 'upc_distortion_percent'
Size = 16
end
object uqupc_distortion_amount: TStringField
FieldName = 'upc_distortion_amount'
Size = 16
end
object uqstaff_fields_art_location: TStringField
FieldName = 'staff_fields_art_location'
Size = 16
end
end
end end
...@@ -23,13 +23,104 @@ type ...@@ -23,13 +23,104 @@ type
asgData: TAdvStringGrid; asgData: TAdvStringGrid;
Button3: TButton; Button3: TButton;
Button4: TButton; Button4: TButton;
Button5: TButton;
uq: TUniQuery;
uqORDER_ID: TIntegerField;
uqCOMPANY_ID: TIntegerField;
uqUSER_ID: TIntegerField;
uqORDER_DATE: TDateTimeField;
uqSTART_DATE: TDateField;
uqEND_DATE: TDateField;
uqORDER_STATUS: TStringField;
uqSCHED_JSON: TStringField;
uqstaff_fields_order_date: TDateField;
uqstaff_fields_proof_date: TDateField;
uqstaff_fields_ship_date: TDateField;
uqstaff_fields_ship_via: TStringField;
uqstaff_fields_price: TStringField;
uqstaff_fields_invoice_to: TStringField;
uqstaff_fields_invoice_attention: TStringField;
uqstaff_fields_ship_to: TStringField;
uqstaff_fields_ship_attention: TStringField;
uqstaff_fields_po_number: TStringField;
uqstaff_fields_job_name: TStringField;
uqstaff_fields_art_due: TDateField;
uqstaff_fields_plate_due: TDateField;
uqplates_job_number: TStringField;
uqsupplied_by_customer_b_w_or_co: TStringField;
uqsupplied_by_customer_plates: TStringField;
uqsupplied_by_customer_sample: TStringField;
uqsupplied_by_customer_dimension: TStringField;
uqsupplied_by_customer_other: TStringField;
uqsupplied_by_customer_disk: TStringField;
uqsupplied_by_customer_e_mail: TStringField;
uqsupplied_by_customer_ftp: TStringField;
uqplates_plate_material: TStringField;
uqplates_thickness: TStringField;
uqsupplied_by_customer_total_inc: TStringField;
uqsupplied_by_customer_sheets_us: TStringField;
uqsupplied_by_customer_initials: TStringField;
uqproofing_pdf: TStringField;
uqproofing_pdf_to: TStringField;
uqproofing_pdf_date_1: TDateField;
uqproofing_pdf_date_2: TDateField;
uqproofing_pdf_date_3: TDateField;
uqproofing_full_size_ink_jet_for: TStringField;
uqproofing_ink_jet_to: TStringField;
uqproofing_ink_jet_to_2: TStringField;
uqproofing_ink_jet_date_1: TDateField;
uqproofing_ink_jet_date_2: TDateField;
uqproofing_ink_jet_date_3: TDateField;
uqproofing_color_contract: TStringField;
uqproofing_color_contrac_to: TStringField;
uqproofing_color_contrac_date_1: TDateField;
uqproofing_color_contrac_date_2: TDateField;
uqproofing_digital_color_key: TStringField;
uqproofing_digital_color_to: TStringField;
uqproofing_digital_color_date_1: TDateField;
uqquantity_and_colors_press_name: TStringField;
uqquantity_and_colors_anilox_info: TStringField;
uqplate_marks_microdots: TStringField;
uqplate_marks_microdots_comments: TStringField;
uqplate_marks_crosshairs: TStringField;
uqplate_marks_crosshairs_comments: TStringField;
uqplate_marks_color_bars: TStringField;
uqplate_marks_color_bars_comments: TStringField;
uqplate_marks_other: TStringField;
uqplate_marks_other_comments: TStringField;
uqprint_orientation_print_orient: TStringField;
uqlayout_around: TStringField;
uqlayout_accross: TStringField;
uqlayout_surface_print: TStringField;
uqlayout_reverse_print: TStringField;
uqlayout_cylinder_repeat: TStringField;
uqlayout_cutoff_dimension: TStringField;
uqlayout_pitch: TStringField;
uqlayout_teeth: TStringField;
uqlayout_bleed: TStringField;
uqlayout_cutback: TStringField;
uqlayout_minimum_trap_dim: TStringField;
uqlayout_maximum_trap_dim: TStringField;
uqupc_size: TStringField;
uqupc_bar_width_reduction: TStringField;
uqquantity_and_colors_qty_colors: TStringField;
uqgeneral_comments: TStringField;
uqstaff_fields_quickbooks_item: TStringField;
uqstaff_fields_quantity: TStringField;
uqupc_distortion_percent: TStringField;
uqupc_distortion_amount: TStringField;
uqstaff_fields_art_location: TStringField;
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject); procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject); procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject); procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private private
{ Private declarations } { Private declarations }
strict private
ordersDB: TApiDatabase;
httpReqTokenRefresh: TWebHttpRequest; httpReqTokenRefresh: TWebHttpRequest;
var var
...@@ -51,7 +142,7 @@ var ...@@ -51,7 +142,7 @@ var
implementation implementation
uses uses
Common.Logging; Common.Logging, uLibrary;
{$R *.dfm} {$R *.dfm}
...@@ -130,13 +221,13 @@ begin ...@@ -130,13 +221,13 @@ begin
restRequest.Execute; restRequest.Execute;
memo1.Lines.Add(restresponse.Content); //memo1.Lines.Add(restresponse.Content);
jsValue := restResponse.JSONValue; jsValue := restResponse.JSONValue;
jsObj := TJSONObject(jsValue); jsObj := TJSONObject(jsValue);
Memo2.Lines.Add(res); //Memo2.Lines.Add(res);
Memo2.Lines.Add( jsObj.Format(2) ); Memo1.Lines.Add( jsObj.Format(2) );
// CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ; // CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ;
...@@ -190,13 +281,13 @@ begin ...@@ -190,13 +281,13 @@ begin
restRequest.Execute; restRequest.Execute;
memo1.Lines.Add(restresponse.Content); //memo1.Lines.Add(restresponse.Content);
jsValue := restResponse.JSONValue; jsValue := restResponse.JSONValue;
jsObj := TJSONObject(jsValue); jsObj := TJSONObject(jsValue);
Memo2.Lines.Add(res); //Memo2.Lines.Add(res);
Memo2.Lines.Add( jsObj.Format(2) ); Memo1.Lines.Add( jsObj.Format(2) );
//CustomerList := TJSONArray(restResponse.JSONValue); //CustomerList := TJSONArray(restResponse.JSONValue);
// CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ; // CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ;
...@@ -208,6 +299,27 @@ begin ...@@ -208,6 +299,27 @@ begin
restResponse.Free; restResponse.Free;
end; end;
procedure TfQB.Button5Click(Sender: TObject);
var
SQL: string;
count: integer;
begin
SQL := 'SELECT c.CUSTOMER_ID, c.SHORT_NAME, c.NAME FROM customers c ' +
'WHERE EXISTS (SELECT 1 FROM corrugated_plate_orders cpo WHERE cpo.COMPANY_ID = c.CUSTOMER_ID) '+
'OR EXISTS (SELECT 1 FROM web_plate_orders wpo WHERE wpo.COMPANY_ID = c.CUSTOMER_ID) ORDER BY c.SHORT_NAME';
doQuery(ordersDB.UniQuery1, SQL);
while not ordersDB.UniQuery1.Eof do
begin
Memo2.Lines.Add(ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsString + ', ' + ordersDB.UniQuery1.FieldByName('SHORT_NAME').AsString + ', ' + ordersDB.UniQuery1.FieldByName('NAME').AsString);
OrdersDB.UniQuery1.Next;
count := count + 1;
end;
Memo2.Lines.Add('Showing ' + IntToStr(count) + ' entries');
end;
procedure TfQB.getCustomers(); procedure TfQB.getCustomers();
var var
restClient: TRESTClient; restClient: TRESTClient;
...@@ -260,43 +372,13 @@ begin ...@@ -260,43 +372,13 @@ begin
jsValue := restResponse.JSONValue; jsValue := restResponse.JSONValue;
jsObj := TJSONObject(jsValue); jsObj := TJSONObject(jsValue);
{Memo2.Lines.Add(res); Memo2.Lines.Add(res);
Memo2.Lines.Add( jsObj.Format(2) ); } Memo2.Lines.Add( jsObj.Format(2) );
//CustomerList := TJSONArray(restResponse.JSONValue); //CustomerList := TJSONArray(restResponse.JSONValue);
CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ; CustomerList := TJSONArray( TJSONObject( jsObj.GetValue('QueryResponse') ).GetValue('Customer')) ;
ModifiedList := TJSONArray.Create; LoadJSONArray( CustomerList );
for I := 0 to CustomerList.Count - 1 do
begin
Customer := CustomerList.Items[I] as TJSONObject;
ParsedCustomer := TJSONObject.Create;
try
// Directly add values without cloning
ParsedCustomer.AddPair('id', Customer.GetValue('Id'));
ParsedCustomer.AddPair('name', Customer.GetValue('DisplayName'));
if Customer.GetValue('BillAddr') <> nil then
begin
BillAddr := Customer.GetValue('BillAddr') as TJSONObject;
ParsedCustomer.AddPair('BillAddr_line1', BillAddr.GetValue('Line1', ''));
ParsedCustomer.AddPair('BillAddr_City', BillAddr.GetValue('City', ''));
ParsedCustomer.AddPair('BillAddr_State', BillAddr.GetValue('CountrySubDivisionCode', ''));
ParsedCustomer.AddPair('BillAddr_Zip', BillAddr.GetValue('PostalCode', ''));
ParsedCustomer.AddPair('BillAddr', BillAddr.GetValue('Line1', '') + ', '
+ BillAddr.GetValue('City', '') + ', '
+ BillAddr.GetValue('CountrySubDivisionCode', '') + ' '
+ BillAddr.GetValue('PostalCode', '') );
end;
except
ParsedCustomer.Free;
raise;
end;
end;
LoadJSONArray( ModifiedList );
restClient.Free; restClient.Free;
restRequest.Free; restRequest.Free;
...@@ -326,6 +408,8 @@ procedure TfQB.FormCreate(Sender: TObject); ...@@ -326,6 +408,8 @@ procedure TfQB.FormCreate(Sender: TObject);
var var
iniFile: TIniFile; iniFile: TIniFile;
begin begin
inherited;
ordersDB := TApiDatabase.Create(nil);
iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'kgOrdersServer.ini' ); iniFile := TIniFile.Create( ExtractFilePath(Application.ExeName) + 'kgOrdersServer.ini' );
Client := iniFile.ReadString('Quickbooks', 'ClientID', ''); Client := iniFile.ReadString('Quickbooks', 'ClientID', '');
Secret := iniFile.ReadString('Quickbooks', 'ClientSecret', ''); Secret := iniFile.ReadString('Quickbooks', 'ClientSecret', '');
...@@ -333,6 +417,12 @@ begin ...@@ -333,6 +417,12 @@ begin
RefreshToken := iniFile.ReadString('Quickbooks', 'RefreshToken', ''); RefreshToken := iniFile.ReadString('Quickbooks', 'RefreshToken', '');
end; end;
procedure TfQB.FormDestroy(Sender: TObject);
begin
ordersDB.Free;
inherited;
end;
function TfQB.RefreshAccessToken: string; function TfQB.RefreshAccessToken: string;
// Refresh Token changes so make sure to save refresh token. // Refresh Token changes so make sure to save refresh token.
var var
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
MemoLogLevel=3 MemoLogLevel=3
FileLogLevel=5 FileLogLevel=5
webClientVersion=0.9.2 webClientVersion=0.9.2
LogFileNum=596 LogFileNum=621
[Database] [Database]
Server=192.168.159.131 Server=192.168.159.131
...@@ -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-208-H0-17567544350xgx6z1cqtacxchwp91p RefreshToken=RT1-113-H0-1757255538seyqgsf5e04vo9schkoa
AccessToken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwieC5vcmciOiJIMCJ9..7j1C_IbyEFT7N_dCC4YUMg.PgS3pkfr9Ze_N2m-D-GlXCZOHoAcCyN0Oym1nJpozlVqoMmEr340Oc8Qr3mcvWVyv1OxWx0kiVJMPWZ-gHazOP80IypMLc7e9HZPYm0qYbwex_9JGIfZq0vQX1Y6oJQSTM9h-v_oGIN_5b7hFMLzVPCPLwXMcimXLqaXEN9b-AGX2La-FeahLDz6MmrGL-HoYB-4ZintdaxWE4NYXEg71HgecTrfkxbNlJQBziGQgnXVPmwuyqI0gJKGIL1w3X651nGcZMB_nuY0y__BPH2zOnzuibqGylOwr9ZuFXobkjgvtqllRE0JgMbCD28FArwnA_-BGsz_g6fueCvsI3ewd61tmTLyvW1IWoOoowKd5bicHQPal34KO16wORmM5_RzjCO522w_n94m9gK6JYQbS3Kn-8omnDIBZjwSBnz4mCXm-CTpexrLJRgk5h1f-lx3Ow1d9A_91qriqwNkKln35nUO4ivNvmIkDvqYMaPVXAs.LVOKao4eo0CZQ8sSO9nHoA AccessToken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwieC5vcmciOiJIMCJ9..Cqnj0xScf85NYKa6g4lanA.LN1AIU3ZlnDDbIMt-J4vl8V_gvcTfynSjGKYsmbhbfBJovq5IfZU4dHt6cqDAwUfnfOm42l-OpbwN9hWrZvUGlVx8x_3MA-vdtxIOByp7neq5vL2t4XcR5svPKIkX-CqlTsTb2ylBARiXehgk3tVHBysbHcnp0Ka0Ic_Waj64wQMYvE3Z-D19gCu-Xn9WFQwDICn8HSgJmHL2huLvRX-OrcxH6uERzLcQqRLsgT7fx9j68UWDW-KL_KRnzE43ieXlxXCwiCDnaF39Ei5iPHstnh19lGMgo1Z1mlF6tVZ9-8Z1prZutpiX8rzaPzS7Wdqo8pKtYaUqQZP6AGa6ZCqWR2BlF3y-R_FtheERNpafRiXWIDW68jOOrgp8QXc1uKA0sxDMjiLE7Bd0t9QAsIzln-0WiWIXFSlLGLimMd2oxxLoR7fpQvgB851I50b4S3V-c891WA8bHfuzScmjVwp40JxofhviFXwAevLNzRYvGkvIyz4oS9d6U6K_ZWKDB3iYxEgJzkFFwnfuPybWX7iNHwnmvFfAXz61jdaL9KRJM-lCChGuaQuv8_df9z_az_sbUtXJw2I8ivEppmDEQVxv49ZwzJlb6bFbqtnhy6ILO7_ecx3G1d4Utg-BrtgvzsR.oFJV6VBShL1-cERGZEqqkw
LastRefresh=5/23/2025 3:20:36 PM LastRefresh=5/28/2025 10:46:30 AM
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