Commit 9824e397 by Cam Hayes

Changed EditUser form, fixed memory leak issues, and fixed issue with database…

Changed EditUser form, fixed memory leak issues, and fixed issue with database files crashing on create
parent 59c3c0cc
...@@ -3,8 +3,8 @@ object FViewEditUser: TFViewEditUser ...@@ -3,8 +3,8 @@ object FViewEditUser: TFViewEditUser
Height = 480 Height = 480
OnShow = WebFormCreate OnShow = WebFormCreate
object WebLabel2: TWebLabel object WebLabel2: TWebLabel
Left = 16 Left = 33
Top = 8 Top = 33
Width = 57 Width = 57
Height = 15 Height = 15
Caption = 'Full Name:' Caption = 'Full Name:'
...@@ -14,8 +14,8 @@ object FViewEditUser: TFViewEditUser ...@@ -14,8 +14,8 @@ object FViewEditUser: TFViewEditUser
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel3: TWebLabel object WebLabel3: TWebLabel
Left = 14 Left = 283
Top = 37 Top = 8
Width = 53 Width = 53
Height = 15 Height = 15
Caption = 'Password:' Caption = 'Password:'
...@@ -25,7 +25,7 @@ object FViewEditUser: TFViewEditUser ...@@ -25,7 +25,7 @@ object FViewEditUser: TFViewEditUser
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel5: TWebLabel object WebLabel5: TWebLabel
Left = 280 Left = 34
Top = 8 Top = 8
Width = 56 Width = 56
Height = 15 Height = 15
...@@ -35,19 +35,8 @@ object FViewEditUser: TFViewEditUser ...@@ -35,19 +35,8 @@ object FViewEditUser: TFViewEditUser
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object WebLabel6: TWebLabel
Left = 236
Top = 37
Width = 100
Height = 15
Caption = 'Confirm Password:'
Color = clBtnFace
ElementID = 'lblconfirm'
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
end
object WebLabel7: TWebLabel object WebLabel7: TWebLabel
Left = 35 Left = 58
Top = 62 Top = 62
Width = 32 Width = 32
Height = 15 Height = 15
...@@ -58,8 +47,8 @@ object FViewEditUser: TFViewEditUser ...@@ -58,8 +47,8 @@ object FViewEditUser: TFViewEditUser
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object lblactive: TWebLabel object lblactive: TWebLabel
Left = 45 Left = 298
Top = 163 Top = 36
Width = 38 Width = 38
Height = 15 Height = 15
Caption = 'Active?' Caption = 'Active?'
...@@ -99,17 +88,6 @@ object FViewEditUser: TFViewEditUser ...@@ -99,17 +88,6 @@ object FViewEditUser: TFViewEditUser
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object edtConfirmPassword: TWebEdit
Left = 346
Top = 34
Width = 121
Height = 22
ChildOrder = 7
ElementID = 'edtconfirmpassword'
HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000
OnChange = edtConfirmPasswordChange
end
object edtEmail: TWebEdit object edtEmail: TWebEdit
Left = 96 Left = 96
Top = 62 Top = 62
...@@ -129,7 +107,6 @@ object FViewEditUser: TFViewEditUser ...@@ -129,7 +107,6 @@ object FViewEditUser: TFViewEditUser
ElementID = 'edtpassword' ElementID = 'edtpassword'
HeightPercent = 100.000000000000000000 HeightPercent = 100.000000000000000000
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
OnChange = edtPasswordChange
end end
object btnConfirm: TWebButton object btnConfirm: TWebButton
Left = 96 Left = 96
...@@ -151,8 +128,8 @@ object FViewEditUser: TFViewEditUser ...@@ -151,8 +128,8 @@ object FViewEditUser: TFViewEditUser
OnClick = btnConfirmClick OnClick = btnConfirmClick
end end
object edtFullname: TWebEdit object edtFullname: TWebEdit
Left = 96 Left = 346
Top = 4 Top = 5
Width = 121 Width = 121
Height = 22 Height = 22
ChildOrder = 14 ChildOrder = 14
...@@ -161,8 +138,8 @@ object FViewEditUser: TFViewEditUser ...@@ -161,8 +138,8 @@ object FViewEditUser: TFViewEditUser
WidthPercent = 100.000000000000000000 WidthPercent = 100.000000000000000000
end end
object edtUsername: TWebEdit object edtUsername: TWebEdit
Left = 346 Left = 96
Top = 4 Top = 6
Width = 121 Width = 121
Height = 22 Height = 22
ChildOrder = 14 ChildOrder = 14
...@@ -190,8 +167,8 @@ object FViewEditUser: TFViewEditUser ...@@ -190,8 +167,8 @@ object FViewEditUser: TFViewEditUser
OnClick = btnCancelClick OnClick = btnCancelClick
end end
object cbStatus: TWebCheckBox object cbStatus: TWebCheckBox
Left = 96 Left = 346
Top = 162 Top = 33
Width = 107 Width = 107
Height = 20 Height = 20
Caption = 'Active?' Caption = 'Active?'
......
...@@ -6,12 +6,6 @@ ...@@ -6,12 +6,6 @@
<form id="edituserform" class="row g-3 needs-validation" novalidate> <form id="edituserform" class="row g-3 needs-validation" novalidate>
<div class="col-md-6"> <div class="col-md-6">
<label id="lblfullname" for="edtfullname" class="form-label">Full&nbsp;Name</label>
<input id="edtfullname" class="form-control" required>
<div class="invalid-feedback">Full Name is required.</div>
</div>
<div class="col-md-6">
<label id="lblusername" for="edtusername" class="form-label">Username</label> <label id="lblusername" for="edtusername" class="form-label">Username</label>
<input id="edtusername" class="form-control" required> <input id="edtusername" class="form-control" required>
<div class="invalid-feedback">Username is required.</div> <div class="invalid-feedback">Username is required.</div>
...@@ -20,19 +14,26 @@ ...@@ -20,19 +14,26 @@
<div class="col-md-6"> <div class="col-md-6">
<label id="lblpassword" for="edtpassword" class="form-label">Password</label> <label id="lblpassword" for="edtpassword" class="form-label">Password</label>
<input id="edtpassword" type="password" class="form-control" required> <input id="edtpassword" type="password" class="form-control" required>
<div class="invalid-feedback">Passwords must match.</div> <div class="invalid-feedback">Passwords is required.</div>
</div>
<div class="col-md-6">
<label id="lblfullname" for="edtfullname" class="form-label">Full&nbsp;Name</label>
<input id="edtfullname" class="form-control" required>
<div class="invalid-feedback">Full Name is required.</div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label id="lblconfirm" for="edtconfirmpassword" class="form-label">Confirm&nbsp;Password</label> <label id="lblactive" for="cbstatus" class="form-label">Active</label>
<input id="edtconfirmpassword" type="password" class="form-control" required disabled> <div class="form-check mt-1">
<div class="invalid-feedback">Passwords must match.</div> <input id="cbstatus" class="form-check-input" type="checkbox" style="width: 1.5em; height: 1.5em;">
</div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label id="lblemail" for="edtemail" class="form-label">Email&nbsp;Address</label> <label id="lblemail" for="edtemail" class="form-label">Email&nbsp;Address</label>
<input id="edtemail" type="email" class="form-control" required> <input id="edtemail" type="email" class="form-control">
<div class="invalid-feedback">Valid email is required.</div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
...@@ -47,19 +48,8 @@ ...@@ -47,19 +48,8 @@
<div class="col-md-6"> <div class="col-md-6">
<label id="lblaccess" for="cbaccess" class="form-label">Access&nbsp;Type</label> <label id="lblaccess" for="cbaccess" class="form-label">Access&nbsp;Type</label>
<select id="cbaccess" class="form-select" required> <select id="cbaccess" class="form-select">
<option selected disabled value="">Choose...</option>
<option value="ALL">All</option>
<option value="LIMITED">Limited</option>
</select> </select>
<div class="invalid-feedback">Please select an access type.</div>
</div>
<div class="col-md-6">
<div class="form-check pt-2">
<input id="cbstatus" class="form-check-input" type="checkbox">
<label id="lblactive" for="cbstatus" class="form-check-label">Active</label>
</div>
</div> </div>
<div class="d-flex gap-2 mt-4"> <div class="d-flex gap-2 mt-4">
......
...@@ -15,9 +15,7 @@ type ...@@ -15,9 +15,7 @@ type
WebLabel2: TWebLabel; WebLabel2: TWebLabel;
WebLabel3: TWebLabel; WebLabel3: TWebLabel;
WebLabel5: TWebLabel; WebLabel5: TWebLabel;
WebLabel6: TWebLabel;
WebLabel7: TWebLabel; WebLabel7: TWebLabel;
edtConfirmPassword: TWebEdit;
edtEmail: TWebEdit; edtEmail: TWebEdit;
edtPassword: TWebEdit; edtPassword: TWebEdit;
btnConfirm: TWebButton; btnConfirm: TWebButton;
...@@ -38,8 +36,6 @@ type ...@@ -38,8 +36,6 @@ type
procedure btnConfirmClick(Sender: TObject); procedure btnConfirmClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject); procedure btnCancelClick(Sender: TObject);
procedure WebTimer1Timer(Sender: TObject); procedure WebTimer1Timer(Sender: TObject);
procedure edtPasswordChange(Sender: TObject);
procedure edtConfirmPasswordChange(Sender: TObject);
private private
{ Private declarations } { Private declarations }
FMessage: string; FMessage: string;
...@@ -54,7 +50,6 @@ type ...@@ -54,7 +50,6 @@ type
QB: string; QB: string;
[async] procedure EditUser(); [async] procedure EditUser();
[async] function AddUser(): string; [async] function AddUser(): string;
procedure ValidatePasswords;
public public
{ Public declarations } { Public declarations }
Info: string; Info: string;
...@@ -138,16 +133,6 @@ begin ...@@ -138,16 +133,6 @@ begin
end; end;
procedure TFViewEditUser.edtConfirmPasswordChange(Sender: TObject);
begin
ValidatePasswords;
end;
procedure TFViewEditUser.edtPasswordChange(Sender: TObject);
begin
ValidatePasswords;
end;
class function TFViewEditUser.CreateForm(AElementID, Mode, Username, Password, Name, Status, Email, class function TFViewEditUser.CreateForm(AElementID, Mode, Username, Password, Name, Status, Email,
Access, Rights, QB: string): TWebForm; Access, Rights, QB: string): TWebForm;
// Autofills known information about a user on create // Autofills known information about a user on create
...@@ -180,7 +165,6 @@ begin ...@@ -180,7 +165,6 @@ begin
if Mode = 'Edit' then if Mode = 'Edit' then
begin begin
edtPassword.Text := 'hidden'; edtPassword.Text := 'hidden';
edtConfirmPassword.Text := 'hidden';
end; end;
edtEmail.Text := Email; edtEmail.Text := Email;
cbAccess.Text := Access; cbAccess.Text := Access;
...@@ -226,52 +210,4 @@ begin ...@@ -226,52 +210,4 @@ begin
WebTimer1.Enabled := True; WebTimer1.Enabled := True;
end; end;
procedure TFViewEditUser.ValidatePasswords;
var
Pwd, Confirm: string;
PwdInput, ConfirmInput: TJSHTMLInputElement;
begin
PwdInput := TJSHTMLInputElement(edtPassword.ElementHandle);
ConfirmInput := TJSHTMLInputElement(edtConfirmPassword.ElementHandle);
Pwd := PwdInput.value.Trim;
Confirm := ConfirmInput.value.Trim;
// Disable confirm until password exists
if Pwd = '' then
begin
ConfirmInput.disabled := True;
ConfirmInput.value := '';
ConfirmInput.setCustomValidity('');
ConfirmInput.classList.remove('is-invalid');
ConfirmInput.classList.remove('is-valid');
end
else
begin
ConfirmInput.disabled := False;
// Live match check
if Confirm = '' then
begin
ConfirmInput.setCustomValidity('');
ConfirmInput.classList.remove('is-invalid');
ConfirmInput.classList.remove('is-valid');
end
else if Confirm = Pwd then
begin
ConfirmInput.setCustomValidity('');
ConfirmInput.classList.add('is-valid');
ConfirmInput.classList.remove('is-invalid');
end
else
begin
ConfirmInput.setCustomValidity('Passwords must match');
ConfirmInput.classList.add('is-invalid');
ConfirmInput.classList.remove('is-valid');
end;
end;
end;
end. end.
...@@ -6,8 +6,6 @@ object ApiDatabase: TApiDatabase ...@@ -6,8 +6,6 @@ object ApiDatabase: TApiDatabase
ProviderName = 'MySQL' ProviderName = 'MySQL'
Database = 'kg_order_entry' Database = 'kg_order_entry'
Username = 'root' Username = 'root'
Server = '192.168.159.10'
Connected = True
LoginPrompt = False LoginPrompt = False
Left = 75 Left = 75
Top = 65 Top = 65
......
...@@ -55,7 +55,15 @@ uses ...@@ -55,7 +55,15 @@ uses
procedure TAuthService.AfterConstruction; procedure TAuthService.AfterConstruction;
begin begin
inherited; inherited;
authDB := TAuthDatabase.Create(nil); try
authDB := TAuthDatabase.Create(nil);
except
on E: Exception do
begin
Logger.Log(1, 'Error when creating the Auth database: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to create Auth database: A KGOrders Server Error has occured!');
end;
end;
end; end;
procedure TAuthService.BeforeDestruction; procedure TAuthService.BeforeDestruction;
...@@ -130,8 +138,10 @@ begin ...@@ -130,8 +138,10 @@ begin
logger.Log(2, 'Login Error: User does not exist!'); logger.Log(2, 'Login Error: User does not exist!');
end end
else if userState = 2 then else if userState = 2 then
begin
raise EXDataHttpUnauthorized.Create('User not active!'); raise EXDataHttpUnauthorized.Create('User not active!');
logger.Log(2, 'Login Error: User not active!'); logger.Log(2, 'Login Error: User not active!');
end;
iniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); iniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
......
...@@ -339,13 +339,22 @@ begin ...@@ -339,13 +339,22 @@ begin
restClient.Free; restClient.Free;
restRequest.Free; restRequest.Free;
restResponse.Free; restResponse.Free;
estimateJSON.Free;
end; end;
end; end;
procedure TLookupService.AfterConstruction; procedure TLookupService.AfterConstruction;
begin begin
inherited; inherited;
ordersDB := TApiDatabase.Create(nil); try
ordersDB := TApiDatabase.Create(nil);
except
on E: Exception do
begin
Logger.Log(1, 'Error when creating the API database: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to create API database: A KGOrders Server Error has occured!');
end;
end;
end; end;
procedure TLookupService.BeforeDestruction; procedure TLookupService.BeforeDestruction;
...@@ -400,62 +409,66 @@ var ...@@ -400,62 +409,66 @@ var
begin begin
logger.Log(3, 'TLookupService.GetCustomers'); logger.Log(3, 'TLookupService.GetCustomers');
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true; try
params.Delimiter := '&'; params.StrictDelimiter := true;
params.DelimitedText := customerInfo; params.Delimiter := '&';
PageSize := 0; params.DelimitedText := customerInfo;
PageNum := 0; PageSize := 0;
PageNum := 0;
if (params.Values['pagenumber'] <> '') then if (params.Values['pagenumber'] <> '') then
PageNum := StrToInt(params.Values['pagenumber']); PageNum := StrToInt(params.Values['pagenumber']);
if params.Values['pagesize'] <> '' then if params.Values['pagesize'] <> '' then
PageSize := StrToInt(params.Values['pagesize']); PageSize := StrToInt(params.Values['pagesize']);
if ( ( PageSize <> 0 ) and (PageNum <> 0 ) ) then if ( ( PageSize <> 0 ) and (PageNum <> 0 ) ) then
begin begin
offset := IntToStr((PageNum - 1) * PageSize); offset := IntToStr((PageNum - 1) * PageSize);
limit := IntToStr(PageSize); limit := IntToStr(PageSize);
limitSQL := ' limit ' + limit + ' offset ' + offset; limitSQL := ' limit ' + limit + ' offset ' + offset;
end; end;
try try
SQL := 'select * from customers' + limitSQL; SQL := 'select * from customers' + limitSQL;
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
result := TCustomerList.Create; result := TCustomerList.Create;
Result.data := TList<TCustomerItem>.Create; Result.data := TList<TCustomerItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result.data);
result.count := 0; result.count := 0;
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
customer := TCustomerItem.Create; customer := TCustomerItem.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add(customer); TXDataOperationContext.Current.Handler.ManagedObjects.Add(customer);
customer.NAME := ordersDB.UniQuery1.FieldByName('NAME').AsString; customer.NAME := ordersDB.UniQuery1.FieldByName('NAME').AsString;
customer.CUSTOMER_ID := ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger; customer.CUSTOMER_ID := ordersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger;
customer.SHORT_NAME := ordersDB.UniQuery1.FieldByName('SHORT_NAME').AsString; customer.SHORT_NAME := ordersDB.UniQuery1.FieldByName('SHORT_NAME').AsString;
customer.staff_fields_invoice_to := ordersDB.UniQuery1.FieldByName('BILL_ADDRESS').AsString + customer.staff_fields_invoice_to := ordersDB.UniQuery1.FieldByName('BILL_ADDRESS').AsString +
', ' + ordersDB.UniQuery1.FieldByName('BILL_CITY').AsString + ', ' + ordersDB.UniQuery1.FieldByName('BILL_CITY').AsString +
', ' + ordersDB.UniQuery1.FieldByName('BILL_STATE').AsString + ', ' + ordersDB.UniQuery1.FieldByName('BILL_STATE').AsString +
' ' + ordersDB.UniQuery1.FieldByName('BILL_ZIP').AsString; ' ' + ordersDB.UniQuery1.FieldByName('BILL_ZIP').AsString;
customer.START_DATE := ordersDB.UniQuery1.FieldByName('START_DATE').AsString; customer.START_DATE := ordersDB.UniQuery1.FieldByName('START_DATE').AsString;
result.data.Add(customer); result.data.Add(customer);
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
SQL := 'SELECT COUNT(*) AS total_count from customers'; SQL := 'SELECT COUNT(*) AS total_count from customers';
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger;
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
except except
on E: Exception do on E: Exception do
begin begin
Logger.Log(2, 'Error in GetCustomers: ' + E.Message); Logger.Log(2, 'Error in GetCustomers: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve customer list: A KG Orders Database issue has occurred!'); raise EXDataHttpException.Create(500, 'Unable to retrieve customer list: A KG Orders Database issue has occurred!');
end;
end; end;
finally
params.Free;
end; end;
end; end;
...@@ -554,9 +567,9 @@ var ...@@ -554,9 +567,9 @@ var
begin begin
logger.Log(3, 'TLookupService.GenerateOrderListPDF'); logger.Log(3, 'TLookupService.GenerateOrderListPDF');
rptOrderList := TrptOrderList.Create(nil); rptOrderList := TrptOrderList.Create(nil);
params := TStringList.Create;
try try
try try
params := TStringList.Create;
params.StrictDelimiter := true; params.StrictDelimiter := true;
params.Delimiter := '&'; params.Delimiter := '&';
params.DelimitedText := searchOptions; params.DelimitedText := searchOptions;
...@@ -591,6 +604,7 @@ begin ...@@ -591,6 +604,7 @@ begin
end; end;
finally finally
rptOrderList.Free; rptOrderList.Free;
params.Free;
end; end;
end; end;
...@@ -615,80 +629,84 @@ begin ...@@ -615,80 +629,84 @@ begin
logger.Log(3, 'TLookupSerivce.AddShippingAddress'); logger.Log(3, 'TLookupSerivce.AddShippingAddress');
result := TJSONObject.Create; result := TJSONObject.Create;
JSONData := TJSONObject.ParseJSONValue(AddressInfo) as TJSONObject; JSONData := TJSONObject.ParseJSONValue(AddressInfo) as TJSONObject;
if JSONData = nil then try
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception if JSONData = nil then
mode := JSONData.GetValue<string>('mode'); raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception
CustomerID := JSONData.GetValue<string>('customer_id'); mode := JSONData.GetValue<string>('mode');
CustomerID := JSONData.GetValue<string>('customer_id');
if mode = 'EDIT' then
ShipID := JSONData.GetValue<integer>('customer_ship_id');
if mode = 'ADD' then if mode = 'EDIT' then
SQL := 'select * from customers_ship where customer_id = 0 and customer_id <> 0' ShipID := JSONData.GetValue<integer>('customer_ship_id');
else
begin
SQL := 'select * from customers_ship where customer_ship_id = ' + IntToStr(ShipID);
end;
doQuery(ordersDB.UniQuery1, SQL);
try
if mode = 'ADD' then if mode = 'ADD' then
ordersDB.UniQuery1.Insert SQL := 'select * from customers_ship where customer_id = 0 and customer_id <> 0'
else else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do
begin begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset SQL := 'select * from customers_ship where customer_ship_id = ' + IntToStr(ShipID);
if Assigned(Field) then end;
doQuery(ordersDB.UniQuery1, SQL);
try
if mode = 'ADD' then
ordersDB.UniQuery1.Insert
else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do
begin begin
if (Field is TDateTimeField) then Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset
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 // This sets the field to NULL (empty)
end else
else if Pair.JsonValue.Value <> '' then TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value);
Field.AsString := Pair.JsonValue.Value; end
else if Pair.JsonValue.Value <> '' then
Field.AsString := Pair.JsonValue.Value;
end;
end; end;
end; ordersDB.UniQuery1.Post;
ordersDB.UniQuery1.Post;
if mode = 'ADD' then if mode = 'ADD' then
begin begin
msg := 'Success: Shipping Address Successfully Added'; msg := 'Success: Shipping Address Successfully Added';
end end
else else
msg := 'Success: Shipping Address Successfully Edited'; msg := 'Success: Shipping Address Successfully Edited';
// Sends the updated Address List Back. // Sends the updated Address List Back.
SQL := 'select * FROM customers c LEFT JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + CustomerID; SQL := 'select * FROM customers c LEFT JOIN customers_ship s ON c.CUSTOMER_ID = s.customer_id WHERE c.CUSTOMER_ID = ' + CustomerID;
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
ADDRESS_LIST := TJSONArray.Create; ADDRESS_LIST := TJSONArray.Create;
while not ordersDB.UniQuery1.Eof do while not ordersDB.UniQuery1.Eof do
begin begin
ADDRESS := TJSONObject.Create; ADDRESS := TJSONObject.Create;
ADDRESS.AddPair('ADDRESS', ordersDB.UniQuery1.FieldByName('ship_block').AsString); ADDRESS.AddPair('ADDRESS', ordersDB.UniQuery1.FieldByName('ship_block').AsString);
ADDRESS.AddPair('shipping_address', ordersDB.UniQuery1.FieldByName('address').AsString); ADDRESS.AddPair('shipping_address', ordersDB.UniQuery1.FieldByName('address').AsString);
ADDRESS.AddPair('city', ordersDB.UniQuery1.FieldByName('city').AsString); ADDRESS.AddPair('city', ordersDB.UniQuery1.FieldByName('city').AsString);
ADDRESS.AddPair('state', ordersDB.UniQuery1.FieldByName('state').AsString); ADDRESS.AddPair('state', ordersDB.UniQuery1.FieldByName('state').AsString);
ADDRESS.AddPair('zip', ordersDB.UniQuery1.FieldByName('zip').AsString); ADDRESS.AddPair('zip', ordersDB.UniQuery1.FieldByName('zip').AsString);
ADDRESS.AddPair('contact', ordersDB.UniQuery1.FieldByName('contact').AsString); ADDRESS.AddPair('contact', ordersDB.UniQuery1.FieldByName('contact').AsString);
ADDRESS.AddPair('ship_id', ordersDB.UniQuery1.FieldByName('customer_ship_id').AsString); ADDRESS.AddPair('ship_id', ordersDB.UniQuery1.FieldByName('customer_ship_id').AsString);
ADDRESS_LIST.Add(ADDRESS); ADDRESS_LIST.Add(ADDRESS);
ordersDB.UniQuery1.Next; ordersDB.UniQuery1.Next;
end; end;
Result.AddPair('status', msg); Result.AddPair('status', msg);
Result.AddPair('ADDRESS', ADDRESS_LIST); Result.AddPair('ADDRESS', ADDRESS_LIST);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
except except
on E: Exception do on E: Exception do
begin begin
Result.AddPair('error', E.Message); Result.AddPair('error', E.Message);
end end
end;
finally
//JSONData.Free;
end; end;
end; end;
...@@ -710,100 +728,104 @@ begin ...@@ -710,100 +728,104 @@ begin
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 try
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception if JSONData = nil then
mode := JSONData.GetValue<string>('mode'); raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception
mode := JSONData.GetValue<string>('mode');
if mode = 'ADD' then
begin
// Update RevisionID
SQL := 'UPDATE idfield set KEYVALUE = KEYVALUE + 1 WHERE KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID');
OrdersDB.UniQuery1.SQL.Text := SQL;
OrdersDB.UniQuery1.ExecSQL;
// Retrieve updated RevisionID
SQL := 'select KEYVALUE from idfield where KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID');
doQuery(OrdersDB.UniQuery1, SQL);
CustomerID := OrdersDB.UniQuery1.FieldByName('KEYVALUE').AsInteger;
end
else
CustomerID := JSONData.GetValue<integer>('CUSTOMER_ID');
SQL := 'select CUSTOMER_ID from customers where SHORT_NAME = ' + quotedStr(JSONData.GetValue<string>('SHORT_NAME')); if mode = 'ADD' then
doQuery(OrdersDB.UniQuery1, SQL); begin
// Update RevisionID
SQL := 'UPDATE idfield set KEYVALUE = KEYVALUE + 1 WHERE KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID');
OrdersDB.UniQuery1.SQL.Text := SQL;
OrdersDB.UniQuery1.ExecSQL;
if mode = 'ADD' then // Retrieve updated RevisionID
begin SQL := 'select KEYVALUE from idfield where KEYNAME = ' + quotedStr('GEN_CUSTOMER_ID');
if OrdersDB.UniQuery1.IsEmpty then doQuery(OrdersDB.UniQuery1, SQL);
unique := true CustomerID := OrdersDB.UniQuery1.FieldByName('KEYVALUE').AsInteger;
else end
unique := false;
end
else
begin
if ( (OrdersDB.UniQuery1.IsEmpty) or (OrdersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger = CustomerID) ) then
unique := true
else else
unique := false; CustomerID := JSONData.GetValue<integer>('CUSTOMER_ID');
end; SQL := 'select CUSTOMER_ID from customers where SHORT_NAME = ' + quotedStr(JSONData.GetValue<string>('SHORT_NAME'));
doQuery(OrdersDB.UniQuery1, SQL);
if unique then
begin
if mode = 'ADD' then if mode = 'ADD' then
SQL := 'select * from customers where CUSTOMER_ID = 0 and CUSTOMER_ID <> 0' begin
if OrdersDB.UniQuery1.IsEmpty then
unique := true
else
unique := false;
end
else else
begin begin
SQL := 'select * from customers where CUSTOMER_ID = ' + IntToStr(CustomerID); if ( (OrdersDB.UniQuery1.IsEmpty) or (OrdersDB.UniQuery1.FieldByName('CUSTOMER_ID').AsInteger = CustomerID) ) then
unique := true
else
unique := false;
end; end;
doQuery(ordersDB.UniQuery1, SQL);
try if unique then
begin
if mode = 'ADD' then if mode = 'ADD' then
ordersDB.UniQuery1.Insert SQL := 'select * from customers where CUSTOMER_ID = 0 and CUSTOMER_ID <> 0'
else else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do
begin begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset SQL := 'select * from customers where CUSTOMER_ID = ' + IntToStr(CustomerID);
if Assigned(Field) then end;
doQuery(ordersDB.UniQuery1, SQL);
try
if mode = 'ADD' then
ordersDB.UniQuery1.Insert
else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do
begin begin
if (Field is TDateTimeField) then Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset
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 // This sets the field to NULL (empty)
end else
else if Pair.JsonValue.Value <> '' then TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value);
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;
// Post the record to the database // Post the record to the database
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
if mode = 'ADD' then if mode = 'ADD' then
msg := 'Success: Customer Successfully Added' msg := 'Success: Customer Successfully Added'
else else
msg := 'Success: Customer Successfully Edited'; msg := 'Success: Customer Successfully Edited';
Result := TJSONObject.Create.AddPair('status', msg); Result := TJSONObject.Create.AddPair('status', msg);
Result.AddPair('CustomerID', CustomerID); Result.AddPair('CustomerID', CustomerID);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
except except
on E: Exception do on E: Exception do
begin begin
Result := TJSONObject.Create.AddPair('error', E.Message); Result := TJSONObject.Create.AddPair('error', E.Message);
end end
end; end;
end end
else else
Result := TJSONObject.Create.AddPair('status', 'Failure: Company Account Name Must Be Unique'); Result := TJSONObject.Create.AddPair('status', 'Failure: Company Account Name Must Be Unique');
finally
//JSONData.Free;
end;
end; end;
function TLookupService.GenerateOrderCorrugatedPDF(orderID: string): string; function TLookupService.GenerateOrderCorrugatedPDF(orderID: string): string;
...@@ -894,8 +916,6 @@ begin ...@@ -894,8 +916,6 @@ begin
end; end;
end; end;
function TLookupService.generateSubQuery(currStatus: string): string; function TLookupService.generateSubQuery(currStatus: string): string;
// Generates the subquery in order to retrieve all the status due/done dates // Generates the subquery in order to retrieve all the status due/done dates
// This must be a subquery because there are at most 5 different entries which // This must be a subquery because there are at most 5 different entries which
...@@ -1035,82 +1055,87 @@ var ...@@ -1035,82 +1055,87 @@ var
begin begin
result := TSQLQuery.Create; result := TSQLQuery.Create;
params := TStringList.Create; params := TStringList.Create;
params.StrictDelimiter := true;
params.Delimiter := '&';
params.DelimitedText := searchOptions;
ForPDF := SameText(params.Values['forPDF'], 'true'); try
params.StrictDelimiter := true;
params.Delimiter := '&';
params.DelimitedText := searchOptions;
if not ForPDF then ForPDF := SameText(params.Values['forPDF'], 'true');
begin
PageNum := StrToIntDef(params.Values['pagenumber'], 1);
PageSize := StrToIntDef(params.Values['pagesize'], 500);
offset := IntToStr((PageNum - 1) * PageSize);
limit := IntToStr(PageSize);
end;
OrderBy := params.Values['orderby'] + ' ' + params.Values['direction']; if not ForPDF then
orderType := params.Values['orderType'].ToLower(); begin
OrderID := params.Values['orderID']; PageNum := StrToIntDef(params.Values['pagenumber'], 1);
companyID := params.Values['companyID']; PageSize := StrToIntDef(params.Values['pagesize'], 500);
jobName := params.Values['jobName']; offset := IntToStr((PageNum - 1) * PageSize);
accessRights := params.Values['accessRights']; limit := IntToStr(PageSize);
userID := params.Values['userID']; end;
status1 := createStatusSearchInfo(params, '1');
status2 := createStatusSearchInfo(params, '2');
SQL := 'SELECT o.ORDER_ID, c.SHORT_NAME, o.LOCATION AS Loc, c.NAME AS COMPANY_NAME, o.JOB_NAME, o.ORDER_TYPE, o.IN_QB, o.QB_ORDER_NUM,' +
generateSubquery('PROOF') +
generateSubquery('ART') +
generateSubquery('PLATE') +
generateSubquery('MOUNT') +
generateSubquery('SHIP');
whereSQL := ' FROM orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID ' +
'LEFT JOIN qb_sales_orders qb ON qb.ORDER_ID = o.ORDER_ID ' +
'LEFT JOIN corrugated_plate_orders cpo ON o.ORDER_ID = cpo.ORDER_ID ' +
'LEFT JOIN web_plate_orders wpo ON o.ORDER_ID = wpo.ORDER_ID ' +
'LEFT JOIN cutting_die_orders cdo ON o.ORDER_ID = cdo.ORDER_ID WHERE 0 = 0';
if (status1.filterType <> '') and (status1.filterType <> 'NONE') then
whereSQL := whereSQL + generateStatusWhereSQL(status1);
if (status2.filterType <> '') and (status2.filterType <> 'NONE') then
whereSQL := whereSQL + generateStatusWhereSQL(status2);
if (orderType <> '') and (orderType <> 'any') then
begin
if (orderType <> 'cutting die') then
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr(orderType + '_plate')
else
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr('cutting_die');
end;
if OrderID <> '' then
whereSQL := whereSQL + ' AND o.ORDER_ID = ' + OrderID;
if companyID <> '' then
whereSQL := whereSQL + ' AND c.CUSTOMER_ID = ' + companyID;
if jobName <> '' then
whereSQL := whereSQL + ' AND o.JOB_NAME LIKE ' + QuotedStr('%' + jobName + '%');
if accessRights = 'SALES' then
begin
whereSQL := whereSQL + ' AND c.REP_USER_ID = ' + userID;
end;
OrderBy := params.Values['orderby'] + ' ' + params.Values['direction'];
orderType := params.Values['orderType'].ToLower();
OrderID := params.Values['orderID'];
companyID := params.Values['companyID'];
jobName := params.Values['jobName'];
accessRights := params.Values['accessRights'];
userID := params.Values['userID'];
status1 := createStatusSearchInfo(params, '1');
status2 := createStatusSearchInfo(params, '2');
SQL := 'SELECT o.ORDER_ID, c.SHORT_NAME, o.LOCATION AS Loc, c.NAME AS COMPANY_NAME, o.JOB_NAME, o.ORDER_TYPE, o.IN_QB, o.QB_ORDER_NUM,' +
generateSubquery('PROOF') +
generateSubquery('ART') +
generateSubquery('PLATE') +
generateSubquery('MOUNT') +
generateSubquery('SHIP');
whereSQL := ' FROM orders o JOIN customers c ON c.CUSTOMER_ID = o.COMPANY_ID ' +
'LEFT JOIN qb_sales_orders qb ON qb.ORDER_ID = o.ORDER_ID ' +
'LEFT JOIN corrugated_plate_orders cpo ON o.ORDER_ID = cpo.ORDER_ID ' +
'LEFT JOIN web_plate_orders wpo ON o.ORDER_ID = wpo.ORDER_ID ' +
'LEFT JOIN cutting_die_orders cdo ON o.ORDER_ID = cdo.ORDER_ID WHERE 0 = 0';
if (status1.filterType <> '') and (status1.filterType <> 'NONE') then
whereSQL := whereSQL + generateStatusWhereSQL(status1);
if (status2.filterType <> '') and (status2.filterType <> 'NONE') then
whereSQL := whereSQL + generateStatusWhereSQL(status2);
if (orderType <> '') and (orderType <> 'any') then
begin
if (orderType <> 'cutting die') then
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr(orderType + '_plate')
else
whereSQL := whereSQL + ' AND o.ORDER_TYPE = ' + QuotedStr('cutting_die');
end;
if OrderID <> '' then
whereSQL := whereSQL + ' AND o.ORDER_ID = ' + OrderID;
if companyID <> '' then
whereSQL := whereSQL + ' AND c.CUSTOMER_ID = ' + companyID;
if jobName <> '' then
whereSQL := whereSQL + ' AND o.JOB_NAME LIKE ' + QuotedStr('%' + jobName + '%');
if accessRights = 'SALES' then
begin
whereSQL := whereSQL + ' AND c.REP_USER_ID = ' + userID;
end;
orderBySQL := ' ORDER BY ' + OrderBy;
SQL := SQL + ' o.PRICE, qb.QB_REF_NUM, ' + orderBySQL := ' ORDER BY ' + OrderBy;
'COALESCE(cpo.staff_fields_po_number, wpo.staff_fields_po_number, cdo.staff_fields_po_number) AS po_number, ' +
'COALESCE(cpo.staff_fields_quickbooks_item, wpo.staff_fields_quickbooks_item, cdo.staff_fields_quickbooks_item) AS quickbooks_item, ' +
'COALESCE(cpo.staff_fields_order_date, wpo.staff_fields_order_date, cdo.staff_fields_order_date) AS ORDER_DATE ';
if not ForPDF then SQL := SQL + ' o.PRICE, qb.QB_REF_NUM, ' +
SQL := SQL + whereSQL + orderBySQL + ' LIMIT ' + limit + ' OFFSET ' + offset 'COALESCE(cpo.staff_fields_po_number, wpo.staff_fields_po_number, cdo.staff_fields_po_number) AS po_number, ' +
else 'COALESCE(cpo.staff_fields_quickbooks_item, wpo.staff_fields_quickbooks_item, cdo.staff_fields_quickbooks_item) AS quickbooks_item, ' +
SQL := SQL + whereSQL + orderBySQL; 'COALESCE(cpo.staff_fields_order_date, wpo.staff_fields_order_date, cdo.staff_fields_order_date) AS ORDER_DATE ';
result.SQL := SQL; if not ForPDF then
result.whereSQL := whereSQL; SQL := SQL + whereSQL + orderBySQL + ' LIMIT ' + limit + ' OFFSET ' + offset
else
SQL := SQL + whereSQL + orderBySQL;
result.SQL := SQL;
result.whereSQL := whereSQL;
finally
params.Free;
end;
end; end;
function TLookupService.getColorCount(colors: string): string; function TLookupService.getColorCount(colors: string): string;
...@@ -1241,7 +1266,6 @@ var ...@@ -1241,7 +1266,6 @@ var
orderID: string; orderID: string;
SQL: string; SQL: string;
table: string; table: string;
ADDRESS: TAddressItem;
begin begin
logger.Log(3,'TLookupService.GetCorrugatedOrder'); logger.Log(3,'TLookupService.GetCorrugatedOrder');
orderID := orderInfo; orderID := orderInfo;
...@@ -1351,7 +1375,6 @@ var ...@@ -1351,7 +1375,6 @@ var
orderType: string; orderType: string;
orderID: string; orderID: string;
SQL: string; SQL: string;
ADDRESS: TAddressItem;
begin begin
logger.Log(3, 'TLookupService.GetWebOrder'); logger.Log(3, 'TLookupService.GetWebOrder');
try try
...@@ -1479,7 +1502,6 @@ var ...@@ -1479,7 +1502,6 @@ var
orderType: string; orderType: string;
orderID: string; orderID: string;
SQL: string; SQL: string;
ADDRESS: TAddressItem;
begin begin
logger.Log(3, 'TLookupService.GetCuttingDieOrder'); logger.Log(3, 'TLookupService.GetCuttingDieOrder');
try try
...@@ -1540,56 +1562,60 @@ var ...@@ -1540,56 +1562,60 @@ var
item: TItemItem; item: TItemItem;
begin begin
logger.Log(3, 'TLookupService.GetItems'); logger.Log(3, 'TLookupService.GetItems');
params := TStringList.Create;
try try
params := TStringList.Create; try
params.StrictDelimiter := true; params.StrictDelimiter := true;
// parse the searchOptions // parse the searchOptions
params.Delimiter := '&'; params.Delimiter := '&';
params.DelimitedText := searchOptions; params.DelimitedText := searchOptions;
SQL := 'select * from qb_items order by qb_item_name asc';
if ( ( params.Values['pagenumber'] <> '' ) and ( params.Values['pagesize'] <> '' ) ) then SQL := 'select * from qb_items order by qb_item_name asc';
begin
pageNum := StrToInt(params.Values['pagenumber']);
PageSize := StrToInt(params.Values['pagesize']);
OrderBy := params.Values['orderby'];
limit := IntToStr(PageSize); if ( ( params.Values['pagenumber'] <> '' ) and ( params.Values['pagesize'] <> '' ) ) then
offset := IntToStr((PageNum - 1) * PageSize); begin
SQL := SQL + ' limit ' + limit + ' offset ' + offset; pageNum := StrToInt(params.Values['pagenumber']);
end; PageSize := StrToInt(params.Values['pagesize']);
OrderBy := params.Values['orderby'];
doQuery(ordersDB.UniQuery1, SQL); limit := IntToStr(PageSize);
offset := IntToStr((PageNum - 1) * PageSize);
SQL := SQL + ' limit ' + limit + ' offset ' + offset;
end;
Result:= TItemList.Create; doQuery(ordersDB.UniQuery1, SQL);
Result.data := TList<TItemItem>.Create;
TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data );
while not ordersDB.UniQuery1.Eof do Result:= TItemList.Create;
begin Result.data := TList<TItemItem>.Create;
item := TItemItem.Create; TXDataOperationContext.Current.Handler.ManagedObjects.Add( Result.data );
TXDataOperationContext.Current.Handler.ManagedObjects.Add( item );
Result.data.Add( item );
item.ID := ordersDB.UniQuery1.FieldByName('qb_items_id').AsString;
item.name := ordersDB.UniQuery1.FieldByName('qb_item_name').AsString;
item.description := ordersDB.UniQuery1.FieldByName('item_desc').AsString;
item.status := ordersDB.UniQuery1.FieldByName('status').AsString;
item.QB_ID := ordersDB.UniQuery1.FieldByName('qb_items_qb_id').AsString;
ordersDB.UniQuery1.Next; while not ordersDB.UniQuery1.Eof do
end; begin
ordersDB.UniQuery1.Close; item := TItemItem.Create;
SQL:= 'select count(*) as total_count from qb_items'; TXDataOperationContext.Current.Handler.ManagedObjects.Add( item );
doQuery(ordersDB.UniQuery1, SQL); Result.data.Add( item );
Result.count := ordersDB.UniQuery1.FieldByName('total_count').AsInteger; item.ID := ordersDB.UniQuery1.FieldByName('qb_items_id').AsString;
ordersDB.UniQuery1.Close; item.name := ordersDB.UniQuery1.FieldByName('qb_item_name').AsString;
except item.description := ordersDB.UniQuery1.FieldByName('item_desc').AsString;
on E: Exception do item.status := ordersDB.UniQuery1.FieldByName('status').AsString;
begin item.QB_ID := ordersDB.UniQuery1.FieldByName('qb_items_qb_id').AsString;
Logger.Log(2, 'Error in GetItems: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to retrieve item list:A KG Orders database issue has occurred!'); ordersDB.UniQuery1.Next;
end;
ordersDB.UniQuery1.Close;
SQL:= 'select count(*) as total_count from qb_items';
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:A KG Orders database issue has occurred!');
end;
end; end;
finally
params.Free;
end; end;
end; end;
...@@ -1683,71 +1709,73 @@ var ...@@ -1683,71 +1709,73 @@ var
begin begin
logger.log(3, 'TLookupService.EditUser'); logger.log(3, 'TLookupService.EditUser');
params := TStringList.Create; params := TStringList.Create;
params.Delimiter := '&'; try
params.StrictDelimiter := true; params.Delimiter := '&';
params.DelimitedText := editOptions; params.StrictDelimiter := true;
user := params.Values['username']; params.DelimitedText := editOptions;
password := params.Values['password']; user := params.Values['username'];
full_name := params.Values['fullname']; password := params.Values['password'];
status := params.Values['status']; full_name := params.Values['fullname'];
email := params.Values['email']; status := params.Values['status'];
access := params.Values['access']; email := params.Values['email'];
rights := params.Values['rights']; access := params.Values['access'];
perspective := params.Values['perspective']; rights := params.Values['rights'];
QB := params.Values['QB']; perspective := params.Values['perspective'];
newUser := params.Values['newuser']; QB := params.Values['QB'];
newUser := params.Values['newuser'];
SQL := 'select * from users where USER_NAME = ' + QuotedStr(user);
doQuery(ordersDB.UniQuery1, SQL);
if ordersDB.UniQuery1.IsEmpty then SQL := 'select * from users where USER_NAME = ' + QuotedStr(user);
Result := 'Failure:No such user found' doQuery(ordersDB.UniQuery1, SQL);
else
begin
ordersDB.UniQuery1.Edit;
//user.password := ordersDB.UniQuery1.FieldByName('PASSWORD').AsString; if ordersDB.UniQuery1.IsEmpty then
Result := 'Failure:No such user found'
else
begin
ordersDB.UniQuery1.Edit;
if not newUser.IsEmpty then if not newUser.IsEmpty then
ordersDB.UniQuery1.FieldByName('USER_NAME').AsString := newUser; ordersDB.UniQuery1.FieldByName('USER_NAME').AsString := newUser;
if not full_name.IsEmpty then if not full_name.IsEmpty then
ordersDB.UniQuery1.FieldByName('NAME').AsString := full_name; ordersDB.UniQuery1.FieldByName('NAME').AsString := full_name;
if not status.IsEmpty then if not status.IsEmpty then
begin begin
if StrToBool(status) then if StrToBool(status) then
ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'ACTIVE' ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'ACTIVE'
else else
ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'INACTIVE' ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'INACTIVE'
end; end;
if not email.IsEmpty then if not email.IsEmpty then
ordersDB.UniQuery1.FieldByName('EMAIL').AsString := email; ordersDB.UniQuery1.FieldByName('EMAIL').AsString := email;
if not access.IsEmpty then if not access.IsEmpty then
ordersDB.UniQuery1.FieldByName('ACCESS_TYPE').AsString := Access; ordersDB.UniQuery1.FieldByName('ACCESS_TYPE').AsString := Access;
if not rights.IsEmpty then if not rights.IsEmpty then
ordersDB.UniQuery1.FieldByName('SYSTEM_RIGHTS').AsInteger := StrToInt(rights); ordersDB.UniQuery1.FieldByName('SYSTEM_RIGHTS').AsInteger := StrToInt(rights);
if not perspective.IsEmpty then if not perspective.IsEmpty then
ordersDB.UniQuery1.FieldByName('PERSPECTIVE_ID').AsString := perspective; ordersDB.UniQuery1.FieldByName('PERSPECTIVE_ID').AsString := perspective;
if not QB.IsEmpty then if not QB.IsEmpty then
ordersDB.UniQuery1.FieldByName('QB_ID').AsString := QB; ordersDB.UniQuery1.FieldByName('QB_ID').AsString := QB;
if((not (Password = 'hidden')) and (not (Password.IsEmpty))) then if((not (Password = 'hidden')) and (not (Password.IsEmpty))) then
begin begin
hashString := ordersDB.UniQuery1.FieldByName('NAME').AsString + password; hashString := ordersDB.UniQuery1.FieldByName('NAME').AsString + password;
hashPW := THashSHA2.GetHashString(hashString, THashSHA2.TSHA2Version.SHA512).ToUpper; hashPW := THashSHA2.GetHashString(hashString, THashSHA2.TSHA2Version.SHA512).ToUpper;
ordersDB.UniQuery1.FieldByName('password').AsString := hashPW; ordersDB.UniQuery1.FieldByName('password').AsString := hashPW;
end; end;
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
Result := 'Success: User Successfully Edited'; Result := 'Success: User Successfully Edited';
end;
ordersDB.UniQuery1.Close;
finally
params.Free;
end; end;
ordersDB.UniQuery1.Close;
end; end;
procedure TLookupService.AddToOrdersTable(mode, ORDER_TYPE: string; JSONData: TJSONObject); procedure TLookupService.AddToOrdersTable(mode, ORDER_TYPE: string; JSONData: TJSONObject);
...@@ -1771,12 +1799,7 @@ begin ...@@ -1771,12 +1799,7 @@ begin
ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString := ORDER_TYPE; ordersDB.UniQuery1.FieldByName('ORDER_TYPE').AsString := ORDER_TYPE;
if mode = 'ADD' then if mode = 'ADD' then
ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsDateTime := Now ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsDateTime := Now;
else
begin
// No idea why I need this line but without it an error gets thrown
//ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsDateTime := ordersDB.UniQuery1.FieldByName('ORDER_DATE').AsDateTime;
end;
if JSONData.GetValue<string>('staff_fields_price') = '' then if JSONData.GetValue<string>('staff_fields_price') = '' then
ordersDB.UniQuery1.FieldByName('PRICE').AsString := '0' ordersDB.UniQuery1.FieldByName('PRICE').AsString := '0'
...@@ -1812,81 +1835,85 @@ begin ...@@ -1812,81 +1835,85 @@ begin
DateFormat.ShortDateFormat := 'yyyy-mm-dd'; DateFormat.ShortDateFormat := 'yyyy-mm-dd';
DateFormat.DateSeparator := '-'; DateFormat.DateSeparator := '-';
JSONData := TJSONObject.ParseJSONValue(orderInfo) as TJSONObject; JSONData := TJSONObject.ParseJSONValue(orderInfo) as TJSONObject;
if JSONData = nil then try
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception if JSONData = nil then
mode := JSONData.GetValue<string>('mode'); raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception
mode := JSONData.GetValue<string>('mode');
AddToOrdersTable(mode, 'corrugated_plate', JSONData); AddToOrdersTable(mode, 'corrugated_plate', JSONData);
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
ordersDB.UniQuery1.Open; ordersDB.UniQuery1.Open;
ORDER_ID := ordersDB.UniQuery1.FieldByName('OrderID').AsInteger; ORDER_ID := ordersDB.UniQuery1.FieldByName('OrderID').AsInteger;
end; end;
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 if mode = 'ADD' then
ordersDB.UniQuery1.Insert SQL := 'select * from corrugated_plate_orders where ORDER_ID = 0 and ORDER_ID <> 0'
else else
ordersDB.UniQuery1.Edit;
for Pair in JSONData do
begin begin
Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset ORDER_ID := JSONData.GetValue<integer>('ORDER_ID');
if Assigned(Field) then 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 begin
if (Field is TDateTimeField) then Field := ordersDB.UniQuery1.FindField(Pair.JsonString.Value); // Checks if the field exists in the dataset
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
if (Pair.JsonValue.Value = '') or (Pair.JsonValue.Value = 'null') or (Pair.JsonValue.Value = '12/30/1899') then
Field.Clear // This sets the field to NULL (empty)
else
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value);
end
else else
TDateTimeField(Field).AsDateTime := StrToDate(Pair.JsonValue.Value); Field.AsString := Pair.JsonValue.Value;
end end;
else
Field.AsString := Pair.JsonValue.Value;
end; end;
end;
ordersDB.UniQuery1.FieldByName('ORDER_ID').AsInteger := ORDER_ID;
ordersDB.UniQuery1.Post;
if ( JSONData.GetValue<string>('staff_fields_proof_date') <> '' ) and ( JSONData.GetValue<string>('staff_fields_proof_date') <> '12/30/1899' ) then ordersDB.UniQuery1.FieldByName('ORDER_ID').AsInteger := ORDER_ID;
AddStatusSchedule('PROOF', JSONData, ORDER_ID); ordersDB.UniQuery1.Post;
if ( JSONData.GetValue<string>('staff_fields_ship_date') <> '' ) and ( JSONData.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' ) then
AddStatusSchedule('SHIP', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_art_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_art_due') <> '12/30/1899' ) then
AddStatusSchedule('ART', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_plate_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' ) then
AddStatusSchedule('PLATE', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_mount_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' ) then
AddStatusSchedule('MOUNT', JSONData, ORDER_ID);
AddToRevisionsTable(intToStr(ORDER_ID), 'corrugated_plate_orders_revisions', JSONData);
if mode = 'ADD' then if ( JSONData.GetValue<string>('staff_fields_proof_date') <> '' ) and ( JSONData.GetValue<string>('staff_fields_proof_date') <> '12/30/1899' ) then
msg := 'Success: Order Successfully Added' AddStatusSchedule('PROOF', JSONData, ORDER_ID);
else if ( JSONData.GetValue<string>('staff_fields_ship_date') <> '' ) and ( JSONData.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' ) then
msg := 'Success: Order Successfully Edited'; AddStatusSchedule('SHIP', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_art_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_art_due') <> '12/30/1899' ) then
AddStatusSchedule('ART', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_plate_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' ) then
AddStatusSchedule('PLATE', JSONData, ORDER_ID);
if ( JSONData.GetValue<string>('staff_fields_mount_due') <> '' ) and ( JSONData.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' ) then
AddStatusSchedule('MOUNT', JSONData, ORDER_ID);
AddToRevisionsTable(intToStr(ORDER_ID), 'corrugated_plate_orders_revisions', JSONData);
if mode = 'ADD' then
msg := 'Success: Order Successfully Added'
else
msg := 'Success: Order Successfully Edited';
Result := JSONData; Result := JSONData;
Result.AddPair('status', msg); Result.AddPair('status', msg);
Result.AddPair('ORDER_ID', ORDER_ID); Result.AddPair('ORDER_ID', ORDER_ID);
TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result); TXDataOperationContext.Current.Handler.ManagedObjects.Add(Result);
except except
on E: Exception do on E: Exception do
begin begin
Logger.Log(2, 'Error in AddCorrugatedOrder: ' + E.Message); Logger.Log(2, 'Error in AddCorrugatedOrder: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to add or edit web order: A KG Orders database issue has occurred!'); raise EXDataHttpException.Create(500, 'Unable to add or edit web order: A KG Orders database issue has occurred!');
end end
end;
finally
//JSONData.Free;
end; end;
end; end;
...@@ -1959,123 +1986,93 @@ begin ...@@ -1959,123 +1986,93 @@ begin
logger.Log(3, 'TLookupService.SetStatus'); logger.Log(3, 'TLookupService.SetStatus');
StatusInfo := TJSONObject.ParseJSONValue(statusOptions) as TJSONObject; StatusInfo := TJSONObject.ParseJSONValue(statusOptions) as TJSONObject;
params := TStringList.Create; params := TStringList.Create;
// parse the statusOptions try
params.Delimiter := '&'; params.Delimiter := '&';
params.StrictDelimiter := true; params.StrictDelimiter := true;
params.DelimitedText := statusOptions; params.DelimitedText := statusOptions;
ORDER_ID := StatusInfo.GetValue<integer>('ORDER_ID'); ORDER_ID := StatusInfo.GetValue<integer>('ORDER_ID');
Date := StatusInfo.GetValue<string>('date'); Date := StatusInfo.GetValue<string>('date');
Status := StatusInfo.GetValue<string>('status'); Status := StatusInfo.GetValue<string>('status');
UserID := StatusInfo.GetValue<string>('USER_ID'); UserID := StatusInfo.GetValue<string>('USER_ID');
OrderType := StatusInfo.GetValue<string>('OrderType'); OrderType := StatusInfo.GetValue<string>('OrderType');
{if ( (Status = 'PROOF') and (OrderType <> 'cutting die') ) then
begin
NextStatus := 'ART';
StatusField := 'staff_fields_art_due';
end
else if Status = 'ART' then
begin
NextStatus := 'PLATE';
StatusField := 'staff_fields_plate_due';
end
else if ( (Status = 'PLATE') and (OrderType <> 'web plate') ) then
begin
NextStatus := 'MOUNT';
StatusField := 'staff_fields_mount_due';
end
else
begin
NextStatus := 'SHIP';
StatusField := 'staff_fields_ship_date';
end;}
Date := DateToStr(StrToDate(Date) + 1); Date := DateToStr(StrToDate(Date) + 1);
SQL := 'select * from orders_status where ORDER_ID = ' + IntToStr(ORDER_ID) + ' AND ' + SQL := 'select * from orders_status where ORDER_ID = ' + IntToStr(ORDER_ID) + ' AND ' +
'ORDER_STATUS = ' + quotedStr(Status); 'ORDER_STATUS = ' + quotedStr(Status);
doQuery(ordersDB.UniQuery1, SQL); doQuery(ordersDB.UniQuery1, SQL);
if ordersDB.UniQuery1.IsEmpty then if ordersDB.UniQuery1.IsEmpty then
// Add Status // Add Status
begin begin
ordersDB.UniQuery1.Insert; ordersDB.UniQuery1.Insert;
ordersDB.UniQuery1.FieldByName('ORDER_ID').AsString := IntToStr(ORDER_ID); ordersDB.UniQuery1.FieldByName('ORDER_ID').AsString := IntToStr(ORDER_ID);
ordersDB.UniQuery1.FieldByName('ORDER_STATUS').AsString := Status; ordersDB.UniQuery1.FieldByName('ORDER_STATUS').AsString := Status;
ordersDB.UniQuery1.FieldByName('STATUS_DATE').AsDateTime := StrToDateTime(Date); ordersDB.UniQuery1.FieldByName('STATUS_DATE').AsDateTime := StrToDateTime(Date);
ordersDB.UniQuery1.FieldByName('STATUS_TIMESTAMP').AsDateTime := Now; ordersDB.UniQuery1.FieldByName('STATUS_TIMESTAMP').AsDateTime := Now;
ordersDB.UniQuery1.FieldByName('USER_ID').AsString := UserID; ordersDB.UniQuery1.FieldByName('USER_ID').AsString := UserID;
ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger := 1; ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger := 1;
end end
else else
// Edit Status // Edit Status
begin begin
ordersDB.UniQuery1.Edit; ordersDB.UniQuery1.Edit;
ordersDB.UniQuery1.FieldByName('STATUS_DATE').AsDateTime := StrToDateTime(Date); ordersDB.UniQuery1.FieldByName('STATUS_DATE').AsDateTime := StrToDateTime(Date);
ordersDB.UniQuery1.FieldByName('STATUS_TIMESTAMP').AsDateTime := Now; ordersDB.UniQuery1.FieldByName('STATUS_TIMESTAMP').AsDateTime := Now;
ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger := ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger + 1; ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger := ordersDB.UniQuery1.FieldByName('ORDER_REVISION').AsInteger + 1;
end; end;
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
if StatusInfo.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' then
AddStatusSchedule('SHIP', StatusInfo, ORDER_ID); AddStatusSchedule('SHIP', StatusInfo, ORDER_ID);
if StatusInfo.GetValue<string>('staff_fields_art_due') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_art_due') <> '12/30/1899' then
AddStatusSchedule('ART', StatusInfo, ORDER_ID); AddStatusSchedule('ART', StatusInfo, ORDER_ID);
if StatusInfo.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' then
AddStatusSchedule('PLATE', StatusInfo, ORDER_ID); AddStatusSchedule('PLATE', StatusInfo, ORDER_ID);
if StatusInfo.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' then
AddStatusSchedule('MOUNT', StatusInfo, ORDER_ID); AddStatusSchedule('MOUNT', StatusInfo, ORDER_ID);
if Status <> 'SHIP' then if Status <> 'SHIP' then
begin begin
order := TJSONObject.Create; order := TJSONObject.Create;
try try
{ SQL := 'select * from orders_status_schedule where ORDER_ID = ' + IntToStr(ORDER_ID) + ' AND ' + // update the order as well
'ORDER_STATUS = ' + quotedStr(NextStatus); if OrderType = 'web plate' then
table := 'web_plate_orders'
else if OrderType = 'cutting die' then
table := 'cutting_die_orders'
else
table := 'corrugated_plate_orders';
doQuery(ordersDB.UniQuery1, SQL);
if ordersDB.UniQuery1.IsEmpty then
order.AddPair('mode', 'ADD')
else
order.AddPair('mode', 'EDIT');
order.AddPair(StatusField, Date);
order.AddPair('USER_ID', UserID);
AddStatusSchedule(NextStatus, order, ORDER_ID); }
// update the order as well
if OrderType = 'web plate' then
table := 'web_plate_orders'
else if OrderType = 'cutting die' then
table := 'cutting_die_orders'
else
table := 'corrugated_plate_orders';
SQL := 'select * from ' + table + ' where ORDER_ID = ' + IntToStr(ORDER_ID);
doQuery(OrdersDB.UniQuery1, SQL);
OrdersDB.UniQuery1.Edit;
SQL := 'select * from ' + table + ' where ORDER_ID = ' + IntToStr(ORDER_ID); if StatusInfo.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' then
doQuery(OrdersDB.UniQuery1, SQL); OrdersDB.UniQuery1.FieldByName('staff_fields_ship_date').AsString := StatusInfo.GetValue<string>('staff_fields_ship_date');
OrdersDB.UniQuery1.Edit; if StatusInfo.GetValue<string>('staff_fields_art_due') <> '12/30/1899' then
OrdersDB.UniQuery1.FieldByName('staff_fields_art_due').AsString := StatusInfo.GetValue<string>('staff_fields_art_due');
if StatusInfo.GetValue<string>('staff_fields_ship_date') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' then
OrdersDB.UniQuery1.FieldByName('staff_fields_ship_date').AsString := StatusInfo.GetValue<string>('staff_fields_ship_date'); OrdersDB.UniQuery1.FieldByName('staff_fields_plate_due').AsString := StatusInfo.GetValue<string>('staff_fields_plate_due');
if StatusInfo.GetValue<string>('staff_fields_art_due') <> '12/30/1899' then if StatusInfo.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' then
OrdersDB.UniQuery1.FieldByName('staff_fields_art_due').AsString := StatusInfo.GetValue<string>('staff_fields_art_due'); OrdersDB.UniQuery1.FieldByName('staff_fields_mount_due').AsString := StatusInfo.GetValue<string>('staff_fields_mount_due');
if StatusInfo.GetValue<string>('staff_fields_plate_due') <> '12/30/1899' then OrdersDB.UniQuery1.Post;
OrdersDB.UniQuery1.FieldByName('staff_fields_plate_due').AsString := StatusInfo.GetValue<string>('staff_fields_plate_due');
if StatusInfo.GetValue<string>('staff_fields_mount_due') <> '12/30/1899' then
OrdersDB.UniQuery1.FieldByName('staff_fields_mount_due').AsString := StatusInfo.GetValue<string>('staff_fields_mount_due');
OrdersDB.UniQuery1.Post;
finally finally
order.Free; order.Free;
end;
end; end;
end;
result := 'success:Status Successfully set'; result := 'success:Status Successfully set';
except except
on E: Exception do on E: Exception do
logger.Log(2, 'An error occurred when setting status: ' + E.Message); logger.Log(2, 'An error occurred when setting status: ' + E.Message);
end;
finally
params.Free;
end; end;
end; end;
...@@ -2099,63 +2096,67 @@ var ...@@ -2099,63 +2096,67 @@ var
params: TStringList; params: TStringList;
begin begin
logger.Log(3, 'TLookupService.AddUser'); logger.Log(3, 'TLookupService.AddUser');
params := TStringList.Create;
try try
params := TStringList.Create; try
params.StrictDelimiter := True; params.StrictDelimiter := True;
params.Delimiter := '&'; params.Delimiter := '&';
params.DelimitedText := userInfo; params.DelimitedText := userInfo;
dateCreated := Now; dateCreated := Now;
user := params.Values['username']; user := params.Values['username'];
password := params.Values['password']; password := params.Values['password'];
full_name := params.Values['fullname']; full_name := params.Values['fullname'];
status := params.Values['status']; status := params.Values['status'];
email := params.Values['email']; email := params.Values['email'];
access := params.Values['access']; access := params.Values['access'];
rights := params.Values['rights']; rights := params.Values['rights'];
perspective := params.Values['perspective']; perspective := params.Values['perspective'];
QB := params.Values['QB']; QB := params.Values['QB'];
SQL := 'SELECT * FROM users WHERE USER_NAME = ' + QuotedStr(user.ToLower); SQL := 'SELECT * FROM users WHERE USER_NAME = ' + QuotedStr(user.ToLower);
ordersDB.UniQuery1.Close; ordersDB.UniQuery1.Close;
ordersDB.UniQuery1.SQL.Text := SQL; ordersDB.UniQuery1.SQL.Text := SQL;
ordersDB.UniQuery1.Open; ordersDB.UniQuery1.Open;
if ordersDB.UniQuery1.IsEmpty then if ordersDB.UniQuery1.IsEmpty then
begin begin
ordersDB.UniQuery1.Insert; ordersDB.UniQuery1.Insert;
ordersDB.UniQuery1.FieldByName('USER_NAME').AsString := user; ordersDB.UniQuery1.FieldByName('USER_NAME').AsString := user;
ordersDB.UniQuery1.FieldByName('PASSWORD').AsString := THashSHA2.GetHashString(full_name + password, THashSHA2.TSHA2Version.SHA512).ToUpper; ordersDB.UniQuery1.FieldByName('PASSWORD').AsString := THashSHA2.GetHashString(full_name + password, THashSHA2.TSHA2Version.SHA512).ToUpper;
ordersDB.UniQuery1.FieldByName('NAME').AsString := full_name; ordersDB.UniQuery1.FieldByName('NAME').AsString := full_name;
if StrToBoolDef(status, False) then if StrToBoolDef(status, False) then
ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'ACTIVE' ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'ACTIVE'
else else
ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'INACTIVE'; ordersDB.UniQuery1.FieldByName('STATUS').AsString := 'INACTIVE';
ordersDB.UniQuery1.FieldByName('EMAIL').AsString := email; ordersDB.UniQuery1.FieldByName('EMAIL').AsString := email;
ordersDB.UniQuery1.FieldByName('ACCESS_TYPE').AsString := access; ordersDB.UniQuery1.FieldByName('ACCESS_TYPE').AsString := access;
if not TryStrToInt(rights, rightsInt) then if not TryStrToInt(rights, rightsInt) then
rightsInt := 0; rightsInt := 0;
ordersDB.UniQuery1.FieldByName('SYSTEM_RIGHTS').AsInteger := rightsInt; ordersDB.UniQuery1.FieldByName('SYSTEM_RIGHTS').AsInteger := rightsInt;
ordersDB.UniQuery1.FieldByName('PERSPECTIVE_ID').AsString := perspective; ordersDB.UniQuery1.FieldByName('PERSPECTIVE_ID').AsString := perspective;
ordersDB.UniQuery1.FieldByName('QB_ID').AsString := QB; ordersDB.UniQuery1.FieldByName('QB_ID').AsString := QB;
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.Post;
Result := 'Success: User successfully added'; Result := 'Success: User successfully added';
end end
else else
Result := 'Failure: Username already taken'; Result := 'Failure: Username already taken';
except except
on E: Exception do on E: Exception do
begin begin
logger.Log(2, 'An error occurred in TlookupServiceImpl.AddUser: ' + E.Message); logger.Log(2, 'An error occurred in TlookupServiceImpl.AddUser: ' + E.Message);
raise EXDataHttpException.Create(500, 'Unable to Add User: A KG Orders database issue has occurred!'); raise EXDataHttpException.Create(500, 'Unable to Add User: A KG Orders database issue has occurred!');
end;
end; end;
finally
params.Free;
end; end;
end; end;
...@@ -2177,62 +2178,66 @@ begin ...@@ -2177,62 +2178,66 @@ begin
logger.Log(3, 'TLookupService.AddItem'); logger.Log(3, 'TLookupService.AddItem');
result := TJSONObject.Create; result := TJSONObject.Create;
JSONData := TJSONObject.ParseJSONValue(itemInfo) as TJSONObject; JSONData := TJSONObject.ParseJSONValue(itemInfo) as TJSONObject;
if JSONData = nil then try
raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception if JSONData = nil then
mode := JSONData.GetValue<string>('mode'); raise Exception.Create('Invalid JSON format'); // If parsing fails, raise an exception
mode := JSONData.GetValue<string>('mode');
Name := JSONData.GetValue<string>('qb_item_name');
Description := JSONData.GetValue<string>('item_desc');
ID := JSONData.GetValue<string>('qb_items_id');
Status := JSONData.GetValue<string>('status');
if mode = 'ADD' then Name := JSONData.GetValue<string>('qb_item_name');
begin Description := JSONData.GetValue<string>('item_desc');
ID := JSONData.GetValue<string>('qb_items_id');
Status := JSONData.GetValue<string>('status');
SQL := 'select * from qb_items where qb_item_name = ' + QuotedStr(Name); if mode = 'ADD' then
doQuery(ordersDB.UniQuery1, SQL);
if true then //ordersDB.UniQuery1.IsEmpty then
begin begin
ordersDB.UniQuery1.Insert;
ordersDB.UniQuery1.FieldByName('qb_item_name').AsString := Name; SQL := 'select * from qb_items where qb_item_name = ' + QuotedStr(Name);
ordersDB.UniQuery1.FieldByName('item_desc').AsString := Description; doQuery(ordersDB.UniQuery1, SQL);
ordersDB.UniQuery1.FieldByName('status').AsString := status; if true then //ordersDB.UniQuery1.IsEmpty then
begin
ordersDB.UniQuery1.Insert;
ordersDB.UniQuery1.FieldByName('qb_items_qb_id').AsString := JSONData.GetValue<string>('qb_items_qb_id'); ordersDB.UniQuery1.FieldByName('qb_item_name').AsString := Name;
ordersDB.UniQuery1.FieldByName('item_desc').AsString := Description;
ordersDB.UniQuery1.FieldByName('status').AsString := status;
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.FieldByName('qb_items_qb_id').AsString := JSONData.GetValue<string>('qb_items_qb_id');
Result.AddPair('msg', 'Success: Item successfully added');
Result.AddPair('description', ordersDB.UniQuery1.FieldByName('item_desc').AsString); ordersDB.UniQuery1.Post;
Result.AddPair('name', ordersDB.UniQuery1.FieldByName('qb_item_name').AsString); Result.AddPair('msg', 'Success: Item successfully added');
Result.AddPair('status', ordersDB.UniQuery1.FieldByName('status').AsString); Result.AddPair('description', ordersDB.UniQuery1.FieldByName('item_desc').AsString);
Result.AddPair('name', ordersDB.UniQuery1.FieldByName('qb_item_name').AsString);
Result.AddPair('status', ordersDB.UniQuery1.FieldByName('status').AsString);
end
else
Result.AddPair('msg', 'Failure: Item already exists');
end end
else else
Result.AddPair('msg', 'Failure: Item already exists');
end
else
begin
SQL := 'select * from qb_items where qb_items_id = ' + ID;
doQuery(ordersDB.UniQuery1, SQL);
if ( not ordersDB.UniQuery1.IsEmpty ) then
begin begin
ordersDB.UniQuery1.Edit; SQL := 'select * from qb_items where qb_items_id = ' + ID;
doQuery(ordersDB.UniQuery1, SQL);
ordersDB.UniQuery1.FieldByName('qb_item_name').AsString := Name; if ( not ordersDB.UniQuery1.IsEmpty ) then
ordersDB.UniQuery1.FieldByName('item_desc').AsString := Description; begin
ordersDB.UniQuery1.FieldByName('status').AsString := status; ordersDB.UniQuery1.Edit;
ordersDB.UniQuery1.Post; ordersDB.UniQuery1.FieldByName('qb_item_name').AsString := Name;
Result.AddPair('msg', 'Success: Item successfully edited'); ordersDB.UniQuery1.FieldByName('item_desc').AsString := Description;
end; ordersDB.UniQuery1.FieldByName('status').AsString := status;
ordersDB.UniQuery1.Post;
Result.AddPair('msg', 'Success: Item successfully edited');
end;
end;
except end;
on E: Exception do except
logger.Log(2, 'An error occurred when adding an item: ' + E.Message); on E: Exception do
end; logger.Log(2, 'An error occurred when adding an item: ' + E.Message);
end;
finally
//JSONData.Free;
end;
end; end;
...@@ -2241,8 +2246,7 @@ function TLookupService.DelUser(username: string): string; ...@@ -2241,8 +2246,7 @@ function TLookupService.DelUser(username: string): string;
// deleting users prematurely. // deleting users prematurely.
// username: username to be deleted. // username: username to be deleted.
var var
SQL: string; SQL: string;
params: TStringList;
begin begin
logger.Log(3, 'TLookupService.DelUser'); logger.Log(3, 'TLookupService.DelUser');
SQL := 'select * from users where username = ' + QuotedStr(username.toLower); SQL := 'select * from users where username = ' + QuotedStr(username.toLower);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
MemoLogLevel=4 MemoLogLevel=4
FileLogLevel=4 FileLogLevel=4
webClientVersion=1.0.0 webClientVersion=1.0.0
LogFileNum=141 LogFileNum=157
[Database] [Database]
--Server=192.168.116.138 --Server=192.168.116.138
......
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