Files
SIG/Compras/EvaluacionProveedor.aspx.vb

504 lines
24 KiB
VB.net

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("<html xmlns=""http://www.w3.org/1999/xhtml""> ")
strBody.Append("<head> ")
strBody.Append(" <style type=""text/css""> ")
strBody.Append(" body ")
strBody.Append(" { ")
strBody.Append(" margin:0px; ")
strBody.Append(" padding:0px 0px 0px 0px; ")
strBody.Append(" font-family: Verdana, Arial, Helvetica, sans-serif; ")
strBody.Append(" font-size: 10px; ")
strBody.Append(" background-color:#F0F0F0; ")
strBody.Append(" } ")
strBody.Append(" a.Texto ")
strBody.Append(" { ")
strBody.Append(" font-size:11px; ")
strBody.Append(" background-color:#F7F6F3; ")
strBody.Append(" text-decoration:none; ")
strBody.Append(" font-weight:bold; ")
strBody.Append(" } ")
strBody.Append(" .Texto ")
strBody.Append(" { ")
strBody.Append(" background-color:#F7F6F3; color:Black; font-family:Verdana; font-size:10px; text-align:center; vertical-align:middle; height:20px;")
strBody.Append(" } ")
strBody.Append(" .TextoAlterno ")
strBody.Append(" { ")
strBody.Append(" background-color:White; color:Black; font-family:Verdana; font-size:10px; text-align:center; ")
strBody.Append(" vertical-align:middle; height:20px;")
strBody.Append(" } ")
strBody.Append(" .BarraIdentidad ")
strBody.Append(" { ")
strBody.Append(" color:#FFFFFF; ")
strBody.Append(" background:#F0F0F0; ")
strBody.Append(" font-weight:bold; ")
strBody.Append(" font-size:19px; ")
strBody.Append(" font-style:oblique; ")
strBody.Append(" } ")
strBody.Append(" .Titulos ")
strBody.Append(" { ")
strBody.Append(" background-color: Gray;")
strBody.Append(" color:White; ")
strBody.Append(" font-family:Verdana; font-size:12px; text-align:center; ")
strBody.Append(" vertical-align:middle; font-weight:bold; height:30px; ")
strBody.Append(" text-decoration:none; ")
strBody.Append(" } ")
strBody.Append(" .Verde {color: #00CC00;} ")
strBody.Append(" .Negro {color: #000000;} ")
strBody.Append(" .Rojo {color: #FF0000;} ")
strBody.Append(" </style> ")
strBody.Append("</head> ")
strBody.Append("<body> ")
strBody.Append(" <h5> ")
strBody.Append(" Estimado proveedor, la última compra registrada ha sido evaluada por nuestro personal de compras, Aqui mostramos el resultado:")
strBody.Append(" </h5> ")
strBody.Append(" <div id=""C_divOC"" style=""width: 550px""> <fieldset> <legend><b> Datos de la evaluación</b></legend> ")
strBody.Append(" <table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""550px""> ")
strBody.Append(" <tr style=""height: 22px""> ")
strBody.AppendFormat(" <td style=""width: 90px""> Empresa que evalua:</td><td colspan=""3""><b>{0}</b></td> ", Empresa)
strBody.Append(" </tr> ")
strBody.Append(" <tr style=""height: 22px""> ")
strBody.AppendFormat(" <td style=""width: 90px""> Proveedor:</td><td colspan=""3""><b>{0}</b></td> ", Proveedor)
strBody.Append(" </tr> ")
strBody.Append(" <tr style=""height: 22px""> ")
strBody.AppendFormat(" <td>Serie-Folio:</td><td colspan='3'><b>{0}</b></td> ", SerieFolio)
strBody.Append(" </tr> ")
strBody.Append(" <tr style=""height: 22px""> ")
strBody.AppendFormat(" <td>Fecha:</td><td colspan='3'><b>{0}</b></td> ", Fecha.ToString("dd/MM/yyyy"))
strBody.Append(" </tr> ")
strBody.Append(" <tr style=""height: 22px""> ")
strBody.AppendFormat(" <td style=""width: 90px""> Resultado :</td><td colspan=""3""><b>{0}</b></td> ", Resultado)
strBody.Append(" </tr> ")
strBody.Append(" </table> ")
strBody.Append(" </fieldset> ")
strBody.Append(" <h5> ")
strBody.Append(" Adjunto a este correo encontrará los puntos de la evaluación y su calificación.")
strBody.Append(" </h5> ")
strBody.Append(" </div> ")
strBody.Append("</body></html>")
Catch ex As Exception
OnError("Ocurrio un error al general el correo.", ex)
End Try
Return strBody.ToString()
End Function
#End Region
End Class