diff --git a/OS/OrdenesServicios.aspx.vb b/OS/OrdenesServicios.aspx.vb index d6b582596..e105ebc35 100644 --- a/OS/OrdenesServicios.aspx.vb +++ b/OS/OrdenesServicios.aspx.vb @@ -454,7 +454,7 @@ Partial Class OS_OrdenesServicios End If End If - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then BtnCancelar.Text = "Cancelar Cirugía" HplRegresar.NavigateUrl = "/OS/RepOSMedicas.aspx" @@ -2980,57 +2980,55 @@ Partial Class OS_OrdenesServicios End Sub Protected Sub LnkAccionesMaterialUtilizado_Click(sender As Object, e As EventArgs) + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then - LnkModalMaterialUtilizado.Visible = True - DTSolicitudDev = New DataTable - Dim Opcion As Integer = If(DdlTipoVenta.SelectedValue.Contiene("2", "3"), 2, 1) + LnkModalMaterialUtilizado.Visible = True + DTSolicitudDev = New DataTable + Dim Opcion As Integer = If(DdlTipoVenta.SelectedValue.Contiene("2", "3"), 2, 1) + Select Case DdlTipoVenta.SelectedValue.ToEntero + Case 1, 2 ' *Fuera de liena *pago directo + Opcion = 1 + Case 3 ' por el momento ya no se usa + Opcion = 2 + Case 5 ' consignacion uso + Opcion = 3 + Case 6 ' a vista uso de material + Opcion = 4 + Case Else + Opcion = 1 + End Select - Select Case DdlTipoVenta.SelectedValue.ToEntero - Case 1, 2 ' *Fuera de liena *pago directo - Opcion = 1 - Case 3 ' por el momento ya no se usa - Opcion = 2 - Case 5 ' consignacion uso - Opcion = 3 - Case 6 ' a vista uso de material - Opcion = 4 - Case Else - Opcion = 1 - End Select + Dim ObjOS As New ClsOS + If ObjOS.GetOrdenesServicioDevolucionMaterial(CveOS, If(UsuarioActual.Empresa.Funcionalidad(578) = "1", CvePedido, CveVenta), Opcion, UsuarioActual.CveEmpresa) Then + DTSolicitudDev = ObjOS.DtResultados + GvMU.DataSource = DTSolicitudDev + GvMU.Columns(3).Visible = DTSolicitudDev.MIN("Serie") <> "" + GvMU.Columns(4).Visible = DTSolicitudDev.MIN("Lote") <> "" + GvMU.Columns(5).Visible = DTSolicitudDev.MIN("FechaCaducidad") <> "" + End If + ObjOS.Dispose() + GvMU.DataBind() - Dim ObjOS As New ClsOS - If ObjOS.GetOrdenesServicioDevolucionMaterial(CveOS, If(UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1, CvePedido, CveVenta), Opcion, UsuarioActual.CveEmpresa) Then - DTSolicitudDev = ObjOS.DtResultados - GvMU.DataSource = DTSolicitudDev - GvMU.Columns(3).Visible = DTSolicitudDev.MIN("Serie") <> "" - GvMU.Columns(4).Visible = DTSolicitudDev.MIN("Lote") <> "" - GvMU.Columns(5).Visible = DTSolicitudDev.MIN("FechaCaducidad") <> "" - End If - ObjOS.Dispose() - GvMU.DataBind() + Dim EsDevolucionVenta As Boolean = (DTSolicitudDev.FiltroPrimeroValor("EsDevolucionVenta", "").ToEntero > 0) - Dim EsDevolucionVenta As Boolean = (DTSolicitudDev.FiltroPrimeroValor("EsDevolucionVenta", "").ToEntero > 0) + RegistraScript("$('#DivModalMaterialUtilizado').modal();") - RegistraScript("$('#DivModalMaterialUtilizado').modal();") + If EsDevolucionVenta Then + Alert("En la orden de servicio ya se determinó el material utilizado.", TipoMensaje.MsgAdvertencia) + LnkModalMaterialUtilizado.Visible = False + End If - If EsDevolucionVenta Then - Alert("En la orden de servicio ya se determinó el material utilizado.", TipoMensaje.MsgAdvertencia) - LnkModalMaterialUtilizado.Visible = False - End If - - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then TxtPacienteModal.Text = TxtPaciente.Text TxtEpisodioModal.Text = TxtIdentificadorCliente.Text TxtFolioRemisionModal.Text = TxtFolioAdicional.Text - End If - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then - DvTxtFolioRemisionModal.Visible = False - Else - DvTxtFolioRemisionModal.Visible = True + If DdlTipoVenta.SelectedValue.ToEntero = 5 Then + DvTxtFolioRemisionModal.Visible = False + Else + DvTxtFolioRemisionModal.Visible = True + End If End If - UpModalMaterialUtilizado.Update() End Sub @@ -3048,7 +3046,10 @@ Partial Class OS_OrdenesServicios Dim ProcesoOK As Boolean = True - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then + Dim CveAlmacenDestino As Integer = -1 + Dim CveSubProyectoPedido As Integer + '---------------- INICIO VALIDACIONES ----------------- If TxtPacienteModal.Text.Trim.Length = 0 Then Alert("Debe de proporcionar el paciente.", TipoMensaje.MsgAdvertencia) Exit Sub @@ -3058,350 +3059,349 @@ Partial Class OS_OrdenesServicios Alert("Debe de proporcionar el episodio.", TipoMensaje.MsgAdvertencia) Exit Sub End If - End If - Dim TieneArchivos As Boolean = False - Dim Filesgral As List(Of Archivo) = AnexoManerialUtilizado.getfiles().Archivos - For Each fileItem As Archivo In Filesgral - TieneArchivos = True - Exit For - Next - If Not TieneArchivos Then - Alert("Debe de agregar un documento de confirmación (5 máximo).") - Exit Sub - End If + Dim TieneArchivos As Boolean = False + Dim Filesgral As List(Of Archivo) = AnexoManerialUtilizado.getfiles().Archivos + For Each fileItem As Archivo In Filesgral + TieneArchivos = True + Exit For + Next + If Not TieneArchivos Then + Alert("Debe de agregar un documento de confirmación (5 máximo).") + Exit Sub + End If - - Dim CveAlmacenActual As Integer = DTSolicitudDev.FiltroPrimeroValor("CveAlmacenActual").ToEntero - Dim CveMoneda As Integer = DTSolicitudDev.FiltroPrimeroValor("CveMoneda").ToEntero - Dim CveSubProyectoPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveSubProyecto").ToEntero - Dim CveVentaPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveVenta").ToEntero - Dim CveAlmacenDestino As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {CveSubProyectoPedido}").ToEntero - Dim CveVentaRemisionGenerada As Integer = -1 - - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then Dim TotalSeleccionado As Decimal = 0 - For Each GVRow As GridViewRow In GvMU.Rows TotalSeleccionado = TotalSeleccionado + GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal Next - If TotalSeleccionado = 0 Then - Alert("No se seleccionó ningun material", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - Else - If Not CveAlmacenDestino > 0 Then - Alert("No se encontró almacen de entrega por adelantado", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - - Dim ObjV As New ClsVentas - Dim ObjOS As New ClsOS(ObjV.IniciaTransacSQL()) - Dim ObjInventario As New ClsInventarios(ObjV.IniciaTransacSQL()) - Dim ObjConta As New ClsContabilidad(ObjV.IniciaTransacSQL()) - Dim GenerarRemisionMovimientos As Boolean = False - - If DdlTipoVenta.SelectedValue = "5" Then 'Consignación - Uso Material - 'genera una salida de almacen. - Dim Fecha As DateTime = ClsPaginas.NowADS() - Dim CveMovimientoSalida As Integer = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtilConsig") - Dim Folio As Integer = ObjInventario.Folio - - If CveMovimientoSalida > 0 Then - For Each GVRow As GridViewRow In GvMU.Rows - Dim CantidadRegistro As Decimal = GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal - Dim CvePS As Integer = GVRow.DataKey("CvePS").ToEntero - - If CantidadRegistro > 0 Then - Dim Serie As String = GVRow.DataKey("Serie") - Dim Lote As String = GVRow.DataKey("Lote") - Dim CveUM As Integer = GVRow.DataKey("CveUM").ToEntero - Dim FechaCaducidad As DateTime = GVRow.DataKey("FechaCaducidad").ToDate - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadRegistro, CveUM, CvePS, 0, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - Exit For - End If - End If - Next - If ProcesoOK Then - Dim CveOSEstatusFinalizada As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero - If CveOSEstatusFinalizada > 0 Then - If Not ObjOS.UpdateOrdenesServiciosEstatus(CveOSEstatusFinalizada, UsuarioActual.CveUsuario, CveOS) Then - ProcesoOK = False - End If - Else - Alert("No se pudo obtener el estado para finalizar la orden de servicio.") - ProcesoOK = False - End If - End If - If ProcesoOK Then - Dim Contabilizable As Boolean = False - Dim Concepto As String = "Material utilizado Consigna" - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil5", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - Dim ImporteAlmacen As Decimal = 0 - If CveMovimientoSalida > 0 Then - If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then - ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") - End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 95, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If + If DdlTipoVenta.SelectedValue = "5" Then + If TotalSeleccionado = 0 Then + Alert("No se seleccionó ningun material", TipoMensaje.MsgAdvertencia) + Exit Sub End If Else - ProcesoOK = False + CveSubProyectoPedido = DTSolicitudDev.FiltroPrimeroValor("CveSubProyecto").ToEntero + CveAlmacenDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {CveSubProyectoPedido}").ToEntero + If Not CveAlmacenDestino > 0 Then + Alert("No se encontró almacen de entrega por adelantado", TipoMensaje.MsgAdvertencia) + Exit Sub + End If End If + If TotalSeleccionado > 0 AndAlso Not TxtFolioRemisionModal.Text.Trim.Length > 0 Then + Alert("El campo Folio es requerido por favor ingréselo.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If - Dim DT_Ventas_Detalles As DataTable = DTSolicitudDev.FiltraParametros("", "", {"CantidadPedido", "CvePS", "CveVentaDetalle"}) - DT_Ventas_Detalles.Columns.Add("CantidadUsada", GetType(Decimal)) - DT_Ventas_Detalles.AcceptChanges() + '---------------- FIN VALIDACIONES ----------------- - For Each dRow As DataRow In DT_Ventas_Detalles.Rows + Dim CveAlmacenActual As Integer = DTSolicitudDev.FiltroPrimeroValor("CveAlmacenActual").ToEntero + Dim CveMoneda As Integer = DTSolicitudDev.FiltroPrimeroValor("CveMoneda").ToEntero - For Each gvRow As GridViewRow In GvMU.Rows + Dim CveVentaPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveVenta").ToEntero + Dim CveVentaRemisionGenerada As Integer = -1 - Dim CantidadUsada As Decimal = gvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim ObjV As New ClsVentas + Dim ObjOS As New ClsOS(ObjV.IniciaTransacSQL()) + Dim ObjInventario As New ClsInventarios(ObjV.IniciaTransacSQL()) + Dim ObjConta As New ClsContabilidad(ObjV.IniciaTransacSQL()) + Dim GenerarRemisionMovimientos As Boolean = False - If dRow("CvePS").ToString.ToDecimal = gvRow.DataKey("CvePS").ToDecimal AndAlso CantidadUsada > 0 Then + If DdlTipoVenta.SelectedValue = "5" Then 'Consignación - Uso Material + 'genera una salida de almacen. + Dim Fecha As DateTime = ClsPaginas.NowADS() + Dim CveMovimientoSalida As Integer = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtilConsig") + Dim Folio As Integer = ObjInventario.Folio - dRow("CantidadUsada") = dRow("CantidadUsada").ToString.ToDecimal + CantidadUsada + If CveMovimientoSalida > 0 Then + For Each GVRow As GridViewRow In GvMU.Rows + Dim CantidadRegistro As Decimal = GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim CvePS As Integer = GVRow.DataKey("CvePS").ToEntero - End If - Next - - Next - - For Each dRow As DataRow In DT_Ventas_Detalles.Rows - Dim CantidadUsada As Decimal = dRow("CantidadUsada").ToString.ToDecimal - If dRow("CantidadUsada").ToString.ToDecimal < dRow("CantidadPedido").ToString.ToDecimal Then - If Not ObjInventario.UpdatePedidoDetalleCantidad(dRow("CveVentaDetalle").ToString.ToEntero, CantidadUsada, 2) Then - ProcesoOK = False - Exit For - End If - End If - Next - - - Else - If ProcesoOK Then - Dim AplicaDevolucion As Boolean = False - For Each GvRow As GridViewRow In GvMU.Rows - Dim CveVentaDetalle As Integer = GvRow.DataKey("CveVentaDetalle").ToEntero - Dim CantidadDev As Decimal = GvRow.DataKey("Cantidad").ToDecimal - GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal - - If CantidadDev > 0 AndAlso CveVentaDetalle > 0 Then - AplicaDevolucion = True - If Not ObjV.UpdateVentasDetalleCantidadDevolucion(CveVentaDetalle, CantidadDev) Then + If CantidadRegistro > 0 Then + Dim Serie As String = GVRow.DataKey("Serie") + Dim Lote As String = GVRow.DataKey("Lote") + Dim CveUM As Integer = GVRow.DataKey("CveUM").ToEntero + Dim FechaCaducidad As DateTime = GVRow.DataKey("FechaCaducidad").ToDate + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadRegistro, CveUM, CvePS, 0, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + End If + Next + If ProcesoOK Then + Dim CveOSEstatusFinalizada As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero + If CveOSEstatusFinalizada > 0 Then + If Not ObjOS.UpdateOrdenesServiciosEstatus(CveOSEstatusFinalizada, UsuarioActual.CveUsuario, CveOS) Then + ProcesoOK = False + End If + Else + Alert("No se pudo obtener el estado para finalizar la orden de servicio.") ProcesoOK = False - GenerarRemisionMovimientos = False - AplicaDevolucion = False - Exit For End If End If - - If GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal > 0 Then - GenerarRemisionMovimientos = True - End If - Next - If AplicaDevolucion Then - If Not ObjV.UpdateVentasDevolucionAlmacen(1, CveVentaPedido) Then - ProcesoOK = False - End If - End If - End If - - 'ProcesoOK = False - - Dim Respuesta As New RespuestaFacturacion() - Dim DtVentaDetalle As New DataTable - Dim CveMovimientoSalida, CveMovimientoEntrada As Integer - Dim ImporteAlmacen As Decimal - Dim Fecha As DateTime = ClsPaginas.NowADS() - - If GenerarRemisionMovimientos AndAlso ProcesoOK Then - If Not TxtFolioRemisionModal.Text.Trim.Length > 0 Then - Alert("El campo Folio es requerido por favor ingréselo.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - GenerarRemisionMovimientos = False - End If - End If - - If GenerarRemisionMovimientos AndAlso ProcesoOK Then - Respuesta = GeneraRemision(CveVentaPedido, ObjV.IniciaTransacSQL()) - - If Respuesta.CveVenta > 0 Then - - CveVentaRemisionGenerada = Respuesta.CveVenta - If ObjV.GetVentaDetalle(Respuesta.CveVenta) Then - Dim dtClon As DataTable = ObjV.DtResultados.Copy - dtClon.DefaultView.Sort = "CveVentaDetalle ASC" - Dim dtmat As DataTable = dtClon.DefaultView.ToTable() - 'una vez registrada, asocia los lotes/cad con el cveventadetalle para que se surta así - DtVentaDetalle = Respuesta.dtdetalle - For i = 0 To dtmat.Rows.Count - 1 - If DtVentaDetalle.Rows(i)("CvePS").ToString = dtmat.Rows(i)("CvePS").ToString Then - DtVentaDetalle.Rows(i)("CveVentaDetalle") = dtmat.Rows(i)("CveVentaDetalle") - DtVentaDetalle.Rows(i)("CveUM") = dtmat.Rows(i)("CveUM") + If ProcesoOK Then + Dim Contabilizable As Boolean = False + Dim Concepto As String = "Material utilizado Consigna" + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil5", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim ImporteAlmacen As Decimal = 0 + If CveMovimientoSalida > 0 Then + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then + ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") End If - Next + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 95, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + End If + End If + 'asigno la cveventa, como concluido + If ProcesoOK Then + If Not ObjOS.UpdateVentaOS(CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then + ProcesoOK = False + End If End If Else ProcesoOK = False End If - End If - If GenerarRemisionMovimientos AndAlso ProcesoOK Then + Dim DT_Ventas_Detalles As DataTable = DTSolicitudDev.FiltraParametros("", "", {"CantidadPedido", "CvePS", "CveVentaDetalle"}) + DT_Ventas_Detalles.Columns.Add("CantidadUsada", GetType(Decimal)) + DT_Ventas_Detalles.AcceptChanges() - CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtil3") - Dim Folio As Integer = ObjInventario.Folio + For Each dRow As DataRow In DT_Ventas_Detalles.Rows + For Each gvRow As GridViewRow In GvMU.Rows + Dim CantidadUsada As Decimal = gvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + If dRow("CvePS").ToString.ToDecimal = gvRow.DataKey("CvePS").ToDecimal AndAlso CantidadUsada > 0 Then + dRow("CantidadUsada") = dRow("CantidadUsada").ToString.ToDecimal + CantidadUsada + End If + Next + Next - If CveMovimientoSalida > 0 Then + For Each dRow As DataRow In DT_Ventas_Detalles.Rows + Dim CantidadUsada As Decimal = dRow("CantidadUsada").ToString.ToDecimal + If dRow("CantidadUsada").ToString.ToDecimal < dRow("CantidadPedido").ToString.ToDecimal Then + If Not ObjInventario.UpdatePedidoDetalleCantidad(dRow("CveVentaDetalle").ToString.ToEntero, CantidadUsada, 2) Then + ProcesoOK = False + Exit For + End If + End If + Next + Else + '' otros opciones <> 5 + If ProcesoOK Then - Dim IndexMov1 As Integer = 0 - For Each drr As DataRow In DtVentaDetalle.Rows + Dim AplicaDevolucion As Boolean = False + Dim StrCveVentasDetalle As New StringBuilder + For Each GvRow As GridViewRow In GvMU.Rows + Dim CveVentaDetalle As Integer = GvRow.DataKey("CveVentaDetalle").ToEntero + Dim CantidadDev As Decimal = GvRow.DataKey("Cantidad").ToDecimal - GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + StrCveVentasDetalle.AppendFormat("{0},", CveVentaDetalle) - Dim Cantidad As Decimal = drr("Cantidad").ToString.ToDecimal - 'Dim CantidadRegistro As Decimal = GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal - Dim CvePS As Integer = drr("CvePS").ToString.ToEntero - Dim CveUM As Integer = drr("CveUM").ToString.ToEntero - Dim PU As Decimal = drr("PU").ToString.ToDecimal - - If Cantidad > 0 Then - Dim CveVentaDetalle As Integer = drr("CveVentaDetalle").ToString.ToEntero 'DtVentaDetalle.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetallePadre = {GvRow.DataKey("CveVentaDetalle")}").ToEntero - Dim CveMovimientoDetalle As Integer = -1 'GvRow.DataKey("CveMovimientoDetalle").ToEntero - - If CveVentaDetalle <= 0 Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - Exit For - End If - - Dim Serie As String = drr("Serie").ToString - Dim Lote As String = drr("Lote").ToString - Dim FechaCaducidad As DateTime = drr("FechaCaducidad").ToString.ToDate - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + If CantidadDev > 0 AndAlso CveVentaDetalle > 0 Then + AplicaDevolucion = True + If Not ObjV.UpdateVentasDetalleCantidadDevolucion(CveVentaDetalle, CantidadDev) Then ProcesoOK = False + GenerarRemisionMovimientos = False + AplicaDevolucion = False Exit For End If End If - IndexMov1 = IndexMov1 + 1 + If GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal > 0 Then + GenerarRemisionMovimientos = True + End If Next + If AplicaDevolucion Then + If Not ObjV.UpdateVentasDevolucionAlmacen(1, CveVentaPedido) Then + ProcesoOK = False + End If + End If + ' obtiene las ventasdetalle del pedido/rem, para recorrerlas y si hay alguna solo solicitada pero no surtida, que no siga pendiente de surtir. + If ProcesoOK AndAlso ObjV.GetVentaDetalle(CveVentaPedido) Then + Dim DtVentasDetalle As DataTable = ObjV.DtResultados + Dim dtt As DataTable = DtVentasDetalle.FiltraParametros($"CveVentaDetalle NOT IN ({StrCveVentasDetalle.ToString} -1)") + For Each dr As DataRow In dtt.Rows + ObjInventario.UpdateEstatusAlmacen(dr("CveVentaDetalle").ToString.ToEntero, 1) 'para no surtirse + Next + End If + End If - If ProcesoOK Then + Dim Respuesta As New RespuestaFacturacion() + Dim DtVentaDetalle As New DataTable + Dim CveMovimientoSalida, CveMovimientoEntrada As Integer + Dim ImporteAlmacen As Decimal + Dim Fecha As DateTime = ClsPaginas.NowADS() - CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="OS/MatUtil2") + If GenerarRemisionMovimientos AndAlso ProcesoOK Then + Respuesta = GeneraRemision(CveVentaPedido, ObjV.IniciaTransacSQL()) - If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then - ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") - Dim IndexMov2 As Integer = 0 - For Each dRow As DataRow In ObjInventario.DtResultados.Rows + If Respuesta.CveVenta > 0 Then - Dim Cantidad As Decimal = dRow("Cantidad").ToString.ToDecimal - Dim CvePS As Integer = dRow("CvePS").ToString.ToEntero - Dim CveUM As Integer = dRow("CveUM").ToString.ToEntero - Dim PU As Decimal = dRow("PU").ToString.ToDecimal - Dim CveVentaDetalle As Integer = dRow("CveVentaDetalle").ToString.ToEntero - Dim CveMovimientoDetalle As Integer = dRow("CveMovimientoDetalle").ToString.ToEntero + CveVentaRemisionGenerada = Respuesta.CveVenta + If ObjV.GetVentaDetalle(Respuesta.CveVenta) Then + Dim dtClon As DataTable = ObjV.DtResultados.Copy + dtClon.DefaultView.Sort = "CveVentaDetalle ASC" + Dim dtmat As DataTable = dtClon.DefaultView.ToTable() + 'una vez registrada, asocia los lotes/cad con el cveventadetalle para que se surta así + DtVentaDetalle = Respuesta.dtdetalle + For i = 0 To dtmat.Rows.Count - 1 + If DtVentaDetalle.Rows(i)("CvePS").ToString = dtmat.Rows(i)("CvePS").ToString Then + DtVentaDetalle.Rows(i)("CveVentaDetalle") = dtmat.Rows(i)("CveVentaDetalle") + DtVentaDetalle.Rows(i)("CveUM") = dtmat.Rows(i)("CveUM") + End If + Next + End If + Else + ProcesoOK = False + End If + End If - Dim Lote As String = dRow("Lote").ToString - Dim Serie As String = dRow("Serie").ToString - Dim FechaCaducidad As DateTime = dRow("FechaCaducidad").ToString.ToDateTime + If GenerarRemisionMovimientos AndAlso ProcesoOK Then - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtil3") + Dim Folio As Integer = ObjInventario.Folio + + If CveMovimientoSalida > 0 Then + + Dim IndexMov1 As Integer = 0 + For Each drr As DataRow In DtVentaDetalle.Rows + + Dim Cantidad As Decimal = drr("Cantidad").ToString.ToDecimal + 'Dim CantidadRegistro As Decimal = GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim CvePS As Integer = drr("CvePS").ToString.ToEntero + Dim CveUM As Integer = drr("CveUM").ToString.ToEntero + Dim PU As Decimal = drr("PU").ToString.ToDecimal + + If Cantidad > 0 Then + Dim CveVentaDetalle As Integer = drr("CveVentaDetalle").ToString.ToEntero 'DtVentaDetalle.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetallePadre = {GvRow.DataKey("CveVentaDetalle")}").ToEntero + Dim CveMovimientoDetalle As Integer = -1 'GvRow.DataKey("CveMovimientoDetalle").ToEntero + + If CveVentaDetalle <= 0 Then Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) ProcesoOK = False Exit For End If - IndexMov2 = IndexMov2 + 1 - Next - If ProcesoOK Then - Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL) - Dim LigaVenta As String = String.Format("Venta {2} en Folio: {1}", CveMovimientoEntrada, Folio, "Material utilizado") + Dim Serie As String = drr("Serie").ToString + Dim Lote As String = drr("Lote").ToString + Dim FechaCaducidad As DateTime = drr("FechaCaducidad").ToString.ToDate + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + End If + IndexMov1 = IndexMov1 + 1 + Next - If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Respuesta.CveVenta, CveOS:=CveOS) Then + If ProcesoOK Then + + CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="OS/MatUtil2") + + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then + ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") + Dim IndexMov2 As Integer = 0 + For Each dRow As DataRow In ObjInventario.DtResultados.Rows + + Dim Cantidad As Decimal = dRow("Cantidad").ToString.ToDecimal + Dim CvePS As Integer = dRow("CvePS").ToString.ToEntero + Dim CveUM As Integer = dRow("CveUM").ToString.ToEntero + Dim PU As Decimal = dRow("PU").ToString.ToDecimal + Dim CveVentaDetalle As Integer = dRow("CveVentaDetalle").ToString.ToEntero + Dim CveMovimientoDetalle As Integer = dRow("CveMovimientoDetalle").ToString.ToEntero + + Dim Lote As String = dRow("Lote").ToString + Dim Serie As String = dRow("Serie").ToString + Dim FechaCaducidad As DateTime = dRow("FechaCaducidad").ToString.ToDateTime + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + IndexMov2 = IndexMov2 + 1 + Next + If ProcesoOK Then + Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL) + Dim LigaVenta As String = String.Format("Venta {2} en Folio: {1}", CveMovimientoEntrada, Folio, "Material utilizado") + + If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Respuesta.CveVenta, CveOS:=CveOS) Then + ProcesoOK = False + End If + End If + Else + ProcesoOK = False + End If + End If + + If ProcesoOK Then + Dim Contabilizable As Boolean = False + Dim Concepto As String = "Material utilizado" + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + If CveMovimientoSalida > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then ProcesoOK = False End If End If - Else + If CveMovimientoEntrada > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + End If + End If + Else + ProcesoOK = False + End If + If ProcesoOK Then + If Not ObjOS.UpdateVentaOS(Respuesta.CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then ProcesoOK = False End If End If - - If ProcesoOK Then - Dim Contabilizable As Boolean = False - Dim Concepto As String = "Material utilizado" - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - If CveMovimientoSalida > 0 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If - If CveMovimientoEntrada > 0 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If - - End If - Else - ProcesoOK = False End If If ProcesoOK Then - If Not ObjOS.UpdateVentaOS(Respuesta.CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then + If Not ObjOS.UpdateOrdenesServiciosFinaliza(CveOS, -1, -1, UsuarioActual.CveEmpresa, Observaciones:=TxtObservacionModal.Text.Trim) Then ProcesoOK = False End If End If End If + If ProcesoOK Then - If Not ObjOS.UpdateOrdenesServiciosFinaliza(CveOS, -1, -1, UsuarioActual.CveEmpresa, Observaciones:=TxtObservacionModal.Text.Trim) Then + If Not ObjOS.UpdateVentaOS(-1, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim) Then ProcesoOK = False End If End If - End If - - If ProcesoOK Then - If Not ObjOS.UpdateVentaOS(-1, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim) Then - ProcesoOK = False + If ProcesoOK Then + ProcesoOK = GuardarArchivoConfirmacion(ObjV.IniciaTransacSQL, CveOS, CveVentaRemisionGenerada) End If - End If - If ProcesoOK Then - ProcesoOK = GuardarArchivoConfirmacion(ObjV.IniciaTransacSQL, CveOS, CveVentaRemisionGenerada) - End If + If ProcesoOK Then - If ProcesoOK Then - - ObjV.Commit() - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then - Dim Liga As String = $" document.location.href=""/OS/OrdenesServicios.aspx?CveOS={CveOS}""; " - Alert("El material utilizado se guardó correctamente", TipoMensaje.MsgInformacion, Liga) - Else - If GenerarRemisionMovimientos = False Then - Alert("El material sera recibido en almacén.") + ObjV.Commit() + If DdlTipoVenta.SelectedValue.ToEntero = 5 Then + Dim Liga As String = $" document.location.href=""/OS/OrdenesServicios.aspx?CveOS={CveOS}""; " + Alert("El material utilizado se guardó correctamente", TipoMensaje.MsgInformacion, Liga) Else - Alert("El material utilizado se guardó correctamente") + If GenerarRemisionMovimientos = False Then + Alert("El material sera recibido en almacén.") + Else + Alert("El material utilizado se guardó correctamente") + End If End If + + RegistraScript("$('#DivModalMaterialUtilizado').modal('hide');") + CargaEventoBitacora() + Else + ObjV.RollBack() + Alert("Se presento un error al guardar el material", TipoMensaje.MsgAdvertencia) End If - RegistraScript("$('#DivModalMaterialUtilizado').modal('hide');") - CargaEventoBitacora() - Else - ObjV.RollBack() - Alert("Se presento un error al guardar el material", TipoMensaje.MsgAdvertencia) + ObjV.Dispose() End If - - ObjV.Dispose() - End Sub @@ -3609,13 +3609,10 @@ Partial Class OS_OrdenesServicios End Class Protected Sub LnkActualizarUsaurioAtendio_Click(sender As Object, e As EventArgs) - - If DdlUsuarioAtendio.SelectedValue.ToEntero > 0 Then Dim ObjOS As New ClsOS ObjOS.IniciaTransacSQL() - Dim ProcesoOk As Boolean = True For Each GvRow As GridViewRow In GvPS.Rows @@ -3637,13 +3634,10 @@ Partial Class OS_OrdenesServicios Alert($"Se presento un error al actualizar el técnico.") CargaHistorial() End If - Else Alert("Debe de seleccionar un ténico para actualziar", TipoMensaje.MsgAdvertencia) End If - - End Sub Protected Sub GVEventoBitacora_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEB.RowDataBound @@ -3692,7 +3686,6 @@ Partial Class OS_OrdenesServicios Protected Sub BtnCancelar_Click(sender As Object, e As EventArgs) - Dim CveEstatusOrdenServicioCancelacion As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", " TipoEstatus = 5 ").ToEntero Dim CveAlmacenDevolucion As Integer Dim CveMotivoCancelacion As Integer = GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMotivoCancelacion", "CveSATMotivoCancelacion IN (3)").ToEntero @@ -3710,9 +3703,7 @@ Partial Class OS_OrdenesServicios Dim ObjFacturaCancelacion As New Modelos.Factura(UsuarioActual, CvePedido, UsuarioActual.CveEmpresa, EsCancelacion:=True, VerificaAlmacen:=True) Try - Dim resp As Modelos.Factura.MCancelacionVentaMensaje = Nothing - If ObjFacturaCancelacion IsNot Nothing AndAlso ObjFacturaCancelacion.CveVenta > 0 Then Dim SWatch As New Stopwatch @@ -3728,16 +3719,11 @@ Partial Class OS_OrdenesServicios 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); ") - 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() - - End If - End If - Catch ex As Exception Alert("Se presento un error al cancelar la orden de servicio") End Try