BRE/src/Main.bas

153 lines
4.7 KiB
QBasic
Raw Normal View History

2024-06-07 19:50:21 +03:00
Attribute VB_Name = "Main"
Option Explicit
Public Sub RunImportCSV()
Dim sFile$: sFile = UserInteraction.PromptFileFilter(ThisWorkbook.Path, _
sDescription:="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CSV", _
sFilter:="*.csv")
If sFile = vbNullString Then _
Exit Sub
If Not ProcessCSV(sFile) Then _
Exit Sub
Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS)
End Sub
Public Sub RunImportDB()
Dim sFile$: sFile = UserInteraction.PromptFileFilter(ThisWorkbook.Path, _
sDescription:="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Excel", _
sFilter:="*.xlsx;*.xls;*.xlsm")
If sFile = vbNullString Then _
Exit Sub
Dim xlInput As New API_XLWrapper: Call xlInput.SetApplication(ThisWorkbook.Application)
If xlInput.OpenDocument(sFile, bReadOnly:=True) Is Nothing Then
Call UserInteraction.ShowMessage(EM_FILE_CANNOT_OPEN, sFile)
Exit Sub
End If
Call xlInput.PauseUI
Dim iInput As New DB_Content: Call iInput.Init(xlInput.Document.Sheets(SHEET_CONTENT), xlInput.Document.Worksheets(SHEET_ATTRIBUTES))
Call ImportDataFromDB(iInput, AccessContent)
Call xlInput.ResumeUI
Call xlInput.ReleaseDocument
Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS)
End Sub
Public Sub RunEditConfig()
Call ThisWorkbook.Worksheets(SHEET_CONFIG).Activate
End Sub
Public Sub RunUpdateTasks()
Dim iConfig As InfoConfig: Set iConfig = AccessConfig
Call iConfig.SetScanTasks(True)
Call iConfig.SetScanContent(False)
Call ExecuteUpdateRequest(iConfig)
End Sub
Public Sub RunUpdateContent()
Dim iConfig As InfoConfig: Set iConfig = AccessConfig
Call iConfig.SetScanTasks(False)
Call iConfig.SetScanContent(True)
Call ExecuteUpdateRequest(iConfig)
End Sub
Public Sub RunUpdatePortal()
Dim iConfig As InfoConfig: Set iConfig = AccessConfig
Call iConfig.SetScanTasks(True)
Call iConfig.SetScanContent(True)
Call ExecuteUpdateRequest(iConfig)
End Sub
Public Sub RunClearData()
Call ClearData
Call UserInteraction.ShowMessage(IM_DATA_DELETED)
End Sub
Public Sub RunUnstuck()
Dim uiWrap As New API_XLWrapper: Call uiWrap.SetDocument(ThisWorkbook)
Call uiWrap.ResumeUI
End Sub
Public Sub RunInputMarks()
Dim iTarget As Excel.Range: Set iTarget = Excel.Selection.Cells(1, 1)
Call CSE_ListSelector.Init(ThisWorkbook.Worksheets(SHEET_OPTIONS).ListObjects(TABLE_MARKERS))
Call CSE_ListSelector.Show
If CSE_ListSelector.isCanceled_ Then _
Exit Sub
iTarget = CSE_ListSelector.GetSelectedStr
Call Unload(CSE_ListSelector)
End Sub
Public Sub RunInputTags()
Dim iTarget As Excel.Range: Set iTarget = Excel.Selection.Cells(1, 1)
Call CSE_ListSelector.Init(ThisWorkbook.Worksheets(SHEET_OPTIONS).ListObjects(TABLE_TAGS))
Call CSE_ListSelector.Show
If CSE_ListSelector.isCanceled_ Then _
Exit Sub
iTarget = CSE_ListSelector.GetSelectedStr
Call Unload(CSE_ListSelector)
End Sub
' =======
Private Function ProcessCSV(sFile$) As Boolean
ProcessCSV = False
Dim dataIn As Excel.Worksheet: Set dataIn = ThisWorkbook.Worksheets.Add
With dataIn.QueryTables.Add(Connection:="TEXT;" & sFile, Destination:=dataIn.Cells(1, 1))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001 ' UTF-8
.Refresh
End With
Dim sID$: sID = dataIn.Cells(1, 1)
If sID <> "" Then
If VBA.Left(sID, 1) Like "[0-9a-f]" Then
Dim iContent As New IteratorCSVContent: Call iContent.Init(dataIn)
Call ImportContentFromCSV(iContent, AccessContent)
Else
Dim iTasks As New IteratorCSVTasks: Call iTasks.Init(dataIn, AccessWorkers)
Call ImportTasksFromCSV(iTasks, AccessContent)
End If
End If
Dim bAlerts As Boolean: bAlerts = Excel.Application.DisplayAlerts
Excel.Application.DisplayAlerts = False
Call dataIn.QueryTables(1).Delete
Call dataIn.Delete
Excel.Application.DisplayAlerts = bAlerts
ProcessCSV = True
End Function
Private Function ExecuteUpdateRequest(iConfig As InfoConfig)
Call iConfig.CreateConfigFile
Dim bScanPortal As Boolean: bScanPortal = PortalUpdate(iConfig)
' Call iConfig.DeleteConfigFile
If Not bScanPortal Then _
Exit Function
Dim bProcessTasks As Boolean: bProcessTasks = True
If iConfig.ScanTasks Then
Dim sFile$: sFile = iConfig.OutputFileTasks
bProcessTasks = ProcessCSV(sFile)
' Call Kill(sFile)
End If
Dim bProcessContent As Boolean: bProcessContent = True
If iConfig.ScanContent Then
sFile = iConfig.OutputFileContent
bProcessContent = ProcessCSV(sFile)
' Call Kill(sFile)
End If
If bProcessTasks And bProcessContent Then _
Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS)
End Function