unit rOrderWeb; interface uses System.SysUtils, System.Classes, Data.DB, MemDS, DBAccess, Uni, Common.Logging, frxClass, frxExportBaseDialog, frxExportPDF, frCoreClasses, frxDBSet, JS, JSON, frxTableObject, frxUtils; type TrptOrderWeb = class(TDataModule) ucKG: TUniConnection; frxPDFExport1: TfrxPDFExport; frxDBOrderWeb: TfrxDBDataset; frxOrderWeb: TfrxReport; uqOrderWeb: TUniQuery; uqOrderWebORDER_ID: TIntegerField; uqOrderWebCOMPANY_ID: TIntegerField; uqOrderWebUSER_ID: TIntegerField; uqOrderWebORDER_DATE: TDateTimeField; uqOrderWebSTART_DATE: TDateField; uqOrderWebEND_DATE: TDateField; uqOrderWebORDER_STATUS: TStringField; uqOrderWebSCHED_JSON: TStringField; uqOrderWebstaff_fields_order_date: TDateField; uqOrderWebstaff_fields_proof_date: TDateField; uqOrderWebstaff_fields_ship_date: TDateField; uqOrderWebstaff_fields_ship_via: TStringField; uqOrderWebstaff_fields_price: TStringField; uqOrderWebstaff_fields_invoice_to: TStringField; uqOrderWebstaff_fields_invoice_attention: TStringField; uqOrderWebstaff_fields_ship_to: TStringField; uqOrderWebstaff_fields_ship_attention: TStringField; uqOrderWebstaff_fields_po_number: TStringField; uqOrderWebstaff_fields_job_name: TStringField; uqOrderWebstaff_fields_art_due: TDateField; uqOrderWebstaff_fields_plate_due: TDateField; uqOrderWebplates_job_number: TStringField; uqOrderWebsupplied_by_customer_b_w_or_co: TStringField; uqOrderWebsupplied_by_customer_plates: TStringField; uqOrderWebsupplied_by_customer_sample: TStringField; uqOrderWebsupplied_by_customer_dimension: TStringField; uqOrderWebsupplied_by_customer_other: TStringField; uqOrderWebsupplied_by_customer_disk: TStringField; uqOrderWebsupplied_by_customer_e_mail: TStringField; uqOrderWebsupplied_by_customer_ftp: TStringField; uqOrderWebplates_plate_material: TStringField; uqOrderWebplates_thickness: TStringField; uqOrderWebsupplied_by_customer_total_inc: TStringField; uqOrderWebsupplied_by_customer_sheets_us: TStringField; uqOrderWebsupplied_by_customer_initials: TStringField; uqOrderWebproofing_pdf: TStringField; uqOrderWebproofing_pdf_to: TStringField; uqOrderWebproofing_pdf_date_1: TDateField; uqOrderWebproofing_pdf_date_2: TDateField; uqOrderWebproofing_pdf_date_3: TDateField; uqOrderWebproofing_full_size_ink_jet_for: TStringField; uqOrderWebproofing_ink_jet_to: TStringField; uqOrderWebproofing_ink_jet_to_2: TStringField; uqOrderWebproofing_ink_jet_date_1: TDateField; uqOrderWebproofing_ink_jet_date_2: TDateField; uqOrderWebproofing_ink_jet_date_3: TDateField; uqOrderWebproofing_color_contract: TStringField; uqOrderWebproofing_color_contrac_to: TStringField; uqOrderWebproofing_color_contrac_date_1: TDateField; uqOrderWebproofing_color_contrac_date_2: TDateField; uqOrderWebproofing_digital_color_key: TStringField; uqOrderWebproofing_digital_color_to: TStringField; uqOrderWebproofing_digital_color_date_1: TDateField; uqOrderWebquantity_and_colors_press_name: TStringField; uqOrderWebquantity_and_colors_anilox_info: TStringField; uqOrderWebplate_marks_microdots: TStringField; uqOrderWebplate_marks_microdots_comments: TStringField; uqOrderWebplate_marks_crosshairs: TStringField; uqOrderWebplate_marks_crosshairs_comments: TStringField; uqOrderWebplate_marks_color_bars: TStringField; uqOrderWebplate_marks_color_bars_comments: TStringField; uqOrderWebplate_marks_other: TStringField; uqOrderWebplate_marks_other_comments: TStringField; uqOrderWebprint_orientation_print_orient: TStringField; uqOrderWeblayout_around: TStringField; uqOrderWeblayout_accross: TStringField; uqOrderWeblayout_surface_print: TStringField; uqOrderWeblayout_reverse_print: TStringField; uqOrderWeblayout_cylinder_repeat: TStringField; uqOrderWeblayout_cutoff_dimension: TStringField; uqOrderWeblayout_pitch: TStringField; uqOrderWeblayout_teeth: TStringField; uqOrderWeblayout_bleed: TStringField; uqOrderWeblayout_cutback: TStringField; uqOrderWeblayout_minimum_trap_dim: TStringField; uqOrderWeblayout_maximum_trap_dim: TStringField; uqOrderWebupc_size: TStringField; uqOrderWebupc_bar_width_reduction: TStringField; uqOrderWebquantity_and_colors_qty_colors: TStringField; uqOrderWebgeneral_comments: TStringField; uqOrderWebstaff_fields_quickbooks_item: TStringField; uqOrderWebstaff_fields_quantity: TStringField; uqOrderWebupc_distortion_percent: TStringField; uqOrderWebupc_distortion_amount: TStringField; uqOrderWebstaff_fields_art_location: TStringField; uqOrderWebQB_REF_NUM: TStringField; procedure DataModuleCreate(Sender: TObject); private { Private declarations } public { Public declarations } function PrepareReport(SQL: string): string; function GeneratePDF: string; procedure PopulateColorTable(); end; var rptOrderWeb: TrptOrderWeb; implementation {%CLASSGROUP 'Vcl.Controls.TControl'} {$R *.dfm} uses uLibrary, Common.Config; procedure TrptOrderWeb.DataModuleCreate(Sender: TObject); begin Logger.Log( 3, 'TAuthDatabase.DataModuleCreate' ); LoadDatabaseSettings( ucKG, 'kgOrdersServer.ini' ); try ucKG.Connect; except on E: Exception do begin Logger.Log(3, '--TrptOrderList.DataModuleCreate -Error connecting to database: ' + E.Message); end; end; end; procedure TrptOrderWeb.PopulateColorTable; var row: TfrxCustomTableRow; colorArray: TJSONArray; colorsObject, colorObject: TJSONObject; colorsString: string; i, rowIndex: Integer; temp: TObject; begin logger.Log(1, 'Adding Color Rows'); colorsString := uqOrderWeb.FieldByName('quantity_and_colors_qty_colors').AsString; colorsObject := TJSONObject.ParseJSONValue(colorsString) as TJSONObject; colorArray := TJSONArray(colorsObject.GetValue<TJSONArray>('items')); for i := 0 to colorArray.Count - 1 do begin row := frxOrderWeb.FindObject('ColorRow' + IntToStr(i + 1)) as TfrxCustomTableRow; colorObject := colorArray.Items[i] as TJSONObject; row.Cells[0].Text := colorObject.GetValue<string>('#'); row.Cells[1].Text := colorObject.GetValue<string>('Color'); row.Cells[2].Text := colorObject.GetValue<string>('LPI'); row.Cells[3].Text := colorObject.GetValue<string>('Size'); end; colorsObject.Free; end; function TrptOrderWeb.PrepareReport(SQL: string): string; var orderList : TJSObject; i: integer; data: TJSArray; order: TJSObject; callListLength: integer; tempString, strColorList: string; colorObject: TJSONObject; colorList: TJSArray; colorLength: integer; color: TJSObject; colorJSON: TJSONObject; colorListJSON: TJSONArray; items: TJSObject; begin Logger.Log(3, 'Generated SQL for Prepare Report: ' + SQL); //SQL := 'select * from corrugated_plate_orders where ORDER_ID = 18381'; doQuery(uqOrderWeb, SQL); if ( string( uqOrderWeb.FieldByName('quantity_and_colors_qty_colors').AsString ) ) <> '' then begin PopulateColorTable(); end; result := GeneratePDF; Logger.Log(3, 'Report preparation complete.'); end; function TrptOrderWeb.GeneratePDF: string; var ReportDir, ReportFileName: string; reportURL: string; begin ReportDir := ServerConfig.reportsFolder; if not DirectoryExists(ReportDir) then begin ForceDirectories(ReportDir); Logger.Log(5, 'Reports directory created: ' + ReportDir); end; reportURL := 'reports\' + FormatDateTime('yyyymmdd_hhnnss', Now) + '.pdf'; ReportFileName := reportDir + reportUrl; frxPDFExport1.FileName := ReportFileName; frxPDFExport1.ShowDialog := False; try frxOrderWeb.PrepareReport; frxOrderWeb.Export(frxPDFExport1); //frxOrderWeb.ShowPreparedReport; finally frxOrderWeb.Clear; // Clears the report to avoid memory bloat end; Logger.Log(5, 'PDF saved to: ' + ReportFileName); result := reportURL; end; end.