diff --git a/Ashx/E48.ashx b/Ashx/E48.ashx new file mode 100644 index 000000000..ad1fdc507 --- /dev/null +++ b/Ashx/E48.ashx @@ -0,0 +1,479 @@ +<%@ WebHandler Language="VB" Class="E48" %> + +Imports System +Imports System.Web +Imports System.Data +Imports Newtonsoft.Json +Imports Extensiones +Imports System.IO +Imports System.Net.Http +Imports Newtonsoft.Json.Linq + +Public Class E48 : Implements IHttpHandler, IRequiresSessionState + Private ReadOnly Property CveEmpresa As Integer = 48 + + Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable + Get + Return False + End Get + End Property + + Public ReadOnly Property Application As HttpApplicationState + + Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest + + Try + Select Case context.Request("metodo") + Case "Salida" + Salida(context) + End Select + Catch ex As Exception + ex.GuardaLog(ex.Message) + End Try + End Sub + + Private Function Salida(ByVal context As HttpContext) As String + Dim retorno As String = "" + Dim ObjInv As New ClsInventarios + Dim Respuesta As New FidelityAppsResponse + Dim RespuestaError As New FidelityAppsResponseError + Dim TieneError As Boolean = False + Dim JsonRequest As JObject = Nothing + Dim UsuarioActual As Usuario = ValidaUsuarioSistema(100, CveEmpresa) + Dim ObjInventario As New ClsInventarios + Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) + Dim CveMovimiento As Integer = 0 + Dim Mensaje As String = "" + Dim SinExistencia As String = "No hay existencias suficientes del producto: " + + Dim ErrorAC As Boolean = False + Dim ErrorMovInv As Boolean = False + + If context.Request.InputStream IsNot Nothing Then + Using reader As New StreamReader(context.Request.InputStream) + Dim json = reader.ReadToEnd + + If Not String.IsNullOrEmpty(json) Then + JsonRequest = JObject.Parse(json) + If JsonRequest Is Nothing Then + TieneError = True + End If + Else + TieneError = True + End If + + End Using + End If + If TieneError Then + RespuestaError.Message = "Ocurrió un error al obtener el cuerpo de los parametros" + End If + + If Not TieneError AndAlso Not String.IsNullOrEmpty(JsonRequest("fecha")) AndAlso Not String.IsNullOrEmpty(JsonRequest("usuario")) AndAlso Not String.IsNullOrEmpty(JsonRequest("almacen")) AndAlso Not String.IsNullOrEmpty(JsonRequest("entrega")) AndAlso + Not String.IsNullOrEmpty(JsonRequest("observaciones")) AndAlso Not String.IsNullOrEmpty(JsonRequest("productos")) Then + Dim Inv As New ClsInventarios + Dim ObjProductosServicios As New ClsProductosServicios() + Dim ObjContaAC As ClsContPAQi = Nothing + Dim tFolio As Integer = Inv.GetFolioSiguiente(3, CveEmpresa) + Dim observaciones As String = JsonRequest("observaciones").ToString() + Dim CveAlmacen As Integer = 7 + Dim IDPoliza As Integer = 0 + + Dim Fecha As Date = JsonRequest("fecha").ToString().ToDate + Dim usuario As String = JsonRequest("usuario").ToString() + Dim almacen As String = JsonRequest("almacen").ToString() + Dim Recibe As String = JsonRequest("entrega").ToString() + Dim GlobalDTInvConceptos As DataTable + Dim CveModalidad As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveModalidad").ToEntero() + + Dim EsContabilizable As Boolean = (CveModalidad = 1) + If Inv.GetConceptos Then GlobalDTInvConceptos = Inv.DtResultados Else GlobalDTInvConceptos = Nothing + Try + + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("ASHX/E48", 53, 0, 0, 1, Fecha, observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoPoliza:=3) + CveMovimiento = ObjInventario.AddMovimiento(CveAlmacen, 3, 1, Fecha, tFolio, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=observaciones, Recibio:=Recibe, Modulo:="ASHX/E48") + + If CveMovimiento <= 0 OrElse CvePrePoliza <= 0 Then + RespuestaError.Message = "No se pudo almacenar el movimiento correctamente" + TieneError = True + ObjInventario.RollBack() 'deshace lo insertado + Else + + End If + + ''VALIDA EXISTENCIAS + Dim Cont As Integer = 0 + Dim ListaPS = JArray.Parse(JsonRequest("productos").ToString()) + + For Each JsonPS As JObject In ListaPS + + Dim Cantidad As Double = JsonPS("cantidad").ToString.ToDouble() + Dim CvePS As Integer = GlobalDTPSSimplificado(Codigo:=JsonPS("codigo").ToString()).FiltroPrimeroValor("CvePS").ToEntero() + Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") + Dim CveUM As Integer + If ObjProductosServicios.GetPS(CvePS, -1, CveEmpresa) Then + If ObjProductosServicios.DtResultados.Rows.Count > 0 Then + CveUM = ObjProductosServicios.CveUnidadMedida.ToString.ToEntero + End If + End If + If ObjInventario.GetExistenciasPS(CvePS, CveUM, CveEmpresa, CveAlmacen, FechaMovto:=String.Format("{0} 00:00", Fecha.ToString("yyyy/MM/dd"))) >= Cantidad Then + + If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Cantidad, CveUM, CvePS, 0, Observaciones:=observaciones, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + Mensaje = "Error al guardar los movimientos" + RespuestaError.Message = Mensaje + + ErrorMovInv = True + Exit For + End If + Else + If UsuarioActual.TienePermisoProceso(114) Then + If ObjInventario.GetExistenciasPS(CvePS, CveUM, CveEmpresa, CveAlmacen, FechaMovto:=String.Format("{0} 00:00", Fecha.ToString("yyyy/MM/dd"))) >= Cantidad Then + Mensaje = "Error al guardar los movimientos" + RespuestaError.Message = Mensaje + ErrorMovInv = True + Exit For + End If + Else + SinExistencia += String.Format("{0}, ", JsonPS("codigo").ToString()) + RespuestaError.Message = SinExistencia + ErrorMovInv = True : Exit For + End If + + End If + Cont += 1 + Next + 'Registro la prepóliza + If Not ErrorMovInv AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + Dim tValorInventario As Decimal = ObjInventario.DtResultados.SUMD("Total", "").RoundSQL() + Dim tValorOtro As Decimal = tValorInventario + Dim idCtaContable As Integer = 0 + Dim IdCtaContableOtro As Integer = UsuarioActual.Empresa.IdCuentaOtrosIngresos + Dim TipoMovtoAlmacen As Boolean = False + Dim TipoMovtoOtro As Boolean = True + Dim tCveSubProyecto As Integer = -1 + + Dim drA2 As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveAlmacen = {0}", CveAlmacen)) + If drA2 IsNot Nothing Then + idCtaContable = drA2("IdCtaContable").ToString.ToEntero + tCveSubProyecto = drA2("CveSubProyecto").ToString.ToEntero + End If + + + + Dim OrigenMov As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", "CveConcepto = " & 3).ToEntero + If OrigenMov = 1 Then TipoMovtoAlmacen = False Else TipoMovtoAlmacen = True + TipoMovtoOtro = Not TipoMovtoAlmacen + + Dim CveConceptoContable As Integer = 78 + Dim CveClasificacion As Integer = -1 + + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoAlmacen, tValorInventario, observaciones, 68, observaciones, Fecha, idCtaContable, -1, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=tValorInventario, CveClasificacion:=CveClasificacion, Contabilizable:=EsContabilizable) Then + ErrorMovInv = True + Else + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoOtro, tValorOtro, observaciones, CveConceptoContable, observaciones, Fecha, IdCtaContableOtro, -1, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=tValorOtro, CveSubProyecto:=tCveSubProyecto, CveClasificacion:=CveClasificacion, Contabilizable:=EsContabilizable) Then + ErrorMovInv = True + End If + 'End Select + End If + Else + ErrorMovInv = True + End If + + '------------------------------------------------ + If Not ErrorMovInv Then + 'DEVENGAR + Dim TotalPorDevengar As Double = 0 + + 'cuando tiene AC y es salida de almacen, se manda al gasto, solo aplica si el almacen es contable + If UsuarioActual.Empresa.UsaAC AndAlso EsContabilizable Then + Dim DtII As DataTable = Nothing + Dim TotalDetalle As Double = 0.0 + Dim Importe As Decimal = 0 + 'NOTA. CUANDO ES SALIDA, EN AUTOMATICO NO TENEMOS LOS VALORES DE LA SALIDA TODAVIA, Y POR ESO IMPORTE ES CERO, ES RECARGAR CON LOS DATOS YA INSERTADOS + + If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + DtII = ObjInventario.DtResultados + End If + + TotalPorDevengar += Importe ' GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(Gvr) Math.Round(Gvr.DataKey("PU").ToString.ToDouble, 4) * Math.Round(Gvr.DataKey("CantidadF").ToString.ToDouble, 4)) + TotalPorDevengar = Math.Round(TotalPorDevengar, 4) + ObjContaAC = New ClsContPAQi(UsuarioActual.Empresa) + ObjContaAC.IniciaTransacSQL() + + Dim AC As New ClsAC + Dim DtPresupuestos As DataTable = Nothing + If AC.GetPresupuestoEgresos(-1, True, UsuarioActual.Empresa.EjercicioActual, UsuarioActual.CveEmpresa) Then + DtPresupuestos = AC.DtResultados.Copy + Else + Alert("Ocurrió un error al cargar los Presupuestos. Por favor vuelva a cargar la página", TipoMensaje.MsgError) + RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") + End If + AC.Dispose() + + IDPoliza = ObjContaAC.AddPoliza(3, "Salida de Almacen", TotalPorDevengar, TotalPorDevengar, UsuarioActual.CveUsuario, Fecha) + + If IDPoliza > 0 Then + Dim CuentaCargoCOG As Integer + Dim CuentaAbonoAlmacen As Integer = 0 + Dim drA As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveAlmacen = {0}", CveAlmacen)) + + If drA IsNot Nothing Then CuentaAbonoAlmacen = drA("IdCtaContable").ToString.ToEntero + If UsuarioActual.CveEmpresa = 48 Then ' APH + CuentaCargoCOG = 1386 + End If + + Dim ConceptoRenglon As String = "Salida de Almacen" + + If IDPoliza > 0 Then + If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + Dim DtMovtos = ObjInventario.DtResultados + Importe = DtMovtos.SUMD("Total", "Estatus = ''") + + If Importe > 0 Then + If CuentaCargoCOG > 0 AndAlso CuentaAbonoAlmacen > 0 Then + If ObjContaAC.AddMovimiento(IDPoliza, CuentaCargoCOG, False, Importe, "", ConceptoRenglon, 0, Fecha, "") Then + 'actualizo el idcuenta del presupuesto + If Not ObjContaAC.AddMovimiento(IDPoliza, CuentaAbonoAlmacen, True, Importe, "", ConceptoRenglon, 0, Fecha, "") Then + ErrorAC = True + Mensaje = "No se pudo insertar movimiento en la poliza 2." + End If + Else + ErrorAC = True + Mensaje = "No se pudo insertar movimiento en la poliza 1." + End If + End If + End If + + + End If + End If + + If IDPoliza > 0 Then + ObjInventario.UpdateMovimientoPoliza(IDPoliza, CveMovimiento, UsuarioActual.CveEmpresa) + End If + + Else + ErrorAC = True + Mensaje = "No se pudo insertar la poliza" + End If + End If + + + If Not ErrorAC And Not ErrorMovInv Then + Dim Msg As New StringBuilder + Msg.AppendFormat("
El Movimiento se registro con el Folio: {0}", ObjInventario.Folio) + Msg.AppendFormat("

Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) + + If ObjContaAC IsNot Nothing Then ObjContaAC.AjustaPoliza(IDPoliza) + If IDPoliza > 0 Then Msg = Msg.AppendFormat("

Ver Póliza", IDPoliza) + + ObjInventario.Commit() ' aplica los movimientos insertados + If ObjContaAC IsNot Nothing Then ObjContaAC.Commit() + + + 'Limpia Valores cuando inserta de campos especiales + + Else + ObjInventario.RollBack() + CveMovimiento = 0 + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + End If + + + Else + ObjInventario.RollBack() 'deshace lo insertado + CveMovimiento = 0 + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + End If + + + Catch ex As Exception + Try 'por si ya le habian dado rollback o commit + ObjInventario.RollBack() 'deshace lo insertad + Catch exx As Exception + + End Try + CveMovimiento = 0 + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + GuardaLog("Ocurrió un Error inesperado en el registro" & ex.ToString()) + Mensaje = "Ocurrió un Error inesperado en el registro" & ex.ToString() + + TieneError = True + End Try + + ObjInventario.Dispose() 'elimino la instancia + If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose() + + + Else + TieneError = True + Mensaje = "Ocurrió un error al obtener el cuerpo de los parametros" + End If + + If TieneError Or ErrorAC Or ErrorMovInv Then + context.Response.StatusCode = 200 + RespuestaError.Message = Mensaje + retorno = JsonConvert.SerializeObject(RespuestaError).ToString + Else + context.Response.StatusCode = 200 + Respuesta.Message = "La existencia se obtuvo correctamente" + retorno = JsonConvert.SerializeObject(Respuesta).ToString + + End If + + context.Response.Write(retorno) + Return retorno + + End Function + + Private Class FidelityAppsResponse + Sub New() + isSuccess = "true" + End Sub + Public Property IsSuccess As String + Public Property Message As String + End Class + + Private Class FidelityAppsResponseError + Sub New() + isSuccess = "false" + End Sub + Public Property IsSuccess As String + Public Property Message As String + End Class + + Private Class AuthMessage + Public Property IsSucces As Boolean + Public Property ErrorMessage As FidelityAppsResponseError + Public Property StatusCode As Integer + End Class + + ReadOnly Property GlobalDTPS(CveEmpresa As Integer, Optional CvePS As Integer = -1, Optional SATClavePS As String = "-1", Optional AplicaParaVenta As Integer = -1, Optional Estatus As Integer = -1, Optional Codigo As String = "-1") As DataTable + Get + Dim ObjPS As New ClsProductosServicios + + If ObjPS.GetPS(CvePS, -1, CveEmpresa, Codigo:=Codigo, SATClavePS:=SATClavePS, pAplicaParaVenta:=AplicaParaVenta, pEstado:=Estatus) Then + GlobalDTPS = ObjPS.DtResultados + Else + GlobalDTPS = Nothing + End If + + ObjPS.Dispose() + End Get + End Property + + Public Property GlobalDTPSSimplificado(Optional CveClasificacion As Integer = -1, Optional Codigo As String = "-1", Optional Estatus As Integer = 1, Optional AplicaParaVenta As Integer = -1, Optional CvePS As Integer = -1) As DataTable + Get + Dim AppNombre As String = String.Format("GlobalDTPSSimplificado-{0}", CveEmpresa) + If CveEmpresa <> -1 Then + 'sino existe, recarga los datos + If HttpContext.Current.Application(AppNombre) Is Nothing Then + Dim ObjPS As New ClsProductosServicios + If ObjPS.GetPSSimplificado(CveEmpresa) Then HttpContext.Current.Application(AppNombre) = ObjPS.DtResultados.AsEnumerable() + ObjPS.Dispose() + + End If + + + Dim Cons = DirectCast(HttpContext.Current.Application(AppNombre), EnumerableRowCollection(Of DataRow)) + + Cons = Cons.Where((Function(a) Convert.ToInt32(a!CveEmpresa) = CveEmpresa)) + If CveClasificacion >= 0 Then Cons = Cons.Where((Function(a) Convert.ToInt32(a!CveClasificacion) = CveClasificacion)) + Codigo = Codigo.ToUpper() + If Codigo <> "-1" Then Cons = Cons.Where((Function(a) Convert.ToString(a!Codigo).ToUpper() = Codigo)) + If Estatus >= 0 Then Cons = Cons.Where((Function(a) Convert.ToInt32(a!CveEstado) = Estatus)) + If AplicaParaVenta >= 0 Then Cons = Cons.Where((Function(a) Convert.ToInt32(a!AplicaParaVenta) = AplicaParaVenta)) + If CvePS >= 0 Then Cons = Cons.Where((Function(a) Convert.ToInt32(a!CvePS) = CvePS)) + + Try + GlobalDTPSSimplificado = Cons.OrderBy(Function(a) a!PSCodigo).CopyToDataTable + Catch ex As Exception + GlobalDTPSSimplificado = New DataTable + End Try + + Else + GlobalDTPSSimplificado = DirectCast(HttpContext.Current.Application(AppNombre), EnumerableRowCollection(Of DataRow)).CopyToDataTable + End If + End Get + Set(value As DataTable) + Dim AppNombre As String = String.Format("GlobalDTPSSimplificado-{0}", CveEmpresa) + HttpContext.Current.Application(AppNombre) = value + End Set + End Property + Private Function ValidaUsuarioSistema(CveUsuario As Integer, CveEmpresa As Integer) As Usuario + Dim UsuarioActual As Usuario = Nothing + Dim ObjUsuarios As New ClsSisUsuarios + If ObjUsuarios.GetUsuarios(CveUsuario) Then + If ObjUsuarios.DtResultados.Rows.Count > 0 Then + Dim Usuario = ObjUsuarios.DtResultados.Rows(0)("Usuario").ToString() + Dim Contrasenia = ObjUsuarios.DtResultados.Rows(0)("Contraseña").ToString() + UsuarioActual = ObjUsuarios.ValidaUsuario(Usuario, Contrasenia, IMEI, CveEmpresa) + UsuarioActual.CveEmpresa = CveEmpresa + CreaObjetoEmpresa(UsuarioActual) + End If + End If + ObjUsuarios.Dispose() + Return UsuarioActual + End Function + Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario) + + Dim ObjEmpresa As New ClsSisEmpresas() + If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then + If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then + Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados + + Dim EmpresasFuncionalidades As New HybridDictionary + For Each Row As Data.DataRow In dttmp.Rows + EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) + Next + ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) + End If + + UsuarioActual.Empresa = ObjEmpresa.Empresa + End If + ObjEmpresa.Dispose() + End Sub + Property GlobalDTAlmacen(CveEmpresa As Integer, Optional CveTipoAlmacen As Integer = -1, Optional CveEstatus As Integer = 1, Optional CveAlmacen As Integer = -1) As DataTable + Get + Dim AppNombre As String = String.Format("GlobalDTAlmacen-{0}", CveEmpresa) + Dim dttemp As DataTable + 'sino existe, recarga los datos + Dim ObjUsr As New ClsInventarios + If ObjUsr.GetAlmacenes(-1, -1, CveEmpresa, -1) Then dttemp = ObjUsr.DtResultados + ObjUsr.Dispose() + + Dim Str As New StringBuilder + Str.Append("1=1 AND ") + If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa) + If CveTipoAlmacen > 0 Then Str.AppendFormat("AND CveTipoAlmacen = {0}", CveTipoAlmacen) + If CveEstatus > 0 Then Str.AppendFormat("AND CveEstatus = {0}", CveEstatus) + If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen) + + Dim Dv As New DataView(DirectCast(dttemp, DataTable), Str.ToString, "", DataViewRowState.CurrentRows) + GlobalDTAlmacen = Dv.ToTable + Dv.Dispose() + End Get + Set(value As DataTable) + Dim dttemp As DataTable + Dim AppNombre As String = String.Format("GlobalDTAlmacen-{0}", CveEmpresa) + dttemp = value + End Set + 'Get + + ' Dim Str As New StringBuilder + ' Str.Append("1=1 AND ") + ' If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa) + ' If CveTipoAlmacen > 0 Then Str.AppendFormat("AND CveTipoAlmacen = {0}", CveTipoAlmacen) + ' If CveEstatus > 0 Then Str.AppendFormat("AND CveEstatus = {0}", CveEstatus) + ' If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen) + + ' Dim Dv As New DataView(DirectCast(Application("GlobalDTAlmacen"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) + ' GlobalDTAlmacen = Dv.ToTable + ' Dv.Dispose() + + 'End Get + 'Set(value As DataTable) + ' Application("GlobalDTAlmacen") = value + 'End Set + End Property +End Class \ No newline at end of file