0% found this document useful (0 votes)
7 views206 pages

Source Code

The document provides a code module for establishing a MySQL database connection in a .NET application using MySql.Data.MySqlClient. It includes functions for executing SQL queries safely, initializing the connection, and creating a database with multiple tables if it does not exist. The code also handles potential connection errors and ensures that the necessary database schema is set up for the application to function properly.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views206 pages

Source Code

The document provides a code module for establishing a MySQL database connection in a .NET application using MySql.Data.MySqlClient. It includes functions for executing SQL queries safely, initializing the connection, and creating a database with multiple tables if it does not exist. The code also handles potential connection errors and ensures that the necessary database schema is set up for the application to function properly.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Connection Code

Imports [Link]
Imports [Link]
Imports [Link]
Module mdlConnection
Public str_conn As String
Public CONN As MySqlConnection
Public DA As New MySqlDataAdapter
Public DS As New DataSet
Public DT As New DataTable
Public Comm As New MySqlCommand
Public QUERY As String
Private hasShownFirstRunMessage As Boolean = False
Private hasShownConnectionError As Boolean = False
Public Function SafeExecuteScalar(ByVal query As String) As Object
Try
Using conn As New MySqlConnection(str_conn)
[Link]()
Using cmd As New MySqlCommand(query, conn)
Return [Link]()
End Using
End Using
Catch
Return Nothing
End Try
End Function
Public Function SafeExecuteReader(ByVal query As String) As
MySqlDataReader
Try
Dim conn As New MySqlConnection(str_conn)
[Link]()
Dim cmd As New MySqlCommand(query, conn)
Return [Link]([Link])
Catch
Return Nothing
End Try
End Function
Public Sub InitializeConnection()
Dim server As String = GetSetting([Link],
"Connection", "Server", "localhost")
Dim user As String = GetSetting([Link],
"Connection", "User", "root")
Dim password As String = GetSetting([Link],
"Connection", "Password", "")
str_conn = "Server=" & server & _
";Port=3306;" & _
";Database=db_hannies;" & _
";Uid=" & user & _
";Pwd=" & password & _
";Charset=utf8;" & _
";Connection Timeout=30;" & _
";Default Command Timeout=300;"

If CONN Is Nothing Then


CONN = New MySqlConnection(str_conn)
Else
[Link] = str_conn
End If
End Sub
Public Function GetConnection() As MySqlConnection
Try
If CONN Is Nothing Then
InitializeConnection()
CONN = New MySqlConnection(str_conn)
End If
If [Link] = [Link] Then [Link]()
Using cmd As New MySqlCommand("SELECT SCHEMA_NAME FROM
INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_hannies'", CONN)
Dim result = [Link]()
If result Is Nothing OrElse [Link]() <>
"db_hannies" Then
[Link]()
CreateFullDatabase()
CONN = New MySqlConnection(str_conn)
[Link]()
End If
End Using

Return CONN

Catch ex As MySqlException When [Link] = 1049 OrElse


[Link]("Unknown database")
CreateFullDatabase()
CONN = New MySqlConnection(str_conn)
[Link]()
Return CONN

Catch ex As Exception
Try
CreateFullDatabase()
CONN = New MySqlConnection(str_conn)
[Link]()
Return CONN
Catch
[Link]("Cannot connect to MySQL server!" &
vbCrLf & "Please make sure XAMPP/MySQL is running.",
"Connection Failed", [Link],
[Link])
Return Nothing
End Try
End Try
End Function
Private Sub EnsureDatabaseExists()
Try
Using cmd As New MySqlCommand("SELECT SCHEMA_NAME FROM
INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_hannies'", CONN)
If [Link]() Is Nothing Then
CreateFullDatabase()
End If
End Using
Catch
CreateFullDatabase()
End Try
End Sub
Private Sub CreateFullDatabase()
If hasShownFirstRunMessage Then Exit Sub
hasShownFirstRunMessage = True
Dim sqlscript As String = _
"CREATE DATABASE `db_hannies` CHARACTER SET latin1 COLLATE
latin1_swedish_ci;" & vbCrLf & _
"USE `db_hannies`;" & vbCrLf & _
"CREATE TABLE `tbl_clients`(" & vbCrLf & _
"`no` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`name` varchar(100) NOT NULL," & vbCrLf & _
"`address` varchar(100) DEFAULT NULL," & vbCrLf & _
"`email` varchar(250) DEFAULT NULL," & vbCrLf & _
"`contact` varchar(12) DEFAULT NULL," & vbCrLf & _
"`gender` varchar(12) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`no`)" & vbCrLf & _
") ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tbl_orders`(" & vbCrLf & _
"`order_id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`client_no` varchar(50) NOT NULL," & vbCrLf & _
"`name` varchar(100) NOT NULL," & vbCrLf & _
"`template` varchar(100) DEFAULT NULL," & vbCrLf & _
"`size` varchar(50) NOT NULL," & vbCrLf & _
"`quantity` int(11) NOT NULL," & vbCrLf & _
"`price` decimal(10,2) NOT NULL," & vbCrLf & _
"`total_amount` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`payment_method` varchar(255) NOT NULL," & vbCrLf & _
"`payment` enum('down payment','full payment') NOT NULL," & vbCrLf & _
"`amount` decimal(10,2) NOT NULL," & vbCrLf & _
"`balance` decimal(10,2) NOT NULL," & vbCrLf & _
"`order_status` varchar(50) DEFAULT NULL," & vbCrLf & _
"`due_date` date DEFAULT NULL," & vbCrLf & _
"`remarks` text," & vbCrLf & _
"`template_image` longblob," & vbCrLf & _
"`order_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," & vbCrLf &
_
"`cutter_and_sewer` varchar(100) DEFAULT NULL," & vbCrLf & _
"PRIMARY KEY (`order_id`)" & vbCrLf & _
") ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tbl_staffs`(" & vbCrLf & _
"`no` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`username` varchar(100) NOT NULL," & vbCrLf & _
"`name` varchar(100) NOT NULL," & vbCrLf & _
"`Gmail` varchar(255) DEFAULT NULL," & vbCrLf & _
"`password` varchar(255) NOT NULL," & vbCrLf & _
"`contact` varchar(12) DEFAULT NULL," & vbCrLf & _
"`question` varchar(255) NOT NULL," & vbCrLf & _
"`answer` varchar(255) NOT NULL," & vbCrLf & _
"`level` varchar(20) NOT NULL," & vbCrLf & _
"`status` tinyint(1) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`no`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tbl_template`(" & vbCrLf & _
"`id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`template_name` text," & vbCrLf & _
"`template_price` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`image_template` longblob," & vbCrLf & _
"`worker` varchar(255) DEFAULT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tbl_workers`(" & vbCrLf & _
"`no` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`name` varchar(100) NOT NULL," & vbCrLf & _
"`contact` varchar(13) DEFAULT NULL," & vbCrLf & _
"`status` int(11) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`no`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblemail_settings`(" & vbCrLf & _
"`id` int(11) NOT NULL," & vbCrLf & _
"`email` varchar(255) NOT NULL," & vbCrLf & _
"`apppassword` varchar(50) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblfemale_orders`(" & vbCrLf & _
"`order_id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`female_no` int(11) NOT NULL," & vbCrLf & _
"`female_name` varchar(255) NOT NULL," & vbCrLf & _
"`template_name` varchar(255) DEFAULT NULL," & vbCrLf & _
"`quantity` int(11) NOT NULL," & vbCrLf & _
"`price` decimal(10,2) NOT NULL," & vbCrLf & _
"`balance` decimal(10,2) NOT NULL," & vbCrLf & _
"`order_date` date DEFAULT NULL," & vbCrLf & _
"`remarks` text," & vbCrLf & _
"`order_status` text," & vbCrLf & _
"`length_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`shoulder_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`figure_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`bust_distance_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`body_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`waist_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`hips_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`neck_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_length_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_bottom_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_cuff_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`arm_hole_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`remarks_upper` text," & vbCrLf & _
"`length_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`waist_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`hips_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`thigh_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`knee_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`bottom_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`crotch_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`remarks_lower` text," & vbCrLf & _
"`cutter_and_sewer` varchar(255) DEFAULT NULL," & vbCrLf & _
"`dateordered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," & vbCrLf &
_
"PRIMARY KEY (`order_id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblmale_orders`(" & vbCrLf & _
"`order_id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`male_no` int(11) NOT NULL," & vbCrLf & _
"`male_name` varchar(255) NOT NULL," & vbCrLf & _
"`template_name` varchar(255) DEFAULT NULL," & vbCrLf & _
"`quantity` int(11) NOT NULL," & vbCrLf & _
"`price` decimal(10,2) NOT NULL," & vbCrLf & _
"`balance` decimal(10,2) NOT NULL," & vbCrLf & _
"`order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP," & vbCrLf & _
"`remarks` text," & vbCrLf & _
"`order_status` tinytext," & vbCrLf & _
"`length_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`shoulder_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`figure_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`body_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`waistline_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`hips_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`neck_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_length_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_bottom_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`sleeve_bottom_cuff_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`arm_hole_upper` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`remark_upper_upper` text," & vbCrLf & _
"`length_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`waist_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`hips_lower_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`thigh_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`knee_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`bottom_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`crotch_lower` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`remark_lower` text," & vbCrLf & _
"`cutter_and_sewer` varchar(255) DEFAULT NULL," & vbCrLf & _
"`dateordered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," & vbCrLf &
_
"PRIMARY KEY (`order_id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblnotifications`(" & vbCrLf & _
"`id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`fromemail` varchar(255) NOT NULL," & vbCrLf & _
"`toemail` varchar(255) NOT NULL," & vbCrLf & _
"`message` text NOT NULL," & vbCrLf & _
"`sentdate` datetime NOT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblpayment`(" & vbCrLf & _
"`client_id` double DEFAULT NULL," & vbCrLf & _
"`name` varchar(255) DEFAULT NULL," & vbCrLf & _
"`amount_paid` float DEFAULT NULL," & vbCrLf & _
"`dateordered` date DEFAULT NULL," & vbCrLf & _
"`payment` varchar(100) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`client_id`,`dateordered`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblrepair_orders`(" & vbCrLf & _
"`repair_id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`client_no` int(11) DEFAULT NULL," & vbCrLf & _
"`name` varchar(255) NOT NULL," & vbCrLf & _
"`items` varchar(255) NOT NULL," & vbCrLf & _
"`quantity` int(11) NOT NULL," & vbCrLf & _
"`price` decimal(10,2) NOT NULL," & vbCrLf & _
"`total_amount` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`payment` enum('down payment','full payment') NOT NULL," & vbCrLf & _
"`payment_method` varchar(255) NOT NULL," & vbCrLf & _
"`amountpaid` decimal(10,2) DEFAULT NULL," & vbCrLf & _
"`balance` decimal(10,2) NOT NULL," & vbCrLf & _
"`duedate` date DEFAULT NULL," & vbCrLf & _
"`remarks` text," & vbCrLf & _
"`order_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," & vbCrLf &
_
"`order_status` varchar(20) DEFAULT NULL," & vbCrLf & _
"`cutter_and_sewer` varchar(255) DEFAULT NULL," & vbCrLf & _
"`dateordered` date DEFAULT NULL," & vbCrLf & _
"PRIMARY KEY (`repair_id`)" & vbCrLf & _
") ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblsystem_logo_name`(" & vbCrLf & _
"`no` int(11) NOT NULL," & vbCrLf & _
"`system_name` varchar(255) DEFAULT NULL," & vbCrLf & _
"`picturebox_logo` longblob," & vbCrLf & _
"PRIMARY KEY (`no`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblusers`(" & vbCrLf & _
"`no` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`username` varchar(100) NOT NULL," & vbCrLf & _
"`complete_name` varchar(100) NOT NULL," & vbCrLf & _
"`Gmail` varchar(255) DEFAULT NULL," & vbCrLf & _
"`password` varchar(255) NOT NULL," & vbCrLf & _
"`question` varchar(255) NOT NULL," & vbCrLf & _
"`answer` varchar(255) NOT NULL," & vbCrLf & _
"`level` varchar(20) DEFAULT NULL," & vbCrLf & _
"`status` int(11) DEFAULT NULL," & vbCrLf & _
"PRIMARY KEY (`no`)" & vbCrLf & _
") ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblsystem_settings`(" & vbCrLf & _
"`id` int(11) NOT NULL," & vbCrLf & _
"`showcredentials` tinyint(1) NOT NULL DEFAULT 1," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblquestions`(" & vbCrLf & _
"`id` int(11) NOT NULL AUTO_INCREMENT," & vbCrLf & _
"`question` varchar(255) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tbllocation`(" & vbCrLf & _
"`id` int(11) NOT NULL," & vbCrLf & _
"`location` varchar(255) DEFAULT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"CREATE TABLE `tblbusiness_contact`(" & vbCrLf & _
"`id` int(11) NOT NULL," & vbCrLf & _
"`business_contact` varchar(11) NOT NULL," & vbCrLf & _
"PRIMARY KEY (`id`)" & vbCrLf & _
") ENGINE=InnoDB DEFAULT CHARSET=latin1;" & vbCrLf & _
"INSERT INTO `tblquestions`(`question`) VALUES('what is your favorite
color?'),('what is your birthday?'),('what is your favorite pet?');" &
vbCrLf & _
"INSERT INTO `tbllocation`(`id`,`location`) VALUES(1,'Nayon, Lamut,
Ifugao');" & vbCrLf & _
"INSERT INTO
`tblusers`(username,complete_name,password,question,answer,level,status)
VALUES('Admin','Administrator','GI/BxeCs2v3Edz/BTuWENA==','what is your
favorite color?','brown','Admin',1);" & vbCrLf & _
"INSERT INTO `tblemail_settings`(id,email,apppassword)
VALUES(1,'hanniescutandsew2025@[Link]','qwjespyjbwcmmjzg');" & vbCrLf
& _
"INSERT INTO `tblsystem_settings`(id,showcredentials) VALUES(1,1);"

ExecuteScript(sqlscript)

[Link]("Database created successfully!" & vbCrLf &


vbCrLf & _
"Default Login:" & vbCrLf & _
"Username: Admin" & vbCrLf & _
"Password: 123" & vbCrLf & vbCrLf & _
"Please change your password after login.", _
"First Run Setup", [Link],
[Link])
End Sub
Public Sub ExecuteScript(ByVal script As String)
Using conn As New
MySqlConnection(str_conn.Replace("Database=db_hannies;", ""))
[Link]()
Using cmd As New MySqlCommand()
[Link] = conn
For Each batch As String In [Link](New String()
{";" & vbCrLf, ";" & vbLf, ";" & vbCr},
[Link])
Dim sql As String = [Link]()
If [Link] > 0 AndAlso Not [Link]("--")
Then
[Link] = sql
[Link]()
End If
Next
End Using
End Using
End Sub
Public Sub ResetErrorFlags()
hasShownConnectionError = False
hasShownFirstRunMessage = False
End Sub
Public Sub CloseConnection()
If CONN IsNot Nothing AndAlso [Link] <>
[Link] Then [Link]()
End Sub
End Module

Login Code
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmlogin
Private loginAttempts As Integer = 0
Private Const AesKey As String = "12345678901234567890123456789012"
Private Const AesIV As String = "1234567890123456"
Private Shared hasInitialized As Boolean = False
Public IsReloadedAfterProfile As Boolean = False
Private Shared ConnectionFailedShown As Boolean = False

Private Function IsEmptyOrWhiteSpace(ByVal s As String) As Boolean


Return [Link](If(s, "").Trim())
End Function

Private Function IsValidBase64(ByVal input As String) As Boolean


If [Link](input) Then Return False
Try
Convert.FromBase64String(input)
Return True
Catch
Return False
End Try
End Function
Private Function IsDatabaseConnected() As Boolean
Try
Using conn As MySqlConnection =
[Link]()
Return (conn IsNot Nothing AndAlso [Link] =
[Link])
End Using
Catch
Return False
End Try
End Function

Public Sub Autocomplete()


If Not IsDatabaseConnected() Then Exit Sub
Try
Using conn As MySqlConnection =
[Link]()
Dim query As String = "SELECT Username FROM tblusers
WHERE Status = 1 UNION SELECT Username FROM tbl_staffs WHERE Status = 1"
Using cmd As New MySqlCommand(query, conn)
Using da As New MySqlDataAdapter(cmd)
Dim dt As New DataTable()
[Link](dt)
Dim col As New AutoCompleteStringCollection()
For Each row As DataRow In [Link]
Dim user As String =
row("Username").ToString().Trim()
If user <> "" Then [Link](user)
Next
[Link] =
[Link]
[Link] =
[Link]
[Link] = col
End Using
End Using
End Using
Catch
End Try
End Sub
Private Sub showpassword_CheckedChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
[Link] = If([Link], Chr(0),
"*"c)
End Sub

Private Sub txtusername_KeyDown(ByVal sender As Object, ByVal e As


KeyEventArgs) Handles [Link]
If [Link] = [Link] Then [Link]()
End Sub

Private Sub txtpassword_KeyDown(ByVal sender As Object, ByVal e As


KeyEventArgs) Handles [Link]
If [Link] = [Link] Then [Link]()
End Sub

Private Sub btnlogin_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
If IsEmptyOrWhiteSpace([Link]) OrElse
IsEmptyOrWhiteSpace([Link]) Then
MsgBox("Please enter Username and Password.",
[Link])
Exit Sub
End If

If Not IsDatabaseConnected() Then


MsgBox("No database connection!", [Link])
Exit Sub
End If

Dim username As String = [Link]()


Dim password As String = [Link]

Try
Using conn As MySqlConnection =
[Link]()
Dim sql As String = "SELECT Username, Complete_Name AS
Name, Level, Status, Password FROM tblusers WHERE BINARY Username = @u "
&
"UNION ALL " &
"SELECT Username, Name, Level,
Status, Password FROM tbl_staffs WHERE BINARY Username = @u"

Using cmd As New MySqlCommand(sql, conn)


[Link]("@u", username)
Using reader = [Link]()
If [Link]() Then
Dim storedPass As String =
reader("Password").ToString()
Dim status As Integer =
Convert.ToInt32(reader("Status"))
Dim level As String =
reader("Level").ToString()
Dim fullName As String =
reader("Name").ToString()

If status = 0 Then
MsgBox("Account blocked!",
[Link])
Exit Sub
End If

Dim realPass As String = storedPass


If IsValidBase64(storedPass) Then
Try
realPass = DecryptData(storedPass)
Catch
MsgBox("Password error!",
[Link])
Exit Sub
End Try
End If

If [Link](password, realPass, False)


= 0 Then
loginAttempts = 0
Dim main As New frmmain()
[Link] = fullName
main.lblRole_of_user.Text = level
[Link]()
[Link]()
Exit Sub
Else
loginAttempts += 1
MsgBox("Wrong password! Attempt " &
loginAttempts & "/3", [Link])
[Link]()
[Link]()
If loginAttempts >= 3 Then
If MsgBox("Recover password?",
[Link]) = [Link] Then
Dim r As New
frmshowpassword(username)
[Link]()
End If
loginAttempts = 0
End If
End If
Else
MsgBox("Username not found!",
[Link])
End If
End Using
End Using
End Using
Catch ex As Exception
MsgBox("Login failed: " & [Link], [Link])
End Try
End Sub
Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Dim f As New frmConnection
[Link]()
[Link]()
ConnectionFailedShown = False
End Sub

Private Sub lbllinkforgot_password_LinkClicked(ByVal sender As


Object, ByVal e As LinkLabelLinkClickedEventArgs) Handles
lbllinkforgot_password.LinkClicked
If IsEmptyOrWhiteSpace([Link]) Then
MsgBox("Enter username first!", [Link])
Exit Sub
End If
Dim r As New frmshowpassword([Link]())
[Link]()
End Sub

Private Sub btnforgot_password_Click(ByVal sender As Object, ByVal e


As EventArgs) Handles btnforgot_password.Click
lbllinkforgot_password_LinkClicked(Nothing, Nothing)
End Sub
Public Sub LoadSystemSettings()
If Not IsDatabaseConnected() Then Exit Sub
Try
Using conn = [Link]()
Using cmd As New MySqlCommand("SELECT PictureBox_logo
FROM tblsystem_logo_name ORDER BY No DESC LIMIT 1", conn)
Dim img = [Link]()
If img IsNot Nothing AndAlso Not IsDBNull(img) Then
Using ms As New MemoryStream(CType(img, Byte()))
PictureBox_login_logo.Image =
[Link](ms)
End Using
End If
End Using
End Using
Catch
End Try
End Sub
Public Sub LoadLocation()
Try
Dim result = [Link]("SELECT
Location FROM tbllocation WHERE id = 1")
If result IsNot Nothing Then
[Link] = [Link]()
End If
Catch
[Link] = ""
End Try
End Sub
Public Sub UpdateLoginLogo(ByVal newLogo As Image)
Try
If PictureBox_login_logo IsNot Nothing Then
If [Link] Then
[Link](Sub() PictureBox_login_logo.Image =
newLogo)
Else
PictureBox_login_logo.Image = newLogo
End If
End If
Catch
End Try
End Sub

Private Sub btnaboutUs_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
Dim f As New frmabout_us
[Link] = [Link]
[Link]()
End Sub

Private Sub frmlogin_FormClosed(ByVal sender As Object, ByVal e As


FormClosedEventArgs) Handles [Link]
If [Link] <= 1 Then [Link]()
End Sub
Private Function DecryptData(ByVal encryptedText As String) As
String
Using aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)
Using decryptor = [Link]()
Dim bytes = Convert.FromBase64String(encryptedText)
Return
[Link]([Link](bytes, 0,
[Link]))
End Using
End Using
End Function
Private Sub frmlogin_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
If IsReloadedAfterProfile Then Exit Sub
If hasInitialized Then Exit Sub
hasInitialized = True

Cursor = [Link]
Try
[Link]()

If [Link]() Is Nothing Then


If Not ConnectionFailedShown Then
ConnectionFailedShown = True
MsgBox("Cannot connect to database!" & vbCrLf &
vbCrLf & "Opening connection settings...", [Link],
"Error")
Dim f As New frmConnection
[Link]()
End If
If [Link]() Is Nothing Then
[Link]()
End If
LoadSystemLogo_Safe()
LoadLocation_Safe()
Autocomplete()

Catch ex As Exception
If Not ConnectionFailedShown Then
ConnectionFailedShown = True
MsgBox("System failed to start: " & [Link],
[Link], "Error")
End If
Finally
Cursor = [Link]
End Try
End Sub
Private Sub LoadLocation_Safe()
Try
Dim loc = [Link]("SELECT location
FROM tbllocation WHERE id = 1")
If loc IsNot Nothing Then
[Link] = [Link]()
End If
Catch
' Silent
End Try
End Sub
Private Sub LoadSystemLogo_Safe()
Try
Dim query As String = "SELECT PictureBox_logo FROM
tblsystem_logo_name ORDER BY No DESC LIMIT 1"

Dim imgBytes = [Link](query)

If imgBytes IsNot Nothing AndAlso Not IsDBNull(imgBytes)


Then
Dim bytes() As Byte = CType(imgBytes, Byte())
If [Link] > 0 Then
Using ms As New [Link](bytes)
PictureBox_login_logo.Image =
[Link](ms)
End Using
End If
End If
Catch
End Try
End Sub
End Class

About Us Code
Imports [Link]
Imports [Link]
Public Class frmabout_us
Private Sub frmabout_us_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub btnsystem_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
Try
Dim pdfPath As String =
[Link]([Link]([Link], "Reports"),
"About_TOMS_System.pdf")
If [Link](pdfPath) Then
[Link](pdfPath)
Else
[Link]("The [Link] file was not found in
the Reports folder.", "Error", [Link],
[Link])
End If
Catch ex As Exception
[Link]("An error occurred while trying to open the
PDF: " & [Link], "Error", [Link],
[Link])
End Try
End Sub
Private Sub btndeveloper_Click(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
Try
Dim pdfPath As String =
[Link]([Link]([Link], "Reports"),
"[Link]")
If [Link](pdfPath) Then
[Link](pdfPath)
Else
[Link]("The About_TOMS_System.pdf file was not
found in the Reports folder.", "Error", [Link],
[Link])
End If
Catch ex As Exception
[Link]("An error occurred while trying to open the
PDF: " & [Link], "Error", [Link],
[Link])
End Try
End Sub
End Class

Add Account Code


Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmAccounts
Private Const AesKey As String = "12345678901234567890123456789012"
Private Const AesIV As String = "1234567890123456"
Private Function EncryptData(ByVal plainText As String) As String
Try
Dim aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)

Dim encryptor As ICryptoTransform = [Link]()


Dim plainBytes As Byte() = [Link](plainText)
Dim encryptedBytes As Byte() =
[Link](plainBytes, 0, [Link])

Return Convert.ToBase64String(encryptedBytes)
Catch ex As Exception
Throw New Exception("Encryption failed: " & [Link])
End Try
End Function
Private Function DecryptData(ByVal encryptedText As String) As
String
Try
Dim aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)

Dim decryptor As ICryptoTransform = [Link]()


Dim encryptedBytes As Byte() =
Convert.FromBase64String(encryptedText)
Dim decryptedBytes As Byte() =
[Link](encryptedBytes, 0, [Link])

Return [Link](decryptedBytes)
Catch ex As Exception
Throw New Exception("Decryption failed: " & [Link])
End Try
End Function
Private Function IsValidBase64(ByVal input As String) As Boolean
If [Link](input) Then Return False
Try
Convert.FromBase64String(input)
Return True
Catch
Return False
End Try
End Function
Private Sub DisplayRowData(ByVal rowIndex As Integer)
If rowIndex >= 0 AndAlso rowIndex < [Link]
Then
Dim row As DataGridViewRow = [Link](rowIndex)
lblaccount_No.Text = SafeToString([Link]("No").Value)
[Link] = SafeToString([Link]("Username").Value)
[Link] = SafeToString([Link]("Name").Value)
Dim encryptedPassword As String =
SafeToString([Link]("Password").Value)
If IsValidBase64(encryptedPassword) Then
Try
[Link] = DecryptData(encryptedPassword)
Catch ex As Exception
[Link] = "Error decrypting password"
MsgBox("Failed to decrypt password for username '" &
[Link] & "': " & [Link], [Link], "Decryption
Error")
End Try
Else
[Link] = encryptedPassword
If Not [Link](encryptedPassword) Then
MsgBox("Warning: Password for username '" &
[Link] & "' is not encrypted. Please update this account's
password.", [Link], "Security Warning")
End If
End If
[Link] = SafeToString([Link]("Contact").Value)
[Link] = If(SafeToString([Link]("Level").Value) =
"Admin", "Admin", "Standard")
[Link] = If(SafeToInt([Link]("Status").Value) =
1, "Approved", "Blocked")
End If
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e
As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim row As DataGridViewRow = [Link]([Link])
lblaccount_No.Text = SafeToString([Link]("No").Value)
[Link] = SafeToString([Link]("Username").Value)
[Link] = SafeToString([Link]("Name").Value)
Dim encryptedPassword As String =
SafeToString([Link]("Password").Value)
If IsValidBase64(encryptedPassword) Then
Try
[Link] = DecryptData(encryptedPassword)
Catch ex As Exception
[Link] = "Error decrypting password"
MsgBox("Failed to decrypt password for username '" &
[Link] & "': " & [Link], [Link], "Decryption
Error")
End Try
Else
[Link] = encryptedPassword
If Not [Link](encryptedPassword) Then
MsgBox("Warning: Password for username '" &
[Link] & "' is not encrypted. Please update this account's
password.", [Link], "Security Warning")
End If
End If
[Link] = SafeToString([Link]("Contact").Value)
Dim levelValue As String =
SafeToString([Link]("Level").Value, "Unknown")
[Link] = If(levelValue = "Admin", "Admin",
"Standard")
Dim statusValue As Integer =
SafeToInt([Link]("Status").Value, -1)
[Link] = If(statusValue = 1, "Approved", "Blocked")
End If
End Sub
Private Sub lblsave_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If lblaccount_No.Text = "" Then
MsgBox("Please select an account to update.",
[Link], "No Selection")
Exit Sub
End If

Try
If [Link] = [Link] Then
[Link]()
End If

Dim query As String = "UPDATE tbl_staffs SET Username =


@username, Name = @name, Password = @password, Contact = @contact, Level
= @level, Status = @status WHERE No = @no"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@username",
[Link])
[Link]("@name", [Link])
[Link]("@password",
EncryptData([Link]))
[Link]("@contact", [Link])
[Link]("@level", [Link])
[Link]("@status", If([Link]
= "Approved", 1, 0))
[Link]("@no", lblaccount_No.Text)
[Link]()
End Using

MsgBox("Account updated successfully!",


[Link], "Success")
LoadData("tbl_staffs")
[Link] = False
[Link] = False
[Link] = False
[Link] = False
btnupdate_account.Visible = True
lblupdate_account.Visible = True
[Link] = False
[Link] = False
[Link] = False
[Link] = False
ClearFields()
Catch ex As Exception
MsgBox("Error updating account: " & [Link],
[Link], "Database Error")
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub btnsave_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If lblaccount_No.Text = "" Then
MsgBox("Please select an account to update.",
[Link], "No Selection")
Exit Sub
End If
Try
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "UPDATE tbl_staffs SET Username =
@username, Name = @name, Password = @password, Contact = @contact, Level
= @level, Status = @status WHERE No = @no"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@username",
[Link])
[Link]("@name", [Link])
[Link]("@password",
EncryptData([Link]))
[Link]("@contact", [Link])
[Link]("@level", [Link])
[Link]("@status", If([Link]
= "Approved", 1, 0))
[Link]("@no", lblaccount_No.Text)
[Link]()
End Using
MsgBox("Account updated successfully!",
[Link], "Success")
LoadData("tbl_staffs")
[Link] = False
[Link] = False
[Link] = False
[Link] = False
btnupdate_account.Visible = True
lblupdate_account.Visible = True

[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = False
[Link] = False
ClearFields()
Catch ex As Exception
MsgBox("Error updating account: " & [Link],
[Link], "Database Error")
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Function SafeToString(ByVal value As Object, Optional ByVal
defaultValue As String = "") As String
Return If(value IsNot Nothing AndAlso Not IsDBNull(value),
[Link](), defaultValue)
End Function
Private Function SafeToInt(ByVal value As Object, Optional ByVal
defaultValue As Integer = 0) As Integer
Try
Return If(value IsNot Nothing AndAlso Not IsDBNull(value),
Convert.ToInt32(value), defaultValue)
Catch
Return defaultValue
End Try
End Function
Private Sub ClearFields()
lblaccount_No.Text = ""
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
End Sub
Public Sub LoadData(ByVal tableName As String)
Try
If [Link] = [Link] Then
[Link]()
End If

Dim query As String = "SELECT No, Username, Name, Password,


Contact, Level, Status FROM " & tableName
Dim adapter As New MySqlDataAdapter(query, CONN)
Dim dataTable As New DataTable()
[Link](dataTable)

[Link] = dataTable
[Link]("No").HeaderText = "ID"
[Link]("Username").HeaderText = "Username"
[Link]("Name").HeaderText = "Name"
[Link]("Password").HeaderText = "Password"
[Link]("Contact").HeaderText = "Contact"
[Link]("Level").HeaderText = "Level"
[Link]("Status").HeaderText = "Status"

Catch ex As Exception
MsgBox("Error loading data: " & [Link],
[Link], "Database Error")
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub frmAccounts_Load(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
[Link] = [Link] Or [Link] Or
[Link] Or [Link]
LoadData("tbl_staffs")
[Link] = False
[Link] = False
[Link] = False
[Link] = ""
[Link] = ""
[Link] = ""
If [Link] > 0 Then
DisplayRowData(0)
End If
End Sub
Private Function IsValidContact(ByVal contact As String) As Boolean
If [Link](contact) Then Return False
If [Link] <> 11 Then Return False
Return [Link](Function(c) [Link](c))
End Function
Private Sub btncancel_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
btnupdate_account.Visible = True
lblupdate_account.Visible = True

[Link] = True
[Link] = True
[Link] = True
[Link] = True
ClearFields()
End Sub
Private Sub lblcancel_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
btnupdate_account.Visible = True
lblupdate_account.Visible = True

[Link] = True
[Link] = True
[Link] = True
[Link] = True
ClearFields()
End Sub
Private Sub btnaddstaff_Click_1(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
Try
Using addStaffForm As New frmaddstaff()
[Link] =
[Link]
[Link]()
LoadData("tbl_staffs")
End Using
Catch ex As Exception
MsgBox("Error opening Add Staff form: " & [Link],
[Link], "Error")
End Try
End Sub
Private Sub btnaddworkers_Click_1(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
Try
Using addWorkersForm As New frmworkers()
[Link] = "Add Worker"
[Link] =
[Link]
[Link]()
LoadData("tbl_staffs")
End Using
Catch ex As Exception
MsgBox("Error opening Add Workers form: " & [Link],
[Link], "Error")
End Try
End Sub

Private Sub btnblock_Click_1(ByVal sender As [Link], ByVal e


As [Link]) Handles [Link]
If lblaccount_No.Text = "" Then
MsgBox("Please select an account to block.",
[Link], "No Selection")
Exit Sub
End If

Try
If [Link] = [Link] Then
[Link]()
End If

Dim query As String = "UPDATE tbl_staffs SET Status = 0


WHERE No = @no"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@no", lblaccount_No.Text)
[Link]()
End Using

MsgBox("Account blocked successfully!",


[Link], "Success")
LoadData("tbl_staffs")
[Link] = "Blocked"

Catch ex As Exception
MsgBox("Error blocking account: " & [Link],
[Link], "Database Error")
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub btnapprove_Click_1(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
If lblaccount_No.Text = "" Then
MsgBox("Please select an account to approve.",
[Link], "No Selection")
Exit Sub
End If

Try
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "UPDATE tbl_staffs SET Status = 1
WHERE No = @no"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@no", lblaccount_No.Text)
[Link]()
End Using

MsgBox("Account approved successfully!",


[Link], "Success")
LoadData("tbl_staffs")
[Link] = "Approved"

Catch ex As Exception
MsgBox("Error approving account: " & [Link],
[Link], "Database Error")
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub btnupdate_account_Click_1(ByVal sender As [Link],
ByVal e As [Link]) Handles btnupdate_account.Click
If lblaccount_No.Text = "" Then
MsgBox("Please select an account to update.",
[Link], "No Selection")
Exit Sub
End If
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
btnupdate_account.Visible = False
lblupdate_account.Visible = False

[Link] = False
[Link] = False
[Link] = False
[Link] = False
End Sub
End Class

Add Templates Code


Imports [Link]
Imports [Link]
Public Class frmTemplates
Private Sub frmTemplates_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
cbofilter_for_clients.[Link]()
cbofilter_for_clients.[Link]("ID")
cbofilter_for_clients.[Link]("Name")
cbofilter_for_clients.SelectedItem = "Name"
LoadTemplates()
CustomizeDataGridView()
DisableControls()
End Sub
Private Sub DisableControls()
btnchoose_template.Enabled = False
RichTextBox_itemname_template.Enabled = False
RichTextBox_template_price.Enabled = False
End Sub
Private Sub EnableControls()
btnchoose_template.Enabled = True
RichTextBox_itemname_template.Enabled = True
RichTextBox_template_price.Enabled = True
End Sub
Private Sub LoadTemplates(Optional ByVal filterSql As String = "")
Dim sql As String = "SELECT ID, Template_Name, Template_Price,
Image_Template, Worker FROM tbl_template"
If filterSql <> "" Then sql &= " WHERE " & filterSql

Dim dt As New DataTable()


Try
If CONN Is Nothing Then
Throw New Exception("Database connection is not
initialized.")
End If
If [Link] = [Link] Then [Link]()
Using cmd As New MySqlCommand(sql, CONN)
Using da As New MySqlDataAdapter(cmd)
[Link](dt)
End Using
End Using
[Link] = dt
With DataGridView1
If .[Link]("ID") Then
.Columns("ID").HeaderText = "Template ID"
.Columns("ID").[Link] =
[Link]
.Columns("ID").SortMode =
[Link]
End If
If .[Link]("Template_Name") Then
.Columns("Template_Name").HeaderText = "Template
Name"
.Columns("Template_Name").SortMode =
[Link]
End If
If .[Link]("Template_Price") Then
.Columns("Template_Price").HeaderText = "Template
Price"
.Columns("Template_Price").[Link] =
"C2" '
.Columns("Template_Price").[Link]
t = [Link]
.Columns("Template_Price").SortMode =
[Link]
End If
If .[Link]("Image_Template") Then
.Columns("Image_Template").HeaderText = "Image
Template"
.Columns("Image_Template").Visible = False ' Hide
binary
End If
If .[Link]("Worker") Then
.Columns("Worker").HeaderText = "Worker"
.Columns("Worker").SortMode =
[Link]
End If
End With
Catch ex As Exception
MsgBox("Error loading templates: " & [Link] & vbCrLf &
[Link], [Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub btnChooseTemplate_Click(ByVal sender As Object, ByVal e
As EventArgs) Handles btnchoose_template.Click
Dim openFileDialog As New OpenFileDialog
[Link] = "Image Files|*.jpg;*.png;*.bmp;*.jpeg"
If [Link]() = [Link] Then
Dim selectedImage As Image =
[Link]([Link])
picture_template.Image = selectedImage
picture_template.SizeMode = [Link]
picture_template.Tag = [Link]
End If
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
Try
If [Link] IsNot Nothing AndAlso
[Link] >= 0 Then
RichTextBox_itemname_template.Text =
[Link]("Template_Name").[Link]()
RichTextBox_template_price.Text =
[Link]("Template_Price").[Link]()

Dim selectedID As Integer =


Convert.ToInt32([Link]("ID").Value)
LoadImageFromDatabase(selectedID)
btnadd_template.Enabled = True
lbladd_template.Enabled = True

DisableControls()
End If
Catch ex As Exception
MsgBox("Error displaying data: " & [Link],
[Link])
End Try
End Sub
Private Sub LoadImageFromDatabase(ByVal templateID As Integer)
Try
If [Link] = [Link] Then [Link]()

Dim query As String = "SELECT Image_Template FROM


tbl_template WHERE ID = @ID"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@ID", templateID)

Using reader As MySqlDataReader = [Link]()


If [Link]() AndAlso Not
IsDBNull(reader("Image_Template")) Then
Dim imgBytes As Byte() =
CType(reader("Image_Template"), Byte())
If [Link] > 0 Then
Using ms As New MemoryStream(imgBytes)
picture_template.Image =
[Link](ms)
picture_template.SizeMode =
[Link]
End Using
Else
picture_template.Image = Nothing
End If
Else
picture_template.Image = Nothing
End If
End Using
End Using
Catch ex As Exception
MsgBox("Error loading image: " & [Link],
[Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub txttemplate_search_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles txttemplate_search.TextChanged
Dim text As String = txttemplate_search.[Link]("'",
"''").Trim()
If text = "" Then
LoadTemplates()
Return
End If
Dim column As String =
If(cbofilter_for_clients.[Link]() = "ID", "ID",
"Template_Name")
Dim filterSql As String = [Link]("{0} LIKE '%{1}%'",
column, text)

LoadTemplates(filterSql)
End Sub
Private Sub btnadd_template_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs)
btnadd_template.BackColor = [Link]
btnadd_template.Cursor = [Link]
lbladd_template.ForeColor = [Link]
End Sub
Private Sub btnadd_template_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs)
btnadd_template.BackColor = [Link]
btnadd_template.Cursor = [Link]
lbladd_template.ForeColor = [Link]
End Sub
Private Sub btntemplate_save_MouseEnter(ByVal sender As Object,
ByVal e As EventArgs)
btntemplate_save.BackColor = [Link]
btntemplate_save.Cursor = [Link]
lbltemplate_save.ForeColor = [Link]
End Sub
Private Sub btntemplate_save_MouseLeave(ByVal sender As Object,
ByVal e As EventArgs)
btntemplate_save.BackColor = [Link]
btntemplate_save.Cursor = [Link]
lbltemplate_save.ForeColor = [Link]
End Sub
Private Sub lbltemplate_save_Click(ByVal sender As Object, ByVal e
As EventArgs)
btntemplate_save_Click(btntemplate_save, [Link])
End Sub
Private Sub btnadd_template_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnadd_template.Click
[Link] = True
[Link] = True
lbladd_template.Visible = False
btnadd_template.Visible = False
btndelete_template.Visible = False
lbldelete_template.Visible = False
[Link] = False
[Link] = False
btntemplate_save.Visible = True
lbltemplate_save.Visible = True
EnableControls()
picture_template.Image = Nothing
RichTextBox_itemname_template.Clear()
RichTextBox_template_price.Clear()
[Link] = False
End Sub
Private Sub btncancel_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
[Link] = False
[Link] = False
lbladd_template.Visible = True
btnadd_template.Visible = True
btndelete_template.Visible = True
lbldelete_template.Visible = True
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
btntemplate_save.Visible = False
lbltemplate_save.Visible = False
DisableControls()
LoadTemplates()
End Sub
Private Sub btndelete_template_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btndelete_template.Click
If [Link] Is Nothing Then
MsgBox("Please select a template to delete.",
[Link])
Exit Sub
End If
Dim id As Integer =
Convert.ToInt32([Link]("ID").Value)
If [Link]("Are you sure you want to delete this
template?", "Confirm Delete", [Link],
[Link]) = [Link] Then
Try
If [Link] = [Link] Then [Link]()
Dim query As String = "DELETE FROM tbl_template WHERE
ID=@id"
Dim cmd As New MySqlCommand(query, CONN)
[Link]("@id", id)
[Link]()
MsgBox("Template deleted successfully!",
[Link])
LoadTemplates()
Catch ex As Exception
MsgBox("Error deleting template: " & [Link],
[Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End If
End Sub
Private Sub CustomizeDataGridView()
With DataGridView1
.AutoSizeColumnsMode = [Link]
.SelectionMode = [Link]
.MultiSelect = False
.ReadOnly = True
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeRows = False
.RowHeadersVisible = False
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] = New Font("Segoe UI", 10)
.[Link] = New Padding(2)
.EnableHeadersVisualStyles = False
.[Link] = New Font("Segoe UI",
10, [Link])
.[Link] = [Link]
.[Link] = [Link]
.[Link] =
[Link]
.ColumnHeadersHeight = 30
.GridColor = [Link]
.CellBorderStyle = [Link]
End With
End Sub
Private Sub btnupdate_Click_1(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
If [Link] Is Nothing Then
MsgBox("Please select a template to update.",
[Link])
Exit Sub
End If
EnableControls()
btnsave_update.Visible = True
lblsave_update.Visible = True
[Link] = False
[Link] = False
btnadd_template.Visible = False
lbladd_template.Visible = False
btndelete_template.Visible = False
lbldelete_template.Visible = False
[Link] = True
[Link] = True
[Link] = False
End Sub
Private Sub btntemplate_save_Click(ByVal sender As Object, ByVal e
As EventArgs) Handles btntemplate_save.Click
If RichTextBox_itemname_template.Text = "" Or
RichTextBox_template_price.Text = "" Or picture_template.Image Is
Nothing Then
MsgBox("Please fill all fields and select an image.",
[Link])
Exit Sub
End If

Try
If [Link] = [Link] Then [Link]()
Dim query As String = "INSERT INTO tbl_template
(Template_Name, Template_Price, Image_Template, Worker) VALUES (@name,
@price, @image, @worker)"
Dim cmd As New MySqlCommand(query, CONN)

[Link]("@name",
RichTextBox_itemname_template.Text)
[Link]("@price",
[Link](RichTextBox_template_price.Text))

Dim workerName As String = "Unknown"


If [Link] IsNot Nothing AndAlso TypeOf [Link] Is
frmmain Then
Dim mainForm As frmmain = CType([Link], frmmain)
Dim lblUser As Label =
TryCast([Link]("lblUser"), Label)
If lblUser IsNot Nothing Then
workerName = [Link]
End If
End If
[Link]("@worker", workerName)

Dim ms As New MemoryStream()


Using bmp As New Bitmap(picture_template.Image)
[Link](ms, [Link])
End Using
Dim imgBytes As Byte() = [Link]()
[Link]("@image", imgBytes)

[Link]()
MsgBox("Template saved successfully!",
[Link])

LoadTemplates()
RichTextBox_itemname_template.Clear()
RichTextBox_template_price.Clear()
picture_template.Image = Nothing
DisableControls()
[Link] = True
[Link] = False
[Link] = False
btnsave_update.Visible = False
lblsave_update.Visible = False
[Link] = True
[Link] = True
btnadd_template.Visible = True
lbladd_template.Visible = True
btndelete_template.Visible = True
lbldelete_template.Visible = True

Catch ex As Exception
MsgBox("Error saving template: " & [Link],
[Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub

Private Sub btntemplate_saveupdate_Click(ByVal sender As Object,


ByVal e As EventArgs) Handles btnsave_update.Click
If RichTextBox_itemname_template.Text = "" Or
RichTextBox_template_price.Text = "" Or picture_template.Image Is
Nothing Then
MsgBox("Please fill all fields and select an image.",
[Link])
Exit Sub
End If

Dim id As Integer =
Convert.ToInt32([Link]("ID").Value)
Try
If [Link] = [Link] Then [Link]()

Dim query As String = "UPDATE tbl_template SET " &


"Template_Name = @name, " &
"Template_Price = @price, " &
"Image_Template = @image, " &
"Worker = @worker " &
"WHERE ID = @id"

Dim cmd As New MySqlCommand(query, CONN)

[Link]("@name",
RichTextBox_itemname_template.Text)
[Link]("@price",
[Link](RichTextBox_template_price.Text))
[Link]("@id", id)
Dim workerName As String = "Unknown"
If [Link] IsNot Nothing AndAlso TypeOf [Link] Is
frmmain Then
Dim mainForm As frmmain = CType([Link], frmmain)
Dim lblUser As Label =
TryCast([Link]("lblUser"), Label)
If lblUser IsNot Nothing Then
workerName = [Link]
End If
End If
[Link]("@worker", workerName)
Dim ms As New MemoryStream()
Using bmp As New Bitmap(picture_template.Image)
[Link](ms, [Link])
End Using
Dim imgBytes As Byte() = [Link]()
[Link]("@image", imgBytes)
[Link]()
MsgBox("Template updated successfully!",
[Link])
LoadTemplates()
btnsave_update.Visible = False
lblsave_update.Visible = False
[Link] = True
[Link] = True
btnadd_template.Visible = True
lbladd_template.Visible = True
btndelete_template.Visible = True
lbldelete_template.Visible = True
[Link] = True
[Link] = False
[Link] = False
DisableControls()
Catch ex As Exception
MsgBox("Error updating template: " & [Link],
[Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
End Class

Add Clients Code


Imports [Link]
Public Class frmaddclients
Dim QUERY As String
Dim Comm As MySqlCommand
Dim DA As MySqlDataAdapter
Dim DT As DataTable
Private nameCollection As New AutoCompleteStringCollection()
Private addressCollection As New AutoCompleteStringCollection()
Private _mainForm As frmmain = Nothing
Private Sub cbofilterforclients_SelectedIndexChanged(ByVal sender As
Object, ByVal e As EventArgs) Handles
[Link]
FilterClients()
End Sub
Private Sub txtsearchclient_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
FilterClients()
End Sub
Private Sub btnadd_clients_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnadd_clients.Click
ClearFields()
txtclient_contact.Text = "09"
SetFieldsEnabled(True)
[Link]()
btnadd_clients.Visible = False
lbladd_clients.Visible = False
[Link] = True
[Link] = True
[Link] = False
[Link] = False
btnsave_update.Visible = False
lblsave_update.Visible = False
btnclient_save.Visible = True
lblclient_save.Visible = True
btndelete_client.Visible = False
lbldelete_client.Visible = False
[Link] = False
End Sub
Private Sub btncancel_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
ClearFields()
SetFieldsEnabled(False)
[Link] = False
[Link] = False
btnadd_clients.Visible = True
lbladd_clients.Visible = True
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
btnclient_save.Visible = False
lblclient_save.Visible = False
btndelete_client.Visible = True
lbldelete_client.Visible = True
[Link] = True
End Sub
Private Sub btnupdate_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
If lblclient_no.Text = "" Then
MsgBox("Please select a client to update!",
[Link], "No Selection")
Exit Sub
End If
SetFieldsEnabled(True)
If Not txtclient_contact.[Link]("09") Then
txtclient_contact.Text = "09"
End If
[Link] = False
[Link] = False
btnsave_update.Visible = True
lblsave_update.Visible = True
btnclient_save.Visible = False
lblclient_save.Visible = False
btnadd_clients.Visible = False
lbladd_clients.Visible = False
btndelete_client.Visible = False
lbldelete_client.Visible = False
[Link] = True
[Link] = True
[Link] = False
End Sub
Private Sub btnclient_save_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs) Handles btnclient_save.MouseEnter
btnclient_save.Cursor = [Link]
lblclient_save.ForeColor = [Link]
End Sub
Private Sub btnclient_save_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs) Handles btnclient_save.MouseLeave
btnclient_save.Cursor = [Link]
lblclient_save.ForeColor = [Link]
End Sub
Private Sub btndelete_client_MouseEnter(ByVal sender As Object,
ByVal e As EventArgs)
btndelete_client.Cursor = [Link]
lbldelete_client.ForeColor = [Link]
End Sub

Private Sub btndelete_client_MouseLeave(ByVal sender As Object,


ByVal e As EventArgs)
btndelete_client.Cursor = [Link]
lbldelete_client.ForeColor = [Link]
End Sub
Private Sub btnadd_clients_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs) Handles btnadd_clients.MouseEnter
btnadd_clients.Cursor = [Link]
lbladd_clients.ForeColor = [Link]
End Sub
Private Sub btnadd_clients_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs) Handles btnadd_clients.MouseLeave
btnadd_clients.Cursor = [Link]
lbladd_clients.ForeColor = [Link]
End Sub
Private Sub txtclient_contact_KeyPress(ByVal sender As Object, ByVal
e As KeyPressEventArgs) Handles txtclient_contact.KeyPress
Dim tb As TextBox = txtclient_contact
If [Link]([Link]) Then
Exit Sub
End If
If Not [Link]([Link]) Then
[Link] = True
Exit Sub
End If
If [Link] < 2 Then
[Link] = True
[Link] = 2
Exit Sub
End If
If [Link] >= 11 AndAlso [Link] = 0 Then
[Link] = True
Exit Sub
End If
End Sub
Private Sub txtclient_contact_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles txtclient_contact.TextChanged
Dim tb As TextBox = txtclient_contact
Dim cleaned As String = "09"
Dim digitsAfterPrefix As String = ""
If [Link]("09") Then
digitsAfterPrefix = [Link](2)
ElseIf [Link] > 0 Then
digitsAfterPrefix = [Link]
End If
For Each ch As Char In digitsAfterPrefix
If [Link](ch) AndAlso [Link] < 11 Then
cleaned &= ch
End If
Next
If [Link] > 11 Then
cleaned = [Link](0, 11)
End If
If cleaned <> [Link] Then
Dim pos As Integer = [Link]
[Link] = cleaned
[Link] = [Link](2, [Link](pos,
[Link]))
End If
End Sub
Private Sub SetFieldsEnabled(ByVal enabled As Boolean)
[Link] = enabled
[Link] = enabled
txtclient_contact.Enabled = enabled
[Link] = enabled
RadioButton_male.Enabled = enabled
RadioButton_Female.Enabled = enabled
End Sub
Private Sub ClearFields()
[Link]()
[Link]()
txtclient_contact.Clear()
[Link]()
RadioButton_male.Checked = False
RadioButton_Female.Checked = False
lblclient_no.Text = ""
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e
As DataGridViewCellEventArgs) Handles [Link]
Try
If [Link] < 0 Then Exit Sub
Dim row = [Link]([Link])
lblclient_no.Text = [Link]("No").[Link]()
[Link] = [Link]("Name").[Link]()
[Link] =
[Link]("Address").[Link]()
txtclient_contact.Text =
[Link]("Contact").[Link]()
[Link] = If([Link]("Email").Value IsNot Nothing,
[Link]("Email").[Link](), "")
If [Link]("Gender").[Link]() = "Male" Then
RadioButton_male.Checked = True
RadioButton_Female.Checked = False
Else
RadioButton_male.Checked = False
RadioButton_Female.Checked = True
End If

SetFieldsEnabled(False)
[Link] = True
Catch ex As Exception
MsgBox("Error selecting client: " & [Link] & vbCrLf &
[Link], [Link], "Error")
End Try
End Sub
Private Sub LoadClients()
Try
If DataGridView1 Is Nothing Then
MsgBox("DataGridView1 is not initialized.",
[Link], "Error")
Exit Sub
End If
If CONN Is Nothing Then
MsgBox("Database connection is not initialized.",
[Link], "Error")
Exit Sub
End If
If [Link] = [Link] Then [Link]()
Dim QUERY As String = "SELECT No, Name, Address, Contact,
Email, Gender FROM tbl_clients"
Dim DA As New MySqlDataAdapter(QUERY, CONN)
Dim DT As New DataTable()
[Link](DT)
[Link] = DT
If lbltotal_clients IsNot Nothing Then
lbltotal_clients.Text = "Number of Clients: " &
[Link]()
Else
MsgBox("lbltotal_clients is not initialized.",
[Link], "Error")
End If
With DataGridView1
If .[Link]("No")
Then .Columns("No").HeaderText = "Client No"
If .[Link]("Name")
Then .Columns("Name").HeaderText = "Client Name"
If .[Link]("Address")
Then .Columns("Address").HeaderText = "Address"
If .[Link]("Contact")
Then .Columns("Contact").HeaderText = "Contact Number"
If .[Link]("Email")
Then .Columns("Email").HeaderText = "Email"
If .[Link]("Gender")
Then .Columns("Gender").HeaderText = "Gender"
If .[Link]("No") Then
.Columns("No").Width = 80
.Columns("No").MinimumWidth = 80
.Columns("No").[Link] =
[Link]
End If
If .[Link]("Name") Then
.Columns("Name").Width = 200
.Columns("Name").MinimumWidth = 150
.Columns("Name").[Link] =
[Link]
.Columns("Name").[Link] =
[Link] End If
If .[Link]("Address") Then
.Columns("Address").Width = 250
.Columns("Address").MinimumWidth = 200
.Columns("Address").[Link] =
[Link]
.Columns("Address").[Link] =
[Link] End If
If .[Link]("Contact") Then
.Columns("Contact").Width = 120
.Columns("Contact").MinimumWidth = 100
.Columns("Contact").[Link] =
[Link]
End If
If .[Link]("Email") Then
.Columns("Email").Width = 200
.Columns("Email").MinimumWidth = 150
.Columns("Email").[Link] =
[Link]
.Columns("Email").[Link] =
[Link] End If
If .[Link]("Gender") Then
.Columns("Gender").Width = 80
.Columns("Gender").MinimumWidth = 80
.Columns("Gender").[Link] =
[Link]
End If
If .[Link]("No") Then .Columns("No").SortMode
= [Link]
If .[Link]("Name")
Then .Columns("Name").SortMode = [Link]
If .[Link]("Address")
Then .Columns("Address").SortMode = [Link]
If .[Link]("Contact")
Then .Columns("Contact").SortMode = [Link]
If .[Link]("Email")
Then .Columns("Email").SortMode = [Link]
If .[Link]("Gender")
Then .Columns("Gender").SortMode = [Link]
.RowHeadersVisible = False
.SelectionMode = [Link]
.MultiSelect = False
.ReadOnly = True
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeColumns = True
.AllowUserToResizeRows = False
.AutoSizeColumnsMode =
[Link] '
.AutoSizeRowsMode =
[Link] '
.[Link] = New Font("Segoe UI", 10)
.[Link] = New Font("Segoe
UI", 10, [Link])
.[Link] =
[Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
End With
Catch ex As Exception
MsgBox("Error loading clients: " & [Link] & vbCrLf &
[Link], [Link], "Error")
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then [Link]()
End Try
End Sub
Private Sub FilterClients()
Try
If DataGridView1 Is Nothing OrElse CONN Is Nothing Then Exit
Sub
If [Link] Is Nothing Then
LoadClients()
Exit Sub
End If

If [Link] = [Link] Then [Link]()

Dim selectedFilter As String =


[Link]()
Dim searchText As String = [Link]()

Dim col As String = ""


Select Case selectedFilter
Case "Name" : col = "Name"
Case "Address" : col = "Address"
Case "Email" : col = "Email"
Case Else : Exit Sub
End Select

Dim sql As String


Dim cmd As New MySqlCommand("", CONN)

If selectedFilter = "No" AndAlso IsNumeric(searchText)


AndAlso searchText <> "" Then
sql = "SELECT No, Name, Address, Contact, Email, Gender
FROM tbl_clients WHERE No = @p"
[Link]("@p",
[Link](searchText))
Else
sql = "SELECT No, Name, Address, Contact, Email, Gender
FROM tbl_clients " &
"WHERE LOWER(" & col & ") LIKE LOWER(@p)"
[Link]("@p", "%" & searchText &
"%")
End If

[Link] = sql

Dim da As New MySqlDataAdapter(cmd)


Dim dt As New DataTable()
[Link](dt)
[Link] = dt

If lbltotal_clients IsNot Nothing Then


lbltotal_clients.Text = "Number of Clients: " &
[Link]()
End If

Catch ex As Exception
MsgBox("Error filtering clients: " & [Link],
[Link], "Error")
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
End Try
End Sub
Private Sub btnclient_save_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnclient_save.Click
Try
If [Link] = "" Or [Link] = "" Or
txtclient_contact.Text = "" _
Or [Link] = "" Or (Not RadioButton_male.Checked
And Not RadioButton_Female.Checked) Then
MsgBox("Please complete all fields!",
[Link], "Incomplete Data")
Exit Sub
End If
If Not IsNumeric(txtclient_contact.Text) Then
MsgBox("Contact number must contain digits only.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
ElseIf txtclient_contact.[Link] <> 11 Then
MsgBox("Contact number must be exactly 11 digits.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
ElseIf Not txtclient_contact.[Link]("09") Then
MsgBox("Contact number must start with '09'.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
End If
If Not ([Link]("@") AndAlso
[Link](".") AndAlso [Link]("@") <
[Link](".")) Then
MsgBox("Please enter a valid email address.",
[Link], "Invalid Input")
[Link]()
Exit Sub
End If
If CONN Is Nothing Then
MsgBox("Database connection is not initialized.",
[Link], "Error")
Exit Sub
End If
If [Link] = [Link] Then [Link]()
Dim gender As String = If(RadioButton_male.Checked, "Male",
"Female")
Dim QUERY As String = "SELECT COUNT(*) FROM tbl_clients
WHERE Name=@Name AND Address=@Address AND Contact=@Contact AND
Email=@Email AND Gender=@Gender"
Dim Comm As New MySqlCommand(QUERY, CONN)
[Link]("@Name", [Link])
[Link]("@Address",
[Link])
[Link]("@Contact",
txtclient_contact.Text)
[Link]("@Email", [Link])
[Link]("@Gender", gender)

If Convert.ToInt32([Link]()) > 0 Then


MsgBox("Client record already exists!",
[Link], "Duplicate Entry")
Exit Sub
End If
QUERY = "INSERT INTO tbl_clients (Name, Address, Contact,
Email, Gender) VALUES (@Name,@Address,@Contact,@Email,@Gender)"
Comm = New MySqlCommand(QUERY, CONN)
[Link]("@Name", [Link])
[Link]("@Address",
[Link])
[Link]("@Contact",
txtclient_contact.Text)
[Link]("@Email", [Link])
[Link]("@Gender", gender)
[Link]()
MsgBox("Client saved successfully!",
[Link], "Saved")
ClearFields()
LoadClients()
SetFieldsEnabled(False)
btnadd_clients.Visible = True
lbladd_clients.Visible = True
[Link] = False
[Link] = False
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
btnclient_save.Visible = False
lblclient_save.Visible = False
btndelete_client.Visible = True
lbldelete_client.Visible = True
[Link] = True

Catch ex As Exception
MsgBox("Error saving client: " & [Link] & vbCrLf &
[Link], [Link], "Error")
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then [Link]()
End Try
End Sub
Private Sub btnsave_update_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnsave_update.Click
Try
If [Link] = "" Or [Link] = "" Or
txtclient_contact.Text = "" _
Or [Link] = "" Or (Not RadioButton_male.Checked
And Not RadioButton_Female.Checked) Then
MsgBox("Please complete all fields!",
[Link], "Incomplete Data")
Exit Sub
End If
If Not IsNumeric(txtclient_contact.Text) Then
MsgBox("Contact number must contain digits only.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
ElseIf txtclient_contact.[Link] <> 11 Then
MsgBox("Contact number must be exactly 11 digits.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
ElseIf Not txtclient_contact.[Link]("09") Then
MsgBox("Contact number must start with '09'.",
[Link], "Invalid Input")
txtclient_contact.Focus()
Exit Sub
End If
If Not ([Link]("@") AndAlso
[Link](".") AndAlso [Link]("@") <
[Link](".")) Then
MsgBox("Please enter a valid email address.",
[Link], "Invalid Input")
[Link]()
Exit Sub
End If

If CONN Is Nothing Then


MsgBox("Database connection is not initialized.",
[Link], "Error")
Exit Sub
End If

If [Link] = [Link] Then [Link]()

Dim gender As String = If(RadioButton_male.Checked, "Male",


"Female")
Dim QUERY As String = "UPDATE tbl_clients SET Name=@Name,
Address=@Address, Contact=@Contact, Email=@Email, Gender=@Gender WHERE
No=@No"
Dim Comm As New MySqlCommand(QUERY, CONN)
[Link]("@Name", [Link])
[Link]("@Address",
[Link])
[Link]("@Contact",
txtclient_contact.Text)
[Link]("@Email", [Link])
[Link]("@Gender", gender)
[Link]("@No", lblclient_no.Text)
[Link]()
MsgBox("Client updated successfully!",
[Link], "Updated")

ClearFields()
LoadClients()
SetFieldsEnabled(False)
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
btnclient_save.Visible = False
lblclient_save.Visible = False
btnadd_clients.Visible = True
lbladd_clients.Visible = True
btndelete_client.Visible = True
lbldelete_client.Visible = True
btnclient_save.Visible = False
lblclient_save.Visible = False
[Link] = False
[Link] = False
[Link] = True
Catch ex As Exception
MsgBox("Error updating client: " & [Link] & vbCrLf &
[Link], [Link], "Error")
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then [Link]()
End Try
End Sub
Private Sub btnupdate_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub

Private Sub btnupdate_MouseLeave(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub btnsave_update_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs) Handles btnsave_update.MouseEnter
btnsave_update.Cursor = [Link]
lblsave_update.ForeColor = [Link]
End Sub

Private Sub btnsave_update_MouseLeave(ByVal sender As Object, ByVal


e As EventArgs) Handles btnsave_update.MouseLeave
btnsave_update.Cursor = [Link]
lblsave_update.ForeColor = [Link]
End Sub
Private Sub btncancel_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub

Private Sub btncancel_MouseLeave(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub LoadAutoCompleteData()
Try
If [Link] = [Link] Then [Link]()
[Link]()
[Link]()
Using nameCmd As New MySqlCommand("SELECT DISTINCT Name FROM
tbl_clients WHERE Name IS NOT NULL AND Name <> '' ORDER BY Name ASC",
CONN)
Using reader As MySqlDataReader =
[Link]()
While [Link]()
[Link](reader("Name").ToString())
End While
End Using
End Using
Using addrCmd As New MySqlCommand("SELECT DISTINCT Address
FROM tbl_clients WHERE Address IS NOT NULL AND Address <> '' ORDER BY
Address ASC", CONN)
Using reader As MySqlDataReader =
[Link]()
While [Link]()

[Link](reader("Address").ToString())
End While
End Using
End Using
[Link] =
[Link]
[Link] =
[Link]
[Link] = nameCollection
[Link] =
[Link]
[Link] =
[Link]
[Link] =
addressCollection
Catch ex As Exception
MsgBox("Error loading autocomplete data: " & [Link],
[Link], "Error")
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub txtclientname_KeyDown(ByVal sender As Object, ByVal e As
KeyEventArgs) Handles [Link]
If [Link] = [Link] Or [Link] = [Link] Then
[Link] =
[Link]
End If
End Sub
Private Sub txtclientAddress_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles [Link]
If [Link] = [Link] Or [Link] = [Link] Then
[Link] =
[Link]
End If
End Sub
Public Sub RefreshAutoComplete()
LoadAutoCompleteData()
End Sub
Private Sub frmaddclients_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
[Link]()
[Link]("Name")
[Link]("Address")
[Link]("Email")
[Link] = "Name"
txtclient_contact.MaxLength = 11
txtclient_contact.Text = "09"
[Link]()
LoadClients()
LoadAutoCompleteData()
ClearFields()
SetFieldsEnabled(False)
btnclient_save.Visible = False
lblclient_save.Visible = False
UpdateDeleteButtonVisibility()

Catch ex As Exception
MsgBox("Error loading form: " & [Link],
[Link], "Error")
End Try
End Sub

Public Property MainForm As frmmain


Get
Return _mainForm
End Get
Set(ByVal value As frmmain)
_mainForm = value
End Set
End Property

Public Sub UpdateDeleteButtonVisibility()


Dim isAdmin As Boolean = False
Try
If _mainForm IsNot Nothing AndAlso _mainForm.lblRole_of_user
IsNot Nothing Then
isAdmin =
_mainForm.lblRole_of_user.[Link]().Equals("Admin",
[Link])
End If
Catch
End Try

btndelete_client.Visible = isAdmin
lbldelete_client.Visible = isAdmin
End Sub

Private Sub btndelete_client_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles btndelete_client.Click
Try
If [Link](lblclient_no.Text) Then
MsgBox("Please select a client first!",
[Link], "No Selection")
Exit Sub
End If

If _mainForm Is Nothing OrElse _mainForm.lblRole_of_user Is


Nothing Then
MsgBox("User role information is not available.",
[Link], "Access Denied")
Exit Sub
End If

Dim roleOfUser As String =


_mainForm.lblRole_of_user.[Link]()
If Not [Link]("Admin",
[Link]) Then
MsgBox("You are not authorized to delete clients.",
[Link], "Access Denied")
Exit Sub
End If

If MsgBox("Are you sure you want to delete this client?",


[Link] + [Link], "Confirm Delete") =
[Link] Then
If CONN Is Nothing Then
MsgBox("Database connection is not initialized.",
[Link], "Error")
Exit Sub
End If

If [Link] = [Link] Then [Link]()

Dim QUERY As String = "DELETE FROM tbl_clients WHERE


No=@No"
Dim Comm As New MySqlCommand(QUERY, CONN)
[Link]("@No", lblclient_no.Text)
[Link]()
MsgBox("Client deleted successfully!",
[Link], "Deleted")
ClearFields()
LoadClients()
End If

Catch ex As Exception
MsgBox("Error deleting client: " & [Link] & vbCrLf &
[Link], [Link], "Error")
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then [Link]()
End Try
End Sub
End Class

Amount History Code


Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link].Drawing2D
Imports [Link]
Imports [Link]
Imports [Link]

Public Class frmamount_history


Private _clientID As String
Private _customerName As String
Private ReadOnly Property LogPath As String
Get
Dim path As String =
[Link]([Link]([Link]
icationData), "Tailoring_System\[Link]")
[Link]([Link](path))
Return path
End Get
End Property
Public Sub New(ByVal clientID As String, ByVal customerName As
String)
InitializeComponent()
_clientID = clientID
_customerName = customerName
AddHandler [Link], AddressOf frmamount_history_Load
End Sub
Private Sub frmamount_history_Load(ByVal sender As Object, ByVal e
As [Link])
Try
If CONN Is Nothing Then
[Link]("Database connection is not
initialized.", "Error", [Link], [Link])
[Link](LogPath, [Link] & ": Database
connection is not initialized in frmamount_history_Load" & vbCrLf)
Return
End If
[Link](LogPath, [Link] & ": Form load
started, ClientID: " & _clientID & ", CustomerName: " & _customerName &
vbCrLf)
[Link] = "ID: " & _clientID & " | Name: " &
_customerName & " | Total Transactions: 0"
InitializeComboBox()
[Link](LogPath, [Link] & ": ComboBox
initialized, items count: " & ComboBox_month.[Link] & vbCrLf)
LoadTransactionHistory()
StyleDataGridView()
Catch ex As Exception
[Link](LogPath, [Link] & ": Form load
error: " & [Link]() & vbCrLf)
[Link]("Error loading form: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub InitializeComboBox()
With ComboBox_Month
.DropDownStyle = [Link]
.[Link]()
.[Link]("All")
.[Link](New String() {"January", "February",
"March", "April", "May", "June", "July", "August", "September",
"October", "November", "December"})
.SelectedIndex = 0
[Link](LogPath, [Link] & ": ComboBox items
added: " & .[Link] & vbCrLf)
End With
End Sub
Private Sub ComboBox_Month_SelectedIndexChanged(ByVal sender As
Object, ByVal e As [Link]) Handles
ComboBox_Month.SelectedIndexChanged
LoadTransactionHistory()
End Sub
Private Sub txt_year_filter_TextChanged(ByVal sender As Object,
ByVal e As [Link]) Handles txt_year_filter.TextChanged
Dim yearText As String = txt_year_filter.[Link]()
If [Link] > 0 AndAlso Not IsNumeric(yearText) Then
[Link]("Please enter a valid year (e.g., 2025).",
"Invalid Input", [Link], [Link])
txt_year_filter.Text = ""
[Link](LogPath, [Link] & ": Invalid year
input: " & yearText & vbCrLf)
End If
LoadTransactionHistory()
End Sub
Private Sub txt_year_filter_KeyPress(ByVal sender As Object, ByVal e
As [Link]) Handles
txt_year_filter.KeyPress
If Not [Link]([Link]) AndAlso [Link] <>
ChrW([Link]) Then
[Link] = True
End If
End Sub
Private Sub LoadTransactionHistory()
Try
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Database
connection opened in LoadTransactionHistory" & vbCrLf)
End If

Dim query As String = "SELECT Amount_paid AS `Paid`,


Dateordered AS `Date`, Payment AS `Method` FROM tblpayment WHERE
client_id = @clientID"
Dim conditions As New [Link](Of
String)
Dim parameters As New [Link](Of
MySqlParameter)

Dim clientIdValue As Double


If Not [Link](_clientID, clientIdValue) Then
[Link]("Invalid client ID format. Please
provide a numeric ID.", "Error", [Link],
[Link])
[Link](LogPath, [Link] & ": Invalid
client ID format: " & _clientID & vbCrLf)
Return
End If
[Link](New MySqlParameter("@clientID",
clientIdValue))

If ComboBox_Month.SelectedIndex > 0 Then


Dim monthNumber As String =
ComboBox_Month.[Link]("D2")
[Link]("Dateordered LIKE @month")
[Link](New MySqlParameter("@month", monthNumber
& "/%"))
End If

Dim yearText As String = txt_year_filter.[Link]()


If [Link] > 0 AndAlso IsNumeric(yearText) Then
[Link]("Dateordered LIKE @year")
[Link](New MySqlParameter("@year", "%/" &
yearText))
End If

If [Link] > 0 Then


query &= " AND " & [Link](" AND ",
[Link]())
End If

[Link](LogPath, [Link] & ": Query: " &


query & vbCrLf)
Dim paramStrings As New [Link](Of
String)
For Each param As MySqlParameter In parameters
[Link]([Link] & "=" &
[Link]())
Next
[Link](LogPath, [Link] & ": Parameters: " &
[Link](", ", [Link]()) & vbCrLf)

Using cmd As New MySqlCommand(query, CONN)


For Each param As MySqlParameter In parameters
[Link](param)
Next
Dim dt As New DataTable()
Dim adapter As New MySqlDataAdapter(cmd)
[Link](dt)

[Link](LogPath, [Link] & ": Rows


retrieved: " & [Link] & vbCrLf)
For Each row As DataRow In [Link]
[Link](LogPath, [Link] & ": Paid: "
& row("Paid").ToString() & ", Date: " & row("Date").ToString() & ",
Method: " & row("Method").ToString() & vbCrLf)
If Not IsDBNull(row("Date")) Then
Dim rawDate As String = row("Date").ToString()
Dim parsedDate As Date
If [Link](rawDate, parsedDate) Then
row("Date") = [Link]("M/d/y")
Else
row("Date") = "Invalid Date"
[Link](LogPath, [Link] & ":
Invalid date format: " & rawDate & vbCrLf)
End If
End If
Next

[Link] = dt
[Link] = "ID: " & _clientID & " | Name: " &
_customerName & " | Total Transactions: " & [Link]()
End Using
Catch ex As Exception
[Link](LogPath, [Link] & ":
LoadTransactionHistory Error: " & [Link]() & vbCrLf)
[Link]("Error loading transaction history: " &
[Link], "Error", [Link], [Link])
[Link] = "ID: " & _clientID & " | Name: " &
_customerName & " | Total Transactions: 0"
Finally
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Database
connection closed in LoadTransactionHistory" & vbCrLf)
End If
End Try
End Sub
Private Sub txtsearch_TextChanged(ByVal sender As Object, ByVal e As
[Link]) Handles [Link]
Try
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Database
connection opened in txtsearch_TextChanged" & vbCrLf)
End If

Dim search As String = "%" & [Link]() & "%"


Dim query As String = "SELECT Amount_paid AS `Paid`,
Dateordered AS `Date`, Payment AS `Method` FROM tblpayment WHERE
client_id = @clientID"
Dim conditions As New [Link](Of
String)
Dim parameters As New [Link](Of
MySqlParameter)

Dim clientIdValue As Double


If Not [Link](_clientID, clientIdValue) Then
[Link]("Invalid client ID format. Please
provide a numeric ID.", "Error", [Link],
[Link])
[Link](LogPath, [Link] & ": Invalid
client ID format: " & _clientID & vbCrLf)
Return
End If
[Link](New MySqlParameter("@clientID",
clientIdValue))

If [Link]().Length > 0 Then


If IsNumeric([Link]()) Then
[Link]("Amount_paid = @search")
[Link](New MySqlParameter("@search",
[Link]([Link]())))
Else
[Link]("(Dateordered LIKE @search OR Payment
LIKE @search)")
[Link](New MySqlParameter("@search",
search))
End If
End If

If ComboBox_Month.SelectedIndex > 0 Then


Dim monthNumber As String =
ComboBox_Month.[Link]("D2")
[Link]("Dateordered LIKE @month")
[Link](New MySqlParameter("@month", monthNumber
& "/%"))
End If

Dim yearText As String = txt_year_filter.[Link]()


If [Link] > 0 AndAlso IsNumeric(yearText) Then
[Link]("Dateordered LIKE @year")
[Link](New MySqlParameter("@year", "%/" &
yearText))
End If

If [Link] > 0 Then


query &= " AND " & [Link](" AND ",
[Link]())
End If

[Link](LogPath, [Link] & ": Search Query: "


& query & vbCrLf)
Dim paramStrings As New [Link](Of
String)
For Each param As MySqlParameter In parameters
[Link]([Link] & "=" &
[Link]())
Next
[Link](LogPath, [Link] & ": Search
Parameters: " & [Link](", ", [Link]()) & vbCrLf)

Using cmd As New MySqlCommand(query, CONN)


For Each param As MySqlParameter In parameters
[Link](param)
Next
Dim dt As New DataTable()
Dim adapter As New MySqlDataAdapter(cmd)
[Link](dt)

[Link](LogPath, [Link] & ": Rows


retrieved: " & [Link] & vbCrLf)
For Each row As DataRow In [Link]
[Link](LogPath, [Link] & ": Paid: "
& row("Paid").ToString() & ", Date: " & row("Date").ToString() & ",
Method: " & row("Method").ToString() & vbCrLf)
If Not IsDBNull(row("Date")) Then
Dim rawDate As String = row("Date").ToString()
Dim parsedDate As Date
If [Link](rawDate, parsedDate) Then
row("Date") = [Link]("M/d/y")
Else
row("Date") = "Invalid Date"
[Link](LogPath, [Link] & ":
Invalid date format: " & rawDate & vbCrLf)
End If
End If
Next

[Link] = dt
[Link] = "ID: " & _clientID & " | Name: " &
_customerName & " | Total Transactions: " & [Link]()
End Using
Catch ex As Exception
[Link](LogPath, [Link] & ":
txtsearch_TextChanged Error: " & [Link]() & vbCrLf)
[Link]("Error filtering data: " & [Link],
"Error", [Link], [Link])
[Link] = "ID: " & _clientID & " | Name: " &
_customerName & " | Total Transactions: 0"
Finally
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Database
connection closed in txtsearch_TextChanged" & vbCrLf)
End If
End Try
End Sub
Private Sub StyleDataGridView(Optional ByVal isDarkTheme As Boolean
= False)
With DataGridView1
.SuspendLayout()
Try
If isDarkTheme Then
.BackgroundColor = [Link](30, 30, 30)
.ForeColor = [Link](230, 230, 230)
.[Link] =
[Link](50, 50, 50)
.[Link] =
[Link]
.[Link] = [Link](30, 30,
30)
.[Link] = [Link](230,
230, 230)
.[Link] =
[Link](45, 45, 45)
.GridColor = [Link](80, 80, 80)
Else
.BackgroundColor = [Link]
.ForeColor = [Link]
.[Link] =
[Link](200, 200, 200)
.[Link] =
[Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] =
[Link](245, 245, 245)
.GridColor = [Link](180, 180, 180)
End If

.BorderStyle = [Link]
.EnableHeadersVisualStyles = False
.SelectionMode = [Link]
.RowHeadersVisible = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False
.AutoSizeRowsMode =
[Link]
.CellBorderStyle =
[Link]
.[Link] = New
Font([Link], 9, [Link],
[Link])
.[Link] =
[Link]
.[Link] = New Padding(4)
.ColumnHeadersHeight = 28
.[Link] = New
Font([Link], 9, [Link],
[Link])
.[Link] = New Padding(2)
.[Link] = [Link]
.[Link] = [Link](0,
120, 215)
.[Link] = [Link]

If .[Link] > 0 Then


.AutoSizeColumnsMode =
[Link]
If .[Link]("Paid") Then
.Columns("Paid").HeaderText = "Paid"
.Columns("Paid").MinimumWidth = 100
.Columns("Paid").[Link] =
[Link]
.Columns("Paid").[Link] = "C2"
.Columns("Paid").FillWeight = 40
.Columns("Paid").Visible = True
End If
If .[Link]("Date") Then
.Columns("Date").HeaderText = "Date"
.Columns("Date").MinimumWidth = 80
.Columns("Date").[Link] =
[Link]
.Columns("Date").FillWeight = 30
.Columns("Date").Visible = True
End If
If .[Link]("Method") Then
.Columns("Method").HeaderText = "Payment Method"
.Columns("Method").MinimumWidth = 100
.Columns("Method").[Link] =
[Link]
.Columns("Method").FillWeight = 30
.Columns("Method").Visible = True
End If
End If
Dim columnNames As New
[Link](Of String)
For Each col As DataGridViewColumn In .Columns
[Link]([Link])
Next
[Link](LogPath, [Link] & ":
DataGridView columns: " & [Link](", ", [Link]()) &
vbCrLf)
Finally
.ResumeLayout(True)
End Try
End With
End Sub
Private Sub btnprint_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
Try
Dim ds As New dsPaymentHistory()
Dim dt As DataTable = [Link]("dtPaymentHistory")

For Each row As DataGridViewRow In [Link]


If Not [Link] Then
Dim dr As DataRow = [Link]()
dr("Paid") = If([Link]("Paid").Value IsNot
Nothing, [Link]("Paid").Value, 0.0)
dr("Date") = If([Link]("Date").Value IsNot
Nothing, [Link]("Date").Value, "")
dr("Method") = If([Link]("Method").Value IsNot
Nothing, [Link]("Method").Value, "")
dr("ClientID") = _clientID
dr("CustomerName") = _customerName
[Link](dr)
End If
Next

If [Link] = 0 Then
[Link]("No payment records available to
print.", "No Data", [Link], [Link])
Exit Sub
End If
Dim rpt As New rptPaymentHistory()
[Link](ds)

Dim businessNameText As String = "UNKNOWN BUSINESS"


Dim usernameText As String = "UNKNOWN USER"
Dim locationText As String = "UNKNOWN LOCATION"

Dim frmMain As frmmain = Nothing


For Each f As Form In [Link]
If TypeOf f Is frmmain Then
frmMain = DirectCast(f, frmmain)
businessNameText =
frmMain.lbl_business_name.[Link]()
usernameText = [Link]().ToUpper()
locationText = [Link]()
Exit For
End If
Next

' === Assign formula fields safely ===


Dim ffDefs As FormulaFieldDefinitions =
[Link]

If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "businessname") Then
[Link]("BusinessName").Text =
"'" & [Link]("'", "''") & "'"
End If

If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "username") Then
[Link]("Username").Text = "'"
& [Link]("'", "''") & "'"
End If

If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "location") Then
[Link]("Location").Text = "'"
& [Link]("'", "''") & "'"
End If

Dim tempLogoPath As String =


[Link]([Link](), "logo_payment_" &
[Link]().ToString() & ".png")

If frmMain IsNot Nothing AndAlso


frmMain.PictureBox_frmmain_logo.Image IsNot Nothing Then
Using original As Image =
frmMain.PictureBox_frmmain_logo.Image
Using bmp As New Bitmap(560, 560,
PixelFormat.Format24bppRgb)
Using g As Graphics = [Link](bmp)
[Link]([Link])
[Link] =
[Link]

Dim ratio As Double = [Link](550 /


[Link], 500 / [Link])
Dim newWidth As Integer =
CInt([Link] * ratio)
Dim newHeight As Integer =
CInt([Link] * ratio)
Dim posX As Integer = (550 - newWidth) \ 2
Dim posY As Integer = (500 - newHeight) \ 2

[Link](original, posX, posY, newWidth,


newHeight)
End Using
[Link](tempLogoPath,
[Link])
End Using
End Using
[Link]("Logo", tempLogoPath)
Else
[Link]("Logo", [Link])
End If
Dim frmPreviewPayment As New frmPaymentHistoryReport()
[Link] = rpt
[Link]()
[Link] = "Payment History Preview"
[Link] = [Link]
[Link]()

[Link]()
[Link]()

If [Link](tempLogoPath) Then
Try
[Link](tempLogoPath)
Catch
End Try
End If

Catch ex As Exception
[Link]("Error generating payment history report: "
& [Link], "Error", [Link], [Link])
End Try
End Sub
End Class

Choose Template Code


Imports [Link]

Public Class frmchoose_template


Public SelectedTemplateName As String
Public SelectedTemplatePrice As String
Public SelectedTemplateImage As Image

Private dt As New DataTable

Private Sub frmchoose_template_Load(ByVal sender As [Link],


ByVal e As [Link]) Handles [Link]
LoadTemplates("")
End Sub

Private Sub LoadTemplates(ByVal searchValue As String)


[Link]()
Try
EnsureConnectionClosed()
[Link]()
Dim query As String = "SELECT ID, Template_Name,
Template_Price FROM tbl_template WHERE Template_Name LIKE @search"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@search", "%" & searchValue
& "%")
Using adapter As New MySqlDataAdapter(cmd)
[Link](dt)
End Using
End Using
[Link] = dt
[Link](0).HeaderText = "ID"
[Link](1).HeaderText = "Template Name"
[Link](2).HeaderText = "Price"

If [Link] > 0 Then


Dim firstRowID As Integer =
Convert.ToInt32([Link](0).Cells("ID").Value)
ShowTemplateDetails(firstRowID)
[Link]()
[Link](0).Selected = True
btnchoose_template.Enabled = True
Else
[Link] = ""
lbltemplate_price.Text = ""
PictureBox_template_upper.Image = Nothing
btnchoose_template.Enabled = False
End If
Catch ex As Exception
MsgBox("Error loading templates: " & [Link],
[Link])
Finally
EnsureConnectionClosed()
End Try
End Sub
Private Sub txttemplate_search_TextChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
txttemplate_search.TextChanged
LoadTemplates(txttemplate_search.Text)
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e
As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim selectedID As Integer =
[Link]([Link]).Cells("ID").Value
ShowTemplateDetails(selectedID)
End If
End Sub
Private Sub ShowTemplateDetails(ByVal templateID As Integer)
Try
EnsureConnectionClosed()
[Link]()
Dim query As String = "SELECT Template_Name, Template_Price,
Image_Template FROM tbl_template WHERE ID = @id"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@id", templateID)
Using reader As MySqlDataReader = [Link]()
If [Link]() Then
[Link] =
reader("Template_Name").ToString()
lbltemplate_price.Text = "₱ " &
Format(CDec(reader("Template_Price")), "N2")
PictureBox_template_upper.Image =
LoadTemplateImage(templateID)
PictureBox_template_upper.SizeMode =
[Link]
Else
[Link] = ""
lbltemplate_price.Text = ""
PictureBox_template_upper.Image = Nothing
End If
End Using
End Using
Catch ex As Exception
MsgBox("Error showing template details: " & [Link],
[Link])
Finally
EnsureConnectionClosed()
End Try
End Sub
Private Sub btnchoose_template_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnchoose_template.Click
If [Link] IsNot Nothing Then
SelectedTemplateName =
[Link]("Template_Name").[Link]()
SelectedTemplatePrice =
[Link]("Template_Price").[Link]()
Dim selectedID As Integer =
[Link]("ID").Value
SelectedTemplateImage = LoadTemplateImage(selectedID)
[Link] = [Link]
[Link]()
End If
End Sub
Private Function LoadTemplateImage(ByVal templateID As Integer) As
Image
Try
EnsureConnectionClosed()
[Link]()
Dim query As String = "SELECT Image_Template FROM
tbl_template WHERE ID = @id"
Using cmd As New MySqlCommand(query, CONN)
[Link]("@id", templateID)
Using reader As MySqlDataReader = [Link]()
If [Link]() AndAlso Not
IsDBNull(reader("Image_Template")) Then
Dim imgData As Byte() =
CType(reader("Image_Template"), Byte())
If [Link] > 0 Then
Using ms As New [Link](imgData)
Return [Link](ms)
End Using
End If
End If
End Using
End Using
Catch ex As Exception
MsgBox("Error loading image: " & [Link],
[Link])
Finally
EnsureConnectionClosed()
End Try
Return Nothing
End Function
Private Sub EnsureConnectionClosed()
If [Link] = [Link] Then
[Link]()
End If
End Sub
Private Sub frmchoose_template_FormClosing(ByVal sender As Object,
ByVal e As FormClosingEventArgs) Handles [Link]
EnsureConnectionClosed()
[Link]()
End Sub
End Class

LAN Connection Code


Imports [Link]

Public Class frmConnection

Private Sub frmConnection_Load(ByVal sender As [Link], ByVal


e As [Link]) Handles [Link]
' Load saved settings when form opens
[Link] = GetSetting([Link],
"Connection", "Server", "localhost")
[Link] = GetSetting([Link],
"Connection", "User", "root")
[Link] = GetSetting([Link],
"Connection", "Password", "")

' Optional: hide password


'[Link] = True
End Sub

Private Sub btntest_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
' TEST CONNECTION ONLY
Dim connStr As String = "Server=" & [Link] & _
";Database=db_hannies;" & _
"Uid=" & [Link] & _
";Pwd=" & [Link] & _
";Port=3306;" & _
"Allow Zero Datetime=True;"
Try
Using testConn As New MySqlConnection(connStr)
[Link]()
MsgBox("Connection Successful!",
[Link], "Test")
End Using
Catch ex As Exception
MsgBox("Connection Failed!" & vbCrLf & vbCrLf & [Link],
[Link], "Error")
End Try
End Sub

Private Sub btnSave_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
' FINAL SAVE + TEST + GO TO LOGIN
Dim connStr As String = "Server=" & [Link] & _
";Database=db_hannies;" & _
"Uid=" & [Link] & _
";Pwd=" & [Link] & _
";Port=3306;" & _
"Allow Zero Datetime=True;"

Try
Using conn As New MySqlConnection(connStr)
[Link]()

' Save settings permanently


SaveSetting([Link], "Connection",
"Server", [Link])
SaveSetting([Link], "Connection",
"User", [Link])
SaveSetting([Link], "Connection",
"Password", [Link])

MsgBox("Settings saved successfully!" & vbCrLf &


"Opening login form...", [Link], "Saved")

' Update global connection


[Link]()
' Open login form
Dim login As New frmlogin
[Link]()
[Link]()

End Using
Catch ex As Exception
MsgBox("Cannot save settings!" & vbCrLf & vbCrLf &
"Connection failed:" & vbCrLf & [Link], _
[Link], "Error")
End Try
End Sub

End Class
Female Measurement
Imports [Link]

Public Class frmfemale_measurement


Private Sub frmfemale_measurement_Load(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
NumericUpDown_quantity.Minimum = 1
NumericUpDown_quantity.Value = 1
txttotal_amount.ReadOnly = True
cbopayment_method.[Link]()
cbopayment_method.[Link]("Cash")
cbopayment_method.[Link]("E-Cash")
cbopayment_method.SelectedIndex = 0

LoadClients()
ClearForm()
Cursor = [Link]
[Link] = [Link]
btnview_list.Cursor = [Link]
radiobutton_downpayment.Cursor = [Link]
radiobutton_fullpay.Cursor = [Link]
NumericUpDown_quantity.Cursor = [Link]

Private Sub fullpay()


If radiobutton_fullpay.Checked Then
[Link] = txttotal_amount.Text
Else
[Link] = ""
End If
End Sub
Private Sub LoadTemplateImage(ByVal templateName As String)
Try
If [Link] <> [Link] Then [Link]()
Dim query As String = "SELECT Image_Template, Template_Price
FROM tbl_template WHERE Template_Name = @templateName"
Using Comm As New MySqlCommand(query, CONN)
[Link]("@templateName",
templateName)
Using dr As MySqlDataReader = [Link]()
If [Link]() Then
If Not IsDBNull(dr("Image_Template")) Then
Dim imgData As Byte() =
DirectCast(dr("Image_Template"), Byte())
Using ms As New [Link](imgData)
Dim templateImage As Image =
[Link](ms)
PictureBox_template_upper.Image =
templateImage
End Using
Else
PictureBox_template_upper.Image = Nothing
End If
If Not IsDBNull(dr("Template_Price")) Then
Dim templatePrice As Decimal =
[Link](dr("Template_Price"))
[Link] = [Link]("F2",
[Link])
Else
[Link]()
End If
Else
PictureBox_template_upper.Image = Nothing
[Link]()
End If
End Using
End Using
Catch ex As Exception
[Link]("Error loading template details: " &
[Link])
Finally
[Link]()
End Try
End Sub
Private Sub LoadClients()
Try
If [Link] <> [Link] Then [Link]()
Dim query As String = "SELECT No, Name FROM tbl_clients"
Using Comm As New MySqlCommand(query, CONN)
Using dr As MySqlDataReader = [Link]()
Dim autoComplete As New
AutoCompleteStringCollection()
While [Link]()
[Link](dr("Name").ToString())
End While
txtfemale_name.AutoCompleteMode =
[Link]
txtfemale_name.AutoCompleteSource =
[Link]
txtfemale_name.AutoCompleteCustomSource =
autoComplete
End Using
End Using
Catch ex As Exception
[Link]("Error loading clients: " & [Link])
Finally
[Link]()
End Try
End Sub
Private Sub ClearForm()
cbopayment_method.SelectedIndex = 0
lblfemale_No.Text = ""
txtfemale_name.Clear()
RichTextBox_template_name.Clear()
NumericUpDown_quantity.Value = 1
[Link]()
txttotal_amount.Clear()
[Link] = "0.00"
radiobutton_downpayment.Checked = True
radiobutton_fullpay.Checked = False
[Link]()
[Link]()
PictureBox_template_upper.Image = Nothing
[Link] = [Link]
txtfemale_name.Focus()

txtfemale_length_upper.Clear()
txtfemale_shoulder_upper.Clear()
txtfemale_figure_upper.Clear()
txtfemale_bust_distance_upper.Clear()
txtfemale_body_upper.Clear()
txtfemale_waist_upper.Clear()
txtfemale_hips_upper.Clear()
txtfemale_neck_upper.Clear()
txtfemale_sleeve_length_upper.Clear()
txtfemale_sleeve_bottom_upper.Clear()
txtfemale_sleeve_cuff_upper.Clear()
txtfemale_arm_hole_upper.Clear()
txtfemale_remarks_upper.Clear()
txtfemale_length_lower.Clear()
txtfemale_waist_lower.Clear()
txtfemale_hips_lower.Clear()
txtfemale_thigh_lower.Clear()
txtfemale_knee_lower.Clear()
txtfemale_bottom_lower.Clear()
txtfemale_crotch_lower.Clear()
txtfemale_remarks_lower.Clear()
End Sub
Private Sub txtprice_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
UpdateTotalAmount()
End Sub
Private Sub txtAmount_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
UpdateBalance()

Dim totalAmount As Decimal


Dim amountPaid As Decimal

If [Link](txttotal_amount.Text, totalAmount) AndAlso


[Link]([Link], amountPaid) Then
If amountPaid > totalAmount Then
[Link]("Amount paid cannot exceed the total
amount.", "Invalid Amount", [Link], [Link])
[Link] = [Link]("F2")
End If
End If
End Sub
Private Sub UpdateTotalAmount()
Dim price As Decimal
Dim quantity As Integer =
Convert.ToInt32(NumericUpDown_quantity.Value)

If [Link]([Link],
[Link],
[Link], price) Then
Dim totalAmount As Decimal = price * quantity
txttotal_amount.Text = [Link]("F2",
[Link])
UpdateBalance()
Else
txttotal_amount.Clear()
End If
End Sub

Private Sub UpdateBalance()


Dim totalAmount As Decimal
Dim amountPaid As Decimal

If [Link](txttotal_amount.Text, totalAmount) AndAlso


[Link]([Link], amountPaid) Then
Dim balance As Decimal = totalAmount - amountPaid
[Link] = [Link]("F2")
Else
[Link] = "0.00"
End If
End Sub

Private Sub btnsave_female_MouseEnter(ByVal sender As Object, ByVal


e As EventArgs)
btnsave_female.Cursor = [Link]
btnsave_female.ForeColor = [Link]
End Sub

Private Sub btnsave_female_MouseLeave(ByVal sender As Object, ByVal


e As EventArgs)
btnsave_female.Cursor = [Link]
btnsave_female.ForeColor = [Link]
End Sub

Private Sub txtfemale_length_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_length_upper.KeyDown
If [Link] = [Link] Then
txtfemale_shoulder_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_shoulder_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_shoulder_upper.KeyDown
If [Link] = [Link] Then
txtfemale_figure_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_figure_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_figure_upper.KeyDown
If [Link] = [Link] Then
txtfemale_bust_distance_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_bust_distance_upper_KeyDown(ByVal sender As


Object, ByVal e As KeyEventArgs) Handles
txtfemale_bust_distance_upper.KeyDown
If [Link] = [Link] Then
txtfemale_body_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_body_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_body_upper.KeyDown
If [Link] = [Link] Then
txtfemale_waist_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_waist_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_waist_upper.KeyDown
If [Link] = [Link] Then
txtfemale_hips_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_hips_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_hips_upper.KeyDown
If [Link] = [Link] Then
txtfemale_neck_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_neck_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_neck_upper.KeyDown
If [Link] = [Link] Then
txtfemale_sleeve_length_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_sleeve_length_upper_KeyDown(ByVal sender As


Object, ByVal e As KeyEventArgs) Handles
txtfemale_sleeve_length_upper.KeyDown
If [Link] = [Link] Then
txtfemale_sleeve_bottom_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_sleeve_bottom_upper_KeyDown(ByVal sender As


Object, ByVal e As KeyEventArgs) Handles
txtfemale_sleeve_bottom_upper.KeyDown
If [Link] = [Link] Then
txtfemale_sleeve_cuff_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_sleeve_cuff_upper_KeyDown(ByVal sender As


Object, ByVal e As KeyEventArgs) Handles
txtfemale_sleeve_cuff_upper.KeyDown
If [Link] = [Link] Then
txtfemale_arm_hole_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_arm_hole_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_arm_hole_upper.KeyDown
If [Link] = [Link] Then
txtfemale_remarks_upper.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_remarks_upper_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_remarks_upper.KeyDown
If [Link] = [Link] Then
If [Link] Then
txtfemale_length_lower.Focus()
End If
[Link] = True
End If
End Sub

Private Sub txtfemale_length_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_length_lower.KeyDown
If [Link] = [Link] Then
txtfemale_waist_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_waist_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_waist_lower.KeyDown
If [Link] = [Link] Then
txtfemale_hips_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_hips_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_hips_lower.KeyDown
If [Link] = [Link] Then
txtfemale_thigh_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_thigh_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_thigh_lower.KeyDown
If [Link] = [Link] Then
txtfemale_knee_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_knee_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_knee_lower.KeyDown
If [Link] = [Link] Then
txtfemale_bottom_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_bottom_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_bottom_lower.KeyDown
If [Link] = [Link] Then
txtfemale_crotch_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_crotch_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_crotch_lower.KeyDown
If [Link] = [Link] Then
txtfemale_remarks_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtfemale_remarks_lower_KeyDown(ByVal sender As Object,


ByVal e As KeyEventArgs) Handles txtfemale_remarks_lower.KeyDown
If [Link] = [Link] Then
[Link] = True
End If
End Sub
Private Sub btnsave_female_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnsave_female.Click
Try
If [Link](lblfemale_No.Text) OrElse
lblfemale_No.[Link]().Length = 0 OrElse
[Link](txtfemale_name.Text) OrElse
txtfemale_name.[Link]().Length = 0 OrElse
NumericUpDown_quantity.Value <= 0 OrElse
[Link]([Link]) OrElse
[Link]().Length = 0 Then
[Link]("Please fill in all required fields
before inserting!", "Missing Data", [Link],
[Link])
Exit Sub
End If
If cbopayment_method.SelectedIndex = -1 Then
[Link]("Please select a payment method.",
"Missing Data", [Link], [Link])
cbopayment_method.Focus()
Exit Sub
End If

Dim price As Decimal


If Not [Link]([Link], price) Then
[Link]("Invalid price format.", "Invalid Data",
[Link], [Link])
[Link]()
Exit Sub
End If

If [Link] <> [Link] Then


[Link]()
End If

Dim quantity As Integer =


Convert.ToInt32(NumericUpDown_quantity.Value)
Dim downPayment As Decimal
If radiobutton_downpayment.Checked Then
If Not [Link]([Link], downPayment)
Then
[Link]("Invalid down payment amount.",
"Invalid Data", [Link], [Link])
[Link]()
[Link]()
Exit Sub
End If
Else
downPayment = 0
End If
Dim fullPayment As Decimal = If(radiobutton_fullpay.Checked,
price * quantity, 0)
Dim balance As Decimal = (price * quantity) - fullPayment -
downPayment

Dim orderStatus As String = "Pending"

QUERY = "INSERT INTO tblfemale_orders (female_no,


female_name, Template_name, quantity, price, balance, order_date,
remarks, Order_Status, " &
"length_upper, shoulder_upper, figure_upper,
bust_distance_upper, body_upper, waist_upper, hips_upper, neck_upper, "
&
"sleeve_length_upper, sleeve_bottom_upper,
sleeve_cuff_upper, arm_hole_upper, remarks_upper, " &
"length_lower, waist_lower, hips_lower, thigh_lower,
knee_lower, bottom_lower, crotch_lower, remarks_lower, Dateordered) " &
"VALUES (@female_no, @female_name, @template_name,
@quantity, @price, @balance, @order_date, @remarks, @Order_Status, " &
"@length_upper, @shoulder_upper, @figure_upper,
@bust_distance_upper, @body_upper, @waist_upper, @hips_upper,
@neck_upper, " &
"@sleeve_length_upper, @sleeve_bottom_upper,
@sleeve_cuff_upper, @arm_hole_upper, @remarks_upper, " &
"@length_lower, @waist_lower, @hips_lower,
@thigh_lower, @knee_lower, @bottom_lower, @crotch_lower, @remarks_lower,
CURDATE())"

Using Comm As New MySqlCommand(QUERY, CONN)


[Link]("@female_no",
lblfemale_No.Text)
[Link]("@female_name",
txtfemale_name.Text)
[Link]("@template_name",
RichTextBox_template_name.Text)
[Link]("@quantity", quantity)
[Link]("@price", price)
[Link]("@balance", balance)
[Link]("@order_date",
[Link]("yyyy-MM-dd"))
[Link]("@remarks",
[Link])
[Link]("@Order_Status",
orderStatus)

[Link]("@length_upper",
GetDecimalOrNull(txtfemale_length_upper.Text))
[Link]("@shoulder_upper",
GetDecimalOrNull(txtfemale_shoulder_upper.Text))
[Link]("@figure_upper",
GetDecimalOrNull(txtfemale_figure_upper.Text))
[Link]("@bust_distance_upper",
GetDecimalOrNull(txtfemale_bust_distance_upper.Text))
[Link]("@body_upper",
GetDecimalOrNull(txtfemale_body_upper.Text))
[Link]("@waist_upper",
GetDecimalOrNull(txtfemale_waist_upper.Text))
[Link]("@hips_upper",
GetDecimalOrNull(txtfemale_hips_upper.Text))
[Link]("@neck_upper",
GetDecimalOrNull(txtfemale_neck_upper.Text))
[Link]("@sleeve_length_upper",
GetDecimalOrNull(txtfemale_sleeve_length_upper.Text))
[Link]("@sleeve_bottom_upper",
GetDecimalOrNull(txtfemale_sleeve_bottom_upper.Text))
[Link]("@sleeve_cuff_upper",
GetDecimalOrNull(txtfemale_sleeve_cuff_upper.Text))
[Link]("@arm_hole_upper",
GetDecimalOrNull(txtfemale_arm_hole_upper.Text))
[Link]("@remarks_upper",
txtfemale_remarks_upper.Text)

[Link]("@length_lower",
GetDecimalOrNull(txtfemale_length_lower.Text))
[Link]("@waist_lower",
GetDecimalOrNull(txtfemale_waist_lower.Text))
[Link]("@hips_lower",
GetDecimalOrNull(txtfemale_hips_lower.Text))
[Link]("@thigh_lower",
GetDecimalOrNull(txtfemale_thigh_lower.Text))
[Link]("@knee_lower",
GetDecimalOrNull(txtfemale_knee_lower.Text))
[Link]("@bottom_lower",
GetDecimalOrNull(txtfemale_bottom_lower.Text))
[Link]("@crotch_lower",
GetDecimalOrNull(txtfemale_crotch_lower.Text))
[Link]("@remarks_lower",
txtfemale_remarks_lower.Text)

[Link]()
End Using

Dim paymentQuery As String = "INSERT INTO tblpayment


(client_id, Name, Amount_paid, Dateordered, Payment) VALUES (@client_id,
@Name, @Amount_paid, @Dateordered, @Payment)"
Using paymentComm As New MySqlCommand(paymentQuery, CONN)
[Link]("@client_id",
lblfemale_No.Text)
[Link]("@Name",
txtfemale_name.Text)
[Link]("@Amount_paid",
If([Link]([Link]) OrElse
[Link]().Length = 0, 0, [Link]([Link])))
[Link]("@Dateordered",
[Link]("yyyy-MM-dd"))
[Link]("@Payment",
cbopayment_method.[Link]())
[Link]()
End Using

[Link]("Order inserted successfully!", "Success",


[Link], [Link])
ClearForm()

Catch ex As Exception
[Link]("Error inserting order: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub LinkLabel_tempale_LinkClicked(ByVal sender As
[Link], ByVal e As
[Link]) Handles
LinkLabel_tempale.LinkClicked
Dim chooseTemplateForm As New frmchoose_template()

If [Link]() = [Link] Then


RichTextBox_template_name.Text =
[Link]
[Link] = [Link]
PictureBox_template_upper.Image =
[Link]
End If
End Sub

Private Sub radiobutton_fullpay_CheckedChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
radiobutton_fullpay.CheckedChanged
fullpay()
End Sub

Private Sub btnview_list_Click(ByVal sender As [Link], ByVal


e As [Link]) Handles btnview_list.Click
frmfemalelist_update.ShowDialog()
End Sub
Private Sub btnsave_female_MouseHover(ByVal sender As Object, ByVal
e As [Link]) Handles btnsave_female.MouseHover
btnsave_female.Cursor = [Link]
End Sub

Private Sub btnview_list_MouseHover(ByVal sender As Object, ByVal e


As [Link]) Handles btnview_list.MouseHover
btnview_list.Cursor = [Link]
End Sub

Private Sub NumericUpDown_quantity_ValueChanged(ByVal sender As


Object, ByVal e As EventArgs) Handles
NumericUpDown_quantity.ValueChanged
If NumericUpDown_quantity.Value > 1 Then
[Link] = False
Else
[Link] = True
End If
UpdateTotalAmount()
End Sub

Private Sub NumericOnly_KeyPress(ByVal sender As Object, ByVal e As


KeyPressEventArgs)
Dim textBox As TextBox = DirectCast(sender, TextBox)
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "."c Then
[Link] = True
End If
If [Link] = "."c AndAlso [Link](".") Then
[Link] = True
End If
End Sub
Private Function GetDecimalOrNull(ByVal text As String) As Object
If [Link](text) OrElse [Link]().Length = 0 Then
Return [Link]
End If
Return [Link](text)
End Function
Private Sub txtfemale_name_TextChanged(ByVal sender As Object, ByVal
e As EventArgs) Handles txtfemale_name.TextChanged
Try
If [Link] <> [Link] Then
[Link]()
End If

Dim query As String = "SELECT No FROM tbl_clients WHERE Name


= @name"
Using Comm As New MySqlCommand(query, CONN)
[Link]("@name",
txtfemale_name.[Link]())

Dim result As Object = [Link]()


If result IsNot Nothing Then
lblfemale_No.Text = [Link]()
Else
lblfemale_No.Text = ""
End If
End Using

Catch ex As Exception
[Link]("Error retrieving client number: " &
[Link], "Database Error", [Link],
[Link])
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
End Try

[Link] = [Link](txtfemale_name.Text)
OrElse txtfemale_name.[Link]().Length = 0
End Sub
End Class

Female List
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmfemalelist_update
Private Sub LoadWorkers()
Try
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT Name FROM tbl_workers WHERE
Status = 1 ORDER BY Name ASC"
Using Comm As New MySqlCommand(query, [Link])
Dim reader As MySqlDataReader = [Link]()
ListBox_workers.[Link]()
ListBox_workers.[Link]("All")
ListBox_workers.[Link]("None")
While [Link]()
ListBox_workers.[Link](reader("Name").ToString())
End While
[Link]()
ListBox_workers.SelectedIndex = 0
End Using
Catch ex As Exception
[Link]("Error loading workers: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Sub LoadMonths()


ComboBox_month.[Link]()
ComboBox_month.[Link]("All")
Dim months() As String = {"January", "February", "March",
"April", "May", "June", "July", "August", "September", "October",
"November", "December"}
ComboBox_month.[Link](months)
ComboBox_month.SelectedIndex = 0
End Sub

Private Sub FilterData()


Try
Dim filters As New List(Of String)
If txtfemale_search.[Link]() <> "" Then
[Link]("(female_name LIKE @search OR Template_name
LIKE @search)")
End If
Dim selectedWorker As String =
If(ListBox_workers.SelectedItem IsNot Nothing,
ListBox_workers.[Link](), "All")
If selectedWorker <> "All" Then
If selectedWorker = "None" Then
[Link]("Cutter_and_Sewer IS NULL")
Else
[Link]("Cutter_and_Sewer = @cutter_and_sewer")
End If
End If
If ComboBox_month.SelectedIndex > 0 Then
[Link]("MONTH(order_date) = @month")
End If
If [Link]() <> "" Then
[Link]("YEAR(order_date) = @year")
End If
Dim whereClause As String = [Link](" AND ",
[Link]())
LoadFemaleOrders(whereClause)
Catch ex As Exception
[Link]("Error filtering data: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e


As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim row As DataGridViewRow = [Link]([Link])
lblfemale_No.Text = [Link]("female_no").[Link]()
txtfemale_name.Text =
[Link]("female_name").[Link]()
RichTextBox_template_name.Text =
[Link]("Template_name").[Link]()
txtfemale_length_upper.Text =
If(IsDBNull([Link]("length_upper").Value), "",
[Link]("length_upper").[Link]())
txtfemale_shoulder_upper.Text =
If(IsDBNull([Link]("shoulder_upper").Value), "",
[Link]("shoulder_upper").[Link]())
txtfemale_figure_upper.Text =
If(IsDBNull([Link]("figure_upper").Value), "",
[Link]("figure_upper").[Link]())
txtfemale_bust_distance_upper.Text =
If(IsDBNull([Link]("bust_distance_upper").Value), "",
[Link]("bust_distance_upper").[Link]())
txtfemale_body_upper.Text =
If(IsDBNull([Link]("body_upper").Value), "",
[Link]("body_upper").[Link]())
txtfemale_waist_upper.Text =
If(IsDBNull([Link]("waist_upper").Value), "",
[Link]("waist_upper").[Link]())
txtfemale_hips_upper.Text =
If(IsDBNull([Link]("hips_upper").Value), "",
[Link]("hips_upper").[Link]())
txtfemale_neck_upper.Text =
If(IsDBNull([Link]("neck_upper").Value), "",
[Link]("neck_upper").[Link]())
txtfemale_sleeve_length_upper.Text =
If(IsDBNull([Link]("sleeve_length_upper").Value), "",
[Link]("sleeve_length_upper").[Link]())
txtfemale_sleeve_bottom_upper.Text =
If(IsDBNull([Link]("sleeve_bottom_upper").Value), "",
[Link]("sleeve_bottom_upper").[Link]())
txtfemale_sleeve_cuff_upper.Text =
If(IsDBNull([Link]("sleeve_cuff_upper").Value), "",
[Link]("sleeve_cuff_upper").[Link]())
txtfemale_arm_hole_upper.Text =
If(IsDBNull([Link]("arm_hole_upper").Value), "",
[Link]("arm_hole_upper").[Link]())
txtfemale_remarks_upper.Text =
If(IsDBNull([Link]("remarks_upper").Value), "",
[Link]("remarks_upper").[Link]())
txtfemale_length_lower.Text =
If(IsDBNull([Link]("length_lower").Value), "",
[Link]("length_lower").[Link]())
txtfemale_waist_lower.Text =
If(IsDBNull([Link]("waist_lower").Value), "",
[Link]("waist_lower").[Link]())
txtfemale_hips_lower.Text =
If(IsDBNull([Link]("hips_lower").Value), "",
[Link]("hips_lower").[Link]())
txtfemale_thigh_lower.Text =
If(IsDBNull([Link]("thigh_lower").Value), "",
[Link]("thigh_lower").[Link]())
txtfemale_knee_lower.Text =
If(IsDBNull([Link]("knee_lower").Value), "",
[Link]("knee_lower").[Link]())
txtfemale_bottom_lower.Text =
If(IsDBNull([Link]("bottom_lower").Value), "",
[Link]("bottom_lower").[Link]())
txtfemale_crotch_lower.Text =
If(IsDBNull([Link]("crotch_lower").Value), "",
[Link]("crotch_lower").[Link]())
txtfemale_remarks_lower.Text =
If(IsDBNull([Link]("remarks_lower").Value), "",
[Link]("remarks_lower").[Link]())
[Link] = If(IsDBNull([Link]("remarks").Value),
"", [Link]("remarks").[Link]())
LoadTemplateImage(RichTextBox_template_name.Text)
End If
End Sub

Private Sub DataGridView1_SelectionChanged(ByVal sender As Object,


ByVal e As EventArgs) Handles [Link]
If [Link] > 0 Then
Dim selectedRow As DataGridViewRow =
[Link](0)
RichTextBox_template_name.Text =
[Link]("Template_name").[Link]()
DisplayTemplateImageFromTextbox()
End If
End Sub

Private Sub LoadTemplateImage(ByVal templateName As String)


Dim shouldCloseConnection As Boolean = False
Try
If [Link] <> [Link] Then
[Link]()
shouldCloseConnection = True
End If
Dim query As String = "SELECT Image_Template FROM
tbl_template WHERE Template_Name = @templateName LIMIT 1"
Using cmd As New MySqlCommand(query, [Link])
[Link]("@templateName",
templateName)
Dim imgData As Object = [Link]()
If imgData IsNot Nothing AndAlso Not IsDBNull(imgData)
Then
Dim imgBytes() As Byte = CType(imgData, Byte())
Using ms As New [Link](imgBytes)
PictureBox_template_upper.Image =
[Link](ms)
End Using
Else
PictureBox_template_upper.Image = Nothing
End If
End Using
Catch ex As Exception
[Link]("Error loading template image: " &
[Link], "Error", [Link], [Link])
PictureBox_template_upper.Image = Nothing
Finally
If shouldCloseConnection Then
[Link]()
End If
End Try
End Sub

Private Sub DisplayTemplateImageFromTextbox()


Dim templateName As String =
RichTextBox_template_name.[Link]()
If Not [Link](templateName) Then
LoadTemplateImage(templateName)
Else
PictureBox_template_upper.Image = Nothing
End If
End Sub

Private Sub LinkLabel_tempale_LinkClicked(ByVal sender As


[Link], ByVal e As
[Link]) Handles
LinkLabel_tempale.LinkClicked
Dim chooseTemplateForm As New frmchoose_template()
If [Link]() = [Link] Then
RichTextBox_template_name.Text =
[Link]
PictureBox_template_upper.Image =
[Link]
DisplayTemplateImageFromTextbox()
End If
End Sub
Private Sub btnupdate_female_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnupdate_female.Click
Try
If [Link] = 0 Then
[Link]("Please select a record to update.", "No
Selection", [Link], [Link])
Exit Sub
End If
If [Link](txtfemale_name.Text) Then
[Link]("Female name is required.", "Validation
Error", [Link], [Link])
txtfemale_name.Focus()
Exit Sub
End If
Dim selectedRow As DataGridViewRow =
[Link](0)
Dim femaleNo As String =
[Link]([Link]("female_no").Value)
If [Link] <> [Link] Then
[Link]()
End If
Dim query As String = "UPDATE tblfemale_orders SET " & _
"female_name = @female_name,
Template_name = @Template_name, remarks = @remarks, " & _
"length_upper = @length_upper,
shoulder_upper = @shoulder_upper, figure_upper = @figure_upper, " & _
"bust_distance_upper =
@bust_distance_upper, body_upper = @body_upper, waist_upper =
@waist_upper, hips_upper = @hips_upper, neck_upper = @neck_upper, " & _
"sleeve_length_upper =
@sleeve_length_upper, sleeve_bottom_upper = @sleeve_bottom_upper,
sleeve_cuff_upper = @sleeve_cuff_upper, arm_hole_upper =
@arm_hole_upper, remarks_upper = @remarks_upper, " & _
"length_lower = @length_lower,
waist_lower = @waist_lower, hips_lower = @hips_lower, thigh_lower =
@thigh_lower, knee_lower = @knee_lower, bottom_lower = @bottom_lower,
crotch_lower = @crotch_lower, remarks_lower = @remarks_lower " & _
"WHERE female_no = @female_no"
Using Comm As New MySqlCommand(query, [Link])
[Link]("@female_no", femaleNo)
[Link]("@female_name",
txtfemale_name.Text)
[Link]("@Template_name",
RichTextBox_template_name.Text)
[Link]("@remarks",
[Link])
[Link]("@length_upper",
GetDecimalOrNull(txtfemale_length_upper.Text))
[Link]("@shoulder_upper",
GetDecimalOrNull(txtfemale_shoulder_upper.Text))
[Link]("@figure_upper",
GetDecimalOrNull(txtfemale_figure_upper.Text))
[Link]("@bust_distance_upper",
GetDecimalOrNull(txtfemale_bust_distance_upper.Text))
[Link]("@body_upper",
GetDecimalOrNull(txtfemale_body_upper.Text))
[Link]("@waist_upper",
GetDecimalOrNull(txtfemale_waist_upper.Text))
[Link]("@hips_upper",
GetDecimalOrNull(txtfemale_hips_upper.Text))
[Link]("@neck_upper",
GetDecimalOrNull(txtfemale_neck_upper.Text))
[Link]("@sleeve_length_upper",
GetDecimalOrNull(txtfemale_sleeve_length_upper.Text))
[Link]("@sleeve_bottom_upper",
GetDecimalOrNull(txtfemale_sleeve_bottom_upper.Text))
[Link]("@sleeve_cuff_upper",
GetDecimalOrNull(txtfemale_sleeve_cuff_upper.Text))
[Link]("@arm_hole_upper",
GetDecimalOrNull(txtfemale_arm_hole_upper.Text))
[Link]("@remarks_upper",
txtfemale_remarks_upper.Text)
[Link]("@length_lower",
GetDecimalOrNull(txtfemale_length_lower.Text))
[Link]("@waist_lower",
GetDecimalOrNull(txtfemale_waist_lower.Text))
[Link]("@hips_lower",
GetDecimalOrNull(txtfemale_hips_lower.Text))
[Link]("@thigh_lower",
GetDecimalOrNull(txtfemale_thigh_lower.Text))
[Link]("@knee_lower",
GetDecimalOrNull(txtfemale_knee_lower.Text))
[Link]("@bottom_lower",
GetDecimalOrNull(txtfemale_bottom_lower.Text))
[Link]("@crotch_lower",
GetDecimalOrNull(txtfemale_crotch_lower.Text))
[Link]("@remarks_lower",
txtfemale_remarks_lower.Text)
[Link]()
End Using
[Link]("Female order updated successfully!",
"Success", [Link], [Link])
ClearForm()
LoadFemaleOrders()
SetControlsEnabled(False)
LinkLabel_tempale.Enabled = False
[Link] = False
[Link] = False
btnupdate_female.Visible = False
lblsave_female.Visible = False
[Link] = True
[Link] = True
Catch ex As Exception
[Link]("Error updating female order: " &
[Link], "Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Function GetDecimalOrNull(ByVal text As String) As Object


If [Link](text) Then
Return [Link]
End If
Try
Return [Link](text)
Catch ex As FormatException
[Link]("Invalid numeric input: " & text, "Error",
[Link], [Link])
Return [Link]
End Try
End Function
Private Sub ClearForm()
lblfemale_No.Text = ""
txtfemale_name.Clear()
RichTextBox_template_name.Clear()
[Link]()
PictureBox_template_upper.Image = Nothing
txtfemale_length_upper.Clear()
txtfemale_shoulder_upper.Clear()
txtfemale_figure_upper.Clear()
txtfemale_bust_distance_upper.Clear()
txtfemale_body_upper.Clear()
txtfemale_waist_upper.Clear()
txtfemale_hips_upper.Clear()
txtfemale_neck_upper.Clear()
txtfemale_sleeve_length_upper.Clear()
txtfemale_sleeve_bottom_upper.Clear()
txtfemale_sleeve_cuff_upper.Clear()
txtfemale_arm_hole_upper.Clear()
txtfemale_remarks_upper.Clear()
txtfemale_length_lower.Clear()
txtfemale_waist_lower.Clear()
txtfemale_hips_lower.Clear()
txtfemale_thigh_lower.Clear()
txtfemale_knee_lower.Clear()
txtfemale_bottom_lower.Clear()
txtfemale_crotch_lower.Clear()
txtfemale_remarks_lower.Clear()
SetControlsEnabled(False)
End Sub

Private Sub SetControlsEnabled(ByVal enabled As Boolean)


Dim controls As Control() = {txtfemale_length_upper,
txtfemale_shoulder_upper, txtfemale_figure_upper,
txtfemale_bust_distance_upper, txtfemale_body_upper,
txtfemale_waist_upper, txtfemale_hips_upper, txtfemale_neck_upper,
txtfemale_sleeve_length_upper, txtfemale_sleeve_bottom_upper,
txtfemale_sleeve_cuff_upper, txtfemale_arm_hole_upper,
txtfemale_remarks_upper, txtfemale_length_lower, txtfemale_waist_lower,
txtfemale_hips_lower, txtfemale_thigh_lower, txtfemale_knee_lower,
txtfemale_bottom_lower, txtfemale_crotch_lower, txtfemale_remarks_lower,
txtfemale_name, RichTextBox_template_name, txtremarks, btnupdate_female}
For Each ctrl As Control In controls
[Link] = enabled
Next
lblfemale_No.Enabled = enabled
End Sub
Private Sub btncancel_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
ClearForm()
[Link] = True
[Link] = True
btnupdate_female.Visible = False
lblsave_female.Visible = False
[Link] = False
[Link] = False
LinkLabel_tempale.Enabled = False
End Sub

Private Sub btnedit_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
If lblfemale_No.Text = "" Then
[Link]("Please select an order to edit.", "No
Selection", [Link], [Link])
Exit Sub
End If
SetControlsEnabled(True)
[Link] = False
[Link] = False
btnupdate_female.Visible = True
lblsave_female.Visible = True
[Link] = True
[Link] = True
LinkLabel_tempale.Enabled = True
End Sub
Private Sub NumericOnly_KeyPress(ByVal sender As Object, ByVal e As
KeyPressEventArgs)
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "." Then
[Link] = True
End If
If [Link] = "." AndAlso DirectCast(sender,
TextBox).[Link](".") > -1 Then
[Link] = True
End If
End Sub

Private Sub AttachNumericOnlyHandlers()


Dim numericFields As TextBox() = {txtfemale_length_upper,
txtfemale_shoulder_upper, txtfemale_figure_upper,
txtfemale_bust_distance_upper, txtfemale_body_upper,
txtfemale_waist_upper, txtfemale_hips_upper, txtfemale_neck_upper,
txtfemale_sleeve_length_upper, txtfemale_sleeve_bottom_upper,
txtfemale_sleeve_cuff_upper, txtfemale_arm_hole_upper,
txtfemale_length_lower, txtfemale_waist_lower, txtfemale_hips_lower,
txtfemale_thigh_lower, txtfemale_knee_lower, txtfemale_bottom_lower,
txtfemale_crotch_lower}
For Each txtBox As TextBox In numericFields
AddHandler [Link], AddressOf NumericOnly_KeyPress
Next
End Sub
Private Sub btnprint_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
Try
Dim ds As New femaledataset()
Dim dt As DataTable = [Link]("FemaleOrders")
For Each row As DataGridViewRow In [Link]
If Not [Link] Then
Dim dr As DataRow = [Link]()

dr("female_name") =
If([Link]("female_name").Value IsNot Nothing,
[Link]("female_name").[Link](), "-")
dr("Template_name") =
If([Link]("Template_name").Value IsNot Nothing,
[Link]("Template_name").[Link](), "-")
dr("remarks") = If([Link]("remarks").Value IsNot
Nothing, [Link]("remarks").[Link](), "-")
dr("quantity") =
If(IsNumeric([Link]("quantity").Value), [Link]("quantity").Value,
0)

Dim numericFields As String() = {


"length_upper", "shoulder_upper",
"figure_upper", "bust_distance_upper", "body_upper",
"waist_upper", "hips_upper", "neck_upper",
"sleeve_length_upper", "sleeve_bottom_upper",
"sleeve_cuff_upper", "arm_hole_upper",
"length_lower", "waist_lower", "hips_lower",
"thigh_lower", "knee_lower", "bottom_lower",
"crotch_lower"
}

For Each field In numericFields


If [Link](field).Value IsNot Nothing AndAlso
IsNumeric([Link](field).Value) Then
dr(field) =
[Link]([Link](field).Value)
Else
dr(field) = 0
End If
Next

[Link](dr)
End If
Next
If [Link] = 0 Then
[Link]("No data available to print.", "No
Data", [Link], [Link])
Exit Sub
End If

Dim rpt As New FemaleOrdersReport()


[Link](ds)

Dim mainForm As frmmain = [Link]().OfType(Of


frmmain)().FirstOrDefault()
Dim businessName As String = If(mainForm IsNot Nothing,
mainForm.lbl_business_name.[Link](), "Unknown Business")
Dim currentUser As String = If(mainForm IsNot Nothing,
[Link]().ToUpper(), "UNKNOWN USER")
Dim locationText As String = If(mainForm IsNot Nothing,
[Link](), "UNKNOWN LOCATION")
Dim ffDefs As FormulaFieldDefinitions =
[Link]
If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "businessname") Then
[Link]("BusinessName").Text =
"'" & [Link]("'", "''") & "'"
End If
If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "username") Then
[Link]("Username").Text = "'"
& [Link]("'", "''") & "'"
End If
If [Link](Of FormulaFieldDefinition)().Any(Function(f)
[Link]() = "location") Then
[Link]("Location").Text = "'"
& [Link]("'", "''") & "'"
End If
Dim frm As New frmFemaleReportPreview()
[Link] = rpt
[Link]()
[Link]()

Catch ex As Exception
[Link]("Error generating report: " & [Link] &
vbCrLf & "Stack Trace: " & [Link],
"Error", [Link],
[Link])
End Try
End Sub

Private Sub txtfemale_search_TextChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
txtfemale_search.TextChanged
FilterData()
End Sub
Private Sub ListBox_workers_SelectedIndexChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
ListBox_workers.SelectedIndexChanged
FilterData()
End Sub
Private Sub ComboBox_month_SelectedIndexChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
ComboBox_month.SelectedIndexChanged
FilterData()
End Sub
Private Sub frmfemalelist_update_Load(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
Try
[Link]()
SetTabIndex()
SetupDataGridView()
ClearForm()
LoadWorkers()
LoadMonths()
LoadFemaleOrders()
RichTextBox_template_name.ReadOnly = True
AttachNumericOnlyHandlers()
LinkLabel_tempale.Enabled = False
[Link] = [Link]
[Link] = [Link]
btnupdate_female.Cursor = [Link]
ListBox_workers.Cursor = [Link]
ListBox_workers.DropDownStyle = [Link]
Cursor = [Link]
Catch ex As Exception
[Link]("Error during form load: " & [Link],
"Error", [Link], [Link])
Finally
[Link](False)
End Try
End Sub
Private Sub txtyear_KeyPress(ByVal sender As Object, ByVal e As
KeyPressEventArgs) Handles [Link]
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) Then
[Link] = True
End If
If [Link] >= 4 AndAlso Not
[Link]([Link]) Then
[Link] = True
End If
End Sub

Private Sub txtyear_TextChanged(ByVal sender As [Link], ByVal


e As [Link]) Handles [Link]
FilterData()
End Sub
Private Sub LoadFemaleOrders(Optional ByVal whereClause As String =
"", Optional ByVal pageNumber As Integer = 1, Optional ByVal pageSize As
Integer = 50)
Try
If [Link] Is Nothing Then
[Link] = New DataTable()
Else
[Link]()
End If

Dim query As String = "SELECT order_id, female_no,


female_name, Template_name, quantity, price, balance, order_date,
remarks, " & _
"length_upper, shoulder_upper,
figure_upper, bust_distance_upper, body_upper, waist_upper, hips_upper,
neck_upper, " & _
"sleeve_length_upper,
sleeve_bottom_upper, sleeve_cuff_upper, arm_hole_upper, remarks_upper, "
& _
"length_lower, waist_lower, hips_lower,
thigh_lower, knee_lower, bottom_lower, crotch_lower, remarks_lower, " &
_
"Cutter_and_Sewer, Order_Status,
Dateordered " & _
"FROM tblfemale_orders"
If [Link]() <> "" Then
query &= " WHERE " & whereClause
End If
query &= " ORDER BY order_date DESC LIMIT @pageSize OFFSET
@offset"

Using conn As New


MySqlConnection([Link])
[Link]()
Using cmd As New MySqlCommand(query, conn)
[Link]("@pageSize", pageSize)
[Link]("@offset", (pageNumber -
1) * pageSize)

If [Link]("@search") AndAlso Not


[Link](txtfemale_search.Text) Then
[Link]("@search", "%" &
txtfemale_search.[Link]() & "%")
End If
If [Link]("@cutter_and_sewer") AndAlso
ListBox_workers.SelectedItem IsNot Nothing Then
[Link]("@cutter_and_sewer",
ListBox_workers.[Link]())
End If
If [Link]("@month") AndAlso
ComboBox_month.SelectedIndex > 0 Then
[Link]("@month",
ComboBox_month.SelectedIndex)
End If
If [Link]("@year") AndAlso Not
[Link]([Link]) Then
[Link]("@year",
[Link]())
End If

[Link] = New MySqlDataAdapter(cmd)


[Link]([Link])
End Using
[Link]()
End Using

[Link] = [Link]
Catch ex As Exception
[Link]("Error loading female orders: " &
[Link], "Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
End Class
List Of Workers Code
Imports [Link]
Public Class frmlist_of_workers
Private Sub frmlist_of_workers_Load(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
Try
LoadDataGrid()
FormatDataGridView()
SetupButtonHoverEffects()
Catch ex As Exception
[Link]("Error loading form: " & [Link] & vbCrLf
& [Link], "Form Load Error", [Link],
[Link])
End Try
End Sub
Private Sub SetupButtonHoverEffects()
Try
[Link] = [Link](0, 120, 215)
[Link] = [Link]
[Link] = [Link](220, 53, 69)
[Link] = [Link]

AddHandler [Link], AddressOf


btnapprove_MouseEnter
AddHandler [Link], AddressOf
btnapprove_MouseLeave
AddHandler [Link], AddressOf
btnblock_MouseEnter
AddHandler [Link], AddressOf
btnblock_MouseLeave
Catch ex As Exception
[Link]("Error setting up button hover effects: " &
[Link], "Error", [Link], [Link])
End Try
End Sub
Private Sub btnapprove_MouseEnter(ByVal sender As Object, ByVal e As
[Link])
[Link] = [Link](30, 144, 255)
End Sub

Private Sub btnapprove_MouseLeave(ByVal sender As Object, ByVal e As


[Link])
[Link] = [Link](0, 120, 215)
End Sub

Private Sub btnblock_MouseEnter(ByVal sender As Object, ByVal e As


[Link])
[Link] = [Link](255, 99, 71)
End Sub

Private Sub btnblock_MouseLeave(ByVal sender As Object, ByVal e As


[Link])
[Link] = [Link](220, 53, 69)
End Sub
Public Sub LoadDataGrid(Optional ByVal searchText As String = "")
Try
If [Link] = [Link] Then
[Link]()
End If

QUERY = "SELECT No, Name, Contact, " & _


"CASE " & _
"WHEN Status = 1 THEN 'Approved' " & _
"WHEN Status = 0 THEN 'Blocked' " & _
"ELSE 'Unknown' END AS Status " & _
"FROM tbl_workers"

If searchText <> "" Then


QUERY &= " WHERE Name LIKE @SearchText OR Contact LIKE
@SearchText"
End If

Using cmd As New MySqlCommand(QUERY, CONN)


[Link]()
If searchText <> "" Then
[Link]("@SearchText", "%" &
searchText & "%")
End If

[Link]()
DA = New MySqlDataAdapter(cmd)
[Link](DT)

[Link] = DT
FormatDataGridView()
End Using
Catch ex As MySqlException
[Link]("Database error loading data: " &
[Link], "Database Error", [Link],
[Link])
Catch ex As Exception
[Link]("Error loading data: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Sub FormatDataGridView()


Try
With DataGridView1
.AutoSizeColumnsMode =
[Link]
.RowHeadersVisible = False
.SelectionMode = [Link]
.MultiSelect = False

If .Columns("No") IsNot Nothing Then


.Columns("No").HeaderText = "Worker ID"
.Columns("No").Width = 100
End If

If .Columns("Name") IsNot Nothing Then


.Columns("Name").HeaderText = "Worker Name"
.Columns("Name").Width = 200
End If

If .Columns("Contact") IsNot Nothing Then


.Columns("Contact").HeaderText = "Contact Info"
.Columns("Contact").Width = 150
End If

If .Columns("Status") IsNot Nothing Then


.Columns("Status").HeaderText = "Status"
.Columns("Status").Width = 120
End If

.EnableHeadersVisualStyles = False
.[Link] = [Link]
.[Link] = [Link]
.[Link] = New Font("Arial",
10, [Link])
.[Link] =
[Link]
End With
Catch ex As Exception
[Link]("Error formatting DataGridView: " &
[Link], "Error", [Link], [Link])
End Try
End Sub
Private Sub txtAccount_search_TextChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
txtAccount_search.TextChanged
Try
LoadDataGrid(txtAccount_search.[Link]())
Catch ex As Exception
[Link]("Error searching data: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub btnapprove_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
UpdateStatus("Approved", 1)
End Sub
Private Sub btnblock_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
UpdateStatus("Blocked", 0)
End Sub
Private Sub UpdateStatus(ByVal newStatusText As String, ByVal
newStatusValue As Integer)
Try
If [Link] = 0 Then
[Link]("Please select a worker first.",
"Warning", [Link], [Link])
Return
End If

Dim selectedNo As Integer =


Convert.ToInt32([Link](0).Cells("No").Value)
Dim currentStatusText As String =
[Link](0).Cells("Status").[Link]()

' Avoid duplicate updates


If currentStatusText = newStatusText Then
[Link]("Worker is already " & newStatusText &
".", "Information", [Link], [Link])
Return
End If

QUERY = "UPDATE tbl_workers SET Status = @Status WHERE No =


@No"
Using cmd As New MySqlCommand(QUERY, CONN)
[Link]()
[Link]("@Status", newStatusValue)
[Link]("@No", selectedNo)
If [Link] = [Link] Then
[Link]()
End If

Dim rowsAffected As Integer = [Link]()


If rowsAffected > 0 Then
[Link]("Successfully set to " &
newStatusText & ".", "Success", [Link],
[Link])
LoadDataGrid(txtAccount_search.[Link]())
Else
[Link]("No rows were updated. Please check
your data.", "Warning", [Link], [Link])
End If
End Using
Catch ex As MySqlException
[Link]("Database error updating status: " &
[Link], "Database Error", [Link],
[Link])
Catch ex As Exception
[Link]("Error updating status: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub lblapprove_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
btnapprove_Click(sender, e)
End Sub
Private Sub lblblock_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
btnblock_Click(sender, e)
End Sub
End Class

Main Form Code


Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmmain
LoadLocation()
EnableManageAccountButton()
LoadSystemSettings()
UpdateAnalytics()
UpdateTotalPaid()
UpdateTotalUnpaid()
timer_for_refresh.Interval = 5000
timer_for_refresh.Enabled = True
timer_for_refresh.Start()

[Link] = 60000
[Link]()
[Link] = 5000
[Link]()
LoadLocation()
End Sub
Private Sub LoadSystemSettings()
Try
Dim query As String = "SELECT System_Name, PictureBox_logo
FROM tblsystem_logo_name ORDER BY No DESC LIMIT 1"
Using conn As New MySqlConnection(mdlConnection.str_conn)
' Use
Using cmd As New MySqlCommand(query, conn)
[Link]()
Using reader As MySqlDataReader =
[Link]()
If [Link]() Then
BusinessName =
reader("System_Name").ToString()
Dim imgBytes As Byte() =
If(reader("PictureBox_logo") Is [Link], Nothing,
CType(reader("PictureBox_logo"), Byte()))
If imgBytes IsNot Nothing AndAlso
[Link] > 0 Then
Using ms As New MemoryStream(imgBytes)
LogoImage = [Link](ms)
End Using
Else
LogoImage = Nothing
End If
End If
End Using
End Using
End Using
Catch ex As Exception
End Try
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Dim currentMonth As Integer = [Link]
If currentMonth <> LastUpdatedMonth Then
UpdateAnalytics()
ResetMonthlyTotalPaid()
LastUpdatedMonth = currentMonth
End If
End Sub
Private Sub Timer3_Tick(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
UpdateTotalPaid()
UpdateTotalUnpaid()
[Link] = GetTotalOrdersPending().ToString()
Catch ex As Exception
[Link]("Error updating totals: " & [Link])
End Try
End Sub
Private Sub UpdateTotalPaid()
Try
totalAmountPaid = GetTotalAmountPaid()
If [Link] Then
[Link](Sub() lbltotal_amount_paid.Text =
[Link]("C"))
Else
lbltotal_amount_paid.Text =
[Link]("C")
End If
Catch ex As Exception
[Link]("Error updating total paid: " & [Link])
End Try
End Sub
Private Sub UpdateTotalUnpaid()
Try
totalAmountUnpaid = GetTotalAmountUnpaid()
If [Link] Then
[Link](Sub() lbltotal_amount_unpaid.Text =
[Link]("C"))
Else
lbltotal_amount_unpaid.Text =
[Link]("C")
End If
Catch ex As Exception
[Link]("Error updating total unpaid: " &
[Link])
End Try
End Sub
Public Sub EnableManageAccountButton()
If lblRole_of_user IsNot Nothing Then
Dim isAdmin As Boolean =
lblRole_of_user.[Link]() = "admin"
Dim isStandard As Boolean =
lblRole_of_user.[Link]() = "standard"
If btnAccounts_main IsNot Nothing AndAlso lblAccounts_main
IsNot Nothing Then
btnAccounts_main.Visible = Not isStandard
lblAccounts_main.Visible = Not isStandard
End If
If btnsetting IsNot Nothing AndAlso lblsetting IsNot Nothing
Then
[Link] = isAdmin
[Link] = isAdmin
End If
End If
End Sub

Private Sub btnhome_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
CloseAllMdiChildren()
ShowPnlanalytics()
If lblheading IsNot Nothing Then [Link] = "HOMEPAGE"
If lblHome IsNot Nothing AndAlso btnhome IsNot Nothing Then
SetActiveControl(lblHome, btnhome)
End If
End Sub
Private Sub btnpayment_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmpayment(), "MANAGE PAYMENTS", lblpayment,
btnpayment)
End Sub
Private Sub btnprofile_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmprofile(), "MANAGE PROFILE", lblprofile,
btnprofile)
End Sub
Private Sub btnreports_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmreports(), "MANAGE REPORTS", lblreports,
btnreports)
End Sub
Private Sub btnsetting_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmsetting(), "MANAGE SETTINGS", lblsetting,
btnsetting)
End Sub
Private Sub btnadd_template_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles btnadd_template.Click
HidePnlanalytics()
OpenNewForm(New frmTemplates(), "MANAGE TEMPLATE",
lbladd_template, btnadd_template)
End Sub
Private Sub btnAccounts_main_Click(ByVal sender As Object, ByVal e
As EventArgs) Handles btnAccounts_main.Click
Try
HidePnlanalytics()
OpenNewForm(New frmAccounts(), "MANAGE ACCOUNTS",
lblAccounts_main, btnAccounts_main)
Catch ex As Exception
[Link]("An error occurred: " & [Link])
End Try
End Sub
Private Sub HidePnlanalytics()
If pnlanalytics IsNot Nothing Then
[Link] = False
End If
End Sub
Private Sub lblAccounts_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles lblAccounts_main.Click
Try
HidePnlanalytics()
OpenNewForm(New frmAccounts(), "MANAGE ACCOUNTS",
lblAccounts_main, btnAccounts_main)
Catch ex As Exception
[Link]("An error occurred: " & [Link])
End Try
End Sub
Private Sub lblhome_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
CloseAllMdiChildren()
ShowPnlanalytics()
If lblheading IsNot Nothing Then [Link] = "HOMEPAGE"
If lblHome IsNot Nothing AndAlso btnhome IsNot Nothing Then
SetActiveControl(lblHome, btnhome)
End If
End Sub
Private Sub lblpayment_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmpayment(), "MANAGE PAYMENTS", lblpayment,
btnpayment)
End Sub
Private Sub lblprofile_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmprofile(), "MANAGE PROFILE", lblprofile,
btnprofile)
End Sub
Private Sub lblreports_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmreports(), "MANAGE REPORTS", lblreports,
btnreports)
End Sub
Private Sub lblsetting_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmsetting(), "MANAGE SETTINGS", lblsetting,
btnsetting)
End Sub
Private Sub lbladd_template_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles lbladd_template.Click
HidePnlanalytics()
OpenNewForm(New frmTemplates(), "MANAGE TEMPLATE",
lbladd_template, btnadd_template)
End Sub
Public Property BusinessName As String
Get
Return lbl_business_name.Text
End Get
Set(ByVal value As String)
lbl_business_name.Text = value
End Set
End Property
Public Property LogoImage As Image
Get
Return PictureBox_frmmain_logo.Image
End Get
Set(ByVal value As Image)
If PictureBox_frmmain_logo.Image IsNot Nothing Then
PictureBox_frmmain_logo.[Link]()
End If
PictureBox_frmmain_logo.Image = value
End Set
End Property
Public Sub UpdateLogoAndBusinessName(ByVal newLogo As Image, ByVal
newBusinessName As String)
If newLogo IsNot Nothing Then
[Link] = newLogo
End If
[Link] = newBusinessName
frmlogin.PictureBox_login_logo.Image = newLogo
End Sub
Private Sub lblorderstatus_MouseHover(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub lblorderstatus_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub lbltotal_amount_paid_Click(ByVal sender As Object, ByVal
e As EventArgs) Handles lbltotal_amount_paid.Click
Try
UpdateTotalPaid()
Catch ex As Exception
[Link]("Error updating total paid: " & [Link])
End Try
End Sub
Private Sub lbltotal_amount_unpaid_Click(ByVal sender As Object,
ByVal e As EventArgs) Handles lbltotal_amount_unpaid.Click
Try
GetTotalOrdersunpaid()
Catch ex As Exception
[Link]("Error updating total unpaid: " &
[Link])
End Try
End Sub
Private Sub lbltotal_amount_paid_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles lbltotal_amount_paid.TextChanged
UpdateTotalPaid()
End Sub
Private Sub lbltotal_amount_unpaid_TextChanged(ByVal sender As
Object, ByVal e As EventArgs) Handles lbltotal_amount_unpaid.TextChanged
GetTotalOrdersunpaid()
End Sub
Private Sub btnnotification_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub btnnotification_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub lblnotification_MouseEnter(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
[Link] = New Font([Link],
[Link])
End Sub
Private Sub lblnotification_MouseLeave(ByVal sender As Object, ByVal
e As EventArgs) Handles [Link]
[Link] = [Link]
[Link] = New Font([Link],
[Link])
End Sub

Private Sub lblnotification_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles [Link]
OpenNotificationForm()
End Sub

Private Sub btnnotification_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles [Link]
OpenNotificationForm()
End Sub

Private Sub OpenNotificationForm()


[Link] = "SEND NOTIFICATION"
Using frm As New frmemail()
[Link] = [Link]
[Link] = [Link]
[Link]()
End Using

[Link] = [Link]
End Sub
Private Sub OpenNewForm(ByVal frm As Form, ByVal heading As String,
ByVal lbl As Label, ByVal btn As PictureBox)
CloseAllMdiChildren()
[Link] = Me
[Link] = [Link]
[Link] = [Link]
[Link]()
[Link]()
[Link]()
[Link] = True
[Link] = heading
SetActiveControl(lbl, btn)
End Sub
Private Sub frmmain_Resize(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
If pnlanalytics IsNot Nothing Then
[Link] = New Point(0, [Link])
[Link] = New Size([Link],
[Link] - [Link] - [Link])
End If
End Sub
Private Sub timer_for_refresh_Tick(ByVal sender As [Link],
ByVal e As [Link]) Handles timer_for_refresh.Tick
btnrefresh_Click(sender, e)
End Sud
Dim lbl As Label = TryCast(sender, Label)
If lbl IsNot Nothing Then
Dim btnName As String = [Link]("lbl", "btn")
Dim btn As PictureBox = TryCast([Link](btnName,
True).FirstOrDefault(), PictureBox)
If btn IsNot Nothing Then
SetActiveControl(lbl, btn)
Select Case [Link]
Case "lbladdorders"
HidePnlanalytics()
OpenNewForm(New frmtypes_of_order(), "CREATE
ORDERS", lbl, btn)
Case "lblAccounts_main"
HidePnlanalytics()
OpenNewForm(New frmAccounts(), "MANAGE
ACCOUNTS", lbl, btn)
End Select
End If
End If
End Sub
Private Sub UpdateAnalytics()
Try
[Link] = GetTotalOrders().ToString()
[Link] = GetTotalOrderspaid().ToString()
[Link] = GetTotalOrdersunpaid().ToString()
[Link] = GetTotalOrdersPending().ToString()
lblready_for_pickup.Text =
GetTotalOrdersReadyForPickup().ToString()
[Link] = GetTotalOrdersClaimed().ToString()
UpdateTotalUnpaid()
Catch ex As Exception
[Link]("Error updating analytics: " & [Link])
End Try
End Sub
Private Sub btnrefresh_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
Try
Dim totalOrders As Integer = GetTotalOrders()
Dim totalPaidOrders As Integer = GetTotalOrderspaid()
Dim totalUnpaidOrders As Integer = GetTotalOrdersunpaid()
Dim totalPendingOrders As Integer = GetTotalOrdersPending()
Dim totalReadyOrders As Integer =
GetTotalOrdersReadyForPickup()
Dim totalClaimedOrders As Integer = GetTotalOrdersClaimed()
Dim totalPaid As Decimal = GetTotalAmountPaid()
Dim totalUnpaid As Decimal = GetTotalAmountUnpaid()

If [Link] Then
[Link](Sub()
[Link] =
[Link]()
[Link] =
[Link]()
[Link] =
[Link]()
[Link] =
[Link]()
lblready_for_pickup.Text =
[Link]()
[Link] =
[Link]()
lbltotal_amount_paid.Text =
[Link]("C")
lbltotal_amount_unpaid.Text =
[Link]("C")
End Sub)
Else
[Link] = [Link]()
[Link] = [Link]()
[Link] = [Link]()
[Link] = [Link]()
lblready_for_pickup.Text = [Link]()
[Link] = [Link]()
lbltotal_amount_paid.Text = [Link]("C")
lbltotal_amount_unpaid.Text = [Link]("C")
End If
Catch ex As Exception
[Link]("Error refreshing dashboard: " & [Link])
End Try
End Sub
Public Sub CloseAllMdiChildren()
For Each child As Form In [Link]
[Link]()
Next
End Sub
Public Sub ShowPnlanalytics()
If pnlanalytics IsNot Nothing Then
[Link] = True
End If
End Sub
Public Sub SetActiveControl(ByVal lbl As Label, ByVal btn As
PictureBox)
If selectedLabel IsNot Nothing Then
[Link] = [Link]
[Link] = [Link]
End If
If selectedButton IsNot Nothing Then
[Link] = [Link]
End If
[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
selectedLabel = lbl
selectedButton = btn
End Sub
Private Function GetTotalAmountUnpaid() As Decimal
Dim totalAmount As Decimal = 0
Dim query As String = "SELECT SUM(balance) FROM tbl_orders WHERE
balance > 0 AND MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT SUM(balance) FROM tblfemale_orders
WHERE balance > 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT SUM(balance) FROM tblmale_orders
WHERE balance > 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT SUM(balance) FROM tblrepair_orders
WHERE balance > 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
If Not [Link](0) Then
totalAmount += [Link](0)
End If
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting total amount unpaid: " &
[Link])
End Try
Return totalAmount
End Function
Private Function GetTotalOrders() As Integer
Dim totalOrders As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
MONTH(order_date) = @currentMonth AND YEAR(order_date) = @currentYear "
& _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
MONTH(order_date) = @currentMonth AND YEAR(order_date) = @currentYear "
& _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalOrders += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting total orders: " & [Link])
End Try
Return totalOrders
End Function
Private Function GetTotalOrdersPaid() As Integer
Dim totalOrders As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
balance = 0 AND MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE balance = 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
balance = 0 AND MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE balance = 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalOrders += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting paid orders: " & [Link])
End Try
Return totalOrders
End Function
Private Function GetTotalOrdersUnpaid() As Integer
Dim totalOrders As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
balance > 0 AND MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE balance > 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
balance > 0 AND MONTH(order_date) = @currentMonth AND YEAR(order_date) =
@currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE balance > 0 AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalOrders += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting unpaid orders: " &
[Link])
End Try
Return totalOrders
End Function
Private Function GetTotalOrdersPending() As Integer
Dim totalPending As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
Order_Status = 'Pending' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE Order_Status = 'Pending' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
Order_Status = 'Pending' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE Order_Status = 'Pending' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalPending += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting pending orders: " &
[Link])
End Try
Return totalPending
End Function

Private Function GetTotalOrdersReadyForPickup() As Integer


Dim totalReady As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
Order_Status = 'Available to Claim' AND MONTH(order_date) =
@currentMonth AND YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE Order_Status = 'Available to Claim' AND MONTH(order_date) =
@currentMonth AND YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
Order_Status = 'Available to Claim' AND MONTH(order_date) =
@currentMonth AND YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE Order_Status = 'Available to Claim' AND MONTH(order_date) =
@currentMonth AND YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalReady += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting ready for pickup orders: " &
[Link])
End Try
Return totalReady
End Function
Private Function GetTotalOrdersClaimed() As Integer
Dim totalClaimed As Integer = 0
Dim query As String = "SELECT COUNT(*) FROM tbl_orders WHERE
Order_Status = 'Claimed' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblfemale_orders
WHERE Order_Status = 'Claimed' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblmale_orders WHERE
Order_Status = 'Claimed' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear " & _
"UNION ALL " & _
"SELECT COUNT(*) FROM tblrepair_orders
WHERE Order_Status = 'Claimed' AND MONTH(order_date) = @currentMonth AND
YEAR(order_date) = @currentYear"
Try
Using conn As New
MySqlConnection([Link])
Using command As New MySqlCommand(query, conn)
[Link]("@currentMonth",
[Link])
[Link]("@currentYear",
[Link])
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
While [Link]()
totalClaimed += reader.GetInt32(0)
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error getting claimed orders: " &
[Link])
End Try
Return totalClaimed
End Function
Private Sub lblLogout_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = hoverColor
[Link] = [Link]
[Link] = hoverColor
[Link] = [Link]
End Sub
Private Sub lblLogout_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = leaveColor
[Link] = [Link]
[Link] = leaveColor
[Link] = [Link]
End Sub
Private Sub btnLogout_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = hoverColor
[Link] = [Link]
[Link] = hoverColor
[Link] = [Link]
End Sub
Private Sub btnLogout_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = leaveColor
[Link] = [Link]
[Link] = leaveColor
[Link] = [Link]
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
Handles [Link]
[Link] = leaveColor
[Link] = [Link]
[Link] = leaveColor
[Link] = [Link]
End Sub
Private Sub btnlogout_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
PerformLogout()
End Sub
Private Sub lbllogout_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
PerformLogout()
End Sub
Private Sub frmmain_FormClosing(ByVal sender As Object, ByVal e As
FormClosingEventArgs) Handles [Link]
If Not isLoggingOut Then
[Link] = True
PerformLogout()
End If
End Sub
Public Function GetCurrentUserName() As String
Return [Link]()
End Function
Private Sub btnaddclient_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
Dim clientForm As New frmaddclients()
[Link] = Me
OpenNewForm(clientForm, "MANAGE CLIENTS", lbladdclient,
btnaddclient)
[Link]()
End Sub

Private Sub lbladdclient_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
HidePnlanalytics()
Dim clientForm As New frmaddclients()
[Link] = Me
OpenNewForm(clientForm, "MANAGE CLIENTS", lbladdclient,
btnaddclient)
[Link]()
End Sub
Public Sub LoadLocation()
Try
Dim query As String = "SELECT Location FROM tbllocation
WHERE id = 1"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]()
Dim result As Object = [Link]()

If result IsNot Nothing AndAlso Not IsDBNull(result)


Then
[Link] = [Link]()
Else
[Link] = ""
End If
End Using
End Using
Catch
[Link] = ""
End Try
End Sub
Private Sub lblorderstatus_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
OpenMonitorOrdersInAnalytics()
End Sub
Private Sub OpenMonitorOrdersInAnalytics()
HidePnlanalytics()

Dim monitorForm As New frmmonitor_orders()


[Link] = Me
[Link] = [Link]
[Link] = [Link]
[Link]()

[Link]()
[Link]()
[Link] = True

[Link] = "MANAGE ORDERS"


SetActiveControl(lblorderstatus, btnaddorders)
End Sub
Private Sub btnaddorders_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmtypes_of_order(), "CREATE ORDER",
lbladdorders, btnaddorders)
End Sub

Private Sub lbladdorders_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
HidePnlanalytics()
OpenNewForm(New frmtypes_of_order(), "CREATE ORDER",
lbladdorders, btnaddorders)
End Sub
Private Function GetTotalAmountPaid() As Decimal
Dim total As Decimal = 0
Dim qry As String = "SELECT COALESCE(SUM(Amount_paid),0) " &
"FROM tblpayment " &
"WHERE MONTH(STR_TO_DATE(Dateordered, '%Y-
%m-%d')) = @m " &
" AND YEAR(STR_TO_DATE(Dateordered, '%Y-%m-
%d')) = @y"
Try
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(qry, conn)
[Link]("@m",
[Link])
[Link]("@y", [Link])
[Link]()
Dim res = [Link]()
If res IsNot Nothing AndAlso Not IsDBNull(res) Then
total = [Link](res)
End Using
End Using
Catch ex As Exception
[Link]("Error getting total amount paid: " &
[Link])
End Try
Return total
End Function
Private Sub ResetMonthlyTotalPaid()
Try
Dim delQry As String = "DELETE FROM tblpayment WHERE
STR_TO_DATE(Dateordered, '%Y-%m-%d') < @Threshold"
Using cmd As New MySqlCommand(delQry, [Link])
[Link]("@Threshold",
[Link](-1).Date)
If [Link] <> [Link] Then
[Link]()
[Link]()
End Using
totalAmountPaid = 0
lbltotal_amount_paid.Text = [Link]("C")
Catch ex As Exception
[Link]("Error resetting total paid: " & [Link])
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub
Private Sub lblmainpaid_TextAlignChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
[Link] = GetTotalOrderspaid().ToString()
End Sub

Private Sub lblunpaid_TextAlignChanged(ByVal sender As Object, ByVal


e As EventArgs) Handles [Link]
[Link] = GetTotalOrdersunpaid().ToString()
End Sub

Private Sub lblmainpending_TextAlignChanged(ByVal sender As Object,


ByVal e As EventArgs) Handles [Link]
[Link] = GetTotalOrdersPending().ToString()
End Sub

Private Sub lblmainclaimed_TextAlignChanged(ByVal sender As Object,


ByVal e As EventArgs) Handles [Link]
[Link] = GetTotalOrdersClaimed().ToString()
End Sub
Private Sub frmmain_FormClosed(ByVal sender As Object, ByVal e As
FormClosedEventArgs) Handles [Link]
If [Link](Of frmlogin)().Any() Then Exit
Sub
Dim frm As New frmlogin()
[Link]()
End Sub
Public Sub PerformLogout()
Try
If isLoggingOut Then Exit Sub
isLoggingOut = True
CloseAllMdiChildren()
If pnlanalytics IsNot Nothing Then [Link] =
False
If selectedLabel IsNot Nothing Then
[Link] = [Link]
[Link] = [Link]
End If
If selectedButton IsNot Nothing Then
[Link] = [Link]
If [Link] IsNot Nothing AndAlso
[Link] = [Link] Then
[Link]()
End If
Dim loginForm As New frmlogin()
[Link] = True
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
RemoveHandler [Link], AddressOf frmmain_FormClosing
[Link]()

Catch ex As Exception
[Link]("Error during logout: " & [Link],
"Logout Error", [Link], [Link])
Finally
isLoggingOut = False
End Try
End Sub
End Class

Male Measurement Code


Imports [Link]
Public Class frmmale_measurement
Private Sub frmmale_measurement_Load(ByVal sender As Object, ByVal e
As EventArgs) Handles [Link]
[Link] = [Link]
NumericUpDown_quantity.Minimum = 1
NumericUpDown_quantity.Value = 1
txttotal_amount.ReadOnly = True

[Link] = [Link]
Cursor = [Link]
btnview_list.Cursor = [Link]
radiobutton_downpayment.Cursor = [Link]
radiobutton_fullpay.Cursor = [Link]
NumericUpDown_quantity.Cursor = [Link]

cbopayment_method.[Link]()
cbopayment_method.[Link]("Cash")
cbopayment_method.[Link]("E-Cash")
cbopayment_method.SelectedIndex = 0
LoadClients()
ClearForm()
AttachNumericOnlyHandlersSecondSet()
End Sub

Private Sub LoadTemplateImage(ByVal templateName As String)


Try
If [Link] <> [Link] Then
[Link]()
Dim query As String = "SELECT Image_Template, Template_Price
FROM tbl_template WHERE Template_Name = @templateName"
Using Comm As New MySqlCommand(query, [Link])
[Link]("@templateName",
templateName)
Using dr As MySqlDataReader = [Link]()
If [Link]() Then
If Not IsDBNull(dr("Image_Template")) Then
Dim imgData As Byte() =
DirectCast(dr("Image_Template"), Byte())
Using ms As New [Link](imgData)
PictureBox_template_upper.Image =
[Link](ms)
End Using
Else
PictureBox_template_upper.Image = Nothing
End If
[Link] =
If(IsDBNull(dr("Template_Price")), "", dr("Template_Price").ToString())
Else
PictureBox_template_upper.Image = Nothing
[Link]()
End If
End Using
End Using
Catch ex As Exception
[Link]("Error loading template details: " &
[Link])
Finally
[Link]()
End Try
End Sub

Private Sub LoadClients()


Try
If [Link] <> [Link] Then
[Link]()
Dim query As String = "SELECT No, Name FROM tbl_clients"
Using Comm As New MySqlCommand(query, [Link])
Using dr As MySqlDataReader = [Link]()
Dim autoComplete As New
AutoCompleteStringCollection()
While [Link]()
[Link](dr("Name").ToString())
End While
txtmale_name.AutoCompleteMode =
[Link]
txtmale_name.AutoCompleteSource =
[Link]
txtmale_name.AutoCompleteCustomSource = autoComplete
End Using
End Using
Catch ex As Exception
[Link]("Error loading clients: " & [Link])
Finally
[Link]()
End Try
End Sub

Private Sub txtmale_name_TextChanged(ByVal sender As Object, ByVal e


As EventArgs) Handles txtmale_name.TextChanged
Try
If [Link] <> [Link] Then
[Link]()
Dim query As String = "SELECT No FROM tbl_clients WHERE Name
= @name"
Using Comm As New MySqlCommand(query, [Link])
[Link]("@name", txtmale_name.Text)
Dim result As Object = [Link]()
If result IsNot Nothing Then
lblmale_No.Text = [Link]()
Else
lblmale_No.Text = ""
End If
End Using
Catch ex As Exception
[Link]("Error retrieving client number: " &
[Link])
Finally
[Link]()
End Try
[Link] = [Link](txtmale_name.Text)
OrElse txtmale_name.[Link]().Length = 0
End Sub
Private Sub ClearForm()
cbopayment_method.SelectedIndex = 0
lblmale_No.Text = ""
txtmale_name.Clear()
RichTextBox_template_name.Clear()
NumericUpDown_quantity.Value = 1
[Link]()
txttotal_amount.Clear()
[Link] = "0.00"
radiobutton_downpayment.Checked = True
radiobutton_fullpay.Checked = False
txtamount_paid.Clear()
[Link]()
PictureBox_template_upper.Image = Nothing
[Link] = [Link]
txtmale_name.Focus()
txtlength_upper.Clear()
txtshoulder_upper.Clear()
txtfigure_upper.Clear()
txtbody_upper.Clear()
txtwaistline_upper.Clear()
txthips_upper.Clear()
txtneck_upper.Clear()
txtsleeve_length_upper.Clear()
txtsleeve_bottom_upper.Clear()
txtsleeve_bottom_cuff_upper.Clear()
txtarm_hole_upper.Clear()
txtremark_upper_upper.Clear()
txtlength_lower.Clear()
txtwaist_lower.Clear()
txthips_lower_lower.Clear()
txtthigh_lower.Clear()
txtknee_lower.Clear()
txtbottom_lower.Clear()
txtcrotch_lower.Clear()
txtremark_lower.Clear()
End Sub
Private Sub NumericUpDown_quantity_ValueChanged(ByVal sender As
Object, ByVal e As EventArgs) Handles
NumericUpDown_quantity.ValueChanged
If NumericUpDown_quantity.Value > 1 Then
[Link] = False
Else
[Link] = True
End If
UpdateTotalAmount()
End Sub
Private Sub txtprice_KeyPress(ByVal sender As Object, ByVal e As
KeyPressEventArgs) Handles [Link]
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "." Then
[Link] = True
End If
If [Link] = "." AndAlso [Link](".") Then
[Link] = True
End If
End Sub

Private Sub txtprice_TextChanged(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
UpdateTotalAmount()
End Sub
Private Sub txtamount_paid_TextChanged(ByVal sender As Object, ByVal
e As EventArgs) Handles txtamount_paid.TextChanged
UpdateBalance()
End Sub
Private Function GetDecimalOrNull(ByVal text As String) As Object
If [Link](text) OrElse [Link]().Length = 0 Then
Return [Link]
End If
Dim num As Decimal
If [Link](text, num) Then
Return num
End If
Return [Link]
End Function
Private Sub btnsave_male_MouseEnter(ByVal sender As Object, ByVal e
As EventArgs) Handles btnsave_male.MouseEnter
btnsave_male.Cursor = [Link]
btnsave_male.ForeColor = [Link]
End Sub
Private Sub btnsave_male_MouseLeave(ByVal sender As Object, ByVal e
As EventArgs) Handles btnsave_male.MouseLeave
btnsave_male.Cursor = [Link]
btnsave_male.ForeColor = [Link]
End Sub
Private Sub txtlength_upper_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtlength_upper.KeyDown
If [Link] = [Link] Then
txtshoulder_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtshoulder_upper_KeyDown(ByVal sender As Object, ByVal
e As KeyEventArgs) Handles txtshoulder_upper.KeyDown
If [Link] = [Link] Then
txtfigure_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtfigure_upper_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtfigure_upper.KeyDown
If [Link] = [Link] Then
txtbody_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtbody_upper_KeyDown(ByVal sender As Object, ByVal e As
KeyEventArgs) Handles txtbody_upper.KeyDown
If [Link] = [Link] Then
txtwaistline_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtwaistline_upper_KeyDown(ByVal sender As Object, ByVal
e As KeyEventArgs) Handles txtwaistline_upper.KeyDown
If [Link] = [Link] Then
txthips_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txthips_upper_KeyDown(ByVal sender As Object, ByVal e As
KeyEventArgs) Handles txthips_upper.KeyDown
If [Link] = [Link] Then
txtneck_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtneck_upper_KeyDown(ByVal sender As Object, ByVal e As
KeyEventArgs) Handles txtneck_upper.KeyDown
If [Link] = [Link] Then
txtsleeve_length_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtsleeve_length_upper_KeyDown(ByVal sender As Object,
ByVal e As KeyEventArgs) Handles txtsleeve_length_upper.KeyDown
If [Link] = [Link] Then
txtsleeve_bottom_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtsleeve_bottom_upper_KeyDown(ByVal sender As Object,
ByVal e As KeyEventArgs) Handles txtsleeve_bottom_upper.KeyDown
If [Link] = [Link] Then
txtsleeve_bottom_cuff_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtsleeve_bottom_cuff_upper_KeyDown(ByVal sender As
Object, ByVal e As KeyEventArgs) Handles
txtsleeve_bottom_cuff_upper.KeyDown
If [Link] = [Link] Then
txtarm_hole_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtarm_hole_upper_KeyDown(ByVal sender As Object, ByVal
e As KeyEventArgs) Handles txtarm_hole_upper.KeyDown
If [Link] = [Link] Then
txtremark_upper_upper.Focus()
[Link] = True
End If
End Sub
Private Sub txtremark_upper_upper_KeyDown(ByVal sender As Object,
ByVal e As KeyEventArgs) Handles txtremark_upper_upper.KeyDown
If [Link] = [Link] Then
If [Link] Then
txtlength_lower.Focus()
End If
[Link] = True
End If
End Sub
Private Sub txtlength_lower_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtlength_lower.KeyDown
If [Link] = [Link] Then
txtwaist_lower.Focus()
[Link] = True
End If
End Sub
Private Sub txtwaist_lower_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtwaist_lower.KeyDown
If [Link] = [Link] Then
txthips_lower_lower.Focus()
[Link] = True
End If
End Sub
Private Sub txthips_lower_lower_KeyDown(ByVal sender As Object,
ByVal e As KeyEventArgs) Handles txthips_lower_lower.KeyDown
If [Link] = [Link] Then
txtthigh_lower.Focus()
[Link] = True
End If
End Sub
Private Sub txtthigh_lower_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtthigh_lower.KeyDown
If [Link] = [Link] Then
txtknee_lower.Focus()
[Link] = True
End If
End Sub
Private Sub txtknee_lower_KeyDown(ByVal sender As Object, ByVal e As
KeyEventArgs) Handles txtknee_lower.KeyDown
If [Link] = [Link] Then
txtbottom_lower.Focus()
[Link] = True
End If
End Sub
Private Sub txtbottom_lower_KeyDown(ByVal sender As Object, ByVal e
As KeyEventArgs) Handles txtbottom_lower.KeyDown
If [Link] = [Link] Then
txtcrotch_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtcrotch_lower_KeyDown(ByVal sender As Object, ByVal e


As KeyEventArgs) Handles txtcrotch_lower.KeyDown
If [Link] = [Link] Then
txtremark_lower.Focus()
[Link] = True
End If
End Sub

Private Sub txtremark_lower_KeyDown(ByVal sender As Object, ByVal e


As KeyEventArgs) Handles txtremark_lower.KeyDown
If [Link] = [Link] Then
[Link] = True
End If
End Sub

Private Sub radiobutton_fullpay_CheckedChanged(ByVal sender As


Object, ByVal e As EventArgs) Handles radiobutton_fullpay.CheckedChanged
fullpay()
End Sub
Private Sub LinkLabel_tempale_LinkClicked(ByVal sender As
[Link], ByVal e As
[Link]) Handles
LinkLabel_tempale.LinkClicked
Dim chooseTemplateForm As New frmchoose_template()
If [Link]() = [Link] Then
RichTextBox_template_name.Text =
[Link]
[Link] = [Link]
PictureBox_template_upper.Image =
[Link]
End If
End Sub

Private Sub btnview_list_Click(ByVal sender As [Link], ByVal


e As [Link]) Handles btnview_list.Click
frmmalelist_update.ShowDialog()
End Sub

Private Sub NumericOnly_KeyPress(ByVal sender As Object, ByVal e As


KeyPressEventArgs)
Dim textBox As TextBox = DirectCast(sender, TextBox)
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "."c Then
[Link] = True
End If
If [Link] = "."c AndAlso [Link](".") Then
[Link] = True
End If
End Sub
Private Sub UpdateTotalAmount()
Dim price As Decimal
Dim quantity As Integer =
Convert.ToInt32(NumericUpDown_quantity.Value)
If quantity <= 0 Then
txttotal_amount.Clear()
[Link]("Quantity must be greater than zero.",
"Invalid Quantity", [Link], [Link])
NumericUpDown_quantity.Value = 1
Return
End If
If [Link]([Link], price) Then
If price < 0 Then
[Link] = ""
txttotal_amount.Clear()
[Link]("Price cannot be negative.", "Invalid
Price", [Link], [Link])
Return
End If
Dim totalAmount As Decimal = price * quantity
If totalAmount > 1000000 Then
txttotal_amount.Clear()
[Link]("Total amount exceeds maximum limit of
1,000,000.", "Invalid Total", [Link],
[Link])
Return
End If
txttotal_amount.Text = [Link]("F2")
UpdateBalance()
Else
txttotal_amount.Clear()
If Not ([Link]([Link]) OrElse
[Link]().Length = 0) Then
[Link]("Please enter a valid price.", "Invalid
Price", [Link], [Link])
End If
End If
End Sub
Private Sub txtamount_paid_KeyPress(ByVal sender As Object, ByVal e
As KeyPressEventArgs) Handles txtamount_paid.KeyPress
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "." Then
[Link] = True
End If
If [Link] = "." AndAlso txtamount_paid.[Link](".")
Then
[Link] = True
End If
End Sub
Private Sub UpdateBalance()
Try
Dim amountPaid As Decimal = 0
Dim totalAmount As Decimal = 0
If Not [Link](txtamount_paid.Text) AndAlso
txtamount_paid.[Link]().Length > 0 Then
If Not [Link](txtamount_paid.Text, amountPaid)
Then
[Link]("Please enter a valid amount paid.",
"Invalid Amount", [Link], [Link])
txtamount_paid.Text = ""
[Link] = "0.00"
Exit Sub
End If
If amountPaid < 0 Then
[Link]("Amount paid cannot be negative.",
"Invalid Amount", [Link], [Link])
txtamount_paid.Text = ""
[Link] = "0.00"
Exit Sub
End If
End If
If Not [Link](txttotal_amount.Text) AndAlso
txttotal_amount.[Link]().Length > 0 Then
If Not [Link](txttotal_amount.Text,
totalAmount) Then
[Link]("Invalid total amount format.",
"Invalid Amount", [Link], [Link])
txttotal_amount.Text = ""
[Link] = "0.00"
Exit Sub
End If
End If

If amountPaid > totalAmount AndAlso Not


radiobutton_fullpay.Checked Then
[Link]("Amount paid cannot exceed total amount.
Please correct the amount.", "Invalid Amount", [Link],
[Link])
txtamount_paid.Focus()
[Link] = "0.00"
Exit Sub
End If
Dim balance As Decimal = totalAmount - amountPaid
[Link] = [Link]("F2")
Catch ex As Exception
[Link]("Error: " & [Link], "Exception",
[Link], [Link])
[Link] = "0.00"
End Try
End Sub
Private Sub fullpay()
If radiobutton_fullpay.Checked Then
If [Link](txttotal_amount.Text, 0) Then
txtamount_paid.Text = txttotal_amount.Text
Else
txtamount_paid.Text = "0.00"
End If
Else
txtamount_paid.Text = ""
End If
UpdateBalance()
End Sub
Private Sub btnsave_male_Click(ByVal sender As [Link], ByVal
e As [Link]) Handles btnsave_male.Click
Try
If [Link](lblmale_No.Text) OrElse
lblmale_No.[Link]().Length = 0 OrElse
[Link](txtmale_name.Text) OrElse
txtmale_name.[Link]().Length = 0 OrElse
NumericUpDown_quantity.Value <= 0 OrElse
[Link]([Link]) OrElse
[Link]().Length = 0 Then
[Link]("Please fill in all required fields
before saving!", "Missing Data", [Link],
[Link])
Exit Sub
End If
If cbopayment_method.SelectedIndex = -1 Then
[Link]("Please select a payment method.",
"Missing Data", [Link], [Link])
cbopayment_method.Focus()
Exit Sub
End If
Dim price As Decimal
If Not [Link]([Link], price) OrElse price
<= 0 Then
[Link]("Please enter a valid positive price.",
"Invalid Price", [Link], [Link])
[Link]()
Exit Sub
End If
Dim amountPaid As Decimal
If Not [Link](txtamount_paid.Text, amountPaid)
OrElse amountPaid < 0 Then
[Link]("Please enter a valid non-negative
amount paid.", "Invalid Amount", [Link],
[Link])
txtamount_paid.Focus()
Exit Sub
End If
Dim totalAmount As Decimal
If Not [Link](txttotal_amount.Text, totalAmount)
OrElse totalAmount <= 0 Then
[Link]("Invalid total amount format.", "Invalid
Amount", [Link], [Link])
txttotal_amount.Focus()
Exit Sub
End If
If amountPaid > totalAmount AndAlso Not
radiobutton_fullpay.Checked Then
[Link]("Amount paid cannot exceed total amount.
Please correct the amount.", "Invalid Amount", [Link],
[Link])
txtamount_paid.Focus()
Exit Sub
End If
If [Link] <> [Link] Then
[Link]()
End If
Dim nameExists As Boolean
Dim nameQuery As String = "SELECT COUNT(*) FROM tbl_clients
WHERE Name = @name"
Using nameComm As New MySqlCommand(nameQuery,
[Link])
[Link]("@name",
txtmale_name.Text)
nameExists = Convert.ToInt32([Link]()) >
0
End Using
If Not nameExists Then
Dim result As DialogResult = [Link]("The name
is not registered. Would you like to register it?", "Name Not Found",
[Link], [Link])
If result = [Link] Then
Dim addClientForm As New frmaddclients()
[Link]()
End If
Exit Sub
End If

Dim quantity As Integer = CInt(NumericUpDown_quantity.Value)


Dim downPayment As Decimal =
If(radiobutton_downpayment.Checked, amountPaid, 0)
Dim fullPayment As Decimal = If(radiobutton_fullpay.Checked,
totalAmount, 0)
Dim balance As Decimal = totalAmount - downPayment -
fullPayment
Dim currentDate As String = [Link]("yyyy-MM-dd")
Dim orderQuery As String = "INSERT INTO tblmale_orders
(male_no, male_name, Template_name, quantity, price, balance, remarks,
Order_Status, " & _
"length_upper, shoulder_upper, figure_upper, body_upper,
waistline_upper, hips_upper, neck_upper, sleeve_length_upper, " & _
"sleeve_bottom_upper, sleeve_bottom_cuff_upper,
arm_hole_upper, remark_upper_upper, length_lower, waist_lower,
hips_lower_lower, " & _
"thigh_lower, knee_lower, bottom_lower, crotch_lower,
remark_lower, Dateordered) " & _
"VALUES (@male_no, @male_name, @Template_name,
@quantity, @price, @balance, @remarks, 'Pending', " & _
"@length_upper, @shoulder_upper, @figure_upper,
@body_upper, @waistline_upper, @hips_upper, @neck_upper,
@sleeve_length_upper, " & _
"@sleeve_bottom_upper, @sleeve_bottom_cuff_upper,
@arm_hole_upper, @remark_upper_upper, @length_lower, @waist_lower,
@hips_lower_lower, " & _
"@thigh_lower, @knee_lower, @bottom_lower,
@crotch_lower, @remark_lower, @Dateordered)"
Using orderCmd As New MySqlCommand(orderQuery,
[Link])
[Link]("@male_no",
lblmale_No.Text)
[Link]("@male_name",
txtmale_name.Text)
[Link]("@Template_name",
RichTextBox_template_name.Text)
[Link]("@quantity", quantity)
[Link]("@price", price)
[Link]("@balance", balance)
[Link]("@remarks",
[Link])
[Link]("@length_upper",
GetDecimalOrNull(txtlength_upper.Text))
[Link]("@shoulder_upper",
GetDecimalOrNull(txtshoulder_upper.Text))
[Link]("@figure_upper",
GetDecimalOrNull(txtfigure_upper.Text))
[Link]("@body_upper",
GetDecimalOrNull(txtbody_upper.Text))
[Link]("@waistline_upper",
GetDecimalOrNull(txtwaistline_upper.Text))
[Link]("@hips_upper",
GetDecimalOrNull(txthips_upper.Text))
[Link]("@neck_upper",
GetDecimalOrNull(txtneck_upper.Text))
[Link]("@sleeve_length_upper",
GetDecimalOrNull(txtsleeve_length_upper.Text))
[Link]("@sleeve_bottom_upper",
GetDecimalOrNull(txtsleeve_bottom_upper.Text))

[Link]("@sleeve_bottom_cuff_upper",
GetDecimalOrNull(txtsleeve_bottom_cuff_upper.Text))
[Link]("@arm_hole_upper",
GetDecimalOrNull(txtarm_hole_upper.Text))
[Link]("@remark_upper_upper",
txtremark_upper_upper.Text)
[Link]("@length_lower",
GetDecimalOrNull(txtlength_lower.Text))
[Link]("@waist_lower",
GetDecimalOrNull(txtwaist_lower.Text))
[Link]("@hips_lower_lower",
GetDecimalOrNull(txthips_lower_lower.Text))
[Link]("@thigh_lower",
GetDecimalOrNull(txtthigh_lower.Text))
[Link]("@knee_lower",
GetDecimalOrNull(txtknee_lower.Text))
[Link]("@bottom_lower",
GetDecimalOrNull(txtbottom_lower.Text))
[Link]("@crotch_lower",
GetDecimalOrNull(txtcrotch_lower.Text))
[Link]("@remark_lower",
txtremark_lower.Text)
[Link]("@Dateordered",
currentDate)
[Link]()
End Using
Dim paymentQuery As String = "INSERT INTO tblpayment
(client_id, Name, Amount_paid, Dateordered, Payment) " & _
"VALUES (@client_id, @Name,
@Amount_paid, @Dateordered, @Payment)"
Using paymentCmd As New MySqlCommand(paymentQuery,
[Link])
[Link]("@client_id",
lblmale_No.Text)
[Link]("@Name",
txtmale_name.Text)
[Link]("@Amount_paid",
amountPaid)
[Link]("@Dateordered",
currentDate)
[Link]("@Payment",
cbopayment_method.[Link]())
[Link]()
End Using

[Link]("Order successfully saved!", "Success",


[Link], [Link])
ClearForm()
Catch ex As Exception
[Link]("Error: " & [Link], "Exception",
[Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub
End Class

Update Male List


Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmmalelist_update

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e


As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim row As DataGridViewRow = [Link]([Link])

lblmale_No.Text = [Link]("male_no").[Link]()
txtmale_name.Text = [Link]("male_name").[Link]()
RichTextBox_template_name.Text =
[Link]("Template_name").[Link]()
txtlength_upper.Text =
[Link]("length_upper").[Link]()
txtshoulder_upper.Text =
[Link]("shoulder_upper").[Link]()
txtfigure_upper.Text =
[Link]("figure_upper").[Link]()
txtbody_upper.Text =
[Link]("body_upper").[Link]()
txtwaistline_upper.Text =
[Link]("waistline_upper").[Link]()
txthips_upper.Text =
[Link]("hips_upper").[Link]()
txtneck_upper.Text =
[Link]("neck_upper").[Link]()
txtsleeve_length_upper.Text =
[Link]("sleeve_length_upper").[Link]()
txtsleeve_bottom_upper.Text =
[Link]("sleeve_bottom_upper").[Link]()
txtsleeve_bottom_cuff_upper.Text =
[Link]("sleeve_bottom_cuff_upper").[Link]()
txtarm_hole_upper.Text =
[Link]("arm_hole_upper").[Link]()
txtremark_upper_upper.Text =
[Link]("remark_upper_upper").[Link]()
txtlength_lower.Text =
[Link]("length_lower").[Link]()
txtwaist_lower.Text =
[Link]("waist_lower").[Link]()
txthips_lower_lower.Text =
[Link]("hips_lower_lower").[Link]()
txtthigh_lower.Text =
[Link]("thigh_lower").[Link]()
txtknee_lower.Text =
[Link]("knee_lower").[Link]()
txtbottom_lower.Text =
[Link]("bottom_lower").[Link]()
txtcrotch_lower.Text =
[Link]("crotch_lower").[Link]()
txtremark_lower.Text =
[Link]("remark_lower").[Link]()
[Link] = [Link]("remarks").[Link]()

Dim templateName As String =


[Link]("Template_name").[Link]()
LoadTemplateImage(templateName)
End If
End Sub
Private Sub LoadSystemLogoImage(ByVal imageData As Object)
Try
If imageData IsNot Nothing AndAlso Not IsDBNull(imageData)
Then
Dim bytes As Byte() = DirectCast(imageData, Byte())
Using ms As New [Link](bytes)
[Link] = [Link](ms)
End Using
Else
[Link] = Nothing
End If
Catch ex As Exception
[Link] = Nothing
End Try
End Sub

Private Sub LinkLabel_tempale_LinkClicked(ByVal sender As


[Link], ByVal e As
[Link]) Handles
LinkLabel_tempale.LinkClicked
Dim chooseTemplateForm As New frmchoose_template()
If [Link]() = [Link] Then
RichTextBox_template_name.Text =
[Link]
PictureBox_template.Image =
[Link]
DisplayTemplateImageFromTextbox()
End If
End Sub
Private Sub btnupdate_male_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnupdate_male.Click
Try
If [Link] = 0 Then
[Link]("Please select a record to update.", "No
Selection", [Link], [Link])
Exit Sub
End If
Dim selectedRow As DataGridViewRow =
[Link](0)
Dim maleNo As String =
[Link]([Link]("male_no").Value)
If [Link] <> [Link] Then
[Link]()
End If
Dim query As String = "UPDATE tblmale_orders SET " & _
"male_name = @male_name, Template_name
= @Template_name, remarks = @remarks, " & _
"length_upper = @length_upper,
shoulder_upper = @shoulder_upper, figure_upper = @figure_upper, " & _
"body_upper = @body_upper,
waistline_upper = @waistline_upper, hips_upper = @hips_upper, neck_upper
= @neck_upper, " & _
"sleeve_length_upper =
@sleeve_length_upper, sleeve_bottom_upper = @sleeve_bottom_upper, " & _
"sleeve_bottom_cuff_upper =
@sleeve_bottom_cuff_upper, arm_hole_upper = @arm_hole_upper, " & _
"remark_upper_upper =
@remark_upper_upper, length_lower = @length_lower, waist_lower =
@waist_lower, " & _
"hips_lower_lower = @hips_lower_lower,
thigh_lower = @thigh_lower, knee_lower = @knee_lower, " & _
"bottom_lower = @bottom_lower,
crotch_lower = @crotch_lower, remark_lower = @remark_lower " & _
"WHERE male_no = @male_no"
Using Comm As New MySqlCommand(query, [Link])
[Link]("@male_no", maleNo)
[Link]("@male_name",
txtmale_name.Text)
[Link]("@Template_name",
RichTextBox_template_name.Text)
[Link]("@remarks",
[Link])
[Link]("@length_upper",
ToNullableDecimal(txtlength_upper.Text))
[Link]("@shoulder_upper",
ToNullableDecimal(txtshoulder_upper.Text))
[Link]("@figure_upper",
ToNullableDecimal(txtfigure_upper.Text))
[Link]("@body_upper",
ToNullableDecimal(txtbody_upper.Text))
[Link]("@waistline_upper",
ToNullableDecimal(txtwaistline_upper.Text))
[Link]("@hips_upper",
ToNullableDecimal(txthips_upper.Text))
[Link]("@neck_upper",
ToNullableDecimal(txtneck_upper.Text))
[Link]("@sleeve_length_upper",
ToNullableDecimal(txtsleeve_length_upper.Text))
[Link]("@sleeve_bottom_upper",
ToNullableDecimal(txtsleeve_bottom_upper.Text))

[Link]("@sleeve_bottom_cuff_upper",
ToNullableDecimal(txtsleeve_bottom_cuff_upper.Text))
[Link]("@arm_hole_upper",
ToNullableDecimal(txtarm_hole_upper.Text))
[Link]("@remark_upper_upper",
txtremark_upper_upper.Text)
[Link]("@length_lower",
ToNullableDecimal(txtlength_lower.Text))
[Link]("@waist_lower",
ToNullableDecimal(txtwaist_lower.Text))
[Link]("@hips_lower_lower",
ToNullableDecimal(txthips_lower_lower.Text))
[Link]("@thigh_lower",
ToNullableDecimal(txtthigh_lower.Text))
[Link]("@knee_lower",
ToNullableDecimal(txtknee_lower.Text))
[Link]("@bottom_lower",
ToNullableDecimal(txtbottom_lower.Text))
[Link]("@crotch_lower",
ToNullableDecimal(txtcrotch_lower.Text))
[Link]("@remark_lower",
txtremark_lower.Text)
[Link]()
End Using
[Link]("Male order updated successfully!",
"Success", [Link], [Link])
ClearForm()
LoadMaleOrders()
falset()
LinkLabel_tempale.Enabled = False
[Link] = False
[Link] = False
btnupdate_male.Visible = False
lblsave_male.Visible = False
[Link] = True
[Link] = True
Catch ex As Exception
[Link]("Error updating male order: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Function ToNullableDecimal(ByVal value As String) As


Decimal?
If [Link](value) Then
Return Nothing
End If
Return [Link](value)
End Function

Private Sub ClearForm()


lblmale_No.Text = ""
txtmale_name.Clear()
RichTextBox_template_name.Clear()
[Link]()
PictureBox_template.Image = Nothing
txtlength_upper.Clear()
txtshoulder_upper.Clear()
txtfigure_upper.Clear()
txtbody_upper.Clear()
txtwaistline_upper.Clear()
txthips_upper.Clear()
txtneck_upper.Clear()
txtsleeve_length_upper.Clear()
txtsleeve_bottom_upper.Clear()
txtsleeve_bottom_cuff_upper.Clear()
txtarm_hole_upper.Clear()
txtremark_upper_upper.Clear()
txtlength_lower.Clear()
txtwaist_lower.Clear()
txthips_lower_lower.Clear()
txtthigh_lower.Clear()
txtknee_lower.Clear()
txtbottom_lower.Clear()
txtcrotch_lower.Clear()
txtremark_lower.Clear()
falset()
End Sub

Private Sub trueset()


txtlength_upper.Enabled = True
txtshoulder_upper.Enabled = True
txtfigure_upper.Enabled = True
txtbody_upper.Enabled = True
txtwaistline_upper.Enabled = True
txthips_upper.Enabled = True
txtneck_upper.Enabled = True
txtsleeve_length_upper.Enabled = True
txtsleeve_bottom_upper.Enabled = True
txtsleeve_bottom_cuff_upper.Enabled = True
txtarm_hole_upper.Enabled = True
txtremark_upper_upper.Enabled = True
txtlength_lower.Enabled = True
txtwaist_lower.Enabled = True
txthips_lower_lower.Enabled = True
txtthigh_lower.Enabled = True
txtknee_lower.Enabled = True
txtbottom_lower.Enabled = True
txtcrotch_lower.Enabled = True
txtremark_lower.Enabled = True
txtmale_name.Enabled = True
RichTextBox_template_name.Enabled = True
[Link] = True
btnupdate_male.Enabled = True
End Sub

Private Sub falset()


txtlength_upper.Enabled = False
txtshoulder_upper.Enabled = False
txtfigure_upper.Enabled = False
txtbody_upper.Enabled = False
txtwaistline_upper.Enabled = False
txthips_upper.Enabled = False
txtneck_upper.Enabled = False
txtsleeve_length_upper.Enabled = False
txtsleeve_bottom_upper.Enabled = False
txtsleeve_bottom_cuff_upper.Enabled = False
txtarm_hole_upper.Enabled = False
txtremark_upper_upper.Enabled = False
txtlength_lower.Enabled = False
txtwaist_lower.Enabled = False
txthips_lower_lower.Enabled = False
txtthigh_lower.Enabled = False
txtknee_lower.Enabled = False
txtbottom_lower.Enabled = False
txtcrotch_lower.Enabled = False
txtremark_lower.Enabled = False
lblmale_No.Enabled = False
txtmale_name.Enabled = False
RichTextBox_template_name.Enabled = False
[Link] = False
btnupdate_male.Enabled = False
End Sub

Private Sub btncancel_Click(ByVal sender As [Link], ByVal e


As [Link]) Handles [Link]
ClearForm()
falset()
[Link] = True
[Link] = True
btnupdate_male.Visible = False
lblsave_male.Visible = False
[Link] = False
[Link] = False
LinkLabel_tempale.Enabled = False
End Sub

Private Sub btnedit_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
If lblmale_No.Text = "" Then
[Link]("Please select an order to edit.", "No
Selection", [Link], [Link])
Exit Sub
End If
trueset()
[Link] = False
[Link] = False
btnupdate_male.Visible = True
lblsave_male.Visible = True
[Link] = True
[Link] = True
End Sub

Private Sub NumericOnly_KeyPress(ByVal sender As Object, ByVal e As


KeyPressEventArgs)
If Not [Link]([Link]) AndAlso Not
[Link]([Link]) AndAlso [Link] <> "." Then
[Link] = True
End If
If [Link] = "." AndAlso DirectCast(sender,
TextBox).[Link](".") > -1 Then
[Link] = True
End If
End Sub

Private Sub AttachNumericOnlyHandlersSecondSet()


AddHandler txtlength_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtshoulder_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtfigure_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtbody_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtwaistline_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txthips_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtneck_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtsleeve_length_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtsleeve_bottom_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtsleeve_bottom_cuff_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtarm_hole_upper.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtlength_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtwaist_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txthips_lower_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtthigh_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtknee_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtbottom_lower.KeyPress, AddressOf
NumericOnly_KeyPress
AddHandler txtcrotch_lower.KeyPress, AddressOf
NumericOnly_KeyPress
End Sub

Private Sub btnprint_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
Try
Dim ds As New maledataset()
Dim dt As DataTable = [Link]("maleorders")
For Each row As DataGridViewRow In [Link]
If Not [Link] Then
Dim dr As DataRow = [Link]()

dr("male_name") = If([Link]("male_name").Value
IsNot Nothing AndAlso Not IsDBNull([Link]("male_name").Value),

[Link]("male_name").[Link](), "-")
dr("template_name") =
If([Link]("template_name").Value IsNot Nothing AndAlso Not
IsDBNull([Link]("template_name").Value),

[Link]("template_name").[Link](), "-")
dr("remarks") = If([Link]("remarks").Value IsNot
Nothing AndAlso Not IsDBNull([Link]("remarks").Value),

[Link]("remarks").[Link](), "-")
dr("quantity") = If([Link]("quantity").Value
IsNot Nothing AndAlso Not IsDBNull([Link]("quantity").Value),
[Link]("quantity").Value, 0)

' === Numeric fields ===


Dim numericFields As String() = {
"length_upper", "shoulder_upper",
"figure_upper", "body_upper", "waistline_upper", "hips_upper",
"neck_upper",
"sleeve_length_upper", "sleeve_bottom_upper",
"sleeve_bottom_cuff_upper", "arm_hole_upper",
"length_lower", "waist_lower",
"hips_lower_lower", "thigh_lower", "knee_lower", "bottom_lower",
"crotch_lower"
}

For Each field In numericFields


If [Link](field).Value IsNot Nothing AndAlso
Not IsDBNull([Link](field).Value) AndAlso
Not
[Link]([Link](field).[Link]()) Then
dr(field) =
[Link]([Link](field).Value)
Else
dr(field) = 0
End If
Next

[Link](dr)
End If
Next
If [Link] = 0 Then
[Link]("No data available to print.", "No
Data", [Link], [Link])
Exit Sub
End If
Dim rpt As New maleordersreport()
[Link](ds)
Dim mainForm As frmmain = [Link](Of
frmmain)().FirstOrDefault()

Dim businessName As String = "UNKNOWN BUSINESS"


Dim currentUser As String = "UNKNOWN USER"
Dim locationText As String = "UNKNOWN LOCATION"

If mainForm IsNot Nothing Then


If mainForm.lbl_business_name IsNot Nothing Then
businessName =
mainForm.lbl_business_name.[Link]().ToUpper()
End If
If [Link] IsNot Nothing Then
currentUser = [Link]().ToUpper()
End If
If [Link] IsNot Nothing Then
locationText = [Link]()
End If
End If

Dim ffDefs As FormulaFieldDefinitions =


[Link]

Try : ffDefs("BusinessName").Text = "'" &


[Link]("'", "''") & "'" : Catch : End Try
' UserName
Try : ffDefs("UserName").Text = "'" &
[Link]("'", "''") & "'" : Catch : End Try
' Location
Try : ffDefs("Location").Text = "'" &
[Link]("'", "''") & "'" : Catch : End Try
Dim frm As New frmmalereportpreview()
[Link] = rpt
[Link]()
[Link]()

Catch ex As Exception
[Link]("Error generating report: " & [Link] &
vbCrLf & "Stack Trace: " & [Link],
"Error", [Link],
[Link])
End Try
End Sub

Private Sub LoadMaleOrders(Optional ByVal whereClause As String =


"")
Try
[Link]()
Dim query As String = "SELECT male_no, male_name,
Template_name, quantity, price, balance, order_date, remarks, " & _
"length_upper, shoulder_upper,
figure_upper, body_upper, waistline_upper, hips_upper, neck_upper, " & _
"sleeve_length_upper,
sleeve_bottom_upper, sleeve_bottom_cuff_upper, arm_hole_upper,
remark_upper_upper, " & _
"length_lower, waist_lower,
hips_lower_lower, thigh_lower, knee_lower, bottom_lower, crotch_lower,
remark_lower, " & _
"Cutter_and_Sewer, Order_Status " & _
"FROM tblmale_orders"
If [Link]() <> "" Then
query &= " WHERE " & whereClause
End If
query &= " ORDER BY order_date DESC"
Using conn As New
MySqlConnection([Link])
[Link]()
Using cmd As New MySqlCommand(query, conn)
If [Link]("@search") Then
[Link]("@search", "%" &
txtmale_search.[Link]() & "%")
End If
If [Link]("@cutter_and_sewer") Then
[Link]("@cutter_and_sewer",
ListBox_workers.[Link]())
End If
If [Link]("@month") Then
[Link]("@month",
ComboBox_month.SelectedIndex)
End If
If [Link]("@year") AndAlso
[Link]() <> "" Then
[Link]("@year",
Convert.ToInt32([Link]()))
End If
[Link] = New MySqlDataAdapter(cmd)
[Link]([Link])
End Using
End Using
[Link] = [Link]
If [Link]("price") Then
[Link]("price").[Link] =
"₱#,##0.00"
End If
If [Link]("balance") Then
[Link]("balance").[Link]
= "₱#,##0.00"
End If
If [Link]("male_name") Then
[Link]("male_name").HeaderText = "Male
Name"
[Link]("male_name").Frozen = True
[Link]("male_name").Width = 150
End If
If [Link]("Cutter_and_Sewer") Then
[Link]("Cutter_and_Sewer").HeaderText =
"Cutter and Sewer"
[Link]("Cutter_and_Sewer").Width = 150
End If
For Each col As DataGridViewColumn In [Link]
If [Link] <> "male_name" AndAlso [Link] <>
"Cutter_and_Sewer" Then
Dim headerText As String = [Link]
headerText = [Link](" ",
[Link]("_"c).Select(Function(word) [Link](word(0)) &
[Link](1).ToLower()).ToArray())
[Link] = headerText
[Link] = 120
End If
Next
Catch ex As Exception
[Link]("Error loading male orders: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub FilterData()


Try
Dim filters As New List(Of String)
If txtmale_search.[Link]() <> "" Then
[Link]("(male_name LIKE @search OR Template_name
LIKE @search)")
End If
Dim selectedWorker As String =
If(ListBox_workers.SelectedItem IsNot Nothing,
ListBox_workers.[Link](), "All")
If selectedWorker <> "All" Then
If selectedWorker = "None" Then
[Link]("Cutter_and_Sewer IS NULL")
Else
[Link]("Cutter_and_Sewer = @cutter_and_sewer")
End If
End If
If ComboBox_month.SelectedIndex > 0 Then
[Link]("MONTH(order_date) = @month")
End If
If [Link]() <> "" Then
[Link]("YEAR(order_date) = @year")
End If
Dim whereClause As String = [Link](" AND ",
[Link]())
LoadMaleOrders(whereClause)
Catch ex As Exception
[Link]("Error filtering data: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub txtyear_KeyPress(ByVal sender As Object, ByVal e As


KeyPressEventArgs) Handles [Link]
If [Link]([Link]) Then
[Link] = False
Exit Sub
End If
If Not [Link]([Link]) Then
[Link] = True
Exit Sub
End If
If [Link] >= 4 Then
[Link] = True
Exit Sub
End If
End Sub

Private Sub txtyear_TextChanged(ByVal sender As [Link], ByVal


e As [Link]) Handles [Link]
If [Link] = 4 Then
Try
Dim year As Integer = Convert.ToInt32([Link])
If year < 1900 Or year > 2025 Then
[Link]("Please enter a year between 1900
and 2025.", "Invalid Year", [Link],
[Link])
[Link] = ""
Exit Sub
End If
Catch ex As Exception
[Link]("Invalid year format.", "Error",
[Link], [Link])
[Link] = ""
Exit Sub
End Try
End If
FilterData()
End Sub

Private Sub txtmale_search_TextChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
txtmale_search.TextChanged
FilterData()
End Sub

Private Sub ListBox_workers_SelectedIndexChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
ListBox_workers.SelectedIndexChanged
FilterData()
End Sub

Private Sub ComboBox_month_SelectedIndexChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
ComboBox_month.SelectedIndexChanged
FilterData()
End Sub

Private Sub LoadWorkers()


Try
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT Name FROM tbl_workers WHERE
Status = 1 ORDER BY Name ASC"
Using Comm As New MySqlCommand(query, [Link])
Dim reader As MySqlDataReader = [Link]()
ListBox_workers.[Link]()
ListBox_workers.[Link]("All")
ListBox_workers.[Link]("None")
While [Link]()
ListBox_workers.[Link](reader("Name").ToString())
End While
[Link]()
ListBox_workers.SelectedIndex = 0
End Using
Catch ex As Exception
[Link]("Error loading workers: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Sub LoadMonths()


ComboBox_month.[Link]()
ComboBox_month.[Link]("All")
Dim months() As String = {"January", "February", "March",
"April", "May", "June", "July", "August", "September", "October",
"November", "December"}
ComboBox_month.[Link](months)
ComboBox_month.SelectedIndex = 0
End Sub
Private Sub frmmalelist_update_Load(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
Try
[Link]()
SetTabIndex()
falset()
LoadWorkers()
LoadMonths()
LoadMaleOrders()
SetupDataGridView()
ClearForm()
RichTextBox_template_name.ReadOnly = True
AttachNumericOnlyHandlersSecondSet()
LinkLabel_tempale.Enabled = False
[Link] = [Link]
[Link] = [Link]
btnupdate_male.Cursor = [Link]
Cursor = [Link]
[Link] = [Link]
ListBox_workers.Cursor = [Link]
ListBox_workers.DropDownStyle = [Link]
Finally
[Link](False)
End Try
End Sub
Private Sub SetupDataGridView()
With DataGridView1
.ReadOnly = True
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeRows = False
.AllowUserToOrderColumns = True
.MultiSelect = False
.SelectionMode = [Link]
.EditMode = [Link]

.RowHeadersVisible = False
.AutoSizeColumnsMode =
[Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
.BackgroundColor = [Link]
.BorderStyle = BorderStyle.Fixed3D
.CellBorderStyle =
[Link]

.[Link] = [Link]
.[Link] = [Link]
.[Link] = New Font("Segoe UI",
9.0!, [Link])
.EnableHeadersVisualStyles = False

.GridColor = [Link]
End With
End Sub
Private Sub LoadTemplateImage(ByVal templateName As String)
Dim shouldCloseConnection As Boolean = False
Try
If [Link] <> [Link] Then
[Link]()
shouldCloseConnection = True
End If

Dim query As String = "SELECT Image_Template FROM


tbl_template WHERE Template_Name = @templateName LIMIT 1"
Using cmd As New MySqlCommand(query, [Link])
[Link]("@templateName",
templateName)
Dim imgData As Object = [Link]()

If imgData IsNot Nothing AndAlso Not IsDBNull(imgData)


Then
Dim imgBytes() As Byte = CType(imgData, Byte())
Using ms As New [Link](imgBytes)
PictureBox_template.Image = [Link](ms)
End Using
Else
PictureBox_template.Image = Nothing
End If
End Using

Catch ex As Exception
[Link]("Error loading template image: " &
[Link], "Error", [Link], [Link])
PictureBox_template.Image = Nothing
Finally
If shouldCloseConnection Then
[Link]()
End If
End Try
End Sub

Private Sub DisplayTemplateImageFromTextbox()


Dim templateName As String =
RichTextBox_template_name.[Link]()
If Not [Link](templateName) Then
LoadTemplateImage(templateName)
If PictureBox_template.Image Is Nothing Then
LoadSystemLogoImage(templateName)
End If
Else
PictureBox_template.Image = Nothing
End If
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object,
ByVal e As EventArgs)
If [Link] > 0 Then
Dim selectedRow As DataGridViewRow =
[Link](0)
RichTextBox_template_name.Text =
[Link]("Template_name").[Link]()
DisplayTemplateImageFromTextbox()
End If
End Sub
End Class

Monitor Orders Code


Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmmonitor_orders
Private Sub frmmonitor_orders_Load(ByVal sender As Object, ByVal e
As [Link]) Handles [Link]
[Link] = [Link]
btnAvailable_to_Claim.Cursor = [Link]
btnview_list.Cursor = [Link]
Try
If ComboBox_filter_client IsNot Nothing Then
RemoveHandler
ComboBox_filter_client.SelectedIndexChanged, AddressOf
ComboBox_filter_client_SelectedIndexChanged
ComboBox_filter_client.[Link](New String()
{"Pending", "Available to Claim", "Claimed", "Client Identifier"})
ComboBox_filter_client.SelectedItem = "Pending"
AddHandler ComboBox_filter_client.SelectedIndexChanged,
AddressOf ComboBox_filter_client_SelectedIndexChanged
Else
[Link]("ComboBox_filter_client is not
initialized.")
[Link]("ComboBox_filter_client is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If
LoadAvailableWorkers()
LoadOrders()

If frmmain Is Nothing Then


[Link]("frmmain is Nothing, creating new
instance.")
frmmain = New frmmain()
End If

Catch ex As Exception
[Link]("Error updating frmmain controls: " &
[Link]())
End Try
End Sub

Private Sub LoadAvailableWorkers()


Try
If ComboBox_list_of_workers Is Nothing Then
[Link]("ComboBox_list_of_workers is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If
If CONN Is Nothing Then
[Link]("Database connection is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If

ComboBox_list_of_workers.[Link]()

Dim sql As String = "SELECT Name FROM tbl_workers WHERE


Status = 1"
Dim cmd As New MySqlCommand(sql, CONN)
Dim reader As MySqlDataReader

If [Link] = [Link] Then


[Link]()
End If
[Link]()

reader = [Link]()

While [Link]()

ComboBox_list_of_workers.[Link](reader("Name").ToString())
End While

[Link]()
Catch ex As Exception
[Link]("Error loading workers: " & [Link],
"Error", [Link], [Link])
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
End Try
End Sub
Private Sub DataGridView1_CellContentClick(ByVal sender As Object,
ByVal e As DataGridViewCellEventArgs) Handles
[Link]
If [Link] = 0 AndAlso [Link] >= 0 Then
Try
If [Link] = 0 Then
Dim currentValue As Boolean = False
If [Link](0).Cells("chkSelect").Value
IsNot Nothing Then
currentValue =
[Link]([Link](0).Cells("chkSelect").Value)
End If
Dim selectAll As Boolean = Not currentValue

For i As Integer = 1 To [Link] - 1


[Link](i).Cells("chkSelect").Value =
selectAll
Next

[Link](0).Cells("chkSelect").Value =
selectAll
Else
Dim chkValue As Boolean = False
If
[Link]([Link]).Cells("chkSelect").Value IsNot Nothing
Then
chkValue =
[Link]([Link]([Link]).Cells("chkSelect").Valu
e)
End If

[Link]([Link]).Cells("chkSelect").Value = Not chkValue


Dim allChecked As Boolean = True
For i As Integer = 1 To [Link] - 1
If
[Link](i).Cells("chkSelect").Value Is Nothing OrElse Not
[Link]([Link](i).Cells("chkSelect").Value) Then
allChecked = False
Exit For
End If
Next
[Link](0).Cells("chkSelect").Value =
allChecked
End If
Catch ex As Exception
[Link]("Error handling checkbox click: " &
[Link], "Error", [Link], [Link])
End Try
End If
End Sub

Private Sub btnview_list_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles btnview_list.Click
Try
frmview_list.StartPosition = [Link]
frmview_list.ShowDialog()
Catch ex As Exception
[Link]("Error opening view list: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub ComboBox_filter_client_SelectedIndexChanged(ByVal sender


As Object, ByVal e As EventArgs) Handles
ComboBox_filter_client.SelectedIndexChanged
Try
If ComboBox_filter_client.SelectedItem IsNot Nothing AndAlso
[Link] IsNot Nothing Then
Dim selectedClient As String =
ComboBox_filter_client.[Link]()
Dim dt As DataTable = TryCast([Link],
DataTable)
If dt IsNot Nothing Then
Dim dv As DataView = [Link]
Select Case selectedClient
Case "Pending"
[Link] = "Order_Status = 'Pending' OR
Order_Status IS NULL"
Case "Available to Claim"
[Link] = "Order_Status = 'Available to
Claim' OR Order_Status IS NULL"
Case "Claimed"
[Link] = "Order_Status = 'Claimed' OR
Order_Status IS NULL"
Case "Client Identifier"
[Link] = ""
Case Else
[Link] = ""
End Select
If lblcount IsNot Nothing Then
[Link] = "Total Orders: " &
([Link] - 1).ToString()
Else
[Link]("lblcount is not initialized.",
"Error", [Link], [Link])
End If
Else
LoadOrders()
End If
End If
Catch ex As Exception
[Link]("Error filtering orders: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub txtsearch_TextChanged(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
Try
If [Link] IsNot Nothing Then
Dim dt As DataTable = TryCast([Link],
DataTable)
If dt IsNot Nothing Then
Dim dv As DataView = [Link]
[Link] = "customer_name LIKE '%" &
[Link]("'", "''") & "%'"
Else
LoadOrders()
End If
End If
Catch ex As Exception
[Link]("Error searching orders: " & [Link],
"Error", [Link], [Link])
End Try
End Sub

Private Sub btnAvailable_to_Claim_Click(ByVal sender As Object,


ByVal e As [Link]) Handles btnAvailable_to_Claim.Click
Try
Dim atLeastOneSelected As Boolean = False
Dim selectedEmails As New List(Of String)

For Each row As DataGridViewRow In [Link]


If [Link] > 0 AndAlso [Link]("chkSelect").Value
IsNot Nothing AndAlso [Link]([Link]("chkSelect").Value)
Then
atLeastOneSelected = True
Dim email As Object = [Link]("Email").Value
If email IsNot Nothing AndAlso Not
[Link]([Link]()) AndAlso
IsValidEmail([Link]()) Then
[Link]([Link]())
End If
End If
Next

If Not atLeastOneSelected Then


[Link]("Please select at least one order to
update.", "Warning", [Link], [Link])
Exit Sub
End If
If CONN Is Nothing Then
[Link]("Database connection is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If

Dim anyUpdated As Boolean = False

If [Link] <> [Link] Then


[Link]()
End If

For Each row As DataGridViewRow In [Link]


If [Link] > 0 AndAlso [Link]("chkSelect").Value
IsNot Nothing AndAlso [Link]([Link]("chkSelect").Value)
Then
Dim orderNo As Object = [Link]("No").Value
Dim orderSource As Object =
[Link]("OrderSource").Value
If orderNo IsNot Nothing AndAlso orderSource IsNot
Nothing AndAlso Not [Link]([Link]()) AndAlso Not
[Link]([Link]()) Then
Dim tableName As String = [Link]()
Dim idField As String

If tableName = "tblrepair_orders" Then


idField = "repair_id"
Else
idField = "order_id"
End If

Dim sql As String = [Link]("UPDATE {0}


SET Order_Status = @status WHERE {1} = @orderNo", tableName, idField)
Using cmd As New MySqlCommand(sql, CONN)
[Link]("@status",
"Available to Claim")
[Link]("@orderNo",
[Link]())
[Link]()
anyUpdated = True
End Using
End If
End If
Next

If anyUpdated Then
[Link]("Selected orders updated to 'Available
to Claim'.", "Success", [Link],
[Link])
Else
[Link]("No valid orders were updated.",
"Warning", [Link], [Link])
End If

If [Link] > 0 Then


Dim result As DialogResult = [Link]("Would you
like to send notifications to the selected clients?", "Send
Notifications", [Link], [Link])
If result = [Link] Then
Try
Dim frmEmail As New frmemail()
[Link]([Link]()) ' Convert List to
Array
[Link] =
[Link]
[Link]()
Catch ex As Exception
[Link]("Error opening email form: " &
[Link], "Error", [Link], [Link])
End Try
End If
Else
[Link]("No valid email addresses found for the
selected orders.", "Warning", [Link],
[Link])
End If
Catch ex As Exception
[Link]("Error details: " & [Link]())
[Link]("Error updating orders: " & [Link],
"Error", [Link], [Link])
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
LoadOrders()
End Try
End Sub
Private Function IsValidEmail(ByVal email As String) As Boolean
Return [Link](email,
"^[^@\s]+@[^@\s]+\.[^@\s]+$")
End Function
Private Sub btnPrint_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
Dim ds As New dsOrders()
Dim dt As DataTable = [Link]("dtOrders")

For Each row As DataGridViewRow In [Link]


If Not [Link] Then
Dim dr As DataRow = [Link]()
dr("customer_name") =
[Link]("customer_name").Value
dr("Email") = [Link]("Email").Value
dr("Template") = [Link]("Template").Value
dr("quantity") = [Link]("quantity").Value
dr("Order_Status") = [Link]("Order_Status").Value
dr("Cutter_and_Sewer") =
[Link]("Cutter_and_Sewer").Value
[Link](dr)
End If
Next
Dim rpt As New rptOrders()
[Link](ds)
Dim businessNameText As String = ""
Dim userNameText As String = ""
Dim locationText As String = ""

If [Link]().OfType(Of frmmain).Any() Then


Dim mainForm = [Link]().OfType(Of
frmmain).First()
businessNameText = mainForm.lbl_business_name.Text
userNameText = [Link]
locationText = [Link]
End If

[Link]("BusinessName").Text = "'"
& [Link]("'", "''") & "'"
[Link]("UserName").Text = "'" &
[Link]("'", "''") & "'"
[Link]("Location").Text = "'" &
[Link]("'", "''") & "'"

Dim frm As New frmOrdersReport()


[Link] = rpt
[Link]()
[Link]()

Catch ex As Exception
[Link]("Error generating report: " & [Link],
"Error", [Link],
[Link])
End Try
End Sub

Private Sub btnAssign_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
Try
If ComboBox_list_of_workers.SelectedIndex = -1 OrElse
ComboBox_list_of_workers.SelectedItem Is Nothing Then
[Link]("Please select a worker to assign.",
"Warning", [Link], [Link])
Exit Sub
End If

Dim anySelected As Boolean = False


For Each row As DataGridViewRow In [Link]
If [Link] > 0 AndAlso [Link]("chkSelect").Value
IsNot Nothing AndAlso [Link]([Link]("chkSelect").Value) =
True Then
anySelected = True
Exit For
End If
Next

If Not anySelected Then


[Link]("Please select at least one order to
assign.", "Warning", [Link], [Link])
Exit Sub
End If

Dim selectedWorker As String =


ComboBox_list_of_workers.[Link]()
Dim anyAssigned As Boolean = False

If CONN Is Nothing Then


[Link]("Database connection is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If

If [Link] <> [Link] Then


[Link]()
End If
For Each row As DataGridViewRow In [Link]
If [Link] > 0 AndAlso [Link]("chkSelect").Value
IsNot Nothing AndAlso [Link]([Link]("chkSelect").Value) =
True Then
Dim orderNo As Object = [Link]("No").Value
Dim orderSource As Object =
[Link]("OrderSource").Value
If orderNo IsNot Nothing AndAlso orderSource IsNot
Nothing AndAlso Not [Link]([Link]()) AndAlso Not
[Link]([Link]()) Then
Dim tableName As String = [Link]()
Dim idField As String

Select Case tableName


Case "tblrepair_orders"
idField = "repair_id"
Case Else
idField = "order_id"
End Select

Dim sql As String = [Link]("UPDATE {0}


SET Cutter_and_Sewer = @workerName WHERE {1} = @orderNo", tableName,
idField)
Using cmd As New MySqlCommand(sql, CONN)
[Link]("@workerName",
selectedWorker)
[Link]("@orderNo",
[Link]())
[Link]()
anyAssigned = True
End Using
End If
End If
Next

If anyAssigned Then
[Link]("Selected orders assigned to worker: " &
selectedWorker, "Success", [Link],
[Link])
Else
[Link]("No valid orders were assigned.",
"Warning", [Link], [Link])
End If
Catch ex As Exception
[Link]("Error assigning orders: " & [Link],
"Error", [Link], [Link])
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
LoadOrders()
End Try
End Sub
Private Sub LoadOrders()
Try
If DataGridView1 Is Nothing Then
[Link]("DataGridView1 is not initialized.",
"Error", [Link], [Link])
Exit Sub
End If

If CONN Is Nothing Then


[Link]("Database connection is not
initialized.", "Error", [Link], [Link])
Exit Sub
End If

Dim sql As String = "SELECT repair_id AS No, client_no AS


client_identifier, [Link] AS customer_name, [Link], '' AS Template,
quantity, Order_Status, Cutter_and_Sewer, 'tblrepair_orders' AS
OrderSource " & _
"FROM tblrepair_orders ro LEFT JOIN
tbl_clients c ON ro.client_no = [Link] " & _
"UNION ALL " & _
"SELECT order_id AS No, male_no AS
client_identifier, [Link] AS customer_name, [Link], Template_name AS
Template, quantity, Order_Status, Cutter_and_Sewer, 'tblmale_orders' AS
OrderSource " & _
"FROM tblmale_orders mo LEFT JOIN
tbl_clients c ON mo.male_no = [Link] " & _
"UNION ALL " & _
"SELECT order_id AS No, female_no AS
client_identifier, [Link] AS customer_name, [Link], Template_name AS
Template, quantity, Order_Status, Cutter_and_Sewer, 'tblfemale_orders'
AS OrderSource " & _
"FROM tblfemale_orders fo LEFT JOIN
tbl_clients c ON fo.female_no = [Link] " & _
"UNION ALL " & _
"SELECT order_id AS No, client_no AS
client_identifier, [Link] AS customer_name, [Link], template AS
Template, quantity, Order_Status, Cutter_and_Sewer, 'tbl_orders' AS
OrderSource " & _
"FROM tbl_orders o LEFT JOIN tbl_clients
c ON o.client_no = [Link]"

If [Link] = [Link] Then


[Link]()
End If
[Link]()

Dim cmd As New MySqlCommand(sql, CONN)


Dim adapter As New MySqlDataAdapter(cmd)
Dim dt As New DataTable()
[Link](dt)

Dim emptyRow As DataRow = [Link]()


[Link](emptyRow, 0)

[Link] = dt

If lblcount IsNot Nothing Then


[Link] = "Number of Orders: " &
([Link] - 1).ToString()
Else
[Link]("lblcount is not initialized.", "Error",
[Link], [Link])
End If

With DataGridView1
If .[Link]("No")
Then .Columns("No").HeaderText = "Order No"
If .[Link]("client_identifier")
Then .Columns("client_identifier").HeaderText = "Client ID"
If .[Link]("customer_name")
Then .Columns("customer_name").HeaderText = "Customer Name"
If .[Link]("Email")
Then .Columns("Email").HeaderText = "Email"
If .[Link]("Template")
Then .Columns("Template").HeaderText = "Template"
If .[Link]("quantity")
Then .Columns("quantity").HeaderText = "Quantity"
If .[Link]("Order_Status")
Then .Columns("Order_Status").HeaderText = "Order Status"
If .[Link]("Cutter_and_Sewer")
Then .Columns("Cutter_and_Sewer").HeaderText = "Cutter and Sewer"
If .[Link]("OrderSource")
Then .Columns("OrderSource").Visible = False ' Hide OrderSource column

If .[Link]("No") Then
.Columns("No").[Link] =
[Link]
End If
If .[Link]("client_identifier") Then
.Columns("client_identifier").[Link]
ment = [Link]
End If
If .[Link]("customer_name") Then
.Columns("customer_name").[Link]
= [Link]
End If
If .[Link]("Email") Then
.Columns("Email").[Link] =
[Link]
End If
If .[Link]("Template") Then
.Columns("Template").[Link] =
[Link]
End If
If .[Link]("quantity") Then
.Columns("quantity").[Link] =
[Link]
End If
If .[Link]("Order_Status") Then
.Columns("Order_Status").[Link]
= [Link]
End If
If .[Link]("Cutter_and_Sewer") Then
.Columns("Cutter_and_Sewer").[Link]
ent = [Link]
End If

If .[Link]("No") Then .Columns("No").SortMode


= [Link]
If .[Link]("client_identifier")
Then .Columns("client_identifier").SortMode =
[Link]
If .[Link]("customer_name")
Then .Columns("customer_name").SortMode =
[Link]
If .[Link]("Email")
Then .Columns("Email").SortMode = [Link]
If .[Link]("Template")
Then .Columns("Template").SortMode =
[Link]
If .[Link]("quantity")
Then .Columns("quantity").SortMode =
[Link]
If .[Link]("Order_Status")
Then .Columns("Order_Status").SortMode =
[Link]
If .[Link]("Cutter_and_Sewer")
Then .Columns("Cutter_and_Sewer").SortMode =
[Link]
[Link]("chkSelect").Frozen = True
Catch ex As Exception
[Link]("Error loading orders: " & [Link] &
vbCrLf & [Link], "Error", [Link],
[Link])
[Link] = Nothing
Finally
If CONN IsNot Nothing AndAlso [Link] =
[Link] Then
[Link]()
End If
End Try
End Sub
End Class

Payment Form Code


Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmpayment
Private Structure TableInfo
Public Table As String
Public IdColumn As String
End Structure

Private Sub SavePayment(ByVal clientID As String, ByVal amountPaid


As Decimal)
Try
If [Link] = [Link] Then
[Link]()
End If

Dim insertQuery As String = "INSERT INTO tblpayment


(client_id, Amount_paid) VALUES (@clientID, @amountPaid)"
Using insertCmd As New MySqlCommand(insertQuery, CONN)
[Link]("@clientID", clientID)
[Link]("@amountPaid",
amountPaid)

Dim rowsInserted As Integer =


[Link]()
If rowsInserted = 0 Then
[Link]("Failed to save payment.", "Error",
[Link], [Link])
End If
End Using
Catch ex As Exception
[Link]("An error occurred while saving payment: " &
[Link], "Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub FilterData()
Try
If [Link] = [Link] Then
[Link]()
End If

Dim search As String = "%" & [Link]() & "%"


Dim DT As New DataTable()
Dim query As String = ""

Select Case ComboBox_filter.[Link]()


Case "Name"
query =
"SELECT repair_id AS No, client_no AS `Client
ID`, name AS `Customer Name`, '' AS Template, items, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblrepair_orders WHERE name LIKE
@search " &
"UNION ALL SELECT order_id AS No, male_no AS
`Client ID`, male_name AS `Customer Name`, Template_name AS Template, ''
AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM tblmale_orders
WHERE male_name LIKE @search " &
"UNION ALL SELECT order_id AS No, female_no AS
`Client ID`, female_name AS `Customer Name`, Template_name AS Template,
'' AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM
tblfemale_orders WHERE female_name LIKE @search " &
"UNION ALL SELECT order_id AS No, client_no AS
`Client ID`, name AS `Customer Name`, template AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tbl_orders WHERE name LIKE
@search"

Case "Client Identifier"


query =
"SELECT repair_id AS No, client_no AS `Client
ID`, name AS `Customer Name`, '' AS Template, items, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblrepair_orders WHERE client_no LIKE
@search " &
"UNION ALL SELECT order_id AS No, male_no AS
`Client ID`, male_name AS `Customer Name`, Template_name AS Template, ''
AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM tblmale_orders
WHERE male_no LIKE @search " &
"UNION ALL SELECT order_id AS No, female_no AS
`Client ID`, female_name AS `Customer Name`, Template_name AS Template,
'' AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM
tblfemale_orders WHERE female_no LIKE @search " &
"UNION ALL SELECT order_id AS No, client_no AS
`Client ID`, name AS `Customer Name`, template AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tbl_orders WHERE client_no
LIKE @search"

Case Else
query =
"SELECT repair_id AS No, client_no AS `Client
ID`, name AS `Customer Name`, '' AS Template, items, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblrepair_orders WHERE name LIKE
@search " &
"UNION ALL SELECT order_id AS No, male_no AS
`Client ID`, male_name AS `Customer Name`, Template_name AS Template, ''
AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM tblmale_orders
WHERE male_name LIKE @search " &
"UNION ALL SELECT order_id AS No, female_no AS
`Client ID`, female_name AS `Customer Name`, Template_name AS Template,
'' AS items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM
tblfemale_orders WHERE female_name LIKE @search " &
"UNION ALL SELECT order_id AS No, client_no AS
`Client ID`, name AS `Customer Name`, template AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tbl_orders WHERE name LIKE
@search"
End Select

Dim cmd As New MySqlCommand(query, CONN)


[Link]("@search", search)

Dim adapter As New MySqlDataAdapter(cmd)


[Link](DT)

[Link] = DT
[Link] = "Total: " & [Link]()

Dim totalBalance As Decimal = 0


For Each row As DataRow In [Link]
If Not IsDBNull(row("Balance")) Then
totalBalance += [Link](row("Balance"))
End If
Next
[Link] = "Total Balance: " &
[Link]("C2")
Catch ex As Exception
[Link]("Error filtering data: " & [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub

Private Sub txtsearch_TextChanged(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
FilterData()
End Sub

Private Sub RefreshDataGrid()


Try
If [Link] = [Link] Then
[Link]()
End If

Dim query As String =


"SELECT repair_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, '' AS Template, quantity AS Quantity, price AS
Price, balance AS Balance, Order_Status AS `Order Status`, order_date AS
`Date` FROM tblrepair_orders " &
"UNION ALL " &
"SELECT order_id AS No, male_no AS `Client ID`,
male_name AS `Customer Name`, Template_name AS Template, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblmale_orders " &
"UNION ALL " &
"SELECT order_id AS No, female_no AS `Client ID`,
female_name AS `Customer Name`, Template_name AS Template, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblfemale_orders " &
"UNION ALL " &
"SELECT order_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, template AS Template, quantity AS Quantity, price AS
Price, balance AS Balance, Order_Status AS `Order Status`, order_date AS
`Date` FROM tbl_orders"

Using da As New MySqlDataAdapter(query, CONN)


Dim dt As New DataTable()
[Link](dt)
[Link] = dt
End Using
[Link]("Client ID").Frozen = True
[Link]("Customer Name").Frozen = True
Catch ex As Exception
[Link]("Error refreshing data: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub StyleDataGridView(Optional ByVal isDarkTheme As Boolean
= False) If .[Link]("Client ID")
Then .Columns("Client ID").Frozen = True
If .[Link]("Customer Name")
Then .Columns("Customer Name").Frozen = True
Finally
.ResumeLayout(True)
End Try
End With
End Sub

Private Sub btnshow_amount_paid_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles btnshow_amount_paid.Click
If [Link] Is Nothing OrElse
[Link]("Client ID").Value Is Nothing Then
[Link]("Please select a client.", "Error",
[Link], [Link])
Exit Sub
End If

Dim clientID As String = [Link]("Client


ID").[Link]()
Dim customerName As String = RichTextBox_name.Text

If [Link](clientID) OrElse
[Link](customerName) Then
[Link]("Client ID or Name is missing.", "Error",
[Link], [Link])
Exit Sub
End If

Dim frm As New frmamount_history(clientID, customerName)


[Link]()
End Sub
Private ReadOnly Property LogPath As String
Get
Dim path As String =
[Link]([Link]([Link]
icationData), "Tailoring_System\[Link]")
[Link]([Link](path))
Return path
End Get
End Property
Private Function LoadCombinedOrders() As DataTable
Dim DT As New DataTable()
Try
If [Link] = [Link] Then
[Link]()
End If

Dim query As String = _


"SELECT repair_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, '' AS Template, quantity AS Quantity, price AS
Price, balance AS Balance, Order_Status AS `Order Status`, order_date AS
`Date` FROM tblrepair_orders " & _
"UNION ALL " & _
"SELECT order_id AS No, male_no AS `Client ID`,
male_name AS `Customer Name`, Template_name AS Template, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblmale_orders " & _
"UNION ALL " & _
"SELECT order_id AS No, female_no AS `Client ID`,
female_name AS `Customer Name`, Template_name AS Template, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblfemale_orders " & _
"UNION ALL " & _
"SELECT order_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, template AS Template, quantity AS Quantity, price AS
Price, balance AS Balance, Order_Status AS `Order Status`, order_date AS
`Date` FROM tbl_orders"

Dim CMD As New MySqlCommand(query, CONN)


Dim adapter As New MySqlDataAdapter(CMD)
[Link](DT)

Dim columnNamesList As New ArrayList()


For Each col As DataColumn In [Link]
[Link]([Link])
Next
Dim columnNames As String = [Link](", ",
DirectCast([Link](GetType(String)), String()))
[Link](LogPath, [Link] & ": DataTable
Columns: " & columnNames & vbCrLf)
Catch ex As Exception
[Link](LogPath, [Link] & ": Error loading
orders: " & [Link] & vbCrLf)
[Link]("Error loading orders: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
[Link] = DT
[Link] = "Number of Orders: " & [Link]()
Return DT
End Function
Private Sub btnclaimed_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
If [Link] Is Nothing OrElse
[Link]("No").Value Is Nothing OrElse
[Link]("Client ID").Value Is Nothing Then
[Link]("Please select an order.", "Error",
[Link], [Link])
[Link](LogPath, [Link] & ": Claim Error -
No order selected" & vbCrLf)
Exit Sub
End If

Dim orderID As String =


[Link]("No").[Link]()
Dim clientID As String = [Link]("Client
ID").[Link]()
Dim currentStatus As String =
If([Link]("Order Status").Value IsNot Nothing,
[Link]("Order Status").[Link](), "")

Dim orderIDValue As Integer


If Not [Link](orderID, orderIDValue) Then
[Link]("Invalid OrderID format.", "Error",
[Link], [Link])
[Link](LogPath, [Link] & ": Claim Error -
Invalid OrderID format: " & orderID & vbCrLf)
Exit Sub
End If

Dim balance As Decimal


If Not
[Link]([Link]("Balance").[Link]
g(), balance) Then
[Link]("Invalid balance format.", "Error",
[Link], [Link])
[Link](LogPath, [Link] & ": Claim Error -
Invalid balance format: " &
[Link]("Balance").[Link]() & vbCrLf)
Exit Sub
End If

If balance > 0 Then


[Link]("Order cannot be claimed until the balance
is zero.", "Error", [Link], [Link])
[Link](LogPath, [Link] & ": Claim Error -
Non-zero balance: " & [Link]("N2") & " for OrderID: " &
orderID & vbCrLf)
Exit Sub
End If

If Not [Link](currentStatus, "Available to Claim",


[Link]) Then
[Link]("Only orders with status 'Available to
Claim' can be marked as Claimed.", "Error", [Link],
[Link])
[Link](LogPath, [Link] & ": Claim Error -
Invalid status: " & currentStatus & " for OrderID: " & orderID & vbCrLf)
Exit Sub
End If

Dim sourceTable As String = ""


Dim idColumn As String = ""
Dim tablesToCheck() As TableInfo = {
New TableInfo With {.Table = "tblrepair_orders", .IdColumn =
"repair_id"},
New TableInfo With {.Table = "tblmale_orders", .IdColumn =
"order_id"},
New TableInfo With {.Table = "tblfemale_orders", .IdColumn =
"order_id"},
New TableInfo With {.Table = "tbl_orders", .IdColumn =
"order_id"}
}

Try
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Opened CONN
in btnclaimed_Click" & vbCrLf)
End If

For Each tbl As TableInfo In tablesToCheck


Dim checkQuery As String = "SELECT Order_Status FROM " &
[Link] & " WHERE " & [Link] & " = @order_id"
Using cmd As New MySqlCommand(checkQuery, CONN)
[Link]("@order_id",
orderIDValue)
Dim result As Object = [Link]()
If result IsNot Nothing Then
sourceTable = [Link]
idColumn = [Link]
[Link](LogPath, [Link] & ":
Found OrderID " & orderID & " in table " & [Link] & vbCrLf)
Exit For
End If
End Using
Next

If [Link](sourceTable) Then
[Link]("OrderID " & orderID & " not found in
any table.", "Error", [Link], [Link])
[Link](LogPath, [Link] & ": Claim Error
- OrderID " & orderID & " not found in any table" & vbCrLf)
Exit Sub
End If

Dim updateQuery As String = "UPDATE " & sourceTable & " SET
Order_Status = @newStatus WHERE " & idColumn & " = @order_id"
Using cmd As New MySqlCommand(updateQuery, CONN)
[Link]("@newStatus", "Claimed")
[Link]("@order_id", orderIDValue)
Dim rowsAffected As Integer = [Link]()
If rowsAffected = 0 Then
[Link]("Failed to update status for OrderID
" & orderID & " in " & sourceTable & ".", "Error", [Link],
[Link])
[Link](LogPath, [Link] & ": Claim
Error - Failed to update status for OrderID " & orderID & " in " &
sourceTable & ", RowsAffected: " & rowsAffected & vbCrLf)
Exit Sub
End If
End Using

[Link]("Order status updated to Claimed.",


"Success", [Link], [Link])
[Link](LogPath, [Link] & ": Claim Success -
OrderID: " & orderID & ", ClientID: " & clientID & ", Table: " &
sourceTable & ", Status: Claimed" & vbCrLf)

RefreshDataGrid()
Catch ex As Exception
[Link](LogPath, [Link] & ": Claim Error: "
& [Link] & vbCrLf)
[Link]("Status update error: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
[Link](LogPath, [Link] & ": Closed CONN
in btnclaimed_Click" & vbCrLf)
End If
End Try
End Sub
Private Function GetFullUnionQuery() As String
Return "SELECT repair_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, '' AS Template, items, quantity AS Quantity, price
AS Price, balance AS Balance, Order_Status AS `Order Status`, order_date
AS `Date` FROM tblrepair_orders " &
"UNION ALL " &
"SELECT order_id AS No, male_no AS `Client ID`, male_name
AS `Customer Name`, Template_name AS Template, '' AS items, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tblmale_orders " &
"UNION ALL " &
"SELECT order_id AS No, female_no AS `Client ID`,
female_name AS `Customer Name`, Template_name AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tblfemale_orders " &
"UNION ALL " &
"SELECT order_id AS No, client_no AS `Client ID`, name AS
`Customer Name`, template AS Template, '' AS items, quantity AS
Quantity, price AS Price, balance AS Balance, Order_Status AS `Order
Status`, order_date AS `Date` FROM tbl_orders"
End Function
Private Function GetNameSearchQuery(ByVal searchParam As String) As
String
Return "SELECT repair_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, '' AS Template, items, quantity AS Quantity, price
AS Price, balance AS Balance, Order_Status AS `Order Status`, order_date
AS `Date` FROM tblrepair_orders WHERE name LIKE @search " &
"UNION ALL SELECT order_id AS No, male_no AS `Client ID`,
male_name AS `Customer Name`, Template_name AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tblmale_orders WHERE
male_name LIKE @search " &
"UNION ALL SELECT order_id AS No, female_no AS `Client
ID`, female_name AS `Customer Name`, Template_name AS Template, '' AS
items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM
tblfemale_orders WHERE female_name LIKE @search " &
"UNION ALL SELECT order_id AS No, client_no AS `Client
ID`, name AS `Customer Name`, template AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tbl_orders WHERE name LIKE
@search"
End Function
Private Function GetClientIdSearchQuery(ByVal searchParam As String)
As String
Return "SELECT repair_id AS No, client_no AS `Client ID`, name
AS `Customer Name`, '' AS Template, items, quantity AS Quantity, price
AS Price, balance AS Balance, Order_Status AS `Order Status`, order_date
AS `Date` FROM tblrepair_orders WHERE client_no LIKE @search " &
"UNION ALL SELECT order_id AS No, male_no AS `Client ID`,
male_name AS `Customer Name`, Template_name AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tblmale_orders WHERE
male_no LIKE @search " &
"UNION ALL SELECT order_id AS No, female_no AS `Client
ID`, female_name AS `Customer Name`, Template_name AS Template, '' AS
items, quantity AS Quantity, price AS Price, balance AS Balance,
Order_Status AS `Order Status`, order_date AS `Date` FROM
tblfemale_orders WHERE female_no LIKE @search " &
"UNION ALL SELECT order_id AS No, client_no AS `Client
ID`, name AS `Customer Name`, template AS Template, '' AS items,
quantity AS Quantity, price AS Price, balance AS Balance, Order_Status
AS `Order Status`, order_date AS `Date` FROM tbl_orders WHERE client_no
LIKE @search"
End Function
Private Sub btnprint_reciept_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnprint_reciept.Click
Try
If [Link](RichTextBox_name.[Link]()) Then
[Link]("Customer name is required.", "Error",
[Link], [Link])
Exit Sub
End If

Dim amount As Decimal, balance As Decimal, change As Decimal

If Not [Link](RichTextBox_amount.Text, amount)


Then
[Link]("Enter a valid payment amount.",
"Error", [Link], [Link])
Exit Sub
End If
Dim balanceText As String = [Link]()
balanceText = [Link]("Total Balance:",
"").Replace("P", "").Trim()
If Not [Link](balanceText, balance) Then
balance = 0D
End If
'-----------------------------------------------------------

If Not [Link](RichTextBox_change.Text, change)


Then
[Link]("Invalid change amount.", "Error",
[Link], [Link])
Exit Sub
End If
If cbopayment_method.SelectedIndex = -1 Then
[Link]("Select a payment method.", "Error",
[Link], [Link])
Exit Sub
End If
Dim rpt As New
[Link]()
Dim reportPath As String =
[Link]([Link], "Reports\[Link]")
If Not [Link](reportPath) Then
[Link]("Report file not found: " & reportPath,
"Error", [Link], [Link])
Exit Sub
End If
[Link](reportPath)
[Link]("Name", RichTextBox_name.[Link]())
[Link]("RichTextBox_amount", amount)
[Link]("RichTextBox_balance", balance)
[Link]("RichTextBox_change", change)
[Link]("PaymentMethod",
cbopayment_method.[Link]())
Dim mainForm As frmmain = Nothing
For Each f As Form In [Link]
If TypeOf f Is frmmain Then
mainForm = DirectCast(f, frmmain)
Exit For
End If
Next
If mainForm Is Nothing Then
[Link]("Main form not found – cannot get
business name / location / logo.", "Error",
[Link],
[Link])
[Link]()
Exit Sub
End If
Dim businessName As String = If(mainForm.lbl_business_name
IsNot Nothing, mainForm.lbl_business_name.[Link](), "")
Dim locationText As String = If([Link] IsNot
Nothing, [Link](), "")
Try : [Link]("BusinessName").Text
= "'" & [Link]("'", "''") & "'" : Catch : End Try
Try : [Link]("Location").Text =
"'" & [Link]("'", "''") & "'" : Catch : End Try
Dim appDataPath As String =
[Link]([Link]
)
Dim logoDir As String =
[Link]([Link](appDataPath, "Tailoring_System"),
"TempLogo")
Dim tempLogoPath As String = [Link](logoDir,
"payment_logo.png")
Dim previewForm As New frmPaymentPreview(rpt)
Try
If Not [Link](logoDir) Then
[Link](logoDir)
If mainForm.PictureBox_frmmain_logo IsNot Nothing
AndAlso mainForm.PictureBox_frmmain_logo.Image IsNot Nothing Then
Using original =
mainForm.PictureBox_frmmain_logo.Image
Using bmp As New Bitmap(550, 500,
[Link].Format24bppRgb)
Using g = [Link](bmp)
[Link]([Link])
[Link] =
[Link]
Dim ratio = [Link](550 /
[Link], 500 / [Link])
Dim w = CInt([Link] * ratio), h
= CInt([Link] * ratio)
Dim x = (550 - w) \ 2, y = (500 - h) \ 2
[Link](original, x, y, w, h)
End Using
Using ms As New [Link]()
[Link](ms, [Link])
Dim logoBytes As Byte() = [Link]()
[Link](tempLogoPath,
logoBytes)
End Using
End Using
End Using
[Link]("Logo", tempLogoPath)
[Link] = tempLogoPath
Else
GoTo UseBlankLogo
End If
Catch ex As Exception
[Link]([Link](appDataPath,
"Tailoring_System\[Link]"),
Now & " LOGO ERROR: " & [Link]
& vbCrLf)
GoTo UseBlankLogo
End Try
GoTo ShowPreview

UseBlankLogo:
Using bmp As New Bitmap(550, 500,
[Link].Format24bppRgb)
Using g = [Link](bmp)
[Link]([Link])
Using f As New Font("Arial", 16, [Link])
[Link]("NO LOGO", f, [Link],
180, 230)
End Using
End Using
Using ms As New [Link]()
[Link](ms, [Link])
Dim logoBytes As Byte() = [Link]()
[Link]("Logo", logoBytes)
End Using
End Using
[Link] = ""

ShowPreview:
[Link]()
[Link]()

Catch ex As Exception
[Link]("Print/Preview failed: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub UpdatePayButtonState()
If [Link] Is Nothing Then
[Link] = False
Exit Sub
End If

Dim balance As Decimal


If
[Link]([Link]("Balance").[Link]
g(), balance) Then
[Link] = (balance > 0)
If balance <= 0 Then
RichTextBox_amount.Text = "0.00"
RichTextBox_change.Text = "0.00"
End If
Else
[Link] = False
End If
End Sub
Private Sub btnpay_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If [Link] Is Nothing Then
[Link]("Please select an order.", "Error",
[Link], [Link])
Exit Sub
End If
Dim currentBalance As Decimal
If Not
[Link]([Link]("Balance").[Link]
g(), currentBalance) Then
[Link]("Invalid balance value.", "Error",
[Link], [Link])
Exit Sub
End If
If currentBalance <= 0 Then
[Link]("Balance is already zero. No payment
needed.", "Info", [Link], [Link])
RichTextBox_amount.Text = "0.00"
RichTextBox_change.Text = "0.00"
[Link] = False
Exit Sub
End If
Dim amountPaid As Decimal
If Not [Link](RichTextBox_amount.Text, amountPaid)
OrElse amountPaid <= 0 Then
[Link]("Enter a valid payment amount greater than
zero.", "Error", [Link], [Link])
Exit Sub
End If
If amountPaid > currentBalance Then
[Link]("Payment amount cannot exceed the current
balance.", "Error", [Link], [Link])
Exit Sub
End If

Dim newBalance As Decimal = currentBalance - amountPaid


If cbopayment_method.SelectedIndex = -1 Then
[Link]("Select a payment method.", "Error",
[Link], [Link])
Exit Sub
End If

Dim orderIDStr As String = [Link]()


Dim clientID As String = [Link]("Client
ID").[Link]()
Dim customerName As String =
If([Link](RichTextBox_name.[Link]()), "Unknown",
RichTextBox_name.[Link]())
Dim orderID As Integer
If Not [Link](orderIDStr, orderID) Then
[Link]("Invalid Order ID.", "Error",
[Link], [Link])
Exit Sub
End If

Dim tablesToCheck() As TableInfo = {


New TableInfo With {.Table = "tblrepair_orders", .IdColumn =
"repair_id"},
New TableInfo With {.Table = "tblmale_orders", .IdColumn =
"order_id"},
New TableInfo With {.Table = "tblfemale_orders", .IdColumn =
"order_id"},
New TableInfo With {.Table = "tbl_orders", .IdColumn =
"order_id"}
}
Dim sourceTable As String = ""
Dim idColumn As String = ""

Try
If [Link] = [Link] Then [Link]()
Dim trans = [Link]()
Try
For Each t As TableInfo In tablesToCheck
Dim nameCol As String = If([Link] =
"tblmale_orders", "male_name",
If([Link] =
"tblfemale_orders", "female_name", "name"))
Dim sql As String = "SELECT 1 FROM `" & [Link] & "`
WHERE " & [Link] & " = @id AND `" & nameCol & "` = @cname LIMIT 1"
Using cmd As New MySqlCommand(sql, CONN, trans)
[Link]("@id", orderID)
[Link]("@cname",
customerName)
If [Link]() IsNot Nothing Then
sourceTable = [Link]
idColumn = [Link]
Exit For
End If
End Using
Next

If [Link](sourceTable) Then
[Link]()
[Link]("Order not found for the selected
client.", "Error", [Link], [Link])
Exit Sub
End If

Dim payMethod As String =


cbopayment_method.[Link]()
Dim insPay As String = "INSERT INTO tblpayment
(client_id, Name, Amount_paid, Dateordered, Payment) " &
"VALUES (@cid, @name, @amt,
@date, @method)"
Using cmd As New MySqlCommand(insPay, CONN, trans)
[Link]("@cid", clientID)
[Link]("@name", customerName)
[Link]("@amt", amountPaid)
[Link]("@date",
[Link]("M/d/y"))
[Link]("@method", payMethod)
[Link]()
End Using

Dim updBal As String = "UPDATE `" & sourceTable & "` SET
balance = @newbal WHERE " & idColumn & " = @id"
Using cmd As New MySqlCommand(updBal, CONN, trans)
[Link]("@newbal", newBalance)
[Link]("@id", orderID)
Dim rows As Integer = [Link]()
If rows = 0 Then
[Link]()
[Link]("Failed to update balance.",
"Error", [Link], [Link])
Exit Sub
End If
End Using

If newBalance <= 0 Then


Dim updStat As String = "UPDATE `" & sourceTable &
"` SET Order_Status = 'Available for pick up' WHERE " & idColumn & " =
@id"
Using cmd As New MySqlCommand(updStat, CONN, trans)
[Link]("@id", orderID)
[Link]()
End Using
End If

[Link]()
[Link]("Payment successful! New balance: P" &
[Link]("N2"), "Success", [Link],
[Link])

If [Link]("Print receipt now?", "Receipt",


[Link], [Link]) = [Link]
Then
btnprint_reciept_Click(sender, e)
End If

RefreshDataGrid()
RichTextBox_amount.Text = "0.00"
For Each r As DataGridViewRow In [Link]
If [Link]("No").[Link]() = orderIDStr Then
[Link] = [Link](0)
[Link] = True
Exit For
End If
Next
LoadTotalBalance()
UpdatePayButtonState()

Catch ex As Exception
[Link]()
Throw
End Try
Catch ex As Exception
[Link]("Payment error: " & [Link], "Error",
[Link], [Link])
[Link](LogPath, Now & " PAY ERROR: " &
[Link] & vbCrLf)
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub RichTextBox_amount_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles RichTextBox_amount.TextChanged
Dim amount As Decimal
If Not [Link](RichTextBox_amount.Text, amount) OrElse
amount < 0 Then
RichTextBox_amount.Text = "0.00"
Exit Sub
End If

Dim balance As Decimal


If [Link] Is Nothing OrElse Not
[Link]([Link]("Balance").[Link]
g(), balance) Then
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
[Link] = False
Exit Sub
End If

RichTextBox_balance.Text = [Link]("N2")

If balance <= 0 Then


RichTextBox_amount.Text = "0.00"
RichTextBox_change.Text = "0.00"
[Link] = False
Exit Sub
End If

If amount > balance Then


[Link]("Payment cannot exceed balance.", "Invalid",
[Link], [Link])
RichTextBox_amount.Text = [Link]("N2")
amount = balance
End If

Dim change As Decimal = balance - amount


RichTextBox_change.Text = [Link]("N2")

UpdatePayButtonState()
End Sub
Private Sub LoadTotalBalance()
If [Link] Is Nothing OrElse
[Link]("Balance").Value Is Nothing Then
RichTextBox_balance.Text = "0.00"
[Link] = "Total Balance: P0.00"
RichTextBox_change.Text = "0.00"
UpdatePayButtonState()
Exit Sub
End If

Try
Dim balance As Decimal =
[Link]([Link]("Balance").Value)
RichTextBox_balance.Text = [Link]("N2")

Dim clientID As String =


[Link]("Client ID").[Link]()
If [Link] = [Link] Then [Link]()

Dim query As String = _


"SELECT balance FROM tblrepair_orders WHERE client_no =
@cid " & _
"UNION ALL SELECT balance FROM tblmale_orders WHERE
male_no = @cid " & _
"UNION ALL SELECT balance FROM tblfemale_orders WHERE
female_no = @cid " & _
"UNION ALL SELECT balance FROM tbl_orders WHERE
client_no = @cid"

Using cmd As New MySqlCommand(query, CONN)


[Link]("@cid", clientID)
Using reader As MySqlDataReader = [Link]()
Dim total As Decimal = 0
While [Link]()
total += [Link](0)
End While
[Link] = "Total Balance: P" &
[Link]("N2")
End Using
End Using

UpdatePayButtonState()
Catch ex As Exception
[Link]("Error loading balance: " & [Link])
RichTextBox_balance.Text = "0.00"
[Link] = "Total Balance: P0.00"
UpdatePayButtonState()
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e
As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim row = [Link]([Link])
[Link] = [Link]("No").[Link]()
RichTextBox_name.Text = [Link]("Customer
Name").[Link]()
RichTextBox_amount.Text = "0.00"
LoadTotalBalance()
UpdatePayButtonState()
End If
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
Try
If [Link] Is Nothing OrElse
[Link] = 0 Then
RichTextBox_amount.Text = "0.00"
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
[Link] = "Total Balance: P0.00"
UpdatePayButtonState()
Exit Sub
End If

Dim amount As Decimal


If Not [Link](RichTextBox_amount.Text, amount)
Then
RichTextBox_amount.Text = "0.00"
End If

Dim balance As Decimal


If Not
[Link]([Link]("Balance").[Link]
g(), balance) Then
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
UpdatePayButtonState()
Exit Sub
End If

RichTextBox_balance.Text = [Link]("N2")
Dim change As Decimal = balance - amount
If change < 0 Then change = 0
RichTextBox_change.Text = [Link]("N2")
UpdatePayButtonState()
Catch ex As Exception
[Link](LogPath, [Link] & ":
SelectionChanged Error: " & [Link] & vbCrLf)
RichTextBox_amount.Text = "0.00"
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
UpdatePayButtonState()
End Try
End Sub
Private Sub frmpayment_Load(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
[Link] = ""
RichTextBox_amount.Text = "0.00"
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
cbopayment_method.[Link]()
cbopayment_method.[Link]("E-Wallet")
cbopayment_method.[Link]("Cash")
cbopayment_method.SelectedIndex =
cbopayment_method.[Link]("Cash")
cbopayment_method.DropDownStyle = [Link]

RefreshDataGrid()
StyleDataGridView()
LoadCombinedOrders()

If [Link] > 0 Then


[Link]()
RichTextBox_amount.Text = "0.00"
RichTextBox_balance.Text = "0.00"
RichTextBox_change.Text = "0.00"
[Link] = "Total Balance: P0.00"
End If
ComboBox_filter.SelectedItem = "Name"
UpdatePayButtonState()
End Sub
End Class
Edit Profile Code
Imports [Link]
Imports [Link]
Imports [Link]

Public Class frmprofile


Private Const AesKey As String = "12345678901234567890123456789012"
Private Const AesIV As String = "1234567890123456"

Private Function IsNullOrWhiteSpace(ByVal value As String) As


Boolean
Return [Link](value) OrElse [Link]().Length =
0
End Function

Private Function EncryptData(ByVal plainText As String) As String


If [Link](plainText) Then Return ""
Try
Using aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)
Using encryptor As ICryptoTransform =
[Link]()
Dim plainBytes As Byte() =
[Link](plainText)
Dim encryptedBytes As Byte() =
[Link](plainBytes, 0, [Link])
Return Convert.ToBase64String(encryptedBytes)
End Using
End Using
Catch
Return plainText
End Try
End Function

Private Function DecryptData(ByVal encryptedText As String) As


String
If IsNullOrWhiteSpace(encryptedText) Then Return ""

encryptedText = [Link]()

Dim mod4 As Integer = [Link] Mod 4


If mod4 > 0 Then
encryptedText &= New String("="c, 4 - mod4)
End If

Dim cipherBytes As Byte()


Try
cipherBytes = Convert.FromBase64String(encryptedText)
Catch
Return encryptedText
End Try

If [Link] = 0 Then Return ""

Try
Using aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)
[Link] = [Link]
[Link] = PaddingMode.PKCS7
Using decryptor As ICryptoTransform =
[Link]()
Dim plainBytes As Byte() =
[Link](cipherBytes, 0, [Link])
Return [Link](plainBytes)
End Using
End Using
Catch
Return encryptedText
End Try
End Function

Private Sub LoadUserData(ByVal userName As String)


Try
If [Link] = [Link] Then
[Link]()
Dim sql As String = "SELECT Username, Password, Gmail,
'tblusers' AS TableName FROM tblusers WHERE Complete_Name =
@Complete_Name " &
"UNION SELECT Username, Password, Gmail,
'tbl_staffs' AS TableName FROM tbl_staffs WHERE Name = @Complete_Name"
Using cmd As New MySqlCommand(sql, [Link])
[Link]("@Complete_Name", userName)
Using reader As MySqlDataReader = [Link]()
If [Link]() Then
txtprofile_username.Text =
reader("Username").ToString()
[Link] = reader("Gmail").ToString()
txtprofile_password.Text =
DecryptData(reader("Password").ToString())
[Link] =
reader("TableName").ToString()
Else
[Link]("User data not found!", "Error",
[Link], [Link])
[Link]()
End If
End Using
End Using
Catch ex As Exception
[Link]("Error loading user data: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub
Private Sub frmprofile_Load(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
Dim parentForm As frmmain = TryCast([Link], frmmain)
If parentForm Is Nothing OrElse [Link] Is Nothing
OrElse IsNullOrWhiteSpace([Link]) Then
[Link]("User not found!", "Error",
[Link], [Link])
[Link]()
Exit Sub
End If
LoadUserData([Link])
txtprofile_password.PasswordChar = "*"
End Sub
Private Sub btnshowpassword_CheckedChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
[Link]
If [Link] Then
If IsNullOrWhiteSpace(txtprofile_username.Text) Then
[Link]("Please enter a username.", "Warning",
[Link], [Link])
[Link] = False
Exit Sub
End If
Dim frm As New frmshowpassword(txtprofile_username.Text)
[Link]()
If [Link] Then
txtprofile_password.PasswordChar = [Link]
Else
[Link] = False
txtprofile_password.PasswordChar = "*"
End If
Else
txtprofile_password.PasswordChar = "*"
End If
End Sub
Private Sub btnforgotpassword_Click(ByVal sender As Object, ByVal e
As EventArgs) Handles [Link]
If IsNullOrWhiteSpace(txtprofile_username.Text) Then
[Link]("Please enter a username.", "Warning",
[Link], [Link])
Exit Sub
End If
Dim frm As New frmshowpassword(txtprofile_username.Text)
[Link]()
If [Link] Then
txtprofile_password.PasswordChar = [Link]
[Link]("Correct! You can now reset your password.",
"Success", [Link], [Link])
Else
[Link]("Incorrect answer.", "Error",
[Link], [Link])
txtprofile_password.PasswordChar = "*"
End If
End Sub
Private Sub btnprofile_save_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnprofile_save.Click
If IsNullOrWhiteSpace(txtprofile_username.Text) OrElse
IsNullOrWhiteSpace(txtprofile_password.Text) Then
[Link]("Username and Password cannot be empty!",
"Error", [Link], [Link])
Exit Sub
End If

Dim parentForm As frmmain = TryCast([Link], frmmain)


If parentForm Is Nothing Then
[Link]("Main form not found!", "Error",
[Link], [Link])
Exit Sub
End If

Dim userName As String = [Link]


Dim tableName As String = [Link]
Dim newGmail As Object = If(IsNullOrWhiteSpace([Link]),
[Link], [Link]())

Try
If [Link] = [Link] Then
[Link]()

Dim sql As String = "UPDATE " & tableName & " SET " &
"Username = @Username, " &
"Password = @Password, " &
"Gmail = @Gmail " &
"WHERE " & If(tableName = "tblusers",
"Complete_Name", "Name") & " = @Complete_Name"

Using cmd As New MySqlCommand(sql, [Link])


[Link]("@Username",
txtprofile_username.[Link]())
[Link]("@Password",
EncryptData(txtprofile_password.[Link]()))
[Link]("@Gmail", newGmail)
[Link]("@Complete_Name", userName)

If [Link]() > 0 Then


[Link]("Profile updated successfully!
System will log out now.", "Success", [Link],
[Link])

Dim loginForm As New frmlogin()


[Link] = True
[Link] =
[Link]
[Link]()
Dim openForms As New List(Of Form)
([Link](Of Form)())
For Each f As Form In openForms
If f IsNot loginForm AndAlso f IsNot Me AndAlso
Not [Link] Then
[Link]()
End If
Next

[Link]()
Else
[Link]("Update failed!", "Error",
[Link], [Link])
End If
End Using
Catch ex As Exception
[Link]("Error updating profile: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub
End Class
Create Regular Orders Code
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmregular_orders
Private CONN As MySqlConnection = [Link]
Private QUERY As String
Private Sub btnadd_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
ClearInputs()
SetControlsEnabled(True)
[Link] = False
[Link] = False
[Link] = True
[Link] = True
[Link] = True
[Link] = True
UpdateSlashLabels()
[Link] = False
[Link] = False
cbopayment_method.Enabled = True
End Sub
Private Sub btncancel_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
SetControlsEnabled(False)
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = True
[Link] = True
UpdateSlashLabels()
cbopayment_method.Enabled = False
End Sub
Private Sub LoadClientNames()
Try
If [Link] = [Link] Then [Link]()
QUERY = "SELECT Name FROM tbl_clients"
Using Comm As New MySqlCommand(QUERY, CONN)
Using reader As MySqlDataReader = [Link]()
[Link] =
[Link]
[Link] =
[Link]
Dim clientNames As New
AutoCompleteStringCollection()
While [Link]()
[Link](reader("Name").ToString())
End While
[Link] = clientNames
End Using
End Using
Catch ex As Exception
[Link]("Error loading client names: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub txtname_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
If [Link]([Link]()) Then
[Link] = ""
UpdateSlashLabels()
Exit Sub
End If
If [Link] = [Link] Then [Link]()
QUERY = "SELECT No FROM tbl_clients WHERE Name = @name LIMIT
1"
Using Comm As New MySqlCommand(QUERY, CONN)
[Link]("@name",
[Link]())
Using reader As MySqlDataReader = [Link]()
If [Link]() Then
[Link] = reader("No").ToString()
Else
[Link] = "Not Found"
End If
End Using
End Using
UpdateSlashLabels()
Catch ex As Exception
[Link]("Error fetching client number: " &
[Link], "Error", [Link], [Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub radiobutton_fullpay_CheckedChanged(ByVal sender As
Object, ByVal e As EventArgs) Handles radiobutton_fullpay.CheckedChanged
fullpay()
End Sub
Private Sub fullpay()
If radiobutton_fullpay.Checked Then
[Link] = [Link]
Else
[Link] = "0"
End If
UpdateSlashLabels()
End Sub
Private Sub LinkLabel_tempale_LinkClicked(ByVal sender As
[Link], ByVal e As
[Link]) Handles
LinkLabel_tempale.LinkClicked
Dim chooseTemplateForm As New frmchoose_template()
If [Link]() = [Link] Then
RichTextBox_template_name.Text =
[Link]
[Link] = [Link]
PictureBox_template.Image =
[Link]
UpdateSlashLabels()
End If
End Sub
Private Sub SetControlsEnabled(ByVal enabled As Boolean)
[Link] = enabled
[Link] = enabled
RichTextBox_template_name.Enabled = enabled
ComboBox_size.Enabled = enabled
NumericUpDown_quantity.Enabled = enabled
[Link] = enabled
radiobutton_downpayment.Enabled = enabled
radiobutton_fullpay.Enabled = enabled
[Link] = enabled
[Link] = enabled
[Link] = enabled
[Link] = enabled
[Link] = enabled
End Sub
Private Sub UpdateTotalAmount()
Dim price As Decimal
Dim quantity As Integer =
Convert.ToInt32(NumericUpDown_quantity.Value)
If [Link]([Link], price) Then
Dim totalAmount As Decimal = price * quantity
[Link] = [Link]("F2")
UpdateBalance()
Else
[Link]()
End If
UpdateSlashLabels()
End Sub
Private Sub UpdateBalance()
Dim totalAmount As Decimal
Dim amountPaid As Decimal
If [Link]([Link], totalAmount) AndAlso
[Link]([Link], amountPaid) Then
Dim balance As Decimal = totalAmount - amountPaid
[Link] = [Link]("F2")
Else
[Link] = "0.00"
End If
End Sub
Private Sub txtprice_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
If Not [Link]([Link]) AndAlso Not
IsNumeric([Link]) Then
[Link]("Please enter a valid numeric value for
price.", "Invalid Input", [Link], [Link])
[Link] = ""
End If
UpdateTotalAmount()
UpdateSlashLabels()
End Sub
Private Sub txtamount_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
If Not [Link]([Link]) AndAlso Not
IsNumeric([Link]) Then
[Link]("Please enter a valid numeric value for
amount.", "Invalid Input", [Link], [Link])
[Link] = ""
End If
UpdateBalance()
UpdateSlashLabels()
End Sub
Private Sub NumericUpDown_quantity_ValueChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
NumericUpDown_quantity.ValueChanged
If NumericUpDown_quantity.Value < 1 Then
NumericUpDown_quantity.Value = 1
End If
UpdateTotalAmount()
UpdateSlashLabels()
End Sub
Private Sub ComboBox_size_SelectedIndexChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
ComboBox_size.SelectedIndexChanged
UpdateSlashLabels()
End Sub
Private Sub txttotalpayment_TextChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
[Link]
UpdateSlashLabels()
End Sub
Private Sub UpdateSlashLabels()
[Link] = [Link]([Link]())
[Link] = ComboBox_size.SelectedIndex = -1
[Link] = NumericUpDown_quantity.Value <= 1
[Link] = [Link]([Link]())
[Link] = [Link]([Link]())
[Link] =
[Link]([Link]())
End Sub
Private Sub lbltotal_TextChanged(ByVal sender As Object, ByVal e As
[Link]) Handles [Link]
Dim rowCount As Integer = [Link]
[Link] = "Number of Orders: " & [Link]()
End Sub
Private Sub frmregular_orders_Load(ByVal sender As Object, ByVal e
As EventArgs) Handles [Link]
LoadClientNames()
LoadOrders()
[Link] = ""
radiobutton_downpayment.Checked = True
NumericUpDown_quantity.Minimum = 1
NumericUpDown_quantity.Value = 1
SetControlsEnabled(False)
[Link] = False
[Link] = False
[Link] = False
[Link] = False
UpdateSlashLabels()
Cursor = [Link]
[Link] = [Link]
cbopayment_method.[Link]()
cbopayment_method.[Link]("Cash")
cbopayment_method.[Link]("E-Cash")
cbopayment_method.SelectedIndex =
cbopayment_method.[Link]("Cash")
cbopayment_method.DropDownStyle = [Link]
cbopayment_method.SelectedIndex = 0
cbopayment_method.Enabled = False
End Sub
Private Sub LoadOrders()
Try
If [Link] = [Link] Then [Link]()

QUERY = "SELECT order_id, client_no, name, template, size,


quantity, price, total_amount, Payment_Method, payment, amount, balance,
Order_Status, due_date, remarks, order_date " &
"FROM tbl_orders ORDER BY order_date ASC"
Dim DA As New MySqlDataAdapter(QUERY, CONN)
Dim DT As New DataTable()
[Link](DT)
[Link] = DT

With DataGridView1
.AutoSizeColumnsMode =
[Link]
.SelectionMode = [Link]
.ReadOnly = True
.AllowUserToAddRows = False
.[Link] = 30
.BorderStyle = BorderStyle.Fixed3D
If .[Link]("name")
Then .Columns("name").Frozen = True

For Each column As DataGridViewColumn In .Columns


Select Case [Link]()
Case "order_id"
[Link] = "Order ID"
Case "client_no"
[Link] = "Client ID"
Case "name"
[Link] = "Client Name"
Case "template"
[Link] = "Template Name"
Case "size"
[Link] = "Size"
Case "quantity"
[Link] = "Quantity"
Case "price"
[Link] = "Unit Price"
Case "total_amount"
[Link] = "Total Amount"
Case "payment_method"
[Link] = "Payment Method"
Case "payment"
[Link] = "Payment Type"
Case "amount"
[Link] = "Amount Paid"
Case "balance"
[Link] = "Balance"
Case "order_status"
[Link] = "Order Status"
Case "due_date"
[Link] = "Due Date"
Case "remarks"
[Link] = "Remarks"
Case "order_date"
[Link] = "Order Date"
End Select
[Link] = New Font("Arial",
9.75!, [Link])
[Link] =
[Link]
Next
.[Link] =
[Link]
.[Link] =
[Link]
End With

[Link] = "Number of Orders: " &


[Link]()
Catch ex As Exception
[Link]("Error loading orders: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub ClearInputs()
[Link]()
[Link] = ""
RichTextBox_template_name.Clear()
NumericUpDown_quantity.Value = 1
[Link]()
[Link]()
[Link]()
ComboBox_size.SelectedIndex = -1
[Link]()
[Link] = "0.00"
[Link] = [Link]
radiobutton_downpayment.Checked = True
radiobutton_fullpay.Checked = False
PictureBox_template.Image = Nothing
UpdateSlashLabels()
cbopayment_method.Enabled = False
End Sub
Private Sub btnedit_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
If [Link] = 0 Then
[Link]("Please select an order to edit.", "No
Selection", [Link], [Link])
Exit Sub
End If

[Link] = True
RichTextBox_template_name.ReadOnly = True
cbopayment_method.Enabled = True

[Link] = False
[Link] = False
btnsave_update.Visible = True
lblsave_update.Visible = True
[Link] = False
[Link] = False
cbopayment_method.Enabled = True
End Sub
Private Function ConvertImageToBase64(ByVal imageBytes As Byte()) As
String
Return Convert.ToBase64String(imageBytes)
End Function
Private Sub btnprint_reciept_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnprint_reciept.Click
If [Link] = 0 Then
[Link]("Please select a row from the DataGridView
to preview.", "No Selection",
[Link],
[Link])
Exit Sub
End If

Try
Dim rpt As New rptRegularReceipt()
Dim reportPath As String =
[Link]([Link], "reports\
[Link]")

If Not [Link](reportPath) Then


[Link]("Report file not found: " & reportPath,
"Error",
[Link],
[Link])
Exit Sub
End If
[Link](reportPath)

Dim ds As New RegularOrdersDataSet()


Dim dt As RegularOrdersDataSet.tbl_ordersDataTable =
ds.tbl_orders
Dim selectedRow As DataGridViewRow =
[Link](0)
Dim newRow As RegularOrdersDataSet.tbl_ordersRow =
dt.Newtbl_ordersRow()

[Link] = If(IsDBNull([Link]("name").Value),
"", [Link]("name").[Link]())
[Link] =
If(IsDBNull([Link]("template").Value), "",
[Link]("template").[Link]())
[Link] = If(IsDBNull([Link]("size").Value),
"", [Link]("size").[Link]())
[Link] =
If(IsDBNull([Link]("quantity").Value), 0,
Convert.ToInt32([Link]("quantity").Value))
[Link] =
If(IsDBNull([Link]("price").Value), 0D,
[Link]([Link]("price").Value))
newRow.total_amount =
If(IsDBNull([Link]("total_amount").Value), 0D,
[Link]([Link]("total_amount").Value))
newRow.Payment_Method =
If(IsDBNull([Link]("Payment_Method").Value), "",
[Link]("Payment_Method").[Link]())
[Link] =
If(IsDBNull([Link]("payment").Value), "",
[Link]("payment").[Link]())
[Link] =
If(IsDBNull([Link]("amount").Value), 0D,
[Link]([Link]("amount").Value))
[Link] =
If(IsDBNull([Link]("balance").Value), 0D,
[Link]([Link]("balance").Value))
newRow.Order_Status =
If(IsDBNull([Link]("Order_Status").Value), "",
[Link]("Order_Status").[Link]())
newRow.due_date =
If(IsDBNull([Link]("due_date").Value), [Link],
[Link]([Link]("due_date").Value))
[Link] =
If(IsDBNull([Link]("remarks").Value), "",
[Link]("remarks").[Link]())
newRow.order_date =
If(IsDBNull([Link]("order_date").Value), [Link],
[Link]([Link]("order_date").Value))

dt.Addtbl_ordersRow(newRow)
[Link](ds)
Dim mainForm As frmmain = Nothing
For Each f As Form In [Link]
If TypeOf f Is frmmain Then
mainForm = DirectCast(f, frmmain)
Exit For
End If
Next
If mainForm Is Nothing Then
[Link]("Main form not found. Cannot retrieve
business name, location, or logo.", "Error",
[Link],
[Link])
Exit Sub
End If
Dim businessName As String = If(mainForm.lbl_business_name
IsNot Nothing, mainForm.lbl_business_name.[Link](), "")
Dim locationText As String = If([Link] IsNot
Nothing, [Link](), "UNKNOWN LOCATION")

Try
[Link]("BusinessName").Text =
"'" & [Link]("'", "''") & "'"
Catch ex As Exception
[Link]("Formula field 'BusinessName' not found
in report. " & [Link], "Error",
[Link],
[Link])
End Try

Try
[Link]("Location").Text = "'"
& [Link]("'", "''") & "'"
Catch ex As Exception
[Link]("Formula field 'Location' not found in
report. " & [Link], "Error",
[Link],
[Link])
End Try
Dim tempLogoPath As String =
[Link]([Link](), "temp_logo_" &
[Link]().ToString() & ".png")
Try
If mainForm.PictureBox_frmmain_logo IsNot Nothing
AndAlso mainForm.PictureBox_frmmain_logo.Image IsNot Nothing Then
Dim originalLogo As Image =
mainForm.PictureBox_frmmain_logo.Image
Dim fixedWidth As Integer = 550
Dim fixedHeight As Integer = 500
Using resizedLogo As New Bitmap(fixedWidth,
fixedHeight)
Using g As Graphics =
[Link](resizedLogo)
[Link] =
[Link]
[Link](originalLogo, 0, 0, fixedWidth,
fixedHeight)
End Using
[Link](tempLogoPath,
[Link])
End Using
[Link]("Logo", tempLogoPath)
End If
Catch ex As Exception
[Link]("Error setting logo: " & [Link],
"Error", [Link], [Link])
End Try

Dim previewForm As New frmRegularReceiptPreview(rpt)


[Link]()

[Link]()
If [Link](tempLogoPath) Then
[Link](tempLogoPath)

Catch ex As Exception
[Link]("Error preparing regular order preview: " &
[Link], "Error",
[Link], [Link])
End Try
End Sub
Private Function SafeCell(ByVal row As DataGridViewRow, ByVal
columnName As String) As String
If [Link](columnName).Value Is [Link] OrElse
[Link](columnName).Value Is Nothing Then
Return ""
End If
Return [Link](columnName).[Link]()
End Function
Private Function SafeToInt(ByVal row As DataGridViewRow, ByVal
columnName As String) As Integer
Try
Return Convert.ToInt32([Link](columnName).Value)
Catch
Return 0
End Try
End Function
Private Function SafeToDecimal(ByVal row As DataGridViewRow, ByVal
columnName As String) As Decimal
Try
Return [Link]([Link](columnName).Value)
Catch
Return 0D
End Try
End Function
Private Function SafeToDate(ByVal row As DataGridViewRow, ByVal
columnName As String) As Date
Try
Return [Link]([Link](columnName).Value)
Catch
Return [Link]
End Try
End Function
Private ReadOnly Property LogPath As String
Get
Dim path As String =
[Link]([Link]([Link]
icationData), "Tailoring_System\[Link]")
[Link]([Link](path))
' Ensure directory exists
Return path
End Get
End Property
Private Sub btnsave_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
If [Link]([Link]) OrElse
[Link](RichTextBox_template_name.Text) OrElse
[Link](ComboBox_size.Text) OrElse
[Link]([Link]) OrElse
[Link]([Link]) OrElse
cbopayment_method.SelectedIndex = -1 Then
[Link]("Please fill in all required fields and
select a payment method.", "Missing Data", [Link],
[Link])
Exit Sub
End If

If Not radiobutton_fullpay.Checked AndAlso Not


radiobutton_downpayment.Checked Then
[Link]("Please select a payment type (Full
Payment or Down Payment)!", "Warning", [Link],
[Link])
Exit Sub
End If

If [Link] = [Link] Then [Link]()

QUERY = "INSERT INTO tbl_orders (client_no, name, template,


size, quantity, price, total_amount, Payment_Method, payment, amount,
balance, Order_Status, due_date, remarks, order_date) " &
"VALUES (@client_no, @name, @template, @size,
@quantity, @price, @total_amount, @payment_method, @payment, @amount,
@balance, @order_status, @due_date, @remarks, @order_date)"
Using Comm As New MySqlCommand(QUERY, CONN)
[Link]("@client_no", [Link])
[Link]("@name", [Link])
[Link]("@template",
RichTextBox_template_name.Text)
[Link]("@size",
ComboBox_size.Text)
[Link]("@quantity",
NumericUpDown_quantity.Value)
[Link]("@price",
If([Link]([Link]), 0,
[Link]([Link])))
[Link]("@total_amount",
If([Link]([Link]), 0,
[Link]([Link])))
[Link]("@payment_method",
cbopayment_method.Text)
[Link]("@payment",
If(radiobutton_fullpay.Checked, "Full Payment", "Down Payment"))
[Link]("@amount",
If([Link]([Link]), 0,
[Link]([Link])))
[Link]("@balance",
If([Link]([Link]), 0,
[Link]([Link])))
[Link]("@order_status", "Pending")
[Link]("@due_date",
[Link])
[Link]("@remarks",
[Link])
[Link]("@order_date",
[Link])
[Link]()
End Using

Dim formattedDateOrdered As String =


[Link]("MM-dd-yyyy")
Dim paymentQuery As String = "INSERT INTO tblpayment
(client_id, Name, Amount_paid, Dateordered, Payment) " &
"VALUES (@client_id, @name,
@amount_paid, @dateordered, @payment_method)"
Using paymentComm As New MySqlCommand(paymentQuery, CONN)
[Link]("@client_id",
[Link]([Link]))
[Link]("@name",
[Link])
[Link]("@amount_paid",
[Link]([Link]))
[Link]("@dateordered",
formattedDateOrdered)
[Link]("@payment_method",
cbopayment_method.Text)
[Link]()
End Using

[Link]("Order and payment added successfully!",


"Success", [Link], [Link])
ClearInputs()
PictureBox_template.Image = Nothing
SetControlsEnabled(False)
[Link] = True
RichTextBox_template_name.ReadOnly = True
cbopayment_method.Enabled = False
[Link] = True
[Link]()
[Link] = True
[Link] = True
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
cbopayment_method.Enabled = False
LoadOrders()
Catch ex As Exception
[Link]("Error adding order: " & [Link],
"Error", [Link], [Link])
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": Save error: " &
[Link] & vbCrLf)
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles [Link]
If [Link] > 0 Then
Try
Dim selectedRow As DataGridViewRow =
[Link](0)
[Link] = If([Link]("client_no").Value Is
[Link], "", [Link]("client_no").[Link]())
[Link] = If([Link]("name").Value Is
[Link], "", [Link]("name").[Link]())
RichTextBox_template_name.Text =
If([Link]("template").Value Is [Link], "",
[Link]("template").[Link]())
ComboBox_size.Text = If([Link]("size").Value
Is [Link], "", [Link]("size").[Link]())

Dim quantityValue As Object =


[Link]("quantity").Value
If quantityValue Is [Link] OrElse Not
IsNumeric(quantityValue) Then
NumericUpDown_quantity.Value = 1
Else
Try
NumericUpDown_quantity.Value =
Convert.ToInt32(quantityValue)
Catch
NumericUpDown_quantity.Value = 1
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": Invalid
quantity: " & [Link]() & vbCrLf)
End Try
End If

[Link] = If([Link]("price").Value Is
[Link], "",
[Link]([Link]("price").Value).ToString("F2"))
[Link] =
If([Link]("total_amount").Value Is [Link], "",
[Link]([Link]("total_amount").Value).ToString("F2"
))
cbopayment_method.Text =
If([Link]("Payment_Method").Value Is [Link], "",
[Link]("Payment_Method").[Link]())
[Link] = If([Link]("amount").Value Is
[Link], "",
[Link]([Link]("amount").Value).ToString("F2"))
[Link] = If([Link]("balance").Value
Is [Link], "0.00",
[Link]([Link]("balance").Value).ToString("F2"))
[Link] = If([Link]("remarks").Value
Is [Link], "", [Link]("remarks").[Link]())
[Link] =
If([Link]("due_date").Value Is [Link], [Link],
[Link]([Link]("due_date").Value))

Dim paymentType As String =


If([Link]("payment").Value Is [Link], "Down Payment",
[Link]("payment").[Link]())
If paymentType = "Full Payment" Then
radiobutton_fullpay.Checked = True
radiobutton_downpayment.Checked = False
Else
radiobutton_downpayment.Checked = True
radiobutton_fullpay.Checked = False
End If

Dim templateName As String =


If([Link]("template").Value Is [Link], "",
[Link]("template").[Link]())
LoadTemplateImage(templateName)

Catch ex As Exception
[Link]("Error loading row data: " & [Link],
"Error", [Link], [Link])
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": Row data error:
" & [Link] & vbCrLf)
PictureBox_template.Image = Nothing
End Try
Else
ClearInputs()
PictureBox_template.Image = Nothing
End If
End Sub
Private Sub btnsave_update_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles btnsave_update.Click
If [Link] = 0 Then
[Link]("Please select an order to update.", "No
Selection", [Link], [Link])
Exit Sub
End If

Try
If cbopayment_method.SelectedIndex = -1 Then
[Link]("Please select a payment method (Onhand
or Gcash).", "Missing Data", [Link],
[Link])
Exit Sub
End If

Dim selectedRow As DataGridViewRow =


[Link](0)
Dim orderId As Integer =
Convert.ToInt32([Link]("order_id").Value)

If [Link] = [Link] Then [Link]()


QUERY = "UPDATE tbl_orders SET Payment_Method =
@payment_method WHERE order_id = @order_id"
Using Comm As New MySqlCommand(QUERY, CONN)
[Link]("@payment_method",
cbopayment_method.[Link]())
[Link]("@order_id", orderId)
[Link]()
End Using

[Link]("Order updated successfully!", "Success",


[Link], [Link])

cbopayment_method.Enabled = False
[Link] = True
[Link] = True
btnsave_update.Visible = False
lblsave_update.Visible = False
[Link] = True
[Link] = True
LoadOrders()
cbopayment_method.Enabled = False
Catch ex As Exception
[Link]("Error updating order: " & [Link],
"Error", [Link], [Link])
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": Update error: "
& [Link] & vbCrLf)
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub LoadTemplateImage(ByVal templateName As String)
If Not [Link](templateName) Then
Try
If [Link] = [Link] Then [Link]()
QUERY = "SELECT Image_Template FROM tbl_template WHERE
Template_Name = @template_name"
Using Comm As New MySqlCommand(QUERY, CONN)
[Link]("@template_name",
templateName)
Using reader As MySqlDataReader =
[Link]()
If [Link]() AndAlso Not [Link](0)
Then
Dim imageData As Byte() =
DirectCast(reader("Image_Template"), Byte())
Using ms As New MemoryStream(imageData)
PictureBox_template.Image =
[Link](ms)
End Using
Else
PictureBox_template.Image = Nothing
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": No image found
for template: " & templateName & vbCrLf)
End If
End Using
End Using
Catch ex As Exception
[Link]("Error loading template image: " &
[Link], "Error", [Link], [Link])
PictureBox_template.Image = Nothing
[Link](LogPath,
[Link]("MM/dd/yyyy hh:mm:ss tt PST") & ": Image error: "
& [Link] & vbCrLf)
Finally
If [Link] = [Link] Then [Link]()
End Try
Else
PictureBox_template.Image = Nothing
End If
End Sub
Private Sub txtsearch_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
If [Link] = [Link] Then [Link]()

QUERY = "SELECT order_id, client_no, name, template, size,


quantity, price, total_amount, " &
"Payment_Method, payment, amount, balance,
Order_Status, due_date, remarks, order_date " &
"FROM tbl_orders " &
"WHERE client_no LIKE @search OR name LIKE @search
OR template LIKE @search OR size LIKE @search " &
"ORDER BY order_date ASC"

Dim DA As New MySqlDataAdapter(QUERY, CONN)


[Link]("@search", "%" &
[Link] & "%")

Dim DT As New DataTable()


[Link](DT)
[Link] = DT

[Link] = "Number of Orders: " &


[Link]()
Catch ex As Exception
[Link]("Error searching records: " & [Link],
"Error", [Link], [Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
End Class
Repair Order Code
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmRepair
Private lastResetDate As DateTime
Private Sub DisableFields()
[Link] = False
[Link] = False
[Link] = False
NumericUpDown_quantity.Enabled = False
[Link] = False
radiobutton_downpayment.Enabled = False
radiobutton_fullpay.Enabled = False
[Link] = False
txttotal_amount.Enabled = False
[Link] = False
[Link] = False
[Link] = False
cbopayment_method.Enabled = False
End Sub
Private Sub EnableFields()
[Link] = True
[Link] = True
[Link] = True
NumericUpDown_quantity.Enabled = True
[Link] = True
radiobutton_downpayment.Enabled = True
radiobutton_fullpay.Enabled = True
[Link] = True
txttotal_amount.Enabled = True
[Link] = True
[Link] = True
[Link] = True
cbopayment_method.Enabled = True
End Sub
Private Sub LoadClientNames()
Try
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT Name FROM tbl_clients"
Using cmd As New MySqlCommand(query, conn)
Using reader As MySqlDataReader =
[Link]()
Dim autoComplete As New
AutoCompleteStringCollection()
While [Link]()
[Link](reader("Name").ToString())
End While
[Link] =
[Link]
[Link] =
[Link]
[Link] = autoComplete
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error loading client names: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub txtname_TextChanged(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
Try
If [Link]() = "" Then
[Link] = ""
[Link] = True
Exit Sub
End If
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT No FROM tbl_clients WHERE
Name = @name LIMIT 1"
Using cmd As New MySqlCommand(query, conn)
[Link]("@name",
[Link]())
Using reader As MySqlDataReader =
[Link]()
If [Link]() Then
[Link] = reader("No").ToString()
Else
[Link] = ""
End If
End Using
End Using
End Using
UpdateSlashLabels()
Catch ex As Exception
[Link]("Error fetching client number: " &
[Link], "Error", [Link], [Link])
End Try
End Sub
Private Sub radiobutton_fullpay_CheckedChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
radiobutton_fullpay.CheckedChanged
fullpay()
End Sub
Private Sub NumericUpDown_quantity_ValueChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
NumericUpDown_quantity.ValueChanged
If NumericUpDown_quantity.Value < 1 Then
NumericUpDown_quantity.Value = 1
End If
UpdateTotalAmount()
UpdateSlashLabels()
End Sub
Private Sub txtprice_TextChanged(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
If Not [Link]([Link]) AndAlso Not
IsNumeric([Link]) Then
[Link]("Please enter a valid numeric value for
price.", "Invalid Input", [Link], [Link])
[Link] = ""
End If
UpdateTotalAmount()
UpdateSlashLabels()
End Sub
Private Sub txtitems_TextChanged(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
UpdateSlashLabels()
End Sub
Private Sub txtamount_TextChanged(ByVal sender As [Link],
ByVal e As [Link]) Handles [Link]
If Not [Link]([Link]) AndAlso Not
IsNumeric([Link]) Then
[Link]("Please enter a valid numeric value for
amount.", "Invalid Input", [Link], [Link])
[Link] = ""
End If
UpdateBalance()
UpdateSlashLabels()
End Sub
Private Sub txttotal_amount_TextChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
txttotal_amount.TextChanged
UpdateSlashLabels()
End Sub
Private Sub UpdateSlashLabels()
[Link] = [Link]([Link]())
[Link] = [Link]([Link]())
[Link] = NumericUpDown_quantity.Value <= 1
[Link] = [Link]([Link]())
[Link] = [Link]([Link]())
[Link] =
[Link](txttotal_amount.[Link]())
End Sub
Private Sub ClearFields()
[Link] = ""
[Link] = ""
[Link] = ""
NumericUpDown_quantity.Value = 1
[Link] = ""
[Link] = ""
txttotal_amount.Text = ""
[Link] = "0.00"
[Link] = ""
[Link] = [Link]
[Link] = True
[Link] = True
UpdateSlashLabels()
cbopayment_method.SelectedIndex = 0
End Sub
Private Sub btnadd_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub btnadd_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub btnadd_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
ClearFields()
EnableFields()
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = True
[Link] = True
UpdateSlashLabels()
[Link] = False
[Link] = False
End Sub
Private Sub lbladd_Click(ByVal sender As Object, ByVal e As
[Link]) Handles [Link]
ClearFields()
EnableFields()
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = False
[Link] = False
UpdateSlashLabels()
End Sub
Private Sub btncancel_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
DisableFields()
[Link] = False
[Link] = False
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = True
[Link] = True
UpdateSlashLabels()
End Sub
Private Sub lblcancel_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
DisableFields()
[Link] = False
[Link] = False
[Link] = True
[Link] = True
UpdateSlashLabels()
End Sub
Private Sub lbladd_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub lbladd_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub btnsave_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub btnsave_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub lblsave_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub lblsave_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
End Sub
Private Sub lblsave_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link]()
End Sub
Private Sub btnprint_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub

Private Sub btnprint_MouseLeave(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
[Link] = [Link]
[Link] = [Link]
End Sub
Private Sub Timer1_Tick(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If ([Link] - lastResetDate).TotalDays >= 30 Then
ResetTotalAmount()
lastResetDate = [Link]
End If
End Sub
Private Sub ResetTotalAmount()
Try
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "UPDATE tblrepair_orders SET
total_amount = 0 WHERE total_amount > 0"
Using cmd As New MySqlCommand(query, conn)
[Link]()
End Using
End Using
[Link]("Total amount has been reset.", "Reset
Successful", [Link], [Link])
Catch ex As Exception
[Link]("Error resetting total amount: " &
[Link], "Error", [Link], [Link])
End Try
End Sub
Private Sub fullpay()
If radiobutton_fullpay.Checked Then
[Link] = txttotal_amount.Text
Else
[Link] = "0"
End If
UpdateSlashLabels()
End Sub
Private Sub UpdateTotalAmount()
Dim price As Decimal
Dim quantity As Integer = CInt(NumericUpDown_quantity.Value)
If [Link]([Link], price) Then
Dim totalAmount As Decimal = price * quantity
txttotal_amount.Text = [Link]("F2")
UpdateBalance()
Else
txttotal_amount.Text = ""
End If
UpdateSlashLabels()
End Sub
Private Sub UpdateBalance()
Dim total As Decimal
Dim amount As Decimal
If [Link](txttotal_amount.Text, total) AndAlso
[Link]([Link], amount) Then
Dim balance As Decimal = total - amount
[Link] = [Link]("F2")
Else
[Link] = "0.00"
End If
End Sub
Private Sub txtsearch_TextChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT * FROM tblrepair_orders
WHERE client_no LIKE @search OR name LIKE @search ORDER BY order_date
ASC"
Using da As New MySqlDataAdapter(query, conn)
[Link]("@search",
"%" & [Link] & "%")
Dim dt As New DataTable()
[Link](dt)
[Link] = dt
[Link] = [Link]()
End Using
End Using
Catch ex As Exception
[Link]("Error searching records: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e
As DataGridViewCellEventArgs) Handles [Link]
If [Link] >= 0 Then
Dim selectedRow As DataGridViewRow =
[Link]([Link])
[Link] = [Link]("repair_id").[Link]()
[Link] = [Link]("name").[Link]()
[Link] = [Link]("items").[Link]()
NumericUpDown_quantity.Value =
CDec([Link]("quantity").Value)
[Link] = [Link]("price").[Link]()
[Link] =
[Link]("remarks").[Link]()
[Link] =
[Link]("amountpaid").[Link]()
txttotal_amount.Text =
[Link]("total_amount").[Link]()
[Link] =
[Link]("balance").[Link]()

Dim paymentMethod As String =


[Link]("payment_method").[Link]()
cbopayment_method.SelectedItem = paymentMethod

Dim paymentType As String =


[Link]("payment").[Link]()
If paymentType = "Down Payment" Then
radiobutton_downpayment.Checked = True
radiobutton_fullpay.Checked = False
ElseIf paymentType = "Full Payment" Then
radiobutton_fullpay.Checked = True
radiobutton_downpayment.Checked = False
End If

[Link] = True
[Link] = True
[Link] = True
[Link] = True
NumericUpDown_quantity.Enabled = False
[Link] = False
[Link] = False
txttotal_amount.Enabled = False
[Link] = False
radiobutton_downpayment.Enabled = False
radiobutton_fullpay.Enabled = False
cbopayment_method.Enabled = False

UpdateSlashLabels()
End If
End Sub
Private Sub btnupdate_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If [Link]([Link]) OrElse
[Link]().Length = 0 Then
[Link]("No selected record to update.")
Return
End If

Try
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If

Dim query As String = "UPDATE tblrepair_orders " &


"SET remarks = @remarks,
Payment_Method = @payment_method " &
"WHERE repair_id = @repair_id"

Using cmd As New MySqlCommand(query, conn)


[Link]("@remarks",
[Link]())
[Link]("@payment_method",
cbopayment_method.[Link]())
[Link]("@repair_id",
Convert.ToInt32([Link]))

Dim rowsAffected As Integer = [Link]()


If rowsAffected > 0 Then
[Link]("Record updated successfully!")
Else
[Link]("No changes detected, but record
exists. Saved anyway.", "Info", [Link],
[Link])
End If
End Using
End Using

LoadOrders()
ClearFields()
DisableFields()
UpdateSlashLabels()
[Link] = False
[Link] = True
lblcancel_update.Visible = False
btncancel_update.Visible = False
[Link] = False
[Link] = False
[Link] = False
cbopayment_method.SelectedIndex = 0
[Link] = True
Catch ex As Exception
[Link]("Error updating record: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub btnedit_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If [Link]([Link]) OrElse
[Link]().Length = 0 Then
[Link]("Please select a record from the
DataGridView before editing.", "No Selection", [Link],
[Link])
Return
End If
[Link] = True
[Link] = True
[Link] = True
[Link] = True
cbopayment_method.Enabled = True
NumericUpDown_quantity.Enabled = False
[Link] = False
[Link] = False
txttotal_amount.Enabled = False
[Link] = False
radiobutton_downpayment.Enabled = False
radiobutton_fullpay.Enabled = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = True
[Link] = True
btncancel_update.Visible = True
lblcancel_update.Visible = True
UpdateSlashLabels()
cbopayment_method.SelectedIndex = 0
cbopayment_method.Enabled = False
End Sub

Private Sub btncancel_update_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles btncancel_update.Click
[Link] = True
[Link] = True
[Link] = True
[Link] = False
NumericUpDown_quantity.Enabled = False
[Link] = False
[Link] = False
txttotal_amount.Enabled = False
[Link] = False
radiobutton_downpayment.Enabled = False
radiobutton_fullpay.Enabled = False
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = False
[Link] = False
[Link] = False
[Link] = False
btncancel_update.Visible = False
lblcancel_update.Visible = False
UpdateSlashLabels()
cbopayment_method.SelectedIndex = 0
End Sub

Private Sub LoadOrders()


Try
Using conn As MySqlConnection = [Link]
If [Link] = [Link] Then
[Link]()
End If
Dim query As String = "SELECT repair_id, client_no,
name, items, quantity, price, total_amount, payment, Payment_Method,
amountpaid, balance, duedate, remarks, order_date, Order_Status,
Cutter_and_Sewer, Dateordered " &
"FROM tblrepair_orders " &
"ORDER BY order_date ASC"
Using da As New MySqlDataAdapter(query, conn)
Dim dt As New DataTable
[Link](dt)
[Link] = dt

With DataGridView1
.AutoSizeColumnsMode =
[Link]
.SelectionMode =
[Link]
.ReadOnly = True
.AllowUserToAddRows = False
.[Link] = 30
.BorderStyle = BorderStyle.Fixed3D
.Columns(2).Frozen = True
For Each column As DataGridViewColumn
In .Columns
Select Case [Link]()
Case "repair_id"
[Link] = "Order ID"
Case "name"
[Link] = "Client Name"
Case "items"
[Link] = "Items"
Case "quantity"
[Link] = "Quantity"
Case "price"
[Link] = "Unit Price"
Case "payment"
[Link] = "Payment Type"
Case "payment_method"
[Link] = "Payment Method"
Case "total_amount"
[Link] = "Total Amount"
Case "amountpaid"
[Link] = "Amount Paid"
Case "balance"
[Link] = "Balance"
Case "duedate"
[Link] = "Due Date"
Case "remarks"
[Link] = "Remarks"
Case "order_date"
[Link] = "Order Date"
Case "dateordered"
[Link] = "Date Ordered"
Case "client_no"
[Link] = "Client ID"
Case "order_status"
[Link] = "Status"
Case "cutter_and_sewer"
[Link] = "Cutter and
Sewer"
Case Else
[Link] =
[Link]("_", " ").ToUpper()
End Select
[Link] = New
Font("Arial", 9.75!, [Link])
[Link] =
[Link]
Next
.[Link] =
[Link]
.[Link]
lor = [Link]
End With
[Link] = [Link]()
End Using
End Using
Catch ex As Exception
[Link]("Error loading orders: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub btnsave_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
If [Link]([Link]) OrElse
[Link]([Link]) OrElse
[Link]([Link]) OrElse
[Link]([Link]) Then
[Link]("Please fill in all required fields.",
"Missing Data", [Link], [Link])
Exit Sub
End If
Dim payment As String = ""
If radiobutton_downpayment.Checked Then
payment = "Down Payment"
ElseIf radiobutton_fullpay.Checked Then
payment = "Full Payment"
Else
[Link]("Please select a payment type!",
"Warning", [Link], [Link])
Exit Sub
End If
If cbopayment_method.SelectedIndex = -1 Then
[Link]("Please select a payment method (Onhand
or Gcash)!", "Warning", [Link], [Link])
Exit Sub
End If

Using conn As MySqlConnection = [Link]


If [Link] = [Link] Then
[Link]()
End If
Dim formattedDateOrdered As String =
[Link]("MM-dd-yyyy")

Dim query As String = "INSERT INTO tblrepair_orders " &


"(name, items, quantity, price,
payment, Payment_Method, total_amount, amountpaid, balance, duedate,
remarks, order_date, Dateordered, client_no, Order_Status) " &
"VALUES (@name, @items, @quantity,
@price, @payment, @payment_method, @total_amount, @amountpaid, @balance,
@duedate, @remarks, @order_date, @dateordered, @client_no, 'Pending')"
Using cmd As New MySqlCommand(query, conn)
[Link]("@name", [Link])
[Link]("@items", [Link])
[Link]("@quantity",
Convert.ToInt32(NumericUpDown_quantity.Value))
[Link]("@price",
[Link]([Link]))
[Link]("@payment", payment) '
Down Payment or Full Payment
[Link]("@payment_method",
cbopayment_method.[Link]()) ' Onhand or Gcash
[Link]("@total_amount",
[Link](txttotal_amount.Text))
[Link]("@amountpaid",
[Link]([Link]))
[Link]("@balance",
[Link]([Link]))
[Link]("@duedate",
[Link])
[Link]("@remarks",
[Link])
[Link]("@order_date",
[Link])
[Link]("@dateordered",
[Link])
[Link]("@client_no",
Convert.ToInt32([Link]))
[Link]()
End Using

Dim paymentQuery As String = "INSERT INTO tblpayment " &


"(client_id, Name,
Amount_paid, Dateordered, Payment) " &
"VALUES (@client_id, @name,
@amount_paid, @dateordered, @payment_method)"
Using paymentCmd As New MySqlCommand(paymentQuery, conn)
[Link]("@client_id",
[Link]([Link]))
[Link]("@name",
[Link])
[Link]("@amount_paid",
[Link]([Link]))
[Link]("@dateordered",
formattedDateOrdered)

[Link]("@payment_method",
cbopayment_method.[Link]())
[Link]()
End Using
End Using

[Link]("Order and payment saved successfully!",


"Success", [Link], [Link])
LoadOrders()
ClearFields()
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = False
[Link] = False
DisableFields()
[Link] = False
[Link] = False
[Link] = True
[Link] = True
UpdateSlashLabels()
Catch ex As Exception
[Link]("Error saving order: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Function ConvertImageToBase64(ByVal imageBytes As Byte()) As
String
Return Convert.ToBase64String(imageBytes)
End Function
Private Sub frmRepair_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
lastResetDate = [Link]
[Link]()
If Not radiobutton_downpayment.Checked And Not
radiobutton_fullpay.Checked Then
radiobutton_downpayment.Checked = True
End If
NumericUpDown_quantity.Minimum = 1
NumericUpDown_quantity.Value = 1
LoadClientNames()
LoadOrders()
DisableFields()
[Link] = False
[Link] = False
UpdateSlashLabels()
Cursor = [Link]
[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
[Link] = [Link]

cbopayment_method.[Link]()
cbopayment_method.[Link]("Cash")
cbopayment_method.[Link]("E-Cash")
cbopayment_method.SelectedIndex = 0
cbopayment_method.SelectedIndex =
cbopayment_method.[Link]("Cash")
cbopayment_method.DropDownStyle = [Link]
End Sub
Private Sub btnprint_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
If [Link] = 0 Then
[Link]("Please select a row from the DataGridView
to preview.", "No Selection", [Link],
[Link])
Exit Sub
End If

Try
Dim reportPath As String =
[Link]([Link], "reports\[Link]")

If Not [Link](reportPath) Then


[Link]("Report file not found: " & reportPath,
"Error", [Link], [Link])
Exit Sub
End If

Dim rpt As New ReportDocument()


[Link](reportPath)

Dim ds As New RepairDataSet()


Dim dt As [Link] =
[Link]
Dim selectedRow As DataGridViewRow =
[Link](0)
Dim newRow As [Link] =
[Link]()

newRow.repair_id =
Convert.ToInt32([Link]("repair_id").Value)
[Link] = If([Link]("name").Value Is
[Link], "", [Link]("name").[Link]())
[Link] = If([Link]("items").Value Is
[Link], "", [Link]("items").[Link]())
[Link] = If([Link]("quantity").Value Is
[Link], 0, Convert.ToInt32([Link]("quantity").Value))
[Link] = If([Link]("price").Value Is
[Link], 0D, [Link]([Link]("price").Value))
newRow.total_amount =
If([Link]("total_amount").Value Is [Link], 0D,
[Link]([Link]("total_amount").Value))
[Link] = If([Link]("payment").Value Is
[Link], "", [Link]("payment").[Link]())
newRow.payment_method =
If([Link]("payment_method").Value Is [Link], "",
[Link]("payment_method").[Link]())
[Link] = If([Link]("amountpaid").Value
Is [Link], 0D,
[Link]([Link]("amountpaid").Value))
[Link] = If([Link]("balance").Value Is
[Link], 0D, [Link]([Link]("balance").Value))
[Link] = If([Link]("duedate").Value Is
[Link], [Link],
[Link]([Link]("duedate").Value))
[Link] = If([Link]("remarks").Value Is
[Link], "", [Link]("remarks").[Link]())
newRow.order_date = If([Link]("order_date").Value
Is [Link], [Link],
[Link]([Link]("order_date").Value))
[Link](newRow)
[Link](ds)

Dim mainForm As frmmain = Nothing


For Each f As Form In [Link]
If TypeOf f Is frmmain Then
mainForm = DirectCast(f, frmmain)
Exit For
End If
Next

If mainForm Is Nothing Then


[Link]("Main form not found. Cannot retrieve
business info or logo.", "Error", [Link],
[Link])
Exit Sub
End If

Dim businessName As String = ""


If mainForm.lbl_business_name IsNot Nothing Then
businessName = mainForm.lbl_business_name.[Link]()
End If
[Link]("BusinessName").Text = "'"
& [Link]("'", "''") & "'"

Dim locationText As String = ""


If [Link] IsNot Nothing Then
locationText = [Link]()
End If
[Link]("Location").Text = "'" &
[Link]("'", "''") & "'"

Dim tempLogoPath As String =


[Link]([Link](), "temp_logo_" &
[Link]().ToString() & ".png")

If mainForm.PictureBox_frmmain_logo IsNot Nothing AndAlso


mainForm.PictureBox_frmmain_logo.Image IsNot Nothing Then
Dim targetWidth As Integer = 550
Dim targetHeight As Integer = 500

Using resizedLogo As New Bitmap(targetWidth,


targetHeight)
Using g As Graphics =
[Link](resizedLogo)
[Link] =
[Link]

[Link](mainForm.PictureBox_frmmain_logo.Image, 0, 0, targetWidth,
targetHeight)
End Using
End Using

[Link]("Logo", tempLogoPath)
Else
[Link]("Logo", Nothing)
End If
Dim previewForm As New frmpreview2()
[Link] = rpt
[Link]()

[Link]()
[Link]()

If [Link](tempLogoPath) Then
Try
[Link](tempLogoPath)
Catch
End Try
End If

Catch ex As Exception
[Link]("Error preparing repair report preview: " &
[Link], "Error", [Link], [Link])
End Try
End Sub

Private Function SafeCell(ByVal row As DataGridViewRow, ByVal


columnName As String) As String
If [Link](columnName).Value Is [Link] OrElse
[Link](columnName).Value Is Nothing Then
Return ""
End If
Return [Link](columnName).[Link]()
End Function

Private Function SafeToInt(ByVal row As DataGridViewRow, ByVal


columnName As String) As Integer
Try
Return Convert.ToInt32([Link](columnName).Value)
Catch
Return 0
End Try
End Function

Private Function SafeToDecimal(ByVal row As DataGridViewRow, ByVal


columnName As String) As Decimal
Try
Return [Link]([Link](columnName).Value)
Catch
Return 0D
End Try
End Function

Private Function SafeToDate(ByVal row As DataGridViewRow, ByVal


columnName As String) As Date
Try
Return [Link]([Link](columnName).Value)
Catch
Return [Link]
End Try
End Function

Private ReadOnly Property LogPath As String


Get
Dim path As String =
[Link]([Link]([Link]
icationData), "Tailoring_System\[Link]")
[Link]([Link](path))
Return path
End Get
End Property

Private Sub Panel1_Paint(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]

End Sub
End Class

Generate Reports Code


Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmreports
Dim lastRecountDate As Date = [Link]
Dim cmd As MySqlCommand
Dim da As MySqlDataAdapter
Dim dt As DataTable
Private Sub TestDatabaseConnection()
Try
If [Link] <> [Link] Then
[Link]()
End If
LogMessage("Database connection successful.")
[Link]()
Catch ex As Exception
MsgBox("Database connection test failed: " & [Link],
[Link])
LogError("TestDatabaseConnection", ex)
End Try
End Sub

Private Sub VerifySchema()


Try
If [Link] <> [Link] Then
[Link]()
End If

Dim tables As String() = {"tblrepair_orders",


"tblmale_orders", "tblfemale_orders", "tbl_orders"}
For Each table In tables
Dim sql As String = "SELECT COUNT(*) FROM
information_schema.columns WHERE table_name = @table AND column_name =
'order_date'"
Using cmd As New MySqlCommand(sql, CONN)
[Link]("@table", table)
Dim count As Integer =
Convert.ToInt32([Link]())
LogMessage("Schema check: 'order_date' column in " &
table & ": " & If(count > 0, "Found", "Not found"))
End Using
Next

If [Link] = [Link] Then


[Link]()
End If
Catch ex As Exception
LogError("VerifySchema", ex)
MsgBox("Error verifying schema: " & [Link],
[Link])
End Try
End Sub
Private Sub Timer1_Tick(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
Try
Dim today As Date = [Link]
If DateDiff([Link], lastRecountDate, today) >= 1
Then
LoadData("", GetSelectedField())
[Link] = "Number of Records: " &
[Link]()
MsgBox("One month has passed. Data recounted.",
[Link])
lastRecountDate = today
End If
Catch ex As Exception
MsgBox("Error in Timer1_Tick: " & [Link],
[Link])
LogError("Timer1_Tick", ex)
End Try
End Sub

Private Function GetSelectedField() As String


If [Link] = "Name" Then
Return "Name"
ElseIf [Link] = "No" Then
Return "No"
Else
Return "No"
End If
End Function
Private Sub LogError(ByVal methodName As String, ByVal ex As
Exception)
Try
Dim logMessage As String = [Link]() & ": " &
methodName & " - " & [Link] & vbCrLf & [Link] & vbCrLf
[Link]("[Link]", logMessage)
[Link](logMessage)
Catch
End Try
End Sub
Private Sub LogMessage(ByVal message As String)
Try
Dim logMessage As String = [Link]() & ": " &
message & vbCrLf
[Link]("[Link]", logMessage)
[Link](logMessage)
Catch
End Try
End Sub
Private Sub btnprint_reciept_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnprint_reciept.Click
If [Link] = 0 Then
[Link]("No data to print.", "Empty",
[Link], [Link])
Exit Sub
End If

Try
Dim DT As New DataTable()
[Link]("Name", GetType(String))
[Link]("Template", GetType(String))
[Link]("Quantity", GetType(Decimal))
[Link]("Price", GetType(Decimal))
[Link]("Balance", GetType(Decimal))
[Link]("Status", GetType(String))
[Link]("Date", GetType(Date))

For Each DR As DataGridViewRow In [Link]


If Not [Link] Then
Dim nameVal As String = If([Link]("Name").Value Is
[Link], "", [Link]("Name").[Link]().Trim())
Dim templateVal As String =
If([Link]("Template").Value Is [Link], "",
[Link]("Template").[Link]().Trim())
Dim statusVal As String =
If([Link]("Status").Value Is [Link], "",
[Link]("Status").[Link]().Trim())

Dim qty As Decimal = 0D, price As Decimal = 0D,


balance As Decimal = 0D
Dim qtyStr As String = If([Link]("Quantity").Value
Is Nothing OrElse [Link]("Quantity").Value Is [Link], "0",
[Link]("Quantity").[Link]().Trim())
Dim priceStr As String = If([Link]("Price").Value
Is Nothing OrElse [Link]("Price").Value Is [Link], "0",
[Link]("Price").[Link]().Trim())
Dim balStr As String = If([Link]("Balance").Value
Is Nothing OrElse [Link]("Balance").Value Is [Link], "0",
[Link]("Balance").[Link]().Trim())

[Link](qtyStr, qty)
[Link](priceStr, price)
[Link](balStr, balance)

Dim orderDate As Date = [Link]


If [Link]("Date").Value IsNot [Link] AndAlso
Not [Link]([Link]("Date").[Link]().Trim()) Then
[Link]([Link]("Date").[Link](),
orderDate)
End If

[Link](nameVal, templateVal, qty, price,


balance, statusVal, orderDate)
End If
Next

Dim reportPath As String =


[Link]([Link], "Reports\[Link]")
If Not [Link](reportPath) Then
[Link]("Report not found: " & reportPath,
"Error", [Link], [Link])
Exit Sub
End If

Dim rptDoc As New ReportDocument()


[Link](reportPath)
[Link](DT)

Dim mainForm As frmmain = [Link](Of


frmmain)().FirstOrDefault()
If mainForm Is Nothing Then
[Link]("Main form not found!", "Error",
[Link], [Link])
[Link]() : [Link]()
Exit Sub
End If
Try :
[Link]("BusinessNameDisplay").Text = "'" &
mainForm.lbl_business_name.[Link]().Replace("'", "''") & "'" :
Catch : End Try
Try :
[Link]("LoggedUserDisplay").Text = "'" &
[Link]().Replace("'", "''") & "'" : Catch : End Try
Try : [Link]("Location").Text =
"'" & [Link]().Replace("'", "''") & "'" :
Catch : End Try
Try :
[Link]("TypeofReport").Text = "'" &
lbltype_of_reports.[Link]().Replace("'", "''") & "'" : Catch : End
Try
Try :
[Link]("TotalIncomeDisplay").Text = "'" &
lbltotal_of_income.[Link]().Replace("'", "''") & "'" : Catch : End
Try
Try :
[Link]("TotalBalanceDisplay").Text = "'" &
lbltotal_of_Balance.[Link]().Replace("'", "''") & "'" : Catch : End
Try

Dim appDataPath As String =


[Link]([Link]
)
Dim logoDir As String =
[Link]([Link](appDataPath, "Tailoring_System"), "TempLogo")
Dim tempLogoPath As String = [Link](logoDir,
"current_logo.png")
Dim logoBytes As Byte() = Nothing
Dim previewForm As New frmPreview()
Try
If Not [Link](logoDir) Then
[Link](logoDir)
End If

If mainForm.PictureBox_frmmain_logo.Image IsNot Nothing


Then
Using original =
mainForm.PictureBox_frmmain_logo.Image
Using bmp As New Bitmap(550, 500,
PixelFormat.Format24bppRgb)
Using g = [Link](bmp)
[Link]([Link])
[Link] =
[Link]
Dim ratio = [Link](550 /
[Link], 500 / [Link])
Dim w = CInt([Link] * ratio), h
= CInt([Link] * ratio)
Dim x = (550 - w) \ 2, y = (500 - h) \ 2
[Link](original, x, y, w, h)
End Using
Using ms As New [Link]()
[Link](ms,
[Link])
logoBytes = [Link]()
End Using
End Using
End Using
[Link](tempLogoPath, logoBytes)
[Link]("Logo", tempLogoPath)
[Link] = tempLogoPath
Else
GoTo UseBlankLogo
End If

Catch ex As Exception
LogError("LogoSave", ex)
GoTo UseBlankLogo
End Try

GoTo ContinueWithLogo

UseBlankLogo:
Using bmp As New Bitmap(550, 500,
PixelFormat.Format24bppRgb)
Using g = [Link](bmp)
[Link]([Link])
Using f As New Font("Arial", 16, [Link])
[Link]("NO LOGO", f, [Link],
180, 230)
End Using
End Using
Using ms As New [Link]()
[Link](ms, [Link])
logoBytes = [Link]()
End Using
End Using
[Link]("Logo", logoBytes)
[Link] = ""

ContinueWithLogo:
[Link] = rptDoc
[Link]()
[Link]()

[Link]()
[Link]()
[Link]()

Catch ex As Exception
[Link]("Print/Preview failed: " & [Link] &
vbCrLf & [Link], "Error", [Link],
[Link])
LogError("btnprint_reciept_Click", ex)
End Try
End Sub

Private Sub frmreports_Load(ByVal sender As [Link], ByVal e


As [Link]) Handles [Link]
Try
[Link] = 86400000
[Link]()

[Link](New String() {"No", "Name"})


[Link] = 0
ComboBox_month.[Link](New String() {
"All", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October",
"November", "December"})
ComboBox_month.SelectedIndex = 0
With DataGridView1
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.ReadOnly = True
.SelectionMode = [Link]
.MultiSelect = False
.[Link] =
[Link]
.RowHeadersVisible = False
.EnableHeadersVisualStyles = False
.[Link] = New Font(.Font,
[Link])
.[Link] = [Link]
.[Link] = [Link]
.AutoSizeRowsMode =
[Link]
.Visible = True
.[Link]()
End With

lbltype_of_reports.Text = "All Orders"


TestDatabaseConnection()
VerifySchema()
LoadData("", GetSelectedField())

If [Link] = 0 Then
LogError("frmreports_Load", New Exception("No data
loaded on form startup."))
End If

Catch ex As Exception
LogError("frmreports_Load", ex)
MsgBox("Error loading form: " & [Link],
[Link])
End Try
End Sub

Private Sub ComboBox_month_SelectedIndexChanged(ByVal sender As


Object, ByVal e As EventArgs) Handles
ComboBox_month.SelectedIndexChanged
LoadData("", GetSelectedField())
End Sub

Private Sub txtsearchreports_TextChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
[Link]
LoadData("", GetSelectedField())
End Sub

Private Sub LoadData(Optional ByVal condition As String = "",


Optional ByVal fieldToSearch As String = "No")
Try
Dim searchFieldRepair As String = "CAST(repair_id AS CHAR)"
Dim searchFieldMale As String = "CAST(order_id AS CHAR)"
Dim searchFieldFemale As String = "CAST(order_id AS CHAR)"
Dim searchFieldOrder As String = "CAST(order_id AS CHAR)"

If fieldToSearch = "Name" Then


searchFieldRepair = "name"
searchFieldMale = "male_name"
searchFieldFemale = "female_name"
searchFieldOrder = "name"
End If

Dim dateCondition As String = ""


Dim monthNumber As Integer = -1
Dim yearValue As Integer = 0

If ComboBox_month.SelectedIndex > 0 Then


monthNumber = ComboBox_month.SelectedIndex
dateCondition &= " AND MONTH(order_date) = @month"
End If
If Not [Link](txt_year_filter.[Link]())
AndAlso [Link](txt_year_filter.[Link](), yearValue) Then
dateCondition &= " AND YEAR(order_date) = @year"
End If

Dim fullCondition As String = condition & dateCondition

Dim sql As String =


"SELECT " &
"repair_id AS 'No', client_no AS 'Client ID', name AS
'Name', '' AS 'Template', " &
"COALESCE(quantity, 0) AS 'Quantity', COALESCE(price, 0)
AS 'Price', COALESCE(balance, 0) AS 'Balance', " &
"COALESCE(Order_Status, '') AS 'Status', order_date AS
'Date', order_date AS sort_date " &
"FROM tblrepair_orders WHERE " & searchFieldRepair & "
LIKE @search " & fullCondition & " " &
"UNION ALL " &
"SELECT order_id, male_no, male_name, Template_name, " &
"COALESCE(quantity, 0), COALESCE(price, 0),
COALESCE(balance, 0), " &
"COALESCE(Order_Status, ''), order_date, order_date " &
"FROM tblmale_orders WHERE " & searchFieldMale & " LIKE
@search " & fullCondition & " " &
"UNION ALL " &
"SELECT order_id, female_no, female_name, Template_name,
" &
"COALESCE(quantity, 0), COALESCE(price, 0),
COALESCE(balance, 0), " &
"COALESCE(Order_Status, ''), order_date, order_date " &
"FROM tblfemale_orders WHERE " & searchFieldFemale & "
LIKE @search " & fullCondition & " " &
"UNION ALL " &
"SELECT order_id, client_no, name, template, " &
"COALESCE(quantity, 0), COALESCE(price, 0),
COALESCE(balance, 0), " &
"COALESCE(Order_Status, ''), order_date, order_date " &
"FROM tbl_orders WHERE " & searchFieldOrder & " LIKE
@search " & fullCondition & " " &
"ORDER BY sort_date ASC"

LogMessage("LoadData SQL: " & sql)

If [Link] <> [Link] Then [Link]()


Using cmd As New MySqlCommand(sql, CONN)
[Link]("@search", "%" &
[Link]() & "%")
If monthNumber > 0 Then
[Link]("@month", monthNumber)
If yearValue > 0 Then
[Link]("@year", yearValue)

dt = New DataTable()
da = New MySqlDataAdapter(cmd)
[Link](dt)
End Using
[Link]()
[Link] = Nothing
[Link] = dt
[Link] =
[Link]
If [Link]("Date") Then
[Link]("Date").[Link] =
"MM/dd/yyyy"
End If
[Link] = "Number of Records: " &
[Link]()
Dim totalBalance As Decimal = 0
Dim totalIncome As Decimal = 0
For Each row As DataRow In [Link]
totalBalance += [Link](row("Balance"))
totalIncome += [Link](row("Quantity")) *
[Link](row("Price"))
Next
lbltotal_of_Balance.Text = "Total Balance: " &
[Link]("N2")
lbltotal_of_income.Text = "Total Price: " &
[Link]("N2")

Catch ex As Exception
LogError("LoadData", ex)
MsgBox("Error loading data: " & [Link],
[Link])
Finally
If [Link] = [Link] Then [Link]()
End Try
End Sub
Private Sub txt_year_filter_TextChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles txt_year_filter.TextChanged
Dim txt As TextBox = DirectCast(sender, TextBox)
Dim clean As String = New String([Link](Function(c)
[Link](c)).ToArray())

If [Link] > 4 Then clean = [Link](0, 4)

If [Link] <> clean Then


Dim sel = [Link]
[Link] = clean
[Link] = If(sel > 0, sel - 1, 0)
End If
LoadData("", GetSelectedField())
End Sub
Private Sub btnallorders_Click(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
lbltype_of_reports.Text = "All Orders"
LoadData("", GetSelectedField())
End Sub

Private Sub btnpaid_Click(ByVal sender As [Link], ByVal e As


[Link]) Handles [Link]
lbltype_of_reports.Text = "Paid Orders"
LoadData("AND balance = 0", GetSelectedField())
End Sub

Private Sub btnPending_status_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles btnPending_status.Click
lbltype_of_reports.Text = "Pending Orders"
LoadData("AND Order_Status = 'Pending'", GetSelectedField())
End Sub

Private Sub btnclaimed_Click(ByVal sender As [Link], ByVal e


As [Link]) Handles [Link]
lbltype_of_reports.Text = "Claimed Orders"
LoadData("AND Order_Status = 'Claimed'", GetSelectedField())
End Sub

Private Sub btnunpaid_Click(ByVal sender As [Link], ByVal e


As [Link]) Handles [Link]
lbltype_of_reports.Text = "Unpaid Orders"
LoadData("AND balance > 0", GetSelectedField())
End Sub

Private Sub btnunclaimed_Click(ByVal sender As [Link], ByVal


e As [Link]) Handles [Link]
lbltype_of_reports.Text = "Unclaimed Orders (Older than 30
days)"
LoadData("AND Order_Status = 'Available to Claim' AND order_date
<= DATE_SUB(CURDATE(), INTERVAL 30 DAY)", GetSelectedField())
End Sub

Private Sub btnAvailable_to_Claim_Click(ByVal sender As


[Link], ByVal e As [Link]) Handles
btnAvailable_to_Claim.Click
lbltype_of_reports.Text = "Available to Claim"
LoadData("AND Order_Status = 'Available to Claim'",
GetSelectedField())
End Sub
End Class
Send Recovery Password
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]

Public Class frmsend_recovery_password


Private Const AesKey As String = "12345678901234567890123456789012"
Private Const AesIV As String = "1234567890123456"
Private recoveredUserId As Integer = 0
Private recoveredUsername As String = ""
Private recoveredGmail As String = ""
Private recoveredEncryptedPassword As String = ""
Private recoveredPlainPassword As String = "[Not Encrypted]"

Public Sub SetRecoveryData(ByVal id As Integer, ByVal uname As


String, ByVal gmail As String, ByVal encryptedPass As String)
recoveredUserId = id
recoveredUsername = If(uname, "")
recoveredGmail = If(gmail, "")
recoveredEncryptedPassword = If(encryptedPass, "")
If Not [Link](recoveredEncryptedPassword) AndAlso
IsValidBase64(recoveredEncryptedPassword) Then
Try
recoveredPlainPassword =
DecryptData(recoveredEncryptedPassword)
Catch
recoveredPlainPassword = "[Decryption Failed]"
End Try
End If
End Sub

Private Sub frmsend_recovery_password_Load(ByVal sender As Object,


ByVal e As EventArgs) Handles [Link]
[Link] = [Link]

' Validate received data


If recoveredUserId = 0 Then
[Link]("Recovery data missing.", "Error",
[Link], [Link])
[Link]()
Exit Sub
End If

[Link] = [Link]()
[Link] = recoveredUsername
txtuser_email.Text = recoveredGmail

LoadBusinessEmail()
UpdateEmailPreview()
End Sub
Private Sub LoadBusinessEmail()
Try
Using cmd As New MySqlCommand("SELECT Email FROM
tblemail_settings WHERE Id = 1", [Link])
If [Link] = [Link]
Then [Link]()
Dim emailObj = [Link]()
[Link] = If(emailObj IsNot Nothing AndAlso Not
IsDBNull(emailObj), [Link]().Trim(), "[Not Configured]")
End Using
Catch
[Link] = "[Error]"
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub

Private Sub UpdateEmailPreview()


[Link] = _
"Hello " & recoveredUsername & "," & vbCrLf & vbCrLf & _
"Your account recovery details:" & vbCrLf & vbCrLf & _
"Username: " & recoveredUsername & vbCrLf & _
"Password: " & recoveredPlainPassword & vbCrLf & _
"User ID: " & [Link] & vbCrLf & vbCrLf & _
"Please log in and change your password immediately." &
vbCrLf & vbCrLf & _
"— HCS Team"
End Sub

Private Function IsInternetAvailable() As Boolean


Dim servers As String() = {"[Link]", "[Link]"}
For Each server In servers
Try
Using ping As New Ping()
If [Link](server, 2000).Status = [Link]
Then Return True
End Using
Catch : End Try
Next
Return False
End Function

Private Function IsValidEmail(ByVal email As String) As Boolean


Return [Link](email,
"^[^@\s]+@[^@\s]+\.[^@\s]+$")
End Function

Private Sub LogNotification(ByVal fromEmail As String, ByVal toEmail


As String, ByVal message As String)
Try
Using cmd As New MySqlCommand("INSERT INTO tblnotifications
(FromEmail, ToEmail, Message, SentDate) VALUES (@From, @To, @Msg,
@Date)", [Link])
[Link]("@From", fromEmail)
[Link]("@To", toEmail)
[Link]("@Msg", message)
[Link]("@Date", [Link])
If [Link] = [Link]
Then [Link]()
[Link]()
End Using
Catch ex As Exception
Finally
If [Link] = [Link] Then
[Link]()
End Try
End Sub

Private Sub btnsend_Click(ByVal sender As Object, ByVal e As


EventArgs) Handles [Link]
If Not IsInternetAvailable() Then
[Link]("No internet connection. Please connect and
try again.", "Network Error", [Link],
[Link])
Exit Sub
End If

If [Link](recoveredGmail) Then
[Link]("User has no Gmail address.", "Error",
[Link], [Link])
Exit Sub
End If

If Not IsValidEmail(recoveredGmail) Then


[Link]("Invalid email format for user Gmail.",
"Error", [Link], [Link])
Exit Sub
End If

If [Link] = "[Not Configured]" Or [Link] =


"[Error]" Then
[Link]("Business email not configured in
Settings.", "Error", [Link], [Link])
Exit Sub
End If

Try
Dim businessEmail As String = ""
Dim appPassword As String = ""
Using cmd As New MySqlCommand("SELECT Email, AppPassword
FROM tblemail_settings WHERE Id = 1", [Link])
If [Link] = [Link]
Then [Link]()
Using reader As MySqlDataReader = [Link]()
If [Link]() Then
businessEmail =
reader("Email").ToString().Trim()
appPassword =
reader("AppPassword").ToString().Trim()
End If
End Using
End Using

If [Link](businessEmail) Or
[Link](appPassword) Then
[Link]("Email settings incomplete.", "Error",
[Link], [Link])
Exit Sub
End If

Dim smtp As New SmtpClient("[Link]", 587)


[Link] = True
[Link] = New NetworkCredential(businessEmail,
appPassword)
[Link] = 15000

Dim mail As New MailMessage()


[Link] = New MailAddress(businessEmail)
[Link](recoveredGmail)
[Link] = "Password Recovery - HCS Order Monitoring"
[Link] = [Link]

[Link](mail)
LogNotification(businessEmail, recoveredGmail,
[Link])
[Link]("Recovery email sent to " & recoveredGmail,
"Success", [Link], [Link])
For Each frm As Form In [Link](Of
Form).ToList()
If TypeOf frm Is frmshowpassword Or TypeOf frm Is
frmsend_recovery_password Then
[Link]()
End If
Next

Dim loginForm As frmlogin =


TryCast([Link]("frmlogin"), frmlogin)
If loginForm Is Nothing OrElse [Link] Then
loginForm = New frmlogin()
[Link]()
Else
[Link]()
End If

' prefill username


[Link] = recoveredUsername
[Link]()
[Link]()
[Link]()

Catch ex As SmtpException
[Link]("SMTP Error: " & [Link], "Send Failed",
[Link], [Link])
Catch ex As Exception
[Link]("Failed to send: " & [Link], "Error",
[Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
[Link]()
End Try
End Sub

Private Function DecryptData(ByVal encryptedText As String) As


String
Try
Dim aes As New RijndaelManaged()
[Link] = [Link](AesKey)
[Link] = [Link](AesIV)
Dim decryptor = [Link]()
Dim encryptedBytes = Convert.FromBase64String(encryptedText)
Dim decryptedBytes =
[Link](encryptedBytes, 0, [Link])
Return [Link](decryptedBytes)
Catch
Return "[Decryption Failed]"
End Try
End Function

Private Function IsValidBase64(ByVal s As String) As Boolean


If [Link](s) Then Return False
Try
Convert.FromBase64String(s)
Return True
Catch
Return False
End Try
End Function
End Class

Setting Form Code


Imports [Link]
Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmsetting
Private backupOutput As String = ""
Private backupErrorOutput As String = ""
Private restoreOutput As String = ""
Private restoreErrorOutput As String = ""
Private Sub LoadLogoImage(ByVal logoData As Object)
Try
If logoData IsNot Nothing AndAlso Not
[Link](logoData) Then
Dim arrImage() As Byte = TryCast(logoData, Byte())
If arrImage IsNot Nothing AndAlso [Link] > 0
Then
Using ms As New MemoryStream(arrImage)
PictureBox_logo.Image = [Link](ms)
End Using
Else
PictureBox_logo.Image = Nothing
End If
Else
PictureBox_logo.Image = Nothing
End If
Catch ex As Exception
[Link]("Error loading image: " & [Link])
PictureBox_logo.Image = Nothing
End Try
End Sub
Private Sub UpdateMainFormLogoAndName()
Dim parentForm As frmmain = TryCast([Link], frmmain)
If parentForm IsNot Nothing Then
parentForm.lbl_business_name.Text = TextBox_change_name.Text
parentForm.PictureBox_frmmain_logo.Image =
PictureBox_logo.Image
End If
[Link](PictureBox_logo.Image)
End Sub
Private Sub ClearLogoAndName()
TextBox_change_name.Text = [Link]
If PictureBox_logo.Image IsNot Nothing Then
PictureBox_logo.[Link]()
PictureBox_logo.Image = Nothing
End If
End Sub
Private Sub btnChoose_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
Using openFileDialog As New OpenFileDialog()
[Link] = "Image Files|
*.jpg;*.jpeg;*.png;*.gif;*.bmp"
If [Link]() = [Link] Then
PictureBox_logo.Image =
[Link]([Link])
End If
End Using
End Sub
Private Sub btnupdate_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
If [Link](TextBox_change_name.[Link]()) Then
[Link]("Please enter a valid business name.",
"Input Required", [Link], [Link])
Return
End If
If PictureBox_logo.Image Is Nothing Then
[Link]("Please choose a logo image.", "Input
Required", [Link], [Link])
Return
End If

Try
Using ms As New MemoryStream()
PictureBox_logo.[Link](ms, [Link])
Dim imageBytes() As Byte = [Link]()
Dim query As String = "UPDATE tblsystem_logo_name SET
System_Name = @SystemName, PictureBox_logo = @Logo WHERE No = 0"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]("@SystemName",
TextBox_change_name.Text)
[Link]("@Logo", imageBytes)
If [Link] <> [Link] Then
[Link]()
End If
Dim rowsAffected As Integer =
[Link]()
If rowsAffected > 0 Then
[Link]("Business name and logo
updated successfully!", "Success", [Link],
[Link])
LoadLatestLogoAndName()
Else
[Link]("No records were updated.
Please try again.", "Info", [Link],
[Link])
End If
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error updating logo and name. Please try
again.", "Error", [Link], [Link])
[Link]("Error updating logo and name: " &
[Link])
End Try
End Sub
Private Sub LoadEmailSettings()
Try
Dim query As String = "SELECT * FROM tblemail_settings WHERE
Id = 1"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
If [Link]() Then
[Link] = reader("Email").ToString()
txtapp_password.Text =
reader("AppPassword").ToString()
End If
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error loading email settings: " &
[Link])
End Try
End Sub
Private Sub btnupdate_email_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnupdate_email.Click
If [Link]([Link]) OrElse Not
[Link]("@[Link]") Then
[Link]("Please enter a valid Gmail address.",
"Input Required", [Link], [Link])
Return
End If
If [Link](txtapp_password.Text) Then
[Link]("Please enter a valid app password.", "Input
Required", [Link], [Link])
Return
End If

Try
Dim query As String = "INSERT INTO tblemail_settings (Id,
Email, AppPassword) VALUES (1, @Email, @AppPassword) " & _
"ON DUPLICATE KEY UPDATE Email =
@Email, AppPassword = @AppPassword"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]("@Email", [Link])
[Link]("@AppPassword",
txtapp_password.Text)
If [Link] <> [Link] Then
[Link]()
End If
Dim rowsAffected As Integer = [Link]()
If rowsAffected > 0 Then
[Link]("Email settings updated
successfully!", "Success", [Link],
[Link])
Else
[Link]("No changes were made.", "Info",
[Link], [Link])
End If
End Using
End Using
Catch ex As Exception
[Link]("Error updating email settings. Please try
again.", "Error", [Link], [Link])
[Link]("Error updating email settings: " &
[Link])
End Try
End Sub
Private Sub frmsetting_Load(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
LoadLatestLogoAndName()
[Link]()
[Link]()
LoadEmailSettings()
txtapp_password.PasswordChar = "*"
CheckLocationTableStatus()
Dim tooltip As New ToolTip()
[Link] = [Link]
LoadCurrentLocation()
[Link](LinkLabel_app_password, "Click here to
generate a Google App Password for Gmail sending.")
End Sub
Private Sub LoadCurrentLocation()
Try
Dim query As String = "SELECT Location FROM tbllocation
WHERE id = 1"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]()
Dim result As Object = [Link]()
If result IsNot Nothing AndAlso Not IsDBNull(result)
Then
[Link] = [Link]()
Else
[Link] = ""
End If
End Using
End Using
Catch
[Link] = ""
End Try
End Sub
Private Sub CheckLocationTableStatus()
Try
Dim query As String = "SELECT COUNT(*) FROM tbllocation"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]()
Dim count As Integer =
Convert.ToInt32([Link]())

If count = 0 Then
btninsert_location.Visible = True
btnupdate_location.Visible = False
Else
btninsert_location.Visible = False
btnupdate_location.Visible = True
End If
End Using
End Using
Catch ex As Exception
[Link]("Error checking tbllocation: " & [Link])
btninsert_location.Visible = False
btnupdate_location.Visible = False
End Try
End Sub
Private Sub btninsert_location_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btninsert_location.Click
If [Link]([Link]()) Then
[Link]("Please enter a valid location name.",
"Input Required", [Link], [Link])
Return
End If
Try
Dim query As String = "INSERT INTO tbllocation (id,
Location) VALUES (@id, @Location)"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]("@id", 1)
[Link]("@Location",
[Link]())
[Link]()
[Link]()
End Using
End Using

[Link]("✅ Location added successfully!", "Success",


[Link], [Link])
CheckLocationTableStatus()
Catch ex As Exception
[Link]("❌ Error inserting location: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub btnupdate_location_Click(ByVal sender As [Link],
ByVal e As [Link]) Handles btnupdate_location.Click
If [Link]([Link]()) Then
[Link]("Please enter a valid location name.",
"Input Required", [Link], [Link])
Return
End If

Try
Dim query As String = "UPDATE tbllocation SET Location =
@Location WHERE id = 1"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]("@Location",
[Link]())
[Link]()
Dim rowsAffected As Integer = [Link]()

If rowsAffected > 0 Then


[Link]("✅ Location updated
successfully!" & vbCrLf &
"You will be logged out to apply
changes.", "Success", [Link], [Link])
[Link]()
[Link]()
For Each frm As Form In
[Link](Of Form).ToList()
If [Link] <> "frmlogin" Then
[Link]()
End If
Next
Else
[Link]("⚠️No records were updated.",
"Notice", [Link], [Link])
End If
End Using
End Using

CheckLocationTableStatus()
Catch ex As Exception
[Link]("❌ Error updating location: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub LoadLatestLogoAndName()
Try
Dim query As String = "SELECT * FROM tblsystem_logo_name
ORDER BY No DESC LIMIT 1"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
If [Link] <> [Link] Then
[Link]()
End If
Using reader As MySqlDataReader =
[Link]()
If [Link]() Then
TextBox_change_name.Text =
reader("System_Name").ToString()
LoadLogoImage(reader("PictureBox_logo"))
UpdateMainFormLogoAndName()
[Link] = False
[Link] = True
Else
ClearLogoAndName()
[Link] = True
[Link] = False
End If
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error loading logo and name: " &
[Link])
End Try
End Sub
Private Sub btninsert_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
If [Link](TextBox_change_name.[Link]()) Then
[Link]("Please enter a valid business name.",
"Input Required", [Link], [Link])
Return
End If
If PictureBox_logo.Image Is Nothing Then
[Link]("Please choose a logo image.", "Input
Required", [Link], [Link])
Return
End If

Try
Using ms As New MemoryStream()
PictureBox_logo.[Link](ms, [Link])
Dim imageBytes() As Byte = [Link]()
Dim query As String = "INSERT INTO tblsystem_logo_name
(System_Name, PictureBox_logo) VALUES (@SystemName, @Logo)"
Using conn As New
MySqlConnection([Link])
Using cmd As New MySqlCommand(query, conn)
[Link]("@SystemName",
TextBox_change_name.Text)
[Link]("@Logo", imageBytes)
If [Link] <> [Link] Then
[Link]()
End If
Dim rowsAffected As Integer =
[Link]()
If rowsAffected > 0 Then
[Link]("Business name and logo
added successfully!", "Success", [Link],
[Link])
LoadLatestLogoAndName()
End If
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error inserting logo and name. Please try
again.", "Error", [Link], [Link])
[Link]("Error inserting logo and name: " &
[Link])
End Try
End Sub
Private Sub btnback_up_Click(ByVal sender As [Link], ByVal e
As [Link]) Handles btnback_up.Click
Try
Dim sfd As New SaveFileDialog()
[Link] = "SQL Files (*.sql)|*.sql"
[Link] = "Save Database Backup"
[Link] = "Backup_db_hannies_" &
[Link]("yyyyMMdd_HHmmss") & ".sql"
If [Link]() = [Link] Then
Dim backupPath As String = [Link]
Dim dbName As String = "db_hannies"
Dim user As String = "root"
Dim password As String = ""
Dim mysqldumpPath As String = "C:\xampp\mysql\bin\
[Link]"
If Not [Link](mysqldumpPath) Then
mysqldumpPath = "C:\wamp64\bin\mysql\mysql5.7.36\
bin\[Link]"
End If
If Not [Link](mysqldumpPath) Then
[Link]("[Link] not found. Please
check your MySQL installation path.", "Error", [Link],
[Link])
Exit Sub
End If
Dim arguments As String = [Link]("--user={0} --
password={1} --databases {2} --result-file=""{3}"" --skip-comments --
routines", user, password, dbName, backupPath)

Dim psi As New ProcessStartInfo()


[Link] = mysqldumpPath
[Link] = arguments
[Link] = False
[Link] = True
[Link] = True

Using process As Process = [Link](psi)


[Link]()
Dim errOutput As String =
[Link]()

If [Link](backupPath) AndAlso New


FileInfo(backupPath).Length > 0 Then
[Link]("✅ Backup completed
successfully!" & vbCrLf & "Saved at: " & backupPath, "Backup Success",
[Link], [Link])
Else
[Link]("⚠️Backup file is empty or
failed." & vbCrLf & "Error: " & errOutput, "Backup Warning",
[Link], [Link])
End If
End Using
End If
Catch ex As Exception
[Link]("❌ Error during backup: " & [Link],
"Backup Error", [Link], [Link])
End Try
End Sub
Private Sub btnrestore_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]

Dim askBackup As DialogResult = [Link]("⚠️Restoring


will REPLACE your current database data." & vbCrLf &
"Would you like
to BACK UP your data first?",
"Confirm
Restore",

[Link],

[Link])
If askBackup = [Link] Then Exit Sub

If askBackup = [Link] Then


btnback_up.PerformClick()
[Link]("✅ Backup completed. You can now proceed
with the restore.",
"Backup Done", [Link],
[Link])
End If

Using openFileDialog As New OpenFileDialog()


[Link] = "SQL Files (*.sql)|*.sql"
[Link] = "Select SQL Backup File to Restore"

If [Link]() = [Link] Then

Dim restoreFile As String = [Link]

If Not [Link](restoreFile) Then


[Link]("The selected SQL file does not
exist.",
"File Error", [Link],
[Link])
Return
End If

If [Link]("This will overwrite your current


database 'db_hannies'." & vbCrLf &
"Do you want to continue?",
"Confirm Overwrite",
[Link],
[Link]) =
[Link] Then
Return
End If
Try
Dim dbName As String = "db_hannies"
Dim user As String = "root"
Dim password As String = ""

Dim mysqlPath As String = "C:\xampp\mysql\bin\


[Link]"
If Not [Link](mysqlPath) Then
mysqlPath = "C:\wamp64\bin\mysql\mysql5.7.36\
bin\[Link]"
End If

If Not [Link](mysqlPath) Then


[Link]("[Link] not found. Please
check your MySQL installation path.",
"Error", [Link],
[Link])
Exit Sub
End If
Using conn As New
MySqlConnection([Link])
[Link]()
Using cmd As New MySqlCommand("DROP DATABASE IF
EXISTS " & dbName & "; CREATE DATABASE " & dbName & ";", conn)
[Link]()
End Using
End Using
Dim arguments As String = [Link]("--user={0}
--password={1} {2} < ""{3}""",
user,
password, dbName, restoreFile)

Dim psi As New ProcessStartInfo()


[Link] = "[Link]"
[Link] = True
[Link] = True
[Link] = True
[Link] = False
[Link] = True

Dim process As New Process()


[Link] = psi
[Link]()

Using sw As StreamWriter = [Link]


If [Link] Then
[Link]("""" & mysqlPath & """ " &
arguments)
End If
End Using

[Link]()

If [Link] = 0 Then

[Link]("✅ Database restored


successfully!" & vbCrLf &
"Source: " & restoreFile,
"Restore Success",
[Link],
[Link])
Try
If [Link] IsNot Nothing Then
[Link]()
[Link]()
End If
Dim forms = [Link](Of
Form).ToList()
For Each frm As Form In forms
[Link]()
[Link]()
Next
Dim login As New frmlogin()
[Link]()
[Link]()

Catch ex As Exception
[Link]("Error during system
refresh: " & [Link],
"Refresh Error",
[Link],
[Link])
End Try

Return
Else
Dim errOutput As String =
[Link]()
[Link]("❌ Restore failed!" & vbCrLf &
errOutput,
"Restore Error",
[Link], [Link])
End If

Catch ex As Exception
[Link]("❌ Error during restore: " &
[Link],
"Restore Error",
[Link], [Link])
End Try

End If
End Using

End Sub
Private Sub LinkLabel_app_password_LinkClicked(ByVal sender As
[Link], ByVal e As
[Link]) Handles
LinkLabel_app_password.LinkClicked
Try
' The official Google App Passwords URL
Dim url As String =
"[Link]
LinkLabel_app_password.LinkVisited = True

Dim psi As New [Link]()


[Link] = url
[Link] = True
[Link](psi)
Catch ex As Exception
[Link]("Unable to open the link. Please check your
internet connection or default browser settings." &
vbCrLf & "Error details: " & [Link],
"Error", [Link],
[Link])
End Try
End Sub
Private Sub CheckBox_show_CheckedChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
CheckBox_show.CheckedChanged
If CheckBox_show.Checked Then
txtapp_password.PasswordChar = Chr(0)
CheckBox_show.Text = "Hide Password"
Else
txtapp_password.PasswordChar = "*"
CheckBox_show.Text = "Show Password"
End If
End Sub
End Class

View List Code


Imports [Link]
Imports [Link]
Imports [Link]
Public Class frmview_list
Dim allOrdersTable As New DataTable()
Private Sub frmview_list_Load(ByVal sender As [Link], ByVal e
As [Link]) Handles [Link]
LoadAvailableWorkers()
LoadMonthList()
LoadAllOrders()
txt_year_filter.Text = [Link]()
End Sub
Private Sub LoadMonthList()
ComboBox_month.[Link]()
ComboBox_month.[Link]("All")
ComboBox_month.[Link](New String() {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November",
"December"
})
ComboBox_month.SelectedIndex = 0
End Sub
Private Sub LoadAvailableWorkers()
Try
ComboBox_worker_list_filter.[Link]()
Dim sql As String = "SELECT Name FROM tbl_workers WHERE
Status = 1"

Using conn As New


MySqlConnection([Link])
Using cmd As New MySqlCommand(sql, conn)
[Link]()
Using reader As MySqlDataReader =
[Link]()
While [Link]()

ComboBox_worker_list_filter.[Link](reader("Name").ToString())
End While
End Using
End Using
End Using
Catch ex As Exception
[Link]("Error loading workers: " & [Link])
End Try
End Sub
Private Sub LoadAllOrders()
Try
Dim sql As String =
"SELECT repair_id AS No, client_no AS client_identifier,
name AS customer_name, '' AS Template, quantity, Order_Status,
Cutter_and_Sewer, DATE_FORMAT(order_date, '%Y-%m-%d') AS order_date " &
"FROM tblrepair_orders " &
"UNION ALL " &
"SELECT order_id AS No, male_no AS client_identifier,
male_name AS customer_name, Template_name AS Template, quantity,
Order_Status, Cutter_and_Sewer, DATE_FORMAT(Dateordered, '%Y-%m-%d') AS
order_date " &
"FROM tblmale_orders " &
"UNION ALL " &
"SELECT order_id AS No, female_no AS client_identifier,
female_name AS customer_name, Template_name AS Template, quantity,
Order_Status, Cutter_and_Sewer, DATE_FORMAT(Dateordered, '%Y-%m-%d') AS
order_date " &
"FROM tblfemale_orders " &
"UNION ALL " &
"SELECT order_id AS No, client_no AS client_identifier,
name AS customer_name, template AS Template, quantity, Order_Status,
Cutter_and_Sewer, DATE_FORMAT(order_date, '%Y-%m-%d') AS order_date " &
"FROM tbl_orders"

Using conn As New


MySqlConnection([Link])
Using cmd As New MySqlCommand(sql, conn)
Using adapter As New MySqlDataAdapter(cmd)
[Link]()
[Link]()
[Link](allOrdersTable)
End Using
End Using
End Using

If [Link]("order_date") Then
Dim newColumn As New DataColumn("order_date_dt",
GetType(Date))
[Link](newColumn)

For Each row As DataRow In [Link]


Dim dateText As String =
row("order_date").ToString().Trim()
Dim parsedDate As Date
If [Link](dateText, parsedDate) Then
row("order_date_dt") = parsedDate
Else
row("order_date_dt") = [Link]
End If
Next

[Link]("order_date")
[Link] = "order_date"
End If

[Link] = allOrdersTable

With DataGridView1
.RowHeadersVisible = False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeRows = False
.AllowUserToOrderColumns = True
.ReadOnly = True
.SelectionMode = [Link]
.MultiSelect = False
.GridColor = [Link]
.EnableHeadersVisualStyles = False
.AutoSizeRowsMode =
[Link]
.[Link] = New Font("Segoe UI", 10)
.[Link] = New Font("Segoe
UI", 10, [Link])
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] = [Link]
.[Link] =
[Link](240, 240, 240)
.AutoSizeColumnsMode =
[Link]
.AutoResizeColumns()
.Columns(.[Link] - 1).AutoSizeMode =
[Link]
.ScrollBars = [Link]
End With

lblcount_for_grid1.Text = "Number of Orders: " &


[Link]()

If [Link]("No") Then
[Link]("No").HeaderText = "Order No"
If [Link]("client_identifier") Then
[Link]("client_identifier").HeaderText = "Client
Identifier"
If [Link]("customer_name") Then
[Link]("customer_name").HeaderText = "Customer Name"
If [Link]("Template") Then
[Link]("Template").HeaderText = "Template"
If [Link]("quantity") Then
[Link]("quantity").HeaderText = "Quantity"
If [Link]("Order_Status") Then
[Link]("Order_Status").HeaderText = "Order Status"
If [Link]("Cutter_and_Sewer") Then
[Link]("Cutter_and_Sewer").HeaderText = "Worker Name"
If [Link]("order_date") Then
[Link]("order_date").HeaderText = "Order
Date"

[Link]("order_date").[Link] = "yyyy-MM-
dd"
End If

[Link]([Link]
)

Catch ex As Exception
[Link]("Error loading orders: " & [Link])
End Try
End Sub
Private Sub ComboBox_worker_list_filter_SelectedIndexChanged(ByVal
sender As [Link], ByVal e As [Link]) Handles
ComboBox_worker_list_filter.SelectedIndexChanged
ApplyFilters()
End Sub
Private Sub ComboBox_month_SelectedIndexChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
ComboBox_month.SelectedIndexChanged
ApplyFilters()
End Sub

Private Sub txt_year_filter_TextChanged(ByVal sender As


[Link], ByVal e As [Link]) Handles
txt_year_filter.TextChanged
ApplyFilters()
End Sub
Private Sub btnprint_Click(ByVal sender As [Link], ByVal e As
[Link]) Handles [Link]
Try
Dim ds As New dsFilteredOrders()
Dim dt As DataTable = [Link]("dtFilteredOrders")
For Each row As DataGridViewRow In [Link]
If Not [Link] Then
Dim dr As DataRow = [Link]()
dr("customer_name") =
If([Link]("customer_name").Value, "")
dr("Template") = If([Link]("Template").Value, "")
dr("quantity") = If([Link]("quantity").Value, 0)
dr("Order_Status") =
If([Link]("Order_Status").Value, "")
dr("Cutter_and_Sewer") =
If([Link]("Cutter_and_Sewer").Value, "")
[Link](dr)
End If
Next

Dim rpt As New rptFilteredOrders()


[Link](ds)
Dim businessNameText As String = ""
Dim userNameText As String = ""
Dim locationText As String = ""

If [Link]().OfType(Of frmmain).Any() Then


Dim mainForm = [Link]().OfType(Of
frmmain).First()

If mainForm.lbl_business_name IsNot Nothing Then


businessNameText =
mainForm.lbl_business_name.[Link]()
End If

If [Link] IsNot Nothing Then


userNameText = [Link]()
End If

If [Link] IsNot Nothing Then


locationText = [Link]()
End If
End If
Dim workerNameText As String =
ComboBox_worker_list_filter.[Link]()

Try : [Link]("BusinessName").Text
= "'" & [Link]("'", "''") & "'" : Catch :
MsgBox("Missing formula: BusinessName") : End Try
Try : [Link]("UserName").Text =
"'" & [Link]("'", "''") & "'" : Catch : MsgBox("Missing
formula: UserName") : End Try
Try : [Link]("WorkerName").Text =
"'" & [Link]("'", "''") & "'" : Catch : MsgBox("Missing
formula: WorkerName") : End Try
Try : [Link]("Location").Text =
"'" & [Link]("'", "''") & "'" : Catch : MsgBox("Missing
formula: Location") : End Try

Dim frm As New frmFilteredOrdersReport()


[Link] = rpt
[Link]()
[Link]()

Catch ex As Exception
[Link]("Error generating filtered report: " &
[Link],
"Error", [Link],
[Link])
End Try
End Sub
Private Sub ApplyFilters()
Try
Dim selectedWorker As String =
ComboBox_worker_list_filter.[Link]()
Dim selectedMonth As String = ComboBox_month.[Link]()
Dim selectedYear As String = txt_year_filter.[Link]()

Dim view As New DataView(allOrdersTable)


Dim filter As String = ""
If selectedWorker <> "" Then
filter &= [Link]("Cutter_and_Sewer = '{0}'",
[Link]("'", "''"))
End If
If selectedMonth <> "" AndAlso selectedMonth <> "All"
AndAlso selectedYear <> "" AndAlso IsNumeric(selectedYear) Then
Dim monthNumber As Integer =
[Link](selectedMonth, "MMMM",
[Link]).Month
Dim startDate As New DateTime(CInt(selectedYear),
monthNumber, 1)
Dim endDate As DateTime =
[Link](1).AddDays(-1)
If filter <> "" Then filter &= " AND "
filter &= [Link]("order_date >= #{0:yyyy-MM-dd}#
AND order_date <= #{1:yyyy-MM-dd}#", startDate, endDate)
ElseIf selectedYear <> "" AndAlso IsNumeric(selectedYear)
AndAlso (selectedMonth = "" Or selectedMonth = "All") Then
Dim startDate As New DateTime(CInt(selectedYear), 1, 1)
Dim endDate As New DateTime(CInt(selectedYear), 12, 31)

If filter <> "" Then filter &= " AND "


filter &= [Link]("order_date >= #{0:yyyy-MM-dd}#
AND order_date <= #{1:yyyy-MM-dd}#", startDate, endDate)
End If
[Link] = filter
[Link] = view
lblcount_for_grid1.Text = "Number of Orders: " &
[Link]()
Catch ex As Exception
[Link]("Error filtering orders: " & [Link])
End Try
End Sub

End Class

WorkersForm Code
Imports [Link]
Public Class frmworkers
Private Sub frmworkers_Load(ByVal sender As Object, ByVal e As
EventArgs) Handles [Link]
Try
[Link] = "09"
[Link] =
[Link]
Catch ex As Exception
[Link]("Error loading form: " & [Link] & vbCrLf
& [Link], "Form Load Error", [Link],
[Link])
End Try
End Sub
Private Sub txtworkercontact_Enter(ByVal sender As Object, ByVal e
As EventArgs) Handles [Link]
If [Link]([Link]) Then
[Link] = "09"
[Link] =
[Link]
End If
End Sub

Private Sub txtworkercontact_KeyPress(ByVal sender As Object, ByVal


e As KeyPressEventArgs) Handles [Link]
If Not [Link]([Link]) AndAlso [Link] <>
ChrW([Link]) Then
[Link] = True
End If

If [Link] >= 11 AndAlso [Link] <>


ChrW([Link]) Then
[Link] = True
End If

If [Link] < 2 AndAlso [Link] =


ChrW([Link]) Then
[Link] = True
End If
End Sub

Private Sub btnsave_workers_Click(ByVal sender As [Link],


ByVal e As [Link])
Try
If [Link]([Link]) OrElse
[Link]() = "" Then
[Link]("Please enter a worker name.", "Missing
Information", [Link], [Link])
[Link]()
Return
End If

Dim contact As String = [Link]()


If [Link](contact) OrElse contact = "09" Then
[Link]("Please enter a complete contact
number.", "Missing Information", [Link],
[Link])
[Link]()
Return
End If

If Not [Link](contact,
"^09\d{9}$") Then
[Link]("Contact number must start with '09' and
contain exactly 11 digits.", "Invalid Contact", [Link],
[Link])
[Link]()
Return
End If

QUERY = "INSERT INTO tbl_workers (Name, Contact, Status)


VALUES (@Name, @Contact, @Status)"
Using cmd As New MySqlCommand(QUERY, CONN)
[Link]()
[Link]("@Name",
[Link]())
[Link]("@Contact", contact)
[Link]("@Status", 1)

If [Link] = [Link] Then


[Link]()
End If
Dim rowsAffected As Integer = [Link]()

If rowsAffected > 0 Then


[Link]("Worker information saved
successfully.", "Success", [Link],
[Link])

[Link]()
[Link] = "09"
[Link] =
[Link]

For Each frm As Form In [Link]


If TypeOf frm Is frmlist_of_workers Then
CType(frm,
frmlist_of_workers).LoadDataGrid()
Exit For
End If
Next
Else
[Link]("No rows were affected. Please check
your data.", "Warning", [Link], [Link])
End If
End Using
Catch ex As MySqlException
[Link]("Database error saving worker information: "
& [Link], "Database Error", [Link],
[Link])
Catch ex As Exception
[Link]("Error saving worker information: " &
[Link], "Error", [Link], [Link])
Finally
If [Link] = [Link] Then
[Link]()
End If
End Try
End Sub
Private Sub btnsave_workers_MouseMove(ByVal sender As Object, ByVal
e As [Link])
btnsave_workers.BackColor = [Link]
End Sub

Private Sub btnsave_workers_MouseLeave(ByVal sender As Object, ByVal


e As [Link])
btnsave_workers.BackColor = [Link]("Control")
End Sub

Private Sub lblsave_workers_MouseEnter(ByVal sender As Object, ByVal


e As [Link]) Handles lblsave_workers.MouseEnter
lblsave_workers.ForeColor = [Link]
End Sub

Private Sub lblsave_workers_MouseLeave(ByVal sender As Object, ByVal


e As [Link]) Handles lblsave_workers.MouseLeave
lblsave_workers.ForeColor = [Link]
End Sub

Private Sub lblsave_workers_Click(ByVal sender As [Link],


ByVal e As [Link]) Handles lblsave_workers.Click
btnsave_workers_Click(sender, e)
End Sub
Private Sub btnvieworkers_Click(ByVal sender As [Link], ByVal
e As [Link]) Handles [Link]
Try
Dim workersForm As New frmlist_of_workers()
[Link] = [Link]
[Link](Me)
Catch ex As Exception
[Link]("Error opening workers list: " & [Link],
"Error", [Link], [Link])
End Try
End Sub
Private Sub txtworkercontact_TextChanged(ByVal sender As
[Link], ByVal e As [Link]) Handles
[Link]
Dim contact As String = [Link]()
If [Link] > 0 Then
If Not [Link](contact,
"^09\d*$") Then
[Link] = [Link](255, 204,
203)
ElseIf [Link] = 11 AndAlso
[Link](contact, "^09\d{9}$") Then
[Link] = [Link](204, 255,
204)
Else
[Link] = [Link]
End If
Else
[Link] = [Link]
End If
End Sub
End Class

You might also like