Imports Newtonsoft.Json
Imports System.Net
Imports System.Net.Http
Imports System.Net.Security
Imports System.Threading.Tasks
Imports WebIntranet.Clases
Imports WebIntranet.Models

Public Class listSolicitudesComunicaciones
    Inherits System.Web.UI.Page
    Private usuarioPrincipal As Models.Personal
    'Shared listaEstados As List(Of Models.Estados)
    'Shared sessionUsuario As String
    'Shared usuariosSeleccionados As New List(Of String)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Session("usuario") = "" Then
            Response.Redirect("default.aspx")
        End If
        estIncPicBL.Visible = False
        Dim sessionUsuario As String = Session("usuario")
        Dim usuariosSeleccionados = Session("usuariosSeleccionados")
        If Session("modo") = "PERSONAL" Then
            intPicadaBL.Visible = False
            'bolsaDeHorasBL.Visible = False
            VAAPBCBL.Visible = False
            'informPicadasBL.Visible = False
            If Session("persona").Personas(0).Dni = "44286377S" Then
                estIncPicBL.Visible = True
            End If
        Else
            VAAPBCBLpers.Visible = False
            Li1.Visible = False
            intPicadaPersBL.Visible = False
        End If
        Dim pendientes = Request.QueryString("pnd")
        usuarioPrincipal = Session("persona").Personas(0)
        fechaInicioListInc.Value = DateTime.Now.ToString("yyyy-MM") + "-01"
        fechaFinListInc.Value = DateTime.Now.ToString("yyyy-MM-dd")
        If pendientes = "true" Then
            Session.Add("modo", "PERSONAL")
            Dim persona = Session("persona")
            Dim personasPendientes = Session("listaPersonasIncPend")
            Session.Add("usuariosSeleccionados", personasPendientes)
            fechaInicioListInc.Value = CDate(persona.FeIniInciPorAceptar).ToString("yyyy-MM-dd")
            fechaFinListInc.Value = CDate(persona.FeFinInciPorAceptar).ToString("yyyy-MM-dd")
            usuariosSeleccionados = personasPendientes
        End If
        If pendientes = "borr" Then
            Dim persona = Session("persona")
            fechaInicioListInc.Value = If(CDate(persona.personas(0).FeIniInciBorrador).ToString("yyyy-MM-dd") <> "0001-01-01", CDate(persona.personas(0).FeIniInciBorrador).ToString("yyyy-MM-dd"), Now.Year.ToString() + "-01-01")
            fechaFinListInc.Value = If(CDate(persona.personas(0).FeFinInciBorrador).ToString("yyyy-MM-dd") <> "0001-01-01", CDate(persona.personas(0).FeFinInciBorrador).ToString("yyyy-MM-dd"), Now.Year.ToString() + "-01-01")
        End If
        TIPOUSU.Value = Session("persona").Personas(0).Roll
        MODO.Value = Session("modo")

        'Dim usuario As String = "tecnosis"
        'Dim contraseña As String = "patata2022"
        'Dim url3 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/IncidenciasControlHorario"
        '' Dim url3 As String = "http://192.168.41.14:81/api/IncidenciasControlHorario"
        'Dim credenciales3 As New Net.CredentialCache()
        'credenciales3.Add(New Uri(url3), "Basic", New Net.NetworkCredential(usuario, contraseña))
        'Dim clienteHTTP3 As New Net.WebClient()
        'clienteHTTP3.Encoding = System.Text.Encoding.UTF8
        'clienteHTTP3.Credentials = credenciales3
        'Dim respuesta3 As String = clienteHTTP3.DownloadString(url3)
        'Dim deserializador3 As New System.Web.Script.Serialization.JavaScriptSerializer()
        'deserializador3.MaxJsonLength = Integer.MaxValue
        'Dim listaPicada As List(Of Incidencia) =
        '    deserializador3.Deserialize(Of List(Of Incidencia))(respuesta3)
        'Dim inciVacia As New Incidencia

        'listaPicada = listaPicada.Where(Function(x) x.EsInciReloj = False).OrderBy(Function(x) x.Nombre).ToList

        cargarEstados()
    End Sub
    Function cargarEstados()
        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
        Dim url3 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/EstadosAsistencias"
        Dim credenciales3 As New Net.CredentialCache()
        Dim clienteHTTP3 As New Net.WebClient()
        clienteHTTP3.Encoding = System.Text.Encoding.UTF8
        clienteHTTP3.Credentials = credenciales3
        Dim respuesta3 As String = clienteHTTP3.DownloadString(url3)
        Dim deserializador3 As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
        settings.CheckAdditionalContent = True
        Dim Datos As List(Of Models.Estados) =
        deserializador3.Deserialize(Of List(Of Models.Estados))(respuesta3)
        Dim html = ""
        Dim listaEstados = Datos
        Session.Add("listEstados", listaEstados)
        html += "<div class='estado'><input id='chbTODOS' type='checkbox' value='TODOS' /><p>TODOS</p></div>"

        For Each Estado As Models.Estados In Datos
            html += "<div id='" + Estado.idEstado + "Div' class='estado'><input class='chbEstado' type='checkbox' value='" + Estado.Descripcion.Replace(" ", "-") + "' /><p>" + Estado.Descripcion + "</p></div>"
        Next

        filtroEstados.InnerHtml = html


    End Function
    <System.Web.Services.WebMethod()>
    Public Shared Async Function CargarListadodeIncidencias(fechaInit As String, fechaEnd As String, checkTodas As Boolean) As Task(Of String)
        Try
            If UtilAntifraude.CheckCred() = False Then
                Return "ERROR--1"
                Exit Function
            End If

            Dim listIncis As New List(Of String)

            If checkTodas = True Then
                ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
                Dim usuariosSeleccionados As List(Of String) = HttpContext.Current.Session("usuariosSeleccionados")
                Dim objetoConsulta As New Models.Consulta
                objetoConsulta.fechaInicio = New Date(fechaInit)
                objetoConsulta.fechaFin = New Date(fechaEnd)
                objetoConsulta.listaNif = usuariosSeleccionados
                Dim jsonConsulta As String = JsonConvert.SerializeObject(objetoConsulta)
                Dim url As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/ListAsisEntreFechas"
                Dim clienteHTTP As New HttpClient
                Dim contenidoConsultaHTTP As New StringContent(jsonConsulta, Encoding.UTF8, "application/json")
                Debug.WriteLine("CargarListadodePicadasAsync:1===" + Now.ToLongTimeString)
                Dim respuestaHTTP As HttpResponseMessage = Await clienteHTTP.PostAsync(url, contenidoConsultaHTTP).ConfigureAwait(False)
                Debug.WriteLine("CargarListadodePicadasAsync:2===" + Now.ToLongTimeString)
                Dim sRespuesta As String = Await respuestaHTTP.Content.ReadAsStringAsync().ConfigureAwait(False)
                Debug.WriteLine("CargarListadodePicadasAsync:3===" + Now.ToLongTimeString)
                Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
                settings.CheckAdditionalContent = True
                Dim objetoDatos As Models.ResultadoListAsisEntreFechas =
                    Newtonsoft.Json.JsonConvert.DeserializeObject(Of Models.ResultadoListAsisEntreFechas)(sRespuesta, settings)
                Debug.WriteLine("Resultado: " & objetoDatos.Resultado)
                Dim listaPersonas = objetoDatos.ListadoEFNoAceptada.ListaPersonas
                Dim Json = ""
                Json += "["
                Dim cont = 0
                For Each persona As Models.PersonaAsi In listaPersonas
                    If cont > 0 Then
                        Json += ","
                    End If
                    cont += 1
                    Json += "{""Persona"":""" + persona.ApellidosNombre + """,""LisAsistencias"":["
                    Dim listadoAsistencias = persona.LisAsistencias.OrderBy(Function(x) x.FechaInicio).Reverse().ToList
                    If persona.LisAsistencias IsNot Nothing Then
                        Dim contAsis = 0
                        For Each Asistencia As Models.Asistencia In listadoAsistencias
                            If listIncis.Contains(Asistencia.DesAsistencia.ToUpper.Replace(" ", "-")) = False Then
                                listIncis.Add(Asistencia.DesAsistencia.ToUpper.Replace(" ", "-"))
                            End If
                            Dim urlDesg = "/desgSolicitudesComunicaciones.aspx?idAsis=" + Asistencia.idAsistencia.ToString + "&cl=" + tsl5.crypt.SHA1("M3Soft." & Asistencia.idAsistencia)
                            If contAsis > 0 Then
                                Json += ","
                            End If
                            contAsis += 1
                            Json += "{""DesAsistencia"":""" + Asistencia.DesAsistencia + """,""numDias"":""" + Asistencia.Ndias.ToString + """,""Estado"":""" + Asistencia.Estado + """,""tipo"":""" + Asistencia.Tipo + """,""ExpedienteECO"":""" + Asistencia.ExpedienteECO + """,""FechaFin"":""" + Asistencia.FechaFin.ToString("dd/MM/yyyy") + """" +
                             ",""FechaInicio"":""" + Asistencia.FechaInicio.ToString("dd/MM/yyyy") + """,""HorasTraManana"":""" + Asistencia.HorasTraManana + """,""HorasTraTarde"":""" + Asistencia.HorasTraTarde + ""","
                            Dim Observaciones = ""
                            If Asistencia.Observaciones IsNot Nothing Then
                                Observaciones = Asistencia.Observaciones.Replace("""", "'")
                            End If
                            Json += """Observaciones"":""" + Observaciones + """,""idAsistencia"":""" + Asistencia.idAsistencia.ToString + """,""linkDesglose"":""" + urlDesg + """,""tipo"":""tipo" + Asistencia.Tipo + """}"
                        Next
                        Json += "]}"
                    Else
                        Json += "{}]}"
                    End If
                Next
                Json += "]"
                Return Json
            Else
                ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
                Dim usuariosSeleccionados As List(Of String) = HttpContext.Current.Session("usuariosSeleccionados")
                Dim objetoConsulta As New Models.Consulta
                objetoConsulta.fechaInicio = New Date(fechaInit)
                objetoConsulta.fechaFin = New Date(fechaEnd)
                objetoConsulta.listaNif = usuariosSeleccionados
                Dim jsonConsulta As String = JsonConvert.SerializeObject(objetoConsulta)
                Dim url As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/ListAsisEntreFechas"
                Dim clienteHTTP As New HttpClient
                Dim contenidoConsultaHTTP As New StringContent(jsonConsulta, Encoding.UTF8, "application/json")
                Debug.WriteLine("CargarListadodePicadasAsync:1===" + Now.ToLongTimeString)
                Dim respuestaHTTP As HttpResponseMessage = Await clienteHTTP.PostAsync(url, contenidoConsultaHTTP).ConfigureAwait(False)
                Debug.WriteLine("CargarListadodePicadasAsync:2===" + Now.ToLongTimeString)
                Dim sRespuesta As String = Await respuestaHTTP.Content.ReadAsStringAsync().ConfigureAwait(False)
                Debug.WriteLine("CargarListadodePicadasAsync:3===" + Now.ToLongTimeString)
                Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
                settings.CheckAdditionalContent = True
                Dim objetoDatos As Models.ResultadoListAsisEntreFechas =
                    Newtonsoft.Json.JsonConvert.DeserializeObject(Of Models.ResultadoListAsisEntreFechas)(sRespuesta, settings)
                Debug.WriteLine("Resultado: " & objetoDatos.Resultado)
                Dim listaPersonas = objetoDatos.ListadoEF.ListaPersonas
                Dim Json = ""
                Json += "["
                Dim cont = 0
                For Each persona As Models.PersonaAsi In listaPersonas
                    If cont > 0 Then
                        Json += ","
                    End If
                    cont += 1
                    Json += "{""Persona"":""" + persona.ApellidosNombre + """,""LisAsistencias"":["
                    Dim listadoAsistencias = persona.LisAsistencias.OrderBy(Function(x) x.FechaInicio).Reverse().ToList
                    If persona.LisAsistencias IsNot Nothing Then
                        Dim contAsis = 0
                        For Each Asistencia As Models.Asistencia In listadoAsistencias
                            If listIncis.Contains(Asistencia.DesAsistencia.ToUpper.Replace(" ", "-")) = False Then
                                listIncis.Add(Asistencia.DesAsistencia.ToUpper.Replace(" ", "-"))
                            End If
                            Dim urlDesg = "/desgSolicitudesComunicaciones.aspx?idAsis=" + Asistencia.idAsistencia.ToString + "&cl=" + tsl5.crypt.SHA1("M3Soft." & Asistencia.idAsistencia)
                            If contAsis > 0 Then
                                Json += ","
                            End If
                            contAsis += 1
                            Json += "{""DesAsistencia"":""" + Asistencia.DesAsistencia + """,""numDias"":""" + Asistencia.Ndias.ToString + """,""Estado"":""" + Asistencia.Estado + """,""tipo"":""" + Asistencia.Tipo + """,""ExpedienteECO"":""" + Asistencia.ExpedienteECO + """,""FechaFin"":""" + Asistencia.FechaFin.ToString("dd/MM/yyyy") + """" +
                             ",""FechaInicio"":""" + Asistencia.FechaInicio.ToString("dd/MM/yyyy") + """,""HorasTraManana"":""" + Asistencia.HorasTraManana + """,""HorasTraTarde"":""" + Asistencia.HorasTraTarde + ""","
                            Dim Observaciones = ""
                            If Asistencia.Observaciones IsNot Nothing Then
                                Observaciones = Asistencia.Observaciones.Replace("""", "'")
                            End If
                            Json += """Observaciones"":""" + Observaciones + """,""idAsistencia"":""" + Asistencia.idAsistencia.ToString + """,""linkDesglose"":""" + urlDesg + """,""tipo"":""" + Asistencia.Tipo + """}"
                        Next
                        Json += "]}"
                    Else
                        Json += "{}]}"
                    End If
                Next
                Json += "]"
                Return Json
            End If


        Catch ex As Exception
            Debug.Print(ex.StackTrace)
        End Try
    End Function


End Class