{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% osCommerce Product Manager for Windows (oscpmwin). Copyright ©2003,2004,2005 by Mario A. Valdez-Ramirez. You can contact Mario A. Valdez-Ramirez by email at mario@mariovaldez.org or paper mail at Olmos 809, San Nicolas, NL. 66495, Mexico. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} UNIT main; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ToolWin, ComCtrls, DB, ExtCtrls, Menus, StdCtrls, Grids, DBGrids, DBTables, ImgList, Buttons, clipbrd, oscpmdata, Dialogs, ShlObj, modules, FR_Class, FR_DSet; TYPE Topm_Form_Main = CLASS (TForm) N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N8: TMenuItem; opm_ImageList_List: TImageList; opm_ImageList_Status: TImageList; opm_ImageList_Tree: TImageList; opm_Image_Status: TImage; opm_ListView_Main: TListView; opm_MainMenu_Main: TMainMenu; opm_MenuItem_About: TMenuItem; opm_MenuItem_Catalog: TMenuItem; opm_MenuItem_Config: TMenuItem; opm_MenuItem_Connect: TMenuItem; opm_MenuItem_Database: TMenuItem; opm_MenuItem_Disconnect: TMenuItem; opm_MenuItem_Exit: TMenuItem; opm_MenuItem_Help: TMenuItem; opm_MenuItem_License: TMenuItem; opm_MenuItem_Product: TMenuItem; opm_MenuItem_ProductAdd: TMenuItem; opm_MenuItem_ProductCopyAsText: TMenuItem; opm_MenuItem_ProductDel: TMenuItem; opm_MenuItem_ProductEdit: TMenuItem; opm_MenuItem_ProductExport: TMenuItem; opm_MenuItem_ProductSelAll: TMenuItem; opm_MenuItem_RefreshCategories: TMenuItem; opm_MenuItem_RefreshProducts: TMenuItem; opm_MenuItem_SearchProduct: TMenuItem; opm_Panel_Main: TPanel; opm_PopMenuItem_CatCollapse2: TMenuItem; opm_PopMenuItem_CatCollapse: TMenuItem; opm_PopMenuItem_CatExpand2: TMenuItem; opm_PopMenuItem_CatExpand: TMenuItem; opm_PopMenuItem_ConnConn: TMenuItem; opm_PopMenuItem_ConnDisconn: TMenuItem; opm_PopMenuItem_PAdd: TMenuItem; opm_PopMenuItem_PAvailability: TMenuItem; opm_PopMenuItem_PAvailable: TMenuItem; opm_PopMenuItem_PCat: TMenuItem; opm_PopMenuItem_PCopyAsText: TMenuItem; opm_PopMenuItem_PDelete: TMenuItem; opm_PopMenuItem_PEdit: TMenuItem; opm_PopMenuItem_PExport: TMenuItem; opm_PopMenuItem_PMan: TMenuItem; opm_PopMenuItem_PMod: TMenuItem; opm_PopMenuItem_PModel: TMenuItem; opm_PopMenuItem_PNotAvailable: TMenuItem; opm_PopMenuItem_PPrice: TMenuItem; opm_PopMenuItem_PQuantity: TMenuItem; opm_PopMenuItem_PSelAll: TMenuItem; opm_PopMenuItem_PSpecial: TMenuItem; opm_PopMenuItem_PWeight: TMenuItem; opm_PopupMenu_CatList: TPopupMenu; opm_PopupMenu_Connection: TPopupMenu; opm_PopupMenu_PList: TPopupMenu; opm_SaveDialog_Export: TSaveDialog; opm_Splitter_Main: TSplitter; opm_StatusBar_Main: TStatusBar; opm_TreeView_Main: TTreeView; opm_MenuItem_Tools: TMenuItem; opm_MenuItem_ExternalModules: TMenuItem; N7: TMenuItem; opm_PopMenuItem_CatRename: TMenuItem; opm_PopMenuItem_PPrint: TMenuItem; opm_MenuItem_ProductPrint: TMenuItem; opm_PrintDialog_Print: TPrintDialog; opm_frReport_ProdList: TfrReport; opm_frUserDataset_ProdList: TfrUserDataset; opm_PopMenuItem_PCopyAsPre: TMenuItem; opm_MenuItem_ProductCopyAsPre: TMenuItem; opm_MenuItem_ProductCopy: TMenuItem; opm_PopMenuItem_PCopy: TMenuItem; opm_PopMenuItem_CatDelete: TMenuItem; opm_PopMenuItem_CatAdd: TMenuItem; opm_ImageList_Toolbar: TImageList; opm_ToolBar_Main: TToolBar; opm_ToolButton_Connect: TToolButton; opm_ToolButton_Disconnect: TToolButton; opm_ToolButton_Config: TToolButton; opm_ToolButton_Refresh: TToolButton; opm_ToolButton_AddProduct: TToolButton; opm_ToolButton_EditProduct: TToolButton; opm_ToolButton_Search: TToolButton; opm_ToolButton_Sep3: TToolButton; opm_ToolButton_Sep4: TToolButton; opm_ToolButton_Sep6: TToolButton; opm_ToolButton_DeleteProduct: TToolButton; opm_Panel_ToolbarLanguage: TPanel; opm_ToolButton_Sep1: TToolButton; opm_ComboBox_DisplayLang: TComboBox; opm_ToolButton_Exit: TToolButton; opm_ToolButton_ExportProduct: TToolButton; opm_ToolButton_PrintProduct: TToolButton; opm_ToolButton_AddCat: TToolButton; opm_ToolButton_RenCat: TToolButton; opm_ToolButton_DelCat: TToolButton; opm_ToolButton_Sep2: TToolButton; N5: TMenuItem; opm_MenuItem_CategoryAdd: TMenuItem; opm_MenuItem_CategoryDelete: TMenuItem; opm_MenuItem_CategoryRename: TMenuItem; opm_ImageList_MainMenu: TImageList; opm_Panel_ToolbarQuickSearch: TPanel; Sep7: TToolButton; opm_Edit_QuickSearch: TEdit; opm_SpeedButton_QuickSearch: TSpeedButton; opm_MenuItem_CheckUpdates: TMenuItem; N6: TMenuItem; N9: TMenuItem; opm_MenuItem_ManAdd: TMenuItem; opm_MenuItem_ManDelete: TMenuItem; opm_MenuItem_ManRename: TMenuItem; opm_MenuItem_Backup: TMenuItem; N10: TMenuItem; N11: TMenuItem; opm_PopMenuItem_PCopyPR: TMenuItem; opm_PopMenuItem_PPastePR: TMenuItem; N12: TMenuItem; opm_MenuItem_PRCopy: TMenuItem; opm_MenuItem_PRPaste: TMenuItem; opm_MenuItem_Fullscreen: TMenuItem; N13: TMenuItem; opm_MenuItem_ManCurrency: TMenuItem; opm_MenuItem_Website: TMenuItem; N14: TMenuItem; opm_MenuItem_Forums: TMenuItem; N15: TMenuItem; opm_MenuItem_ShowSQLLog: TMenuItem; opm_PopMenuItem_PPrintPDF: TMenuItem; opm_MenuItem_ProductPrintPDF: TMenuItem; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure opm_ComboBox_DisplayLangSelect(Sender: TObject); procedure opm_ListView_MainDblClick(Sender: TObject); procedure opm_MenuItem_AboutClick(Sender: TObject); procedure opm_MenuItem_ConfigClick(Sender: TObject); procedure opm_MenuItem_ConnectClick(Sender: TObject); procedure opm_MenuItem_DisconnectClick(Sender: TObject); procedure opm_MenuItem_ExitClick(Sender: TObject); procedure opm_MenuItem_LicenseClick(Sender: TObject); procedure opm_MenuItem_RefreshCategoriesClick(Sender: TObject); procedure opm_MenuItem_RefreshProductsClick(Sender: TObject); procedure opm_MenuItem_SearchProductClick(Sender: TObject); procedure opm_PopMenuItem_CatCollapse2Click(Sender: TObject); procedure opm_PopMenuItem_CatCollapseClick(Sender: TObject); procedure opm_PopMenuItem_CatExpand2Click(Sender: TObject); procedure opm_PopMenuItem_CatExpandClick(Sender: TObject); procedure opm_PopMenuItem_PAddClick(Sender: TObject); procedure opm_PopMenuItem_PAvailableClick(Sender: TObject); procedure opm_PopMenuItem_PCatClick(Sender: TObject); procedure opm_PopMenuItem_PCopyAsTextClick(Sender: TObject); procedure opm_PopMenuItem_PDeleteClick(Sender: TObject); procedure opm_PopMenuItem_PExportClick(Sender: TObject); procedure opm_PopMenuItem_PManClick(Sender: TObject); procedure opm_PopMenuItem_PModelClick(Sender: TObject); procedure opm_PopMenuItem_PNotAvailableClick(Sender: TObject); procedure opm_PopMenuItem_PPriceClick(Sender: TObject); procedure opm_PopMenuItem_PQuantityClick(Sender: TObject); procedure opm_PopMenuItem_PSelAllClick(Sender: TObject); procedure opm_PopMenuItem_PSpecialClick(Sender: TObject); procedure opm_PopMenuItem_PWeightClick(Sender: TObject); procedure opm_TreeView_MainChange(Sender: TObject; Node: TTreeNode); procedure opm_TreeView_MainCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean); procedure opm_TreeView_MainContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); procedure opm_TreeView_MainDblClick(Sender: TObject); procedure opm_TreeView_MainDragDrop(Sender, Source: TObject; X, Y: Integer); procedure opm_TreeView_MainDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure opm_TreeView_MainExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); procedure opm_TreeView_MainKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure opm_TreeView_MainKeyPress(Sender: TObject; var Key: Char); procedure opm_MenuItem_ExternalModulesClick(Sender: TObject); procedure opm_PopMenuItem_CatRenameClick(Sender: TObject); procedure opm_ListView_MainColumnClick(Sender: TObject; Column: TListColumn); procedure opm_PopMenuItem_PPrintClick(Sender: TObject); procedure opm_frReport_ProdListGetValue(const ParName: String; var ParValue: Variant); procedure opm_frUserDataset_ProdListCheckEOF(Sender: TObject; var Eof: Boolean); procedure opm_frUserDataset_ProdListFirst(Sender: TObject); procedure opm_frUserDataset_ProdListNext(Sender: TObject); procedure opm_PopMenuItem_PCopyAsPreClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure opm_PopMenuItem_CatDeleteClick(Sender: TObject); procedure opm_PopMenuItem_CatAddClick(Sender: TObject); procedure opm_ListView_MainKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure opm_ListView_MainChange(Sender: TObject; Item: TListItem; Change: TItemChange); procedure opm_SpeedButton_QuickSearchClick(Sender: TObject); procedure opm_Edit_QuickSearchKeyPress(Sender: TObject; var Key: Char); procedure opm_MenuItem_CheckUpdatesClick(Sender: TObject); procedure opm_MenuItem_ManAddClick(Sender: TObject); procedure opm_MenuItem_ManRenameClick(Sender: TObject); procedure opm_MenuItem_ManDeleteClick(Sender: TObject); procedure opm_MenuItem_BackupClick(Sender: TObject); procedure opm_MenuItem_FullscreenClick(Sender: TObject); procedure opm_PopMenuItem_PCopyPRClick(Sender: TObject); procedure opm_PopMenuItem_PPastePRClick(Sender: TObject); procedure opm_MenuItem_ManCurrencyClick(Sender: TObject); procedure opm_ListView_MainCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); procedure opm_MenuItem_WebsiteClick(Sender: TObject); procedure opm_MenuItem_ForumsClick(Sender: TObject); procedure opm_MenuItem_ShowSQLLogClick(Sender: TObject); procedure opm_PopMenuItem_PPrintPDFClick(Sender: TObject); private FUNCTION FNopm_Apply_Operation (SourceValue, Conversion: STRING; ValueType : INTEGER; AllowNegative : BOOLEAN) : STRING; FUNCTION FNopm_GetProductByID (ProdID, LangID : LONGINT; VAR ProdList : opmT_ProductList) : opmR_Product; FUNCTION FNopm_GetRealLangIDByIndex (VAR LangList : opmT_LanguageList; LangIndex : LONGINT) : LONGINT; PROCEDURE PRopm_Update_StatusBar (ConnectedStat : LONGINT; StatusString : STRING; ProductTotal : LONGINT; CurCurr : STRING); PROCEDURE PRopm_AddCatTreeNode (VAR CatList : opmT_CategoryList; CatCurrentID : LONGINT; CurNode : TTreeNode; TreeDepth : INTEGER); PROCEDURE PRopm_AddProduct (NewProdRecord : opmR_Product; SingleDescList : opmT_SingleDescList); PROCEDURE PRopm_ClearCategoryList (VAR CatList : TStringList); PROCEDURE PRopm_ClearLanguageList (VAR LangList : TStringList); PROCEDURE PRopm_ClearManufacturerList (VAR ManList : TStringList); PROCEDURE PRopm_ClearProductList (VAR ListView : TListView); PROCEDURE PRopm_ClearTaxList (VAR TaxList : TStringList); PROCEDURE PRopm_ClearCurrencyList (VAR CurrencyList : TStringList); PROCEDURE PRopm_Disconnect; PROCEDURE PRopm_Create_ExportList (VAR ExportString : STRING; VAR CatList : opmT_CategoryList; VAR ManList : opmT_ManufacturerList; JustifyCols : BOOLEAN); PROCEDURE PRopm_DeleteProduct (ProdID : LONGINT); PROCEDURE PRopm_LoadCategoryBoxList (VAR CatList : opmT_CategoryList; CatCurrentID, TreeDepth : LONGINT; VAR CatIndex : LONGINT; VAR CatBoxList : TStringList); PROCEDURE PRopm_LoadCategoryList (VAR CatList : opmT_CategoryList; VAR CatBoxList : TStringList); PROCEDURE PRopm_LoadConfiguration; PROCEDURE PRopm_LoadLanguageList (VAR LangList : opmT_LanguageList); PROCEDURE PRopm_LoadManufacturerList (VAR ManList : opmT_ManufacturerList; VAR ManBoxList : TStringList); PROCEDURE PRopm_LoadProductListByCat (ProductCat : LONGINT; VAR ProdList : opmT_ProductList; VAR DescList : opmT_DescriptionList); PROCEDURE PRopm_LoadTaxList (VAR TaxList : opmT_TaxList; VAR TaxBoxList : TStringList); PROCEDURE PRopm_Connect; PROCEDURE PRopm_RenderCategoryDisplay (VAR CatList : opmT_CategoryList; VAR TreeControl : TTreeView; CurCatID : LONGINT); PROCEDURE PRopm_RenderLanguageDisplay (VAR ListControl : TComboBox; VAR LangList : opmT_LanguageList); PROCEDURE PRopm_RenderProductDisplay (VAR CatList : opmT_CategoryList; VAR ManList : opmT_ManufacturerList; VAR ProdList : opmT_ProductList; VAR ListControl : TListView; CurProdID : LONGINT); PROCEDURE PRopm_SaveConfiguration; PROCEDURE PRopm_SearchProducts (PCategory, PManufacturer: LONGINT; PModel, PName, PDesc : STRING; PSPrice, PImgURL, PAvailable : LONGINT; VAR ProdList : opmT_ProductList; VAR DescList : opmT_DescriptionList; MultiString : STRING); PROCEDURE PRopm_SetControls_Disconnected; PROCEDURE PRopm_SetDisplay (RememberVisual : WORD); PROCEDURE PRopm_SetControls_FullConnected; PROCEDURE PRopm_SetUnknown; PROCEDURE PRopm_UpdateProdData (ProdID : LONGINT; ProdTable, ProdField, ProdDataStr : STRING; PDataIsNum : BOOLEAN; SecIDField, SecIDData : STRING; SQLQueryType : INTEGER); PROCEDURE PRopm_UpdateProduct (CurProdRecord, NewProdRecord : opmR_Product; SingleDescList : opmT_SingleDescList); PROCEDURE PRopm_UpdateCatName (CatData : opmT_SingleCatList; TotalCats : LONGINT); PROCEDURE PRopm_AddCategory (CatData : opmT_SingleCatList; TotalCats : LONGINT; ParentCat : LONGINT); PROCEDURE PRopm_DeleteCategory (CatID : LONGINT); PROCEDURE PRopm_ResetVars; PROCEDURE PRopm_Valid_CatOps (WeAreConnected : BOOLEAN; SelectedCat : TTreeNode); PROCEDURE PRopm_Valid_ProdOps (WeAreConnected : BOOLEAN; SelectedProduct : TListItem; SelectedProds : LONGINT; SelectedCat : TTreeNode; CopiedProduct : LONGINT); PROCEDURE PRopm_Valid_GralOps (WeAreConnected : BOOLEAN); FUNCTION FNopm_ClearCurrency : opmR_Currency; PROCEDURE QuickSearch (QSString : STRING); PROCEDURE PRopm_FullScreen (SetReset : BOOLEAN); public FUNCTION FNopm_GetCategory (VAR CatList : opmT_CategoryList; CatID : LONGINT; SearchBy : INTEGER) : opmR_Category; FUNCTION FNopm_GetManufacturer (VAR ManList : opmT_ManufacturerList; ManID : LONGINT; SearchBy : INTEGER) : opmR_Manufacturer; FUNCTION FNopm_GetDescriptionByID (ProdID, LangID : LONGINT; VAR DescList : opmT_DescriptionList) : opmR_Description; PROCEDURE PRopm_SetUILang (LangISOID : STRING); FUNCTION FNopm_Create_ExchangeList (VAR ExchangeList : opmT_ExchangeList; IndexData, TargetData : STRING) : LONGINT; PROCEDURE PRopm_Reload_ProductList (SearchLoad : BOOLEAN); PROCEDURE PRopm_GetCategory_Data (CatID : LONGINT; VAR CatData : opmT_SingleCatList); FUNCTION FNopm_GetCurrency (VAR CurrList : opmT_CurrencyList; CurrID : LONGINT; SearchBy : INTEGER) : opmR_Currency; PROCEDURE PRopm_AddCurrency (CurrencyRec : opmR_Currency); PROCEDURE PRopm_DelCurrency (CurrencyRec : opmR_Currency); PROCEDURE PRopm_UpdateCurrency (CurrencyRec : opmR_Currency; Bulking : BOOLEAN); PROCEDURE PRopm_SetDefault_Currency (CurrCode : STRING); FUNCTION FNopm_LoadCurrencyList (VAR CurrencyList : opmT_CurrencyList; VAR CurrencyBoxList : TStringList) : opmR_Currency; end; var opm_Form_Main: Topm_Form_Main; FUNCTION FNopm_Sort_ProductList (Item1, Item2: TListItem; Column: INTEGER) : INTEGER; STDCALL; implementation USES gnugettext, config, license, about, pedit, pimgzoom, search, askuser, balloons, regconfig, attention, dataman, network, askupload, imageman, runmod, colorsel, printers, strutils, math, askcat, ShellApi, configmod, progress, currencyman, currencyedit, currupd, sqllog, fr_e_tnpdf; {$R *.dfm} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Enable/disable those controls valid when the client is connected and the product list is downloaded. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SetControls_FullConnected; BEGIN IF (opmG_UseSSH > 0) THEN PRopm_Update_StatusBar (opmC_ConnStatYesSSH, '', opmC_PTotalIgnore, opm_CurrentCurrency.Code) ELSE PRopm_Update_StatusBar (opmC_ConnStatYes, '', opmC_PTotalIgnore, opm_CurrentCurrency.Code); opm_ListView_Main.Enabled := TRUE; opm_TreeView_Main.Enabled := TRUE; opm_ComboBox_DisplayLang.Enabled := TRUE; opm_WeAreConnected := TRUE; PRopm_Valid_GralOps (opm_WeAreConnected); PRopm_Valid_CatOps (opm_WeAreConnected, opm_TreeView_Main.Selected); PRopm_Valid_ProdOps (opm_WeAreConnected, NIL, 0, NIL, 0); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Enable/disable those controls valid when the client is disconnected. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SetControls_Disconnected; BEGIN PRopm_Update_StatusBar (opmC_ConnStatNo, '', opmC_PTotalIgnore, opm_CurrentCurrency.Code); opm_ListView_Main.Enabled := FALSE; opm_TreeView_Main.Enabled := FALSE; opm_ComboBox_DisplayLang.Enabled := FALSE; opm_WeAreConnected := FALSE; PRopm_Valid_GralOps (opm_WeAreConnected); PRopm_Valid_CatOps (opm_WeAreConnected, NIL); PRopm_Valid_ProdOps (opm_WeAreConnected, NIL, 0, NIL, 0); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Enable/disable those controls valid when the the state of the client connection is unknown (or waiting for a connection). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SetUnknown; BEGIN PRopm_Update_StatusBar (opmC_ConnStatUnknown, '', opmC_PTotalIgnore, opm_CurrentCurrency.Code); opm_ListView_Main.Enabled := FALSE; opm_TreeView_Main.Enabled := FALSE; PRopm_Valid_GralOps (opm_WeAreConnected); PRopm_Valid_CatOps (opm_WeAreConnected, NIL); PRopm_Valid_ProdOps (opm_WeAreConnected, NIL, 0, NIL, 0); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Open a connection to the database server. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_Connect; VAR StrResult : STRING; BEGIN StrResult := ''; PRopm_SetUnknown; IF (opmG_DBStorePass = 0) THEN BEGIN opm_Form_AskUser.AU_Title := _('Connecting to database...'); opm_Form_AskUser.AU_Directions := _('Enter the database password'); opm_Form_AskUser.AU_TextOrList := TRUE; opm_Form_AskUser.AU_PassChar := opmC_PasswordChar; opm_Form_AskUser.AU_MaxLen := opmC_DBPassword_MaxLen; opm_Form_AskUser.AU_DataText := opmG_DBPassword; IF (opm_Form_AskUser.ShowModal = mrOk) THEN opmG_DBPassword := opm_Form_AskUser.AU_DataText ELSE opmG_DBPassword := ''; opm_Form_AskUser.AU_Title := _('Connecting to database...'); opm_Form_AskUser.AU_Directions := _('Enter the SSH password'); opm_Form_AskUser.AU_TextOrList := TRUE; opm_Form_AskUser.AU_PassChar := opmC_PasswordChar; opm_Form_AskUser.AU_MaxLen := opmC_DBPassword_MaxLen; opm_Form_AskUser.AU_DataText := opmG_SSHPassword; IF (opm_Form_AskUser.ShowModal = mrOk) THEN opmG_SSHPassword := opm_Form_AskUser.AU_DataText ELSE opmG_SSHPassword := ''; END; IF (opmG_UseSSH > 0) THEN BEGIN IF (FNopm_CheckStallTunnel = TRUE) THEN BEGIN IF (FNopm_Message (_('It seems there is already a SSH encrypted tunnel. Do you want to close it before creating a new one?'), mtConfirmation, [mbYes, mbNo], opmG_UISilent) = mrYes) THEN PRopm_StopExternalAppByName (opmC_Def_SSHExe); END; IF (FNopm_OpenSSHTunnel (opmC_Def_SSHLocalHost, opmG_DBHost, opmG_SSHLocalPort, opmG_DBPort, opmG_SSHUsername, opmG_SSHPassword, opmG_UISSHDebug) = FALSE) THEN StrResult := _('Cannot connect SSH encrypted tunnel.'); END; IF (StrResult = '') THEN IF (opmG_UseSSH > 0) THEN BEGIN StrResult := FNopm_OpenDBConnection (opmC_Def_SSHLocalHost, opmC_Def_SSHLocalPort, opmG_DBProtocol, opmG_DBDatabase, opmG_DBUsername, opmG_DBPassword, opmG_DBCompress); IF (StrResult <> '') THEN PRopm_CloseSSHTunnel; END ELSE BEGIN StrResult := FNopm_OpenDBConnection (opmG_DBHost, opmG_DBPort, opmG_DBProtocol, opmG_DBDatabase, opmG_DBUsername, opmG_DBPassword, opmG_DBCompress); END; IF (StrResult = '') THEN BEGIN PRopm_ResetVars; END ELSE BEGIN PRopm_SetControls_Disconnected; FNopm_Message (StrResult, mtError, [mbOk], opmG_UISilent); END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Closes the connection to the database server. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_Disconnect; VAR StrResult : STRING; BEGIN PRopm_SetUnknown; StrResult := FNopm_CloseDBConnection; PRopm_CloseSSHTunnel; PRopm_SetControls_Disconnected; PRopm_ResetVars; IF (StrResult <> '') THEN FNopm_Message (StrResult, mtError, [mbOk], opmG_UISilent); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Takes a source value, a target conversion value, and a value type. Then applies the operation or target value to the source value and return the result (in an integer or currency type according to the value type). The target values can be simple numbers or operations. A simple value will simply overwrite the source value with the target one. An operation will transform the source value. Valid operations are addition (+X), substraction (-X), percetage increase (+X%), percentage decrease (-X%). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_Apply_Operation (SourceValue, Conversion : STRING; ValueType : INTEGER; AllowNegative : BOOLEAN) : STRING; VAR TmpOperand, TmpSource, TmpTarget : CURRENCY; TmpValue : STRING; BEGIN TmpValue := FNopm_CleanNumber (Conversion, opmC_ValIsNumOp); TmpOperand := STRTOCURR (FNopm_CleanNumber (Conversion, opmC_ValIsCurrency)); TmpSource := STRTOCURR (FNopm_CleanNumber (SourceValue, opmC_ValIsCurrency)); IF (TmpValue[LENGTH (TmpValue)] = '%') THEN BEGIN TmpOperand := (TmpSource / 100) * TmpOperand; END; IF ((TmpValue[1] = '-') OR (TmpValue[1] = '+')) THEN BEGIN TmpTarget := TmpSource + TmpOperand; IF (AllowNegative = FALSE) THEN IF (TmpTarget < 0) THEN TmpTarget := 0; END ELSE BEGIN TmpTarget := ABS (TmpOperand); END; IF (ValueType = opmC_ValIsInteger) THEN BEGIN FNopm_Apply_Operation := INTTOSTR (ROUND (TmpTarget)); END ELSE BEGIN FNopm_Apply_Operation := CURRTOSTRF (TmpTarget, ffFixed, 15); END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Shows the configuration form and then check if any values were changed (in the global configuration vars) to apply those changes to the user interface. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_ConfigClick(Sender: TObject); begin IF (opm_Form_Config.ShowModal = mrOk) THEN BEGIN IF (opmG_UIDragDrop > 0) THEN opm_ListView_Main.DragMode := dmAutomatic ELSE opm_ListView_Main.DragMode := dmManual; PRopm_SetUILang (opmG_UIGUILang); PRmvHint_EnableHints ((opmG_UIToolTips > 0)); IF (opmG_UIWBDebug > 0) THEN BEGIN opm_Form_PEdit.opm_Memo_UploadDEBUG.Enabled := TRUE; opm_Form_PEdit.opm_Memo_UploadDEBUG.Visible := TRUE; END ELSE BEGIN opm_Form_PEdit.opm_Memo_UploadDEBUG.Enabled := FALSE; opm_Form_PEdit.opm_Memo_UploadDEBUG.Visible := FALSE; END; END; opm_PRAddModules_ToMenu (opm_MenuItem_ExternalModules); end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Terminates the application. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_ExitClick(Sender: TObject); begin Close; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Opens the DB connection, load the language, category and manufacturer lists in memory, build the language menu and the category tree, clears the product list and enable some controls. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_ConnectClick(Sender: TObject); VAR ResStr : STRING; ResCode : LONGINT; begin opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (0, 1, _('Detecting extensions...')); PRopm_Prepare_HTTPClient (NIL, NIL, ((opmG_UseProxy > 0) AND (opmG_ProxyApply IN [0, 1]))); ResCode := FNopm_Send_Command (opmG_WBUploadURL, 'noop', '', ResStr); IF (ResCode = 0) THEN BEGIN ResCode := FNopm_Send_Command (opmG_WBUploadURL, 'capa', '', ResStr); IF (ResCode = 0) THEN BEGIN opmG_Capa_MorePics6 := (ANSIPOS (opmC_Capa_MorePics6, ResStr) > 0); opmG_Capa_TotalB2B := (ANSIPOS (opmC_Capa_TotalB2B, ResStr) > 0); opmG_Capa_PollBooth := (ANSIPOS (opmC_Capa_PollBooth, ResStr) > 0); opmG_Capa_HeaderTags := (ANSIPOS (opmC_Capa_HeaderTags, ResStr) > 0); opm_Form_Progress.PRopm_PDUpdate_Progress (12, 1, _('Connecting...')); PRopm_Connect; IF (FNopm_ConnectionState = TRUE) THEN BEGIN opm_Form_Progress.PRopm_PDUpdate_Progress (24, 1, _('Loading language list...')); PRopm_LoadLanguageList (opmG_LanguageList); opm_Form_Progress.PRopm_PDUpdate_Progress (36, 1, _('Loading category list...')); PRopm_LoadCategoryList (opmG_CategoryList, opmG_CategoryBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (48, 1, _('Loading manufacturers list...')); PRopm_LoadManufacturerList (opmG_ManufacturerList, opmG_ManufacturerBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (60, 1, _('Loading taxes list...')); PRopm_LoadTaxList (opmG_TaxList, opmG_TaxBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (72, 1, _('Loading currency list...')); opm_CurrentCurrency := FNopm_LoadCurrencyList (opmG_CurrencyList, opmG_CurrencyBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (84, 1, _('Rendering...')); PRopm_RenderLanguageDisplay (opm_ComboBox_DisplayLang, opmG_LanguageList); opm_Form_Progress.PRopm_PDUpdate_Progress (90, 1, ''); PRopm_RenderCategoryDisplay (opmG_CategoryList, opm_TreeView_Main, opm_CurrentCategory); opm_Form_Progress.PRopm_PDUpdate_Progress (95, 1, ''); PRopm_ClearProductList (opm_ListView_Main); opm_Form_Progress.PRopm_PDUpdate_Progress (100, 1, ''); PRopm_SetControls_FullConnected; END; END ELSE BEGIN FNopm_Message (_('There was an error while trying to get the osCommerce addons list.') + #13#10 + FNopm_FullRemoteError (ResCode), mtError, [mbOk], opmG_UISilent); END; END ELSE BEGIN FNopm_Message (FNopm_FullRemoteError (ResCode), mtError, [mbOk], opmG_UISilent); END; opm_Form_Progress.PRopm_PDClose; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Closes the DB connection, clear the language, category, manufacturer and product lists, clear the display of the language menu, product list and category tree, and enable some controls. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_DisconnectClick(Sender: TObject); begin opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (50, 1, _('Disconnecting...')); PRopm_Disconnect; opm_Form_Progress.PRopm_PDClose; IF (FNopm_ConnectionState = FALSE) THEN BEGIN PRopm_ClearLanguageList (opmG_LanguageBoxList); PRopm_ClearCategoryList (opmG_CategoryBoxList); PRopm_ClearManufacturerList (opmG_ManufacturerBoxList); PRopm_ClearTaxList (opmG_TaxBoxList); PRopm_ClearCurrencyList (opmG_CurrencyBoxList); opm_CurrentCurrency := FNopm_ClearCurrency; PRopm_ClearProductList (opm_ListView_Main); PRopm_RenderLanguageDisplay (opm_ComboBox_DisplayLang, opmG_LanguageList); PRopm_RenderCategoryDisplay (opmG_CategoryList, opm_TreeView_Main, opm_CurrentCategory); PRopm_RenderProductDisplay (opmG_CategoryList, opmG_ManufacturerList, opmG_ProductList, opm_ListView_Main, opm_CurrentProdID); opmG_Capa_MorePics6 := FALSE; opmG_Capa_TotalB2B := FALSE; opmG_Capa_PollBooth := FALSE; opmG_Capa_HeaderTags := FALSE; END; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Creates some objects, load the configuration from the Windows registry, reset all vars, set several parameters of the visual components, set the language of the user interface. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.FormCreate(Sender: TObject); begin opmG_TMPPath := FNopm_GetTemporaryPath; opm_CurrentLang := 0; PRopm_LoadConfiguration; PRopm_ResetVars; PRopm_ResetLog; PRopm_SetDisplay (opmG_UIRememberDisplay); PRopm_SetControls_Disconnected; opm_PRLoad_ModuleList; opm_PRAddModules_ToMenu (opm_MenuItem_ExternalModules); IF (FNopm_CheckLanguage (opmG_UIGUILang) = FALSE) THEN UseLanguage (opmC_Def_GUILang) ELSE UseLanguage (opmG_UIGUILang); TP_GlobalIgnoreClass(TField); TP_GlobalIgnoreClass(TDBGrid); TranslateComponent (self); PRmvHint_EnableHints (opmG_UIToolTips > 0); end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Resets some variables used to keep track of the product information. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ResetVars; BEGIN opm_TotalCategories := 0; opm_TotalManufacturers := 0; opm_TotalLanguages := 0; opm_TotalProducts := 0; opm_TotalTaxes := 0; opm_TotalCurrencies := 0; opm_CurrentCategory := 0; opm_CurrentMan := 0; opm_CurrentProdID := 0; opm_Search_PCategory := 0; opm_Search_PManufacturer := 0; opm_Search_PModel := ''; opm_Search_PName := ''; opm_Search_Quick := ''; opm_CanExpandTree_Flag := TRUE; opm_WeAreSearching := FALSE; opm_WeAreConnected := FALSE; opm_WeAreFullScreen := FALSE; opm_CurrentProdID_CB := 0; opm_StopTreeOnChange := FALSE; opmG_PList_LastOrderColumn := 4; opmG_PList_LastOrderType := FALSE; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the configuration options from the Windows registry. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadConfiguration; BEGIN opmG_DBHost := FNopm_CleanHostName (FNReg_ReadSetting ('OSCHost', opmC_Def_Host, opmC_RegistryKey, opmC_RKConfig)); opmG_DBPort := FNopm_StrToInt (FNReg_ReadSetting ('OSCPort', INTTOSTR (opmC_Def_Port), opmC_RegistryKey, opmC_RKConfig)); opmG_DBProtocol := FNReg_ReadSetting ('OSCProtocol', opmC_Def_Protocol, opmC_RegistryKey, opmC_RKConfig); opmG_ETABase := FNopm_StrToInt (FNReg_ReadSetting ('OSCETABase', opmC_Def_ETABase, opmC_RegistryKey, opmC_RKConfig)); opmG_PDFAuthor := FNReg_ReadSetting ('OSCPDFAuthor', opmC_Def_PDFAuthor, opmC_RegistryKey, opmC_RKConfig); opmG_DBDatabase := FNReg_ReadSetting ('OSCDatabase', opmC_Def_Database, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Categories := FNReg_ReadSetting ('OSCTable01', opmC_Def_DBTable_Categories, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Manufacturers := FNReg_ReadSetting ('OSCTable02', opmC_Def_DBTable_Manufacturers, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Languages := FNReg_ReadSetting ('OSCTable03', opmC_Def_DBTable_Languages, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Products := FNReg_ReadSetting ('OSCTable04', opmC_Def_DBTable_Products, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Specials := FNReg_ReadSetting ('OSCTable05', opmC_Def_DBTable_Specials, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_ProductsDescription := FNReg_ReadSetting ('OSCTable06', opmC_Def_DBTable_ProductsDescription, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_TaxClass := FNReg_ReadSetting ('OSCTable07', opmC_Def_DBTable_TaxClass, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Currencies := FNReg_ReadSetting ('OSCTable08', opmC_Def_DBTable_Currencies, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_Configuration := FNReg_ReadSetting ('OSCTable09', opmC_Def_DBTable_Configuration, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_ProductsToCategories := FNReg_ReadSetting ('OSCTable10', opmC_Def_DBTable_ProductsToCategories, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_CategoriesDescription := FNReg_ReadSetting ('OSCTable11', opmC_Def_DBTable_CategoriesDescription, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_TaxRates := FNReg_ReadSetting ('OSCTable13', opmC_Def_DBTable_TaxRates, opmC_RegistryKey, opmC_RKConfig); opmG_DBTable_ManufacturersInfo := FNReg_ReadSetting ('OSCTable14', opmC_Def_DBTable_ManufacturersInfo, opmC_RegistryKey, opmC_RKConfig); opmG_DBUsername := FNReg_ReadSetting ('OSCUsername', opmC_Def_Username, opmC_RegistryKey, opmC_RKConfig); opmG_DBPassword := FNReg_ReadSetting ('OSCPassword', opmC_Def_Password, opmC_RegistryKey, opmC_RKConfig); opmG_WBImgURL := FNReg_ReadSetting ('OSCImgURL', opmC_Def_ImgURL, opmC_RegistryKey, opmC_RKConfig); opmG_WBUploadURL := FNReg_ReadSetting ('OSCUploadURL', opmC_Def_UploadURL, opmC_RegistryKey, opmC_RKConfig); opmG_WBProxyHost := FNopm_CleanHostName (FNReg_ReadSetting ('OSCProxyHost', opmC_Def_ProxyHost, opmC_RegistryKey, opmC_RKConfig)); opmG_WBProxyPort := FNopm_StrToInt (FNReg_ReadSetting ('OSCProxyPort', INTTOSTR (opmC_Def_ProxyPort), opmC_RegistryKey, opmC_RKConfig)); opmG_DBConnWait := FNopm_StrToInt (FNReg_ReadSetting ('OSCDBConnWait', INTTOSTR (opmC_Def_DBConnWait), opmC_RegistryKey, opmC_RKConfig)); opmG_ModConnWait := FNopm_StrToInt (FNReg_ReadSetting ('OSCModConnWait', INTTOSTR (opmC_Def_ModConnWait), opmC_RegistryKey, opmC_RKConfig)); opmG_SSHConnWait := FNopm_StrToInt (FNReg_ReadSetting ('OSCSSHConnWait', INTTOSTR (opmC_Def_SSHConnWait), opmC_RegistryKey, opmC_RKConfig)); opmG_HTTPConnWait := FNopm_StrToInt (FNReg_ReadSetting ('OSCHTTPConnWait', INTTOSTR (opmC_Def_HTTPConnWait), opmC_RegistryKey, opmC_RKConfig)); opmG_DBConnRetries := FNopm_StrToInt (FNReg_ReadSetting ('OSCDBConnRetries', INTTOSTR (opmC_Def_DBConnRetries), opmC_RegistryKey, opmC_RKConfig)); opmG_ModConnRetries := FNopm_StrToInt (FNReg_ReadSetting ('OSCModConnRetries', INTTOSTR (opmC_Def_ModConnRetries), opmC_RegistryKey, opmC_RKConfig)); opmG_WBImgX := FNopm_StrToInt (FNReg_ReadSetting ('OSCImgX', INTTOSTR (opmC_Def_ImgX), opmC_RegistryKey, opmC_RKConfig)); opmG_WBImgY := FNopm_StrToInt (FNReg_ReadSetting ('OSCImgY', INTTOSTR (opmC_Def_ImgY), opmC_RegistryKey, opmC_RKConfig)); opmG_WBImgQ := FNopm_StrToInt (FNReg_ReadSetting ('OSCImgQ', INTTOSTR (opmC_Def_ImgQ), opmC_RegistryKey, opmC_RKConfig)); opmG_WBPaddingColor := FNopm_StrToInt (FNReg_ReadSetting ('OSCPaddingColor', INTTOSTR (opmC_Def_PaddingColor), opmC_RegistryKey, opmC_RKConfig)); IF (opmG_WBImgURL[LENGTH (opmG_WBImgURL)] <> '/') THEN opmG_WBImgURL := opmG_WBImgURL + '/'; opm_CurrentLang := ABS (FNopm_StrToInt (FNReg_ReadSetting ('OSCLanguage', INTTOSTR (opmC_Def_DisplayLang), opmC_RegistryKey, opmC_RKRoot))); opmG_UIHotTracking := FNopm_StrToInt (FNReg_ReadSetting ('OSCHotTracking', INTTOSTR (opmC_Def_HotTracking), opmC_RegistryKey, opmC_RKConfig)); opmG_UIClickLoad := FNopm_StrToInt (FNReg_ReadSetting ('OSCAutoLoad', INTTOSTR (opmC_Def_AutoLoad), opmC_RegistryKey, opmC_RKConfig)); opmG_UIDragDrop := FNopm_StrToInt (FNReg_ReadSetting ('OSCDragDrop', INTTOSTR (opmC_Def_DragDrop), opmC_RegistryKey, opmC_RKConfig)); opmG_UIImgDragDrop := FNopm_StrToInt (FNReg_ReadSetting ('OSCImgDragDrop', INTTOSTR (opmC_Def_ImgDragDrop), opmC_RegistryKey, opmC_RKConfig)); opmG_UIToolTips := FNopm_StrToInt (FNReg_ReadSetting ('OSCToolTips', INTTOSTR (opmC_Def_ToolTips), opmC_RegistryKey, opmC_RKConfig)); opmG_UIStripes := FNopm_StrToInt (FNReg_ReadSetting ('OSCStripes', INTTOSTR (opmC_Def_Stripes), opmC_RegistryKey, opmC_RKConfig)); opmG_UICacheIList := FNopm_StrToInt (FNReg_ReadSetting ('OSCCacheIList', INTTOSTR (opmC_Def_CacheIList), opmC_RegistryKey, opmC_RKConfig)); opmG_DBCompress := FNopm_StrToInt (FNReg_ReadSetting ('OSCCompress', INTTOSTR (opmC_Def_Compress), opmC_RegistryKey, opmC_RKConfig)); opmG_UseProxy := FNopm_StrToInt (FNReg_ReadSetting ('OSCUseProxy', INTTOSTR (opmC_Def_UseProxy), opmC_RegistryKey, opmC_RKConfig)); opmG_ProxyApply := FNopm_StrToInt (FNReg_ReadSetting ('OSCProxyApply', INTTOSTR (opmC_Def_ProxyApply), opmC_RegistryKey, opmC_RKConfig)); opmG_UseSSH := FNopm_StrToInt (FNReg_ReadSetting ('OSCUseSSH', INTTOSTR (opmC_Def_UseSSH), opmC_RegistryKey, opmC_RKConfig)); opmG_SSHUsername := FNReg_ReadSetting ('OSCSSHUsername', opmC_Def_SSHUsername, opmC_RegistryKey, opmC_RKConfig); opmG_SSHPassword := FNReg_ReadSetting ('OSCSSHPassword', opmC_Def_SSHPassword, opmC_RegistryKey, opmC_RKConfig); opmG_SSHLocalPort := FNopm_StrToInt (FNReg_ReadSetting ('OSCSSHLocalPort', INTTOSTR (opmC_Def_SSHLocalPort), opmC_RegistryKey, opmC_RKConfig)); opmG_DBStorePass := FNopm_StrToInt (FNReg_ReadSetting ('OSCStorePass', INTTOSTR (opmC_Def_StorePass), opmC_RegistryKey, opmC_RKConfig)); opmG_UISilent := FNopm_StrToInt (FNReg_ReadSetting ('OSCSilent', INTTOSTR (opmC_Def_Silent), opmC_RegistryKey, opmC_RKConfig)); opmG_UIConfirmDels := FNopm_StrToInt (FNReg_ReadSetting ('OSCConfirmDels', INTTOSTR (opmC_Def_ConfirmDels), opmC_RegistryKey, opmC_RKConfig)); opmG_UIConfirmDrag := FNopm_StrToInt (FNReg_ReadSetting ('OSCConfirmDrag', INTTOSTR (opmC_Def_ConfirmDrag), opmC_RegistryKey, opmC_RKConfig)); opmG_UIConfirmMods := FNopm_StrToInt (FNReg_ReadSetting ('OSCConfirmMods', INTTOSTR (opmC_Def_ConfirmMods), opmC_RegistryKey, opmC_RKConfig)); opmG_UIAllowZeroPrice := FNopm_StrToInt (FNReg_ReadSetting ('OSCAllowZeroPrice', INTTOSTR (opmC_Def_AllowZeroPrice), opmC_RegistryKey, opmC_RKConfig)); opmG_UIAllowEditImageName := FNopm_StrToInt (FNReg_ReadSetting ('OSCAllowEditImageName', INTTOSTR (opmC_Def_AllowEditImageName), opmC_RegistryKey, opmC_RKConfig)); opmG_UIAllowNegativeQuantity := FNopm_StrToInt (FNReg_ReadSetting ('OSCAllowNegativeQuantity', INTTOSTR (opmC_Def_AllowNegativeQuantity), opmC_RegistryKey, opmC_RKConfig)); opmG_UIAutoDownImg := FNopm_StrToInt (FNReg_ReadSetting ('OSCAutoDownImg', INTTOSTR (opmC_Def_AutoDownImg), opmC_RegistryKey, opmC_RKConfig)); opmG_UIFontName := FNReg_ReadSetting ('UIFontName', opmC_DefaultFont, opmC_RegistryKey, opmC_RKVisual); opmG_UIFontHeight := FNopm_StrToInt (FNReg_ReadSetting ('UIFontHeight', INTTOSTR (opmC_DefaultFontHeight), opmC_RegistryKey, opmC_RKVisual)); opmG_UIFontCharset := FNopm_StrToInt (FNReg_ReadSetting ('UIFontCharset', INTTOSTR (opmC_DefaultFontCharset), opmC_RegistryKey, opmC_RKVisual)); opmG_Clip_ColSize := FNopm_StrToInt (FNReg_ReadSetting ('Clip_ColSize', INTTOSTR (opmC_Def_Clip_ColSize), opmC_RegistryKey, opmC_RKVisual)); opmG_PRNDirectPrint := FNopm_StrToInt (FNReg_ReadSetting ('PRNDirectPrint', INTTOSTR (opmC_Def_PRNDirectPrint), opmC_RegistryKey, opmC_RKVisual)); opmG_Past_PAvailDate := FNopm_StrToInt (FNReg_ReadSetting ('PastAvailDate', INTTOSTR (opmC_Def_Past_PAvailDate), opmC_RegistryKey, opmC_RKVisual)); opmG_Past_PManufacturer := FNopm_StrToInt (FNReg_ReadSetting ('PastManufacturer', INTTOSTR (opmC_Def_Past_PManufacturer), opmC_RegistryKey, opmC_RKVisual)); opmG_Past_PTaxClass := FNopm_StrToInt (FNReg_ReadSetting ('PastTaxClass', INTTOSTR (opmC_Def_Past_PTaxClass), opmC_RegistryKey, opmC_RKVisual)); opmG_Past_PImageDir := FNReg_ReadSetting ('PastImageDir', opmC_Def_Past_PImageDir, opmC_RegistryKey, opmC_RKVisual); opmG_WBNoCacheImg := FNopm_StrToInt (FNReg_ReadSetting ('OSCNoCacheImg', INTTOSTR (opmC_Def_NoCacheImg), opmC_RegistryKey, opmC_RKConfig)); opmG_WBResizeImg := FNopm_StrToInt (FNReg_ReadSetting ('OSCResizeImg', INTTOSTR (opmC_Def_ResizeImg), opmC_RegistryKey, opmC_RKConfig)); opmG_WBPaddingImg := FNopm_StrToInt (FNReg_ReadSetting ('OSCPaddingImg', INTTOSTR (opmC_Def_PaddingImg), opmC_RegistryKey, opmC_RKConfig)); opmG_WBKeepARImg := FNopm_StrToInt (FNReg_ReadSetting ('OSCKeepARImg', INTTOSTR (opmC_Def_KeepARImg), opmC_RegistryKey, opmC_RKConfig)); opmG_UIConfirmExit := FNopm_StrToInt (FNReg_ReadSetting ('OSCConfirmExit', INTTOSTR (opmC_Def_ConfirmExit), opmC_RegistryKey, opmC_RKConfig)); opmG_DBDebugLog := FNopm_StrToInt (FNReg_ReadSetting ('OSCDBDebugLog', INTTOSTR (opmC_Def_DBDebugLog), opmC_RegistryKey, opmC_RKConfig)); opmG_UISSHDebug := FNopm_StrToInt (FNReg_ReadSetting ('OSCSSHDebug', INTTOSTR (opmC_Def_SSHDebug), opmC_RegistryKey, opmC_RKConfig)); opmG_UIWBDebug := FNopm_StrToInt (FNReg_ReadSetting ('OSCWBDebug', INTTOSTR (opmC_Def_WBDebug), opmC_RegistryKey, opmC_RKConfig)); opmG_UIGUILang := FNReg_ReadSetting ('OSCGUILang', opmC_Def_GUILang, opmC_RegistryKey, opmC_RKConfig); IF (FNopm_CheckLanguage (opmG_UIGUILang) = FALSE) THEN opmG_UIGUILang := opmC_Def_GUILang; opmG_UIRememberDisplay := FNopm_StrToInt (FNReg_ReadSetting ('OSCRememberPosition', INTTOSTR (opmC_Def_RememberDisplay), opmC_RegistryKey, opmC_RKConfig)); opmG_UIWindow_XSize := ABS (FNopm_StrToInt (FNReg_ReadSetting ('OSCWinX', INTTOSTR (opmC_DefWindow_XSize), opmC_RegistryKey, opmC_RKVisual))); IF ((opmG_UIWindow_XSize < opmC_MinWindow_XSize) OR (opmG_UIWindow_XSize > opmC_MaxWindow_XSize)) THEN opmG_UIWindow_XSize := opmC_DefWindow_XSize; opmG_UIWindow_YSize := ABS (FNopm_StrToInt (FNReg_ReadSetting ('OSCWinY', INTTOSTR (opmC_DefWindow_YSize), opmC_RegistryKey, opmC_RKVisual))); IF ((opmG_UIWindow_YSize < opmC_MinWindow_YSize) OR (opmG_UIWindow_YSize > opmC_MaxWindow_YSize)) THEN opmG_UIWindow_YSize := opmC_DefWindow_YSize; opmG_UICatList_XSize := ABS (FNopm_StrToInt (FNReg_ReadSetting ('OSCListX', INTTOSTR (opmC_DefCatList_Size), opmC_RegistryKey, opmC_RKVisual))); IF ((opmG_UICatList_XSize < opmC_MinCatList_Size) OR (opmG_UICatList_XSize > opmC_MaxCatList_Size)) THEN opmG_UICatList_XSize := opmC_DefCatList_Size; IF ((opmG_UICatList_XSize + 100) > opmG_UIWindow_XSize) THEN opmG_UIWindow_XSize := opmG_UICatList_XSize + 100; opmG_UICol0X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col0X', INTTOSTR (opmC_Def_Col0X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol0X < opmC_MinColX) THEN opmG_UICol0X := opmC_MinColX; opmG_UICol1X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col1X', INTTOSTR (opmC_Def_Col1X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol1X < opmC_MinColX) THEN opmG_UICol1X := opmC_MinColX; opmG_UICol2X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col2X', INTTOSTR (opmC_Def_Col2X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol2X < opmC_MinColX) THEN opmG_UICol2X := opmC_MinColX; opmG_UICol3X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col3X', INTTOSTR (opmC_Def_Col3X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol3X < opmC_MinColX) THEN opmG_UICol3X := opmC_MinColX; opmG_UICol4X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col4X', INTTOSTR (opmC_Def_Col4X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol4X < opmC_MinColX) THEN opmG_UICol4X := opmC_MinColX; opmG_UICol5X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col5X', INTTOSTR (opmC_Def_Col5X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol5X < opmC_MinColX) THEN opmG_UICol5X := opmC_MinColX; opmG_UICol6X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col6X', INTTOSTR (opmC_Def_Col6X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol6X < opmC_MinColX) THEN opmG_UICol6X := opmC_MinColX; opmG_UICol7X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col7X', INTTOSTR (opmC_Def_Col7X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol7X < opmC_MinColX) THEN opmG_UICol7X := opmC_MinColX; opmG_UICol8X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col8X', INTTOSTR (opmC_Def_Col8X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol8X < opmC_MinColX) THEN opmG_UICol8X := opmC_MinColX; opmG_UICol9X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col9X', INTTOSTR (opmC_Def_Col9X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol9X < opmC_MinColX) THEN opmG_UICol9X := opmC_MinColX; opmG_UICol10X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col10X', INTTOSTR (opmC_Def_Col10X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol10X < opmC_MinColX) THEN opmG_UICol10X := opmC_MinColX; opmG_UICol20X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col20X', INTTOSTR (opmC_Def_Col20X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol20X < opmC_MinColX) THEN opmG_UICol20X := opmC_MinColX; opmG_UICol21X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col21X', INTTOSTR (opmC_Def_Col21X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol20X < opmC_MinColX) THEN opmG_UICol21X := opmC_MinColX; opmG_UICol22X := ABS (FNopm_StrToInt (FNReg_ReadSetting ('Col22X', INTTOSTR (opmC_Def_Col22X), opmC_RegistryKey, opmC_RKVisual))); IF (opmG_UICol20X < opmC_MinColX) THEN opmG_UICol22X := opmC_MinColX; PRReg_ReadPastList ('Host', opmC_RegistryKey, opmC_RKServers, opmG_PastHost_BoxList, opmC_MaxPast_Servers); PRReg_ReadPastList ('Database', opmC_RegistryKey, opmC_RKServers, opmG_PastDatabase_BoxList, opmC_MaxPast_Databases); PRReg_ReadPastList ('Username', opmC_RegistryKey, opmC_RKServers, opmG_PastUsername_BoxList, opmC_MaxPast_Usernames); PRReg_ReadPastList ('SSHUsername', opmC_RegistryKey, opmC_RKServers, opmG_PastSSHUsername_BoxList, opmC_MaxPast_SSHUsernames); PRReg_ReadPastList ('ImgURL', opmC_RegistryKey, opmC_RKServers, opmG_PastImgURL_BoxList, opmC_MaxPast_ImgURL); PRReg_ReadPastList ('UploadURL', opmC_RegistryKey, opmC_RKServers, opmG_PastUploadURL_BoxList, opmC_MaxPast_UploadURL); PRReg_ReadPastList ('Proxy', opmC_RegistryKey, opmC_RKServers, opmG_PastProxy_BoxList, opmC_MaxPast_Proxy); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Saves some configuration options to the Windows registry. Only options about the user interface are stored here, other options are stored when running the configuration form. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SaveConfiguration; BEGIN PRReg_WriteSetting ('OSCWinX', INTTOSTR (opm_Form_Main.Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('OSCWinY', INTTOSTR (opm_Form_Main.Height), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('OSCListX', INTTOSTR (opm_TreeView_Main.Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col0X', INTTOSTR (opm_ListView_Main.Column[0].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col1X', INTTOSTR (opm_ListView_Main.Column[1].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col2X', INTTOSTR (opm_ListView_Main.Column[2].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col3X', INTTOSTR (opm_ListView_Main.Column[3].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col4X', INTTOSTR (opm_ListView_Main.Column[4].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col5X', INTTOSTR (opm_ListView_Main.Column[5].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col6X', INTTOSTR (opm_ListView_Main.Column[6].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col7X', INTTOSTR (opm_ListView_Main.Column[7].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col8X', INTTOSTR (opm_ListView_Main.Column[8].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col9X', INTTOSTR (opm_ListView_Main.Column[9].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col10X', INTTOSTR (opm_ListView_Main.Column[10].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col20X', INTTOSTR (opm_Form_Runmod.opm_ListView_RunmodConfirm.Column[1].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col21X', INTTOSTR (opm_Form_Runmod.opm_ListView_RunmodConfirm.Column[2].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('Col22X', INTTOSTR (opm_Form_Runmod.opm_ListView_RunmodConfirm.Column[3].Width), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('OSCLanguage', INTTOSTR (opm_CurrentLang), opmC_RegistryKey, opmC_RKRoot); PRReg_WriteSetting ('OSCGUILang', opmG_UIGUILang, opmC_RegistryKey, opmC_RKConfig); PRReg_WriteSetting ('PastAvailDate', INTTOSTR (opmG_Past_PAvailDate), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('PastManufacturer', INTTOSTR (opmG_Past_PManufacturer), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('PastTaxClass', INTTOSTR (opmG_Past_PTaxClass), opmC_RegistryKey, opmC_RKVisual); PRReg_WriteSetting ('PastImageDir', opmG_Past_PImageDir, opmC_RegistryKey, opmC_RKVisual); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Sets several parameters of the visual components before starting. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SetDisplay (RememberVisual : WORD); BEGIN opm_Form_Main.DoubleBuffered := TRUE; opm_Form_Main.Caption := opmC_AppName1 + ' ' + opmC_Version + ' (build ' + opmG_ExeBuildVersion + ')'; opm_Form_Main.Constraints.MinWidth := opmC_MinWindow_XSize; opm_Form_Main.Constraints.MinHeight := opmC_MinWindow_YSize; opm_Form_Main.Constraints.MaxWidth := opmC_MaxWindow_XSize; opm_Form_Main.Constraints.MaxHeight := opmC_MaxWindow_YSize; opm_StatusBar_Main.Height := 16 + (opmC_Bevel_Size * 2); opm_StatusBar_Main.Panels[0].Width := 16 + (opmC_Bevel_Size * 2); opm_StatusBar_Main.Panels[1].Width := opmC_DefGauge_Size + (opmC_Bevel_Size * 2); opm_StatusBar_Main.Panels[2].Width := opmC_DefGauge_Size + (opmC_Bevel_Size * 2); opm_StatusBar_Main.Panels[3].Width := opmC_DefCatList_Size; opm_StatusBar_Main.Panels[4].Width := opmC_DefCatList_Size; opm_StatusBar_Main.Panels[5].Width := opmC_DefCurPan_Size; opm_StatusBar_Main.Panels[6].Width := opmC_DefMemPan_Size; opm_Image_Status.Parent := opm_StatusBar_Main; opm_Image_Status.Top := (opmC_Bevel_Size + 1); opm_Image_Status.Left := (opmC_Bevel_Size + 1); opm_Image_Status.Height := (opm_StatusBar_Main.Height - (opmC_Bevel_Size * 2)); opm_Image_Status.Width := 16; opm_ImageList_Status.GetIcon (0, opm_Image_Status.Picture.Icon); opmG_StripeColor := FNopm_HighlightColor (ColorToRGB (clWindow)); opm_TreeView_Main.ReadOnly := TRUE; opm_TreeView_Main.DoubleBuffered := TRUE; opm_TreeView_Main.Constraints.MinWidth := opmC_MinCatList_Size; opm_ListView_Main.Columns.Clear; opm_ListView_Main.Checkboxes := FALSE; opm_ListView_Main.ReadOnly := TRUE; opm_ListView_Main.RowSelect := TRUE; opm_ListView_Main.MultiSelect := TRUE; opm_ListView_Main.DoubleBuffered := TRUE; opm_ListView_Main.ViewStyle := vsReport; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Add; opm_ListView_Main.Columns.Items[0].Caption := _('Available'); opm_ListView_Main.Columns.Items[1].Caption := _('ID'); opm_ListView_Main.Columns.Items[2].Caption := _('Model'); opm_ListView_Main.Columns.Items[3].Caption := _('Category'); opm_ListView_Main.Columns.Items[4].Caption := _('Name'); opm_ListView_Main.Columns.Items[5].Caption := _('Manufacturer'); opm_ListView_Main.Columns.Items[6].Caption := _('Quantity'); opm_ListView_Main.Columns.Items[7].Caption := _('Price'); opm_ListView_Main.Columns.Items[8].Caption := _('Weight'); opm_ListView_Main.Columns.Items[9].Caption := _('Availability date'); opm_ListView_Main.Columns.Items[10].Caption := _('Image'); opm_ListView_Main.Columns.Items[0].Alignment := opmC_Def_Col0Align; opm_ListView_Main.Columns.Items[1].Alignment := opmC_Def_Col1Align; opm_ListView_Main.Columns.Items[2].Alignment := opmC_Def_Col2Align; opm_ListView_Main.Columns.Items[3].Alignment := opmC_Def_Col3Align; opm_ListView_Main.Columns.Items[4].Alignment := opmC_Def_Col4Align; opm_ListView_Main.Columns.Items[5].Alignment := opmC_Def_Col5Align; opm_ListView_Main.Columns.Items[6].Alignment := opmC_Def_Col6Align; opm_ListView_Main.Columns.Items[7].Alignment := opmC_Def_Col7Align; opm_ListView_Main.Columns.Items[8].Alignment := opmC_Def_Col8Align; opm_ListView_Main.Columns.Items[9].Alignment := opmC_Def_Col9Align; opm_ListView_Main.Columns.Items[10].Alignment := opmC_Def_Col10Align; IF (opmG_UIHotTracking > 0) THEN BEGIN opm_TreeView_Main.HotTrack := TRUE; opm_ListView_Main.HotTrack := FALSE; opm_ListView_Main.HotTrackStyles := [htHandPoint, htUnderlineHot]; END ELSE BEGIN opm_TreeView_Main.HotTrack := FALSE; opm_ListView_Main.HotTrack := FALSE; opm_ListView_Main.HotTrackStyles := []; END; IF (opmG_UIDragDrop > 0) THEN opm_ListView_Main.DragMode := dmAutomatic ELSE opm_ListView_Main.DragMode := dmManual; IF (RememberVisual > 0) THEN BEGIN opm_Form_Main.Width := opmG_UIWindow_XSize; opm_Form_Main.Height := opmG_UIWindow_YSize; opm_TreeView_Main.Width := opmG_UICatList_XSize; opm_ListView_Main.Column[0].Width := opmG_UICol0X; opm_ListView_Main.Column[1].Width := opmG_UICol1X; opm_ListView_Main.Column[2].Width := opmG_UICol2X; opm_ListView_Main.Column[3].Width := opmG_UICol3X; opm_ListView_Main.Column[4].Width := opmG_UICol4X; opm_ListView_Main.Column[5].Width := opmG_UICol5X; opm_ListView_Main.Column[6].Width := opmG_UICol6X; opm_ListView_Main.Column[7].Width := opmG_UICol7X; opm_ListView_Main.Column[8].Width := opmG_UICol8X; opm_ListView_Main.Column[9].Width := opmG_UICol9X; opm_ListView_Main.Column[10].Width := opmG_UICol10X; END ELSE BEGIN opm_Form_Main.Width := opmC_DefWindow_XSize; opm_Form_Main.Height := opmC_DefWindow_YSize; opm_TreeView_Main.Width := opmC_DefCatList_Size; opm_ListView_Main.Column[0].Width := opmC_Def_Col0X; opm_ListView_Main.Column[1].Width := opmC_Def_Col1X; opm_ListView_Main.Column[2].Width := opmC_Def_Col2X; opm_ListView_Main.Column[3].Width := opmC_Def_Col3X; opm_ListView_Main.Column[4].Width := opmC_Def_Col4X; opm_ListView_Main.Column[5].Width := opmC_Def_Col5X; opm_ListView_Main.Column[6].Width := opmC_Def_Col6X; opm_ListView_Main.Column[7].Width := opmC_Def_Col7X; opm_ListView_Main.Column[8].Width := opmC_Def_Col8X; opm_ListView_Main.Column[9].Width := opmC_Def_Col9X; opm_ListView_Main.Column[10].Width := opmC_Def_Col10X; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Updates the status bar information according to the parameters: connection status (to change connection icon), main progress bar, secondary progress bar, message caption and total products. Any option can be left unchanged. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_Update_StatusBar (ConnectedStat : LONGINT; StatusString : STRING; ProductTotal : LONGINT; CurCurr : STRING); BEGIN IF (StatusString <> '') THEN opm_StatusBar_Main.Panels[3].Text := StatusString; IF (ConnectedStat <> opmC_ConnStatIgnore) THEN BEGIN opm_ImageList_Status.GetIcon (ConnectedStat, opm_Image_Status.Picture.Icon); END; IF (ProductTotal <> opmC_PTotalIgnore) THEN opm_StatusBar_Main.Panels[4].Text := INTTOSTR (ProductTotal) + ' ' + _('products'); IF (CurCurr <> '') THEN opm_StatusBar_Main.Panels[5].Text := CurCurr ELSE opm_StatusBar_Main.Panels[5].Text := _('???'); opm_StatusBar_Main.Panels[6].Text := _('Mem:') + ' ' + INTTOSTR (FNopm_GetMemoryLoad) + '%'; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Load the list of categories in memory and populate the category boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadCategoryList (VAR CatList : opmT_CategoryList; VAR CatBoxList : TStringList); VAR CurCat : LONGINT; BEGIN CatList[0].ID := -1; CatList[0].Parent := 0; CatList[0].Name := ''; CurCat := 1; IF (FNopm_ExecQuery ('select ' + opmG_DBTable_Categories + '.categories_id, ' + opmG_DBTable_Categories + '.parent_id, ' + opmG_DBTable_CategoriesDescription + '.categories_name from ' + opmG_DBTable_Categories + ', ' + opmG_DBTable_CategoriesDescription + ' where ' + opmG_DBTable_CategoriesDescription + '.categories_id= ' + opmG_DBTable_Categories + '.categories_id and language_id=' + INTTOSTR (opm_CurrentLang) + ' ORDER BY ' + opmG_DBTable_CategoriesDescription + '.categories_name', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadCatList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN CatList[CurCat].ID := opmG_DBQuery.Fields[0].AsInteger; CatList[CurCat].Parent := opmG_DBQuery.Fields[1].AsInteger; CatList[CurCat].Name := FNopm_CleanString (opmG_DBQuery.Fields[2].AsString); IF (CatList[CurCat].Name = '') THEN CatList[CurCat].Name := opmC_Unamed_Cat; INC (CurCat); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; { HERE GO THE VIRTUAL CATEGORIES DEFINITIONS... CatList[CurCat].ID := opmC_SC_TrashCanID; CatList[CurCat].Parent := opmC_SC_Parent; CatList[CurCat].Name := _('Deleted products'); CatList[CurCat].TreeIndex := opmC_SC_TrashCanIndex; CatList[CurCat].ListIndex := opmC_SC_TrashCanIndex; INC (CurCat); } opm_TotalCategories := CurCat; CatBoxList.Clear; PRopm_LoadCategoryBoxList (CatList, 0, 0, CurCat, CatBoxList); CatList[0].ID := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Scan the category list and recursively build the category boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadCategoryBoxList (VAR CatList : opmT_CategoryList; CatCurrentID, TreeDepth : LONGINT; VAR CatIndex : LONGINT; VAR CatBoxList : TStringList); VAR CurCat : LONGINT; BEGIN IF (CatCurrentID = 0) THEN CatIndex := 0; FOR CurCat := 0 TO (opm_TotalCategories - 1) DO BEGIN IF ((CatList[CurCat].Parent = CatCurrentID) AND (CatList[CurCat].Parent < opmC_SC_Parent)) THEN BEGIN CatBoxList.Add (STRINGOFCHAR (opmC_CatList_Spacer, (TreeDepth * 2)) + CatList[CurCat].Name); CatList[CurCat].ListIndex := CatIndex; INC (CatIndex); PRopm_LoadCategoryBoxList (CatList, CatList[CurCat].ID, (TreeDepth + 1), CatIndex, CatBoxList); END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Recursively build the category tree view. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_AddCatTreeNode (VAR CatList : opmT_CategoryList; CatCurrentID : LONGINT; CurNode : TTreeNode; TreeDepth : INTEGER); VAR CurCat : LONGINT; NewNode : TTreeNode; BEGIN FOR CurCat := 0 TO (opm_TotalCategories - 1) DO BEGIN IF ((CatList[CurCat].Parent = CatCurrentID) AND (CatList[CurCat].ID > 0) AND (CatList[CurCat].Parent < opmC_SC_Parent)) THEN BEGIN NewNode := opm_TreeView_Main.Items.AddChild (CurNode, CatList[CurCat].Name); NewNode.ImageIndex := 2; NewNode.SelectedIndex := 3; CatList[CurCat].TreeIndex := NewNode.AbsoluteIndex; PRopm_AddCatTreeNode (CatList, CatList[CurCat].ID, NewNode, (TreeDepth + 1)); END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the list of manufacturers and populate the manufacturer boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadManufacturerList (VAR ManList : opmT_ManufacturerList; VAR ManBoxList : TStringList); VAR CurMan : LONGINT; BEGIN ManBoxList.Clear; ManList[0].ID := 0; ManList[0].Name := ''; ManList[0].ListIndex := 0; ManBoxList.Add (''); CurMan := 1; IF (FNopm_ExecQuery ('select manufacturers_id, manufacturers_name from ' + opmG_DBTable_Manufacturers + ' order by manufacturers_name', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadManList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN ManList[CurMan].ID := opmG_DBQuery.Fields[0].AsInteger; ManList[CurMan].Name := FNopm_CleanString (opmG_DBQuery.Fields[1].AsString); IF (ManList[CurMan].Name = '') THEN ManList[CurMan].Name := opmC_Unamed_Man; ManBoxList.Add (ManList[CurMan].Name); ManList[CurMan].ListIndex := CurMan; INC (CurMan); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; opm_TotalManufacturers := CurMan; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the list of available languages and populate the language boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadLanguageList (VAR LangList : opmT_LanguageList); VAR CurLang : LONGINT; DisplayLangValid : BOOLEAN; BEGIN CurLang := 0; DisplayLangValid := FALSE; opmG_LanguageBoxList.Clear; IF (FNopm_ExecQuery ('select languages_id, name from ' + opmG_DBTable_Languages + ' order by name', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadLangList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN LangList[CurLang].ID := opmG_DBQuery.Fields[0].AsInteger; LangList[CurLang].Name := FNopm_CleanString (opmG_DBQuery.Fields[1].AsString); IF (opm_CurrentLang = opmG_DBQuery.Fields[0].AsInteger) THEN DisplayLangValid := TRUE; LangList[CurLang].ListIndex := CurLang; opmG_LanguageBoxList.Add (LangList[CurLang].Name); INC (CurLang); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; opm_TotalLanguages := CurLang; IF (DisplayLangValid = FALSE) THEN opm_CurrentLang := opmC_Def_DisplayLang; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the product list according to the given category. This routine don't modify the current display. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadProductListByCat (ProductCat : LONGINT; VAR ProdList : opmT_ProductList; VAR DescList : opmT_DescriptionList); VAR CurProd : LONGINT; SQLStr : STRING; BEGIN BEGIN CurProd := 0; opm_WeAreSearching := FALSE; IF (opmG_Capa_MorePics6 = FALSE) THEN BEGIN IF (ProductCat > 0) THEN SQLStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S") ' + 'from (' + opmG_DBTable_Products + ', ' + opmG_DBTable_ProductsDescription + ', ' + opmG_DBTable_ProductsToCategories + ') ' + 'left join ' + opmG_DBTable_Specials + ' ON ' + opmG_DBTable_Products + '.products_id = ' + opmG_DBTable_Specials + '.products_id ' + 'where ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id ' + 'and ' + opmG_DBTable_ProductsToCategories + '.products_id=' + opmG_DBTable_Products + '.products_id and ' + opmG_DBTable_ProductsToCategories + '.categories_id=' + INTTOSTR (ProductCat) + ' ' + 'order by ' + opmG_DBTable_ProductsDescription + '.products_name' ELSE SQLStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S") ' + 'from (' + opmG_DBTable_Products + ', ' + opmG_DBTable_ProductsDescription + ') ' + 'left join ' + opmG_DBTable_Specials + ' ON ' + opmG_DBTable_Products + '.products_id = ' + opmG_DBTable_Specials + '.products_id ' + 'LEFT JOIN ' + opmG_DBTable_ProductsToCategories + ' ON ' + opmG_DBTable_ProductsToCategories + '.products_id = ' + opmG_DBTable_Products + '.products_id ' + 'where ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id ' + 'and (' + opmG_DBTable_ProductsToCategories + '.categories_id is null ' + 'or ' + opmG_DBTable_ProductsToCategories + '.categories_id < 1) ' + 'order by ' + opmG_DBTable_ProductsDescription + '.products_name'; END ELSE BEGIN IF (ProductCat > 0) THEN SQLStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S") ' + ', products_subimage1, products_subimage2, products_subimage3, products_subimage4, products_subimage5, products_subimage6 ' + 'from (' + opmG_DBTable_Products + ', ' + opmG_DBTable_ProductsDescription + ', ' + opmG_DBTable_ProductsToCategories + ') ' + 'left join ' + opmG_DBTable_Specials + ' ON ' + opmG_DBTable_Products + '.products_id = ' + opmG_DBTable_Specials + '.products_id ' + 'where ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id ' + 'and ' + opmG_DBTable_ProductsToCategories + '.products_id=' + opmG_DBTable_Products + '.products_id and ' + opmG_DBTable_ProductsToCategories + '.categories_id=' + INTTOSTR (ProductCat) + ' ' + 'order by ' + opmG_DBTable_ProductsDescription + '.products_name' ELSE SQLStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S") ' + ', products_subimage1, products_subimage2, products_subimage3, products_subimage4, products_subimage5, products_subimage6 ' + 'from (' + opmG_DBTable_Products + ', ' + opmG_DBTable_ProductsDescription + ') ' + 'left join ' + opmG_DBTable_Specials + ' ON ' + opmG_DBTable_Products + '.products_id = ' + opmG_DBTable_Specials + '.products_id ' + 'LEFT JOIN ' + opmG_DBTable_ProductsToCategories + ' ON ' + opmG_DBTable_ProductsToCategories + '.products_id = ' + opmG_DBTable_Products + '.products_id ' + 'where ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id ' + 'and (' + opmG_DBTable_ProductsToCategories + '.categories_id is null ' + 'or ' + opmG_DBTable_ProductsToCategories + '.categories_id < 1) ' + 'order by ' + opmG_DBTable_ProductsDescription + '.products_name'; END; IF (FNopm_ExecQuery (SQLStr, opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadProdList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN ProdList[CurProd].ID := opmG_DBQuery.Fields[0].AsInteger; ProdList[CurProd].Model := FNopm_CleanString (opmG_DBQuery.Fields[2].AsString); ProdList[CurProd].Quantity := opmG_DBQuery.Fields[1].AsInteger; ProdList[CurProd].Price := opmG_DBQuery.Fields[3].AsCurrency; ProdList[CurProd].Weight := opmG_DBQuery.Fields[4].AsCurrency; ProdList[CurProd].ManufacturerID := opmG_DBQuery.Fields[5].AsInteger; ProdList[CurProd].CategoryID := ProductCat; ProdList[CurProd].DisplayName := FNopm_CleanString (opmG_DBQuery.Fields[6].AsString); IF (ProdList[CurProd].DisplayName = '') THEN ProdList[CurProd].DisplayName := opmC_Unamed_Prod; ProdList[CurProd].Available := opmG_DBQuery.Fields[7].AsInteger; ProdList[CurProd].ImageURL := FNopm_CleanString (opmG_DBQuery.Fields[10].AsString); ProdList[CurProd].Special := opmG_DBQuery.Fields[11].AsCurrency; ProdList[CurProd].LanguageID := opmG_DBQuery.Fields[12].AsInteger; ProdList[CurProd].Tax := opmG_DBQuery.Fields[13].AsInteger; IF (opmG_Capa_MorePics6 = TRUE) THEN BEGIN ProdList[CurProd].ImageURL1 := FNopm_CleanString (opmG_DBQuery.Fields[18].AsString); ProdList[CurProd].ImageURL2 := FNopm_CleanString (opmG_DBQuery.Fields[19].AsString); ProdList[CurProd].ImageURL3 := FNopm_CleanString (opmG_DBQuery.Fields[20].AsString); ProdList[CurProd].ImageURL4 := FNopm_CleanString (opmG_DBQuery.Fields[21].AsString); ProdList[CurProd].ImageURL5 := FNopm_CleanString (opmG_DBQuery.Fields[22].AsString); ProdList[CurProd].ImageURL6 := FNopm_CleanString (opmG_DBQuery.Fields[23].AsString); END ELSE BEGIN ProdList[CurProd].ImageURL1 := ''; ProdList[CurProd].ImageURL2 := ''; ProdList[CurProd].ImageURL3 := ''; ProdList[CurProd].ImageURL4 := ''; ProdList[CurProd].ImageURL5 := ''; ProdList[CurProd].ImageURL6 := ''; END; ProdList[CurProd].CreationDate := FNopm_StringToDate (opmG_DBQuery.Fields[16].AsString); IF (ProdList[CurProd].CreationDate < opmG_Fallback_DateTime) THEN ProdList[CurProd].CreationDate := opmG_Fallback_DateTime; ProdList[CurProd].ChangeDate := FNopm_StringToDate (opmG_DBQuery.Fields[17].AsString); IF (ProdList[CurProd].ChangeDate < ProdList[CurProd].CreationDate) THEN ProdList[CurProd].ChangeDate := ProdList[CurProd].CreationDate; ProdList[CurProd].AvailDate := FNopm_StringToDate (opmG_DBQuery.Fields[15].AsString); IF (ProdList[CurProd].AvailDate < ProdList[CurProd].CreationDate) THEN ProdList[CurProd].AvailDate := ProdList[CurProd].CreationDate; DescList[CurProd].ID := opmG_DBQuery.Fields[0].AsInteger; DescList[CurProd].Name := FNopm_CleanString (opmG_DBQuery.Fields[6].AsString); IF (DescList[CurProd].Name = '') THEN DescList[CurProd].Name := opmC_Unamed_Prod; DescList[CurProd].Description := FNopm_CleanString (opmG_DBQuery.Fields[8].AsString); DescList[CurProd].URL := FNopm_CleanString (opmG_DBQuery.Fields[9].AsString); DescList[CurProd].Viewed := opmG_DBQuery.Fields[14].AsInteger; DescList[CurProd].LanguageID := opmG_DBQuery.Fields[12].AsInteger; INC (CurProd); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; opm_TotalProducts := CurProd; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the list of available tax classes into the taxes boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_LoadTaxList (VAR TaxList : opmT_TaxList; VAR TaxBoxList : TStringList); VAR CurTax : LONGINT; BEGIN TaxBoxList.Clear; TaxList[0].ID := 0; TaxList[0].Name := ''; TaxList[0].ListIndex := 0; TaxList[0].SumRate := 0; TaxBoxList.Add (''); CurTax := 1; IF (FNopm_ExecQuery ('select ' + opmG_DBTable_TaxClass + '.tax_class_id, tax_class_title, sum(tax_rate) from (' + opmG_DBTable_TaxClass + ') left join ' + opmG_DBTable_TaxRates + ' on ' + opmG_DBTable_TaxClass + '.tax_class_id=' + opmG_DBTable_TaxRates + '.tax_class_id group by tax_class_id order by tax_class_title', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadTaxList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN TaxList[CurTax].ID := opmG_DBQuery.Fields[0].AsInteger; TaxList[CurTax].Name := FNopm_CleanString (opmG_DBQuery.Fields[1].AsString); TaxList[CurTax].SumRate := opmG_DBQuery.Fields[2].AsCurrency; IF (TaxList[CurTax].Name = '') THEN TaxList[CurTax].Name := opmC_Unamed_Tax; TaxList[CurTax].Name := TaxList[CurTax].Name + ' (' + CURRTOSTR (TaxList[CurTax].SumRate) + '%)'; TaxBoxList.Add (TaxList[CurTax].Name); TaxList[CurTax].ListIndex := CurTax; INC (CurTax); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; opm_TotalTaxes := CurTax; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loads the list of available currencies into the currency boxlist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_LoadCurrencyList (VAR CurrencyList : opmT_CurrencyList; VAR CurrencyBoxList : TStringList) : opmR_Currency; VAR CurCurr : LONGINT; DefCurrID : LONGINT; DefCurrR : opmR_Currency; BEGIN CurrencyBoxList.Clear; CurCurr := 0; DefCurrID := -1; DefCurrR.ID := -1; DefCurrR.Code := opmC_Unamed_CurrencyCode; IF (FNopm_ExecQuery ('select ' + opmG_DBTable_Currencies + '.currencies_id from ' + opmG_DBTable_Currencies + ', ' + opmG_DBTable_Configuration + ' where ' + opmG_DBTable_Configuration + '.configuration_key="DEFAULT_CURRENCY" and ' + opmG_DBTable_Configuration + '.configuration_value=' + opmG_DBTable_Currencies + '.code', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadDefCurrency)...'); opmG_DBQuery.First; DefCurrID := ABS (opmG_DBQuery.Fields[0].AsInteger); PRopm_WriteLog ('END record loading.'); END; END; IF (FNopm_ExecQuery ('select currencies_id, title, code, symbol_left, symbol_right, decimal_point, thousands_point, decimal_places, value from ' + opmG_DBTable_Currencies + ' order by title, code', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadCurrencyList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN CurrencyList[CurCurr].ID := opmG_DBQuery.Fields[0].AsInteger; CurrencyList[CurCurr].Name := FNopm_CleanString (opmG_DBQuery.Fields[1].AsString); CurrencyList[CurCurr].Code := opmG_DBQuery.Fields[2].AsString; CurrencyList[CurCurr].Left := opmG_DBQuery.Fields[3].AsString; CurrencyList[CurCurr].Right := opmG_DBQuery.Fields[4].AsString; CurrencyList[CurCurr].DecimalSep := opmG_DBQuery.Fields[5].AsString; CurrencyList[CurCurr].ThousandSep := opmG_DBQuery.Fields[6].AsString; CurrencyList[CurCurr].Precision := opmG_DBQuery.Fields[7].AsInteger; CurrencyList[CurCurr].Value := opmG_DBQuery.Fields[8].AsCurrency; CurrencyList[CurCurr].NewValue := 0; IF (CurrencyList[CurCurr].Name = '') THEN CurrencyList[CurCurr].Name := opmC_Unamed_Currency; IF (CurrencyList[CurCurr].Code = '') THEN CurrencyList[CurCurr].Code := opmC_Unamed_CurrencyCode; IF (CurrencyList[CurCurr].ID = DefCurrID) THEN BEGIN CurrencyList[CurCurr].Default := TRUE; DefCurrR := CurrencyList[CurCurr]; CurrencyBoxList.Add (CurrencyList[CurCurr].Name + ' [' + CurrencyList[CurCurr].Code + '] = ' + CURRTOSTR (CurrencyList[CurCurr].Value) + ' (' + _('DEFAULT') + ')'); END ELSE BEGIN CurrencyBoxList.Add (CurrencyList[CurCurr].Name + ' [' + CurrencyList[CurCurr].Code + '] = ' + CURRTOSTR (CurrencyList[CurCurr].Value)); CurrencyList[CurCurr].Default := FALSE; END; CurrencyList[CurCurr].ListIndex := CurCurr; INC (CurCurr); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; END; FNopm_LoadCurrencyList := DefCurrR; opm_TotalCurrencies := CurCurr; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Clears the current currency record %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_ClearCurrency : opmR_Currency; VAR CurCurrR : opmR_Currency; BEGIN CurCurrR.Code := ''; CurCurrR.Left := ''; CurCurrR.Right := ''; FNopm_ClearCurrency := CurCurrR; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start the building of the category tree. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_RenderCategoryDisplay (VAR CatList : opmT_CategoryList; VAR TreeControl : TTreeView; CurCatID : LONGINT); VAR MainNode, CurrentNode : TTreeNode; CurCat : opmR_Category; CatCount : LONGINT; BEGIN opm_StopTreeOnChange := TRUE; PRopm_WriteLog ('RenderCategoryDisplay BEGIN'); TreeControl.Items.BeginUpdate; TreeControl.Items.Clear; IF (opm_TotalCategories > 0) THEN BEGIN MainNode := TreeControl.Items.AddFirst (NIL, opmG_DBHost); MainNode.ImageIndex := 0; MainNode.SelectedIndex := 1; PRopm_AddCatTreeNode (CatList, 0, MainNode, 0); FOR CatCount := 0 TO (opm_TotalCategories - 1) DO IF (CatList[CatCount].Parent = opmC_SC_Parent) THEN BEGIN CurrentNode := TreeControl.Items.Add (MainNode, CatList[CatCount].Name); CatList[CatCount].TreeIndex := CurrentNode.AbsoluteIndex; CurrentNode.ImageIndex := CatList[CatCount].ID - opmC_SC_BaseID + 3; CurrentNode.SelectedIndex := CatList[CatCount].ID - opmC_SC_BaseID + 4; END; TreeControl.FullCollapse; TreeControl.Items[0].Expand (FALSE); CurCat := FNopm_GetCategory (CatList, CurCatID, opmC_FindByID); IF ((CurCat.TreeIndex >= 0) AND (TreeControl.Items.Count >= CurCat.TreeIndex)) THEN BEGIN TreeControl.Items[CurCat.TreeIndex].Selected := TRUE; END; END; TreeControl.Items.EndUpdate; PRopm_WriteLog ('RenderCategoryDisplay END'); opm_StopTreeOnChange := FALSE; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_RenderLanguageDisplay (VAR ListControl : TComboBox; VAR LangList : opmT_LanguageList); VAR CurLang : LONGINT; DisplayLangIndex : LONGINT; BEGIN PRopm_WriteLog ('RenderLanguageDisplay BEGIN'); ListControl.Items.Clear; ListControl.Items := opmG_LanguageBoxList; DisplayLangIndex := -1; FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO IF (opm_CurrentLang = LangList[CurLang].ID) THEN DisplayLangIndex := CurLang; ListControl.ItemIndex := DisplayLangIndex; PRopm_WriteLog ('RenderLanguageDisplay END'); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_RenderProductDisplay (VAR CatList : opmT_CategoryList; VAR ManList : opmT_ManufacturerList; VAR ProdList : opmT_ProductList; VAR ListControl : TListView; CurProdID : LONGINT); VAR CurProd, DispProd : LONGINT; CurItem : TListItem; CurMan : opmR_Manufacturer; CurCat : opmR_Category; BEGIN PRopm_WriteLog ('RenderProductDisplay BEGIN'); ListControl.Column[opmG_PList_LastOrderColumn].ImageIndex := -1; ListControl.Items.BeginUpdate; ListControl.Items.Clear; DispProd := 0; FOR CurProd := 0 TO (opm_TotalProducts - 1) DO BEGIN IF (ProdList[CurProd].LanguageID = opm_CurrentLang) THEN BEGIN CurItem := ListControl.Items.Add; IF (ProdList[CurProd].Available > 0) THEN CurItem.ImageIndex := 0 ELSE CurItem.ImageIndex := 1; CurItem.SubItems.Add (INTTOSTR (ProdList[CurProd].ID)); CurItem.SubItems.Add (ProdList[CurProd].Model); CurCat := FNopm_GetCategory (CatList, ProdList[CurProd].CategoryID, opmC_FindByID); CurItem.SubItems.Add (CurCat.Name); CurItem.SubItems.Add (ProdList[CurProd].DisplayName); CurMan := FNopm_GetManufacturer (ManList, ProdList[CurProd].ManufacturerID, opmC_FindByID); CurItem.SubItems.Add (CurMan.Name); CurItem.SubItems.Add (INTTOSTR (ProdList[CurProd].Quantity)); IF (ProdList[CurProd].Special > 0) THEN CurItem.SubItems.Add (FNopm_CleanNumber (CURRTOSTR (ProdList[CurProd].Special), opmC_ValIsCurrency)) ELSE CurItem.SubItems.Add (FNopm_CleanNumber (CURRTOSTR (ProdList[CurProd].Price), opmC_ValIsCurrency)); CurItem.SubItems.Add (CURRTOSTR (ProdList[CurProd].Weight)); CurItem.SubItems.Add (FNopm_DateToString (ProdList[CurProd].AvailDate)); CurItem.SubItems.Add (''); IF (ProdList[CurProd].Special > 0) THEN CurItem.SubItemImages[6] := 2; IF ((ProdList[CurProd].ImageURL1 <> '') OR (ProdList[CurProd].ImageURL2 <> '') OR (ProdList[CurProd].ImageURL3 <> '') OR (ProdList[CurProd].ImageURL4 <> '') OR (ProdList[CurProd].ImageURL5 <> '') OR (ProdList[CurProd].ImageURL6 <> '')) THEN CurItem.SubItemImages[9] := 10 ELSE IF (ProdList[CurProd].ImageURL <> '') THEN CurItem.SubItemImages[9] := 6 ELSE CurItem.SubItemImages[9] := 7; INC (DispProd); IF (CurProdID = ProdList[CurProd].ID) THEN BEGIN ListControl.Selected := CurItem; ListControl.ItemFocused := CurItem; END; END; END; ListControl.Column[opmG_PList_LastOrderColumn].ImageIndex := 9; ListControl.CustomSort (@FNopm_Sort_ProductList, opmG_PList_LastOrderColumn); ListControl.Items.EndUpdate; PRopm_Update_StatusBar (opmC_ConnStatIgnore, '', DispProd, opm_CurrentCurrency.Code); PRopm_WriteLog ('RenderProductDisplay END'); END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearCategoryList (VAR CatList : TStringList); BEGIN CatList.Clear; opm_CurrentCategory := 0; opm_TotalCategories := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearLanguageList (VAR LangList : TStringList); BEGIN LangList.Clear; opm_TotalLanguages := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearManufacturerList (VAR ManList : TStringList); BEGIN ManList.Clear; opm_TotalManufacturers := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearTaxList (VAR TaxList : TStringList); BEGIN TaxList.Clear; opm_TotalTaxes := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearCurrencyList (VAR CurrencyList : TStringList); BEGIN CurrencyList.Clear; opm_TotalCurrencies := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_ClearProductList (VAR ListView : TListView); BEGIN ListView.Items.BeginUpdate; ListView.Items.Clear; ListView.Items.EndUpdate; opm_TotalProducts := 0; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_SearchProducts (PCategory, PManufacturer: LONGINT; PModel, PName, PDesc : STRING; PSPrice, PImgURL, PAvailable : LONGINT; VAR ProdList : opmT_ProductList; VAR DescList : opmT_DescriptionList; MultiString : STRING); VAR SelectStr, FromStr, WhereStr, OrderStr : STRING; CurProd : LONGINT; BEGIN IF (opmG_Capa_MorePics6 = FALSE) THEN SelectStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + '' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + '' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsToCategories + '.categories_id, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S")' ELSE SelectStr := 'select ' + opmG_DBTable_Products + '.products_id, ' + opmG_DBTable_Products + '.products_quantity, ' + opmG_DBTable_Products + '.products_model, ' + opmG_DBTable_Products + '.products_price, ' + opmG_DBTable_Products + '.products_weight, ' + opmG_DBTable_Products + '.manufacturers_id, ' + '' + opmG_DBTable_ProductsDescription + '.products_name, ' + opmG_DBTable_Products + '.products_status, ' + opmG_DBTable_ProductsDescription + '.products_description, ' + opmG_DBTable_ProductsDescription + '.products_url, ' + opmG_DBTable_Products + '.products_image, ' + '' + opmG_DBTable_Specials + '.specials_new_products_price, ' + opmG_DBTable_ProductsToCategories + '.categories_id, ' + opmG_DBTable_ProductsDescription + '.language_id, ' + opmG_DBTable_Products + '.products_tax_class_id, ' + opmG_DBTable_ProductsDescription + '.products_viewed, ' + 'DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_available, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_date_added, "%Y-%m-%d %H:%i:%S"), DATE_FORMAT(' + opmG_DBTable_Products + '.products_last_modified, "%Y-%m-%d %H:%i:%S"), ' + 'products_subimage1, products_subimage2, products_subimage3, products_subimage4, products_subimage5, products_subimage6'; FromStr := ' from (' + opmG_DBTable_Products + ', ' + opmG_DBTable_ProductsDescription + ', ' + opmG_DBTable_ProductsToCategories + ') left join ' + opmG_DBTable_Specials + ' ON ' + opmG_DBTable_Products + '.products_id = ' + opmG_DBTable_Specials + '.products_id where'; OrderStr := ' order by ' + opmG_DBTable_ProductsDescription + '.products_name'; IF (PCategory > 0) THEN WhereStr := WhereStr + ' ' + opmG_DBTable_ProductsToCategories + '.products_id=' + opmG_DBTable_Products + '.products_id and ' + opmG_DBTable_ProductsToCategories + '.categories_id=' + INTTOSTR (PCategory) ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_ProductsToCategories + '.products_id=' + opmG_DBTable_Products + '.products_id'; IF (PManufacturer > 0) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Products + '.manufacturers_id=' + INTTOSTR (PManufacturer) ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Products + '.manufacturers_id=' + INTTOSTR (PManufacturer); IF (MultiString <> '') THEN BEGIN MultiString := FNopm_CleanSQLString (MultiString, TRUE); IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' ELSE WhereStr := WhereStr + ' '; WhereStr := WhereStr + '(' + opmG_DBTable_Products + '.products_model like "%' + MultiString + '%"'; WhereStr := WhereStr + ' or ' + opmG_DBTable_ProductsDescription + '.products_name like "%' + MultiString + '%"'; WhereStr := WhereStr + ' or ' + opmG_DBTable_ProductsDescription + '.products_description like "%' + MultiString + '%")'; END ELSE BEGIN IF (PModel <> '') THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Products + '.products_model like "%' + FNopm_CleanSQLString (PModel, TRUE) + '%"' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Products + '.products_model like "%' + FNopm_CleanSQLString (PModel, TRUE) + '%"'; IF (PName <> '') THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_ProductsDescription + '.products_name like "%' + FNopm_CleanSQLString (PName, TRUE) + '%"' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_ProductsDescription + '.products_name like "%' + FNopm_CleanSQLString (PName, TRUE) + '%"'; IF (PDesc <> '') THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_ProductsDescription + '.products_description like "%' + FNopm_CleanSQLString (PDesc, TRUE) + '%"' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_ProductsDescription + '.products_description like "%' + FNopm_CleanSQLString (PDesc, TRUE) + '%"'; END; IF (PAvailable = opmC_SearchYes) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Products + '.products_status > 0' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Products + '.products_status > 0' ELSE IF (PAvailable = opmC_SearchNo) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Products + '.products_status = 0' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Products + '.products_status = 0'; IF (PImgURL = opmC_SearchYes) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + '(' + opmG_DBTable_Products + '.products_image <> "" and ' + opmG_DBTable_Products + '.products_image IS NOT NULL)' ELSE WhereStr := WhereStr + ' (' + opmG_DBTable_Products + '.products_image <> "" and ' + opmG_DBTable_Products + '.products_image IS NOT NULL)' ELSE IF (PImgURL = opmC_SearchNo) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + '(' + opmG_DBTable_Products + '.products_image = "" or ' + opmG_DBTable_Products + '.products_image IS NULL)' ELSE WhereStr := WhereStr + ' (' + opmG_DBTable_Products + '.products_image = "" or ' + opmG_DBTable_Products + '.products_image IS NULL)'; IF (PSPrice = opmC_SearchYes) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Specials + '.specials_new_products_price > 0' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Specials + '.specials_new_products_price > 0' ELSE IF (PSPrice = opmC_SearchNo) THEN IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and (' + opmG_DBTable_Specials + '.specials_new_products_price = 0 or ' + opmG_DBTable_Specials + '.specials_new_products_price IS NULL)' ELSE WhereStr := WhereStr + ' (' + opmG_DBTable_Specials + '.specials_new_products_price = 0 or ' + opmG_DBTable_Specials + '.specials_new_products_price IS NULL)'; IF (WhereStr <> '') THEN WhereStr := WhereStr + ' and ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id' ELSE WhereStr := WhereStr + ' ' + opmG_DBTable_Products + '.products_id=' + opmG_DBTable_ProductsDescription + '.products_id'; CurProd := 0; opm_WeAreSearching := TRUE; IF (FNopm_ExecQuery (SelectStr + FromStr + WhereStr + OrderStr, opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadSearchList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN ProdList[CurProd].ID := opmG_DBQuery.Fields[0].AsInteger; ProdList[CurProd].Model := FNopm_CleanString (opmG_DBQuery.Fields[2].AsString); ProdList[CurProd].Quantity := opmG_DBQuery.Fields[1].AsInteger; ProdList[CurProd].Price := opmG_DBQuery.Fields[3].AsCurrency; ProdList[CurProd].Weight := opmG_DBQuery.Fields[4].AsCurrency; ProdList[CurProd].ManufacturerID := opmG_DBQuery.Fields[5].AsInteger; ProdList[CurProd].CategoryID := opmG_DBQuery.Fields[12].AsInteger; ProdList[CurProd].DisplayName := FNopm_CleanString (opmG_DBQuery.Fields[6].AsString); IF (TRIM (ProdList[CurProd].DisplayName) = '') THEN ProdList[CurProd].DisplayName := opmC_Unamed_Prod; ProdList[CurProd].Available := opmG_DBQuery.Fields[7].AsInteger; ProdList[CurProd].ImageURL := FNopm_CleanString (opmG_DBQuery.Fields[10].AsString); ProdList[CurProd].Special := opmG_DBQuery.Fields[11].AsCurrency; ProdList[CurProd].LanguageID := opmG_DBQuery.Fields[13].AsInteger; ProdList[CurProd].Tax := opmG_DBQuery.Fields[14].AsInteger; ProdList[CurProd].CreationDate := FNopm_StringToDate (opmG_DBQuery.Fields[17].AsString); IF (ProdList[CurProd].CreationDate < opmG_Fallback_DateTime) THEN ProdList[CurProd].CreationDate := opmG_Fallback_DateTime; ProdList[CurProd].ChangeDate := FNopm_StringToDate (opmG_DBQuery.Fields[18].AsString); IF (ProdList[CurProd].ChangeDate < ProdList[CurProd].CreationDate) THEN ProdList[CurProd].ChangeDate := ProdList[CurProd].CreationDate; ProdList[CurProd].AvailDate := FNopm_StringToDate (opmG_DBQuery.Fields[16].AsString); IF (ProdList[CurProd].AvailDate < ProdList[CurProd].CreationDate) THEN ProdList[CurProd].AvailDate := ProdList[CurProd].CreationDate; IF (opmG_Capa_MorePics6 = TRUE) THEN BEGIN ProdList[CurProd].ImageURL1 := FNopm_CleanString (opmG_DBQuery.Fields[19].AsString); ProdList[CurProd].ImageURL2 := FNopm_CleanString (opmG_DBQuery.Fields[20].AsString); ProdList[CurProd].ImageURL3 := FNopm_CleanString (opmG_DBQuery.Fields[21].AsString); ProdList[CurProd].ImageURL4 := FNopm_CleanString (opmG_DBQuery.Fields[22].AsString); ProdList[CurProd].ImageURL5 := FNopm_CleanString (opmG_DBQuery.Fields[23].AsString); ProdList[CurProd].ImageURL6 := FNopm_CleanString (opmG_DBQuery.Fields[24].AsString); END ELSE BEGIN ProdList[CurProd].ImageURL1 := ''; ProdList[CurProd].ImageURL2 := ''; ProdList[CurProd].ImageURL3 := ''; ProdList[CurProd].ImageURL4 := ''; ProdList[CurProd].ImageURL5 := ''; ProdList[CurProd].ImageURL6 := ''; END; DescList[CurProd].ID := opmG_DBQuery.Fields[0].AsInteger; DescList[CurProd].Name := FNopm_CleanString (opmG_DBQuery.Fields[6].AsString); IF (TRIM (DescList[CurProd].Name) = '') THEN DescList[CurProd].Name := opmC_Unamed_Prod; DescList[CurProd].Description := FNopm_CleanString (opmG_DBQuery.Fields[8].AsString); DescList[CurProd].URL := FNopm_CleanString (opmG_DBQuery.Fields[9].AsString); DescList[CurProd].Viewed := opmG_DBQuery.Fields[15].AsInteger; DescList[CurProd].LanguageID := opmG_DBQuery.Fields[13].AsInteger; INC (CurProd); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading [' + INTTOSTR (CurProd) + '].'); END; END; opm_TotalProducts := CurProd; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetCategory (VAR CatList : opmT_CategoryList; CatID : LONGINT; SearchBy : INTEGER) : opmR_Category; VAR CurCatR : opmR_Category; CurCat : LONGINT; BEGIN CurCatR.ID := 0; CurCatR.Parent := 0; CurCatR.Name := ''; CurCatR.ListIndex := 0; CurCatR.TreeIndex := 0; FNopm_GetCategory := CurCatR; IF (SearchBy = opmC_FindByID) THEN FOR CurCat := 0 TO (opm_TotalCategories - 1) DO BEGIN IF (CatList[CurCat].ID = CatID) THEN BEGIN CurCatR.ID := CatList[CurCat].ID; CurCatR.Parent := CatList[CurCat].Parent; CurCatR.Name := CatList[CurCat].Name; CurCatR.ListIndex := CatList[CurCat].ListIndex; CurCatR.TreeIndex := CatList[CurCat].TreeIndex; FNopm_GetCategory := CurCatR; BREAK; END; END ELSE IF (SearchBy = opmC_FindByIndex) THEN FOR CurCat := 0 TO (opm_TotalCategories - 1) DO BEGIN IF (CatList[CurCat].ListIndex = CatID) THEN BEGIN CurCatR.ID := CatList[CurCat].ID; CurCatR.Parent := CatList[CurCat].Parent; CurCatR.Name := CatList[CurCat].Name; CurCatR.ListIndex := CatList[CurCat].ListIndex; CurCatR.TreeIndex := CatList[CurCat].TreeIndex; FNopm_GetCategory := CurCatR; BREAK; END; END ELSE FOR CurCat := 0 TO (opm_TotalCategories - 1) DO BEGIN IF (CatList[CurCat].TreeIndex = CatID) THEN BEGIN CurCatR.ID := CatList[CurCat].ID; CurCatR.Parent := CatList[CurCat].Parent; CurCatR.Name := CatList[CurCat].Name; CurCatR.ListIndex := CatList[CurCat].ListIndex; CurCatR.TreeIndex := CatList[CurCat].TreeIndex; FNopm_GetCategory := CurCatR; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_GetCategory_Data (CatID : LONGINT; VAR CatData : opmT_SingleCatList); VAR CurCat : LONGINT; MaxCat : LONGINT; CurLang : LONGINT; TmpCatList : opmT_SingleCatList; BEGIN CatData[0].ID := -1; CatData[0].Parent := 0; CatData[0].Name := ''; CatData[0].LanguageID := -1; CurCat := 0; IF (FNopm_ExecQuery ('select ' + opmG_DBTable_Categories + '.categories_id, ' + opmG_DBTable_Categories + '.parent_id, ' + opmG_DBTable_CategoriesDescription + '.categories_name, ' + opmG_DBTable_CategoriesDescription + '.language_id from (' + opmG_DBTable_Categories + ') left join ' + opmG_DBTable_CategoriesDescription + ' on ' + opmG_DBTable_Categories + '.categories_id=' + opmG_DBTable_CategoriesDescription + '.categories_id where ' + opmG_DBTable_Categories + '.categories_id=' + INTTOSTR (CatID) + ' ORDER BY ' + opmG_DBTable_CategoriesDescription + '.language_id', opmC_SQLSelect) > 0) THEN BEGIN IF (opmG_DBQuery.Active = TRUE) THEN BEGIN PRopm_WriteLog ('BEGIN record loading (LoadCatDataList)...'); opmG_DBQuery.First; WHILE NOT opmG_DBQuery.EOF DO BEGIN CatData[CurCat].ID := opmG_DBQuery.Fields[0].AsInteger; CatData[CurCat].Parent := opmG_DBQuery.Fields[1].AsInteger; CatData[CurCat].Name := FNopm_CleanString (opmG_DBQuery.Fields[2].AsString); CatData[CurCat].LanguageID := opmG_DBQuery.Fields[3].AsInteger; IF (CatData[CurCat].Name = '') THEN CatData[CurCat].Name := opmC_Unamed_Cat; INC (CurCat); opmG_DBQuery.Next; END; PRopm_WriteLog ('END record loading.'); END; MaxCat := (CurCat - 1); FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO BEGIN TmpCatList[CurLang].ID := -1; TmpCatList[CurLang].Parent := 0; TmpCatList[CurLang].Name := ''; TmpCatList[CurLang].LanguageID := -1; END; FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO BEGIN FOR CurCat := 0 TO MaxCat DO BEGIN IF (CatData[CurCat].LanguageID = opmG_LanguageList[CurLang].ID) THEN BEGIN TmpCatList[CurLang] := CatData[CurCat]; BREAK; END; END; END; CatData := TmpCatList; { Sort the array... } { FOR CurCat := 0 TO (MaxCat) DO BEGIN CatIndex := CurCat; FOR CatCount2 := (CurCat + 1) TO (MaxCat) DO IF (CatData[CatIndex].LanguageID > CatData[CatCount2].LanguageID) THEN CatIndex := CatCount2; opm_SwapCatRecord := CatData[CatIndex]; CatData[CatIndex] := CatData[CurCat]; CatData[CurCat] := opm_SwapCatRecord; END;} END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetRealLangIDByIndex (VAR LangList : opmT_LanguageList; LangIndex : LONGINT) : LONGINT; VAR CurLang : LONGINT; BEGIN FNopm_GetRealLangIDByIndex := 0; FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO BEGIN IF (LangList[CurLang].ListIndex = LangIndex) THEN BEGIN FNopm_GetRealLangIDByIndex := LangList[CurLang].ID; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetManufacturer (VAR ManList : opmT_ManufacturerList; ManID : LONGINT; SearchBy : INTEGER) : opmR_Manufacturer; VAR CurManR : opmR_Manufacturer; CurMan : LONGINT; BEGIN CurManR.ID := 0; CurManR.Name := ''; CurManR.ListIndex := 0; FNopm_GetManufacturer := CurManR; IF (SearchBy = opmC_FindByID) THEN FOR CurMan := 0 TO (opm_TotalManufacturers - 1) DO BEGIN IF (ManList[CurMan].ID = ManID) THEN BEGIN FNopm_GetManufacturer := ManList[CurMan]; BREAK; END; END ELSE FOR CurMan := 0 TO (opm_TotalManufacturers - 1) DO BEGIN IF (ManList[CurMan].ListIndex = ManID) THEN BEGIN FNopm_GetManufacturer := ManList[CurMan]; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetCurrency (VAR CurrList : opmT_CurrencyList; CurrID : LONGINT; SearchBy : INTEGER) : opmR_Currency; VAR CurCurrR : opmR_Currency; CurCurr : LONGINT; BEGIN CurCurrR.ID := -1; CurCurrR.Name := ''; CurCurrR.Code := ''; CurCurrR.Left := ''; CurCurrR.Right := ''; CurCurrR.DecimalSep := ''; CurCurrR.ThousandSep := ''; CurCurrR.Precision := 0; CurCurrR.Value := 0; CurCurrR.NewValue := 0; CurCurrR.ListIndex := -1; CurCurrR.Default := FALSE; FNopm_GetCurrency := CurCurrR; IF (SearchBy = opmC_FindByID) THEN FOR CurCurr := 0 TO (opm_TotalCurrencies - 1) DO BEGIN IF (CurrList[CurCurr].ID = CurrID) THEN BEGIN FNopm_GetCurrency := CurrList[CurCurr]; BREAK; END; END ELSE FOR CurCurr := 0 TO (opm_TotalCurrencies - 1) DO BEGIN IF (CurrList[CurCurr].ListIndex = CurrID) THEN BEGIN FNopm_GetCurrency := CurrList[CurCurr]; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetProductByID (ProdID, LangID : LONGINT; VAR ProdList : opmT_ProductList) : opmR_Product; VAR CurProdR : opmR_Product; CurProd : LONGINT; BEGIN CurProdR.ID := -1; CurProdR.Model := ''; CurProdR.Quantity := 0; CurProdR.Price := 0; CurProdR.Weight := 0; CurProdR.ManufacturerID := 0; CurProdR.CategoryID := 0; CurProdR.DisplayName := ''; CurProdR.ImageURL := ''; CurProdR.Available := 0; CurProdR.Special := 0; CurProdR.LanguageID := LangID; CurProdR.Tax := 0; FNopm_GetProductByID := CurProdR; FOR CurProd := 0 TO (opm_TotalProducts - 1) DO BEGIN IF ((ProdList[CurProd].ID = ProdID) AND (ProdList[CurProd].LanguageID = LangID)) THEN BEGIN FNopm_GetProductByID := ProdList[CurProd]; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} FUNCTION Topm_Form_Main.FNopm_GetDescriptionByID (ProdID, LangID : LONGINT; VAR DescList : opmT_DescriptionList) : opmR_Description; VAR CurDescR : opmR_Description; CurDesc : LONGINT; BEGIN CurDescR.ID := -1; CurDescR.Name := ''; CurDescR.Description := ''; CurDescR.URL := ''; CurDescR.LanguageID := LangID; CurDescR.Viewed := 0; FNopm_GetDescriptionByID := CurDescR; FOR CurDesc := 0 TO (opm_TotalProducts - 1) DO BEGIN IF ((DescList[CurDesc].ID = ProdID) AND (DescList[CurDesc].LanguageID = LangID)) THEN BEGIN FNopm_GetDescriptionByID := DescList[CurDesc]; BREAK; END; END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_TreeView_MainChange(Sender: TObject; Node: TTreeNode); begin IF (opm_StopTreeOnChange = FALSE) THEN BEGIN opm_TreeView_Main.Enabled := FALSE; IF (opm_TreeView_Main.Selected <> NIL) THEN BEGIN opm_CurrentCatRecord := FNopm_GetCategory (opmG_CategoryList, Node.AbsoluteIndex, opmC_FindByNode); opm_CurrentCategory := opm_CurrentCatRecord.ID; IF (opm_CurrentCatRecord.ID < opmC_SC_BaseID) THEN BEGIN IF (opmG_UIClickLoad > 0) THEN BEGIN PRopm_Sound ('MenuPopup', opmG_UISilent); opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (50, 1, _('Loading product list...')); PRopm_LoadProductListByCat (opm_CurrentCategory, opmG_ProductList, opmG_DescriptionList); opm_Form_Progress.PRopm_PDClose; PRopm_RenderProductDisplay (opmG_CategoryList, opmG_ManufacturerList, opmG_ProductList, opm_ListView_Main, opm_CurrentProdID); IF (opm_CurrentCatRecord.ID >= 0) THEN PRopm_Valid_CatOps (opm_WeAreConnected, opm_TreeView_Main.Selected) ELSE PRopm_Valid_CatOps (opm_WeAreConnected, NIL); PRopm_Valid_ProdOps (opm_WeAreConnected, opm_ListView_Main.Selected, opm_ListView_Main.SelCount, opm_TreeView_Main.Selected, opm_CurrentProdID_CB); END; END ELSE BEGIN { CLICK IN SPECIAL NODE, PROCESS HERE... } PRopm_Valid_CatOps (opm_WeAreConnected, NIL); PRopm_Valid_ProdOps (opm_WeAreConnected, NIL, 0, NIL, 0); END END ELSE BEGIN PRopm_Valid_CatOps (opm_WeAreConnected, NIL); PRopm_Valid_ProdOps (opm_WeAreConnected, NIL, 0, NIL, 0); END; opm_TreeView_Main.Enabled := TRUE; opm_Form_Main.FocusControl (opm_TreeView_Main); END; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_RefreshCategoriesClick (Sender: TObject); begin opm_TreeView_Main.Enabled := FALSE; PRopm_Sound ('MenuPopup', opmG_UISilent); opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (0, 1, _('Loading language list...')); PRopm_LoadLanguageList (opmG_LanguageList); opm_Form_Progress.PRopm_PDUpdate_Progress (20, 1, _('Loading category list...')); PRopm_LoadCategoryList (opmG_CategoryList, opmG_CategoryBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (40, 1, _('Loading manufacturers list...')); PRopm_LoadManufacturerList (opmG_ManufacturerList, opmG_ManufacturerBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (60, 1, _('Loading taxes list...')); PRopm_LoadTaxList (opmG_TaxList, opmG_TaxBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (80, 1, _('Loading currency list...')); opm_CurrentCurrency := FNopm_LoadCurrencyList (opmG_CurrencyList, opmG_CurrencyBoxList); opm_Form_Progress.PRopm_PDClose; PRopm_RenderLanguageDisplay (opm_ComboBox_DisplayLang, opmG_LanguageList); PRopm_RenderCategoryDisplay (opmG_CategoryList, opm_TreeView_Main, opm_CurrentCategory); PRopm_RenderProductDisplay (opmG_CategoryList, opmG_ManufacturerList, opmG_ProductList, opm_ListView_Main, opm_CurrentProdID); opm_TreeView_Main.Enabled := TRUE; opm_Form_Main.FocusControl (opm_TreeView_Main); end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_RefreshProductsClick(Sender: TObject); VAR CurItem : TListItem; BEGIN CurItem := opm_ListView_Main.Selected; IF (CurItem <> NIL) THEN opm_CurrentProdID := STRTOINT (TRIM (CurItem.SubItems.Strings[0])); opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (50, 1, _('Loading product list.')); PRopm_Reload_ProductList (opm_WeAreSearching); opm_Form_Progress.PRopm_PDClose; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_ComboBox_DisplayLangSelect(Sender: TObject); begin PRopm_Sound ('MenuPopup', opmG_UISilent); opm_CurrentLang := FNopm_GetRealLangIDByIndex (opmG_LanguageList, opm_ComboBox_DisplayLang.ItemIndex); opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (0, 1, _('Loading language list...')); PRopm_LoadLanguageList (opmG_LanguageList); opm_Form_Progress.PRopm_PDUpdate_Progress (20, 1, _('Loading category list...')); PRopm_LoadCategoryList (opmG_CategoryList, opmG_CategoryBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (40, 1, _('Loading manufacturers list...')); PRopm_LoadManufacturerList (opmG_ManufacturerList, opmG_ManufacturerBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (60, 1, _('Loading taxes list...')); PRopm_LoadTaxList (opmG_TaxList, opmG_TaxBoxList); opm_Form_Progress.PRopm_PDUpdate_Progress (80, 1, _('Loading currency list...')); opm_CurrentCurrency := FNopm_LoadCurrencyList (opmG_CurrencyList, opmG_CurrencyBoxList); opm_Form_Progress.PRopm_PDClose; PRopm_RenderLanguageDisplay (opm_ComboBox_DisplayLang, opmG_LanguageList); PRopm_RenderCategoryDisplay (opmG_CategoryList, opm_TreeView_Main, opm_CurrentCategory); PRopm_RenderProductDisplay (opmG_CategoryList, opmG_ManufacturerList, opmG_ProductList, opm_ListView_Main, opm_CurrentProdID); end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_MenuItem_SearchProductClick(Sender: TObject); begin IF (opm_Form_SearchProduct.ShowModal = mrOk) THEN BEGIN opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (50, 1, _('Searching product...')); opm_Search_Quick := ''; PRopm_SearchProducts (opm_Search_PCategory, opm_Search_PManufacturer, opm_Search_PModel, opm_Search_PName, opm_Search_PDesc, opm_Search_PSPrice, opm_Search_PImagURL, opm_Search_PAvailable, opmG_ProductList, opmG_DescriptionList, opm_Search_Quick); opm_Form_Progress.PRopm_PDClose; PRopm_RenderProductDisplay (opmG_CategoryList, opmG_ManufacturerList, opmG_ProductList, opm_ListView_Main, opm_CurrentProdID); PRopm_Valid_ProdOps (opm_WeAreConnected, opm_ListView_Main.Selected, opm_ListView_Main.SelCount, NIL, opm_CurrentProdID_CB); END; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} procedure Topm_Form_Main.opm_ListView_MainDblClick(Sender: TObject); var CurItem : TListItem; CurLang : LONGINT; begin CurItem := opm_ListView_Main.Selected; IF ((CurItem <> NIL) AND (opm_ListView_Main.Enabled = TRUE) AND (opm_ListView_Main.Focused)) THEN BEGIN opm_ListView_Main.Enabled := FALSE; opm_CurrentProdID := STRTOINT (TRIM (CurItem.SubItems.Strings[0])); opm_CurrentProdRecord := FNopm_GetProductByID (opm_CurrentProdID, opm_CurrentLang, opmG_ProductList); FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO opm_CurrentSingleDescList[CurLang] := FNopm_GetDescriptionByID (opm_CurrentProdRecord.ID, opmG_LanguageList[CurLang].ID, opmG_DescriptionList); IF (opm_Form_PEdit.ShowModal = mrOk) THEN BEGIN IF (opmG_UIConfirmMods = 0) OR ((opmG_UIConfirmMods > 0) AND (FNopm_Message (_('Do you really want to update this product?'), mtConfirmation, [mbYes, mbNo], opmG_UISilent) = mrYes)) THEN BEGIN opm_Form_Progress.PRopm_PDShow (FALSE, TRUE); opm_Form_Progress.PRopm_PDUpdate_Progress (50, 1, _('Updating product data...')); PRopm_UpdateProduct (opm_CurrentProdRecord, opm_CurrentPEditRecord, opm_CurrentSingleDescList); opm_Form_Progress.PRopm_PDUpdate_Progress (80, 1, _('Loading product list.')); PRopm_Reload_ProductList (opm_WeAreSearching); opm_Form_Progress.PRopm_PDClose; END; END; opm_ListView_Main.Enabled := TRUE; opm_Form_Main.FocusControl (opm_ListView_Main); END; end; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_UpdateProduct (CurProdRecord, NewProdRecord : opmR_Product; SingleDescList : opmT_SingleDescList); VAR UStrProducts, UStrProdCats, IStrProdCats, DStrProdDesc, IStrProdDesc, DStrProdSpec, IStrProdSpec : STRING; CurLang : LONGINT; BEGIN opm_Form_Progress.PRopm_PDUpdate_Progress (0, 2, _('Preparing update query...')); UStrProducts := ''; UStrProdCats := ''; IStrProdCats := ''; DStrProdSpec := ''; IStrProdSpec := ''; IF (opmG_Capa_MorePics6 = FALSE) THEN UStrProducts := 'update ' + opmG_DBTable_Products + ' set products_model="' + NewProdRecord.Model + '",' + ' products_quantity=' + INTTOSTR (NewProdRecord.Quantity) + ',' + ' manufacturers_id=' + INTTOSTR (NewProdRecord.ManufacturerID) + ',' + ' products_image="' + TRIM (NewProdRecord.ImageURL) + '",' + ' products_price=' + CURRTOSTR (NewProdRecord.Price) + ',' + ' products_weight=' + CURRTOSTR (NewProdRecord.Weight) + ',' + ' products_status=' + INTTOSTR (NewProdRecord.Available) + ',' + ' products_last_modified=now()' + ', ' + ' products_tax_class_id=' + INTTOSTR (NewProdRecord.Tax) + ', ' + ' products_date_available="' + FNopm_DateToString (NewProdRecord.AvailDate) + '"' + ' where products_id=' + INTTOSTR (NewProdRecord.ID) ELSE UStrProducts := 'update ' + opmG_DBTable_Products + ' set products_model="' + NewProdRecord.Model + '",' + ' products_quantity=' + INTTOSTR (NewProdRecord.Quantity) + ',' + ' manufacturers_id=' + INTTOSTR (NewProdRecord.ManufacturerID) + ',' + ' products_image="' + TRIM (NewProdRecord.ImageURL) + '",' + ' products_price=' + CURRTOSTR (NewProdRecord.Price) + ',' + ' products_weight=' + CURRTOSTR (NewProdRecord.Weight) + ',' + ' products_status=' + INTTOSTR (NewProdRecord.Available) + ',' + ' products_last_modified=now()' + ', ' + ' products_tax_class_id=' + INTTOSTR (NewProdRecord.Tax) + ', ' + ' products_date_available="' + FNopm_DateToString (NewProdRecord.AvailDate) + '", ' + ' products_subimage1="' + TRIM (NewProdRecord.ImageURL1) + '",' + ' products_subimage2="' + TRIM (NewProdRecord.ImageURL2) + '",' + ' products_subimage3="' + TRIM (NewProdRecord.ImageURL3) + '",' + ' products_subimage4="' + TRIM (NewProdRecord.ImageURL4) + '",' + ' products_subimage5="' + TRIM (NewProdRecord.ImageURL5) + '",' + ' products_subimage6="' + TRIM (NewProdRecord.ImageURL6) + '"' + ' where products_id=' + INTTOSTR (NewProdRecord.ID); IF (CurProdRecord.CategoryID <> NewProdRecord.CategoryID) THEN BEGIN UStrProdCats := 'delete from ' + opmG_DBTable_ProductsToCategories + '' + ' where products_id=' + INTTOSTR (NewProdRecord.ID) + ' and categories_id=' + INTTOSTR (CurProdRecord.CategoryID); IStrProdCats := 'insert into ' + opmG_DBTable_ProductsToCategories + ' (products_id, categories_id)' + '' + ' values (' + INTTOSTR (CurProdRecord.ID) + ', ' + INTTOSTR (NewProdRecord.CategoryID) + ')'; END ELSE BEGIN UStrProdCats := ''; IStrProdCats := ''; END; IF (CurProdRecord.Special <> NewProdRecord.Special) THEN DStrProdSpec := 'delete from ' + opmG_DBTable_Specials + '' + '' + ' where products_id=' + INTTOSTR (NewProdRecord.ID) ELSE DStrProdSpec := ''; IF ((ROUND (NewProdRecord.Special) > 0) AND (CurProdRecord.Special <> NewProdRecord.Special)) THEN IStrProdSpec := 'insert into ' + opmG_DBTable_Specials + ' (products_id, specials_new_products_price, specials_date_added, specials_last_modified)' + '' + ' values (' + INTTOSTR (NewProdRecord.ID) + ', ' + CURRTOSTR (NewProdRecord.Special) + ', now(), now())' ELSE IStrProdSpec := ''; opm_Form_Progress.PRopm_PDUpdate_Progress (12, 2, 'Updating general product data...'); IF (UStrProducts <> '') THEN FNopm_ExecQuery (UStrProducts, opmC_SQLUpdate); opm_Form_Progress.PRopm_PDUpdate_Progress (24, 2, 'Updating category relationships...'); IF (UStrProdCats <> '') THEN FNopm_ExecQuery (UStrProdCats, opmC_SQLUpdate); opm_Form_Progress.PRopm_PDUpdate_Progress (36, 2, ''); IF (IStrProdCats <> '') THEN FNopm_ExecQuery (IStrProdCats, opmC_SQLInsert); opm_Form_Progress.PRopm_PDUpdate_Progress (48, 2, 'Updating special prices...'); IF (DStrProdSpec <> '') THEN FNopm_ExecQuery (DStrProdSpec, opmC_SQLDelete); opm_Form_Progress.PRopm_PDUpdate_Progress (60, 2, ''); IF (IStrProdSpec <> '') THEN FNopm_ExecQuery (IStrProdSpec, opmC_SQLInsert); opm_Form_Progress.PRopm_PDUpdate_Progress (72, 2, 'Updating product descriptions...'); DStrProdDesc := 'delete from ' + opmG_DBTable_ProductsDescription + '' + ' where products_id=' + INTTOSTR (NewProdRecord.ID); FNopm_ExecQuery (DStrProdDesc, opmC_SQLDelete); FOR CurLang := 0 TO (opm_TotalLanguages - 1) DO IF (SingleDescList[CurLang].ID > 0) THEN BEGIN IStrProdDesc := 'insert into ' + opmG_DBTable_ProductsDescription + ' (products_name, products_description, products_url, products_id, language_id)' + '' + ' values ("' + FNopm_CleanSQLString (SingleDescList[CurLang].Name, FALSE) + '",' + ' "' + FNopm_CleanSQLString (SingleDescList[CurLang].Description, FALSE) + '",' + ' "' + FNopm_CleanSQLString (SingleDescList[CurLang].URL, FALSE) + '", ' + INTTOSTR (SingleDescList[CurLang].ID) + ', ' + INTTOSTR (SingleDescList[CurLang].LanguageID) + ')'; FNopm_ExecQuery (IStrProdDesc, opmC_SQLInsert); opm_Form_Progress.PRopm_PDUpdate_Progress (84 + (CurLang * ROUND (12 / opm_TotalLanguages)), 2, ''); END; opm_CurrentCategory := opm_CurrentCatRecord.ID; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_UpdateProdData (ProdID : LONGINT; ProdTable, ProdField, ProdDataStr : STRING; PDataIsNum : BOOLEAN; SecIDField, SecIDData : STRING; SQLQueryType : INTEGER); VAR UStrProducts, DStrProducts : STRING; BEGIN UStrProducts := ''; DStrProducts := ''; IF (ProdID > 0) AND (ProdTable <> '') AND (ProdField <> '') AND (ProdDataStr <> '') THEN BEGIN opm_Form_Progress.PRopm_PDUpdate_Progress (50, 2, _('Updating product data...')); IF (SQLQueryType = opmC_SQLUpdate) THEN BEGIN IF (PDataIsNum = TRUE) THEN UStrProducts := 'update ' + ProdTable + ' set ' + ProdField + '=' + ProdDataStr + '' + ' where products_id=' + INTTOSTR (ProdID) ELSE UStrProducts := 'update ' + ProdTable + ' set ' + ProdField + '="' + FNopm_CleanSQLString (ProdDataStr, FALSE) + '"' + ' where products_id=' + INTTOSTR (ProdID); IF (SecIDField <> '') THEN UStrProducts := UStrProducts + ' and ' + SecIDField + '=' + SecIDData; FNopm_ExecQuery (UStrProducts, opmC_SQLUpdate); END; IF ((SQLQueryType = opmC_SQLDelIns) OR (SQLQueryType = opmC_SQLDelInsNoZero)) THEN BEGIN DStrProducts := 'delete from ' + ProdTable + '' + ' where products_id=' + INTTOSTR (ProdID); IF (PDataIsNum = TRUE) THEN BEGIN IF NOT ((SQLQueryType = opmC_SQLDelInsNoZero) AND (STRTOCURR (ProdDataStr) = 0)) THEN UStrProducts := 'insert into ' + ProdTable + ' (products_id, ' + ProdField + ')' + '' + ' values (' + INTTOSTR (ProdID) + ', ' + FNopm_CleanSQLString (ProdDataStr, FALSE) + ')'; END ELSE BEGIN IF NOT ((SQLQueryType = opmC_SQLDelInsNoZero) AND (ProdDataStr = '')) THEN UStrProducts := 'insert into ' + ProdTable + ' (products_id, ' + ProdField + ')' + '' + ' values (' + INTTOSTR (ProdID) + ', "' + FNopm_CleanSQLString (ProdDataStr, FALSE) + '")'; END; FNopm_ExecQuery (DStrProducts, opmC_SQLUpdate); FNopm_ExecQuery (UStrProducts, opmC_SQLUpdate); END; IF (SQLQueryType = opmC_SQLInsert) THEN BEGIN IF (PDataIsNum = TRUE) THEN UStrProducts := 'insert into ' + ProdTable + ' (products_id, ' + ProdField + ')' + '' + ' values (' + INTTOSTR (ProdID) + ', ' + FNopm_CleanSQLString (ProdDataStr, FALSE) + ')' ELSE UStrProducts := 'insert into ' + ProdTable + ' (products_id, ' + ProdField + ')' + '' + ' values (' + INTTOSTR (ProdID) + ', "' + FNopm_CleanSQLString (ProdDataStr, FALSE) + '")'; FNopm_ExecQuery (UStrProducts, opmC_SQLUpdate); END; opm_Form_Progress.PRopm_PDUpdate_Progress (0, 2, ' '); END; END; {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} PROCEDURE Topm_Form_Main.PRopm_DeleteProduct (ProdID : LONGINT); VAR DStrProducts, DStrProdDesc, DStrProdSpec, DStrProdCats : STRING; ResStr : STRING; ResCode : LONGINT; BEGIN IF (ProdID > 0) THEN BEGIN opm_CurrentProdRecord := FNopm_GetProductByID (ProdID, opm_CurrentLang, opmG_ProductList); opm_Form_Progress.PRopm_PDUpdate_Progress (0, 2, _('Deleting general product data...')); PRopm_Prepare_HTTPClient (NIL, NIL, ((opmG_UseProxy > 0) AND (opmG_ProxyApply IN [0, 1]))); DStrProducts := 'delete from ' + opmG_DBTable_Products + ' where products_id=' + INTTOSTR (ProdID); DStrProdCats := 'delete from ' + opmG_DBTable_ProductsToCategories + ' where products_id=' + INTTOSTR (ProdID); DStrProdSpec := 'delete from ' + opmG_DBTable_Specials + ' where products_id=' + INTTOSTR (ProdID); DStrProdDesc := 'delete from ' + opmG_DBTable_ProductsDescription + ' where products_id=' + INTTOSTR (ProdID); IF (FNopm_ExecQuery (DStrProducts, opmC_SQLUpdate) >= 0) THEN BEGIN opm_Form_Progress.PRopm_PDUpdate_Progress (20, 2, 'Deleting product image...'); ResCode := FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL, ResStr); IF (opmG_Capa_MorePics6 = TRUE) THEN BEGIN opm_Form_Progress.PRopm_PDUpdate_Progress (23, 2, 'Deleting extra product images...'); IF (opm_CurrentProdRecord.ImageURL1 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL1, ResStr); opm_Form_Progress.PRopm_PDUpdate_Progress (26, 2, ''); IF (opm_CurrentProdRecord.ImageURL2 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL2, ResStr); opm_Form_Progress.PRopm_PDUpdate_Progress (29, 2, ''); IF (opm_CurrentProdRecord.ImageURL3 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL3, ResStr); opm_Form_Progress.PRopm_PDUpdate_Progress (32, 2, ''); IF (opm_CurrentProdRecord.ImageURL4 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL4, ResStr); opm_Form_Progress.PRopm_PDUpdate_Progress (35, 2, ''); IF (opm_CurrentProdRecord.ImageURL5 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL5, ResStr); opm_Form_Progress.PRopm_PDUpdate_Progress (38, 2, ''); IF (opm_CurrentProdRecord.ImageURL6 <> '') THEN ResCode := Rescode + FNopm_Send_Command (opmG_WBUploadURL, 'delete1', opm_CurrentProdRecord.ImageURL6, ResStr); END; opm_Form_Progress.PRopm_PDUpdate_Progress (40, 2, 'Deleting category relationships...'); FNopm_ExecQuery (DStrProdCats, opmC_SQLUpdate); opm_Form_Progress.PRopm