﻿Imports DevExpress.Web
Imports DevExpress.Web.Data
Imports System.Data.SqlClient
Public Class Agenti
    Inherits System.Web.UI.Page

    Dim tmpSQL As String
    Dim connection

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        '********************************************************
        '--- Controllo Autenticazione per accesso alla pagina ---
        If Not Session("Autenticato") Then
            Response.Redirect("LoginUser.aspx")
        End If
        '********************************************************

        connection = New SqlConnection(ConfigurationManager.ConnectionStrings("pa_data_userConnectionString").ConnectionString)

        '--- imposta la connessione al database sui datasource
        dsAgenti.ConnectionString = Session("sConnectionString")
        dsAgentiAziende.ConnectionString = Session("sConnectionString")
        dsAgentiClienti.ConnectionString = Session("sConnectionString")
        dsAziende.ConnectionString = Session("sConnectionString")
        dsClienti.ConnectionString = Session("sConnectionString")
        dsNazioni.ConnectionString = Session("sConnectionString")
        dsProvincie.ConnectionString = Session("sConnectionString")

        If Page.IsPostBack Then
            aggiornaElencoClienti()
            aggiornaElencoAziende()
        Else
            Session("sIDAgente") = "" '--- azzera la variabile di sessione dell'IDAgente selezionato se entra per la prima volta
        End If

        '--- aggiorna la label con i dati dell'agente selezionato ---
        If IsPostBack Then
            LeggeIDRigaSelezionata()

            If Not IsNothing(Session("sDescrizioneAgente")) And Not IsNothing(Session("sIDAgente")) Then
                labelAgenteSelezionato.Text = "Agente selezionato: " & Session("sDescrizioneAgente").ToString & " (" & Session("sIDAgente").ToString & ")"
            End If
        End If

        '**************************************************************************************
        'Dim selectedValue As String = String.Empty
        'If IsPostBack Then 'AndAlso gridAnagrafica.SelectedItem IsNot Nothing Then
        '    '--- abilita solo la 1' tab fino a quando non si seleziona il record di riferimento ---
        '    If Val(Session("sIDAgente")) = 0 Then
        '        abilitaTab1()
        '    Else
        '        abilitaTutteLeTab()
        '    End If
        'End If
        'ASPxCallbackPanel1.EnableCallbackAnimation = enableAnimation
        'ASPxCallbackPanel1.SettingsLoadingPanel.Enabled = Not enableAnimation
        '**************************************************************************************

        '--- abilita solo la 1' tab fino a quando non si seleziona il record di riferimento ---
        'If Val(Session("sIDAgente")) = 0 Then
        '    abilitaTab1()
        'Else
        '    abilitaTutteLeTab()
        'End If


    End Sub
    Sub abilitaTab1()
        Me.ASPxPageControl1.TabPages(0).Enabled = True
        Me.ASPxPageControl1.TabPages.Item(1).Visible = False
        Me.ASPxPageControl1.TabPages.Item(2).Visible = False
        Me.ASPxPageControl1.TabPages.Item(3).Visible = False

    End Sub
    Sub abilitaTutteLeTab()
        Me.ASPxPageControl1.TabPages(0).Enabled = True
        Me.ASPxPageControl1.TabPages.Item(1).Visible = True
        Me.ASPxPageControl1.TabPages.Item(2).Visible = True
        Me.ASPxPageControl1.TabPages.Item(3).Visible = True
    End Sub


    Private Sub ASPxGridView1_RowInserting(sender As Object, e As ASPxDataInsertingEventArgs) Handles gridAnagrafica.RowInserting
        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("IDLicenza") = Session("sLicenza_ID")
        e.NewValues("IDUtente") = Session("sUtente_ID")
        e.NewValues("Ins_DataOra") = xDateTime
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Ins_Utente") = Session("sUtente_UserName")       '--- mettere la variabile di sessione
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione
        e.NewValues("LivelloAutorizzazione") = Session("sUtente_Livello")    '--- mettere la variabile di sessione
    End Sub

    Private Sub ASPxGridView1_RowUpdating(sender As Object, e As ASPxDataUpdatingEventArgs) Handles gridAnagrafica.RowUpdating
        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione
    End Sub

    Private Sub ASPxGridView1_InitNewRow(sender As Object, e As ASPxDataInitNewRowEventArgs) Handles gridAnagrafica.InitNewRow

        '--- titolo form edit in inserimento
        gridAnagrafica.SettingsText.PopupEditFormCaption = "Nuova Scheda Agente"

    End Sub
    Private Sub ASPxGridView2_RowInserting(sender As Object, e As ASPxDataInsertingEventArgs) Handles gridAgentiClienti.RowInserting

        '--- controlla se Loggato ---
        If IsNothing(Session("sIDAgente")) Or Val(Session("sIDAgente")) = 0 Then
            sender.CancelEdit()
            Exit Sub
        End If

        '--- controlla se duplicato ---
        If controllaSeClienteDuplicato(e.NewValues("IDCliente")) = True Then
            sender.CancelEdit()
            Exit Sub
        End If

        '--- abbina l'IDAgente selezionato ---
        e.NewValues("IDAgente") = Session("sIDAgente")

        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("IDLicenza") = Session("sLicenza_ID")
        e.NewValues("IDUtente") = Session("sUtente_ID")
        e.NewValues("Ins_DataOra") = xDateTime
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Ins_Utente") = Session("sUtente_UserName")       '--- mettere la variabile di sessione
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione
        e.NewValues("LivelloAutorizzazione") = Session("sUtente_Livello")    '--- mettere la variabile di sessione
    End Sub

    Private Sub ASPxGridView3_RowInserting(sender As Object, e As ASPxDataInsertingEventArgs) Handles gridAgentiAziende.RowInserting

        '--- controlla se Loggato ---
        If IsNothing(Session("sIDAgente")) Or Val(Session("sIDAgente")) = 0 Then
            sender.CancelEdit()
            Return
        End If

        '--- controlla se duplicato ---
        If controllaSeAziendaDuplicata(e.NewValues("IDAzienda")) = True Then
            sender.CancelEdit()
            Return
        End If

        '--- abbina l'IDAgente selezionato ---
        e.NewValues("IDAgente") = Session("sIDAgente")

        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("IDLicenza") = Session("sLicenza_ID")
        e.NewValues("IDUtente") = Session("sUtente_ID")
        e.NewValues("Ins_DataOra") = xDateTime
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Ins_Utente") = Session("sUtente_UserName")       '--- mettere la variabile di sessione
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione
        e.NewValues("LivelloAutorizzazione") = Session("sUtente_Livello")    '--- mettere la variabile di sessione
    End Sub

    Private Sub gridAgentiAziende_RowUpdating(sender As Object, e As ASPxDataUpdatingEventArgs) Handles gridAgentiAziende.RowUpdating
        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione

    End Sub

    Private Sub gridAgentiClienti_RowUpdating(sender As Object, e As ASPxDataUpdatingEventArgs) Handles gridAgentiClienti.RowUpdating
        '----------------------------------------------------------------
        '--- aggiorna i dati in fase di inserimento di una nuova riga ---
        '----------------------------------------------------------------
        Dim xDateTime = DateTime.Now
        e.NewValues("Upd_DataOra") = xDateTime
        e.NewValues("Upd_Utente") = Session("sUtente_UserName")        '--- mettere la variabile di sessione

    End Sub

    Private Sub ASPxPageControl1_TabClick(source As Object, e As TabControlCancelEventArgs) Handles ASPxPageControl1.TabClick


        'If Val(Session("sIDAgente")) = 0 Then Exit Sub

        'If e.Tab.Index = 1 Then
        '    aggiornaElencoClienti()
        'ElseIf e.Tab.Index = 2 Then
        '    aggiornaElencoAziende()
        'End If

    End Sub

    Sub LeggeIDRigaSelezionata()

        Session("sIDAgente") = 0
        Session("sDescrizioneAgente") = ""

        '--- Prende il l'ID del cliente dalla RIGA SELEZIONATA ----------------------------
        Dim selected_ID As Integer
        Dim selected_Descrizione As String = ""

        For i = 0 To gridAnagrafica.VisibleRowCount - 1
            If (gridAnagrafica.Selection.IsRowSelected(i)) Then
                selected_ID = gridAnagrafica.GetRowValues(i, "IDAgente")
                selected_Descrizione = gridAnagrafica.GetRowValues(i, "Cognome") & " " & gridAnagrafica.GetRowValues(i, "Nome")
            End If
        Next

        '--- prende l'ID del cliente selezionato dalla griglia e lo passa in una variabile di Sessione
        Session("sIDAgente") = selected_ID
        Session("sDescrizioneAgente") = selected_Descrizione

        If Not IsNothing(Session("sDescrizioneAgente")) And Not IsNothing(Session("sIDAgente")) Then
            labelAgenteSelezionato.Text = "Agente selezionato: " & Session("sDescrizioneAgente").ToString & " (" & Session("sIDAgente").ToString & ")"
        End If

    End Sub

    '==============================================
    '--- ritorna TRUE se il cliente è duplicato ---
    '==============================================
    Private Function controllaSeClienteDuplicato(IDCliente)

        controllaSeClienteDuplicato = False

        If Session("sIDAgente").ToString = "" Then Exit Function

        Dim connectionDup = New SqlConnection(ConfigurationManager.ConnectionStrings("pa_data_userConnectionString").ConnectionString)

        Try

            connectionDup.Open()
            tmpSQL = "SELECT idcliente FROM AgentiClienti WHERE IDAgente = " & Session("sIDAgente").ToString & " and IDCliente = " & IDCliente.ToString
            Dim SqlCommand = New SqlCommand(tmpSQL, connectionDup)
            Dim dr = SqlCommand.ExecuteReader()

            If dr.HasRows Then
                '--- esiste già un cliente con quella partita iva...
                dr.Read()
                controllaSeClienteDuplicato = True
                connectionDup.Close()
                Exit Function
            End If

            connectionDup.Close()

        Catch ex As Exception
            connectionDup.Close()
            Session("ErrorMessage") = ex.Message
            ErrorLabel.Text = ex.Message
            'Response.Redirect("Error.aspx")
        End Try
    End Function
    '==============================================
    '--- ritorna TRUE se l'Azienda è duplicata ---
    '==============================================
    Private Function controllaSeAziendaDuplicata(IDAzienda)

        controllaSeAziendaDuplicata = False

        If Session("sIDAgente").ToString = "" Then Exit Function

        Dim connectionDup = New SqlConnection(ConfigurationManager.ConnectionStrings("pa_data_userConnectionString").ConnectionString)

        Try

            connectionDup.Open()
            tmpSQL = "SELECT IDAzienda FROM AgentiAziende WHERE IDAgente = " & Session("sIDAgente").ToString & " and IDAzienda = " & IDAzienda.ToString
            Dim SqlCommand = New SqlCommand(tmpSQL, connectionDup)
            Dim dr = SqlCommand.ExecuteReader()

            If dr.HasRows Then
                '--- esiste già un cliente con quella partita iva...
                dr.Read()
                controllaSeAziendaDuplicata = True
                connectionDup.Close()
                Exit Function
            End If

            connectionDup.Close()

        Catch ex As Exception
            connectionDup.Close()
            Session("ErrorMessage") = ex.Message
            ErrorLabel.Text = ex.Message
            'Response.Redirect("Error.aspx")
        End Try

    End Function
    Private Sub gridAnagrafica_SelectionChanged(sender As Object, e As EventArgs) Handles gridAnagrafica.SelectionChanged

        'LeggeIDRigaSelezionata()

        '--- se è stato selezionato un agente, abilita tutte le tab ---
        'If Not IsNothing(Session("sIDAgente")) And Val(Session("sIDAgente")) > 0 Then
        '    abilitaTutteLeTab()
        'End If


    End Sub
    Sub aggiornaElencoClienti()
        If IsNothing(Session("sIDAgente")) Or Val(Session("sIDAgente")) = 0 Then Exit Sub

        Dim sqlCmd
        sqlCmd = "SELECT * from clienti where idcliente not in (select idcliente from AgentiClienti) order by RagioneSociale"
        dsClienti.SelectCommand = sqlCmd
        dsClienti.DataBind()

        '--- aggiorna l'elenco deli clienti collegate all'agente
        sqlCmd = "SELECT * from AgentiClienti "
        sqlCmd += " inner join Clienti on Clienti.idcliente = AgentiClienti.idcliente"
        sqlCmd += " where idagente = " & Session("sIDAgente").ToString
        sqlCmd += " order by Clienti.RagioneSociale"
        dsAgentiClienti.SelectCommand = sqlCmd
        dsAgentiClienti.DataBind()

        gridAgentiClienti.DataBind()


    End Sub
    Sub aggiornaElencoAziende()
        If IsNothing(Session("sIDAgente")) Or Val(Session("sIDAgente")) = 0 Then Exit Sub

        '--- aggiorna il datasource delle aziende da mettere nella combo
        Dim sqlCmd
        sqlCmd = "SELECT * from aziende where idazienda not in (select idazienda from AgentiAziende) order by Descrizione"
        dsAziende.SelectCommand = sqlCmd
        dsAziende.DataBind()

        '--- aggiorna l'elenco delle aziende collegate all'agente
        sqlCmd = "SELECT * from AgentiAziende "
        sqlCmd += " inner join Aziende on Aziende.idazienda = AgentiAziende.idazienda"
        sqlCmd += " where idagente = " & Session("sIDAgente").ToString
        sqlCmd += " order by Descrizione"
        dsAgentiAziende.SelectCommand = sqlCmd
        dsAgentiAziende.DataBind()

        gridAgentiAziende.DataBind()

    End Sub

    Private Sub gridAnagrafica_HtmlRowCreated(sender As Object, e As ASPxGridViewTableRowEventArgs) Handles gridAnagrafica.HtmlRowCreated



        'If (e.RowType == GridViewRowType.EditForm) Then {
        'ASPxGridView GridView = (sender as ASPxGridView)
        '    ASPxPageControl pageControl = GridView.FindEditFormTemplateControl("ASPxPageControlSrtKarEdit")                                                            as DevExpress.Web.ASPxTabControl.ASPxPageControl
        '    If (pageControl!= null) Then {
        '        pageControl.TabPages[2].Visible = gridView.IsNewRowEditing;
        '        pageControl.TabPages[3].Visible = gridView.IsNewRowEditing;
        '        pageControl.TabPages[4].Visible = gridView.IsNewRowEditing;
        '        pageControl.TabPages[5].Visible = gridView.IsNewRowEditing;
        '    }
        '}
    End Sub
End Class