Option Explicit On Option Strict On Imports GemBox.Document Imports System.Data Imports Extensiones Imports System.Globalization Imports System.IO Imports System.Linq Partial Class Compras_EvaluacionProveedor Inherits ClsPaginas #Region "P R O P I E D A D E S" Private Property CveEvaluacionProveedor() As Integer Get Return If(IsNothing(ViewState("CveEvaluacionProveedor")), -1, CInt(ViewState("CveEvaluacionProveedor"))) End Get Set ViewState("CveEvaluacionProveedor") = Value End Set End Property Private Property CveProveedor() As Integer Get Return If(IsNothing(ViewState("CveProveedor")), -1, CInt(ViewState("CveProveedor"))) End Get Set ViewState("CveProveedor") = Value End Set End Property Private Property CveCompra() As Integer Get Return If(IsNothing(ViewState("CveCompra")), -1, CInt(ViewState("CveCompra"))) End Get Set ViewState("CveCompra") = Value End Set End Property Private Property DtPreguntas() As DataTable Get Return If(IsNothing(ViewState("DtPreguntas")), New DataTable(), DirectCast(ViewState("DtPreguntas"), DataTable)) End Get Set ViewState("DtPreguntas") = Value End Set End Property Private Property CorreoEnvio() As String Get Return If(IsNothing(ViewState("CorreoEnvio")), "", ViewState("CorreoEnvio").ToString()) End Get Set ViewState("CorreoEnvio") = Value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then 'EVALUACION DEL PROVEEDOR If UsuarioActual.Empresa.Funcionalidad(560) = "1" Then CargaEvaluacionProveedor() End If End If End Sub #Region "C A R G A - D A T O S" Protected Sub LimpiarDatos() If Request("CveEvaluacionProveedor") IsNot Nothing AndAlso Request("CveEvaluacionProveedor").ToString().ToEntero() > 0 Then CveEvaluacionProveedor = Request("CveEvaluacionProveedor").ToString().ToEntero() Else CveEvaluacionProveedor = -1 End If If Request("CveProveedor") IsNot Nothing AndAlso Request("CveProveedor").ToString().ToEntero() > 0 Then CveProveedor = Request("CveProveedor").ToString().ToEntero() Else CveProveedor = -1 End If If Request("CveCompra") IsNot Nothing AndAlso Request("CveCompra").ToString().ToEntero() > 0 Then CveCompra = Request("CveCompra").ToString().ToEntero() Else CveCompra = -1 End If CorreoEnvio = "" GvPreguntas.DataSource = DtPreguntas GvPreguntas.DataBind() TxtRS.Text = "" TxtSerieFolio.Text = "" TxtPS.Text = "" TxtCodigo.Text = "" TxtFecha.Text = Now.ToString("dd/MM/yyyy") TxtFirma.Text = UsuarioActual.Nombre TxtCalificacion.Text = "" UpEvaluacion.Update() End Sub Protected Sub CargaEvaluacionProveedor() LimpiarDatos() Dim ObjProve As New ClsCompProveedores If ObjProve.GetEvaluacionesProveedores(Me.CveEvaluacionProveedor, Me.CveProveedor, UsuarioActual.CveEmpresa) Then GvEvaluaciones.DataSource = ObjProve.DtResultados.FiltraParametros($"Evaluado = 0 AND CveUsuario={UsuarioActual.CveUsuario}") End If If ObjProve.GetProveedoresEvaluacionPreguntas(UsuarioActual.CveEmpresa) Then DtPreguntas = ObjProve.DtResultados.Copy() End If ObjProve.Dispose() GvEvaluaciones.DataBind() GvPreguntas.DataSource = DtPreguntas GvPreguntas.DataBind() UpEvaluacion.Update() UpDatos.Update() End Sub Protected Sub CargaCompra() If Me.CveCompra > 0 Then Dim ObjCompras As New ClsCompras() If ObjCompras.GetCompras(CveCompra, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then If ObjCompras.DtResultados.Rows.Count > 0 Then TxtSerieFolio.Text = ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString() End If End If If ObjCompras.GetCompraDetalle(CveCompra) Then Dim StrPS As New StringBuilder() For Each Row As DataRow In ObjCompras.DtResultados.Rows If ObjCompras.DtResultados.Rows.Count > 1 Then StrPS.AppendFormat("{0};", Row("PSCodigo")) Else StrPS.AppendFormat("{0}", Row("PSCodigo")) End If Next TxtPS.Text = StrPS.ToString() End If ObjCompras.Dispose() End If End Sub #End Region #Region "E V E N T O S" Protected Sub LnkAplicarEvaluacion_Click(sender As Object, e As EventArgs) LimpiarDatos() Dim Row As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Me.CveEvaluacionProveedor = Row.DataKey("CveEvaluacionProveedor").ToEntero() Me.CveProveedor = Row.DataKey("CveProveedor").ToEntero() Me.CveCompra = Row.DataKey("CveCompra").ToEntero() Me.CorreoEnvio = Row.DataKey("ContactoMail") CargaCompra() TxtRS.Text = Row.DataKey("RazonSocial") TxtCodigo.Text = Row.DataKey("Codigo") TxtFecha.Text = Now.ToString("dd/MM/yyyy") UpEvaluacion.Update() RegistraScript("$('#DvEvaluacion').modal('show');IniciarCalculo();") End Sub Protected Sub BtnEvaluarProveedor_Click(sender As Object, e As EventArgs) CalcularCalificacion() Dim Fecha = Now Dim Mes = Fecha.ToString("MMMM", New CultureInfo("es-MX")) Dim Obs = TxtObs.Text.Trim() Dim Firma = TxtFirma.Text Dim Calificacion = TxtCalificacion.Text.ToEntero() Dim GuardoEvaluacion As Boolean = GuardarEvaluacion(Fecha, Obs, Calificacion.ToString(), Firma) If GuardoEvaluacion AndAlso Me.CveEvaluacionProveedor > 0 Then Alert("La evaluación del proveedor se guardo correctamente.") Dim Resultado As String = "" If Calificacion.Contiene(0, 1, 2) Then Resultado = "No Satisfactorio" ElseIf Calificacion.Contiene(3, 4) Then Resultado = "Mejoras" ElseIf Calificacion.Contiene(5, 6) Then Resultado = "Satisfactorio" End If EnviarCorreo(CorreoEnvio, TxtRS.Text, Fecha.Day.ToString(), Mes, Calificacion.ToString(), Resultado) Else Alert("Ocurrió un error al guardar la evaluación del proveedor.", TipoMensaje.MsgAdvertencia) End If CargaEvaluacionProveedor() RegistraScript("$('#DvEvaluacion').modal('hide');") End Sub Protected Sub GvPreguntas_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("TipoDato") = "1" Then e.Row.CssClass = "Totales" e.Row.FCRadioButtonList("RblRespuesta").Visible = False End If End If End Sub #End Region #Region "G U A R D A - D A T O S" Protected Function GuardarEvaluacion(Fecha As DateTime, Obs As String, Calificacion As String, Firma As String) As Boolean Dim TieneError As Boolean = False If Me.CveEvaluacionProveedor <= 0 Then TieneError = True Return Not TieneError End If Dim ObjProve As New ClsCompProveedores ObjProve.IniciaTransacSQL() Try TieneError = Not ObjProve.UpdateEvaluacionProveedor(Me.CveEvaluacionProveedor, Fecha, Obs, Calificacion, Firma, True) If Not TieneError Then For Each Row As GridViewRow In GvPreguntas.Rows If Row.RowType = DataControlRowType.DataRow Then If Row.DataKey("TipoDato") = "2" Then Dim Respuesta As Integer = Row.FCRadioButtonList("RblRespuesta").SelectedValue.ToEntero() Dim CvePregunta = Row.DataKey("CvePreguntaEvaluacion").ToEntero() If Not ObjProve.AddEvaluacionProveedorDetalle(CveEvaluacionProveedor, CvePregunta, RespuestaBit:=Respuesta) Then TieneError = True Exit For End If End If End If Next Else TieneError = True End If Catch ex As Exception TieneError = True OnError("Ocurrió un error al agregar la evaluación", ex) Finally If TieneError Then ObjProve.RollBack() Else ObjProve.Commit() End If End Try ObjProve.Dispose() Return Not TieneError End Function Protected Sub CalcularCalificacion() Dim Calificacion As Integer = 0 For Each Row As GridViewRow In GvPreguntas.Rows If Row.RowType = DataControlRowType.DataRow Then If Row.DataKey("TipoDato") = "2" Then Dim Respuesta As Integer = Row.FCRadioButtonList("RblRespuesta").SelectedValue.ToEntero() If Respuesta.Contiene(1, -1) Then Calificacion += 1 End If End If End If Next TxtCalificacion.Text = Calificacion.ToString() UpEvaluacion.Update() End Sub #End Region #Region "E N V I O - C O R R E O" Protected Sub EnviarCorreo(Correo As String, Proveedor As String, Dia As String, Mes As String, Calificacion As String, Resultado As String) Dim ArchivoCarta = EnviarFormatoCarta(Correo, Proveedor, Dia, Mes, Calificacion, Resultado) Dim ArchivoEvaluacion = EnviarFormatoEvaluacion(Correo, Proveedor, Dia, Mes, Calificacion, Resultado) Dim Archivos As New List(Of ClsSisMail.ArchivoMail) Archivos.Add(ArchivoCarta) Archivos.Add(ArchivoEvaluacion) Dim Body As String = GeneraCorreo(UsuarioActual.Empresa.Empresa, Proveedor, TxtSerieFolio.Text, TxtFecha.Text.ToDate(), Resultado) Dim Asunto As String = String.Format("Evaluación de proveedor ISO") Try Dim Mail As New ClsSisMail() Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Correo, Asunto, Body, Archivos:=Archivos) Catch ex As Exception OnError("Ocurrió error al mandar MAIL por cambio de Estatus", ex) End Try End Sub Protected Function EnviarFormatoCarta(Correo As String, Proveedor As String, Dia As String, Mes As String, Calificacion As String, Resultado As String) As ClsSisMail.ArchivoMail Dim archivoCarta As New ClsSisMail.ArchivoMail() archivoCarta.NombreArchivo = "Carta Evaluacion.pdf" Try Dim PathRoot As String = ModExtensiones.DirectorioBaseEmpresas Dim Documento As String = "CartaProveedor.docx" Dim PathSource As String = $"{UsuarioActual.Empresa.Ruta}\Formatos\Plantillas\{Documento}" Dim PathDestino As String = PathRoot & "Temp\" & Now.Ticks & Documento If File.Exists(PathDestino) Then File.Delete(PathDestino) End If File.Copy(PathSource, PathDestino) Dim ObjCarta As New clsGemBoxDocument(PathDestino) ObjCarta.SustituirTags(GetTagsCartaEvaluacion(Proveedor, Dia, Mes, Calificacion, Resultado)) 'ObjCarta.Guardar(PathDestino) ObjCarta.GuardarStreamPDF() archivoCarta.ArchivoBinario = ObjCarta.GetBytesDocumento() Dim fileinfo As New FileInfo(PathDestino) Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) & "/temp/" & fileinfo.Name If File.Exists(PathDestino) Then File.Delete(PathDestino) End If Catch ex As Exception OnError("Ocurrió error al generar el formato", ex) End Try Return archivoCarta End Function Protected Function EnviarFormatoEvaluacion(Correo As String, Proveedor As String, Dia As String, Mes As String, Calificacion As String, Resultado As String) As ClsSisMail.ArchivoMail Dim archivoCarta As New ClsSisMail.ArchivoMail() archivoCarta.NombreArchivo = "Formato Evaluacion Proveedor.pdf" Try Dim PathRoot As String = ModExtensiones.DirectorioBaseEmpresas Dim Documento As String = "FormatoEvaluacionProveedor.docx" Dim PathSource As String = $"{UsuarioActual.Empresa.Ruta}\Formatos\Plantillas\{Documento}" Dim PathDestino As String = PathRoot & "Temp\" & Now.Ticks & Documento If File.Exists(PathDestino) Then File.Delete(PathDestino) End If File.Copy(PathSource, PathDestino) Dim ObjCarta As New clsGemBoxDocument(PathDestino) ObjCarta.SustituirTags(GetTagsFormatoEvaluacion()) 'ObjCarta.Guardar(PathDestino) ObjCarta.GuardarStreamPDF() archivoCarta.ArchivoBinario = ObjCarta.GetBytesDocumento() Dim fileinfo As New FileInfo(PathDestino) Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) & "/temp/" & fileinfo.Name If File.Exists(PathDestino) Then File.Delete(PathDestino) End If Catch ex As Exception OnError("Ocurrió error al generar el formato", ex) End Try Return archivoCarta End Function Protected Function GetTagsCartaEvaluacion(Proveedor As String, Dia As String, Mes As String, Calificacion As String, Resultado As String) As List(Of TagsDocumentos) Dim ListaTagsDocumentost = New List(Of TagsDocumentos) ListaTagsDocumentost.Add(New TagsDocumentos("{{Proveedor}}", Proveedor)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Dia}}", Dia)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Mes}}", Mes)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Anio}}", Now.Year.ToString)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Calificacion}}", Calificacion)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Resultado}}", Resultado)) 'ListaTagsDocumentost.Add(New TagsDocumentos("{{Usuario}}", UsuarioActual.Nombre)) Dim MensajeInvitacion As String = "Le invitamos a participar en la implementación de acciones para la mejora de sus procesos." Dim MensajeSatisfactorio As String = ", debido al cumplimiento de los criterios establecidos por Exploraciones Mineras del Desierto, S.A. de C.V" Dim MensajeMejoras As String = ", debido a la falta de cumplimiento de los criterios establecidos por Exploraciones Mineras del Desierto, S.A. de C.V. Se realizaron diferentes observaciones de la percepción del servicio, los cuales son:" Dim MensajeNoSatisfactorio As String = ", debido a la falta de cumplimiento de los criterios establecidos por Exploraciones Mineras del Desierto, S.A. de C.V" If Resultado = "No Satisfactorio" Then ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoTexto}}", MensajeNoSatisfactorio)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Observaciones}}", TxtObs.Text)) ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoInvitacion}}", MensajeInvitacion)) ElseIf Resultado = "Mejoras" Then ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoTexto}}", MensajeMejoras)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Observaciones}}", TxtObs.Text)) ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoInvitacion}}", MensajeInvitacion)) ElseIf Resultado = "Satisfactorio" Then ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoTexto}}", MensajeSatisfactorio)) ListaTagsDocumentost.Add(New TagsDocumentos("{{Observaciones}}", "")) ListaTagsDocumentost.Add(New TagsDocumentos("{{ResultadoInvitacion}}", "")) End If Return ListaTagsDocumentost End Function Protected Function GetTagsFormatoEvaluacion() As List(Of TagsDocumentos) Dim ListaTagsDocumentos = New List(Of TagsDocumentos) ListaTagsDocumentos.Add(New TagsDocumentos("{{Proveedor}}", TxtRS.Text.Trim())) ListaTagsDocumentos.Add(New TagsDocumentos("{{Codigo}}", TxtCodigo.Text.Trim())) ListaTagsDocumentos.Add(New TagsDocumentos("{{Fecha}}", TxtFecha.Text)) ListaTagsDocumentos.Add(New TagsDocumentos("{{PS}}", TxtPS.Text.Trim())) Dim IndexP As Integer = 1 Dim IndexG As Integer = 1 For Each Row As GridViewRow In GvPreguntas.Rows If Row.RowType = DataControlRowType.DataRow Then If Row.DataKey("TipoDato") = "1" Then ListaTagsDocumentos.Add(New TagsDocumentos("{{G" & IndexG & "}}", Row.DataKey("Preguntas"))) IndexG += 1 End If If Row.DataKey("TipoDato") = "2" Then Dim Respuesta As Integer = Row.FCRadioButtonList("RblRespuesta").SelectedValue.ToEntero() ListaTagsDocumentos.Add(New TagsDocumentos("{{P" & IndexP & "}}", Row.DataKey("Preguntas"))) ListaTagsDocumentos.Add(New TagsDocumentos("{{R1" & IndexP & "}}", If(Respuesta = 1, "X", ""))) ListaTagsDocumentos.Add(New TagsDocumentos("{{R0" & IndexP & "}}", If(Respuesta = 0, "X", ""))) ListaTagsDocumentos.Add(New TagsDocumentos("{{RN" & IndexP & "}}", If(Respuesta = -1, "X", ""))) IndexP += 1 End If End If Next ListaTagsDocumentos.Add(New TagsDocumentos("{{Observaciones}}", TxtObs.Text.Trim())) ListaTagsDocumentos.Add(New TagsDocumentos("{{Firma}}", TxtFirma.Text.Trim())) ListaTagsDocumentos.Add(New TagsDocumentos("{{Calificacion}}", TxtCalificacion.Text.Trim())) Return ListaTagsDocumentos End Function Protected Function GeneraCorreo(Empresa As String, Proveedor As String, SerieFolio As String, Fecha As DateTime, Resultado As String) As String Dim strBody As New StringBuilder Try strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append("
") strBody.Append(" Estimado proveedor, la última compra registrada ha sido evaluada por nuestro personal de compras, Aqui mostramos el resultado:") strBody.Append("
") strBody.Append("
Datos de la evaluación ") strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", Empresa) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", Proveedor) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", SerieFolio) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", Fecha.ToString("dd/MM/yyyy")) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", Resultado) strBody.Append(" ") strBody.Append("
Empresa que evalua:{0}
Proveedor:{0}
Serie-Folio:{0}
Fecha:{0}
Resultado :{0}
") strBody.Append("
") strBody.Append("
") strBody.Append(" Adjunto a este correo encontrará los puntos de la evaluación y su calificación.") strBody.Append("
") strBody.Append("
") strBody.Append("") Catch ex As Exception OnError("Ocurrio un error al general el correo.", ex) End Try Return strBody.ToString() End Function #End Region End Class