' 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
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Imports System.Xml
Public Class Commandes_PharmaML
    Public ModeLight As Boolean
    Private rows_to_remove As List(Of Integer)

    Private Structure produit
        Dim CIP As String
        Dim EAN13 As String
        Dim CAB As String
        Dim Code_PharmaML As String
        Dim désignation As String
        Dim quantité As Integer
    End Structure

    Private Sub Commandes_PharmaML_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed

        Me.Dispose()
    End Sub
    Private Sub Commandes_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.Icon = Icon.FromHandle(officine.My.Resources.Commandes2.GetHicon)

        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "dd/MM/yyyy HH:mm"
        Dim the_date As New Date

        If Now.Hour > 12 Then
            DateTimePicker1.Value = New DateTime(Now.Year, Now.Month, Now.Day, 12, 0, 0, 0)
        Else
            DateTimePicker1.Value = New DateTime(Now.Year, Now.Month, Now.Day, 0, 0, 0, 0)
        End If
        Dim fournisseurs = Me.FournisseurTableAdapter.GetData_OrderByNom
        Fournisseurs_ComboBox.Items.Clear()
        For r = 0 To fournisseurs.Rows.Count - 1
            If fournisseurs.Item(r).URL <> "" Then
                Fournisseurs_ComboBox.Items.Add(fournisseurs.Item(r).Nom)
            End If
        Next
        affiche_commande()
        If ModeLight = False Then
            affiche_info()
        End If
        ModeLight = False

    End Sub

    Private Structure Manquant
        Dim code_prod As String
        Dim Type_Codification As String
        Dim désignation As String
        Dim quantité_manquante As Integer
        Dim fournisseur_secondaire As String
        Dim manquant_chez As String
        Dim manquant_Ref_Cde_Client_old As String

    End Structure
    Private Sub affiche_info()
        If Affiche_Non_CpmmandésRadioButton1.Checked = False And Affiche_Tous_RadioButton2.Checked = False And Affiche_CommandésRadioButton3.Checked = False Then Exit Sub
        Me.Cursor = Cursors.WaitCursor
        'Me.Enabled = False
        Bandeau_info_bas_show("Création de la liste des produits...")
        Produits_DataGridView.Rows.Clear()
        Application.DoEvents()
        'Dim actes = Me.ActesTableAdapter.GetDataBy_Date_Sup(Format(DateTimePicker1.Value, "yyyyMMddHHmm") & "00")
        Dim actes = BDD.Actes1TableAdapter.GetData(Format(DateTimePicker1.Value, "yyyyMMddHHmm") & "00", True)

        'Dim list_produit As New List(Of produit)
        For r = 0 To actes.Rows.Count - 1
            Dim prods = BDD.ProduitsTableAdapter.GetData_COMMANDES(actes(r).CIP, actes(r).EAN13, actes(r).Désignation)
            Dim prod_row As officine.PharmaDataSet.ProduitsRow
            If prods.Rows.Count > 0 Then
                prod_row = prods.Item(0)
            Else
                prod_row = Nothing
            End If
            If Not prod_row Is Nothing Then
                add_produit2(prod_row, actes(r).Quantité_total)
            End If
        Next
        If Avancés_CheckBox.Checked Then
            affiche_Avancés(False)
        End If


        Bandeau_info_bas_hide()'Bandeau_info_bas_show_thread)
        Me.Cursor = Cursors.Default
        'Me.Enabled = True
      
        'MyMsg_Box.Presentation("officine ?", "Pas de code pour " & produit.Designation & vbCrLf & vbCrLf & "Les commandes sans code sont rejetées par la pluspart des fournisseurs" & _
        Me.BringToFront()
    End Sub
  

    Private Async Sub get_data_produits(ByVal list_produit As List(Of produit))
        For r = 0 To list_produit.Count - 1
            Try


                COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(Produits_DataGridView.Item(EAN13.Index, r).Value)
                'Produits_DataGridView.Item(Quantité.Index, r).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", list_produit(r).CIP, list_produit(r).EAN13)
                Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                Produits_DataGridView.Item(Partielle.Index, r).Value = "true"
                Produits_DataGridView.Item(Reliquat.Index, r).Value = "false"
                Produits_DataGridView.Item(Equivalent.Index, r).Value = "false"
                Produits_DataGridView.Item(Délivrés.Index, r).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", list_produit(r).CIP, list_produit(r).EAN13, list_produit(r).désignation)

                Dim produit As PharmaDataSet.ProduitsRow
                If list_produit(r).Code_PharmaML <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Rows.Count > 0 Then
                    produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Item(0)
                ElseIf list_produit(r).EAN13 <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Rows.Count > 0 Then
                    produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Item(0)
                ElseIf list_produit(r).CIP <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Rows.Count > 0 Then
                    produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Item(0)
                ElseIf list_produit(r).Code_PharmaML <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Rows.Count > 0 Then
                    produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Item(0)
                ElseIf list_produit(r).désignation <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Rows.Count > 0 Then
                    produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Item(0)
                Else
                    Produits_DataGridView.Item(Stock.Index, r).Value = 0
                    Produits_DataGridView.Item(en_commande.Index, r).Value = 0
                    produit = Nothing
                End If

                If Not produit Is Nothing Then
                    Produits_DataGridView.Item(Stock.Index, r).Value = produit.Stock
                    Produits_DataGridView.Item(en_commande.Index, r).Value = produit.en_commande
                    Produits_DataGridView.Item(Liste.Index, r).Value = produit.Liste

                    If produit.Liste = "Stupéfiant" Then
                        Produits_DataGridView.Item(Dose.Index, r).Value = "1"
                        Produits_DataGridView.Item(Stock_prévisionnel.Index, r).ReadOnly = True
                        Dim Vidal_PackService As New Vidal_PackService.PackService
                        Dim Packs = Vidal_PackService.searchByProductId(Val(produit.vidal_productId))
                        If Not Packs Is Nothing And Packs.Count > 0 Then
                            If Not Packs.ElementAt(0).dose Is Nothing Then
                                Produits_DataGridView.Item(Dose.Index, r).Value = Packs.ElementAt(0).dose
                            End If
                        End If
                    End If

                    If produit.Réassort_auto = True Then
                        Produits_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.YellowGreen
                        Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                        If produit.Stock <= produit.Réassort_auto_seuil_min Then
                            Produits_DataGridView.Item(Quantité.Index, r).Value = Val(produit.Réassort_auto_seuil_max) - Val(produit.Stock) - Val(produit.en_commande)
                            If Val(Produits_DataGridView.Item(Quantité.Index, r).Value) < 0 Then
                                Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                            End If
                        End If
                    ElseIf produit.en_commande > 0 Then
                        Produits_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.Orange
                        Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                    End If
                    'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(Quantité.Index, r)
                    'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(0, r)
                End If
                If produit.Liste = "Stupéfiant" Then
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, r).Value = (Val(Produits_DataGridView.Item(en_commande.Index, r).Value) * Val(Produits_DataGridView.Item(Dose.Index, r).Value)) _
                  + Val(Produits_DataGridView.Item(Stock.Index, r).Value) + _
                  (Val(Produits_DataGridView.Item(Quantité.Index, r).Value) * Val(Produits_DataGridView.Item(Dose.Index, r).Value))
                Else
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, r).Value = Val(Produits_DataGridView.Item(en_commande.Index, r).Value) _
                        + Val(Produits_DataGridView.Item(Stock.Index, r).Value) + Val(Produits_DataGridView.Item(Quantité.Index, r).Value)
                End If
                Produits_DataGridView.Item(CAB.Index, r).Value = produit.CAB
                Produits_DataGridView.Item(Code_PharmaML.Index, r).Value = produit.Code_PharmaML

                Dim dus As New PharmaDataSet.DusDataTable
                If list_produit(r).EAN13 <> "" Then
                    dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).EAN13, False)
                ElseIf list_produit(r).CIP <> "" Then
                    dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).CIP, False)
                End If
                Dim du = 0
                For rr = 0 To dus.Rows.Count - 1
                    du = du + dus(rr).Quantité_Du
                Next
                Produits_DataGridView.Item(Dus_column.Index, r).Value = du
            Catch ex As Exception

            End Try
            Application.DoEvents()
        Next
        For i = 0 To Produits_DataGridView.Columns.Count - 1
            Produits_DataGridView.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Automatic
        Next i

        Await System.Threading.Tasks.Task.Factory.StartNew(Sub() System.Threading.Thread.Sleep(1))
    End Sub
    Private Sub add_produit2(ByVal prod_row As officine.PharmaDataSet.ProduitsRow, ByVal Quantité_délivrée As Decimal)

        If Control_Coordination_equipe_CheckBox1.Checked Then
            Dim go = False
            If (Fourni_exclusif_CheckBox.Checked = True And UCase(prod_row.Répartiteur_principal) = UCase(Fournisseurs_ComboBox.Text)) Or _
                       (Fourni_exclusif_CheckBox.Checked = False) Then
                If prod_row.Réassort_auto = False Then
                    If Affiche_Non_CpmmandésRadioButton1.Checked = True Then
                        If prod_row.en_commande <= 0 And (Afficher_auto_réassort_CheckBox.Checked = True Or prod_row.Réassort_auto = False) _
                             And prod_row.ne_plus_proposé_comande = False And prod_row.ne_plus_proposé_jusquà_vente = False Then
                            go = True


                        End If
                    ElseIf Affiche_Tous_RadioButton2.Checked = True Then
                        If (Afficher_auto_réassort_CheckBox.Checked = True Or prod_row.Réassort_auto = False) _
                            And prod_row.ne_plus_proposé_comande = False And prod_row.ne_plus_proposé_jusquà_vente = False Then

                            go = True


                        End If
                    ElseIf Affiche_CommandésRadioButton3.Checked = True Then
                        If Val(prod_row.en_commande) > 0 And (Afficher_auto_réassort_CheckBox.Checked = True Or prod_row.Réassort_auto = False) _
                           And prod_row.ne_plus_proposé_comande = False And prod_row.ne_plus_proposé_jusquà_vente = False Then

                            go = True

                        End If
                    End If
                End If
            End If
            If prod_row.Réassort_auto_seuil_min <> 0 And prod_row.Réassort_auto_seuil_min < CDec(prod_row.Stock) Then
                go = False
            End If
            If prod_row.Réassort_auto_seuil_max <> 0 And prod_row.Réassort_auto_seuil_max <= CDec(prod_row.Stock) Then
                go = False
            End If

            If go = False Then Exit Sub
        End If

        If Calc_commandé_CheckBox.Checked Then
            If prod_row.Code_PharmaML <> "" Then
                COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(prod_row.Code_PharmaML)
            ElseIf prod_row.EAN13 <> "" Then
                COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(prod_row.EAN13)
            ElseIf prod_row.CIP <> "" Then
                COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(prod_row.CIP)
            End If
            prod_row = BDD.ProduitsTableAdapter.GetDataByCIP_and_EAN13_and_CAB(prod_row.CIP, prod_row.EAN13, prod_row.CAB).Item(0)
        End If

        Dim RowIndex = Produits_DataGridView.RowCount
        Produits_DataGridView.Rows.Add()
        Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, RowIndex).Value = True
        Produits_DataGridView.Item(CIP.Index, RowIndex).Value = prod_row.CIP

        If prod_row.Code_PharmaML.Length = 13 Then
            Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.Code_PharmaML
        ElseIf prod_row.EAN13 <> "" Then
            Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.EAN13
        End If
        'COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(Produits_DataGridView.Item(EAN13.Index, RowIndex).Value)

        Produits_DataGridView.Item(Désignation.Index, RowIndex).Value = prod_row.Designation
        Try



            'Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", prod.CIP, prod.EAN13)
            Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = 0
            Produits_DataGridView.Item(Partielle.Index, RowIndex).Value = "true"
            Produits_DataGridView.Item(Reliquat.Index, RowIndex).Value = "false"
            Produits_DataGridView.Item(Equivalent.Index, RowIndex).Value = "false"
            'Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", prod.CIP, prod.EAN13, prod.désignation)
            Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = Quantité_délivrée
            Produits_DataGridView.Item(Stock.Index, RowIndex).Value = prod_row.Stock
            Produits_DataGridView.Item(en_commande.Index, RowIndex).Value = prod_row.en_commande
            Produits_DataGridView.Item(Liste.Index, RowIndex).Value = prod_row.Liste

            If prod_row.Liste = "Stupéfiant" Then
                Produits_DataGridView.Item(Dose.Index, RowIndex).Value = "1"
                Produits_DataGridView.Item(Stock_prévisionnel.Index, RowIndex).ReadOnly = True
                Dim Vidal_PackService As New Vidal_PackService.PackService
                Dim Packs = Vidal_PackService.searchByProductId(Val(prod_row.vidal_productId))
                If Not Packs Is Nothing And Packs.Count > 0 Then
                    If Not Packs.ElementAt(0).dose Is Nothing Then
                        Produits_DataGridView.Item(Dose.Index, RowIndex).Value = Packs.ElementAt(0).dose
                    End If
                End If
            End If

            If prod_row.Réassort_auto = True Then
                Produits_DataGridView.Rows.Item(RowIndex).DefaultCellStyle.BackColor = Color.YellowGreen
                Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = 0
                If prod_row.Stock <= prod_row.Réassort_auto_seuil_min Then
                    Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = Val(prod_row.Réassort_auto_seuil_max) - Val(prod_row.Stock) - Val(prod_row.en_commande)
                    If Val(Produits_DataGridView.Item(Quantité.Index, RowIndex).Value) < 0 Then
                        Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = 0
                    End If
                End If
            ElseIf prod_row.en_commande > 0 Then
                Produits_DataGridView.Rows.Item(RowIndex).DefaultCellStyle.BackColor = Color.Orange
                Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = 0
            End If
            'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(Quantité.Index, RowIndex)
            'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(0, RowIndex)


            If prod_row.Liste = "Stupéfiant" Then
                Produits_DataGridView.Item(Stock_prévisionnel.Index, RowIndex).Value = (Val(Produits_DataGridView.Item(en_commande.Index, RowIndex).Value) * Val(Produits_DataGridView.Item(Dose.Index, RowIndex).Value)) _
              + Val(Produits_DataGridView.Item(Stock.Index, RowIndex).Value) + _
              (Val(Produits_DataGridView.Item(Quantité.Index, RowIndex).Value) * Val(Produits_DataGridView.Item(Dose.Index, RowIndex).Value))
            Else
                Produits_DataGridView.Item(Stock_prévisionnel.Index, RowIndex).Value = Val(Produits_DataGridView.Item(en_commande.Index, RowIndex).Value) _
                    + Val(Produits_DataGridView.Item(Stock.Index, RowIndex).Value) + Val(Produits_DataGridView.Item(Quantité.Index, RowIndex).Value)
            End If
            Produits_DataGridView.Item(CAB.Index, RowIndex).Value = prod_row.CAB
            Produits_DataGridView.Item(Code_PharmaML.Index, RowIndex).Value = prod_row.Code_PharmaML

            If Calc_Dus_CheckBox.Checked Then
                Dim dus As New PharmaDataSet.DusDataTable
                If prod_row.EAN13 <> "" Then
                    dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(prod_row.EAN13, False)
                ElseIf prod_row.CIP <> "" Then
                    dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(prod_row.CIP, False)
                End If
                Dim du = 0
                For rr = 0 To dus.Rows.Count - 1
                    du = du + dus(rr).Quantité_Du
                Next
                Produits_DataGridView.Item(Dus_column.Index, RowIndex).Value = du
            End If

        Catch ex As Exception

        End Try

        'Await System.Threading.Tasks.Task.Factory.StartNew(Sub() System.Threading.Thread.Sleep(0))
    End Sub

    Private Sub affiche_dus()
        Bandeau_info_bas_show("Création de la liste des produits...")
        Produits_DataGridView.Rows.Clear()
        Application.DoEvents()
        Dim produits_dus = BDD.DusTableAdapter.GetDataBy_Soldé(False)
        Dim list_produit As New List(Of produit)
        For r = 0 To produits_dus.Rows.Count - 1
            Dim prod As produit
            prod.CIP = produits_dus(r).CIP7
            prod.EAN13 = produits_dus(r).EAN13
            prod.désignation = produits_dus(r).Désignation_Du
            prod.CAB = ""
            If COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo(prod.CIP, prod.EAN13, prod.désignation).Rows.Count > 0 Then
                prod.Code_PharmaML = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo(prod.CIP, prod.EAN13, prod.désignation).Item(0).Code_PharmaML
            Else
                prod.Code_PharmaML = ""
            End If
            If Not list_produit.Contains(prod) And (prod.CIP <> "" Or prod.EAN13 <> "" Or prod.Code_PharmaML <> "") Then
                'If Afficher_auto_réassort_CheckBox.Checked = True Then
                '    list_produit.Add(prod)
                'ElseIf prod.CIP <> "" Or prod.EAN13 <> "" Then
                Dim codeprod As String = ""
                If prod.Code_PharmaML <> "" Then
                    codeprod = prod.Code_PharmaML
                ElseIf prod.EAN13 <> "" Then
                    codeprod = prod.EAN13
                ElseIf prod.CIP <> "" Then
                    codeprod = prod.CIP

                End If
                If codeprod <> "" Then
                    COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(codeprod)
                End If

                Dim prodbdd = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(codeprod)
                If prodbdd.Rows.Count > 0 Then

                    If Not list_produit.Contains(prod) Then
                        list_produit.Add(prod)
                    End If
                End If
            End If
            'End If
        Next

        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Rows.Add()
        Next
        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, r).Value = True
        Next
        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Item(CIP.Index, r).Value = list_produit(r).CIP

            If list_produit(r).Code_PharmaML.Length = 13 Then
                Produits_DataGridView.Item(EAN13.Index, r).Value = list_produit(r).Code_PharmaML
            ElseIf list_produit(r).EAN13 <> "" Then
                Produits_DataGridView.Item(EAN13.Index, r).Value = list_produit(r).EAN13
            End If

            Produits_DataGridView.Item(Désignation.Index, r).Value = list_produit(r).désignation
            'Produits_DataGridView.Item(Quantité.Index, r).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", list_produit(r).CIP, list_produit(r).EAN13)
            Produits_DataGridView.Item(Quantité.Index, r).Value = 0
            Produits_DataGridView.Item(Partielle.Index, r).Value = "true"
            Produits_DataGridView.Item(Reliquat.Index, r).Value = "false"
            Produits_DataGridView.Item(Equivalent.Index, r).Value = "false"
            Produits_DataGridView.Item(Délivrés.Index, r).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", list_produit(r).CIP, list_produit(r).EAN13, list_produit(r).désignation)

            Dim produit As PharmaDataSet.ProduitsRow
            If list_produit(r).Code_PharmaML <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Item(0)
            ElseIf list_produit(r).EAN13 <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Item(0)
            ElseIf list_produit(r).CIP <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Item(0)
            ElseIf list_produit(r).Code_PharmaML <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CIP).Item(0)
            ElseIf list_produit(r).désignation <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Item(0)
            Else
                Produits_DataGridView.Item(Stock.Index, r).Value = 0
                Produits_DataGridView.Item(en_commande.Index, r).Value = 0
                produit = Nothing
            End If

            If Not produit Is Nothing Then
                Produits_DataGridView.Item(Stock.Index, r).Value = produit.Stock
                Produits_DataGridView.Item(en_commande.Index, r).Value = produit.en_commande
                Produits_DataGridView.Item(Liste.Index, r).Value = produit.Liste

                If produit.Liste = "Stupéfiant" Then
                    Produits_DataGridView.Item(Dose.Index, r).Value = "1"
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, r).ReadOnly = True
                    Dim Vidal_PackService As New Vidal_PackService.PackService
                    Dim Packs = Vidal_PackService.searchByProductId(Val(produit.vidal_productId))
                    If Not Packs Is Nothing And Packs.Count > 0 Then
                        If Not Packs.ElementAt(0).dose Is Nothing Then
                            Produits_DataGridView.Item(Dose.Index, r).Value = Packs.ElementAt(0).dose
                        End If
                    End If
                End If

                If produit.Réassort_auto = True Then
                    Produits_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.LightBlue
                    Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                    If produit.Stock <= produit.Réassort_auto_seuil_min Then
                        Produits_DataGridView.Item(Quantité.Index, r).Value = Val(produit.Réassort_auto_seuil_max) - Val(produit.Stock) - Val(produit.en_commande)
                        If Val(Produits_DataGridView.Item(Quantité.Index, r).Value) < 0 Then
                            Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                        End If
                    End If
                ElseIf produit.en_commande > 0 Then
                    Produits_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.Orange
                    Produits_DataGridView.Item(Quantité.Index, r).Value = 0
                End If
                'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(Quantité.Index, r)
                'Produits_DataGridView.CurrentCell = Produits_DataGridView.Item(0, r)
            End If
            If produit.Liste = "Stupéfiant" Then
                Produits_DataGridView.Item(Stock_prévisionnel.Index, r).Value = (Val(Produits_DataGridView.Item(en_commande.Index, r).Value) * Val(Produits_DataGridView.Item(Dose.Index, r).Value)) _
              + Val(Produits_DataGridView.Item(Stock.Index, r).Value) + _
              (Val(Produits_DataGridView.Item(Quantité.Index, r).Value) * Val(Produits_DataGridView.Item(Dose.Index, r).Value))
            Else
                Produits_DataGridView.Item(Stock_prévisionnel.Index, r).Value = Val(Produits_DataGridView.Item(en_commande.Index, r).Value) _
                    + Val(Produits_DataGridView.Item(Stock.Index, r).Value) + Val(Produits_DataGridView.Item(Quantité.Index, r).Value)
            End If
            Produits_DataGridView.Item(CAB.Index, r).Value = produit.CAB
            Produits_DataGridView.Item(Code_PharmaML.Index, r).Value = produit.Code_PharmaML

            Dim dus As New PharmaDataSet.DusDataTable
            If list_produit(r).EAN13 <> "" Then
                dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).EAN13, False)
            ElseIf list_produit(r).CIP <> "" Then
                dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).CIP, False)
            End If
            Dim du = 0
            For rr = 0 To dus.Rows.Count - 1
                du = du + dus(rr).Quantité_Du
            Next
            Produits_DataGridView.Item(Dus_column.Index, r).Value = du
        Next

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)

    End Sub
    Private Sub affiche_Avancés(ByVal exclusif As Boolean)
        Me.Cursor = Cursors.WaitCursor
        Bandeau_info_bas_show("Création de la liste des produits avancés...")
        If exclusif = True Then Produits_DataGridView.Rows.Clear()
        Application.DoEvents()
        Dim produits_avancés = BDD.Avances_ProduitTableAdapter.GetDataBy_Soldé(False)
        Dim list_produit As New List(Of produit)
        For r = 0 To produits_avancés.Rows.Count - 1
            Dim prod As produit
            prod.CIP = produits_avancés(r).Produit_CIP
            prod.EAN13 = produits_avancés(r).Produit_CIP
            prod.CAB = produits_avancés(r).Produit_CAB
            prod.désignation = produits_avancés(r).Poduit_designation
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Dim ne_pas_proposer = False
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            If COMPTOIR_MAIN.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(prod.EAN13, prod.CAB, prod.désignation).Rows.Count > 0 Then
                prod.Code_PharmaML = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(prod.EAN13, prod.CAB, prod.désignation).Item(0).Code_PharmaML
                If COMPTOIR_MAIN.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(prod.EAN13, prod.CAB, prod.désignation).Item(0).ne_plus_proposé_comande = True Or _
                  COMPTOIR_MAIN.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(prod.EAN13, prod.CAB, prod.désignation).Item(0).ne_plus_proposé_jusquà_vente = True Then
                    ne_pas_proposer = True
                End If
            Else
                prod.Code_PharmaML = ""
            End If
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            'test présence du produit dans les produits déja affichées pour ne pas ré-ajouter
            Dim déja_dans_Produits_DataGridView As Boolean = False
            For rr = 0 To Produits_DataGridView.RowCount - 1
                If Produits_DataGridView.Item(EAN13.Index, rr).Value = prod.CIP Or Produits_DataGridView.Item(EAN13.Index, rr).Value = prod.EAN13 Or _
                    Produits_DataGridView.Item(EAN13.Index, rr).Value = prod.Code_PharmaML Or Produits_DataGridView.Item(Désignation.Index, rr).Value = prod.désignation Then
                    déja_dans_Produits_DataGridView = True
                End If
            Next
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            If déja_dans_Produits_DataGridView = False And ne_pas_proposer = False Then
                If Not list_produit.Contains(prod) And (prod.CIP <> "" Or prod.CAB <> "" Or prod.Code_PharmaML <> "") Then
                    Dim codeprod As String = ""
                    If prod.Code_PharmaML <> "" Then
                        codeprod = prod.Code_PharmaML
                    ElseIf prod.EAN13 <> "" Then
                        codeprod = prod.EAN13
                    ElseIf prod.CAB <> "" Then
                        codeprod = prod.CAB
                    End If

                    If codeprod <> "" Then
                        BDD.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(codeprod)
                    End If

                    Dim prodbdd = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(codeprod)
                    If prodbdd.Rows.Count > 0 Then

                        If Not list_produit.Contains(prod) Then
                            If exclusif = False Then
                                If Affiche_Tous_RadioButton2.Checked = True Then
                                    list_produit.Add(prod)
                                ElseIf (Affiche_Non_CpmmandésRadioButton1.Checked = True And prodbdd.Item(0).en_commande = 0) Or _
                                (Affiche_CommandésRadioButton3.Checked = True And prodbdd.Item(0).en_commande > 0) Then
                                    list_produit.Add(prod)
                                End If
                            Else
                                list_produit.Add(prod)
                            End If

                        End If
                    End If
                End If
            End If
        Next

        Dim index_depart_Produits_DataGridView = Produits_DataGridView.RowCount
        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Rows.Add()
        Next
        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, r + index_depart_Produits_DataGridView).Value = True
        Next
        For r = 0 To list_produit.Count - 1
            Produits_DataGridView.Rows.Item(r + index_depart_Produits_DataGridView).DefaultCellStyle.BackColor = Color.LightBlue
            Produits_DataGridView.Item(CIP.Index, r + index_depart_Produits_DataGridView).Value = ""

            If list_produit(r).Code_PharmaML.Length = 13 Then
                Produits_DataGridView.Item(EAN13.Index, r + index_depart_Produits_DataGridView).Value = list_produit(r).Code_PharmaML
            ElseIf list_produit(r).EAN13 <> "" Then
                Produits_DataGridView.Item(EAN13.Index, r + index_depart_Produits_DataGridView).Value = list_produit(r).EAN13
            End If

            Produits_DataGridView.Item(Désignation.Index, r + index_depart_Produits_DataGridView).Value = list_produit(r).désignation

            Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value = 0
            Produits_DataGridView.Item(Partielle.Index, r + index_depart_Produits_DataGridView).Value = "true"
            Produits_DataGridView.Item(Reliquat.Index, r + index_depart_Produits_DataGridView).Value = "false"
            Produits_DataGridView.Item(Equivalent.Index, r + index_depart_Produits_DataGridView).Value = "false"
            Produits_DataGridView.Item(Délivrés.Index, r + index_depart_Produits_DataGridView).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", list_produit(r).CIP, list_produit(r).EAN13, list_produit(r).désignation)

            Dim produit As PharmaDataSet.ProduitsRow
            If list_produit(r).Code_PharmaML <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).Code_PharmaML).Item(0)
            ElseIf list_produit(r).EAN13 <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).EAN13).Item(0)
            ElseIf list_produit(r).CAB <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CAB).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(list_produit(r).CAB).Item(0)
            ElseIf list_produit(r).désignation <> "" And COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@", "@@@@@@@@@@@@", list_produit(r).désignation).Item(0)
            Else
                Produits_DataGridView.Item(Stock.Index, r + index_depart_Produits_DataGridView).Value = 0
                Produits_DataGridView.Item(en_commande.Index, r + index_depart_Produits_DataGridView).Value = 0
                produit = Nothing
            End If

            If Not produit Is Nothing Then
                Produits_DataGridView.Item(Stock.Index, r + index_depart_Produits_DataGridView).Value = produit.Stock
                Produits_DataGridView.Item(en_commande.Index, r + index_depart_Produits_DataGridView).Value = produit.en_commande
                Produits_DataGridView.Item(Liste.Index, r + index_depart_Produits_DataGridView).Value = produit.Liste

                If produit.Liste = "Stupéfiant" Then
                    Produits_DataGridView.Item(Dose.Index, r + index_depart_Produits_DataGridView).Value = "1"
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, r + index_depart_Produits_DataGridView).ReadOnly = True
                    Dim Vidal_PackService As New Vidal_PackService.PackService
                    Dim Packs = Vidal_PackService.searchByProductId(Val(produit.vidal_productId))
                    If Not Packs Is Nothing And Packs.Count > 0 Then
                        If Not Packs.ElementAt(0).dose Is Nothing Then
                            Produits_DataGridView.Item(Dose.Index, r + index_depart_Produits_DataGridView).Value = Packs.ElementAt(0).dose
                        End If
                    End If
                End If

                If produit.Réassort_auto = True Then
                    Produits_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.LightBlue
                    Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value = 0
                    If produit.Stock <= produit.Réassort_auto_seuil_min Then
                        Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value = Val(produit.Réassort_auto_seuil_max) - Val(produit.Stock) - Val(produit.en_commande)
                        If Val(Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value) < 0 Then
                            Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value = 0
                        End If
                    End If
                ElseIf produit.en_commande > 0 Then
                    Produits_DataGridView.Rows.Item(r + index_depart_Produits_DataGridView).DefaultCellStyle.BackColor = Color.Orange
                    Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value = 0
                End If

            End If
            If produit.Liste = "Stupéfiant" Then
                Produits_DataGridView.Item(Stock_prévisionnel.Index, r + index_depart_Produits_DataGridView).Value = _
                    (Val(Produits_DataGridView.Item(en_commande.Index, r + index_depart_Produits_DataGridView).Value) * Val(Produits_DataGridView.Item(Dose.Index, r + index_depart_Produits_DataGridView).Value)) _
              + Val(Produits_DataGridView.Item(Stock.Index, r + index_depart_Produits_DataGridView).Value) + _
              (Val(Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value) * Val(Produits_DataGridView.Item(Dose.Index, r + index_depart_Produits_DataGridView).Value))
            Else
                Produits_DataGridView.Item(Stock_prévisionnel.Index, r + index_depart_Produits_DataGridView).Value = Val(Produits_DataGridView.Item(en_commande.Index, r + index_depart_Produits_DataGridView).Value) _
                    + Val(Produits_DataGridView.Item(Stock.Index, r + index_depart_Produits_DataGridView).Value) + Val(Produits_DataGridView.Item(Quantité.Index, r + index_depart_Produits_DataGridView).Value)
            End If
            Produits_DataGridView.Item(CAB.Index, r + index_depart_Produits_DataGridView).Value = produit.CAB
            Produits_DataGridView.Item(Code_PharmaML.Index, r + index_depart_Produits_DataGridView).Value = produit.Code_PharmaML

            Dim dus As New PharmaDataSet.DusDataTable
            If list_produit(r).EAN13 <> "" Then
                dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).EAN13, False)
            ElseIf list_produit(r).CAB <> "" Then
                dus = BDD.DusTableAdapter.GetDataBy_CIP_Soldé(list_produit(r).CAB, False)
            End If
            Dim du = 0
            For rr = 0 To dus.Rows.Count - 1
                du = du + dus(rr).Quantité_Du
            Next
            Produits_DataGridView.Item(Dus_column.Index, r + index_depart_Produits_DataGridView).Value = du
        Next

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        Me.Cursor = Cursors.Default
    End Sub

    Sub dataGridView1_CellFormatting(ByVal sender As Object, _
    ByVal e As DataGridViewCellFormattingEventArgs) _
    Handles Produits_DataGridView.CellFormatting

        If e.ColumnIndex = Ne_plus_propo_jusq_vente.Index AndAlso (e.Value IsNot Nothing) Then
            Produits_DataGridView.Rows(e.RowIndex).Cells(e.ColumnIndex).ToolTipText = "Décocher pour que le produit ne soit plus proposé jusqu'à la prochaine vente"
        End If

    End Sub 'dataGridView1_CellFormatting



    Public Sub affiche_commande()
        commandes_DataGridView.Rows.Clear()
        Dim commandes = Me.CommandesTableAdapter.GetData_TopX(1000, "A TRANSMETTRE")
        commandes.Merge(Me.CommandesTableAdapter.GetData_TopX(1000, "ERREUR"))
        For r = 0 To commandes.Rows.Count - 1
            commandes_DataGridView.Rows.Add()
        Next
        For r = 0 To commandes.Rows.Count - 1
            commandes_DataGridView.Item(commande_ref.Index, r).Value = commandes.Item(r).ref
            commandes_DataGridView.Item(commande_Fournisseur.Index, r).Value = commandes.Item(r).Fournisseur
            commandes_DataGridView.Item(commande_Statut.Index, r).Value = commandes.Item(r).Statut
        Next
        For r = 0 To commandes_DataGridView.RowCount - 1
            commandes_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.White
            commandes_DataGridView.Rows.Item(r).DefaultCellStyle.ForeColor = Color.Black
            If commandes_DataGridView.Item(commande_Statut.Index, r).Value = "ERREUR" Then
                commandes_DataGridView.Rows.Item(r).DefaultCellStyle.BackColor = Color.Red
                commandes_DataGridView.Rows.Item(r).DefaultCellStyle.ForeColor = Color.Yellow
            End If
        Next
    End Sub


    Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
        Affiche_Tous_RadioButton2.Checked = False
        Affiche_CommandésRadioButton3.Checked = False
        Affiche_Non_CpmmandésRadioButton1.Checked = False

    End Sub

    Private Sub Consolider_Commande_Button_Click(sender As Object, e As EventArgs) Handles Consolider_Commande_Button.Click
        If Fournisseurs_ComboBox.SelectedItem Is Nothing Then
            MyMsg_Box.Presentation("Officine !", "FOURNISSEUR?", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        'control quantité''''''''''''''''
        Dim quantité_a_ajouter As Boolean = False
        For r = 0 To Produits_DataGridView.Rows.Count - 1
            If Val(Produits_DataGridView.Item(Quantité.Index, r).Value) > 0 Then
                quantité_a_ajouter = True
                Exit For
            End If
        Next
        If quantité_a_ajouter = False Then
            MyMsg_Box.Presentation("Officine !", "Rien à ajouter aux commandes, toutes les quantités à 0.", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        ''''''''''''''''''''''''''''''''''
        Consolider_Commande()
        affiche_commande()
    End Sub

    Private Sub Consolider_Commande()
        rows_to_remove = New List(Of Integer)
        Dim ref_commande As Decimal
        Dim num_ligne As Integer = 0
        Dim A_TRANSMETTRE = Me.CommandesTableAdapter.GetData_by_Statut("A TRANSMETTRE")
        Dim insert_into_commande As Boolean = False 'si une commande A TRANSMETTRE existe pour ce fournisseur, les produits y seront insérés ou les quantités modifiées.
        For r = 0 To A_TRANSMETTRE.Rows.Count - 1
            If A_TRANSMETTRE(r).Fournisseur = Fournisseurs_ComboBox.SelectedItem.ToString Then
                ref_commande = A_TRANSMETTRE(r).ref
                insert_into_commande = True
                Dim lignes_commande = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(A_TRANSMETTRE(r).ref)

                For s = 0 To Produits_DataGridView.Rows.Count - 1
                    If Val(Produits_DataGridView.Item(Quantité.Index, s).Value) > 0 Then

                        Dim code_prod As String = ""
                        Dim prod_inserted As Boolean = False ' si dans cette commande, le produit existe déja, les quantitées commandées seront changées, sinon le produit sera inséré.
                        If Produits_DataGridView.Item(Code_PharmaML.Index, s).Value <> "" Then
                            code_prod = Produits_DataGridView.Item(Code_PharmaML.Index, s).Value
                        ElseIf Produits_DataGridView.Item(EAN13.Index, s).Value <> "" Then
                            code_prod = Produits_DataGridView.Item(EAN13.Index, s).Value
                        ElseIf Produits_DataGridView.Item(CIP.Index, s).Value <> "" Then
                            code_prod = Produits_DataGridView.Item(CIP.Index, s).Value
                        Else
                            code_prod = Produits_DataGridView.Item(Désignation.Index, s).Value
                        End If

                        For p = 0 To lignes_commande.Rows.Count - 1
                            If lignes_commande.Item(p).Code_Produit = code_prod Then
                                Me.Commandes_LignesTableAdapter.Update_by_ref_commande_num_ligne(lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne, lignes_commande.Item(p).Type_Codification, _
                                                                                                 lignes_commande.Item(p).Code_Produit, lignes_commande.Item(p).Designation, Val(lignes_commande.Item(p).Quantité) + Val(Produits_DataGridView.Item(Quantité.Index, s).Value), _
                                                                                                 lignes_commande.Item(p).Partielle, lignes_commande.Item(p).Reliquat, lignes_commande.Item(p).Equivalent, _
                                                                                                 lignes_commande.Item(p).livré_Designation, lignes_commande.Item(p).livré_Code_Produit, lignes_commande.Item(p).livré_Quantité, _
                                                                                                 lignes_commande.Item(p).livré_INDISPONIBILITE_N, lignes_commande.Item(p).reçu, lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne)
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(lignes_commande.Item(p).Quantité) + Val(Produits_DataGridView.Item(Quantité.Index, s).Value), code_prod)
                                prod_inserted = True
                            End If
                        Next

                        If prod_inserted = False Then
                            num_ligne = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(A_TRANSMETTRE(r).ref).Rows.Count + 1
                            If Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString.Length = 13 And IsNumeric(Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString) Then
                                Me.Commandes_LignesTableAdapter.Insert(A_TRANSMETTRE(r).ref, num_ligne, "EAN13", Produits_DataGridView.Item(Code_PharmaML.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                                                       Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                                                     LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(EAN13.Index, s).Value)

                            ElseIf Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString.Length = 7 And IsNumeric(Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString) Then
                                Me.Commandes_LignesTableAdapter.Insert(A_TRANSMETTRE(r).ref, num_ligne, "CIP39", Produits_DataGridView.Item(Code_PharmaML.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                                        Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                                      LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(CIP.Index, s).Value)
                            Else
                                Me.Commandes_LignesTableAdapter.Insert(A_TRANSMETTRE(r).ref, num_ligne, "CLAIR", Produits_DataGridView.Item(CIP.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                                      Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                                   LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(Désignation.Index, s).Value)
                            End If
                        End If

                        If Not rows_to_remove.Contains(s) Then
                            rows_to_remove.Add(s)
                        End If

                    End If
                Next
            End If

        Next
        If insert_into_commande = False Then
            ref_commande = Me.CommandesTableAdapter.Select_Max_ref + 1
            Me.CommandesTableAdapter.Insert(ref_commande, Fournisseurs_ComboBox.SelectedItem.ToString, "", Format(Date_livraison_DateTimePicker.Value, "yyyy-MM-dd"), "A TRANSMETTRE", "", "", "")
            num_ligne = 0
            For s = 0 To Produits_DataGridView.Rows.Count - 1
                If Val(Produits_DataGridView.Item(Quantité.Index, s).Value) > 0 Then
                    num_ligne = num_ligne + 1
                    If Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString.Length = 13 And IsNumeric(Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString) Then
                        Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "EAN13", Produits_DataGridView.Item(Code_PharmaML.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                                               Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                                              LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(EAN13.Index, s).Value)

                    ElseIf Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString.Length = 7 And IsNumeric(Produits_DataGridView.Item(Code_PharmaML.Index, s).Value.ToString) Then
                        Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CIP39", Produits_DataGridView.Item(Code_PharmaML.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                                Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                             LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(CIP.Index, s).Value)
                    Else
                        Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CLAIR", Produits_DataGridView.Item(CIP.Index, s).Value, Produits_DataGridView.Item(Désignation.Index, s).Value, _
                                              Val(Produits_DataGridView.Item(Quantité.Index, s).Value), LCase(Produits_DataGridView.Item(Partielle.Index, s).Value.ToString), _
                                             LCase(Produits_DataGridView.Item(Reliquat.Index, s).Value.ToString), LCase(Produits_DataGridView.Item(Equivalent.Index, s).Value.ToString), "", "", 0, "", 0, 0)
                        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(Val(Produits_DataGridView.Item(Quantité.Index, s).Value), Produits_DataGridView.Item(Désignation.Index, s).Value)
                    End If
                    If Not rows_to_remove.Contains(s) Then
                        rows_to_remove.Add(s)
                    End If
                End If
            Next
        End If
        'auto réassort
        If Afficher_auto_réassort_CheckBox.Checked = False Then
            Dim produits_auto_réassort = COMPTOIR_MAIN.ProduitsTableAdapter.GetData_Réassort_auto(Fournisseurs_ComboBox.SelectedItem.ToString)
            For r = 0 To produits_auto_réassort.Rows.Count - 1
                Dim code_prod As String = ""
                If produits_auto_réassort(r).Code_PharmaML <> "" Then
                    code_prod = produits_auto_réassort(r).Code_PharmaML
                ElseIf produits_auto_réassort(r).EAN13 <> "" Then
                    code_prod = produits_auto_réassort(r).EAN13
                ElseIf produits_auto_réassort(r).CIP <> "" Then
                    code_prod = produits_auto_réassort(r).CIP
                End If
                If code_prod <> "" Then
                    BDD.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(code_prod)
                End If
            Next
            produits_auto_réassort = COMPTOIR_MAIN.ProduitsTableAdapter.GetData_Réassort_auto(Fournisseurs_ComboBox.SelectedItem.ToString)
            If produits_auto_réassort.Rows.Count > 0 Then
                num_ligne = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande).Rows.Count
                For r = 0 To produits_auto_réassort.Rows.Count - 1

                    Dim quantité As Single = Val(produits_auto_réassort.Item(r).Réassort_auto_seuil_max) - (Val(produits_auto_réassort.Item(r).Stock) + Val(produits_auto_réassort.Item(r).en_commande))

                    If quantité > 0 Then
                        num_ligne = num_ligne + 1
                        If produits_auto_réassort.Item(r).EAN13 <> "" Then
                            Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "EAN13", produits_auto_réassort.Item(r).EAN13, produits_auto_réassort.Item(r).Designation, _
                                                                 quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produits_auto_réassort.Item(r).EAN13)
                        ElseIf produits_auto_réassort.Item(r).CIP <> "" Then
                            Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CIP39", produits_auto_réassort.Item(r).CIP, produits_auto_réassort.Item(r).Designation, _
                                                      quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produits_auto_réassort.Item(r).CIP)
                        Else
                            Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CLAIR", "", produits_auto_réassort.Item(r).Designation, _
                                                      quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produits_auto_réassort.Item(r).Designation)
                        End If
                        Try
                            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & "AUTO REASSORT " & Now.ToString & _
                                          ref_commande.ToString & " l" & num_ligne.ToString & " " & quantité.ToString & " " & produits_auto_réassort.Item(r).Designation, True)
                        Catch ex As Exception
                        End Try

                    End If
                Next
            End If
        End If
        'fin auto réassort

        'changer
        If Ne_plus_proposer_Auto_CheckBox.Checked = True Then
            For r = 0 To Produits_DataGridView.Rows.Count - 1
                If Val(Produits_DataGridView.Item(Quantité.Index, r).Value) > 0 Then
                    COMPTOIR_MAIN.ProduitsTableAdapter.Update_ne_plus_proposé_jusquà_vente_by_CodePharmaML(True, Produits_DataGridView.Item(EAN13.Index, r).Value)
                End If
            Next
        End If

        For r = 0 To Produits_DataGridView.Rows.Count - 1
            If Not rows_to_remove.Contains(r) Then
                If Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, r).Value = False Then
                    rows_to_remove.Add(r)
                End If
            End If
        Next

        rows_to_remove.Sort()
        For r = rows_to_remove.Count - 1 To 0 Step (-1)
            Produits_DataGridView.Rows.RemoveAt(rows_to_remove(r))
        Next
        'affiche_info()
        affiche_commande()
        Try
            Dim warning_msg = ""
            Dim lignes = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande)
            For r = 0 To lignes.Rows.Count - 1
                If lignes(r).Code_Produit = "" Then
                    warning_msg = warning_msg & lignes(r).Designation & vbCrLf
                End If
            Next
            If warning_msg <> "" Then
                MyMsg_Box.Presentation("Officine !", "Attention,commande " & ref_commande.ToString & ", produit(s) sans code de commande:" & vbCrLf & vbCrLf & warning_msg, False, "", False, "", True, "Ok")
                MyMsg_Box.ShowDialog()
            End If
        Catch ex As Exception

        End Try


    End Sub

#Region "REQUETES"
    Private Sub PCB_control(ByVal ref_commande As Integer)


    End Sub
    Public Sub Transmettre_Commande(ByVal ref As Integer, ByVal Afficher_message As Boolean)

        If UCase(Config.Logiciel_ModeFonctionement) = "TEST" Then Exit Sub

        Bandeau_info_bas_show("Transmission Commande " & ref.ToString)
        Dim commande = Me.CommandesTableAdapter.GetDataBy_ref(ref).Item(0)
        Dim Date_commande = Format(Now, "yyyy-MM-dd") & "T" & Format(Now, "HH:mm:ss")
        Dim lignes_commande = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref)
        Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(commande.Fournisseur).Item(0)


        'PCB_control
        For r = 0 To lignes_commande.Rows.Count - 1
            Try
                Dim data = BDD.PCBTableAdapter.GetDataBy_Fournisseur_Produit(commande.Fournisseur, lignes_commande.Item(r).Code_Produit)
                If data.Rows.Count > 0 Then
                    Dim quantité_commande = lignes_commande.Item(r).Quantité
                    Dim modulo = data.Item(0).PCB
                    If modulo > 0 Then
                        While quantité_commande Mod modulo <> 0
                            quantité_commande = quantité_commande + 1
                        End While
                        Me.Commandes_LignesTableAdapter.Update_Quantité(quantité_commande, commande.ref, lignes_commande.Item(r).num_ligne)
                    End If
                End If
            Catch ex As Exception
                trace_log(vbCrLf & "PCB_control" & vbCrLf & ex.Message & vbCrLf)
            End Try
        Next
        'PCB_control_fin

        Try
            Dim fichierxml = Application.StartupPath & "\Pharma_ml\retour_pharma_ml_Transmettre_Commande_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML"
            Dim body, REF_MESSAGE As String
            REF_MESSAGE = Format(Now, "yyyyMMddHHmmssfff")
            body = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
            "<CSRP_ENVELOPPE Usage=" & Chr(34) & "P" & Chr(34) & " Version_Logiciel=" & Chr(34) & "V1.0" & Chr(34) & " Id_Logiciel=" & Chr(34) & "GESTION PHARMACIE" & Chr(34) & " Nature_Action=" & Chr(34) & "REQ_EMISSION" & Chr(34) & " Version_Protocole=" & Chr(34) & "1.0.0.0" & Chr(34) & " xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:enveloppe" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Adresse=" & Chr(34) & fournisseur.officine_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Code=" & Chr(34) & "00" & Chr(34) & " Nature=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<RECEPTEUR Adresse=" & Chr(34) & fournisseur.Fournisseur_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & " Nature=" & Chr(34) & "RE" & Chr(34) & "/>" & _
            "<REF_MESSAGE>" & REF_MESSAGE & "</REF_MESSAGE>" & _
            "<DATE>" & Date_commande & "</DATE>" & _
            "</ENTETE>" & _
            "<CORPS>" & _
            "<MESSAGE_OFFICINE xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:message" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Id_Client=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Nature_Partenaire=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<DESTINATAIRE Nature_Partenaire=" & Chr(34) & "RE" & Chr(34) & " Id_Societe=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code_Societe=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & "/>" & _
            "</ENTETE>" & _
            "<CORPS>"
            Dim commande_ref_string As String = commande.ref.ToString
            While commande_ref_string.Length < 20
                commande_ref_string = "0" & commande_ref_string
            End While
            body = body & "<COMMANDE Ref_Cde_Client=" & Chr(34) & commande_ref_string & Chr(34) & ">" & _
            "<NORMALE>"

            For r = 0 To lignes_commande.Rows.Count - 1

                Dim correct_designation = Mid(lignes_commande(r).Designation, 1, 50) 'for xml is correct
                correct_designation = Replace(correct_designation, "&", " ")
                correct_designation = Replace(correct_designation, "<", " ")
                correct_designation = Replace(correct_designation, ">", " ")
                correct_designation = Replace(correct_designation, Chr(34), " ")

                'Dim transmission_code_commercial As Boolean = False
                'If PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(lignes_commande(r).Code_Produit).Rows.Count > 0 Then
                '    If PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(lignes_commande(r).Code_Produit).Item(0).CAB <> "" Then
                '        transmission_code_commercial = True
                '        body = body & "<LIGNE_N Equivalent=" & Chr(34) & lignes_commande(r).Equivalent & Chr(34) & " Reliquat=" & Chr(34) & lignes_commande(r).Reliquat & Chr(34) & " Partielle=" & Chr(34) & lignes_commande(r).Partielle & Chr(34) & _
                '     " Quantite=" & Chr(34) & lignes_commande(r).Quantité & Chr(34) & " Designation=" & Chr(34) & correct_designation & Chr(34) & " Code_Produit=" & Chr(34) & PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(lignes_commande(r).Code_Produit).Item(0).CAB & Chr(34) & _
                '     " Type_Codification=" & Chr(34) & "EAN13" & Chr(34) & " Num_Ligne=" & Chr(34) & lignes_commande(r).num_ligne & Chr(34) & "/>"
                '    End If
                'End If
                'If transmission_code_commercial = False Then
                body = body & "<LIGNE_N Equivalent=" & Chr(34) & lignes_commande(r).Equivalent & Chr(34) & " Reliquat=" & Chr(34) & lignes_commande(r).Reliquat & Chr(34) & " Partielle=" & Chr(34) & lignes_commande(r).Partielle & Chr(34) & _
                     " Quantite=" & Chr(34) & lignes_commande(r).Quantité & Chr(34) & " Designation=" & Chr(34) & correct_designation & Chr(34) & " Code_Produit=" & Chr(34) & lignes_commande(r).Code_Produit & Chr(34) & _
                     " Type_Codification=" & Chr(34) & lignes_commande(r).Type_Codification & Chr(34) & " Num_Ligne=" & Chr(34) & lignes_commande(r).num_ligne & Chr(34) & "/>"
                'End If
            Next

            body = body & _
            "</NORMALE>" & _
            "</COMMANDE>" & _
            "</CORPS>" & _
            "</MESSAGE_OFFICINE>" & _
            "</CORPS>" & _
            "</CSRP_ENVELOPPE>"
            Dim request = System.Net.HttpWebRequest.CreateHttp(New Uri(fournisseur.URL))
            request.Timeout = 120000
            request.Method = "POST"
            request.ContentType = "text/xml;charset=UTF-8"
            request.Headers.Add("Content-PharmaML", Pharma_ML_Signature(body, fournisseur.officine_id, fournisseur.officine_Clé_secrète))

            'envoi
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(body)
            'My.Computer.FileSystem.WriteAllBytes("c:\commande.xml", byteArray, False)
            My.Computer.FileSystem.WriteAllBytes(Application.StartupPath & "\Pharma_ml\transmis\" & REF_MESSAGE & ".xml", byteArray, False)
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream

            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()


            Dim objResponse As System.Net.HttpWebResponse
            objResponse = request.GetResponse()

            Dim StreamReader As System.IO.StreamReader
            StreamReader = New System.IO.StreamReader(objResponse.GetResponseStream())
            Me.CommandesTableAdapter.Update_by_ref(commande.Fournisseur, commande.Ref_Fournisseur, Date_commande, commande.Date_livraison, "TRANSMISE", REF_MESSAGE, "", ref)
            My.Computer.FileSystem.WriteAllText(fichierxml, StreamReader.ReadToEnd.ToString, False)
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                          "Transmission commande " & fournisseur.Nom & " " & commande.ref.ToString & " " & lignes_commande.Rows.Count.ToString & _
                                          " lignes " & " REF_MESSAGE:" & REF_MESSAGE.ToString & Chr(10) & "(fichier retour: " & fichierxml & ")" & Chr(10), True)
            If Affiche_erreur(fichierxml) = False Then
                Me.CommandesTableAdapter.Update_by_ref(commande.Fournisseur, commande.Ref_Fournisseur, Date_commande, commande.Date_livraison, "ERREUR", REF_MESSAGE, "", ref)
                'Exit Sub
            End If
            If FIN_SERVICE(fichierxml) = True Then
                Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
                Exit Sub
            End If

            'Acquittement
            Dim xmldoc As New XmlDocument
            xmldoc.Load(fichierxml)
            Dim root As XmlNode = xmldoc.DocumentElement
            Dim nsmgr As New XmlNamespaceManager(xmldoc.NameTable)
            nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
            Dim CSRP_ENVELOPPE = xmldoc.ChildNodes.Item(1)
            Dim ENTETE = CSRP_ENVELOPPE.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
            Dim REF_MESSAGE_Replying_to = ENTETE.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText
            ACQUITTEMENT(fournisseur.Nom, REF_MESSAGE_Replying_to, Afficher_message)
            ''''''''''''''''''''''''''''''''''''

        Catch ex As Exception
            Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
            If Afficher_message = True Then
                MyMsg_Box.Presentation("Officine !", "Transmission commande " & commande.Fournisseur & " échouée" & Chr(10) & ex.Message, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End If
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                                  "Transmission commande " & commande.Fournisseur & " " & commande.ref.ToString & " échouée:" & Chr(10) & ex.ToString & Chr(10), True)
            Exit Sub
        End Try

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        Traitement_Retour_Pharma_ML(Afficher_message)
        affiche_commande()
    End Sub

    Public Sub Info_Produit(ByVal CIP As String, ByVal EAN13 As String, ByVal Désignation As String, ByVal Nom_Fournisseur As String, ByVal Code_PharmaML As String, ByVal Quantité As Integer)

        Désignation = Mid(Désignation, 1, 50) 'for xml is correct
        Désignation = Replace(Désignation, "&", " ")
        Désignation = Replace(Désignation, "<", " ")
        Désignation = Replace(Désignation, ">", " ")
        Désignation = Replace(Désignation, Chr(34), " ")

        ''''''''''''
        'nettoyage des anciens fichiers retours
        Dim old_file As String
        old_file = Dir(Application.StartupPath & "\Pharma_ml\retour_pharma_ml_Info_Produit_*.XML")
        Try
            While old_file <> ""
                My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\Pharma_ml\" & old_file)
            End While
        Catch ex As Exception
        End Try
        ''''''''''''

        Dim fichierxml = Application.StartupPath & "\Pharma_ml\retour_pharma_ml_Info_Produit_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML"
        Dim Code_Produit As String = ""
        Try

            Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(Nom_Fournisseur).Item(0)


            Dim body, REF_MESSAGE As String
            REF_MESSAGE = Format(Now, "yyyyMMddHHmmssfff")
            body = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
            "<CSRP_ENVELOPPE Usage=" & Chr(34) & "P" & Chr(34) & " Version_Logiciel=" & Chr(34) & "V1.0" & Chr(34) & " Id_Logiciel=" & Chr(34) & "GESTION PHARMACIE" & Chr(34) & " Nature_Action=" & Chr(34) & "REQ_EMISSION" & Chr(34) & " Version_Protocole=" & Chr(34) & "1.0.0.0" & Chr(34) & " xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:enveloppe" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Adresse=" & Chr(34) & fournisseur.officine_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Code=" & Chr(34) & "00" & Chr(34) & " Nature=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<RECEPTEUR Adresse=" & Chr(34) & fournisseur.Fournisseur_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & " Nature=" & Chr(34) & "RE" & Chr(34) & "/>" & _
            "<REF_MESSAGE>" & REF_MESSAGE & "</REF_MESSAGE>" & _
            "<DATE>" & Format(Now, "yyyy-MM-dd") & "T" & Format(Now, "HH:mm:ss") & "</DATE>" & _
            "</ENTETE>" & _
            "<CORPS>" & _
            "<MESSAGE_OFFICINE xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:message" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Id_Client=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Nature_Partenaire=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<DESTINATAIRE Nature_Partenaire=" & Chr(34) & "RE" & Chr(34) & " Id_Societe=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code_Societe=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & "/>" & _
            "</ENTETE>" & _
            "<CORPS>" & _
            "<REQ_INFO_PRODUIT Ref_Req_Info_Produit=" & Chr(34) & REF_MESSAGE & Chr(34) & ">"

            Dim Type_Codification As String = ""

            If Code_PharmaML <> "" Then
                Type_Codification = "EAN13"
                Code_Produit = Code_PharmaML
                'ElseIf PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Rows.Count > 0 Then
                '    If PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).CAB <> "" Then
                '        Type_Codification = "EAN13"
                '        Code_Produit = PRODUITS_bdd.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(EAN13).Item(0).CAB
                '    End If
            End If
            If Code_Produit = "" Then
                If EAN13 <> "" Then
                    Type_Codification = "EAN13"
                    Code_Produit = EAN13
                ElseIf CIP <> "" Then
                    Type_Codification = "CIP39"
                    Code_Produit = CIP
                End If
            End If
            body = body & "<LIGNE Num_Ligne=" & Chr(34) & "1" & Chr(34) & " Type_Codification=" & Chr(34) & Type_Codification & Chr(34) & " Code_Produit=" & Chr(34) & Code_Produit & Chr(34) & " Designation=" & Chr(34) & Mid(Désignation, 1, 50) & Chr(34) & " Quantite=" & Chr(34) & Quantité.ToString & Chr(34) & "/>"

            body = body & "</REQ_INFO_PRODUIT>" & _
            "</CORPS>" & _
            "</MESSAGE_OFFICINE>" & _
            "</CORPS>" & _
            "</CSRP_ENVELOPPE>"

            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                       "Info_Produit:" & " CIP:" & CIP & " EAN13:" & EAN13 & " Désignation:" & Désignation & " Nom_Fournisseur:" & Nom_Fournisseur & "  REF_MESSAGE:" & REF_MESSAGE & Chr(10), True)

            Dim request = System.Net.HttpWebRequest.CreateHttp(New Uri(fournisseur.URL))
            request.Timeout = 30000
            request.Method = "POST"
            request.ContentType = "text/xml;charset=UTF-8"
            request.Headers.Add("Content-PharmaML", Pharma_ML_Signature(body, fournisseur.officine_id, fournisseur.officine_Clé_secrète))

            'envoi
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(body)
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream

            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()

            Dim objResponse As System.Net.HttpWebResponse
            objResponse = request.GetResponse()
            Dim StreamReader As System.IO.StreamReader
            StreamReader = New System.IO.StreamReader(objResponse.GetResponseStream())
            My.Computer.FileSystem.WriteAllText(fichierxml, StreamReader.ReadToEnd.ToString, False)
        Catch ex As Exception
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                           "Info_Produit:" & " CIP:" & CIP & " EAN13:" & EAN13 & " Désignation:" & Désignation & " Nom_Fournisseur:" & Nom_Fournisseur & Chr(10) & ex.ToString & Chr(10), True)
            MyMsg_Box.Presentation("Officine !", ex.Message, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End Try
        If Affiche_erreur(fichierxml) = False Then
            'Exit Sub
        End If
        If FIN_SERVICE(fichierxml) = True Then
            MyMsg_Box.Presentation("Officine !", "SERVICE NON DISPONIBLE", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If

        'Acquittement
        Dim xmldoc As New XmlDocument
        xmldoc.Load(fichierxml)
        Dim root As XmlNode = xmldoc.DocumentElement
        Dim nsmgr As New XmlNamespaceManager(xmldoc.NameTable)
        nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
        Dim CSRP_ENVELOPPE = xmldoc.ChildNodes.Item(1)
        Dim ENTETE = CSRP_ENVELOPPE.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
        Dim REF_MESSAGE_Replying_to = ENTETE.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText
        ACQUITTEMENT(Nom_Fournisseur, REF_MESSAGE_Replying_to, False)
        'Dim my_treeview_form As New treeview_form
        'my_treeview_form.xmlfile = fichierxml
        'my_treeview_form.TopMost = True
        'my_treeview_form.ShowDialog()
        Dim disp As New Disponibilité_Produit
        disp.affichage_retour(fichierxml, Nom_Fournisseur, Code_Produit)
        disp.ShowDialog()
        Try
            My.Computer.FileSystem.DeleteFile(fichierxml)
        Catch ex As Exception

        End Try



    End Sub

    Private Sub Demande_Info_Commande(ByVal ref As Integer)


        Try
            Dim commande = Me.CommandesTableAdapter.GetDataBy_ref(ref).Item(0)
            Dim lignes_commande = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref)
            Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(commande.Fournisseur).Item(0)

            Dim body, REF_MESSAGE As String
            REF_MESSAGE = Format(Now, "yyyyMMddHHmmssfff")
            body = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
            "<CSRP_ENVELOPPE Usage=" & Chr(34) & "P" & Chr(34) & " Version_Logiciel=" & Chr(34) & "V1.0" & Chr(34) & " Id_Logiciel=" & Chr(34) & "GESTION PHARMACIE" & Chr(34) & " Nature_Action=" & Chr(34) & "REQ_ETAT_COMMANDE" & Chr(34) & " Version_Protocole=" & Chr(34) & "1.0.0.0" & Chr(34) & " xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:enveloppe" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Adresse=" & Chr(34) & fournisseur.officine_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Code=" & Chr(34) & "00" & Chr(34) & " Nature=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<RECEPTEUR Adresse=" & Chr(34) & fournisseur.Fournisseur_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & " Nature=" & Chr(34) & "RE" & Chr(34) & "/>" & _
            "<REF_MESSAGE>" & REF_MESSAGE & "</REF_MESSAGE>" & _
            "<DATE>" & Format(Now, "yyyy-MM-dd") & "T" & Format(Now, "HH:mm:ss") & "</DATE>" & _
            "</ENTETE>" & _
            "<CORPS>" & _
            "<MESSAGE_OFFICINE xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:message" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Id_Client=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Nature_Partenaire=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<DESTINATAIRE Nature_Partenaire=" & Chr(34) & "RE" & Chr(34) & " Id_Societe=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code_Societe=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & "/>" & _
            "</ENTETE>" & _
            "<CORPS>"
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                   "Demande_Info_Commande:" & " ref:" & ref.ToString & "  REF_MESSAGE:" & REF_MESSAGE & Chr(10), True)
            Dim commande_ref_string As String = commande.ref.ToString
            While commande_ref_string.Length < 20
                commande_ref_string = "0" & commande_ref_string
            End While
            'body = body & "<COMMANDE Ref_Cde_Client=" & Chr(34) & commande_ref_string & Chr(34) & " Ref_Cde_Repartiteur=" & Chr(34) & commande.Ref_Fournisseur & Chr(34) & ">" & _
            body = body & "<COMMANDE Ref_Cde_Client=" & Chr(34) & commande_ref_string & Chr(34) & ">" & _
            "<NORMALE>"

            For r = 0 To lignes_commande.Rows.Count - 1
                body = body & "<LIGNE_REQ_ETAT_CDE Designation=" & Chr(34) & lignes_commande(r).Designation & Chr(34) & " Code_Produit=" & Chr(34) & lignes_commande(r).Code_Produit & Chr(34) & _
                    " Type_Codification=" & Chr(34) & lignes_commande(r).Type_Codification & Chr(34) & " Num_Ligne_Commande=" & Chr(34) & lignes_commande(r).num_ligne & Chr(34) & " Num_Ligne=" & Chr(34) & lignes_commande(r).num_ligne & Chr(34) & "/>"

            Next

            body = body & _
            "</NORMALE>" & _
            "</COMMANDE>" & _
            "</CORPS>" & _
            "</MESSAGE_OFFICINE>" & _
            "</CORPS>" & _
            "</CSRP_ENVELOPPE>"




            Dim request = System.Net.HttpWebRequest.CreateHttp(New Uri(fournisseur.URL))
            request.Timeout = 30000
            request.Method = "POST"
            request.ContentType = "text/xml;charset=UTF-8"
            request.Headers.Add("Content-PharmaML", Pharma_ML_Signature(body, fournisseur.officine_id, fournisseur.officine_Clé_secrète))

            'envoi
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(body)
            My.Computer.FileSystem.WriteAllBytes("C:\info.txt", byteArray, True)
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream

            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()


            Dim objResponse As System.Net.HttpWebResponse
            objResponse = request.GetResponse()

            Dim StreamReader As System.IO.StreamReader
            StreamReader = New System.IO.StreamReader(objResponse.GetResponseStream())

            Dim fichierxml = Application.StartupPath & "\Pharma_ml\retour_pharma_ml_Demande_Info_Commande_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML"
            My.Computer.FileSystem.WriteAllText(fichierxml, StreamReader.ReadToEnd.ToString, False)
            If Affiche_erreur(fichierxml) = False Then
                'Exit Sub
            End If
            If FIN_SERVICE(fichierxml) = True Then
                Exit Sub
            End If

            'Acquittement
            Dim xmldoc As New XmlDocument
            xmldoc.Load(fichierxml)
            Dim root As XmlNode = xmldoc.DocumentElement
            Dim nsmgr As New XmlNamespaceManager(xmldoc.NameTable)
            nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
            Dim CSRP_ENVELOPPE = xmldoc.ChildNodes.Item(1)
            Dim ENTETE = CSRP_ENVELOPPE.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
            Dim REF_MESSAGE_Replying_to = ENTETE.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText
            ACQUITTEMENT(fournisseur.Nom, REF_MESSAGE_Replying_to, False)
            Dim my_treeview_form As New treeview_form
            my_treeview_form.xmlfile = fichierxml
            my_treeview_form.Visible = True

        Catch ex As Exception
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                "Demande_Info_Commande:" & " ref:" & ref.ToString & Chr(10) & ex.ToString & Chr(10), True)
            MyMsg_Box.Presentation("Officine !", ex.Message, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
        End Try

    End Sub


    Private Sub Vidage(ByVal Fournisseur_nom As String, ByVal Afficher_message As Boolean)

        Try

            Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(Fournisseur_nom).Item(0)

            Dim body, REF_MESSAGE As String
            REF_MESSAGE = Format(Now, "yyyyMMddHHmmssfff")
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                    "Vidage " & Fournisseur_nom & " , REF_MESSAGE:" & REF_MESSAGE.ToString & Chr(10), True)
            body = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
            "<CSRP_ENVELOPPE Usage=" & Chr(34) & "P" & Chr(34) & " Version_Logiciel=" & Chr(34) & "V1.0" & Chr(34) & " Id_Logiciel=" & Chr(34) & "GESTION PHARMACIE" & Chr(34) & " Nature_Action=" & Chr(34) & "REQ_RECEPTION" & Chr(34) & " Version_Protocole=" & Chr(34) & "1.0.0.0" & Chr(34) & " xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:enveloppe" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Adresse=" & Chr(34) & fournisseur.officine_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Code=" & Chr(34) & "00" & Chr(34) & " Nature=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<RECEPTEUR Adresse=" & Chr(34) & fournisseur.Fournisseur_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & " Nature=" & Chr(34) & "RE" & Chr(34) & "/>" & _
            "<REF_MESSAGE>" & REF_MESSAGE & "</REF_MESSAGE>" & _
            "</ENTETE>" & _
            "<CORPS>" & _
            "<ACTION>VIDAGE</ACTION>" & _
            "</CORPS>" & _
            "</CSRP_ENVELOPPE>"
            'My.Computer.FileSystem.WriteAllBytes("E:\Debug\Pharma_ml\myfile.xml", Encoding.UTF8.GetBytes(body), False)
            Dim request = System.Net.HttpWebRequest.CreateHttp(New Uri(fournisseur.URL))
            request.Timeout = 30000
            request.Method = "POST"
            request.KeepAlive = False
            request.ContentType = "text/xml;charset=UTF-8"
            request.Headers.Add("Content-PharmaML", Pharma_ML_Signature(body, fournisseur.officine_id, fournisseur.officine_Clé_secrète))

            'envoi
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(body)
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream

            dataStream.Write(byteArray, 0, byteArray.Length)
            'My.Computer.FileSystem.WriteAllBytes("c:\fichier.xml", byteArray, False)
            dataStream.Close()

            Dim objResponse As System.Net.HttpWebResponse
            objResponse = request.GetResponse()

            Dim StreamReader As System.IO.StreamReader
            StreamReader = New System.IO.StreamReader(objResponse.GetResponseStream())
            Dim fichierxml = Application.StartupPath & "\Pharma_ml\retour_pharma_ml_VIDAGE_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML"

            My.Computer.FileSystem.WriteAllText(fichierxml, StreamReader.ReadToEnd.ToString, False)
            If Affiche_erreur(fichierxml) = False Then
                'Exit Sub
            End If
            If FIN_SERVICE(fichierxml) = True Then
                MyMsg_Box.Presentation("Officine !", "AUCUN MESSAGE EN ATTENTE", False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
                Exit Sub
            End If
            ''''''''''''''''''''''''''''''''''

            '''''''''''''''''''''''''''''''''''''
            'Acquittement
            Dim xmldoc As New XmlDocument
            xmldoc.Load(fichierxml)
            Dim root As XmlNode = xmldoc.DocumentElement
            Dim nsmgr As New XmlNamespaceManager(xmldoc.NameTable)
            nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
            Dim CSRP_ENVELOPPE = xmldoc.ChildNodes.Item(1)
            Dim ENTETE = CSRP_ENVELOPPE.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
            Dim REF_MESSAGE_Replying_to = ENTETE.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText
            '''''''''''''''''''''''''''''''''''''''''''
            Try 'verification s'il s'agit d''un retour commande
                Dim nsmgr2 As New XmlNamespaceManager(xmldoc.NameTable)
                nsmgr2.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:message")
                Dim CORPSnode As XmlNode = root.SelectSingleNode("descendant::bk:CORPS", nsmgr)
                Dim MESSAGE_REPARTITEURnode As XmlNode = CORPSnode.SelectSingleNode("descendant::bk:MESSAGE_REPARTITEUR", nsmgr2)
                Dim CORPS2node As XmlNode = MESSAGE_REPARTITEURnode.SelectSingleNode("descendant::bk:CORPS", nsmgr2)
                Dim REP_COMMANDEnode As XmlNode = CORPS2node.SelectSingleNode("descendant::bk:REP_COMMANDE", nsmgr2)
                If Not REP_COMMANDEnode Is Nothing Then
                    My.Computer.FileSystem.RenameFile(fichierxml, "retour_pharma_ml_Transmettre_Commande_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML")
                End If
            Catch ex As Exception

            End Try
            ''''''''''''''''''''''''''''''''''''''''''''

            ACQUITTEMENT(fournisseur.Nom, REF_MESSAGE_Replying_to, Afficher_message)
        Catch ex As Exception
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                "Vidage " & Fournisseur_nom & Chr(10) & ex.ToString & Chr(10), True)
            MyMsg_Box.Presentation("Officine !", "erreur vidage:" & vbCrLf & ex.Message, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End Try
    End Sub

    Private Sub ACQUITTEMENT(ByVal Fournisseur_nom As String, ByVal REF_MESSAGE_Replying_to As String, ByVal Afficher_message As Boolean)
        Try

            Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(Fournisseur_nom).Item(0)

            Dim body, REF_MESSAGE As String
            REF_MESSAGE = Format(Now, "yyyyMMddHHmmssfff")
            body = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
            "<CSRP_ENVELOPPE Usage=" & Chr(34) & "P" & Chr(34) & " Version_Logiciel=" & Chr(34) & "V1.0" & Chr(34) & " Id_Logiciel=" & Chr(34) & "GESTION PHARMACIE" & Chr(34) & " Nature_Action=" & Chr(34) & "REQ_RECEPTION" & Chr(34) & " Version_Protocole=" & Chr(34) & "1.0.0.0" & Chr(34) & " xmlns=" & Chr(34) & "urn:x-csrp:fr.csrp.protocole:enveloppe" & Chr(34) & ">" & _
            "<ENTETE>" & _
            "<EMETTEUR Adresse=" & Chr(34) & fournisseur.officine_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.officine_id & Chr(34) & " Code=" & Chr(34) & "00" & Chr(34) & " Nature=" & Chr(34) & "OF" & Chr(34) & "/>" & _
            "<RECEPTEUR Adresse=" & Chr(34) & fournisseur.Fournisseur_adresse & Chr(34) & " Id=" & Chr(34) & fournisseur.Fournisseur_id & Chr(34) & " Code=" & Chr(34) & fournisseur.Fournisseur_Code & Chr(34) & " Nature=" & Chr(34) & "RE" & Chr(34) & "/>" & _
            "<REF_MESSAGE>" & REF_MESSAGE & "</REF_MESSAGE>" & _
            "<EN_REPONSE_A>" & REF_MESSAGE_Replying_to & "</EN_REPONSE_A>" & _
            "</ENTETE>" & _
              "<CORPS>" & _
            "<ACTION>ACQUITTEMENT</ACTION>" & _
            "</CORPS>" &
                "</CSRP_ENVELOPPE>"
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                        "ACQUITTEMENT " & Fournisseur_nom & " " & "  REF_MESSAGE:" & REF_MESSAGE & Chr(10), True)
            Dim request = System.Net.HttpWebRequest.CreateHttp(New Uri(fournisseur.URL))
            request.Timeout = 30000
            request.Method = "POST"
            request.KeepAlive = False
            request.ContentType = "text/xml;charset=UTF-8"
            request.Headers.Add("Content-PharmaML", Pharma_ML_Signature(body, fournisseur.officine_id, fournisseur.officine_Clé_secrète))

            'envoi
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(body)
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream

            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()


            Dim objResponse As System.Net.HttpWebResponse
            objResponse = request.GetResponse()

            Dim StreamReader As System.IO.StreamReader
            StreamReader = New System.IO.StreamReader(objResponse.GetResponseStream())

            Dim fichierxml = Application.StartupPath & "\Pharma_ml\retour_pharma_ml_ACQUITTEMENT_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML"
            My.Computer.FileSystem.WriteAllText(fichierxml, StreamReader.ReadToEnd.ToString, False)

            If Affiche_erreur(fichierxml) = False Then
                'Exit Sub
            End If
            If FIN_SERVICE(fichierxml) = True Then
                Exit Sub
            End If

            'Acquittement
            Dim xmldoc As New XmlDocument
            xmldoc.Load(fichierxml)
            Dim root As XmlNode = xmldoc.DocumentElement
            Dim nsmgr As New XmlNamespaceManager(xmldoc.NameTable)
            nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
            Dim CSRP_ENVELOPPE = xmldoc.ChildNodes.Item(1)
            Dim ENTETEnode = CSRP_ENVELOPPE.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
            Dim REF_MESSAGE_Replying_to2 = ENTETEnode.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText



            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            'si necessaire: renommer le fichier retour_pharma_ml_ACQUITTEMENT_ en retour_pharma_ml_Transmettre_Commande_

            Try
                Dim EN_REPONSE_A As String = ""
                If Not ENTETEnode.SelectSingleNode("descendant::bk:EN_REPONSE_A", nsmgr) Is Nothing Then
                    EN_REPONSE_A = ENTETEnode.SelectSingleNode("descendant::bk:EN_REPONSE_A", nsmgr).InnerText
                End If
                Dim nsmgr2 As New XmlNamespaceManager(xmldoc.NameTable)
                nsmgr2.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:message")
                Dim CORPSnode As XmlNode = root.SelectSingleNode("descendant::bk:CORPS", nsmgr)
                Dim MESSAGE_REPARTITEURnode As XmlNode = CORPSnode.SelectSingleNode("descendant::bk:MESSAGE_REPARTITEUR", nsmgr2)
                Dim CORPS2node As XmlNode = MESSAGE_REPARTITEURnode.SelectSingleNode("descendant::bk:CORPS", nsmgr2)
                If Not CORPS2node.SelectSingleNode("descendant::bk:REP_COMMANDE", nsmgr2) Is Nothing Then
                    My.Computer.FileSystem.RenameFile(fichierxml, "retour_pharma_ml_Transmettre_Commande_" & Format(Now, "yyyyMMddHHmmssfff") & ".XML")
                End If
            Catch ex As Exception
            End Try
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ACQUITTEMENT(fournisseur.Nom, REF_MESSAGE_Replying_to2, Afficher_message)
        Catch ex As Exception
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                        "ACQUITTEMENT " & Fournisseur_nom & " " & Chr(10) & ex.ToString, True)
            MyMsg_Box.Presentation("Officine !", "erreur acquitement:" & vbCrLf & ex.Message, False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End Try
        Traitement_Retour_Pharma_ML(Afficher_message)
    End Sub

#End Region
    Shared Function Pharma_ML_Signature(ByVal body As String, ByVal officine_id As String, ByVal officine_Clé_secrète As String) As String
        While officine_id.Length < 16
            officine_id = officine_id & "0"
        End While
        Dim Input As String = body & officine_id & officine_Clé_secrète
        ' Convert the input string to a byte array and compute the hash.
        Dim data As Byte() = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(Input))

        ' Create a new Stringbuilder to collect the bytes
        ' and create a string.
        Dim sBuilder As New StringBuilder()

        ' Loop through each byte of the hashed data 
        ' and format each one as a hexadecimal string.
        Dim i As Integer
        For i = 0 To data.Length - 1
            sBuilder.Append(data(i).ToString("x2"))
        Next i

        ' Return the hexadecimal string base64 encoded.
        Return Convert.ToBase64String(data)
    End Function 'Pharma_ML_Signature

    Private Function Affiche_erreur(ByVal fichierxml As String) As Boolean
        If InStr(My.Computer.FileSystem.ReadAllText(fichierxml, Encoding.UTF8), "<ERREUR ") <> 0 Then
            Dim my_treeview_form As New treeview_form
            my_treeview_form.xmlfile = fichierxml
            my_treeview_form.Text = "ERREUR PHARMA-ML"
            my_treeview_form.ShowDialog()
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & " ERREUR " & fichierxml & Chr(10), True)

            If InStr(My.Computer.FileSystem.ReadAllText(fichierxml, Encoding.UTF8), "<ERREUR Statut=" & Chr(34) & "8" & Chr(34) & " Detail=" & Chr(34) & "Doublon reference commande" & Chr(34) & "/>") = 0 Then
                While Dir(fichierxml) <> ""
                    'My.Computer.FileSystem.DeleteFile(fichierxml)
                    My.Computer.FileSystem.MoveFile(fichierxml, Application.StartupPath & "\Pharma_ml\erreurs\" & Mid(fichierxml, InStrRev(fichierxml, "\") + 1), True)
                End While
                Return False

            End If
        End If
        Return True
    End Function

    Private Function FIN_SERVICE(ByVal fichierxml As String) As Boolean
        Try
            If InStr(My.Computer.FileSystem.ReadAllText(fichierxml, Encoding.UTF8), "FIN_SERVICE") <> 0 Then
                My.Computer.FileSystem.DeleteFile(fichierxml)
                My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & " FIN_SERVICE" & Chr(10), True)
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            Return True
        End Try
    End Function


    Private Sub commandes_DataGridView_SelectionChanged(sender As Object, e As DataGridViewCellEventArgs) Handles commandes_DataGridView.CellClick
        'Fournisseurs_ComboBox.SelectedItem = commandes_DataGridView.Item(commande_Fournisseur.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString
        affiche_détail_commande()
    End Sub
    Private Sub affiche_détail_commande()
        Détail_commande_Label.Text = "Détail commande " & commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentCell.RowIndex).Value.ToString & "  " & commandes_DataGridView.Item(commande_Fournisseur.Index, commandes_DataGridView.CurrentCell.RowIndex).Value.ToString
        Dim détail_commande = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(Val(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentCell.RowIndex).Value))

        Détail_Commande_DataGridView.Rows.Clear()
        For r = 0 To détail_commande.Rows.Count - 1
            Détail_Commande_DataGridView.Rows.Add()
        Next
        For r = 0 To détail_commande.Rows.Count - 1
            Détail_Commande_DataGridView.Item(Détail_Commande_ref_commande.Index, r).Value = détail_commande(r).ref_commande
            Détail_Commande_DataGridView.Item(Détail_Commande_num_ligne.Index, r).Value = détail_commande(r).num_ligne
            Détail_Commande_DataGridView.Item(Détail_Commande_Type_Codification.Index, r).Value = détail_commande(r).Type_Codification
            Détail_Commande_DataGridView.Item(Détail_Commande_Code_Produit.Index, r).Value = détail_commande(r).Code_Produit
            Détail_Commande_DataGridView.Item(Détail_Commande_Designation.Index, r).Value = détail_commande(r).Designation
            Détail_Commande_DataGridView.Item(Détail_Commande_Quantité.Index, r).Value = détail_commande(r).Quantité
            Détail_Commande_DataGridView.Item(Détail_Commande_Partielle.Index, r).Value = détail_commande(r).Partielle
            Détail_Commande_DataGridView.Item(Détail_Commande_Reliquat.Index, r).Value = détail_commande(r).Reliquat
            Détail_Commande_DataGridView.Item(Détail_Commande_Equivalent.Index, r).Value = détail_commande(r).Equivalent
            Détail_Commande_DataGridView.Item(Détail_Commande_livré_Designation.Index, r).Value = détail_commande(r).livré_Designation
            Détail_Commande_DataGridView.Item(Détail_Commande_livré_Code_Produit.Index, r).Value = détail_commande(r).livré_Code_Produit
            Détail_Commande_DataGridView.Item(Détail_Commande_livré_Quantité.Index, r).Value = détail_commande(r).livré_Quantité
            Détail_Commande_DataGridView.Item(Détail_Commande_livré_INDISPONIBILITE_N.Index, r).Value = détail_commande(r).livré_INDISPONIBILITE_N
            Détail_Commande_DataGridView.Item(Détail_Commande_reçu.Index, r).Value = détail_commande(r).reçu
            Détail_Commande_DataGridView.Item(Détail_Commande_Modifier.Index, r).Value = "modifier"
        Next

        Select Case commandes_DataGridView.Item(commande_Statut.Index, commandes_DataGridView.CurrentCell.RowIndex).Value
            Case "A TRANSMETTRE"
                Action_Button.Text = "Transmettre"
            Case "TRANSMISE"
                Action_Button.Text = "Demande Info"
            Case "EN COURS FOURNISSEUR", "RECEPTIONNÉE"
                Action_Button.Text = "Receptionner"
            Case "ERREUR"
                Action_Button.Text = "Reprendre"
        End Select
    End Sub








    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        If Fournisseurs_ComboBox.SelectedItem Is Nothing Then
            MyMsg_Box.Presentation("Officine !", "FOURNISSEUR", False, "", False, "", True, "OK")
            MyMsg_Box.ShowDialog()
            Exit Sub
        End If
        Vidage(Fournisseurs_ComboBox.SelectedItem.ToString, True)
        Traitement_Retour_Pharma_ML(True)
        affiche_commande()
    End Sub

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles Recherche_TextBox.KeyDown
        If e.KeyCode = Keys.Return Then
            TextBox1_Validated(Recherche_TextBox, New EventArgs)
            Recherche_DataGridView.Focus()
        End If

    End Sub



    Private Sub TextBox1_Validated(sender As Object, e As EventArgs) Handles Recherche_TextBox.Validated
        If Recherche_TextBox.Text = "" Then Exit Sub

        If (Mid(Recherche_TextBox.Text, 1, 2) = "01" And Mid(Recherche_TextBox.Text, 17, 2) = "17" And Mid(Recherche_TextBox.Text, 25, 2) = "10") Or _
                   (Mid(Recherche_TextBox.Text, 1, 2) = "01" And Mid(Recherche_TextBox.Text, 17, 2) = "11" And Mid(Recherche_TextBox.Text, 25, 2) = "17" And Mid(Recherche_TextBox.Text, 33, 2) = "10") Or _
                    (Mid(Recherche_TextBox.Text, 1, 3) = "010" And Recherche_TextBox.Text.Length >= 16) Then
            Recherche_TextBox.Text = Mid(Recherche_TextBox.Text, 4, 13)
        ElseIf IsNumeric(Recherche_TextBox.Text) And Recherche_TextBox.Text.Length > 13 Then
            Recherche_TextBox.Text = Mid(Recherche_TextBox.Text, 1, 13)
        End If

        Dim produits = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits(Recherche_TextBox.Text, Recherche_TextBox.Text, Replace(Recherche_TextBox.Text, " ", "%"), Recherche_TextBox.Text)

        Dim aliastable = BDD.Produits_AliasTableAdapter.GetDataBy_Alias(Recherche_TextBox.Text)
        For r = 0 To aliastable.Rows.Count - 1
            produits.Merge(BDD.ProduitsTableAdapter.GetDataProduits(aliastable.Item(r).CIP, aliastable.Item(r).CAB, aliastable.Item(r).Désignation, aliastable.Item(r).EAN13))
        Next

        Recherche_DataGridView.Rows.Clear()
        For r = 0 To produits.Count - 1
            Recherche_DataGridView.Rows.Add()
        Next
        For r = 0 To produits.Count - 1
            Recherche_DataGridView.Item(Recherche_CIP.Index, r).Value = produits(r).CIP
            If produits(r).Code_PharmaML <> "" Then
                Recherche_DataGridView.Item(Recherche_EAN13.Index, r).Value = produits(r).Code_PharmaML
            ElseIf produits(r).EAN13 <> "" Then
                Recherche_DataGridView.Item(Recherche_EAN13.Index, r).Value = produits(r).EAN13
            ElseIf produits(r).CAB <> "" Then
                Recherche_DataGridView.Item(Recherche_EAN13.Index, r).Value = produits(r).CAB
            End If
            BDD.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(Recherche_DataGridView.Item(Recherche_EAN13.Index, r).Value)
            Recherche_DataGridView.Item(Recherche_Désignation.Index, r).Value = produits(r).Designation
        Next
    End Sub



    Public Sub Recherche_DataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles Recherche_DataGridView.CellClick
        For r = 0 To Produits_DataGridView.Rows.Count - 1
            If Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value = Produits_DataGridView.Item(EAN13.Index, r).Value And _
                Recherche_DataGridView.Item(Recherche_CIP.Index, Recherche_DataGridView.CurrentRow.Index).Value = Produits_DataGridView.Item(CIP.Index, r).Value Then
                Exit Sub
            End If
        Next
        Dim produit As officine.PharmaDataSet.ProduitsRow
        If Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value <> "" Then
            If COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _
           Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value).Rows.Count > 0 Then
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _
      Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value).Item(0) 'EAN13
            Else
                produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _
      Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@").Item(0) 'CAB
            End If

            COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(Recherche_DataGridView.Item(Recherche_EAN13.Index, Recherche_DataGridView.CurrentRow.Index).Value)
        ElseIf Recherche_DataGridView.Item(Recherche_CIP.Index, Recherche_DataGridView.CurrentRow.Index).Value <> "" Then
            produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits(Recherche_DataGridView.Item(Recherche_CIP.Index, Recherche_DataGridView.CurrentRow.Index).Value, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _
                                                                         "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@").Item(0)
            COMPTOIR_MAIN.ProduitsTableAdapter.Update_encommande_calcul_sur_lignes_commandes(Recherche_DataGridView.Item(Recherche_CIP.Index, Recherche_DataGridView.CurrentRow.Index).Value)
        Else
            produit = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataProduits("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _
                                                                         Recherche_DataGridView.Item(Recherche_Désignation.Index, Recherche_DataGridView.CurrentRow.Index).Value, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@").Item(0)
        End If
        Dim code As String = produit.Code_PharmaML
        If code = "" Then code = produit.EAN13
        If code = "" Then code = produit.CIP
        If code = "" Then
            MyMsg_Box.Presentation("officine ?", "Pas de code pour " & produit.Designation & vbCrLf & vbCrLf & "Les commandes sans code sont rejetées par la pluspart des fournisseurs" & _
                                   "Voulez-vous tout de ajouter ce produit ?", True, "Oui", True, "Non", False, "")
            If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.No Then
                Exit Sub
            End If
        End If
        Produits_DataGridView.Rows.Add()

        Produits_DataGridView.Item(CIP.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.CIP
        Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.EAN13
        Produits_DataGridView.Item(Désignation.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.Designation
        Produits_DataGridView.Item(Quantité.Index, Produits_DataGridView.Rows.Count - 1).Value = 0 'Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", produit.CIP, produit.EAN13, produit.Designation)
        Produits_DataGridView.Item(Partielle.Index, Produits_DataGridView.Rows.Count - 1).Value = "true"
        Produits_DataGridView.Item(Reliquat.Index, Produits_DataGridView.Rows.Count - 1).Value = "false"
        Produits_DataGridView.Item(Equivalent.Index, Produits_DataGridView.Rows.Count - 1).Value = "false"
        Produits_DataGridView.Item(Délivrés.Index, Produits_DataGridView.Rows.Count - 1).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", produit.CIP, produit.EAN13, produit.Designation)


        If produit.ne_plus_proposé_comande = True Then
            COMPTOIR_MAIN.ProduitsTableAdapter.Update_ne_plus_proposé_comande_by_Code_PharmaML(False, code)
        End If
        'Dim prod_row = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(code).Item(0)
        Produits_DataGridView.Item(Stock.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.Stock
        Produits_DataGridView.Item(en_commande.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.en_commande
        Produits_DataGridView.Item(Liste.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.Liste
        If Produits_DataGridView.Item(Liste.Index, Produits_DataGridView.Rows.Count - 1).Value = "Stupéfiant" Then
            Produits_DataGridView.Item(Stock_prévisionnel.Index, Produits_DataGridView.Rows.Count - 1).ReadOnly = True
        End If

        Produits_DataGridView.Item(Stock_prévisionnel.Index, Produits_DataGridView.Rows.Count - 1).Value = _
            Produits_DataGridView.Item(Stock.Index, Produits_DataGridView.Rows.Count - 1).Value + Produits_DataGridView.Item(en_commande.Index, Produits_DataGridView.Rows.Count - 1).Value

        Produits_DataGridView.Item(Code_PharmaML.Index, Produits_DataGridView.Rows.Count - 1).Value = produit.Code_PharmaML
    End Sub



    Private Sub Produits_DataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles Produits_DataGridView.CellClick
        If e.RowIndex < 0 Then Exit Sub

        Select Case Produits_DataGridView.CurrentCell.ColumnIndex
            Case disp.Index
                If Fournisseurs_ComboBox.SelectedItem Is Nothing Then
                    MyMsg_Box.Presentation("Officine !", "Fournisseur?", False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                    Exit Sub
                End If


                Info_Produit(Produits_DataGridView.Item(CIP.Index, Produits_DataGridView.CurrentCell.RowIndex).Value, _
                             Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentCell.RowIndex).Value, _
                               Produits_DataGridView.Item(Désignation.Index, Produits_DataGridView.CurrentCell.RowIndex).Value, _
                             Fournisseurs_ComboBox.SelectedItem.ToString, Produits_DataGridView.Item(Code_PharmaML.Index, Produits_DataGridView.CurrentCell.RowIndex).Value, 1)

            Case CIP.Index, EAN13.Index, Désignation.Index
                Dim code As String = ""
                If Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentCell.RowIndex).Value <> "" Then
                    code = Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentCell.RowIndex).Value
                ElseIf Produits_DataGridView.Item(CIP.Index, Produits_DataGridView.CurrentCell.RowIndex).Value <> "" Then
                    code = Produits_DataGridView.Item(CIP.Index, Produits_DataGridView.CurrentCell.RowIndex).Value
                Else
                    code = Produits_DataGridView.Item(Désignation.Index, Produits_DataGridView.CurrentCell.RowIndex).Value
                End If
                Produits.Visible = True
                Produits.Recherche_TextBox.Text = code
                Produits.Recherche_TextBox_Validated(Nothing, Nothing)
                Produits.BringToFront()
                Produits.Select()

        End Select

    End Sub

#Region "Traitement des retours"


    Public Sub Traitement_Retour_Pharma_ML(ByVal Afficher_message As Boolean)
        Bandeau_info_bas_show("Traitement des réponses fournisseur")
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                         "Début traitement des retours" & Chr(10), True)
        Dim liste_manquants As New List(Of Manquant) 'Gestion des manquants
        'Gestion des manquants
        Dim File = Dir(Application.StartupPath & "\Pharma_ml\retour_pharma_ml_Transmettre_Commande_*.xml")


        While File <> ""
            If Affiche_erreur(Application.StartupPath & "\Pharma_ml\" & File) = False Then


            Else
                Dim doc As New XmlDocument
                doc.Load(Application.StartupPath & "\Pharma_ml\" & File)
                Dim root As XmlNode = doc.DocumentElement
                Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
                nsmgr.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:enveloppe")
                Dim ENTETEnode As XmlNode = root.SelectSingleNode("descendant::bk:ENTETE", nsmgr)
                Dim REF_MESSAGE_répartiteur = ENTETEnode.SelectSingleNode("descendant::bk:REF_MESSAGE", nsmgr).InnerText
                Dim EN_REPONSE_A As String = ""
                If Not ENTETEnode.SelectSingleNode("descendant::bk:EN_REPONSE_A", nsmgr) Is Nothing Then
                    EN_REPONSE_A = ENTETEnode.SelectSingleNode("descendant::bk:EN_REPONSE_A", nsmgr).InnerText
                End If


                Dim nsmgr2 As New XmlNamespaceManager(doc.NameTable)
                nsmgr2.AddNamespace("bk", "urn:x-csrp:fr.csrp.protocole:message")
                Dim CORPSnode As XmlNode = root.SelectSingleNode("descendant::bk:CORPS", nsmgr)
                Dim MESSAGE_REPARTITEURnode As XmlNode = CORPSnode.SelectSingleNode("descendant::bk:MESSAGE_REPARTITEUR", nsmgr2)
                Dim CORPS2node As XmlNode = MESSAGE_REPARTITEURnode.SelectSingleNode("descendant::bk:CORPS", nsmgr2)
                If Not CORPS2node.SelectSingleNode("descendant::bk:REP_COMMANDE", nsmgr2) Is Nothing Then


                    Dim REP_COMMANDEnode As XmlNode = CORPS2node.SelectSingleNode("descendant::bk:REP_COMMANDE", nsmgr2)

                    Dim Ref_Cde_Client = REP_COMMANDEnode.Attributes("Ref_Cde_Client").Value
                    Bandeau_info_bas_show("Traitement retour commande " & Ref_Cde_Client)
                    If Me.CommandesTableAdapter.GetDataBy_ref(Val(Ref_Cde_Client)).Rows.Count = 0 Then
                        Try
                            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                    "RETOUR SANS COMMANDE ASSOCIE: " & Ref_Cde_Client & Chr(10), True)
                            My.Computer.FileSystem.MoveFile(Application.StartupPath & "\Pharma_ml\" & File, Application.StartupPath & "\Pharma_ml\erreurs\" & File, True)
                            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                 "RETOUR SANS COMMANDE ASSOCIE: \Pharma_ml\erreurs\" & File & Chr(10), True)
                        Catch ex As Exception
                        End Try
                        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
                        If Afficher_message = True Then
                            MyMsg_Box.Presentation("Officine !", "Présence réponse commande non liée à une commande exisante (ref " & Ref_Cde_Client & vbCrLf & ")." & vbCrLf & "Contactez support.", False, "", False, "", True, "OK")
                            MyMsg_Box.ShowDialog()
                        End If


                    End If
                    Dim commande = Me.CommandesTableAdapter.GetDataBy_ref(Val(Ref_Cde_Client)).Item(0)
                    Dim fournisseur = Me.FournisseurTableAdapter.GetDataBy_Nom(commande.Fournisseur).Item(0)


                    My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                    "traitement retour commande " & Ref_Cde_Client & Chr(10), True)
                    Dim NORMALEnode As XmlNode = REP_COMMANDEnode.SelectSingleNode("descendant::bk:NORMALE", nsmgr2)
                    Dim lignes As XmlNodeList = NORMALEnode.ChildNodes
                    My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Now.ToString & Chr(10) & _
                                "COMMANDE " & fournisseur.Nom & " " & commande.ref.ToString & " transmise et traitée" & Chr(10), True)

                    Dim produit_manquant As Boolean = False
                    Dim Num_Ligne_Commande As Decimal = 0
                    For Each LIGNE_N As XmlNode In lignes
                        Try


                            Dim INDISPONIBILITE_N As String = ""
                            If Not LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2) Is Nothing Then
                                INDISPONIBILITE_N = LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2).Attributes("Additif").Value
                            End If


                            'traitement livraison différée
                            If ({"LU", "MA", "ME", "JE", "VE", "SA", "DI"}.Contains(Mid(INDISPONIBILITE_N, 1, 2)) And {"AM", "PM"}.Contains(Mid(INDISPONIBILITE_N, 3, 2))) _
                                Or INDISPONIBILITE_N = "Remplace par" Or INDISPONIBILITE_N = "RP Produit Remplace" Then
                                If Not LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2) Is Nothing Then
                                    If Not LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2).SelectSingleNode("descendant::bk:INFOS_DISPO", nsmgr2) Is Nothing Then
                                        If Not LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2).SelectSingleNode("descendant::bk:INFOS_DISPO", nsmgr2).Attributes("Quantite") Is Nothing Then
                                            LIGNE_N.Attributes("Quantite_livree").Value = LIGNE_N.SelectSingleNode("descendant::bk:INDISPONIBILITE_N", nsmgr2).SelectSingleNode("descendant::bk:INFOS_DISPO", nsmgr2).Attributes("Quantite").Value
                                        End If
                                    End If
                                End If
                            End If
                            'fin traitement livraison différée


                            Dim designation As String
                            If Not LIGNE_N.Attributes("Designation") Is Nothing Then
                                designation = LIGNE_N.Attributes("Designation").Value
                            Else
                                designation = Me.Commandes_LignesTableAdapter.GetDataBy_RefCommande_NumLigne(Val(Ref_Cde_Client), Num_Ligne_Commande).Item(0).Designation
                            End If
                            Dim Code_Produit As String
                            If Not LIGNE_N.Attributes("Code_Produit") Is Nothing Then
                                Code_Produit = LIGNE_N.Attributes("Code_Produit").Value
                            Else
                                Code_Produit = Me.Commandes_LignesTableAdapter.GetDataBy_RefCommande_NumLigne(Val(Ref_Cde_Client), Num_Ligne_Commande).Item(0).Code_Produit
                            End If
                            Dim Quantite_livree As Integer
                            If Not LIGNE_N.Attributes("Quantite_livree") Is Nothing Then
                                Quantite_livree = Val(LIGNE_N.Attributes("Quantite_livree").Value)
                            Else
                                Quantite_livree = 0
                            End If

                            If Not LIGNE_N.Attributes("Num_Ligne_Commande") Is Nothing Then
                                Num_Ligne_Commande = Val(LIGNE_N.Attributes("Num_Ligne_Commande").Value)
                            ElseIf Not LIGNE_N.Attributes("Num_Ligne") Is Nothing Then
                                Num_Ligne_Commande = Val(LIGNE_N.Attributes("Num_Ligne").Value)
                            End If

                            If LIGNE_N.Attributes("Designation") Is Nothing Or LIGNE_N.Attributes("Code_Produit") Is Nothing _
                                Or LIGNE_N.Attributes("Quantite_livree") Is Nothing Then
                                Me.Commandes_LignesTableAdapter.Update_livré(designation, Code_Produit, Quantite_livree, _
                                                                            INDISPONIBILITE_N, Val(Ref_Cde_Client), Num_Ligne_Commande)
                            Else
                                Me.Commandes_LignesTableAdapter.Update_livré(designation, Code_Produit, Quantite_livree, _
                                                                             INDISPONIBILITE_N, Val(Ref_Cde_Client), Num_Ligne_Commande)



                                'création de la liste des manquants et choix éventuel d'un répartiteur de secours
                                If Val(LIGNE_N.Attributes("Quantite_livree").Value) < Val(Me.Commandes_LignesTableAdapter.GetDataBy_RefCommande_NumLigne(Val(Ref_Cde_Client), Num_Ligne_Commande).Item(0).Quantité) _
                                    And Me.Commandes_LignesTableAdapter.GetDataBy_RefCommande_NumLigne(Val(Ref_Cde_Client), Num_Ligne_Commande).Item(0).Reliquat = False Then
                                    produit_manquant = True
                                    'Dim prod As officine.PharmaDataSet.ProduitsRow
                                    Dim manquant As New Manquant
                                    manquant.quantité_manquante = Val(Me.Commandes_LignesTableAdapter.GetDataBy_RefCommande_NumLigne(Val(Ref_Cde_Client), Num_Ligne_Commande).Item(0).Quantité) _
                                 - Val(LIGNE_N.Attributes("Quantite_livree").Value)
                                    manquant.Type_Codification = LIGNE_N.Attributes("Type_Codification").Value
                                    If manquant.Type_Codification = "CLAIR" Then
                                        manquant.code_prod = ""
                                        manquant.désignation = LIGNE_N.Attributes("Designation").Value
                                        'prod = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByInfo("@@@@@@@@@@@@@@@@@@@@", "@@@@@@@@@@@@@@@@@@@@", manquant.désignation).Item(0)
                                        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(-(manquant.quantité_manquante), manquant.désignation)
                                    Else
                                        If Not LIGNE_N.Attributes("Code_Produit") Is Nothing Then
                                            manquant.code_prod = LIGNE_N.Attributes("Code_Produit").Value
                                        Else
                                            manquant.code_prod = ""
                                        End If
                                        If Not LIGNE_N.Attributes("Designation") Is Nothing Then
                                            manquant.désignation = LIGNE_N.Attributes("Designation").Value
                                        Else
                                            manquant.désignation = ""
                                        End If
                                        'prod = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(manquant.code_prod).Item(0)
                                        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(-(manquant.quantité_manquante), manquant.code_prod)
                                        If manquant.désignation = "" Then
                                            Try
                                                manquant.désignation = COMPTOIR_MAIN.ProduitsTableAdapter.GetDataByCIP_or_EAN13_or_CAB(manquant.code_prod).Item(0).Designation
                                            Catch ex As Exception

                                            End Try
                                        End If
                                    End If


                                    'recherche fournisseur secondaire
                                    manquant.fournisseur_secondaire = ""
                                    If fournisseur.Repartiteur = True And fournisseur.Basculer_Manquants_Vers <> "" Then 'And prod.Répartiteur_principal = "" And prod.Répartiteur_secondaire = "" Then
                                        manquant.fournisseur_secondaire = fournisseur.Basculer_Manquants_Vers

                                        'ElseIf prod.Répartiteur_principal <> "" And prod.Répartiteur_secondaire = "" Then
                                        '    manquant.fournisseur_secondaire = ""
                                        'ElseIf prod.Répartiteur_principal = commande.Fournisseur And prod.Répartiteur_secondaire <> "" Then
                                        '    manquant.fournisseur_secondaire = prod.Répartiteur_secondaire
                                        'Else
                                        '    manquant.fournisseur_secondaire = ""
                                    End If
                                    'FIN recherche fournisseur secondaire

                                    ''mise à jour en_commande pour produit non basculé vers autre fournisseur
                                    'If manquant.fournisseur_secondaire = "" Then

                                    '    If manquant.Type_Codification = "CLAIR" Then
                                    '        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(-Val(manquant.quantité_manquante), manquant.désignation)
                                    '    Else
                                    '        COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(-Val(manquant.quantité_manquante), manquant.code_prod)
                                    '    End If
                                    'End If
                                    ''FIN mise à jour en_commande pour produit non basculé vers autre fournisseur
                                    manquant.manquant_chez = commande.Fournisseur
                                    manquant.manquant_Ref_Cde_Client_old = Ref_Cde_Client
                                    If manquant.fournisseur_secondaire <> "" Then
                                        liste_manquants.Add(manquant)
                                        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", "MANQUANT: " & manquant.code_prod & " " & manquant.désignation & "" & _
                                                              "manque " & manquant.quantité_manquante.ToString & Chr(10), True)
                                    End If


                                End If
                                'FIN création de la liste des manquants et choix éventuel d'un répartiteur de secours

                                Dim Prix_achat As Decimal = 0
                                Dim PRIX_N_list = LIGNE_N.SelectNodes("descendant::bk:PRIX_N", nsmgr2)
                                If Not PRIX_N_list Is Nothing Then
                                    For Each PRIX_N As XmlNode In PRIX_N_list
                                        If PRIX_N.Attributes("Nature").Value = "PHAHT" Then
                                            Prix_achat = CDec(Replace(PRIX_N.Attributes("Valeur").Value, ".", ","))
                                        End If
                                    Next

                                End If

                                If Val(LIGNE_N.Attributes("Quantite_livree").Value) > 0 Then
                                    Try
                                        Me.Produits_AchatsTableAdapter.Delete_by_Ref_Commande_Ligne_Commande(CDec(Ref_Cde_Client), Num_Ligne_Commande)
                                    Catch ex As Exception
                                    End Try
                                    Me.Produits_AchatsTableAdapter.Insert(LIGNE_N.Attributes("Code_Produit").Value, LIGNE_N.Attributes("Designation").Value, Prix_achat, 0, Prix_achat, _
                                                                 Val(LIGNE_N.Attributes("Quantite_livree").Value), Now, "", Ref_Cde_Client, Num_Ligne_Commande, 0)
                                End If

                            End If
                        Catch ex As Exception
                            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & "erreur commande " & Ref_Cde_Client & _
                                                                " ligne " & Num_Ligne_Commande.ToString & Chr(10) & Chr(10), True)
                        End Try
                    Next
                    If produit_manquant = True And Afficher_message = True Then
                        Dim manquants_string As String = ""
                        For Each Manquant In liste_manquants
                            manquants_string = manquants_string & Manquant.désignation & vbCrLf
                        Next
                        MyMsg_Box.Presentation("Officine !", "PRODUIT(S) MANQUANT(S) COMMANDE " & Ref_Cde_Client & vbCrLf & vbCrLf & manquants_string, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If
                    'Dim my_treeview_form As New treeview_form
                    'my_treeview_form.Text = "commande " ''& commande.ref.ToString & "  " & commande.Fournisseur
                    'my_treeview_form.xmlfile = Application.StartupPath & "\Pharma_ml\" & File
                    'my_treeview_form.Visible = True
                    If commande.Statut = "TRANSMISE" Then
                        Me.CommandesTableAdapter.Update_by_ref(commande.Fournisseur, commande.Ref_Fournisseur, commande._DATE, commande.Date_livraison, "EN COURS FOURNISSEUR", commande.REF_MESSAGE_Officine, REF_MESSAGE_répartiteur, Val(Ref_Cde_Client))
                    End If
                    My.Computer.FileSystem.MoveFile(Application.StartupPath & "\Pharma_ml\" & File, Application.StartupPath & "\Pharma_ml\Traités\" & File, True)

                ElseIf Not CORPS2node.SelectSingleNode("descendant::bk:ERREUR", nsmgr2) Is Nothing Then
                    Dim message As String = ""
                    Dim pharmacie_request = Me.CommandesTableAdapter.GetDataBy_REF_MESSAGE_Officine(EN_REPONSE_A)
                    If pharmacie_request.Rows.Count <> 0 Then
                        message = pharmacie_request.Item(0).Fournisseur & vbCrLf & "commande ref " & pharmacie_request.Item(0).ref.ToString & vbCrLf
                    End If

                    For Each attr As XmlAttribute In CORPS2node.SelectSingleNode("descendant::bk:ERREUR", nsmgr2).Attributes
                        message = message & attr.Name & ": " & attr.Value.ToString & vbCrLf
                    Next
                    If message <> "" Then
                        MyMsg_Box.Presentation("Officine !", "Réponse fournisseur" & vbCrLf & message, False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If
                    My.Computer.FileSystem.MoveFile(Application.StartupPath & "\Pharma_ml\" & File, Application.StartupPath & "\Pharma_ml\erreurs\" & File, True)
                End If

            End If
            File = Dir()
        End While

        Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)

        commande_manquants(liste_manquants, Afficher_message)
    End Sub

#End Region



    Private Sub commande_manquants(ByVal liste_manquants As List(Of Manquant), ByVal Afficher_message As Boolean)
        If liste_manquants.Count = 0 Then
            Exit Sub
        End If
        For Each Prod In liste_manquants
            Try
                If Trim(Prod.désignation) = "" And Prod.code_prod <> "" Then
                    Dim data = BDD.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(Prod.code_prod, Prod.code_prod, "")
                    If data.Rows.Count > 0 Then
                        Prod.désignation = data.Item(0).Designation
                    End If
                End If
            Catch ex As Exception
            End Try
        Next
        Dim A_TRANSMETTRE = Me.CommandesTableAdapter.GetData_by_Statut("A TRANSMETTRE")
        Dim liste_fournisseurs As New List(Of String)
        For Each produit In liste_manquants
            If Not liste_fournisseurs.Contains(produit.fournisseur_secondaire) And (produit.fournisseur_secondaire <> "") Then
                liste_fournisseurs.Add(produit.fournisseur_secondaire)
            End If
        Next
        Dim message As String = ""
        For Each fournisseur In liste_fournisseurs
            Bandeau_info_bas_show("Transfert des manquants vers " & fournisseur)
            Dim ref_commande As Decimal = 0

            For r = 0 To A_TRANSMETTRE.Rows.Count - 1
                If A_TRANSMETTRE(r).Fournisseur = fournisseur Then
                    ref_commande = A_TRANSMETTRE(r).ref
                    Exit For
                End If
            Next
            If ref_commande = 0 Then
                ref_commande = Me.CommandesTableAdapter.Select_Max_ref + 1
                Me.CommandesTableAdapter.Insert(ref_commande, fournisseur, "", Format(Now, "yyyy-MM-dd"), "A TRANSMETTRE", "", "", "")
            End If


            For Each produit In liste_manquants
                Dim inserted As Boolean = False
                If produit.fournisseur_secondaire = fournisseur Then
                    Dim lignes_commande = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande)
                    Dim num_ligne As Integer
                    If produit.Type_Codification = "CLAIR" Then
                        For p = 0 To lignes_commande.Rows.Count - 1
                            If produit.désignation = lignes_commande(p).Designation Then
                                Me.Commandes_LignesTableAdapter.Update_by_ref_commande_num_ligne(lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne, lignes_commande.Item(p).Type_Codification, _
                                                                                         lignes_commande.Item(p).Code_Produit, lignes_commande.Item(p).Designation, lignes_commande.Item(p).Quantité + produit.quantité_manquante, _
                                                                                         lignes_commande.Item(p).Partielle, lignes_commande.Item(p).Reliquat, lignes_commande.Item(p).Equivalent, _
                                                                                         lignes_commande.Item(p).livré_Designation, lignes_commande.Item(p).livré_Code_Produit, lignes_commande.Item(p).livré_Quantité, _
                                                                                         lignes_commande.Item(p).livré_INDISPONIBILITE_N, lignes_commande.Item(p).reçu, lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne)
                                inserted = True
                                num_ligne = lignes_commande.Item(p).num_ligne
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(lignes_commande.Item(p).Quantité + produit.quantité_manquante, produit.désignation)
                                Exit For
                            End If
                        Next
                    Else
                        For p = 0 To lignes_commande.Rows.Count - 1
                            If produit.code_prod = lignes_commande(p).Code_Produit Then
                                Me.Commandes_LignesTableAdapter.Update_by_ref_commande_num_ligne(lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne, lignes_commande.Item(p).Type_Codification, _
                                                                                       lignes_commande.Item(p).Code_Produit, lignes_commande.Item(p).Designation, lignes_commande.Item(p).Quantité + produit.quantité_manquante, _
                                                                                       lignes_commande.Item(p).Partielle, lignes_commande.Item(p).Reliquat, lignes_commande.Item(p).Equivalent, _
                                                                                       lignes_commande.Item(p).livré_Designation, lignes_commande.Item(p).livré_Code_Produit, lignes_commande.Item(p).livré_Quantité, _
                                                                                       lignes_commande.Item(p).livré_INDISPONIBILITE_N, lignes_commande.Item(p).reçu, lignes_commande.Item(p).ref_commande, lignes_commande.Item(p).num_ligne)
                                inserted = True
                                num_ligne = lignes_commande.Item(p).num_ligne
                                COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(lignes_commande.Item(p).Quantité + produit.quantité_manquante, produit.code_prod)
                                Exit For
                            End If
                        Next
                    End If
                    If inserted = False Then
                        num_ligne = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande).Rows.Count + 1
                        If produit.Type_Codification = "CLAIR" Then
                            Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CLAIR", "", produit.désignation, produit.quantité_manquante, "true", "false", "false", "", "", 0, _
                                                                   "manquant " & produit.manquant_chez, 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(produit.quantité_manquante, produit.désignation)
                        Else
                            Me.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, produit.Type_Codification, produit.code_prod, produit.désignation, produit.quantité_manquante, "true", _
                                                                   "false", "false", "", "", 0, "manquant " & produit.manquant_chez, 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(produit.quantité_manquante, produit.code_prod)
                        End If
                        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", "MANQUANT: " & produit.manquant_chez & " " & produit.code_prod & " " & produit.désignation & "" & _
                                                  "manque " & produit.quantité_manquante.ToString & ", transféré vers " & fournisseur & ", commande " & ref_commande.ToString & Chr(10), True)
                        message = produit.désignation & " --> " & fournisseur & vbCrLf
                    End If
                    BDD.ChroniqueTableAdapter.Update_Commande_Ref_ManquantsTransférés(ref_commande, num_ligne, Val(produit.manquant_Ref_Cde_Client_old).ToString, produit.code_prod)
                End If
            Next
            'Me.Transmettre_Commande(ref_commande, True)
            If message <> "" And Afficher_message = True Then
                MyMsg_Box.Presentation("Officine !", message, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()
            End If
            Bandeau_info_bas_hide() 'Bandeau_info_bas_show_thread)
        Next
    End Sub



    Private Sub Action_Button_Click(sender As Object, e As EventArgs) Handles Action_Button.Click

        Select Case Action_Button.Text
            Case "Transmettre"
                Transmettre_Commande(Val(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentCell.RowIndex).Value), True)
            Case "Demande Info"
                Demande_Info_Commande(Val(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentCell.RowIndex).Value))
            Case "Receptionner"

                Dim reception As New Commande_réception
                reception.reception_hors_commande = False
                reception.reception_groupée = False
                reception.Ref_Commande = CInt(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value)
                reception.ShowDialog()
            Case "Reprendre"
                Dim commande = Me.CommandesTableAdapter.GetDataBy_ref(CDec(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value)).Item(0)

                Me.CommandesTableAdapter.Update_by_ref(commande.Fournisseur, commande.Ref_Fournisseur, commande._DATE, commande.Date_livraison, "A TRANSMETTRE", commande.REF_MESSAGE_Officine, commande.REF_MESSAGE_Fournisseur, commande.ref)
                affiche_commande()
        End Select
    End Sub
    Private Sub Reception_Commande(ByVal ref_commande As Single)
        For r = 0 To Détail_Commande_DataGridView.Rows.Count - 1
            If Détail_Commande_DataGridView.Item(Détail_Commande_livré_Code_Produit.Index, r).Value <> "" Then
                COMPTOIR_MAIN.ProduitsTableAdapter.Reception_Commande(Val(Détail_Commande_DataGridView.Item(Détail_Commande_livré_Quantité.Index, r).Value), _
                                                                      Val(Détail_Commande_DataGridView.Item(Détail_Commande_Quantité.Index, r).Value), _
                                                                      Détail_Commande_DataGridView.Item(Détail_Commande_livré_Code_Produit.Index, r).Value)
            End If
        Next
        Dim commande = Me.CommandesTableAdapter.GetDataBy_ref(ref_commande).Item(0)
        Me.CommandesTableAdapter.Update_by_ref(commande.Fournisseur, commande.Ref_Fournisseur, commande._DATE, commande.Date_livraison, "RECEPTIONNEE", commande.REF_MESSAGE_Officine, commande.REF_MESSAGE_Fournisseur, commande.ref)
    End Sub

#Region "Control valeurs"


    Public Sub Produits_DataGridView_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles Produits_DataGridView.CellValidated

        Select Case e.ColumnIndex
            Case Quantité.Index
                If Not IsNumeric(Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value) Then
                    Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value = 0
                ElseIf Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value < 1 Then
                    Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value = 0
                ElseIf Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value > 100 Then
                    MyMsg_Box.Presentation("Officine !", "Vous avez saisie une grande quantité (" & Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value.ToString & ") pour " & Produits_DataGridView.Item(Désignation.Index, e.RowIndex).Value.ToString, False, "", False, "", True, "OK")
                    MyMsg_Box.ShowDialog()
                End If

                If Produits_DataGridView.Item(Liste.Index, e.RowIndex).Value <> "Stupéfiant" Then
                    If Val(Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value) <> Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) _
                        + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value) Then 'pour ne pas boucler
                        Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value = Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) _
                            + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value)
                    End If
                Else
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value = (Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) * Val(Produits_DataGridView.Item(Dose.Index, e.RowIndex).Value)) _
                                                + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) + _
                                                (Val(Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value) * Val(Produits_DataGridView.Item(Dose.Index, e.RowIndex).Value))
                End If
            Case Stock_prévisionnel.Index
                If Produits_DataGridView.Item(Liste.Index, e.RowIndex).Value <> "Stupéfiant" Then
                    If Not IsNumeric(Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value) Then
                        Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value = Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value)
                    ElseIf Val(Produits_DataGridView.Item(e.ColumnIndex, e.RowIndex).Value) < Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) Then
                        Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value = 0
                    End If
                    If Val(Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value) <> Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) _
                      + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value) Then 'pour ne pas boucler
                        Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value = Val(Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value) _
                            - Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value) - Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value)
                        If Val(Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value) < 0 Then
                            Produits_DataGridView.Item(Quantité.Index, e.RowIndex).Value = 0
                            Produits_DataGridView.Item(Stock_prévisionnel.Index, e.RowIndex).Value = Val(Produits_DataGridView.Item(en_commande.Index, e.RowIndex).Value) + Val(Produits_DataGridView.Item(Stock.Index, e.RowIndex).Value)
                        End If
                    End If
                End If

        End Select
    End Sub


#End Region




    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles Afficher_auto_réassort_CheckBox.CheckedChanged
        affiche_info()
    End Sub


    Private Sub Affiche_Non_CpmmandésRadioButton1_CheckedChanged(sender As RadioButton, e As EventArgs) Handles Affiche_Non_CpmmandésRadioButton1.CheckedChanged, Affiche_Tous_RadioButton2.CheckedChanged, Affiche_CommandésRadioButton3.CheckedChanged
        If sender.Checked = True Then affiche_info()
    End Sub

    Private Sub Jamais_Button_Click(sender As Object, e As EventArgs) Handles Jamais_Button.Click
        MyMsg_Box.Presentation("Officine ?", Produits_DataGridView.Item(Désignation.Index, Produits_DataGridView.CurrentCell.RowIndex).Value & vbCrLf & "LE PRODUIT NE SERA PLUS AUTOMATIQUEMENT PROPOSÉ.", True, "OUI", True, "NON", False, "")
        If MyMsg_Box.ShowDialog = MsgBoxResult.Yes Then
            COMPTOIR_MAIN.ProduitsTableAdapter.Update_ne_plus_proposé_comande_by_Code_PharmaML(True, _
                                                                Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentCell.RowIndex).Value)
        End If
    End Sub

    Private Sub Produits_DataGridView_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles Produits_DataGridView.CellValueChanged
        Select Case e.ColumnIndex
            Case Ne_plus_propo_jusq_vente.Index
                COMPTOIR_MAIN.ProduitsTableAdapter.Update_ne_plus_proposé_jusquà_vente_by_CodePharmaML( _
                    Not (Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, Produits_DataGridView.CurrentCell.RowIndex).Value), _
                                                            Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentCell.RowIndex).Value)
        End Select
    End Sub

    Private Sub Fournisseurs_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Fournisseurs_ComboBox.SelectedIndexChanged
        Consolider_Commande_Button.Text = "Commander les produits à " & Fournisseurs_ComboBox.Text
        Transfert_commande_Button_Change_text()
    End Sub

    Private Sub Fourni_exclusif_CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles Fourni_exclusif_CheckBox.CheckedChanged
        If Fourni_exclusif_CheckBox.Checked = True And (Fournisseurs_ComboBox.Text = "Fournisseur" Or Fournisseurs_ComboBox.Text = "") Then
            MyMsg_Box.Presentation("Choix d'un fournisseur", "Vous devez d'abord selectionner un fournisseur.", False, "", False, "", True, "Ok")
            MyMsg_Box.ShowDialog()
            Fourni_exclusif_CheckBox.Checked = False
            Exit Sub
        End If
        affiche_info()
    End Sub

    Private Sub Produits_DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles Produits_DataGridView.SelectionChanged
        Try
            If Produits_DataGridView.RowCount > 0 And Produits_DataGridView.CurrentRow.Index >= 0 Then
                affiche_graphique_vente(Produits_DataGridView.Item(CIP.Index, Produits_DataGridView.CurrentRow.Index).Value, _
                                        Produits_DataGridView.Item(EAN13.Index, Produits_DataGridView.CurrentRow.Index).Value, _
                                        Produits_DataGridView.Item(Désignation.Index, Produits_DataGridView.CurrentRow.Index).Value, 6)
                Chart1.ChartAreas(0).AxisX.Interval = 1
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub affiche_graphique_vente(ByVal CIP As String, EAN13 As String, Désignation As String, Nombre_Mois As Integer)
        Chart1.Visible = True
        Dim TabDate() As String
        ReDim TabDate(Nombre_Mois)
        Dim année As String = Now.Year.ToString
        Dim mois As String = Now.Month.ToString
        If mois.Length < 2 Then
            mois = "0" & mois
        End If
        TabDate(0) = année & mois
        For nbrM = 1 To Nombre_Mois
            If mois = "01" Then
                mois = "12"
                année = (Val(année) - 1).ToString
            Else
                mois = (Val(mois) - 1).ToString
                If mois.Length < 2 Then
                    mois = "0" & mois
                End If
            End If
            TabDate(nbrM) = année & mois
        Next

        If Chart1.Series.IndexOf("maSérie") = -1 Then 'series does not exist
            Chart1.Series.Add("maSérie")
        Else
            Chart1.Series.Remove(Chart1.Series("maSérie"))
            Chart1.Series.Add("maSérie")
        End If
        Chart1.Series("maSérie").Color = Color.YellowGreen
        'Chart1.Series("maSérie").LabelBackColor = Color.Red
        Chart1.Series("maSérie").LabelForeColor = Color.Black
        Chart1.Series("maSérie").ChartType = DataVisualization.Charting.SeriesChartType.Bar
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).AxisY.MajorGrid.Enabled = False
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).AxisX.MajorGrid.Enabled = False
        'Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).Area3DStyle.Enable3D = True
        'Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).Area3DStyle.LightStyle = DataVisualization.Charting.LightStyle.Realistic
        'Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).Area3DStyle.WallWidth = 0
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).AxisY.LineColor = Color.Black
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).AxisX.LineColor = Color.Black
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).BackColor = Color.Transparent
        Dim total As Integer = 0
        For nbrM = 0 To Nombre_Mois
            Chart1.Series("maSérie").Points.Add()
        Next
        For nbrM = 0 To Nombre_Mois
            Dim nbreparmoi As Integer = COMPTOIR_MAIN.ActesTableAdapter.Select_Sum_YearMonth(CIP, EAN13, Désignation, Mid(TabDate(nbrM), 1, 4), Mid(TabDate(nbrM), 5, 2))
            total = total + nbreparmoi
            Chart1.Series("maSérie").Points.Item(Nombre_Mois - nbrM).AxisLabel = Mid(TabDate(nbrM), 5, 2) + "/" + Mid(TabDate(nbrM), 1, 4)
            Chart1.Series("maSérie").Points.Item(Nombre_Mois - nbrM).IsValueShownAsLabel = True
            Chart1.Series("maSérie").Points.Item(Nombre_Mois - nbrM).SetValueY(nbreparmoi)
        Next
        'Chart1.Series("maSérie").LegendText = total.ToString + " (total)"
        Chart1.Series("maSérie").IsVisibleInLegend = False
        Chart1.ChartAreas(Chart1.Series("maSérie").ChartArea).RecalculateAxesScale()

    End Sub



    Private Sub Supprimer_commande_Button_Click(sender As Object, e As EventArgs) Handles Supprimer_commande_Button.Click
        Try

    
            MyMsg_Box.Presentation("Officine ?", "Voulez vous supprimer la commande " & commandes_DataGridView.Item(commande_Fournisseur.Index, commandes_DataGridView.CurrentRow.Index).Value & " ref " & _
                                commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString & " ?", True, "Oui", True, "Non", False, "")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                Me.CommandesTableAdapter.DeleteBy_ref(CDec(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value))
                Me.Commandes_LignesTableAdapter.DeleteBy_ref_commande(CDec(commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value))
            affiche_commande()
        End If
        Catch ex As Exception

        End Try
    End Sub



    Private Sub LinkLabel2_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked
        affiche_dus()
    End Sub

    Private Sub LinkLabel3_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel3.LinkClicked
        affiche_Avancés(True)
    End Sub

 
    Private Sub Détail_Commande_DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Détail_Commande_DataGridView.CellContentClick
        Try
            If e.ColumnIndex = Détail_Commande_Modifier.Index Then
                Dim old_qtté As Integer = CInt(Détail_Commande_DataGridView.Item(Détail_Commande_Quantité.Index, e.RowIndex).Value)
                Dim new_qtté As Integer = old_qtté
                MyInptBox.my_showdialog("Saisissez quantité pour" & vbCrLf & vbCrLf & Détail_Commande_DataGridView.Item(Détail_Commande_Designation.Index, e.RowIndex).Value _
                                        & vbCrLf & vbCrLf & "(actuellement " & old_qtté.ToString & ")", VarType(New Integer), 3, new_qtté.ToString)
                new_qtté = MyInptBox.result
                If new_qtté <> old_qtté Then
                    If new_qtté = 0 Then
                        Me.Commandes_LignesTableAdapter.Delete_by_ref_commande_num_ligne(CDec(Détail_Commande_DataGridView.Item(Détail_Commande_ref_commande.Index, e.RowIndex).Value), CDec(Détail_Commande_DataGridView.Item(Détail_Commande_num_ligne.Index, e.RowIndex).Value))
                        réindex_Lignes_Commande(CDec(Détail_Commande_DataGridView.Item(Détail_Commande_ref_commande.Index, e.RowIndex).Value))
                    ElseIf new_qtté > 0 Then
                        Me.Commandes_LignesTableAdapter.Update_Quantité(new_qtté, CDec(Détail_Commande_DataGridView.Item(Détail_Commande_ref_commande.Index, e.RowIndex).Value), CDec(Détail_Commande_DataGridView.Item(Détail_Commande_num_ligne.Index, e.RowIndex).Value))
                    End If
                    affiche_détail_commande()
                End If
            End If
        Catch ex As Exception

        End Try
    
    End Sub
    Public Sub réindex_Lignes_Commande(ByVal Ref_commande As Decimal)
        Dim datas = Me.Commandes_LignesTableAdapter.GetDataBy_ref_commande(Ref_commande)
        For r = 0 To datas.Rows.Count - 1
            Me.Commandes_LignesTableAdapter.Update_num_ligne(r + 1, Ref_commande, datas(r).num_ligne)
        Next
    End Sub



    Private Sub commandes_DataGridView_ColumnRemoved(sender As Object, e As DataGridViewColumnEventArgs) Handles commandes_DataGridView.ColumnRemoved
        Transfert_commande_Button_Change_text()
    End Sub

    Private Sub commandes_DataGridView_SelectionChanged1(sender As Object, e As EventArgs) Handles commandes_DataGridView.SelectionChanged
        Try
            Supprimer_commande_Button.Text = "Supprimer commande " & commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString
        Catch ex As Exception

        End Try

    End Sub

    Private Sub Transfert_commande_Button_Change_text()
        Transfert_commande_Button.Text = "Transfert commande"
        If Not commandes_DataGridView.CurrentRow Is Nothing And commandes_DataGridView.RowCount > 0 And Not Fournisseurs_ComboBox.SelectedItem Is Nothing Then
            If commandes_DataGridView.CurrentRow.Index >= 0 Then
                Transfert_commande_Button.Text = "Commande " & commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString & " -->" & Fournisseurs_ComboBox.SelectedItem.ToString
            End If
        End If
    End Sub

    Private Sub Transfert_commande_Button_Click(sender As Object, e As EventArgs) Handles Transfert_commande_Button.Click
        If Not Transfert_commande_Button.Text = "Transfert commande" And Not commandes_DataGridView.CurrentRow Is Nothing And commandes_DataGridView.RowCount > 0 And Not Fournisseurs_ComboBox.SelectedItem Is Nothing Then
            If commandes_DataGridView.CurrentRow.Index >= 0 Then
                MyMsg_Box.Presentation("Officine ?", "Changer de fournisseur commande " & commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString & " ?" & vbCrLf & vbCrLf & _
                       commandes_DataGridView.Item(commande_Fournisseur.Index, commandes_DataGridView.CurrentRow.Index).Value.ToString & " -->" & Fournisseurs_ComboBox.Text, True, "Oui", True, "Non", False, "")
                If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
                    Me.CommandesTableAdapter.Update_Fournisseur(Fournisseurs_ComboBox.SelectedItem.ToString, commandes_DataGridView.Item(commande_ref.Index, commandes_DataGridView.CurrentRow.Index).Value)
                    affiche_commande()
                End If
            End If

        End If
    End Sub

    Private Sub Commandes_PharmaML_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        For Each contr In Me.Controls
            If contr.GetType.ToString = "System.Windows.Forms.Button" Then
                round2(contr)
            End If
        Next
    End Sub

    Private Sub import_fichier_antoinne()
        Dim sr As New StreamReader(Application.StartupPath & "\COMPILATION MOIS.csv", Encoding.Default)
        Dim line = sr.ReadLine
        Dim message_fin As String = ""
        While Not line Is Nothing
            Try
                Dim codeprod As String = CSV_Champ(line, 2)
                Dim quant_dec As Decimal = CDec(CSV_Champ(line, 4))
                Dim quant_int As Integer
                If (quant_dec Mod 1) = 0 Then
                    quant_int = quant_dec
                Else
                    quant_int = Int(quant_dec) + 1
                End If
                Dim prod_row = BDD.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(codeprod, codeprod, "").Item(0)
                Dim RowIndex = Produits_DataGridView.RowCount
                Produits_DataGridView.Rows.Add()
                Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, RowIndex).Value = True
                Produits_DataGridView.Item(CIP.Index, RowIndex).Value = prod_row.CIP
                If prod_row.Code_PharmaML.Length = 13 Then
                    Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.Code_PharmaML
                    Produits_DataGridView.Item(Code_PharmaML.Index, RowIndex).Value = prod_row.Code_PharmaML
                ElseIf prod_row.EAN13 <> "" Then
                    Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.EAN13
                    Produits_DataGridView.Item(Code_PharmaML.Index, RowIndex).Value = prod_row.EAN13
                End If
                Produits_DataGridView.Item(Désignation.Index, RowIndex).Value = prod_row.Designation
                Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = quant_int
                Produits_DataGridView.Item(Partielle.Index, RowIndex).Value = "true"
                Produits_DataGridView.Item(Reliquat.Index, RowIndex).Value = "false"
                Produits_DataGridView.Item(Equivalent.Index, RowIndex).Value = "false"
                'Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", prod.CIP, prod.EAN13, prod.désignation)
                Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = 0
                Produits_DataGridView.Item(Stock.Index, RowIndex).Value = prod_row.Stock
                Produits_DataGridView.Item(en_commande.Index, RowIndex).Value = prod_row.en_commande
                Produits_DataGridView.Item(Liste.Index, RowIndex).Value = prod_row.Liste

                If prod_row.Liste = "Stupéfiant" Then
                    Produits_DataGridView.Item(Dose.Index, RowIndex).Value = "1"
                    Produits_DataGridView.Item(Stock_prévisionnel.Index, RowIndex).ReadOnly = True
                    Dim Vidal_PackService As New Vidal_PackService.PackService
                    Dim Packs = Vidal_PackService.searchByProductId(Val(prod_row.vidal_productId))
                    If Not Packs Is Nothing And Packs.Count > 0 Then
                        If Not Packs.ElementAt(0).dose Is Nothing Then
                            Produits_DataGridView.Item(Dose.Index, RowIndex).Value = Packs.ElementAt(0).dose
                        End If
                    End If
                End If
                

            Catch ex As Exception
                message_fin = message_fin & vbCrLf & vbCrLf & line
            End Try
            Application.DoEvents()
            line = sr.ReadLine


        End While
        sr.Close()
        MyMsg_Box.Presentation("LISTE PRODUIT MANUEL", message_fin, True, "Salut", True, "ça", True, "boum?")
        MyMsg_Box.ShowDialog()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        import_fichier_antoinne()
    End Sub

    Public Sub MAJ_quantités_en_commande()
        BDD.ProduitsTableAdapter.Update_en_commande_global_RAZ()
        Dim data = Me.Commandes_LignesTableAdapter.GetData_Quantités_en_commande()
        For r = 0 To data.Rows.Count - 1
            If data(r).Code_Produit <> "" Then
                BDD.ProduitsTableAdapter.Update_en_commande_global(data(r).Quantité, data(r).Code_Produit)
            ElseIf data(r).Designation <> "" Then
                BDD.ProduitsTableAdapter.Update_en_commande_global(data(r).Quantité, data(r).Designation)
            End If
        Next
    End Sub

  
    Private Sub LinkLabel4_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel4.LinkClicked
        If Fournisseurs_ComboBox.Text Is Nothing Then Exit Sub
        If Fournisseurs_ComboBox.Text = "" Or Fournisseurs_ComboBox.Text = "Fournisseur" Then Exit Sub

        MyMsg_Box.Presentation("Ouverture de catalogue", "L'ouverture d'un catalogue annule la selection actuelle.", True, "Poursuivre", False, "", True, "Annuler")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
            Bandeau_info_bas_show("Ouverture catalogue " & Fournisseurs_ComboBox.Text)
            Produits_DataGridView.Rows.Clear()
            Dim catalogue = BDD.Fournisseurs_CataloguesTableAdapter.GetDataBy_Fournisseur(Fournisseurs_ComboBox.Text)
            Dim message_fin = ""
            For r = 0 To catalogue.Rows.Count - 1
                Dim codeprod As String = catalogue.Item(r).GTIN13
                If codeprod = "" Then
                    codeprod = catalogue.Item(r).CIP
                End If
                If codeprod = "" Then
                    codeprod = catalogue.Item(r).Désignation
                End If

                Try


                    Dim prod_row = BDD.ProduitsTableAdapter.GetDataBY_Cipean13_Or_Cab_Or_Designation(codeprod, codeprod, "").Item(0)
                    Dim RowIndex = Produits_DataGridView.RowCount
                    Produits_DataGridView.Rows.Add()
                    Produits_DataGridView.Item(Ne_plus_propo_jusq_vente.Index, RowIndex).Value = True
                    Produits_DataGridView.Item(CIP.Index, RowIndex).Value = prod_row.CIP
                    If prod_row.Code_PharmaML.Length = 13 Then
                        Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.Code_PharmaML
                        Produits_DataGridView.Item(Code_PharmaML.Index, RowIndex).Value = prod_row.Code_PharmaML
                    ElseIf prod_row.EAN13 <> "" Then
                        Produits_DataGridView.Item(EAN13.Index, RowIndex).Value = prod_row.EAN13
                        Produits_DataGridView.Item(Code_PharmaML.Index, RowIndex).Value = prod_row.EAN13
                    End If
                    Produits_DataGridView.Item(Désignation.Index, RowIndex).Value = prod_row.Designation
                    Produits_DataGridView.Item(Quantité.Index, RowIndex).Value = 0
                    Produits_DataGridView.Item(Partielle.Index, RowIndex).Value = "true"
                    Produits_DataGridView.Item(Reliquat.Index, RowIndex).Value = "false"
                    Produits_DataGridView.Item(Equivalent.Index, RowIndex).Value = "false"
                    'Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = Me.ActesTableAdapter.Select_Sum_Quantité(Format(DateTimePicker1.Value, "yyyyMMdd") & "000000", prod.CIP, prod.EAN13, prod.désignation)
                    Produits_DataGridView.Item(Délivrés.Index, RowIndex).Value = 0
                    Produits_DataGridView.Item(Stock.Index, RowIndex).Value = prod_row.Stock
                    Produits_DataGridView.Item(en_commande.Index, RowIndex).Value = prod_row.en_commande
                    Produits_DataGridView.Item(Liste.Index, RowIndex).Value = prod_row.Liste

                    If prod_row.Liste = "Stupéfiant" Then
                        Produits_DataGridView.Item(Dose.Index, RowIndex).Value = "1"
                        Produits_DataGridView.Item(Stock_prévisionnel.Index, RowIndex).ReadOnly = True
                        Dim Vidal_PackService As New Vidal_PackService.PackService
                        Dim Packs = Vidal_PackService.searchByProductId(Val(prod_row.vidal_productId))
                        If Not Packs Is Nothing And Packs.Count > 0 Then
                            If Not Packs.ElementAt(0).dose Is Nothing Then
                                Produits_DataGridView.Item(Dose.Index, RowIndex).Value = Packs.ElementAt(0).dose
                            End If
                        End If
                    End If


                Catch ex As Exception
                    message_fin = message_fin & vbCrLf & codeprod
                End Try
            Next

            If message_fin <> "" Then
                MyMsg_Box.Presentation("Catalogue: Produits inconnus", message_fin, False, "", False, "", True, "Ok")
                MyMsg_Box.ShowDialog()
            End If
            Bandeau_info_bas_hide()
        End If

    End Sub

    Private Sub Recherche_TextBox_TextChanged(sender As Object, e As EventArgs) Handles Recherche_TextBox.TextChanged

    End Sub
End Class