This repository has been archived on 2020-07-29. You can view files and clone it, but cannot push or open issues or pull requests.

442 lines
19 KiB
VB.net

Imports System.Data.SQLite
Imports System.Text
Imports System.IO
Imports System.Environment
Imports System.ComponentModel
Public Class Main
'Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim manualID_selected As Boolean = False
Dim idList As New ArrayList
Public log As New Logger
Public Shared localAppData As String = GetFolderPath(SpecialFolder.LocalApplicationData) & "\InvManager\"
Public Shared dbLocFile As String = localAppData & "db.sqlite"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
log.Load()
log.Info("Check and load of database")
CheckIfFirstRun()
ListAllInv()
End Sub
''' <summary>
''' Function to check if app is running for the first time
''' </summary>
Private Sub CheckIfFirstRun()
If Not My.Computer.FileSystem.DirectoryExists(localAppData) Then My.Computer.FileSystem.CreateDirectory(localAppData)
If Not My.Computer.FileSystem.FileExists(dbLocFile) Then
If MsgBox("La base de données SQLite est introuvable ou inaccessible, souhaitez-vous la régénérer ?", 4161, "Base SQLite absente ou inaccessible") = 1 Then
RegenerateDB()
Else
End
End If
End If
End Sub
''' <summary>
''' Check if an ID is already used in the SQLite DB
''' </summary>
''' <param name="idToCheck">ID to check</param>
''' <returns>True = ID already used</returns>
Public Function CheckIDAlreadyUsed(idToCheck As String) As Boolean
Dim dtr As SQLiteDataReader
Try
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Using cmd As New SQLiteCommand(con)
cmd.CommandText = "SELECT * FROM computers_desc WHERE id=" & idToCheck & ";"
dtr = cmd.ExecuteReader()
While dtr.Read()
con.Close()
Return True
End While
con.Close()
Return False
End Using
con.Close()
End Using
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when connect to DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
Return True
End Function
''' <summary>
''' ID Generator with 10 digits from 0 to 9 returned with String
''' </summary>
''' <returns>String correspond to ID generate</returns>
Public Function GenerateRandomID() As String
Dim s As String = "0123456789"
Dim r As New Random
Dim sb As New StringBuilder
sb.Clear()
For i As Integer = 1 To 10
Dim idx As Integer = r.Next(0, 9)
sb.Append(s.Substring(idx, 1))
Next
Return sb.ToString()
End Function
''' <summary>
''' Convert US key from barcode scanner to FR key
''' </summary>
''' <param name="scanKey">Event of keyDown</param>
''' <returns>Converted string key</returns>
Public Function ScannerInterpreterFRLayout(scanKey As KeyEventArgs) As String
Select Case scanKey.KeyCode.ToString()
Case "D0"
Return "0"
Case "D1"
Return "1"
Case "D2"
Return "2"
Case "D3"
Return "3"
Case "D4"
Return "4"
Case "D5"
Return "5"
Case "D6"
Return "6"
Case "D7"
Return "7"
Case "D8"
Return "8"
Case "D9"
Return "9"
End Select
Return Nothing
End Function
''' <summary>
''' Construct the basic structure of SQLite DB
''' </summary>
Private Sub RegenerateDB()
log.Warn("Reconstruct database...")
Dim genesis_seq As String = "
CREATE TABLE `computers_desc` (
`id` TEXT NOT NULL DEFAULT 0000000000 UNIQUE,
`name` TEXT NOT NULL DEFAULT 'ComputerOfDoom',
`etat` INTEGER NOT NULL DEFAULT 0,
`serial` NUMERIC NOT NULL DEFAULT 0,
`comms` TEXT NOT NULL DEFAULT 'N/A',
`gived` NUMERIC NOT NULL DEFAULT 0,
`giveTo` TEXT NOT NULL DEFAULT 'N/A',
`getBy` TEXT NOT NULL DEFAULT 'ISEN'
);
CREATE TABLE `computers_progress` (
`id` TEXT NOT NULL DEFAULT 0000000000 UNIQUE,
`hardware_complete` NUMERIC NOT NULL DEFAULT 0,
`os_complete` NUMERIC NOT NULL DEFAULT 0,
`drivers_complete` NUMERIC NOT NULL DEFAULT 0,
`activate_complete` NUMERIC NOT NULL DEFAULT 0,
`soft_complete` NUMERIC NOT NULL DEFAULT 0,
`arch` INTEGER NOT NULL DEFAULT 1,
`ram` INTEGER NOT NULL DEFAULT 1,
`os` INTEGER NOT NULL DEFAULT 1
);
CREATE TABLE `credits` (
`pseudo` TEXT DEFAULT 'JackCarterSmith' UNIQUE,
`contact` TEXT DEFAULT 'j@bfnt.io' UNIQUE,
`commentaire` TEXT DEFAULT 'Vous avez trouvé un easter egg, félicitations !' UNIQUE
);"
Try
StatusLabel.Text = "Reconstructions de la base SQLite..."
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Dim cmd As New SQLiteCommand(genesis_seq, con)
cmd.ExecuteNonQuery()
con.Close()
End Using
StatusLabel.Text = "La base SQLite a été reconstruite avec succès !"
log.Info("Base SQLite reconstructed.")
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when reconstrut DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
End Sub
''' <summary>
''' Liste all object from DB into list dialog
''' </summary>
Public Sub ListAllInv()
idList.Clear()
Dim dtr As SQLiteDataReader
InvList.Items.Clear()
InvList.ValueMember = "Equippements"
InvList.DisplayMember = "Nom"
Try
StatusLabel.Text = "Récupération des données depuis la base SQLite..."
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Using cmd As New SQLiteCommand(con)
cmd.CommandText = "SELECT id,name FROM computers_desc;"
dtr = cmd.ExecuteReader()
While dtr.Read()
idList.Add(dtr.GetString(0))
InvList.Items.Add(dtr.GetString(1))
End While
End Using
con.Close()
End Using
StatusLabel.Text = "Récupération avec succés de la base SQLite."
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when retrieve data from DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
End Sub
Private Sub InvList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles InvList.SelectedIndexChanged
IDBox.Text = idList(InvList.SelectedIndex)
End Sub
Private Sub ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles AboutToolMenuItem.Click
Dim aboutForm As About
aboutForm = New About()
aboutForm.Show()
aboutForm = Nothing
End Sub
Private Sub AddComputerToolMenuItem_Click(sender As Object, e As EventArgs) Handles AddComputerToolMenuItem.Click
Dim addMachineForm As AddMachine
addMachineForm = New AddMachine()
addMachineForm.ShowDialog()
addMachineForm = Nothing
End Sub
Private Sub IDBox_TextChanged(sender As Object, e As EventArgs) Handles IDBox.TextChanged
If IDBox.Text = "666" Then
manualID_selected = True
NameBox.Text = "DELL Fuel Burning Serial - Complete Collection"
EtatBox.Text = "Détonateur armé"
SerieCheckBox.Checked = True
DetailsBox.Text = "DEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEADDEAD"
EmpruntCheckBox.Checked = False
EmprunterName.Text = "Fuyez pauvre fou !"
GivenByBox.Text = "Enfer"
StatusLabel.Text = "Vous avez trouvé un easter egg, félicitations !"
End If
If IDBox.Text.Length() = 10 Then
Dim dtr As SQLiteDataReader
Try
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Using cmd As New SQLiteCommand(con)
cmd.CommandText = "SELECT * FROM computers_desc WHERE id='" & IDBox.Text & "';"
dtr = cmd.ExecuteReader()
Dim id_found As Boolean = False
While dtr.Read()
id_found = True
manualID_selected = True
TrashButton.Enabled = True
EditButton.Enabled = True
StatusLabel.Text = "ID trouvé !"
NameBox.Text = dtr.GetString(1)
If dtr.GetInt32(2) = 0 Then
EtatBox.Text = "R.I.P"
ElseIf dtr.GetInt32(2) = 1 Then
EtatBox.Text = "Peu faire l'affaire"
ElseIf dtr.GetInt32(2) = 2 Then
EtatBox.Text = "En état"
ElseIf dtr.GetInt32(2) = 3 Then
EtatBox.Text = "Neuf"
End If
SerieCheckBox.Checked = dtr.GetBoolean(3)
DetailsBox.Text = Replace(dtr.GetString(4), "_*_", "'")
EmpruntCheckBox.Checked = dtr.GetBoolean(5)
EmprunterName.Text = dtr.GetString(6)
GivenByBox.Text = dtr.GetString(7)
RequestComputerProgress(IDBox.Text)
End While
If Not id_found Then StatusLabel.Text = "ID introuvable !"
End Using
con.Close()
End Using
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when retrieve data from DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
End If
End Sub
Private Sub IDBox_MouseClick(sender As Object, e As MouseEventArgs) Handles IDBox.MouseClick
If manualID_selected Then IDBox.Clear() : manualID_selected = False : TrashButton.Enabled = False : EditButton.Enabled = False
End Sub
Private Sub RequestComputerProgress(machineID As String)
Dim dtr As SQLiteDataReader
Try
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Using cmd As New SQLiteCommand(con)
cmd.CommandText = "SELECT * FROM computers_progress WHERE id='" & machineID & "';"
dtr = cmd.ExecuteReader()
While dtr.Read()
HWCheck.Checked = dtr.GetBoolean(1)
OSCheck.Checked = dtr.GetBoolean(2)
DrvCheck.Checked = dtr.GetBoolean(3)
ActivateCheck.Checked = dtr.GetBoolean(4)
SoftCheck.Checked = dtr.GetBoolean(5)
Dim advIntPerc As Integer = 0
For index As Integer = 1 To 5
If dtr.GetBoolean(index) Then advIntPerc = advIntPerc + 1
Next
ComputerRepairGlobalProgress.Value = advIntPerc * 100 / 5
Select Case dtr.GetInt32(6)
Case 1
ArchBox.Text = "32bits"
Case 2
ArchBox.Text = "64bits"
End Select
Select Case dtr.GetInt32(7)
Case 1
MemBox.Text = "<1G"
Case 2
MemBox.Text = "1G"
Case 3
MemBox.Text = "2G"
Case 4
MemBox.Text = "3G"
Case 5
MemBox.Text = "4G"
Case 6
MemBox.Text = ">4G"
End Select
Select Case dtr.GetInt32(8)
Case 1
OSBox.Text = "Win XP PRO SP3"
Case 2
OSBox.Text = "WIN 7 SP1"
Case 3
OSBox.Text = "WIN 10"
Case 4
OSBox.Text = "UNIX"
Case 5
OSBox.Text = "Inconnue"
End Select
End While
End Using
con.Close()
End Using
If HWCheck.Checked And OSCheck.Checked And DrvCheck.Checked And SoftCheck.Checked And ActivateCheck.Checked Then SendOutButton.Enabled = True Else SendOutButton.Enabled = False
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when retrieve data from DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
End Sub
Private Sub TrashButton_Click(sender As Object, e As EventArgs) Handles TrashButton.Click
If MsgBox("ATTENTION ! Voulez vous vraiment supprimer cette ordinateur de la base de données ?", 292, "Trash") = 7 Then Exit Sub
Try
StatusLabel.Text = "Supression d'un ordinateur de la base de données..."
Using con As New SQLiteConnection("URI=file:" & dbLocFile)
con.Open()
Dim cmd As New SQLiteCommand(con)
cmd.CommandText = "DELETE FROM computers_desc WHERE id='" & IDBox.Text & "';"
If cmd.ExecuteNonQuery() <> 1 Then MsgBox("Erreur inconnue au niveau de la base de données !", 16, "Defaillance générale !") : End
cmd.CommandText = "DELETE FROM computers_progress WHERE id='" & IDBox.Text & "';"
If cmd.ExecuteNonQuery() <> 1 Then MsgBox("Erreur inconnue au niveau de la base de données !", 16, "Defaillance générale !") : End
con.Close()
End Using
StatusLabel.Text = "Ordinateur supprimé avec succès !"
log.Info("Delete computer " & IDBox.Text & " with success !")
ListAllInv()
Catch ex As Exception
StatusLabel.Text = "Une erreur avec la base SQLite s'est produite !"
log.Critical("Error has been occur when saving data to DB !")
log.Critical(ex.Message)
MsgBox("Error ! Check log file for details.")
End Try
End Sub
Private Sub IDBox_KeyDown(sender As Object, e As KeyEventArgs) Handles IDBox.KeyDown
If IDBox.Text.Length() = 10 And Not e.KeyCode.ToString() = "Return" Then IDBox.Text = ""
IDBox.Text = IDBox.Text & ScannerInterpreterFRLayout(e)
End Sub
Private Sub GénérerDesIDsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GénérerDesIDsToolStripMenuItem.Click
Dim idGeneratorForm As IDGenerator
idGeneratorForm = New IDGenerator()
idGeneratorForm.Show()
idGeneratorForm = Nothing
End Sub
Private Sub EditButton_Click(sender As Object, e As EventArgs) Handles EditButton.Click
Dim editForm As EditSpecs
editForm = New EditSpecs(IDBox.Text, NameBox.Text, EtatBox.Text, GivenByBox.Text, SerieCheckBox.Checked, DetailsBox.Text, EmpruntCheckBox.Checked, EmprunterName.Text, HWCheck.Checked, OSCheck.Checked, DrvCheck.Checked, ActivateCheck.Checked, SoftCheck.Checked, ArchBox.Text, MemBox.Text, OSBox.Text)
editForm.ShowDialog()
editForm = Nothing
Dim tempStor As String = IDBox.Text
IDBox.Text = Nothing
IDBox.Text = tempStor
End Sub
Private Sub ExporterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExporterToolStripMenuItem.Click
SaveBackupFile.InitialDirectory() = GetFolderPath(SpecialFolder.Desktop)
SaveBackupFile.FileName() = "invMan_" & DateTime.Now.ToString("yyyy-MM-dd_HH.mm") & ".sqlite"
SaveBackupFile.ShowDialog()
End Sub
Private Sub SaveBackupFile_FileOk(sender As Object, e As CancelEventArgs) Handles SaveBackupFile.FileOk
Using src As FileStream = File.Open(dbLocFile, FileMode.Open)
Using dest As FileStream = SaveBackupFile.OpenFile
src.CopyTo(dest)
dest.Close()
End Using
src.Close()
End Using
log.Info("DB exporté avec succès")
End Sub
Private Sub ImporterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ImporterToolStripMenuItem.Click
OpenBackupFile.InitialDirectory() = GetFolderPath(SpecialFolder.Desktop)
OpenBackupFile.ShowDialog()
End Sub
Private Sub OpenBackupFile_FileOk(sender As Object, e As CancelEventArgs) Handles OpenBackupFile.FileOk
If My.Computer.FileSystem.FileExists(dbLocFile) Then
If MsgBox("ATTENTION ! Ceci va écraser la base de donnée existante souhaitez-vous continuer ?", 292, "Overwrite") = 7 Then Exit Sub
End If
Using dest As FileStream = File.Open(dbLocFile, FileMode.Create)
OpenBackupFile.OpenFile.CopyTo(dest)
dest.Close()
End Using
ListAllInv()
log.Info("DB importé avec succès")
End Sub
Private Sub QuitterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles QuitterToolStripMenuItem.Click
If MsgBox("Souhaitez-vous faire une backup de la DB ?", 292, "Backup") = 7 Then End
If Not My.Computer.FileSystem.DirectoryExists(localAppData & "backups") Then My.Computer.FileSystem.CreateDirectory(localAppData & "backups")
File.Copy(dbLocFile, localAppData & "backups\db_" & DateTime.Now.ToString("yyyy-MM-dd_HH.mm") & ".bck")
log.Info("Backup de la DB")
End
End Sub
End Class