Imports System.Net
Imports System.Net.Http
Imports System.Net.Security
Imports System.Threading.Tasks
Imports Newtonsoft.Json
Imports WebIntranet.Models
Public Class listadoFich
    Public Property id As String
    Public Property fichero As String

End Class

Public Class SolicitudesComunicaciones
    Inherits System.Web.UI.Page
    'Shared sessionUsuario As String
    'Shared idInci As Integer
    'Shared tipo As String
    'Shared incidencia As Incidencia
    'Shared idGrupo As Integer
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Session("Persona") Is Nothing Then
            Response.Redirect("default.aspx")
        End If
        Dim sessionUsuario As String = Session("usuario")
        Dim idInci = Request.QueryString("idInci")
        Session.Add("idInci", idInci)
        Dim tipo = Request.QueryString("t")
        Session.Add("tipo", tipo)

        If Not IsPostBack Then

            horaIniPI1.Value = "00:00"
            horaFinPI1.Value = "00:00"
            horaTotPI1.Value = "00:00"
            horaIniPI2.Value = "00:00"
            horaFinPI2.Value = "00:00"
            horaTotPI2.Value = "00:00"

            'Dim fechaToday = DateTime.Now.ToString("yyyy-MM-dd")
            'inpFechaInicio.Value = DateTime.Now.ToString("yyyy-MM") + "-01"
            'inpFechaFin.Value = fechaToday
            'inpFechaFinBolsa.Value = fechaToday
            'inpIniRIM.Value = DateTime.Now.ToString("yyyy") + "-01-01"
            'inpFinRIM.Value = fechaToday
            'inpFechaIniBolsa.Value = DateTime.Now.ToString("yyyy") + "-01-01"
            'fechaInicioListadoTeletrabajo.Value = DateTime.Now.ToString("yyyy") + "-01-01"
            'inpAnyoVAAPBC.Value = DateTime.Now.ToString("yyyy")
            'fechaFinListadoTeletrabajo.Value = fechaToday

        End If

        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 incidencia = listaPicada.FirstOrDefault(Function(x) x.EsInciReloj = False And x.idIncidencias = idInci)
        listIncNoReloj.Value = JsonConvert.SerializeObject(incidencia)
        Session.Add("incidencia", incidencia)
        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
        Dim url2 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/GruposIncidenciasControlHorario"
        Dim credenciales2 As New Net.CredentialCache()
        Dim clienteHTTP2 As New Net.WebClient()
        clienteHTTP2.Encoding = System.Text.Encoding.UTF8
        clienteHTTP2.Credentials = credenciales2
        Dim respuesta2 As String = clienteHTTP2.DownloadString(url2)
        Dim deserializador2 As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
        settings.CheckAdditionalContent = True
        Dim Datos As List(Of Models.grupos) =
        deserializador2.Deserialize(Of List(Of Models.grupos))(respuesta2)

        Dim grupoInci = Datos.FirstOrDefault(Function(x) x.idGrupo = incidencia.idGrupo)
        Dim idGrupo = grupoInci.idGrupo

        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
        Dim url1 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/SubGruposIncidenciasControlHorario?idGrupo=" + idGrupo.ToString
        Dim credenciales1 As New Net.CredentialCache()
        Dim clienteHTTP1 As New Net.WebClient()
        clienteHTTP1.Encoding = System.Text.Encoding.UTF8
        clienteHTTP1.Credentials = credenciales1
        Dim respuesta1 As String = clienteHTTP1.DownloadString(url1)
        Dim deserializador1 As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim settings1 As New Newtonsoft.Json.JsonSerializerSettings()
        settings.CheckAdditionalContent = True
        Dim Datos1 As ResultadoSubGruposIncidenciasControlHorario =
        deserializador2.Deserialize(Of ResultadoSubGruposIncidenciasControlHorario)(respuesta1)
        Dim subGrupos = Datos1.listaSubgrupos

        Session.Add("idGrupo", idGrupo)

        If incidencia.AdmiteIntervaloDias = False Then
            inputfechafinPI.Visible = False
            inputfechainiPI.Attributes.Add("class", "fechainiciosolo")
            dateIniPI.Attributes.Add("class", "fechainiciosolo")
        End If
        If incidencia.AdmiteIntervaloHoras = False Then
            If incidencia.AdmiteInstanteTemporal <> False Then
                textoHorario.InnerText = "Hora"
                horariotardePI.Visible = False
                inputMananaDiv2.Visible = False
                inputMananaDiv3.Visible = False
            Else
                horariomananaPI.Visible = False
                horariotardePI.Visible = False
            End If
        End If
        If incidencia.Adjunto = "NO" Then
            inputarchivoadjuntoPI.Visible = False
        End If
        If incidencia.AdmiteRangosFechas = False Then
            btnPlusTramo.Visible = False
        End If

        Dim htmlMigas = "<ul>"
        htmlMigas += "<li class='migaActiva'>/" + If(tipo = "p", "Solicitudes", "Comunicaciones") + "</li>"
        htmlMigas += "<li><a onclick=""redirigir()"" href=""/Menu.aspx?g=" + grupoInci.idGrupo.ToString + "&t=" + tipo + """>/ " + grupoInci.Descripcion + "</a></li>"
        htmlMigas += If(incidencia.idSubgrupo IsNot "", "<li><a onclick=""redirigir()"" href=""/Menu.aspx?g=" + grupoInci.idGrupo.ToString + "&sg=" + subGrupos.FirstOrDefault(Function(x) x.idSubGrupo = incidencia.idSubgrupo).idSubGrupo.ToString + "&t=" + tipo + """>/ " + subGrupos.FirstOrDefault(Function(x) x.idSubGrupo = incidencia.idSubgrupo).descripcion.ToString + "</a></li>", "")
        htmlMigas += "<li class='migaActiva'>/ " + incidencia.Nombre + "</li>" +
            "</ul>"
        migasDePanPI.InnerHtml = htmlMigas
        tituloPI.InnerText = incidencia.Nombre
        cargarBarraLateral()


    End Sub
    Public Sub cargarBarraLateral()

        Dim usuario As String = "tecnosis"
        Dim contraseña As String = "patata2022"
        Dim tipo = Request.QueryString("t")
        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 ListIncidenciasNoReloj = listaPicada.Where(Function(x) x.EsInciReloj = False).OrderBy(Function(x) x.orden).ThenBy(Function(x) x.Descripcion).ToList

        Dim lista
        Dim listaSub

        'Dim descrip
        'Dim sec
        Dim idGrupo = Session("idGrupo")
        If tipo = "p" Then
            'sec = "Permisos"
            'descrip = listaGruposSoli.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
            lista = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = True And x.idGrupo = idGrupo AndAlso x.idSubgrupo Is "" AndAlso x.visibleWeb = True)
            listaSub = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = True And x.idGrupo = idGrupo AndAlso x.idSubgrupo IsNot "" AndAlso x.visibleWeb = True)

        ElseIf tipo = "i" Then
            'sec = "Incidencias"
            'descrip = listaGruposInci.FirstOrDefault(Function(x) x.idGrupo = idGrupo).Descripcion
            lista = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = False And x.idGrupo = idGrupo AndAlso x.idSubgrupo Is "" AndAlso x.visibleWeb = True)
            listaSub = ListIncidenciasNoReloj.Where(Function(x) x.RequiereAprobacion = False And x.idGrupo = idGrupo AndAlso x.idSubgrupo IsNot "" AndAlso x.visibleWeb = True)
        ElseIf tipo Is Nothing OrElse tipo = "" Then
            lista = ListIncidenciasNoReloj.Where(Function(x) x.idGrupo = idGrupo AndAlso x.idSubgrupo Is "")
            listaSub = ListIncidenciasNoReloj.Where(Function(x) x.idGrupo = idGrupo AndAlso x.idSubgrupo IsNot "")
        End If
        'Dim html As String = "<ul class='ListaMenu'>"
        'For Each item As Incidencia In lista
        '    html += "<li><a onclick=""redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + item.idIncidencias + "&t=" + tipo + """>" + item.Descripcion.Replace("""", "") + "</a></li>"
        'Next
        'html += "</ul>"

        Dim idInci = Session("idInci")

        Dim html = "<ul>"
        For Each inci As Incidencia In lista
            If inci.idIncidencias = idInci Then
                html += "<li id=""" + inci.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat listActivo""><a onclick=""redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + inci.idIncidencias.ToString + "&t=" + tipo + """>" + inci.Nombre + "</a></li>"
            Else
                html += "<li id=""" + inci.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat""><a onclick=""redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + inci.idIncidencias.ToString + "&t=" + tipo + """>" + inci.Nombre + "</a></li>"
            End If

        Next
        For Each inci As Incidencia In listaSub
            If inci.idIncidencias = idInci Then
                html += "<li id=""" + inci.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat listActivo""><a onclick=""redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + inci.idIncidencias.ToString + "&t=" + tipo + """>" + inci.Nombre + "</a></li>"
            Else
                html += "<li id=""" + inci.Descripcion.Replace(" ", "") + "BL"" class=""obtListLat""><a onclick=""redirigir()"" href=""/SolicitudesComunicaciones.aspx?idInci=" + inci.idIncidencias.ToString + "&t=" + tipo + """>" + inci.Nombre + "</a></li>"
            End If

        Next
        html += "</ul>"
        navLateral.InnerHtml = html

        'listMenu.InnerHtml = html

    End Sub
    <System.Web.Services.WebMethod()>
    Public Shared Function InpIncidencia(FechaInicio As String, FechaFin As String, cadenaFechas As String, cadenaHoras As String, inicio As String, final As String, incidencia As String, horaIniManana As String, horaFinManana As String, totalHoraManana As String, horaIniTarde As String, horaFinTarde As String, totalHoraTarde As String, inpObservaciones As String, fichero As Object, EsPropuesta As Boolean) As String

        Dim inciActual As Incidencia = HttpContext.Current.Session("incidencia")
        Dim rangosDeFechas As New List(Of String)
        Dim rangosDeHoras As New List(Of String)
        rangosDeFechas.Add(FechaInicio)
        If FechaFin = "" Then
            FechaFin = FechaInicio
        End If
        rangosDeFechas.Add(FechaFin)
        Dim fechas = cadenaFechas.Split(",")
        Dim Horas = cadenaHoras.Split(",")

        If fechas(0) <> "" Then
            If inciActual.AdmiteIntervaloDias = True Then
                For Each item As String In fechas
                    rangosDeFechas.Add(item)
                Next
            Else
                For Each item As String In fechas
                    rangosDeFechas.Add(item)
                    rangosDeFechas.Add(item)
                Next
            End If
        End If
        If Horas(0) <> "" AndAlso Horas.Count > 1 Then
            If Horas.Count > 0 Then
                For Each item As String In Horas
                    rangosDeHoras.Add(item)
                Next
            End If
        Else
            Dim cantidadHoras As Integer = rangosDeFechas.Count * 3
            For i As Integer = 1 To cantidadHoras
                rangosDeHoras.Add("")
            Next

        End If
        Dim ficherosAdjuntos As New List(Of listadoFich)
        If inciActual.Adjunto <> "NO" Then
            For num As Integer = 0 To fichero.length - 1
                Dim newfich As New listadoFich
                newfich.id = fichero(num)("id")
                newfich.fichero = fichero(num)("fichero")
                ficherosAdjuntos.Add(newfich)
            Next

        End If
        Dim txt = ""
        For numb As Integer = 0 To rangosDeFechas.Count - 1 Step 2
            Dim inicioTick = rangosDeFechas(numb)
            Dim FinalTick = rangosDeFechas(numb + 1)
            Dim fechIni = rangosDeFechas(numb)
            Dim fechFin = rangosDeFechas(numb + 1)
            Dim sessionUsuario As String = HttpContext.Current.Session("usuario")
            ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
            Dim clienteHTTP1 As New Net.WebClient()
            clienteHTTP1.Encoding = System.Text.Encoding.UTF8
            Dim nif = sessionUsuario

            If numb <> 0 Then
                horaIniManana = rangosDeHoras(0)
                horaFinManana = rangosDeHoras(1)
                totalHoraManana = rangosDeHoras(2)
                horaIniTarde = rangosDeHoras(3)
                horaFinTarde = rangosDeHoras(4)
                totalHoraTarde = rangosDeHoras(5)
                rangosDeHoras = rangosDeHoras.Skip(6).ToList
            End If
            Dim ficheroInci As String
            If inciActual.Adjunto <> "NO" Then
            End If

            If horaIniManana = "" Or horaIniManana = "undefined" Then
                horaIniManana = "00:00"
            End If
            If horaFinManana = "" Or horaFinManana = "undefined" Then
                horaFinManana = "00:00"
            End If
            If horaIniTarde = "" Or horaIniTarde = "undefined" Then
                horaIniTarde = "00:00"
            End If
            If horaFinTarde = "" Or horaFinTarde = "undefined" Then
                horaFinTarde = "00:00"
            End If
            If totalHoraManana = "" Or totalHoraManana = "undefined" Then
                totalHoraManana = "00:00"
            End If
            If totalHoraTarde = "" Or totalHoraTarde = "undefined" Then
                totalHoraTarde = "00:00"
            End If

            Dim tieneAdjunto = False
            Dim ficheroActual As String
            Dim respuesta
            For Each fc As listadoFich In ficherosAdjuntos
                Dim ficheroActual1 = ficherosAdjuntos.FirstOrDefault(Function(x) x.id = numb.ToString + "file")
                If ficheroActual1 IsNot Nothing Then
                    tieneAdjunto = True
                    ficheroActual = ficheroActual1.fichero
                End If
            Next


            Dim inpExpediente = ""
            Dim FechaIniciores = fechIni.Substring(5, 2) & "%2F" & fechIni.Substring(8, 2) & "%2F" & fechIni.Substring(0, 4)
            Dim FechaFinres = fechFin.Substring(5, 2) & "%2F" & fechFin.Substring(8, 2) & "%2F" & fechFin.Substring(0, 4)
            Dim url1 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/GenAsisEntreFechas?nif=" + nif + "&FechaInicio=" + FechaIniciores + "&FechaFin=" + FechaFinres + "&idincidencia=" + incidencia + "&horainiciomanana=" + horaIniManana.Replace(":", "%3A") + "&horafinmanana=" + horaFinManana.Replace(":", "%3A") + "&horastrabajadasmanana=" + totalHoraManana.Replace(":", "%3A") + "&horainiciotarde=" + horaIniTarde.Replace(":", "%3A") + "&horafintarde=" + horaFinTarde.Replace(":", "%3A") + "&horastrabajadastarde=" + totalHoraTarde.Replace(":", "%3A") + "&EsPropuesta=" + EsPropuesta.ToString.ToLower + "&observaciones=" + inpObservaciones + "&expediente=" & inpExpediente & "&Adjunto=" & tieneAdjunto.ToString
            Dim sRespuesta1 As String = clienteHTTP1.UploadString(url1, "")
            Dim datos As Newtonsoft.Json.Linq.JObject =
            Newtonsoft.Json.JsonConvert.DeserializeObject(Of Newtonsoft.Json.Linq.JObject)(sRespuesta1)
            Dim sbResultado As New Text.StringBuilder()
            sbResultado.AppendFormat("Resultado: {0}{1}", datos.Item("Resultado").ToString, vbCrLf)
            sbResultado.AppendFormat("Mensaje: {0}{1}", datos.Item("Mensaje"), vbCrLf)
            Dim settings As New Newtonsoft.Json.JsonSerializerSettings()
            settings.CheckAdditionalContent = True
            Dim objetoDatos As ResultadoGenAsisEntreFechas =
        Newtonsoft.Json.JsonConvert.DeserializeObject(Of ResultadoGenAsisEntreFechas)(sRespuesta1, settings)
            Debug.WriteLine("Resultado: " & objetoDatos.Resultado)
            Debug.WriteLine("Mensaje: " & objetoDatos.Mensaje)
            Dim clienteHTTP2 As New Net.WebClient()
            Dim idAsistencia = objetoDatos.idAsistencia



            'Dim objetoaAlmacenar As New Models.AlmacenaFicheroIncidencia
            'objetoaAlmacenar.idAsistencia = idAsistencia
            'objetoaAlmacenar.Fichero = ficheroActual
            'Dim jsonalmacenar As String = JsonConvert.SerializeObject(objetoaAlmacenar)
            If inciActual.Adjunto IsNot "NO" Then

                If ficheroActual IsNot Nothing OrElse ficheroActual IsNot "" Then
                    respuesta = Almacenafichero(idAsistencia, ficheroActual)
                End If


            End If

            txt += "<p style=""" + If(objetoDatos.Resultado = 0, "color:green", "color:red") + """>" + objetoDatos.Mensaje + "</p>"

        Next
        Return txt
    End Function
    <System.Web.Services.WebMethod()>
    Public Shared Async Function Almacenafichero(id As String, cuerpo As String) As Task(Of String)
        Try

            Dim ruta = "incidencia/" + id + ".pdf"

            'Dim archivo As Byte() = System.Text.Encoding.Unicode.GetBytes(file)

            Dim ObjetoConsulta As New FicheroAtrasnmitir
            ObjetoConsulta.idRegistro = id
            ObjetoConsulta.tabla = "INCIDENCIA"
            'ObjetoConsulta.Fichero = System.Convert.ToBase64String(archivo)
            ObjetoConsulta.Fichero = cuerpo

            Dim jsonConsulta As String = JsonConvert.SerializeObject(ObjetoConsulta)
            Dim url As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/AlmacenaFicheroAtransmitir"

            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 ResultadoAlmacenaFicheroAtransmitir =
            Newtonsoft.Json.JsonConvert.DeserializeObject(Of ResultadoAlmacenaFicheroAtransmitir)(sRespuesta, settings)
            'ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(Function() True)
            'Dim clienteHTTP2 As New Net.WebClient()
            'clienteHTTP2.Encoding = System.Text.Encoding.UTF8
            'clienteHTTP2.Headers.Add("Content-Type", "application/json")
            'Dim url2 As String = ConfigurationManager.AppSettings("RutaRes").ToString + "/api/AlmacenaFicheroIncidencia"
            'Dim sRespuesta2 As String = clienteHTTP2.UploadString(url2, cuerpo)
        Catch ex As Exception
            Debug.Print(ex.Message)
            Debug.Print(ex.StackTrace)
        End Try
    End Function
End Class