From 1dac30ebcb8bb8c7fc978451a65edcecfa6cb977 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 11 Oct 2024 22:38:56 -0700 Subject: [PATCH] =?UTF-8?q?--=20mejoras=20para=20env=C3=ADo=20mensajes=20S?= =?UTF-8?q?MS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsPaginas.vb | 26 +++++++++++++-- App_Code/modExtensiones.vb | 20 +++++++++++ Inventarios/EntregaAlmacen.aspx.vb | 1 - OS/Asignaciones.aspx.vb | 53 +++++++++++++++++++++++------- OS/OrdenesServicios.aspx.vb | 53 ++++++++++++++++++++++++++---- 5 files changed, 131 insertions(+), 22 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 43141b6c8..e80820061 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -11076,19 +11076,35 @@ Public Class ClsPaginas Contenido.AppendFormat("Pedido: {1}
", CveOS, Folio) Case 6 Asunto = "Tu pedido ha sido entregado" + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Case 7 + Asunto = $"Se te ha asignado una CX:{FechaCirugía.ToString("dd/MM/yyyy HH:mm")}" Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Case 8 + Asunto = "Tu CX ha sido asignada" + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) Case 9 Asunto = "Material Utilizado en tu CX" - Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) Case 10 Asunto = "Material por recolectar; Remisión: " & Remision - Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) Case 11 Asunto = "Sin material por recolectar ; Remisión " & Remision - Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) Case 12 Asunto = "Remisión por facturar:" & Folio Contenido.AppendFormat("Remisión: {1}
", CveOS, Folio) + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Case 13 + Asunto = "Cirugía Cancelada" + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Case 14 + Asunto = "Cirugía Cancelada; Remisión " & Remision + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) + Case 15 + Asunto = "Cirugía Cancelada; OS " & Folio + Contenido.AppendFormat("

OS: {1}

", CveOS, Folio) End Select Contenido.AppendFormat("Fecha y hora de cx: {0}
", FechaCirugía.ToString("dd/MM/yyyy HH:mm")) @@ -11114,8 +11130,12 @@ Public Class ClsPaginas End If End If + Contenido.AppendFormat("
CorreoDestino: {0}
", CorreoDestino) Contenido.Append(" ") Contenido.Append("") + + CorreoDestino = "rene.molina@adssistemas.mx" + If ObjMail.SendMail(tEmpresa, CorreoDestino, Asunto, Contenido.ToString) Then End If diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index c006c98f5..96c9a6d60 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -3698,6 +3698,26 @@ Namespace Extensiones Public Function FirstDayOfMonth(ByVal Fecha As Date) As Date Return New DateTime(Fecha.Year, Fecha.Month, 1) End Function + + Public Function ListaBusquedaValor(TextoArreglo As String, ValorBuscado As String, Optional Delimitador As Char = ";"c) As String + Dim Retorno As String = "" + ' Separar por ";" para obtener cada par clave:valor + Dim pairs() As String = TextoArreglo.Trim.Split(Delimitador) + For Each pair As String In pairs + ' Verificar que el par no esté vacío + If Not String.IsNullOrWhiteSpace(pair) Then + ' Separar por ":" para obtener clave y valor + Dim columns() As String = pair.Split(":"c) + If columns.Length = 2 Then + If columns(0) = ValorBuscado Then + Retorno = columns(1) + Exit For + End If + End If + End If + Next + Return Retorno + End Function Private ReadOnly Property ObjClsPaginas As ClsPaginas Get diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index a8eb475bc..249f4d0c8 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -3983,7 +3983,6 @@ Partial Class Inventarios_EntregaAlmacen ListMateriales.Add(New GenericaCantidadProducto With {.Cantidad = dRow("Cantidad").ToString.ToEntero, .Producto = dRow("PS").ToString}) Next - CorreoVendedor = "rene.molina@adssistemas.mx" Dim tCveOS As Integer = -1 Dim FolioOS As String = "-" Dim objOS As New ClsOS diff --git a/OS/Asignaciones.aspx.vb b/OS/Asignaciones.aspx.vb index 0d54934db..a76437c92 100644 --- a/OS/Asignaciones.aspx.vb +++ b/OS/Asignaciones.aspx.vb @@ -46,8 +46,6 @@ Partial Class OS_Asignaciones CargaClientes() CargaSubProyecto() - - If UsuarioActual.TienePermisoProceso(171) Then CargaOrdenesServiciosAsignadasXPersona() CargaOrdenesServiciosNoAsignadas() @@ -235,7 +233,7 @@ Partial Class OS_Asignaciones Dim TieneError As Boolean = False Dim CveEstatusOS As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 2", "CveEstatusOrdenServicio ASC").ToEntero - Dim time As DateTime + Dim tFechaHoraCita As DateTime Dim contadorOrdenesAsignadas As Integer = 0 Dim ObjOS As New ClsOS @@ -248,14 +246,14 @@ Partial Class OS_Asignaciones Dim picker As MKB.TimePicker.TimeSelector = DirectCast(row.FindControl("TimeSelector"), MKB.TimePicker.TimeSelector) If row.FCCheckBox("ChbxAsignar").Checked Then - time = DateTime.Parse(String.Format("{0} {1}:{2} {3}", row.FCTextBox("FechaOS").Text, picker.Hour, picker.Minute, If(picker.Hour < 12, TimeSelector.AmPmSpec.AM, TimeSelector.AmPmSpec.PM))) + tFechaHoraCita = DateTime.Parse(String.Format("{0} {1}:{2} {3}", row.FCTextBox("FechaOS").Text, picker.Hour, picker.Minute, If(picker.Hour < 12, TimeSelector.AmPmSpec.AM, TimeSelector.AmPmSpec.PM))) contadorOrdenesAsignadas += 1 If ObjOS.GetSubProyectosEstatusInicial(DdlTecnico.SelectedValue.ToEntero, 3, UsuarioActual.CveEmpresa) Then Dim subProyectoDelTecnico As DataTable subProyectoDelTecnico = ObjOS.DtResultados.FiltraParametros(String.Format("CveSubProyecto = {0}", row.DataKey("CveSubProyecto"))) If subProyectoDelTecnico.Rows.Count > 0 Then - If Not ObjOS.UpdateOrdenesServiciosAsignadas(row.DataKey("CveOSDetalle").ToEntero, DdlTecnico.SelectedValue.ToEntero, row.FCTextBox("FechaOS").Text.ToDate, time, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then + If Not ObjOS.UpdateOrdenesServiciosAsignadas(row.DataKey("CveOSDetalle").ToEntero, DdlTecnico.SelectedValue.ToEntero, row.FCTextBox("FechaOS").Text.ToDate, tFechaHoraCita, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then TieneError = True End If Else @@ -274,10 +272,10 @@ Partial Class OS_Asignaciones If Not TieneError Then Dim RecurrenciaTipo As Integer = 0, Frecuencia As Integer = -1, DiasSemana As String = "-1", Dias As Integer = -1, Mes As Integer = -1, RecurrenciaFin As String = "-1" - Dim Fecha As DateTime = time + Dim Fecha As DateTime = tFechaHoraCita OIDescripcion = $"Orden de servicio {row.DataKey("Folio")} " - If Not ObjEventos.AddEventoAgenda(2, DdlTecnico.SelectedItem.Text, $"{DdlTecnico.SelectedItem.Text} {OIDescripcion}", 2, time, time.AddHours(1), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, + If Not ObjEventos.AddEventoAgenda(2, DdlTecnico.SelectedItem.Text, $"{DdlTecnico.SelectedItem.Text} {OIDescripcion}", 2, tFechaHoraCita, tFechaHoraCita.AddHours(1), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, RecurrenciaTipo:=RecurrenciaTipo, Frecuencia:=Frecuencia, DiasSemana:=DiasSemana, Dia:=Dias, Mes:=Mes, RecurrenciaFin:=RecurrenciaFin, CveTipoEvento:=2, Importe:=0, CveOS:=row.DataKey("CveOS").ToEntero, CveSubProyecto:=row.DataKey("CveSubProyecto").ToEntero) Then TieneError = True @@ -285,14 +283,15 @@ Partial Class OS_Asignaciones End If If Not TieneError Then - If Not AgendarCirugia(ObjEventos, row.DataKey("CveOS").ToEntero, time, DdlTecnico.SelectedValue.ToEntero(), row.DataKey("Medico"), row.DataKey("Procedimiento"), row.DataKey("Nombre"), OIDescripcion) Then + If Not AgendarCirugia(ObjEventos, row.DataKey("CveOS").ToEntero, tFechaHoraCita, DdlTecnico.SelectedValue.ToEntero(), row.DataKey("Medico"), row.DataKey("Procedimiento"), row.DataKey("Nombre"), OIDescripcion) Then TieneError = True End If End If Dim CorreoAsignado As String = GlobalDTUsuarios(DdlTecnico.SelectedValue.ToEntero, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo").ToString If Not TieneError AndAlso CorreoAsignado <> "" Then - MandaCorreOS(row.DataKey("CveOS").ToEntero, CorreoAsignado, TrasaccionSql:=ObjOS.IniciaTransacSQL) + 'MandaCorreOS(row.DataKey("CveOS").ToEntero, CorreoAsignado, TrasaccionSql:=ObjOS.IniciaTransacSQL) + MandaCorreOSSMS(row.DataKey("CveOS").ToEntero, CorreoAsignado, row.DataKey("Folio"), row.DataKey("Nombre"), row.DataKey("Procedimiento"), row.DataKey("Medico"), DdlTecnico.SelectedItem.Text, tFechaHoraCita, TransaccionSql:=ObjOS.IniciaTransacSQL) End If End If End If @@ -310,6 +309,7 @@ Partial Class OS_Asignaciones Alert("Se asignaron las ordenes de servicio correctamente", TipoMensaje.MsgInformacion) CargaOrdenesServiciosAsignadasXPersona() CargaOrdenesServiciosNoAsignadas() + Else ObjOS.RollBack() Alert("Ocurrió un error al asignar", TipoMensaje.MsgAdvertencia) @@ -325,6 +325,7 @@ Partial Class OS_Asignaciones UpOS.Update() End Sub + Protected Function AgendarCirugia(ByRef ObjEventos As ClsOIEventos, CveOS As Integer, FechaCirugia As DateTime, CveUsuarioAgendar As Integer, Medico As String, Procedimiento As String, Hospital As String, OIDescripcion As String) As Boolean Dim TieneError As Boolean = False Try @@ -363,8 +364,6 @@ Partial Class OS_Asignaciones Private Sub MandaCorreOS(CveOS As Integer, CorreoUsuarioAsignado As String, ByRef TrasaccionSql As SqlClient.SqlTransaction) - - Dim ObjOS As New ClsOS(TrasaccionSql) Dim params As New List(Of ReportParameter) Dim CveFolio As String = "" @@ -501,6 +500,38 @@ Partial Class OS_Asignaciones + End Sub + + + Private Sub MandaCorreOSSMS(CveOS As Integer, CorreoUsuarioAsignado As String, Folio As String, NombreCliente As String, Procedimiento As String, Medico As String, Tecnico As String, FechaCirugia As DateTime, ByRef TransaccionSql As SqlClient.SqlTransaction) + + Dim ObjOS As New ClsOS(TransaccionSql) + Dim FolioOS As String = "" + If ObjOS.GetOrdenesServicios(CveOS, -1, -1, -1, -1, UsuarioActual.CveEmpresa) Then + If ObjOS.DtResultados.Rows.Count > 0 Then + + Dim dtOS As DataTable = ObjOS.DtResultados + Dim dr As DataRow = dtOS.Rows(0) + Dim ListMateriales As List(Of GenericaCantidadProducto) = Nothing + If ObjOS.GetDetalleMateriales(-1, CveOS) Then + ListMateriales = New List(Of GenericaCantidadProducto) + For Each dRow As DataRow In ObjOS.DtResultados.Rows + ListMateriales.Add(New GenericaCantidadProducto With {.Cantidad = dRow("CantidadSolicitada").ToString.ToEntero, .Producto = dRow("PS").ToString}) + Next + End If + Dim CorreoDestino As String = CorreoUsuarioAsignado + Dim Vendedor As String = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Vendedor", $"CveVendedor ={dr("CveVendedor")}") + + 'técnico + CorreoDestino = CorreoUsuarioAsignado + EnviaNotificacionSMS(7, UsuarioActual.Empresa, CveOS, Folio, FechaCirugia, NombreCliente, Medico, Procedimiento, Tecnico, Vendedor, "", ListMateriales, CorreoDestino) + 'vendedor + CorreoDestino = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo", $"CveVendedor ={dr("CveVendedor")}") + EnviaNotificacionSMS(8, UsuarioActual.Empresa, CveOS, Folio, FechaCirugia, NombreCliente, Medico, Procedimiento, Tecnico, Vendedor, "", ListMateriales, CorreoDestino) + + End If + End If + End Sub Private Sub SendmailOS() diff --git a/OS/OrdenesServicios.aspx.vb b/OS/OrdenesServicios.aspx.vb index 03c3e8f0d..8e2726370 100644 --- a/OS/OrdenesServicios.aspx.vb +++ b/OS/OrdenesServicios.aspx.vb @@ -5,6 +5,7 @@ Imports Extensiones Imports System.IO Imports System.Data Imports System.Data.SqlClient +Imports APP_Code_CSharp Partial Class OS_OrdenesServicios Inherits ClsPaginas @@ -34,6 +35,15 @@ Partial Class OS_OrdenesServicios ViewState("CveFolio") = value End Set End Property + + Private Property CveVendedor As Integer + Get + Return ViewState("CveVendedor").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("CveVendedor") = value + End Set + End Property Private Property CveSub As Integer Get Return ViewState("CveSub").ToString.ToEntero @@ -710,6 +720,7 @@ Partial Class OS_OrdenesServicios TxtPaciente.Text = ObjOS.Paciente TxtIdentificadorCliente.Text = ObjOS.IdentificadorCliente TxtFolioAdicional.Text = ObjOS.FolioAdicional + CveVendedor = ObjOS.DtResultados.FiltroPrimeroValor("CveVendedor").ToEntero CargaEventoBitacora() CargaHistorial() @@ -3392,16 +3403,18 @@ Partial Class OS_OrdenesServicios RegistraScript("$('#DivModalMaterialUtilizado').modal('hide');") CargaEventoBitacora() - Dim CorreoDestino As String = "rene.molina@adssistemas.mx" - 'genera notificación + Dim CorreoDestino As String = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo", $"CveVendedor ={ CveVendedor }") + If ListMaterialesUtil.Count > 0 Then 'notif a almacen de mat utilizado + EnviaNotificacionSMS(9, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, "vendedor", TxtFolioRemisionModal.Text, ListMaterialesUtil, CorreoDestino) + End If + CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("Almacén") + 'genera notificación almacen If AplicaDevolucion Then 'notif a almacen de devolución EnviaNotificacionSMS(10, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, "vendedor", TxtFolioRemisionModal.Text, ListMaterialesDev, CorreoDestino) Else EnviaNotificacionSMS(11, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, "vendedor", TxtFolioRemisionModal.Text, ListMaterialesDev, CorreoDestino) End If - If ListMaterialesUtil.Count > 0 Then 'notif a almacen de mat utilizado - EnviaNotificacionSMS(9, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, "vendedor", TxtFolioRemisionModal.Text, ListMaterialesUtil, CorreoDestino) - End If + CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("Facturación") If Respuesta IsNot Nothing Then 'notif de remisión generada EnviaNotificacionSMS(12, UsuarioActual.Empresa, Respuesta.CveVenta, Respuesta.SerieFolio, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, "vendedor", TxtFolioRemisionModal.Text, ListMaterialesUtil, CorreoDestino) End If @@ -3414,7 +3427,6 @@ Partial Class OS_OrdenesServicios End If End Sub - Private Function GuardarArchivoConfirmacion(ByRef transaccion As SqlTransaction, CveOSActual As Integer, CveVentaRemisionGenerada As Integer) As Boolean Dim respuesta As Boolean = False @@ -3718,10 +3730,37 @@ Partial Class OS_OrdenesServicios If resp.HuboError Then Alert($"Se presento un error al cancelar la orden de servicio, {resp.Mensaje}".ToString(), TipoMensaje.MsgError) Else - Alert($"la orden de servicio se cancelada correctamente, {resp.Mensaje}", resp.TipoMensaje, " location.reload(true); ") + Alert($"la orden de servicio se cancelada correctamente, {resp.Mensaje}", resp.TipoMensaje, " location.reload(true); ") Dim objGeneral As New ClsGenerales objGeneral.AddHistorialBitacora(256, -1, -1, -1, CveOS, -1, -1, -1, "Cancelada", DdlEstatusOS.SelectedItem.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, "", "", "") objGeneral.Dispose() + + Dim ListMateriales As List(Of GenericaCantidadProducto) = Nothing + Dim ObjOS As New ClsOS + If ObjOS.GetDetalleMateriales(-1, CveOS) Then + ListMateriales = New List(Of GenericaCantidadProducto) + For Each dRow As DataRow In ObjOS.DtResultados.Rows + If dRow("Cantidad").ToString.ToEntero > 0 Then + ListMateriales.Add(New GenericaCantidadProducto With {.Cantidad = dRow("Cantidad").ToString.ToEntero, .Producto = dRow("PS").ToString}) + End If + Next + End If + ObjOS.Dispose() + Dim Vendedor As String = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Vendedor", $"CveVendedor ={ CveVendedor }") + Dim CorreoVendedor As String = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo", $"CveVendedor ={ CveVendedor }") + + 'vendedor + EnviaNotificacionSMS(13, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, Vendedor, TxtFolioRemisionModal.Text, Nothing, CorreoVendedor) + + Dim CorreoDestino As String = "" + 'almacen + CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("Almacén") + EnviaNotificacionSMS(14, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, Vendedor, TxtFolioRemisionModal.Text, Nothing, CorreoDestino) + If DdlTecnico.SelectedValue.ToEntero > 0 Then + 'jefe de técnicos + CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("JefeTécnicos") + EnviaNotificacionSMS(15, UsuarioActual.Empresa, CveOS, LblFolio.Text, TxtFechaCita.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, DdlTecnico.SelectedItem.Text, Vendedor, TxtFolioRemisionModal.Text, Nothing, CorreoDestino) + End If End If End If Catch ex As Exception