From aae6187f954d92ca3e35839c5403edcecbbfdd72 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Thu, 11 Jun 2020 12:43:03 -0700 Subject: [PATCH 01/20] =?UTF-8?q?correcci=C3=B3n=20de=20una=20palabra?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregaAlmacen.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/EntregaAlmacen.aspx b/Inventarios/EntregaAlmacen.aspx index f4078c025..e52c5de61 100644 --- a/Inventarios/EntregaAlmacen.aspx +++ b/Inventarios/EntregaAlmacen.aspx @@ -244,7 +244,7 @@ - + From f826a82ac093946554907d606717602048fb9a6c Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:34:40 -0700 Subject: [PATCH 02/20] --conexion --- App_Code/ClsClasificaciones.vb | 13 ++++++++----- App_Code/ClsUnidadesMedida.vb | 4 +++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/App_Code/ClsClasificaciones.vb b/App_Code/ClsClasificaciones.vb index 78f93277e..d49f390ca 100644 --- a/App_Code/ClsClasificaciones.vb +++ b/App_Code/ClsClasificaciones.vb @@ -21,11 +21,13 @@ Public Class ClsClasificaciones Private Data As DataTable Private disposedValue As Boolean = False ' Para detectar llamadas redundantes 'REGISTRAR CONEXIÓN - Private CveConexion As Integer = 0 + Private CveConexion As Integer = 0 + Private EsTransaccionCompartida As Boolean = False + #End Region - + #Region "Propiedades" - + Public ReadOnly Property DtResultados() As DataTable Get DtResultados = Data @@ -46,7 +48,8 @@ Public Class ClsClasificaciones End Try Else SqlConexion = TransaccionCompartida.Connection - SqlTransacc = TransaccionCompartida + SqlTransacc = TransaccionCompartida + EsTransaccionCompartida = True End If SqlCommand = New SqlCommand("", SqlConexion) @@ -67,7 +70,7 @@ Public Class ClsClasificaciones #Region "Conexiones" Private Sub ConexionAdd() - If ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then + If Not EsTransaccionCompartida AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then Try DataAdapter("PA_Sis_RegistrarConexion") With SqlAdapter.SelectCommand.Parameters diff --git a/App_Code/ClsUnidadesMedida.vb b/App_Code/ClsUnidadesMedida.vb index 5df5ed959..69e51e5f8 100644 --- a/App_Code/ClsUnidadesMedida.vb +++ b/App_Code/ClsUnidadesMedida.vb @@ -19,6 +19,7 @@ Public Class ClsUnidadesMedida Private disposedValue As Boolean = False 'PARA REGISTRAR CONEXION Private CveConexion As Integer = 0 + Private EsTransaccionCompartida As Boolean = False #End Region #Region "Propiedades" @@ -69,6 +70,7 @@ Public Class ClsUnidadesMedida Else SqlConexion = TransaccionCompartida.Connection SqlTransacc = TransaccionCompartida + EsTransaccionCompartida = True End If SqlAdapter = New SqlDataAdapter("", SqlConexion) @@ -86,7 +88,7 @@ Public Class ClsUnidadesMedida #Region "Conexiones" Private Sub ConexionAdd() - If ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then + If Not EsTransaccionCompartida AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then Try 'DataAdapter(String.Format("INSERT INTO Sis_Conexiones (Clase,Modulo) VALUES ('ClsRH','{0}')", "RH/CatMotivosBaja"), CommandType.Text) ' pendiente de terminar parra registrar el cveconexion, falta el rarámetro de módulo From 41ee821c9644554060c66e9225b4148ee21553a8 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:34:59 -0700 Subject: [PATCH 03/20] - texto, todos en combos --- Inventarios/PopUpExistenciasAlmacen.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/PopUpExistenciasAlmacen.aspx b/Inventarios/PopUpExistenciasAlmacen.aspx index 499988848..e8a120fa6 100644 --- a/Inventarios/PopUpExistenciasAlmacen.aspx +++ b/Inventarios/PopUpExistenciasAlmacen.aspx @@ -121,7 +121,7 @@ - + From 8392eeaa664a771e14c9feef056ac9caeec07d67 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:35:11 -0700 Subject: [PATCH 04/20] - parametro clasificacion detalle --- General/SaldosIniciales.aspx.vb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/General/SaldosIniciales.aspx.vb b/General/SaldosIniciales.aspx.vb index 9eaa492e7..283d3493c 100644 --- a/General/SaldosIniciales.aspx.vb +++ b/General/SaldosIniciales.aspx.vb @@ -714,6 +714,8 @@ Partial Class General_SaldosIniciales Dim CveSATPS As Integer = GlobalDTPSATPS.FiltroPrimeroValor("CveSATPS", $"SATClavePS = '{SATClavePS}'").ToString.ToEntero Dim CveTamaño As Integer = GlobalDTAcumTamaños.FiltroPrimeroValor("CveTamaño", $"Tamaño = '{Tamaño}' AND CveEmpresa = {UsuarioActual.CveEmpresa}").ToString.ToEntero Dim CveClasificacion2 As Integer = GlobalDTClasificaciones2(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveClasificacion", $"Clasificacion = '{Clasificacion2}'").ToString.ToEntero + Dim CveClasificacionDetalle As Integer = GlobalDTClasificacionesDetalle(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CveClasificacionDetalle", $"ClasificacionDetalle = '{Linea}'").ToString.ToEntero + If Not CveClasificacion > 0 AndAlso Clasificacion <> "" Then If ObjClas.AddClasificaciones(Clasificacion, "", -1, "-1", -1, "-1", -1, "-1", @@ -851,16 +853,16 @@ Partial Class General_SaldosIniciales If ObjPS.AddPS(CveClasificacion, 1, CveUnidadMedida, Codigo, "", CodigoBarras, Descripcion, Precio, 0, 0, False, 0, False, True, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 1, 1, CveTipoPS:=CveTipoPS, CveSATPS:=CveSATPS, CveMarca:=CveMarca, CveTamaño:=CveTamaño, CveMedida:=CveMedida, CveRinTamaño:=CveRinTamaño, - CveModelo:=CveModelo, Litraje:=Litraje, IEPSPorcentaje:=IEPS, CveClasificacion2:=CveClasificacion2) <= 0 Then + CveModelo:=CveModelo, Litraje:=Litraje, IEPSPorcentaje:=IEPS, CveClasificacion2:=CveClasificacion2, CveClasificacionDetalle:=CveClasificacionDetalle) <= 0 Then 'If ObjPS.AddPS(CveClasificacion, 1, CveUnidadMedida, Codigo, "", "", Descripcion, 0, 0, 0, False, 0, False, True, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 1, 1, ' CveTipoPS:=CveTipoPS, CveSATPS:=CveSATPS, CveMarca:=CveMarca, CveTamaño:=CveTamaño, CveMedida:=CveMedida) <= 0 Then ErrorPS = True Codigo.GuardaLog Exit For - Else - If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa) Then - DTPS = ObjPS.DtResultados - End If + 'Else + ' If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa) Then + ' DTPS = ObjPS.DtResultados + ' End If End If End If From e77d73a4ed4012164900a1ec035e414c87fd9785 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:35:28 -0700 Subject: [PATCH 05/20] -- texto ,todos en clasif/tipo almacen --- Inventarios/KardexAlmacenHorizontal.aspx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Inventarios/KardexAlmacenHorizontal.aspx b/Inventarios/KardexAlmacenHorizontal.aspx index f72ee33b9..1dc493670 100644 --- a/Inventarios/KardexAlmacenHorizontal.aspx +++ b/Inventarios/KardexAlmacenHorizontal.aspx @@ -145,7 +145,7 @@
- +
@@ -161,7 +161,7 @@
- +
From fe4183491a544f496f3fb8a51b3863ea68d5d0c5 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:36:03 -0700 Subject: [PATCH 06/20] -- que no cargue cuentas, sino tiene cliente especificado --- Ventas/Clientes.aspx.vb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Ventas/Clientes.aspx.vb b/Ventas/Clientes.aspx.vb index fa4738baa..a08c794e6 100644 --- a/Ventas/Clientes.aspx.vb +++ b/Ventas/Clientes.aspx.vb @@ -487,10 +487,10 @@ Partial Class Clientes Set(value As String) ViewState("linkDescargaPagare") = value End Set - End Property - + End Property + #End Region - + #Region "Documentacion" Private Property DTDocumentacion As DataTable Get @@ -5984,6 +5984,9 @@ Partial Class Clientes #Region "C U E N T A S - B A N C A R I A S" Private Sub CargaCuentasBancarias() + + If CveCliente <= 0 Then Exit Sub + Dim ObjCuentasBancos As New ClsGenerales ViewState("OrdenCuentasBancos") = "" DTCuentasBancos = New DataTable From c0de6db1d720f9607c4f17dcc30a09cbd6be8c5e Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jun 2020 10:36:25 -0700 Subject: [PATCH 07/20] que guarde en aplicacion el Tipo de cambio del dia, y no lo este consultando en la BD --- Site.master.vb | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/Site.master.vb b/Site.master.vb index bef60c318..9e2ae8cb7 100644 --- a/Site.master.vb +++ b/Site.master.vb @@ -460,7 +460,7 @@ Partial Class Site 'End If 'OC.Dispose() - LtlMNotificaciones.Text = LtlMNotificaciones.Text & Notificaciones.ToString + LtlMNotificaciones.Text = String.Format("{0}{1}", LtlMNotificaciones.Text, Notificaciones.ToString) Notificaciones.Clear() End Sub @@ -494,11 +494,41 @@ Partial Class Site #Region "TIPO DE CAMBIO" Private Sub CargaTipoCambio() + + If Application("TipoCambioActual") Is Nothing Then + 'sino existe el dato, lo carga por ser la primera vez + Application("TipoCambioActual") = GetTipoCambio() + Else + Dim TCA As TipoCambioActual = CType(Application("TipoCambioActual"), TipoCambioActual) + If TCA.Fecha <> DateTime.Today Then + Application("TipoCambioActual") = GetTipoCambio() + End If + End If + lblTipoCambio.Text = String.Format(" | TC {0:C4}", CType(Application("TipoCambioActual"), TipoCambioActual).TipoCambio) + + End Sub + + Private Function GetTipoCambio() As TipoCambioActual + Dim Retorno As TipoCambioActual = Nothing + + 'sino existe el dato, lo carga por ser la primera vez Dim ObjGenerales As ClsGenerales = New ClsGenerales - If ObjGenerales.GetTipoCambio(-1, DateTime.Now) And ObjGenerales.DtResultados.Rows.Count > 0 Then - lblTipoCambio.Text = String.Format(" | TC {0:C4}", ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal()) + If ObjGenerales.GetTipoCambio(-1, DateTime.Today) And ObjGenerales.DtResultados.Rows.Count > 0 Then + 'lblTipoCambio.Text = String.Format(" | TC {0:C4}", ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal()) + If ObjGenerales.DtResultados.Rows.Count > 0 Then + Retorno = New TipoCambioActual With {.Fecha = DateTime.Today, .TipoCambio = ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal()} + End If + End If ObjGenerales.Dispose() - End Sub + + Return Retorno + End Function + + #End Region +End Class +Public Class TipoCambioActual + Public Fecha As Date + Public TipoCambio As Decimal End Class \ No newline at end of file From cd24b5128ae898a5235e8d31137854b4ed391a5b Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Sun, 14 Jun 2020 17:48:44 -0700 Subject: [PATCH 08/20] CARGA DE TRABAJO 1 Y 2 --- App_Code/ClsGenerales.vb | 6 +- App_Code/ClsVentas.vb | 3 +- General/PopUpPaqueteriasGuias.aspx.cs | 29 ++- General/RepPaqueteriasGuias.aspx | 14 +- General/RepPaqueteriasGuias.aspx.cs | 25 ++- Inventarios/EntregaAlmacen.aspx | 1 + Inventarios/EntregaAlmacen.aspx.vb | 51 ++++- Inventarios/EntregasPorRealizar.aspx | 2 +- Inventarios/EntregasPorRealizar.aspx.cs | 17 +- Ventas/Ventas.aspx | 238 +++++++++++++----------- Ventas/Ventas.aspx.vb | 43 ++++- 11 files changed, 291 insertions(+), 138 deletions(-) diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb index 2db192a9c..3b77ade94 100644 --- a/App_Code/ClsGenerales.vb +++ b/App_Code/ClsGenerales.vb @@ -2724,7 +2724,8 @@ Public Class ClsGenerales Public Function GetPaqueteriasGuias(CvePaqueteriaGuia As Integer, CvePaqueteriaGuiaTipo As Integer, CvePaqueteria As Integer, CveEstatus As Integer, CveSubProyecto As Integer, CveEmpresa As Integer, Guia As String, FechaInicio As String, FechaFin As String, Optional FechaIngInicio As String = "-1", - Optional FechaIngFin As String = "-1", Optional Filtro As Integer = -1, Optional CveUsuarioEntrega As Integer = -1) As Boolean + Optional FechaIngFin As String = "-1", Optional Filtro As Integer = -1, Optional CveUsuarioEntrega As Integer = -1, + Optional EsEntregaInterna As Boolean = False) As Boolean Dim Retorno As Boolean = False @@ -2744,6 +2745,7 @@ Public Class ClsGenerales .Add("@FechaIngFin", SqlDbType.VarChar).Value = FechaIngFin .Add("@Filtro", SqlDbType.Int).Value = Filtro .Add("@CveUsuarioEntrega", SqlDbType.Int).Value = CveUsuarioEntrega + .Add("@EsEntregaInterna", SqlDbType.Bit).Value = EsEntregaInterna End With Try SqlAdapter.Fill(Data) @@ -2833,7 +2835,7 @@ Public Class ClsGenerales DataAdapter("PA_Gral_AsignarEntregasPorRealizar") With SqlAdapter.SelectCommand.Parameters .Add("@CvePaqueteriaGuia", SqlDbType.Int).Value = CvePaqueteriaGuia - .Add("@CvePersonal", SqlDbType.Int).Value = CvePersonal + .Add("@CveUsuarioAsignado", SqlDbType.Int).Value = CvePersonal End With Try SqlAdapter.Fill(Data) diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index f78d1e3bf..e9f7496a6 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -341,7 +341,7 @@ Public Class ClsVentas Optional CveFormaPago33 As Integer = -1, Optional CveMetodoPago33 As Integer = -1, Optional CveUsoCFDI As Integer = -1, Optional OrdenCompra As String = "-1", Optional CveCuentaTerminal As Integer = -1, Optional CveTipoRelacion As Integer = -1, Optional ImpuestoLocal As Double = 0, Optional CveTipoAmortizacionAnticipo As Integer = -1, Optional CveVentaRelacion As Integer = -1, Optional ImporteRelacion As Decimal = -1, Optional CveEmpresaCRM As Integer = -1, Optional EsInterno As Integer = -1, Optional CveAcercamientoCRM As Integer = -1, Optional DiasCredito As Integer = 0, Optional EsDiasCreditoFijo As Boolean = False, Optional AnticipoEspecial As Boolean = False, Optional Kilometraje As Double = 0, Optional EsAmortizacion As Boolean = False, Optional CveTipoRetencion As Integer = 0, - Optional CorreoNotificacion As String = "") As Boolean + Optional CorreoNotificacion As String = "", Optional FormaPaqueteria As Integer = 1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_VentasAdd") @@ -431,6 +431,7 @@ Public Class ClsVentas .Add("@EsAmortizacion", SqlDbType.Bit).Value = EsAmortizacion .Add("@CveTipoRetencion", SqlDbType.TinyInt).Value = CveTipoRetencion .Add("@CorreoNotificacion", SqlDbType.VarChar).Value = CorreoNotificacion + .Add("@FormaPaqueteria", SqlDbType.Int).Value = FormaPaqueteria .Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue End With diff --git a/General/PopUpPaqueteriasGuias.aspx.cs b/General/PopUpPaqueteriasGuias.aspx.cs index 91306f8d4..0ecbbe8ee 100644 --- a/General/PopUpPaqueteriasGuias.aspx.cs +++ b/General/PopUpPaqueteriasGuias.aspx.cs @@ -400,6 +400,8 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas else { ObjGeneral.Commit(); + string notificacionCorreos = getCorreoString(); + MandaCorreoNotificacionGuia(notificacionCorreos); if (Guia == "-1") { if (CveVenta > 0 || CveOC > 0 || CveMovimiento > 0 || CveCompra > 0) @@ -718,7 +720,6 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas } Destinatario = $"{DbRowVenta["Mail"].ToString()};{DbRowVenta["CorreoVendedorVenta"].ToString()}{CorreoAsistente}"; - if (ObjVentas.GetVentaDetalle(CveVenta)) { DTMovimientos = ObjVentas.DtResultados; @@ -727,6 +728,32 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas } } } + + private string getCorreoString() + { + ClsVentas ObjVentas = new ClsVentas(); + if (ObjVentas.GetVenta(CveVenta,UsuarioActual.CveEmpresa)) + { + int CveVendedor = ObjVentas.DtResultados.Rows[0]["CveVendedor"].ToEntero(); + int CveCliente = ObjVentas.DtResultados.Rows[0]["CveCliente"].ToEntero(); + DataRow Vendedor = get_GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveVendedor = {0}",CveVendedor)); + DataRow Cliente = get_GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveCliente = {0}",CveCliente)); + + string CorreosConcat = "{0};{1};{2};{3};{4}"; + return CorreosConcat; + } + ObjVentas.Dispose(); + return ""; + } + + private void MandaCorreoNotificacionGuia(string Correos) + { + Correos.GuardaLog(); + + ClsSisMail MailCls = new ClsSisMail(); + MailCls.SendMail(ClsPaginas.EmpresaNotificaciones, Correos, "Se enviara la compra a su dirección", "Pendiente", Correos); + MailCls = null; + } #endregion } \ No newline at end of file diff --git a/General/RepPaqueteriasGuias.aspx b/General/RepPaqueteriasGuias.aspx index b13c27470..637293558 100644 --- a/General/RepPaqueteriasGuias.aspx +++ b/General/RepPaqueteriasGuias.aspx @@ -170,7 +170,12 @@
- + +
+
+
+     +
@@ -185,13 +190,13 @@ " style="display: inline-block; margin-right: -20px; width: 150px;" /> " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"> - - + @@ -207,11 +212,12 @@ - + + diff --git a/General/RepPaqueteriasGuias.aspx.cs b/General/RepPaqueteriasGuias.aspx.cs index 75a951155..7793d8e44 100644 --- a/General/RepPaqueteriasGuias.aspx.cs +++ b/General/RepPaqueteriasGuias.aspx.cs @@ -229,6 +229,11 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas DdlEstatusEditar.Items.Insert(3, new ListItem("Entregado ", "3")); DdlEstatusEditar.Items.Insert(4, new ListItem("Confirmado por Cliente", "4")); DdlEstatusEditar.SelectedValue = "-1"; + + if(UsuarioActual.Empresa.Funcionalidad(280) == "1"){ + DivEstatusEntrega.Visible = true; + } + } private void CargaUsuarios() @@ -270,7 +275,8 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas String FechaIngInicio = TxtFechaInicialIngreso.Text == "" ? "-1" : TxtFechaInicialIngreso.Text; String FechaIngFin = TxtFechaFinalIngreso.Text == "" ? "-1" : TxtFechaFinalIngreso.Text; - if (ObjGeneral.GetPaqueteriasGuias(CvePaqueteriaGuia, CvePaqueteriaGuiaTipo, CvePaqueteria, CveEstatus, CveSubProyecto, CveEmpresa, Guia, FechaInicio, FechaFin, FechaIngInicio, FechaIngFin, Filtro: Filtro, CveUsuarioEntrega: CveUsuarioEntrega)) + if (ObjGeneral.GetPaqueteriasGuias(CvePaqueteriaGuia, CvePaqueteriaGuiaTipo, CvePaqueteria, CveEstatus, CveSubProyecto, CveEmpresa, Guia, FechaInicio, FechaFin, + FechaIngInicio, FechaIngFin, Filtro: Filtro, CveUsuarioEntrega: CveUsuarioEntrega, EsEntregaInterna: ChkLote.Checked)) { DTDatos = ObjGeneral.DtResultados; GVDatos.DataSource = DTDatos; @@ -532,7 +538,7 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas { e.Row.FCLinkButton("SubirArchivo").Visible = false; } - + e.Row.FCLinkButton("LnkReasignar").Visible = e.Row.DataKey("EsEntregaInterna").ToString() == "True"; } } @@ -953,6 +959,19 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas } #endregion + protected void Reasignar_Click(object sender, EventArgs e) + { + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + int CvePaqueteriaGuia = GvRow.DataKey("CvePaqueteriaGuia").ToEntero(); + + ClsGenerales ObjGeneral = new ClsGenerales(); + if (ObjGeneral.AsignarEntregasPorRealizar(CvePaqueteriaGuia, -1)) + { + Alert("La guía está lista para volver a ser asignada, disponible en el reporte Entregas Por Realizar"); + } + ObjGeneral.Dispose(); + CargaDatos(); + UPDatos.Update(); + } - } \ No newline at end of file diff --git a/Inventarios/EntregaAlmacen.aspx b/Inventarios/EntregaAlmacen.aspx index e52c5de61..f175f0d5d 100644 --- a/Inventarios/EntregaAlmacen.aspx +++ b/Inventarios/EntregaAlmacen.aspx @@ -248,6 +248,7 @@ + ver detalle de entrega diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index d02cb3b2b..a55be2639 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -245,6 +245,15 @@ Partial Class Inventarios_EntregaAlmacen End Set End Property + Private Property FormaPaqueteria As Integer + Get + Return CType(ViewState("FormaPaqueteria"), Integer) + End Get + Set(value As Integer) + ViewState("FormaPaqueteria") = value + End Set + End Property + #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load @@ -322,7 +331,6 @@ Partial Class Inventarios_EntregaAlmacen CreaDtDetalleLote() CargaPendientes() - LimpiaCampos() End Sub @@ -614,6 +622,21 @@ Partial Class Inventarios_EntregaAlmacen DtDatos.Columns.Add("CantidadSeleccionada", GetType(Double)) End If + If UsuarioActual.Empresa.Funcionalidad(280) = "1" Then + FormaPaqueteria = DtDatos.Rows(0)("FormaPaqueteria").ToString.ToEntero + Dim FormaPaq As Integer = FormaPaqueteria + Select Case FormaPaq + Case 1 + RbSinEntrega.Checked = True + Case 2 + RbEntregaInterna.Checked = True + LnkPaqueteriaDetalle.Visible = True + DdlEstatus.SelectedValue = "5" + Case 3 + RbEntregaExterna.Checked = True + LnkPaqueteriaDetalle.Visible = True + End Select + End If 'TxtFecha.Text = If(EsDevolucionVenta = 1, Now.ToShortDateString, DtDatos.Rows(0)("Fecha").ToString) End If @@ -2143,8 +2166,8 @@ Partial Class Inventarios_EntregaAlmacen ValorMultiplicador = -1 ElseIf TipoMovimiento = 2 AndAlso TipoDocto.Contiene({"Dev"}) And (EsDevolucionVenta = 1) Then ValorMultiplicador = 1 - End If - + End If + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) 'Se agrega movimiento separado por la cuenta de ventas (ER) @@ -3288,12 +3311,13 @@ Partial Class Inventarios_EntregaAlmacen Protected Sub EntregaRadioGroup_Click(sender As Object, e As EventArgs) If RbEntregaExterna.Checked Then RegistraScript("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx',800,547,'N')") + LnkPaqueteriaDetalle.Visible = False ElseIf RbEntregaInterna.Checked Then - RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") - 'RegistraScript($"AbrirVentana('/General/PopUpPaqueteriasGuiasInternas.aspx?CveVenta={CveVentaSurtir}&CveSubProyecto={CveSubProyecto}',800,547,'N')") - 'CveVentaSurtir + LnkPaqueteriaDetalle.Visible = True + 'RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") ElseIf RbSinEntrega.Checked Then LimpiaCampos() + LnkPaqueteriaDetalle.Visible = False End If End Sub @@ -3304,8 +3328,17 @@ Partial Class Inventarios_EntregaAlmacen TxtNoCajas.Text = "" TxtObservacionesPaqInterna.Text = "" UpPaqInterna.Update() - End Sub + End Sub + + Protected Sub PaqueteriaDetalle_Click(sender As Object, e As EventArgs) + If RbEntregaExterna.Checked Then + RegistraScript("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx',800,547,'N')") + ElseIf RbEntregaInterna.Checked Then + RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") + End If + End Sub + #End Region - - + + End Class diff --git a/Inventarios/EntregasPorRealizar.aspx b/Inventarios/EntregasPorRealizar.aspx index 7dbb9bc60..7c71eac19 100644 --- a/Inventarios/EntregasPorRealizar.aspx +++ b/Inventarios/EntregasPorRealizar.aspx @@ -70,7 +70,7 @@
- + +
@@ -3259,7 +3259,7 @@ - + Orden de Compra:   @@ -3294,6 +3294,18 @@ + + Tipo de Entrega:  + + + + + + + + + +
@@ -3371,7 +3383,7 @@ - + @@ -3574,7 +3586,7 @@   - + Moneda Venta @@ -4141,8 +4153,8 @@
@@ -7071,9 +7083,9 @@ $get(Row).style.backgroundColor = "#82b6db"; $get(Obj).focus(); var total = parseFloat($('#<%= HplSaldoAuxiliar.ClientID%>').text().replace(',', '')); - $get(Obj).value = 0; - var suma = 0; - $('#<%= GVAnticipos.ClientID%> input[type="text"]').each(function (index) { + $get(Obj).value = 0; + var suma = 0; + $('#<%= GVAnticipos.ClientID%> input[type="text"]').each(function (index) { var currentsaldo = parseFloat($(this).val()) if (isNaN(currentsaldo)) { currentsaldo = 0 } suma = currentsaldo + suma; @@ -7089,7 +7101,7 @@ $get(Obj).value = ""; $get(Row).style.backgroundColor = "#ffffff"; } - //if ($("input:checkbox:not(:checked)")) + //if ($("input:checkbox:not(:checked)")) SetText2($get("LblTotalAnticipos"), formato_numero($get("HdnAnticipos").value, 2, '.', ',')); } function imprimircotizacion() { @@ -7103,121 +7115,121 @@ var ValorTxt = Obj.value; var suma = 0; var total = parseFloat($('#<%= HplSaldoAuxiliar.ClientID%>').text().replace(',', '')); - $('#<%= GVAnticipos.ClientID%> input[type="text"]').each(function (index) { - var currentsaldo = parseFloat($(this).val()) - if (isNaN(currentsaldo)) { currentsaldo = 0 } - suma = currentsaldo + suma; - }); - var txtvalue = (total - suma) + parseFloat(ValorTxt); - if (txtvalue < 0) { txtvalue = 0; } - if (txtvalue < Monto) { Monto = txtvalue.toFixed(2); } + $('#<%= GVAnticipos.ClientID%> input[type="text"]').each(function (index) { + var currentsaldo = parseFloat($(this).val()) + if (isNaN(currentsaldo)) { currentsaldo = 0 } + suma = currentsaldo + suma; + }); + var txtvalue = (total - suma) + parseFloat(ValorTxt); + if (txtvalue < 0) { txtvalue = 0; } + if (txtvalue < Monto) { Monto = txtvalue.toFixed(2); } - if (isNaN(ValorTxt)) - ValorTxt = 0; - if (isNaN(Monto)) - Monto = 0; - if (parseFloat(ValorTxt) < 0) { - ValorTxt = 0; - Obj.value = 0; - } + if (isNaN(ValorTxt)) + ValorTxt = 0; + if (isNaN(Monto)) + Monto = 0; + if (parseFloat(ValorTxt) < 0) { + ValorTxt = 0; + Obj.value = 0; + } - if (parseFloat(ValorTxt) > parseFloat(Monto)) { - alert("El monto de ''Anticipo a Amortizar'' no puede ser mayor al monto del ''Anticipo''"); - Obj.value = Monto; - } - } - function ImprimirCotizacion() { - __doPostBack('ctl00$HB$LNKImprimirCotizacion', ''); - } - function SetText2(ObjTo, Value) { - ObjTo.innerText = Value; - } + if (parseFloat(ValorTxt) > parseFloat(Monto)) { + alert("El monto de ''Anticipo a Amortizar'' no puede ser mayor al monto del ''Anticipo''"); + Obj.value = Monto; + } + } + function ImprimirCotizacion() { + __doPostBack('ctl00$HB$LNKImprimirCotizacion', ''); + } + function SetText2(ObjTo, Value) { + ObjTo.innerText = Value; + } - //VALIDA QUE LA CANTIDAD DE T (TXT) NO SEA MAYOR A C - function ValidarCantidad(t, c) { - t.value = (t.value > c ? c : t.value) - } + //VALIDA QUE LA CANTIDAD DE T (TXT) NO SEA MAYOR A C + function ValidarCantidad(t, c) { + t.value = (t.value > c ? c : t.value) + } - //VALIDA QUE LA CANTIDAD DE T (TXT) NO SEA MENOR A C - function ValidarCantidadMenor(t, c) { - t.value = (t.value > c ? t.value : c) - } + //VALIDA QUE LA CANTIDAD DE T (TXT) NO SEA MENOR A C + function ValidarCantidadMenor(t, c) { + t.value = (t.value > c ? t.value : c) + } - function Comma(Num) { //function to add commas to textboxes - Num += ''; - Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', ''); - Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', ''); - x = Num.split('.'); - x1 = x[0]; - x2 = x.length > 1 ? '.' + x[1] : ''; - var rgx = /(\d+)(\d{3})/; - while (rgx.test(x1)) - x1 = x1.replace(rgx, '$1' + ',' + '$2'); - return x1 + x2; - } + function Comma(Num) { //function to add commas to textboxes + Num += ''; + Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', ''); + Num = Num.replace(',', ''); Num = Num.replace(',', ''); Num = Num.replace(',', ''); + x = Num.split('.'); + x1 = x[0]; + x2 = x.length > 1 ? '.' + x[1] : ''; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + return x1 + x2; + } - function AddCodigoBarrasSerie(e) { - if (e.keyCode == 13 || e.which == 13) { - $('#BtnCodigoBarrasSerie').click(); - } - } + function AddCodigoBarrasSerie(e) { + if (e.keyCode == 13 || e.which == 13) { + $('#BtnCodigoBarrasSerie').click(); + } + } - //SERIE PS - function SeriePS(e, b, txt, hdn) { - ; - if (e.keyCode == 13 || e.which == 13) { - if (txt.value != "" && txt.value != hdn.value) { - $(b).click(); - } - } - } + //SERIE PS + function SeriePS(e, b, txt, hdn) { + ; + if (e.keyCode == 13 || e.which == 13) { + if (txt.value != "" && txt.value != hdn.value) { + $(b).click(); + } + } + } - function SeriePSBlur(b, txt, hdn) { - ; - if (txt.value != "" && txt.value != hdn.value) { - $(b).click(); - } - } + function SeriePSBlur(b, txt, hdn) { + ; + if (txt.value != "" && txt.value != hdn.value) { + $(b).click(); + } + } - //SERIE-LOTE INV - var H1 = ""; - var H2 = ""; - var T = ""; + //SERIE-LOTE INV + var H1 = ""; + var H2 = ""; + var T = ""; - function EnterAFEdit(event, Txt, Hdn1, Hdn2) { - if (event.which == 13 || event.keyCode == 13) { - H1 = Hdn1; - H2 = Hdn2; - T = Txt; - $get("HdnCodAFEdit").value = Txt.value; + function EnterAFEdit(event, Txt, Hdn1, Hdn2) { + if (event.which == 13 || event.keyCode == 13) { + H1 = Hdn1; + H2 = Hdn2; + T = Txt; + $get("HdnCodAFEdit").value = Txt.value; - $('#BtnVinculaAFEdit').click(); - } - } + $('#BtnVinculaAFEdit').click(); + } + } - function AFBlurEdit(Txt, Hdn1, Hdn2) { - if (Txt.value.length > 0 && Txt.value != Hdn2.value) { - H1 = Hdn1; - H2 = Hdn2; - T = Txt; - $get("HdnCodAFEdit").value = Txt.value; - $('#BtnVinculaAFEdit').click(); - } - } + function AFBlurEdit(Txt, Hdn1, Hdn2) { + if (Txt.value.length > 0 && Txt.value != Hdn2.value) { + H1 = Hdn1; + H2 = Hdn2; + T = Txt; + $get("HdnCodAFEdit").value = Txt.value; + $('#BtnVinculaAFEdit').click(); + } + } - function EnterAFEditOK(Cve, Codigo) { - $get(H1.id).value = Cve; - $get(H2.id).value = Codigo; - $get(T.id).value = (Codigo == -1) ? "" : Codigo; + function EnterAFEditOK(Cve, Codigo) { + $get(H1.id).value = Cve; + $get(H2.id).value = Codigo; + $get(T.id).value = (Codigo == -1) ? "" : Codigo; - } + } - //Suma Totales - function FnSuma() { - $get('TxtSubTotal2').value = FormatoNumero(ToDouble($get('TxtSubTotal').value) - ToDouble($get('LblDescuentos').innerHTML) - ToDouble($get('LblAmortizacion').innerHTML), 2); - var totalVenta = ToDouble($get('TxtSubTotal2').value) + ToDouble($get('TxtIVA').value) + ToDouble($get('TxtIEPS') ? ToDouble($get('TxtIEPS').value) : 0) - ToDouble($get('TxtRetIVA').value) - ToDouble($get('TxtRetISR').value); - debugger; - $("#<%=GvImpuestosLocales2.ClientID%> input[type='text']").each(function () { + //Suma Totales + function FnSuma() { + $get('TxtSubTotal2').value = FormatoNumero(ToDouble($get('TxtSubTotal').value) - ToDouble($get('LblDescuentos').innerHTML) - ToDouble($get('LblAmortizacion').innerHTML), 2); + var totalVenta = ToDouble($get('TxtSubTotal2').value) + ToDouble($get('TxtIVA').value) + ToDouble($get('TxtIEPS') ? ToDouble($get('TxtIEPS').value) : 0) - ToDouble($get('TxtRetIVA').value) - ToDouble($get('TxtRetISR').value); + debugger; + $("#<%=GvImpuestosLocales2.ClientID%> input[type='text']").each(function () { if ($(this).attr("class") == '5') // cuando es traslado de impuesto local, se suma totalVenta += ToDouble($(this).val().toString()); @@ -7239,7 +7251,7 @@ $get("HdnTipoDescuento").value = "3"; //si es con.nc,es.el.total - var Total = ToDouble($get(TipoAnticipo == 2? 'TxtTotal':'TxtSubTotal').value); + var Total = ToDouble($get(TipoAnticipo == 2 ? 'TxtTotal' : 'TxtSubTotal').value); var SaldoCompra = parseFloat(parseFloat($get('HdnVentaSaldo').value).toFixed(2)); if (ToDouble($get('HdnCveVenta').value) == 0) SaldoCompra = Total; diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index a95238a33..31e2c7cab 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -1206,6 +1206,15 @@ Partial Class Ventas ViewState("SaldoAnticipo") = value End Set End Property + Private Property CorreoEntregaAlmacen As String + Get + Return If(IsNothing(ViewState("CorreoEntregaAlmacen")), "", ViewState("CorreoEntregaAlmacen").ToString()) + End Get + + Set(value As String) + ViewState("CorreoEntregaAlmacen") = value + End Set + End Property #End Region @@ -2634,6 +2643,7 @@ Partial Class Ventas If UsuarioActual.CveEmpresa = 141 Then BtnModalAddPS.Enabled = False End If + MostrarOpcioensPaqueteria() End Sub Private Sub BloqueaClasificaciones() If UsuarioActual.CveEmpresa = 141 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then @@ -4847,6 +4857,7 @@ Partial Class Ventas ViewState("Mail") = If(DdlTipoComprobante.SelectedValue = "Cot", ObjCliente.MailCotizacion, ObjCliente.Mail) ViewState("MailCC") = ObjCliente.NotificarA + CorreoEntregaAlmacen = ObjCliente.DtResultados(0)("CorreoEntregaAlmacen").ToString LblDireccion.Text = ObjCliente.Direccion LblColonia.Text = ObjCliente.Colonia LblCiudad.Text = ObjCliente.Ciudad @@ -5157,8 +5168,8 @@ Partial Class Ventas CargarAlmacenes() If UsuarioActual.Empresa.FacturaProduccion Then - CargaDocumentacionCliente() End If + CargaDocumentacionCliente() If UsuarioActual.CveEmpresa.Contiene(72, 80, 1, 119) Then BtnEmitirImprimir.OnClientClick = $"ValidaGuardar({ If(ImprimeNombreSucursal = True, 1, 0)});" @@ -9502,7 +9513,7 @@ Partial Class Ventas CveVentaRelacion:=(If(factura.CveVentaRelacion.ToEntero() > 0, factura.CveVentaRelacion, -1)), ImporteRelacion:=(If(factura.ImporteRelacion <> Nothing, factura.ImporteRelacion, -1)), CveTipoAmortizacionAnticipo:=factura.CveTipoAmortizacionAnticipo, CveEmpresaCRM:=CveEmpresaCRM, EsInterno:=EsInterno, CveAcercamientoCRM:=CveAcercamientoCRM, DiasCredito:=factura.DiasCredito, EsDiasCreditoFijo:=factura.EsDiasCreditoFijo, AnticipoEspecial:=If(TrAntEspecial.Visible, ChkAntEspecial.Checked, False), - Kilometraje:=TxtKilometraje.Text.ToDouble, EsAmortizacion:=EsNCAmortizacion, CveTipoRetencion:=CveTipoRetencion, CorreoNotificacion:=TxtCorreoNotificaciones.Text) Then + Kilometraje:=TxtKilometraje.Text.ToDouble, EsAmortizacion:=EsNCAmortizacion, CveTipoRetencion:=CveTipoRetencion, CorreoNotificacion:=TxtCorreoNotificaciones.Text, FormaPaqueteria:=RblPaqueteria.SelectedValue.ToEntero) Then ErrorList.Add("Ocurrió un error al Generar la Venta.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Else If factura.TipoDocto.Contiene("Dev", "Egs") Or DtVentasNC IsNot Nothing Or CveEstatusRefacturacion = 1 Then @@ -9523,6 +9534,10 @@ Partial Class Ventas End If End If + + If UsuarioActual.Empresa.Funcionalidad(280) = "1" And RblPaqueteria.SelectedValue = "1" Then + NotificarPaqueteria() + End If End If If Not GuardarUsados(ObjVentas.IniciaTransacSQL, ObjVentas.CveVenta) Then @@ -14056,7 +14071,7 @@ Partial Class Ventas TrVistaPrevia.Visible = EstatusCliente End If - + MostrarOpcioensPaqueteria() TrAtencionA.Visible = True tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") @@ -14067,6 +14082,7 @@ Partial Class Ventas UPCondicionesPago.Update() UpCliente.Update() UpPS.Update() + UPObservaciones.Update() End Sub Protected Sub DdlSucursalCliente_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSucursalCliente.SelectedIndexChanged CargaClienteSucursal(DdlSucursalCliente.SelectedValue.ToEntero()) @@ -25648,6 +25664,27 @@ Partial Class Ventas CargaEventoBitacora() End Sub + Private Sub MostrarOpcioensPaqueteria() + Dim mostrarOpcionesPaq As Boolean = DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ped") + trPaqueteriaOpciones.Visible = mostrarOpcionesPaq + trPaqueteriOpcionesLabel.Visible = mostrarOpcionesPaq + End Sub + Private Sub NotificarPaqueteria() + Dim DtVendedores As DataTable = GlobalDTVendedores(UsuarioActual.CveEmpresa) + Dim CorreoVendedor As String = DtVendedores.FiltroPrimeroValor("Correo", String.Format("CveVendedor = {0}", DdlVendedor.SelectedValue)) + Dim CorreoVendedorAdicional As String = DtVendedores.FiltroPrimeroValor("CorreoAdicionalNotificaciones", String.Format("CveVendedor = {0}", DdlVendedor.SelectedValue)) + Dim CorreoCliente As String = Mail + Dim CorreoClienteAlmacen As String = CorreoEntregaAlmacen + Dim CorreoNotificacionCliente As String = MailCC + + Dim CorreosCC As String = String.Format("{0};{1};{2};{3}", CorreoVendedor, CorreoVendedorAdicional, CorreoCliente, CorreoNotificacionCliente) + Dim LogCorreo As String = String.Format("{0} -- {1} --- {2}", "Tipo de entrega", CorreoClienteAlmacen, CorreosCC) + LogCorreo.GuardaLog + + Dim MailCls As New ClsSisMail + MailCls.SendMail(ClsPaginas.EmpresaNotificaciones, CorreoVendedor, "Entrega en mostrador", "Pendiente", CorreosCC) + MailCls = Nothing + End Sub End Class \ No newline at end of file From c6853ed0e1f5ecfcf7d7a974120d2d7efcc74665 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Sun, 14 Jun 2020 18:06:05 -0700 Subject: [PATCH 09/20] - --- Ventas/Ventas.aspx.vb | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 31e2c7cab..ae5e7372b 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -4819,7 +4819,7 @@ Partial Class Ventas End Sub Private Sub CargaCliente(CveCliente As Integer, Optional Estatus As Integer = -1) - + If CveCliente <= 0 Then Exit Sub RBLPago.Items(0).Enabled = True @@ -7481,7 +7481,7 @@ Partial Class Ventas ObjContr.Dispose() ObjDocCliente.Dispose() 'ObjFolios.Dispose() - ErrorList.Clear + ErrorList.Clear() ErrorList = Nothing MensajeAlert = Nothing If ObjContPaq IsNot Nothing Then ObjContPaq.Dispose() @@ -9021,7 +9021,7 @@ Partial Class Ventas i += 1 Next - Dim AplicaComercioExteriorSubProyecto As Boolean = If(GlobalDTSubProyectos(-1, Obj.CveSubProyecto)(0)("AplicaComercioExterior").ToString() = "True", True, False) + Dim AplicaComercioExteriorSubProyecto As Boolean = If(GlobalDTSubProyectos(-1, Obj.CveSubProyecto, CveEmpresa:=UsuarioActual.CveEmpresa)(0)("AplicaComercioExterior").ToString() = "True", True, False) Timbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto = AplicaComercioExteriorSubProyecto If Obj.Cliente.AplicaComercioExterior And AplicaComercioExteriorSubProyecto Then 'DATOS GENERALES @@ -9037,8 +9037,8 @@ Partial Class Ventas 'EMISOR Dim Dr As DataRow Dr = Nothing - If GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero()).Rows.Count > 0 Then - Dr = GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero())(0) + If GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa).Rows.Count > 0 Then + Dr = GlobalDTSubProyectos(-1, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveEmpresa:=UsuarioActual.CveEmpresa)(0) End If Timbre.Complementos.ComercioExterior11.Emisor.CURP = UsuarioActual.Empresa.CURP Timbre.Complementos.ComercioExterior11.Emisor.Calle = Dr("Calle").ToString() @@ -13818,7 +13818,6 @@ Partial Class Ventas ObjPS.Dispose() End If - If PrecioSugerido = 0 Then Dim ObjInventarios As New ClsInventarios Dim CostoPS = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.ToDouble, -1, "-1", TxtFecha.Text.ToDate, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) @@ -13829,7 +13828,7 @@ Partial Class Ventas PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS End If End If - + CvePrecioLista = CvePrecioListaPS End If @@ -16103,6 +16102,8 @@ Partial Class Ventas Dim DtMovimientosDetalles As DataTable DtRemConceptosSurtidos = Nothing + Dim TieneMovimientosSinCosto As Boolean = False + 'Obtenemos los movimientos detalle If ObjInventario.GetInv_Mov(CveRemision, UsuarioActual.CveEmpresa) Then @@ -16133,6 +16134,9 @@ Partial Class Ventas 'VALIDAR SI TIENE PRODUCTOS POR TRASPASAR If DtMovimientos.Rows.Count > 0 Then Dim GeneroMovimientoAlmacen As Boolean = False + + TieneMovimientosSinCosto = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen=26") > 0 + For Each dr As DataRow In DtMovimientos.Rows 'Obtenemos los Movimientos de salida If ObjInventario.GetMovimientos(dr("CveMovimiento").ToString().ToEntero(), ConceptoMovimiento, -1, UsuarioActual.CveEmpresa) Then @@ -16149,9 +16153,14 @@ Partial Class Ventas Dim MovDetalle As New DataTable Dim AplicaMovimientoDetalleEntrada As Boolean = False + If RemisionesLista.Count > 0 Then AplicaMovimientoDetalleEntrada = True - MovDetalle = CuadrarFacturaMovimientos(DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (TieneSalidaxFactura IS NULL OR SaldoAlmacen > 0)")) + If TieneMovimientosSinCosto Then + MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") + Else + MovDetalle = CuadrarFacturaMovimientos(DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (TieneSalidaxFactura IS NULL OR SaldoAlmacen > 0)")) + End If Else MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") End If @@ -16226,7 +16235,10 @@ Partial Class Ventas MovDetalle.Dispose() - OcurrioError = Not GeneroMovimientoAlmacen + 'VERIFICA QUE SE HAYA GENERADO MOVIMIENTO DE ALMACEN + If Not OcurrioError Then + OcurrioError = Not GeneroMovimientoAlmacen + End If End If End If From a3e3d47ab4840eed92b81ec4d1d99b059970e9f1 Mon Sep 17 00:00:00 2001 From: rrene Date: Sun, 14 Jun 2020 19:52:03 -0700 Subject: [PATCH 10/20] - parametro globadtalmacen --- App_Code/ClsPaginas.vb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index a7b7a4a24..c856c52ed 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1730,7 +1730,7 @@ Public Class ClsPaginas End Set End Property - Property GlobalDTAlmacen(CveEmpresa As Integer, Optional CveTipoAlmacen As Integer = -1, Optional CveEstatus As Integer = 1) As DataTable + Property GlobalDTAlmacen(CveEmpresa As Integer, Optional CveTipoAlmacen As Integer = -1, Optional CveEstatus As Integer = 1, Optional CveAlmacen As Integer = -1) As DataTable Get Dim Str As New StringBuilder @@ -1738,6 +1738,7 @@ Public Class ClsPaginas 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 From 7099e4d3800608b767ce351bf33574a96dd6fbb3 Mon Sep 17 00:00:00 2001 From: rrene Date: Sun, 14 Jun 2020 19:52:51 -0700 Subject: [PATCH 11/20] -- costos jam/2019 --- Inventarios/EntregaAlmacen.aspx.vb | 390 ++++++++++++------------ Inventarios/RecepcionAlmacen.aspx.vb | 426 +++++++++++++-------------- Inventarios/TraspasoAlmacen.aspx.vb | 68 +++-- 3 files changed, 457 insertions(+), 427 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 6532d27a0..5577ba36b 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -8,8 +8,8 @@ Imports Extensiones Imports Microsoft.Reporting.WebForms Partial Class Inventarios_EntregaAlmacen - Inherits ClsPaginas - + Inherits ClsPaginas + #Region "PROPIEDADES" Private Property CveVentaAD As Integer Get @@ -243,10 +243,10 @@ Partial Class Inventarios_EntregaAlmacen Set(value As Boolean) ViewState("EsDevolucionDirecta") = value End Set - End Property - + End Property + #End Region - + Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then @@ -254,9 +254,9 @@ Partial Class Inventarios_EntregaAlmacen CargaParametrosAD() If UsuarioActual.CveEmpresa.Contiene(72, 80) Then DdlAlmacen.AutoPostBack = True End If - End Sub - - + End Sub + + #Region " INICIALIZA VALORES " Private Sub InicializaValores() TipoEstatus = -1 @@ -324,11 +324,11 @@ Partial Class Inventarios_EntregaAlmacen LimpiaCampos() - End Sub - + End Sub + #End Region - - + + #Region " CARGA PARAMETROS - EXCLUSIVO USO AD " Private Sub CargaParametrosAD() @@ -346,9 +346,9 @@ Partial Class Inventarios_EntregaAlmacen BtnGuardar.Visible = False End If - End Sub + End Sub #End Region - + #Region " CARGA PENDIENTES POR SURTIR " Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs) CargaFolios() @@ -466,11 +466,11 @@ Partial Class Inventarios_EntregaAlmacen End Select UpPendientes.Update() End If - End Sub - + End Sub + #End Region - - + + #Region " CARGA VENTA POR SURTIR " Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs) @@ -923,14 +923,14 @@ Partial Class Inventarios_EntregaAlmacen End If objInv.Dispose() GvDocs.DataBind() - End Sub - - + End Sub + + #End Region - - + + #Region " AGREGAR " - + Protected Sub BtnSerie_Click(sender As Object, e As EventArgs) Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c) @@ -957,10 +957,10 @@ Partial Class Inventarios_EntregaAlmacen UpLoteBatch.Update() End If - End Sub - + End Sub + #Region " AGREGA POR SERIE/LOTE " - + Private Sub CreaDtDetalle() If DtDatosDetalle Is Nothing Then DtDatosDetalle = New DataTable @@ -1165,11 +1165,11 @@ Partial Class Inventarios_EntregaAlmacen DtDatosDetalle.AcceptChanges() CargaSerie() - End Sub + End Sub #End Region - + #Region " AGREGA CON LOTE BATCH " - + Private Sub CreaDtDetalleLote() If DtDatosDetalleLote Is Nothing Then DtDatosDetalleLote = New DataTable @@ -1357,9 +1357,9 @@ Partial Class Inventarios_EntregaAlmacen End Try DtDatosDetalleLote.AcceptChanges() CargaLote() - End Sub + End Sub #End Region - + #Region " AGREGA CON TXT | CODIGO - SERIE " Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs) @@ -1493,12 +1493,12 @@ Partial Class Inventarios_EntregaAlmacen End If TxtCantidadEspecialDiv.Text = "1" - End Sub + End Sub #End Region - + #End Region - - + + #Region " GUARDAR " Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) @@ -1917,7 +1917,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(CveAlmacenExA, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/GSC22") FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then @@ -2214,7 +2214,7 @@ Partial Class Inventarios_EntregaAlmacen Dim CveMovimientoDevolucionSinCosto = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 41, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/GSC4") Dim FolioDevSinCosto = ObjInventario.Folio If Not CveMovimientoDevolucionSinCosto > 0 Then @@ -3229,160 +3229,160 @@ Partial Class Inventarios_EntregaAlmacen TimmerRefresh.Enabled = True UpGenerales.Update() CargaGvDatos() - End Sub - + End Sub + #End Region - + #Region " TRASPASO - TRANSITORIO " Protected Sub ChkTransitorio_CheckedChanged(sender As Object, e As EventArgs) TxtResponsable.Text = "" DivTransitorio2.Visible = ChkTransitorio.Checked - End Sub + End Sub #End Region - + #Region "SECCION ALMACEN" - 'Private Sub CreaDtSeccionAlmacen() - ' DtSeccionAlmacen = New DataTable - ' DtSeccionAlmacen.Columns.Add("CantidadSeccionAlmacen", GetType(Decimal)) - ' DtSeccionAlmacen.Columns.Add("IndexSeccionAlmacen", GetType(Integer)) - ' DtSeccionAlmacen.Columns.Add("CveSeccionAlmacen", GetType(Integer)) - ' DtSeccionAlmacen.Columns.Add("CvePS", GetType(Integer)) - ' DtSeccionAlmacen.Columns.Add("SeccionAlmacen", GetType(String)) - ' DtSeccionAlmacen.Columns.Add("Consec", GetType(Integer)) - 'End Sub - 'Private Sub CargaDdlAlmacen() - ' DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1) - ' DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) - ' DdlSeccionAlmacen.DataBind() - 'End Sub - 'Protected Sub LnkSeccionAlmacen_Click(sender As Object, e As EventArgs) - ' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) - - ' If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then - ' Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen.", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal - ' IndexSeccionAlmacen = gvRow.RowIndex - ' CvePS = gvRow.DataKey("CvePS").ToEntero - ' CargaSeccionAlmacen() - ' RegistraScript("$('#DModalSeccionAlmacen').modal()") - 'End Sub - - 'Private Sub CargaSeccionAlmacen() - ' Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen") - ' GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}") - ' GvSeccion.DataBind() - - ' TxtCantidadSeccion.Text = "" - ' DdlSeccionAlmacen.SelectedIndex = 0 - ' Dim CantidadRestante As Decimal = CantidadTotal - CantidadTotalSeccion - ' If CantidadRestante = 0 Then - ' RVTxtCantidad.MaximumValue = "1" - ' TxtCantidadSeccion.Enabled = False - ' Else - ' RVTxtCantidad.MaximumValue = CantidadRestante.ToString - ' TxtCantidadSeccion.Enabled = True - ' End If - - ' If CantidadTotalSeccion > 0 Then - ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False - ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen" - - ' Else - ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True - ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "" - - ' End If - - ' If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then - ' DdlAlmacen.Enabled = False - ' DdlAlmacen.ToolTip = "Cuenta con sección almacen" - ' Else - ' DdlAlmacen.Enabled = True - ' DdlAlmacen.ToolTip = "" - ' End If - - ' UpModalSeccionAlmacen.Update() - ' UpDatos.Update() - ' UpGenerales.Update() - 'End Sub - - 'Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs) - - ' Dim ObjInv As New ClsInventarios - ' Dim CantidadDisponible As Decimal = 0 - ' If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacen.SelectedValue.ToEntero, DdlAlmacen.SelectedValue.ToEntero, - ' CvePS, UsuarioActual.CveEmpresa) Then - ' If ObjInv.DtResultados.Rows.Count > 0 Then - ' CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString.ToDecimal - ' End If - ' End If - ' ObjInv.Dispose() - - ' CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacen = {DdlSeccionAlmacen.SelectedValue}").SUMD("CantidadSeccionAlmacen") - - ' If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then - ' Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: {CantidadDisponible}", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' Dim Row As DataRow = Nothing - ' DtSeccionAlmacen.AcceptChanges() - ' Row = DtSeccionAlmacen.NewRow - ' Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal - ' Row("IndexSeccionAlmacen") = IndexSeccionAlmacen - ' Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero - ' Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text - ' Row("CvePS") = CvePS - ' Row("Consec") = DtSeccionAlmacen.Rows.Count + 1 - ' DtSeccionAlmacen.Rows.Add(Row) - ' DtSeccionAlmacen.AcceptChanges() - ' CargaSeccionAlmacen() - 'End Sub - - 'Protected Sub LnkEliminarSeccion_Click(sender As Object, e As EventArgs) - ' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) - ' Dim Index As Integer = 0 - ' For Each Dr As DataRow In DtSeccionAlmacen.Rows - ' If Dr("Consec").ToString.ToEntero = gvRow.DataKey("Consec").ToEntero() Then - ' Exit For - ' End If - ' Index += 1 - ' Next - ' DtSeccionAlmacen.Rows.RemoveAt(Index) - ' DtSeccionAlmacen.AcceptChanges() - ' CargaSeccionAlmacen() - 'End Sub - - 'Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs) - ' If Not CveVentaSurtir > 0 Then - ' Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then - ' Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia) - ' Exit Sub - ' End If - - ' Dim ObjInv As New ClsInventarios - ' If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then - ' GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados - ' End If - ' ObjInv.Dispose() - ' GvVerSeccionesAlmacen.DataBind() - ' UpVerSeccionesAlmacen.Update() - ' RegistraScript("$('#ModalVerSeccionesAlmacen').modal()") - 'End Sub - + 'Private Sub CreaDtSeccionAlmacen() + ' DtSeccionAlmacen = New DataTable + ' DtSeccionAlmacen.Columns.Add("CantidadSeccionAlmacen", GetType(Decimal)) + ' DtSeccionAlmacen.Columns.Add("IndexSeccionAlmacen", GetType(Integer)) + ' DtSeccionAlmacen.Columns.Add("CveSeccionAlmacen", GetType(Integer)) + ' DtSeccionAlmacen.Columns.Add("CvePS", GetType(Integer)) + ' DtSeccionAlmacen.Columns.Add("SeccionAlmacen", GetType(String)) + ' DtSeccionAlmacen.Columns.Add("Consec", GetType(Integer)) + 'End Sub + 'Private Sub CargaDdlAlmacen() + ' DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1) + ' DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) + ' DdlSeccionAlmacen.DataBind() + 'End Sub + 'Protected Sub LnkSeccionAlmacen_Click(sender As Object, e As EventArgs) + ' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) + + ' If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then + ' Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen.", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + + ' CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal + ' IndexSeccionAlmacen = gvRow.RowIndex + ' CvePS = gvRow.DataKey("CvePS").ToEntero + ' CargaSeccionAlmacen() + ' RegistraScript("$('#DModalSeccionAlmacen').modal()") + 'End Sub + + 'Private Sub CargaSeccionAlmacen() + ' Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen") + ' GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}") + ' GvSeccion.DataBind() + + ' TxtCantidadSeccion.Text = "" + ' DdlSeccionAlmacen.SelectedIndex = 0 + ' Dim CantidadRestante As Decimal = CantidadTotal - CantidadTotalSeccion + ' If CantidadRestante = 0 Then + ' RVTxtCantidad.MaximumValue = "1" + ' TxtCantidadSeccion.Enabled = False + ' Else + ' RVTxtCantidad.MaximumValue = CantidadRestante.ToString + ' TxtCantidadSeccion.Enabled = True + ' End If + + ' If CantidadTotalSeccion > 0 Then + ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False + ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen" + + ' Else + ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True + ' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "" + + ' End If + + ' If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then + ' DdlAlmacen.Enabled = False + ' DdlAlmacen.ToolTip = "Cuenta con sección almacen" + ' Else + ' DdlAlmacen.Enabled = True + ' DdlAlmacen.ToolTip = "" + ' End If + + ' UpModalSeccionAlmacen.Update() + ' UpDatos.Update() + ' UpGenerales.Update() + 'End Sub + + 'Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs) + + ' Dim ObjInv As New ClsInventarios + ' Dim CantidadDisponible As Decimal = 0 + ' If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacen.SelectedValue.ToEntero, DdlAlmacen.SelectedValue.ToEntero, + ' CvePS, UsuarioActual.CveEmpresa) Then + ' If ObjInv.DtResultados.Rows.Count > 0 Then + ' CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString.ToDecimal + ' End If + ' End If + ' ObjInv.Dispose() + + ' CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacen = {DdlSeccionAlmacen.SelectedValue}").SUMD("CantidadSeccionAlmacen") + + ' If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then + ' Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: {CantidadDisponible}", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + + ' Dim Row As DataRow = Nothing + ' DtSeccionAlmacen.AcceptChanges() + ' Row = DtSeccionAlmacen.NewRow + ' Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal + ' Row("IndexSeccionAlmacen") = IndexSeccionAlmacen + ' Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero + ' Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text + ' Row("CvePS") = CvePS + ' Row("Consec") = DtSeccionAlmacen.Rows.Count + 1 + ' DtSeccionAlmacen.Rows.Add(Row) + ' DtSeccionAlmacen.AcceptChanges() + ' CargaSeccionAlmacen() + 'End Sub + + 'Protected Sub LnkEliminarSeccion_Click(sender As Object, e As EventArgs) + ' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) + ' Dim Index As Integer = 0 + ' For Each Dr As DataRow In DtSeccionAlmacen.Rows + ' If Dr("Consec").ToString.ToEntero = gvRow.DataKey("Consec").ToEntero() Then + ' Exit For + ' End If + ' Index += 1 + ' Next + ' DtSeccionAlmacen.Rows.RemoveAt(Index) + ' DtSeccionAlmacen.AcceptChanges() + ' CargaSeccionAlmacen() + 'End Sub + + 'Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs) + ' If Not CveVentaSurtir > 0 Then + ' Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + + ' If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then + ' Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + + ' Dim ObjInv As New ClsInventarios + ' If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then + ' GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados + ' End If + ' ObjInv.Dispose() + ' GvVerSeccionesAlmacen.DataBind() + ' UpVerSeccionesAlmacen.Update() + ' RegistraScript("$('#ModalVerSeccionesAlmacen').modal()") + 'End Sub + #End Region - + #Region "DIVIDIR" - + Protected Sub Dividir(sender As Object, e As EventArgs) Dim index2 As Integer = 0 @@ -3463,11 +3463,11 @@ Partial Class Inventarios_EntregaAlmacen index2 += 1 Next - End Sub - - + End Sub + + #End Region - + #Region " GUIAS - SABE QUE ES PORQUE NO VEO QUE SE UTILIZE EN ALGUNA PARTE - EN MIRAS DE ELIMINAR - IPP 24 AGOSTO 2017 " Private Sub BtnNumeroGuia_Click(sender As Object, e As EventArgs) Handles BtnNumeroGuia.Click Dim Objeto As New ClsInventarios @@ -3501,11 +3501,11 @@ Partial Class Inventarios_EntregaAlmacen End If - End Sub + End Sub #End Region - + #Region "SUGERENCIAS" - + Protected Sub BtnVerSugerencias_Click(sender As Object, e As EventArgs) If Not CveVentaSurtir > 0 Then Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia) @@ -3605,12 +3605,12 @@ Partial Class Inventarios_EntregaAlmacen params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) ImprimirPDF("Empresas/Grales/Formatos/RepEntregaAlmacenSugerencia.rdlc", DtDatosSugerencias, params, "Equipo GPS") - End Sub - + End Sub + #End Region - + #Region "TipoEntrega" - + Protected Sub EntregaRadioGroup_Click(sender As Object, e As EventArgs) If RbEntregaExterna.Checked Then RegistraScript("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx',800,547,'N')") @@ -3630,8 +3630,8 @@ Partial Class Inventarios_EntregaAlmacen TxtNoCajas.Text = "" TxtObservacionesPaqInterna.Text = "" UpPaqInterna.Update() - End Sub + End Sub #End Region - - + + End Class diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 97c27073b..b93c5b5f8 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -850,7 +850,7 @@ Partial Class Inventarios_RecepcionAlmacen TipoCambio = ObjCompras.DtResultados.Rows(0)("TipoCambio").ToString.ToDecimal TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("EstatusAlmacen").ToString.ToEntero = 1, 2, 1) TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("TipoDocto").ToString.Contiene("NC", "DEV"), 3, TipoMovimiento) - TotalCompraOC = ObjCompras.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal + TotalCompraOC = ObjCompras.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal - ObjCompras.DtResultados.Rows(0)("Descuentos").ToString.ToDecimal CveTipoCompra = ObjCompras.DtResultados.Rows(0)("CveTipoCompra").ToString.ToEntero If TipoMovimiento = 3 Then @@ -1259,6 +1259,9 @@ Partial Class Inventarios_RecepcionAlmacen e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero e.Row.FCTextBox("TbCantidadF").Enabled = False End If + If UsuarioActual.CveRol = 1 Then 'carga la cantidad con el rol AD + e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero + End If End If If CBool(e.Row.DBCampo("AplicaSeccion")) Then @@ -2155,6 +2158,7 @@ Partial Class Inventarios_RecepcionAlmacen Private Sub GuardaCompraOC() Dim CveMovimiento As Integer + Dim CveMovimientoOriginal As Integer ' Dim CveMovimientoS Dim InvFolio As String = "" @@ -2203,6 +2207,7 @@ Partial Class Inventarios_RecepcionAlmacen CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), MovimientoFijo:=If(TipoMovimiento = 2, True, False), Remision:=TxtRemision.Text, Modulo:="RA/G1") If CveMovimiento > 0 Then + CveMovimientoOriginal = CveMovimiento InvFolio = ObjInventario.Folio.ToString Dim DtDetalle As New DataTable Dim DtDetalleLote As New DataTable @@ -2283,7 +2288,7 @@ Partial Class Inventarios_RecepcionAlmacen ''VALIDACIÓN DE IMPORTES INGRESADOS VS LA COMPRA U OC If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then - If Not ErrorMovInv AndAlso RecibidaCompleta AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + If Not ErrorMovInv AndAlso RecibidaCompleta AndAlso ObjInventario.GetMovimientosDetalle(CveMovimientoOriginal, UsuarioActual.CveEmpresa) Then Dim dtt As DataTable = ObjInventario.DtResultados Dim tTotalInsertado As Decimal = dtt.SUMD("TotalOriginal") If CveTipoCompra = 8 Then 'entrada almacen con costo indirecto cargado en la misma compra @@ -2297,6 +2302,8 @@ Partial Class Inventarios_RecepcionAlmacen End If End If + Dim ImporteIngresoAdicional As Decimal = 0 + 'SI RECEPCION VALIDA [ENTREGADIRECTA, APARTADOS, AC] If TipoMovimiento = 1 Then 'ENTREGA DIRECTA @@ -2410,45 +2417,11 @@ Partial Class Inventarios_RecepcionAlmacen If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then Dim DtPSVirtual As New DataTable("DtTamanios") - DtPSVirtual.Columns.Add(New DataColumn("CvePS", GetType(Integer))) - DtPSVirtual.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) - DtPSVirtual.Columns.Add(New DataColumn("PU", GetType(Decimal))) - DtPSVirtual.Columns.Add(New DataColumn("CveUM", GetType(Integer))) - Dim DtComprasDetalle As DataTable = Nothing - Dim DtTamanios As DataTable = Nothing - - If ObjCompras.GetCompraDetalle(CveCompraSurtir) Then - DtComprasDetalle = ObjCompras.DtResultados.Copy() + If ObjInventario.GetMovimientosDetalleVirtual(CveMovimiento, UsuarioActual.CveEmpresa) Then + DtPSVirtual = ObjInventario.DtResultados End If - If ObjAcum.TamañoGet(-1, UsuarioActual.CveEmpresa) Then - DtTamanios = ObjAcum.DtResultados.Copy() - End If - - For Each GvRow As GridViewRow In GvInv.Rows - If GvRow.RowType = DataControlRowType.DataRow Then - - For Each Tam As DataRow In DtTamanios.Rows - If Tam("CveTamaño").ToString() = GvRow.DataKey("CveTamaño") Then - Dim CvePSCargo = Tam("CvePSCargo").ToString().ToEntero() - Dim RowCompraDetalle = DtComprasDetalle.FiltroPrimero($"CvePS = {CvePSCargo}") - - If RowCompraDetalle IsNot Nothing Then - Dim Row As DataRow = DtPSVirtual.NewRow() - Row("CvePS") = CvePSCargo - Row("Cantidad") = GvRow.FCTextBox("TbCantidadF").Text.ToDecimal() - Row("PU") = RowCompraDetalle("PU").ToString().ToDecimal() - Row("CveUM") = GvRow.DataKey("CveUM").ToEntero() - DtPSVirtual.Rows.Add(Row) - End If - - End If - Next - - End If - Next - If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero() @@ -2461,8 +2434,8 @@ Partial Class Inventarios_RecepcionAlmacen For Each RowUsado As DataRow In DtPSVirtual.Rows Dim CvePS = RowUsado("CvePS").ToString().ToEntero() - Dim CantidadUsado As Double = RowUsado("Cantidad").ToString().ToDouble() - Dim PU As Decimal = RowUsado("PU").ToString().ToDecimal() + Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal() + Dim PU As Decimal = RowUsado("Cargo").ToString().ToDecimal() Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then @@ -2470,6 +2443,12 @@ Partial Class Inventarios_RecepcionAlmacen Exit For End If Next + If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then + ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal") + End If + + Else + ErrorMovInv = True End If End If @@ -2549,8 +2528,6 @@ Partial Class Inventarios_RecepcionAlmacen Else - - 'VIRTUAL If CveTipoCompra = 9 And UsuarioActual.Empresa.Funcionalidad(573) = "1" Then @@ -2618,6 +2595,27 @@ Partial Class Inventarios_RecepcionAlmacen End If + + ''VALIDACIÓN DE IMPORTES INGRESADOS VS LA COMPRA U OC + 'If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then + If Not ErrorMovInv AndAlso RecibidaCompleta Then + If ObjInventario.GetMovimientosDetalle(CveMovimientoOriginal, UsuarioActual.CveEmpresa) Then + Dim dtt As DataTable = ObjInventario.DtResultados + Dim tTotalInsertado As Decimal = dtt.SUMD("TotalOriginal") + ImporteIngresoAdicional + If CveTipoCompra = 8 Then 'entrada almacen con costo indirecto cargado en la misma compra + tTotalInsertado = dtt.SUMD("Total") ' está incluido el costo indirecto en la factura + End If + If Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) <> Math.Round(tTotalInsertado, 2) Then + ErrorMovInv = True + Alert("La Entrada no coincide con el valor del documento." & Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) & " -" & tTotalInsertado.RoundSQL.ToString, TipoMensaje.MsgError) + GuardaLog("La Entrada no coincide con el valor del documento." & Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) & " -" & tTotalInsertado.RoundSQL.ToString) + End If + Else + ErrorMovInv = True + End If + End If + ' End If + 'ACTUALIZA ESTATUS ALMACEN If TipoMovimiento = 2 Then If Not ObjCompras.UpdateEstatusAlmacen(CveCompraSurtir, 0) Then @@ -2631,212 +2629,212 @@ Partial Class Inventarios_RecepcionAlmacen End If 'PREPOLIZA - SOLO CUANDO SEA RECEPCIÓN - If TipoMovimiento = 1 AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then - Dim DtCostos As DataTable = Nothing - Dim ValorInventario As Decimal = 0 - DtCostos = ObjInventario.DtResultados - Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL - Dim TotalCostoExtranjero As Decimal = DtCostos.SUM("TotalExtranjero").ToDecimal + If TipoMovimiento = 1 AndAlso Not ErrorMovInv Then + If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then - 'VARIABLES - Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero - Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero - Dim IdCtaContableRecepcion = -1 - Dim IdCtaContableRecepcionME = -1 - Dim IdCtaContableRecepcionComplementaria = -1 - Dim Fecha As Date = Now - Dim CveProveedor As Integer = -1 - Dim ProveedorNombre As String = "" - Dim SerieFolio As String = "" - Dim CveConceptoContableCosto = -1 - Dim CveConceptoContableCostoME = -1 - Dim CveConceptoContableCostoComplementaria = -1 - Dim UsaComplementariaFleteImportaciones As Boolean = False - If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = False + Dim DtCostos As DataTable = Nothing + Dim ValorInventario As Decimal = 0 + DtCostos = ObjInventario.DtResultados + Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL + Dim TotalCostoExtranjero As Decimal = DtCostos.SUM("TotalExtranjero").ToDecimal - If DtCostos.Rows.Count > 0 Then - If CveCompraSurtir > 0 Then - If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then - 'Fecha = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate - Fecha = TxtFecha.Text.ToDate - CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero - ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString - SerieFolio = $"Compra: {ObjCompras.DtResultados(0)("SerieFolio").ToString}" - CveConceptoContableCosto = 205 - CveConceptoContableCostoME = 230 - CveConceptoContableCostoComplementaria = 231 + 'VARIABLES + Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero + Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero + Dim IdCtaContableRecepcion = -1 + Dim IdCtaContableRecepcionME = -1 + Dim IdCtaContableRecepcionComplementaria = -1 + Dim Fecha As Date = Now + Dim CveProveedor As Integer = -1 + Dim ProveedorNombre As String = "" + Dim SerieFolio As String = "" + Dim CveConceptoContableCosto = -1 + Dim CveConceptoContableCostoME = -1 + Dim CveConceptoContableCostoComplementaria = -1 + Dim UsaComplementariaFleteImportaciones As Boolean = False + If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = False - If ObjConta.GetRetCuenta(205, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + If DtCostos.Rows.Count > 0 Then + If CveCompraSurtir > 0 Then + If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then + 'Fecha = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate + Fecha = TxtFecha.Text.ToDate + CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero + ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString + SerieFolio = $"Compra: {ObjCompras.DtResultados(0)("SerieFolio").ToString}" + CveConceptoContableCosto = 205 + CveConceptoContableCostoME = 230 + CveConceptoContableCostoComplementaria = 231 + + If ObjConta.GetRetCuenta(205, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + + If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(230, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + + If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(231, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + + Else + ErrorMovInv = True End If + ElseIf CveOCSurtir > 0 Then + If ObjOC.GetOC(CveOCSurtir, UsuarioActual.CveEmpresa) Then + 'Fecha = ObjOC.DtResultados(0)("Fecha").ToString.ToDate + Fecha = TxtFecha.Text.ToDate + CveProveedor = ObjOC.DtResultados(0)("CveProveedor").ToString.ToEntero + ProveedorNombre = ObjOC.DtResultados(0)("RazonSocial").ToString + SerieFolio = String.Format("{0} OC# {1} - Almacén# {2}", ProveedorNombre, ObjOC.DtResultados(0)("Folio"), ObjInventario.Folio) + CveConceptoContableCosto = 176 + CveConceptoContableCostoME = 228 + CveConceptoContableCostoComplementaria = 229 - If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(230, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = True + + If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(176, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + + If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(228, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + + If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(229, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero + End If + Else + ErrorMovInv = True End If - - If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(231, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero - End If - - Else - ErrorMovInv = True End If - ElseIf CveOCSurtir > 0 Then - If ObjOC.GetOC(CveOCSurtir, UsuarioActual.CveEmpresa) Then - 'Fecha = ObjOC.DtResultados(0)("Fecha").ToString.ToDate - Fecha = TxtFecha.Text.ToDate - CveProveedor = ObjOC.DtResultados(0)("CveProveedor").ToString.ToEntero - ProveedorNombre = ObjOC.DtResultados(0)("RazonSocial").ToString - SerieFolio = String.Format("{0} OC# {1} - Almacén# {2}", ProveedorNombre, ObjOC.DtResultados(0)("Folio"), ObjInventario.Folio) - CveConceptoContableCosto = 176 - CveConceptoContableCostoME = 228 - CveConceptoContableCostoComplementaria = 229 - If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = True + If Not ErrorMovInv Then + Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero + CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + If CvePrePoliza > 0 Then + If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveSubProyecto:=CveSubProyecto, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=CveCuentaAlmacen) Then - If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(176, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero - End If + 'AGREGA POR CONCEPTO POR CVEOCDETALLE + If CveOCSurtir > 0 Then + Dim TotalCostoDetalle As Decimal = 0 + Dim TotalCostoAcumulado As Decimal = 0 + Dim cont As Integer = 1 + For Each Dr As DataRow In DtCostos.Rows + TotalCostoDetalle = (Dr("Total").ToString.ToDecimal) + TotalCostoExtranjero = Dr("TotalExtranjero").ToString.ToDecimal + TotalCostoAcumulado += Math.Round(TotalCostoDetalle, 2) - If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(228, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero - End If + 'si es el último movimiento verifica los importes que sean igual + If cont = DtCostos.Rows.Count AndAlso (Math.Round(TotalCosto, 2) <> Math.Round(TotalCostoAcumulado, 2)) Then + TotalCostoDetalle = TotalCostoDetalle + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) + TotalCostoExtranjero = TotalCostoExtranjero + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) + End If - If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(229, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero - End If - Else - ErrorMovInv = True - End If - End If - - If Not ErrorMovInv Then - Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero - CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - If CvePrePoliza > 0 Then - If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveSubProyecto:=CveSubProyecto, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=CveCuentaAlmacen) Then - - 'AGREGA POR CONCEPTO POR CVEOCDETALLE - If CveOCSurtir > 0 Then - Dim TotalCostoDetalle As Decimal = 0 - Dim TotalCostoAcumulado As Decimal = 0 - Dim cont As Integer = 1 - For Each Dr As DataRow In DtCostos.Rows - TotalCostoDetalle = (Dr("Total").ToString.ToDecimal) - TotalCostoExtranjero = Dr("TotalExtranjero").ToString.ToDecimal - TotalCostoAcumulado += Math.Round(TotalCostoDetalle, 2) - - 'si es el último movimiento verifica los importes que sean igual - If cont = DtCostos.Rows.Count AndAlso (Math.Round(TotalCosto, 2) <> Math.Round(TotalCostoAcumulado, 2)) Then - TotalCostoDetalle = TotalCostoDetalle + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) - TotalCostoExtranjero = TotalCostoExtranjero + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) - End If - - If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then - 'COMPLEMENTARIA - If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveSubProyecto:=CveSubProyecto, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then + If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then + 'COMPLEMENTARIA + If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveSubProyecto:=CveSubProyecto, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then + ErrorMovInv = True + Exit For + End If + Else ErrorMovInv = True Exit For End If Else - ErrorMovInv = True - Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle, CveCuenta:=-1, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then + ErrorMovInv = True + Exit For + End If End If - Else - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle, CveCuenta:=-1, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then - ErrorMovInv = True - Exit For - End If - End If - cont = cont + 1 + cont = cont + 1 - Next - Else - TotalCosto = DtCostos.SUMD("Total").RoundSQL - TotalCostoExtranjero = DtCostos.SUMD("TotalExtranjero") - - If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then - 'COMPLEMENTARIA - If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then - ErrorMovInv = True - End If - Else - ErrorMovInv = True - End If + Next Else - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=-1) Then - ErrorMovInv = True + TotalCosto = DtCostos.SUMD("Total").RoundSQL + TotalCostoExtranjero = DtCostos.SUMD("TotalExtranjero") + + If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then + 'COMPLEMENTARIA + If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then + ErrorMovInv = True + End If + Else + ErrorMovInv = True + End If + Else + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=-1) Then + ErrorMovInv = True + End If End If End If - End If - Else - ErrorMovInv = True - End If - Else - ErrorMovInv = True - End If - End If - - If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then - If ObjConta.ValorPolizaDescuadre > 0 Then - GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") - MensajeError = "El Movimiento presenta una diferencia en el registro." - ErrorMovInv = True - End If - End If - - 'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA - If Not ErrorMovInv Then - - If CvePrePolizaCompra > 0 Then - If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then - If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then + Else ErrorMovInv = True - MensajeError = "Error al unificar los conceptos contables" End If - End If - End If - - If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then - If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then - ErrorMovInv = True - MensajeError = "Error al simplificar los conceptos contables" - End If - End If - - If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then - If ObjContaContPAQ Is Nothing Then - ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) - ObjContaContPAQ.IniciaTransacSQL() - End If - If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then - MensajeContabilidad = $"
Movimiento contabilizado en el folio: {ObjConta.ContaFolio}
" Else ErrorMovInv = True - MensajeError = "Error al contabilizar los conceptos contables" End If End If + If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then + If ObjConta.ValorPolizaDescuadre > 0 Then + GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") + MensajeError = "El Movimiento presenta una diferencia en el registro." + ErrorMovInv = True + End If + End If + + 'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA + If Not ErrorMovInv Then + + If CvePrePolizaCompra > 0 Then + If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then + If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then + ErrorMovInv = True + MensajeError = "Error al unificar los conceptos contables" + End If + End If + End If + + If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then + If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then + ErrorMovInv = True + MensajeError = "Error al simplificar los conceptos contables" + End If + End If + + If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then + If ObjContaContPAQ Is Nothing Then + ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) + ObjContaContPAQ.IniciaTransacSQL() + End If + If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then + MensajeContabilidad = $"
Movimiento contabilizado en el folio: {ObjConta.ContaFolio}
" + Else + ErrorMovInv = True + MensajeError = "Error al contabilizar los conceptos contables" + End If + End If + + End If + End If - + Else + ErrorMovInv = True + MensajeError = "Error al obtener movimientos" End If - Else - ErrorMovInv = True - MensajeError = "Error al obtener movimientos" End If - 'PREPOLIZA - NC - If TipoMovimiento = 3 Then + If TipoMovimiento = 3 AndAlso Not ErrorMovInv Then If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then - - Dim DtCostos As DataTable = Nothing DtCostos = ObjInventario.DtResultados - Dim TotalCosto As Decimal = DtCostos.SUM("Total").ToDecimal + Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL Dim TotalNC As Decimal = 0 Dim CveClasificacionDifCostoNC = -1 @@ -2850,11 +2848,9 @@ Partial Class Inventarios_RecepcionAlmacen Dim IdCtaContableClasificacion As Integer = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {CveClasificacionDifCostoNC}").ToEntero Dim CveCuentaClasificacion As Integer = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostosSIG", $"CveClasificacion = {CveClasificacionDifCostoNC}").ToEntero - TotalCosto = Math.Round(TotalCosto, 2) - TotalNC = Math.Round(TotalNC, 2) + TotalNC = TotalNC.RoundSQL Dim DifCostoNC = Math.Round(TotalCosto - TotalNC, 2) - 'VARIABLES Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index b7bfeeb5c..fa0be78b9 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -653,13 +653,33 @@ Partial Class Inventarios_TraspasoAlmacen End If End If + Dim DrAlmO, DrAlmD As DataRow + Dim CveSucursalOrigen, CveSucursalDestino As Integer + Dim TipoAlmacenOrigen, TipoAlmacenDestino As Integer + Dim CveSubProyectoOrigen, CveSubProyectoDestino As Integer + Dim IdCtaContableOrigen, IdCtaContableDestino As Integer + + DrAlmO = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenOrigen.SelectedValue.ToEntero).FiltroPrimero("") + DrAlmD = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenDestino.SelectedValue.ToEntero).FiltroPrimero("") + + If DrAlmO IsNot Nothing AndAlso DrAlmD IsNot Nothing Then + CveSucursalOrigen = DrAlmO("CveSubProyecto").ToString.ToEntero + TipoAlmacenOrigen = DrAlmO("CveTipoAlmacen").ToString.ToEntero + CveSubProyectoOrigen = DrAlmO("CveSubProyecto").ToString.ToEntero + IdCtaContableOrigen = DrAlmO("IdCtaContable").ToString.ToEntero + + CveSucursalDestino = DrAlmD("CveSubProyecto").ToString.ToEntero + TipoAlmacenDestino = DrAlmD("CveTipoAlmacen").ToString.ToEntero + CveSubProyectoDestino = DrAlmD("CveSubProyecto").ToString.ToEntero + IdCtaContableDestino = DrAlmO("IdCtaContable").ToString.ToEntero + + End If + 'VALIDA ALMACEN DISTINTA SUCURSAL DEBE SER TRANSITORIO If Not UsuarioActual.CveEmpresa.Contiene(7, 140) Then '[IPP] EMPRESA VIGILANCIA NO OCUPA TRANSITORIOS - TIENEN MIL SUCURSALES Xd If Not ChkTransitorio.Checked Then - Dim CveSucursalOrigen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen = {DdlAlmacenOrigen.SelectedValue.ToEntero}") - Dim CveSucursalDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen = {DdlAlmacenDestino.SelectedValue.ToEntero}") - If Not GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {DdlAlmacenDestino.SelectedValue.ToEntero}").Contiene("21", "26") Then 'NO SE VALIDA CUANDO EL TIPO DE ALMACEN DESTINO ES DE DEVOLUCION + If Not TipoAlmacenDestino.Contiene(21, 26) Then 'NO SE VALIDA CUANDO EL TIPO DE ALMACEN DESTINO ES DE DEVOLUCION If CveSucursalOrigen <> CveSucursalDestino Then Alert("Por ser un traspaso entre sucursales es necesario indicar que el traspaso es transitorio.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'');", "SonidoError") @@ -757,9 +777,6 @@ Partial Class Inventarios_TraspasoAlmacen Dim TotalCantidad As Decimal = DtMovimientos.SUMD("Cantidad") - Dim TipoAlmacenOrigen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {DdlAlmacenOrigen.SelectedValue.ToEntero}").ToEntero - Dim TipoAlmacenDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {DdlAlmacenDestino.SelectedValue.ToEntero}").ToEntero - ''[IPP-1Noviembre2018] SE COMENTA PORQUE NO TIENE NI PIES NI CABEZA. LE FALTA DESARROLLO 'If (TipoAlmacenOrigen = 14 Or TipoAlmacenDestino = 14) And TipoAlmacenOrigen <> TipoAlmacenDestino Then ' ObjInventario.Dispose() @@ -813,9 +830,9 @@ Partial Class Inventarios_TraspasoAlmacen 'VIRTUAL SALIDA If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then - Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacenOrigen.SelectedValue}").ToEntero() + 'Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacenOrigen.SelectedValue}").ToEntero() - Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 24).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero() + Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 24).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyectoOrigen}").ToEntero() CveMovimientoVirtualSalida = ObjInventario.AddMovimiento(CveAlmacenVirtual, 37, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Modulo:="TA/V", CveMovimientoRelacionado:=CveMovimientoSalida) FolioVirtualSalida = ObjInventario.Folio @@ -845,7 +862,7 @@ Partial Class Inventarios_TraspasoAlmacen Dim TipoMovimientoEntrada = 27 AlmacenEntrada = If(ChkTransitorio.Checked, DdlAlmacenTransitorio.SelectedValue.ToEntero, DdlAlmacenDestino.SelectedValue.ToEntero) - Dim TipoAlmacenEntrada As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {AlmacenEntrada}").ToEntero() + 'Dim TipoAlmacenEntrada As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {AlmacenEntrada}").ToEntero() CveMovimientoEntrada = ObjInventario.AddMovimiento(AlmacenEntrada, TipoMovimientoEntrada, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, "-1"), @@ -858,7 +875,7 @@ Partial Class Inventarios_TraspasoAlmacen If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then Dim Cont As Integer = 0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows - Dim CostoEntrada As Decimal = If(TipoAlmacenEntrada = 26, 0, Dr("PU").ToString.ToDecimal()) + Dim CostoEntrada As Decimal = If(TipoAlmacenDestino = 26, 0, Dr("PU").ToString.ToDecimal()) If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, CostoEntrada, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=-1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Observaciones:=Dr("Observaciones").ToString) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" @@ -870,9 +887,9 @@ Partial Class Inventarios_TraspasoAlmacen End If 'VIRTUAL ENTRADA If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then - Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacenDestino.SelectedValue}").ToEntero() + 'Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacenDestino.SelectedValue}").ToEntero() - Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $" CveTipoAlmacen =24 AND CveSubProyecto={CveSubProyecto}").ToEntero() + Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $" CveTipoAlmacen =24 AND CveSubProyecto={CveSubProyectoDestino }").ToEntero() CveMovimientoVirtualEntrada = ObjInventario.AddMovimiento(CveAlmacenVirtual, 36, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="TA/S3") FolioVirtualEntrada = ObjInventario.Folio @@ -904,17 +921,33 @@ Partial Class Inventarios_TraspasoAlmacen Dim resultado As DataTable = ObjInventario.DtResultados Dim importe As Decimal = resultado.SUMD("Total").RoundSQL - Dim IdCtaContableSalida As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", DdlAlmacenOrigen.SelectedValue.ToEntero)).ToEntero - Dim IdCtaContableEntrada As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", DdlAlmacenDestino.SelectedValue.ToEntero)).ToEntero + 'Dim IdCtaContableSalida As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", DdlAlmacenOrigen.SelectedValue.ToEntero)).ToEntero + 'Dim IdCtaContableEntrada As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", DdlAlmacenDestino.SelectedValue.ToEntero)).ToEntero Dim Contabilizable As Boolean = True - If IdCtaContableSalida = IdCtaContableEntrada Then Contabilizable = False + If IdCtaContableOrigen = IdCtaContableDestino And TipoAlmacenDestino <> 26 Then Contabilizable = False - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableSalida, -1, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable, ImporteMX:=importe) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableOrigen, -1, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable, ImporteMX:=importe) Then ErrorMovInv = True End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableEntrada, -1, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable, ImporteMX:=importe) Then + 'si el tipo de almacen de entrada es Almacen sin costo, se registra al costo, la salida. + If TipoAlmacenOrigen <> 26 AndAlso TipoAlmacenDestino = 26 Then + + Dim tCveClasificacion As Integer = DtMovimientos.MAX("CveClasificacion").ToEntero + Dim dr As DataRow = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=tCveClasificacion).FiltroPrimero("") + Dim IdCuentaCostos As Integer = -1 + If dr IsNot Nothing Then + IdCuentaCostos = dr("IdCuentaCostos").ToString.ToEntero + End If + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, -importe, TxtObservaciones.Text, 69, TxtObservaciones.Text, Fecha, IdCuentaCostos, -1, CveClasificacion:=tCveClasificacion, CveSubProyecto:=CveSubProyectoOrigen, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable, ImporteMX:=-importe) Then + ErrorMovInv = True + End If + Contabilizable = False + importe = 0 + End If + + If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableDestino, -1, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable, ImporteMX:=importe) Then ErrorMovInv = True End If End If @@ -1083,6 +1116,7 @@ Partial Class Inventarios_TraspasoAlmacen Mensaje.AppendFormat("
Folio: {0}", FolioMov, CveMovimiento) Alert(Mensaje.ToString, TipoMensaje.MsgInformacion) + Mensaje.Clear() LimpiaMovimiento() From 2222669fb1656b408b22b428b37e9972112ad0ef Mon Sep 17 00:00:00 2001 From: rrene Date: Sun, 14 Jun 2020 19:53:24 -0700 Subject: [PATCH 12/20] --TC que se tenga com global --- Site.master.vb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Site.master.vb b/Site.master.vb index 9e2ae8cb7..7747f4046 100644 --- a/Site.master.vb +++ b/Site.master.vb @@ -509,20 +509,20 @@ Partial Class Site End Sub Private Function GetTipoCambio() As TipoCambioActual - Dim Retorno As TipoCambioActual = Nothing + 'Dim Retorno As TipoCambioActual - 'sino existe el dato, lo carga por ser la primera vez + Dim TCT As Decimal = 0 Dim ObjGenerales As ClsGenerales = New ClsGenerales - If ObjGenerales.GetTipoCambio(-1, DateTime.Today) And ObjGenerales.DtResultados.Rows.Count > 0 Then - 'lblTipoCambio.Text = String.Format(" | TC {0:C4}", ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal()) + If ObjGenerales.GetTipoCambio(-1, DateTime.Today) Then + If ObjGenerales.DtResultados.Rows.Count > 0 Then - Retorno = New TipoCambioActual With {.Fecha = DateTime.Today, .TipoCambio = ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal()} + TCT = ObjGenerales.DtResultados(0)("TipoCambio").ToString().ToDecimal() End If End If ObjGenerales.Dispose() - Return Retorno + Return New TipoCambioActual With {.Fecha = DateTime.Today, .TipoCambio = TCT} End Function From ec4624c5b563495ea2763fcbb7ee5f7672e13796 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Jun 2020 10:14:41 -0700 Subject: [PATCH 13/20] -- paqueterias y devolucion de ingreso --- Inventarios/EntregaAlmacen.aspx | 8 +- Inventarios/EntregaAlmacen.aspx.vb | 565 ++++++++++++++--------------- 2 files changed, 273 insertions(+), 300 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx b/Inventarios/EntregaAlmacen.aspx index f175f0d5d..2c2378d3e 100644 --- a/Inventarios/EntregaAlmacen.aspx +++ b/Inventarios/EntregaAlmacen.aspx @@ -244,9 +244,9 @@ - - - + + + ver detalle de entrega @@ -453,7 +453,7 @@ - + diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 4b587a27a..e16e212d4 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -244,6 +244,14 @@ Partial Class Inventarios_EntregaAlmacen ViewState("EsDevolucionDirecta") = value End Set End Property + Private Property FormaPaqueteria As Integer + Get + Return CType(ViewState("FormaPaqueteria"), Integer) + End Get + Set(value As Integer) + ViewState("FormaPaqueteria") = value + End Set + End Property #End Region @@ -322,6 +330,7 @@ Partial Class Inventarios_EntregaAlmacen CreaDtDetalleLote() CargaPendientes() + LimpiaCampos() End Sub @@ -628,7 +637,6 @@ Partial Class Inventarios_EntregaAlmacen LnkPaqueteriaDetalle.Visible = True End Select End If - 'TxtFecha.Text = If(EsDevolucionVenta = 1, Now.ToShortDateString, DtDatos.Rows(0)("Fecha").ToString) End If @@ -1931,7 +1939,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(CveAlmacenExA, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/GSC22") + Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then @@ -2228,7 +2236,7 @@ Partial Class Inventarios_EntregaAlmacen Dim CveMovimientoDevolucionSinCosto = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 41, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/GSC4") + Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") Dim FolioDevSinCosto = ObjInventario.Folio If Not CveMovimientoDevolucionSinCosto > 0 Then @@ -2275,13 +2283,15 @@ Partial Class Inventarios_EntregaAlmacen ElseIf TipoMovimiento = 2 Then CantidadPendientePorSalir = CantidadPendientePorSalir - CantidadEntradaSinCosto End If + 'si el alamcen del que salio, es el mismo que entra, no hay traspasos. + If CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero Then CveAlmacenTraspasoDestino = 0 If Not ErrorMovInv AndAlso CantidadPendientePorSalir > 0 Then Dim ConceptoMovimiento = 3 ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18) ConceptoMovimiento = If(CveAlmacenTraspasoDestino > 0, 8, ConceptoMovimiento) - Dim Almacen1 = DdlAlmacen.SelectedValue.ToEntero + Dim Almacen1 As Integer = DdlAlmacen.SelectedValue.ToEntero If TipoDocto = "Rem" AndAlso CveAlmacenTraspasoDestino = 0 Then ErrorMovInv = True @@ -2424,296 +2434,253 @@ Partial Class Inventarios_EntregaAlmacen ErrorMovInv = True TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de entrada") End If - End If - - Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN - Dim DtCostos As DataTable = Nothing - Dim ValorInventario As Decimal = 0 - If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then - DtCostos = ObjInventario.DtResultados - - Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) - Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero - Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero - Dim IdCtaContable As Integer = 0 - Dim CveCuenta As Integer = 0 - If tmpCostos.Rows.Count > 0 Then - - - If ObjVentas.GetVenta(CveVentaSurtir, UsuarioActual.CveEmpresa) Then - Dim Fecha As Date = TxtFecha.Text.ToDate ' If(TipoMovimiento <> 1, TxtFecha.Text.ToDate, ObjVentas.DtResultados(0)("Fecha").ToString.ToDate) - Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero - Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString - Dim Serie As String = ObjVentas.DtResultados(0)("Serie").ToString - Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL() - Dim TotalCostoAcumulado As Decimal = 0 - Dim cont As Integer = 1 - - Dim ValorMultiplicador = 1 - - If TipoMovimiento = 1 Then - ValorMultiplicador = 1 - ElseIf TipoMovimiento = 2 Then - ValorMultiplicador = -1 - ElseIf TipoMovimiento = 2 AndAlso TipoDocto.Contiene({"Dev"}) And (EsDevolucionVenta = 1) Then - ValorMultiplicador = 1 - End If - - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - 'Se agrega movimiento separado por la cuenta de ventas (ER) - - If CvePrePoliza > 0 Then - - For Each RowInv As DataRow In tmpCostos.Rows - ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL() - TotalCostoAcumulado += ValorInventario - - 'cuando es el último movimiento y hay diferencias en los importes - If cont = DtCostos.FiltraParametros("", "", {"CveClasificacion"}).Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then - ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) - End If + End If - End If - - End If - - - 'DEVOLUCION APARTADOS - If Not ErrorMovInv Then - If TipoMovimiento = 2 Then - If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then - - Dim DtTempApartados = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen") - Dim CveMovimientoSalidaApartado = -1 - Dim CveAlmacenApartado = -1 - Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero) - - For Each Dr As DataRow In DtTempApartados.Rows - - If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then - CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, - CveAlmacenDestino:=Dr("CveAlmacen").ToString.ToEntero, Modulo:="RE/G9") - FolioSalida = ObjInventario.Folio - CveAlmacenApartado = Dr("CveAlmacen").ToString.ToEntero - - Dim DrMovto = DtTraspasos.NewRow - DrMovto("Almacen") = Dr("Almacen").ToString.ToEntero - DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString.ToEntero - DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado - DrMovto("FolioSalida") = FolioSalida - DtTraspasos.Rows.Add(DrMovto) - End If - - If Not CveMovimientoSalidaApartado > 0 Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") - Exit For - End If - - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") - Exit For - End If - Next - - If Not ErrorMovInv Then - For Each Dr1 As DataRow In DtTraspasos.Rows - CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero - - CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, - -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, - CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, - CveCliente:=CveCliente, Modulo:="RE/G10") - FolioEntrada = ObjInventario.Folio - - If Not CveMovimientoEntradaApartado > 0 Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.") - Exit For - End If - - Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado - Dr1("FolioEntrada") = FolioEntrada - - If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then - For Each Dr As DataRow In ObjInventario.DtResultados.Rows - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") - Exit For - End If - Next - End If - - If ErrorMovInv Then Exit For - - Next - End If - - End If - End If - End If - - 'QUEMAR REMISIONES - If Not ErrorMovInv And EsDevolucionVenta = 1 And TipoDocto = "Ing" Then - Dim DtDevRem As New DataTable - - 'CARGA REMISIONES DE LA VENTA DEVUELTA - If ObjInventario.GetDevolucionRemisionesFacturadas(CveVentaSurtir) Then - DtDevRem = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen = 0") - Else - ErrorMovInv = True - End If - - If Not ErrorMovInv Then - If DtDevRem.Rows.Count > 0 Then - For Each DrMovtos As DataRow In DtDevRem.FiltraParametros("", "CveRem", {"CveRem"}).Rows - If Not ObjInventario.ActualizarEsDevolucionVenta(DrMovtos("CveRem").ToString.ToEntero, 2) Then - TextoError.AppendFormat("Ocurrió un error al hacer la devolución hacia la remision. Por favor vuelva a intentar.") - ErrorMovInv = True - Exit For - End If - Next - End If - Else - TextoError.AppendFormat("Ocurrió un error al hacer la devolucion a remisión. Por favor vuelva a intentar.") - ErrorMovInv = True - End If - - End If - - 'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER) - If Not ErrorMovInv And EsDevolucionVenta = 1 Then - If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then - TextoError.AppendFormat("Ocurrió un error al hacer la devolución. Por favor vuelva a intentar.") - ErrorMovInv = True - End If - End If - - If Not ErrorMovInv And EsDevolucionVenta = 0 Then - If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, CveVentaSurtir) Then - TextoError.AppendFormat("Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar.") - ErrorMovInv = True - End If - End If - - ' COMIENZA: VIRTUAL - If Not ErrorMovInv AndAlso TipoDocto.Contiene("Ing", "Dev") AndAlso UsuarioActual.Empresa.Funcionalidad(573) = "1" AndAlso CveMovimiento > 0 Then - Dim DtPSVirtual As New DataTable("DtTamanios") - - If ObjInventario.GetMovimientosDetalleVirtual(CveMovimiento, UsuarioActual.CveEmpresa) Then - DtPSVirtual = ObjInventario.DtResultados - End If - - ' - 'DtPSVirtual.Columns.Add(New DataColumn("CvePS", GetType(Integer))) - 'DtPSVirtual.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) - 'DtPSVirtual.Columns.Add(New DataColumn("PU", GetType(Decimal))) - 'DtPSVirtual.Columns.Add(New DataColumn("CveUM", GetType(Integer))) - - 'Dim DtTamanios As DataTable = Nothing - - 'If ObjAcumuladores.TamañoGet(-1, UsuarioActual.CveEmpresa) Then - ' DtTamanios = ObjAcumuladores.DtResultados.Copy() - 'End If - - Dim CveConceptoMovimientoVirtual As Integer = -1 - Dim CveAlmacenVirtual As Integer = -1 - Dim CveMovimientoRelacionadoVirtual As Integer = CveMovimiento - Dim ValidaVirtual As Boolean = False - CveAlmacenVirtual = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 24).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero() - - If TipoMovimiento = 1 Then - CveConceptoMovimientoVirtual = 37 - - ElseIf TipoMovimiento = 2 Then - ValidaVirtual = True - CveConceptoMovimientoVirtual = 36 - End If - - If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 AndAlso CveAlmacenVirtual > 0 AndAlso CveConceptoMovimientoVirtual > 0 Then - CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveMovimientoRelacionado:=CveMovimientoRelacionadoVirtual, Modulo:="RE/G6") - FolioVirtual = ObjInventario.Folio - - If CveMovimientoVirtual > 0 Then - For Each RowUsado As DataRow In DtPSVirtual.Rows - Dim CvePS = RowUsado("CvePS").ToString().ToEntero() - Dim CantidadUsado As Double = RowUsado("Cantidad").ToString().ToDouble() - Dim PU As Decimal = RowUsado("PU").ToString().ToDecimal() - Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() - - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU) Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") - Exit For - End If - Next - Else - ErrorMovInv = True - End If - - Else - If ValidaVirtual Then - ErrorMovInv = True - TextoError.AppendFormat("Ocurrió un error al procesar el movimiento en almacen virtual. Por favor vuelva a intentar.") - - End If - End If - - If DtPSVirtual.Rows.Count = 0 AndAlso ValidaVirtual = True Then - ErrorMovInv = True - TextoError.AppendFormat("No se tienen productos para el almacen virtual.") - End If - End If - - ' TERMINA: VIRTUAL - - - 'AGREGA BITACORA A VENTA - If Not ErrorMovInv Then - Dim MensajeBitacora = If(TipoMovimiento = 1, "Surtida", "Devuelta") - If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimiento, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir) Then - ErrorMovInv = True - End If - End If - - 'Paqueterias guias - If RbEntregaInterna.Checked AndAlso Not ErrorMovInv Then - Dim CveEstatus As Integer = DdlEstatus.SelectedValue.ToEntero() - Dim Fecha As String = TxtFechaPaqInterna.Text - Dim FechaEstimada As String = If(TxtFechaEstimada.Text = "", "-1", TxtFechaEstimada.Text) - Dim NoCajas As Integer = TxtNoCajas.Text.ToEntero() - Dim Observaciones As String = TxtObservacionesPaqInterna.Text - Dim CvePaqueteria As Integer = GlobalDTPaqueterias().FiltroPrimeroValor("CvePaqueteria", String.Format("CveEmpresa={0} AND TipoPaqueteria = 0", UsuarioActual.CveEmpresa)).ToEntero - - If CveSubProyecto > 0 Then - Dim CvePaqueteriaGuia As Integer = ObjGeneral.AddPaqueteriasGuias(CvePaqueteria, 9, CveEstatus, CveSubProyecto, Fecha, "", "", NoCajas, 0.00, "-1", FechaEstimada, Observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EsEntregaInterna:=True) - - If CvePaqueteriaGuia > 0 Then - - If CveVentaSurtir > 0 OrElse CveSubProyecto > 0 Then - If ObjGeneral.AddPaqueteriasGuiasDetalles(CvePaqueteriaGuia, CveVentaSurtir, -1, CveMovimiento, -1) Then - ''manda correo - MandaCorreoEntrega(CveVentaSurtir) - Else - ErrorMovInv = True - End If - End If - If ErrorMovInv Then - Alert("Error en el paqueteria guia detalle", TipoMensaje.MsgError) - End If - Else - ErrorMovInv = True - Alert("Error en el paqueteria guia", TipoMensaje.MsgError) - End If - Else - Alert("Hace falta indicar un Sub Proyecto", TipoMensaje.MsgAdvertencia) - ErrorMovInv = True - End If + Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN + ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, CveMovimiento, TextoError) + End If + + End If + + End If + + + 'DEVOLUCION APARTADOS + If Not ErrorMovInv Then + If TipoMovimiento = 2 Then + If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then + + Dim DtTempApartados = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen") + Dim CveMovimientoSalidaApartado = -1 + Dim CveAlmacenApartado = -1 + Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero) + + For Each Dr As DataRow In DtTempApartados.Rows + + If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then + CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, + Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, + CveAlmacenDestino:=Dr("CveAlmacen").ToString.ToEntero, Modulo:="RE/G9") + FolioSalida = ObjInventario.Folio + CveAlmacenApartado = Dr("CveAlmacen").ToString.ToEntero + + Dim DrMovto = DtTraspasos.NewRow + DrMovto("Almacen") = Dr("Almacen").ToString.ToEntero + DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString.ToEntero + DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado + DrMovto("FolioSalida") = FolioSalida + DtTraspasos.Rows.Add(DrMovto) + End If + + If Not CveMovimientoSalidaApartado > 0 Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") + Exit For + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") + Exit For + End If + Next + + If Not ErrorMovInv Then + For Each Dr1 As DataRow In DtTraspasos.Rows + CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero + + CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, + -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, + CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, + CveCliente:=CveCliente, Modulo:="RE/G10") + FolioEntrada = ObjInventario.Folio + + If Not CveMovimientoEntradaApartado > 0 Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.") + Exit For End If + + Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado + Dr1("FolioEntrada") = FolioEntrada + + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then + For Each Dr As DataRow In ObjInventario.DtResultados.Rows + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") + Exit For + End If + Next + End If + + If ErrorMovInv Then Exit For + + Next + End If + + End If + End If + End If + + 'QUEMAR REMISIONES + If Not ErrorMovInv And EsDevolucionVenta = 1 And TipoDocto = "Ing" Then + Dim DtDevRem As New DataTable + + 'CARGA REMISIONES DE LA VENTA DEVUELTA + If ObjInventario.GetDevolucionRemisionesFacturadas(CveVentaSurtir) Then + DtDevRem = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen = 0") + Else + ErrorMovInv = True + End If + + If Not ErrorMovInv Then + If DtDevRem.Rows.Count > 0 Then + For Each DrMovtos As DataRow In DtDevRem.FiltraParametros("", "CveRem", {"CveRem"}).Rows + If Not ObjInventario.ActualizarEsDevolucionVenta(DrMovtos("CveRem").ToString.ToEntero, 2) Then + TextoError.AppendFormat("Ocurrió un error al hacer la devolución hacia la remision. Por favor vuelva a intentar.") + ErrorMovInv = True + Exit For + End If + Next + End If + Else + TextoError.AppendFormat("Ocurrió un error al hacer la devolucion a remisión. Por favor vuelva a intentar.") + ErrorMovInv = True + End If + + End If + + 'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER) + If Not ErrorMovInv And EsDevolucionVenta = 1 Then + If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then + TextoError.AppendFormat("Ocurrió un error al hacer la devolución. Por favor vuelva a intentar.") + ErrorMovInv = True + End If + End If + + If Not ErrorMovInv And EsDevolucionVenta = 0 Then + If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, CveVentaSurtir) Then + TextoError.AppendFormat("Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar.") + ErrorMovInv = True + End If + End If + + ' COMIENZA: VIRTUAL + If Not ErrorMovInv AndAlso TipoDocto.Contiene("Ing", "Dev") AndAlso UsuarioActual.Empresa.Funcionalidad(573) = "1" AndAlso CveMovimiento > 0 Then + Dim DtPSVirtual As New DataTable("DtTamanios") + + If ObjInventario.GetMovimientosDetalleVirtual(CveMovimiento, UsuarioActual.CveEmpresa) Then + DtPSVirtual = ObjInventario.DtResultados + End If + + ' + 'DtPSVirtual.Columns.Add(New DataColumn("CvePS", GetType(Integer))) + 'DtPSVirtual.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) + 'DtPSVirtual.Columns.Add(New DataColumn("PU", GetType(Decimal))) + 'DtPSVirtual.Columns.Add(New DataColumn("CveUM", GetType(Integer))) + + 'Dim DtTamanios As DataTable = Nothing + + 'If ObjAcumuladores.TamañoGet(-1, UsuarioActual.CveEmpresa) Then + ' DtTamanios = ObjAcumuladores.DtResultados.Copy() + 'End If + + Dim CveConceptoMovimientoVirtual As Integer = -1 + Dim CveAlmacenVirtual As Integer = -1 + Dim CveMovimientoRelacionadoVirtual As Integer = CveMovimiento + Dim ValidaVirtual As Boolean = False + CveAlmacenVirtual = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 24).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero() + + If TipoMovimiento = 1 Then + CveConceptoMovimientoVirtual = 37 + + ElseIf TipoMovimiento = 2 Then + ValidaVirtual = True + CveConceptoMovimientoVirtual = 36 + End If + + If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 AndAlso CveAlmacenVirtual > 0 AndAlso CveConceptoMovimientoVirtual > 0 Then + CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, + Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveMovimientoRelacionado:=CveMovimientoRelacionadoVirtual, Modulo:="RE/G6") + FolioVirtual = ObjInventario.Folio + + If CveMovimientoVirtual > 0 Then + For Each RowUsado As DataRow In DtPSVirtual.Rows + Dim CvePS = RowUsado("CvePS").ToString().ToEntero() + Dim CantidadUsado As Double = RowUsado("Cantidad").ToString().ToDouble() + Dim PU As Decimal = RowUsado("PU").ToString().ToDecimal() + Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU) Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") + Exit For + End If + Next + Else + ErrorMovInv = True + End If + + Else + If ValidaVirtual Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar el movimiento en almacen virtual. Por favor vuelva a intentar.") + + End If + End If + + If DtPSVirtual.Rows.Count = 0 AndAlso ValidaVirtual = True Then + ErrorMovInv = True + TextoError.AppendFormat("No se tienen productos para el almacen virtual.") + End If + End If + + ' TERMINA: VIRTUAL + + + 'AGREGA BITACORA A VENTA + If Not ErrorMovInv Then + Dim MensajeBitacora = If(TipoMovimiento = 1, "Surtida", "Devuelta") + If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimiento, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir) Then + ErrorMovInv = True + End If + End If + + 'Paqueterias guias + If RbEntregaInterna.Checked AndAlso Not ErrorMovInv Then + Dim CveEstatus As Integer = DdlEstatus.SelectedValue.ToEntero() + Dim Fecha As String = TxtFechaPaqInterna.Text + Dim FechaEstimada As String = If(TxtFechaEstimada.Text = "", "-1", TxtFechaEstimada.Text) + Dim NoCajas As Integer = TxtNoCajas.Text.ToEntero() + Dim Observaciones As String = TxtObservacionesPaqInterna.Text + Dim CvePaqueteria As Integer = GlobalDTPaqueterias().FiltroPrimeroValor("CvePaqueteria", String.Format("CveEmpresa={0} AND TipoPaqueteria = 0", UsuarioActual.CveEmpresa)).ToEntero + + If CveSubProyecto > 0 Then + Dim CvePaqueteriaGuia As Integer = ObjGeneral.AddPaqueteriasGuias(CvePaqueteria, 9, CveEstatus, CveSubProyecto, Fecha, "", "", NoCajas, 0.00, "-1", FechaEstimada, Observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EsEntregaInterna:=True) + + If CvePaqueteriaGuia > 0 Then + + If CveVentaSurtir > 0 OrElse CveSubProyecto > 0 Then + If ObjGeneral.AddPaqueteriasGuiasDetalles(CvePaqueteriaGuia, CveVentaSurtir, -1, CveMovimiento, -1) Then + ''manda correo + MandaCorreoEntrega(CveVentaSurtir) + Else + ErrorMovInv = True + End If + End If + If ErrorMovInv Then + Alert("Error en el paqueteria guia detalle", TipoMensaje.MsgError) + End If + Else + ErrorMovInv = True + Alert("Error en el paqueteria guia", TipoMensaje.MsgError) + End If + Else + Alert("Hace falta indicar un Sub Proyecto", TipoMensaje.MsgAdvertencia) + ErrorMovInv = True + End If + End If Catch ex As Exception ErrorMovInv = True OnError("Ocurrió un error al guardar", ex) @@ -3671,13 +3638,12 @@ Partial Class Inventarios_EntregaAlmacen Protected Sub EntregaRadioGroup_Click(sender As Object, e As EventArgs) If RbEntregaExterna.Checked Then RegistraScript("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx',800,547,'N')") - LnkPaqueteriaDetalle.Visible = False ElseIf RbEntregaInterna.Checked Then - LnkPaqueteriaDetalle.Visible = True - 'RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") + RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") + 'RegistraScript($"AbrirVentana('/General/PopUpPaqueteriasGuiasInternas.aspx?CveVenta={CveVentaSurtir}&CveSubProyecto={CveSubProyecto}',800,547,'N')") + 'CveVentaSurtir ElseIf RbSinEntrega.Checked Then LimpiaCampos() - LnkPaqueteriaDetalle.Visible = False End If End Sub @@ -3689,6 +3655,13 @@ Partial Class Inventarios_EntregaAlmacen TxtObservacionesPaqInterna.Text = "" UpPaqInterna.Update() End Sub + Protected Sub PaqueteriaDetalle_Click(sender As Object, e As EventArgs) + If RbEntregaExterna.Checked Then + RegistraScript("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx',800,547,'N')") + ElseIf RbEntregaInterna.Checked Then + RegistraScript("$('#ModalPaqueteriaInterna').modal('show')") + End If + End Sub #End Region From 75a8477d527e475d3b1d779c42e783823c5323fa Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Mon, 15 Jun 2020 15:14:03 -0700 Subject: [PATCH 14/20] =?UTF-8?q?se=20agreg=C3=B3=20consulta=20de=20correo?= =?UTF-8?q?s=20para=20mandar=20norificaciones=20en=20caso=20de=20permisos?= =?UTF-8?q?=20de=20280?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- General/RepPaqueteriasGuias.aspx.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/General/RepPaqueteriasGuias.aspx.cs b/General/RepPaqueteriasGuias.aspx.cs index 7793d8e44..94b87e29b 100644 --- a/General/RepPaqueteriasGuias.aspx.cs +++ b/General/RepPaqueteriasGuias.aspx.cs @@ -930,6 +930,7 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas DataRow DbRowVenta = ObjVentas.DtResultados.Rows[0]; int CveCliente = DbRowVenta["CveCliente"].ToString().ToEntero(); + int CveVendedor = DbRowVenta["CveVendedor"].ToString().ToEntero(); SerieFolio = String.Format("{0}-{1}", DbRowVenta["Serie"].ToString(), DbRowVenta["Folio"].ToString().ToEntero()); NombreCliente = DbRowVenta["ClienteNombre"].ToString(); @@ -947,6 +948,10 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas } // Destinatario = "sig.buzon02@gmail.com"; // CORREO PRUEBA + //if (UsuarioActual.Empresa.Funcionalidad(280) == "1" && CveCliente > 0 && CveVendedor > 0) + //{ + // Destinatario = getCorreoNotificacion(CveCliente,CveVendedor); + //} if (ObjVentas.GetVentaDetalle(CveVenta)) { @@ -957,6 +962,22 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas } } } + + private string getCorreoNotificacion(int CveCliente, int CveVendedor) + { + DataRow DatosCliente = get_GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveCliente = {0}",CveCliente)); + DataRow DatosVendedor = get_GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveVendedor = {0}", CveVendedor)); + if (DatosCliente != null && DatosVendedor != null) + { + StringBuilder correos = new StringBuilder(""); + if (DatosCliente["CorreoEntregaCompras"].ToString().Length > 0) correos.Append(string.Format("{0};", DatosCliente["CorreoEntregaCompras"].ToString())); + if (DatosCliente["CorreoEntregaAlmacen"].ToString().Length > 0) correos.Append(string.Format("{0};", DatosCliente["CorreoEntregaAlmacen"].ToString())); + if (DatosVendedor["Correo"].ToString().Length > 0) correos.Append(string.Format("{0};", DatosVendedor["Correo"].ToString())); + if (DatosVendedor["CorreoAdicionalNotificaciones"].ToString().Length > 0) correos.Append(string.Format("{0};", DatosVendedor["CorreoAdicionalNotificaciones"].ToString())); + return correos.ToString(); + } + return ""; + } #endregion protected void Reasignar_Click(object sender, EventArgs e) From 7db4824e2607ee7ad0e967dbf5dfb0941d773f27 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Mon, 15 Jun 2020 15:22:06 -0700 Subject: [PATCH 15/20] Correcion de cancelacion --- App_Code/Modelos.vb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 9fdf3e692..08b59bea8 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -4585,7 +4585,7 @@ Namespace Modelos End If 'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO) - If Not ErrorCancelar AndAlso DtDevoluciones IsNot Nothing Then + If Not ErrorCancelar AndAlso DtDevoluciones IsNot Nothing AndAlso DtDevoluciones.Rows.Count > 0 Then For Each CveRemision As Integer In ListaRemisionesCancelar Dim DtDevRemision As DataTable = DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}") @@ -4603,8 +4603,6 @@ Namespace Modelos Next Next - Else - ErrorCancelar = True End If End If From 82a2315f01b4dff3ad30ad4fd4f8c09888dd6b8b Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Mon, 15 Jun 2020 16:47:28 -0700 Subject: [PATCH 16/20] --- App_Code/DtDatos.xsd | 31 ++++++++++++++++++------------- App_Code/DtDatos.xss | 2 +- Bin/Newtonsoft.Json.dll | Bin 700336 -> 504320 bytes vwd.webinfo | 2 ++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/App_Code/DtDatos.xsd b/App_Code/DtDatos.xsd index a4b0800c5..f354dcef4 100644 --- a/App_Code/DtDatos.xsd +++ b/App_Code/DtDatos.xsd @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -137,7 +137,7 @@ - + @@ -153,7 +153,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -179,7 +179,7 @@ - + @@ -215,7 +215,7 @@ - + @@ -237,7 +237,7 @@ - + @@ -259,10 +259,15 @@ + + + + + - + diff --git a/App_Code/DtDatos.xss b/App_Code/DtDatos.xss index d278af616..6f4a11dac 100644 --- a/App_Code/DtDatos.xss +++ b/App_Code/DtDatos.xss @@ -4,7 +4,7 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + diff --git a/Bin/Newtonsoft.Json.dll b/Bin/Newtonsoft.Json.dll index e4a63399d0d92764c849df273d5cff4bf1cd829a..55d537fb9ff1e540d8daaccc32978ce0824653c5 100644 GIT binary patch literal 504320 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

XFjv2M6#%<`n&UynY-1RSiN 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