From 5ac821b2f319fbbbfa319e88e1b9b0878c210162 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 18 Oct 2021 08:06:33 -0700 Subject: [PATCH 01/39] --nombre de columnas --- Inventarios/RepProductosPorCaducar.aspx | 24 +++++++--------------- Inventarios/RepProductosPorCaducar.aspx.cs | 11 +++++++++- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Inventarios/RepProductosPorCaducar.aspx b/Inventarios/RepProductosPorCaducar.aspx index c8931cf1a..02cc54362 100644 --- a/Inventarios/RepProductosPorCaducar.aspx +++ b/Inventarios/RepProductosPorCaducar.aspx @@ -126,10 +126,7 @@
-
- - - +
@@ -153,10 +150,7 @@
-
- - - +
@@ -180,20 +174,16 @@ - - + + - - - - + + - + - - diff --git a/Inventarios/RepProductosPorCaducar.aspx.cs b/Inventarios/RepProductosPorCaducar.aspx.cs index 8187791ce..e09b90d23 100644 --- a/Inventarios/RepProductosPorCaducar.aspx.cs +++ b/Inventarios/RepProductosPorCaducar.aspx.cs @@ -50,10 +50,19 @@ public partial class Inventarios_RepProductosPorCaducar : ClsPaginas // aqui siempre se visualiza la caducidad, sin importar la condición, porque siempre se valida la caducidad ClsInventarios ObjInventarios = new ClsInventarios(); if (ObjInventarios.GetProductosCaducidad(DdlProveedor.SelectedValue.ToEntero(), FI, TxtFechaFin.Text.ToDate(), DdlSucursal.SelectedValue.ToEntero(), - DdlClasificacion.SelectedValue.ToEntero(), CvePS, 1, Cves_Alamcenes, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Opcion:DdlOpcion.SelectedValue.ToEntero())) + DdlClasificacion.SelectedValue.ToEntero(), CvePS, Cves_Alamcenes, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Opcion: DdlOpcion.SelectedValue.ToEntero())) { GvDatos.DataSource = ObjInventarios.DtResultados; DTDatos = ObjInventarios.DtResultados; + if (DdlOpcion.SelectedValue == "1") + { + GvDatos.Columns[4].HeaderText = "F.Elaboración"; + } + else + { + GvDatos.Columns[4].HeaderText = "F.Caducidad"; + } + } ObjInventarios.Dispose(); GvDatos.DataBind(); From c49c629a219ab8ed6ecd4be67570f1672db106ef Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 21 Oct 2021 16:50:57 -0700 Subject: [PATCH 02/39] resgaurdo para servec --- RH/Personal.aspx.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 5b5a12588..7368f2b2e 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -1494,7 +1494,7 @@ Partial Class RH_Personal CargaUniformesPersonal() End If - If UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then + If UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 153, 154) Then LnkSurtir.Visible = True DdlUniforme.Visible = False @@ -5296,7 +5296,7 @@ Partial Class RH_Personal Private Sub CargaUniformesPersonal() - If Not UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then + If Not UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 153, 154) Then GvUniforme.Visible = True GvUniformesResguardo.Visible = False From 4c4592238cd5773f5f76770e68a53577dad45457 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 22 Oct 2021 07:50:21 -0700 Subject: [PATCH 03/39] pac 4. reondedo 6 decimales, en cantidad y pu --- App_Code/CFDITimbre.vb | 2 +- App_Code/Timbrado.vb | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/App_Code/CFDITimbre.vb b/App_Code/CFDITimbre.vb index 42ef21c81..61a215271 100644 --- a/App_Code/CFDITimbre.vb +++ b/App_Code/CFDITimbre.vb @@ -472,7 +472,7 @@ Public Class CFDIComplementoPagosDocsRelacionados Public Property Folio As String = "" Public Property MonedaDR As String = "" Public Property MetodoDePagoDR As String = "" - Public Property TipoCambioDR As Double + Public Property TipoCambioDR As Decimal Public Property NumParcialidad As Integer = 1 Public Property ImpSaldoAnt As Double Public Property ImpPagado As Double diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 3fafd9f2e..8ad810f78 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -1908,6 +1908,7 @@ Public Class Timbrado ' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E") 'cfdi.Decimales = 4 + cfdi.QuitarCerosDecimalDerecha = True ' no limita a 2 decimales, el atributo, de cantidad y precio unitario #Region "Certificado" cfdi.CertificadoArchivo(ArchivoCertificado) #End Region @@ -1962,7 +1963,7 @@ Public Class Timbrado If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.Descuento) + cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad.ToString("#.######"), concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario.ToString("#.######"), concep.Importe, concep.Descuento) For Each imp As CFDIConceptosImpuestos In concep.Impuestos If imp.TrasladooRetencion = "T" Then cfdi.ImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) @@ -2158,8 +2159,8 @@ Public Class Timbrado cfdi.CartaPorteMercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion) If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - cfdi.CartaPorteMercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, concep.Embalaje, concep.DescripEmbalaje, concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt) - Next + cfdi.CartaPorteMercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), concep.DescripEmbalaje, concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt) + Next End If End If @@ -2184,8 +2185,9 @@ Public Class Timbrado If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - cfdi.CartaPorteOperador(concep.RFCOperador, concep.NumLicencia, concep.NombreOperador, concep.NumRegidTribOperador, concep.ResidenciaFiscalOperador) - Next + cfdi.CartaPorteOperador(concep.RFCOperador, concep.NumLicencia, concep.NombreOperador, concep.NumRegidTribOperador, concep.ResidenciaFiscalOperador) + cfdi.CartaPorteOperadorDomicilio(concep.Domicilio.Calle, concep.Domicilio.NumeroExterior, concep.Domicilio.NumeroInterior, concep.Domicilio.Colonia, concep.Domicilio.Localidad, concep.Domicilio.Referencia, concep.Domicilio.Municipio, concep.Domicilio.Estado, concep.Domicilio.Pais, concep.Domicilio.CP) + Next End If End If @@ -3711,8 +3713,8 @@ Public Class Timbrado End If ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR - ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDRSpecified = If(doc.TipoCambioDR.ToDecimal = 0, False, True) - ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDR = doc.TipoCambioDR.ToDecimal + ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDRSpecified = If(doc.TipoCambioDR = 0, False, True) + ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDR = doc.TipoCambioDR ComPag.Pago(0).DoctoRelacionado(i).MetodoDePagoDR = doc.MetodoDePagoDR ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString @@ -3784,9 +3786,8 @@ Public Class Timbrado ''DATOS GENERALES Dim ComCartaPorte = New ProfactCartaPorte.CartaPorte() - Dim Transp As ProfactCartaPorte.CartaPorteTranspInternac - ComCartaPorte.TranspInternac = If(Carta.TranspInternac = "No", Transp.No, Transp.Sí) - ComCartaPorte.EntradaSalidaMercSpecified = False + ComCartaPorte.TranspInternac = CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteTranspInternac), Carta.TranspInternac), ProfactCartaPorte.CartaPorteTranspInternac) + ComCartaPorte.EntradaSalidaMercSpecified = False ComCartaPorte.ViaEntradaSalidaSpecified = False ComCartaPorte.TotalDistRecSpecified = False @@ -3875,11 +3876,13 @@ Public Class Timbrado If concep.ClaveMaterialPeligroso <> "" Then ComCartaPorte.Mercancias.Mercancia(i).MaterialPeligrosoSpecified = True ComCartaPorte.Mercancias.Mercancia(i).CveMaterialPeligrosoSpecified = True - End If - If concep.Embalaje <> "" Then + 'si lleva material pelgroso, debe llevar embalaje ComCartaPorte.Mercancias.Mercancia(i).EmbalajeSpecified = True ComCartaPorte.Mercancias.Mercancia(i).Embalaje = CType([Enum].Parse(GetType(ProfactCartaPorte.c_TipoEmbalaje), "Item" & concep.Embalaje), ProfactCartaPorte.c_TipoEmbalaje) + End If + + ComCartaPorte.Mercancias.Mercancia(i).DescripEmbalaje = concep.DescripEmbalaje ComCartaPorte.Mercancias.Mercancia(i).PesoEnKg = concep.PesoenKg ComCartaPorte.Mercancias.Mercancia(i).ValorMercanciaSpecified = False From 5cd46ad52f6fc0121a8dcff54f263bfd9532da1d Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 22 Oct 2021 07:50:36 -0700 Subject: [PATCH 04/39] mejoras en subproyectos --- Contabilidad2/CatCuentasAsignaciones.aspx | 5 +++-- Contabilidad2/CatCuentasAsignaciones.aspx.vb | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Contabilidad2/CatCuentasAsignaciones.aspx b/Contabilidad2/CatCuentasAsignaciones.aspx index 4d4a155cd..730aca935 100644 --- a/Contabilidad2/CatCuentasAsignaciones.aspx +++ b/Contabilidad2/CatCuentasAsignaciones.aspx @@ -69,13 +69,14 @@ - + + diff --git a/Contabilidad2/CatCuentasAsignaciones.aspx.vb b/Contabilidad2/CatCuentasAsignaciones.aspx.vb index 70d115657..a4bcacc73 100644 --- a/Contabilidad2/CatCuentasAsignaciones.aspx.vb +++ b/Contabilidad2/CatCuentasAsignaciones.aspx.vb @@ -80,6 +80,7 @@ Partial Class Contabilidad2_CatCuentasAsignaciones DdlActivoFijo.DataSource = GlobalDTActivoFijos(UsuarioActual.CveEmpresa) DdlSubProyectos.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) + DdlSubProyectos.Items.Insert(0, New ListItem("-", "0")) Dim ObjBancos As New ClsBancos If ObjBancos.GetBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa) Then @@ -129,6 +130,7 @@ Partial Class Contabilidad2_CatCuentasAsignaciones TxtIdCuentaContable.Text = GvRow.DataKey("IdCuenta") TxtPorcentajeIVA.Text = GvRow.DataKey("PorcentajeIVA") DdlCuentaBancaria.SelectedValueExist(GvRow.DataKey("CveBancoCuenta")) + DdlSubProyectos.SelectedValueExist(GvRow.DataKey("CveSubProyecto").ToEntero) Dim CveCliente As Integer = GvRow.DataKey("CveCliente").ToEntero Dim CvePersonal As Integer = GvRow.DataKey("CvePersonal").ToEntero From e6e25cbc44e31a882043dd353649b77ed02bb02b Mon Sep 17 00:00:00 2001 From: rakcsle Date: Sat, 23 Oct 2021 09:07:53 -0700 Subject: [PATCH 05/39] Cambio en enbio de firmas, ahora se mandan como base64 --- App_Code/ClsPaginas.vb | 31 +++++++++-- Ashx/SigFiles.ashx | 4 +- Empresas/11/Formatos/OC.rdlc | 81 ++++++++++++---------------- Empresas/12/Formatos/OC.rdlc | 5 +- Empresas/122/Formatos/OC.rdlc | 5 +- Empresas/145/Formatos/OC.rdlc | 5 +- Empresas/7/Formatos/OC.rdlc | 5 +- Empresas/Grales/Formatos/OC.rdlc | 91 ++++++++++++++++++++++++++++++-- 8 files changed, 163 insertions(+), 64 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 40ca553a3..668fa1c7d 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -7834,14 +7834,19 @@ Public Class ClsPaginas End If 'params.Add(New ReportParameter("FechaOC", ObjOC.Fecha.ToShortDateString)) Dim RutaFisicaSol As String = String.Format("Empresas\{0}\Firmas\{1}.png", EmpresaActual.CveEmpresa, CveUsuarioSol) - Dim RutaVirtuaSol As String = String.Format("{0}://{1}:{2}/ashx/sigfiles.ashx?P={0}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, Encripta(RutaFisicaSol)) + Dim RutaVirtuaSol As String = String.Format("{0}://{1}:{2}/ashx/sigfiles.ashx?P={3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, Encripta(RutaFisicaSol)) Dim FirmaSol As New System.IO.FileInfo(String.Format("{0}Firmas\{1}.png", EmpresaActual.Ruta, CveUsuarioSol)) - params.Add(New ReportParameter("FirmaSolicito", If(FirmaSol.Exists, RutaVirtuaSol, ""))) + 'params.Add(New ReportParameter("FirmaSolicito", If(FirmaSol.Exists, RutaVirtuaSol, ""))) + params.Add(New ReportParameter("FirmaSolicito", If(FirmaSol.Exists, ImageToBase64(Drawing.Image.FromFile(FirmaSol.FullName), Drawing.Imaging.ImageFormat.Png), ""))) Dim RutaFisicaAut As String = String.Format("Empresas\{0}\Firmas\{1}.png", EmpresaActual.CveEmpresa, CveUsuarioAut) Dim RutaVirtuaAut As String = String.Format("{0}://{1}:{2}/ashx/sigfiles.ashx?P={3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, Encripta(RutaFisicaAut)) Dim FirmaAut As New System.IO.FileInfo(String.Format("{0}Firmas\{1}.png", EmpresaActual.Ruta, CveUsuarioAut)) - params.Add(New ReportParameter("FirmaAutorizo", If(FirmaAut.Exists, RutaVirtuaAut, ""))) + 'params.Add(New ReportParameter("FirmaAutorizo", If(FirmaAut.Exists, RutaVirtuaAut, ""))) + params.Add(New ReportParameter("FirmaAutorizo", If(FirmaAut.Exists, ImageToBase64(Drawing.Image.FromFile(FirmaAut.FullName), Drawing.Imaging.ImageFormat.Png), ""))) + + + If Archivo.Exists Then bytes = StreamPDF(String.Format("{0}Formatos\OC.rdlc", EmpresaActual.Ruta), DtDetalle, params, $"OC_{ObjOC.Folio.ToString}", RDSName:="DsOC", MR:=MR) @@ -7910,6 +7915,26 @@ Public Class ClsPaginas Return bytes End Function + + + Public Function ImageToBase64(ByVal image As System.Drawing.Image, ByVal format As System.Drawing.Imaging.ImageFormat) As String + Dim base64String As String = "" + + + Try + Using ms As New System.IO.MemoryStream() + image.Save(ms, format) + Dim imageBytes As Byte() = ms.ToArray() + base64String = Convert.ToBase64String(imageBytes) + End Using + Catch ex As Exception + GuardaLog(String.Format("Ocurrio un error al generar convertir la imagen a Base64 {0}", ex.Message)) + End Try + + Return base64String + End Function + + Public Function NewGeneraOCCotizacion(tCveOrdenCompra As Integer, Optional MR As ReportViewer = Nothing, Optional ConBitacora As Boolean = False) As Byte() Dim bytes As Byte() = Nothing Dim CveEmpresaActual As Integer diff --git a/Ashx/SigFiles.ashx b/Ashx/SigFiles.ashx index bb4a91d48..3ab1e80ad 100644 --- a/Ashx/SigFiles.ashx +++ b/Ashx/SigFiles.ashx @@ -33,7 +33,9 @@ public class SigFiles : IHttpHandler { mimeType = MimeMapping.GetMimeMapping(path); } - catch (Exception) { }//si truena no existe el arhivo + catch (Exception ex) { + this.GuardaLog(ex.ToString()); + }//si truena no existe el arhivo context.Response.Clear(); context.Response.ClearHeaders(); context.Response.ClearContent(); diff --git a/Empresas/11/Formatos/OC.rdlc b/Empresas/11/Formatos/OC.rdlc index d97aac41e..8392cfa13 100644 --- a/Empresas/11/Formatos/OC.rdlc +++ b/Empresas/11/Formatos/OC.rdlc @@ -1264,7 +1264,7 @@ 7.79628in - 7.01282cm + 6.5434cm true true @@ -1577,8 +1577,9 @@ - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 5.61055cm 2.31533cm @@ -2186,51 +2187,6 @@ - - true - true - - - - - Fecha Impresión: - - - - - - - - =Today - - - - - - 2pt - 2pt - 2pt - 2pt - - - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 0.74655cm 5.63442cm diff --git a/Empresas/122/Formatos/OC.rdlc b/Empresas/122/Formatos/OC.rdlc index dc5b911b6..eb08206e9 100644 --- a/Empresas/122/Formatos/OC.rdlc +++ b/Empresas/122/Formatos/OC.rdlc @@ -1571,8 +1571,9 @@ - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 0.17639cm 5.66608cm diff --git a/Empresas/145/Formatos/OC.rdlc b/Empresas/145/Formatos/OC.rdlc index 3801160d9..afe4e0e67 100644 --- a/Empresas/145/Formatos/OC.rdlc +++ b/Empresas/145/Formatos/OC.rdlc @@ -1595,8 +1595,9 @@ - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 0.17639cm 5.67997cm diff --git a/Empresas/7/Formatos/OC.rdlc b/Empresas/7/Formatos/OC.rdlc index 1e01be553..d95180cc3 100644 --- a/Empresas/7/Formatos/OC.rdlc +++ b/Empresas/7/Formatos/OC.rdlc @@ -2091,8 +2091,9 @@ - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 0.82196cm 6.69573cm diff --git a/Empresas/Grales/Formatos/OC.rdlc b/Empresas/Grales/Formatos/OC.rdlc index 9c6b92304..a8afc485e 100644 --- a/Empresas/Grales/Formatos/OC.rdlc +++ b/Empresas/Grales/Formatos/OC.rdlc @@ -2552,8 +2552,9 @@ - External - =Parameters!FirmaAutorizo.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaAutorizo.Value) + image/png Fit 7.40422cm 12.49243cm @@ -2570,8 +2571,9 @@ - External - =Parameters!FirmaSolicito.Value + Database + =System.Convert.FromBase64String(Parameters!FirmaSolicito.Value) + image/png Fit 7.40422cm 4.23541cm @@ -3164,6 +3166,87 @@ ReportParameter1 + + + image/png + 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 + + + image/png + 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 +AAAAAElFTkSuQmCC + + Cm 0446ccd6-cd7b-4e18-9ae7-7589107a2103 \ No newline at end of file From 75a00d9f5e771a81fd6cb659a19481c3ea10376b Mon Sep 17 00:00:00 2001 From: rakcsle Date: Sat, 23 Oct 2021 11:52:50 -0700 Subject: [PATCH 06/39] Direciones de envio Combos SAT Direcciones --- App_Code/ClsClientes.vb | 28 ++++++-- Ventas/Clientes.aspx | 147 ++++++++++++++++++++++++++++++++++------ Ventas/Clientes.aspx.vb | 138 +++++++++++++++++++++++++++++++++++-- 3 files changed, 282 insertions(+), 31 deletions(-) diff --git a/App_Code/ClsClientes.vb b/App_Code/ClsClientes.vb index b7b8d93d5..60c2d2a48 100644 --- a/App_Code/ClsClientes.vb +++ b/App_Code/ClsClientes.vb @@ -1455,14 +1455,15 @@ Public Class ClsClientes OnError("Ocurrió un error eliminar la Clasificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End Try Return Retorno - End Function - + End Function + #End Region - - + + #Region "D I R E C C I O N D E E N V I O " Public Function DireccionEnvioAdd(CveCliente As Integer, EnvioDireccion As String, EnvioNoExt As String, EnvioNoInt As String, EnvioColonia As String, EnvioCiudad As String, EnvioEstado As String, - EnvioCP As Integer, EnvioContacto As String, CveUsuario As Integer, Estatus As Integer, Optional CveClienteSucursal As Integer = -1, Optional EnvioDepartamento As String = "-1", Optional EnvioTel As String = "-1") As Integer + EnvioCP As Integer, EnvioContacto As String, CveUsuario As Integer, Estatus As Integer, Optional CveClienteSucursal As Integer = -1, Optional EnvioDepartamento As String = "-1", Optional EnvioTel As String = "-1", + Optional CvePais As Integer = -1, Optional CveEstado As Integer = -1, Optional CveMunicipio As Integer = -1, Optional CveLocalidad As Integer = -1, Optional CveColonia As Integer = -1) As Integer Dim Retorno As Integer = -1 DataAdapter("PA_Vta_ClientesDireccionesEnvioAdd") @@ -1481,6 +1482,13 @@ Public Class ClsClientes .Add("@EnvioTel", SqlDbType.VarChar).Value = EnvioTel .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario .Add("@Estatus", SqlDbType.Int).Value = Estatus + + .Add("@CvePais", SqlDbType.Int).Value = CvePais + .Add("@CveEstado", SqlDbType.Int).Value = CveEstado + .Add("@CveMunicipio", SqlDbType.Int).Value = CveMunicipio + .Add("@CveLocalidad", SqlDbType.Int).Value = CveLocalidad + .Add("@CveColonia", SqlDbType.Int).Value = CveColonia + .Add("@CveDireccionEnvio", SqlDbType.Int).Direction = ParameterDirection.Output End With @@ -1514,7 +1522,8 @@ Public Class ClsClientes End Function Public Function DireccionEnvioUpdate(CveCliente As Integer, EnvioDireccion As String, EnvioNoExt As String, EnvioNoInt As String, EnvioColonia As String, EnvioCiudad As String, EnvioEstado As String, - EnvioCP As Integer, EnvioContacto As String, CveUsuario As Integer, Estatus As Integer, CveDireccionEnvio As Integer, Optional EnvioDepartamento As String = "-1", Optional CveClienteSucursal As Integer = -1, Optional EnvioTel As String = "-1") As Boolean + EnvioCP As Integer, EnvioContacto As String, CveUsuario As Integer, Estatus As Integer, CveDireccionEnvio As Integer, Optional EnvioDepartamento As String = "-1", Optional CveClienteSucursal As Integer = -1, Optional EnvioTel As String = "-1", + Optional CvePais As Integer = -1, Optional CveEstado As Integer = -1, Optional CveMunicipio As Integer = -1, Optional CveLocalidad As Integer = -1, Optional CveColonia As Integer = -1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Vta_ClientesDireccionesEnvioUpdate") @@ -1534,6 +1543,13 @@ Public Class ClsClientes .Add("@EnvioTel", SqlDbType.VarChar).Value = EnvioTel .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario .Add("@Estatus", SqlDbType.Int).Value = Estatus + + .Add("@CvePais", SqlDbType.Int).Value = CvePais + .Add("@CveEstado", SqlDbType.Int).Value = CveEstado + .Add("@CveMunicipio", SqlDbType.Int).Value = CveMunicipio + .Add("@CveLocalidad", SqlDbType.Int).Value = CveLocalidad + .Add("@CveColonia", SqlDbType.Int).Value = CveColonia + End With Try diff --git a/Ventas/Clientes.aspx b/Ventas/Clientes.aspx index d05fb3407..ff7da4542 100644 --- a/Ventas/Clientes.aspx +++ b/Ventas/Clientes.aspx @@ -791,7 +791,8 @@
- @@ -5038,26 +5039,121 @@
-
- - - + +
+
+ +
+ + + +
+ + +
+
+
+ + + +
+
+
-
- - - -
-
- - - -
-
- - - + + +
+
+
+ + + +
+ +
+
+ + +
+ + + +
+
+
+ + +
+
+
+ + + + + +
+
+ +
+
+ + + + + +
+
+
+ + +
+ + +
+
+ + + + + +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+ + + + + +
+ +
+
+ + + + + + + + +
<%----%> @@ -5078,6 +5174,13 @@
--%> + + + +
+ +
+ diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index a9cb7ff99..7c9afd83a 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -215,8 +215,14 @@ Partial Class Inventarios_TraspasoAlmacen If UsuarioActual.CveEmpresa.Contiene(1, 119, 140, 2) Then DivEmitirTimbrado.Visible = True - LblEmitirTimbrado.Visible = True - ChkEmitirTimbrado.Checked = True + + If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + LblEmitirTimbrado.Visible = True + ChkEmitirTimbrado.Checked = True + End If + + + ChkEmitirCartaPorte.Visible = True Dim HabilitarValidators As Boolean = UsuarioActual.CveEmpresa.Contiene(119) RfvDdlChofer.Enabled = HabilitarValidators @@ -702,6 +708,7 @@ Partial Class Inventarios_TraspasoAlmacen registro.Item("Noidentificacion") = DrPS("Codigo") registro.Item("CuentaPredial") = "" registro.Item("Obs") = "" + registro.Item("ImporteIVA") = 0 registro.Item("PorcentajeIVA") = 0 registro("ClaveMaterialPeligroso") = DrPS("ClaveMaterialPeligroso") @@ -747,6 +754,24 @@ Partial Class Inventarios_TraspasoAlmacen #Region " GUARDAR " Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click + + + If ChkEmitirTimbrado.Checked Then + + If DdlChofer.SelectedValue.ToEntero <= 0 Then + Alert("Debe de seleccionar un chofer") + Exit Sub + End If + + + If DdlUnidadCamion.SelectedValue.ToEntero <= 0 Then + Alert("Debe de seleccionar una unidad") + Exit Sub + End If + + + End If + 'VALIDA ALMACEN ORIGEN Y DESTINO If DdlAlmacenOrigen.SelectedValue = DdlAlmacenDestino.SelectedValue Then Alert("No se puede realizar un traspaso entre el mismo almacén.", TipoMensaje.MsgAdvertencia) @@ -1147,8 +1172,34 @@ Partial Class Inventarios_TraspasoAlmacen ' End If 'End If + Dim SerieInsertadaTimbre As String = "" + Dim FolioInsertadoTimbre As Integer = -1 + Dim CveTimbre As Integer = -1 + If Not ErrorMovInv Then + + If ChkEmitirTimbrado.Checked Then + Dim ObjGral As New ClsGenerales(ObjInventario.IniciaTransacSQL) + Dim CveSubProyectoTimbre As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {DdlAlmacenOrigen.SelectedValue}").Rows(0)("CveSubProyecto").ToString.ToEntero + + CveTimbre = ObjGral.AddGralTimbre("Tra", "-1", -1, "", MinFecha, -1, CveMovimientoSalida, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, -1, ChkEmitirCartaPorte.Checked, CveSubProyectoTimbre, -1, -1, DdlChofer.SelectedValue.ToEntero, DdlUnidadCamion.SelectedValue.ToEntero, TxtFechaEntrega.Text.ToDateTime) + + If CveTimbre > 0 Then + SerieInsertadaTimbre = ObjGral.SerieInsertada + FolioInsertadoTimbre = ObjGral.FolioInsertado + Else + ErrorMovInv = True + End If + + End If + + + End If + + + If Not ErrorMovInv Then DtTraslado = DtMovimientos.Copy + ObjInventario.Commit() MensajeAlert = New StringBuilder @@ -1165,7 +1216,10 @@ Partial Class Inventarios_TraspasoAlmacen End If - If ChkEmitirTimbrado.Checked AndAlso ChkTransitorio.Checked Then CveMovimientoTimbrado = CveMovimientoSalida : Timbrar() + If ChkEmitirTimbrado.Checked Then + CveMovimientoTimbrado = CveMovimientoSalida + Timbrar(CveTimbre, CveMovimientoTimbrado) + End If Alert(MensajeAlert.ToString, TipoMensaje.MsgInformacion, "") @@ -2667,12 +2721,19 @@ Partial Class Inventarios_TraspasoAlmacen ObjFactura.Inv_CveMovimiento = CveMovimientoTimbrado - If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + 'If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + ' ObjFactura.Timbre = PreParaTimbreCartaPorte(ObjFactura) + 'Else + ' ObjFactura.Timbre = PreParaTimbre(ObjFactura) + 'End If + + If ChkEmitirCartaPorte.Checked Then ObjFactura.Timbre = PreParaTimbreCartaPorte(ObjFactura) Else ObjFactura.Timbre = PreParaTimbre(ObjFactura) End If + End Sub Private Function PreParaTimbreCartaPorte(Obj As Modelos.Factura) As CFDITimbre Dim Timbre As New CFDITimbre @@ -3009,45 +3070,92 @@ Partial Class Inventarios_TraspasoAlmacen TmpDTComplementosTimbrado.Rows.Add(Row2) End Sub - Private Sub Timbrar() - CreaObjetosVenta() - Dim ObjTimbrado As New Timbrado - Dim FM As New Modelos.FemsaFactura - Dim TmpDT7Eleven As New DataTable - Dim TmpDTComplementosTimbrado As New DataTable - PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) + + Private Sub Timbrar(CveTimbre As Integer, CveMovimientoTimbrado As Integer) + + + + Dim ObjTimbres As New Timbres() + + If Not ObjTimbres.CargarDatosRequeridos(CveTimbre, UsuarioActual) Then + Alert($"{ObjTimbres.MsgError.ToString}", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + MensajeAlert.Append("

") + If ObjTimbres.Timbrar() Then + + Try + PdfFactura(ObjTimbres.ObjFactura) + Catch ex As Exception + + End Try + - 'If TimbrarFacturaGoCFDIv33(ObjFactura, UsuarioActual, 4) <> "" Then - ' MensajeAlert.AppendFormat("
  • -- no timbró-{0}
", MensajeErrorCFDI) - 'End If - If ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) Then MensajeAlert.Append("Emitido con exito.") 'XML - Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjTimbres.ObjFactura.TipoDocto, ObjTimbres.ObjFactura.SerieFolio) If File.Exists(ArchivoXML) Then - MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesXmlTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesXmlTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "XML", ObjTimbres.ObjFactura.SerieFolio, ObjTimbres.ObjFactura.TipoDocto))) End If 'PDF - GeneraPDFFactura() - Dim ArchivoPDF = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + Dim ArchivoPDF = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjTimbres.ObjFactura.TipoDocto, ObjTimbres.ObjFactura.SerieFolio) If File.Exists(ArchivoPDF) Then - MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesPdfTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "PDF", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesPdfTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "PDF", ObjTimbres.ObjFactura.SerieFolio, ObjTimbres.ObjFactura.TipoDocto))) End If If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then - MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPOTIMBRE&CVEMOV={0}", CveMovimientoTimbrado))) + MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPOTIMBRE&CVETIMBRE={0}", CveTimbre))) Else MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPO&CVEMOV={0}", CveMovimientoTimbrado))) End If Else - MensajeAlert.AppendFormat("
  • {0}
", ObjTimbrado.MensajeErrorCFDI) + MensajeAlert.AppendFormat("
  • {0}
", ObjTimbres.MsgError.ToString) End If End Sub + + 'Private Sub Timbrar() + + ' CreaObjetosVenta() + ' Dim ObjTimbrado As New Timbrado + ' Dim FM As New Modelos.FemsaFactura + ' Dim TmpDT7Eleven As New DataTable + ' Dim TmpDTComplementosTimbrado As New DataTable + ' PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) + ' MensajeAlert.Append("

") + + + ' If ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) Then + ' MensajeAlert.Append("Emitido con exito.") + ' 'XML + ' Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + ' If File.Exists(ArchivoXML) Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesXmlTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + ' End If + ' 'PDF + ' 'GeneraPDFFactura() + ' Dim ArchivoPDF = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + ' If File.Exists(ArchivoPDF) Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesPdfTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "PDF", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + ' End If + + ' If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPOTIMBRE&CVEMOV={0}", CveMovimientoTimbrado))) + ' Else + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPO&CVEMOV={0}", CveMovimientoTimbrado))) + ' End If + + ' Else + ' MensajeAlert.AppendFormat("
  • {0}
", ObjTimbrado.MensajeErrorCFDI) + ' End If + + 'End Sub + Private Sub GeneraPDFFactura() Try PdfFactura(ObjFactura) @@ -3365,4 +3473,714 @@ Partial Class Inventarios_TraspasoAlmacen End If End Sub + Protected Sub ChkEmitirTimbrado_CheckedChanged(sender As Object, e As EventArgs) + + If ChkEmitirTimbrado.Checked Then + ChkEmitirCartaPorte.Checked = False + ChkEmitirCartaPorte.Visible = True + Else + ChkEmitirCartaPorte.Visible = False + ChkEmitirCartaPorte.Checked = False + End If + + + + End Sub End Class + + + + +Partial Class Timbres + + + + Public Property TieneError As Boolean + Public Property MsgError As StringBuilder + Public Property MensajeAlert As StringBuilder + + Private Property CvePaqueteriaGuia As Integer + Private Property CveMovimiento As Integer + Private Property UsuarioActual As Usuario + Private Property AplicaCP As Boolean + Private Property FechaEntrega As Date + Private Property CveSubProyectoOrigen As Integer + + Public Property SubProyectoMatriz As Modelos.SubProyectoModel + Public Property SubProyecto As Modelos.SubProyectoModel + + Private Property Serie As String + Private Property Folio As Integer + Private Property CveTimbre As Integer + + Private Property GlobalDTMonedas As DataTable + Private Property GlobalDTAlmacen As DataTable + Private Property DTCamiones As DataTable + 'Private Property GlobalDTPS As DataTable + Private Property DtMovimientos As DataTable + 'Private Property GlobalDTUnidadesMedida As DataTable + Private Property GlobalDTSubProyectos As DataTable + + Private Property CveAlmacenOrigen As Integer + Private Property CveAlmacenDestico As Integer + + + + + Private Property TipoPermisoSCT As String + Private Property NumPermisoSCT As String + Private Property NombreAseguradora As String + Private Property NumPolizaSeguro As String + Private Property ConfigCartaPorte As String + Private Property Placa As String + Private Property Anio As Integer + + + Private Property CPCliente As Integer + + Private Property DirOriCP As Integer + Private Property DirOriCalle As String + Private Property DirOriClaveSATPais As String + Private Property DirOriClaveSATEstado As String + Private Property DirOriClaveSATMunicipio As String + Private Property DirOriClaveSATLocalidad As String + Private Property DirOriClaveSATColonia As String + + Private Property DirDesCP As Integer + Private Property DirDesCalle As String + Private Property DirDesClaveSATPais As String + Private Property DirDesClaveSATEstado As String + Private Property DirDesClaveSATMunicipio As String + Private Property DirDesClaveSATLocalidad As String + Private Property DirDesClaveSATColonia As String + + + Private Property ChrDomicilio As String + Private Property ChrCP As String + Private Property ChrNumeroExterior As String + Private Property ChrNumeroInterior As String + Private Property ChrClaveSATColonia As String + Private Property ChrClaveSATMunicipio As String + Private Property ChrClaveSATEstado As String + Private Property ChrChofer As String + Private Property ChrLicencia As String + Private Property ChrNumRegidTribOperador As String + Private Property ChrResidenciaFiscalOperador As String + Private Property ChrRFC As String + + + + + + Public Property ObjFactura As Modelos.Factura + + + 'Public Sub New(CveMovimiento As Integer, CvePaqueteriaGuia As Integer, CveTimbre As Integer, UsuarioActual As Usuario, + ' GlobalDTMonedas As DataTable, GlobalDTAlmacen As DataTable, GlobalDTPS As DataTable, GlobalDTUnidadesMedida As DataTable, GlobalDTSubProyectos As DataTable) + Public Sub New() + End Sub + + + + Private Sub CreaObjetosVenta() + ObjFactura = New Modelos.Factura + ObjFactura.Version = "3.3" + ObjFactura.CveUsuario = UsuarioActual.CveUsuario + ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa + 'ObjFactura.TipoCambio = 1 + ObjFactura.ConvertirPesos = False + ObjFactura.CveMoneda = 1 + ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ") + ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", "CveMoneda = 1") '"XXX" + ObjFactura.MonedaAbreviatura = GlobalDTMonedas.FiltroPrimeroValor("Abreviatura", $"CveMoneda = {ObjFactura.CveMoneda} ") + ObjFactura.TipoDocto = "Tra" + ObjFactura.RefDocto = "" + + ObjFactura.Folio = Folio + ObjFactura.Serie = Serie + + ObjFactura.CveMesa = -1 + ObjFactura.Fecha = Now + ObjFactura.CvePrePoliza = -1 + ObjFactura.FechaPago = Now + ObjFactura.MotivoDescuento = "" + ObjFactura.Observaciones = "" + ObjFactura.FechaEjecucion = Now + ObjFactura.UsuarioCreo = UsuarioActual.Usuario + ObjFactura.CveCondicionEntrega = -1 + ObjFactura.CondicionEntrega = "" + ObjFactura.NumeroCuenta = "" + ObjFactura.CondicionesPago = 0 + ObjFactura.FormaPago = 0 + ObjFactura.PedidoContrato = "" + ObjFactura.OrdenCompra = "" + ObjFactura.NumeroContrato = "" + ObjFactura.NumeroDescripcionContrato = "" + ObjFactura.DescripcionContrato = "" + ObjFactura.CveCorte = -1 + ObjFactura.TipoDocumento = "Traspaso" + ObjFactura.Alfa1 = "" + ObjFactura.Alfa2 = "" + ObjFactura.Alfa3 = "" + ObjFactura.Descuento = 0 + ObjFactura.Amortizacion = 0 + ObjFactura.CveContrato = 0 + ObjFactura.CveVendedor = 0 + ObjFactura.FechaVencimiento = Now + ObjFactura.TipoEstatus = 0 + ObjFactura.Det_OrdenCompra = "" + ObjFactura.Inv_CveEstatusEntrega = 0 + ObjFactura.FormaPago33 = "" + ObjFactura.MetodoPago33 = "" + ObjFactura.UsoCFDI = "" + ObjFactura.CveClienteSucursal = 0 + + + + + ObjFactura.CveSubProyecto = CveSubProyectoOrigen + ObjFactura.CveSubProyectoCobranza = CveSubProyectoOrigen + ObjFactura.CveSubProyectoEjecucion = CveSubProyectoOrigen + + ObjFactura.SubTotal = 0 + ObjFactura.Descuento = 0 + ObjFactura.Amortizacion = 0 + ObjFactura.IVA = 0 + ObjFactura.RetIVA = 0 + ObjFactura.RetISR = 0 + ObjFactura.IEPS = 0 + ObjFactura.Total = 0 + + ObjFactura.RFCReceptor = "XAXX010101000" ' RFC empresa traslado , si es entrega RFC Cliente + + 'DETALLES + ObjFactura.DtDetalle = DtMovimientos + + + ObjFactura.SubProyectoMatriz = SubProyectoMatriz + ObjFactura.SubProyecto = SubProyecto + + ObjFactura.Inv_CveMovimiento = CveMovimiento + + If AplicaCP Then + ObjFactura.Timbre = PreParaTimbreCartaPorte(ObjFactura) + Else + ObjFactura.Timbre = PreParaTimbre(ObjFactura) + End If + + + End Sub + + Private Function PreParaTimbreCartaPorte(Obj As Modelos.Factura) As CFDITimbre + Dim Timbre As New CFDITimbre + Timbre.Comprobante.TipoComprobante = "T" + Timbre.Comprobante.Folio = Obj.Folio.ToString + Timbre.Comprobante.Serie = Obj.Serie + Timbre.Comprobante.Fecha = Obj.Fecha + Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33 + Timbre.Comprobante.CondicionesdePago = "" + Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT + Timbre.Comprobante.Subtotal = Obj.SubTotal + Timbre.Comprobante.Descuentos = Obj.Descuento + Timbre.Comprobante.Moneda = "XXX" + Timbre.Comprobante.TipoCambio = "" ' CONDICIÓN SI LA MONEDA ES 'XXX' + + 'Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP + Timbre.Comprobante.Confirmacion = "" + + Timbre.Receptor.RFC = UsuarioActual.Empresa.RFC + Timbre.Receptor.Nombre = UsuarioActual.Empresa.Empresa + Timbre.Receptor.UsoCFDI = "P01" + + + Dim totSubTotal As Decimal = Obj.SubTotal + Dim totIVA As Decimal = Obj.IVA + Dim totRetIVA As Decimal = Obj.RetIVA + Dim totRetISR As Decimal = Obj.RetISR + Dim i As Integer = 1 + + + If CveMovimiento > 0 Then + Timbre.Comprobante.LugarExpedicion = UsuarioActual.Empresa.CP.ToString + Else + Timbre.Comprobante.LugarExpedicion = CPCliente.ToString + End If + + + 'DETALLES + Dim tPS As String = "" + + Dim CartaPorte As New CFDICartaPorte + CartaPorte.TranspInternac = "No" + CartaPorte.EntradaSalidaMercancia = "" + CartaPorte.ViaEntradaSalida = "" + + CartaPorte.Mercancias.PesoBrutoTotal = 0 + CartaPorte.Mercancias.UnidadPeso = "" + CartaPorte.Mercancias.CargoporTasacion = 0 + + CartaPorte.FiguraTransporte.AutoTransporteFederal.PermSCT = TipoPermisoSCT '"TPAF01" + CartaPorte.FiguraTransporte.AutoTransporteFederal.NumPermisoSCT = NumPermisoSCT + CartaPorte.FiguraTransporte.AutoTransporteFederal.NombreAseg = NombreAseguradora + CartaPorte.FiguraTransporte.AutoTransporteFederal.NumPolizaSeguro = NumPolizaSeguro + CartaPorte.FiguraTransporte.AutoTransporteFederal.Vehiculo.ConfigVehicular = ConfigCartaPorte '"C2" + CartaPorte.FiguraTransporte.AutoTransporteFederal.Vehiculo.PlacaVM = Placa + CartaPorte.FiguraTransporte.AutoTransporteFederal.Vehiculo.AnioModeloVM = Anio + + Dim DomOrigen As CFDICartaPorteDomicilio = Nothing + DomOrigen = New CFDICartaPorteDomicilio With {.Calle = DirOriCalle, + .Colonia = DirOriClaveSATColonia, + .CP = DirOriCP.ToString, + .Estado = DirOriClaveSATEstado, + .Pais = DirOriClaveSATPais, + .Municipio = DirOriClaveSATMunicipio, + .Localidad = DirOriClaveSATLocalidad} + + Dim DomDestino As CFDICartaPorteDomicilio = Nothing + + + DomDestino = New CFDICartaPorteDomicilio With {.Calle = DirDesCalle, + .Colonia = DirDesClaveSATColonia, + .CP = DirDesCP.ToString, + .Estado = DirDesClaveSATEstado, + .Pais = DirDesClaveSATPais, + .Municipio = DirDesClaveSATMunicipio, + .Localidad = DirDesClaveSATLocalidad} + + + Dim Ubica As New CFDICartaPorteUbicaciones + Ubica.TipoEstacion = "" + Ubica.DistanciaRecorridaDestino = 1 + Ubica.Origen = New CFDICartaPorteUbicacionOrigen With {.RFCRemitente = "",'UsuarioActual.Empresa.RFC, + .FechaHoraSalida = Now.ToString("yyyy-MM-ddTHH:mm:ss"),' "2021-08-23T11:13:01", + .NombreRemitente = UsuarioActual.Empresa.Empresa, + .Domicilio = DomOrigen} + Ubica.Destino = New CFDICartaPorteUbicacionDestino With {.RFCDestinatario = "",'UsuarioActual.Empresa.RFC,'"CAMJ841219I33", + .FechaHoraProgLlegada = FechaEntrega.ToString("yyyy-MM-ddT23:59:59"), + .NombreDestinatario = UsuarioActual.Empresa.Empresa, + .Domicilio = DomDestino} + + CartaPorte.Ubicaciones.Add(Ubica) + + CartaPorte.FiguraTransporte.ClaveTransporte = "01" + + Dim ObjAcar As New ClsAcarreos() + + ' If ObjAcar.GetChofer(DdlChofer.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, 1, -1) Then + 'Dim dro As DataRow = ObjAcar.DtResultados.Rows(0) + 'If dro IsNot Nothing Then + Dim DomicilioOperador As New CFDICartaPorteDomicilio With {.Calle = ChrDomicilio, + .NumeroExterior = ChrNumeroExterior, + .NumeroInterior = ChrNumeroInterior, + .Colonia = ChrClaveSATColonia, + .Municipio = ChrClaveSATMunicipio, + .Estado = ChrClaveSATEstado, + .CP = ChrCP} + + CartaPorte.FiguraTransporte.Operadores.Add(New CFDICartaPorteOperador With { + .RFCOperador = ChrRFC, + .NombreOperador = ChrChofer, + .NumLicencia = ChrLicencia, + .NumRegidTribOperador = ChrNumRegidTribOperador, + .ResidenciaFiscalOperador = ChrResidenciaFiscalOperador, + .Domicilio = DomicilioOperador}) + + 'End If + ' End If + ObjAcar.Dispose() + + + 'concepto único + + Dim concepto As New CFDIConceptos With {.Cantidad = 1, + .Descripcion = "Flete", + .ValorUnitario = 0, + .Importe = 0, + .Descuento = 0, + .Unidad = "Servicio", + .ClaveUnidad = "E48", + .ClaveProdServ = "78101802", + .Noidentificacion = "", + .CuentaPredial = ""} + + Timbre.Conceptos.Add(concepto) + + For Each drr As DataRow In Obj.DtDetalle.Rows + + If drr("PS").ToString.Length = 1 Then + tPS = drr("Obs").ToString + Else + If drr("PS").ToString.Length = 0 Then + tPS = "" + Else + tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) + End If + End If + Dim conceptoCarta As New CFDICartaPorteMercancia With { + .BienesTransp = drr("SATClaveProdServ").ToString, + .ClaveSTCC = "", 'para metodo ferroviario + .Cantidad = drr("Cantidad").ToString.ToDecimal, + .Descripción = tPS, + .ClaveUnidad = drr("SATClaveUM").ToString, + .Unidad = drr("UM").ToString, + .Dimensiones = "", + .MaterialPeligroso = If(drr("ClaveMaterialPeligroso").ToString <> "", "Sí", "No"), + .ClaveMaterialPeligroso = drr("ClaveMaterialPeligroso").ToString, + .Embalaje = drr("ClaveEmbalaje").ToString, + .DescripEmbalaje = drr("Embalaje").ToString, + .PesoenKg = drr("PesoKg").ToString.ToDecimal, + .ValorMercancia = drr("PU").ToString.ToDecimal, + .Moneda = "MXN", 'temporal + .FraccionArrancelaria = "", + .UUIDComercioExt = "" + } + + + totSubTotal = totSubTotal - concepto.Importe + CartaPorte.Mercancias.Mercancias.Add(conceptoCarta) + + i += 1 + Next + Timbre.Complementos.CartaPorte = CartaPorte + + Return Timbre + End Function + + Private Function PreParaTimbre(Obj As Modelos.Factura) As CFDITimbre + Dim Timbre As New CFDITimbre + Timbre.Comprobante.TipoComprobante = "T" + Timbre.Comprobante.Folio = Obj.Folio.ToString + Timbre.Comprobante.Serie = Obj.Serie + Timbre.Comprobante.Fecha = Obj.Fecha + Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33 + Timbre.Comprobante.CondicionesdePago = "" + Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT + Timbre.Comprobante.Subtotal = Obj.SubTotal + Timbre.Comprobante.Descuentos = Obj.Descuento + Timbre.Comprobante.Moneda = Obj.MonedaSAT + Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString) + Timbre.Comprobante.Total = Obj.Total + + If CveMovimiento > 0 Then + Timbre.Comprobante.LugarExpedicion = UsuarioActual.Empresa.CP.ToString + Else + Timbre.Comprobante.LugarExpedicion = CPCliente.ToString + End If + + Timbre.Comprobante.Confirmacion = "" + + Timbre.Receptor.RFC = "XAXX010101000" + Timbre.Receptor.Nombre = UsuarioActual.Empresa.Empresa + Timbre.Receptor.UsoCFDI = "P01" + + Dim totSubTotal As Decimal = Obj.SubTotal + Dim totIVA As Decimal = Obj.IVA + Dim totRetIVA As Decimal = Obj.RetIVA + Dim totRetISR As Decimal = Obj.RetISR + Dim i As Integer = 1 + + 'DETALLES + Dim tPS As String = "" + + For Each drr As DataRow In Obj.DtDetalle.Rows + 'If drr("PS").ToString.Length = 1 Then + ' tPS = drr("Obs").ToString + 'Else + ' If drr("PS").ToString.Length = 0 Then + ' tPS = "" + ' Else + ' tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) + ' End If + 'End If + + If drr("PS").ToString.Length = 1 Then + tPS = drr("Obs").ToString + Else + If drr("PS").ToString.Length = 0 Then + tPS = "" + Else + tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) + End If + End If + + + 'Observaciones + + 'CONDICIONANTE, ESPECIAL + If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" 'LES COMENTAN QUE NO DEBE IR LA ETIQUETA DE LA UNIDAD EN EL PRODUCTO + + Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString.ToDecimal, + .Descripcion = tPS, + .ValorUnitario = drr("PU").ToString.ToDecimal, + .Importe = drr("TotalImporte").ToString.ToDecimal, + .Descuento = drr("Descuento").ToString.ToDecimal, + .Unidad = drr("UM").ToString, + .ClaveUnidad = drr("SATClaveUM").ToString, + .ClaveProdServ = drr("SATClaveProdServ").ToString, + .Noidentificacion = drr("Noidentificacion").ToString, + .CuentaPredial = drr("CuentaPredial").ToString} + 'VERIFICA SUMA SUBTOTALES + If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'PROCESO DE AJUSTA DE DECIMALES + concepto.Importe = totSubTotal + End If + totSubTotal = totSubTotal - concepto.Importe + + 'SIEMPRE ESTAMOS AGREGANDO EL IVA + 'concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal}) + + Timbre.Conceptos.Add(concepto) + i += 1 + Next + Return Timbre + End Function + Private Sub PrepararTimbrado(ByRef FM As Modelos.FemsaFactura, ByRef TmpDT7Eleven As DataTable, ByRef TmpDTComplementosTimbrado As DataTable) + FM.AplicaFEMSA = False + FM.FEMSA_NumSociedad = "" + FM.FEMSA_NumProveedor = "" + FM.FEMSA_Mail = "" + FM.FEMSA_Version = 0 + FM.FEMSA_NumPedido = 0 + FM.FEMSA_NumEntrada = "" + FM.FEMSA_NumRemision = "" + FM.FEMSA_NumSocio = "" + FM.FEMSA_CentroCosto = "" + FM.FEMSA_IPeriodoLiquidacion = "" + FM.FEMSA_FPeriodoLiquidacion = "" + FM.FEMSA_CodRetencion1 = "" + FM.FEMSA_CodRetencion2 = "" + + TmpDT7Eleven.Columns.Add("sevenElevenNumProveedor") + TmpDT7Eleven.Columns.Add("sevenElevenFolio") + TmpDT7Eleven.Columns.Add("sevenElevenTienda") + TmpDT7Eleven.Columns.Add("sevenElevenFecha") + + Dim Row As DataRow = TmpDT7Eleven.NewRow + Row("sevenElevenNumProveedor") = "" + Row("sevenElevenFolio") = "" + Row("sevenElevenTienda") = "" + Row("sevenElevenFecha") = "" + + TmpDT7Eleven.Rows.Add(Row) + + TmpDTComplementosTimbrado.Columns.Add("CveComplemento") + TmpDTComplementosTimbrado.Columns.Add("IdContabilidad") + TmpDTComplementosTimbrado.Columns.Add("TipoProceso") + TmpDTComplementosTimbrado.Columns.Add("TipoAmbito") + TmpDTComplementosTimbrado.Columns.Add("Entidad") + + Dim Row2 As DataRow = TmpDTComplementosTimbrado.NewRow + + Row2("CveComplemento") = "" + Row2("IdContabilidad") = "" + Row2("TipoProceso") = "" + Row2("TipoAmbito") = "" + Row2("Entidad") = "" + + TmpDTComplementosTimbrado.Rows.Add(Row2) + End Sub + + Public Function Timbrar() As Boolean + + Dim Respuesta As Boolean = False + + CreaObjetosVenta() + Dim ObjTimbrado As New Timbrado + Dim FM As New Modelos.FemsaFactura + Dim TmpDT7Eleven As New DataTable + Dim TmpDTComplementosTimbrado As New DataTable + PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) + 'MensajeAlert.Append("

") + + + If ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) Then + Respuesta = True + + Dim objGrales As New ClsGenerales + If Not objGrales.UpdateGralTimbre(CveTimbre, "-1", "-1", -1, ObjTimbrado.UUID, Now, CvePaqueteriaGuia, CveMovimiento, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 1, UsuarioActual.Empresa.CvePAC, -1, New Date(1900, 1, 1), AplicaCP, -1, -1, -1, -1, -1) Then + GuardaLogAD($"Error no se actualizo registro de timbre {CveTimbre} ") + End If + objGrales.Dispose() + + Else + Respuesta = False + ' MensajeAlert.AppendFormat("
  • {0}
", ObjTimbrado.MensajeErrorCFDI) + MsgError.AppendLine(ObjTimbrado.MensajeErrorCFDI) + End If + + Return Respuesta + + End Function + + + + + + Public Function CargarDatosRequeridos(CveTimbre As Integer, UsuarioActual As Usuario) As Boolean + + + + Me.CveTimbre = CveTimbre + Me.UsuarioActual = UsuarioActual + + + TieneError = False + MsgError = New StringBuilder + MensajeAlert = New StringBuilder + + + Using ObjMonedas As New ClsMonedas() + If ObjMonedas.GetMonedas() Then + Me.GlobalDTMonedas = ObjMonedas.DtResultados + Else + Me.GlobalDTMonedas = Nothing + TieneError = True + MsgError.AppendLine("Se presento error al cargar las monedas") + End If + End Using + + Using ObjAlmacenes As New ClsInventarios() + If ObjAlmacenes.GetAlmacenes(-1, -1, UsuarioActual.CveEmpresa, -1) Then + Me.GlobalDTAlmacen = ObjAlmacenes.DtResultados + Else + Me.GlobalDTAlmacen = Nothing + TieneError = True + MsgError.AppendLine("Se presento error al cargar los almacenes") + End If + End Using + + + Using ObjSubPro As New ClsSubProyectos() + If ObjSubPro.GetSubProyectos(CveEmpresa:=UsuarioActual.CveEmpresa) Then + GlobalDTSubProyectos = ObjSubPro.DtResultados + Else + GlobalDTSubProyectos = Nothing + TieneError = True + MsgError.AppendLine("Se presento error al cargar los subproyectos") + End If + End Using + + + + Dim FI As Date = New Date(1900, 1, 1) + Dim FF As Date = New Date(9999, 1, 1) + + Dim ObjGrales As New ClsGenerales + + If CveTimbre > 0 Then + + If ObjGrales.GetGralTimbre(CveTimbre, "-1", "-1", -1, FI, FF, 0, UsuarioActual.CveEmpresa, -1, -1) Then + + + If ObjGrales.DtResultados.Rows.Count = 1 Then + + + CveMovimiento = ObjGrales.DtResultados.Rows(0)("CveMovimientoAlmacen").ToString.ToEntero + CvePaqueteriaGuia = ObjGrales.DtResultados.Rows(0)("Folio").ToString.ToEntero + + FechaEntrega = ObjGrales.DtResultados.Rows(0)("FechaEntrega").ToString.ToDate + + Serie = ObjGrales.DtResultados.Rows(0)("Serie").ToString + Folio = ObjGrales.DtResultados.Rows(0)("Folio").ToString.ToEntero + + AplicaCP = Boolean.Parse(ObjGrales.DtResultados.Rows(0)("AplicaCP").ToString) + CveSubProyectoOrigen = ObjGrales.DtResultados.Rows(0)("CveSubProyectoOrigen").ToString.ToEntero + + TipoPermisoSCT = ObjGrales.DtResultados.Rows(0)("TipoPermisoSCT").ToString + NumPermisoSCT = ObjGrales.DtResultados.Rows(0)("NumPermisoSCT").ToString + NombreAseguradora = ObjGrales.DtResultados.Rows(0)("NombreAseguradora").ToString + NumPolizaSeguro = ObjGrales.DtResultados.Rows(0)("NumPolizaSeguro").ToString + ConfigCartaPorte = ObjGrales.DtResultados.Rows(0)("ConfigCartaPorte").ToString + Placa = ObjGrales.DtResultados.Rows(0)("Placa").ToString + Anio = ObjGrales.DtResultados.Rows(0)("Anio").ToString.ToEntero + + CPCliente = ObjGrales.DtResultados.Rows(0)("CPCliente").ToString.ToEntero + + DirOriCP = ObjGrales.DtResultados.Rows(0)("DirOriCP").ToString.ToEntero + DirOriCalle = ObjGrales.DtResultados.Rows(0)("DirOriCalle").ToString + DirOriClaveSATPais = ObjGrales.DtResultados.Rows(0)("DirOriClaveSATPais").ToString + DirOriClaveSATEstado = ObjGrales.DtResultados.Rows(0)("DirOriClaveSATEstado").ToString + DirOriClaveSATMunicipio = ObjGrales.DtResultados.Rows(0)("DIrOriClaveSATMunicipio").ToString + DirOriClaveSATLocalidad = ObjGrales.DtResultados.Rows(0)("DirOriClaveSATLocalidad").ToString + DirOriClaveSATColonia = ObjGrales.DtResultados.Rows(0)("DirOriClaveSATColonia").ToString + + DirDesCP = ObjGrales.DtResultados.Rows(0)("DirDesCP").ToString.ToEntero + DirDesCalle = ObjGrales.DtResultados.Rows(0)("DirDesCalle").ToString + DirDesClaveSATPais = ObjGrales.DtResultados.Rows(0)("DirDesClaveSATPais").ToString + DirDesClaveSATEstado = ObjGrales.DtResultados.Rows(0)("DirDesClaveSATEstado").ToString + DirDesClaveSATMunicipio = ObjGrales.DtResultados.Rows(0)("DirDesClaveSATMunicipio").ToString + DirDesClaveSATLocalidad = ObjGrales.DtResultados.Rows(0)("DirDesClaveSATLocalidad").ToString + DirDesClaveSATColonia = ObjGrales.DtResultados.Rows(0)("DirDesClaveSATColonia").ToString + + + + ChrDomicilio = ObjGrales.DtResultados.Rows(0)("ChrDomicilio").ToString + ChrCP = ObjGrales.DtResultados.Rows(0)("ChrCP").ToString + ChrNumeroExterior = ObjGrales.DtResultados.Rows(0)("ChrNumeroExterior").ToString + ChrNumeroInterior = ObjGrales.DtResultados.Rows(0)("ChrNumeroInterior").ToString + ChrClaveSATColonia = ObjGrales.DtResultados.Rows(0)("ChrClaveSATColonia").ToString + ChrClaveSATMunicipio = ObjGrales.DtResultados.Rows(0)("ChrClaveSATMunicipio").ToString + ChrClaveSATEstado = ObjGrales.DtResultados.Rows(0)("ChrClaveSATEstado").ToString + + ChrChofer = ObjGrales.DtResultados.Rows(0)("ChrChofer").ToString + ChrLicencia = ObjGrales.DtResultados.Rows(0)("ChrLicencia").ToString + ChrNumRegidTribOperador = ObjGrales.DtResultados.Rows(0)("ChrNumRegidTribOperador").ToString + ChrResidenciaFiscalOperador = ObjGrales.DtResultados.Rows(0)("ChrResidenciaFiscalOperador").ToString + ChrRFC = ObjGrales.DtResultados.Rows(0)("ChrRFC").ToString + + + Else + TieneError = True + MsgError.AppendLine("Consultar datos de timbrado") + End If + End If + Else + TieneError = True + MsgError.AppendLine("CveTimbre no valida") + End If + + + + + If ObjGrales.GetGralMovimientosDetalleTimbre(CveTimbre, UsuarioActual.CveEmpresa) Then + DtMovimientos = ObjGrales.DtResultados + Else + DtMovimientos = Nothing + TieneError = True + MsgError.AppendLine("Error al obtener Movimientos") + End If + ObjGrales.Dispose() + + + Dim ObjInventarios As New ClsInventarios + If ObjInventarios.GetCamiones(-1, UsuarioActual.CveEmpresa) AndAlso ObjInventarios.DtResultados.Rows.Count > 0 Then + DTCamiones = ObjInventarios.DtResultados + End If + + If ObjInventarios.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) Then + CveAlmacenOrigen = ObjInventarios.CveAlmacen + CveAlmacenDestico = ObjInventarios.CveAlmacenDestino + 'CveSubProyecto = ObjInventarios.CveSubProyecto + End If + + ObjInventarios.Dispose() + + + Dim Row As Data.DataRow = Extensiones.FiltroPrimero(GlobalDTSubProyectos, "TipoSucursal=1") + SubProyectoMatriz = New Modelos.SubProyectoModel(Row) + SubProyecto = New Modelos.SubProyectoModel(Extensiones.FiltroPrimero(GlobalDTSubProyectos, $"CveSubProyecto = {CveSubProyectoOrigen}")) + + If TieneError Then + Return False + Else + Return True + End If + + End Function + + + + + + +End Class + diff --git a/vwd.webinfo b/vwd.webinfo index 583dcacf8..bd5e347d3 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -344,6 +344,8 @@ + + From 19f1d7730b0023e4e181484017052aef3382e865 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 1 Nov 2021 09:16:58 -0700 Subject: [PATCH 24/39] Efactuiras vicnulacion manual considerar CveCompra al vincular --- Compras/eFacturas.aspx.vb | 144 +++++++++----------------------------- 1 file changed, 35 insertions(+), 109 deletions(-) diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index 322ac5493..481b142a8 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -3282,43 +3282,52 @@ Partial Class Compras_eFacturas For Each dRow As DataRow In DTGVPagosVinculacion.Rows - If HdnIdDocumento.Value = dRow("IdDocumento").ToString Then 'And dRow("CveIE").ToString.ToEntero <= 0 dRow("CveIE") = HdnCveIE.Value.ToEntero Dim ObjIE As New ClsBancos() - 'If ObjIE.GetBancosIE(HdnCveIE.Value.ToEntero, UsuarioActual.CveEmpresa) Then - ' Try - ' dRow("FolioPago") = ObjIE.Folio - ' dRow("ImportePago") = dRow("ImpPagado") - ' dRow("FechaPago") = ObjIE.FechaDocumento - ' dRow("Tipo") = "E" - ' ' dRow("Diferencia") = 0D - ' dRow("Manual") = True - - ' Catch ex As Exception - - ' End Try - - 'End If - Dim ObjCompras As New ClsCompras If ObjCompras.GetCompararComplementoPago(CveProveedor, -1, "", UsuarioActual.CveEmpresa, HdnCveIE.Value.ToEntero) Then - Try - dRow("FolioPago") = ObjCompras.DtResultados(0)("FolioIE") - dRow("ImportePago") = dRow("ImpPagado") - dRow("FechaPago") = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate - dRow("CvePrePolizaDetalle") = ObjCompras.DtResultados(0)("CvePrePolizaDetalle").ToString.ToEntero - dRow("Tipo") = "E" - ' dRow("Diferencia") = 0D - dRow("Manual") = True - Catch ex As Exception - End Try + Dim CompraEncontrada As Boolean = False + + + For Each drowComparar As DataRow In ObjCompras.DtResultados.Rows + + If drowComparar("CveCompraPrePoliza").ToString.ToEntero > 0 AndAlso (dRow("CveCompra").ToString.ToEntero = drowComparar("CveCompraPrePoliza").ToString.ToEntero) Then + dRow("FolioPago") = drowComparar("FolioIE") + dRow("ImportePago") = dRow("ImpPagado") + dRow("FechaPago") = drowComparar("Fecha").ToString.ToDate + dRow("CvePrePolizaDetalle") = drowComparar("CvePrePolizaDetalle").ToString.ToEntero + dRow("Tipo") = "E" + dRow("Manual") = True + CompraEncontrada = True + Exit For + End If + + Next + + + If Not CompraEncontrada Then + + Try + dRow("FolioPago") = ObjCompras.DtResultados(0)("FolioIE") + dRow("ImportePago") = dRow("ImpPagado") + dRow("FechaPago") = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate + dRow("CvePrePolizaDetalle") = ObjCompras.DtResultados(0)("CvePrePolizaDetalle").ToString.ToEntero + dRow("Tipo") = "E" + dRow("Manual") = True + Catch ex As Exception + + End Try + + End If + + End If ObjCompras.Dispose() @@ -3341,89 +3350,6 @@ Partial Class Compras_eFacturas ValidaTablaDeVinculacion() - Exit Sub - - '********************************************************************************************************************** - - - - - - 'If HdnCveIE.Value <> "-1" AndAlso IsNumeric(HdnCveIE.Value) AndAlso HdnCveIE.Value.ToEntero > 0 Then - - ' Dim ImportePago As Double = 0 - ' Dim ImporteIES As Double = 0 - ' Dim SerieFolioIE As String = "" - ' Dim ObjCompras As New ClsCompras - ' Dim ErrorVinculacion = True - - ' If ObjCompras.GetCompararComplementoPago(CveProveedor, -1, "", UsuarioActual.CveEmpresa, HdnCveIE.Value.ToEntero) Then - - ' For Each Drow As DataRow In ObjCompras.DtResultados.Rows - ' For Each GvRow As GridViewRow In GVPDocumentosRelacionadosPagos.Rows - - ' If GvRow.RowType = DataControlRowType.DataRow Then - - ' If Drow("CveCompra").ToString.ToEntero = GvRow.DataKey("CveCompra").ToEntero Then - - ' GvRow.FCLabel("LblCveIE").Text = Drow("CveIE").ToString.ToEntero.ToString - ' GvRow.FCLabel("LblCvePrePolizaDetalle").Text = Drow("CvePrePolizaDetalle").ToString.ToEntero.ToString - - ' End If - - ' End If - - ' Next - ' Next - - - ' For Each GvRow As GridViewRow In GVPDocumentosRelacionadosPagos.Rows - ' If GvRow.RowType = DataControlRowType.DataRow Then - - ' If GvRow.FCLabel("LblCveIE").Text.ToEntero > 0 And GvRow.FCLabel("LblCvePrePolizaDetalle").Text.ToEntero > 0 Then - ' ErrorVinculacion = False - - ' Else - - ' If ObjCompras.DtResultados.Rows.Count > 0 Then - ' GvRow.FCLabel("LblCveIE").Text = ObjCompras.DtResultados(0)("CveIE").ToString.ToEntero.ToString - ' GvRow.FCLabel("LblCvePrePolizaDetalle").Text = ObjCompras.DtResultados(0)("CvePrePolizaDetalle").ToString.ToEntero.ToString - ' Else - ' ErrorVinculacion = True - ' Exit For - ' End If - - ' End If - ' End If - - ' Next - - - ' Else - ' ErrorVinculacion = True - ' End If - - ' If Not ErrorVinculacion Then - ' ImporteIES = ObjCompras.DtResultados.FiltraParametros("CveIE > 0").SUM("Importe") - ' ObjCompras.Dispose() - - ' BtnVincularPago.Visible = True - - ' LblSerieFolioPago.Text = $"{SeriePago}-{FolioPago}" - ' LblImportePago.Text = ImportePago.FormatoNumero - ' 'LblSerieFolioIE.Text = SerieFolioIE - ' LblImporteIE.Text = ImporteIES.FormatoNumero - - ' GvVincularPago.DataBind() - ' UpVincularPago.Update() - ' ObjCompras.Dispose() - - ' Else - ' Alert("No se pudo realizar la vinculacion manual", TipoMensaje.MsgAdvertencia) - ' End If - - - 'End If End Sub From 703b8c779bf828d19fb7a98c800ceaa2cd462f51 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 1 Nov 2021 15:34:42 -0700 Subject: [PATCH 25/39] faltaba agegar CveLocalizacion en la clase --- App_Code/ClsSubProyectos.vb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/App_Code/ClsSubProyectos.vb b/App_Code/ClsSubProyectos.vb index 97c8bd94d..803ab02de 100644 --- a/App_Code/ClsSubProyectos.vb +++ b/App_Code/ClsSubProyectos.vb @@ -368,7 +368,8 @@ Public Class ClsSubProyectos .Add("@CvePrecioLista", SqlDbType.Int).Value = CvePrecioLista .Add("@Telefono", SqlDbType.VarChar).Value = Telefono .Add("@NoVerificaAlmacen", SqlDbType.Bit).Value = NoVerificaAlmacen - .Add("@CodigoSucursal", SqlDbType.VarChar).Value = CodigoSucursal + .Add("@CodigoSucursal", SqlDbType.VarChar).Value = CodigoSucursal + .Add("@CveLocalidad", SqlDbType.Int).Value = CveLocalidad .Add("@CveSubProyecto", SqlDbType.Int).Direction = ParameterDirection.Output End With From 135c8f9d174e7f8c25011228d887dd928317ee7c Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 1 Nov 2021 19:33:16 -0700 Subject: [PATCH 26/39] Filtra Colonia por CP --- Planeacion/CatSubProyectos.aspx.vb | 6 ++++-- Ventas/Clientes.aspx.vb | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Planeacion/CatSubProyectos.aspx.vb b/Planeacion/CatSubProyectos.aspx.vb index 02500da0f..e7a4840bd 100644 --- a/Planeacion/CatSubProyectos.aspx.vb +++ b/Planeacion/CatSubProyectos.aspx.vb @@ -846,8 +846,10 @@ Partial Class CatSubProyectos Private Sub CargaColonia() DdlColonia.Items.Clear() - If DdlMunicipio.SelectedValue.ToEntero > 0 Then - DdlColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado(GlobalDTPais.FiltraParametros($"CvePais = {DdlPais.SelectedValue.ToEntero}")(0)("ClaveSATPais").ToString).FiltraParametros($"CveEstado = {DdlEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString) + If DdlMunicipio.SelectedValue.ToEntero > 0 Then + + DdlColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado(GlobalDTPais.FiltraParametros($"CvePais = {DdlPais.SelectedValue.ToEntero}")(0)("ClaveSATPais").ToString).FiltraParametros($"CveEstado = {DdlEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString).FiltraParametros(If(TxtCP.Text.Trim.Length > 0, $"CP = {TxtCP.Text}", "")) + End If DdlColonia.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlColonia.DataBind() diff --git a/Ventas/Clientes.aspx.vb b/Ventas/Clientes.aspx.vb index 07d038abb..94b4ba3ab 100644 --- a/Ventas/Clientes.aspx.vb +++ b/Ventas/Clientes.aspx.vb @@ -4386,7 +4386,7 @@ Partial Class Clientes Private Sub CargaDirClienteColonia() DdlDirClienteColonia.Items.Clear() If DdlDirClienteMunicipio.SelectedValue.ToEntero > 0 Then - DdlDirClienteColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado(GlobalDTPais.FiltraParametros($"CvePais = {DdlDirClientePais.SelectedValue.ToEntero}")(0)("ClaveSATPais").ToString).FiltraParametros($"CveEstado = {DdlDirClienteEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlDirClienteMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString) + DdlDirClienteColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado(GlobalDTPais.FiltraParametros($"CvePais = {DdlDirClientePais.SelectedValue.ToEntero}")(0)("ClaveSATPais").ToString).FiltraParametros($"CveEstado = {DdlDirClienteEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlDirClienteMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString).FiltraParametros(If(TxtEnvioCP.Text.Trim.Length > 0, $"CP = {TxtEnvioCP.Text}", "")) End If DdlDirClienteColonia.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlDirClienteColonia.DataBind() From 8f33d855b6a0f6d383cce09e2f77d70ba76e94b3 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 2 Nov 2021 11:17:43 -0700 Subject: [PATCH 27/39] Envio de ScoreCard E140 --- Ashx/TareasProgramadas.ashx | 485 +++++++++++++++++++++++++++++++++++- 1 file changed, 482 insertions(+), 3 deletions(-) diff --git a/Ashx/TareasProgramadas.ashx b/Ashx/TareasProgramadas.ashx index 2ec63bf8f..7ab7d8c50 100644 --- a/Ashx/TareasProgramadas.ashx +++ b/Ashx/TareasProgramadas.ashx @@ -8,9 +8,59 @@ Imports Newtonsoft.Json.Linq Imports Extensiones Imports System.IO Imports CrystalDecisions.CrystalReports.Engine -Imports CrystalDecisions.Shared +Imports CrystalDecisions.Shared +Imports Microsoft.Reporting.WebForms -Public Class TareasProgramadas : Implements IHttpHandler +Public Class TareasProgramadas : Implements IHttpHandler + + + Private ReadOnly Property GlobalDTUsuariosE140(Optional CveUsuario As Integer = -1, Optional CveCliente As Integer = -1, Optional CveProveedor As Integer = -1) As DataTable + Get + Dim CveEmpresa As Integer = 140 + Dim Str As New StringBuilder + If CveUsuario <> -1 Then Str.AppendFormat("CveUsuario = {0}", CveUsuario) + If CveEmpresa <> -1 Then Str.AppendFormat(" {0} CveEmpresa = {1}", If(Str.Length > 0, "AND", ""), CveEmpresa) + If CveCliente <> -1 Then Str.AppendFormat(" {0} CveCliente = {1}", If(Str.Length > 0, "AND", ""), CveCliente) + If CveProveedor <> -1 Then Str.AppendFormat(" {0} CveProveedor = {1}", If(Str.Length > 0, "AND", ""), CveProveedor) + + If CveUsuario <> -1 OrElse CveEmpresa <> -1 Then + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) + GlobalDTUsuariosE140 = Dv.ToTable + Dv.Dispose() + Else + GlobalDTUsuariosE140 = DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable) + End If + End Get + End Property + + Public Shared ReadOnly Property GlobalDTSubProyectosE140(CveProyecto As Integer, Optional CveSubProyecto As Integer = -1, Optional Estatus As Integer = 1) As DataTable + Get + Dim CveEmpresa As Integer = 140 + Dim AppNombre As String = String.Format("GlobalDTSubProyectos-{0}", CveEmpresa) + 'sino existe, recarga los datos + If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Or (DirectCast(HttpContext.Current.Application(AppNombre), DataTable) IsNot Nothing AndAlso DirectCast(HttpContext.Current.Application(AppNombre), DataTable).Rows.Count = 0) Then + Dim P As New ClsSubProyectos + If P.GetSubProyectos(CveEmpresa:=CveEmpresa) Then HttpContext.Current.Application(AppNombre) = P.DtResultados + P.Dispose() + End If + + If CveProyecto <> -1 OrElse CveSubProyecto <> -1 OrElse CveEmpresa <> -1 OrElse Estatus <> -1 Then + Dim StrSQL As New StringBuilder + If CveProyecto <> -1 Then StrSQL.AppendFormat(" AND CveProyecto = {0}", CveProyecto) + If CveSubProyecto <> -1 Then StrSQL.AppendFormat(" AND CveSubProyecto = {0}", CveSubProyecto) + If Estatus <> -1 Then StrSQL.AppendFormat(" AND CveEstatus = {0}", Estatus) + If CveEmpresa <> -1 Then StrSQL.AppendFormat(" AND CveEmpresa = {0}", CveEmpresa) + + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), StrSQL.ToString.Trim.TrimStart("A"c, "N"c, "D"c), "", DataViewRowState.CurrentRows) + GlobalDTSubProyectosE140 = Dv.ToTable + Dv.Dispose() + + Else + GlobalDTSubProyectosE140 = DirectCast(HttpContext.Current.Application(AppNombre), DataTable) + End If + + End Get + End Property Private currentcontext As HttpContext Private URLParametros As New Hashtable @@ -51,7 +101,10 @@ Public Class TareasProgramadas : Implements IHttpHandler context.Response.Write(retorno) Case "EstadosCuenta" 'CargaEstadosCuenta(context, 119, 227774) - CargaEstadosCuenta(context, 119, -1, FechaEnvio, FechaActual) + CargaEstadosCuenta(context, 119, -1, FechaEnvio, FechaActual) + + Case "ScoreCard" + CargaScoreCard(context, 140, FechaEnvio) End Select Catch ex As Exception ex.GuardaLog(ex.ToString()) @@ -843,4 +896,430 @@ Public Class TareasProgramadas : Implements IHttpHandler End Sub #End Region +#Region "S C O R E C A R D" + Private Sub CargaScoreCard(ByVal context As HttpContext, pCveEmpresa As Integer, FechaEnvio As DateTime) + Dim Usuario = ValidaUsuarioSistema(pCveEmpresa) + Dim obj = EjecutarEnvioScoreCard(Usuario, FechaEnvio) + + End Sub + + Private Function EjecutarEnvioScoreCard(UsuarioActual As Usuario, FechaEnvio As DateTime) As Boolean + Dim DtGrupoVendedores As DataTable = Nothing + Dim DtGrupoSucursales As DataTable = Nothing + Dim DtGrupoEmpresa As DataTable = Nothing + + Using ObjVentas As New ClsVentas + 'VENDEDORES + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=0) Then + DtGrupoVendedores = ObjVentas.DtResultados.Copy + End If + 'SUCURSAL + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=1) Then + DtGrupoSucursales = ObjVentas.DtResultados.Copy + End If + 'EMPRESA + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=2) Then + DtGrupoEmpresa = ObjVentas.DtResultados.Copy + End If + End Using + + Dim DtUsuarios As DataTable = GlobalDTUsuariosE140() + + Dim ListaDirectivos As New List(Of MUsuarioEnviar) + 'OSCAR FERNANDO LOPEZ CARRASCO + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2138}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'ANA IVETTE LOPEZ CARRASCO + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2292}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'FERNANDO MENDOZA LAMADRID + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2275}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'CARLOS ARMANDO MORENO GONZALEZ + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2763}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'EMMANUEL LOPEZ FIMBRES + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3099}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + + Dim PDFEmpresa As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoEmpresa) + Dim PDFSucursales As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoSucursales) + Dim PDFVendedores As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoVendedores) + + For Each UsuarioEnviar In ListaDirectivos + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + + If UsuarioEnviar.ReporteEnviar.Empresa Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFEmpresa, + .NombreArchivo = "ScoreCardEmpresa.pdf" + }) + End If + + If UsuarioEnviar.ReporteEnviar.Sucursal Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFSucursales, + .NombreArchivo = "ScoreCardSucursales.pdf" + }) + End If + + If UsuarioEnviar.ReporteEnviar.Vendedor Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFVendedores, + .NombreArchivo = "ScoreCardVendedores.pdf" + }) + End If + + If LSRutasMail.Count > 0 Then + EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) + End If + + Next + + Dim ListaVendedores As New List(Of MUsuarioEnviar) + 'LUIS FERNADO GRIJALVA COTA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3236} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'FERNANDO GRIJALVA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3293} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'ADRIAN MURRIETA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3352} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'BRAYAM URIEL CORRALES + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2700} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'DANIEL GASTELUM + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3360} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'ALEJANDRA QUINTERO + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3336} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'RICARDO FUENTES + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3363} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'GERMAN LUNA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3354} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + + For Each UsuarioEnviar In ListaVendedores + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim DtReporteVendedor As DataTable = Nothing + + If UsuarioEnviar.CveSubProyecto > 0 AndAlso UsuarioEnviar.CveVendedor > 0 Then + + Using ObjVentas As New ClsVentas + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, UsuarioEnviar.CveVendedor, -1, + -1, -1, -1, UsuarioEnviar.CveSubProyecto, -1, GrupoSuperior:=1) Then + DtReporteVendedor = ObjVentas.DtResultados.Copy + End If + End Using + + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = GenerarScoredCard(UsuarioActual, UsuarioEnviar, DtReporteVendedor), + .NombreArchivo = "ScoreCardSucursales.pdf" + }) + + If LSRutasMail.Count > 0 Then + EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) + End If + + End If + Next + + Return False + End Function + + Private Sub EnviarCorreoFactura(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, LSRutasMail As List(Of ClsSisMail.ArchivoMail)) + Dim ObjMail As New ClsSisMail() + Dim Mail As String = "jonathan.perez@adssistemas.mx" + Dim MailCC As String = "rene.molina@adssistemas.mx" + + Dim ExistePDF As Boolean = False + + If Not String.IsNullOrEmpty(Mail) Then + Try + Dim Asunto As String = $"ScoreCard: {Now.ToString("dd/MM/yyyy")}" + Dim Cuerpo As String = String.Empty + Dim ResultadoMail As Integer = 0 + + If ObjMail.SendMail(ClsPaginas.EmpresaNotificaciones, Mail, Asunto, Cuerpo, If(String.IsNullOrEmpty(MailCC), "", MailCC), LSRutasMail) Then + ResultadoMail = 1 + End If + + Catch ex As Exception + OnError("Ocurrió error al mandar el Mail", ex) + End Try + End If + End Sub + + Protected Function GenerarScoredCard(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, DtDatos As DataTable) As Byte() + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) + + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + If Imagen.Exists Then + params.Add(New ReportParameter("pImg", logouri)) + Else + params.Add(New ReportParameter("pImg", "")) + End If + params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) + params.Add(New ReportParameter("FechaImpresion", Today)) + params.Add(New ReportParameter("SubProyecto", UsuarioEnviar.SubProyecto)) + params.Add(New ReportParameter("Agente", UsuarioEnviar.Agente)) + + + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource + rds.Name = "DataSet1" + rds.Value = DtDatos + lrds.Add(rds) + + Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") + End Function + + Protected Function GenerarScoredCardDirectivo(UsuarioActual As Usuario, DtDatos As DataTable) As Byte() + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) + + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + If Imagen.Exists Then + params.Add(New ReportParameter("pImg", logouri)) + Else + params.Add(New ReportParameter("pImg", "")) + End If + params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) + params.Add(New ReportParameter("FechaImpresion", Today)) + params.Add(New ReportParameter("SubProyecto", "Todos")) + params.Add(New ReportParameter("Agente", "Todos")) + + + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource + rds.Name = "DataSet1" + rds.Value = DtDatos + lrds.Add(rds) + + Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") + End Function + + Public Enum TipoUsuarioEnviar + Directivo + Vendedor + End Enum + + Public Class MUsuarioEnviar + + Sub New(RowUsuario As DataRow, Tipo As TipoUsuarioEnviar) + If RowUsuario IsNot Nothing Then + Me.CveUsuario = RowUsuario("CveUsuario").ToString().ToEntero() + Me.Nombre = RowUsuario("Nombre").ToString() + Me.Correo = RowUsuario("Correo").ToString() + Me.CveSubProyecto = RowUsuario("CveSubProyecto").ToString().ToEntero() + Me.CveVendedor = RowUsuario("CveVendedor").ToString().ToEntero() + Me.Tipo = Tipo + + If Me.Tipo = TipoUsuarioEnviar.Vendedor Then + Me.Agente = Me.Nombre + Else + Me.Agente = "Todos" + End If + + If String.IsNullOrEmpty(SubProyecto) AndAlso CveSubProyecto > 0 Then + Me.SubProyecto = GlobalDTSubProyectosE140(-1, CveSubProyecto:=Me.CveSubProyecto).FiltroPrimeroValor("SubProyecto") + End If + End If + + End Sub + + Public Property CveUsuario As Integer + Public Property Nombre As String + Public Property Tipo As TipoUsuarioEnviar + Public Property ReporteEnviar As MReporteEnviar + Public Property CveSubProyecto As Integer + Public Property SubProyecto As String + Public Property Correo As String + Public Property CveVendedor As Integer + Public Property Agente As String + + End Class + + Public Class MReporteEnviar + Public Property Empresa As Boolean = False + Public Property Sucursal As Boolean = False + Public Property Vendedor As Boolean = False + End Class + + Public Function StreamPDF(UsuarioActual As Usuario, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() + 'limpio ReportViwer + Dim sw As New System.Diagnostics.Stopwatch() + sw.Start() + Dim Bytes As Byte() = Nothing + + Dim CveUsuario As Integer = 0 + Dim CveEmpresa As Integer = 0 + Dim RutaEmpresa As String = "" + + If UsuarioActual IsNot Nothing Then + CveUsuario = UsuarioActual.CveUsuario + CveEmpresa = UsuarioActual.CveEmpresa + RutaEmpresa = UsuarioActual.Empresa.RutaArchivos + End If + + Dim bdir As String = If(RutaReporte.Contains("Empresas"), ModExtensiones.DirectorioBaseEmpresas, AppDomain.CurrentDomain.BaseDirectory) + + 'TOMAR LA RUTA BASE PARA EL DIRECTORIO DE LA EMPRESA + If Not String.IsNullOrEmpty(RutaEmpresa) AndAlso Not RutaReporte.Contains("Grales") Then + bdir = RutaEmpresa.Replace($"{CveEmpresa}/", "") + End If + + RutaReporte.Replace("/", "\") + + If Not RutaReporte.ToUpper().StartsWith(bdir.ToUpper()) Then + RutaReporte = String.Format("{0}{1}", bdir, RutaReporte) + End If + + Dim EsProduccion As Boolean = UsuarioActual.Empresa.FacturaProduccion + + If EsProduccion Then + + Dim wsreport As New WSRDLC.WebServiceSoapClient + Dim params As New List(Of WSRDLC.ReportParameter) + Dim ds As New DataSet + For Each rpds As ReportDataSource In DataSource + Dim dt As DataTable = DirectCast(rpds.Value, Data.DataTable) + If dt Is Nothing Then + dt = New DataTable() + Else + dt = dt.Copy() + End If + dt.TableName = rpds.Name + ds.Tables.Add(dt) + Next + For Each rpds As ReportParameter In Parametros + Dim param As New WSRDLC.ReportParameter + param.Name = rpds.Name + param.Values = {rpds.Values(0)} + params.Add(param) + Next + Bytes = wsreport.StreamPDFBytes(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) + wsreport = Nothing + params = Nothing + ds.Dispose() : ds = Nothing + Else + If IsNothing(MR) Then MR = New ReportViewer + Try + ' MasterReporteador.LocalReport.DataSources.Clear() + For Each RDS As ReportDataSource In DataSource + MR.LocalReport.DataSources.Add(RDS) + Next + + MR.LocalReport.ReportPath = RutaReporte + MR.ProcessingMode = ProcessingMode.Local + MR.LocalReport.EnableExternalImages = True + MR.LocalReport.SetParameters(Parametros) + MR.LocalReport.Refresh() + Dim Warnings As Warning() = Nothing + Dim StreamIds As String() = Nothing + Dim MimeType As String = Nothing + Dim Encoding As String = Nothing + Dim Extension As String = Nothing + Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) + Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + Catch ex As Exception + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + End Try + MR.Dispose() + MR = Nothing + 'Dim ruta = wsreport.StreamPDF(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) + 'If File.Exists(ruta) Then + ' Bytes = File.ReadAllBytes(ruta) + ' File.Delete(ruta) + 'End If + 'Dim setup As AppDomainSetup = New AppDomainSetup + 'With setup + ' .ApplicationBase = Environment.CurrentDirectory + ' .LoaderOptimization = LoaderOptimization.MultiDomainHost + 'End With + 'setup.SetCompatibilitySwitches({"NetFx40_LegacySecurityPolicy"}) + 'Dim _casPolicyEnabledDomain As AppDomain = AppDomain.CreateDomain("Full Trust", Nothing, setup) + 'Dim fllreport As ADSReportLib.FullTrustReportviewer = Nothing + 'Try + + ' fllreport = CType(_casPolicyEnabledDomain.CreateInstanceFromAndUnwrap(GetType(ADSReportLib.FullTrustReportviewer).Assembly.CodeBase, GetType(ADSReportLib.FullTrustReportviewer).FullName), ADSReportLib.FullTrustReportviewer) + + ' fllreport.Initialize("DisplayName", RutaReporte, Parametros.AsEnumerable(), New List(Of String()), True) + ' For Each RDS As ReportDataSource In DataSource + ' fllreport.AddDataSources(RDS.Name, DirectCast(RDS.Value, DataTable)) + ' Next + ' Dim Warnings As Warning() = Nothing + ' Dim StreamIds As String() = Nothing + ' Dim MimeType As String = Nothing + ' Dim Encoding As String = Nothing + ' Dim Extension As String = Nothing + ' Bytes = fllreport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds) + ' fllreport = Nothing + 'Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException + ' GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + ' 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + ' 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + 'Catch ex As Exception + ' GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + ' 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + ' 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + 'Finally + ' AppDomain.Unload(_casPolicyEnabledDomain) + 'End Try + 'If fllreport IsNot Nothing Then fllreport.liberarecursos() + + End If + sw.Stop() + + If sw.Elapsed.TotalSeconds > 5 Then + GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") + End If + + Return Bytes + End Function +#End Region + End Class \ No newline at end of file From 588688c2d07beb8ee223e218d008629f916e945e Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 2 Nov 2021 11:18:01 -0700 Subject: [PATCH 28/39] Consulta Verificar Existencias OC --- OC/OC.aspx.vb | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/OC/OC.aspx.vb b/OC/OC.aspx.vb index 3a038344b..d10e24f6e 100644 --- a/OC/OC.aspx.vb +++ b/OC/OC.aspx.vb @@ -6921,27 +6921,29 @@ Partial Class OC Dim tmpDTPS As DataTable = DtDetalle Dim DTAlmacen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($" CveTipoAlmacen IN (1,9) ") 'AND CveSucursal = {CveSucursal}") Dim objInv As New ClsInventarios - Dim consulta As New StringBuilder + 'Dim consulta As New StringBuilder - consulta.Append(" ") - consulta.Append(" DECLARE @TEMP TABLE (CvePS INT, CveSubProyecto INT);") - For Each row As DataRow In tmpDTPS.Rows - consulta.AppendFormat("INSERT INTO @TEMP VALUES ({0},{1});", row("CvePS"), row("CveSubProyecto")) - Next - consulta.Append(" SELECT CASE WHEN LEN (ISNULL (P.Codigo, '')) = 0 THEN P.PS ELSE CONCAT( P.Codigo, ' - ', P.PS) END AS Producto, SUM(OCPR.Cantidad) AS [Por Recibir] ") - For Each row As DataRow In DTAlmacen.Rows - consulta.AppendFormat(" ,SUM(CASE WHEN CS.CveAlmacen={0} THEN CS.Existencia - ISNULL(INV.Cantidad,0) ELSE 0 END) AS [{1}] ", row("CveAlmacen"), row("Almacen")) - Next - consulta.Append(" FROM @TEMP T ") - consulta.Append(" INNER JOIN [ProductosServicios] P ON P.CvePS = T.CvePS ") - consulta.Append(" LEFT JOIN [Inv_ExistenciasProductos] CS ON P.CvePS = CS.CvePS ") - consulta.Append(" LEFT JOIN Vw_InventarioPorSurtir INV ON INV.CvePS = P.CvePS AND INV.CveAlmacen = CS.CveAlmacen ") - consulta.Append(" LEFT JOIN Vw_OC_PorRecibir OCPR ON OCPR.CvePS = P.CvePS AND OCPR.CveAlmacen = CS.CveAlmacen AND OCPR.CveSubProyecto = T.CveSubProyecto") - consulta.Append(" WHERE P.CveTipoPS = 2") - consulta.Append(" GROUP BY P.CvePS,P.Codigo,P.PS") + 'consulta.Append(" ") + 'consulta.Append(" DECLARE @TEMP TABLE (CvePS INT, CveSubProyecto INT);") + 'For Each row As DataRow In tmpDTPS.Rows + ' consulta.AppendFormat("INSERT INTO @TEMP VALUES ({0},{1});", row("CvePS"), row("CveSubProyecto")) + 'Next + 'consulta.Append(" SELECT CASE WHEN LEN (ISNULL (P.Codigo, '')) = 0 THEN P.PS ELSE CONCAT( P.Codigo, ' - ', P.PS) END AS Producto, SUM(OCPR.Cantidad) AS [Por Recibir] ") + 'For Each row As DataRow In DTAlmacen.Rows + ' consulta.AppendFormat(" ,SUM(CASE WHEN CS.CveAlmacen={0} THEN CS.Existencia - ISNULL(INV.Cantidad,0) ELSE 0 END) AS [{1}] ", row("CveAlmacen"), row("Almacen")) + 'Next + 'consulta.Append(" FROM @TEMP T ") + 'consulta.Append(" INNER JOIN [ProductosServicios] P ON P.CvePS = T.CvePS ") + 'consulta.Append(" LEFT JOIN [Inv_ExistenciasProductos] CS ON P.CvePS = CS.CvePS ") + 'consulta.Append(" LEFT JOIN Vw_InventarioPorSurtir INV ON INV.CvePS = P.CvePS AND INV.CveAlmacen = CS.CveAlmacen ") + 'consulta.Append(" LEFT JOIN Vw_OC_PorRecibir OCPR ON OCPR.CvePS = P.CvePS AND OCPR.CveAlmacen = CS.CveAlmacen AND OCPR.CveSubProyecto = T.CveSubProyecto") + 'consulta.Append(" WHERE P.CveTipoPS = 2") + 'consulta.Append(" GROUP BY P.CvePS,P.Codigo,P.PS") - objInv.GetQuery(consulta.ToString()) + 'objInv.GetQuery(consulta.ToString()) + + objInv.GetExistenciasAlmacenDT(CveOrdenCompra, UsuarioActual.CveEmpresa) ' limpio los almacenes donde no tiene ningun producto existencia For i = objInv.DtResultados.Columns.Count - 1 To 1 Step -1 From cc4cb4f34d9dd69e74e017a3eb75ac2cb069503e Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 2 Nov 2021 11:18:30 -0700 Subject: [PATCH 29/39] Cambio GlobalDTPSSimplificado --- Ventas/Ventas.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 2046ecb93..fb3db29dc 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -3654,7 +3654,7 @@ Partial Class Ventas 'VALIDA EXISTENCIAS DE ALMACÉN 'Dim DrPS = GlobalDTProductosServicios(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") - Dim DrPS = GlobalDTPS(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") + Dim DrPS = GlobalDTPSSimplificado(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then Dim CveTipoPS As Integer = DrPS("CveTipoPS").ToString().ToEntero() From 97e95d70e37dbc06a220e1640493b1e3ef4e08f9 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:32:49 -0700 Subject: [PATCH 30/39] --cartaporte --- Acarreos/CatChoferes.aspx | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/Acarreos/CatChoferes.aspx b/Acarreos/CatChoferes.aspx index 717eaf460..7cfcd0787 100644 --- a/Acarreos/CatChoferes.aspx +++ b/Acarreos/CatChoferes.aspx @@ -3,14 +3,7 @@ - - + Catálogo de Choferes @@ -210,12 +203,11 @@ <%----%> - Seleccione una + - MEX USA CAN -
From 28d241e88b890a1c3433e5369de3462f19d9eb01 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:32:56 -0700 Subject: [PATCH 31/39] mejora --- Acumuladores/CatFoliosGarantia.aspx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Acumuladores/CatFoliosGarantia.aspx b/Acumuladores/CatFoliosGarantia.aspx index 8974fb697..f707c911f 100644 --- a/Acumuladores/CatFoliosGarantia.aspx +++ b/Acumuladores/CatFoliosGarantia.aspx @@ -60,7 +60,6 @@
  • - @@ -71,12 +70,12 @@
    -
    +
    -
    +
    <%-- --%> @@ -108,12 +107,12 @@ -
    +
    -
    +
    " style="display: inline-block; margin-right: -20px; width: 150px;" /> " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info">
    From c0e04d385fef6861e66568069317082003ea6996 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:33:19 -0700 Subject: [PATCH 32/39] - --- Inventarios/RepTraspasoEmitido.aspx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/RepTraspasoEmitido.aspx.cs b/Inventarios/RepTraspasoEmitido.aspx.cs index f0fd0f8df..c670c1054 100644 --- a/Inventarios/RepTraspasoEmitido.aspx.cs +++ b/Inventarios/RepTraspasoEmitido.aspx.cs @@ -62,7 +62,7 @@ public partial class Inventarios_RepTraspasoEmitido : ClsPaginas int CveEstatusTimbrado = 0; string FolioFiscal = Gvr.DataKey("FolioFiscal").ToString(),SelloCancelacion =""; int CveMovimiento = Gvr.DataKey("CveMovimiento").ToEntero(); - if (ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, 0, "XAXX010101000", UsuarioActual.Empresa.RFC, 2,false)) + if (ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, 0, UsuarioActual.Empresa.RFC, UsuarioActual.Empresa.RFC, 4,false)) { CancelacionFecha = ObjCancelacion.CancelacionFecha; SelloCancelacion = ObjCancelacion.CancelacionAcuse; From 5c3abcc1ec5a816e26215558e77d64517a541041 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:33:58 -0700 Subject: [PATCH 33/39] =?UTF-8?q?--=20mejora=20para=20verificaci=C3=B3n=20?= =?UTF-8?q?existencia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregaAlmacen.aspx.vb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 5f5646989..f696edd7f 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -2062,7 +2062,7 @@ Partial Class Inventarios_EntregaAlmacen DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows - If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then Dim CveSeccionAlmacen As Integer = 0 For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows @@ -2120,7 +2120,7 @@ Partial Class Inventarios_EntregaAlmacen DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows - If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=-1) Then CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal @@ -2171,7 +2171,7 @@ Partial Class Inventarios_EntregaAlmacen Else - If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal From a64a42888eb0a34970bedc8b7e1babec8adef687 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:34:54 -0700 Subject: [PATCH 34/39] -- cambio de usuario 100 a rol 1 --- Inventarios/EntradasSalidas.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index c622d7ac6..5d16c394f 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -335,7 +335,7 @@ Partial Class Inventarios_EntradasSalidas If Request("CveMovimiento") IsNot Nothing AndAlso Request("CveMovimiento").ToString.ToEntero > 0 Then - If UsuarioActual.CveUsuario = 100 AndAlso UsuarioActual.CveEmpresa = 140 Then + If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.CveEmpresa = 140 Then LnkGenerarVirtual.Visible = True End If From fc44d7d64fbe588d5760839bc0e4b6d71ddfaeba Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 2 Nov 2021 13:35:31 -0700 Subject: [PATCH 35/39] dispose --- General/PopUpPaqueteriasGuias.aspx.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/General/PopUpPaqueteriasGuias.aspx.cs b/General/PopUpPaqueteriasGuias.aspx.cs index ec353c294..02ca5fca7 100644 --- a/General/PopUpPaqueteriasGuias.aspx.cs +++ b/General/PopUpPaqueteriasGuias.aspx.cs @@ -736,6 +736,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas } } + ObjVentas.Dispose(); } private string DocumentoEntregaInterna() @@ -849,8 +850,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas private void MandaCorreoNotificacionGuia(string Correos) { - Correos.GuardaLog(); - + string body = DocumentoEntregaInterna(); ClsSisMail MailCls = new ClsSisMail(); From 580b33071a768b0c7d510c5a56ca97f47d733926 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Tue, 2 Nov 2021 17:31:01 -0700 Subject: [PATCH 36/39] quitar codigos en ddl SAT, filtrado por CP colonia choferes --- Acarreos/CatChoferes.aspx | 14 ++++---- Acarreos/CatChoferes.aspx.vb | 57 +++++++++++++++++++-------------- App_Code/ClsPaginas.vb | 4 +-- Bancos/Creditos.aspx.vb | 6 ++++ Planeacion/CatSubProyectos.aspx | 8 ++--- Ventas/Clientes.aspx | 8 ++--- 6 files changed, 57 insertions(+), 40 deletions(-) diff --git a/Acarreos/CatChoferes.aspx b/Acarreos/CatChoferes.aspx index 717eaf460..6ccdc6e7c 100644 --- a/Acarreos/CatChoferes.aspx +++ b/Acarreos/CatChoferes.aspx @@ -150,6 +150,7 @@
    +
    @@ -179,13 +180,14 @@
    -
    - - +
    + + + + + +
    - -
    -
    diff --git a/Acarreos/CatChoferes.aspx.vb b/Acarreos/CatChoferes.aspx.vb index e8f855dbd..3c0f31d6f 100644 --- a/Acarreos/CatChoferes.aspx.vb +++ b/Acarreos/CatChoferes.aspx.vb @@ -13,7 +13,7 @@ Partial Class Acarreos_CatChoferes If Not Page.IsPostBack Then CargaDatos() CargaDdlTransportista() - DdlColonias.setEsWebService(True) + Dim DT As DataTable = GlobalDTColonia(-1) CargaDdls() @@ -33,6 +33,7 @@ Partial Class Acarreos_CatChoferes DdlMunicipio.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) DdlLocalidad.Items.Insert(0, New ListItem("Seleccione Una", "-1")) + DdlColonia.Items.Insert(0, New ListItem("Seleccione Una", "-1")) End Sub @@ -62,14 +63,6 @@ Partial Class Acarreos_CatChoferes Private Sub BtnAgregarChofer_Click(sender As Object, e As EventArgs) Handles BtnAgregarChofer.Click - Dim CveColonia As Integer = If(DdlColonias.txtValue.Value.ToEntero > 0, DdlColonias.txtValue.Value.ToEntero, -1) - - If CveColonia <= 0 Then - Alert("El campo colonia es necesario, por favor ingréselo.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - If TxtRFC.Text.Length > 0 And TxtNumRegidTribOperador.Text.Trim.Length > 0 Then Alert("Se debe de proporcionar RFC O Numero RegidTribOperador elimine uno", TipoMensaje.MsgAdvertencia) @@ -86,12 +79,12 @@ Partial Class Acarreos_CatChoferes If ChkEstatus.Checked Then Estatus = 1 If HdnModalidad.Value = "A" Then - If ObjAcar.AddChofer(TxtChofer.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlTransportista.SelectedValue, TxtIdentificacion.Text.Trim, TxtTelefono.Text.Trim, Licencia:=TxtLicencia.Text, RFC:=TxtRFC.Text.Trim, Domicilio:=TxtDomicilio.Text.Trim, NumeroExterior:=TxtNumExt.Text.Trim, NumeroInterior:=TxtNumInt.Text.Trim, Colonia:="", Ciudad:="", Estado:="", CP:=TxtCP.Text.Trim, NumRegidTribOperador:=TxtNumRegidTribOperador.Text.Trim, ResidenciaFiscalOperador:=DdlResidenciaFiscalOperador.SelectedValue, CveEstado:=DdlEstado.SelectedValue.ToEntero, CveMunicipio:=DdlMunicipio.SelectedValue.ToEntero, CveLocalidad:=DdlLocalidad.SelectedValue.ToEntero, CveColonia:=CveColonia) Then + If ObjAcar.AddChofer(TxtChofer.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlTransportista.SelectedValue, TxtIdentificacion.Text.Trim, TxtTelefono.Text.Trim, Licencia:=TxtLicencia.Text, RFC:=TxtRFC.Text.Trim, Domicilio:=TxtDomicilio.Text.Trim, NumeroExterior:=TxtNumExt.Text.Trim, NumeroInterior:=TxtNumInt.Text.Trim, Colonia:="", Ciudad:="", Estado:="", CP:=TxtCP.Text.Trim, NumRegidTribOperador:=TxtNumRegidTribOperador.Text.Trim, ResidenciaFiscalOperador:=DdlResidenciaFiscalOperador.SelectedValue, CveEstado:=DdlEstado.SelectedValue.ToEntero, CveMunicipio:=DdlMunicipio.SelectedValue.ToEntero, CveLocalidad:=DdlLocalidad.SelectedValue.ToEntero, CveColonia:=DdlColonia.SelectedValue.ToEntero) Then CargaDatos() Alert("Agregado Correctamente.", TipoMensaje.MsgInformacion) End If ElseIf HdnModalidad.Value = "U" Then - If ObjAcar.UpdateChofer(HdnID.Value.ToEntero(), TxtChofer.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Estatus, DdlTransportista.SelectedValue, TxtIdentificacion.Text.Trim, TxtTelefono.Text.Trim, Licencia:=TxtLicencia.Text, RFC:=TxtRFC.Text.Trim, Domicilio:=TxtDomicilio.Text.Trim, NumeroExterior:=TxtNumExt.Text.Trim, NumeroInterior:=TxtNumInt.Text.Trim, Colonia:="", Ciudad:="", Estado:="", CP:=TxtCP.Text.Trim, NumRegidTribOperador:=TxtNumRegidTribOperador.Text.Trim, ResidenciaFiscalOperador:=DdlResidenciaFiscalOperador.SelectedValue, CveEstado:=DdlEstado.SelectedValue.ToEntero, CveMunicipio:=DdlMunicipio.SelectedValue.ToEntero, CveLocalidad:=DdlLocalidad.SelectedValue.ToEntero, CveColonia:=CveColonia) Then + If ObjAcar.UpdateChofer(HdnID.Value.ToEntero(), TxtChofer.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Estatus, DdlTransportista.SelectedValue, TxtIdentificacion.Text.Trim, TxtTelefono.Text.Trim, Licencia:=TxtLicencia.Text, RFC:=TxtRFC.Text.Trim, Domicilio:=TxtDomicilio.Text.Trim, NumeroExterior:=TxtNumExt.Text.Trim, NumeroInterior:=TxtNumInt.Text.Trim, Colonia:="", Ciudad:="", Estado:="", CP:=TxtCP.Text.Trim, NumRegidTribOperador:=TxtNumRegidTribOperador.Text.Trim, ResidenciaFiscalOperador:=DdlResidenciaFiscalOperador.SelectedValue, CveEstado:=DdlEstado.SelectedValue.ToEntero, CveMunicipio:=DdlMunicipio.SelectedValue.ToEntero, CveLocalidad:=DdlLocalidad.SelectedValue.ToEntero, CveColonia:=DdlColonia.SelectedValue.ToEntero) Then CargaDatos() Alert("Actualizado Correctamente.", TipoMensaje.MsgInformacion) End If @@ -153,25 +146,26 @@ Partial Class Acarreos_CatChoferes DdlLocalidad.Items.Clear() + DdlColonia.Items.Clear() + If DdlEstado.SelectedValue.ToEntero > 0 And DdlMunicipio.SelectedValue.ToEntero > 0 Then DdlLocalidad.DataSource = GlobalDTLocalidad(DdlEstado.SelectedValue.ToEntero, DdlMunicipio.SelectedValue.ToEntero) DdlLocalidad.DataBind() + DdlColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado("MEX").FiltraParametros($"CveEstado = {DdlEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString).FiltraParametros(If(TxtCP.Text.Trim.Length > 0, $"CP = {TxtCP.Text}", "")) + DdlColonia.DataBind() + End If + DdlLocalidad.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) DdlLocalidad.SelectedValueExist(GvRow.DataKey("CveLocalidad")) - If GvRow.DataKey("CveColonia").ToEntero > 0 Then - DdlColonias.txtText.Value = GvRow.DataKey("ClaveSATColoniaCP") - DdlColonias.txtValue.Value = GvRow.DataKey("CveColonia") + DdlColonia.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) + DdlColonia.SelectedValueExist(GvRow.DataKey("CveColonia")) - Else - DdlColonias.txtText.Value = "Selecione Una" - DdlColonias.txtValue.Value = "-1" - End If UpAddChofer.Update() @@ -202,15 +196,16 @@ Partial Class Acarreos_CatChoferes 'TxtColonia.Text = "" TxtNumRegidTribOperador.Text = "" - DdlResidenciaFiscalOperador.SelectedValueExist("-1") - - DdlColonias.txtText.Value = "Selecione Una" - DdlColonias.txtValue.Value = "-1" + DdlResidenciaFiscalOperador.SelectedValueExist("-1") + + DdlEstado.SelectedValueExist(-1) DdlEstado_SelectedIndexChanged(Nothing, Nothing) + DdlColonia.SelectedValueExist(-1) + ChkEstatus.Checked = True divEstatus.Visible = False UpAddChofer.Update() @@ -280,18 +275,29 @@ Partial Class Acarreos_CatChoferes Protected Sub DdlMunicipio_SelectedIndexChanged(sender As Object, e As EventArgs) DdlLocalidad.Items.Clear() + DdlColonia.Items.Clear() If DdlMunicipio.SelectedValue > 0 Then DdlLocalidad.DataSource = GlobalDTLocalidad(DdlEstado.SelectedValue.ToEntero, DdlMunicipio.SelectedValue.ToEntero) DdlLocalidad.DataBind() + DdlColonia.DataSource = GlobalDTColonia(GlobalDTMunicipio(GlobalDTEstado("MEX").FiltraParametros($"CveEstado = {DdlEstado.SelectedValue.ToEntero}")(0)("ClaveSATEstado").ToString).FiltraParametros($"CveMunicipio = {DdlMunicipio.SelectedValue.ToEntero}")(0)("ClaveSATMunicipio").ToString).FiltraParametros(If(TxtCP.Text.Trim.Length > 0, $"CP = {TxtCP.Text}", "")) + DdlColonia.DataBind() + + + + End If DdlLocalidad.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) DdlLocalidad.SelectedValueExist(-1) + DdlColonia.Items.Insert(0, New ListItem("Seleccione Una", "-1")) + DdlColonia.SelectedValueExist(-1) + + UpAddChofer.Update() End Sub @@ -300,7 +306,7 @@ Partial Class Acarreos_CatChoferes Protected Sub DdlColonias_selectedindexchange(sender As Object, e As EventArgs) - If DdlColonias.txtValue.Value.ToEntero > 0 Then + If DdlColonia.SelectedValue.ToEntero > 0 Then validaCodigoPostal() End If @@ -311,7 +317,7 @@ Partial Class Acarreos_CatChoferes Dim CPTxt As Integer = TxtCP.Text.ToEntero() - Dim CveColonia As Integer = DdlColonias.txtValue.Value.ToEntero + Dim CveColonia As Integer = DdlColonia.SelectedValue.ToEntero If CPTxt > 0 And CveColonia > 0 Then Dim CP As Integer = GlobalDTColonia(-1).FiltroPrimeroValor("CP", $"CveColonia = {CveColonia}") @@ -322,4 +328,7 @@ Partial Class Acarreos_CatChoferes End Sub + Protected Sub DdlColonia_SelectedIndexChanged(sender As Object, e As EventArgs) + validaCodigoPostal() + End Sub End Class diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 95e7c7ae0..389ad3700 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -7284,8 +7284,8 @@ Public Class ClsPaginas RutaFormatoDefault = String.Format("Empresas\Grales\Formatos\{0}.rdlc", NombreArchivo) Case "Tra" NombreArchivo = "Traspaso" - NombreArchivoDescarga = "Traspaso" - TipoDocumento = "Traspaso" + NombreArchivoDescarga = "Traslado" + TipoDocumento = "Traslado" Dim ObjInv As New ClsInventarios Dim AlmOrigen As String = "" diff --git a/Bancos/Creditos.aspx.vb b/Bancos/Creditos.aspx.vb index b82881c22..6690811f6 100644 --- a/Bancos/Creditos.aspx.vb +++ b/Bancos/Creditos.aspx.vb @@ -1130,15 +1130,21 @@ Partial Class Bancos_Creditos Else Row("Intereses") = IPmt(Tasa, i.ToString.ToDouble, TxtPlazo.Text.ToDouble, TxtTotalCredito.Text.ToDouble) * -1 Row("Capital") = PPmt(Tasa, i, TxtPlazo.Text.ToDouble, TxtTotalCredito.Text.ToDouble) * -1 'TxtMensualidad.Text.ToDouble - Row("Intereses").ToString.ToDouble + 'Row("Capital") = TxtMensualidad.Text.ToDouble - Row("Intereses").ToString.ToDouble ' Row("IVA") = 0.0 End If Row("SaldoInsoluto") = If(i > 1, DTAmortizacion(i - 2)("SaldoInsoluto").ToString.ToDouble, TxtTotalCredito.Text.ToDouble) - If(i > 1, DTAmortizacion(i - 2)("Capital").ToString.ToDouble, 0) + Row("IVACapital") = Row("Capital").ToString.ToDouble * TxtIVA.Text.ToDouble / 100 Row("IVAIntereses") = Row("Intereses").ToString.ToDouble * TxtIVA.Text.ToDouble / 100 Row("IVASeguro") = Row("Seguro").ToString.ToDouble * TxtIVA.Text.ToDouble / 100 + Row("ImportePago") = 0 + + Row("Mensualidad") = Row("Capital").ToString.ToDecimal + Row("Intereses").ToString.ToDecimal + Row("Seguro").ToString.ToDecimal + Row("IVACapital").ToString.ToDecimal + Row("IVAIntereses").ToString.ToDecimal + Row("IVASeguro").ToString.ToDecimal + DTAmortizacion.Rows.Add(Row) Next diff --git a/Planeacion/CatSubProyectos.aspx b/Planeacion/CatSubProyectos.aspx index a0f58e6cf..dece0daea 100644 --- a/Planeacion/CatSubProyectos.aspx +++ b/Planeacion/CatSubProyectos.aspx @@ -298,7 +298,7 @@
    - + @@ -308,7 +308,7 @@
    - + @@ -323,7 +323,7 @@
    - + @@ -345,7 +345,7 @@
    - + diff --git a/Ventas/Clientes.aspx b/Ventas/Clientes.aspx index ff7da4542..20a55e5fc 100644 --- a/Ventas/Clientes.aspx +++ b/Ventas/Clientes.aspx @@ -5087,7 +5087,7 @@
    - + @@ -5097,7 +5097,7 @@
    - + @@ -5112,7 +5112,7 @@
    - + @@ -5136,7 +5136,7 @@
    - + From af5be055877bb64d3e7003956484fe7be7a1de1c Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 3 Nov 2021 16:14:13 -0700 Subject: [PATCH 37/39] mensaje no coincide mensualidad --- Bancos/Creditos.aspx.vb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Bancos/Creditos.aspx.vb b/Bancos/Creditos.aspx.vb index 6690811f6..6cf2c2d90 100644 --- a/Bancos/Creditos.aspx.vb +++ b/Bancos/Creditos.aspx.vb @@ -1115,6 +1115,9 @@ Partial Class Bancos_Creditos Dim Row As DataRow = Nothing DTAmortizacion.Rows.Clear() + + Dim MensajeImportesIncorrectos As Boolean = False + For i = 1 To TxtPlazo.Text.ToEntero Row = DTAmortizacion.NewRow() @@ -1142,9 +1145,17 @@ Partial Class Bancos_Creditos Row("ImportePago") = 0 - Row("Mensualidad") = Row("Capital").ToString.ToDecimal + Row("Intereses").ToString.ToDecimal + Row("Seguro").ToString.ToDecimal + Row("IVACapital").ToString.ToDecimal + Row("IVAIntereses").ToString.ToDecimal + Row("IVASeguro").ToString.ToDecimal + Dim ImporteMensualidad As Decimal = Row("Capital").ToString.ToDecimal + Row("Intereses").ToString.ToDecimal + Row("Seguro").ToString.ToDecimal + Row("IVACapital").ToString.ToDecimal + Row("IVAIntereses").ToString.ToDecimal + Row("IVASeguro").ToString.ToDecimal + + Dim diferencia As Decimal = Math.Abs(ImporteMensualidad - TxtMensualidad.Text.ToDecimal) + If diferencia > 1 And Not MensajeImportesIncorrectos Then + Alert("El calculo de la mensualiadad Capital, Interes, seguro, IVA Capital, IVA Interes, IVA Seguro no coincide.", TipoMensaje.MsgAdvertencia) + MensajeImportesIncorrectos = True + End If + + DTAmortizacion.Rows.Add(Row) Next From ab2c44d7cac60ddba14b5038a023d5ac2dfe291a Mon Sep 17 00:00:00 2001 From: rakcsle Date: Fri, 5 Nov 2021 11:46:46 -0700 Subject: [PATCH 38/39] RepAnomalias Descarga Coincidentes --- Inventarios/RepAnomalias.aspx | 10 +++++----- Inventarios/RepAnomalias.aspx.vb | 10 ++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Inventarios/RepAnomalias.aspx b/Inventarios/RepAnomalias.aspx index a1acbb482..f759dee3e 100644 --- a/Inventarios/RepAnomalias.aspx +++ b/Inventarios/RepAnomalias.aspx @@ -84,12 +84,12 @@
  • Exporta a Excel Productos que Sobran
  • - <%--
  • - Exporta Faltantes + +
  • + Exporta a Excel Productos Coincidentes
  • -
  • - Exporta Sobrantes -
  • --%> + +
  • diff --git a/Inventarios/RepAnomalias.aspx.vb b/Inventarios/RepAnomalias.aspx.vb index a3a2ca10b..3eab0765d 100644 --- a/Inventarios/RepAnomalias.aspx.vb +++ b/Inventarios/RepAnomalias.aspx.vb @@ -376,9 +376,16 @@ Partial Class Inventarios_RepAnomalias GvF.ExportToExcel("Reporte de Inventario Fisico - Productos que Faltan " & Now.ToShortDateString) End Sub + Private Sub ImgExcel2_Click(sender As Object, e As EventArgs) Handles ImgExcel2.Click GvS.ExportToExcel("Reporte de Inventario Fisico - Productos que Sobran " & Now.ToShortDateString) End Sub + + + Private Sub ImgExcelProdcutosCoinciden_Click(sender As Object, e As EventArgs) Handles ImgExcelProdcutosCoinciden.Click + GvC.ExportToExcel("Reporte de Inventario Fisico - Productos Coincidentes " & Now.ToShortDateString) + End Sub + #End Region Private Sub BanderaSerieLoteCad(Gv As GridView, resultado As DataTable) @@ -537,4 +544,7 @@ Partial Class Inventarios_RepAnomalias Next End Sub + + + End Class From 97e0543c813821a15f91c65e1709c51f00a9c202 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 8 Nov 2021 10:49:08 -0700 Subject: [PATCH 39/39] Compras prodcutos servicios agrupador --- App_Code/ClsInventarios.vb | 6 +- Compras/RepProductosServicios.aspx.vb | 9 +- Compras/RepProductosServiciosDetalle.aspx.vb | 6 + .../RepEstadoResultadosPorSegmento.aspx.vb | 3 +- Contabilidad2/RepEstadoActividades.aspx.vb | 8 +- Empresas/160/Formatos/Factura.rdlc | 16 +- Inventarios/RepAnomalias.aspx | 131 ++++++++++-- Inventarios/RepAnomalias.aspx.vb | 201 +++++++++++++----- 8 files changed, 285 insertions(+), 95 deletions(-) diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index 605070a2a..34bdd0d95 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -2906,13 +2906,14 @@ Public Class ClsInventarios Return Retorno End Function - Public Function GetInventarioFisicoResultados(CveInventarioFisico As Integer, CveEmpresa As Integer, Optional GPO As Integer = 1) As Boolean + Public Function GetInventarioFisicoResultados(CveInventarioFisico As Integer, CveEmpresa As Integer, Optional GPO As Integer = 1, Optional Opcion As Integer = 1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Inv_InventarioFisicoResultadosGet") With SqlAdapter.SelectCommand.Parameters .Add("@CveInventarioFisico", SqlDbType.Int).Value = CveInventarioFisico .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@GPO", SqlDbType.Int).Value = GPO + .Add("@Opcion", SqlDbType.Int).Value = Opcion End With Try SqlAdapter.Fill(Data) @@ -2923,13 +2924,14 @@ Public Class ClsInventarios Return Retorno End Function - Public Function GetInventarioFisicoResultadosAvance(CveInventarioFisico As Integer, CveEmpresa As Integer, Optional GPO As Integer = 1) As Boolean + Public Function GetInventarioFisicoResultadosAvance(CveInventarioFisico As Integer, CveEmpresa As Integer, Optional GPO As Integer = 1, Optional Opcion As Integer = 1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Inv_InventarioFisicoResultadoAvance") With SqlAdapter.SelectCommand.Parameters .Add("@CveInventarioFisico", SqlDbType.Int).Value = CveInventarioFisico .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@GPO", SqlDbType.Int).Value = GPO + .Add("@Opcion", SqlDbType.Int).Value = Opcion End With Try SqlAdapter.Fill(Data) diff --git a/Compras/RepProductosServicios.aspx.vb b/Compras/RepProductosServicios.aspx.vb index bed86756b..b3d4480b2 100644 --- a/Compras/RepProductosServicios.aspx.vb +++ b/Compras/RepProductosServicios.aspx.vb @@ -191,6 +191,13 @@ Partial Class Compras_RepProductosServicios DdlGrupo.Items.Insert(7, New ListItem("Proveedor", "10")) DdlGrupo.Items.Insert(8, New ListItem("Usuario", "11")) DdlGrupo.Items.Insert(9, New ListItem("Estatus Fact.", "12")) + + 'Agrega el grupo si es una empresa Agricola + If UsuarioActual.Empresa.Funcionalidad(590).ToString.ToEntero = 1 Then + DdlGrupo.Items.Insert(9, New ListItem("Cultivo", "15")) + End If + + DdlGrupo.DataBind() DdlGrupo.SelectedValueExist("8") End Sub @@ -296,7 +303,7 @@ Partial Class Compras_RepProductosServicios Protected Sub GvDatos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvDatos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then - If DdlGrupo.SelectedValue.ToEntero < 13 Then + If DdlGrupo.SelectedValue.ToEntero < 13 Or DdlGrupo.SelectedValue.ToEntero = 15 Then If e.Row.DBCampo("GpoID") = "1" Then e.Row.Cells(0).Text = e.Row.DBCampo("Moneda") e.Row.CssClass = "Totales" diff --git a/Compras/RepProductosServiciosDetalle.aspx.vb b/Compras/RepProductosServiciosDetalle.aspx.vb index 9e444510f..879869d8f 100644 --- a/Compras/RepProductosServiciosDetalle.aspx.vb +++ b/Compras/RepProductosServiciosDetalle.aspx.vb @@ -296,6 +296,12 @@ Partial Class Compras_RepProductosServiciosDetalle DdlGrupo.Items.Insert(7, New ListItem("Proveedor", "10")) DdlGrupo.Items.Insert(8, New ListItem("Usuario", "11")) DdlGrupo.Items.Insert(9, New ListItem("Estatus Fact.", "12")) + + 'Agrega el grupo si es una empresa Agricola + If UsuarioActual.Empresa.Funcionalidad(590).ToString.ToEntero = 1 Then + DdlGrupo.Items.Insert(9, New ListItem("Cultivo", "15")) + End If + DdlGrupo.DataBind() DdlGrupo.SelectedValueExist("8") End Sub diff --git a/Contabilidad/RepEstadoResultadosPorSegmento.aspx.vb b/Contabilidad/RepEstadoResultadosPorSegmento.aspx.vb index a62d5c72a..f1953d5d4 100644 --- a/Contabilidad/RepEstadoResultadosPorSegmento.aspx.vb +++ b/Contabilidad/RepEstadoResultadosPorSegmento.aspx.vb @@ -269,9 +269,10 @@ Partial Class Contabilidad_RepEstadoResultadosPorSegmento If DSDatos IsNot Nothing AndAlso DSDatos.Tables.Count = 2 Then Try - HDSegmentos.Value = DSDatos.Tables(2).Rows(0)(0).ToString + liLnkDescarPersonalizado.Visible = True + Catch ex As Exception End Try diff --git a/Contabilidad2/RepEstadoActividades.aspx.vb b/Contabilidad2/RepEstadoActividades.aspx.vb index c9d8051e6..4f11a4492 100644 --- a/Contabilidad2/RepEstadoActividades.aspx.vb +++ b/Contabilidad2/RepEstadoActividades.aspx.vb @@ -254,8 +254,8 @@ Partial Class AC_RepEstadoActividades End If If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString, DdlSubproyecto.SelectedValue) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString, DdlSubproyecto.SelectedValue) End If @@ -283,8 +283,8 @@ Partial Class AC_RepEstadoActividades End If If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString, DdlSubproyecto.SelectedValue) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString, DdlSubproyecto.SelectedValue) End If If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then diff --git a/Empresas/160/Formatos/Factura.rdlc b/Empresas/160/Formatos/Factura.rdlc index e33bc8fad..d5a7c40d2 100644 --- a/Empresas/160/Formatos/Factura.rdlc +++ b/Empresas/160/Formatos/Factura.rdlc @@ -1,5 +1,5 @@ - + 0 @@ -1368,19 +1368,6 @@ - - -