512 lines
16 KiB
VB.net

Imports System.ComponentModel
Imports System.IO
Imports MySql.Data.MySqlClient
Public Class frm_fighter_statistics
Private Sub frm_fighter_statistics_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = SelectedEvent.Title
Try
list_fighters("", SelectedEvent.ID)
Catch ex As Exception
End Try
End Sub
Private Sub Load_Fighter_Data(FighterID As Integer)
Dim person As New person(FighterID)
lbl_age.Text = person.Age.Years
lbl_gender.Text = person.Gender
lbl_name.Text = person.FullName
lbl_nationality.Text = person.Nationality.Name
lbl_last_weight.Text = person.Weight.Weight & "Kg"
lbl_category.Text = person.Weight.WeightCategory
lbl_weight_class.Text = person.Weight.WeightClass
Try
pb_fighter.Image = Image.FromStream(person.PICTURE)
Catch ex As Exception
pb_fighter.Image = Nothing
End Try
Try
pb_flag.Image = Image.FromStream(person.Team.Country.Flag)
Catch ex As Exception
pb_flag.Image = Nothing
End Try
End Sub
Private Sub Load_Fighter_Matches(FighterID As Integer, EventID As Integer)
Dim QRY As String = ("
/*-----------------------------------------------------
THIS CODE IS FOR SEARCHING THE MATCHES
FOR A FIGHTER BY HIS/HER ID NUMBER
-----------------------------------------------------*/
SELECT
event_matches.id as 'MatchID',
event_matches.emn as 'MatchNo',
event_matches.ern as 'EventRound',
if(" & FighterID & " = blue.id, concat(red.fname, ' ', if(isnull(red.mname), '', red.mname), ' ', red.lname), concat(blue.fname, ' ', if(isnull(blue.mname), '', blue.mname), ' ', blue.lname)) as 'Opponent',
if(" & FighterID & " = winner.id, 'WIN', 'LOSE') as 'Result'
FROM
event_matches
LEFT JOIN
person as winner ON winner.id = event_matches.winner
LEFT JOIN
clubs as winner_club ON winner_club.id = winner.club
LEFT JOIN
person as blue ON blue.id = event_matches.blue_fighter
LEFT JOIN
clubs as blue_club ON blue_club.id = blue.club
LEFT JOIN
person as red ON red.id = event_matches.red_fighter
LEFT JOIN
clubs as red_club ON red_club.id = red.club
Where
(blue_fighter = " & FighterID & " or red_fighter = " & FighterID & ")
and
event_matches.started = true
and
event_matches.ended = true
and
event_matches.eid = " & EventID & "
order by
ern,
emn
asc
")
Dim CON As New MySqlConnection(CON_STRING)
Dim COM As New MySqlCommand(QRY, CON)
Dim RDR As MySqlDataReader
Dim LST As New List(Of dataset)
Try
CON.Open()
RDR = COM.ExecuteReader
If RDR.HasRows = True Then
While RDR.Read
Dim MatchDisplayText As String = "Match No. " & Zero(RDR("MatchNo")) & ", Round " & RDR("EventRound") & ", " & RDR("Opponent") & " - " & RDR("Result")
LST.Add(New dataset(RDR("MatchID"), MatchDisplayText))
End While
End If
CON.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
CON.Dispose()
End Try
lst_matches.DataSource = LST
lst_matches.ValueMember = "ID"
lst_matches.DisplayMember = "name"
End Sub
Private Sub Load_Fighter_Points(FighterID As Integer, EventID As Integer)
Dim QRY As String = ("
/*-----------------------------------------------------
THIS CODE IS FOR SEARCHING THE MATCH
DATA OF WINS LOSSES AND COLLECTED POINTS
-----------------------------------------------------*/
Select
(select count(*) as WIN from event_matches inner join event on event_matches.eid = event.id where event_matches.eid = " & EventID & " And event_matches.started = true And event_matches.ended = true And (blue_fighter = " & FighterID & " Or red_fighter = " & FighterID & ") And winner = " & FighterID & ") as 'WIN',
(select count(*) as WIN from event_matches inner join event on event_matches.eid = event.id where event_matches.eid = " & EventID & " And event_matches.started = true And event_matches.ended = true And (blue_fighter = " & FighterID & " Or red_fighter = " & FighterID & ") And winner != " & FighterID & ") as 'LOSS',
(select count(*) as WIN from event_matches inner join event on event_matches.eid = event.id where event_matches.eid = " & EventID & " And event_matches.started = true And event_matches.ended = true And (blue_fighter = " & FighterID & " Or red_fighter = " & FighterID & ") And winner = " & FighterID & ") * 3 as 'POINTS'
")
Dim CON As New MySqlConnection(CON_STRING)
Dim COM As New MySqlCommand(QRY, CON)
Dim RDR As MySqlDataReader
Dim LST As New List(Of dataset)
Try
CON.Open()
RDR = COM.ExecuteReader
If RDR.HasRows = True Then
While RDR.Read
lbl_wins.Text = RDR("WIN")
lbl_loss.Text = RDR("LOSS")
lbl_rank.Text = RDR("POINTS")
End While
End If
CON.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
CON.Dispose()
End Try
End Sub
Private Sub Load_Match_Data(MatchID As Integer)
Dim QRY As String = ("
/*-----------------------------------------------------
THIS CODE IS FOR SEARCHING THE MATCH
BY MATCH ID NUMBER
-----------------------------------------------------*/
SELECT
event_matches.id as 'MatchID',
event_matches.ecn as 'Court',
event_matches.emn as 'MatchNo',
event_matches.ern as 'EventRound',
concat(blue.fname, ' ', blue.mname, ' ', blue.lname) as 'BlueName',
blue_club.title as 'BlueClub',
blue_club.logo as 'BlueLogo',
blue_score as 'BlueScore',
blue_foul as 'BlueFoul',
concat(red.fname, ' ', red.mname, ' ', red.lname) as 'RedName',
red_club.title as 'RedClub',
red_club.logo as 'RedLogo',
red_score as 'RedScore',
red_foul as 'RedFoul',
concat(winner.fname, ' ', winner.mname, ' ', winner.lname) as 'Winner'
FROM
event_matches
LEFT JOIN
person as winner ON winner.id = event_matches.winner
LEFT JOIN
clubs as winner_club ON winner_club.id = winner.club
LEFT JOIN
person as blue ON blue.id = event_matches.blue_fighter
LEFT JOIN
clubs as blue_club ON blue_club.id = blue.club
LEFT JOIN
person as red ON red.id = event_matches.red_fighter
LEFT JOIN
clubs as red_club ON red_club.id = red.club
Where
event_matches.started = true
and
event_matches.ended = true
and
event_matches.id = " & MatchID & "
order by
ern,
emn
asc
")
Dim CON As New MySqlConnection(CON_STRING)
Dim COM As New MySqlCommand(QRY, CON)
Dim RDR As MySqlDataReader
Dim LST As New List(Of dataset)
Try
CON.Open()
RDR = COM.ExecuteReader
If RDR.HasRows = True Then
While RDR.Read
Try
lbl_match_number.Text = RDR("MatchNo")
Catch ex As Exception
End Try
Try
lbl_court_number.Text = RDR("Court")
Catch ex As Exception
End Try
Try
lbl_blue_fighter.Text = RDR("BlueName")
Catch ex As Exception
End Try
Try
lbl_blue_score.Text = RDR("BlueScore")
Catch ex As Exception
End Try
Try
Dim data As Byte() = DirectCast(RDR("bluelogo"), Byte())
Dim BlueLogo = New System.IO.MemoryStream(data)
pb_blue_logo.Image = Image.FromStream(BlueLogo)
Catch ex As Exception
pb_blue_logo.Image = Nothing
End Try
Try
lbl_red_fighter.Text = RDR("RedName")
Catch ex As Exception
End Try
Try
lbl_red_score.Text = RDR("RedScore")
Catch ex As Exception
End Try
Try
Dim data As Byte() = DirectCast(RDR("redlogo"), Byte())
Dim RedLogo = New System.IO.MemoryStream(data)
pb_red_logo.Image = Image.FromStream(RedLogo)
Catch ex As Exception
pb_red_logo.Image = Nothing
End Try
Try
lbl_winner.Text = RDR("Winner")
Catch ex As Exception
End Try
End While
End If
CON.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
CON.Dispose()
End Try
End Sub
Public Sub ClearList()
Try
lst_fighters.DataSource = Nothing
lst_fighters.Items.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub txt_search_TextChanged(sender As Object, e As EventArgs) Handles txt_search.TextChanged
ClearList()
Try
list_fighters(txt_search.Text, SelectedEvent.ID)
Catch ex As Exception
End Try
End Sub
Private Sub lst_fighters_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lst_fighters.SelectedIndexChanged
Try
Load_Fighter_Data(lst_fighters.SelectedValue)
Load_Fighter_Matches(lst_fighters.SelectedValue, SelectedEvent.ID)
Load_Fighter_Points(lst_fighters.SelectedValue, SelectedEvent.ID)
Catch ex As Exception
End Try
End Sub
Private Sub btn_close_Click(sender As Object, e As EventArgs) Handles btn_close.Click
Me.Close()
End Sub
Private Sub frm_fighter_statistics_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
'frm_main.Show()
frm_event_control.Show()
End Sub
Private Sub pb_fighter_Click(sender As Object, e As EventArgs) Handles pb_fighter.Click
If IsNothing(pb_fighter.Image) Then
' Open Picture File
open_picture_file()
' Store The Picture
update_fighter_picture()
ElseIf Not IsNothing(pb_fighter.Image) Then
Dim iPictureUpdate As DialogResult = MessageBox.Show("Would You Like To Update The Players Picture ?", "Picture Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If iPictureUpdate = DialogResult.Yes Then
' Open Picture File
open_picture_file()
' Store The Picture
update_fighter_picture()
End If
End If
End Sub
Private Sub open_picture_file()
'Creating A New Dialog
Dim OpenPictureFile As New OpenFileDialog
'Filtering The Types
OpenPictureFile.Filter = "Image Files | *.jpg; *.jpeg; *.bmp; *.png; *.gif;"
'Openning The File
If OpenPictureFile.ShowDialog = System.Windows.Forms.DialogResult.OK Then
Try
' Getting File Path
Dim FilePath As String = OpenPictureFile.FileName()
Dim FileName As String = System.IO.Path.GetFileName(OpenPictureFile.FileName)
' Picture File
Dim Picture As New MemoryStream
' Define New Image Size
Dim LogoSize As New Size(385, 500)
' Resizing The Image
Dim ResizedImage = New Bitmap(Image.FromFile(FilePath), LogoSize)
' Display The Image
pb_fighter.Image = ResizedImage
' Saving The Image As PNG Format
pb_fighter.Image.Save(Picture, System.Drawing.Imaging.ImageFormat.Png)
' Read The Image As Bytes
Dim arrImage() As Byte = Picture.GetBuffer
' Closing The Picture
Picture.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
Private Sub update_fighter_picture()
' Query To Update
Dim QRY As String = "update person set picture = @picture where id=" & lst_fighters.SelectedValue
' Connection
Dim CON As New MySqlConnection(CON_STRING)
Dim COM As New MySqlCommand(QRY, CON)
' Preparing The Image
Dim Picture As New MemoryStream
pb_fighter.Image.Save(Picture, System.Drawing.Imaging.ImageFormat.Png)
Dim arrImage() As Byte = Picture.GetBuffer
Picture.Close()
Try
CON.Open()
COM.Parameters.AddWithValue("@picture", arrImage)
COM.ExecuteNonQuery()
CON.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
CON.Dispose()
End Try
End Sub
Public Function Zero(Number As Integer) As String
If Number >= 0 And Number < 10 Then
Return "00" & Number
ElseIf Number >= 10 And Number < 100 Then
Return "0" & Number
Else
Return Number
End If
End Function
Private Sub list_fighters(filter As String, eventID As Integer)
Dim QRY As String = ("
select
distinct
person.id, concat(person.fname, if(isnull(person.mname), '', concat(' ', person.mname)), ' ', person.lname) as name
from
person
left join
event_matches on (person.id = coalesce(event_matches.blue_fighter, 0) or person.id = coalesce(event_matches.red_fighter, 0))
where
concat(fname, if(isnull(mname), '', concat(' ', mname)), ' ', lname) like '%" & filter & "%'
and
event_matches.eid = " & eventID & "
order by
fname,
mname,
lname
asc
")
Dim CON As New MySqlConnection(CON_STRING)
Dim COM As New MySqlCommand(QRY, CON)
Dim RDR As MySqlDataReader
Dim LST As New List(Of dataset)
Try
CON.Open()
RDR = COM.ExecuteReader
If RDR.HasRows = True Then
While RDR.Read
LST.Add(New dataset(RDR("id"), RDR("name")))
End While
End If
CON.Close()
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
CON.Dispose()
End Try
lst_fighters.DataSource = LST
lst_fighters.ValueMember = "ID"
lst_fighters.DisplayMember = "name"
End Sub
Private Sub lst_matches_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lst_matches.SelectedIndexChanged
Try
Load_Match_Data(lst_matches.SelectedValue)
Catch ex As Exception
End Try
End Sub
End Class