From 7f9da6400b8d4a7300b6675d0596f2c0060a6b9c Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 17 Sep 2024 17:15:21 -0700 Subject: [PATCH 01/23] =?UTF-8?q?--=20al=20crear=20remisi=C3=B3n=20pasar?= =?UTF-8?q?=20el=20par=C3=A1metro=20de=20almacendestino?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OS/OrdenesServicios.aspx.vb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OS/OrdenesServicios.aspx.vb b/OS/OrdenesServicios.aspx.vb index 88a756aea..d6b582596 100644 --- a/OS/OrdenesServicios.aspx.vb +++ b/OS/OrdenesServicios.aspx.vb @@ -318,6 +318,7 @@ Partial Class OS_OrdenesServicios Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then + 'DATOS CLIENTE CveCliente = 0 NombreCliente = "" @@ -3535,6 +3536,7 @@ Partial Class OS_OrdenesServicios ObjFactura.Paciente = TxtPacienteModal.Text.Trim ObjFactura.Episodio = TxtEpisodioModal.Text.Trim ObjFactura.Alfa1 = TxtFolioRemisionModal.Text.Trim + ObjFactura.CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=10).FiltroPrimeroValor("CveAlmacen").ToEntero ObjFactura.CveVendedor = tCveVendedor Dim TmpDTMat As New DataTable @@ -3578,7 +3580,7 @@ Partial Class OS_OrdenesServicios If ProcesoOK Then ObjFactura.CalculaTotales() Dim Resp As New Modelos.Factura.MMensajeFactura - Resp = ObjFactura.EmitirFactura(False, Transac:=TransaccionSQL) + Resp = ObjFactura.EmitirFactura(False, Transac:=TransaccionSQL, Modulo:="OS/Remision") If Resp.CveVenta > 0 Then Respuesta.CveVenta = Resp.CveVenta From 00326453556ad8f8eda2e6abb8f7afae5a8c4ecc Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 18 Sep 2024 19:16:02 -0700 Subject: [PATCH 02/23] -- MEJORA EN PAGO DE COMpra con venta en USD --- Bancos/PopIECompras.aspx | 4 ++-- Bancos/PopIECompras.aspx.vb | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Bancos/PopIECompras.aspx b/Bancos/PopIECompras.aspx index 5f33cdea9..09ee2d437 100644 --- a/Bancos/PopIECompras.aspx +++ b/Bancos/PopIECompras.aspx @@ -703,11 +703,11 @@ total = total * TC; } - debugger + debugger; if ($("#" + Chk.id).is(":checked")) { $('#' + Obj).attr('disabled', false); if (ToDouble($get('TxtImporte').value) != total) { - + if ((ToDouble($get('TxtImporte').value) + saldo) > total) { $('#' + Obj).val(saldo - (ToDouble($get('TxtImporte').value) + saldo - total)); $get('TxtImporte').value = (total / TC).toFixed(2) diff --git a/Bancos/PopIECompras.aspx.vb b/Bancos/PopIECompras.aspx.vb index 1190b4409..5d3eb3332 100644 --- a/Bancos/PopIECompras.aspx.vb +++ b/Bancos/PopIECompras.aspx.vb @@ -1181,7 +1181,7 @@ Partial Class Bancos_PopIECompras e.Row.FCTextBox("TxtSaldoDeudor").Attributes.Add("onKeyUp", "AjustaTextboxDeudores();") e.Row.FCTextBox("LbTipoMoneda").Text = If(e.Row.DataKey("CveMoneda").ToString.ToEntero = 1, "USD", " MXN") - Dim rv As RangeValidator = CType(e.Row.FindControl("RVSaldoDeudor"), RangeValidator) + 'Dim rv As RangeValidator = CType(e.Row.FindControl("RVSaldoDeudor"), RangeValidator) End If End Sub #End Region @@ -1456,12 +1456,13 @@ Partial Class Bancos_PopIECompras End If If MsgError = "" Then + Dim tc As Decimal = If(rw.DataKey("CveMoneda").ToEntero = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) Dim VentaActual As New Venta(UsuarioActual) With {.CveVenta = rw.DataKey("CveVenta").ToEntero, .ClienteNombre = NombreCliente, .SerieFolio = rw.DataKey("SerieFolio"), .CveCliente = rw.DataKey("CveCliente").ToEntero, .IVA = rw.DataKey("IVA").ToDecimal, .IEPS = rw.DataKey("IEPS").ToDecimal, .RetIVA = rw.DataKey("RetIVA").ToDecimal, .RetISR = rw.DataKey("RetISR").ToDecimal, .Total = rw.DataKey("Total").ToDecimal, .PorcentajeIVA = rw.DataKey("PorcentajeIVA").ToDecimal, .CveSubProyecto = rw.DataKey("CveSubProyecto").ToEntero, .CveMoneda = rw.DataKey("CveMoneda").ToEntero, .TC = rw.DataKey("TipoCambio").ToDecimal} Dim PagoVenta As New VentaPago PagoVenta.CveMonedaPago = rw.DataKey("CveMoneda").ToEntero PagoVenta.ImportePago = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal PagoVenta.ImportePagoVenta = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal - PagoVenta.TCPago = rw.DataKey("TipoCambio").ToDecimal + PagoVenta.TCPago = tc PagoVenta.CveCompraRelacionada = CompraActual.CveCompra PagoVenta.TipoPago = "Venta" If AplicaPrePolizaPagoVenta(VentaActual, PagoVenta, CvePrePoliza, ObjMov) Then From 3c962444e5c48f01652a27d0748bae7804082b49 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 18 Sep 2024 19:16:42 -0700 Subject: [PATCH 03/23] -- en el listado de productos del calendario, que se visualicen los solicitados. no solo los entregados y usados --- OS/RepServiciosMedicos.aspx | 5 +++-- OS/RepServiciosMedicos.aspx.vb | 16 +++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/OS/RepServiciosMedicos.aspx b/OS/RepServiciosMedicos.aspx index a48100e0f..29d05c90f 100644 --- a/OS/RepServiciosMedicos.aspx +++ b/OS/RepServiciosMedicos.aspx @@ -468,9 +468,10 @@
- + + - +
diff --git a/OS/RepServiciosMedicos.aspx.vb b/OS/RepServiciosMedicos.aspx.vb index c26877e5e..fbd4ad598 100644 --- a/OS/RepServiciosMedicos.aspx.vb +++ b/OS/RepServiciosMedicos.aspx.vb @@ -609,18 +609,24 @@ Partial Class OS_RepServiciosMedicos Dim tCve As Integer = ObjOS.CveVenta 'busca la remisión If tCve <= 0 Then tCve = ObjOS.CveCotizacion 'sino hay remisión toma el pedido If tCve > 0 Then - 'Dim objv As New ClsVentas Dim dttps As New DataTable If ObjOS.GetDetalleMateriales(-1, CveOsConsultar) Then dttps = ObjOS.DtResultados End If - 'If objv.GetVentaDetalle(tCve) Then - ' dttps = objv.DtResultados - 'End If - 'objv.Dispose() + GvPS.DataSource = dttps GvPS.DataBind() + + 'sino hay información, cargamos los productos a surtir + 'If dttps IsNot Nothing AndAlso dttps.Rows.Count > 0 AndAlso ObjOS.CveCotizacion > 0 Then + ' Dim objv As New ClsVentas + ' If objv.GetVentaDetalle(tCve) Then + ' dttps = objv.DtResultados + ' End If + ' objv.Dispose() + 'End If + End If Dim TipoEstatus As Integer = 0 TipoEstatus = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("TipoEstatus", String.Format("CveEstatusOrdenServicio = {0}", ObjOS.CveEstatusOrdenServicio), "CveEstatusOrdenServicio ASC").ToEntero From 9df225c7beb6e7bd6b7836b2b1b72a8e3215ac95 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 18 Sep 2024 19:16:53 -0700 Subject: [PATCH 04/23] --mejora en lectura de xml, --- Compras/Proveedores.aspx.vb | 93 ++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 43 deletions(-) diff --git a/Compras/Proveedores.aspx.vb b/Compras/Proveedores.aspx.vb index 6c937d58b..84d5c9695 100644 --- a/Compras/Proveedores.aspx.vb +++ b/Compras/Proveedores.aspx.vb @@ -724,19 +724,33 @@ Partial Class Compras_Proveedores Dim ObjeFacturas As New ClsCompras If ObjeFacturas.GetFacturas(CveFactura, "-1", NowADS().AddYears(-2), NowADS(), "-1", "-1", -1, -1, -1, -1, "-1", UsuarioActual.CveEmpresa) Then Dim XMLDoc As New XmlDocument - + Dim SXML As String + Dim dr As DataRow = ObjeFacturas.DtResultados.Rows(0) + Dim Archivo As String = String.Format("{0}Compras\{1}\{2}", UsuarioActual.Empresa.Ruta, dr("RFCDe"), dr("XML")) Try - Dim dr As DataRow = ObjeFacturas.DtResultados.Rows(0) - - - Dim SXML As String = File.ReadAllText(UsuarioActual.Empresa.Ruta & "Compras\" & dr("RFCDe").ToString & "\" & dr("XML").ToString) + SXML = File.ReadAllText(Archivo).Replace("<br>", "").Replace("<", "").Replace("o;?", "").Replace(ChrW(&HFEFF), "") 'SXML = SXML.TrimStart(vbCr, vbLf, vbNullChar) 'SXML = SXML.TrimEnd(vbCr, vbLf, vbNullChar) SXML = SXML.Trim(New Char() {""c}) SXML = SXML.Replace("o;?", "") XMLDoc.LoadXml(SXML) - Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix) + Catch ex As Exception + Try + Dim oReader As New StreamReader(Archivo, Encoding.GetEncoding("ISO-8859-1")) + XMLDoc.Load(oReader) + oReader.Dispose() + Catch ex2 As Exception + GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString()) + End Try + End Try + + If XMLDoc.InnerXml = "" Then + Alert("No se pudo procesar el archivo xml.", TipoMensaje.MsgError) + Return 0 + End If + + Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix) Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3" Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) @@ -756,55 +770,51 @@ Partial Class Compras_Proveedores 'If Prefijo.ToLower <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2" namespaces.AddNamespace(Prefijo, cfdVer) + ' XMLDoc.LoadXml(File.ReadAllText(Archivo).Replace("<br>", "").Replace("<", "").Replace("o;?", "").Replace(ChrW(&HFEFF), "")) Dim node As XmlNode node = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) - If node IsNot Nothing Then - TxtRFC.Text = ValorXml(node, "rfc") + If node IsNot Nothing Then + TxtRFC.Text = ValorXml(node, "rfc") - If Version = "3.3" Or Version = "4.0" Then - TxtRazonSocial.Text = HttpUtility.HtmlDecode(ValorXml(node, "Nombre")) - TxtNombreComercial.Text = HttpUtility.HtmlDecode(ValorXml(node, "Nombre")) - ChkEstado.Checked = True + If Version = "3.3" Or Version = "4.0" Then + TxtRazonSocial.Text = HttpUtility.HtmlDecode(ValorXml(node, "Nombre")) + TxtNombreComercial.Text = HttpUtility.HtmlDecode(ValorXml(node, "Nombre")) + ChkEstado.Checked = True - Dim CodigoRegimenFiscal As String = ValorXml(node, "RegimenFiscal") + Dim CodigoRegimenFiscal As String = ValorXml(node, "RegimenFiscal") - If Version = "4.0" Or CodigoRegimenFiscal.Trim.Length > 0 Then + If Version = "4.0" Or CodigoRegimenFiscal.Trim.Length > 0 Then - Dim CveRegimenFiscal As Integer = GlobalDTRegimenesFiscales(-1).FiltroPrimeroValor("CveRegimenFiscal", $" CodigoRegimenFiscal = '{ CodigoRegimenFiscal }'").ToEntero - DdlRegimenFiscal.SelectedValueExist(CveRegimenFiscal) + Dim CveRegimenFiscal As Integer = GlobalDTRegimenesFiscales(-1).FiltroPrimeroValor("CveRegimenFiscal", $" CodigoRegimenFiscal = '{ CodigoRegimenFiscal }'").ToEntero + DdlRegimenFiscal.SelectedValueExist(CveRegimenFiscal) - End If + End If - Else - TxtRazonSocial.Text = HttpUtility.HtmlDecode(ValorXml(node, "nombre")) - TxtNombreComercial.Text = HttpUtility.HtmlDecode(ValorXml(node, "nombre")) - Dim nodeDomicilio As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:DomicilioFiscal", Prefijo), namespaces) - TxtDireccion.Text = ValorXml(nodeDomicilio, "calle") & " " & ValorXml(nodeDomicilio, "noExterior") - ChkEstado.Checked = True + Else + TxtRazonSocial.Text = HttpUtility.HtmlDecode(ValorXml(node, "nombre")) + TxtNombreComercial.Text = HttpUtility.HtmlDecode(ValorXml(node, "nombre")) + Dim nodeDomicilio As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:DomicilioFiscal", Prefijo), namespaces) + TxtDireccion.Text = ValorXml(nodeDomicilio, "calle") & " " & ValorXml(nodeDomicilio, "noExterior") + ChkEstado.Checked = True - node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) - If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then - 'Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Retencion", Prefijo), namespaces) - 'Dim nodeRet As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Retenciones", Prefijo), namespaces) + node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) + If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then + 'Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Retencion", Prefijo), namespaces) + 'Dim nodeRet As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Retenciones", Prefijo), namespaces) - Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Traslado", Prefijo), namespaces) - For Each traslado As XmlNode In nodeTraslados - If traslado.Attributes("impuesto").Value = "IVA" Then - TxtIVA.Text = traslado.Attributes("tasa").Value.ToDouble.ToString("N2") - 'Retenciones - End If - Next - End If + Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Traslado", Prefijo), namespaces) + For Each traslado As XmlNode In nodeTraslados + If traslado.Attributes("impuesto").Value = "IVA" Then + TxtIVA.Text = traslado.Attributes("tasa").Value.ToDouble.ToString("N2") + 'Retenciones + End If + Next End If End If - - Catch ex As Exception - Alert(String.Format("No se pudo cargar la información ({0})", ex.Message), TipoMensaje.MsgAdvertencia) - Return 0 - End Try + End If End If Return 1 @@ -5847,11 +5857,8 @@ Partial Class Compras_Proveedores Protected Sub LnkDownLoadDoc_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim Adjunto As String = GvRow.DataKey("Adjunto") - - Dim stringDescargaDocumento As String = UsuarioActual.Empresa.Ruta & String.Format("Edoc\\Proveedor\{0}\{1}", CveProveedor, Adjunto) - Dim File As New FileInfo(stringDescargaDocumento) If File.Exists Then From bbbb8c6f0901bb85ffe344a4c17e99c9d9c35974 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 18 Sep 2024 19:17:03 -0700 Subject: [PATCH 05/23] -- proceso para buscar por serie --- Inventarios/PopUpExistenciasAlmacen.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/PopUpExistenciasAlmacen.aspx.vb b/Inventarios/PopUpExistenciasAlmacen.aspx.vb index 99b2f1985..2df14d506 100644 --- a/Inventarios/PopUpExistenciasAlmacen.aspx.vb +++ b/Inventarios/PopUpExistenciasAlmacen.aspx.vb @@ -54,7 +54,7 @@ Partial Class Inventarios_Default DivListasPrecios2.Visible = True End If - If UsuarioActual.CveRol = 1 Then + If UsuarioActual.TienePermisoProceso(387) Then LnkBsucarSerie.Visible = True End If From 9982474dd814c456f99a2cb253a0d5b0f77285b2 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 18 Sep 2024 19:17:40 -0700 Subject: [PATCH 06/23] =?UTF-8?q?--facturaci=C3=B3n=20masiva=20STF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ashx/SIGFacturacion.ashx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Ashx/SIGFacturacion.ashx b/Ashx/SIGFacturacion.ashx index 6a88e43ea..2bb590348 100644 --- a/Ashx/SIGFacturacion.ashx +++ b/Ashx/SIGFacturacion.ashx @@ -126,7 +126,7 @@ Public Class SIGFacturacion : Implements IHttpHandler, IRequiresSessionState If DTClientes IsNot Nothing Then 'QUITAR CLIENTES QUE NO DEBEN DE ESTAR - DTClientes = DTClientes.FiltraParametros("CveCliente NOT IN (265989,265991,265994,266010,266011,266013) ") + DTClientes = DTClientes.FiltraParametros("CveCliente NOT IN (1285420,1285423,1285424) ") For Each RowCliente As DataRow In DTClientes.Rows Dim CveCliente As Integer = RowCliente("CveCliente").ToString().ToEntero() @@ -276,7 +276,7 @@ Public Class SIGFacturacion : Implements IHttpHandler, IRequiresSessionState ObjFactura.Serie = Serie ObjFactura.Folio = Folio.ToEntero() ObjFactura.TipoMensajeRespuesta = TipoMensajeRespuesta.TextoLimpio - ObjFactura.Version = "3.3" + ObjFactura.Version = "4.0" ObjFactura.FolioFiscal = "" ObjFactura.CveUsuario = UsuarioActual.CveUsuario ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa From c0e1be56a30910a140fcf996ae2d1c0b23880993 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 19 Sep 2024 12:23:02 -0700 Subject: [PATCH 07/23] - recarga globaldtclientestodossucursales --- Ventas/Clientes.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/Clientes.aspx.vb b/Ventas/Clientes.aspx.vb index c9d23b829..fd393f8e1 100644 --- a/Ventas/Clientes.aspx.vb +++ b/Ventas/Clientes.aspx.vb @@ -2846,7 +2846,7 @@ Partial Class Clientes End Sub Private Sub GeneraGlobalDT() GlobalDTCliente(UsuarioActual.CveEmpresa) = Nothing - + GlobalDTClientesTodosSucursales(UsuarioActual.CveEmpresa) = Nothing End Sub #End Region From cbfebe2585fe95c90b1d77a38bfb78aa72926ef5 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 20 Sep 2024 11:33:17 -0700 Subject: [PATCH 08/23] =?UTF-8?q?--=20que=20no=20se=20est=C3=A9n=20generan?= =?UTF-8?q?do=20en=20autom=C3=A1tico=20almacenes,=20para=20una=20sola=20ve?= =?UTF-8?q?nta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/Clientes.aspx.vb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Ventas/Clientes.aspx.vb b/Ventas/Clientes.aspx.vb index fd393f8e1..b91f6aae5 100644 --- a/Ventas/Clientes.aspx.vb +++ b/Ventas/Clientes.aspx.vb @@ -2580,11 +2580,11 @@ Partial Class Clientes If Not ErrorProceso Then - If UsuarioActual.Empresa.Funcionalidad(404) = "30" AndAlso UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DdlAlmacenAsignado.SelectedValue.ToEntero = -1 Then 'limpiar ddl alamcen temporal que se agrego temporalmente - If Not GeneraGuardaAlmacenAsignado(TxtNombre.Text.Trim, ObjClientes.IniciaTransacSQL) Then - ErrorProceso = True - End If - End If + 'If UsuarioActual.Empresa.Funcionalidad(404) = "30" AndAlso UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DdlAlmacenAsignado.SelectedValue.ToEntero = -1 Then 'limpiar ddl alamcen temporal que se agrego temporalmente + ' If Not GeneraGuardaAlmacenAsignado(TxtNombre.Text.Trim, ObjClientes.IniciaTransacSQL) Then + ' ErrorProceso = True + ' End If + 'End If End If If Not ErrorProceso Then From 0d4add5d3ceb252e05308d44b7f5679a5aa6be10 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 20 Sep 2024 11:33:38 -0700 Subject: [PATCH 09/23] -- mejora SMS, manejo de pago directo --- Ventas/Ventas.aspx | 4 +-- Ventas/Ventas.aspx.vb | 74 +++++++++++++++++++------------------------ 2 files changed, 34 insertions(+), 44 deletions(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index e67f1894d..cb2a7d753 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -602,13 +602,13 @@ - Requiere Técnico: + Req. Técnico: - Fecha de Cirugía: + Fecha de Cx: diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index cdef1106b..8e42db2f3 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -14194,7 +14194,6 @@ Partial Class Ventas End If End If - If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso EsVentaMedica Then Dim CveClientesucursatTemp As Integer = DdlClienteSucursalSucursal() If CveClientesucursatTemp > 0 Then @@ -14227,20 +14226,19 @@ Partial Class Ventas End If If RBLTipoVenta.SelectedValue = "2" Then - If Not ChkRequiereTecnico.Checked Then + If DdlTipoComprobante.SelectedValue = "Rem" Then 'Not ChkRequiereTecnico.Checked, antes CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() + ElseIf DdlTipoComprobante.SelectedValue = "Ped" Then + CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 4 AND Almacen like '%Pago%' AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() End If - If CveAlmacenTraspasoDestino <= 0 Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado.") End If - Else If CveAlmacenTraspasoDestino <= 0 Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de resguardo del cliente.") End If End If - End If Dim TotalImpuestoLocal As Double = 0 @@ -14297,13 +14295,11 @@ Partial Class Ventas RFCReceptor = factura.ClienteSucursal.RFC End If End If - End If Dim DescripcionVenta As String = "" If TxtDescripcionVenta.Text <> "" Then DescripcionVenta = TxtDescripcionVenta.Text - Dim CveMedico As Integer = -1 Dim CveProcedimiento As Integer = -1 Dim CveTipoVentaGuardar As Integer = -1 @@ -14701,8 +14697,11 @@ Partial Class Ventas ErrorList.Add("Ocurrió un error al actualizar el estatus del pedido2") End If End If + Dim GenerarOS As Boolean = ChkRequiereTecnico.Checked + 'si es pago directo, genera siempre OS + If RBLTipoVenta.SelectedValue = "2" Then GenerarOS = True - If EsVentaMedica AndAlso ErrorList.Count = 0 AndAlso ChkRequiereTecnico.Checked Then + If EsVentaMedica AndAlso ErrorList.Count = 0 AndAlso GenerarOS Then GeneraOS(ObjVentas.IniciaTransacSQL, ErrorList, CveVentaOS:=factura.CveVenta, SerieFolioOS:=factura.SerieFolio) @@ -38565,10 +38564,7 @@ Partial Class Ventas Protected Sub ChkRequiereTecnico_CheckedChanged(sender As Object, e As EventArgs) - TdFechaOS1.Visible = ChkRequiereTecnico.Checked - - UpCliente.Update() End Sub @@ -38732,14 +38728,12 @@ Partial Class Ventas Exit Sub End If End If - If DdlClienteSucursalCliente() > 0 Then CveClienteOS = DdlClienteSucursalCliente() Else Alert("Debe de seleccionar un hospital.", TipoMensaje.MsgAdvertencia) Exit Sub End If - Else If DdlClienteSucursalCliente() > 0 Then ViewState("CveCliente") = DdlClienteSucursalCliente() @@ -38778,8 +38772,8 @@ Partial Class Ventas ChkRequiereTecnico.Checked = ChkRequiereTecnicoModal.Checked TxtFechaOS.Text = TxtFechaModal.Text - TdFechaOS1.Visible = ChkRequiereTecnicoModal.Checked - TdFechaOS2.Visible = ChkRequiereTecnicoModal.Checked + 'TdFechaOS1.Visible = ChkRequiereTecnicoModal.Checked + 'TdFechaOS2.Visible = ChkRequiereTecnicoModal.Checked DdlMedico.SelectedValueExist(DdlMedicoModal.SelectedValue) DdlProcedimiento.SelectedValueExist(DdlProcedimientoModal.SelectedValue) @@ -38797,18 +38791,18 @@ Partial Class Ventas DdlTipoComprobante.SelectedValueExistInsert("Rem", "Remisión") End If ElseIf RBLTipoVenta.SelectedValue.Contiene("3") Then ' A vista - DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) - DdlTipoComprobante.SelectedValueExist("Ped") - TrVentasMedicas1.Visible = False - TrVentasMedicas2.Visible = False - ChkRequiereTecnico.Enabled = True - ElseIf RBLTipoVenta.SelectedValue.Contiene("4") Then ' consignacion - DdlTipoComprobante.SelectedValueExist("Ing") - TrVentasMedicas1.Visible = False - TrVentasMedicas2.Visible = False - ChkRequiereTecnico.Enabled = True - Else - DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) + DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) + DdlTipoComprobante.SelectedValueExist("Ped") + TrVentasMedicas1.Visible = False + TrVentasMedicas2.Visible = False + ChkRequiereTecnico.Enabled = True + ElseIf RBLTipoVenta.SelectedValue.Contiene("4") Then ' consignacion + DdlTipoComprobante.SelectedValueExist("Ing") + TrVentasMedicas1.Visible = False + TrVentasMedicas2.Visible = False + ChkRequiereTecnico.Enabled = True + Else + DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) DdlTipoComprobante.SelectedValueExist("Ped") TrVentasMedicas1.Visible = True TrVentasMedicas2.Visible = True @@ -38895,7 +38889,7 @@ Partial Class Ventas Protected Sub ChkRequiereTecnicoModal_CheckedChanged(sender As Object, e As EventArgs) - DvModalRequiereOSFecha.Visible = ChkRequiereTecnicoModal.Checked + 'DvModalRequiereOSFecha.Visible = ChkRequiereTecnicoModal.Checked UpDvModalTipoVenta.Update() End Sub @@ -38921,7 +38915,6 @@ Partial Class Ventas For Each GvRow As GridViewRow In GvProductosProcedimiento.Rows If RBLTipoVenta.SelectedValue = "2" Then - Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidad").Text.ToDecimal Dim CveUnidadMedida As Integer = GvRow.DataKey("CveUnidadMedida").ToEntero Dim Abreviatura As String = GvRow.DataKey("Abreviatura").ToString @@ -38937,13 +38930,11 @@ Partial Class Ventas Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) PrecioSugerido = ObjPrecioSugerido.PrecioSugerido - If ObjPrecioSugerido.CvePrecioLista > 0 AndAlso DivPrecioLista.Visible Then DdlPrecioLista.SelectedValueExist(ObjPrecioSugerido.CvePrecioLista) End If If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido - GvRow.FCTextBox("TxtPrecio").Text = PrecioSugerido.ToString("#,###.####") End If @@ -38955,21 +38946,20 @@ Partial Class Ventas Private Function GeneraOS(ByRef TransacSQL As SqlClient.SqlTransaction, ByRef errorList As List(Of String), CveVentaOS As Integer, SerieFolioOS As String) As Boolean Dim Errores As Boolean = False - - Dim ObjOrdenServicio As New ClsOS(TransacSQL) - - Dim CveOSTipo As Integer = -1 - - If ObjOrdenServicio.GetTipoOrdenesServicios(UsuarioActual.CveEmpresa) Then - CveOSTipo = ObjOrdenServicio.DtResultados.FiltroPrimeroValor("CveOrdenServicioTipo", " Estatus = 'Activo' ").ToEntero - End If Dim CveVentaAdicional As Integer = -1 - If RBLTipoVenta.SelectedValue.Contiene("5", "6") Then + Dim CveOSTipo As Integer = GlobalDTTipoOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveOrdenServicioTipo", " Estatus = 'Activo' ").ToEntero + Dim EstatusOrdenServicio As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 1").ToEntero + + 'If RBLTipoVenta.SelectedValue.Contiene("5", "6") Then + ' CveVentaAdicional = CveVentaOS + 'End If + + If RBLTipoVenta.SelectedValue.Contiene("2") AndAlso DdlTipoComprobante.SelectedValue = "Rem" Then 'pago directo, sino require técnico, que pase de estatus + EstatusOrdenServicio = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero 'tipo: 4.finalizada.3.en proceso CveVentaAdicional = CveVentaOS End If - Dim EstatusOrdenServicio As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 1").ToEntero - + Dim ObjOrdenServicio As New ClsOS(TransacSQL) If ObjOrdenServicio.AddOrdenesServicios(CveClienteOS, DdlSubProyectoDatos.SelectedValue.ToEntero, UsuarioActual.Nombre, TxtFechaOS.Text.Replace(",", "").ToDateTime, $"Venta: {LblSerie.Text}-{TxtFolio.Text}", UsuarioActual.CveUsuario, EstatusOrdenServicio, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVentaOS, CveVentaAdicional, -1, CveOSTipo, CveClienteSucursal:=CveClienteSucursalOS, Direccion:="", Telefono:="", CveModeloAuto:=-1, Año:="", CveMedico:=DdlMedico.SelectedValue.ToEntero, From 4ed9e71aeb939858425051bf9564bf30531b9894 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 20 Sep 2024 12:32:10 -0700 Subject: [PATCH 10/23] -- mejoras en tipos de venta --- OS/OrdenesServicios.aspx.vb | 640 ++++++++++++++++++------------------ 1 file changed, 313 insertions(+), 327 deletions(-) diff --git a/OS/OrdenesServicios.aspx.vb b/OS/OrdenesServicios.aspx.vb index d6b582596..e105ebc35 100644 --- a/OS/OrdenesServicios.aspx.vb +++ b/OS/OrdenesServicios.aspx.vb @@ -454,7 +454,7 @@ Partial Class OS_OrdenesServicios End If End If - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then BtnCancelar.Text = "Cancelar Cirugía" HplRegresar.NavigateUrl = "/OS/RepOSMedicas.aspx" @@ -2980,57 +2980,55 @@ Partial Class OS_OrdenesServicios End Sub Protected Sub LnkAccionesMaterialUtilizado_Click(sender As Object, e As EventArgs) + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then - LnkModalMaterialUtilizado.Visible = True - DTSolicitudDev = New DataTable - Dim Opcion As Integer = If(DdlTipoVenta.SelectedValue.Contiene("2", "3"), 2, 1) + LnkModalMaterialUtilizado.Visible = True + DTSolicitudDev = New DataTable + Dim Opcion As Integer = If(DdlTipoVenta.SelectedValue.Contiene("2", "3"), 2, 1) + Select Case DdlTipoVenta.SelectedValue.ToEntero + Case 1, 2 ' *Fuera de liena *pago directo + Opcion = 1 + Case 3 ' por el momento ya no se usa + Opcion = 2 + Case 5 ' consignacion uso + Opcion = 3 + Case 6 ' a vista uso de material + Opcion = 4 + Case Else + Opcion = 1 + End Select - Select Case DdlTipoVenta.SelectedValue.ToEntero - Case 1, 2 ' *Fuera de liena *pago directo - Opcion = 1 - Case 3 ' por el momento ya no se usa - Opcion = 2 - Case 5 ' consignacion uso - Opcion = 3 - Case 6 ' a vista uso de material - Opcion = 4 - Case Else - Opcion = 1 - End Select + Dim ObjOS As New ClsOS + If ObjOS.GetOrdenesServicioDevolucionMaterial(CveOS, If(UsuarioActual.Empresa.Funcionalidad(578) = "1", CvePedido, CveVenta), Opcion, UsuarioActual.CveEmpresa) Then + DTSolicitudDev = ObjOS.DtResultados + GvMU.DataSource = DTSolicitudDev + GvMU.Columns(3).Visible = DTSolicitudDev.MIN("Serie") <> "" + GvMU.Columns(4).Visible = DTSolicitudDev.MIN("Lote") <> "" + GvMU.Columns(5).Visible = DTSolicitudDev.MIN("FechaCaducidad") <> "" + End If + ObjOS.Dispose() + GvMU.DataBind() - Dim ObjOS As New ClsOS - If ObjOS.GetOrdenesServicioDevolucionMaterial(CveOS, If(UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1, CvePedido, CveVenta), Opcion, UsuarioActual.CveEmpresa) Then - DTSolicitudDev = ObjOS.DtResultados - GvMU.DataSource = DTSolicitudDev - GvMU.Columns(3).Visible = DTSolicitudDev.MIN("Serie") <> "" - GvMU.Columns(4).Visible = DTSolicitudDev.MIN("Lote") <> "" - GvMU.Columns(5).Visible = DTSolicitudDev.MIN("FechaCaducidad") <> "" - End If - ObjOS.Dispose() - GvMU.DataBind() + Dim EsDevolucionVenta As Boolean = (DTSolicitudDev.FiltroPrimeroValor("EsDevolucionVenta", "").ToEntero > 0) - Dim EsDevolucionVenta As Boolean = (DTSolicitudDev.FiltroPrimeroValor("EsDevolucionVenta", "").ToEntero > 0) + RegistraScript("$('#DivModalMaterialUtilizado').modal();") - RegistraScript("$('#DivModalMaterialUtilizado').modal();") + If EsDevolucionVenta Then + Alert("En la orden de servicio ya se determinó el material utilizado.", TipoMensaje.MsgAdvertencia) + LnkModalMaterialUtilizado.Visible = False + End If - If EsDevolucionVenta Then - Alert("En la orden de servicio ya se determinó el material utilizado.", TipoMensaje.MsgAdvertencia) - LnkModalMaterialUtilizado.Visible = False - End If - - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then TxtPacienteModal.Text = TxtPaciente.Text TxtEpisodioModal.Text = TxtIdentificadorCliente.Text TxtFolioRemisionModal.Text = TxtFolioAdicional.Text - End If - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then - DvTxtFolioRemisionModal.Visible = False - Else - DvTxtFolioRemisionModal.Visible = True + If DdlTipoVenta.SelectedValue.ToEntero = 5 Then + DvTxtFolioRemisionModal.Visible = False + Else + DvTxtFolioRemisionModal.Visible = True + End If End If - UpModalMaterialUtilizado.Update() End Sub @@ -3048,7 +3046,10 @@ Partial Class OS_OrdenesServicios Dim ProcesoOK As Boolean = True - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then + Dim CveAlmacenDestino As Integer = -1 + Dim CveSubProyectoPedido As Integer + '---------------- INICIO VALIDACIONES ----------------- If TxtPacienteModal.Text.Trim.Length = 0 Then Alert("Debe de proporcionar el paciente.", TipoMensaje.MsgAdvertencia) Exit Sub @@ -3058,350 +3059,349 @@ Partial Class OS_OrdenesServicios Alert("Debe de proporcionar el episodio.", TipoMensaje.MsgAdvertencia) Exit Sub End If - End If - Dim TieneArchivos As Boolean = False - Dim Filesgral As List(Of Archivo) = AnexoManerialUtilizado.getfiles().Archivos - For Each fileItem As Archivo In Filesgral - TieneArchivos = True - Exit For - Next - If Not TieneArchivos Then - Alert("Debe de agregar un documento de confirmación (5 máximo).") - Exit Sub - End If + Dim TieneArchivos As Boolean = False + Dim Filesgral As List(Of Archivo) = AnexoManerialUtilizado.getfiles().Archivos + For Each fileItem As Archivo In Filesgral + TieneArchivos = True + Exit For + Next + If Not TieneArchivos Then + Alert("Debe de agregar un documento de confirmación (5 máximo).") + Exit Sub + End If - - Dim CveAlmacenActual As Integer = DTSolicitudDev.FiltroPrimeroValor("CveAlmacenActual").ToEntero - Dim CveMoneda As Integer = DTSolicitudDev.FiltroPrimeroValor("CveMoneda").ToEntero - Dim CveSubProyectoPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveSubProyecto").ToEntero - Dim CveVentaPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveVenta").ToEntero - Dim CveAlmacenDestino As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {CveSubProyectoPedido}").ToEntero - Dim CveVentaRemisionGenerada As Integer = -1 - - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then Dim TotalSeleccionado As Decimal = 0 - For Each GVRow As GridViewRow In GvMU.Rows TotalSeleccionado = TotalSeleccionado + GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal Next - If TotalSeleccionado = 0 Then - Alert("No se seleccionó ningun material", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - Else - If Not CveAlmacenDestino > 0 Then - Alert("No se encontró almacen de entrega por adelantado", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - - - Dim ObjV As New ClsVentas - Dim ObjOS As New ClsOS(ObjV.IniciaTransacSQL()) - Dim ObjInventario As New ClsInventarios(ObjV.IniciaTransacSQL()) - Dim ObjConta As New ClsContabilidad(ObjV.IniciaTransacSQL()) - Dim GenerarRemisionMovimientos As Boolean = False - - If DdlTipoVenta.SelectedValue = "5" Then 'Consignación - Uso Material - 'genera una salida de almacen. - Dim Fecha As DateTime = ClsPaginas.NowADS() - Dim CveMovimientoSalida As Integer = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtilConsig") - Dim Folio As Integer = ObjInventario.Folio - - If CveMovimientoSalida > 0 Then - For Each GVRow As GridViewRow In GvMU.Rows - Dim CantidadRegistro As Decimal = GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal - Dim CvePS As Integer = GVRow.DataKey("CvePS").ToEntero - - If CantidadRegistro > 0 Then - Dim Serie As String = GVRow.DataKey("Serie") - Dim Lote As String = GVRow.DataKey("Lote") - Dim CveUM As Integer = GVRow.DataKey("CveUM").ToEntero - Dim FechaCaducidad As DateTime = GVRow.DataKey("FechaCaducidad").ToDate - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadRegistro, CveUM, CvePS, 0, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - Exit For - End If - End If - Next - If ProcesoOK Then - Dim CveOSEstatusFinalizada As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero - If CveOSEstatusFinalizada > 0 Then - If Not ObjOS.UpdateOrdenesServiciosEstatus(CveOSEstatusFinalizada, UsuarioActual.CveUsuario, CveOS) Then - ProcesoOK = False - End If - Else - Alert("No se pudo obtener el estado para finalizar la orden de servicio.") - ProcesoOK = False - End If - End If - If ProcesoOK Then - Dim Contabilizable As Boolean = False - Dim Concepto As String = "Material utilizado Consigna" - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil5", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - Dim ImporteAlmacen As Decimal = 0 - If CveMovimientoSalida > 0 Then - If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then - ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") - End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 95, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If + If DdlTipoVenta.SelectedValue = "5" Then + If TotalSeleccionado = 0 Then + Alert("No se seleccionó ningun material", TipoMensaje.MsgAdvertencia) + Exit Sub End If Else - ProcesoOK = False + CveSubProyectoPedido = DTSolicitudDev.FiltroPrimeroValor("CveSubProyecto").ToEntero + CveAlmacenDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa, 10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {CveSubProyectoPedido}").ToEntero + If Not CveAlmacenDestino > 0 Then + Alert("No se encontró almacen de entrega por adelantado", TipoMensaje.MsgAdvertencia) + Exit Sub + End If End If + If TotalSeleccionado > 0 AndAlso Not TxtFolioRemisionModal.Text.Trim.Length > 0 Then + Alert("El campo Folio es requerido por favor ingréselo.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If - Dim DT_Ventas_Detalles As DataTable = DTSolicitudDev.FiltraParametros("", "", {"CantidadPedido", "CvePS", "CveVentaDetalle"}) - DT_Ventas_Detalles.Columns.Add("CantidadUsada", GetType(Decimal)) - DT_Ventas_Detalles.AcceptChanges() + '---------------- FIN VALIDACIONES ----------------- - For Each dRow As DataRow In DT_Ventas_Detalles.Rows + Dim CveAlmacenActual As Integer = DTSolicitudDev.FiltroPrimeroValor("CveAlmacenActual").ToEntero + Dim CveMoneda As Integer = DTSolicitudDev.FiltroPrimeroValor("CveMoneda").ToEntero - For Each gvRow As GridViewRow In GvMU.Rows + Dim CveVentaPedido As Integer = DTSolicitudDev.FiltroPrimeroValor("CveVenta").ToEntero + Dim CveVentaRemisionGenerada As Integer = -1 - Dim CantidadUsada As Decimal = gvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim ObjV As New ClsVentas + Dim ObjOS As New ClsOS(ObjV.IniciaTransacSQL()) + Dim ObjInventario As New ClsInventarios(ObjV.IniciaTransacSQL()) + Dim ObjConta As New ClsContabilidad(ObjV.IniciaTransacSQL()) + Dim GenerarRemisionMovimientos As Boolean = False - If dRow("CvePS").ToString.ToDecimal = gvRow.DataKey("CvePS").ToDecimal AndAlso CantidadUsada > 0 Then + If DdlTipoVenta.SelectedValue = "5" Then 'Consignación - Uso Material + 'genera una salida de almacen. + Dim Fecha As DateTime = ClsPaginas.NowADS() + Dim CveMovimientoSalida As Integer = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtilConsig") + Dim Folio As Integer = ObjInventario.Folio - dRow("CantidadUsada") = dRow("CantidadUsada").ToString.ToDecimal + CantidadUsada + If CveMovimientoSalida > 0 Then + For Each GVRow As GridViewRow In GvMU.Rows + Dim CantidadRegistro As Decimal = GVRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim CvePS As Integer = GVRow.DataKey("CvePS").ToEntero - End If - Next - - Next - - For Each dRow As DataRow In DT_Ventas_Detalles.Rows - Dim CantidadUsada As Decimal = dRow("CantidadUsada").ToString.ToDecimal - If dRow("CantidadUsada").ToString.ToDecimal < dRow("CantidadPedido").ToString.ToDecimal Then - If Not ObjInventario.UpdatePedidoDetalleCantidad(dRow("CveVentaDetalle").ToString.ToEntero, CantidadUsada, 2) Then - ProcesoOK = False - Exit For - End If - End If - Next - - - Else - If ProcesoOK Then - Dim AplicaDevolucion As Boolean = False - For Each GvRow As GridViewRow In GvMU.Rows - Dim CveVentaDetalle As Integer = GvRow.DataKey("CveVentaDetalle").ToEntero - Dim CantidadDev As Decimal = GvRow.DataKey("Cantidad").ToDecimal - GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal - - If CantidadDev > 0 AndAlso CveVentaDetalle > 0 Then - AplicaDevolucion = True - If Not ObjV.UpdateVentasDetalleCantidadDevolucion(CveVentaDetalle, CantidadDev) Then + If CantidadRegistro > 0 Then + Dim Serie As String = GVRow.DataKey("Serie") + Dim Lote As String = GVRow.DataKey("Lote") + Dim CveUM As Integer = GVRow.DataKey("CveUM").ToEntero + Dim FechaCaducidad As DateTime = GVRow.DataKey("FechaCaducidad").ToDate + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadRegistro, CveUM, CvePS, 0, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + End If + Next + If ProcesoOK Then + Dim CveOSEstatusFinalizada As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero + If CveOSEstatusFinalizada > 0 Then + If Not ObjOS.UpdateOrdenesServiciosEstatus(CveOSEstatusFinalizada, UsuarioActual.CveUsuario, CveOS) Then + ProcesoOK = False + End If + Else + Alert("No se pudo obtener el estado para finalizar la orden de servicio.") ProcesoOK = False - GenerarRemisionMovimientos = False - AplicaDevolucion = False - Exit For End If End If - - If GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal > 0 Then - GenerarRemisionMovimientos = True - End If - Next - If AplicaDevolucion Then - If Not ObjV.UpdateVentasDevolucionAlmacen(1, CveVentaPedido) Then - ProcesoOK = False - End If - End If - End If - - 'ProcesoOK = False - - Dim Respuesta As New RespuestaFacturacion() - Dim DtVentaDetalle As New DataTable - Dim CveMovimientoSalida, CveMovimientoEntrada As Integer - Dim ImporteAlmacen As Decimal - Dim Fecha As DateTime = ClsPaginas.NowADS() - - If GenerarRemisionMovimientos AndAlso ProcesoOK Then - If Not TxtFolioRemisionModal.Text.Trim.Length > 0 Then - Alert("El campo Folio es requerido por favor ingréselo.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - GenerarRemisionMovimientos = False - End If - End If - - If GenerarRemisionMovimientos AndAlso ProcesoOK Then - Respuesta = GeneraRemision(CveVentaPedido, ObjV.IniciaTransacSQL()) - - If Respuesta.CveVenta > 0 Then - - CveVentaRemisionGenerada = Respuesta.CveVenta - If ObjV.GetVentaDetalle(Respuesta.CveVenta) Then - Dim dtClon As DataTable = ObjV.DtResultados.Copy - dtClon.DefaultView.Sort = "CveVentaDetalle ASC" - Dim dtmat As DataTable = dtClon.DefaultView.ToTable() - 'una vez registrada, asocia los lotes/cad con el cveventadetalle para que se surta así - DtVentaDetalle = Respuesta.dtdetalle - For i = 0 To dtmat.Rows.Count - 1 - If DtVentaDetalle.Rows(i)("CvePS").ToString = dtmat.Rows(i)("CvePS").ToString Then - DtVentaDetalle.Rows(i)("CveVentaDetalle") = dtmat.Rows(i)("CveVentaDetalle") - DtVentaDetalle.Rows(i)("CveUM") = dtmat.Rows(i)("CveUM") + If ProcesoOK Then + Dim Contabilizable As Boolean = False + Dim Concepto As String = "Material utilizado Consigna" + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil5", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim ImporteAlmacen As Decimal = 0 + If CveMovimientoSalida > 0 Then + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then + ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") End If - Next + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 95, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + End If + End If + 'asigno la cveventa, como concluido + If ProcesoOK Then + If Not ObjOS.UpdateVentaOS(CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then + ProcesoOK = False + End If End If Else ProcesoOK = False End If - End If - If GenerarRemisionMovimientos AndAlso ProcesoOK Then + Dim DT_Ventas_Detalles As DataTable = DTSolicitudDev.FiltraParametros("", "", {"CantidadPedido", "CvePS", "CveVentaDetalle"}) + DT_Ventas_Detalles.Columns.Add("CantidadUsada", GetType(Decimal)) + DT_Ventas_Detalles.AcceptChanges() - CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtil3") - Dim Folio As Integer = ObjInventario.Folio + For Each dRow As DataRow In DT_Ventas_Detalles.Rows + For Each gvRow As GridViewRow In GvMU.Rows + Dim CantidadUsada As Decimal = gvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + If dRow("CvePS").ToString.ToDecimal = gvRow.DataKey("CvePS").ToDecimal AndAlso CantidadUsada > 0 Then + dRow("CantidadUsada") = dRow("CantidadUsada").ToString.ToDecimal + CantidadUsada + End If + Next + Next - If CveMovimientoSalida > 0 Then + For Each dRow As DataRow In DT_Ventas_Detalles.Rows + Dim CantidadUsada As Decimal = dRow("CantidadUsada").ToString.ToDecimal + If dRow("CantidadUsada").ToString.ToDecimal < dRow("CantidadPedido").ToString.ToDecimal Then + If Not ObjInventario.UpdatePedidoDetalleCantidad(dRow("CveVentaDetalle").ToString.ToEntero, CantidadUsada, 2) Then + ProcesoOK = False + Exit For + End If + End If + Next + Else + '' otros opciones <> 5 + If ProcesoOK Then - Dim IndexMov1 As Integer = 0 - For Each drr As DataRow In DtVentaDetalle.Rows + Dim AplicaDevolucion As Boolean = False + Dim StrCveVentasDetalle As New StringBuilder + For Each GvRow As GridViewRow In GvMU.Rows + Dim CveVentaDetalle As Integer = GvRow.DataKey("CveVentaDetalle").ToEntero + Dim CantidadDev As Decimal = GvRow.DataKey("Cantidad").ToDecimal - GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + StrCveVentasDetalle.AppendFormat("{0},", CveVentaDetalle) - Dim Cantidad As Decimal = drr("Cantidad").ToString.ToDecimal - 'Dim CantidadRegistro As Decimal = GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal - Dim CvePS As Integer = drr("CvePS").ToString.ToEntero - Dim CveUM As Integer = drr("CveUM").ToString.ToEntero - Dim PU As Decimal = drr("PU").ToString.ToDecimal - - If Cantidad > 0 Then - Dim CveVentaDetalle As Integer = drr("CveVentaDetalle").ToString.ToEntero 'DtVentaDetalle.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetallePadre = {GvRow.DataKey("CveVentaDetalle")}").ToEntero - Dim CveMovimientoDetalle As Integer = -1 'GvRow.DataKey("CveMovimientoDetalle").ToEntero - - If CveVentaDetalle <= 0 Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) - ProcesoOK = False - Exit For - End If - - Dim Serie As String = drr("Serie").ToString - Dim Lote As String = drr("Lote").ToString - Dim FechaCaducidad As DateTime = drr("FechaCaducidad").ToString.ToDate - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then - Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + If CantidadDev > 0 AndAlso CveVentaDetalle > 0 Then + AplicaDevolucion = True + If Not ObjV.UpdateVentasDetalleCantidadDevolucion(CveVentaDetalle, CantidadDev) Then ProcesoOK = False + GenerarRemisionMovimientos = False + AplicaDevolucion = False Exit For End If End If - IndexMov1 = IndexMov1 + 1 + If GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal > 0 Then + GenerarRemisionMovimientos = True + End If Next + If AplicaDevolucion Then + If Not ObjV.UpdateVentasDevolucionAlmacen(1, CveVentaPedido) Then + ProcesoOK = False + End If + End If + ' obtiene las ventasdetalle del pedido/rem, para recorrerlas y si hay alguna solo solicitada pero no surtida, que no siga pendiente de surtir. + If ProcesoOK AndAlso ObjV.GetVentaDetalle(CveVentaPedido) Then + Dim DtVentasDetalle As DataTable = ObjV.DtResultados + Dim dtt As DataTable = DtVentasDetalle.FiltraParametros($"CveVentaDetalle NOT IN ({StrCveVentasDetalle.ToString} -1)") + For Each dr As DataRow In dtt.Rows + ObjInventario.UpdateEstatusAlmacen(dr("CveVentaDetalle").ToString.ToEntero, 1) 'para no surtirse + Next + End If + End If - If ProcesoOK Then + Dim Respuesta As New RespuestaFacturacion() + Dim DtVentaDetalle As New DataTable + Dim CveMovimientoSalida, CveMovimientoEntrada As Integer + Dim ImporteAlmacen As Decimal + Dim Fecha As DateTime = ClsPaginas.NowADS() - CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="OS/MatUtil2") + If GenerarRemisionMovimientos AndAlso ProcesoOK Then + Respuesta = GeneraRemision(CveVentaPedido, ObjV.IniciaTransacSQL()) - If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then - ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") - Dim IndexMov2 As Integer = 0 - For Each dRow As DataRow In ObjInventario.DtResultados.Rows + If Respuesta.CveVenta > 0 Then - Dim Cantidad As Decimal = dRow("Cantidad").ToString.ToDecimal - Dim CvePS As Integer = dRow("CvePS").ToString.ToEntero - Dim CveUM As Integer = dRow("CveUM").ToString.ToEntero - Dim PU As Decimal = dRow("PU").ToString.ToDecimal - Dim CveVentaDetalle As Integer = dRow("CveVentaDetalle").ToString.ToEntero - Dim CveMovimientoDetalle As Integer = dRow("CveMovimientoDetalle").ToString.ToEntero + CveVentaRemisionGenerada = Respuesta.CveVenta + If ObjV.GetVentaDetalle(Respuesta.CveVenta) Then + Dim dtClon As DataTable = ObjV.DtResultados.Copy + dtClon.DefaultView.Sort = "CveVentaDetalle ASC" + Dim dtmat As DataTable = dtClon.DefaultView.ToTable() + 'una vez registrada, asocia los lotes/cad con el cveventadetalle para que se surta así + DtVentaDetalle = Respuesta.dtdetalle + For i = 0 To dtmat.Rows.Count - 1 + If DtVentaDetalle.Rows(i)("CvePS").ToString = dtmat.Rows(i)("CvePS").ToString Then + DtVentaDetalle.Rows(i)("CveVentaDetalle") = dtmat.Rows(i)("CveVentaDetalle") + DtVentaDetalle.Rows(i)("CveUM") = dtmat.Rows(i)("CveUM") + End If + Next + End If + Else + ProcesoOK = False + End If + End If - Dim Lote As String = dRow("Lote").ToString - Dim Serie As String = dRow("Serie").ToString - Dim FechaCaducidad As DateTime = dRow("FechaCaducidad").ToString.ToDateTime + If GenerarRemisionMovimientos AndAlso ProcesoOK Then - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenActual, 8, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="OS/MatUtil3") + Dim Folio As Integer = ObjInventario.Folio + + If CveMovimientoSalida > 0 Then + + Dim IndexMov1 As Integer = 0 + For Each drr As DataRow In DtVentaDetalle.Rows + + Dim Cantidad As Decimal = drr("Cantidad").ToString.ToDecimal + 'Dim CantidadRegistro As Decimal = GvRow.FCTextBox("TxtUtilizado").Text.ToDecimal + Dim CvePS As Integer = drr("CvePS").ToString.ToEntero + Dim CveUM As Integer = drr("CveUM").ToString.ToEntero + Dim PU As Decimal = drr("PU").ToString.ToDecimal + + If Cantidad > 0 Then + Dim CveVentaDetalle As Integer = drr("CveVentaDetalle").ToString.ToEntero 'DtVentaDetalle.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetallePadre = {GvRow.DataKey("CveVentaDetalle")}").ToEntero + Dim CveMovimientoDetalle As Integer = -1 'GvRow.DataKey("CveMovimientoDetalle").ToEntero + + If CveVentaDetalle <= 0 Then Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) ProcesoOK = False Exit For End If - IndexMov2 = IndexMov2 + 1 - Next - If ProcesoOK Then - Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL) - Dim LigaVenta As String = String.Format("Venta {2} en Folio: {1}", CveMovimientoEntrada, Folio, "Material utilizado") + Dim Serie As String = drr("Serie").ToString + Dim Lote As String = drr("Lote").ToString + Dim FechaCaducidad As DateTime = drr("FechaCaducidad").ToString.ToDate + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + End If + IndexMov1 = IndexMov1 + 1 + Next - If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Respuesta.CveVenta, CveOS:=CveOS) Then + If ProcesoOK Then + + CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, CveMoneda, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, Respuesta.CveVenta, CveSubProyectoPedido, -1, CveOS:=CveOS, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="OS/MatUtil2") + + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then + ImporteAlmacen = ObjInventario.DtResultados.SUM("Total") + Dim IndexMov2 As Integer = 0 + For Each dRow As DataRow In ObjInventario.DtResultados.Rows + + Dim Cantidad As Decimal = dRow("Cantidad").ToString.ToDecimal + Dim CvePS As Integer = dRow("CvePS").ToString.ToEntero + Dim CveUM As Integer = dRow("CveUM").ToString.ToEntero + Dim PU As Decimal = dRow("PU").ToString.ToDecimal + Dim CveVentaDetalle As Integer = dRow("CveVentaDetalle").ToString.ToEntero + Dim CveMovimientoDetalle As Integer = dRow("CveMovimientoDetalle").ToString.ToEntero + + Dim Lote As String = dRow("Lote").ToString + Dim Serie As String = dRow("Serie").ToString + Dim FechaCaducidad As DateTime = dRow("FechaCaducidad").ToString.ToDateTime + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalle, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad) Then + Alert("Error al agregar detalle de movimiento.", TipoMensaje.MsgAdvertencia) + ProcesoOK = False + Exit For + End If + IndexMov2 = IndexMov2 + 1 + Next + If ProcesoOK Then + Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL) + Dim LigaVenta As String = String.Format("Venta {2} en Folio: {1}", CveMovimientoEntrada, Folio, "Material utilizado") + + If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Respuesta.CveVenta, CveOS:=CveOS) Then + ProcesoOK = False + End If + End If + Else + ProcesoOK = False + End If + End If + + If ProcesoOK Then + Dim Contabilizable As Boolean = False + Dim Concepto As String = "Material utilizado" + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + If CveMovimientoSalida > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then ProcesoOK = False End If End If - Else + If CveMovimientoEntrada > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable) Then + ProcesoOK = False + End If + End If + End If + Else + ProcesoOK = False + End If + If ProcesoOK Then + If Not ObjOS.UpdateVentaOS(Respuesta.CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then ProcesoOK = False End If End If - - If ProcesoOK Then - Dim Contabilizable As Boolean = False - Dim Concepto As String = "Material utilizado" - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OS-MatUtil", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - If CveMovimientoSalida > 0 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If - If CveMovimientoEntrada > 0 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteAlmacen, ImporteAlmacen, 68, "", Concepto, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=Contabilizable) Then - ProcesoOK = False - End If - End If - - End If - Else - ProcesoOK = False End If If ProcesoOK Then - If Not ObjOS.UpdateVentaOS(Respuesta.CveVenta, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim, FolioAdicional:=TxtFolioRemisionModal.Text.Trim) Then + If Not ObjOS.UpdateOrdenesServiciosFinaliza(CveOS, -1, -1, UsuarioActual.CveEmpresa, Observaciones:=TxtObservacionModal.Text.Trim) Then ProcesoOK = False End If End If End If + If ProcesoOK Then - If Not ObjOS.UpdateOrdenesServiciosFinaliza(CveOS, -1, -1, UsuarioActual.CveEmpresa, Observaciones:=TxtObservacionModal.Text.Trim) Then + If Not ObjOS.UpdateVentaOS(-1, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim) Then ProcesoOK = False End If End If - End If - - If ProcesoOK Then - If Not ObjOS.UpdateVentaOS(-1, CveOS, UsuarioActual.CveEmpresa, TxtPacienteModal.Text.Trim, TxtEpisodioModal.Text.Trim) Then - ProcesoOK = False + If ProcesoOK Then + ProcesoOK = GuardarArchivoConfirmacion(ObjV.IniciaTransacSQL, CveOS, CveVentaRemisionGenerada) End If - End If - If ProcesoOK Then - ProcesoOK = GuardarArchivoConfirmacion(ObjV.IniciaTransacSQL, CveOS, CveVentaRemisionGenerada) - End If + If ProcesoOK Then - If ProcesoOK Then - - ObjV.Commit() - If DdlTipoVenta.SelectedValue.ToEntero = 5 Then - Dim Liga As String = $" document.location.href=""/OS/OrdenesServicios.aspx?CveOS={CveOS}""; " - Alert("El material utilizado se guardó correctamente", TipoMensaje.MsgInformacion, Liga) - Else - If GenerarRemisionMovimientos = False Then - Alert("El material sera recibido en almacén.") + ObjV.Commit() + If DdlTipoVenta.SelectedValue.ToEntero = 5 Then + Dim Liga As String = $" document.location.href=""/OS/OrdenesServicios.aspx?CveOS={CveOS}""; " + Alert("El material utilizado se guardó correctamente", TipoMensaje.MsgInformacion, Liga) Else - Alert("El material utilizado se guardó correctamente") + If GenerarRemisionMovimientos = False Then + Alert("El material sera recibido en almacén.") + Else + Alert("El material utilizado se guardó correctamente") + End If End If + + RegistraScript("$('#DivModalMaterialUtilizado').modal('hide');") + CargaEventoBitacora() + Else + ObjV.RollBack() + Alert("Se presento un error al guardar el material", TipoMensaje.MsgAdvertencia) End If - RegistraScript("$('#DivModalMaterialUtilizado').modal('hide');") - CargaEventoBitacora() - Else - ObjV.RollBack() - Alert("Se presento un error al guardar el material", TipoMensaje.MsgAdvertencia) + ObjV.Dispose() End If - - ObjV.Dispose() - End Sub @@ -3609,13 +3609,10 @@ Partial Class OS_OrdenesServicios End Class Protected Sub LnkActualizarUsaurioAtendio_Click(sender As Object, e As EventArgs) - - If DdlUsuarioAtendio.SelectedValue.ToEntero > 0 Then Dim ObjOS As New ClsOS ObjOS.IniciaTransacSQL() - Dim ProcesoOk As Boolean = True For Each GvRow As GridViewRow In GvPS.Rows @@ -3637,13 +3634,10 @@ Partial Class OS_OrdenesServicios Alert($"Se presento un error al actualizar el técnico.") CargaHistorial() End If - Else Alert("Debe de seleccionar un ténico para actualziar", TipoMensaje.MsgAdvertencia) End If - - End Sub Protected Sub GVEventoBitacora_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEB.RowDataBound @@ -3692,7 +3686,6 @@ Partial Class OS_OrdenesServicios Protected Sub BtnCancelar_Click(sender As Object, e As EventArgs) - Dim CveEstatusOrdenServicioCancelacion As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", " TipoEstatus = 5 ").ToEntero Dim CveAlmacenDevolucion As Integer Dim CveMotivoCancelacion As Integer = GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMotivoCancelacion", "CveSATMotivoCancelacion IN (3)").ToEntero @@ -3710,9 +3703,7 @@ Partial Class OS_OrdenesServicios Dim ObjFacturaCancelacion As New Modelos.Factura(UsuarioActual, CvePedido, UsuarioActual.CveEmpresa, EsCancelacion:=True, VerificaAlmacen:=True) Try - Dim resp As Modelos.Factura.MCancelacionVentaMensaje = Nothing - If ObjFacturaCancelacion IsNot Nothing AndAlso ObjFacturaCancelacion.CveVenta > 0 Then Dim SWatch As New Stopwatch @@ -3728,16 +3719,11 @@ Partial Class OS_OrdenesServicios Alert($"Se presento un error al cancelar la orden de servicio, {resp.Mensaje}".ToString(), TipoMensaje.MsgError) Else Alert($"la orden de servicio se cancelada correctamente, {resp.Mensaje}", resp.TipoMensaje, " location.reload(true); ") - Dim objGeneral As New ClsGenerales objGeneral.AddHistorialBitacora(256, -1, -1, -1, CveOS, -1, -1, -1, "Cancelada", DdlEstatusOS.SelectedItem.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, "", "", "") objGeneral.Dispose() - - End If - End If - Catch ex As Exception Alert("Se presento un error al cancelar la orden de servicio") End Try From 7a4c97573b2d3874d96fd3e818aefc26fdf4f647 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Fri, 20 Sep 2024 16:01:46 -0700 Subject: [PATCH 11/23] Recepcion Almacen Bitacora recarga despues de guaraddo parcial --- Inventarios/RecepcionAlmacen.aspx | 19 ++- Inventarios/RecepcionAlmacen.aspx.vb | 225 ++++++++++++++++++++------ Ventas/RepVentasUtilidadPadre.aspx | 125 +++++++++++++- Ventas/RepVentasUtilidadPadre.aspx.vb | 70 +++++++- 4 files changed, 372 insertions(+), 67 deletions(-) diff --git a/Inventarios/RecepcionAlmacen.aspx b/Inventarios/RecepcionAlmacen.aspx index 937f907e0..55ecc0e26 100644 --- a/Inventarios/RecepcionAlmacen.aspx +++ b/Inventarios/RecepcionAlmacen.aspx @@ -19,14 +19,25 @@
  •  
  • -
  • - Cargar Excel -
  • + + <%-- +
  • + Cargar Excel +
  • + --%> + + + +
  • + Cargar Excel +
  • +
    +
  • - Cargar Bitácora + Cargar Bitácora
  • diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 03e109ac7..672cdf830 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -7,6 +7,7 @@ Imports System.Text Imports Extensiones Imports GemBox.Spreadsheet Imports Microsoft.Reporting.WebForms +Imports Org.BouncyCastle.Asn1.X509 Partial Class Inventarios_RecepcionAlmacen Inherits ClsPaginas @@ -154,12 +155,21 @@ Partial Class Inventarios_RecepcionAlmacen ViewState("PUSerie") = value End Set End Property - Private Property CveConsecSerie As Integer + 'Private Property CveConsecSerie As Integer + ' Get + ' Return CType(ViewState("CveConsecSerie"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveConsecSerie") = value + ' End Set + 'End Property + + Private Property CveCompraDetalle As Integer Get - Return CType(ViewState("CveConsecSerie"), Integer) + Return CType(ViewState("CveCompraDetalle"), Integer) End Get Set(value As Integer) - ViewState("CveConsecSerie") = value + ViewState("CveCompraDetalle") = value End Set End Property Private Property TotalGV As Decimal @@ -412,6 +422,11 @@ Partial Class Inventarios_RecepcionAlmacen End Property Private Property ArchivoBitacora As String Get + + If ViewState("ArchivoBitacora") Is Nothing Then + ViewState("ArchivoBitacora") = "" + End If + Return CType(ViewState("ArchivoBitacora"), String) End Get Set(value As String) @@ -420,6 +435,10 @@ Partial Class Inventarios_RecepcionAlmacen End Property Private Property ArchivoBitacoraDetalle As String Get + If ViewState("ArchivoBitacoraDetalle") Is Nothing Then + ViewState("ArchivoBitacoraDetalle") = "" + End If + Return CType(ViewState("ArchivoBitacoraDetalle"), String) End Get Set(value As String) @@ -1461,11 +1480,12 @@ Partial Class Inventarios_RecepcionAlmacen 'If e.Row.DBCampo("CveMetodoInventario").ToString = "5" Then e.Row.FCButton("BtnSerie").Visible = True - e.Row.FCButton("BtnSerie").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec")) + e.Row.FCButton("BtnSerie").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}°{6}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"), e.Row.DBCampo("CveCompraDetalle")) e.Row.FCTextBox("TbCantidadF").Enabled = False e.Row.FCCheckBox("cbInv").Enabled = False - Dim Contador As Integer = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DataKey("Consec"))).Rows.Count + 'Dim Contador As Integer = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DataKey("Consec"))).Rows.Count + Dim Contador As Integer = DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", e.Row.DataKey("CveCompraDetalle"))).Rows.Count e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString '' Empresa Acumuladores @@ -1617,7 +1637,8 @@ Partial Class Inventarios_RecepcionAlmacen TdSeriePS.Visible = True TxtSeriePS.Focus() - CveConsecSerie = Gvr.DataKey("Consec").ToEntero + 'CveConsecSerie = Gvr.DataKey("Consec").ToEntero + CveCompraDetalle = Gvr.DataKey("CveCompraDetalle").ToEntero CvePSSerie = Gvr.DataKey("CvePS").ToEntero CveUMSerie = Gvr.DataKey("CveUM").ToEntero Exit Sub @@ -1717,7 +1738,8 @@ Partial Class Inventarios_RecepcionAlmacen CvePSSerie = Argumentos(0).ToEntero CveUMSerie = Argumentos(1).ToEntero PUSerie = Argumentos(2).ToDecimal - CveConsecSerie = Argumentos(5).ToEntero + 'CveConsecSerie = Argumentos(5).ToEntero + CveCompraDetalle = Argumentos(6).ToEntero CargaSerie(1) @@ -1732,6 +1754,8 @@ Partial Class Inventarios_RecepcionAlmacen DtDatosDetalle.Columns.Add("PU", GetType(Decimal)) DtDatosDetalle.Columns.Add("Serie", GetType(String)) DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String)) + DtDatosDetalle.Columns.Add("CveCompraDetalle", GetType(Integer)) + End If End Sub @@ -1747,11 +1771,13 @@ Partial Class Inventarios_RecepcionAlmacen 'RegistraScript("document.getElementById(""TxtSerie"").focus();") RegistraScript("$('#DivSerie').modal();", "ModalLote") - GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC") + 'GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC") + GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", CveCompraDetalle), "Consec DESC") GvSerie.DataBind() 'VALIDA QUE SIGA AGREGANDO - If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < LbCantidad.Text.ToEntero Then + 'If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < LbCantidad.Text.ToEntero Then + If Not DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", CveCompraDetalle)).Rows.Count < LbCantidad.Text.ToEntero Then BtnAgregarPS.Enabled = True If CerrarCompletado Then RegistraScript("$('#DivSerie').modal('hide');") @@ -1764,7 +1790,9 @@ Partial Class Inventarios_RecepcionAlmacen Dim Contador As Integer = 0 For Each Gvr As GridViewRow In GvInv.Rows If Gvr.DataKey("CvePS").ToEntero = CvePSSerie Then - Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count + 'Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count + Contador = DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", Gvr.DataKey("CveCompraDetalle"))).Rows.Count + Gvr.FCCheckBox("cbInv").Enabled = False Gvr.FCTextBox("TbCantidadF").Enabled = False If DtDatosDetalle IsNot Nothing AndAlso Contador > 0 Then @@ -1776,7 +1804,8 @@ Partial Class Inventarios_RecepcionAlmacen End If End If - Dim Dr As DataRow = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0) + 'Dim Dr As DataRow = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0) + Dim Dr As DataRow = DtInv.Select($"CveCompraDetalle = {Gvr.DataKey("CveCompraDetalle")}")(0) Dr("CantidadSurtidaPantalla") = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal DtInv.AcceptChanges() Next @@ -1810,7 +1839,10 @@ Partial Class Inventarios_RecepcionAlmacen Dim dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie).FiltroPrimero("", "PS") For Each Serie In SeriesArreglo - DtDuplicado = DtDatosDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Serie = '{Serie}'") + 'DtDuplicado = DtDatosDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Serie = '{Serie}'") + DtDuplicado = DtDatosDetalle.FiltraParametros($"CveCompraDetalle = {CveCompraDetalle} AND Serie = '{Serie}'") + + If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
    El numero de Serie ""{Serie}"" proporcionado ya se encuentra ingresado.") TxtSerie.Text = "" @@ -1836,7 +1868,8 @@ Partial Class Inventarios_RecepcionAlmacen Dim Index As Integer = 0 Dim Cantidad As Integer = LbCantidad.Text.ToEntero - If CargaMasivaSeries Then Cantidad = DtInv.FiltroPrimeroValor("CantidadF", "Consec = " & CveConsecSerie).ToEntero + 'If CargaMasivaSeries Then Cantidad = DtInv.FiltroPrimeroValor("CantidadF", "Consec = " & CveConsecSerie).ToEntero + If CargaMasivaSeries Then Cantidad = DtInv.FiltroPrimeroValor("CantidadF", "CveCompraDetalle = " & CveCompraDetalle).ToEntero 'DtInv For Each Serie In SeriesArreglo @@ -1847,7 +1880,8 @@ Partial Class Inventarios_RecepcionAlmacen If Index > Cantidad Then Exit For 'VALIDA QUE SIGA AGREGANDO - If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < Cantidad Then + 'If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < Cantidad Then + If Not DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", CveCompraDetalle)).Rows.Count < Cantidad Then MensajeAlert.Append("series cargadas en su totalidad") : Exit For End If @@ -1867,7 +1901,8 @@ Partial Class Inventarios_RecepcionAlmacen End If End If - Row("ConsecId") = CveConsecSerie + 'Row("ConsecId") = CveConsecSerie + Row("CveCompraDetalle") = CveCompraDetalle Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("CvePS") = CvePSSerie Row("CveUM") = CveUMSerie @@ -1922,6 +1957,10 @@ Partial Class Inventarios_RecepcionAlmacen Dim dtt As New DataTable dtt.ReadXml(ArchivoBitacoraDetalle) DtDatosDetalle = dtt + If Not DtDatosDetalle.Columns.Contains("CveCompraDetalle") Then + DtDatosDetalle.Columns.Add("CveCompraDetalle", GetType(Integer)) + DtDatosDetalle.AcceptChanges() + End If Alert("Registro(s) Recuperados", TipoMensaje.ToastInformacion) End If CargaGVInv() @@ -1975,18 +2014,21 @@ Partial Class Inventarios_RecepcionAlmacen CvePSSerie = Argumentos(0).ToEntero CveUMSerie = Argumentos(1).ToEntero PUSerie = Argumentos(2).ToDecimal - CveConsecSerie = Argumentos(5).ToEntero + 'CveConsecSerie = Argumentos(5).ToEntero + CveCompraDetalle = Argumentos(6).ToEntero CargaLote(1) End Sub Private Sub CargaLote(Tipo As Integer, Optional CerrarCompletado As Boolean = False) RegistraScript("$('#DivLote').modal();", "ModalLote") GvLote.Columns(2).HeaderText = UsuarioActual.Empresa.Funcionalidad(147) - GvLote.DataSource = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC") + 'GvLote.DataSource = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC") + GvLote.DataSource = DtDatosLoteDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", CveCompraDetalle), "Consec DESC") GvLote.DataBind() 'VALIDA QUE SIGA AGREGANDO - If Not DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerie)) < LbLoteCantidad2.Text.ToDecimal Then + 'If Not DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerie)) < LbLoteCantidad2.Text.ToDecimal Then + If Not DtDatosLoteDetalle.SUM("Cantidad", String.Format("CveCompraDetalle = {0}", CveCompraDetalle)) < LbLoteCantidad2.Text.ToDecimal Then BtnAddPSLote.Enabled = False If CerrarCompletado Then RegistraScript("$('#DivLote').modal('hide');") @@ -1999,7 +2041,9 @@ Partial Class Inventarios_RecepcionAlmacen Dim Contador As Decimal = 0 For Each Gvr As GridViewRow In GvInv.Rows If Gvr.DataKey("CvePS").ToEntero = CvePSSerie Then - Contador = DtDatosLoteDetalle.SUMD("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))) + 'Contador = DtDatosLoteDetalle.SUMD("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))) + Contador = DtDatosLoteDetalle.SUMD("Cantidad", String.Format("CveCompraDetalle = {0}", Gvr.DataKey("CveCompraDetalle"))) + Gvr.FCCheckBox("cbInv").Enabled = False Gvr.FCTextBox("TbCantidadF").Enabled = False If DtDatosLoteDetalle IsNot Nothing AndAlso Contador > 0 Then @@ -2049,7 +2093,8 @@ Partial Class Inventarios_RecepcionAlmacen Dim DtSeriesNuevas As New DataTable DtSeriesNuevas.Columns.Add("Serie", GetType(String)) - DtDuplicado = DtDatosLoteDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Lote = '{Lote}' ") + 'DtDuplicado = DtDatosLoteDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Lote = '{Lote}' ") + DtDuplicado = DtDatosLoteDetalle.FiltraParametros($"CveCompraDetalle = {CveCompraDetalle} AND Lote = '{Lote}' ") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then Alert($"
    El numero de Lote ""{Lote}"" proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") @@ -2078,7 +2123,8 @@ Partial Class Inventarios_RecepcionAlmacen End If End If - Row("ConsecId") = CveConsecSerie + 'Row("ConsecId") = CveConsecSerie + Row("CveCompraDetalle") = CveCompraDetalle Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("Cantidad") = CantidadLote Row("CvePS") = CvePSSerie @@ -2716,8 +2762,12 @@ Partial Class Inventarios_RecepcionAlmacen PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal 'SI FUE POR SERIE LOTE - DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) - DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) + 'DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) + 'DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) + + DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", gvr.DataKey("CveCompraDetalle").ToEntero)) + DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("CveCompraDetalle = {0}", gvr.DataKey("CveCompraDetalle").ToEntero)) + If DtDetalle.Rows.Count > 0 Then Dim ContDt As Integer = 0 ' por redondeo @@ -3655,7 +3705,9 @@ Partial Class Inventarios_RecepcionAlmacen ErrorMovInv = True End Try - + If Not ErrorMovInv Then + RenombrarBitacoras() + End If 'FINAL If Not ErrorMovInv Then @@ -3759,6 +3811,26 @@ Partial Class Inventarios_RecepcionAlmacen If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose() End Sub + Private Sub RenombrarBitacoras() + + + Dim fechaActual As String = DateTime.Now.ToString("yyyyMMddHHmmss") + + Dim fib As New FileInfo(ArchivoBitacora) + Dim fibd As New FileInfo(ArchivoBitacoraDetalle) + + If fib.Exists() Then + Dim nuevoNombre As String = Path.Combine(fib.DirectoryName, Path.GetFileNameWithoutExtension(fib.Name) & "_" & fechaActual & ".xml") + fib.MoveTo(nuevoNombre) + End If + + If fibd.Exists() Then + Dim nuevoNombreDetalle As String = Path.Combine(fibd.DirectoryName, Path.GetFileNameWithoutExtension(fibd.Name) & "_" & fechaActual & ".xml") + fibd.MoveTo(nuevoNombreDetalle) + End If + + End Sub + Private Function GenerarMovimientoAlmacenVenta(CveAlmacen As Integer, CveConceptoAlmacen As Integer, CveVenta As Integer, CveMovimientoRelacionado As Integer, DtDetalle As DataTable, ObjInventario As ClsInventarios, ObjConta As ClsContabilidad, EsContabilizable As Boolean, Modulo As String) As MMovimientoAlmacen Dim ErrorMovInv As Boolean = False Dim Retorno As New MMovimientoAlmacen @@ -4816,7 +4888,7 @@ Partial Class Inventarios_RecepcionAlmacen Alert("El nombre de la segunda columna debe ser 'Codigo'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If - If Not dt.Columns(2).ColumnName = "Producto" Then + If Not (dt.Columns(2).ColumnName = "Producto" Or dt.Columns(2).ColumnName = "Producto/Servicio") Then Alert("El nombre de la tercera columna debe ser 'Producto'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If @@ -4851,7 +4923,8 @@ Partial Class Inventarios_RecepcionAlmacen Dim CveProducto As Integer = RowPS("CvePS").ToString().ToEntero() Dim CveUnidadMedida As Integer = RowPS("CveUM").ToString().ToEntero() CvePSSerie = CveProducto - CveConsecSerie = DtInv.FiltroPrimeroValor("Consec", "CvePS=" & CvePSSerie).ToEntero + 'CveConsecSerie = DtInv.FiltroPrimeroValor("Consec", "CvePS=" & CvePSSerie).ToEntero + CveCompraDetalle = DtInv.FiltroPrimeroValor("CveCompraDetalle", "CvePS=" & CvePSSerie).ToEntero Dim Cantidad As Double = RowExcel("Cantidad").ToString().ToDecimal() Dim Serie As String = RowExcel("Serie").ToString() @@ -4875,7 +4948,8 @@ Partial Class Inventarios_RecepcionAlmacen If Valido Then - CveConsecSerie = RowPS("Consec").ToString.ToEntero + 'CveConsecSerie = RowPS("Consec").ToString.ToEntero + CveCompraDetalle = RowPS("CveCompraDetalle").ToString.ToEntero AgregaSerie(RowExcel("Serie").ToString, 1, False) 'AgregarPS(Cantidad, CveProducto, CveUnidadMedida, Observaciones, CveSeccionAlmacen:=DdlSeccionAlmacen.SelectedValue.ToEntero, SeccionAlmacen:=DdlSeccionAlmacen.SelectedItem.Text, Serie:=If(Not String.IsNullOrEmpty(Serie), Serie, ""), Lote:=Lote, FechaCaducidad:=FechaCaducidad, Limpia:=False) @@ -4887,7 +4961,7 @@ Partial Class Inventarios_RecepcionAlmacen Else RowsNoCargados = RowsNoCargados + 1 - ProductosNoCargados.AppendFormat("{0},", RowExcel("Producto").ToString()) + ProductosNoCargados.AppendFormat("{0},", RowExcel("Producto/Servicio").ToString()) End If End If Next @@ -4896,12 +4970,20 @@ Partial Class Inventarios_RecepcionAlmacen Finally Dim MensajeFinal As New StringBuilder() + If RowsNoCargados = 0 AndAlso RowsCargados > 0 Then MensajeFinal.Append("Los productos se cargaron correctamente.

    ") End If + If RowsCargados > 0 Then MensajeFinal.Append("Se cargaron " & RowsCargados & " productos correctamente.") + + TxtExcel.Text = "[]" + UpConcepto.Update() + RegistraScript("$('#DivCargaExcel').modal('hide');") + End If + If RowsNoCargados > 0 Then MensajeFinal.Append("No se pudieron cargar " & RowsNoCargados & " productos.
    Los siguientes productos no se pudieron cargar: " & ProductosNoCargados.ToString()) End If @@ -4922,32 +5004,67 @@ Partial Class Inventarios_RecepcionAlmacen End Sub Public Sub DescargarFormato() - Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoRecepcionAlmacen.xlsx" - Dim dtt As New DataTable - dtt = DtInv.Copy() - dtt.Columns.Remove("Cantidad") - dtt.Columns("CantidadF").ColumnName = "Cantidad" - dtt.Columns("PS").ColumnName = "Producto" - dtt.Columns("Codigo").ColumnName = "Código" + Dim PathArchivo As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoRecepcionAlmacen.xlsx" - Dim existingcol As New List(Of String) '= {"Cantidad", "Producto", "Código"} + If System.IO.File.Exists(PathArchivo) Then - For Each col As DataColumn In dtt.Columns - If Not col.ColumnName.Contiene("Cantidad", "Producto", "Código") Then - existingcol.Add(col.ColumnName) - End If - Next + Response.Clear() + Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + Response.AddHeader("Content-Disposition", "attachment; filename=FormatoRecepcionAlmacen.xlsx") + Response.TransmitFile(Directorio) + Response.End() - For Each colName As String In existingcol - dtt.Columns.Remove(colName) - Next + End If - dtt.Columns("Cantidad").SetOrdinal(0) - dtt.Columns("Código").SetOrdinal(1) - dtt.Columns("Producto").SetOrdinal(2) - dtt.Columns.Add("Serie", GetType(String)) - dtt.ExportToExcel("FormatoRecepcionAlmacen.xlsx") + 'Dim dtt As New DataTable + 'dtt = DtInv.Copy() + + 'If dtt.Columns.Contains("Cantidad") Then + ' dtt.Columns.Remove("Cantidad") + 'End If + + 'If dtt.Columns.Contains("CantidadF") Then + ' dtt.Columns("CantidadF").ColumnName = "Cantidad" + 'End If + + 'If dtt.Columns.Contains("PS") Then + ' dtt.Columns("PS").ColumnName = "Producto" + 'End If + + 'If dtt.Columns.Contains("Codigo") Then + ' dtt.Columns("Codigo").ColumnName = "Código" + 'End If + + + 'Dim existingcol As New List(Of String) '= {"Cantidad", "Producto", "Código"} + + 'For Each col As DataColumn In dtt.Columns + ' If Not col.ColumnName.Contiene("Cantidad", "Producto", "Código") Then + ' existingcol.Add(col.ColumnName) + ' End If + 'Next + + 'For Each colName As String In existingcol + ' dtt.Columns.Remove(colName) + 'Next + + 'Try + ' dtt.Columns("Cantidad").SetOrdinal(0) + ' dtt.Columns("Código").SetOrdinal(1) + ' dtt.Columns("Producto").SetOrdinal(2) + 'Catch ex As Exception + + 'End Try + + + 'If Not dtt.Columns.Contains("PS") Then + ' dtt.Columns.Add("Serie", GetType(String)) + 'End If + + + + 'dtt.ExportToExcel("FormatoRecepcionAlmacen.xlsx") End Sub @@ -4957,7 +5074,7 @@ Partial Class Inventarios_RecepcionAlmacen 'Create a DataTable. Dim dt As New DataTable() - dt.Columns.AddRange(New DataColumn(9) {New DataColumn("CodBarra", GetType(String)), + dt.Columns.AddRange(New DataColumn(10) {New DataColumn("CodBarra", GetType(String)), New DataColumn("OVenta", GetType(String)), New DataColumn("Factura", GetType(String)), New DataColumn("FechaFac", GetType(String)), @@ -4966,7 +5083,8 @@ Partial Class Inventarios_RecepcionAlmacen New DataColumn("Producto", GetType(String)), New DataColumn("Serie", GetType(String)),'CodigoUnico New DataColumn("Cantidad", GetType(Integer)), - New DataColumn("Código", GetType(String))}) + New DataColumn("Código", GetType(String)), + New DataColumn("CveCompraDetalle", GetType(Integer))}) FolioFactura = FolioFactura.Replace("-", "") 'Read the contents of CSV file. @@ -5049,5 +5167,10 @@ Partial Class Inventarios_RecepcionAlmacen End Class + Protected Sub LnkAgregarExcel_Click(sender As Object, e As EventArgs) + TxtExcel.Text = "[]" + UpConcepto.Update() + RegistraScript("$('#DivCargaExcel').modal('show');") + End Sub End Class diff --git a/Ventas/RepVentasUtilidadPadre.aspx b/Ventas/RepVentasUtilidadPadre.aspx index e6bb4b11e..286745018 100644 --- a/Ventas/RepVentasUtilidadPadre.aspx +++ b/Ventas/RepVentasUtilidadPadre.aspx @@ -56,6 +56,9 @@
  • Ver Grafica
  • +
  • + Consultar porcentajes +
  • @@ -275,6 +278,106 @@ + + + + + + + diff --git a/Ventas/RepVentasUtilidadPadre.aspx.vb b/Ventas/RepVentasUtilidadPadre.aspx.vb index 81df03936..9b41dca55 100644 --- a/Ventas/RepVentasUtilidadPadre.aspx.vb +++ b/Ventas/RepVentasUtilidadPadre.aspx.vb @@ -32,19 +32,37 @@ Partial Class Ventas_RepVentasUtilidadPadre Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then - 'If UsuarioActual.Empresa.Funcionalidad(382) <> "1" Then - ' GvDatos.Columns(3).Visible = False - ' GvDatos.Columns(5).Visible = False - 'End If + If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then + LnkModalPorcentajes.Visible = True + End If CargaCombos() End If End Sub + Private Property SubProyectoConf As String + Get + If ViewState("SubProyectoConf") Is Nothing Then + ViewState("SubProyectoConf") = "" + End If + Return ViewState("SubProyectoConf").ToString + End Get + + Set(value As String) + ViewState("SubProyectoConf") = value + End Set + End Property + + + + #Region " INICIALIZA VALORES " Private Sub CargaCombos() + TxtModalFechaInicio.Text = NowADS().FirstDayOfMonth.ToShortDateString + TxtModalFechaFin.Text = NowADS().LastDayOfMonth.ToShortDateString + txtFechaI.Text = NowADS().FirstDayOfMonth.ToShortDateString txtFechaF.Text = NowADS().LastDayOfMonth.ToShortDateString @@ -108,6 +126,12 @@ Partial Class Ventas_RepVentasUtilidadPadre LblNeto.Text = "0" LblPorNeto.Text = "0" + + + Dim LblSubProyectoConf As New Label + CargarCentrosDeCosto(Nothing, Nothing, Nothing, LblSubProyectoConf) + SubProyectoConf = LblSubProyectoConf.Text + End Sub Protected Sub DdlCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) @@ -315,4 +339,42 @@ Partial Class Ventas_RepVentasUtilidadPadre #End Region + + Protected Sub LnkModalPorcentajes_Click(sender As Object, e As EventArgs) + + GvPorcentajes.DataSource = Nothing + GvPorcentajes.DataBind() + UpModalPorcentajes.Update() + RegistraScript("$('#DivModalPorcetajes').modal(`show`);") + End Sub + + + + Protected Sub BtnModalConsultaPorcentaje_Click(sender As Object, e As EventArgs) + + Dim ObjVentas As New ClsVentas() + Dim FechaI As Date = TxtModalFechaInicio.Text.ToDate + Dim FechaF As Date = TxtModalFechaFin.Text.ToDate + If TxtModalFechaInicio.Text = "" Then FechaI = MinFecha + If TxtModalFechaFin.Text = "" Then FechaF = MaxFecha + + If ObjVentas.GetReporteVentasUtilidad("-1", -1, "-1", FechaI, FechaF, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1) Then + GvPorcentajes.DataSource = ObjVentas.DtResultados.FiltraParametros($" CveVenta > 0 AND PorNeto <= {TxtModalPorcentaje.Text.ToDecimal} AND TipoDocto = 'Ing' AND CveEstatusFactura IN(2,3) ") + End If + + ObjVentas.Dispose() + GvPorcentajes.DataBind() + + ObjVentas.Dispose() + UpModalPorcentajes.Update() + + End Sub + + Protected Sub GvPorcentajes_RowDataBound(sender As Object, e As GridViewRowEventArgs) + + If e.Row.RowType = DataControlRowType.Header Then + e.Row.Cells(0).Text = SubProyectoConf + End If + + End Sub End Class From 04970c1f24f3101fea1c7f5f8484d8cb17148eb1 Mon Sep 17 00:00:00 2001 From: RPimienta Date: Fri, 20 Sep 2024 21:56:52 -0600 Subject: [PATCH 12/23] Cambios en saldos iniciales para empresa 189 --- General/SaldosIniciales.aspx.vb | 699 +++++++++++++++++++++++++++++++- 1 file changed, 693 insertions(+), 6 deletions(-) diff --git a/General/SaldosIniciales.aspx.vb b/General/SaldosIniciales.aspx.vb index cfc3b5882..786b351da 100644 --- a/General/SaldosIniciales.aspx.vb +++ b/General/SaldosIniciales.aspx.vb @@ -3,6 +3,7 @@ Option Explicit On Imports System.Data Imports System.Math Imports ClosedXML.Excel +Imports DocumentFormat.OpenXml.Drawing.Diagrams Imports Extensiones @@ -1549,7 +1550,7 @@ Partial Class General_SaldosIniciales 'P R O V E E D O R E S - F A C T U R A S - ElseIf RblFormato.SelectedValue = "3" Or RblFormato.SelectedValue = "18" Then + ElseIf RblFormato.SelectedValue = "3" Then #Region "P R O V E E D O R E S - F A C T U R A S" @@ -1774,14 +1775,314 @@ Partial Class General_SaldosIniciales End If ObjCompras.Dispose() + ElseIf RblFormato.SelectedValue = "18" Then + + Dim ObjCompras As New ClsCompras + Dim ErrorCompras As Boolean = False + Dim ObjConta As New ClsContabilidad(ObjCompras.IniciaTransacSQL()) + Dim CveCompra As Integer + Dim CvePrePoliza As Integer + 'Dim Contador As Integer = 0 + Dim ExisteCompra As Boolean = False + Dim DtProveedores As New DataTable + Dim NoEncontrados As Integer = 0 + Dim Encontrados As Integer = 0 + Dim RFC As String = "" + + + Try + DtProveedores = GlobalDTCompProveedores(UsuarioActual.CveEmpresa) + + Dim drr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero("") + Dim CvePS As Integer = drr("CvePS").ToString().ToEntero() + Dim CveUnidadMedida As Integer = drr("CveUnidadMedida").ToString().ToEntero() + Dim CveClasificacion As Integer = drr("CveClasificacion").ToString().ToEntero() + Dim dtsubp As DataTable = GlobalDTSubProyectos(UsuarioActual.CveEmpresa) + + Dim CountRow As Integer = 1 + Dim LastSerieFolioTipoDoc As String = String.Empty + Dim EsDetalle As Boolean = False + For Each Row As DataRow In dt.FiltraParametros("RFC <> ''").Rows + Dim Sucursal As String = dtsubp.FiltroPrimeroValor("CveSubProyecto", $"SubProyecto = '{Row("Sucursal").ToString()}'") + RFC = Row("RFC").ToString().Trim + Dim Serie As String = Row("Serie").ToString().Trim + Dim Folio As String = Row("Folio").ToString().Trim + Dim Fecha As Date = Row("Fecha").ToString().ToDate + Dim TipoDocto As String = Row("Tipo Documento").ToString().Trim.ToUpper + Dim CveProveedor As Integer = 0 + If UsuarioActual.CveEmpresa = 189 Then + CveProveedor = DtProveedores.FiltroPrimeroValor("CveProveedor", $"RazonSocial = '{RFC}'").ToString().ToEntero() + Else + CveProveedor = DtProveedores.FiltroPrimeroValor("CveProveedor", $"RFC = '{RFC}'").ToString().ToEntero() + End If + GuardaLog(Sucursal + " - " + Row("Sucursal").ToString()) + Dim Moneda As String = Row("Moneda").ToString() + Dim TipoCambio As String = If(dt.Columns.Contains("Tipo Cambio"), Row("Tipo Cambio").ToString(), "1") + Dim FechaVencimiento As Date = Row("Fecha Vencimiento").ToString().ToDate + Dim CveMoneda As Integer = 1 + Dim CveProveedorSucursal As Integer = If(dt.Columns.Contains("CveProveedorSucursal"), Row("CveProveedorSucursal").ToString(), "0").ToEntero + Dim PorcentajeIVA As Decimal = If(dt.Columns.Contains("PorcentajeIVA"), Row("PorcentajeIVA").ToString(), "0").ToDecimal.RoundSQL + Dim ImpuestosLocales As Decimal = If(dt.Columns.Contains("ImpuestosLocales"), Row("ImpuestosLocales").ToString(), "0").ToDecimal + Dim RetIVAPorcentaje As Decimal = If(dt.Columns.Contains("RetIVAPorcentaje"), Row("RetIVAPorcentaje").ToString(), "0").ToDecimal + Dim RetISRPorcentaje As Decimal = If(dt.Columns.Contains("RetISRPorcentaje"), Row("RetISRPorcentaje").ToString(), "0").ToDecimal + Dim CveSubProyecto As Integer = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", String.Format("SubProyecto='{0}'", If(dt.Columns.Contains("SubProyecto"), Row("SubProyecto").ToString(), ""))).ToEntero + If CveSubProyecto = 0 Then CveSubProyecto = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto").ToEntero + + If Not CvePS > 0 Then Alert(String.Format("No se encontró el Producto Servicio"), TipoMensaje.MsgError) : ErrorCompras = True + If Not CveUnidadMedida > 0 Then Alert(String.Format("No se encontró la Unidad de Medida."), TipoMensaje.MsgError) : ErrorCompras = True + If UsuarioActual.CveEmpresa = 189 Then + If Not CveProveedor > 0 Then Alert(String.Format("No se encontró el Proveedor con la razon social: {0}", {RFC}), TipoMensaje.MsgError) : ErrorCompras = True : Exit For + Else + If Not CveProveedor > 0 Then Alert(String.Format("No se encontró el Proveedor con el RFC: {0}", {RFC}), TipoMensaje.MsgError) : ErrorCompras = True : Exit For + End If + If Not CveProveedorSucursal > 0 Then CveProveedorSucursal = -1 + + + If LastSerieFolioTipoDoc = $"{Folio}" AndAlso UsuarioActual.CveEmpresa = 189 Then + EsDetalle = True + Else + LastSerieFolioTipoDoc = $"{Folio}" + EsDetalle = False + End If + + + Dim SubTotal As Decimal = 0 + Dim IVA As Decimal = 0 + Dim Total As Decimal = 0 + Dim Saldo As Decimal = 0 + Dim RetIVA As Decimal = 0 + Dim RetISR As Decimal = 0 + Dim IEPS As Decimal = 0 + + + If UsuarioActual.CveEmpresa = 189 AndAlso Not EsDetalle Then + For Each item As DataRow In dt.FiltraParametros($"RFC <> '' AND Folio = '{Row("Folio").ToString()}'").Rows + SubTotal += item("SubTotal").ToString().ToDecimal.RoundSQL + IVA += item("IVA").ToString().ToDecimal.RoundSQL + Total += item("Total").ToString().ToDecimal.RoundSQL + Saldo += item("Saldo").ToString().ToDecimal.RoundSQL + RetIVA += item("Ret IVA").ToString().ToDecimal.RoundSQL + RetISR += item("Ret ISR").ToString().ToDecimal.RoundSQL + IEPS += If(dt.Columns.Contains("IEPS"), Row("IEPS").ToString(), "0").ToDecimal.RoundSQL + Next + Else + SubTotal = Row("SubTotal").ToString().ToDecimal.RoundSQL + IVA = Row("IVA").ToString().ToDecimal.RoundSQL + Total = Row("Total").ToString().ToDecimal.RoundSQL + Saldo = Row("Saldo").ToString().ToDecimal.RoundSQL + RetIVA = Row("Ret IVA").ToString().ToDecimal.RoundSQL + RetISR = Row("Ret ISR").ToString().ToDecimal.RoundSQL + IEPS = If(dt.Columns.Contains("IEPS"), Row("IEPS").ToString(), "0").ToDecimal.RoundSQL + End If + + If PorcentajeIVA > 0 AndAlso IVA = 0 Then PorcentajeIVA = 0 + + Dim RetIVAConcepto As String = If(dt.Columns.Contains("RetIVAConcepto"), Row("RetIVAConcepto").ToString(), "").ToUpper + Dim RetISRConcepto As String = If(dt.Columns.Contains("RetISRConcepto"), Row("RetISRConcepto").ToString(), "").ToUpper + Dim CveRetIVAConcepto As Integer = If(RetIVAConcepto = "HONORARIOS", 1, If(RetIVAConcepto = "FLETES", 2, If(RetIVAConcepto = "ARRENDAMIENTO", 4, -1))) + Dim CveRetISRConcepto As Integer = If(RetISRConcepto = "HONORARIOS", 1, If(RetISRConcepto = "ARRENDAMIENTO", 2, If(RetISRConcepto = "RESICO", 4, -1))) + + TipoDocto = IIf(TipoDocto.Contiene("INGRESOS", "INGRESO", "ING", "FACTURA", "FACTURAS", ""), "Fac", "NC").ToString() + + 'RMF. falta validación de totales. + 'Temporalmente SE BORRARA + Dim Transaccion As String = "" 'Row("Transaccion2").ToString() + Dim Folio2 As String = "" 'Row("Folio2").ToString() + Dim CodProvee As String = "" 'Row("CodProvee2").ToString() + + 'Moneda + If Moneda.ToUpper.Contiene("PESOS", "PESO", "MXN", "MONEDA NACIONAL") Then + CveMoneda = 1 + ElseIf Moneda.ToUpper.Contiene("DOLARES", "DOLAR", "USD", "DÓLARES", "DÓLAR") Then + CveMoneda = 2 + End If + + 'Si no se especifica TC, se manda como pesos. + If TipoCambio = "" Then TipoCambio = "1" + If CveMoneda = 2 AndAlso TipoCambio = "1" Then + TipoCambio = GlobalTipoCambio(Fecha).ToString + End If + + + Dim IEPSDetalle As Decimal = 0 + Dim CantidadDetalle As Decimal = 0 + Dim PUDetalle As Decimal = 0 + Dim IVADetalle As Decimal = 0 + + If RblFormato.SelectedValue = "18" Then + + Dim CodigoDetalle As String = Row("Codigo").ToString + If CodigoDetalle.Trim.Length > 0 Then + Dim DrDetalles As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"Codigo = '{CodigoDetalle}'") + + If DrDetalles IsNot Nothing Then + CvePS = DrDetalles("CvePS").ToString().ToEntero() + CveUnidadMedida = DrDetalles("CveUnidadMedida").ToString().ToEntero() + CveClasificacion = DrDetalles("CveClasificacion").ToString().ToEntero() + Else + Alert($"El código del producto no se encontro, error en registro {CountRow}") + ErrorCompras = True + End If + + Else + Alert($"El código es requerido, error en registro {CountRow}") + ErrorCompras = True + End If + + + IEPSDetalle = Row("IEPS").ToString.ToDecimal + CantidadDetalle = Row("Cantidad").ToString.ToDecimal + PUDetalle = Row("PU").ToString.ToDecimal + IVADetalle = Row("IVA").ToString.ToDecimal + + If CantidadDetalle = 0 Then + Alert($"No se especifico la cantidad, error en registro {CountRow}") + ErrorCompras = True + End If + + End If + + 'PrePóliza + If Not EsDetalle Then + CvePrePoliza = ObjConta.AddPrePolizas("Compras/SaldoInicial", 1, Total, Total, CveMoneda, Fecha, String.Format("{0}-{1}", Serie, Folio), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + If Not CvePrePoliza > 0 Then + ErrorCompras = True + Exit For + End If + End If + + If FechaVencimiento = "".ToDate Or FechaVencimiento < "1900/01/01".ToDate Then + FechaVencimiento = Fecha + End If + + If Not EsDetalle Then + If Not ObjCompras.AddCompra(TipoDocto, "", Serie, Folio, Folio2, CveProveedor.ToEntero(), SubTotal + ImpuestosLocales, 0, 0, IVA, RetIVA, RetISR, IEPS, 0, 0, Total, Fecha, CveMoneda, TipoCambio.ToDecimal, FechaVencimiento, + False, CodProvee, 1, CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveProveedorSucursal:=CveProveedorSucursal, + NumeroReembolso:=Transaccion, PorcentajeIVA:=PorcentajeIVA, TotalOriginal:=Total, CveSubProyecto:=CveSubProyecto, CveRetIVAConcepto:=CveRetIVAConcepto, CveRetISRConcepto:=CveRetISRConcepto) Then + ErrorCompras = True + Exit For + End If + CveCompra = ObjCompras.CveCompra + + SubTotal = Row("SubTotal").ToString().ToDecimal + IVA = Row("IVA").ToString().ToDecimal + Total = Row("Total").ToString().ToDecimal + Saldo = Row("Saldo").ToString().ToDecimal + RetIVA = Row("Ret IVA").ToString().ToDecimal + RetISR = Row("Ret ISR").ToString().ToDecimal + IEPS = Row("IEPS").ToString().ToDecimal + End If + + 'Compra Detalle + If RblFormato.SelectedValue = "18" Then + + Dim TotalDetalles As Decimal = SubTotal + If PUDetalle > 0 Then + TotalDetalles = (CantidadDetalle * PUDetalle) + IVA - RetIVA - RetISR + IEPSDetalle + End If + + If Math.Abs(TotalDetalles - Total) > 0.01 Then + ErrorCompras = True + Alert($"Registro {CountRow} El total no councide con el calculo de los detalles, total: {Total.ToString("###,###,###.00")} calculo detatalles: {TotalDetalles.ToString("###,###,###.00")}", TipoMensaje.MsgAdvertencia) + Exit For + End If + + If Not ObjCompras.AddCompraDetalle(CveCompra, CveUnidadMedida, CvePS, CveSubProyecto, -1, 0, CantidadDetalle, PUDetalle, (CantidadDetalle * PUDetalle) * PorcentajeIVA, TotalDetalles, 0, "Carga Inicial", -1, IVAPorcentaje:=PorcentajeIVA, RetIVAPorcentaje:=RetIVAPorcentaje, RetISRPorcentaje:=RetISRPorcentaje, IEPSPS:=IEPSDetalle) Then + ErrorCompras = True + Exit For + End If + Else + If Not ObjCompras.AddCompraDetalle(CveCompra, CveUnidadMedida, CvePS, CveSubProyecto, -1, 0, 1, SubTotal, SubTotal * PorcentajeIVA, SubTotal, 0, "Carga Inicial", -1, IVAPorcentaje:=PorcentajeIVA, RetIVAPorcentaje:=RetIVAPorcentaje, RetISRPorcentaje:=RetISRPorcentaje) Then + ErrorCompras = True + Exit For + End If + End If + + If ImpuestosLocales > 0 Then 'se agrega como parte de la partida, sin iva. + If Not ObjCompras.AddCompraDetalle(CveCompra, CveUnidadMedida, CvePS, CveSubProyecto, -1, 0, 1, ImpuestosLocales, ImpuestosLocales, ImpuestosLocales, 0, "Carga Inicial", -1, IVAPorcentaje:=0, RetIVAPorcentaje:=0, RetISRPorcentaje:=0) Then + ErrorCompras = True + Exit For + End If + End If + Dim ConceptoContablePago As Integer = 17 + If TipoDocto = "NC" Then ConceptoContablePago = 60 + + If Not EsDetalle Then + + SubTotal = 0 + IVA = 0 + Total = 0 + Saldo = 0 + RetIVA = 0 + RetISR = 0 + IEPS = 0 + + For Each item As DataRow In dt.FiltraParametros($"RFC <> '' AND Folio = '{Row("Folio").ToString()}'").Rows + SubTotal += item("SubTotal").ToString().ToDecimal.RoundSQL + IVA += item("IVA").ToString().ToDecimal.RoundSQL + Total += item("Total").ToString().ToDecimal.RoundSQL + Saldo += item("Saldo").ToString().ToDecimal.RoundSQL + RetIVA += item("Ret IVA").ToString().ToDecimal.RoundSQL + RetISR += item("Ret ISR").ToString().ToDecimal.RoundSQL + IEPS += If(dt.Columns.Contains("IEPS"), Row("IEPS").ToString(), "0").ToDecimal.RoundSQL + Next + + 'PrePólizaDetalle + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Total, Total, IIf(TipoDocto = "Fac", 5, 18).ToString().ToEntero(), Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero(), Contabilizable:=False) Then ErrorCompras = True : Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, SubTotal, SubTotal, 6, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveClasificacion:=CveClasificacion, CveSubProyecto:=Sucursal.ToEntero(), Contabilizable:=False) Then ErrorCompras = True : Exit For + + If IVA > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, IVA, IVA, 14, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero(), CveClasificacion:=CveClasificacion, PorcentajeImpuesto:=PorcentajeIVA, Contabilizable:=False) Then ErrorCompras = True : Exit For + End If + + If IEPS > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, IEPS, IEPS, 25, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero(), Contabilizable:=False) Then ErrorCompras = True : Exit For + + If RetIVA > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, RetIVA, RetIVA, 15, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero(), Contabilizable:=False) Then ErrorCompras = True : Exit For + If RetISR > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, RetISR, RetISR, 16, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero(), Contabilizable:=False) Then ErrorCompras = True : Exit For + 'If ImpuestosLocales > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImpuestosLocales, ImpuestosLocales, 27, Folio, String.Format("{0}-{1}", Serie, Folio), CveCompra:=CveCompra, CveProveedor:=CveProveedor, CveSubProyecto:=Sucursal.ToEntero()) Then ErrorCompras = True : Exit For + + 'Saldo + If Saldo < Total Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Total - Saldo, Total - Saldo, ConceptoContablePago, Folio.ToString(), Folio.ToString(), CveCompra:=CveCompra, CveProveedor:=CveProveedor, Contabilizable:=False) Then ErrorCompras = True : Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Total - Saldo, Total - Saldo, 95, Folio.ToString(), Folio.ToString(), CveCompra:=CveCompra, CveProveedor:=CveProveedor, Contabilizable:=False) Then ErrorCompras = True : Exit For + End If + End If + Encontrados = Encontrados + 1 + + CountRow = CountRow + 1 + Next + + Catch ex As Exception + OnError("Ocurrió un error al cargar los datos", ex) + ErrorCompras = True + End Try + + If Not ErrorCompras Then + + 'If Encontrados > 0 Then + ' Alert(String.Format("Se agregaron: {0} Compras correctamente.
    Se Omitieron: {1} Compras ya que ya se encuentran registradas.", Encontrados, NumRows - 1 - Encontrados), TipoMensaje.MsgInformacion) + 'Else + ' Alert(String.Format("Se agregaron: {0} Compras correctamente.", Encontrados), TipoMensaje.MsgInformacion) + 'End If + Alert(String.Format("Se agregaron: {0} Compras correctamente.", Encontrados), TipoMensaje.MsgInformacion) + 'Alert(String.Format("Se agregaron: {0} Compras correctamente. RFC:{1} ", Encontrados, RFC), TipoMensaje.MsgInformacion) + + ObjCompras.Commit() + TxtExcel.Text = "" + UpDatos.Update() + Else + Alert(String.Format("NO Se agregaron: {0} Compras.", NumRows), TipoMensaje.MsgError) + ObjCompras.RollBack() + End If + ObjCompras.Dispose() + #End Region 'C L I E N T E S - F A C T U R A S - ElseIf RblFormato.SelectedValue = "4" Or RblFormato.SelectedValue = "17" Then + ElseIf RblFormato.SelectedValue = "4" Then #Region "C L I E N T E S - F A C T U R A S" - Dim NoEncontrados As Integer = 0 Dim Encontrados As Integer = 0 Dim StrRFCNoencontrados As New StringBuilder @@ -2089,11 +2390,397 @@ Partial Class General_SaldosIniciales End If ObjVentas.Dispose() + + + ElseIf RblFormato.SelectedValue = "17" Then + Dim NoEncontrados As Integer = 0 + Dim Encontrados As Integer = 0 + Dim StrRFCNoencontrados As New StringBuilder + Dim drr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero("AplicaParaVenta = 1") + If drr Is Nothing Then + Alert("No existen productos para venta. favor de crear uno e intentar de nuevo", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + Dim ObjVentas As New ClsVentas + Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) + Dim ObjIE As New ClsBancos(ObjVentas.IniciaTransacSQL()) + Dim ErrorVentas As Boolean = False + Dim CveVenta As Integer + Dim CvePrePoliza As Integer + Dim DtClientes As New DataTable + 'Dim ExisteVenta As Boolean = False + 'Dim Contador As Integer = 0 + DtClientes = GlobalDTCliente(UsuarioActual.CveEmpresa, Estatus:=-1) + Dim CvePS As Integer = drr("CvePS").ToString().ToEntero() + Dim CveUnidadMedida As Integer = drr("CveUnidadMedida").ToString().ToEntero() + Dim CveClasificacion As Integer = drr("CveClasificacion").ToString().ToEntero() + + If Not CvePS > 0 Then Alert(String.Format("No se encontró el Producto Servicio"), TipoMensaje.MsgError) : ErrorVentas = True + ' If Not CveSucursal > 0 Then Alert("No se encontró la sucursal.", TipoMensaje.MsgError) : ErrorVentas = True + If Not CveUnidadMedida > 0 Then Alert(String.Format("No se encontró la Unidad de Medida."), TipoMensaje.MsgError) : ErrorVentas = True + Dim dtsubp As DataTable = GlobalDTSubProyectos(UsuarioActual.CveEmpresa) + + 'For Each drt As DataRow In dt.FiltraParametros("RFC <> ''", DistinctColumns:={"RFC"}).Rows + ' Dim RFC As String = drt("RFC").ToString().Trim.Replace("-", "").Replace(" ", "") + ' Dim CveCliente As Integer = DtClientes.FiltroPrimeroValor("CveCliente", $"RFC = '{RFC}'").ToString().ToEntero() + ' If CveCliente <= 0 Then + ' Dim OBJ As New ClsClientes + ' OBJ.AgregarClienteNoFrecuente(RFC, RFC, "", "", "", "", "", 26, RFC, "", "", "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, "", -1, -1) + ' OBJ.Dispose() + ' End If + 'Next + 'GlobalDTCliente(UsuarioActual.CveEmpresa) = Nothing + 'DtClientes = GlobalDTCliente(UsuarioActual.CveEmpresa, Estatus:=-1) + Dim CountRow As Integer = 1 + Dim LastSerieFolioTipoDoc As String = String.Empty + Dim EsDetalle As Boolean = False + For Each Row As DataRow In dt.FiltraParametros("RFC <> ''").Rows + Dim Sucursal As String = dtsubp.FiltroPrimeroValor("CveSubProyecto", $"SubProyecto = '{Row("Sucursal").ToString()}'") + Dim TipoDocto As String = Row("Tipo Documento").ToString().Trim + Dim RFC As String = Row("RFC").ToString().Trim.Replace("-", "").Replace(" ", "") + Dim Serie As String = Row("Serie").ToString().Trim + Dim Folio As Integer = Row("Folio").ToString().ToEntero() + Dim Fecha As Date = Row("Fecha").ToString().ToDate + Dim FechaVencimiento As Date = Row("Fecha Vencimiento").ToString().ToDate + Dim ImpuestoLocal As Decimal = If(dt.Columns.Contains("ImpuestoLocal"), Row("ImpuestoLocal").ToString().ToDecimal, 0D) + Dim Amortizacion As Decimal = If(dt.Columns.Contains("Amort.Ant"), Row("Amort.Ant").ToString().ToDecimal, 0) + Dim CveCliente As Integer = DtClientes.FiltroPrimeroValor("CveCliente", $"RFC = '{RFC}'").ToString().ToEntero() + + If LastSerieFolioTipoDoc = $"{Serie}{Folio}{TipoDocto}" AndAlso UsuarioActual.CveEmpresa = 189 Then + EsDetalle = True + Else + LastSerieFolioTipoDoc = $"{Serie}{Folio}{TipoDocto}" + EsDetalle = False + End If + + + Dim SubTotal As Decimal = 0 + Dim IVA As Decimal = 0 + Dim Total As Decimal = 0 + Dim Saldo As Decimal = 0 + Dim RetIVA As Decimal = 0 + Dim RetISR As Decimal = 0 + Dim IEPS As Decimal = 0 + + If UsuarioActual.CveEmpresa = 189 AndAlso Not EsDetalle Then + + For Each item As DataRow In dt.FiltraParametros($"RFC <> '' AND Folio = '{Row("Folio").ToString()}' AND Serie = '{Row("Serie").ToString()}' AND [Tipo Documento] = '{Row("Tipo Documento").ToString()}' ").Rows + SubTotal += item("SubTotal").ToString().ToDecimal + IVA += item("IVA").ToString().ToDecimal + Total += item("Total").ToString().ToDecimal + Saldo += item("Saldo").ToString().ToDecimal + RetIVA += item("Ret IVA").ToString().ToDecimal + RetISR += item("Ret ISR").ToString().ToDecimal + IEPS += item("IEPS").ToString().ToDecimal + Next + Else + SubTotal = Row("SubTotal").ToString().ToDecimal + IVA = Row("IVA").ToString().ToDecimal + Total = Row("Total").ToString().ToDecimal + Saldo = Row("Saldo").ToString().ToDecimal + RetIVA = Row("Ret IVA").ToString().ToDecimal + RetISR = Row("Ret ISR").ToString().ToDecimal + IEPS = Row("IEPS").ToString().ToDecimal + End If + + Dim Moneda As String = Row("Moneda").ToString() + Dim TipoCambio As String = Row("Tipo Cambio").ToString() + Dim CveMoneda As Integer = 1 + Dim Vendedor As String = If(dt.Columns.Contains("Vendedor"), Row("Vendedor").ToString(), "") + Dim CveVendedor As Integer = 0 + + Dim CveClienteSucursal As Integer = 0 'Row("CveClienteSucursal").ToString().ToEntero() + Dim FolioFiscal As String = If(dt.Columns.Contains("Folio Fiscal"), Row("Folio Fiscal").ToString(), "") + Dim PorcentajeIVA As Decimal = If(dt.Columns.Contains("PorcentajeIVA"), Round(Row("PorcentajeIVA").ToString().ToDecimal, 2), 0) + Dim PorcentajeRetIVA As Decimal = If(dt.Columns.Contains("PorcentajeRetIVA"), Round(Row("PorcentajeRetIVA").ToString().ToDecimal, 4), 0) + Dim PorcentajeRetISR As Decimal = If(dt.Columns.Contains("PorcentajeRetISR"), Round(Row("PorcentajeRetISR").ToString().ToDecimal, 4), 0) + Dim PedidoContrato As String = If(dt.Columns.Contains("Pedido"), Row("Pedido").ToString(), "") + + GuardaLog(Sucursal + "-" + Row("Folio").ToString()) + 'Temporalmente SE BORRARA + Dim Transaccion As String = "" ' Row("Transaccion2").ToString() + Dim Folio2 As String = "" ' Row("Folio2").ToString() + Dim CodCliente As String = "" 'Row("CodCliente2").ToString() + + Dim IEPSDetalle As Decimal = 0 + Dim CantidadDetalle As Decimal = 0 + Dim PUDetalle As Decimal = 0 + Dim IVADetalle As Decimal = 0 + Dim PorcentajeIEPS As Decimal = 0 + + If IEPS > 0 Then + PorcentajeIEPS = If(dt.Columns.Contains("PorcentajeIEPS"), Round(Row("PorcentajeIEPS").ToString().ToDecimal, 4), 0) + End If + + If RblFormato.SelectedValue = "17" Then + + Dim CodigoDetalle As String = Row("Codigo").ToString + If CodigoDetalle.Trim.Length > 0 Then + Dim DrDetalles As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"Codigo = '{CodigoDetalle}'") + + If DrDetalles IsNot Nothing Then + CvePS = DrDetalles("CvePS").ToString().ToEntero() + CveUnidadMedida = DrDetalles("CveUnidadMedida").ToString().ToEntero() + CveClasificacion = DrDetalles("CveClasificacion").ToString().ToEntero() + Else + Alert($"El código del producto no se encontro, error en registro {CountRow}") + ErrorVentas = True + End If + Else + Alert($"El código es requerido, error en registro {CountRow}") + ErrorVentas = True + End If + + IEPSDetalle = Row("IEPS").ToString.ToDecimal + CantidadDetalle = Row("Cantidad").ToString.ToDecimal + PUDetalle = Row("PU").ToString.ToDecimal + IVADetalle = Row("IVA").ToString.ToDecimal + + If CantidadDetalle = 0 Then + Alert($"No se especifico la cantidad, error en registro {CountRow}") + ErrorVentas = True + End If + + End If + + If dt.Columns.Contains("Cliente Sucursal") AndAlso Row("Cliente Sucursal").ToString() <> "" Then + + Dim ObjCliente As New ClsClientes + If ObjCliente.GetSucursales(CveCliente) Then + If ObjCliente.DtResultados.Rows.Count > 0 Then + CveClienteSucursal = ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "SucursalCliente = '" & Row("Cliente Sucursal").ToString().Trim & "'").ToEntero + End If + End If + + ObjCliente.Dispose() + End If + + + 'If Not CveCliente > 0 Then Alert(String.Format("No se encontró el cliente con el RFC: {0}", {RFC}), TipoMensaje.MsgError) : ErrorVentas = True : RFC.GuardaLog : Exit For + TipoDocto = IIf(TipoDocto.ToUpper.Contiene("INGRESO", "INGRESOS", "ING", "FACTURA", "FACTURAS"), "Ing", IIf(TipoDocto.ToUpper.Contiene("EGRESO", "EGRESOS", "EGS"), "Egs", "Rem")).ToString() + 'PrePóliza + If Not EsDetalle Then + CvePrePoliza = ObjConta.AddPrePolizas("Venta/SaldoInicial", 1, Total, Total, 1, Fecha, String.Format("{0}-{1}", Serie, Folio), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + End If + + If Vendedor <> "" Then + CveVendedor = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=-1).FiltroPrimeroValor("CveVendedor", $"Vendedor = '{Vendedor}'").ToString().ToEntero() + If Not CveVendedor > 0 Then CveVendedor = 0 + Else + CveVendedor = 0 + End If + + 'Moneda + If Moneda.ToUpper.Contiene("PESOS", "PESO", "MXN") Then + CveMoneda = 1 + TipoCambio = "1" + ElseIf Moneda.ToUpper.Contiene("DÓLAR", "DÓLARES", "DOLARES", "USD") Then + CveMoneda = 2 + + If TipoCambio.Trim.ToDecimal < 10 Then + + If UsuarioActual.CveEmpresa.Contiene(13, 83) Then + TipoCambio = GlobalTipoCambio(Fecha.AddDays(-1)).ToString() + Else + TipoCambio = GlobalTipoCambio(Fecha).ToString() + End If + + End If + + End If + + 'Si no se especifica TC, se manda como pesos. + If TipoCambio = "" Then TipoCambio = "1" + + If Not CveClienteSucursal > 0 Then CveClienteSucursal = -1 + + If FechaVencimiento = "".ToDate Or FechaVencimiento < "1900/01/01".ToDate Then + FechaVencimiento = Fecha + End If + + + 'Venta + If CveCliente > 0 Then + + + If TipoDocto.Contiene("Ing", "Egs", "Rem") Then + GuardaLog(Serie & "-" & Folio) + If Not EsDetalle Then + If Not ObjVentas.AddVenta(TipoDocto, Folio, CveCliente.ToEntero(), CveClienteSucursal, SubTotal, 0, Amortizacion, IVA, RetIVA, RetISR, Total, CveMoneda, TipoCambio.ToDouble, + 0, 0, 0, FechaVencimiento, Fecha, "", "", Fecha, CveVendedor, Folio2, "", "", 0, 0, 0, "-1".ToDate, "-1".ToDate, "-1".ToDate, -1, 0, CvePrePoliza, + UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Serie:=Serie, CveSubProyecto:=Sucursal.ToEntero(), CveSubProyectoEjecucion:=Sucursal.ToEntero(), + CveSubProyectoCobranza:=Sucursal.ToEntero(), IEPS:=IEPS, ObservacionesAlmacen:=Transaccion, Entrega:=CodCliente, ImpuestoLocal:=ImpuestoLocal, + PedidoContrato:=PedidoContrato, CveMetodoPago33:=3) Then + ErrorVentas = True + Exit For + End If + CveVenta = ObjVentas.CveVenta + End If + + If Not EsDetalle Then + SubTotal = Row("SubTotal").ToString().ToDecimal + IVA = Row("IVA").ToString().ToDecimal + Total = Row("Total").ToString().ToDecimal + Saldo = Row("Saldo").ToString().ToDecimal + RetIVA = Row("Ret IVA").ToString().ToDecimal + RetISR = Row("Ret ISR").ToString().ToDecimal + IEPS = Row("IEPS").ToString().ToDecimal + End If + + If RblFormato.SelectedValue = "17" Then + + Dim TotalDetalles As Decimal = SubTotal + If PUDetalle > 0 Then + TotalDetalles = (CantidadDetalle * PUDetalle) + IVA - RetIVA - RetISR + IEPSDetalle + End If + + If Math.Abs(TotalDetalles - Total) > 0.01 Then + ErrorVentas = True + Alert($"Registro {CountRow} El total no councide con el calculo de los detalles, total: {Total.ToString("###,###,###.00")} calculo detatalles: {TotalDetalles.ToString("###,###,###.00")}", TipoMensaje.MsgAdvertencia) + Exit For + End If + + If Not ObjVentas.AddVentaDetalle(CveVenta, CvePS, CantidadDetalle, CveUnidadMedida, PUDetalle, IVADetalle, TotalDetalles, "Saldo Inicial", 0, 0, Sucursal.ToEntero(), 0, + PorcentajeIVA:=PorcentajeIVA, PorcentajeRetIVA:=PorcentajeRetIVA, ImporteRetIVA:=RetIVA, IEPS:=IEPSDetalle, PorcentajeRetISR:=PorcentajeRetISR, PorcentajeIEPS:=PorcentajeIEPS) Then + ErrorVentas = True + Exit For + End If + + Else + If Not ObjVentas.AddVentaDetalle(CveVenta, CvePS, 1, CveUnidadMedida, SubTotal, IVA, SubTotal * PorcentajeIVA, "Saldo Inicial", 0, 0, Sucursal.ToEntero(), 0, PorcentajeIVA:=PorcentajeIVA, PorcentajeRetIVA:=PorcentajeRetIVA, ImporteRetIVA:=RetIVA, IEPS:=0) Then + ErrorVentas = True + Exit For + End If + End If + + + + Dim ConceptoContable As Integer = 1 + Dim ConceptoContablePago As Integer = 2 + If TipoDocto = "Egs" Then + ConceptoContable = 12 + ConceptoContablePago = 91 + End If + + If FolioFiscal <> "" Then + If Not ObjVentas.UpdateVentaFolioFiscal(FolioFiscal, CveVenta, UsuarioActual.CveEmpresa) Then + ErrorVentas = True + Exit For + End If + End If + + Dim UsaComplementaria As Boolean = False + + If UsuarioActual.CveEmpresa.Contiene(119, 158) Then UsaComplementaria = True + + If Not EsDetalle Then + + SubTotal = 0 + IVA = 0 + Total = 0 + Saldo = 0 + RetIVA = 0 + RetISR = 0 + For Each item As DataRow In dt.FiltraParametros($"RFC <> '' AND Folio = '{Row("Folio").ToString()}' AND Serie = '{Row("Serie").ToString()}' AND [Tipo Documento] = '{Row("Tipo Documento").ToString()}' ").Rows + SubTotal += item("SubTotal").ToString().ToDecimal + IVA += item("IVA").ToString().ToDecimal + Total += item("Total").ToString().ToDecimal + Saldo += item("Saldo").ToString().ToDecimal + RetIVA += item("Ret IVA").ToString().ToDecimal + RetISR += item("Ret ISR").ToString().ToDecimal + IEPS += item("IEPS").ToString().ToDecimal + Next + + 'PrePólizaDetalle + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, SubTotal, SubTotal, 4, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, CveClasificacion:=CveClasificacion, CveSubProyecto:=Sucursal.ToEntero(), PorcentajeImpuesto:=PorcentajeIVA, Contabilizable:=False) Then ErrorVentas = True : Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Total, Total, ConceptoContable, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeIVA, Contabilizable:=False) Then ErrorVentas = True : Exit For + + If IVA > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, IVA, IVA, 13, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeIVA, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + + If IEPS > 0 Then + 'AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, IEPS, Folio, 38, String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, ImporteMX:=IEPS) + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, IEPS, IEPS, 38, Folio.ToString, String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, Contabilizable:=False) Then ErrorVentas = True : Exit For + + End If + + If RetIVA > 0 Then + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, RetISR, RetISR, 8, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeRetISR, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + + If RetISR > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, RetISR, RetISR, 9, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeRetISR, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + + If ImpuestoLocal > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImpuestoLocal, ImpuestoLocal, 27, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeIVA, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + + + If UsaComplementaria Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Total * TipoCambio.ToDecimal - Total, Total * TipoCambio.ToDecimal - Total, 203, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveVenta:=CveVenta, CveCliente:=CveCliente, ImporteME:=Total, TipoCambio:=TipoCambio.ToDecimal, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + + 'Saldo + If Saldo < Total Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Total - Saldo, Total - Saldo, ConceptoContablePago, Folio.ToString(), Folio.ToString(), CveVenta:=CveVenta, CveCliente:=CveCliente, CveVentaAmortizacion:=CveVenta, Contabilizable:=False) Then ErrorVentas = True : Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Total - Saldo, Total - Saldo, 95, Folio.ToString(), Folio.ToString(), CveVenta:=CveVenta, CveCliente:=CveCliente, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + End If + + Else + + If Not EsDetalle Then + + SubTotal = 0 + IVA = 0 + Total = 0 + Saldo = 0 + RetIVA = 0 + RetISR = 0 + For Each item As DataRow In dt.FiltraParametros($"RFC <> '' AND Folio = '{Row("Folio").ToString()}' AND Serie = '{Row("Serie").ToString()}' AND [Tipo Documento] = '{Row("Tipo Documento").ToString()}' ").Rows + SubTotal += item("SubTotal").ToString().ToDecimal + IVA += item("IVA").ToString().ToDecimal + Total += item("Total").ToString().ToDecimal + Saldo += item("Saldo").ToString().ToDecimal + RetIVA += item("Ret IVA").ToString().ToDecimal + RetISR += item("Ret ISR").ToString().ToDecimal + IEPS += item("IEPS").ToString().ToDecimal + Next + + 'ANTICIPOS + Dim CveIE As Integer = ObjIE.AddBancos_IE(1, 1, Fecha, Folio.ToString(), "", Total, 1, + 1, "Anticipo Cliente", "", False, False, -1, CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Total, Total, 30, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveIE:=CveIE, CveCliente:=CveCliente, Contabilizable:=False) Then ErrorVentas = True : Exit For + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Total, Total, 66, Folio.ToString(), String.Format("{0}-{1}", Serie, Folio), CveIE:=CveIE, CveCliente:=CveCliente, Contabilizable:=False) Then ErrorVentas = True : Exit For + End If + End If + Encontrados = Encontrados + 1 + + Else + NoEncontrados = NoEncontrados + 1 + StrRFCNoencontrados.AppendFormat("{0}
    ", RFC) + 'ErrorVentas = True + 'Exit For + End If + + CountRow = CountRow + 1 + Next + If Not ErrorVentas Then + Alert(String.Format("Se agregaron: {0} Ventas correctamente. {1} no encontrados
    {2} ", Encontrados, NoEncontrados, StrRFCNoencontrados), TipoMensaje.MsgInformacion) + ObjVentas.Commit() + TxtExcel.Text = "" + UpDatos.Update() + Else + Alert(String.Format("Error al registrar : {0} Ventas correctamente. {1} no encontrados
    {2} ", Encontrados, NoEncontrados, StrRFCNoencontrados), TipoMensaje.MsgError) + ObjVentas.RollBack() + End If + ObjVentas.Dispose() #End Region - - - ' R H - P E R S O N A L ElseIf RblFormato.SelectedValue = "6" Then From 8cb75e5633714cc548eef345e742f51a3264503f Mon Sep 17 00:00:00 2001 From: RPimienta Date: Sun, 22 Sep 2024 02:13:59 -0600 Subject: [PATCH 13/23] Al crear o editar un producto poder introducir el precio de lista de cada una --- Ventas/ProductosServicios.aspx | 50 ++++++++++++++++++++++- Ventas/ProductosServicios.aspx.vb | 66 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/Ventas/ProductosServicios.aspx b/Ventas/ProductosServicios.aspx index 39ccddd6f..b8664feb2 100644 --- a/Ventas/ProductosServicios.aspx +++ b/Ventas/ProductosServicios.aspx @@ -723,6 +723,42 @@ +
    +
    +
    +
    +
    + + Lista de Precios    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + Precio + + + + + + + +
    +
    +
    +
    +
    +
    @@ -2672,7 +2708,19 @@ } //TERMINA: ECOMMERCE - + function onlyNumberKey(evt) { + + // Only ASCII character in that range allowed + var ASCIICode = (evt.which) ? evt.which : evt.keyCode + if (ASCIICode > 31 && (ASCIICode < 48 || ASCIICode > 57)) { + if (ASCIICode == 46) { + return true + } else { + return false; + } + } + return true; + } diff --git a/Ventas/ProductosServicios.aspx.vb b/Ventas/ProductosServicios.aspx.vb index a1a86883c..bbbdfa257 100644 --- a/Ventas/ProductosServicios.aspx.vb +++ b/Ventas/ProductosServicios.aspx.vb @@ -141,6 +141,15 @@ Partial Class ProductosyServicios ViewState("Imagen") = value End Set End Property + + Private Property DtPreciosMultiple As DataTable + Get + Return If(IsNothing(ViewState("DtPreciosMultiple")), Nothing, CType(ViewState("DtPreciosMultiple"), DataTable)) + End Get + Set(value As DataTable) + ViewState("DtPreciosMultiple") = value + End Set + End Property #End Region Private ReadOnly Property PermiteClasificacion2 As Boolean @@ -273,6 +282,7 @@ Partial Class ProductosyServicios 'CargaFamilia(ViewState("CveSubFamilia").ToString.ToEntero) CargaSucursaless() CargaImpuestosLocales() + CargaListaPrecios() If UsuarioActual.TienePermisoProceso(122) Then BtnEliminar.Visible = False @@ -1714,6 +1724,10 @@ Partial Class ProductosyServicios Next End If + If Not TieneError Then + GuardarListasPrecios(ObjProductosServicios) + End If + If ObjProductosServicios.CvePS > 0 And Not TieneError Then TieneError = GuardaEcommerce() End If @@ -2967,6 +2981,58 @@ Partial Class ProductosyServicios #End Region +#Region "LISTA PRECIOS" + + Private Sub CargaListaPrecios() + + Dim objPS As New ClsProductosServicios + If objPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, -1, CveClasificacion:=-1, CvePS:=CvePS, + CveProveedor:=-1, Estado:=-1, Marcas:="-1", CveModelo:=-1) Then + DtPreciosMultiple = objPS.DtResultados.Copy() + GvMultiple.DataSource = DtPreciosMultiple + End If + objPS.Dispose() + + GvMultiple.DataBind() + End Sub + + Protected Sub GvMultiple_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.DataRow Then + + Dim Valor As Decimal = DtPreciosMultiple.Rows(e.Row.RowIndex)(2).ToString().ToDecimal() + + e.Row.FCTextBox("TxtPrecio").Text = Valor.FormatoNumero(2) + + End If + End Sub + + Private Sub GuardarListasPrecios(ObjPS As ClsProductosServicios) + Dim TieneError As Boolean = False + + Try + For Each GvRow As GridViewRow In GvMultiple.Rows + Dim CvePrecioLista As Integer = GvRow.DataKey("CvePrecioLista").ToEntero() + Dim Precio As Decimal = GvRow.FCTextBox("TxtPrecio").Text.ToDecimal() + + TieneError = Not ObjPS.UpdatePSPreciosLista(Precio, CvePrecioLista, 0, CvePS, UsuarioActual.CveUsuario, NowADS(), True) + + If TieneError Then + Exit For + End If + Next + Catch ex As Exception + OnError("Ocurrió un error al actualizar precios", ex) + TieneError = True + End Try + + If TieneError Then + Alert("Ocurrió un error al actualizar precios", TipoMensaje.MsgError) + End If + + End Sub + +#End Region + #Region "EXISTENCIAS" Protected Sub GVExistencias_RowDataBound(sender As Object, e As GridViewRowEventArgs) From 1ab7543b1e9892e4140dd6507447ae8c2025029d Mon Sep 17 00:00:00 2001 From: RPimienta Date: Sun, 22 Sep 2024 02:49:05 -0600 Subject: [PATCH 14/23] Al crear o editar un producto poder introducir el precio de lista de cada una pt.2 --- Ventas/ProductosServicios.aspx | 2 +- Ventas/ProductosServicios.aspx.vb | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Ventas/ProductosServicios.aspx b/Ventas/ProductosServicios.aspx index b8664feb2..dda8acbec 100644 --- a/Ventas/ProductosServicios.aspx +++ b/Ventas/ProductosServicios.aspx @@ -724,7 +724,7 @@
    -
    +
    diff --git a/Ventas/ProductosServicios.aspx.vb b/Ventas/ProductosServicios.aspx.vb index bbbdfa257..d9849191d 100644 --- a/Ventas/ProductosServicios.aspx.vb +++ b/Ventas/ProductosServicios.aspx.vb @@ -282,7 +282,9 @@ Partial Class ProductosyServicios 'CargaFamilia(ViewState("CveSubFamilia").ToString.ToEntero) CargaSucursaless() CargaImpuestosLocales() - CargaListaPrecios() + If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then + CargaListaPrecios() + End If If UsuarioActual.TienePermisoProceso(122) Then BtnEliminar.Visible = False @@ -1724,7 +1726,7 @@ Partial Class ProductosyServicios Next End If - If Not TieneError Then + If Not TieneError AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" Then GuardarListasPrecios(ObjProductosServicios) End If @@ -2992,7 +2994,7 @@ Partial Class ProductosyServicios GvMultiple.DataSource = DtPreciosMultiple End If objPS.Dispose() - + DivListaPrecios.Visible = True GvMultiple.DataBind() End Sub From 8a3e3d232f362c4b91fc993622cd1bef0025b070 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Mon, 23 Sep 2024 07:24:00 -0700 Subject: [PATCH 15/23] CalculoSBC --- App_Code/ClsRH.vb | 7 +- App_Code/ClsTransportes.vb | 19 +++ Imagenes/autobus.png | Bin 0 -> 17005 bytes Imagenes/sprinter.png | Bin 0 -> 25394 bytes Nomina/Nomina.aspx.cs | 1 - RH/CalculoSBC.aspx.cs | 7 +- RH/Personal.aspx.vb | 6 +- VIA/TripsChecks.aspx | 320 ++++++++++++++++++++++++++++++++++++- VIA/TripsChecks.aspx.cs | 265 +++++++++++++++++++++++++++++- 9 files changed, 609 insertions(+), 16 deletions(-) create mode 100644 Imagenes/autobus.png create mode 100644 Imagenes/sprinter.png diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb index 912ed24d9..bd72d8ceb 100644 --- a/App_Code/ClsRH.vb +++ b/App_Code/ClsRH.vb @@ -4,6 +4,7 @@ Option Explicit On Imports System.Data Imports System.Data.SqlClient Imports CrystalDecisions.[Shared].Json +Imports DocumentFormat.OpenXml.Presentation Imports Extensiones Imports Microsoft.Ajax.Utilities Imports Profact.TimbraCFDI40 @@ -2283,7 +2284,9 @@ Public Class ClsRH End Try Return Retorno End Function - Public Function UpdateSalarios(CvePersonal As Integer, Fecha As String, CveUsuario As Integer, CveEmpresa As Integer, SalarioDiario As Double, SDI As Double, SalarioDiarioSS As Double, SalarioDiarioPago As Double, Optional CalcularSDI As Boolean = False) As Boolean + Public Function UpdateSalarios(CvePersonal As Integer, Fecha As String, CveUsuario As Integer, CveEmpresa As Integer, SalarioDiario As Double, SDI As Double, + SalarioDiarioSS As Double, SalarioDiarioPago As Double, Optional CalcularSDI As Boolean = False, Optional ActualizaSalarioV As Boolean = False, + Optional OrigenU As String = "") As Boolean Dim Retorno As Boolean = False SqlDataAdapter("PA_RH_PersonalUpdateSalarios") With SqlAdapter.SelectCommand.Parameters @@ -2296,6 +2299,8 @@ Public Class ClsRH .Add("@SDI", SqlDbType.Money).Value = SDI .Add("@SalarioDiarioSS", SqlDbType.Money).Value = SalarioDiarioSS .Add("@CalcularSDI", SqlDbType.Bit).Value = CalcularSDI + .Add("@ActualizaSalarioV", SqlDbType.Bit).Value = ActualizaSalarioV + .Add("@OrigenU", SqlDbType.Bit).Value = OrigenU End With Try SqlAdapter.Fill(Data) diff --git a/App_Code/ClsTransportes.vb b/App_Code/ClsTransportes.vb index 07e43b962..e861b9e06 100644 --- a/App_Code/ClsTransportes.vb +++ b/App_Code/ClsTransportes.vb @@ -420,5 +420,24 @@ Public Class ClsTransportes Return Retorno End Function + + + Public Function VIA_FormularioTrip(cveTrip As Int32, cveUsuario As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_VIA_FormularioTrip", CommandType.StoredProcedure) + With SqlAdapter.SelectCommand.Parameters + .Add("@CveTrip", SqlDbType.Int).Value = cveTrip + .Add("@CveUsuario", SqlDbType.Int).Value = cveUsuario + .Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar el importe.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + Return retorno + End Function #End Region End Class diff --git a/Imagenes/autobus.png b/Imagenes/autobus.png new file mode 100644 index 0000000000000000000000000000000000000000..cc13d8aa63ca2d257d7ca06c61d7c12d594a6924 GIT binary patch literal 17005 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 - + - + + - + - + - + - + - + + + + + +
    +
    + + + +
    +
    +
    +
    +
    + Paso 1: Seleccione el Tipo de Unidad +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + +

    TRIP AUTOBUS

    + +
    +
    + + +

    TRIP SPRINTER

    +
    +
    +
    + +
    +
    + +
    + + +
    +
    +
    +
    +
    + Paso 2: CHECK PT +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + + +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + + + +
    + + +
    +
    +
    +
    + +
    +
    +
    + + + +
    + +
    +
    +
    + +
    + + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    + Paso 3: +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    - + + diff --git a/VIA/TripsChecks.aspx.cs b/VIA/TripsChecks.aspx.cs index a8e28c66e..57b77ff75 100644 --- a/VIA/TripsChecks.aspx.cs +++ b/VIA/TripsChecks.aspx.cs @@ -1,13 +1,274 @@ -using System; +using CrystalDecisions.Shared.Json; +using System; +using System.Activities.Expressions; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; +using Extensiones; -public partial class VYA_TripsChecks : System.Web.UI.Page +public partial class VYA_TripsChecks : ClsPaginas { + + #region "Propiedades" + + private int Paso + { + get + { + return ViewState["Paso"].ToEntero(); + } + + set + { + PnlPaso1.Visible = (value == 1); + PnlPaso2.Visible = (value == 2 || value == 3); + PnlPaso3.Visible = (value == 3 || value == 2); + ViewState["Paso"] = value; + } + } + private int _currentFormIndex + { + get + { + return ViewState["_currentFormIndex"].ToEntero(); + } + + set + { + ViewState["_currentFormIndex"] = value; + } + } + private DataTable _dtPreguntas + { + get + { + if (ViewState["_dtPreguntas"] != null) + return (DataTable)ViewState["_dtPreguntas"]; + else + return null; + } + + set + { + ViewState["_dtPreguntas"] = value; + } + } + #endregion protected void Page_Load(object sender, EventArgs e) + { + + if (!IsPostBack) + { + Paso = (Request["Paso"] != null && Request["Paso"].ToString().ToEntero() > 0) ? Request["Paso"].ToString().ToEntero() : 1; + _currentFormIndex = (Request["FormIndex"] != null && Request["FormIndex"].ToString().ToEntero() > 0) ? Request["FormIndex"].ToString().ToEntero() : 1; + CargaCombos(); + LoadData(); + BindForm(); + } + } + + public void CargaCombos() + { + + DataTable dttipoaf = get_GlobalDTTipoActivoFijo(UsuarioActual.CveEmpresa).FiltraParametros("MedidaVehicularClave IN (2,3)"); + DdlTipoUnidad.DataSource = dttipoaf; + DdlTipoUnidad.Items.Insert(0, new ListItem("Todos", "-1")); + DdlTipoUnidad.DataBind(); + + //CvePuesto =702 valor fijo V&A + DataTable dtchofer = get_GlobalDTRHPersonal(UsuarioActual.CveEmpresa).FiltraParametros("CvePuesto = 702 and CveEstatusPersonal = 1", "NombreCompleto"); + DdlChofer.DataSource = dtchofer; + DdlChofer.DataBind(); + DdlChofer.Items.Insert(0, new ListItem("-", "-1")); + } + public void cargaUnidades() + { + DataTable dt = get_GlobalDTActivoFijos(UsuarioActual.CveEmpresa).FiltraParametros(string.Format(" EstadoActivoFijo= 'Activo' ", DdlTipoUnidad.SelectedValue)); + DdlAF.DataSource = dt; + DdlAF.DataBind(); + DdlAF.Items.Insert(0, new ListItem("-", "-1")); + + } + #region "Paso 1" + protected void ImgBtnAutobus_Click(object sender, ImageClickEventArgs e) + { + DdlTipoUnidad.SelectedValue = "181"; + Paso = 2; + cargaUnidades(); + } + + protected void ImgBtnSprinter_Click(object sender, ImageClickEventArgs e) + { + DdlTipoUnidad.SelectedValue = "184"; + Paso = 2; + cargaUnidades(); + } + #endregion + + protected void DdlTipoUnidad_SelectedIndexChanged(object sender, EventArgs e) + { + cargaUnidades(); + + } + + + #region "Formulario" + private void LoadData() + { + _dtPreguntas = new DataTable(); + using(ClsTransportes nom =new ClsTransportes()) + { + if(nom.VIA_FormularioTrip(-1,UsuarioActual.CveUsuario,UsuarioActual.CveEmpresa)) + { + _dtPreguntas =nom.DtResultados; + } + } + //// Para la demostración, aquí va un código para llenar el DataTable con datos ficticios. + //_dtPreguntas.Columns.Add("CveFormulario", typeof(int)); + //_dtPreguntas.Columns.Add("Formulario", typeof(string)); + //_dtPreguntas.Columns.Add("CvePregunta", typeof(int)); + //_dtPreguntas.Columns.Add("Pregunta", typeof(string)); + //_dtPreguntas.Columns.Add("Valor", typeof(int)); + //_dtPreguntas.Columns.Add("OrdenPregunta", typeof(int)); + //_dtPreguntas.Columns.Add("OrdenFormulario", typeof(int)); + + //// Agregar datos de prueba + //_dtPreguntas.Rows.Add(1, "Formulario 1", 1, "Pregunta 1", null, 1, 1); + //_dtPreguntas.Rows.Add(1, "Formulario 1", 2, "Pregunta 2", null, 2, 1); + //_dtPreguntas.Rows.Add(2, "Formulario 2", 3, "Pregunta 3", null, 1, 2); + //_dtPreguntas.Rows.Add(2, "Formulario 2", 4, "Pregunta 4", null, 2, 2); + //_dtPreguntas.Rows.Add(2, "Formulario 2", 5, "Pregunta 5", null, 1, 3); + //_dtPreguntas.Rows.Add(2, "Formulario 2", 6, "Pregunta 6", null, 2, 3); + } + + private void BindForm() + { + var filteredRowsant = _dtPreguntas.FiltraParametros($"OrdenFormulario = {_currentFormIndex - 1}"); + var filteredRowsnext = _dtPreguntas.FiltraParametros($"OrdenFormulario = {_currentFormIndex + 1}"); + btnAnt.Visible = filteredRowsant.Rows.Count > 0; + btnNext.Visible = filteredRowsnext.Rows.Count > 0; + btnGuardar.Visible = !(filteredRowsnext.Rows.Count > 0); + var filteredRows = _dtPreguntas.Select($"OrdenFormulario = {_currentFormIndex}"); + var sortedRows = filteredRows.CopyToDataTable(); + if(sortedRows.Rows.Count > 0) + { + lblFormulario.Text = $"{sortedRows.Rows[0]["Formulario"]}:"; + lblFormularioobserv.Text = $"Observaciones {sortedRows.Rows[0]["Formulario"]}"; + + } + gvPreguntas.DataSource = sortedRows; + gvPreguntas.DataBind(); + UpDatos.Update(); + } + protected void gvPreguntas_RowDataBound(object sender, GridViewRowEventArgs e) + { + if (e.Row.RowType == DataControlRowType.DataRow) + { + string valor = e.Row.DataKey("Valor"); + + // Botón btnOk + Button btnOk = (Button)e.Row.FindControl("btnOk"); + if (btnOk != null) + { + btnOk.CssClass = valor == "1" ? "btn btn-primary" : "btn btn-default"; + } + + // Botón btnDetected + Button btnDetected = (Button)e.Row.FindControl("btnDetected"); + if (btnDetected != null) + { + btnDetected.CssClass = valor == "0" ? "btn btn-primary" : "btn btn-default"; + } + } + } + + private void UpdateValue(int cvePregunta, int newValue) + { + foreach (DataRow row in _dtPreguntas.Rows) + { + if (Convert.ToInt32(row["CvePregunta"]) == cvePregunta) + { + row["Valor"] = newValue; + break; + } + } + } + protected void btnOk_Click(object sender, EventArgs e) + { + Button btnOk = (Button)sender; + GridViewRow row = (GridViewRow)btnOk.NamingContainer; + int cvePregunta = row.DataKey("CvePregunta").ToEntero(); + + UpdateValue(cvePregunta, 1); + BindForm(); + } + + protected void btnDetected_Click(object sender, EventArgs e) + { + Button btnDetected = (Button)sender; + GridViewRow row = (GridViewRow)btnDetected.NamingContainer; + int cvePregunta = row.DataKey("CvePregunta").ToEntero(); + + UpdateValue(cvePregunta, 0); + BindForm(); + } + public bool ValidarGridView() + { + bool ok = true; + + foreach (GridViewRow row in gvPreguntas.Rows) + { + // Obtener el valor del DataKey correspondiente a la fila actual + string valor = row.DataKey("Valor"); + + // Verificar si el valor es diferente de '0' o '1' + if (valor != "0" && valor != "1") + { + ok = false; + + // Marcar lblPregunta como requerido si el valor es diferente + Label lblPregunta = (Label)row.FindControl("lblPregunta"); + if (lblPregunta != null) + { + lblPregunta.CssClass = "requerido"; // Añade tu clase CSS para marcar como requerido + } + } + } + + return ok; + } + + protected void btnNext_Click(object sender, EventArgs e) + { + if (ValidarGridView()) + { + // Incrementar el índice del formulario + _currentFormIndex++; + BindForm(); + } + } + protected void btnAnt_Click(object sender, EventArgs e) + { + _currentFormIndex--; + BindForm(); + } + + protected void BtnCancel_Click(object sender, EventArgs e) + { + Paso = 1; + } + #endregion + + + protected void btnGuardar_Click(object sender, EventArgs e) + { + + } + + protected void btnContinuar_Click(object sender, EventArgs e) { } From 1e339afbfcefbcbddde534b109413bdbbf990c03 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Sat, 21 Sep 2024 13:10:01 -0700 Subject: [PATCH 16/23] =?UTF-8?q?Candado=20para=20solo=20lectura=20de=20c?= =?UTF-8?q?=C3=B3digo=20de=20barras=20y=20n=C3=BAmero=20de=20serie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/RecepcionAlmacen.aspx.vb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 672cdf830..48cc6563d 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -1597,6 +1597,12 @@ Partial Class Inventarios_RecepcionAlmacen TotalGV += (e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal + + + If UsuarioActual.TienePermisoProceso(388) Then + e.Row.FCButton("BtnSerie").Visible = False + End If + End If If e.Row.RowType = DataControlRowType.Footer Then From b951dae88510e4d233bd7730ea90e1b1f281bd3c Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 23 Sep 2024 09:23:30 -0700 Subject: [PATCH 17/23] Cat Turno valida que la jornada no sea de mas de 13 horas --- RH/CatTurno.aspx.vb | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/RH/CatTurno.aspx.vb b/RH/CatTurno.aspx.vb index db8defe5d..3f80d2b61 100644 --- a/RH/CatTurno.aspx.vb +++ b/RH/CatTurno.aspx.vb @@ -41,14 +41,26 @@ Partial Class RH_CatTurno End Sub Private Sub BtnAgregarTurno_Click(sender As Object, e As EventArgs) Handles BtnAgregarTurno.Click + + Dim ComidaDe As String = If(TxtComidade.Text.Trim = "", "00:00:00", TxtComidade.Text.Trim) + Dim ComidaA As String = If(TxtComidaA.Text.Trim = "", "00:00:00", TxtComidaA.Text.Trim) + + + Dim horaInicios As String = If(TxtHorarioDe.Text.Trim = "", "00:00:00", TxtHorarioDe.Text.Trim) + Dim horaSalidaS As String = If(TxtHorarioA.Text.Trim = "", "00:00:00", TxtHorarioA.Text.Trim) + + Dim horaInicio As TimeSpan = TimeSpan.Parse(horaInicios) + Dim horaSalida As TimeSpan = TimeSpan.Parse(horaSalidaS) + + If Not validaHorasTurno(horaInicio, horaSalida) Then + Exit Sub + End If + Exit Sub + Using ObjRH As New ClsRH Dim Estatus As Boolean = False Dim comida As Integer = If(chkComida.Checked, 1, 0) - Dim ComidaDe As String = If(TxtComidade.Text.Trim = "", "00:00:00", TxtComidade.Text.Trim) - Dim ComidaA As String = If(TxtComidaA.Text.Trim = "", "00:00:00", TxtComidaA.Text.Trim) - - If ChkEstatus.Checked Then Estatus = True If HdnModalidad.Value = "A" Then If ObjRH.AddTurno(TxtTurno.Text, TxtHorarioDe.Text, TxtHorarioA.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlChecadorHorario.SelectedValue.ToEntero(), @@ -72,6 +84,25 @@ Partial Class RH_CatTurno End Sub + Private Function validaHorasTurno(horaInicio As TimeSpan, horaSalida As TimeSpan) As Boolean + + If horaInicio > horaSalida Then + horaSalida = horaSalida.Add(TimeSpan.FromDays(1)) + End If + + + Dim diferencia As TimeSpan = horaSalida - horaInicio + + If diferencia.TotalHours > 13 Then + Alert("Las horas de entrada y salida no son validas. El rango de horas supera las 13 horas.", TipoMensaje.MsgAdvertencia) + Return False + End If + + + Return True + + End Function + Public Sub Edit_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) From fbf740a3276672439c66e9250e25ffdfceb5a33b Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 23 Sep 2024 10:24:21 -0700 Subject: [PATCH 18/23] Proceso(388). cambio --- Inventarios/RecepcionAlmacen.aspx.vb | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 48cc6563d..460b7d0e3 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -446,8 +446,6 @@ Partial Class Inventarios_RecepcionAlmacen End Set End Property - - Private Property CveImportacionSeleccionada As Integer Get @@ -463,8 +461,6 @@ Partial Class Inventarios_RecepcionAlmacen End Set End Property - - Private Property CveFleteSeleccionado As Integer Get @@ -488,10 +484,8 @@ Partial Class Inventarios_RecepcionAlmacen If Not IsPostBack Then InicializaValores() - CargaUrlParametros() CargaPendientes() - CargaPermisos() Dim PermisoEspecialCambioFecha As Boolean = False @@ -501,10 +495,7 @@ Partial Class Inventarios_RecepcionAlmacen TxtFecha.Enabled = False ImgFecha.Visible = False - End If - - End If End Sub @@ -516,6 +507,10 @@ Partial Class Inventarios_RecepcionAlmacen Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) GvInv.Columns(8).Visible = TienePermisoImportes GvInv.Columns(10).Visible = TienePermisoImportes + 'permiso para bloquear la captura de la serie por este medio y que sea solo por lectura del ps y luego serie + If UsuarioActual.TienePermisoProceso(388) Then + BtnAgregarPS.Enabled = False + End If End Sub #End Region @@ -1592,17 +1587,9 @@ Partial Class Inventarios_RecepcionAlmacen e.Row.FCCheckBox("cbInv").Visible = False End If - e.Row.FCLabel("LbTotal").Text = ((e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal).FormatoNumero - TotalGV += (e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal - - - If UsuarioActual.TienePermisoProceso(388) Then - e.Row.FCButton("BtnSerie").Visible = False - End If - End If If e.Row.RowType = DataControlRowType.Footer Then @@ -1791,6 +1778,9 @@ Partial Class Inventarios_RecepcionAlmacen Else BtnAgregarPS.Enabled = True End If + If UsuarioActual.TienePermisoProceso(388) Then + BtnAgregarPS.Enabled = False + End If 'SI TIENE ENTRADA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD Dim Contador As Integer = 0 From 10e2ba68abcfa95336d4317a21482a34e2e6283e Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 23 Sep 2024 10:25:22 -0700 Subject: [PATCH 19/23] - --- Ventas/PVCobranza.aspx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Ventas/PVCobranza.aspx b/Ventas/PVCobranza.aspx index 06009d13d..bd66a876e 100644 --- a/Ventas/PVCobranza.aspx +++ b/Ventas/PVCobranza.aspx @@ -499,8 +499,8 @@
    - -
    + +
    From 51dcdf88d46b75be0999efa6c0e07f224d02f048 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 23 Sep 2024 10:27:03 -0700 Subject: [PATCH 20/23] renombre de objeto. --- Ventas/Ventas.aspx | 4 ++-- Ventas/Ventas.aspx.vb | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index cb2a7d753..340c0f9ae 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -8840,11 +8840,11 @@