' Copyright (C) 2025  P4pillon.org
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU Affero General Public License as
' published by the Free Software Foundation, either version 3 of the
' License, or (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU Affero General Public License for more details.
'
' You should have received a copy of the GNU Affero General Public License
' along with this program.  If not, see <https://www.gnu.org/licenses/>.
Imports System.Xml
Public Class facilEpharm

    Public Ordo_row As PharmaDataSet.OrdoRow
    Public Ordo_Fichiers_table As PharmaDataSet.Ordo_FichiersDataTable
    Public Ordo_Produits_Lignes_table As PharmaDataSet.Ordo_Produits_LignesDataTable
    Public Delivrance_Produits_Lignes_table As PharmaDataSet.Ordo_Delivrance_Produits_LignesDataTable

    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim ordos = Me.OrdoTableAdapter.GetDataBy_Etat("Reçue")
        affichage(ordos)
    End Sub

    Public Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim ordos = Me.OrdoTableAdapter.GetDataBy_Etat("Confirmée")
        affichage(ordos)
    End Sub

    Public Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim ordos = Me.OrdoTableAdapter.GetDataBy_Etat("Préparée")
        affichage(ordos)
    End Sub

    Public Sub affichage(ByVal ordos As PharmaDataSet.OrdoDataTable)
        Ordo_DataGridView.Rows.Clear()
        Ordo_Lignes_DataGridView.Rows.Clear()
        For r = 0 To ordos.Rows.Count - 1
            Ordo_DataGridView.Rows.Add()
        Next
        For r = 0 To ordos.Rows.Count - 1
            Ordo_DataGridView.Item(Ordo_Date_Création.Index, r).Value = ordos(r).Ordo_Date_Création
            Dim prescr = COMPTOIR_MAIN.PrescripteursTableAdapter.GetDataBy_Numidentification_NumRPPS(ordos(r).Prescr_NumID, ordos(r).Prescr_NumRPPS)
            If prescr.Rows.Count > 0 Then
                Ordo_DataGridView.Item(Prescr_.Index, r).Value = prescr.Item(0).NomPrénom
            Else
                Ordo_DataGridView.Item(Prescr_.Index, r).Value = "Precripteur Inconnu"
            End If
            Dim patient = BDD.VitaleTableAdapter.GetDataBénéficiaire(ordos(r).Patient_NIR, ordos(r).Patient_NIR, ordos(r).Patient_RangNaiss, ordos(r).Patient_Qualité)
            If patient.Rows.Count > 0 Then
                Ordo_DataGridView.Item(Patient_.Index, r).Value = patient(0).G104C1 & " " & patient(0).G104C3
            Else
                Ordo_DataGridView.Item(Patient_.Index, r).Value = "Patient Inconnu"
            End If

            Ordo_DataGridView.Item(Id_Ordo.Index, r).Value = ordos(r).Id_Ordo
            Ordo_DataGridView.Item(Selection.Index, r).Value = "selection"
        Next
    End Sub



    Private Sub Ordo_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Ordo_DataGridView.CellContentClick
        If e.ColumnIndex = Selection.Index And e.RowIndex >= 0 Then
            If COMPTOIR_MAIN.Visible = True Then
                COMPTOIR_MAIN.WindowState = FormWindowState.Maximized
                COMPTOIR_MAIN.BringToFront()
                COMPTOIR_MAIN.Select()

                Bandeau_info_bas_show("Chargement Ordonnance ...")
                If COMPTOIR_MAIN.Visible = True Then
                    MyMsg_Box.Presentation("Officine ?", "Le traitement de cette ordonnance annulle la facturation en cours." & vbCrLf & "Continuer ?", True, "OK", True, "Annuler", False, "")
                    If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                        Exit Sub
                    Else
                        COMPTOIR_MAIN.ResetForm()
                        COMPTOIR_MAIN.BringToFront()
                    End If
                Else
                    MENU_PRINCIPAL.Comptoir_Button.PerformClick()
                End If
                Ordo_row = OrdoTableAdapter.GetDataBy_ID_ordo(Ordo_DataGridView.Item(Id_Ordo.Index, e.RowIndex).Value).Item(0)
                Ordo_Fichiers_table = Ordo_FichiersTableAdapter.GetDataBy_Id_Ordo(Ordo_DataGridView.Item(Id_Ordo.Index, e.RowIndex).Value)
                Ordo_Produits_Lignes_table = Ordo_Produits_LignesTableAdapter.GetDataBy_Id_Ordo(Ordo_DataGridView.Item(Id_Ordo.Index, e.RowIndex).Value)
                Delivrance_Produits_Lignes_table = Delivrance_Produits_LignesTableAdapter.GetDataBy_Id_Ordo(Ordo_DataGridView.Item(Id_Ordo.Index, e.RowIndex).Value)





                COMPTOIR_MAIN.facilEpharm_Ordo_Etat = Ordo_row.Etat

                Select Case Ordo_row.Etat
                    Case "Reçue"
                        COMPTOIR_MAIN.Button_Facturation.BackgroundImage = Nothing
                        COMPTOIR_MAIN.Button_Facturation.Text = "CONFIRMER"
                        COMPTOIR_MAIN.Avances_Button.Visible = False
                    Case "Confirmée"
                        COMPTOIR_MAIN.Button_Facturation.BackgroundImage = Nothing
                        COMPTOIR_MAIN.Button_Facturation.Text = "VALIDER PREPARATION"
                        COMPTOIR_MAIN.Avances_Button.Visible = False
                    Case "Préparée"
                        COMPTOIR_MAIN.Button_Facturation.BackgroundImage = officine.My.Resources.Resources.validate2
                        COMPTOIR_MAIN.Button_Facturation.Text = ""
                        COMPTOIR_MAIN.Avances_Button.Visible = True
                End Select
                If Ordo_row.Etat = "Reçue" Then
                    Application.DoEvents()
                    COMPTOIR_MAIN.Vente_datagridview_auto_filling = True
                    For r = 0 To Ordo_Produits_Lignes_table.Rows.Count - 1


                        apiBlockInput(1)
                        COMPTOIR_MAIN.Vente.Focus()
                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, COMPTOIR_MAIN.Vente.Rows.Count - 1)
                        COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_produits.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index).Value = Ordo_Produits_Lignes_table(r).Prod_Code
                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_produits.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index)
                        COMPTOIR_MAIN.Valide_VenteCells = True
                        COMPTOIR_MAIN.Vente_CellValidated(Nothing, Nothing)

                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteQuantité.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index)
                        Application.DoEvents()
                        COMPTOIR_MAIN.capslock_off()
                        COMPTOIR_MAIN.Vente.BeginEdit(True)
                        Dim quantité As Decimal = (Ordo_Produits_Lignes_table(r).Prod_Quantité_Besoin + Ordo_Produits_Lignes_table(r).Prod_Quantité_Matin + Ordo_Produits_Lignes_table(r).Prod_Quantité_Midi + Ordo_Produits_Lignes_table(r).Prod_Quantité_Soir) * Ordo_Produits_Lignes_table(r).Prod_Quantité_Jours
                        If COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_Contenance.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index).Value <> "" Then
                            quantité = quantité / CDec(COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_Contenance.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index).Value)
                            If quantité - Int(quantité) <> 0 Then
                                quantité = Int(quantité) + 1
                            End If
                        End If
                        SendKeys.Send(quantité.ToString)

                        SendKeys.Send("{ENTER}")
                        Application.DoEvents()
                        apiBlockInput(0)
                    Next
                    COMPTOIR_MAIN.Vente_datagridview_auto_filling = False
                Else
                    Application.DoEvents()
                    COMPTOIR_MAIN.Vente_datagridview_auto_filling = True
                    For r = 0 To Delivrance_Produits_Lignes_table.Rows.Count - 1
                        Dim prod_string As String
                        If Delivrance_Produits_Lignes_table(r).Prod_CAB <> "" Then
                            prod_string = Delivrance_Produits_Lignes_table(r).Prod_CAB
                        ElseIf Delivrance_Produits_Lignes_table(r).Prod_EAN13 <> "" Then
                            prod_string = Delivrance_Produits_Lignes_table(r).Prod_EAN13
                        ElseIf Delivrance_Produits_Lignes_table(r).Prod_CIP <> "" Then
                            prod_string = Delivrance_Produits_Lignes_table(r).Prod_CIP
                        Else
                            prod_string = Delivrance_Produits_Lignes_table(r).Prod_Désignation
                        End If
                        apiBlockInput(1)
                        COMPTOIR_MAIN.Vente.Focus()
                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteType.Index, COMPTOIR_MAIN.Vente.Rows.Count - 1)
                        COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_produits.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index).Value = prod_string
                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.Vente_produits.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index)
                        COMPTOIR_MAIN.Valide_VenteCells = True
                        COMPTOIR_MAIN.Vente_CellValidated(Nothing, Nothing)
                        COMPTOIR_MAIN.Vente.CurrentCell = COMPTOIR_MAIN.Vente.Item(COMPTOIR_MAIN.VenteQuantité.Index, COMPTOIR_MAIN.Vente.CurrentRow.Index)
                        COMPTOIR_MAIN.capslock_off()
                        COMPTOIR_MAIN.Vente.BeginEdit(True)
                        SendKeys.Send(Delivrance_Produits_Lignes_table(r).Prod_Quantité_Boites.ToString)
                        SendKeys.Send("{ENTER}")
                        Application.DoEvents()
                        apiBlockInput(0)
                    Next
                    COMPTOIR_MAIN.Vente_datagridview_auto_filling = False
                End If

                Ordo_viewer.DataGridView1.Rows.Clear()

                For r = 0 To Ordo_Produits_Lignes_table.Rows.Count - 1
                    Ordo_viewer.DataGridView1.Rows.Add()
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Column.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Désignation
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Matin.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Quantité_Matin
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Midi.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Quantité_Midi
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Soir.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Quantité_Soir
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Besoin.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Quantité_Besoin
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Jours.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = Ordo_Produits_Lignes_table(r).Prod_Quantité_Jours
                    Ordo_viewer.DataGridView1.Item(Ordo_viewer.Prod_Total_Unitéss.Index, Ordo_viewer.DataGridView1.Rows.Count - 1).Value = CDec(Ordo_Produits_Lignes_table(r).Prod_Quantité_Jours) * _
                    (CDec(Ordo_Produits_Lignes_table(r).Prod_Quantité_Matin) + CDec(Ordo_Produits_Lignes_table(r).Prod_Quantité_Midi) + CDec(Ordo_Produits_Lignes_table(r).Prod_Quantité_Soir) + CDec(Ordo_Produits_Lignes_table(r).Prod_Quantité_Besoin))
                Next
                Ordo_viewer.Notes_Prescripteur_RichTextBox.Text = Ordo_row.Notes_Prescripteur
                Ordo_viewer.Notes_Pharma_RichTextBox.Text = Ordo_row.Notes_Pharma
                Ordo_viewer.Visible = True

                Dim Fichiers As New List(Of String)
                Dim fichier = Dir("D:\Prescripteur_Uploads\" & Ordo_DataGridView.Item(Id_Ordo.Index, e.RowIndex).Value & "*.*")
                While fichier <> ""
                    Fichiers.Add("D:\Prescripteur_Uploads\" & fichier)
                    fichier = Dir()
                End While
                For i = 0 To Fichiers.Count - 1
                    Dim my_Ordo_Doc As New Ordo_Doc
                    my_Ordo_Doc.WebBrowser1.Navigate(Fichiers(i))
                    my_Ordo_Doc.Visible = True
                Next

                Bandeau_info_bas_hide()

                If BDD.VitaleTableAdapter.GetDataBénéficiaire(Ordo_row.Patient_NIR, Ordo_row.Patient_DateNaiss, Ordo_row.Patient_RangNaiss, Ordo_row.Patient_Qualité).Rows.Count > 0 Then
                    COMPTOIR_MAIN.Chargement_CurrentBenéficiaire_degradé(Ordo_row.Patient_NIR, Ordo_row.Patient_DateNaiss, Ordo_row.Patient_RangNaiss, Ordo_row.Patient_Qualité)
                Else
                    MyMsg_Box.Presentation("Officine !", "Ce patient n'est pas enregistré.", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If

                Prescripteur_Selection(Ordo_row.Prescr_NumID, Ordo_row.Prescr_NumRPPS)
            End If
        End If
    End Sub

    Private Sub facilEpharm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Ordo_row = Nothing
        Ordo_Fichiers_table = Nothing
        Ordo_Produits_Lignes_table = Nothing
    End Sub

    Public Sub Prescripteur_Selection(ByVal Numidentification As String, ByVal NumRPPS As String)
        Dim mydatatable = COMPTOIR_MAIN.PrescripteursTableAdapter.GetDataBy_Numidentification_NumRPPS(Numidentification, NumRPPS)
        Select Case mydatatable.Rows.Count
            Case 0
                MyMsg_Box.Presentation("Officine", "Inconnu, créer prescriteur", True, "OUI", True, "NON", False, "")
                If MyMsg_Box.ShowDialog() = Windows.Forms.DialogResult.Yes Then
                    COMPTOIR_MAIN.PictureBox_Edition_Prescripteur_Click(Nothing, Nothing)
                End If
            Case 1
                CurrentBenéficiaire.Prescripteur_ID = mydatatable.Item(0).IDinterne
                COMPTOIR_MAIN.PrescripteurMyCombobox.Text = mydatatable.Item(0).NomPrénom
                COMPTOIR_MAIN.TextBox_Prescripteur_NumID.Text = mydatatable.Item(0).Numidentification
                CurrentBenéficiaire.Prescripteur_CodeSpécialité = mydatatable.Item(0).CodeSpécialité
                COMPTOIR_MAIN.Prescripteur_Spécialité_TextBox.Text = Traduction_CodeSpécialité_Prescripteur(mydatatable.Item(0).CodeSpécialité)
                COMPTOIR_MAIN.TextBox_Prescripteur_NumRPPS.Text = mydatatable.Item(0).NumRPPS

            Case Else
                Choix_Prescripteur.ShowDialog()
        End Select
    End Sub

    
  
End Class