// Order Entry page of Corruguated Orders. Used for both editting and adding
// orders.
unit View.OrderEntryCorrugated;

interface

uses
  System.SysUtils, System.Generics.Collections, System.Classes, JS, Web, WEBLib.Graphics, WEBLib.Controls,
  WEBLib.Forms, WEBLib.Dialogs, WEBLib.Menus, WEBLib.ExtCtrls, WEBLib.StdCtrls,
  WEBLib.JSON, Auth.Service, XData.Web.Client, WebLib.Storage,
  ConnectionModule, App.Types, Vcl.StdCtrls, Vcl.Controls, WEBLib.DBCtrls,
  Data.DB, XData.Web.JsonDataset, XData.Web.Dataset, WEBLib.DB;

type
  TFOrderEntryCorrugated = class(TWebForm)
    pnlMessage: TWebPanel;
    lblMessage: TWebLabel;
    btnCloseNotification: TWebButton;
    dtpOrderDate: TWebDateTimePicker;
    dtpProofDate: TWebDateTimePicker;
    dtpShipDate: TWebDateTimePicker;
    WebLabel1: TWebLabel;
    WebLabel2: TWebLabel;
    dtpArtDue: TWebDateTimePicker;
    dtpPlateDue: TWebDateTimePicker;
    dtpMountDue: TWebDateTimePicker;
    WebLabel3: TWebLabel;
    WebLabel4: TWebLabel;
    WebLabel5: TWebLabel;
    WebLabel6: TWebLabel;
    WebButton1: TWebButton;
    WebLabel7: TWebLabel;
    dtpApprovedDate: TWebDateTimePicker;
    WebLabel8: TWebLabel;
    WebLabel9: TWebLabel;
    edtCompanyName: TWebDBEdit;
    edtCompanyAccountName: TWebDBEdit;
    edtInQuickBooks: TWebDBEdit;
    edtShipVia: TWebDBEdit;
    edtQuantity: TWebDBEdit;
    edtPrice: TWebDBEdit;
    edtInvoiceTo: TWebDBEdit;
    edtPONumber: TWebDBEdit;
    edtJobName: TWebDBEdit;
    edtQuickBooksItem: TWebDBEdit;
    edtOther: TWebDBEdit;
    edtCADFile: TWebDBEdit;
    edtAroundNo: TWebDBEdit;
    edtAcrossNo: TWebDBEdit;
    edtDieCutNo: TWebDBEdit;
    edtRSCD: TWebDBEdit;
    edtRSCW: TWebDBEdit;
    edtRSCL: TWebDBEdit;
    edtCustomAdhesive: TWebDBEdit;
    edtCustomBacking: TWebDBEdit;
    edtStandardSetup: TWebDBEdit;
    edtStripMount: TWebDBEdit;
    edtLoose: TWebDBEdit;
    edtRSCStyle: TWebDBEdit;
    edtProofOther: TWebDBEdit;
    edtProofShipTo: TWebDBEdit;
    edtEmailAttn: TWebDBEdit;
    edtProofEmail: TWebDBEdit;
    edtFaxAttn: TWebDBEdit;
    edtFax: TWebDBEdit;
    edtClemson: TWebDBEdit;
    edtCrossHairs: TWebDBEdit;
    edtMachineIndent: TWebDBEdit;
    edtCylinderSize: TWebDBEdit;
    edtJobNumber: TWebDBEdit;
    edtPlateMaterial: TWebDBEdit;
    edtThickness: TWebDBEdit;
    cbArtApprovedAsIs: TWebDBCheckBox;
    cbPDFFile: TWebDBCheckBox;
    cbWideFormat: TWebDBCheckBox;
    cbPrintCard: TWebDBCheckBox;
    cbFullSizePanel: TWebDBCheckBox;
    XDataWebClient1: TXDataWebClient;
    edtSpecialInstructions: TWebDBEdit;
    tmrScrollTop: TWebTimer;
    XDataWebDataSet1: TXDataWebDataSet;
    WebDataSource1: TWebDataSource;
    btnConfirm: TWebButton;
    XDataWebDataSet1ORDER_ID: TIntegerField;
    XDataWebDataSet1COMPANY_ID: TIntegerField;
    XDataWebDataSet1USER_ID: TIntegerField;
    XDataWebDataSet1ORDER_STATUS: TStringField;
    XDataWebDataSet1SCHED_JSON: TStringField;
    XDataWebDataSet1staff_fields_ship_via: TStringField;
    XDataWebDataSet1staff_fields_price: TStringField;
    XDataWebDataSet1staff_fields_invoice_to: TStringField;
    XDataWebDataSet1staff_fields_invoice_attention: TStringField;
    XDataWebDataSet1staff_fields_ship_to: TStringField;
    XDataWebDataSet1staff_fields_ship_attention: TStringField;
    XDataWebDataSet1staff_fields_po_number: TStringField;
    XDataWebDataSet1staff_fields_job_name: TStringField;
    XDataWebDataSet1ORDER_DATE: TDateField;
    XDataWebDataSet1START_DATE: TDateField;
    XDataWebDataSet1END_DATE: TDateField;
    XDataWebDataSet1plates_job_number: TStringField;
    XDataWebDataSet1supplied_by_customer_dimension: TStringField;
    XDataWebDataSet1supplied_by_customer_e_mail: TStringField;
    XDataWebDataSet1supplied_by_customer_ftp: TStringField;
    XDataWebDataSet1supplied_by_customer_other: TStringField;
    XDataWebDataSet1supplied_by_customer_existing_: TStringField;
    XDataWebDataSet1supplied_by_customer_ref_art_p: TStringField;
    XDataWebDataSet1supplied_by_customer_ref_art_a: TStringField;
    XDataWebDataSet1cut_die_cutdier: TStringField;
    XDataWebDataSet1cut_die_cutdieb: TStringField;
    XDataWebDataSet1cut_die_cutdief: TStringField;
    XDataWebDataSet1cut_die_cutdierkr: TStringField;
    XDataWebDataSet1cut_die_cutdiefkr: TStringField;
    XDataWebDataSet1cut_die_cad_file: TStringField;
    XDataWebDataSet1cut_die_attached: TStringField;
    XDataWebDataSet1cut_die_boxpol250: TStringField;
    XDataWebDataSet1cut_die_boxpol155: TStringField;
    XDataWebDataSet1cut_die_boxpol125: TStringField;
    XDataWebDataSet1cut_die_brub: TStringField;
    XDataWebDataSet1proofing_fax: TStringField;
    XDataWebDataSet1proofing_fax_attn: TStringField;
    XDataWebDataSet1proofing_e_mail: TStringField;
    XDataWebDataSet1proofing_ship_to: TStringField;
    XDataWebDataSet1proofing_other: TStringField;
    XDataWebDataSet1proofing_changes_required: TStringField;
    XDataWebDataSet1proofing_changes_date: TDateField;
    XDataWebDataSet1layout_rsc_l: TStringField;
    XDataWebDataSet1layout_rcs_w: TStringField;
    XDataWebDataSet1layout_rcs_d: TStringField;
    XDataWebDataSet1layout_die_cut_no: TStringField;
    XDataWebDataSet1layout_accross_no: TStringField;
    XDataWebDataSet1layout_around_no: TStringField;
    XDataWebDataSet1layout_cad_file: TStringField;
    XDataWebDataSet1colors_cylinder_size: TStringField;
    XDataWebDataSet1colors_machine_ident: TStringField;
    XDataWebDataSet1mounting_standard_setup: TStringField;
    XDataWebDataSet1mounting_custom_backing: TStringField;
    XDataWebDataSet1mounting_custom_adhesive: TStringField;
    XDataWebDataSet1colors_cross_hairs: TStringField;
    XDataWebDataSet1colors_clemson: TStringField;
    XDataWebDataSet1plates_thickness: TStringField;
    XDataWebDataSet1plates_plate_material: TStringField;
    XDataWebDataSet1general_special_instructions: TStringField;
    XDataWebDataSet1colors_colors: TStringField;
    XDataWebDataSet1staff_fields_quickbooks_item: TStringField;
    XDataWebDataSet1staff_fields_quantity: TStringField;
    XDataWebDataSet1layout_rsc_style: TStringField;
    XDataWebDataSet1staff_fields_art_location: TStringField;
    XDataWebDataSet1NAME: TStringField;
    XDataWebDataSet1SHORT_NAME: TStringField;
    XDataWebDataSet1supplied_by_customer_b_w_copy: TBooleanField;
    XDataWebDataSet1supplied_by_customer_color_copy: TBooleanField;
    XDataWebDataSet1supplied_by_customer_plates: TBooleanField;
    XDataWebDataSet1supplied_by_customer_sample_ca: TBooleanField;
    XDataWebDataSet1supplied_by_customer_disk_or_cd: TBooleanField;
    XDataWebDataSet1mounting_loose: TStringField;
    XDataWebDataSet1mounting_sticky_bak: TBooleanField;
    XDataWebDataSet1mounting_full_mount: TBooleanField;
    XDataWebDataSet1mounting_strip_mount: TStringField;
    XDataWebDataSet1layout_excalibur_die: TBooleanField;
    XDataWebDataSet1proofing_full_size_panel: TBooleanField;
    XDataWebDataSet1proofing_print_card: TBooleanField;
    XDataWebDataSet1proofing_wide_format: TBooleanField;
    XDataWebDataSet1proofing_pdf_file: TBooleanField;
    XDataWebDataSet1proofing_art_approved_as_is: TBooleanField;
    XDataWebDataSet1proofing_e_mail_attn: TStringField;
    XDataWebDataSet1proofing_approved_date: TStringField;
    XDataWebDataSet1staff_fields_order_date: TStringField;
    XDataWebDataSet1staff_fields_proof_date: TStringField;
    XDataWebDataSet1staff_fields_ship_date: TStringField;
    XDataWebDataSet1staff_fields_art_due: TStringField;
    XDataWebDataSet1staff_fields_plate_due: TStringField;
    XDataWebDataSet1staff_fields_mount_due: TStringField;
    cbRefArtAPDF: TWebCheckBox;
    cbRefArtPrintCard: TWebCheckBox;
    cbExistingCuttingDie: TWebCheckBox;
    cbFTP: TWebCheckBox;
    cbSampleCarton: TWebCheckBox;
    cbPlates: TWebCheckBox;
    cbColorCopy: TWebCheckBox;
    cbStripMount: TWebCheckBox;
    cbFullMount: TWebCheckBox;
    cbStickyBak: TWebCheckBox;
    cbLoose: TWebCheckBox;
    cbExcaliburDie: TWebCheckBox;
    XDataWebDataSet1ADDRESS_LIST: TStringField;
    wdsShipTo: TWebDataSource;
    xdwdsShipTo: TXDataWebDataSet;
    xdwdsShipToADDRESS: TStringField;
    WebDBComboBox1: TWebDBComboBox;
    cbEmail: TWebCheckBox;
    XDataWebDataSet1supplied_by_customer_order_date: TStringField;
    btnEdit: TWebButton;
    btnCancel: TWebButton;
    procedure WebFormCreate(Sender: TObject);
    procedure HideNotification();
    procedure ShowNotification(Notification: string);
    procedure WebFormShow(Sender: TObject);
    [async] procedure getOrder(Order_ID: string);
    [async] procedure getCustomer(customerID: string);
    procedure tmrScrollTopTimer(Sender: TObject);
    procedure WebButton1Click(Sender: TObject);
    procedure addColorRow(num, Color, LPI, Size: string);
    procedure btnConfirmClick(Sender: TObject);
    [async] procedure AddCorrugatedOrder(orderJSON: TJSONObject);
    procedure btnCancelClick(Sender: TObject);
  private
    FAgencyCode: string;
    FCurrentReportType: string;
    FSelectProc: TSelectProc;
    orderID: string;
    customerID: string;
    mode: string;
    //FJSONProc1: TJSONProc1;
  public
    class function CreateForm(AElementID, orderInfo, customerInfo, mode: string): TWebForm;
  end;

var
  FOrderEntryCorrugated: TFOrderEntryCorrugated;

implementation

{$R *.dfm}

uses
  View.Home, View.Main;

procedure TFOrderEntryCorrugated.btnConfirmClick(Sender: TObject);
// Converts all the information on the page into a JSON to then send to the server
var
  colorList: TJSONArray;
  container: TJSElement;
  colorCollection: TJSHTMLCollection;
  color: TJSHTMLElement;
  I, J: integer;
  colorJSON, orderJSON, colorListJSON: TJSONObject;
  fieldNames: TStringList;
  itemList: TJSNodeList;
  header, value: string;
  Field: TField;
  Response: TXDataClientResponse;
begin
  orderJSON := TJSONObject.Create;
  colorList := TJSONArray.Create;
  container := document.getElementById('additionalFields');
  colorCollection := container.children;

  for I := 0 to colorCollection.length - 1 do
  begin
    colorJSON := TJSONObject.Create;
    itemList := colorCollection[I].childNodes;
    for J := 0 to itemList.length - 2 do
    begin
      header := TJSHTMLElement(itemList[J]).children[0].innerText.Replace(':', '').Trim();
      value := TJSHTMLInputElement(TJSHTMLElement(itemList[J]).childNodes[1]).value;
      colorJSON.AddPair(header, value);
    end;
    colorList.Add(colorJSON);
  end;
  colorListJSON := TJSONObject.Create;
  colorListJSON.AddPair('items', colorList);
  XDataWebDataSet1.Edit;

  XDataWebDataSet1colors_colors.Value := colorListJSON.ToString;

  //Convert all dates to strings because I was having less issues with that data type.
  XDataWebDataSet1staff_fields_proof_date.Value := DateTimeToStr(dtpProofDate.Date);
  XDataWebDataSet1staff_fields_ship_date.Value := DateTimeToStr(dtpShipDate.Date);
  XDataWebDataSet1staff_fields_art_due.Value := DateTimeToStr(dtpArtDue.Date);
  XDataWebDataSet1staff_fields_mount_due.Value := DateTimeToStr(dtpMountDue.Date);
  XDataWebDataSet1staff_fields_plate_due.Value := DateTimeToStr(dtpPlateDue.Date);
  XDataWebDataSet1staff_fields_order_date.Value := DateTimeToStr(dtpOrderDate.Date);
  XDataWebDataSet1proofing_approved_date.Value := DateTimeToStr(dtpApprovedDate.Date);

  // Convert all check boxes to strings because the database stores them as strings
  if cbFTP.Checked then
    XDataWebDataSet1supplied_by_customer_ftp.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_ftp.AsString := '';
  if cbExistingCuttingDie.Checked then
    XDataWebDataSet1supplied_by_customer_existing_.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_existing_.AsString := '';
  if cbRefArtPrintCard.Checked then
    XDataWebDataSet1supplied_by_customer_ref_art_p.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_ref_art_p.AsString := '';
  if cbRefArtAPDF.Checked then
    XDataWebDataSet1supplied_by_customer_ref_art_a.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_ref_art_a.AsString := '';
  if cbColorCopy.Checked then
    XDataWebDataSet1supplied_by_customer_color_copy.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_color_copy.AsString := '';
  if cbPlates.Checked then
    XDataWebDataSet1supplied_by_customer_plates.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_plates.AsString := '';
  if cbSampleCarton.Checked then
    XDataWebDataSet1supplied_by_customer_sample_ca.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_sample_ca.AsString := '';
  if cbEmail.Checked then
     XDataWebDataSet1supplied_by_customer_e_mail.AsString := 'T'
  else
    XDataWebDataSet1supplied_by_customer_e_mail.AsString := '';

  // layout

  if cbExcaliburDie.Checked then
    XDataWebDataSet1layout_excalibur_die.AsString := 'T'
  else
    XDataWebDataSet1layout_excalibur_die.AsString := '';

  // proofing

  if cbPDFFile.Checked then
    XDataWebDataSet1proofing_pdf_file.AsString := 'T'
  else
    XDataWebDataSet1proofing_pdf_file.AsString := '';

  // Mounting
  if cbStickyBak.Checked then
    XDataWebDataSet1mounting_sticky_bak.AsString := 'T'
  else
    XDataWebDataSet1mounting_sticky_bak.AsString := '';

  if cbStickyBak.Checked then
    XDataWebDataSet1mounting_full_mount.AsString := 'T'
  else
    XDataWebDataSet1mounting_full_mount.AsString := '';

  XDataWebDataSet1.Post;
  XDataWebDataSet1.First;
  while not XDataWebDataSet1.Eof do
  begin
    for Field in XDataWebDataSet1.Fields do
    begin
      if Field is TStringField then
      begin
        if Field.AsString = '' then
          orderJSON.AddPair(Field.FieldName, '')
        else
          orderJSON.AddPair(Field.FieldName, Field.AsString);  // Add all other fields
      end
      else if Field is TBooleanField then
      begin
        if Field.AsBoolean then
          orderJSON.AddPair(Field.FieldName, 'T')
        else
          orderJSON.AddPair(Field.FieldName, '');
      end;
    end;
    XDataWebDataSet1.Next;
  end;
  orderJSON.AddPair('COMPANY_ID', customerID);
  orderJSON.AddPair('USER_ID', '1011');
  orderJSON.AddPair('mode', mode);
  if mode = 'EDIT' then
    orderJSON.AddPair('ORDER_ID', orderID);
  AddCorrugatedOrder(orderJSON);
  FViewMain.ViewOrders('Success:Order Successfully Added');
end;

procedure TFOrderEntryCorrugated.AddCorrugatedOrder(orderJSON: TJSONObject);
// sends the order JSON object to the server
var
Response: TXDataClientResponse;
begin
  Response := await(XDataWebClient1.RawInvokeAsync('ILookupService.AddCorrugatedOrder',
              [orderJSON.ToString]));
end;

class function TFOrderEntryCorrugated.CreateForm(AElementID, orderInfo, customerInfo, mode: string): TWebForm;
var
  localMode: string;
begin
  localMode := mode;
  Application.CreateForm(TFOrderEntryCorrugated, AElementID, Result,
    procedure(AForm: TObject)
    begin
      with TFOrderEntryCorrugated(AForm) do
      begin
        HideNotification;
        TFOrderEntryCorrugated(AForm).customerID := customerInfo;
        TFOrderEntryCorrugated(AForm).orderID := orderInfo;
        TFOrderEntryCorrugated(AForm).mode := localMode;
      end;
    end
  );

end;

procedure TFOrderEntryCorrugated.addColorRow(num: string; Color: string; LPI: string; Size: string);
// Java script code to add a row of colors when a button is clicked
// all variables are information to be placed in the boxes when loading an order.
// TODO: convert to Delphi
begin
  asm
      const container = document.getElementById('additionalFields');

      // Create a new row for the new fields
      const newRow = document.createElement('div');
      newRow.className = 'row mb-2';

      const labels = ['#', 'Color', 'LPI', 'Size'];
      const values = [num, Color, LPI, Size];
      labels.forEach((label, index) => {
        const col = document.createElement('div');
        col.className = 'col-sm';

        const labelElement = document.createElement('label');
        labelElement.className = 'pe-2';
        labelElement.style.fontWeight = '700';
        labelElement.style.fontSize = '15px';
        labelElement.textContent = label + ':';

        const inputElement = document.createElement('input');
        inputElement.className = 'form-control input-sm';
        inputElement.style.width = '100%';
        inputElement.id =  'input-' + container.childElementCount + '-' + index; // Unique ID based on count
        inputElement.value = values[index];  // Set the value based on the parameter

        col.appendChild(labelElement);
        col.appendChild(inputElement);

        newRow.appendChild(col);
      });

      const removeButtonCol = document.createElement('div');
      removeButtonCol.className = 'col-auto d-flex align-items-center';

      const removeButton = document.createElement('button');
      removeButton.className = 'btn btn-danger btn-sm';
      removeButton.textContent = 'Remove';
      removeButton.addEventListener('click', function() {
        container.removeChild(newRow);
      });

      removeButtonCol.appendChild(removeButton);
      newRow.appendChild(removeButtonCol);

      container.appendChild(newRow);
    end;
end;

procedure TFOrderEntryCorrugated.WebButton1Click(Sender: TObject);
begin
  addColorRow('','','','');
end;

procedure TFOrderEntryCorrugated.btnCancelClick(Sender: TObject);
begin
  FViewMain.ViewOrders('');
end;

procedure TFOrderEntryCorrugated.WebFormCreate(Sender: TObject);
begin
   if not DMConnection.ApiConnection.Connected then
   begin
    DMConnection.ApiConnection.OpenAsync;
    console.log('report requirements connection open')
   end;
end;

procedure TFOrderEntryCorrugated.getOrder(Order_ID: string);
// retrieves an order from the server then loads the info into the page
var
  xdcResponse: TXDataClientResponse;
  orderList : TJSObject;
  i: integer;
  data: TJSArray;
  order: TJSObject;
  callListLength: integer;
  tempString, strColorList: string;
  colorObject: TJSObject;
  colorList: TJSArray;
  colorLength: integer;
  color: TJSObject;
  colorJSON: TJSONObject;
  colorListJSON: TJSONArray;
begin
  xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetOrder',
        [Order_ID]));
  order :=  TJSObject(xdcResponse.Result);
  data := TJSArray(order['data']);
  XDataWebDataSet1.Close;
  XDataWebDataSet1.SetJsonData(order);
  XDataWebDataSet1.Open;
  if XDataWebDataSet1colors_colors.Value <> '' then
  begin
  colorObject := TJSObject(TJSJSON.parse(XDataWebDataSet1colors_colors.Value));
  colorList := TJSArray(colorObject['items']);
  for I := 0 to colorList.length -1 do
    begin
      color := TJSObject(colorList[i]);
      addColorRow(String(color['#']), string(color['Color']), string(color['LPI']), string(color['Size']));
    end;
  end;

  // Check boxes and dates need to be manually set

  if not (XDataWebDataSet1staff_fields_order_date.AsString = '') then
    dtpOrderDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_order_date.Value)
  else
    dtpOrderDate.Date := 0;
  if not (XDataWebDataSet1staff_fields_proof_date.AsString = '') then
    dtpProofDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_proof_date.AsString)
  else
    dtpProofDate.Date := 0;
  if not (XDataWebDataSet1staff_fields_ship_date.AsString = '') then
    dtpShipDate.Date := StrToDateTime(XDataWebDataSet1staff_fields_ship_date.AsString)
  else
    dtpShipDate.Date := 0;
  if not (XDataWebDataSet1staff_fields_art_due.AsString = '') then
    dtpArtDue.Date := StrToDateTime(XDataWebDataSet1staff_fields_art_due.AsString)
  else
    dtpArtDue.Date := 0;
  if not (XDataWebDataSet1staff_fields_plate_due.AsString = '') then
    dtpPlateDue.Date := StrToDateTime(XDataWebDataSet1staff_fields_plate_due.AsString)
  else
    dtpPlateDue.Date := 0;
  if not (XDataWebDataSet1staff_fields_mount_due.AsString = '') then
    dtpMountDue.Date := StrToDateTime(XDataWebDataSet1staff_fields_mount_due.AsString)
  else
    dtpMountDue.Date := 0;
  if not (XDataWebDataSet1proofing_approved_date.AsString = '') then
    dtpApprovedDate.Date := StrToDateTime(XDataWebDataSet1proofing_approved_date.AsString)
  else
    dtpApprovedDate.Date := 0;

  if XDataWebDataSet1supplied_by_customer_existing_.AsString = 'T'  then
    cbExistingCuttingDie.Checked := true
  else
    cbExistingCuttingDie.Checked := false;
  if XDataWebDataSet1supplied_by_customer_ref_art_a.AsString = 'T'  then
    cbRefArtAPDF.Checked := true
  else
    cbRefArtAPDF.Checked := false;
  if XDataWebDataSet1supplied_by_customer_ref_art_p.AsString = 'T'  then
    cbRefArtPrintCard.Checked := true
  else
    cbRefArtPrintCard.Checked := false;

  // Supplied by customers check boxes

  if XDataWebDataSet1supplied_by_customer_color_copy.AsBoolean then
    cbColorCopy.Checked := true
  else
    cbColorCopy.checked := false;

  if XDataWebDataSet1supplied_by_customer_ftp.AsString <> '' then
  begin
    cbFTP.Checked := true;
  end
  else
    cbFTP.Checked := false;

  if XDataWebDataSet1supplied_by_customer_plates.AsBoolean then
    cbPlates.Checked := true
  else
    cbPlates.Checked := false;

  if XDataWebDataSet1supplied_by_customer_sample_ca.AsBoolean then
    cbSampleCarton.Checked := true
  else
    cbSampleCarton.Checked := false;

  if XDataWebDataSet1supplied_by_customer_e_mail.AsBoolean then
    cbEmail.Checked := true
  else
    cbSampleCarton.Checked := false;

  // layout

  if XDataWebDataSet1layout_excalibur_die.AsBoolean then
    cbExcaliburDie.Checked := true
  else
    cbExcaliburDie.Checked := false;


  // Mounting check boxes
  if XDataWebDataSet1mounting_loose.AsString <> '' then
    cbLoose.Checked := true
  else
    cbLoose.Checked := false;

  if XDataWebDataSet1mounting_sticky_bak.AsString <> '' then
    cbStickyBak.Checked := true
  else
    cbStickyBak.Checked := false;

  if XDataWebDataSet1mounting_full_mount.AsString <> '' then
    cbFullMount.Checked := true
  else
    cbFullMount.Checked := false;

  if XDataWebDataSet1mounting_strip_mount.AsString <> '' then
    cbStripMount.Checked := true
  else
    cbStripMount.Checked := false;

  if mode = 'EDIT' then
    CustomerID := XDataWebDataSet1COMPANY_ID.AsString;

end;

procedure TFOrderEntryCorrugated.getCustomer(customerID: string);
// gets a customer from the database then loads the appropiate fields
var
  xdcResponse: TXDataClientResponse;
  customer : TJSObject;
  address: string;
begin
  xdcResponse := await(XDataWebClient1.RawInvokeAsync('ILookupService.GetCustomer',
        [customerID]));
  customer :=  TJSObject(xdcResponse.Result);
  XDataWebDataSet1.Close;
  XDataWebDataSet1.SetJsonData(customer);
  XDataWebDataSet1.Open;



  xdwdsShipTo.Close;
  xdwdsShipTo.SetJSONData(customer['ADDRESS_LIST']);
  xdwdsShipTo.Open;

end;

procedure TFOrderEntryCorrugated.WebFormShow(Sender: TObject);
begin
  if mode <> 'ADD' then
    getOrder(orderID)
  else
    getCustomer(customerID);
  HideNotification();
end;

procedure TFOrderEntryCorrugated.HideNotification;
begin
  pnlMessage.ElementHandle.hidden := True;
end;

procedure TFOrderEntryCorrugated.ShowNotification(Notification: string);
begin
  if Notification <> '' then
  begin
    lblMessage.Caption := Notification;
    pnlMessage.ElementHandle.hidden := False;
  end;
end;


procedure TFOrderEntryCorrugated.tmrScrollTopTimer(Sender: TObject);
begin
  tmrScrollTop.Enabled := False;
  window.scrollTo(0, 0);
end;

initialization
  RegisterClass(TFOrderEntryCorrugated);

end.

