From 9e484d53bd593273dc01089eb1f8b257a15d11c0 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 5 Jul 2024 10:21:22 -0700 Subject: [PATCH 01/69] -- cambios en layout banamex --- Nomina/Nomina.aspx.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index 1b6816700..306718def 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -10275,7 +10275,7 @@ public partial class Nomina_Nomina2 : ClsPaginas SbErrores.AppendLine("Se detectaron los siguientes errores en la generación del layout"); - foreach (DataRow dRow in DTNomina.FiltraParametros("UPPER(BancoNombre) like '%BANAMEX%'").Rows) + foreach (DataRow dRow in DTNomina.FiltraParametros(" (BancoNombre) like '%BANAMEX%'").Rows) { //string RFC = dRow["RFC"].ToString(); string Nombre = dRow["Nombre"].ToString(); @@ -10318,7 +10318,7 @@ public partial class Nomina_Nomina2 : ClsPaginas //REGISTRO DE CONTROL - IMPORTACIÓN var TipoRegistro = "1"; - var NumeroCliente = RowCuenta["Convenio"].ToString().Trim().PadLeft(12, '0'); //CONVENIO + var NumeroCliente = RowCuenta["ConvenioPagoElectronico"].ToString().Trim().PadLeft(12, '0'); //CONVENIO var Fecha = TxtModalLayoutBancosFecha.Text.ToDate(); var FechaPago = $"{Fecha.Day.ToString().PadLeft(2, '0')}{Fecha.ToString("MM")}{Fecha.Year.ToString().Replace("20", "")}"; @@ -10346,7 +10346,8 @@ public partial class Nomina_Nomina2 : ClsPaginas //REGISTRO DE CARGOS O ABONOS INDIVIDUALES - IMPORTACIÓN int Count = 1; - foreach (DataRow dRow in DTNomina.Rows) + + foreach (DataRow dRow in DTNomina.FiltraParametros(" (BancoNombre) like '%BANAMEX%'").Rows) { var TipoReg3 = "3"; //Registro de Movtos. Individuales var TipoOpe3 = "0"; //0 = Si es Abono, 1 = Si es Cargo (solo aplica para cobros) From 1609c192efd2a6810ae5d0eb9308430e91ea01ac Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 5 Jul 2024 10:21:36 -0700 Subject: [PATCH 02/69] --FIX error de compilacion ventas --- Ventas/Ventas.aspx.vb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index a8a036ad3..e1d1b88a6 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -25160,9 +25160,13 @@ Partial Class Ventas Else DdlPS_SelectedIndexChanged(Nothing, Nothing) - Dim drr As DataRow = GlobalDTClientesSucursales(UsuarioActual.CveEmpresa, CveCliente).FiltroPrimero($"CveClienteSucursal={DdlSucursalCliente.SelectedValue}") + End If + End Sub + Protected Sub OrdenarGvPS(ByVal sender As Object, ByVal e As EventArgs) + + For Each row As GridViewRow In GvPS.Rows TmpDT.Rows(row.RowIndex)("Orden") = row.FCTextBox("TxtOrden").Text.ToEntero() - Next + Next Dim resultados = From OrdenDT In TmpDT Order By OrdenDT("Orden").ToString().ToEntero() From 7495d64282e64c5d2c0accef0918600211b3cdfa Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 5 Jul 2024 11:21:13 -0700 Subject: [PATCH 03/69] --FIX. nomina banamex --- Nomina/Nomina.aspx.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index ae3ec08ab..9a213e269 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -10433,14 +10433,15 @@ public partial class Nomina_Nomina2 : ClsPaginas var StrImporte = Importe.ToString("0000000000000000.00").Replace(".", ""); var StrTipoCuenta = "03";// 01- Cheques / CLABE, 03=Plástico var StrCuenta = BancoNumCuenta.Trim().PadLeft(20, '0'); //USARA TARJETA DE DEBITO - var ReferenciaAlfa = ("").PadRight(40); //No se ocupa si es nomina banamex + var ReferenciaAlfa = (dRow["Codigo"].ToString()).PadRight(10); //si banamex debe ser de 10 digitos, y agregar 30 espacios + var EspacioRefBen = ("").PadRight(30); var Beneficiario = ($"{Nombres},{APaterno}/{AMaterno}").PadRight(55); - var Inst3 = ("").PadRight(40); + var Inst3 = ("PAGO").PadRight(40); var DescTEF = ("").PadRight(24); - var ClaveBanco = ("").PadRight(4); //BANCOMER //No se ocupa si es nomina baname - var ReferenciaNum = dRow["Codigo"].ToString().PadRight(7, '0'); //QUE TOME DE LA CvePersonal como folio - var Plazo = "00"; // MISMO DIA - sb.AppendLine($"{TipoReg3}{TipoOpe3}{ClaveMoneda}{StrImporte}{StrTipoCuenta}{StrCuenta}{ReferenciaAlfa}{Beneficiario}{Inst3}{DescTEF}{ClaveBanco}{ReferenciaNum}{Plazo}00"); + var ClaveBanco = ("0000").PadRight(4); //No se ocupa si es nomina banamex + var ReferenciaNum = ("").PadRight(7, '0'); //QUE TOME DE LA CvePersonal como folio , SOLO PARA INTERBANCARIOS + var Plazo = ""; // 00 - MISMO DIA , 24 HRS + sb.AppendLine($"{TipoReg3}{TipoOpe3}{ClaveMoneda}{StrImporte}{StrTipoCuenta}{StrCuenta}{ReferenciaAlfa}{EspacioRefBen}{Beneficiario}{Inst3}{DescTEF}{ClaveBanco}{ReferenciaNum}{Plazo}00"); Count = Count + 1; } From ae5e54b5b3eb5c5a6eca0c9433d6b50847efcdfc Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 5 Jul 2024 11:32:32 -0700 Subject: [PATCH 04/69] --FIX. Ajuste importes nomina banamex --- Nomina/Nomina.aspx.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index 9a213e269..ee5bad2a3 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -10099,7 +10099,7 @@ public partial class Nomina_Nomina2 : ClsPaginas { if (objnom.GetDispersionnominaXLS(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) { - CrearLayoutNominaBanamex(objnom.DtResultados.Copy()); + CrearLayoutNominaBanamex(objnom.DtResultados.FiltraParametros(" (BancoNombre) like '%BANAMEX%'")); } } @@ -10345,7 +10345,7 @@ public partial class Nomina_Nomina2 : ClsPaginas SbErrores.AppendLine("Se detectaron los siguientes errores en la generación del layout"); - foreach (DataRow dRow in DTNomina.FiltraParametros(" (BancoNombre) like '%BANAMEX%'").Rows) + foreach (DataRow dRow in DTNomina.Rows) { //string RFC = dRow["RFC"].ToString(); string Nombre = dRow["Nombre"].ToString(); @@ -10417,7 +10417,7 @@ public partial class Nomina_Nomina2 : ClsPaginas //REGISTRO DE CARGOS O ABONOS INDIVIDUALES - IMPORTACIÓN int Count = 1; - foreach (DataRow dRow in DTNomina.FiltraParametros(" (BancoNombre) like '%BANAMEX%'").Rows) + foreach (DataRow dRow in DTNomina.Rows) { var TipoReg3 = "3"; //Registro de Movtos. Individuales var TipoOpe3 = "0"; //0 = Si es Abono, 1 = Si es Cargo (solo aplica para cobros) From ae69672fe36a26c7d3e01c37465a81bfe819a796 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 5 Jul 2024 12:01:49 -0700 Subject: [PATCH 05/69] -- div vale, visible siempre --- RH/Personal.aspx | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/RH/Personal.aspx b/RH/Personal.aspx index cf8e23ddf..34e9ae884 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -1615,10 +1615,14 @@ - - - -
+
+
+
+ + + +
+
@@ -1626,17 +1630,7 @@
-
-
- - - -
-
- - -
From 21a3b6fdc202b1b214726d8e4573e7fe36a3fdb8 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 5 Jul 2024 15:31:37 -0700 Subject: [PATCH 06/69] --FIX Num cargos, abonos --- Nomina/Nomina.aspx.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index ee5bad2a3..5c2ca42f5 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -10415,8 +10415,9 @@ public partial class Nomina_Nomina2 : ClsPaginas sb.AppendLine($"{TipoReg2}{TipoOpe2}{ClaveMoneda}{ImporteTotal}{TipoCuenta}{Sucursal}{NumCuenta}{Espacio}"); //REGISTRO DE CARGOS O ABONOS INDIVIDUALES - IMPORTACIÓN - int Count = 1; - + int Count = 0; + + decimal SumaImportes = 0; foreach (DataRow dRow in DTNomina.Rows) { var TipoReg3 = "3"; //Registro de Movtos. Individuales @@ -10443,15 +10444,19 @@ public partial class Nomina_Nomina2 : ClsPaginas var Plazo = ""; // 00 - MISMO DIA , 24 HRS sb.AppendLine($"{TipoReg3}{TipoOpe3}{ClaveMoneda}{StrImporte}{StrTipoCuenta}{StrCuenta}{ReferenciaAlfa}{EspacioRefBen}{Beneficiario}{Inst3}{DescTEF}{ClaveBanco}{ReferenciaNum}{Plazo}00"); - Count = Count + 1; + Count += 1; + SumaImportes += Importe; } //REGISTRO DE TOTALES - IMPORTACIÓN var TipoReg4 = "4"; + // LOS ABONOS A LOS EMPLEADOS var NumAbonos = Count.ToString("000000"); - var NumCargos = Count.ToString("000000"); + //EL CARGO QUE SE LE HIZO A LA CUENTA DE LA EMPRESA + var NumCargos = (1).ToString("000000"); + var StrImportes = SumaImportes.ToString("0000000000000000.00").Replace(".", ""); - sb.AppendLine($"{TipoReg4}{ClaveMoneda}{NumAbonos}{ImporteTotal}{NumCargos}{ImporteTotal}"); + sb.AppendLine($"{TipoReg4}{ClaveMoneda}{NumAbonos}{StrImportes}{NumCargos}{StrImportes}"); Response.Clear(); Response.ClearHeaders(); From c2f2c2b593161a4bd7c1815ec5dc65f33784b28a Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 09:42:27 -0700 Subject: [PATCH 07/69] -- cambio a decimal --- Bancos/ConciliacionesBancarias.aspx.vb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Bancos/ConciliacionesBancarias.aspx.vb b/Bancos/ConciliacionesBancarias.aspx.vb index 3b372de36..8394d6218 100644 --- a/Bancos/ConciliacionesBancarias.aspx.vb +++ b/Bancos/ConciliacionesBancarias.aspx.vb @@ -571,7 +571,7 @@ Partial Class Bancos_ConciliacionesBancariasaspx Dim Dt1 As New DataTable Dt1 = DtDatos.FiltraParametros($"FueConciliado = 0 And Tipo = 'Abono'") - Dim TotalDt1 As Double = Dt1.SUM("Importe") + Dim TotalDt1 As Decimal = Dt1.SUMD("Importe") Dim Row1 As DataRow = Dt1.NewRow Row1("Importe") = TotalDt1 @@ -581,7 +581,7 @@ Partial Class Bancos_ConciliacionesBancariasaspx Dim Dt2 As New DataTable Dt2 = DtDatosEdoCuenta.FiltraParametros($"FueConciliado = 0 And Tipo = 'Abono'") - Dim TotalDt2 As Double = Dt2.SUM("Importe") + Dim TotalDt2 As Decimal = Dt2.SUMD("Importe") Dim Row2 As DataRow = Dt2.NewRow Row2("Importe") = TotalDt2 @@ -591,7 +591,7 @@ Partial Class Bancos_ConciliacionesBancariasaspx Dim Dt3 As New DataTable Dt3 = DtDatos.FiltraParametros($"FueConciliado = 0 And Tipo = 'Cargo'") - Dim TotalDt3 As Double = Dt3.SUM("Importe") + Dim TotalDt3 As Decimal = Dt3.SUMD("Importe") Dim Row3 As DataRow = Dt3.NewRow Row3("Importe") = TotalDt3 @@ -601,7 +601,7 @@ Partial Class Bancos_ConciliacionesBancariasaspx Dim Dt4 As New DataTable Dt4 = DtDatosEdoCuenta.FiltraParametros($"FueConciliado = 0 And Tipo = 'Cargo'") - Dim TotalDt4 As Double = Dt4.SUM("Importe") + Dim TotalDt4 As Decimal = Dt4.SUMD("Importe") Dim Row4 As DataRow = Dt4.NewRow Row4("Importe") = TotalDt4 @@ -628,7 +628,7 @@ Partial Class Bancos_ConciliacionesBancariasaspx lrds.Add(rds4) params.Add(New ReportParameter("SaldoFinalEstadoCuenta", (TxtSaldoFinal.Text.FormatoNumero))) - Dim SaldoFinalLibros As Double = (TxtSaldoFinal.Text.ToDouble - TotalDt1 + TotalDt2 + TotalDt3 - TotalDt4) + Dim SaldoFinalLibros As Decimal = (TxtSaldoFinal.Text.ToDecimal - TotalDt1 + TotalDt2 + TotalDt3 - TotalDt4) params.Add(New ReportParameter("SaldoFinalLibros", SaldoFinalLibros.FormatoNumero)) Dim SaldoFinalContabilidad As Double = 0 From 3280d0e04ed7d0d31d09e351a04dfc2a30d7a584 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 09:43:10 -0700 Subject: [PATCH 08/69] - --- RH/Personal.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RH/Personal.aspx b/RH/Personal.aspx index 34e9ae884..b8ee1341a 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -1619,7 +1619,7 @@
- +
From 1982ec4aa614e87eed6a48de1c1615c3e2910aa2 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 09:43:24 -0700 Subject: [PATCH 09/69] =?UTF-8?q?--=20permiso=20para=20cancelaci=C3=B3n=20?= =?UTF-8?q?de=20contratos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Transportes/RepContratosCalendario.aspx | 6 ++--- Transportes/RepContratosCalendario.aspx.vb | 28 ++++++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index 04147c7a9..019ac22fc 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -447,7 +447,7 @@
Estatus:
- @@ -494,7 +494,7 @@ - +
@@ -726,7 +726,7 @@ $('#<%=TxtDolares.ClientID%>').val(event.Dolares); $('#<%=TxtPesos.ClientID%>').val(event.Pesos); $('#<%=TxtAnticipo.ClientID%>').val(event.Anticipo); - $('#<%=CveContrato.ClientID%>').val(event.id); + $('#<%=HdnCveContrato.ClientID%>').val(event.id); if (event.NombreComercial !== null) { diff --git a/Transportes/RepContratosCalendario.aspx.vb b/Transportes/RepContratosCalendario.aspx.vb index 5695af9fd..e49bcd659 100644 --- a/Transportes/RepContratosCalendario.aspx.vb +++ b/Transportes/RepContratosCalendario.aspx.vb @@ -28,6 +28,16 @@ Partial Class RepContratosCalendario ViewState("Contrato") = value End Set End Property + + Public Property CveContrato As Integer + Get + Return IfNull(ViewState("CveContrato"), "").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("CveContrato") = value + End Set + End Property + #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load @@ -53,6 +63,8 @@ Partial Class RepContratosCalendario End If GvContratos.DataSource = DtAvance + DdlEstatusContrato.Enabled = UsuarioActual.TienePermisoProceso(173) + ObjContratos.Dispose() GvContratos.DataBind() UpTitulos.Update() @@ -77,7 +89,8 @@ Partial Class RepContratosCalendario 'DATOS Dim strAF As New StringBuilder - For Each Row As DataRow In DtAvance.FiltraParametros("CodigoAF <> ''").Rows + 'se quitan los estatus cancelados + For Each Row As DataRow In DtAvance.FiltraParametros("CodigoAF <> '' AND TipoEstatus <> 3").Rows Dim obj As New JObject( New JProperty("category", Row("CodigoAF")), New JProperty("fromDate", Row("FechaInicial").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()), @@ -171,7 +184,6 @@ Partial Class RepContratosCalendario End Sub Protected Sub MostrarModal(sender As Object, e As System.EventArgs) - If HidModClienteNombre.Value = "" Then HidModClienteNombre.Value = GlobalDTCliente(UsuarioActual.CveEmpresa, -1, HidModCveCliente.Value.ToEntero).FiltroPrimeroValor("NombreComercial") End If @@ -182,8 +194,6 @@ Partial Class RepContratosCalendario DdlClientes.txtText.Value = HidModClienteNombre.Value DdlClientes.txtValue.Value = HidModCveCliente.Value - - UpModal.Update() RegistraScript("$('#ModalActualizar').modal('show');") @@ -192,11 +202,9 @@ Partial Class RepContratosCalendario Protected Sub UpdateContrato(sender As Object, e As EventArgs) Dim ObjContratos As New ClsContratos - ObjContratos.IniciaTransacSQL() - - Contrato = CveContrato.Value - - If ObjContratos.UpdateContratos(Contrato.ToEntero, TxtFolio.Text, TxtDescripcion.Text, "", -1, DdlClientes.SelectedValue.ToEntero, -1, TxtFechaSalida.Text.ToDate, TxtFechaRegreso.Text.ToDate, TxtUbicacion.Text, "", 10, -1, -1, -1, -1, "", "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False, TxtAnticipo.Text.ToDecimal, TxtPesos.Text.ToDecimal, TxtDolares.Text.ToDecimal, -1, 0, CveContratoTipo:=34, CveContratosEstatus:=DdlEstatusContrato.SelectedValue.ToEntero, CveChofer:=DdlChofer.SelectedValue.ToEntero, CveChofer2:=DdlChofer2.SelectedValue.ToEntero, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveAF:=DdlAF.SelectedValue.ToEntero, CantidadPasajeros:=TxtCantidadPasajeros.Text.ToEntero) Then + ObjContratos.IniciaTransacSQL() + + If ObjContratos.UpdateContratos(CveContrato, TxtFolio.Text, TxtDescripcion.Text, "", -1, DdlClientes.SelectedValue.ToEntero, -1, TxtFechaSalida.Text.ToDate, TxtFechaRegreso.Text.ToDate, TxtUbicacion.Text, "", 10, -1, -1, -1, -1, "", "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False, TxtAnticipo.Text.ToDecimal, TxtPesos.Text.ToDecimal, TxtDolares.Text.ToDecimal, -1, 0, CveContratoTipo:=34, CveContratosEstatus:=DdlEstatusContrato.SelectedValue.ToEntero, CveChofer:=DdlChofer.SelectedValue.ToEntero, CveChofer2:=DdlChofer2.SelectedValue.ToEntero, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveAF:=DdlAF.SelectedValue.ToEntero, CantidadPasajeros:=TxtCantidadPasajeros.Text.ToEntero) Then ObjContratos.Commit() Alert("Actualizado Correctamente.") Else @@ -221,7 +229,7 @@ Partial Class RepContratosCalendario TxtFechaRegreso.Text = Convert.ToDateTime(GvRow.DataKey("FechaFinal")).ToString("dd/MM/yyyy hh:mm tt") TxtMoneda.Text = GvRow.DataKey("CveMoneda") 'Requeridos - ViewState("Contrato") = GvRow.DataKey("CveContrato") + ViewState("CveContrato") = GvRow.DataKey("CveContrato") DdlAF.SelectedValue = GvRow.DataKey("CveAF") DdlChofer.SelectedValueExist(GvRow.DataKey("CveChofer")) DdlChofer2.SelectedValueExist(GvRow.DataKey("CveChofer2")) From 5072868473fdf58becca3e289f4ad1f79ce840e1 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 09:43:33 -0700 Subject: [PATCH 10/69] -- mejora --- Ventas/RepPedidosSTF.aspx | 166 ++++++++++++----------------------- Ventas/RepPedidosSTF.aspx.vb | 27 ++++-- 2 files changed, 77 insertions(+), 116 deletions(-) diff --git a/Ventas/RepPedidosSTF.aspx b/Ventas/RepPedidosSTF.aspx index ab70cdf03..b783ed353 100644 --- a/Ventas/RepPedidosSTF.aspx +++ b/Ventas/RepPedidosSTF.aspx @@ -15,25 +15,14 @@ - Reporte + Reporte de Pedidos -<%--
  • - Generar PDF -
  • -
  • - Generar Excel -
  • --%> +
  • Ver Dlls en pesos
  • -<%-- - -
  • - Ver Grafica -
  • -
    -
    --%> +
    @@ -84,108 +73,63 @@ -
    - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    - - - -
    -
    + + + +
    @@ -1630,7 +1626,17 @@
    +
    +
    + + + +
    +
    + + +
    diff --git a/RH/RepChecadorPreAsistencia.aspx.vb b/RH/RepChecadorPreAsistencia.aspx.vb index 45d5ddce5..5db66c296 100644 --- a/RH/RepChecadorPreAsistencia.aspx.vb +++ b/RH/RepChecadorPreAsistencia.aspx.vb @@ -189,6 +189,9 @@ Partial Class RH_RepChecadorPreAsistencia If Not Page.IsPostBack Then cargaEjercicios() CargaCombos() + + + End If ' GvBind() @@ -663,7 +666,7 @@ Partial Class RH_RepChecadorPreAsistencia Dim diaSemana As Integer = Fecha.DayOfWeek Dim Asistencia As Boolean = True - Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso) + Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso, dRow("CveTurno").ToString().ToEntero) Dim DiaLaboral As Boolean = Boolean.Parse(Horario(0)(0).ToString()) Dim HorarioEntrada As TimeSpan = TimeSpan.Parse(Horario(0)(1).ToString()) @@ -917,7 +920,7 @@ Partial Class RH_RepChecadorPreAsistencia ReRow("CveAsistenciasInasistencias") = CveAsistenciaInasistenciaFalta End If - Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso) + Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso, dRow("CveTurno").ToString().ToEntero) Dim DiaLaboral As Boolean = Boolean.Parse(Horario(0)(0).ToString()) If Not DiaLaboral Then @@ -1523,7 +1526,7 @@ Partial Class RH_RepChecadorPreAsistencia 'End Sub - Private Function HorarioDiario(Fecha As Date, DTHorarioPersonal As DataTable, DiaDescanso As Integer) As DataTable + Private Function HorarioDiario(Fecha As Date, DTHorarioPersonal As DataTable, DiaDescanso As Integer, CveTurno As Integer) As DataTable Dim respuesta As New DataTable respuesta.Columns.Add("TRABAJO", System.Type.GetType("System.Boolean")) @@ -1533,8 +1536,24 @@ Partial Class RH_RepChecadorPreAsistencia respuesta.Columns.Add("SALIDA", System.Type.GetType("System.TimeSpan")) Dim Drow As DataRow = respuesta.NewRow Dim drp As DataRow = Nothing + + + Dim EntradaTurno As String = "" + Dim SalidaTurno As String = "" + If DTHorarioPersonal.Rows.Count > 0 Then drp = DTHorarioPersonal(0) + Else + + Dim DTTemp As DataTable = GlobalDTTurno(UsuarioActual.CveEmpresa).FiltraParametros("CveTurno = " & CveTurno) + If DTTemp.Rows.Count > 0 Then + EntradaTurno = DTTemp.Rows(0)("HorarioDe").ToString + SalidaTurno = DTTemp.Rows(0)("HorarioA").ToString + Else + EntradaTurno = "00:00" + SalidaTurno = "09:00" + End If + End If Dim diaSemana As Integer = Fecha.DayOfWeek @@ -1545,59 +1564,59 @@ Partial Class RH_RepChecadorPreAsistencia Case 0 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Domingo").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Domingo").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("DomingoEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("DomingoEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("DomingoSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("DomingoEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("DomingoSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("DomingoSalida").ToString())) Exit Select Case 1 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Lunes").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Lunes").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("LunesEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("LunesEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("LunesSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("LunesEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("LunesSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("LunesSalida").ToString())) Exit Select Case 2 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Martes").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Martes").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MartesEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("MartesEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MartesSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MartesEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("MartesSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("MartesSalida").ToString())) Exit Select Case 3 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Miercoles").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Miercoles").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MiercolesEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("MiercolesEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MiercolesSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("MiercolesEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("MiercolesSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("MiercolesSalida").ToString())) Exit Select Case 4 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Jueves").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Jueves").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("JuevesEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("JuevesEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("JuevesSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("JuevesEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("JuevesSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("JuevesSalida").ToString())) Exit Select Case 5 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Viernes").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "true", drp("Viernes").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("ViernesEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("ViernesEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("ViernesSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("ViernesEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("ViernesSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("ViernesSalida").ToString())) Exit Select Case 6 Drow(0) = Boolean.Parse(If(IsNothing(drp), $"{(DiaDescanso <> diaSemana).ToString}", drp("Sabado").ToString())) 'Drow(0) = Boolean.Parse(If(IsNothing(drp), "False", drp("Sabado").ToString())) - Drow(1) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("SabadoEntrada").ToString())) + Drow(1) = TimeSpan.Parse(If(IsNothing(drp), EntradaTurno, drp("SabadoEntrada").ToString())) Drow(2) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("SabadoSalidaComida").ToString())) Drow(3) = TimeSpan.Parse(If(IsNothing(drp), "00:00", drp("SabadoEntradaComida").ToString())) - Drow(4) = TimeSpan.Parse(If(IsNothing(drp), "09:00", drp("SabadoSalida").ToString())) + Drow(4) = TimeSpan.Parse(If(IsNothing(drp), SalidaTurno, drp("SabadoSalida").ToString())) Exit Select End Select @@ -1780,7 +1799,7 @@ Partial Class RH_RepChecadorPreAsistencia Dim arrayComands As String() Dim Fecha As Date = FechaInicioPeriodo - + Dim Fecha2 As Date = New Date(2024, 7, 2) For x As Integer = 3 To 33 NombreLink = "LnkFecha" & CountFecha @@ -2710,7 +2729,7 @@ Partial Class RH_RepChecadorPreAsistencia Dim diaSemana As Integer = Fecha.DayOfWeek Dim Asistencia As Boolean = True - Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso) + Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso, dRow("CveTurno").ToString().ToEntero) Dim DiaLaboral As Boolean = Boolean.Parse(Horario(0)(0).ToString()) Dim HorarioEntrada As TimeSpan = TimeSpan.Parse(Horario(0)(1).ToString()) @@ -2955,7 +2974,7 @@ Partial Class RH_RepChecadorPreAsistencia ReRow("CveAsistenciasInasistencias") = CveAsistenciaInasistenciaFalta End If - Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso) + Dim Horario As DataTable = HorarioDiario(Fecha, DTHorarioPersonal, DiaDescanso, dRow("CveTurno").ToString().ToEntero) Dim DiaLaboral As Boolean = Boolean.Parse(Horario(0)(0).ToString()) If Not DiaLaboral Then From 019b9a48d8e98532353f1432ca2ed40b78492342 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 10:01:27 -0700 Subject: [PATCH 12/69] -- mejora --- OS/OrdenesServicios.aspx.vb | 66 ++++++++++--------------------------- 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/OS/OrdenesServicios.aspx.vb b/OS/OrdenesServicios.aspx.vb index 05494dc3e..287c33d28 100644 --- a/OS/OrdenesServicios.aspx.vb +++ b/OS/OrdenesServicios.aspx.vb @@ -652,28 +652,13 @@ Partial Class OS_OrdenesServicios DdlUsuarioAtendio.SelectedValueExist(CveTecnico) CargarEstatusDelUsuario(TipoEstatus) CveVenta = ObjOS.CveVenta - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then CvePedido = ObjOS.CveCotizacion + CveVenta = ObjOS.CveVenta End If - - - 'Dim validacionTieneEstatus As Integer = EstatusOSDelUsuario.FiltraParametros(String.Format("CveEstatusOrdenServicio = {0}", ObjOS.CveEstatusOrdenServicio)).Rows.Count - - 'If validacionTieneEstatus > 0 Then - ' DdlEstatusOS.Items.Clear() - ' DdlEstatusOS.DataSource = EstatusOSDelUsuario - ' DdlEstatusOS.DataBind() - 'Else CargaEstatusOS() - 'DdlEstatusOS.Enabled = False - 'End If - DdlEstatusOS.SelectedValue = ObjOS.CveEstatusOrdenServicio.ToString - 'If TipoEstatus = 2 Then - 'LnkTecnico.Visible = True - 'End If - If TipoEstatus = 3 Then 'DisableAll() @@ -703,14 +688,9 @@ Partial Class OS_OrdenesServicios DivEstatus.Visible = True DivMateriales.Visible = True ImgImprimir.Visible = True - - - TxtTelefono.Text = ObjOS.Telefono DdlModeloAuto.SelectedValueExist(ObjOS.CveModeloAuto) TxtAnio.Text = ObjOS.Año - - DdlMedico.SelectedValueExist(ObjOS.CveMedico) DdlProcedimiento.SelectedValueExist(ObjOS.CveProcedimiento) DdlTipoVenta.SelectedValueExist(ObjOS.CveTipoVenta) @@ -1300,10 +1280,9 @@ Partial Class OS_OrdenesServicios FechaCita = TxtFechaCita.Text.Replace(",", "").ToDateTime End If - - Dim ObjOrdenServicio As New ClsOS() Dim ObjGenerales As New ClsGenerales(ObjOrdenServicio.IniciaTransacSQL) + Dim ObjVenta As New ClsVentas(ObjOrdenServicio.IniciaTransacSQL) MensajeAlert = New StringBuilder Dim Errores As Boolean = False @@ -1354,7 +1333,6 @@ Partial Class OS_OrdenesServicios If Not ObjGenerales.AddUpdateCaracteristicasValores(CveCaracteristica, CveOpcion, Valor, UsuarioActual.CveUsuario, CveOSDetalle:=CveOsDetalle, CvePs:=CvePS) Then Errores = True End If - Next If UsuarioActual.Empresa.Funcionalidad(578) = "" Then @@ -1369,8 +1347,6 @@ Partial Class OS_OrdenesServicios End If Next End If - - Else Errores = True End If @@ -1378,8 +1354,6 @@ Partial Class OS_OrdenesServicios End If Next - - 'If Not Errores Then ' Dim TipoEstatusSeleccionado As Integer = EstatusOSDelUsuario.FiltroPrimeroValor("TipoEstatus", String.Format("CveEstatusOrdenServicio = {0}", DdlEstatusOS.SelectedValue), "Orden ASC").ToEntero @@ -1434,17 +1408,12 @@ Partial Class OS_OrdenesServicios Dim Especificaciones As String = Row("Especificaciones").ToString Dim ComentarioTecnico As String = Row("ComentarioTecnico").ToString Dim Cantidad As Integer = Row("Cantidad").ToString.ToEntero - - - Dim fname As String = "" If File.Exists(Row("Archivo").ToString) Then Dim Archivo As New System.IO.FileInfo("") fname = Archivo.Name End If - - Dim CveUsuarioEntrego As Integer = If(Entregar = True, UsuarioActual.CveUsuario, -1) Dim FechaEntrega As String = If(Entregar = True, NowADS().ToString("dd/MM/yyy"), "-1") Dim Consecutivo As Integer = Row("Consecutivo").ToString.ToEntero @@ -1457,20 +1426,15 @@ Partial Class OS_OrdenesServicios Else CveOSDetalle = ObjOrdenServicio.AddOrdenesServiciosDetalle(CveOS, CvePS, Cantidad, -1, CveUsuarioEntrego, Observaciones, SeSuperviso, SeFacturara, Estatus, CveCuentaEquipo, "-1", "-1", FechaEntrega, ComentarioTecnico, UsuarioActual.CveUsuario, Archivo:=fname) If Not CveOSDetalle > 0 Then Errores = True - End If - - If File.Exists(Row("Archivo").ToString) Then Dim Archivo As New System.IO.FileInfo("") If Archivo.Name <> "-1" Then 'Cambiar el nombre del archivo de CveUsuario-Consecutivo.ext a CveOS-Consecutivo.ext Dim ArchivoFinal As New System.IO.FileInfo(String.Format("{0}OS\Archivos\OS{1}-{2}{3}", UsuarioActual.Empresa.Ruta, CveOS, Consecutivo, System.IO.Path.GetExtension(Archivo.Extension))) - If ArchivoFinal.Exists() Then - ArchivoFinal.Delete() - End If + If ArchivoFinal.Exists() Then ArchivoFinal.Delete() 'Mover el archivo de los temporales a OS System.IO.File.Move(UsuarioActual.Empresa.Ruta & "\OS\Temp\" & Archivo.Name, UsuarioActual.Empresa.Ruta & "\OS\Archivos\" & ArchivoFinal.Name) @@ -1481,7 +1445,6 @@ Partial Class OS_OrdenesServicios End If End If - If TmpDTCaracteristica.FiltraParametros(String.Format("CveConsecutivoDetalle = {0}", Consecutivo)).Rows.Count > 0 Then For Each RowE As DataRow In TmpDTCaracteristica.FiltraParametros(String.Format("CveConsecutivoDetalle = {0}", Consecutivo)).Rows @@ -1512,12 +1475,21 @@ Partial Class OS_OrdenesServicios Next End If End If + End If + Next - - + 'ajustar + If UsuarioActual.Empresa.Funcionalidad(578) <> "" Then + If CvePedido > 0 AndAlso Not ObjVenta.UpdateDatosMedicosVenta(CvePedido, UsuarioActual.CveEmpresa, DdlMedico.SelectedValue.ToEntero, DdlProcedimiento.SelectedValue.ToEntero, + TxtPaciente.Text.Trim, TxtIdentificadorCliente.Text.Trim, TxtFolioAdicional.Text.Trim, TxtFechaCita.Text.ToDateTime) Then + Errores = True End If - Next + If CveVenta > 0 AndAlso Not ObjVenta.UpdateDatosMedicosVenta(CveVenta, UsuarioActual.CveEmpresa, DdlMedico.SelectedValue.ToEntero, DdlProcedimiento.SelectedValue.ToEntero, + TxtPaciente.Text.Trim, TxtIdentificadorCliente.Text.Trim, TxtFolioAdicional.Text.Trim, TxtFechaCita.Text.ToDateTime) Then + Errores = True + End If + End If Else Errores = True End If @@ -1526,7 +1498,6 @@ Partial Class OS_OrdenesServicios Errores = True End If - If Not Errores Then Dim TipoEstatusSeleccionado As Integer = EstatusOSDelUsuario.FiltroPrimeroValor("TipoEstatus", String.Format("CveEstatusOrdenServicio = {0}", DdlEstatusOS.SelectedValue), "Orden ASC").ToEntero @@ -1537,13 +1508,9 @@ Partial Class OS_OrdenesServicios If Not objEventos.FinalizaEvento(NowADS(), 3, "", -1, CveOS, UsuarioActual.CveUsuario) Then Errores = True End If - - End If End If - - If Not Errores Then ObjOrdenServicio.Commit() @@ -1557,6 +1524,7 @@ Partial Class OS_OrdenesServicios End If ObjOrdenServicio.Dispose() ObjGenerales.Dispose() + ObjVenta.Dispose() End Sub Protected Sub BtnBuscarEspecificaciones_Click(sender As Object, e As EventArgs) From 55e265f086a730bf088371f6797bcfd14027f9ba Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 6 Jul 2024 10:18:40 -0700 Subject: [PATCH 13/69] - quitar registro en log, que no procede --- App_Code/ClsBancos.vb | 3 --- 1 file changed, 3 deletions(-) diff --git a/App_Code/ClsBancos.vb b/App_Code/ClsBancos.vb index 8f973e376..176ed8ac9 100644 --- a/App_Code/ClsBancos.vb +++ b/App_Code/ClsBancos.vb @@ -1159,10 +1159,7 @@ Public Class ClsBancos End If End If Mensaje = ObjTimbrado.MensajeErrorCFDI - - GuardaLog(ObjTimbrado.MensajeErrorCFDI) Timbre = Nothing - Else GuardaLog(Mensaje) End If From 40f11382c3f886a8a31b5858a0f15c7755123497 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Sat, 6 Jul 2024 13:40:59 -0700 Subject: [PATCH 14/69] --Actualizar eventos desde diagrama de grantt --- Ashx/CargaEventos.ashx | 10 +- Transportes/RepContratosCalendario.aspx | 304 ++++++++++++--------- Transportes/RepContratosCalendario.aspx.vb | 8 +- 3 files changed, 181 insertions(+), 141 deletions(-) diff --git a/Ashx/CargaEventos.ashx b/Ashx/CargaEventos.ashx index ed78666f4..42e76b85e 100644 --- a/Ashx/CargaEventos.ashx +++ b/Ashx/CargaEventos.ashx @@ -1,4 +1,4 @@ -<%@ WebHandler Language="VB" Class="CargaEventos" %> +<%@ WebHandler Language="VB" Class="CargaEventos" %> Option Explicit Off Option Strict On @@ -488,7 +488,13 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState DT_SubProyectos.Columns.Add("backgroundColor") DT_EstatusOS.Columns.Add("", GetType(Integer)) - If ObjContratos.GetContratos(-1, usuarioActual_.CveEmpresa, TipoContrato:=34) Then + Dim cveContrato As Integer = -1 + + If context.Request("cveContrato") IsNot Nothing Then + cveContrato = context.Request("cveContrato").ToEntero() + End If + + If ObjContratos.GetContratos(cveContrato, usuarioActual_.CveEmpresa, TipoContrato:=34) Then If ObjContratos.DtResultados.Rows.Count > 0 Then diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index 04147c7a9..bd09289db 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -94,10 +94,10 @@ <%-- Cliente --%>
    -
    <%-- Estatus --%> @@ -116,7 +116,7 @@
    @@ -500,7 +500,7 @@
    - + @@ -627,7 +627,7 @@ series.columns.template.setAll({ templateField: "columnSettings", strokeOpacity: 0, - tooltipText: "{category}: {openValueX} - {valueX}" + tooltipText: "UNIDAD: {unidad} -- CONTRATO: {contrato} -- CÓDIGO: {category} -- DURACIÓN: {openValueX} - {valueX}" }); series.data.processor = am5.DataProcessor.new(root, { @@ -655,12 +655,27 @@ chart.set("scrollbarY", scrollbarY); + + //MOSTRAR MODAL DE CONTRATO AL HACER CLICK + series.columns.template.events.on("click", e => { + let cveContrato = e.target.dataItem.dataContext.cveContrato; + + $('#CveContrato').val(cveContrato); + + let url = '/Ashx/CargaEventos.ashx?METODO=contrato_transportes' ; + let parametros = '&cveContrato=' + cveContrato +'&U=' + '<%= UsuarioActual.CveUsuario %>' + '&E='+ '<%= UsuarioActual.CveEmpresa %>'+ '&tipoVista=' + '<%= RBTipoVista.Text %>' + '&CveUsuarioPara:' + $('#DdlTecnico').val(); + '&CveSubProyecto:' + $('#DdlSubProyecto').val(); + + fetch(url + parametros).then(response => response.json()).then(json => { + console.log(json); + updateEvent(json[0],null,false); + }).catch(err => console.log('Solicitud fallida', err)); + }); series.events.on("datavalidated", function (ev) { let cellSize = 45; if (TipoVista == 1) { - cellSize = 60; + cellSize = 60; } //let series = ev.target; //let chart = series.chart; @@ -671,7 +686,20 @@ // Set it on chart's container chart.root.dom.style.height = chartHeight + "px"; + + //ev.target.get("xAxis").zoomToValues(100, 200); }); + + //series.events.once("datavalidated", function(ev) { + + //}); + + //chart.events.on("ready", function () { + // dateAxis.zoomToDates( + // new Date(2024, 7, 4), + // new Date(2024, 7, 15) + // ); + //}) //root.language.setTranslationAny("May", "Mayo"); // Make stuff animate on load @@ -705,7 +733,7 @@ function selectDate(start, end, allDay) { } - function updateEvent(event, element) { + function updateEvent(event, element, esCalendario = true) { $('#<%=TxtCantidadPasajeros.ClientID%>').val(event.CantidadPasajeros); $('#<%=TxtFolio.ClientID%>').val(event.NumeroContrato); @@ -714,8 +742,12 @@ $('#<%=TxtUbicacion.ClientID%>').val(event.NombreAcercamiento); - - $('#<%=TxtFechaSalida.ClientID%>').val(formatearFechaISO(event.start._i)); + if (esCalendario) { + $('#<%=TxtFechaSalida.ClientID%>').val(formatearFechaISO(event.start._i)); + }else{ + $('#<%=TxtFechaSalida.ClientID%>').val(formatearFechaISO(event.start)); + } + $('#<%=TxtFechaRegreso.ClientID%>').val(formatearFechaISO(event.FechaFinal)); $('#<%=DdlClientes.ClientID%>').val(event.CveCliente); @@ -737,142 +769,142 @@ $('#HidModCveCliente').val(event.CveCliente); - $('#<%=BtnModal.ClientID%>').click(); + $('#<%=BtnModal.ClientID%>').click(); } - function formatearFechaISO(fechaISO) { - let fecha = new Date(fechaISO); + function formatearFechaISO(fechaISO) { + let fecha = new Date(fechaISO); - // Formatear la fecha en DD/MM/YYYY - let dia = fecha.getDate().toString().padStart(2, '0'); - let mes = (fecha.getMonth() + 1).toString().padStart(2, '0'); // getMonth() devuelve mes de 0-11 - let año = fecha.getFullYear(); + // Formatear la fecha en DD/MM/YYYY + let dia = fecha.getDate().toString().padStart(2, '0'); + let mes = (fecha.getMonth() + 1).toString().padStart(2, '0'); // getMonth() devuelve mes de 0-11 + let año = fecha.getFullYear(); - // Formatear la hora en formato 12 horas con AM/PM - let horas = fecha.getHours(); - let minutos = fecha.getMinutes().toString().padStart(2, '0'); - let periodo = 'a. m.'; - if (horas >= 12) { - periodo = 'p. m.'; - horas = horas > 12 ? horas - 12 : horas; // Convertir hora de formato 24 a 12 horas - } - if (horas === 0) horas = 12; // Medianoche se muestra como 12 a.m. - horas = horas.toString().padStart(2, '0'); + // Formatear la hora en formato 12 horas con AM/PM + let horas = fecha.getHours(); + let minutos = fecha.getMinutes().toString().padStart(2, '0'); + let periodo = 'a. m.'; + if (horas >= 12) { + periodo = 'p. m.'; + horas = horas > 12 ? horas - 12 : horas; // Convertir hora de formato 24 a 12 horas + } + if (horas === 0) horas = 12; // Medianoche se muestra como 12 a.m. + horas = horas.toString().padStart(2, '0'); - // Combinar la fecha y la hora - return `${dia}/${mes}/${año} ${horas}:${minutos}:00 ${periodo}`; - } - - function RadionButtonSelectedValueSet(name, SelectdValue) { - $('input[name="' + name + '"][value="' + SelectdValue + '"]').prop('checked', true); - } - - function updateEventOnDropResize(event, allDay) { - var eventToUpdate = { - id: event.id, - start: event.start - }; - - if (event.end === null) { - eventToUpdate.end = eventToUpdate.start; - } - else { - eventToUpdate.end = event.end; - } - var endDate; - if (!event.allDay) { - endDate = new Date(eventToUpdate.end + 60 * 60000); - endDate = endDate.toJSON(); - } - else { - endDate = eventToUpdate.end.toJSON(); + // Combinar la fecha y la hora + return `${dia}/${mes}/${año} ${horas}:${minutos}:00 ${periodo}`; } - eventToUpdate.start = eventToUpdate.start.toJSON(); - eventToUpdate.end = eventToUpdate.end.toJSON(); //endDate; - eventToUpdate.allDay = event.allDay; + function RadionButtonSelectedValueSet(name, SelectdValue) { + $('input[name="' + name + '"][value="' + SelectdValue + '"]').prop('checked', true); + } - PageMethods.ActualizaEvento(eventToUpdate, UpdateTimeSuccess); - } + function updateEventOnDropResize(event, allDay) { + var eventToUpdate = { + id: event.id, + start: event.start + }; - function eventDropped(event, dayDelta, minuteDelta, allDay, revertFunc) { - if ($(this).data("qtip")) $(this).qtip("destroy"); - updateEventOnDropResize(event); - } + if (event.end === null) { + eventToUpdate.end = eventToUpdate.start; + } + else { + eventToUpdate.end = event.end; + } + var endDate; + if (!event.allDay) { + endDate = new Date(eventToUpdate.end + 60 * 60000); + endDate = endDate.toJSON(); + } + else { + endDate = eventToUpdate.end.toJSON(); + } - function eventResized(event, dayDelta, minuteDelta, revertFunc) { - if ($(this).data("qtip")) $(this).qtip("destroy"); + eventToUpdate.start = eventToUpdate.start.toJSON(); + eventToUpdate.end = eventToUpdate.end.toJSON(); //endDate; + eventToUpdate.allDay = event.allDay; - updateEventOnDropResize(event); - } + PageMethods.ActualizaEvento(eventToUpdate, UpdateTimeSuccess); + } - function Calendario(mes = -1, anio = -1) { + function eventDropped(event, dayDelta, minuteDelta, allDay, revertFunc) { + if ($(this).data("qtip")) $(this).qtip("destroy"); + updateEventOnDropResize(event); + } + + function eventResized(event, dayDelta, minuteDelta, revertFunc) { + if ($(this).data("qtip")) $(this).qtip("destroy"); + + updateEventOnDropResize(event); + } + + function Calendario(mes = -1, anio = -1) { - let fechaActual = new Date(); - if (mes === -1) { - mes = fechaActual.getMonth() + 1; - } - if (anio === -1) { - anio = fechaActual.getFullYear(); - } + let fechaActual = new Date(); + if (mes === -1) { + mes = fechaActual.getMonth() + 1; + } + if (anio === -1) { + anio = fechaActual.getFullYear(); + } - let mesFormateado = ('0' + mes).slice(-2); - let fechaInicio = `${anio}-${mesFormateado}-01`; + let mesFormateado = ('0' + mes).slice(-2); + let fechaInicio = `${anio}-${mesFormateado}-01`; - var date = new Date(); - var d = date.getDate(); - var m = date.getMonth(); - var y = date.getFullYear(); - var h = {}; + var date = new Date(); + var d = date.getDate(); + var m = date.getMonth(); + var y = date.getFullYear(); + var h = {}; - //alert(fechaInicio); - if ($('#calendar').width() <= 400) { - $('#calendar').addClass("mobile"); - h = { - left: 'title, prev, next', - center: '', - right: 'today,month,agendaWeek,agendaDay' - }; - } else { - $('#calendar').removeClass("mobile"); + //alert(fechaInicio); + if ($('#calendar').width() <= 400) { + $('#calendar').addClass("mobile"); + h = { + left: 'title, prev, next', + center: '', + right: 'today,month,agendaWeek,agendaDay' + }; + } else { + $('#calendar').removeClass("mobile"); - h = { - left: 'title', - center: '', - right: 'prev,next,today,month,agendaWeek,agendaDay' - }; - } + h = { + left: 'title', + center: '', + right: 'prev,next,today,month,agendaWeek,agendaDay' + }; + } - $('#calendar').fullCalendar('destroy'); - $('#calendar').fullCalendar({ - defaultDate: fechaInicio, - header: h, - monthNames: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], - monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], - dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], - dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'], - buttonText: { - today: 'Hoy', - week: 'Semana', - month: 'Mes', - day: 'Día' - }, - eventClick: updateEvent, - selectable: true, - selectHelper: true, - select: selectDate, - editable: true, - minTime: "00:00:00", - maxTime: "24:00:00", - events: { - url: '/Ashx/CargaEventos.ashx', - type: 'GET', - data: { - U: ' <%= UsuarioActual.CveUsuario %>', + $('#calendar').fullCalendar('destroy'); + $('#calendar').fullCalendar({ + defaultDate: fechaInicio, + header: h, + monthNames: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], + monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], + dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], + dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'], + buttonText: { + today: 'Hoy', + week: 'Semana', + month: 'Mes', + day: 'Día' + }, + eventClick: updateEvent, + selectable: true, + selectHelper: true, + select: selectDate, + editable: true, + minTime: "00:00:00", + maxTime: "24:00:00", + events: { + url: '/Ashx/CargaEventos.ashx', + type: 'GET', + data: { + U: ' <%= UsuarioActual.CveUsuario %>', E: '<%= UsuarioActual.CveEmpresa %>', tipoVista: '<%= RBTipoVista.Text %>', METODO: 'contrato_transportes', @@ -896,24 +928,24 @@ }); } - function obtenerFechaInicio(mes = -1, anio = -1) { - let fechaActual = new Date(); + function obtenerFechaInicio(mes = -1, anio = -1) { + let fechaActual = new Date(); - if (mes === -1) { - mes = fechaActual.getMonth() + 1; // getMonth() es base 0, así que se suma 1 - } - if (anio === -1) { - anio = fechaActual.getFullYear(); - } + if (mes === -1) { + mes = fechaActual.getMonth() + 1; // getMonth() es base 0, así que se suma 1 + } + if (anio === -1) { + anio = fechaActual.getFullYear(); + } - let mesFormateado = ('0' + mes).slice(-2); + let mesFormateado = ('0' + mes).slice(-2); - let fechaInicio = `${anio}-${mesFormateado}-01`; + let fechaInicio = `${anio}-${mesFormateado}-01`; - return fechaInicio; - } + return fechaInicio; + } diff --git a/Transportes/RepContratosCalendario.aspx.vb b/Transportes/RepContratosCalendario.aspx.vb index 5695af9fd..8ab2c39c0 100644 --- a/Transportes/RepContratosCalendario.aspx.vb +++ b/Transportes/RepContratosCalendario.aspx.vb @@ -32,8 +32,8 @@ Partial Class RepContratosCalendario Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then - txtFechaI.Text = DateTime.Now.AddMonths(-1).ToShortDateString - txtFechaF.Text = DateTime.Now.AddDays(7).ToShortDateString + txtFechaI.Text = DateTime.Now.ToShortDateString + txtFechaF.Text = DateTime.Now.AddMonths(1).ToShortDateString InicializaCombos() InicializaCalendar() CargaDatos() @@ -85,7 +85,9 @@ Partial Class RepContratosCalendario New JProperty("columnSettings", New JObject( New JProperty("fill", String.Format("#{0:X6}", random.Next(16777216))) )), - New JProperty("task", Row("NombreAF")) + New JProperty("unidad", Row("NombreAF")), + New JProperty("cveContrato", Row("CveContrato")), + New JProperty("contrato", Row("NumeroContrato")) ) jsonData.Add(obj) strAF.AppendFormat("{0},", Row("CveAF")) From 608ce002e246f8da0e277ed17c50e11837af1d21 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 08:35:55 -0700 Subject: [PATCH 15/69] -- proceso para especificar folio de movto IE --- Bancos/DepositosCaja.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Bancos/DepositosCaja.aspx.vb b/Bancos/DepositosCaja.aspx.vb index f5244df41..0f8206a31 100644 --- a/Bancos/DepositosCaja.aspx.vb +++ b/Bancos/DepositosCaja.aspx.vb @@ -312,7 +312,7 @@ Partial Class Bancos_DepositosCaja 'End If 'código temporal, para claudia y toñita, monge, anadelia, alba,patricia - If UsuarioActual.CveUsuario.Contiene(1937, 2452, 3358, 3033, 2897, 2560) Then + If UsuarioActual.TienePermisoProceso(383) Then 'CveUsuario.Contiene(1937, 2452, 3358, 3033, 2897, 2560) Then FolioIE = TxtFolio.Text.ToEntero End If From 4f5aec24f1a32056b58eacd5f8be7ec40e8f6588 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Mon, 8 Jul 2024 14:40:33 -0700 Subject: [PATCH 16/69] --zoom a a diagrama segun filtros de fechas --- Transportes/RepContratosCalendario.aspx | 32 ++++++++++------------ Transportes/RepContratosCalendario.aspx.vb | 18 ++++++++---- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index aac9025d4..e099a267b 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -541,6 +541,7 @@ "December": "Diciembre", }; + var dateAxis; function cargaDiagramaGrant(data, categorias, TipoVista) { @@ -564,7 +565,7 @@ // Create chart // https://www.amcharts.com/docs/v5/charts/xy-chart/ var chart = root.container.children.push(am5xy.XYChart.new(root, { - panX: false, + panX: true, panY: false, wheelX: "panX", wheelY: "zoomX", @@ -599,12 +600,14 @@ yAxis.data.setAll(categorias); - var dateAxis = am5xy.DateAxis.new(root, { + dateAxis = am5xy.DateAxis.new(root, { baseInterval: { timeUnit: "minute", count: 1 }, renderer: am5xy.AxisRendererX.new(root, { minorGridEnabled: true, minGridDistance: 90 }) + //min: new Date(2024, 6, 15).getTime(), + //max: new Date(2024, 6, 31).getTime() }); var xAxis = chart.xAxes.push( @@ -627,7 +630,7 @@ series.columns.template.setAll({ templateField: "columnSettings", strokeOpacity: 0, - tooltipText: "UNIDAD: {unidad} -- CONTRATO: {contrato} -- CÓDIGO: {category} -- DURACIÓN: {openValueX} - {valueX}" + tooltipText: "UNIDAD: {category}-{unidad} \nCONTRATO: {contrato} \nDURACIÓN: {openValueX} - {valueX}" }); series.data.processor = am5.DataProcessor.new(root, { @@ -666,7 +669,6 @@ let parametros = '&cveContrato=' + cveContrato +'&U=' + '<%= UsuarioActual.CveUsuario %>' + '&E='+ '<%= UsuarioActual.CveEmpresa %>'+ '&tipoVista=' + '<%= RBTipoVista.Text %>' + '&CveUsuarioPara:' + $('#DdlTecnico').val(); + '&CveSubProyecto:' + $('#DdlSubProyecto').val(); fetch(url + parametros).then(response => response.json()).then(json => { - console.log(json); updateEvent(json[0],null,false); }).catch(err => console.log('Solicitud fallida', err)); }); @@ -687,29 +689,25 @@ // Set it on chart's container chart.root.dom.style.height = chartHeight + "px"; - //ev.target.get("xAxis").zoomToValues(100, 200); + // ev.target.get("xAxis").zoomToValues(new Date(2024,6,15).getTime(), new Date(2024,6,20).getTime()); }); - //series.events.once("datavalidated", function(ev) { - - //}); - - //chart.events.on("ready", function () { - // dateAxis.zoomToDates( - // new Date(2024, 7, 4), - // new Date(2024, 7, 15) - // ); - //}) - //root.language.setTranslationAny("May", "Mayo"); - // Make stuff animate on load // https://www.amcharts.com/docs/v5/concepts/animations/ series.appear(); chart.appear(1000, 100); + }); // end am5.ready() } + function zoomAxis(anioI,mesI,diaI,anioF,mesF,diaF) { + setTimeout(() => { + dateAxis.zoomToDates(new Date(anioI, mesI, diaI), new Date(anioF, mesF, diaF)); + }, 1500); + + } + var PrimeraCargaCalendario = true; var currentUpdateEvent; var addStartDate; diff --git a/Transportes/RepContratosCalendario.aspx.vb b/Transportes/RepContratosCalendario.aspx.vb index c8ae56d44..beaf9c67a 100644 --- a/Transportes/RepContratosCalendario.aspx.vb +++ b/Transportes/RepContratosCalendario.aspx.vb @@ -42,8 +42,8 @@ Partial Class RepContratosCalendario Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then - txtFechaI.Text = DateTime.Now.ToShortDateString - txtFechaF.Text = DateTime.Now.AddMonths(1).ToShortDateString + txtFechaI.Text = NowADS().FirstDayOfMonth.ToShortDateString() + txtFechaF.Text = GetLastDayOfMonth(NowADS()).ToShortDateString() InicializaCombos() InicializaCalendar() CargaDatos() @@ -71,6 +71,9 @@ Partial Class RepContratosCalendario End Sub + Public Shared Function GetLastDayOfMonth(ByVal dateTime As DateTime) As DateTime + Return New DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month)) + End Function Private Sub CargaCronograma(Optional TipoVista As Integer = -1) If DtAvance IsNot Nothing Then @@ -94,13 +97,14 @@ Partial Class RepContratosCalendario Dim obj As New JObject( New JProperty("category", Row("CodigoAF")), New JProperty("fromDate", Row("FechaInicial").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()), - New JProperty("toDate", Row("FechaFinal").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()), + New JProperty("toDate", Row("FechaFinal").ToString().ToDateTime.ToString("dd/MM/yyyy HH:mm").ToDateTime()), New JProperty("columnSettings", New JObject( New JProperty("fill", String.Format("#{0:X6}", random.Next(16777216))) )), New JProperty("unidad", Row("NombreAF")), New JProperty("cveContrato", Row("CveContrato")), - New JProperty("contrato", Row("NumeroContrato")) + New JProperty("contrato", Row("NumeroContrato")), + New JProperty("fechaFinalViaje", Row("FechaFinal").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm")) ) jsonData.Add(obj) strAF.AppendFormat("{0},", Row("CveAF")) @@ -117,8 +121,12 @@ Partial Class RepContratosCalendario ) jsonCategorias.Add(obj) Next + Dim FechaI = txtFechaI.Text.ToDateTime() + Dim FechaF = txtFechaF.Text.ToDateTime() - RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()},{TipoVista});", "A1") + Dim ScriptZoom = $"zoomAxis({FechaI.Year},{FechaI.Month - 1},{FechaI.Day},{FechaF.Year},{FechaF.Month - 1},{FechaF.Day});" + + RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()},{TipoVista});{ScriptZoom}", "A1") UPPGantt.Update() End If End Sub From d958a5e38d2558572afff98b830b2c801b0870bc Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:56:43 -0700 Subject: [PATCH 17/69] =?UTF-8?q?-=20impresi=C3=B3n=20de=20consola=20serie?= =?UTF-8?q?=20y=20pedal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Empresas/186/Formatos/Consola.rdlc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Empresas/186/Formatos/Consola.rdlc b/Empresas/186/Formatos/Consola.rdlc index dc935ddee..1b4775d5d 100644 --- a/Empresas/186/Formatos/Consola.rdlc +++ b/Empresas/186/Formatos/Consola.rdlc @@ -528,7 +528,7 @@ - + =Parameters!SerieConsola.Value @@ -804,7 +804,7 @@ - + =Parameters!SeriePedal.Value @@ -3051,6 +3051,18 @@ Municipio y/o Delegación: true ReportParameter1 + + String + true + true + ReportParameter1 + + + String + true + true + ReportParameter1 + From 8efd122004c958f7b40a7b89a576dc51f19eab0d Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:56:59 -0700 Subject: [PATCH 18/69] - --- General/SaldosIniciales.aspx.vb | 2 -- 1 file changed, 2 deletions(-) diff --git a/General/SaldosIniciales.aspx.vb b/General/SaldosIniciales.aspx.vb index 567f194cf..20b5f1f01 100644 --- a/General/SaldosIniciales.aspx.vb +++ b/General/SaldosIniciales.aspx.vb @@ -2625,7 +2625,6 @@ Partial Class General_SaldosIniciales Throw New Exception() End If End If - Else mensajeError.Append($"La unidad de medida no se reconoce para el producto servicio:{nuevaEntrada("CodigoPS")}") Throw New Exception() @@ -2650,7 +2649,6 @@ Partial Class General_SaldosIniciales Throw New Exception() Exit For End If - Next Catch ex As Exception If mensajeError.ToString = "" Then From fe23e4f15e7e6305ea16eebcb96fc160f09e30eb Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:57:48 -0700 Subject: [PATCH 19/69] =?UTF-8?q?--=20impresi=C3=B3n=20de=20consola?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/PopUpVerFactura.aspx.vb | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index 0fcf524a0..386792d7a 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -2714,6 +2714,7 @@ Partial Class PopUpVerFactura Dim NombreEntrego As String = ObjInventarios.DtResultados.FiltroPrimeroValor("Entrego") Dim CveAlmacen As Integer = ObjInventarios.CveAlmacen Dim Recibio As String = ObjInventarios.Recibio + Dim Guia As String = ObjInventarios.Guia Dim PuestoRecibio As String = ObjInventarios.PuestoRecibio Dim PuestoEnrego As String = ObjInventarios.PuestoEntrego Dim ResponsableCarga As String = ObjInventarios.ResponsableCarga @@ -2912,7 +2913,7 @@ Partial Class PopUpVerFactura PuestoEnrego, RazonSocial, ResponsableCarga, ResponsableRecibio, NombreCliente, CantidadProductos:=CantidadProductos, CantidadUsados:=CantidadUsados, CveTipoAlmacen:=CveTipoAlmacen, NombreEntrego:=NombreEntrego, CveConceptoMovRelacionado:=CveConceptoMovtoRelacionado, FolioRelacionado:=FolioRelacionado, UsuarioRegistro:=UsuarioCapturo, - Ruta:=Ruta, Supervisor:=Supervisor, Consola:=Consola) + Ruta:=Ruta, Supervisor:=Supervisor, Guia:=Guia, Consola:=Consola) End Sub Private Sub PUanacExtr(CveMoneda As Integer) 'preciounitario a moneda nacional o extranjera @@ -2931,7 +2932,7 @@ Partial Class PopUpVerFactura EstadoDestino As String, PaisDestino As String, CPDestino As String, FechaMovimiento As Date, NombreCapturo As String, PuestoRecibio As String, PuestoEntrego As String, RazonSocial As String, ResponsableCarga As String, ResponsableRecibio As String, NombreCliente As String, Optional CantidadProductos As Decimal = 0, Optional CantidadUsados As Decimal = 0, Optional CveTipoAlmacen As Integer = -1, Optional NombreEntrego As String = "", Optional CveConceptoMovRelacionado As Integer = -1, Optional FolioRelacionado As String = "", Optional UsuarioRegistro As String = "", - Optional Ruta As String = Nothing, Optional Supervisor As String = Nothing, Optional Consola As String = "-1") + Optional Ruta As String = Nothing, Optional Supervisor As String = Nothing, Optional Guia As String = "", Optional Consola As String = "-1") Select Case CveConcepto @@ -3617,22 +3618,20 @@ Partial Class PopUpVerFactura params.Add(New ReportParameter("Accion", "RECIBE")) 'Antes Trasladó params.Add(New ReportParameter("Observaciones", Observaciones)) - Dim DTCliente As New DataTable Dim SBDireccionO As New StringBuilder() Dim SBDireccionD As New StringBuilder() Dim CveCliente As Integer = 0 Dim CveDireccionEnvio As Integer = 0 Dim ClienteNombre As String = "", EnvioContacto As String = "", EnvioDireccion As String = "", EnvioColonia As String = "", EnvioCiudad As String = "", EnvioEstado As String = "", ClientePais As String = "", EnvioCP As String = "", Contrato As String = "", - Paqueteria As String = "", NumContrato As String = "", Guia As String = "", Documentacion As String = "" + Paqueteria As String = "", NumContrato As String = "", Documentacion As String = "" Dim CveContrato As Integer = 0 If DtMovimientos IsNot Nothing AndAlso DtMovimientos.Rows.Count > 0 Then CveContrato = DtMovimientos.FiltroPrimeroValor("CveContrato").ToEntero End If - - If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then CveCliente = DtMovimientos.FiltroPrimeroValor("CveCliente").ToEntero DTCliente = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltraParametros($"CveCliente = {CveCliente}") @@ -3644,12 +3643,11 @@ Partial Class PopUpVerFactura If Consola <> "-1" And Consola.Trim.Length > 0 Then RutaFormato = "{0}Formatos\Consola.rdlc" params.Add(New ReportParameter("Consola", Consola)) + params.Add(New ReportParameter("SerieConsola", Guia)) + params.Add(New ReportParameter("SeriePedal", Recibio)) End If - - Dim CveVentaConsulta As Integer = DtMovimientos.FiltroPrimeroValor("CveVenta").ToEntero - params.Add(New ReportParameter("Documentacion", DTCliente.FiltroPrimeroValor("Documentacion"))) Dim ObjVentas As New ClsVentas() @@ -3670,18 +3668,9 @@ Partial Class PopUpVerFactura params.Add(New ReportParameter("ClienteMunicipio", dtVentas.Rows(0)("SucClienteCiudad").ToString)) params.Add(New ReportParameter("ClienteCP", dtVentas.Rows(0)("CPCliente").ToString)) - - - - - End If ObjVentas.Dispose() - - - - End If If CveContrato > 0 Then From b9c9b9d5aa2e9f3fc421faef102a9cee7d87406b Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:57:58 -0700 Subject: [PATCH 20/69] -- mejora --- Transportes/RepContratosCalendario.aspx | 1 - Transportes/RepContratosCalendario.aspx.vb | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index 019ac22fc..8460b5abe 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -696,7 +696,6 @@ let mes = parseInt($('#<%=HidCurrentMonth.ClientID%>').val()); let anio = parseInt($('#<%=HidCurrentYear.ClientID%>').val()); - Calendario(mes,anio); }); diff --git a/Transportes/RepContratosCalendario.aspx.vb b/Transportes/RepContratosCalendario.aspx.vb index e49bcd659..a15b62a80 100644 --- a/Transportes/RepContratosCalendario.aspx.vb +++ b/Transportes/RepContratosCalendario.aspx.vb @@ -31,10 +31,10 @@ Partial Class RepContratosCalendario Public Property CveContrato As Integer Get - Return IfNull(ViewState("CveContrato"), "").ToString.ToEntero + Return HdnCveContrato.Value.ToEntero End Get Set(value As Integer) - ViewState("CveContrato") = value + HdnCveContrato.Value = value.ToString End Set End Property @@ -234,7 +234,8 @@ Partial Class RepContratosCalendario DdlChofer.SelectedValueExist(GvRow.DataKey("CveChofer")) DdlChofer2.SelectedValueExist(GvRow.DataKey("CveChofer2")) DdlEstatusContrato.SelectedValue = GvRow.DataKey("CveContratosEstatus") - + CveContrato = GvRow.DataKey("CveContrato").ToEntero + UpModal.Update() RegistraScript("$('#ModalActualizar').modal('show');") End Sub From 9f40cef63bb3b5c77d5ce5fa1fd17b7112a0e1f3 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:58:08 -0700 Subject: [PATCH 21/69] -- quita filtros --- Inventarios/PopUpBuscarMovto.aspx.vb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Inventarios/PopUpBuscarMovto.aspx.vb b/Inventarios/PopUpBuscarMovto.aspx.vb index 060e21c47..8ff678e65 100644 --- a/Inventarios/PopUpBuscarMovto.aspx.vb +++ b/Inventarios/PopUpBuscarMovto.aspx.vb @@ -76,10 +76,10 @@ Partial Class PopUpBuscarFolio End Sub Private Function ValidarFiltrosSeleccionados() As Boolean - If DdlAlmacen.SelectedValue.ToEntero > 0 Then Return True - If DdlTipoMovimiento.SelectedValue.ToEntero > 0 Then Return True - If TxtFolio.Text.Length > 0 Then Return True - Return False + 'If DdlAlmacen.SelectedValue.ToEntero > 0 Then Return True + 'If DdlTipoMovimiento.SelectedValue.ToEntero > 0 Then Return True + 'If TxtFolio.Text.Length > 0 Then Return True + Return True End Function #End Region From c55197c007a73b21295fc6b6c88c1d1f0850c449 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:58:26 -0700 Subject: [PATCH 22/69] =?UTF-8?q?--=20selecci=C3=B3n=20de=20serie=20e=20co?= =?UTF-8?q?nsola=20SMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregaAlmacen.aspx | 13 ++- Inventarios/EntregaAlmacen.aspx.vb | 123 +++++++++++++++-------------- 2 files changed, 76 insertions(+), 60 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx b/Inventarios/EntregaAlmacen.aspx index ebc97ad3a..b8eeeb2b6 100644 --- a/Inventarios/EntregaAlmacen.aspx +++ b/Inventarios/EntregaAlmacen.aspx @@ -266,9 +266,20 @@
    + + +
    +
    Consola
    +
    +
    +
    Pedal
    +
    +
    +
    + + - diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 23437744e..8a945b90a 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -321,14 +321,11 @@ Partial Class Inventarios_EntregaAlmacen End Set End Property - Private Property CargaBitacora As Boolean Get - If ViewState("CargaBitacora") Is Nothing Then ViewState("CargaBitacora") = False End If - Return Boolean.Parse(ViewState("CargaBitacora").ToString) End Get Set(value As Boolean) @@ -336,7 +333,6 @@ Partial Class Inventarios_EntregaAlmacen End Set End Property - Private Property BloqueCantidad As Boolean Get If ViewState("BloqueCantidad") Is Nothing Then @@ -348,9 +344,6 @@ Partial Class Inventarios_EntregaAlmacen ViewState("BloqueCantidad") = value End Set End Property - - - Private Property Adjunto As String Get If ViewState("Adjunto") Is Nothing Then @@ -364,8 +357,6 @@ Partial Class Inventarios_EntregaAlmacen End Set End Property - - #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load @@ -376,10 +367,8 @@ Partial Class Inventarios_EntregaAlmacen If UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 146, 119, 186) Then DdlAlmacen.AutoPostBack = True If UsuarioActual.Empresa.Funcionalidad(281).ToEntero() = 1 Then - TxtFecha.Enabled = False ImgFecha.Visible = False - End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then @@ -547,11 +536,9 @@ Partial Class Inventarios_EntregaAlmacen Alert("No se podrá realizar entrega de mercancía si no se les da salida a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Ventas.", TipoMensaje.MsgAdvertencia) Else BtnGuardar.Enabled = True - End If End If End If - ObjInventarios.Dispose() If DtPendientes IsNot Nothing Then @@ -641,7 +628,6 @@ Partial Class Inventarios_EntregaAlmacen Adjunto = "" BtnArchivoAdjunto.Visible = False - LbSurtida.Visible = False CveContrato = -1 CveSubProyecto = -1 @@ -651,7 +637,6 @@ Partial Class Inventarios_EntregaAlmacen BtnGuardar.Visible = True Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2,26)" - If UsuarioActual.CveSubProyecto = 8804 Then StrAlmacenes = "CveTipoAlmacen IN (1,2,12)" End If @@ -733,12 +718,9 @@ Partial Class Inventarios_EntregaAlmacen CveSubProyecto = drE("CveSubProyecto").ToString().ToEntero() EsInterno = CBool(DtDatos.Rows(0)("EsInterno").ToString()) CveDireccionEnvio = drE("CveDireccionEnvio").ToString.ToEntero - - Adjunto = drE("Adjunto").ToString() If Adjunto.Trim.Length > 0 Then - Dim ruta As String = HttpContext.Current.Request.ApplicationPath ruta = String.Format("{0}Ventas", UsuarioActual.Empresa.Ruta) ruta += $"/{Adjunto}" @@ -747,9 +729,6 @@ Partial Class Inventarios_EntregaAlmacen BtnArchivoAdjunto.Visible = True BtnArchivoAdjunto.Text = $"Adjunto: {Adjunto}" End If - - - End If If CveDireccionEnvio > 0 Then @@ -785,7 +764,6 @@ Partial Class Inventarios_EntregaAlmacen BtnGuardar.Visible = False End If - If CveAlmacen <= 0 Then DdlAlmacen.Items.Clear() If CveAlmacenTraspasoOrigen > 0 Then 'Not (EsDevolucionVenta = 1 And DtDatos.Rows(0)("TipoDocto").ToString() = "Rem" And UsuarioActual.Empresa.Funcionalidad(145) = "1") - ESTO ES PARA CUANDO SEA REMISION DE ENTREGA POR ADELANTADO FUNCIONA LA DEVOLUCION @@ -816,8 +794,49 @@ Partial Class Inventarios_EntregaAlmacen If Not DtDatos.Columns.Contains("Seleccionado") Then DtDatos.Columns.Add("Seleccionado", GetType(Boolean)) - If Not DtDatos.Columns.Contains("CantidadSeleccionada") Then DtDatos.Columns.Add("CantidadSeleccionada", GetType(Double)) - + If Not DtDatos.Columns.Contains("CantidadSeleccionada") Then DtDatos.Columns.Add("CantidadSeleccionada", GetType(Double)) + + If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso TipoMovimiento = 1 Then + TrConsola.Visible = False + ' valida que estén los productos + Dim cargapedales As Boolean = False + If DtDatos.COUNT("Codigo", "Codigo like '306%' OR Codigo like '404%' OR Codigo like '405%'") > 0 Then + '306, 404, 405, ARS-600 + DdlConsola.Items.Clear() + DdlConsola.Items.Add(New ListItem("A6-2106045-GM", "A6-2106045-GM")) + DdlConsola.Items.Add(New ListItem("A6-2101023-GM", "A6-2101023-GM")) + DdlConsola.Items.Add(New ListItem("A6-2994026-GM", "A6-2994026-GM")) + DdlConsola.Items.Add(New ListItem("A6-2203055-GM", "A6-2203055-GM")) + DdlConsola.Items.Add(New ListItem("A6-2304031-GM", "A6-2304031-GM")) + DdlConsola.Items.Add(New ListItem("A6-2304030-GM", "A6-2304030-GM")) + DdlConsola.Items.Add(New ListItem("RENTA", "RENTA")) + cargapedales = True + TrConsola.Visible = True + Consola = "ARS600" + End If + If DtDatos.COUNT("Codigo", "Codigo like '106%'") > 0 Then + '306, 404, 405, ARS-800, + DdlConsola.Items.Clear() + DdlConsola.Items.Add(New ListItem("A8-2205011-DM", "A8-2205011-DM")) + DdlConsola.Items.Add(New ListItem("RENTA", "RENTA")) + cargapedales = True + TrConsola.Visible = True + Consola = "ARS800" + End If + + If cargapedales Then + DdlPedales.Items.Clear() + DdlPedales.Items.Add(New ListItem("AJ-23040710-S", "AJ-23040710-S")) + DdlPedales.Items.Add(New ListItem("AJ-22110355-S", "AJ-22110355-S")) + DdlPedales.Items.Add(New ListItem("AJ-23040709-S", "AJ-23040709-S")) + DdlPedales.Items.Add(New ListItem("AJ-20050605-S", "AJ-20050605-S")) + DdlPedales.Items.Add(New ListItem("AJ-20111710-S", "AJ-20111710-S")) + DdlPedales.Items.Add(New ListItem("AJ-2106045-S", "AJ-2106045-S")) + DdlPedales.Items.Add(New ListItem("AJ-22980506-S", "AJ-22980506-S")) + DdlPedales.Items.Add(New ListItem("RENTA", "RENTA")) + End If + End If + If UsuarioActual.Empresa.Funcionalidad(280) = "1" Then FormaPaqueteria = DtDatos.Rows(0)("FormaPaqueteria").ToString().ToEntero() Dim FormaPaq As Integer = FormaPaqueteria @@ -1977,10 +1996,7 @@ Partial Class Inventarios_EntregaAlmacen End Sub - Private Sub GuardaVenta() - - ValidaUsaConsola() - + Private Sub GuardaVenta() Dim CantidadVenta As Decimal = 0 '' INICIA: VALIDACIONES @@ -2053,9 +2069,7 @@ Partial Class Inventarios_EntregaAlmacen If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then Cantidad += Gvr.FCTextBox("TbCantidadF").Text.ToDecimal End If - End If - End If Next @@ -2095,11 +2109,16 @@ Partial Class Inventarios_EntregaAlmacen Next End If End If - + Dim Guia As String = TxtGuia.Text.Trim + Dim Recibio As String = "" If EsDevolucionVenta = 1 Or TipoDocto.Contiene({"Ped"}) Then Dim ValidaSalidaCompleta As Boolean = Not (EsDevolucionVenta = 1 And TipoDocto.Contiene("Rem", "Ped")) 'LIMITAR EL NUMERO DE PARTIDAS QUE SE PUEDEN ENTREGAR If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then + If TrConsola.Visible Then + Guia = DdlConsola.SelectedItem.Text + Recibio = DdlPedales.SelectedItem.Text + End If 'SoloNumeros entrega 'SI EL CLIENTE ES OPERADORA DE HOSPITALES ANGELES SOLO SE PUEDEN RECIBIR MAXIMO 9 @@ -2116,7 +2135,6 @@ Partial Class Inventarios_EntregaAlmacen End If End If End If - ValidaSalidaCompleta = False End If @@ -2128,12 +2146,9 @@ Partial Class Inventarios_EntregaAlmacen Exit Sub End If Next - End If - End If - Dim EsInterno As Integer = -1 'If TipoDocto = "Ped" Then ' EsInterno = If(Me.EsInterno, 1, 0) @@ -2281,10 +2296,7 @@ Partial Class Inventarios_EntregaAlmacen If Dr("FechaCaducidad").ToString.Trim.Length > 0 AndAlso Dr("FechaCaducidad").ToString.Trim <> "-1" Then SerieLoteCaducidad = $"{SerieLoteCaducidad} Caducidad: { Dr("FechaCaducidad").ToString.Trim.ToDate.ToString("dd/MM/yyyy")}" End If - TextoError.AppendFormat(" - {0} Existencia: {1:#,##0.##} {2}
    ", Dr("CodigoPS"), Dr("Existencia"), If(SerieLoteCaducidad <> ",", SerieLoteCaducidad, "")) - - Next End If Else @@ -2303,7 +2315,6 @@ Partial Class Inventarios_EntregaAlmacen RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If - End If '' TERMINA: VALIDACIONES @@ -2332,7 +2343,7 @@ Partial Class Inventarios_EntregaAlmacen If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), CveConceptoSalidaSinCosto, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, Modulo:="RE/GSC1") + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, Modulo:="RE/GSC1") FolioSalida = ObjInventario.Folio If Not CveMovimientoSalida > 0 Then @@ -2382,7 +2393,7 @@ Partial Class Inventarios_EntregaAlmacen If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), CveConceptoSalidaSinCosto, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, Modulo:="RE/GSC3") + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, Modulo:="RE/GSC3") FolioSalida = ObjInventario.Folio If Not CveMovimientoSalida > 0 Then @@ -2401,7 +2412,6 @@ Partial Class Inventarios_EntregaAlmacen DtTraspasos.Rows.Add(DrMovto) End If - CantidadPendienteSinCosto = If(Dr1("ExistenciaFinal").ToString().ToDecimal > CantidadSaldoSinCosto, CantidadSaldoSinCosto, Dr1("ExistenciaFinal").ToString().ToDecimal) If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendienteSinCosto.ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, @@ -2414,7 +2424,6 @@ Partial Class Inventarios_EntregaAlmacen TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") Exit For End If - CantidadSaldoSinCosto -= CantidadPendienteSinCosto Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendienteSinCosto If CantidadSaldoSinCosto <= 0 Then Exit For @@ -2424,14 +2433,10 @@ Partial Class Inventarios_EntregaAlmacen Else ErrorMovInv = True End If - End If - CantidadSalidaSinCosto += Dr("CantidadTraspaso").ToString().ToDecimal() If ErrorMovInv Then Exit For - End If - Next 'ENTRADA POR TRASPASO A ENTREGA POR ADELANTADO @@ -2443,7 +2448,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(CveAlmacenExA, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then @@ -2524,7 +2529,7 @@ Partial Class Inventarios_EntregaAlmacen If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G1") FolioSalida = ObjInventario.Folio @@ -2578,7 +2583,7 @@ Partial Class Inventarios_EntregaAlmacen If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), + Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G2") FolioSalida = ObjInventario.Folio @@ -2631,7 +2636,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G3") FolioSalida = ObjInventario.Folio @@ -2690,7 +2695,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then @@ -2732,7 +2737,7 @@ Partial Class Inventarios_EntregaAlmacen End If If DtGarantias IsNot Nothing AndAlso DtGarantias.Rows.Count > 0 AndAlso CveAlmacenGarantia > 0 Then - CveMovimientoGarantia = ObjInventario.AddMovimiento(CveAlmacenGarantia, 14, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, Modulo:="EA/G5") + CveMovimientoGarantia = ObjInventario.AddMovimiento(CveAlmacenGarantia, 14, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, Modulo:="EA/G5") FolioGarantia = ObjInventario.Folio For Each RowGarantia As DataRow In DtGarantias.Rows @@ -2786,7 +2791,7 @@ Partial Class Inventarios_EntregaAlmacen Dim CveMovimientoDevolucionSinCosto As Integer = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 41, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida, - Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") Dim FolioDevSinCosto As Integer = ObjInventario.Folio If Not CveMovimientoDevolucionSinCosto > 0 Then @@ -2868,7 +2873,7 @@ Partial Class Inventarios_EntregaAlmacen ConceptoMovimiento = 41 End If - CveMovimiento = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, + CveMovimiento = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, Recibio:=Recibio, CveContrato:=CveContrato, CveAlmacenDestino:=tCveAlmacenTraspasoDestino, Modulo:="RE/G7") Folio = ObjInventario.Folio @@ -2969,7 +2974,7 @@ Partial Class Inventarios_EntregaAlmacen 'ENTRADA POR TRASPASO CUANDO ES REMISION If Not ErrorMovInv Then If tCveAlmacenTraspasoDestino > 0 AndAlso Not (TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1) Then ' TRASPASO CUANDO ES REMISION - CveMovimientoEntrada = ObjInventario.AddMovimiento(tCveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, + CveMovimientoEntrada = ObjInventario.AddMovimiento(tCveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G8") FolioEntrada = ObjInventario.Folio Dim ImporteAlmacen As Decimal = 0 @@ -3027,7 +3032,7 @@ Partial Class Inventarios_EntregaAlmacen If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString().ToEntero() Then CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=Dr("CveAlmacen").ToString().ToEntero(), Modulo:="RE/G9") FolioSalida = ObjInventario.Folio CveAlmacenApartado = Dr("CveAlmacen").ToString().ToEntero() @@ -3074,7 +3079,7 @@ Partial Class Inventarios_EntregaAlmacen CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), - CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, + CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=Guia, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G10") FolioEntrada = ObjInventario.Folio @@ -3220,7 +3225,7 @@ Partial Class Inventarios_EntregaAlmacen If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 AndAlso CveAlmacenVirtual > 0 AndAlso CveConceptoMovimientoVirtual > 0 Then CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, - Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveMovimientoRelacionado:=CveMovimientoRelacionadoVirtual, Modulo:="RE/G6") + Observaciones:=TxtObservaciones.Text.Trim, Guia:=Guia, CveMovimientoRelacionado:=CveMovimientoRelacionadoVirtual, Modulo:="RE/G6") FolioVirtual = ObjInventario.Folio If CveMovimientoVirtual > 0 Then From af7c801e848f4872dbe53ba6eb759660d3d747cf Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:59:34 -0700 Subject: [PATCH 23/69] -- nuevo proceso --- Bancos/DepositosCaja.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Bancos/DepositosCaja.aspx.vb b/Bancos/DepositosCaja.aspx.vb index 0f8206a31..0338bb999 100644 --- a/Bancos/DepositosCaja.aspx.vb +++ b/Bancos/DepositosCaja.aspx.vb @@ -52,7 +52,7 @@ Partial Class Bancos_DepositosCaja DdlCajaChica.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros(" CveTipoCuenta = 1", "", {"CveCuenta", "NumCuentaMoneda"}) DdlCajaChica.DataBind() 'código temporal, para claudia y toñita, monge, anadelia, alba,patricia - If UsuarioActual.CveUsuario.Contiene(1937, 2452, 3358, 3033, 2897, 2560) Then + If UsuarioActual.TienePermisoProceso(383) Then 'UsuarioActual.CveUsuario.Contiene(1937, 2452, 3358, 3033, 2897, 2560) Then DdlCajaChica.Items.Add(New ListItem("Todas", "-1")) DdlCuentaDeposito.Items.Add(New ListItem("Cuadre Solidaridad", "7850")) DdlCuentaDeposito.Items.Add(New ListItem("Cuadre Obregón", "7853")) From 57dbd54f69570be4c96a9b83f416b37a77b5825f Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 21:59:55 -0700 Subject: [PATCH 24/69] -- carga de marca --- Ventas/PV.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/PV.aspx.vb b/Ventas/PV.aspx.vb index 1dd7fefbf..31faf3fc8 100644 --- a/Ventas/PV.aspx.vb +++ b/Ventas/PV.aspx.vb @@ -1353,6 +1353,7 @@ Partial Class PV DdlMarcaPS.DataSource = GlobalDTGralMarcas(UsuarioActual.CveEmpresa) DdlMarcaPS.DataBind() + DdlMarcaPSAjuste.DataSource = GlobalDTGralMarcas(UsuarioActual.CveEmpresa) DdlMarcaPSAjuste.DataBind() DdlMarcaUsado.DataBind() @@ -3344,7 +3345,6 @@ Partial Class PV End If ObjVentas.Dispose() - Dim ObjInventarios As New ClsInventarios Dim PU As Decimal = 0 For Each dr As DataRow In TmpDT.Rows From e46e238bbff9c9ae4db5758ff1a281a9c5ea545b Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 22:32:17 -0700 Subject: [PATCH 25/69] Carta Porte 3.1 --- App_Code/Timbrado.vb | 176 +++++++++++++++++++++++++++++-------------- 1 file changed, 121 insertions(+), 55 deletions(-) diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 087ed3309..02b8b497d 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -2552,74 +2552,140 @@ concep.DescripcionesEspecificas.NumeroSerie) Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte - ''DATOS GENERALES - cfdi.CartaPorte30("", Carta.TranspInternac, Carta.RegimenAduanero, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) + If UsuarioActual.CveEmpresa = 1 Then + ''DATOS GENERALES + cfdi.CartaPorte31("", Carta.TranspInternac, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) - 'UBICACIONES - If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then - For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones - 'origen - cfdi.CartaPorte30Ubicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) - 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida) - cfdi.CartaPorte30Domicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP) - Next - End If - - 'MERCANCIAS - If Carta.Mercancias IsNot Nothing Then - cfdi.CartaPorte30Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) - If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then - For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - If concep.ValorMercancia <= 0 Then concep.Moneda = "" - cfdi.CartaPorte30Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), - concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, - If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, - concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) - For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta - cfdi.CartaPorte30CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) - Next + 'UBICACIONES + If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then + For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones + 'origen + cfdi.CartaPorte31Ubicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) + 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida) + cfdi.CartaPorte31Domicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP) Next End If - End If - ' - If Carta.FiguraTransporte IsNot Nothing Then - If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then - - cfdi.CartaPorte30Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) - - cfdi.CartaPorte30IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) - - If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" - Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" - End If - - cfdi.CartaPorte30Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, - Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) - - If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then - For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques - cfdi.CartaPorte30Remolque(concep.SubTipoRemolque, concep.Placa) + 'MERCANCIAS + If Carta.Mercancias IsNot Nothing Then + cfdi.CartaPorte31Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) + If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then + For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias + If concep.ValorMercancia <= 0 Then concep.Moneda = "" + cfdi.CartaPorte31Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), + concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, + If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, + concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) + For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta + cfdi.CartaPorte31CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) + Next Next End If End If + ' + If Carta.FiguraTransporte IsNot Nothing Then - If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then - For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - cfdi.CartaPorte30TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) - If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador - cfdi.CartaPorte30PartesTransporte("PT01") - cfdi.CartaPorte30PartesTransporteDomicilio(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) + If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then + + cfdi.CartaPorte31Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) + + cfdi.CartaPorte31IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) + + If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" + Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" End If + + cfdi.CartaPorte31Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, + Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) + + If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then + For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques + cfdi.CartaPorte31Remolque(concep.SubTipoRemolque, concep.Placa) + Next + End If + End If + + If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then + For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores + cfdi.CartaPorte31TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) + If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador + cfdi.CartaPorte31PartesTransporte("PT01") + cfdi.CartaPorte31PartesTransporteDomicilio(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) + End If + Next + End If + End If + Else + ''DATOS GENERALES + cfdi.CartaPorte30("", Carta.TranspInternac, Carta.RegimenAduanero, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) + + 'UBICACIONES + If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then + For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones + 'origen + cfdi.CartaPorte30Ubicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) + 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida) + cfdi.CartaPorte30Domicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP) Next End If + + 'MERCANCIAS + If Carta.Mercancias IsNot Nothing Then + cfdi.CartaPorte30Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) + If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then + For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias + If concep.ValorMercancia <= 0 Then concep.Moneda = "" + cfdi.CartaPorte30Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), + concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, + If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, + concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) + For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta + cfdi.CartaPorte30CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) + Next + Next + End If + End If + ' + If Carta.FiguraTransporte IsNot Nothing Then + + If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then + + cfdi.CartaPorte30Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) + + cfdi.CartaPorte30IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) + + If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" + Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" + End If + + cfdi.CartaPorte30Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, + Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) + + If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then + For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques + cfdi.CartaPorte30Remolque(concep.SubTipoRemolque, concep.Placa) + Next + End If + End If + + If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then + For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores + cfdi.CartaPorte30TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) + If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador + cfdi.CartaPorte30PartesTransporte("PT01") + cfdi.CartaPorte30PartesTransporteDomicilio(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) + End If + Next + End If + End If End If End If - - #End Region #Region "C O M P L E M E N T O D E P A G O" From ab7d0f7d95a0a7b73b56ed00733372d9e2dd2794 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 8 Jul 2024 22:33:01 -0700 Subject: [PATCH 26/69] - colores SMS --- Ashx/CargaEventos.ashx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Ashx/CargaEventos.ashx b/Ashx/CargaEventos.ashx index ed78666f4..65bf9f131 100644 --- a/Ashx/CargaEventos.ashx +++ b/Ashx/CargaEventos.ashx @@ -78,18 +78,19 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState cevent.CveOS = dr("CveOS").ToString.ToEntero cevent.allDay = False If dr("EstatusOSGral").ToString.Contiene("Levantamiento") Then - cevent.backgroundColor = "#006699" + cevent.backgroundColor = "#3598dc" ElseIf dr("EstatusOSGral").ToString.Contiene("Surtido") Then cevent.backgroundColor = "#002699" ElseIf dr("EstatusOSGral").ToString.Contiene("Asignado") Then - cevent.backgroundColor = "#025716" + cevent.backgroundColor = "#8E44AD" ElseIf dr("EstatusOSGral").ToString.Contiene("Finalizado") Then - cevent.backgroundColor = "#730505" + cevent.backgroundColor = "#26C281" ElseIf dr("EstatusOSGral").ToString.Contiene("Facturado") Then - cevent.backgroundColor = "#006699" + cevent.backgroundColor = "#4B77BE" ElseIf dr("EstatusOSGral").ToString.Contiene("Cobrado") Then - cevent.backgroundColor = "#007699" + cevent.backgroundColor = "#29b4b6" ElseIf dr("EstatusOSGral").ToString.Contiene("Cancelado") Then + cevent.backgroundColor = "#e43a45" End If events.Add(cevent) Next From aa5bd73b44c0825d24889e28fb39f668c3a87496 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Tue, 9 Jul 2024 10:43:39 -0700 Subject: [PATCH 27/69] =?UTF-8?q?Cxc=20impreiosn,=20rep=20checaor=20preasi?= =?UTF-8?q?stencia=20d=C3=ADa=20=20siguiente=20retardo=20despues=20de=20ed?= =?UTF-8?q?icic=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/Timbrado.vb | 8 ++-- Compras/Compras.aspx.vb | 81 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 5 deletions(-) diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 02b8b497d..5592f5c09 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -895,10 +895,10 @@ Public Class Timbrado Equivalencia = 1 'condiciones especiales para el pago en pesos, facturas en moneda extranjera ElseIf MonedaPago = "MXN" AndAlso VentaAbreviaturaSAT <> "MXN" Then - VentaTipoCambio = Math.Round(VentaTipoCambio, 6) + VentaTipoCambio = Math.Round(VentaTipoCambio, 10) Equivalencia = Math.Round((1 / VentaTipoCambio), 10) ElseIf MonedaPago = "USD" AndAlso VentaAbreviaturaSAT <> "USD" Then - VentaTipoCambio = Math.Round(VentaTipoCambio, 6) + VentaTipoCambio = Math.Round(VentaTipoCambio, 10) Equivalencia = VentaTipoCambio End If @@ -924,8 +924,8 @@ Public Class Timbrado .TasaOCuota = drp("PorcentajeImpuesto").ToString().ToDecimal, .Impuesto = drp("TipoImpuesto").ToString, .Importe = drp("Importe").ToString().ToDecimal.RoundSQL, - .BaseMN = (drp("Base").ToString.ToDecimal / Equivalencia).RoundSQL(6), - .ImporteMN = (drp("Importe").ToString.ToDecimal / Equivalencia).RoundSQL(6) + .BaseMN = (drp("Base").ToString.ToDecimal / Equivalencia).RoundSQL(2), + .ImporteMN = (drp("Importe").ToString.ToDecimal / Equivalencia).RoundSQL(2) } ) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 46dc9e0b8..30e12e1e4 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -8557,6 +8557,8 @@ Partial Class Compras_Compras Protected Sub BtnActualizar_Click(sender As Object, e As EventArgs) Handles BtnActualizar.Click + Dim SeActualizoDetalle As Boolean = False + Dim CveSubProyectoPrincipal As Integer = AsignarSubProyectoPrincipal() If Not CveSubProyectoPrincipal > 0 Then Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) @@ -8654,7 +8656,7 @@ Partial Class Compras_Compras CveTipoCompra:=DdlTipoCompra.SelectedValue.ToEntero, NoDeducible:=tNoDeducible, CveRetIVAConcepto:=TmpCveRetIVAConcepto, CveRetISRConcepto:=TmpCveRetISRConcepto, CveSubProyecto:=CveSubProyectoPrincipal, CveFolioGarantia:=DdlFolioGarantia.SelectedValue.ToEntero) Then If Not ComparaDatatables() Then - + SeActualizoDetalle = True 'Regeneramos el concepto 6 de PrePolizas 'If UsuarioActual.Empresa.Funcionalidad(207) = "1" Then ' If Not RegenerarPrePoliza(ObjContabilidad, ObjContaAC, 6, False, MultiplicadorNC) Then @@ -9143,6 +9145,7 @@ Partial Class Compras_Compras ObjCompra.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + SeActualizoDetalle = False Finally If Retorno Then If ObjContabilidad.MensajePolizaDescuadre IsNot Nothing AndAlso ObjContabilidad.MensajePolizaDescuadre.ToString <> "" Then @@ -9161,6 +9164,7 @@ Partial Class Compras_Compras ObjCompra.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() Alert("Ocurrió un error al actualizar la compra, por favor vuelva a intentar.", TipoMensaje.MsgAdvertencia) + SeActualizoDetalle = False End If If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose() @@ -9176,6 +9180,81 @@ Partial Class Compras_Compras CargaGvBitacora() UpBitacora.Update() + + + If SeActualizoDetalle Then + MandaCorreoActualizacionDetalle(CveCompra) + End If + + End Sub + + Private Sub MandaCorreoActualizacionDetalle(CveCompra As Integer) + + If UsuarioActual.CveRol <> 1 Then + Exit Sub + End If + + Dim DTCorreos As New DataTable + Dim DTMovimientos As New DataTable + Dim strBody As New StringBuilder + Dim Asunto, Para, ArrayCC, Body As String + Para = GlobalDTUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo") + + If Para.ToString = "" AndAlso UsuarioActual.CveRol = 1 Then + Para = "oscar.irigoyen@adssistemas.mx" + End If + + Dim uri As Uri = HttpContext.Current.Request.Url + Dim URlCompleta As String = uri.AbsoluteUri + + Dim SerieFolioCompra As String = $"{TxtSerie.Text}{If(TxtSerie.Text.Trim.Length > 0, "-", "")}{TxtFolio.Text.Trim}" + + strBody.Append(" ") + strBody.Append(" ") + strBody.Append(" ") + strBody.Append(" ") + strBody.Append("") + strBody.Append($"

    Se realizo una actualización en los detalles de la compra {SerieFolioCompra}

    ") + strBody.Append("") + + strBody.Append("") + + + '' ENVIO DEL CORREO + Asunto = $"Actualizacion de Compra {SerieFolioCompra}" + ArrayCC = "" + Body = strBody.ToString + Dim Mail As New ClsSisMail() + Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC) + + + End Sub Private Function ComparaDatatables() As Boolean From 9d29abdea2fbe3455d3886637a928cd8652b2ffe Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 9 Jul 2024 11:09:31 -0700 Subject: [PATCH 28/69] =?UTF-8?q?--=20no=20subir,=20cambios=20=20a=20medio?= =?UTF-8?q?=20terminar,=20continuar=C3=A1=20oscar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/eFacturas.aspx | 2 +- Compras/eFacturas.aspx.vb | 598 +++++++++++++++++++++++++++++++++++--- 2 files changed, 553 insertions(+), 47 deletions(-) diff --git a/Compras/eFacturas.aspx b/Compras/eFacturas.aspx index 061e4ba57..1081e1dde 100644 --- a/Compras/eFacturas.aspx +++ b/Compras/eFacturas.aspx @@ -1047,7 +1047,7 @@ -
    -
    -
    - Cliente: - - +
    + <%--DESCRIPCION--%> +
    + + +
    - - -
    - - - -
    -
    @@ -492,84 +480,70 @@
    + +
    +
    + <%--MEDICO--%> +
    + + +
    +
    +
    + <%--PROCEDIMIENTO--%> +
    + + +
    +
    +
    +
    +
    + <%--TIPO VENTA--%> +
    + + +
    +
    +
    + <%--TÉCNICO--%> +
    + + +
    +

    -
    +
    -
    -
    - - - - <%-- - --%> - - -
    -
    -
    - +
    + + + + + +
    +
    +
    - - -
    +
    - - + @@ -925,10 +899,10 @@ if (validando == 1) { var timestamp = Date.parse(Text); - if (isNaN(timestamp) == false) { + <%--if (isNaN(timestamp) == false) { $('#<%=LnkValidaHorarioNoOperativo.ClientID%>').click(); - } + }--%> } diff --git a/OS/RepServiciosMedicos.aspx.vb b/OS/RepServiciosMedicos.aspx.vb index 4d33a8f19..a3e7bfff5 100644 --- a/OS/RepServiciosMedicos.aspx.vb +++ b/OS/RepServiciosMedicos.aspx.vb @@ -251,8 +251,6 @@ Partial Class OS_RepServiciosMedicos Asignacion End Enum - - #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load @@ -268,15 +266,7 @@ Partial Class OS_RepServiciosMedicos InicializaCalendar() GetCargaTiposOrden() cargaDropsModal() - CargaClientePublicoGeneral() - If UsuarioActual.TienePermisoProceso(348) Then - DVModalAsignacion.Visible = True - End If - - If UsuarioActual.TienePermisoProceso(352) Then - LnkCancelarOrden.Visible = True - End If End If End Sub @@ -374,10 +364,6 @@ Partial Class OS_RepServiciosMedicos 'ObjOS.Dispose() - DdlTecnicoAsignar.DataSource = DTTecnicos 'GlobalDTUsuarios(-1, UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True'") - DdlTecnicoAsignar.DataBind() - DdlTecnicoAsignar.Items.Insert(0, New ListItem("Seleccione uno", "-1")) - UpModalOS.Update() End Sub @@ -592,38 +578,28 @@ Partial Class OS_RepServiciosMedicos 'DdlClientesWS.txtText.Value = "" 'DdlClientesWS.txtValue.Value = "" - If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then - DdlClientesWS.setEsWebService(True) - Else - DdlClientesWS.setEsWebService(False) - CargaClientes() - End If + 'If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then + ' DdlClientesWS.setEsWebService(True) + 'Else + ' DdlClientesWS.setEsWebService(False) + ' CargaClientes() + 'End If End Sub Private Sub CargaClientes() - If Not UsuarioActual.Empresa.Funcionalidad(105) = "1" Then - DdlClientesWS.ddl.Items.Clear() - DdlClientesWS.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) - DdlClientesWS.DataBind() - DdlClientesWS.ddl.Items.Insert(0, New ListItem("Todos", "-1")) - End If + 'If Not UsuarioActual.Empresa.Funcionalidad(105) = "1" Then + ' DdlClientesWS.ddl.Items.Clear() + ' DdlClientesWS.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) + ' DdlClientesWS.DataBind() + ' DdlClientesWS.ddl.Items.Insert(0, New ListItem("Todos", "-1")) + 'End If End Sub Private Sub LipiaModalOS() - TxtSolicito.Text = "" TxtDescripcion.Text = "" TxtFechaOS.Text = "" - - DdlClientesWS.txtText.Value = "" - DdlClientesWS.txtValue.Value = "" - DdlClientesWS.ddl.SelectedValueExist("-1") - DdlTecnicoAsignar.SelectedValueExist("-1") - - 'TSTimeSelector.Hour = NowADS().Hour - 'TSTimeSelector.Minute = NowADS().Minute - CveTecnicoAsignarOrioginal = -1 FechaInicioOriginal = NowADS() @@ -642,12 +618,6 @@ Partial Class OS_RepServiciosMedicos LipiaModalOS() If TipoAccion = OSModalTipoAccion.Agregar Then - If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then - DdlClientesWS.txtValue.Value = CveClientePublicoGeneral.ToString - DdlClientesWS.txtText.Value = NombreClientePublicoGeneral - Else - DdlClientesWS.ddl.SelectedValueExist(CveClientePublicoGeneral) - End If TxtFechaOS.Text = NowADS().ToString("dd/MM/yyyy") RegistraScript("$('#DVModalOS').modal('show');") @@ -656,60 +626,51 @@ Partial Class OS_RepServiciosMedicos ElseIf TipoAccion = OSModalTipoAccion.Actualizacion Or TipoAccion = OSModalTipoAccion.Asignacion Then 'cargaDropsModal() - LblModalOStitulo.Text = "Actualizar Orden de Servicio" - - + LblModalOStitulo.Text = "Orden de Servicio" Dim IDOSDetalle As Integer = 1 Dim SeFacturara = "" Dim CveOsConsultar As Integer = HFCveOS.Value.ToEntero - 'If Not CveOsConsultar > 0 AndAlso Not DdlOrdenesSinAsignar.SelectedValue.ToEntero > 0 Then - ' Alert("clave de orden de servicio no encontrada.", TipoMensaje.MsgAdvertencia) - ' Exit Sub - 'End If - If CveOsConsultar > 0 Then DdlOrdenesSinAsignar.SelectedValueExist(-1) End If Dim ObjOS As New ClsOS() If ObjOS.GetOrdenesServicios(CveOsConsultar, -1, -1, -1, -1, UsuarioActual.CveEmpresa, CveOSDetalle:=DdlOrdenesSinAsignar.SelectedValue.ToEntero) Then + Dim thospital As String = ObjOS.Cliente + If ObjOS.CveClienteSucursal > 0 Then + thospital = GlobalDTClientesSucursales(ObjOS.CveEmpresa, ObjOS.CveCliente).FiltroPrimeroValor("SucursalCliente", $"CveClienteSucursal = {ObjOS.CveClienteSucursal}") + End If DVFolio.Visible = True HLkFolio.Text = ObjOS.Folio.ToString HLkFolio.NavigateUrl = $"/OS/OrdenesServicios.aspx?CveOS={ObjOS.CveOS}" - HLKPDF.NavigateUrl = $"/Compras/PopUpVerFactura.aspx?P={Encripta(String.Format("OP=OS&CVEOS={0}", ObjOS.CveOS))}" - HFCveOS.Value = ObjOS.CveOS.ToString HFCveOsDetalle.Value = ObjOS.CveOSDetalle.ToString TxtDescripcion.Text = ObjOS.Descripcion - TxtSolicito.Text = ObjOS.PersonaSolicito - TxtFechaOS.Text = ObjOS.FechaRecepcion.ToString("dd/MM/yyyy") - 'DdlSubProyectoOS.SelectedValueExist(ObjOS.CveSubProyecto) - DdlClientesWS.txtText.Value = ObjOS.Cliente - DdlClientesWS.txtValue.Value = ObjOS.CveCliente.ToString - DdlClientesWS.ddl.SelectedValueExist(ObjOS.CveCliente.ToString) + TxtFechaOS.Text = ObjOS.FechaCita.ToString("dd/MM/yyyy HH:mm") + TxtProcedimiento.Text = GlobalDTProcedimientos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Procedimiento", "CveProcedimiento =" & ObjOS.CveProcedimiento) + TxtMedico.Text = GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Medico", "CveMedico =" & ObjOS.CveMedico) + TxtCliente.Text = thospital + TxtTipoVenta.Text = GlobalDTTipoVenta(UsuarioActual.CveEmpresa).FiltroPrimeroValor("TipoVenta", $"CveTipoVenta ={ObjOS.CveTipoVenta}") + TxtTecnico.Text = ObjOS.UsuarioAtendio - If TipoAccion = OSModalTipoAccion.Actualizacion Then - DdlTecnicoAsignar.SelectedValueExist(ObjOS.CveUsuarioAtendio) - CveTecnicoAsignarOrioginal = ObjOS.CveUsuarioAtendio - FechaInicioOriginal = ObjOS.FechaInicio - - DvModalSubProyecto.Visible = True - LblModalOStitulo.Text = "Actualizar Orden de Servicio" - 'TSTimeSelector.Hour = If(ObjOS.FechaInicio.Hour > 12, ObjOS.FechaInicio.Hour - 12, ObjOS.FechaInicio.Hour) - 'TSTimeSelector.Minute = ObjOS.FechaInicio.Minute - 'TSTimeSelector.AmPm = If(ObjOS.FechaInicio.Hour > 12, MKB.TimePicker.TimeSelector.AmPmSpec.PM, MKB.TimePicker.TimeSelector.AmPmSpec.AM) + Dim tCve As Integer = ObjOS.CveVenta 'busca la remisión + If tCve <= 0 Then tCve = ObjOS.CveCotizacion 'sino hay remisión toma el pedido + If tCve > 0 Then + Dim objv As New ClsVentas + Dim dttps As New DataTable + If objv.GetVentaDetalle(tCve) Then + dttps = objv.DtResultados + End If + objv.Dispose() + GvPS.DataSource = dttps + GvPS.DataBind() End If - - Dim TipoEstatus As Integer = 0 TipoEstatus = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("TipoEstatus", String.Format("CveEstatusOrdenServicio = {0}", ObjOS.CveEstatusOrdenServicio), "CveEstatusOrdenServicio ASC").ToEntero - 'LnkModalAsignar.Visible = If(TipoEstatus.Contiene(4, 5), False, True) - LnkCancelarOrden.Visible = If(TipoEstatus.Contiene(4, 5), False, True) - If (TipoEstatus = 5) Then LblModalOStitulo.Text = "Orden Cancelada" End If @@ -752,345 +713,6 @@ Partial Class OS_RepServiciosMedicos End Sub - Protected Sub LnkModalAsignar_Click(sender As Object, e As EventArgs) - - Dim TieneError As Boolean = False - Dim CveEstatusSolicidato = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 1", "CveEstatusOrdenServicio ASC").ToEntero - Dim CveEstatusAsiganada = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 2", "CveEstatusOrdenServicio ASC").ToEntero - - Dim CveCliente As Integer = If(Not DdlClientesWS.SelectedValue.ToEntero > 0, DdlClientesWS.txtValue.Value.ToString.ToEntero, DdlClientesWS.SelectedValue.ToEntero) - Dim CvePSDetalle As Integer = UsuarioActual.Empresa.Funcionalidad(708).ToEntero - Dim EsNueva As Boolean = False - - - Dim CveOS As Integer = HFCveOS.Value.ToEntero - Dim CveOsDetalle As Integer = HFCveOsDetalle.Value.ToEntero - - - Dim CveSubProyectoTecnico As Integer = If(DdlTecnicoAsignar.SelectedValue.ToEntero > 0, GlobalDTUsuarios(DdlTecnicoAsignar.SelectedValue.ToEntero, UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", " CveSubProyecto > 0 ").ToEntero, -1) - - If CveSubProyectoTecnico = 0 And DdlTecnicoAsignar.SelectedValue.ToEntero = 100 Then - CveSubProyectoTecnico = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1).FiltroPrimeroValor("CveSubProyecto").ToEntero - End If - - - If TipoAccion = OSModalTipoAccion.Asignacion AndAlso Not CveSubProyectoTecnico > 0 Then - Alert("No se encontro el subproyecto o centro de costo del tecnico seleccionado.") - Exit Sub - End If - - If Not CvePSDetalle > 0 Then - Alert("No esta asiganado el producto del detalle a la funcionalidad.") - Exit Sub - End If - - If Not CveCliente > 0 Then - Alert("Debe seleccionar una cliente.") - Exit Sub - End If - - If TipoAccion = OSModalTipoAccion.Asignacion Then - - If Not DdlTecnicoAsignar.SelectedValue.ToEntero > 0 Then - Alert("El tecnico es requerido", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - - - End If - - Dim ObjOS As New ClsOS - ObjOS.IniciaTransacSQL() - - If CveOS > 0 Then - - Dim CveEstatusOrden = CveEstatusSolicidato - If DdlTecnicoAsignar.SelectedValue.ToEntero > 0 Then - CveEstatusOrden = CveEstatusAsiganada - End If - - If TipoAccion = OSModalTipoAccion.Asignacion Then - CveEstatusOrden = CveEstatusAsiganada - End If - - CveOS = HFCveOS.Value.ToEntero - CveOsDetalle = HFCveOsDetalle.Value.ToEntero - - If CveOS > 0 Then - - If Not ObjOS.UpdateOrdenesServicios(TxtSolicito.Text, TxtFechaOS.Text, TxtDescripcion.Text, UsuarioActual.CveUsuario, CveEstatusOrden, CveOS, UsuarioActual.CveUsuario, - -1, CveClienteSucursal:=-1, Direccion:="", Telefono:="", - CveSubProyecto:=CveSubProyectoTecnico, Correo:="") Then - TieneError = True - End If - Else - TieneError = True - End If - - End If - - 'Dim picker As MKB.TimePicker.TimeSelector = TSTimeSelector - 'Dim time As DateTime - 'time = DateTime.Parse(String.Format("{0} {1}:{2} {3}", TxtModalFechaOS.Text, picker.Hour, picker.Minute, picker.AmPm)) - - If Not TieneError AndAlso CveOS > 0 AndAlso CveOsDetalle > 0 AndAlso DdlTecnicoAsignar.SelectedValue.ToEntero > 0 AndAlso - (HFCveUsuarioAtendio.Value.ToEntero <> DdlTecnicoAsignar.SelectedValue.ToEntero) Then - - - 'If Not ObjOS.UpdateOrdenesServiciosAsignadas(CveOsDetalle, DdlTecnicoAsignar.SelectedValue.ToEntero, TxtModalFechaOS.Text.ToDate, TxtModalFechaOS.Text.ToDateTime(), UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then - ' TieneError = True - 'End If - - - 'If ObjOS.GetSubProyectosEstatusInicial(DdlTecnicoAsignar.SelectedValue.ToEntero, 3, UsuarioActual.CveEmpresa) Then - ' Dim subProyectoDelTecnico As DataTable - ' subProyectoDelTecnico = ObjOS.DtResultados.FiltraParametros($"CveSubProyecto = {CveSubProyectoTecnico}") - - ' If subProyectoDelTecnico.Rows.Count > 0 Then - ' If Not ObjOS.UpdateOrdenesServiciosAsignadas(CveOsDetalle, DdlTecnicoAsignar.SelectedValue.ToEntero, TxtModalFechaOS.Text.ToDate, TxtModalFechaOS.Text.ToDateTime(), UsuarioActual.CveEmpresa) Then - ' TieneError = True - ' End If - ' Else - ' Alert("El técnico y la Orden de Servicio deben pertenecer al mismo subProyecto", TipoMensaje.MsgAdvertencia) - ' TieneError = True - ' End If - 'End If - - - - If Not TieneError Then - - If Not ObjOS.UpdateOrdenesServiciosEstatus(CveEstatusAsiganada, UsuarioActual.CveUsuario, CveOS) Then - TieneError = True - End If - - If Not TieneError Then - - - Dim ObjEventos As New ClsOIEventos(ObjOS.IniciaTransacSQL()) - - If HFOCveOIEvento.Value.ToEntero > 0 Then - - If Not ObjEventos.RemoveAgendaBitacora(HFOCveOIEvento.Value.ToEntero, UsuarioActual.CveEmpresa) Then - TieneError = True - End If - - End If - - - Dim RecurrenciaTipo = 0, Frecuencia = -1, DiasSemana = "-1", Dias = -1, Mes = -1, RecurrenciaFin = "-1" - Dim OIDescripcion As String = $"{DdlTecnicoAsignar.SelectedItem.Text} Orden de servicio {FolioAsignar} " - If Not ObjEventos.AddEventoAgenda(2, DdlTecnicoAsignar.SelectedItem.Text, OIDescripcion, 2, TxtFechaOS.Text.ToDateTime(), TxtFechaOS.Text.ToDateTime().AddHours(1), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, - RecurrenciaTipo:=RecurrenciaTipo, Frecuencia:=Frecuencia, DiasSemana:=DiasSemana, Dia:=Dias, Mes:=Mes, RecurrenciaFin:=RecurrenciaFin, CveTipoEvento:=2, - Importe:=0, CveOS:=CveOS, CveSubProyecto:=CveSubProyectoTecnico, CveUsuarioPara:=DdlTecnicoAsignar.SelectedValue.ToEntero) Then - TieneError = True - End If - End If - End If - End If - - If Not TieneError Then - ObjOS.Commit() - Else - ObjOS.RollBack() - End If - ObjOS.Dispose() - - Dim CorreoAsignado As String = GlobalDTUsuarios(DdlTecnicoAsignar.SelectedValue.ToEntero).Rows(0)("Correo").ToString - If Not TieneError And CorreoAsignado.Trim.Length > 0 AndAlso DdlTecnicoAsignar.SelectedValue.ToEntero > 0 Then - CorreoAsignado = GlobalDTUsuarios(DdlTecnicoAsignar.SelectedValue.ToEntero).Rows(0)("Correo").ToString - MandaCorreOS(CveOS, CorreoAsignado) - End If - - 'If Not TieneError And TxtEmail.Text.Trim.Length > 0 AndAlso DdlTecnicoAsignar.SelectedValue.ToEntero > 0 Then - ' MandaCorreOS(CveOS, TxtEmail.Text, True) - 'End If - - If Not TieneError Then - - ConsultaOrdenesServiciosNoAsignadas() - CargaOrdenesServiciosNoAsignadas() - - If TipoAccion = OSModalTipoAccion.Asignacion Then - Alert("Orden asignada correctamente.") - ElseIf TipoAccion = OSModalTipoAccion.Agregar Then - Alert("Orden Guardada correctamente.") - ElseIf TipoAccion = OSModalTipoAccion.Actualizacion Then - Alert("Orden actualizada correctamente.") - End If - - RegistraScript("$('#DVModalOS').modal('hide');Calendario();") - - End If - - End Sub - - Private Sub MandaCorreOS(CveOS As Integer, CorreoUsuarioAsignado As String, Optional EsCliente As Boolean = False) - - Dim ObjOS As New ClsOS() - Dim params As New List(Of ReportParameter) - Dim CveFolio = "" - - Dim TmpDTOS = New DataTable - TmpDTOS.Columns.Add("CveOSDetalle", GetType(Integer)) - - TmpDTOS.Columns.Add("CveClasificacion", GetType(Integer)) - TmpDTOS.Columns.Add("Clasificacion", GetType(String)) - TmpDTOS.Columns.Add("CvePS", GetType(Integer)) - TmpDTOS.Columns.Add("CveUM", GetType(Integer)) - TmpDTOS.Columns.Add("UM", GetType(String)) - TmpDTOS.Columns.Add("Cantidad", GetType(Integer)) - TmpDTOS.Columns.Add("PS", GetType(String)) - TmpDTOS.Columns.Add("Especificaciones", GetType(String)) - TmpDTOS.Columns.Add("Materiales", GetType(String)) - TmpDTOS.Columns.Add("CveCuentaEquipo", GetType(Integer)) - TmpDTOS.Columns.Add("Observaciones", GetType(String)) - TmpDTOS.Columns.Add("FechaAtencion", GetType(String)) - TmpDTOS.Columns.Add("CveUsuarioAtendio", GetType(Integer)) - TmpDTOS.Columns.Add("UsuarioAtendio", GetType(String)) - TmpDTOS.Columns.Add("FechaTermino", GetType(String)) - TmpDTOS.Columns.Add("FechaEntrega", GetType(String)) - TmpDTOS.Columns.Add("CveUsuarioEntrego", GetType(Integer)) - TmpDTOS.Columns.Add("UsuarioEntrego", GetType(String)) - TmpDTOS.Columns.Add("SeFacturara", GetType(String)) - TmpDTOS.Columns.Add("SeSuperviso", GetType(String)) - TmpDTOS.Columns.Add("Estatus", GetType(String)) - TmpDTOS.Columns.Add("Archivo", GetType(String)) - TmpDTOS.Columns.Add("ComentarioTecnico", GetType(String)) - - - Dim TmpDTMaterialesOS = New DataTable - TmpDTMaterialesOS.Columns.Add("CveOSDetalle", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("CveConsecutivo", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("CveConsecutivoDetalle", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("CveMaterial", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("Cantidad", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("CveClasificacion", GetType(Integer)) - TmpDTMaterialesOS.Columns.Add("CvePS", GetType(String)) - TmpDTMaterialesOS.Columns.Add("CveUM", GetType(String)) - TmpDTMaterialesOS.Columns.Add("Clasificacion", GetType(String)) - TmpDTMaterialesOS.Columns.Add("PS", GetType(String)) - TmpDTMaterialesOS.Columns.Add("UM", GetType(String)) - - Dim FolioOS As String = "" - - Dim RutaReporte As New System.IO.FileInfo(String.Format("{0}Formatos/OrdenServicio.rdlc", UsuarioActual.Empresa.Ruta)) - - If ObjOS.GetOrdenesServicios(CveOS, -1, -1, -1, -1, UsuarioActual.CveEmpresa) Then - If ObjOS.DtResultados.Rows.Count > 0 Then - - Dim dtOS As DataTable = ObjOS.DtResultados - Dim dr As DataRow = dtOS.Rows(0) - params.Add(New ReportParameter("Cliente", dr("Cliente").ToString)) - params.Add(New ReportParameter("Solicito", dr("PersonaSolicito").ToString)) - params.Add(New ReportParameter("Descripcion", dr("Descripcion").ToString)) - params.Add(New ReportParameter("Recibio", UsuarioActual.Nombre)) - params.Add(New ReportParameter("FechaRecibido", dr("FechaRecepcion").ToString.ToDate.ToString("dd/MM/yyyy"))) - params.Add(New ReportParameter("FolioOS", dr("Folio").ToString)) - params.Add(New ReportParameter("ClienteTelefono", dr("Telefono").ToString)) - params.Add(New ReportParameter("ClienteCalle", dr("Direccion").ToString)) - params.Add(New ReportParameter("ClienteColonia", dr("Colonia").ToString)) - params.Add(New ReportParameter("ClienteCiudad", dr("Ciudad").ToString)) - params.Add(New ReportParameter("ClienteEstado", dr("Estado").ToString)) - CveFolio = dr("Folio").ToString - - 'If RutaReporte.Exists Then - params.Add(New ReportParameter("NoDeCliente", dr("CveCliente").ToString)) - params.Add(New ReportParameter("RFC", dr("RFC").ToString)) - params.Add(New ReportParameter("Vendedor", " ")) - params.Add(New ReportParameter("Correo", dr("Correo").ToString)) - params.Add(New ReportParameter("CodigoDeServicio", dr("CveOS").ToString)) - params.Add(New ReportParameter("Sucursal", dr("SubProyecto").ToString)) - params.Add(New ReportParameter("TipoServicio", dr("TipoServicio").ToString)) - params.Add(New ReportParameter("TipoEquipo", dr("TipoEquipo").ToString)) - 'params.Add(New ReportParameter("Descripcion", dr("Descripcion").ToString)) - params.Add(New ReportParameter("Copia", "Copia: Original")) - params.Add(New ReportParameter("Equipo", dr("Equipo").ToString)) - - params.Add(New ReportParameter("DireccionOS", dr("DireccionOS").ToString)) - params.Add(New ReportParameter("Telefono", dr("Telefono").ToString)) - params.Add(New ReportParameter("CorreoOS", dr("CorreoOS").ToString)) - - params.Add(New ReportParameter("ModeloMarca", dr("ModeloMarca").ToString)) - params.Add(New ReportParameter("Año", dr("Año").ToString)) - params.Add(New ReportParameter("TelefonoContacto", dr("TelefonoContacto").ToString)) - - params.Add(New ReportParameter("FechaImpresion", NowADS().ToString("dd/MM/yyyy"))) - params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) - params.Add(New ReportParameter("Condiciones", dr("Condiciones").ToString)) - params.Add(New ReportParameter("FechaAtencion", If(dr("FechaInicio").ToString.Length > 0, dr("FechaInicio").ToString.ToDate.ToString("dd/MM/yyyy hh:mm tt"), ""))) - params.Add(New ReportParameter("TecnicoAsignado", dr("UsuarioAtendio").ToString)) - - 'End If - - End If - End If - - Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") - - If Not RutaReporte.Exists Then - - RutaReporte = New System.IO.FileInfo(String.Format("{0}Empresas\Grales\Formatos\OrdenServicio.rdlc", ModExtensiones.DirectorioBaseEmpresas)) - - params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) - params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) - params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) - params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) - - End If - - - If ObjOS.GetOrdenesServiciosDetalle(CveOS) Then - TmpDTMaterialesOS = ObjOS.DtResultados - End If - - Dim lrds As New List(Of ReportDataSource) - Dim rds As New ReportDataSource With {.Name = "DataSet2", .Value = TmpDTMaterialesOS} - Dim rds2 As New ReportDataSource With {.Name = "DataSet1", .Value = TmpDTMaterialesOS} - - lrds.Add(rds) - lrds.Add(rds2) - ObjOS.Dispose() - - Dim ReporteByte As Byte() = StreamPDF(RutaReporte.FullName, lrds, params, NombreArchivo:=String.Format("OrdenServicio-{0}", CveFolio)) - - If ReporteByte IsNot Nothing Then - Try - ViewState("Para") = CorreoUsuarioAsignado - ViewState("ArrayCC") = "" - ViewState("Asunto") = "Asinación Orden de Servicio" - ViewState("FolioOSMail") = FolioOS - ViewState("Body") = "Asinación Orden de Servicio" - - - ViewState("bytesOS") = ReporteByte - Dim Hilo As New Threading.Thread(AddressOf SendmailOS) - Hilo.Start() - Catch ex As Exception - GuardaLogAD($"Error al enviar correo de OS {ex.StackTrace}") - End Try - End If - - End Sub - - Private Sub SendmailOS() - - Dim Asunto, Para, ArrayCC, Body As String - Asunto = If(IsNothing(ViewState("Asunto")), "", ViewState("Asunto").ToString) - Para = If(IsNothing(ViewState("Para")), "", ViewState("Para").ToString) - ArrayCC = If(IsNothing(ViewState("ArrayCC")), "", ViewState("ArrayCC").ToString) - - Body = If(IsNothing(ViewState("Body")), "", ViewState("Body").ToString) - - - Dim Mail As New ClsSisMail() - Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) - LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.NombreArchivo = $"OS_{ViewState("FolioOSMail") }.pdf", .ArchivoBinario = DirectCast(ViewState("bytesOS"), Byte())}) - Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC, LSRutasMail) - - End Sub - Private Sub GetCargaTiposOrden() Dim ObjOS As New ClsOS @@ -1113,120 +735,5 @@ Partial Class OS_RepServiciosMedicos End Sub - Protected Sub DdlTecnicoAsignar_SelectedIndexChanged(sender As Object, e As EventArgs) - - If TipoAccion = OSModalTipoAccion.Asignacion Then - - - 'DdlTecnicoAsignar.Visible = True - 'RfvDdlTecnicoAsignar.Visible = True - 'VCERfvDdlTecnicoAsignar.Visible = True - - 'RfvTxtModalFechaOS.Visible = True - 'VceRfvTxtModalFechaOS.Enabled = True - ElseIf TipoAccion = OSModalTipoAccion.Agregar Or TipoAccion = OSModalTipoAccion.Actualizacion Then - - 'DdlTecnicoAsignar.Visible = False - 'RfvDdlTecnicoAsignar.Visible = False - ' VCERfvDdlTecnicoAsignar.Visible = False - - 'RfvTxtModalFechaOS.Visible = False - 'VceRfvTxtModalFechaOS.Enabled = False - - End If - - UpModalOS.Update() - - End Sub - - Private Sub CargaClientePublicoGeneral() - - Dim ObjCliente As New ClsClientes() - - If ObjCliente.GetClientes(-1, "PUBLICO EN GENERAL", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1) Then - - If ObjCliente.DtResultados.Rows.Count > 0 Then - Me.CveClientePublicoGeneral = ObjCliente.CveCliente - Me.NombreClientePublicoGeneral = ObjCliente.Nombre - End If - End If - ObjCliente.Dispose() - - End Sub - - - Protected Sub DdlTecnicoAsignar_SelectedIndexChanged1(sender As Object, e As EventArgs) - ValidaHorarioNoOperativo() - End Sub - - Protected Sub LnkValidaHorarioNoOperativo_Click(sender As Object, e As EventArgs) - ValidaHorarioNoOperativo() - End Sub - - Private Sub ValidaHorarioNoOperativo() - If DdlTecnicoAsignar.SelectedValue.ToEntero > 0 Then - - Dim objOS As New ClsOS - Dim DTHorarios As New DataTable - - If objOS.GetOrdenesServiciosTecnicoHorarioNoOperativo(DdlTecnicoAsignar.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then - DTHorarios = objOS.DtResultados - End If - objOS.Dispose() - - If DTHorarios IsNot Nothing AndAlso DTHorarios.Rows.Count > 0 Then - - Dim HoraInicio As TimeSpan = DTHorarios.Rows(0)("HoraInicio").ToString.ToDate.TimeOfDay - Dim HoraFin As TimeSpan = DTHorarios.Rows(0)("HoraFin").ToString.ToDate.TimeOfDay - Dim HoraAsignacion As TimeSpan = TxtFechaOS.Text.ToDate.TimeOfDay - - If HoraAsignacion >= HoraInicio And HoraAsignacion <= HoraFin Then - Alert($"La hora especificada esta dentro del horario no operativo del Técnico {HoraInicio.ToString()} a {HoraFin.ToString()} .", TipoMensaje.MsgAdvertencia) - End If - End If - 'ViewState("Validando") = Nothing - - End If - End Sub - - Protected Sub LnkCancelarOrden_Click(sender As Object, e As EventArgs) - - RegistraScript($"$('#{TxtModalCancelarOrdenMotivo.ClientID}').focus();;$('#DVModalCancelacionOrden').modal('show');") - - TxtModalCancelarOrdenMotivo.Focus() - TxtModalCancelarOrdenMotivo.Text = "" - UpmodalCacelaOrden.Update() - - End Sub - - - - Protected Sub LnkmodalCancelarORdenServicio_Click(sender As Object, e As EventArgs) - - Dim TieneError As Boolean = True - Dim CveOS As Integer = HFCveOS.Value.ToEntero - Dim objOS As New ClsOS - Dim ObjEventoBitacora As New ClsOIEventos(objOS.IniciaTransacSQL) - If objOS.UpdateOrdenesServiciosFinaliza(CveOS, -1, -1, UsuarioActual.CveEmpresa, Opcion:=2) Then 'Opcion:=2 Es para cancelar - If ObjEventoBitacora.AddEventoBitacora($"Motivo Cancelación: {TxtModalCancelarOrdenMotivo.Text.Trim}", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, CveOS, -1, -1, -1, -1) Then - TieneError = False - End If - End If - - If TieneError Then - objOS.RollBack() - Else - objOS.Commit() - End If - - objOS.Dispose() - - - If Not TieneError Then - Alert("Orden Cancelada Correctamente", TipoMensaje.MsgInformacion, "location.reload(true);") - RegistraScript("$('#DVModalCancelacionOrden').modal('hide');") - RegistraScript("$('#DVModalFinalizarOrden').modal('hide');") - End If - End Sub End Class From 01aa605a245b4be949f3cfdebc1b3337efc9303f Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 10 Jul 2024 08:05:01 -0700 Subject: [PATCH 31/69] =?UTF-8?q?-visualizaci=C3=B3n=20de=20direcci=C3=B3n?= =?UTF-8?q?=20entrega?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/RepPedidosSTF.aspx | 49 ++++++++++++++++++++++++++++++++---- Ventas/RepPedidosSTF.aspx.vb | 5 ++++ 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/Ventas/RepPedidosSTF.aspx b/Ventas/RepPedidosSTF.aspx index b783ed353..4bea386f3 100644 --- a/Ventas/RepPedidosSTF.aspx +++ b/Ventas/RepPedidosSTF.aspx @@ -68,6 +68,44 @@
    + @@ -82,12 +120,13 @@ - - + + + - - - + + + diff --git a/Ventas/RepPedidosSTF.aspx.vb b/Ventas/RepPedidosSTF.aspx.vb index f9974ffa5..d32d8d548 100644 --- a/Ventas/RepPedidosSTF.aspx.vb +++ b/Ventas/RepPedidosSTF.aspx.vb @@ -15,6 +15,9 @@ Partial Class Ventas_RepPedidosSTF Private Sub CargaCombos() + txtFechaI.Text = NowADS.FirstDayOfMonth.ToShortDateString + txtFechaF.Text = NowADS.LastDayOfMonth.ToShortDateString + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) 'Vendedor @@ -37,6 +40,8 @@ Partial Class Ventas_RepPedidosSTF If TabG.ActiveTabIndex = 1 Then ' entregados Opcion = 2 + FechaInicio = txtFechaI.Text.ToDate + FechaFin = txtFechaF.Text.ToDate Dim ObjVentas As New ClsVentas If ObjVentas.GetRepPedidosSTF(DdlSubProyecto.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, Opcion, FechaInicio, FechaFin) Then GvE.DataSource = ObjVentas.DtResultados From 4fd086f6d1a3e73f3d556cd96b6e17022de00878 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 10 Jul 2024 08:05:15 -0700 Subject: [PATCH 32/69] =?UTF-8?q?--=20actualizaci=C3=B3n=20para=20compleme?= =?UTF-8?q?nto=20carta=20porte=203.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/GoCfdi.dll | Bin 543744 -> 551424 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 5ef366436086c04fc8681d44c7c08b4720036d72..2f89b7c04a7bd857acb408dd7200bad4d60dffde 100644 GIT binary patch delta 104746 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

    $gP4iv7hDIpx@O3PQ1q9n6Svt7 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 *C61xprXZRql~miG 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 From fecabd3891c7553cbcb3fc44bbda577999b7a88d Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 10 Jul 2024 08:05:34 -0700 Subject: [PATCH 33/69] =?UTF-8?q?-=20ocultar=20rengl=C3=B3n=20de=20concept?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Contabilidad/CatCuentas.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Contabilidad/CatCuentas.aspx b/Contabilidad/CatCuentas.aspx index f309b5bc1..57037de2d 100644 --- a/Contabilidad/CatCuentas.aspx +++ b/Contabilidad/CatCuentas.aspx @@ -179,7 +179,7 @@
    -

    +
    Concepto
    Date: Wed, 10 Jul 2024 12:49:48 -0700 Subject: [PATCH 34/69] =?UTF-8?q?--=20correci=C3=B3n=20desde=20cronograma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Transportes/RepContratosCalendario.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index fc5d4ebea..4d59d8f31 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -663,7 +663,7 @@ series.columns.template.events.on("click", e => { let cveContrato = e.target.dataItem.dataContext.cveContrato; - $('#CveContrato').val(cveContrato); + $('#<%=HdnCveContrato.ClientID%>').val(cveContrato); let url = '/Ashx/CargaEventos.ashx?METODO=contrato_transportes' ; let parametros = '&cveContrato=' + cveContrato +'&U=' + '<%= UsuarioActual.CveUsuario %>' + '&E='+ '<%= UsuarioActual.CveEmpresa %>'+ '&tipoVista=' + '<%= RBTipoVista.Text %>' + '&CveUsuarioPara:' + $('#DdlTecnico').val(); + '&CveSubProyecto:' + $('#DdlSubProyecto').val(); From 6de72804a7d788c592f5b71b9355cc08e78533c2 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 10 Jul 2024 17:14:41 -0700 Subject: [PATCH 35/69] Pago Acreedores --- Bancos/PagoAcreedor.aspx | 59 ++++++++++++++++++++++++++++++++++--- Bancos/PagoAcreedor.aspx.cs | 45 ++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 7 deletions(-) diff --git a/Bancos/PagoAcreedor.aspx b/Bancos/PagoAcreedor.aspx index 704c2ed38..56deee488 100644 --- a/Bancos/PagoAcreedor.aspx +++ b/Bancos/PagoAcreedor.aspx @@ -272,7 +272,8 @@
    - + +
    @@ -284,7 +285,7 @@
    - +
    @@ -637,7 +638,21 @@ txt.value = ""; } - $get('TxtImporte').value = FormatoNumero(SumaValores(CveMonedaPago), 2); + let Suma = SumaValores(CveMonedaPago); + let TxtDDImporte; + if ($('#TxtDDImporte').length > 0) { + TxtDDImporte = parseFloat($('#TxtDDImporte').val().replace(/,/g, '')); + } else { + TxtDDImporte = 0; // Asigna un valor por defecto si el elemento no existe + } + + //let TxtDDImporte = parseFloat($('#TxtDDImporte').val().replace(/,/g, '')); + + if (!isNaN(TxtDDImporte)) { + Suma = Suma + TxtDDImporte; + } + + $get('TxtImporte').value = FormatoNumero(Suma, 2); } function FnCambia(chk, txt, saldo, op, text, CveMonedaPago) { @@ -653,7 +668,21 @@ txt.value = saldo; alert(text); } - var Suma = SumaValores(CveMonedaPago); + + let Suma = SumaValores(CveMonedaPago); + + //let TxtDDImporte = parseFloat($('#TxtDDImporte').val().replace(/,/g, '')); + let TxtDDImporte; + if ($('#TxtDDImporte').length > 0) { + TxtDDImporte = parseFloat($('#TxtDDImporte').val().replace(/,/g, '')); + } else { + TxtDDImporte = 0; // Asigna un valor por defecto si el elemento no existe + } + + if (!isNaN(TxtDDImporte) ) { + Suma = Suma + TxtDDImporte; + } + $get('TxtImporte').value = FormatoNumero(Suma, 2); if ($get('TxtTotal') != null) { @@ -720,6 +749,28 @@ return Importe } } + + + function validaDeudoresDiversos(CveMoneda) { + + $get('TxtImporte').value = FormatoNumero(SumaValores(CveMoneda), 2) + + let TxtImporte = parseFloat($get('TxtImporte').value.replace(/,/g, '')); + let TxtDDImporte = parseFloat($get('TxtDDImporte').value.replace(/,/g, '')); + + + + if (isNaN(TxtImporte) || isNaN(TxtDDImporte)) { + return; + } + let resultado = TxtImporte + TxtDDImporte; + + $get('TxtImporte').value = resultado.toFixed(2); + // $('#TxtDDImporte').val(TxtDDImporte.toFixed(2)); + + + } + diff --git a/Bancos/PagoAcreedor.aspx.cs b/Bancos/PagoAcreedor.aspx.cs index d72929c9c..dbae5d93f 100644 --- a/Bancos/PagoAcreedor.aspx.cs +++ b/Bancos/PagoAcreedor.aspx.cs @@ -6,6 +6,7 @@ using System.Text; using System.Web; using System.Web.UI.WebControls; using static Extensiones.ModExtensiones; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory; public partial class Bancos_PagoAcreedor : ClsPaginas { @@ -140,6 +141,10 @@ public partial class Bancos_PagoAcreedor : ClsPaginas Folio = bancos.GetNextFolio(DdlCuenta.SelectedValue.ToEntero(), DdlTipoTransaccion.SelectedValue.ToEntero()); bancos.Dispose(); TxtFolio.Text = Folio.ToString(); + + + TxtDDImporte.Attributes.Add("onblur",$"validaDeudoresDiversos({CveMonedaCuentaPago});FormatoMoneda(this);"); + UpDatos.Update(); } protected void DdlProveedores_selectedindexchange(object sender, EventArgs e) @@ -345,12 +350,13 @@ public partial class Bancos_PagoAcreedor : ClsPaginas MsgError = "No se pudo insertar concepto de diferencia cambiaria"; } - if (ImporteComision != 0 && MsgError == "") + if (ImporteComision != 0 && MsgError == "" && DdlOtrosPagos.SelectedValue == "2" ) { + ImporteComisionMN = (ImporteComision * TCPago).RoundSQL(); int tTipoConceptoOtro = 255; - if (DdlOtrosPagos.SelectedValue == "3") tTipoConceptoOtro = 43; //deudores diversos + //if (DdlOtrosPagos.SelectedValue == "3") tTipoConceptoOtro = 43; //deudores diversos if (!ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoComision, ImporteComision, ImporteComisionMN, tTipoConceptoOtro, Ref, Conc, CveIE: CveIE, CveProveedor: DdlProveedores.SelectedValue.ToEntero(),CveIEDevolucion: gvr.DataKey("CveIE").ToEntero(), TipoCambio: TC, TipoCambioPago: TCPago, CveSubProyecto: DdlSubProyectoPago.SelectedValue.ToEntero())) { MsgError = "No se pudo insertar concepto de pago acreedor"; @@ -360,6 +366,39 @@ public partial class Bancos_PagoAcreedor : ClsPaginas } } + if (TxtDDImporte.Text.ToDecimal() != 0 && MsgError == "" && DdlOtrosPagos.SelectedValue == "3") + { + ImporteComision = TxtDDImporte.Text.ToDecimal(); + ImporteComisionMN = ImporteComision; + + if (TxtDDImporte.Text.ToDecimal() < 0) + { + TipoMovtoComision = true; + ImporteComision = ImporteComision * -1; + ImporteComisionMN = ImporteComisionMN * -1; + } + else + { + TipoMovtoComision = false; + } + + //Decimal TC = get_GlobalTipoCambio(TxtFechaDocumento.Text.ToDate()).ToDecimal(); + //int tCveMoneda = get_GlobalDTBancosCuentas(-1, DdlCuenta.SelectedValue.ToEntero()).FiltroPrimeroValor("CveMoneda").ToEntero(); + //CveMonedaPago + + ImporteComision = ImporteComision.RoundSQL(); + ImporteComisionMN = (ImporteComision * TCPago).RoundSQL() ; + + ImporteComisionMN = (ImporteComision * TCPago).RoundSQL(); + + + int tTipoConceptoOtro = 43; //deudores diversos + if (!ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoComision, ImporteComision, ImporteComisionMN, tTipoConceptoOtro, Ref, Conc, CveIE: CveIE, CveProveedor: DdlProveedores.SelectedValue.ToEntero(), TipoCambio: TCPago, TipoCambioPago: TCPago, CveSubProyecto: DdlSubProyectoPago.SelectedValue.ToEntero())) + { + MsgError = "No se pudo insertar concepto de pago acreedor"; + } + } + if (CveMonedaPago != 1) { ImporteComplementaria = (ImporteBanco * TCPago - ImporteBanco).RoundSQL(); @@ -767,7 +806,7 @@ public partial class Bancos_PagoAcreedor : ClsPaginas divDD.Visible = false; if (DdlOtrosPagos.SelectedValue == "2") { - TxtOtrosImportes.Visible = true; + TxtOtrosImportes.Visible = true; TxtTotal.Visible = true; GvMovAcreedor.Columns[8].Visible = true; TxtOtrosImportes.Text = ""; From d3913df39306c9437c24074e8c42a58c8119552c Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 11 Jul 2024 06:46:45 -0700 Subject: [PATCH 36/69] =?UTF-8?q?--=20modificaci=C3=B3n=20para=20que=20el?= =?UTF-8?q?=20ajuste=20sobre=20PU,=20est=C3=A9=20limitado=20a=20una=20dife?= =?UTF-8?q?rencia=20no=20mayor=20a=20$20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/RecepcionAlmacen.aspx.vb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 7ef7653f2..42ab686b6 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -2724,7 +2724,8 @@ Partial Class Inventarios_RecepcionAlmacen PU = PU.RoundAD For Each Dr As DataRow In DtDetalle.Rows SumaTotal += PU.RoundAD + CostoIndirecto ' se redondea a dos decimales. por la unidad es uno - If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalle.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then + Dim dif As Decimal = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - SumaTotal.RoundSQL ' si la diferencia es menor a $20 + If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalle.Rows.Count AndAlso Math.Abs(dif) < 20 Then If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (PU)) End If @@ -2741,7 +2742,8 @@ Partial Class Inventarios_RecepcionAlmacen If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundSQL For Each Dr As DataRow In DtDetalleLote.Rows SumaTotal += Dr("Cantidad").ToString.ToDecimal * (PU + CostoIndirecto) - If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalleLote.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then + Dim dif As Decimal = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - SumaTotal ' si la diferencia es menor a $20 + If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalleLote.Rows.Count AndAlso Math.Abs(dif) < 20 Then If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (Dr("Cantidad").ToString.ToDecimal * (PU)))) / Dr("Cantidad").ToString.ToDecimal End If @@ -2757,7 +2759,8 @@ Partial Class Inventarios_RecepcionAlmacen ' por redondeo If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundSQL SumaTotal += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU + CostoIndirecto) ' considerar el costo indirecto para el ajuste - If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal.RoundSQL Then + Dim dif As Decimal = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - SumaTotal.RoundSQL ' si la diferencia es menor a $20 + If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso Math.Abs(dif) < 20 Then Dim tTotal As Decimal = gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU) If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - tTotal)) / gvr.FCTextBox("TbCantidadF").Text.ToDecimal @@ -4195,7 +4198,6 @@ Partial Class Inventarios_RecepcionAlmacen CveCompraSurtir = -1 CvePrePolizaCompra = -1 - Dim ObjOC As New ClsOC Dim ObjInventario As New ClsInventarios @@ -4229,6 +4231,8 @@ Partial Class Inventarios_RecepcionAlmacen 'cuando están todos los detalles de la compra, nos indica que se va a recibir la totalidad de la compra If ObjInventario.DtResultados.Rows.Count = ObjInventario.DtResultados.Rows(0)("NumDetalles").ToString.ToEntero Then RecibidaCompleta = True + Else + RecibidaCompleta = False End If ''MONEDA DIFERENTE From 30eca403e7c08a2d75d054c697e1b7abf6bd3cd9 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 12 Jul 2024 17:36:21 -0700 Subject: [PATCH 37/69] --FIX validacion de costo para cotizaciones --- Ventas/Ventas.aspx.vb | 65 ++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index c9326985c..1b81cae90 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -8915,8 +8915,18 @@ Partial Class Ventas End If If CveUM <> CveUMInicial Then ValidaExistencia = True + 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS - If UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119))) Then + Dim ValidaExistenciasCosto As Boolean = UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119))) + + 'VALIDA COSTO PARA LAS COTIZACIONES + If Not ValidaExistenciasCosto Then + If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso (UsuarioActual.Empresa.Funcionalidad(382) = "1" OrElse UsuarioActual.CveEmpresa = 1) Then + ValidaExistenciasCosto = True + End If + End If + + If ValidaExistenciasCosto Then Dim ObjInventarios As New ClsInventarios Dim Existencia As Decimal If ValidaExistencia Then @@ -18839,33 +18849,24 @@ Partial Class Ventas ' NO VALIDA EXISTENCIAS NI COSTO - PERMISO PARA NO VALIDAR If Not UsuarioActual.TienePermisoProceso(169) AndAlso RBLTipoVenta.SelectedValue.ToEntero <> 5 Then 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS - If UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") OrElse ((DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119)) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ped") And UsuarioActual.CveEmpresa.Contiene(186)))) Then + Dim ValidaExistenciasCosto As Boolean = UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") OrElse ((DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119)) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ped") And UsuarioActual.CveEmpresa.Contiene(186)))) + + 'VALIDA COSTO PARA LAS COTIZACIONES + If Not ValidaExistenciasCosto Then + If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso (UsuarioActual.Empresa.Funcionalidad(382) = "1" OrElse UsuarioActual.CveEmpresa = 1) Then + ValidaExistenciasCosto = True + End If + End If + + If ValidaExistenciasCosto Then Dim ObjInventarios As New ClsInventarios - Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) - - - Dim Existencia As Decimal = 0D - - If RBLTipoVenta.SelectedValue.ToEntero = 6 Then - Existencia = ObjInventarios.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, CveAlamcenFiltroDdl, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=-1, - CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=0, PendientePorSurtir:=1, - RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) - Else - Existencia = ObjInventarios.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), - CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, - RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) - End If - - - - Dim Costo As Decimal = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal If Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() + Dim PrecioMinimo As Decimal = 0 'RMF. condicion temporal, para reubicación, precio mínimo If UsuarioActual.CveEmpresa = 119 Then @@ -18881,9 +18882,29 @@ Partial Class Ventas End If - If DdlTipoComprobante.SelectedValue <> "Cot" And ChkSinExistencia.Checked = False Or UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then + Dim ValidaExistencia As Boolean = (DdlTipoComprobante.SelectedValue <> "Cot" And ChkSinExistencia.Checked = False) Or UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 + + If ValidaExistencia Then + 'VALIDA EXISTENCIA If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 153, 140, 186, 190}) Then + + Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) + + Dim Existencia As Decimal = 0D + + Using ObjInv2 As New ClsInventarios + If RBLTipoVenta.SelectedValue.ToEntero = 6 Then + Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, CveAlamcenFiltroDdl, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=-1, + CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=0, PendientePorSurtir:=1, + RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) + Else + Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), + CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, + RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) + End If + End Using + If CveVenta <= 0 OrElse Me.EsCreaApartirDe Then If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < (If(CantidadModal > 0, CantidadModal, TxtCantidad.Text.ToDouble)) Then Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) From cba1e4cdefb53b51f5b3933bc60176c9f7fd9458 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 08:45:37 -0700 Subject: [PATCH 38/69] =?UTF-8?q?--=20activaci=C3=B3n=20de=20proyecto:=20Z?= =?UTF-8?q?ona?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsPaginas.vb | 15 +- Compras/RepCompras.aspx | 97 +- Compras/RepCompras.aspx.vb | 6 +- Compras/RepComprasDetalle.aspx | 91 +- Compras/RepComprasDetalle.aspx.vb | 15 +- Compras/RepProductosServicios.aspx.vb | 34 +- Compras/RepProductosServiciosDetalle.aspx | 12 +- Compras/RepProductosServiciosDetalle.aspx.vb | 34 +- Ventas/RepProductosServicios.aspx | 2 +- Ventas/RepProductosServicios.aspx.vb | 4 +- Ventas/RepProductosServiciosDetalle.aspx | 4 +- Ventas/RepProductosServiciosDetalle.aspx.vb | 23 +- Ventas/RepVentas.aspx | 2 +- Ventas/RepVentas.aspx.vb | 12 +- ...entaDetalle.aspx => RepVentasDetalle.aspx} | 1744 ++++++++--------- ...talle.aspx.vb => RepVentasDetalle.aspx.vb} | 4 +- 16 files changed, 1022 insertions(+), 1077 deletions(-) rename Ventas/{RepVentaDetalle.aspx => RepVentasDetalle.aspx} (98%) rename Ventas/{RepVentaDetalle.aspx.vb => RepVentasDetalle.aspx.vb} (99%) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 4ebbbfb54..f64850f30 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4988,7 +4988,7 @@ Public Class ClsPaginas ObjUsuario.Dispose() Return Retorno End Function - Public Sub CargarCentrosDeCosto(DdlProyecto As ListControl, DdlSubProyecto As ListControl, LblProyecto As Label, LblSubProyecto As Label, Optional AplicaTodos As String = "Todos", Optional DdlSubProyectoMultiple As ListControl = Nothing, Optional divProyecto As HtmlControl = Nothing) + Public Sub CargarCentrosDeCosto(DdlProyecto As ListControl, DdlSubProyecto As ListControl, LblProyecto As Label, LblSubProyecto As Label, Optional AplicaTodos As String = "Todos", Optional DdlSubProyectoMultiple As ListControl = Nothing, Optional divProyecto As HtmlControl = Nothing, Optional VisualizacionReporte As Integer = -1) Select Case UsuarioActual.Empresa.Tipo_CentroCosto Case 1 @@ -5001,6 +5001,14 @@ Public Class ClsPaginas If LblProyecto IsNot Nothing Then LblProyecto.Visible = False If divProyecto IsNot Nothing Then divProyecto.Visible = False If LblSubProyecto IsNot Nothing Then LblSubProyecto.Text = "Sucursal" + If VisualizacionReporte = 1 Then + If UsuarioActual.Empresa.Funcionalidad(307) <> "" Then + If DdlProyecto IsNot Nothing Then DdlProyecto.Visible = True + If LblProyecto IsNot Nothing Then LblProyecto.Visible = True + If divProyecto IsNot Nothing Then divProyecto.Visible = True + If LblProyecto IsNot Nothing Then LblProyecto.Text = UsuarioActual.Empresa.Funcionalidad(307) + End If + End If Case 3 If DdlProyecto IsNot Nothing Then DdlProyecto.Visible = False If LblProyecto IsNot Nothing Then LblProyecto.Visible = False @@ -10672,8 +10680,8 @@ Public Class ClsPaginas PaginaDict.Add("/Ventas/RepCotizaciones.aspx".ToUpper(), 430) PaginaDict.Add("/Ventas/RepCotizacionesDetalle.aspx".ToUpper(), 430) PaginaDict.Add("/Ventas/RepVentasPV.aspx".ToUpper(), 9) - PaginaDict.Add("/Ventas/RepVentaDetalle.aspx".ToUpper(), 9) - PaginaDict.Add("/Ventas/RepVentaDetalle.aspx?Menu=1".ToUpper(), 785) + PaginaDict.Add("/Ventas/RepVentasDetalle.aspx".ToUpper(), 9) + PaginaDict.Add("/Ventas/RepVentasDetalle.aspx?Menu=1".ToUpper(), 785) PaginaDict.Add("/Ventas/CatClasificaciones.aspx".ToUpper(), 12) PaginaDict.Add("/Ventas/CatClasificaciones2.aspx".ToUpper(), 396) PaginaDict.Add("/Ventas/CatClasificacionesDetalle.aspx".ToUpper(), 12) @@ -10931,3 +10939,4 @@ Public Class ClsPaginas #End Region End Class + diff --git a/Compras/RepCompras.aspx b/Compras/RepCompras.aspx index c2c3b08bd..0eea249dd 100644 --- a/Compras/RepCompras.aspx +++ b/Compras/RepCompras.aspx @@ -174,43 +174,14 @@ --%> -
    F. I. Captura
    -
    -
    - - - - - - - - - - -
    -
    -
    F. F. Captura:
    -
    -
    - - - - - - - - - - -
    -
    +
    Moneda:
    -
    Tipo de Proveedor:
    +
    Tipo de Prov:
    @@ -219,14 +190,18 @@
    - -
    -
    Capturó:
    -
    - +
    Tipo Docto:
    +
    + + + + +
    +
    +
    Responsable:
    @@ -239,17 +214,45 @@ --%> -
    -
    Tipo Docto:
    -
    - - - - - - - -
    +
    +
    +
    +
    Capturó:
    +
    + + + +
    +
    F. I. Captura
    +
    +
    + + + + + + + + + + +
    +
    +
    F. F. Captura:
    +
    +
    + + + + + + + + + + +
    +
    diff --git a/Compras/RepCompras.aspx.vb b/Compras/RepCompras.aspx.vb index 9e5844ce5..6c08d50d5 100644 --- a/Compras/RepCompras.aspx.vb +++ b/Compras/RepCompras.aspx.vb @@ -68,7 +68,9 @@ Partial Class Compras_RepCompras DdlGrupo.Items.Insert(6, New ListItem("Tipo Documento", "6")) DdlGrupo.Items.Insert(7, New ListItem("Clasificación Prov.", "7")) DdlGrupo.Items.Insert(8, New ListItem("Responsable", "8")) - DdlGrupo.Items.Insert(9, New ListItem("Remesa", "10")) + DdlGrupo.Items.Insert(9, New ListItem("Remesa", "10")) + If UsuarioActual.Empresa.Funcionalidad(307) <> "" Then DdlGrupo.Items.Insert(10, New ListItem(UsuarioActual.Empresa.Funcionalidad(307), "13")) + DdlGrupo.DataBind() DdlGrupo.SelectedValueExist("3") End Sub @@ -77,7 +79,7 @@ Partial Class Compras_RepCompras txtFechaI.Text = $"01/01/{NowADS().Year}" 'Carga Tipo Centro de Costo - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) 'CargaProveedores DdlProveedores.setEsWebService(True) diff --git a/Compras/RepComprasDetalle.aspx b/Compras/RepComprasDetalle.aspx index df26c2813..4765f5ede 100644 --- a/Compras/RepComprasDetalle.aspx +++ b/Compras/RepComprasDetalle.aspx @@ -217,37 +217,8 @@ --%> -
    F. I. Captura
    -
    -
    - - - - - - - - - - -
    -
    -
    F. F. Captura:
    -
    -
    - - - - - - - - - - -
    -
    -
    Tipo de Proveedor:
    + +
    Tipo Prov.:
    @@ -256,14 +227,19 @@
    - -
    -
    Capturó:
    -
    - +
    Tipo Docto:
    +
    + + + + +
    +
    +
    +
    Responsable:
    @@ -277,16 +253,45 @@ --%>
    -
    Tipo Docto:
    -
    - + +
    +
    +
    Capturó:
    +
    + - - - -
    +
    F. I. Captura
    +
    +
    + + + + + + + + + + +
    +
    +
    F. F. Captura:
    +
    +
    + + + + + + + + + + +
    +
    diff --git a/Compras/RepComprasDetalle.aspx.vb b/Compras/RepComprasDetalle.aspx.vb index 669e79f5a..c6be3b353 100644 --- a/Compras/RepComprasDetalle.aspx.vb +++ b/Compras/RepComprasDetalle.aspx.vb @@ -114,14 +114,8 @@ Partial Class Compras_RepComprasDetalle If IfNull(Request("TipoCambio"), "1").ToString <> "1" Then RblTipoCambio.SelectedValue = IfNull(Request("TipoCambio"), "1").ToString - End If - - - 'txtFechaI.Text = If(Anio <> "-1", String.Format("01/01/{0}", Anio), txtFechaI.Text) - 'txtFechaI.Text = If(Mes <> "-1", String.Format("01/{0}/0001", Mes), txtFechaI.Text) - 'txtFechaI.Text = If(AnioMes <> "-1", String.Format("01/{0}/{1}", AnioMes.Substring(5, 2).PadLeft(2, "0"c), AnioMes.Substring(0, 4)), txtFechaI.Text) - - + End If + If Fecha <> "-1" Then txtFechaI.Text = Fecha txtFechaF.Text = Fecha @@ -130,7 +124,6 @@ Partial Class Compras_RepComprasDetalle If FechaF <> "-1" Then txtFechaF.Text = FechaF End If - If FechaCaptura <> "-1" Then TxtFechaICaptura.Text = FechaCaptura TxtFechaFCaptura.Text = FechaCaptura @@ -145,6 +138,8 @@ Partial Class Compras_RepComprasDetalle DdlProyecto.SelectedValueExist(CveProyecto) + If CveProyecto.ToEntero > 0 Then CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") + 'CARGA LISTBOXs DdlSubProyecto.SelectedValuesIfExistM(SubProyecto) DdlTipoGasto.SelectedValuesIfExistM(TipoGasto) @@ -189,7 +184,7 @@ Partial Class Compras_RepComprasDetalle Private Sub CargaCombos() 'Carga Tipo Centro de Costo - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) 'Carga Tipo de Gasto DdlTipoGasto.DataSource = GlobalDTTiposGastos(UsuarioActual.CveEmpresa) diff --git a/Compras/RepProductosServicios.aspx.vb b/Compras/RepProductosServicios.aspx.vb index c663aa5a3..4c09f6965 100644 --- a/Compras/RepProductosServicios.aspx.vb +++ b/Compras/RepProductosServicios.aspx.vb @@ -114,7 +114,7 @@ Partial Class Compras_RepProductosServicios CargaGrupo() 'Carga Tipo Centro de Costo - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) If UsuarioActual.Empresa.Funcionalidad(590).ToString.ToEntero = 1 Then lblCultivo.Visible = True @@ -123,36 +123,7 @@ Partial Class Compras_RepProductosServicios lblCultivo.Visible = False DivCultivo.Visible = False DdlSubProyecto.AutoPostBack = False - End If - - - 'CARGA COSTOS - If UsuarioActual.CveEmpresa = 66 Then - - Dim NumItems As Integer = DdlGrupo.Items.Count - - 'COSTOS PROYECTO - DdlGrupo.Items.Insert(NumItems, New ListItem("Costos", "13")) - RowCostos.Visible = True - - 'Carga Familias - DdlFamilia.DataSource = GlobalDTFamilias(66) - DdlFamilia.DataBind() - - 'Carga SubFamilias - DdlSubFamilia.DataSource = GlobalDTSubFamilias(66) - DdlSubFamilia.DataBind() - - 'COSTOS AF - DdlGrupo.Items.Insert(NumItems + 1, New ListItem("Costos por Activo Fijo", "14")) - - 'Carga AF - 'DdlAF.DataSource = GlobalDTActivoFijos().FiltraParametros(String.Format("CveEmpresa = {0}", UsuarioActual.CveEmpresa)) - 'DdlAF.DataBind() - - End If - RowActivoFijo.Visible = True 'Carga Fechas @@ -175,6 +146,7 @@ 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")) + If UsuarioActual.Empresa.Funcionalidad(307) <> "" Then DdlGrupo.Items.Insert(10, New ListItem(UsuarioActual.Empresa.Funcionalidad(307), "1")) 'Agrega el grupo si es una empresa Agricola If UsuarioActual.Empresa.Funcionalidad(590).ToString.ToEntero = 1 Then @@ -330,7 +302,7 @@ Partial Class Compras_RepProductosServicios #Region " SELECTED INDEX CHANGED" Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlProyecto.SelectedIndexChanged - CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") End Sub Protected Sub DdlSubProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSubProyecto.SelectedIndexChanged diff --git a/Compras/RepProductosServiciosDetalle.aspx b/Compras/RepProductosServiciosDetalle.aspx index 1107a2db1..1869066d7 100644 --- a/Compras/RepProductosServiciosDetalle.aspx +++ b/Compras/RepProductosServiciosDetalle.aspx @@ -261,19 +261,19 @@ - - + - - + - - + + + + diff --git a/Compras/RepProductosServiciosDetalle.aspx.vb b/Compras/RepProductosServiciosDetalle.aspx.vb index b15d64676..9c3f6065f 100644 --- a/Compras/RepProductosServiciosDetalle.aspx.vb +++ b/Compras/RepProductosServiciosDetalle.aspx.vb @@ -130,7 +130,8 @@ Partial Class Compras_RepProductosServiciosDetalle End If End If DdlProyecto.SelectedValueExist(Proyecto) - 'CARGA LISTBOXs + 'CARGA + If Proyecto.ToEntero > 0 Then CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") DdlSubProyecto.SelectedValuesIfExistM(SubProyecto) DdlTipoGasto.SelectedValuesIfExistM(TipoGasto) DdlCategoria.SelectedValuesIfExistM(Categoria) @@ -181,7 +182,7 @@ Partial Class Compras_RepProductosServiciosDetalle Private Sub SetValues() 'Carga Tipo Centro de Costo - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) 'Carga Tipos de Gasto DdlTipoGasto.DataSource = GlobalDTTiposGastos(UsuarioActual.CveEmpresa) @@ -233,33 +234,6 @@ Partial Class Compras_RepProductosServiciosDetalle 'Carga Grupos CargaGrupo() - - 'CARGA COSTOS - If UsuarioActual.CveEmpresa = 66 Then - - Dim NumItems As Integer = DdlGrupo.Items.Count - - 'COSTOS PROYECTO - DdlGrupo.Items.Insert(NumItems, New ListItem("Costos", "13")) - RowCostos.Visible = True - - 'Carga Familias - DdlFamilia.DataSource = GlobalDTFamilias(66) - DdlFamilia.DataBind() - - 'Carga SubFamilias - DdlSubFamilia.DataSource = GlobalDTSubFamilias(66) - DdlSubFamilia.DataBind() - - 'COSTOS AF - DdlGrupo.Items.Insert(NumItems + 1, New ListItem("Costos por Activo Fijo", "14")) - - 'Carga AF - 'DdlAF.DataSource = GlobalDTActivoFijos().FiltraParametros(String.Format("CveEmpresa = {0}", UsuarioActual.CveEmpresa)) - 'DdlAF.DataBind() - - End If - RowActivoFijo.Visible = True 'Carga Fechas @@ -365,7 +339,7 @@ Partial Class Compras_RepProductosServiciosDetalle #Region "SELECT INDEX CHANGED" Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlProyecto.SelectedIndexChanged - CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") End Sub Protected Sub DdlSubProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSubProyecto.SelectedIndexChanged CargaCultivo() diff --git a/Ventas/RepProductosServicios.aspx b/Ventas/RepProductosServicios.aspx index e86eb0617..8146e30e8 100644 --- a/Ventas/RepProductosServicios.aspx +++ b/Ventas/RepProductosServicios.aspx @@ -196,7 +196,7 @@
    Proyecto:
    - +
    SubProyecto:
    diff --git a/Ventas/RepProductosServicios.aspx.vb b/Ventas/RepProductosServicios.aspx.vb index 381395413..0d55213e5 100644 --- a/Ventas/RepProductosServicios.aspx.vb +++ b/Ventas/RepProductosServicios.aspx.vb @@ -161,7 +161,7 @@ Partial Class Ventas_RepProductosServicios DdlClienteClasificacion.DataBind() DdlClienteClasificacion.Items.Insert(0, New ListItem("Todos", "-1")) - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) CargarCentrosDeCosto(Nothing, DdlSubProyectoEjecucion, Nothing, Nothing) CargaGrupo() @@ -396,7 +396,7 @@ Partial Class Ventas_RepProductosServicios End Sub Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlProyecto.SelectedIndexChanged - CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") End Sub 'Protected Sub DdlCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlCategoria.SelectedIndexChanged diff --git a/Ventas/RepProductosServiciosDetalle.aspx b/Ventas/RepProductosServiciosDetalle.aspx index 45c299c7d..cc9d37022 100644 --- a/Ventas/RepProductosServiciosDetalle.aspx +++ b/Ventas/RepProductosServiciosDetalle.aspx @@ -198,11 +198,11 @@
    Proyecto:
    - +
    SubProyecto:
    - +
    diff --git a/Ventas/RepProductosServiciosDetalle.aspx.vb b/Ventas/RepProductosServiciosDetalle.aspx.vb index 4338b5057..fc20b38e6 100644 --- a/Ventas/RepProductosServiciosDetalle.aspx.vb +++ b/Ventas/RepProductosServiciosDetalle.aspx.vb @@ -191,7 +191,7 @@ Partial Class Ventas_RepProductosServiciosDetalle DdlTipoPSDes.DataBind() CargaGrupo() - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) CargarCentrosDeCosto(Nothing, DdlSubProyectoEjecucion, Nothing, Nothing) TCEspecifico = 0 @@ -210,9 +210,6 @@ Partial Class Ventas_RepProductosServiciosDetalle Private Sub CargaSucursales(CveCliente As Integer, CveClienteSucursal As Integer) DdlClienteSucursal.Items.Clear() - - - If CveCliente > 0 Then Dim ObjCliente As New ClsClientes @@ -224,19 +221,12 @@ Partial Class Ventas_RepProductosServiciosDetalle End If End If ObjCliente.Dispose() - DdlClienteSucursal.DataBind() - End If - - DdlClienteSucursal.Items.Insert(0, New ListItem("Todas", "-1")) DdlClienteSucursal.Items.Insert(1, New ListItem("Sin Sucursal", "0")) - DdlClienteSucursal.SelectedValueExist(CveClienteSucursal) - - End Sub Private Sub CargaParametrosDetalle() @@ -248,7 +238,6 @@ Partial Class Ventas_RepProductosServiciosDetalle Dim CveClasificacionDetalle As Integer = -1 Dim CveClienteSucursal As Integer = -1 - GPO = If(Request("Grupo") IsNot Nothing AndAlso Request("Grupo").ToEntero() > 0, Request("Grupo").ToEntero(), -1).ToString CveProyecto = If(Request("CveProyecto") IsNot Nothing AndAlso Request("CveProyecto").ToEntero() > 0, Request("CveProyecto").ToEntero(), -1).ToString @@ -335,17 +324,13 @@ Partial Class Ventas_RepProductosServiciosDetalle Else txtFechaF.Text = FechaFRef.ToString("dd/MM/yyyy") End If - End If - Else - If FechaI = "-1" Then txtFechaI.Text = If(AnioMes <> "-1", String.Format("01/{0}/{1}", AnioMes.Substring(5, 1).PadLeft(2, "0"c), AnioMes.Substring(0, 4)), txtFechaI.Text) Else txtFechaI.Text = FechaI End If - FechaFtemporal = $"01/{AnioMes.Substring(5, 1).PadLeft(2, "0"c)}/{AnioMes.Substring(0, 4)}" If FechaF = "-1" Then @@ -360,10 +345,7 @@ Partial Class Ventas_RepProductosServiciosDetalle txtFechaF.Text = FechaFRef.ToString("dd/MM/yyyy") End If End If - - End If - End If txtFechaI.Text = If(Mes <> "-1", String.Format("01/{0}/0001", Mes), txtFechaI.Text) @@ -408,6 +390,7 @@ Partial Class Ventas_RepProductosServiciosDetalle CveMoneda = If(Request("CveMoneda") IsNot Nothing AndAlso Request("CveMoneda").ToEntero() > 0, Request("CveMoneda").ToEntero(), -1).ToEntero DdlProyecto.SelectedValueExist(CveProyecto) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") DdlSubProyecto.SelectedValueExist(CveSubProyecto) DdlCategoria.SelectedValueExist(CveCategoria) DdlClasificacion.SelectedValueExist(CveClasificacion) @@ -621,7 +604,7 @@ Partial Class Ventas_RepProductosServiciosDetalle End Sub Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlProyecto.SelectedIndexChanged - CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") End Sub diff --git a/Ventas/RepVentas.aspx b/Ventas/RepVentas.aspx index f56c656e7..bffd19571 100644 --- a/Ventas/RepVentas.aspx +++ b/Ventas/RepVentas.aspx @@ -215,7 +215,7 @@
    Proyecto:
    - +
    SubProyecto:
    diff --git a/Ventas/RepVentas.aspx.vb b/Ventas/RepVentas.aspx.vb index 12053f771..68fe58c67 100644 --- a/Ventas/RepVentas.aspx.vb +++ b/Ventas/RepVentas.aspx.vb @@ -179,6 +179,8 @@ Partial Class Ventas_RepVentas DdlGrupo.Items.Insert(13, New ListItem("Tipo Cliente", "20")) DdlGrupo.Items.Insert(13, New ListItem("Vendedor/Cliente", "21")) DdlGrupo.Items.Insert(13, New ListItem("Giro", "22")) + If UsuarioActual.Empresa.Funcionalidad(307) <> "" Then DdlGrupo.Items.Insert(10, New ListItem(UsuarioActual.Empresa.Funcionalidad(307), "23")) + DdlGrupo.DataBind() DdlGrupo.SelectedValueExist("3") End Sub @@ -191,9 +193,9 @@ Partial Class Ventas_RepVentas Private Sub CargaCombos() - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) - - 'CargaClientes + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) + + 'CargaClientes Dim EsWS As Boolean = If(UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1", True, False) If EsWS Then DdlClientes.setEsWebService(True) @@ -389,7 +391,7 @@ Partial Class Ventas_RepVentas End If Dim CveSubProyecto As String = "-1", CveProyecto As String = "-1" - If DdlGrupo.SelectedValue.ToEntero = 19 Then + If DdlGrupo.SelectedValue.ToEntero.Contiene(19) Then CveSubProyecto = e.Row.DBCampo("CveCentroCosto") CveProyecto = e.Row.DBCampo("CveCentroCostoProyecto") Else @@ -486,7 +488,7 @@ Partial Class Ventas_RepVentas 'LIGA A DETALLE - Dim Liga As String = $"/Ventas/RepVentaDetalle.aspx?GPO={DdlGrupo.SelectedValue}&Anio={e.Row.DBCampo("Anio")}&Mes={e.Row.DBCampo("Mes")}&AnioMes={e.Row.DBCampo("AnioMes")}&Fecha={e.Row.DBCampo("Fecha")}&AnioEjec={e.Row.DBCampo("AnioEjec")}&MesEjec={e.Row.DBCampo("MesEjec")}&AnioMesEjec={e.Row.DBCampo("AnioMesEjec")}&FechaEjec={e.Row.DBCampo("FechaEjec")}&CveCliente={e.Row.DBCampo("CveCliente")}&CveVendedor={ e.Row.DBCampo("CveVendedor")}&CveUsuario={e.Row.DBCampo("CveUsuario")}&CveEstatusFactura={e.Row.DBCampo("CveEstatusFactura")}&FechaI={FechaInicial}&FechaF={FechaFinal}&FechaIEjec={FechaIEjec}&FechaFEjec={FechaFEjec}&IVA={e.Row.DBCampo("GPO_IVA")}&CveCorte={ e.Row.DBCampo("CveCorte")}&TipoDocto={ DdlTipoComprobante.GetSelectedValuesM}&CveSubProyectoEjecucion={e.Row.DBCampo("CveSubProyectoEjecucion")}&CveSubProyecto={CveSubProyecto}&CveProyecto={CveProyecto}&TipoCambio={TipoCambio}&TCEspecifico={TCEspecifico}&CveMoneda={CveMoneda}&CveClienteClasificacion={e.Row.DBCampo("CveClienteClasificacion")}&CveCondicionesPago={DdlCondicionesPago.SelectedValue}&TipoCliente={ If(DdlGrupo.SelectedValue.ToEntero = 20, e.Row.DBCampo("TipoCliente"), DdlTipoCliente.SelectedValue)}&ModalidadContable={If(ChkLecturaAdmin.Checked, 0, 1)}&CveTipoRelacion={DdlTipoRelacion.SelectedValue}&ServicioDomicilio={DdlServicioDomicilio.SelectedValue}&EsFacturaGlobal={DdlFacturaGlobal.SelectedValue}&EsFilial={e.Row.DBCampo("EsFilial")}" + Dim Liga As String = $"/Ventas/RepVentasDetalle.aspx?GPO={DdlGrupo.SelectedValue}&Anio={e.Row.DBCampo("Anio")}&Mes={e.Row.DBCampo("Mes")}&AnioMes={e.Row.DBCampo("AnioMes")}&Fecha={e.Row.DBCampo("Fecha")}&AnioEjec={e.Row.DBCampo("AnioEjec")}&MesEjec={e.Row.DBCampo("MesEjec")}&AnioMesEjec={e.Row.DBCampo("AnioMesEjec")}&FechaEjec={e.Row.DBCampo("FechaEjec")}&CveCliente={e.Row.DBCampo("CveCliente")}&CveVendedor={ e.Row.DBCampo("CveVendedor")}&CveUsuario={e.Row.DBCampo("CveUsuario")}&CveEstatusFactura={e.Row.DBCampo("CveEstatusFactura")}&FechaI={FechaInicial}&FechaF={FechaFinal}&FechaIEjec={FechaIEjec}&FechaFEjec={FechaFEjec}&IVA={e.Row.DBCampo("GPO_IVA")}&CveCorte={ e.Row.DBCampo("CveCorte")}&TipoDocto={ DdlTipoComprobante.GetSelectedValuesM}&CveSubProyectoEjecucion={e.Row.DBCampo("CveSubProyectoEjecucion")}&CveSubProyecto={CveSubProyecto}&CveProyecto={CveProyecto}&TipoCambio={TipoCambio}&TCEspecifico={TCEspecifico}&CveMoneda={CveMoneda}&CveClienteClasificacion={e.Row.DBCampo("CveClienteClasificacion")}&CveCondicionesPago={DdlCondicionesPago.SelectedValue}&TipoCliente={ If(DdlGrupo.SelectedValue.ToEntero = 20, e.Row.DBCampo("TipoCliente"), DdlTipoCliente.SelectedValue)}&ModalidadContable={If(ChkLecturaAdmin.Checked, 0, 1)}&CveTipoRelacion={DdlTipoRelacion.SelectedValue}&ServicioDomicilio={DdlServicioDomicilio.SelectedValue}&EsFacturaGlobal={DdlFacturaGlobal.SelectedValue}&EsFilial={e.Row.DBCampo("EsFilial")}" e.Row.FCLiteral("LtlGrupo").Text = "" & e.Row.FCLiteral("LtlGrupo").Text & "" diff --git a/Ventas/RepVentaDetalle.aspx b/Ventas/RepVentasDetalle.aspx similarity index 98% rename from Ventas/RepVentaDetalle.aspx rename to Ventas/RepVentasDetalle.aspx index 9129c8dd3..8317229e6 100644 --- a/Ventas/RepVentaDetalle.aspx +++ b/Ventas/RepVentasDetalle.aspx @@ -1,90 +1,90 @@ -<%@ Page Title="Reporte de Ventas - Detalle" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="RepVentaDetalle.aspx.vb" Inherits="RepVentaDetalle" EnableEventValidation="false" %> - - - - - - - - - - -
  • - PDF -
  • -
  • - Excel -
  • -
  • - Excel -
  • -
  • - Excel Personalizado -
  • -
  • - <%-- Personalizar Columnas--%> - Personalizar Columnas -
  • -
  • - Descarga PDFs -
  • -
  • - Descargar XML -
  • -
  • - Ver Grafica -
  • -
    - - - - - - - - -
    -
    - - +<%@ Page Title="Reporte de Ventas - Detalle" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="RepVentasDetalle.aspx.vb" Inherits="RepVentasDetalle" EnableEventValidation="false" %> + + + + + + + + + + +
  • + PDF +
  • +
  • + Excel +
  • +
  • + Excel +
  • +
  • + Excel Personalizado +
  • +
  • + <%-- Personalizar Columnas--%> + Personalizar Columnas +
  • +
  • + Descarga PDFs +
  • +
  • + Descargar XML +
  • +
  • + Ver Grafica +
  • +
    + + + + + + + + +
    +
    + + <%--
    @@ -95,35 +95,35 @@
    - --%> - - - Reporte de Ventas - Detalle - - - - - - -
    -
    -
    - - -
    -
    -
    - -
    - - - - - - - - - + --%> + + + Reporte de Ventas - Detalle + + + + + + +
    +
    +
    + + +
    +
    +
    + +
    + + + + + + + + + <%-- @@ -133,48 +133,48 @@ - --%> -
    - -
    + --%> +
    + +
    Fecha Inicio: - -
    -
    -
    - - - - -
    - - - - - - -
    -
    + +
    +
    +
    + + + + +
    + + + + + + +
    +
    Fecha Fin: - -
    -
    -
    - - - - -
    - - - - - - -
    - -
    - + +
    +
    +
    + + + + +
    + + + + + + +
    + +
    + <%-- @@ -193,750 +193,750 @@ - --%> - -
    -
    -
    -
    - +
    + -
    - - - - - - - <%-- 0--%> - - - - - - - <%-- 1--%> - - - - - - - <%-- 2--%> - - - - - - <%-- 3--%> - - - - - - <%-- 4--%> - - - - - - <%-- 5--%> - - - - - - <%-- 6--%> - - - - - - <%-- 7--%> - - - - - - <%-- 8--%> - - - - - - <%-- 9--%> - - - - - - <%-- 10--%> - - - - - - <%-- 11--%> - - - - - - <%-- 12--%> - - - - - - <%-- 13--%> - - - - - - <%-- 14--%> - - - - - - <%-- 15--%> - - - - - - <%-- 16--%> - - - - - - <%-- 17--%> - - - - - - <%-- 18--%> - - - - - - <%-- 19--%> - - - - - - <%-- 20--%> - - - - - - <%-- 21--%> - - - - - - <%-- 22--%> - - - - - - <%-- 23--%> - - - - - - <%-- 24--%> - - - - - - <%-- 25--%> - - - - - - <%-- 26--%> - - - - - - <%-- 27--%> - - - - - - <%-- 28--%> - - - - - - <%-- 29--%> - - - - - - <%-- 30--%> - - - - - - <%-- 31--%> - - - - - - <%-- 32--%> - - - - - - <%-- 33--%> - - - - - - - <%-- 34--%> - - - - - - <%-- 35--%> - - - - - - - - - <%-- 36--%> - - - - - - <%-- 37--%> - - - - - - <%-- 38--%> - - - - - - <%-- 39--%> - - - - - - <%-- 40--%> - - - - - - <%-- 41--%> - - - - - - <%-- 42--%> - - - - - - <%-- 43--%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + --%> +
    + +
    + + + +
    + +
    +
    + + + + + + + + + + +
    +
    + +
    +
    + + + + + + + + + + +
    +
    +
    +
    + +
    + + + +
    + +
    + +
    + + +
    + + + + + +
    + + +
    + + + + + +
    + +
    +
    + +
    + +
    + +
    + + + + + +
    + +
    + + +
    + + Servicio Domicilio: +
    + + Todos + Si + No + +
    + Factura Global: +
    + + Todos + Solo Globales + Sin Globales + +
    + +
    +
    +
    +
    +
    + + + + + <%-- 0--%> + + + + + + + <%-- 1--%> + + + + + + + <%-- 2--%> + + + + + + <%-- 3--%> + + + + + + <%-- 4--%> + + + + + + <%-- 5--%> + + + + + + <%-- 6--%> + + + + + + <%-- 7--%> + + + + + + <%-- 8--%> + + + + + + <%-- 9--%> + + + + + + <%-- 10--%> + + + + + + <%-- 11--%> + + + + + + <%-- 12--%> + + + + + + <%-- 13--%> + + + + + + <%-- 14--%> + + + + + + <%-- 15--%> + + + + + + <%-- 16--%> + + + + + + <%-- 17--%> + + + + + + <%-- 18--%> + + + + + + <%-- 19--%> + + + + + + <%-- 20--%> + + + + + + <%-- 21--%> + + + + + + <%-- 22--%> + + + + + + <%-- 23--%> + + + + + + <%-- 24--%> + + + + + + <%-- 25--%> + + + + + + <%-- 26--%> + + + + + + <%-- 27--%> + + + + + + <%-- 28--%> + + + + + + <%-- 29--%> + + + + + + <%-- 30--%> + + + + + + <%-- 31--%> + + + + + + <%-- 32--%> + + + + + + <%-- 33--%> + + + + + + + <%-- 34--%> + + + + + + <%-- 35--%> + + + + + + + + + <%-- 36--%> + + + + + + <%-- 37--%> + + + + + + <%-- 38--%> + + + + + + <%-- 39--%> + + + + + + <%-- 40--%> + + + + + + <%-- 41--%> + + + + + + <%-- 42--%> + + + + + + <%-- 43--%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + - + + diff --git a/Ventas/RepVentaDetalle.aspx.vb b/Ventas/RepVentasDetalle.aspx.vb similarity index 99% rename from Ventas/RepVentaDetalle.aspx.vb rename to Ventas/RepVentasDetalle.aspx.vb index 41430dc83..e17983fda 100644 --- a/Ventas/RepVentaDetalle.aspx.vb +++ b/Ventas/RepVentasDetalle.aspx.vb @@ -6,7 +6,7 @@ Imports Extensiones Imports Microsoft.Reporting.WebForms Imports System.Net.Http -Partial Class RepVentaDetalle +Partial Class RepVentasDetalle Inherits ClsPaginas #Region "P R O P I E D A D E S" Private Property CveProyecto As Integer @@ -1209,7 +1209,7 @@ Partial Class RepVentaDetalle Vendedor = If(DdlVendedor.GetSelectedText = "", "", $" Vendedor: {DdlVendedor.GetSelectedText}") CveUsuario = If(DdlUsuario.SelectedValue = "-1", "", $" Usuario: {DdlUsuario.SelectedItem.Text}") CveEstatusFactura = If(DdlEstatus.GetSelectedText = "", "", $" Estatus: {DdlEstatus.GetSelectedText}") - CondicionesPago = If(DdlCondicionesPago.selectedValue = "-1", "", String.Format(" Condiciones Pago: {0}", DdlCondicionesPago.SelectedItem.Text)) + CondicionesPago = If(DdlCondicionesPago.SelectedValue = "-1", "", String.Format(" Condiciones Pago: {0}", DdlCondicionesPago.SelectedItem.Text)) Dim RutaFormato As String = String.Format("{0}Formatos\RepVentaDetalle.rdlc", UsuarioActual.Empresa.Ruta) From 688358b10b5b3ece4e2137c62f4034a4a7703267 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 08:46:21 -0700 Subject: [PATCH 39/69] =?UTF-8?q?--activaci=C3=B3n=20envio=20whatsapp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/modExtensiones.vb | 43 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index 5bb948f6b..0785bc7fe 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -450,8 +450,8 @@ Namespace Extensiones ToastInformacion = 5 'succes ToastInformacionB = 6 'info ToastError = 7 'error - ToastAdventencia = 8 'Warning - + ToastAdventencia = 8 'Warning + End Enum Public Sub Alert(Obj As Object, Mensaje As String, pOpcion As TipoMensaje, Optional JSBtnAceptar As String = "", Optional TextoConfirmacion As String = "Aceptar", Optional TextoCancelacion As String = "Cancelar", Optional TimeoutToast As Integer = 5, Optional ShowCloseButton As Boolean = True, Optional TextoSegundoBoton As String = "", Optional JSBtn2 As String = "") @@ -619,6 +619,45 @@ Namespace Extensiones Return String.Format("
  • {0}{3}
  • ", Time, Tipo, Ico, Mensaje, Link, If(tonewpage, "target=""_blank""", "")) End Function + Public Function EnviarNotificacionWhatsApp(NumeroTelefono As String, Mensaje As String) As Boolean + Dim RetornoObj As String = "{}" + Dim Retorno As Boolean = False + Try + Dim TokenAutorizacion As String = "Bearer EAAVcZB36KfEEBO0OlN5ZAUPhNAUZCsHuMbpeVrrxZCJZAacLgBMOXXXcyA6aLEbbANMjbeTuJbsZC4IAvsZBwEALCYqc7oZCrnHF67sc0RYMBru9R0YKBFhi8gFjZAhJgoCJauBdZA30R9YPXZA2ZByQZAKclRCL20VLu74HEtw3YKu1MiG1vEsZANWJZAHhcJCUANUs3zIMFvoC6dBoJgQsABEZAYYZD" + Using httpClient = New HttpClient() + Using request = New HttpRequestMessage(HttpMethod.Post, New Uri("https://graph.facebook.com/v20.0/263533173499868/messages")) + + request.Headers.Add("Authorization", TokenAutorizacion) + Dim json = New Newtonsoft.Json.Linq.JObject() + json.Add(New Newtonsoft.Json.Linq.JProperty("messaging_product", "whatsapp")) + json.Add(New Newtonsoft.Json.Linq.JProperty("to", NumeroTelefono)) + json.Add(New Newtonsoft.Json.Linq.JProperty("type", "text")) + Dim msgtexto As New Newtonsoft.Json.Linq.JObject( + New Newtonsoft.Json.Linq.JProperty("preview_url", "true"), + New Newtonsoft.Json.Linq.JProperty("body", Mensaje.Replace("
    ", "\n")) + ) + json.Add(New Newtonsoft.Json.Linq.JProperty("text", msgtexto)) + + Using content = New StringContent(json.ToString, Encoding.UTF8, "application/json") + request.Content = content + Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result + + If response.StatusCode = Net.HttpStatusCode.OK Then + RetornoObj = response.Content.ReadAsStringAsync().Result + Retorno = True + End If + End Using + + End Using + + End Using + Catch ex As Exception + RetornoObj = New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty("Error", ex.ToString())).ToString() + GuardaLog("Ocurrió un error al enviar la informacion por whatsapp" & ex.Message) + End Try + Return Retorno + End Function + #End Region #Region "files dropzone" From 0209f8d20244e63138de56823fea4283f10ea791 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 08:54:38 -0700 Subject: [PATCH 40/69] =?UTF-8?q?--=20mejora=20activaci=C3=B3n=20E119-Zona?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/RepVentasDetalle.aspx.vb | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Ventas/RepVentasDetalle.aspx.vb b/Ventas/RepVentasDetalle.aspx.vb index e17983fda..727b45648 100644 --- a/Ventas/RepVentasDetalle.aspx.vb +++ b/Ventas/RepVentasDetalle.aspx.vb @@ -204,6 +204,7 @@ Partial Class RepVentasDetalle DdlProyecto.SelectedValueExist(CveProyecto) 'If DivProyecto.Visible Then CargaSubProyecto() + If CveProyecto.ToEntero > 0 Then CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") DdlSubProyecto.SelectedValuesIfExistM(CveSubProyecto) DdlSubProyectoEjecucion.SelectedValueExist(CveSubProyectoEjecucion) DdlVendedor.SelectedValuesIfExistM(CveVendedor) @@ -317,7 +318,7 @@ Partial Class RepVentasDetalle End Sub Private Sub CargaCombos() - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto, VisualizacionReporte:=1) CargaClientes() @@ -371,7 +372,7 @@ Partial Class RepVentasDetalle End Sub Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlProyecto.SelectedIndexChanged - CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue) + CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue, AplicaTodos:="Todos") End Sub Protected Sub DdlClienteClasificacion_SelectedIndexChanged(sender As Object, e As EventArgs) @@ -432,6 +433,7 @@ Partial Class RepVentasDetalle Dim ModalidadContable As Boolean = CBool(If(Request("ModalidadContable") IsNot Nothing, Request("ModalidadContable").ToEntero(), 0)) ChkLecturaAdmin.Checked = Not ModalidadContable + CveProyecto = DdlProyecto.SelectedValue.ToEntero Dim ObjVentas As New ClsVentas() 'FechaI, FechaF, -1, UsuarioActual.CveEmpresa, DdlGrupo.SelectedValue.ToEntero @@ -1211,14 +1213,10 @@ Partial Class RepVentasDetalle CveEstatusFactura = If(DdlEstatus.GetSelectedText = "", "", $" Estatus: {DdlEstatus.GetSelectedText}") CondicionesPago = If(DdlCondicionesPago.SelectedValue = "-1", "", String.Format(" Condiciones Pago: {0}", DdlCondicionesPago.SelectedItem.Text)) - Dim RutaFormato As String = String.Format("{0}Formatos\RepVentaDetalle.rdlc", UsuarioActual.Empresa.Ruta) - Dim Archivo As New System.IO.FileInfo(RutaFormato) Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") - Dim logouri As String = String.Format("file://{0}", Imagen.FullName) - Dim dt As DataTable = DtVentas.FiltraParametros("(GPO IS NULL AND Cantidad IS NOT NULL) OR (GPO IS NOT NULL AND Cantidad IS NOT NULL)") Dim params As New List(Of ReportParameter) @@ -1229,11 +1227,8 @@ Partial Class RepVentasDetalle params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) params.Add(New ReportParameter("TipoDocto", TipoDocto)) params.Add(New ReportParameter("AgrupadoPor", $"Agrupado Por: {Grupo} {TipoDocto} {FechaIn} {FechaFn} {FechaIEjec} {FechaFEjec} {CveCliente} {CveSucursal} {CveSucursalEjec} {Vendedor} {CveUsuario} {CveEstatusFactura} {CondicionesPago} ")) - params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) - - If Not Archivo.Exists Then RutaFormato = "Empresas/Grales/Formatos/RepVentaDetalle.rdlc" End If From 473021cb6a06af412761d11b13af36e72e694157 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:04:45 -0700 Subject: [PATCH 41/69] =?UTF-8?q?-=20mejora=20cambio=20de=20conexi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sistemas/PopUpSeleccionarEmpresa.aspx.vb | 157 +++++++++++------------ 1 file changed, 77 insertions(+), 80 deletions(-) diff --git a/Sistemas/PopUpSeleccionarEmpresa.aspx.vb b/Sistemas/PopUpSeleccionarEmpresa.aspx.vb index 9e58fef47..4996477b7 100644 --- a/Sistemas/PopUpSeleccionarEmpresa.aspx.vb +++ b/Sistemas/PopUpSeleccionarEmpresa.aspx.vb @@ -13,8 +13,8 @@ Partial Class PopUpSeleccionarEmpresa End If End Sub - Private Sub GetEmpresas() - GlobalDTUsuarios(-1, -1) = Nothing + Private Sub GetEmpresas() + GlobalDTUsuarios(-1, -1) = Nothing Dim Dt As Data.DataTable = GlobalDTUsuarios(UsuarioActual.CveUsuario) If Dt IsNot Nothing Then @@ -96,100 +96,97 @@ Partial Class PopUpSeleccionarEmpresa End If End Sub - 'Protected Sub GvPortalCliente_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GvPortalCliente.RowCommand - ' If e.CommandName = "Cambia" Then - ' Dim gvr As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).BindingContainer, GridViewRow) + Protected Sub GvPortalCliente_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GvPortalCliente.RowCommand + If e.CommandName = "Cambia" Then + Dim gvr As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).BindingContainer, GridViewRow) - ' If gvr IsNot Nothing Then + If gvr IsNot Nothing Then + Dim Usuario As Usuario = Nothing + Dim tGrupoEmpresa As String = ClsPaginas.GlobalGrupoEmpresa(Request.Url.Host.ToUpper()) + Dim NombreCadena As String = ClsPaginas.GlobalNombreCadenaConexionDominio(Request.Url.Host.ToUpper()) - ' Dim ObjUsuario As New ClsSisUsuarios - ' Dim Usuario As Usuario = Nothing - ' Usuario = ObjUsuario.ValidaUsuarioPortalCliente(gvr.DataKey("CveCliente").ToEntero(), gvr.DataKey("Usuario"), gvr.DataKey("Contraseña")) + Dim ObjUsuario As New ClsSisUsuarioAutenticacion(NombreCadena:=NombreCadena) + Usuario = ObjUsuario.ValidaUsuario(gvr.DataKey("Usuario"), gvr.DataKey("Contraseña"), CveEmpresa:=gvr.DataKey("CveEmpresa").ToEntero) + ObjUsuario.Dispose() + 'Dim ObjUsuario As New ClsSisUsuarios + 'Dim Usuario As Usuario = Nothing + 'Usuario = ObjUsuario.ValidaUsuarioPortalCliente(gvr.DataKey("CveCliente").ToEntero(), gvr.DataKey("Usuario"), gvr.DataKey("Contraseña")) - ' ObjUsuario.Dispose() + 'ObjUsuario.Dispose() - ' If Usuario IsNot Nothing Then - ' Dim dt As Data.DataTable = GlobalDTUsuarios(Usuario.CveUsuario) + If Usuario IsNot Nothing Then + Dim dt As Data.DataTable = GlobalDTUsuarios(Usuario.CveUsuario) - ' Dim ModoSimulacion As Boolean = ADSSession.ADSSessionConfig.sessionUser.ModoSimulacion - ' Usuario.ModoSimulacion = ModoSimulacion - ' ADSSession.ADSSessionConfig.sessionUser = Usuario - ' ADSSession.ADSSessionConfig.sessionDpage = False + Dim ModoSimulacion As Boolean = ADSSession.ADSSessionConfig.sessionUser.ModoSimulacion + Usuario.ModoSimulacion = ModoSimulacion + ADSSession.ADSSessionConfig.sessionUser = Usuario + ADSSession.ADSSessionConfig.sessionDpage = False - ' If dt IsNot Nothing Then - ' If dt.Rows.Count >= 1 Then - ' If dt.Rows.Count > 1 Then Usuario.MultipleEmpresa = True - ' Usuario.CvePlataforma = 6 - ' UsuarioActual.CveEmpresa = gvr.DataKey("CveEmpresa").ToEntero() - ' ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, UsuarioActual.CveEmpresa) - ' CreaObjetoEmpresa(Usuario) - ' 'si la contraseña es la prederminada, pide la nueva contraseña - ' 'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario.ToString), False) - ' RegistraScript("Ir4();") - ' End If - ' End If - ' dt.Dispose() - ' End If + If dt IsNot Nothing Then + If dt.Rows.Count >= 1 Then + If dt.Rows.Count > 1 Then Usuario.MultipleEmpresa = True + Usuario.CvePlataforma = 6 + 'UsuarioActual.CveEmpresa = gvr.DataKey("CveEmpresa").ToEntero() + 'ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, UsuarioActual.CveEmpresa) + 'CreaObjetoEmpresa(Usuario) + 'si la contraseña es la prederminada, pide la nueva contraseña + 'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario.ToString), False) + RegistraScript("Ir4();") + End If + End If + dt.Dispose() + End If - ' End If + End If - ' End If - 'End Sub - 'Protected Sub GvPortalProveedor_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GvPortalProveedor.RowCommand - ' If e.CommandName = "Cambia" Then - ' Dim gvr As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).BindingContainer, GridViewRow) + End If + End Sub + Protected Sub GvPortalProveedor_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GvPortalProveedor.RowCommand + If e.CommandName = "Cambia" Then + Dim gvr As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).BindingContainer, GridViewRow) - ' If gvr IsNot Nothing Then - ' Dim tGrupoEmpresa As String = "" - ' Dim NombreCadena As String = "Conexion" - ' Dim Usuario As Usuario = Nothing - ' If Request.Url.Host.ToUpper().Contains("EMD".ToUpper()) Then tGrupoEmpresa = "EMD" - ' If Request.Url.Host.ToUpper().Contains("BDH".ToUpper()) Then tGrupoEmpresa = "BDH" - ' If Request.Url.Host.ToUpper().Contains("ECONOLLANTAS".ToUpper()) Then tGrupoEmpresa = "ECONOLLANTAS" : NombreCadena = "ConexionEcono" - ' If Request.Url.Host.ToUpper().Contains("JAM".ToUpper()) Then tGrupoEmpresa = "JAM" - ' If Request.Url.Host.ToUpper().Contains("CITRUS".ToUpper()) Then tGrupoEmpresa = "CITRUS" - ' If Request.Url.Host.ToUpper().Contains("KINO".ToUpper()) Then tGrupoEmpresa = "KINO" - ' If Request.Url.Host.ToUpper().Contains("VSH".ToUpper()) Then tGrupoEmpresa = "VSH" - ' If Request.Url.Host.ToUpper().Contains("AJAM".ToUpper()) Then tGrupoEmpresa = "AJAM" - ' If Request.Url.Host.ToUpper().Contains("ALATEL".ToUpper()) Then tGrupoEmpresa = "ALATEL" - ' If Request.Url.Host.ToUpper().Contains("SERVEC".ToUpper()) Then tGrupoEmpresa = "SERVEC" - ' If Request.Url.Host.ToUpper().Contains("SMS".ToUpper()) Then tGrupoEmpresa = "SMS" - ' If Request.Url.Host.ToUpper().Contains("VYA".ToUpper()) Then tGrupoEmpresa = "VYA" - ' If Request.Url.Host.ToUpper().Contains("GRUPODIAZ".ToUpper()) Then tGrupoEmpresa = "GRUPODIAZ" - ' If Request.Url.Host.ToUpper().Contains("FERRETERA".ToUpper()) Then tGrupoEmpresa = "FERRETERA" + If gvr IsNot Nothing Then + Dim Usuario As Usuario = Nothing + Dim tGrupoEmpresa As String = ClsPaginas.GlobalGrupoEmpresa(Request.Url.Host.ToUpper()) + Dim NombreCadena As String = ClsPaginas.GlobalNombreCadenaConexionDominio(Request.Url.Host.ToUpper()) - ' Dim ObjUsuario As New ClsSisUsuarios(NombreCadena:=NombreCadena) - ' Usuario = ObjUsuario.ValidaUsuarioPortalProveedor(gvr.DataKey("CveProveedor").ToEntero(), gvr.DataKey("Usuario"), gvr.DataKey("Contraseña")) + Dim ObjUsuario As New ClsSisUsuarioAutenticacion(NombreCadena:=NombreCadena) + Usuario = ObjUsuario.ValidaUsuario(gvr.DataKey("Usuario"), gvr.DataKey("Contraseña"), CveEmpresa:=gvr.DataKey("CveEmpresa").ToEntero) + ObjUsuario.Dispose() - ' ObjUsuario.Dispose() + 'Dim ObjUsuario As New ClsSisUsuarios(NombreCadena:=NombreCadena) + 'Usuario = ObjUsuario.ValidaUsuarioPortalProveedor(gvr.DataKey("CveProveedor").ToEntero(), gvr.DataKey("Usuario"), gvr.DataKey("Contraseña")) - ' If Usuario IsNot Nothing Then - ' Dim dt As Data.DataTable = GlobalDTUsuarios(Usuario.CveUsuario) + 'ObjUsuario.Dispose() - ' Dim ModoSimulacion As Boolean = ADSSession.ADSSessionConfig.sessionUser.ModoSimulacion - ' Usuario.ModoSimulacion = ModoSimulacion - ' ADSSession.ADSSessionConfig.sessionUser = Usuario - ' ADSSession.ADSSessionConfig.sessionDpage = False + If Usuario IsNot Nothing Then + Dim dt As Data.DataTable = GlobalDTUsuarios(Usuario.CveUsuario) - ' If dt IsNot Nothing Then - ' If dt.Rows.Count >= 1 Then - ' If dt.Rows.Count > 1 Then Usuario.MultipleEmpresa = True - ' Usuario.CvePlataforma = 7 - ' UsuarioActual.CveEmpresa = gvr.DataKey("CveEmpresa").ToEntero() - ' ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, UsuarioActual.CveEmpresa) - ' CreaObjetoEmpresa(Usuario) - ' 'si la contraseña es la prederminada, pide la nueva contraseña - ' 'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario.ToString), False) - ' RegistraScript("Ir5();") - ' End If - ' End If - ' dt.Dispose() - ' End If + Dim ModoSimulacion As Boolean = ADSSession.ADSSessionConfig.sessionUser.ModoSimulacion + Usuario.ModoSimulacion = ModoSimulacion + ADSSession.ADSSessionConfig.sessionUser = Usuario + ADSSession.ADSSessionConfig.sessionDpage = False - ' End If + If dt IsNot Nothing Then + If dt.Rows.Count >= 1 Then + If dt.Rows.Count > 1 Then Usuario.MultipleEmpresa = True + Usuario.CvePlataforma = 7 + UsuarioActual.CveProveedor = gvr.DataKey("CveProveedor").ToEntero + 'UsuarioActual.CveEmpresa = gvr.DataKey("CveEmpresa").ToEntero() + 'ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, UsuarioActual.CveEmpresa) + 'CreaObjetoEmpresa(Usuario) + 'si la contraseña es la prederminada, pide la nueva contraseña + 'FormsAuthentication.RedirectFromLoginPage(Encripta(Usuario.CveUsuario.ToString), False) + RegistraScript("Ir5();") + End If + End If + dt.Dispose() + End If - ' End If - 'End Sub + End If + + End If + End Sub #Region "F U N C I O N E S" Protected Sub BtnSetWindows_Click(sender As Object, e As System.EventArgs) Handles BtnSetWindows.Click From 958d27fd01168597988793b1bf56f599547ac678 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:05:04 -0700 Subject: [PATCH 42/69] -- propiedad observaciones --- App_Code/CalendarEvent.vb | 1 + Transportes/RepContratosCalendario.aspx | 11 +++-------- Transportes/RepContratosCalendario.aspx.vb | 14 ++++++-------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/App_Code/CalendarEvent.vb b/App_Code/CalendarEvent.vb index db77a2884..c2edf807a 100644 --- a/App_Code/CalendarEvent.vb +++ b/App_Code/CalendarEvent.vb @@ -58,5 +58,6 @@ Public Class CalendarEvent Public Property Anticipo As Double Public Property CantidadPasajeros As String Public Property NumeroContrato As String + Public Property Observaciones As String End Class diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index 4d59d8f31..459bf6fc3 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -429,7 +429,7 @@ - Seleccione + -
    @@ -734,19 +734,16 @@ $('#<%=TxtCantidadPasajeros.ClientID%>').val(event.CantidadPasajeros); $('#<%=TxtFolio.ClientID%>').val(event.NumeroContrato); - $('#<%=TxtObservaciones.ClientID%>').val(event.title); + $('#<%=TxtObservaciones.ClientID%>').val(event.Observaciones); $('#<%=TxtDescripcion.ClientID%>').val(event.title); $('#<%=TxtUbicacion.ClientID%>').val(event.NombreAcercamiento); - if (esCalendario) { $('#<%=TxtFechaSalida.ClientID%>').val(formatearFechaISO(event.start._i)); }else{ $('#<%=TxtFechaSalida.ClientID%>').val(formatearFechaISO(event.start)); - } - + } $('#<%=TxtFechaRegreso.ClientID%>').val(formatearFechaISO(event.FechaFinal)); - $('#<%=DdlClientes.ClientID%>').val(event.CveCliente); $('#<%=DdlAF.ClientID%>').val(event.CveActivoFijo); $('#<%=DdlChofer.ClientID%>').val(event.CvePersonal); @@ -757,7 +754,6 @@ $('#<%=TxtAnticipo.ClientID%>').val(event.Anticipo); $('#<%=HdnCveContrato.ClientID%>').val(event.id); - if (event.NombreComercial !== null) { $('#HidModClienteNombre').val(''); } else { @@ -765,7 +761,6 @@ } $('#HidModCveCliente').val(event.CveCliente); - $('#<%=BtnModal.ClientID%>').click(); } diff --git a/Transportes/RepContratosCalendario.aspx.vb b/Transportes/RepContratosCalendario.aspx.vb index 0df284b3b..ef986915f 100644 --- a/Transportes/RepContratosCalendario.aspx.vb +++ b/Transportes/RepContratosCalendario.aspx.vb @@ -151,17 +151,16 @@ Partial Class RepContratosCalendario DdlAF.Items.Insert(0, New ListItem("-", "")) 'Lista Chofer' - DdlChofer.DataSource = GlobalDTRHPersonal(UsuarioActual.CveEmpresa) + DdlChofer.DataSource = GlobalDTRHPersonal(UsuarioActual.CveEmpresa).FiltraParametros("", "NombreCompleto") DdlChofer.DataBind() - DdlChofer.Items.Insert(0, New ListItem("Seleccione", "")) + DdlChofer.Items.Insert(0, New ListItem("-", "-1")) DdlChofer.SelectedValueExist(-1) - DdlChofer2.DataSource = GlobalDTRHPersonal(UsuarioActual.CveEmpresa) + DdlChofer2.DataSource = GlobalDTRHPersonal(UsuarioActual.CveEmpresa).FiltraParametros("", "NombreCompleto") DdlChofer2.DataBind() - DdlChofer2.Items.Insert(0, New ListItem("Seleccione", "")) + DdlChofer2.Items.Insert(0, New ListItem("-", "-1")) DdlChofer2.SelectedValueExist(-1) - DdlChoferFiltro.DataSource = GlobalDTRHPersonal(UsuarioActual.CveEmpresa).FiltraParametros("", "NombreCompleto") DdlChoferFiltro.DataBind() DdlChoferFiltro.Items.Insert(0, New ListItem("Todos", "-1")) @@ -214,7 +213,7 @@ Partial Class RepContratosCalendario Dim ObjContratos As New ClsContratos ObjContratos.IniciaTransacSQL() - If ObjContratos.UpdateContratos(CveContrato, TxtFolio.Text, TxtDescripcion.Text, "", -1, DdlClientes.SelectedValue.ToEntero, -1, TxtFechaSalida.Text.ToDate, TxtFechaRegreso.Text.ToDate, TxtUbicacion.Text, "", 10, -1, -1, -1, -1, "", "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False, TxtAnticipo.Text.ToDecimal, TxtPesos.Text.ToDecimal, TxtDolares.Text.ToDecimal, -1, 0, CveContratoTipo:=34, CveContratosEstatus:=DdlEstatusContrato.SelectedValue.ToEntero, CveChofer:=DdlChofer.SelectedValue.ToEntero, CveChofer2:=DdlChofer2.SelectedValue.ToEntero, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveAF:=DdlAF.SelectedValue.ToEntero, CantidadPasajeros:=TxtCantidadPasajeros.Text.ToEntero) Then + If ObjContratos.UpdateContratos(CveContrato, TxtFolio.Text, TxtDescripcion.Text, "", -1, DdlClientes.SelectedValue.ToEntero, -1, TxtFechaSalida.Text.ToDate, TxtFechaRegreso.Text.ToDate, TxtUbicacion.Text, "", 10, -1, -1, -1, -1, "", "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False, TxtAnticipo.Text.ToDecimal, TxtPesos.Text.ToDecimal, TxtDolares.Text.ToDecimal, -1, 0, CveContratoTipo:=34, CveContratosEstatus:=DdlEstatusContrato.SelectedValue.ToEntero, CveChofer:=DdlChofer.SelectedValue.ToEntero, CveChofer2:=DdlChofer2.SelectedValue.ToEntero, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveAF:=DdlAF.SelectedValue.ToEntero, CantidadPasajeros:=TxtCantidadPasajeros.Text.ToEntero, Observaciones:=TxtObservaciones.Text.Trim) Then ObjContratos.Commit() Alert("Actualizado Correctamente.") Else @@ -238,8 +237,7 @@ Partial Class RepContratosCalendario TxtFechaSalida.Text = Convert.ToDateTime(GvRow.DataKey("FechaInicial")).ToString("dd/MM/yyyy hh:mm tt") TxtFechaRegreso.Text = Convert.ToDateTime(GvRow.DataKey("FechaFinal")).ToString("dd/MM/yyyy hh:mm tt") TxtMoneda.Text = GvRow.DataKey("CveMoneda") - 'Requeridos - ViewState("CveContrato") = GvRow.DataKey("CveContrato") + 'Requeridos DdlAF.SelectedValue = GvRow.DataKey("CveAF") DdlChofer.SelectedValueExist(GvRow.DataKey("CveChofer")) DdlChofer2.SelectedValueExist(GvRow.DataKey("CveChofer2")) From 20f372e6087886424f1ba1393ab65c0577c4b4c9 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:05:24 -0700 Subject: [PATCH 43/69] =?UTF-8?q?--=20pesta=C3=B1a=20de=20ER=20Hor=20por?= =?UTF-8?q?=20proyecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsContabilidad.vb | 29 + .../RepEstadoResultadosHorizontal.aspx | 301 ++++++++++ .../RepEstadoResultadosHorizontal.aspx.vb | 529 ++++++++++++++++-- 3 files changed, 803 insertions(+), 56 deletions(-) diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index 12007823c..b9ff5337a 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -6455,6 +6455,35 @@ Public Class ClsContabilidad Return Retorno End Function + + Public Function GetEstadosProyectoHorizontal(FechaI As Date, FechaF As Date, CveProyecto As Integer, Divisor As Integer, CveEmpresa As Integer, CveUsuario As Integer, Optional Tipo As Integer = 1, Optional VistaPorcentaje As Integer = 1) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Conta_EstadoResultadosProyectoHorizontal") + + With SqlAdapter.SelectCommand.Parameters + .Add("@FechaI", SqlDbType.Date).Value = FechaI + .Add("@FechaF", SqlDbType.Date).Value = FechaF + .Add("@CveProyecto", SqlDbType.Int).Value = CveProyecto + .Add("@Divisor", SqlDbType.Int).Value = Divisor + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@Tipo", SqlDbType.Int).Value = Tipo + .Add("@VistaPorcentaje", SqlDbType.Int).Value = VistaPorcentaje + End With + + SqlAdapter.SelectCommand.CommandTimeout = 0 + + Try + SqlAdapter.Fill(DSet) + Retorno = True + Catch ex As Exception + Me.OnError("Ocurrió un error al obtener el Estado de resultados Proyectos horizontal", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + #End Region Public Function UpdateTraspasoPrepoliza(CveEmpresa As Integer, CveCuenta As Integer, CveCuentaNueva As Integer) As Boolean diff --git a/Contabilidad/RepEstadoResultadosHorizontal.aspx b/Contabilidad/RepEstadoResultadosHorizontal.aspx index ae6c7b9cc..4ccf17b57 100644 --- a/Contabilidad/RepEstadoResultadosHorizontal.aspx +++ b/Contabilidad/RepEstadoResultadosHorizontal.aspx @@ -1578,6 +1578,307 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%----%> + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- + + + + + --%> + + <%-- --%> + + + + + + + + + + +
    + + +
    +
    +
    + +
    +
    diff --git a/Contabilidad/RepEstadoResultadosHorizontal.aspx.vb b/Contabilidad/RepEstadoResultadosHorizontal.aspx.vb index 4a6ac5376..72712ad98 100644 --- a/Contabilidad/RepEstadoResultadosHorizontal.aspx.vb +++ b/Contabilidad/RepEstadoResultadosHorizontal.aspx.vb @@ -304,7 +304,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End Property - Private Property CountDinamicoSubProyecto As Integer Get @@ -323,6 +322,67 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal #End Region +#Region " P R O Y E C T O H O R I Z O N T A L " + + Private Property DtDatosProyectoH As DataTable + Get + DtDatosProyectoH = DirectCast(ViewState("DtDatosProyectoH"), DataTable) + End Get + Set(ByVal value As DataTable) + ViewState("DtDatosProyectoH") = value + End Set + End Property + + Private Property DtIngresosProyectoH As DataTable + Get + DtIngresosProyectoH = DirectCast(ViewState("DtIngresosProyectoH"), DataTable) + End Get + Set(ByVal value As DataTable) + ViewState("DtIngresosProyectoH") = value + End Set + End Property + + Private Property DtGastosProyectoH As DataTable + Get + DtGastosProyectoH = DirectCast(ViewState("DtGastosProyectoH"), DataTable) + End Get + Set(ByVal value As DataTable) + ViewState("DtGastosProyectoH") = value + End Set + End Property + + Private Property DTTotalesProyectoH As DataTable + Get + DTTotalesProyectoH = DirectCast(ViewState("DTTotalesProyectoH"), DataTable) + End Get + Set(ByVal value As DataTable) + ViewState("DTTotalesProyectoH") = value + End Set + End Property + + Private Property DTProyectosCabecerasH As DataTable + Get + DTProyectosCabecerasH = DirectCast(ViewState("DTProyectosCabecerasH"), DataTable) + End Get + Set(ByVal value As DataTable) + ViewState("DTProyectosCabecerasH") = value + End Set + End Property + + Private Property CountDinamicoProyecto As Integer + Get + If ViewState("CountDinamicoProyecto") Is Nothing Then + Return 0 + Else + Return ViewState("CountDinamicoProyecto").ToString.ToEntero + End If + End Get + Set(value As Integer) + ViewState("CountDinamicoProyecto") = value + End Set + End Property + +#End Region Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then @@ -347,13 +407,15 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal TotalActualMes = 0 TotalAnteriorMes = 0 + If UsuarioActual.Empresa.Funcionalidad(307) <> "" Then + TabProyecto.Visible = True + TabProyecto.HeaderText = UsuarioActual.Empresa.Funcionalidad(307) + End If CargaEjercicios() CargarCentrosDeCosto(DdlProyecto, DdlSubproyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto) TabSubProyecto.HeaderText = LblProyecto.Text & " " & LblSubProyecto.Text & " " - - DdlEjercicio.SelectedValueExist(UsuarioActual.Empresa.EjercicioActual) ValidaEjercicios() @@ -370,9 +432,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal DVVistaPorcentaje.Visible = False If Tab.ActiveTabIndex = 0 Then - 'LiSubProyectoDdl.Visible = True - 'LiSubProyectoLbl.Visible = True - LiEjercicioDdl.Visible = True LiEjercicioLbl.Visible = True @@ -390,19 +449,13 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End If If Tab.ActiveTabIndex = 1 Then - - 'LiSubProyectoDdl.Visible = True - 'LiSubProyectoLbl.Visible = True - LiEjercicioDdl.Visible = True LiEjercicioLbl.Visible = True - LiEjercicioDdl2.Visible = False LiEjercicioLbl2.Visible = False LiPeriodoDdl.Visible = True LiPeriodoLbl.Visible = True - LiDivisorDdl.Visible = True LiDivisorLbl.Visible = True @@ -410,37 +463,25 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal LblTri.Visible = True DVTri.Visible = True - LblVistaPorcentaje.Visible = True DVVistaPorcentaje.Visible = True - - End If If Tab.ActiveTabIndex = 2 Then - ValidaEjercicios() - - 'LiSubProyectoDdl.Visible = True - 'LiSubProyectoLbl.Visible = True - LiEjercicioDdl.Visible = True LiEjercicioLbl.Visible = True - LiEjercicioDdl2.Visible = True LiEjercicioLbl2.Visible = True LiPeriodoDdl.Visible = False LiPeriodoLbl.Visible = False - LiDivisorDdl.Visible = True LiDivisorLbl.Visible = True LblTri.Visible = False DVTri.Visible = False - DdlPeriodo.SelectedValueExist(12) - LblVistaPorcentaje.Visible = True DVVistaPorcentaje.Visible = True @@ -452,25 +493,18 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal LiEjercicioDdl.Visible = True LiEjercicioLbl.Visible = True - LiEjercicioDdl2.Visible = False LiEjercicioLbl2.Visible = False - - LiDivisorDdl.Visible = True LiDivisorLbl.Visible = True - LblTri.Visible = False DVTri.Visible = False - LiPeriodoDdl.Visible = True LiPeriodoLbl.Visible = True DdlPeriodo.SelectedValueExist(12) - LblVistaPorcentaje.Visible = True DVVistaPorcentaje.Visible = True - End If UpFiltros.Update() @@ -487,25 +521,17 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Private Sub ValidaEjercicios() - Dim EInicio As Integer = DdlEjercicio.SelectedValue.ToEntero - - If EInicio > DdlEjercicio2.SelectedValue.ToEntero Then - If DdlEjercicio2.Items.Count > 0 Then DdlEjercicio2.SelectedIndex = DdlEjercicio2.Items.Count - 1 End If - Dim Fejerciosio As Integer = DdlEjercicio2.SelectedValue.ToEntero If Not EInicio + 1 > Fejerciosio Then DdlEjercicio2.SelectedValueExist(EInicio + 1) End If - End If - - UpFiltros.Update() End Sub @@ -559,15 +585,16 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal CargaDatosSubProyectoH() End If + 'PROYECTO + If Tab.ActiveTabIndex = 4 Then + CargaDatosProyectoH() + End If + End Sub #Region "MES" - - Private Sub CargaDatosMes() - - FechaIMes = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, CChar("0")), DdlEjercicio.SelectedValue) FechaFMes = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaIMes))).ToString("dd/MM/yyyy") 'Dim TipoReporte = DdlTipoReporte.SelectedValue.ToEntero 'If(ReporteComplementario, DdlTipoReporte.SelectedValue.ToEntero, 1) @@ -647,7 +674,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal DtGastosMes.Rows.Add(Row) End If - GvIngresosMes.DataSource = DtIngresosMes GvIngresosMes.DataBind() @@ -658,12 +684,9 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End Sub - - Private Sub SumaTotales() 'Llena Lb´s Totales - If DdlDivisor.SelectedValue.ToEntero > 1 Then LbTotalActual.Text = TotalActualMes.ToString("###,###,##0") LbTotalAnterior.Text = TotalAnteriorMes.ToString("###,###,##0") @@ -671,9 +694,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal LbTotalActual.Text = TotalActualMes.ToString("###,###,##0.00") LbTotalAnterior.Text = TotalAnteriorMes.ToString("###,###,##0.00") End If - - - LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) @@ -761,13 +781,8 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal #End Region - - - #End Region - - #Region "M E S H O R I Z O N T A L" Private Sub CargaDatosMesH() @@ -1591,7 +1606,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal #End Region - #Region "Anual H O R I Z O N T A L" Private Sub CargaDatosAnualH() @@ -2457,8 +2471,411 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End Sub #End Region +#Region " P R O Y E C T O - H O R I Z O N T A L" + Private Sub CargaDatosProyectoH() + + If ChkAcumulados.Checked Then + FechaIMes = $"01/01/{DdlEjercicio.SelectedValue}" + Else + FechaIMes = $"01/{DdlPeriodo.SelectedValue.ToEntero.ToString("00")}/{DdlEjercicio.SelectedValue}" + End If + FechaFMes = $"01/{DdlPeriodo.SelectedValue.ToEntero.ToString("00")}/{DdlEjercicio.SelectedValue}" + FechaFMes = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaFMes))).ToString("dd/MM/yyyy") + + CveSubProyecto = DdlSubproyecto.SelectedValue.ToEntero + CveProyecto = DdlProyecto.SelectedValue.ToEntero + + Dim ObjConta As New ClsContabilidad + If ObjConta.GetEstadosProyectoHorizontal(FechaIMes.ToDate, FechaFMes.ToDate, CveProyecto, DdlDivisor.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, VistaPorcentaje:=DdlvistaPorcentaje.SelectedValue.ToEntero) Then + DTProyectosCabecerasH = ObjConta.DSResultados.Tables(0) + DtDatosProyectoH = ObjConta.DSResultados.Tables(1).FiltraParametros("(ImporteActual <> 0 OR ImporteAcumulado <> 0)") + 'se limpian los subproyectos con importe cero + Dim IndexData As Integer = 1 + Dim ColumnasEliminar As New ArrayList + For Each dColumn As DataColumn In DtDatosProyectoH.Columns + 'si el nombre es numerico, s la clave del subproyecto + If dColumn.ColumnName.ToEntero > 0 Then + If DtDatosProyectoH.MAX(String.Format("[{0}]", dColumn.ColumnName)).ToDecimal = 0 Then + ColumnasEliminar.Add(dColumn.ColumnName) + End If + End If + Next + If ColumnasEliminar.Count > 0 Then + For Each columna As String In ColumnasEliminar + DtDatosProyectoH.Columns.Remove(columna) + Dim drrs As DataRow() = DTProyectosCabecerasH.Select($"CveProyecto = {columna}") 'limpio los valores + For Each drt As DataRow In drrs + DTProyectosCabecerasH.Rows.Remove(drt) + Next + Next + End If + Else + DtDatosProyectoH = Nothing + Alert("Ocurrio un error al cargar los datos del Estado de Actividades", TipoMensaje.MsgError) + End If + ObjConta.Dispose() + + If DtDatosProyectoH IsNot Nothing And DTProyectosCabecerasH IsNot Nothing Then + CargaGridsProyectoH() + End If + + End Sub + + Private Sub CargaGridsProyectoH() + + DtIngresosProyectoH = DtDatosProyectoH.FiltraParametros("Tipo ='H' ") + DtGastosProyectoH = DtDatosProyectoH.FiltraParametros("Tipo ='G' ") + DTTotalesProyectoH = DtDatosProyectoH.Clone() + + Dim Row As DataRow = DtIngresosProyectoH.NewRow + Dim TotalActual As Decimal = 0, TotalAnterior As Decimal = 0 + + Dim IndexData As Integer = 0 + Dim IndexGv As Integer = 1 + Dim IndexMax As Integer = 1 + Dim IndexProyecto As Integer = 0 + Dim IndexProyectoMax As Integer = DTProyectosCabecerasH.Rows.Count - 1 + + If IndexProyectoMax > GvIngresosProyectoH.Columns.Count - 2 Then + IndexProyectoMax = GvIngresosProyectoH.Columns.Count - 2 + End If + Dim IndexTotales As Integer = 13 + IndexProyectoMax + If IndexTotales > DtIngresosProyectoH.Columns.Count - 2 Then + IndexTotales = DtIngresosProyectoH.Columns.Count - 2 + End If + '34 + Dim IDX_LIMPIAR As Integer = 1 + + For IDX_LIMPIAR = 1 To GvIngresosProyectoH.Columns.Count - 3 + CType(GvIngresosProyectoH.Columns(IDX_LIMPIAR), BoundField).DataField = Nothing + CType(GvIngresosProyectoH.Columns(IDX_LIMPIAR), BoundField).HeaderText = "" + GvIngresosProyectoH.Columns(IDX_LIMPIAR).Visible = False + Next + listaCampos.Clear() + + Dim DTProcesaColumnas As DataTable = If(DtIngresosProyectoH.Rows.Count > 0, DtIngresosProyectoH, DtGastosProyectoH) + + For Each dColumn As DataColumn In DTProcesaColumnas.Columns + If IndexData >= 13 Then + If IndexProyecto <= IndexProyectoMax Then + If GvIngresosProyectoH.Columns(IndexGv).GetType.Name = "BoundField" Then + + CType(GvIngresosProyectoH.Columns(IndexGv), BoundField).DataField = dColumn.ColumnName + GvIngresosProyectoH.Columns(IndexGv).Visible = True + + CType(GvGastosProyectoH.Columns(IndexGv), BoundField).DataField = dColumn.ColumnName + GvGastosProyectoH.Columns(IndexGv).Visible = True + + If IndexProyecto <= IndexProyectoMax Then + + Dim TxtSub As String = GlobalDTProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Proyecto", $" CveProyecto={dColumn.ColumnName.ToEntero}") + CType(GvIngresosProyectoH.Columns(IndexGv), BoundField).HeaderText = TxtSub + CType(GvGastosProyectoH.Columns(IndexGv), BoundField).HeaderText = TxtSub + + CType(GvIngresosProyectoH.Columns(IndexGv + 1), BoundField).HeaderText = "%" + CType(GvGastosProyectoH.Columns(IndexGv + 1), BoundField).HeaderText = "%" + + If (dColumn.ColumnName.ToString.ToEntero > 0 Or dColumn.ColumnName = "SinProyecto") Then + CType(GvIngresosProyectoH.Columns(IndexGv + 1), BoundField).DataField = $"Porcentaje{dColumn.ColumnName}" + GvIngresosProyectoH.Columns(IndexGv + 1).Visible = True + + CType(GvGastosProyectoH.Columns(IndexGv + 1), BoundField).DataField = $"Porcentaje{dColumn.ColumnName}" + GvGastosProyectoH.Columns(IndexGv + 1).Visible = True + End If + If dColumn.ColumnName = "SinProyecto" Then + GvIngresosProyectoH.Columns(IndexGv).Visible = False + GvIngresosProyectoH.Columns(IndexGv + 1).Visible = False + End If + End If + listaCampos.Add(New String() {dColumn.ColumnName.ToString(), DTProyectosCabecerasH.FiltroPrimeroValor("Proyecto", $"CveProyecto = {dColumn.ColumnName}")}) + End If + Else + If IndexGv < GvIngresosProyectoH.Columns.Count Then + GvIngresosProyectoH.Columns(IndexGv).Visible = False + Else + Exit For + End If + End If + + IndexGv = IndexGv + 2 + IndexProyecto = IndexProyecto + 1 + IndexMax = IndexMax + 1 + + End If + IndexData = IndexData + 1 + If dColumn.ColumnName = "SinProyecto" Then + 'Continue For + Exit For + End If + Next + + If DtIngresosProyectoH.Rows.Count > 0 Then + + For Each dr As DataRow In DtIngresosProyectoH.FiltraParametros("Not CtaMayor In (3,4)").Rows + TotalActual += dr("ImporteActual").ToString.ToDecimal + TotalAnterior += dr("ImporteAcumulado").ToString.ToDecimal + Next + + IndexData = 13 + For IndexData = 13 To IndexTotales + If DtIngresosProyectoH.Columns(IndexData).ColumnName.ToEntero > 0 Then 'filtro solo los que tienen número + Row.Item(IndexData) = DtIngresosProyectoH.SUM($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "Not CtaMayor In (3,4)") + + If DtIngresosProyectoH.SUM($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (3,4)") <> 0 Then + + If DdlvistaPorcentaje.SelectedValue.ToEntero = 1 Then + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = DtIngresosProyectoH.SUM($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (3,4)") * 100 / DtIngresosProyectoH.SUM("ImporteAcumulado", "NOT CtaMayor in (3,4)") + Else + Dim TotalProyectoIngreso As Decimal = DtIngresosProyectoH.FiltroPrimeroValor($"{DtIngresosProyectoH.Columns(IndexData).ColumnName}").ToDecimal + Dim TotalCuentaIngreso As Decimal = DtIngresosProyectoH.SUMD($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "Not CtaMayor In (3,4)") + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = TotalCuentaIngreso * 100 / TotalProyectoIngreso + End If + + Else + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = "0" + End If + End If + Next + + Row.Item("Nombre") = "TOTAL INGRESOS " + Row.Item("ImporteActual") = DtIngresosProyectoH.SUM("ImporteActual", "Not CtaMayor In (3,4)") 'TotalActual.ToString + Row.Item("PorcentajeActual") = 100.0 + Row.Item("ImporteAcumulado") = DtIngresosProyectoH.SUM("ImporteAcumulado", "Not CtaMayor In (3,4)") 'TotalAnterior.ToString + Row.Item("PorcentajeAcumulado") = 100.0 + Row.Item("CtaMayor") = -1 + Row.Item("CountDinamico") = DtIngresosProyectoH.MAX("CountDinamico") + CountDinamicoProyecto = DtIngresosProyectoH.MAX("CountDinamico").ToEntero + DtIngresosProyectoH.Rows.Add(Row) + Else + Row.Item("Nombre") = "INGRESOS " + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAcumulado") = "0.00" + Row.Item("CtaMayor") = -1 + DtIngresosProyectoH.Rows.Add(Row) + + End If + DtIngresosProyectoH.Rows.Add(DtIngresosProyectoH.NewRow()) + + Dim T1 As Decimal = TotalActual, T2 As Decimal = TotalAnterior + + TotalActual = 0 + TotalAnterior = 0 + + Row = DtGastosProyectoH.NewRow + + If DtIngresosProyectoH.Rows.Count > 0 Then + + Row = DTTotalesProyectoH.NewRow + + IndexData = 13 + For IndexData = 13 To IndexTotales + If DtIngresosProyectoH.Columns(IndexData).ColumnName.ToEntero > 0 Then 'filtro solo los que tienen número + + Dim TotalProyectoIngreso As Decimal = DtIngresosProyectoH.SUMD($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (-1, 3,4)") + Dim TotalProyectoEgreso As Decimal = DtGastosProyectoH.SUMD($"[{DtGastosProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (-1, 3,4)") + + Row.Item(IndexData) = TotalProyectoIngreso - TotalProyectoEgreso + + 'Row.Item(IndexData) = DtIngresosProyectoH.SUM($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "Not CtaMayor In (-1,3,4)") - DtGastosProyectoH.SUM($"[{DtGastosProyectoH.Columns(IndexData).ColumnName}]", "Not CtaMayor In (-1,3,4)") + + If TotalProyectoIngreso <> 0 Or TotalProyectoEgreso <> 0 Then + If DdlvistaPorcentaje.SelectedValue.ToEntero = 1 Then + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = DtIngresosProyectoH.SUM($"[{DtIngresosProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (-1, 3,4)") * 100 / DtIngresosProyectoH.SUM("ImporteAcumulado", "NOT CtaMayor in (-1,3,4)") + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = (TotalProyectoIngreso - TotalProyectoEgreso) * 100 / DtIngresosProyectoH.SUM("ImporteAcumulado", "NOT CtaMayor in (-1,3,4)") + Else + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = (TotalProyectoIngreso - TotalProyectoEgreso) * 100 / TotalProyectoIngreso + End If + Else + Row.Item($"Porcentaje{DtIngresosProyectoH.Columns(IndexData).ColumnName}") = "0" + End If + + End If + Next + + Dim totalTemp As Decimal = DtIngresosProyectoH.SUMD($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)") - DtGastosProyectoH.SUMD($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)") + Row.Item("Nombre") = "Resultado del ejercicio" + Row.Item("ImporteAcumulado") = DtIngresosProyectoH.SUM($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)") - DtGastosProyectoH.SUM($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)") + Row.Item("CtaMayor") = -2 + Row.Item("CountDinamico") = DtIngresosProyectoH.MAX("CountDinamico").ToString.ToEntero + If DtIngresosProyectoH.SUMD($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)") <> 0 Then + Row.Item("PorcentajeAcumulado") = (totalTemp * 100 / DtIngresosProyectoH.SUMD($"ImporteAcumulado", "Not CtaMayor In (-1,3,4)")) + End If + DTTotalesProyectoH.Rows.Add(Row) + + End If + DtIngresosProyectoH.Merge(DtGastosProyectoH) + DtIngresosProyectoH.Merge(DTTotalesProyectoH) + GvIngresosProyectoH.DataSource = DtIngresosProyectoH + GvIngresosProyectoH.DataBind() + UpDatosProyectoH.Update() + + End Sub + + 'Private Sub SumaTotalesProyectoH() + ' ''Llena Lb´s Totales + ' ''********************************************************************************* + ' 'LbTotalActual.Text = TotalActualMes.ToString.FormatoNumero + ' 'LbTotalAnterior.Text = TotalAnteriorMes.ToString.FormatoNumero + + ' 'LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) + ' 'LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) + 'End Sub + + Protected Sub GvIngresosProyectoH_RowDataBound(sender As Object, e As GridViewRowEventArgs) + + If e.Row.RowType = DataControlRowType.DataRow Then + + e.Row.FCHyperLink("Hypgrafica").Visible = If(e.Row.DBCampo("Nombre").ToString.Length > 0, True, False) + + If e.Row.DBCampo("CtaMayor").ToString.ToEntero = -1 Then + TotalActualMes += e.Row.DBCampo("ImporteActual").ToString.ToDouble + TotalAnteriorMes += e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble + 'e.Row.ControlStyle.BackColor = Drawing.Color.LightGray + 'e.Row.ControlStyle.ForeColor = Drawing.Color.White + e.Row.ControlStyle.Font.Bold = True + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then + 'e.Row.CssClass = "SubTotales3" + e.Row.ControlStyle.Font.Bold = True + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -2 Then + + e.Row.ControlStyle.Font.Bold = True + e.Row.ControlStyle.Font.Size = 13 + End If + Dim CveCuenta As Integer = e.Row.DataKey("CveCuenta").ToEntero + 'setgraficaCC(e) + 'Dim CveProyecto As Integer = e.Row.DataKey("CveProyecto").ToEntero + If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then + + e.Row.FCHyperLink("HLNombre").NavigateUrl = $"./RepAnexoCatalogoCC.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&Ejercicio={DdlEjercicio.SelectedValue}&Divisor={DdlDivisor.SelectedValue}&CveProyecto={DdlProyecto.SelectedValue}&Periodo={DdlPeriodo.SelectedValue}" + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + Dim FEchaMesFinal As Date = New Date(DdlEjercicio.SelectedValue.ToEntero, DdlPeriodo.SelectedValue.ToEntero, 1).LastDayOfMonth + If IndiceMax > GvIngresosProyectoH.Columns.Count - 3 Then + IndiceMax = GvIngresosProyectoH.Columns.Count - 3 + End If + + For IndiceInicio = 1 To IndiceMax + + If GvGastosProyectoH.Columns(IndiceInicio).GetType.Name = "BoundField" Then + Dim CveProyectoInterno As String = CType(GvGastosProyectoH.Columns(IndiceInicio), BoundField).DataField + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + + If CveProyectoInterno.ToEntero > 0 Then + e.Row.Cells(IndiceInicio).Text = $"{ If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }" + End If + End If + Next IndiceInicio + + e.Row.FCHyperLink("HLAnterior").NavigateUrl = $"./RepAnexoCatalogoCC.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&Ejercicio={DdlEjercicio.SelectedValue}&Divisor={DdlDivisor.SelectedValue}&CveProyecto={DdlProyecto.SelectedValue}&Periodo={DdlPeriodo.SelectedValue}" + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -1 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + If IndiceMax > GvIngresosProyectoH.Columns.Count - 3 Then + IndiceMax = GvIngresosProyectoH.Columns.Count - 3 + End If + + For IndiceInicio = 1 To IndiceMax + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"
    { If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }
    " + Next IndiceInicio + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -2 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + If IndiceMax > GvIngresosProyectoH.Columns.Count - 3 Then + IndiceMax = GvIngresosProyectoH.Columns.Count - 3 + End If + + For IndiceInicio = 1 To IndiceMax + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"
    { If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }
    " + Next IndiceInicio + + End If + + e.Row.FCHyperLink("HLAnterior").Text = If(DdlDivisor.SelectedValue.ToEntero > 1, e.Row.DBCampo("ImporteAcumulado").ToString.ToDecimal.ToString("###,###,##0"), e.Row.DBCampo("ImporteAcumulado").ToString.ToDecimal.ToString("###,###,##0.00")) + If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + + End If + + End Sub + + Protected Sub GvGastosProyectoH_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.DataRow Then + 'setgraficaCC(e) + If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then + TotalActualMes -= e.Row.DBCampo("ImporteActual").ToString.ToDouble + TotalAnteriorMes -= e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble + e.Row.ControlStyle.Font.Bold = True + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then + 'e.Row.CssClass = "SubTotales" + e.Row.ControlStyle.Font.Bold = True + End If + If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax Step 2 + Dim Anio As String = CType(GvGastosAnualH.Columns(IndiceInicio), BoundField).DataField + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).ForeColor = Color.Red + Next IndiceInicio + End If + End Sub + + Protected Sub GvTotalesProyectoH_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.Header Then + ' e.Row.Attributes.Add("style", "display:none") + End If + If e.Row.RowType = DataControlRowType.DataRow Then + 'setgraficaCC(e) + e.Row.Attributes.Add("style", "Font-weight: bold") + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax Step 2 + Dim Anio As String = CType(GvGastosAnualH.Columns(IndiceInicio), BoundField).DataField + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"" + Next IndiceInicio + + End If + End Sub + + Public Sub setgraficaProyCC(e As GridViewRowEventArgs) + Dim lista As New List(Of Object) + Dim colorindex As Integer = 0 + For Each campo As String() In listaCampos + + 'Dim valorCampo As Decimal = If(e.Row.DBCampo(campo(0)).ToDecimal() < 0, (e.Row.DBCampo(campo(0)).ToDecimal() * -1), e.Row.DBCampo(campo(0)).ToDecimal()) + + lista.Add(New With {.Texto = campo(1), .Valor = e.Row.DBCampo(campo(0)).ToDecimal(), .Color = listacolores(colorindex)}) + colorindex = colorindex + 1 + If colorindex >= listacolores.Count Then + colorindex = 0 + End If + Next + e.Row.FCHyperLink("Hypgrafica").Attributes.Add("data-values", Newtonsoft.Json.JsonConvert.SerializeObject(lista)) + End Sub +#End Region #Region "DESCARGA EXCEL" From 97e5ea44ac802e09a0d939ad0845309016dcb5fb Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:05:30 -0700 Subject: [PATCH 44/69] - --- Ashx/CargaEventos.ashx | 1 + 1 file changed, 1 insertion(+) diff --git a/Ashx/CargaEventos.ashx b/Ashx/CargaEventos.ashx index 59d60041c..871d8fab2 100644 --- a/Ashx/CargaEventos.ashx +++ b/Ashx/CargaEventos.ashx @@ -522,6 +522,7 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState cevent.backgroundColor = dr("BackgroundColor").ToString cevent.CantidadPasajeros = dr("CantidadPasajeros").ToString cevent.NumeroContrato = dr("NumeroContrato").ToString + cevent.Observaciones = dr("Observaciones").ToString If Not cevent.recurrenciatipo > 0 Then From ce70d5c5de689a9de9828cc71f58192980c6b2fb Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:05:51 -0700 Subject: [PATCH 45/69] =?UTF-8?q?--=20simplificaci=C3=B3n=20de=20m=C3=A9to?= =?UTF-8?q?do=20para=20dispersi=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsNominas.vb | 65 +++++++++++------------ Nomina/Nomina.aspx.cs | 114 ++++++++++++++--------------------------- 2 files changed, 71 insertions(+), 108 deletions(-) diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index d29728f94..a547fe85e 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -642,27 +642,28 @@ Public Class ClsNominas retorno = RunQuery("Ocurrió un error al obtener el valor de la UMA.") Return retorno End Function - Public Function GetDispersionnominaXLS(CvePeriodo As Int32, CveEmpresa As Int32) As Boolean + 'Public Function GetDispersionnominaXLS(CvePeriodo As Int32, CveEmpresa As Int32) As Boolean + ' Dim retorno As Boolean = False + ' DataAdapter("PA_Nom_DispersionnominaXLS", CommandType.StoredProcedure) + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo + ' .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + ' End With + ' Try + ' SqlAdapter.Fill(Data) + ' retorno = True + ' Catch ex As Exception + ' OnError("Ocurrió un error al obtener el layout de nóminas.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ' End Try + ' Return retorno + 'End Function + Public Function GetDispersionNomina(CvePeriodo As Int32, CveEmpresa As Int32, CveSATBanco As Int32) As Boolean Dim retorno As Boolean = False - DataAdapter("PA_Nom_DispersionnominaXLS", CommandType.StoredProcedure) - With SqlAdapter.SelectCommand.Parameters - .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo - .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa - End With - Try - SqlAdapter.Fill(Data) - retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener el layout de nóminas.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) - End Try - Return retorno - End Function - Public Function GetDispersionnomina(CvePeriodo As Int32, CveEmpresa As Int32) As Boolean - Dim retorno As Boolean = False - DataAdapter("PA_Nom_Dispersionnomina", CommandType.StoredProcedure) + DataAdapter("PA_Nom_DispersionNomina", CommandType.StoredProcedure) With SqlAdapter.SelectCommand.Parameters .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveSATBanco", SqlDbType.Int).Value = CveSATBanco End With Try SqlAdapter.Fill(Data) @@ -3744,21 +3745,21 @@ Public Class ClsNominas End Function - Public Function GetDispersionNominaBanorte(CvePeriodo As Integer, CveEmpresa As Integer) As Boolean - Dim retorno As Boolean = False - DataAdapter("PA_Nom_DispersionNominaBanorteGet", CommandType.StoredProcedure) - With SqlAdapter.SelectCommand.Parameters - .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo - .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa - End With - Try - SqlAdapter.Fill(Data) - retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener el layout de nominas Banorte.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) - End Try - Return retorno - End Function + 'Public Function GetDispersionNominaBanorte(CvePeriodo As Integer, CveEmpresa As Integer) As Boolean + ' Dim retorno As Boolean = False + ' DataAdapter("PA_Nom_DispersionNominaBanorteGet", CommandType.StoredProcedure) + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo + ' .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + ' End With + ' Try + ' SqlAdapter.Fill(Data) + ' retorno = True + ' Catch ex As Exception + ' OnError("Ocurrió un error al obtener el layout de nominas Banorte.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ' End Try + ' Return retorno + 'End Function Public Function PreNominaTotalSemana(numeroPeriodo As Int32, cveEmpresa As Int32, cveSubProyecto As Int32, cveTipoNomina As Int32, tipoTrabajador As String, ejercicio As Int32, facturado As Boolean) As Boolean Dim retorno As Boolean = False diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index 5c2ca42f5..d299f9659 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -9891,15 +9891,10 @@ public partial class Nomina_Nomina2 : ClsPaginas DdlCuenta.DataBind(); DdlCuenta.Items.Insert(0, new ListItem("Seleccione", "-1")); DdlCuenta.SelectedValueExist("-1"); - } protected void DdlCuenta_SelectedIndexChanged(object sender, EventArgs e) - { - - - - + { ConvenioPagoElectronico = string.Empty; DivModalLayoutBancosFecha.Visible = false; @@ -9907,10 +9902,9 @@ public partial class Nomina_Nomina2 : ClsPaginas { ConvenioPagoElectronico = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimeroValor("ConvenioPagoElectronico", $" CveCuenta = {DdlCuenta.SelectedValue}").ToString(); - if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("BANCOMER")) + if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("BANCOMER") || DdlCuenta.SelectedItem.Text.ToUpper().Contains("BBVA")) { Banco = Bancos.Bancomer; - } else if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("BANORTE")) { @@ -9925,16 +9919,12 @@ public partial class Nomina_Nomina2 : ClsPaginas else { ConvenioPagoElectronico = string.Empty; - } } else { Banco = Bancos.SinSelccion; } - - - } protected void BtnLayoutXLS_Click(object sender, EventArgs e) @@ -9958,7 +9948,7 @@ public partial class Nomina_Nomina2 : ClsPaginas libro.Range(1, 1, row, column - 1).Style.Font.FontColor = ClosedXML.Excel.XLColor.White; libro.Range(1, 1, row, column - 1).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(79, 129, 189)); - if (objnom.GetDispersionnominaXLS(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) + if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa,-1)) { foreach (DataRow dRow in objnom.DtResultados.Rows) { @@ -9994,12 +9984,8 @@ public partial class Nomina_Nomina2 : ClsPaginas Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xlsx", "ListadePago")); Response.BinaryWrite(memoryStream.ToArray()); Response.End(); - } - } - - protected void BtnEfectivaleXLS_Click(object sender, EventArgs e) { @@ -10075,84 +10061,73 @@ public partial class Nomina_Nomina2 : ClsPaginas { using (ClsNominas objnom = new ClsNominas()) { - if (objnom.GetDispersionnomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) + if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa,4)) { CrearLayoutNominaBancomer(objnom.DtResultados); } } - } else if (Banco == Bancos.Banorte) { using (ClsNominas objnom = new ClsNominas()) { - if (objnom.GetDispersionNominaBanorte(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) + if (objnom.GetDispersionNomina (CvePeriodoSeleccionado, UsuarioActual.CveEmpresa,18)) { CrearLayoutNominaBanorte(objnom.DtResultados, ConvenioPagoElectronico, 1); } } - } else if (Banco == Bancos.Banamex) { using (ClsNominas objnom = new ClsNominas()) { - if (objnom.GetDispersionnominaXLS(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) + if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa,1)) { - CrearLayoutNominaBanamex(objnom.DtResultados.FiltraParametros(" (BancoNombre) like '%BANAMEX%'")); + CrearLayoutNominaBanamex(objnom.DtResultados); } } - } - } - - - private void CrearLayoutNominaBancomer(DataTable DTNomina) { StringBuilder sb = new StringBuilder(); StringBuilder SbErrores = new StringBuilder(); bool ErroresValidaciones = false; + int modalidadnomina = 1; + if (UsuarioActual.CveEmpresa == 189) modalidadnomina = 2; - - SbErrores.AppendLine("Se detectaron los siguientes errores en la generación del layout"); + SbErrores.AppendLine("Se detectaron los siguientes errores en la generación del layout:
    "); foreach (DataRow dRow in DTNomina.Rows) { string RFC = dRow["RFC"].ToString(); string Nombre = dRow["Nombre"].ToString(); - string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + string BancoNumCuenta = dRow["NumeroCuenta"].ToString(); decimal Importe = dRow["Importe"].ToString().ToDecimal(); - - if (RFC.Trim().Length == 0) SbErrores.AppendLine($"El RFC es requerido del empleado {Nombre}
    "); System.Text.RegularExpressions.Match Coincidencia = System.Text.RegularExpressions.Regex.Match(RFC, @"/^([A-Z,Ñ,&]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[A-Z|\d]{3})$/"); - if (!Coincidencia.Success) - { - SbErrores.AppendLine($"El RFC {RFC} del empleado {Nombre} no es valido
    "); - ErroresValidaciones = true; - } + //if (!Coincidencia.Success) + //{ + // SbErrores.AppendLine($"El RFC {RFC} del empleado {Nombre} no es valido
    "); + // ErroresValidaciones = true; + //} if (BancoNumCuenta.Trim().Length != 10) { - SbErrores.AppendLine($"Empleado {Nombre} numero de cuenta incorrecto, la cuenta debe de tener 10 caracteres
    "); // Bancomer 10 caracteres + SbErrores.AppendLine($"- {Nombre} numero de cuenta incorrecto, la cuenta debe de tener 10 caracteres
    "); // Bancomer 10 caracteres ErroresValidaciones = true; } - if (Importe <= 0) { - SbErrores.AppendLine($"Empleado {Nombre} el importe debe de ser mayor a 0 importe {Importe}"); // importe mayot a 0 + SbErrores.AppendLine($"- {Nombre} el importe debe de ser mayor a 0 importe {Importe}"); // importe mayot a 0 ErroresValidaciones = true; } } - - ErroresValidaciones = false; - + if (!ErroresValidaciones) { int Count = 1; @@ -10162,40 +10137,39 @@ public partial class Nomina_Nomina2 : ClsPaginas string RFC = dRow["RFC"].ToString(); string Nombre = dRow["Nombre"].ToString(); - string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + string BancoNumCuenta = dRow["NumeroCuenta"].ToString(); decimal Importe = dRow["Importe"].ToString().ToDecimal().RoundSQL(2); SbLinea.Append(Count.ToString("000000000")); SbLinea.Append(RFC.Trim().PadRight(16)); - SbLinea.Append("03"); + if (modalidadnomina == 2) SbLinea.Append("99"); else SbLinea.Append("03"); SbLinea.Append(BancoNumCuenta.Trim().PadRight(20)); SbLinea.Append(Importe.ToString("0000000000000.00").Replace(".", "")); - if (Nombre.Trim().Length > 40) Nombre = Nombre.Substring(0, 40); SbLinea.Append(Nombre.Trim().PadRight(40)); - - SbLinea.Append("012"); - SbLinea.Append("000"); - + if (modalidadnomina == 2) + { + SbLinea.Append("001"); SbLinea.Append("001"); + } + else { + SbLinea.Append("012"); SbLinea.Append("000"); + } sb.AppendLine(SbLinea.ToString()); - - Count = Count + 1; } - Response.Clear(); Response.ClearHeaders(); Response.AppendHeader("Content-Length", sb.ToString()); Response.ContentType = "text/plain"; //Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina{NowADS().ToString("yyyyMMddhhmmss").ToString()}.txt\""); - Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina {DdlPeriodo.SelectedItem.Text}.txt\""); + Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina_BBVA_{DdlPeriodo.SelectedItem.Text}.txt\""); Response.Write(sb.ToString()); - RegistraScript("$('#ModalLayoutBancos').modal('hide');"); - Response.Flush(); + //RegistraScript("$('#ModalLayoutBancos').modal('hide');"); + // Response.Flush(); Response.End(); } else @@ -10249,7 +10223,6 @@ public partial class Nomina_Nomina2 : ClsPaginas { foreach (DataRow dRow in DTNomina.Rows) { - // Codigo ReferenciaDelServicio ReferenciaLeyendaDelOrdenante Importe NumeroBancoReceptor TipoCuenta NumeroCuenta TipoMovimiento Accion ImporteIvaOperacion string Codigo = dRow["Codigo"].ToString().Trim(); string ReferenciaDelServicio = dRow["ReferenciaDelServicio"].ToString().Trim(); @@ -10262,7 +10235,6 @@ public partial class Nomina_Nomina2 : ClsPaginas string Accion = dRow["Accion"].ToString().Trim(); string ImporteIvaOperacion = dRow["ImporteIvaOperacion"].ToString().Trim(); - //Linea Nueva sb.AppendLine(""); @@ -10281,7 +10253,6 @@ public partial class Nomina_Nomina2 : ClsPaginas SbErrores.AppendLine($"{Codigo} Codigo {Codigo} debe de tener una logitud de entre 1 y 10
    "); ErrorProceso = true; } - //ReferenciaDelServicio A 40 20-29 sb.Append(ReferenciaDelServicio.PadLeft(40, Espacio)); //ReferenciaLeyendaDelOrdenante A 40 60-99 @@ -10302,19 +10273,13 @@ public partial class Nomina_Nomina2 : ClsPaginas sb.Append(ImporteIvaOperacion.PadLeft(8, Cero)); //filler 18 148-165 sb.Append(string.Empty.PadLeft(18, Espacio)); - - } - if (!ErrorProceso) { sb.AppendLine(""); } - - } - if (!ErrorProceso) { Response.Clear(); @@ -10324,7 +10289,7 @@ public partial class Nomina_Nomina2 : ClsPaginas Response.AppendHeader("Content-Disposition", $"attachment;filename=\"NI{Emisora.PadLeft(5, Cero)}{Consecutivo.ToString("00")}.PAG\""); Response.Write(sb.ToString()); RegistraScript("$('#ModalLayoutBancos').modal('hide');"); - Response.Flush(); + //Response.Flush(); Response.End(); } else @@ -10349,7 +10314,7 @@ public partial class Nomina_Nomina2 : ClsPaginas { //string RFC = dRow["RFC"].ToString(); string Nombre = dRow["Nombre"].ToString(); - string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + string BancoNumCuenta = dRow["NumeroCuenta"].ToString(); decimal Importe = dRow["Importe"].ToString().ToDecimal(); //if (RFC.Trim().Length == 0) @@ -10362,7 +10327,7 @@ public partial class Nomina_Nomina2 : ClsPaginas // ErroresValidaciones = true; //} - if (BancoNumCuenta.Trim().Length != 10) + if (BancoNumCuenta.Trim().Length != 10 || BancoNumCuenta.Trim().Length != 16) { SbErrores.AppendLine($"Empleado {Nombre} numero de cuenta incorrecto, la cuenta debe de tener 10 caracteres
    "); // Bancomer 10 caracteres ErroresValidaciones = true; @@ -10428,7 +10393,7 @@ public partial class Nomina_Nomina2 : ClsPaginas string AMaterno = dRow["AMaterno"].ToString().Replace("ñ,Ñ", "n").Replace("*,#,$,%,=,+", ""); //string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); - string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + string BancoNumCuenta = dRow["NumeroCuenta"].ToString(); decimal Importe = dRow["Importe"].ToString().ToDecimal().RoundSQL(2); var StrImporte = Importe.ToString("0000000000000000.00").Replace(".", ""); @@ -10463,10 +10428,10 @@ public partial class Nomina_Nomina2 : ClsPaginas Response.AppendHeader("Content-Length", sb.ToString()); Response.ContentType = "text/plain"; //Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina{NowADS().ToString("yyyyMMddhhmmss").ToString()}.txt\""); - Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina {DdlPeriodo.SelectedItem.Text}.txt\""); + Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina_Banamex_{DdlPeriodo.SelectedItem.Text}.txt\""); Response.Write(sb.ToString()); - RegistraScript("$('#ModalLayoutBancos').modal('hide');"); - Response.Flush(); + //RegistraScript("$('#ModalLayoutBancos').modal('hide');"); + //Response.Flush(); Response.End(); } else @@ -10474,9 +10439,6 @@ public partial class Nomina_Nomina2 : ClsPaginas } #endregion - - - protected void LnkBitacoraCorreo_Click(object sender, EventArgs e) { using (ClsRH objrh = new ClsRH()) From 8e4d0fb149ec9c8e04afecffdfcf76ff5c37d410 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:09:22 -0700 Subject: [PATCH 46/69] - --- Planeacion/CatSubProyectos.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Planeacion/CatSubProyectos.aspx.vb b/Planeacion/CatSubProyectos.aspx.vb index 959ac61db..05ada195f 100644 --- a/Planeacion/CatSubProyectos.aspx.vb +++ b/Planeacion/CatSubProyectos.aspx.vb @@ -102,7 +102,7 @@ Partial Class CatSubProyectos Private Sub RecargaGlobal() GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) = Nothing - GlobalDTSubProyectosUsuarios(-1, -1, UsuarioActual.CveEmpresa) = Nothing + GlobalDTSubProyectosUsuarios(-1, -1, CveEmpresa:=UsuarioActual.CveEmpresa) = Nothing GlobalDTOCEstatusUsuarios(UsuarioActual.CveEmpresa) = Nothing End Sub From 50d4cc7b4b355d908714119a044246441493487c Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 13 Jul 2024 17:38:51 -0700 Subject: [PATCH 47/69] =?UTF-8?q?-=20cambio=20en=20dispersi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Nomina/Nomina.aspx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index d299f9659..f3a287e04 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -9957,7 +9957,7 @@ public partial class Nomina_Nomina2 : ClsPaginas libro.Cell(row, column++).Value = dRow["Codigo"]; libro.Cell(row, column++).Value = dRow["Nombre"]; libro.Cell(row, column++).Value = string.Format("'{0}", dRow["BancoNombre"]); - libro.Cell(row, column++).Value = string.Format("'{0}", dRow["BancoNumCuenta"]); + libro.Cell(row, column++).Value = string.Format("'{0}", dRow["NumeroCuenta"]); libro.Cell(row, column++).Value = string.Format("'{0}", dRow["CLABE"]); var importeCell = libro.Cell(row, column++); importeCell.Value = dRow["Importe"]; From 07ec58ad176b91d3f97b5a47063212c85e09a97f Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Mon, 15 Jul 2024 09:28:34 -0700 Subject: [PATCH 48/69] --FIX autorizaciones de NC, --etiqueta de promociones --- Ventas/Ventas.aspx | 15 +++++++++------ Ventas/Ventas.aspx.vb | 6 +++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index 59e0d4f5f..d0cb29335 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -1253,9 +1253,11 @@ <%--1--%> -
    -
    +
    + +
    +
    @@ -1671,7 +1673,7 @@ Amort. Ant.: -   +   @@ -4929,7 +4931,7 @@     - + Sucursal: @@ -7970,9 +7972,9 @@
    -
    +
    - +
    @@ -8590,6 +8592,7 @@
    +
    diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 1b81cae90..4ab55aa65 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -9752,13 +9752,13 @@ Partial Class Ventas Dim CveVendedor As Integer = DdlVendedor.SelectedValue.ToEntero() Dim ObjVentas As New ClsVentas - If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, CveVendedor, "Ing", CveEstatus:=1) Then + If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, CveVendedor, If(DdlTipoComprobante.SelectedValue = "Egs", "Egs", "Ing"), CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then - RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") + RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='{If(DdlTipoComprobante.SelectedValue = "Egs", "Egs", "Ing")}'", Orderby:="Importe DESC") Else - RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") + RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='{If(DdlTipoComprobante.SelectedValue = "Egs", "Egs", "Ing")}'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then From c7752358fc108f3e4ba4d933af910d07647f5d28 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Mon, 15 Jul 2024 11:21:49 -0700 Subject: [PATCH 49/69] --FIX DBNull tag promocion --- Ventas/Ventas.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index d0cb29335..7064deaee 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -1254,7 +1254,7 @@
    -
    +
    From a33230b71150d7ecacb2dc6e6551baa7b1ac0ecb Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 15 Jul 2024 19:30:05 -0700 Subject: [PATCH 50/69] eFacturas Subir facturas --- App_Code/ClsCompras.vb | 144 ++- App_Code/modExtensiones.vb | 6 + Compras/Compras.aspx.vb | 19 +- Compras/eFacturas.aspx.vb | 2273 +++++++++++++++++++++++++++++++++--- 4 files changed, 2213 insertions(+), 229 deletions(-) diff --git a/App_Code/ClsCompras.vb b/App_Code/ClsCompras.vb index a2491dbad..84ee4f34b 100644 --- a/App_Code/ClsCompras.vb +++ b/App_Code/ClsCompras.vb @@ -1776,27 +1776,72 @@ Public Class ClsCompras End Function - Public Function AddFactura(Serie As String, Folio As String, FechaFactura As DateTime, NombreProveedor As String, RFCDe As String, SubTotal As Double, - IVA As Double, Total As Double, UUID As String, RFCPara As String, XML As String, PDF As String, - VersionCFD As String, Descuento As Double, Moneda As String, TipodeComprobante As String, TipoCambio As Double, FueValidado As Integer, - CveEmpresa As Integer, PreFijo As String) As Integer - Dim Retorno As Integer = -1 + 'Public Function AddFactura(Serie As String, Folio As String, FechaFactura As DateTime, NombreProveedor As String, RFCDe As String, SubTotal As Double, + 'IVA As Double, Total As Double, UUID As String, RFCPara As String, XML As String, PDF As String, + 'VersionCFD As String, Descuento As Double, Moneda As String, TipodeComprobante As String, TipoCambio As Double, FueValidado As Integer, + 'CveEmpresa As Integer, PreFijo As String) As Integer + ' Dim Retorno As Integer = -1 - Dim StrSQL As StringBuilder = New StringBuilder() - StrSQL.Append(" BEGIN ") - StrSQL.Append(" DECLARE @tTotal INT; ") - StrSQL.Append(" ") - StrSQL.Append(" SELECT @tTotal = ISNULL(MAX(CveFactura),0) FROM Comp_Facturas WHERE UUID = @UUID;") - StrSQL.Append(" IF @tTotal = 0 ") - StrSQL.Append(" BEGIN ") - StrSQL.Append(" INSERT INTO Comp_Facturas (Serie, Folio, FechaFactura, NombreProveedor, RFCDe, Total, UUID, RFCPara, XML, PDF, FueValidado, CveEmpresa, TipoFactura,Version, TipoComprobante) ") - StrSQL.Append(" VALUES (@Serie, @Folio, @FechaFactura, @NombreProveedor, @RFCDe, @Total, @UUID, @RFCPara, @XML, @PDF, @FueValidado, @CveEmpresa, @PreFijo, @Version,@TipodeComprobante); ") - StrSQL.Append(" SET @Retorno = 1; ") - StrSQL.Append(" SET @CveFactura = SCOPE_IDENTITY(); ") - StrSQL.Append(" UPDATE Comp_Facturas SET XML = CONCAT(@CveFactura,'.xml'), PDF = CONCAT(@CveFactura ,'.pdf') WHERE CveFactura = @CveFactura; ") - StrSQL.Append(" END ") - StrSQL.Append(" ELSE BEGIN SET @CveFactura = @tTotal; END ") - StrSQL.Append(" END ") + ' Dim StrSQL As StringBuilder = New StringBuilder() + ' StrSQL.Append(" BEGIN ") + ' StrSQL.Append(" DECLARE @tTotal INT; ") + ' StrSQL.Append(" ") + ' StrSQL.Append(" SELECT @tTotal = ISNULL(MAX(CveFactura),0) FROM Comp_Facturas WHERE UUID = @UUID;") + ' StrSQL.Append(" IF @tTotal = 0 ") + ' StrSQL.Append(" BEGIN ") + ' StrSQL.Append(" INSERT INTO Comp_Facturas (Serie, Folio, FechaFactura, NombreProveedor, RFCDe, Total, UUID, RFCPara, XML, PDF, FueValidado, CveEmpresa, TipoFactura,Version, TipoComprobante,) ") + ' StrSQL.Append(" VALUES (@Serie, @Folio, @FechaFactura, @NombreProveedor, @RFCDe, @Total, @UUID, @RFCPara, @XML, @PDF, @FueValidado, @CveEmpresa, @PreFijo, @Version,@TipodeComprobante); ") + ' StrSQL.Append(" SET @Retorno = 1; ") + ' StrSQL.Append(" SET @CveFactura = SCOPE_IDENTITY(); ") + ' StrSQL.Append(" UPDATE Comp_Facturas SET XML = CONCAT(@CveFactura,'.xml'), PDF = CONCAT(@CveFactura ,'.pdf') WHERE CveFactura = @CveFactura; ") + ' StrSQL.Append(" END ") + ' StrSQL.Append(" ELSE BEGIN SET @CveFactura = @tTotal; END ") + ' StrSQL.Append(" END ") + + ' If PreFijo.ToLower() = "cfdi" Then + ' PreFijo = "CFDi" + ' ElseIf PreFijo.ToLower() = "cfd" Then + ' PreFijo = "CFD" + ' End If + + ' DataAdapter(StrSQL.ToString(), CommandType.Text) + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@Serie", SqlDbType.VarChar).Value = Serie + ' .Add("@Folio", SqlDbType.VarChar).Value = Folio + ' .Add("@FechaFactura", SqlDbType.[Date]).Value = FechaFactura + ' .Add("@NombreProveedor", SqlDbType.VarChar).Value = NombreProveedor + ' .Add("@RFCDe", SqlDbType.VarChar).Value = RFCDe + ' .Add("@Total", SqlDbType.Money).Value = Total + ' .Add("@UUID", SqlDbType.VarChar).Value = UUID + ' .Add("@RFCPara", SqlDbType.VarChar).Value = RFCPara + ' .Add("@XML", SqlDbType.VarChar).Value = XML + ' .Add("@PDF", SqlDbType.VarChar).Value = PDF + ' .Add("@Version", SqlDbType.VarChar).Value = VersionCFD + ' .Add("@FueValidado", SqlDbType.Int).Value = FueValidado + ' .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + ' .Add("@PreFijo", SqlDbType.VarChar).Value = PreFijo + ' .Add("@TipodeComprobante", SqlDbType.VarChar).Value = TipodeComprobante.ToUpper + ' .Add("@CveFactura", SqlDbType.Int).Direction = ParameterDirection.Output + ' .Add("@Retorno", SqlDbType.Int).Direction = ParameterDirection.Output + ' End With + + + ' Try + ' SqlAdapter.Fill(Data) + + ' Retorno = SqlAdapter.SelectCommand.Parameters("@Retorno").Value.ToString().ToEntero() + + ' CveFactura = SqlAdapter.SelectCommand.Parameters("@CveFactura").Value.ToString().ToEntero() + ' Catch ex As Exception + ' ModExtensiones.OnError(Me, "Ocurrió un error al intentar Guardar", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ' End Try + + ' Return Retorno + 'End Function + + + Public Function AddFactura(Serie As String, Folio As String, FechaFactura As DateTime, NombreProveedor As String, RFCDe As String, SubTotal As Decimal, IVA As Decimal, Total As Decimal, UUID As String, RFCPara As String, XML As String, PDF As String, VersionCFD As String, Descuento As Decimal, TipoCambio As Decimal, FueValidado As Integer, CveEmpresa As Integer, PreFijo As String, TipoComprobante As String, MONEDA As String, METODODEPAGO As String, Optional TipoRecepcion As Integer = 0, Optional Version As String = "3.3", Optional IEPS As Decimal = 0, Optional RetIVA As Decimal = 0, Optional RetISR As Decimal = 0) As Integer + Dim Retorno As Integer = -1 If PreFijo.ToLower() = "cfdi" Then PreFijo = "CFDi" @@ -1804,40 +1849,50 @@ Public Class ClsCompras PreFijo = "CFD" End If - DataAdapter(StrSQL.ToString(), CommandType.Text) - With SqlAdapter.SelectCommand.Parameters - .Add("@Serie", SqlDbType.VarChar).Value = Serie - .Add("@Folio", SqlDbType.VarChar).Value = Folio - .Add("@FechaFactura", SqlDbType.[Date]).Value = FechaFactura - .Add("@NombreProveedor", SqlDbType.VarChar).Value = NombreProveedor - .Add("@RFCDe", SqlDbType.VarChar).Value = RFCDe - .Add("@Total", SqlDbType.Money).Value = Total - .Add("@UUID", SqlDbType.VarChar).Value = UUID - .Add("@RFCPara", SqlDbType.VarChar).Value = RFCPara - .Add("@XML", SqlDbType.VarChar).Value = XML - .Add("@PDF", SqlDbType.VarChar).Value = PDF - .Add("@Version", SqlDbType.VarChar).Value = VersionCFD - .Add("@FueValidado", SqlDbType.Int).Value = FueValidado - .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa - .Add("@PreFijo", SqlDbType.VarChar).Value = PreFijo - .Add("@TipodeComprobante", SqlDbType.VarChar).Value = TipodeComprobante.ToUpper - .Add("@CveFactura", SqlDbType.Int).Direction = ParameterDirection.Output - .Add("@Retorno", SqlDbType.Int).Direction = ParameterDirection.Output - End With + DataAdapter("PA_eFacturas_FacturasAdd", CommandType.StoredProcedure) + SqlAdapter.SelectCommand.Parameters.Add("@Serie", SqlDbType.VarChar).Value = Serie + SqlAdapter.SelectCommand.Parameters.Add("@Folio", SqlDbType.VarChar).Value = Folio + SqlAdapter.SelectCommand.Parameters.Add("@FechaFactura", SqlDbType.Date).Value = FechaFactura + SqlAdapter.SelectCommand.Parameters.Add("@NombreProveedor", SqlDbType.VarChar).Value = NombreProveedor + SqlAdapter.SelectCommand.Parameters.Add("@RFCDe", SqlDbType.VarChar).Value = RFCDe + SqlAdapter.SelectCommand.Parameters.Add("@TipoComprobante", SqlDbType.VarChar).Value = TipoComprobante + SqlAdapter.SelectCommand.Parameters.Add("@Total", SqlDbType.Money).Value = Total + SqlAdapter.SelectCommand.Parameters.Add("@UUID", SqlDbType.VarChar).Value = UUID + SqlAdapter.SelectCommand.Parameters.Add("@RFCPara", SqlDbType.VarChar).Value = RFCPara + SqlAdapter.SelectCommand.Parameters.Add("@XML", SqlDbType.VarChar).Value = XML + SqlAdapter.SelectCommand.Parameters.Add("@PDF", SqlDbType.VarChar).Value = PDF + SqlAdapter.SelectCommand.Parameters.Add("@Version", SqlDbType.VarChar).Value = VersionCFD + SqlAdapter.SelectCommand.Parameters.Add("@FueValidado", SqlDbType.Int).Value = FueValidado + SqlAdapter.SelectCommand.Parameters.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + SqlAdapter.SelectCommand.Parameters.Add("@PreFijo", SqlDbType.VarChar).Value = PreFijo + SqlAdapter.SelectCommand.Parameters.Add("@TipoRecepcion", SqlDbType.Int).Value = TipoRecepcion + SqlAdapter.SelectCommand.Parameters.Add("@CveFactura", SqlDbType.Int).Direction = ParameterDirection.Output + SqlAdapter.SelectCommand.Parameters.Add("@Retorno", SqlDbType.Int).Direction = ParameterDirection.Output + SqlAdapter.SelectCommand.Parameters.Add("@MONEDA", SqlDbType.VarChar).Value = MONEDA + SqlAdapter.SelectCommand.Parameters.Add("@METODODEPAGO", SqlDbType.VarChar).Value = METODODEPAGO + + SqlAdapter.SelectCommand.Parameters.Add("@TipoCambio", SqlDbType.SmallMoney).Value = TipoCambio + SqlAdapter.SelectCommand.Parameters.Add("@SubTotal", SqlDbType.Money).Value = SubTotal + SqlAdapter.SelectCommand.Parameters.Add("@IVA", SqlDbType.Money).Value = IVA + SqlAdapter.SelectCommand.Parameters.Add("@IEPS", SqlDbType.Money).Value = IEPS + SqlAdapter.SelectCommand.Parameters.Add("@RetIVA", SqlDbType.Money).Value = RetIVA + SqlAdapter.SelectCommand.Parameters.Add("@RetISR", SqlDbType.Money).Value = RetISR + SqlAdapter.SelectCommand.Parameters.Add("@Descuento", SqlDbType.Money).Value = Descuento Try SqlAdapter.Fill(Data) - Retorno = SqlAdapter.SelectCommand.Parameters("@Retorno").Value.ToString().ToEntero() + Retorno = Convert.ToInt32(SqlAdapter.SelectCommand.Parameters("@Retorno").Value) + CveFactura = Convert.ToInt32(SqlAdapter.SelectCommand.Parameters("@CveFactura").Value) - CveFactura = SqlAdapter.SelectCommand.Parameters("@CveFactura").Value.ToString().ToEntero() Catch ex As Exception ModExtensiones.OnError(Me, "Ocurrió un error al intentar Guardar", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End Try Return Retorno End Function + Public Function UpdateArchivo(CveFactura As Integer, Columna As String) As Boolean Dim Retorno As Boolean = False Dim Str As String = "" @@ -1851,9 +1906,12 @@ Public Class ClsCompras DataAdapter(Str, CommandType.Text) Try SqlAdapter.Fill(Data) + + SqlAdapter.SelectCommand.Parameters.Add("@CveFactura", SqlDbType.Int).Value = CveFactura + Retorno = True Catch ex As Exception - ModExtensiones.OnError(Me, "Ocurrió un error al agregar el Tipo de Cambio", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ModExtensiones.OnError(Me, "Ocurrió un error al actualizar la factura", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End Try Return Retorno End Function diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index 0785bc7fe..61beb671e 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -2014,6 +2014,12 @@ Namespace Extensiones End Sub + + Public Function CopyToDataTable(Of T)(ByVal source As IEnumerable(Of T), ByVal flag As Boolean) As DataTable + Return New ObjectShredder(Of T)().Shred(source, Nothing, Nothing) + End Function + + Public Sub ExportToExcel2(GridView As GridView, NombreArchivoXLSX As String) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 4137467d2..73230e99f 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -9155,7 +9155,7 @@ Partial Class Compras_Compras ObjCompra.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() - SeActualizoDetalle = False + Finally If Retorno Then If ObjContabilidad.MensajePolizaDescuadre IsNot Nothing AndAlso ObjContabilidad.MensajePolizaDescuadre.ToString <> "" Then @@ -9192,23 +9192,22 @@ Partial Class Compras_Compras UpBitacora.Update() - If SeActualizoDetalle Then - MandaCorreoActualizacionDetalle(CveCompra) + If SeActualizoDetalle AndAlso UsuarioActual.CveEmpresa = 119 Then + MandaCorreoActualizacionDetalle() End If End Sub - Private Sub MandaCorreoActualizacionDetalle(CveCompra As Integer) + Private Sub MandaCorreoActualizacionDetalle() + - If UsuarioActual.CveRol <> 1 Then - Exit Sub - End If Dim DTCorreos As New DataTable Dim DTMovimientos As New DataTable Dim strBody As New StringBuilder Dim Asunto, Para, ArrayCC, Body As String - Para = GlobalDTUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo") + 'Para = GlobalDTUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo") + Para = "fernanda.romo@agrojam.com.mx" If Para.ToString = "" AndAlso UsuarioActual.CveRol = 1 Then Para = Para & ";oscar.irigoyen@adssistemas.mx;rene.molina@adssistemas.mx" @@ -9260,8 +9259,8 @@ Partial Class Compras_Compras Asunto = $"Actualizacion de Compra: {SerieFolioCompra} Proveedor: {HplProveedor.Text}" ArrayCC = "" Body = strBody.ToString - Dim Mail As New ClsSisMail() - Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC) + Dim Mail As New ClsSisMail() + Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC) diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index 1bdcb7b62..39f14166c 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -19,6 +19,16 @@ Imports Microsoft.Reporting.WebForms Imports Newtonsoft.Json.Linq Imports ClsPaginas Imports ADS.eFacturas +'Imports Telerik.Web.UI.Widgets +'Imports DocumentFormat.OpenXml.Drawing.Diagrams +Imports SharpCompress.Archive.Rar +Imports SharpCompress.Common +Imports SharpCompress.Reader +Imports System.Drawing +Imports Microsoft.Owin.Security.Provider +Imports Telerik.Web.UI +'Imports Telerik.Web.UI + @@ -1496,6 +1506,15 @@ Partial Class Compras_eFacturas ' Exit Sub 'End If + Dim DTLOG As New DataTable + DTLOG.Columns.Add("Serie", GetType(String)) + DTLOG.Columns.Add("Folio", GetType(String)) + DTLOG.Columns.Add("Fecha", GetType(Date)) + DTLOG.Columns.Add("Proveedor", GetType(String)) + DTLOG.Columns.Add("Importe", GetType(Decimal)) + DTLOG.Columns.Add("Motivo", GetType(String)) + 'Serie Folio Fecha Proveedor Importe Motivo + Dim sw As New Diagnostics.Stopwatch Dim swmili As Long = 0 Dim swTiempo As New StringBuilder @@ -1508,138 +1527,286 @@ Partial Class Compras_eFacturas Dim ListXML As New List(Of String) Dim ListPDF As New List(Of String) + Dim ListComprimidos As New List(Of String) Dim ListDirectorios As New List(Of String) + Dim ListFacturas As New List(Of Factura) + + For Each fileItem As Archivo In filesgral FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") filemove = fileItem.filename If filemove <> "" Then - 'filemove.FilesMove("", String.Format("{0}\Temp\Facturas", UsuarioActual.Empresa.Ruta)) - 'filemove.FilesMove("", String.Format("Empresas\{0}\Temp\Facturas", UsuarioActual.CveEmpresa)) - filemove.FilesMove("", String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) - 'AGREGA XML A LA LISTA - If FileExtension.ToUpper = "XML" Or FileExtension.ToUpper = "PDF" Then - ListXML.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, filemove)) + filemove.FilesMove("", String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False, Sobreescribir:=True) + If FileExtension.ToUpper = "RAR" Or FileExtension.ToUpper = "ZIP" Then + ListComprimidos.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, filemove)) End If End If Next - Dim fileEntries As String() = Directory.GetFiles(String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta)) + For Each comprmido As String In ListComprimidos - Dim ListaDirectoriosTemporales As New List(Of String) - Dim ListaComprimidos As New List(Of String) + Dim FiInfo As New FileInfo(comprmido) - 'Dim fileName As String - Dim ArchivoExtension As String - Dim sOnlyFilename As String + Using stream As Stream = System.IO.File.OpenRead(FiInfo.FullName) + Try + Dim reader = ReaderFactory.Open(stream) - For Each filePath As String In fileEntries + Dim Multiparte As Boolean = False + If Path.GetExtension(FiInfo.FullName.ToUpper()) = ".RAR" And FiInfo.FullName.ToUpper().Contains(".PART") Then + 'SI ES .RAR, PUEDE SER MULTI PART Y PUEDE TRONAR + Using archive As RarArchive = RarArchive.Open(FiInfo.FullName) + If archive.IsMultipartVolume() Then + Multiparte = True + End If + End Using + End If - ArchivoExtension = IO.Path.GetExtension(String.Format("{0}", filePath)).Replace(".", "") - sOnlyFilename = System.IO.Path.GetFileName(filePath) + Dim PdfList As New List(Of String) + If Not Multiparte Then + 'puede tronar si el archivo es multiparte + While reader.MoveToNextEntry() + If Not reader.Entry.IsDirectory Then + 'Si es un archivo XML, lo leo y lo guardo + + Dim nombreArchivo As String = "" + + If reader.Entry.FilePath.Contains("/") Then + nombreArchivo = reader.Entry.FilePath.Substring(reader.Entry.FilePath.LastIndexOf("/") + 1) + Else + nombreArchivo = reader.Entry.FilePath + End If + + If Path.GetExtension(reader.Entry.FilePath.ToUpper()) = ".XML" Then + reader.WriteEntryToDirectory(String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ExtractOptions.None Or ExtractOptions.Overwrite) + ListXML.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, nombreArchivo)) + End If + If Path.GetExtension(reader.Entry.FilePath.ToUpper()) = ".PDF" Then + 'este sale de un error al leer el pdf, como lo estoy recorriendo de una vez lo guardo y lo vinculo, si la coincidencia es por nombre o número de folio + 'string RFCEmisor = BuscaFactura(System.IO.Path.GetFileNameWithoutExtension(reader.Entry.FilePath).ToUpper(), Arreglo, True); + 'if (!string.IsNullOrEmpty(RFCEmisor)) + ' { + 'If Not Directory.Exists(String.Format("{0}{1}", Temporal, RFCEmisor)) Then Directory.CreateDirectory(String.Format("{0}{1}", Temporal, RFCEmisor)) + + 'reader.WriteEntryToDirectory(String.Format("{0}{1}", Temporal, ""), ExtractOptions.None Or ExtractOptions.Overwrite) + reader.WriteEntryToDirectory(String.Format("{0}{1}", String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ""), ExtractOptions.None Or ExtractOptions.Overwrite) + ListPDF.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, nombreArchivo)) + + End If + End If + End While + End If + Catch ex As Exception + GuardaLog("'ERROR :" & ex.Message) + End Try + End Using + Next + + + For Each fileItem As Archivo In filesgral + FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") + filemove = fileItem.filename + + If filemove <> "" AndAlso (FileExtension.ToUpper() <> "ZIP" And FileExtension.ToUpper() <> "RAR") Then + + 'filemove.FilesMove("", String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False, Sobreescribir:=True) + + If FileExtension.ToUpper = "XML" Then + ListXML.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, filemove)) + End If + + If FileExtension.ToUpper = "PDF" Then + ListPDF.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, filemove)) + End If - If ArchivoExtension.ToUpper = "RAR" Or ArchivoExtension.ToUpper = "ZIP" Then - ListXML.Add(filePath) End If Next - Dim Arreglo As New ArrayList() - Dim Bandera As Boolean = True - Dim Retorno As String = "" - Dim ListaArchivosMail As New List(Of ClsSisMail.ArchivoMail) - sw.Stop() - swTiempo.AppendFormat("ReadFiles: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() + 'Dim fileEntries As String() = Directory.GetFiles(String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta)) + + 'Dim ListaDirectoriosTemporales As New List(Of String) + 'Dim ListaComprimidos As New List(Of String) + + ''Dim fileName As String + 'Dim ArchivoExtension As String + 'Dim sOnlyFilename As String + + 'For Each filePath As String In fileEntries + + ' ArchivoExtension = IO.Path.GetExtension(String.Format("{0}", filePath)).Replace(".", "") + ' sOnlyFilename = System.IO.Path.GetFileName(filePath) + + ' If ArchivoExtension.ToUpper = "RAR" Or ArchivoExtension.ToUpper = "ZIP" Then + ' ListXML.Add(filePath) + ' End If + 'Next + + 'Dim Arreglo As New ArrayList() + 'Dim Bandera As Boolean = True + 'Dim Retorno As String = "" + 'Dim ListaArchivosMail As New List(Of ClsSisMail.ArchivoMail) + + 'sw.Stop() + 'swTiempo.AppendFormat("ReadFiles: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) + 'swmili = sw.ElapsedMilliseconds + 'sw.Start() Anexo.Text = "" UPAddFacturas.Update() - For Each filePath As String In ListXML + For Each filePathXML As String In ListXML - If File.Exists(filePath) Then + Dim rowLog As DataRow = DTLOG.NewRow + rowLog("Serie") = "" + rowLog("Folio") = "" + rowLog("Fecha") = NowADS() + rowLog("Proveedor") = "" + rowLog("Importe") = 0 + rowLog("Motivo") = "" + + Dim fInfoXML As New FileInfo(filePathXML) + + Dim RutaPDF As String = "" + + For Each filePathPDF As String In ListPDF + + Dim fInfoPDF As New FileInfo(filePathPDF) + + + Dim fxml As String = fInfoXML.Name.ToUpper().Replace(".XML", "") + Dim fpdf As String = fInfoPDF.Name.ToUpper().Replace(".PDF", "") + Dim fpdfSplit As String() = fpdf.Split("-"c) + + If fpdfSplit.Length >= 2 AndAlso fpdfSplit(0).Length = 18 Then + fpdf = fpdf.Replace($"{fpdfSplit(0)}-", "") + End If + + If fxml.Contains(fpdf) Then + RutaPDF = fInfoPDF.FullName + Exit For + End If + + Next + + If File.Exists(filePathXML) Then Dim a As New ComprobanteFactura - Dim FF As Factura = a.CargaComprobanteXML(File.ReadAllText(filePath)) - 'Dim ArchivoAdjunto As New ClsSisMail.ArchivoMail - 'ArchivoAdjunto.ArchivoBinario = File.ReadAllBytes(filePath) - 'ArchivoAdjunto.Ruta = filePath - 'ArchivoAdjunto.NombreArchivo = New FileInfo(filePath).Name + Dim FF As Factura = a.CargaComprobanteXML(File.ReadAllText(filePathXML), UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.RFC, UsuarioActual.CveEmpresa, True, rowLog, NombreArchivo:=fInfoXML.Name) - 'ListaArchivosMail.Add(ArchivoAdjunto) + If FF IsNot Nothing AndAlso FF.CveFactura > 0 Then + If RutaPDF = "" Then + a.GeneraPDF(UsuarioActual.Empresa.Ruta, FF, UsuarioActual.Empresa.Ruta, True) + Else + Dim PDfDestino As String = $"{UsuarioActual.Empresa.Ruta}\Compras\{FF.EmisorRFC}\{FF.CveFactura}.PDF" + If File.Exists(PDfDestino) Then + File.Delete(PDfDestino) + End If + File.Move(RutaPDF, PDfDestino) + End If + + End If End If + DTLOG.Rows.Add(rowLog) + Next sw.Stop() swTiempo.AppendFormat("Fill ClsSisMail.ArchivoMail: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() - If ListaArchivosMail.Count > 0 Then - Dim Correo As New ClsSisMail + 'If ListaArchivosMail.Count > 0 Then - 'If Correo.SendMail(UsuarioActual.Empresa, "sig.buzon@gmail.com", "Facturas Efacturas " & NowADS().ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then + ' Dim Correo As New ClsSisMail - If Correo.SendMail(UsuarioActual.Empresa, UsuarioActual.Empresa.Buzon_Mail, "Facturas Efacturas " & NowADS().ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then + ' 'If Correo.SendMail(UsuarioActual.Empresa, "sig.buzon@gmail.com", "Facturas Efacturas " & NowADS().ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then - sw.Stop() - swTiempo.AppendFormat("EnvioCorreo: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - System.Threading.Thread.Sleep(3000) - 'ProcesaBuzon() + ' If Correo.SendMail(UsuarioActual.Empresa, UsuarioActual.Empresa.Buzon_Mail, "Facturas Efacturas " & NowADS().ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then - sw.Stop() - swTiempo.AppendFormat("espera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() + ' sw.Stop() + ' swTiempo.AppendFormat("EnvioCorreo: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) + ' swmili = sw.ElapsedMilliseconds + ' sw.Start() + ' System.Threading.Thread.Sleep(3000) + ' 'ProcesaBuzon() - If VerificaCorreo(True) Then - CargaDatos() - End If + ' sw.Stop() + ' swTiempo.AppendFormat("espera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) + ' swmili = sw.ElapsedMilliseconds + ' sw.Start() - sw.Stop() - swTiempo.AppendFormat("Verifica En la app: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - Else - Alert("Se presento un error al procesar las facturas.") - End If + ' If VerificaCorreo(True) Then + ' CargaDatos() + ' End If - End If + ' sw.Stop() + ' swTiempo.AppendFormat("Verifica En la app: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) + ' swmili = sw.ElapsedMilliseconds + ' sw.Start() + ' Else + ' Alert("Se presento un error al procesar las facturas.") + ' End If + + 'End If sw.Stop() swTiempo.AppendFormat("BorrarInicio: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() - For Each filePath As String In ListXML - Try - File.Delete(filePath) - Catch ex As Exception - End Try - Next - For Each s As String In ListaComprimidos + + 'For Each filePath As String In ListXML + ' Try + ' File.Delete(filePath) + ' Catch ex As Exception + ' End Try + 'Next + + + 'For Each filePath As String In ListPDF + ' Try + ' File.Delete(filePath) + ' Catch ex As Exception + ' End Try + 'Next + + 'For Each s As String In ListaComprimidos + ' Try + ' File.Delete(s) + ' Catch ex As Exception + ' End Try + 'Next + + + + + 'For Each d As String In ListaDirectoriosTemporales + ' Try + ' Directory.Delete(d, True) + ' Catch ex As Exception + ' End Try + 'Next + + For Each s As String In ListXML Try File.Delete(s) Catch ex As Exception End Try Next - For Each d As String In ListaDirectoriosTemporales + For Each s As String In ListComprimidos Try - Directory.Delete(d, True) + File.Delete(s) Catch ex As Exception End Try Next - sw.Stop() swTiempo.AppendFormat("BorrarEnd: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds @@ -1716,11 +1883,47 @@ Partial Class Compras_eFacturas RegistraScript(String.Format("$('#{0}').modal('hide');", "ModalFacturas")) + RegistraScript("$('#ModalBitacoraEfacturas').modal()") + CargaDatosBitacora() + mesajeFaturasSubidas(DTLOG) 'Alert(String.Format("Se cargaron {0} Facturas", Arreglo.Count), TipoMensaje.MsgInformacion) End Sub + + Private Sub mesajeFaturasSubidas(DTLOG As DataTable) + + + Dim Str As New StringBuilder + + + Dim conta As Integer = 1 + Str.Append("Se procesó la información con la siguiente información:
    ") + + For Each dr As DataRow In DTLOG.Rows + + Str.AppendFormat("", If(conta Mod 2 = 0, "TextoAlterno", "Texto")) + + Str.AppendFormat("", dr("Serie")) + Str.AppendFormat("", dr("Folio")) + Str.AppendFormat("", If(dr("Fecha").ToString <> "", dr("Fecha").ToString.ToDate.ToShortDateString, "")) + Str.AppendFormat("", dr("Proveedor")) + Str.AppendFormat("", dr("Importe").ToString.ToDouble.FormatoNumero) + Str.AppendFormat("", dr("Motivo")) + Str.Append("") + conta += 1 + Next + + + + If DTLOG.Rows.Count > 0 Then 'si las facturas no recividas son matores a cero se muestra el mensaje + Alert(Str.ToString, TipoMensaje.MsgInformacion) + End If + + + End Sub + Public Sub GuardaLogefacturas(Str As String) Dim ArchivoW As StreamWriter Dim strLineaTMP As String @@ -1744,83 +1947,83 @@ Partial Class Compras_eFacturas ArchivoW.Close() ArchivoW.Dispose() End Sub - Private Function AgregaFactura(Fact As Modelos.eFactura) As String - Dim Retorno As String = "" - Dim Correcto As Boolean = False + 'Private Function AgregaFactura(Fact As Modelos.eFactura) As String + ' Dim Retorno As String = "" + ' Dim Correcto As Boolean = False - If Fact.Version = "3.2" Then Fact.TipodeComprobante = Fact.TipodeComprobante.Substring(0, 1) + ' If Fact.Version = "3.2" Then Fact.TipodeComprobante = Fact.TipodeComprobante.Substring(0, 1) - Dim ObjDatos As New ClsCompras - ObjDatos.IniciaTransacSQL() - ObjDatos.CveFactura = 0 - Dim Ret As Integer = ObjDatos.AddFactura(Fact.Serie, Fact.Folio, Convert.ToDateTime(Fact.Fecha), Fact.EmisorNombre, Fact.EmisorRFC, Fact.subTotal, - Fact.TrasladoIVA, Fact.Total, Fact.TFDUUID, Fact.ReceptorRFC, Fact.ArchivoXML, Fact.ArchivoPDF, - Fact.Version, Fact.Descuento, Fact.Moneda, Fact.TipodeComprobante, Fact.TipoCambio, Fact.Validada, - Fact.CveEmpresa, Fact.sUPPrefijo) + ' Dim ObjDatos As New ClsCompras + ' ObjDatos.IniciaTransacSQL() + ' ObjDatos.CveFactura = 0 + ' Dim Ret As Integer = ObjDatos.AddFactura(Fact.Serie, Fact.Folio, Convert.ToDateTime(Fact.Fecha), Fact.EmisorNombre, Fact.EmisorRFC, Fact.subTotal, + ' Fact.TrasladoIVA, Fact.Total, Fact.TFDUUID, Fact.ReceptorRFC, Fact.ArchivoXML, Fact.ArchivoPDF, + ' Fact.Version, Fact.Descuento, Fact.Moneda, Fact.TipodeComprobante, Fact.TipoCambio, Fact.Validada, + ' Fact.CveEmpresa, Fact.sUPPrefijo) - If Ret >= 0 Then - If Not Directory.Exists(Destino + Fact.EmisorRFC) Then - Directory.CreateDirectory(Destino + Fact.EmisorRFC) - End If - 'Try - ' If File.Exists(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) Then File.Delete(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) - ' File.Move(Temporal & NombreArchivo, Destino & Retorno.EmisorRFC & "\" & NombreArchivo) + ' If Ret >= 0 Then + ' If Not Directory.Exists(Destino + Fact.EmisorRFC) Then + ' Directory.CreateDirectory(Destino + Fact.EmisorRFC) + ' End If + ' 'Try + ' ' If File.Exists(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) Then File.Delete(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) + ' ' File.Move(Temporal & NombreArchivo, Destino & Retorno.EmisorRFC & "\" & NombreArchivo) - 'Catch ex As IOException - ' GuardaLog("'ERROR :" & ex.Message) - 'End Try + ' 'Catch ex As IOException + ' ' GuardaLog("'ERROR :" & ex.Message) + ' 'End Try - Select Case Ret - Case 0 + ' Select Case Ret + ' Case 0 - Correcto = True - Dim RRutaDestino As String = String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura) - 'ModExtensiones.GuardaLog(String.Format(" '--------{0} Compra ya insertada : {1}{2} - {3}", ContadorGeneral, Fact.Serie, Fact.Folio, RRutaDestino)) + ' Correcto = True + ' Dim RRutaDestino As String = String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura) + ' 'ModExtensiones.GuardaLog(String.Format(" '--------{0} Compra ya insertada : {1}{2} - {3}", ContadorGeneral, Fact.Serie, Fact.Folio, RRutaDestino)) - If Not File.Exists(RRutaDestino) Then - File.Move(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, Fact.ArchivoXML), RRutaDestino) - ObjDatos.UpdateArchivo(ObjDatos.CveFactura, "XML") - ModExtensiones.GuardaLog(" '--------XML Actualizado ") - End If + ' If Not File.Exists(RRutaDestino) Then + ' File.Move(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, Fact.ArchivoXML), RRutaDestino) + ' ObjDatos.UpdateArchivo(ObjDatos.CveFactura, "XML") + ' ModExtensiones.GuardaLog(" '--------XML Actualizado ") + ' End If - Correcto = True - Exit Select - Case 1 - 'muevo el archivo y lo renombro - Dim StrMover As String = "" - Try - File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML), String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) - File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF), String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) - ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML) + " - " + String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) - ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF) + " - " + String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) - 'si se movieron los dos archivos, los marca como correcto - If File.Exists(String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) AndAlso File.Exists(String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) Then - Correcto = True - End If - Catch ex As Exception - StrMover = ex.Message - End Try + ' Correcto = True + ' Exit Select + ' Case 1 + ' 'muevo el archivo y lo renombro + ' Dim StrMover As String = "" + ' Try + ' File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML), String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) + ' File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF), String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) + ' ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML) + " - " + String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) + ' ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF) + " - " + String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) + ' 'si se movieron los dos archivos, los marca como correcto + ' If File.Exists(String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) AndAlso File.Exists(String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) Then + ' Correcto = True + ' End If + ' Catch ex As Exception + ' StrMover = ex.Message + ' End Try - ModExtensiones.GuardaLog(Convert.ToString(" '++++++++ Compra Insertada :" + Fact.Serie + Fact.Folio + " - Correcto:" + (If(Correcto, "Si", "No" + " Obs: "))) & StrMover) - Exit Select - End Select - End If - If Correcto Then - ObjDatos.Commit() - 'ya se insertó o está insertada - Dim Idioma As New CultureInfo("es-MX") - 'regreso el format 2014-07 Julio - Retorno = Fact.Fecha.ToDate().ToString("yyyy-MM MMMM", Idioma) - Else - ObjDatos.RollBack() - End If - ObjDatos.Dispose() + ' ModExtensiones.GuardaLog(Convert.ToString(" '++++++++ Compra Insertada :" + Fact.Serie + Fact.Folio + " - Correcto:" + (If(Correcto, "Si", "No" + " Obs: "))) & StrMover) + ' Exit Select + ' End Select + ' End If + ' If Correcto Then + ' ObjDatos.Commit() + ' 'ya se insertó o está insertada + ' Dim Idioma As New CultureInfo("es-MX") + ' 'regreso el format 2014-07 Julio + ' Retorno = Fact.Fecha.ToDate().ToString("yyyy-MM MMMM", Idioma) + ' Else + ' ObjDatos.RollBack() + ' End If + ' ObjDatos.Dispose() - Return Retorno + ' Return Retorno - End Function + 'End Function Private Sub CargarFacturas(PathArchivo As String, NombreArchivo As String) Dim RFC As String = CargaEmisordeXML(String.Format("{0}", PathArchivo), "RFC", UsuarioActual.Empresa.RFC) If RFC IsNot Nothing Then @@ -4016,7 +4219,7 @@ Partial Class Compras_eFacturas #End Region Public Sub ImprimirPDFXML(NombreArchivo As String, rutaxml As String) - Dim objxml As XmlSatCFDI = XmlSatCFDI.readXML(rutaxml) + Dim objxml As ADSistemaLibrary.SatXml.XmlSatCFDI = ADSistemaLibrary.SatXml.XmlSatCFDI.readXML(rutaxml) Dim rutaReporte As String = String.Format("{0}{1}", ModExtensiones.DirectorioBaseEmpresas, "\Empresas\Grales\Formatos\CFDIV3.rdlc") Dim cQr As Byte() = ClsPaginas.GeneraQRSAT(objxml.emisor.Rfc, objxml.receptor.Rfc, objxml.comprobante.Total, objxml.complemento.UUID) @@ -4064,7 +4267,7 @@ Partial Class Compras_eFacturas ltotales.Add(New utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2"))) End If - For Each item As CFDIImpuesto In objxml.Impuestos + For Each item As ADSistemaLibrary.SatXml.CFDIImpuesto In objxml.Impuestos If item.Importe > 0 Then Dim TasaOCuota As Decimal = 0 @@ -4196,7 +4399,7 @@ Partial Class Compras_eFacturas End Sub Protected Sub LnkRegenerarPdfnew_Click(sender As Object, e As EventArgs) Dim gvrow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) - Dim objxml As XmlSatCFDI = XmlSatCFDI.readXML(String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("XML"))) + Dim objxml As ADSistemaLibrary.SatXml.XmlSatCFDI = ADSistemaLibrary.SatXml.XmlSatCFDI.readXML(String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("XML"))) Dim XmlRutaArchivo As String = File.ReadAllText(String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("XML"))) @@ -7048,6 +7251,11 @@ End Class Namespace ADS.eFacturas Public Class Factura + + Public Property CveFactura As Integer = -1 + Public Property RespuestaInsert As Integer = -1 + + Friend noCertificado As String = "" Public Property CveEmpresa As Integer Public Property Version As String Public Property Serie As String @@ -7060,7 +7268,7 @@ Namespace ADS.eFacturas Public Property TipoComprobante As String Public Property Descuento As Decimal Public Property TipoCambio As Decimal - Public Property MetododePago As String + Public Property MetododePago As String = "" Public Property EmisorRFC As String Public Property EmisorNombre As String Public Property EmisorRegimenFiscal As String @@ -7078,10 +7286,116 @@ Namespace ADS.eFacturas Public Property RetencionISR As Decimal Public Property sUPPrefijo As String Public Property UUID As String - Public Property Validada As Integer + Public Property Validada As Integer = 0 Public Property ArchivoXML As String Public Property ArchivoPDF As String - Public Property Pagos As List(Of Pago) + Public Property Pagos As New List(Of Pago) + Public Property IEPS As Decimal + Public Property TFDFechaTimbrado As String + Public Property TFDSelloCFD As String + Public Property TFDNoCertSAT As String + Public Property TFDSelloSAT As String + Public Property FormaDePago As String + Public Property DTConceptos As DataTable + Public Property EmiRFC As String + Public Property EmiNombre As String + Public Property DomFisCalle As String + Public Property DomFisNoExt As String + Public Property DomFisCol As String + Public Property DomFisCP As String + Public Property DomFisMun As String + Public Property DomFisLoc As String + Public Property DomFisEst As String + Public Property DomFisPais As String + Public Property ExpEnCalle As String + Public Property ExpEnNoExt As String + Public Property ExpEnCol As String + Public Property ExpEnCP As String + Public Property ExpEnMun As String + Public Property ExpEnLoc As String + Public Property ExpEnEst As String + Public Property ExpEnPais As String + Public Property Regimen As String + Public Property RecRfc As String + Public Property RecNombre As String + Public Property DomRecCalle As String + Public Property DomRecFisNoExt As String + Public Property DomRecFisNoInt As String + Public Property DomRecCol As String + Public Property DomRecCP As String + Public Property DomRecMun As String + Public Property DomRecLoc As String + Public Property DomRecEst As String + Public Property DomRecPais As String + Public Property condicionesDePago As String + Public Property NumCtaPagoNumCtaPago As String + + + Public ReadOnly Property DtPagos As DataTable + Get + + If Pagos.Count > 0 Then + + Dim query = From p In Me.Pagos Select New With {.FechaPago = p.FechaPago, .FormaDePagoP = p.FormaDePagoP, .MonedaP = p.MonedaP, .ImportePago = p.Monto} + Dim DtPagosNew As DataTable = ModExtensiones.CopyToDataTable(query, True) + DtPagosNew.TableName = "DsPagos" + Return DtPagosNew + Else + Dim DtPagosNew As New DataTable + DtPagosNew.TableName = "DsPagos" + Return DtPagosNew + End If + + End Get + End Property + + Public ReadOnly Property DtDocumentosR As DataTable + Get + If Pagos.Count > 0 Then + + Dim DtDocumentosRNew As DataTable = ModExtensiones.CopyToDataTable(Pagos(0).Documentos, True) + DtDocumentosRNew.TableName = "DsDocRelacionados" + Return DtDocumentosRNew + + Else + Dim DtDocumentosRNew As New DataTable + DtDocumentosRNew.TableName = "DsDocRelacionados" + Return DtDocumentosRNew + + End If + End Get + End Property + + Private Sub CreaDTConceptos() + DTConceptos = New DataTable() + DTConceptos.Columns.Add("Consec", GetType(Integer)) + DTConceptos.Columns.Add("Cantidad", GetType(Double)) + DTConceptos.Columns.Add("UM", GetType(String)) + DTConceptos.Columns.Add("PS", GetType(String)) + DTConceptos.Columns.Add("PU", GetType(Double)) + DTConceptos.Columns.Add("IVA", GetType(Double)) + DTConceptos.Columns.Add("Total", GetType(Double)) + End Sub + + Public Sub New() + CreaDTConceptos() + End Sub + + Public Sub AddPS(ByVal Cantidad As Double, ByVal UM As String, ByVal PS As String, ByVal PU As Double, ByVal IVA As Double, Optional ByVal Total As Double = 0) + If PS <> "IVA" Then + Dim Row As DataRow = Nothing + Row = DTConceptos.NewRow() + Row("Consec") = DTConceptos.Rows.Count + 1 + Row("Cantidad") = Cantidad + Row("UM") = UM + Row("PS") = PS + Row("PU") = PU + Row("IVA") = IVA + Row("Total") = If(Total > 0, Total, (Cantidad * PU)) + DTConceptos.Rows.Add(Row) + End If + End Sub + End Class Public Class Pago @@ -7386,10 +7700,14 @@ Namespace ADS.eFacturas ' End If 'End Sub - Public Function CargaComprobanteXML(StrFuente As String, CveEmpresa As Integer) As Factura + Public Function CargaComprobanteXML(StrFuente As String, DirectorioEmpresa As String, RFCEmpresa As String, CveEmpresa As Integer, Registrar As Boolean, ByRef rowLog As DataRow, NombreArchivo As String) As Factura + + + Dim SeValido As Boolean = False Dim XMLCargaExistosa As Boolean = False Dim XMlStr As String = StrFuente.Replace("<br>", "").Replace("<", "").Replace("o;?", "") Dim XMLDoc As New XmlDocument + Try XMLDoc.LoadXml(XMlStr) XMLCargaExistosa = True @@ -7399,13 +7717,17 @@ Namespace ADS.eFacturas XMLCargaExistosa = False End Try - If Not XMLCargaExistosa Then Return Nothing + If Not XMLCargaExistosa Then + rowLog("Motivo") = $"Error extructura XML archivo {NombreArchivo}" + Return Nothing + End If Dim nodo As XmlNode = XMLDoc.DocumentElement Dim Fact As Factura = New Factura() Fact.Serie = ValorXML(nodo, "serie") Dim StrCFDIVersion As String = ValorXML(nodo, "version") + Fact.Version = StrCFDIVersion Fact.Folio = ValorXML(nodo, "folio") @@ -7414,22 +7736,17 @@ Namespace ADS.eFacturas Fact.Total = ValorXML(nodo, "total").ToDecimal Fact.Descuento = ValorXML(nodo, "descuento").ToDecimal Fact.Moneda = ValorXML(nodo, "Moneda") - Fact.CveMoneda = ClsPaginas.GlobalDTMonedas().FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT = '{Fact.Moneda}' ").ToEntero - 'If Not CveMoneda > 0 Then - ' GuardaLog($"Moneda {Moneda} no se obtuvo la clabe") - ' Errores.AppendLine($"Moneda {Moneda} no se obtuvo la clabe") - ' XMLCargaExistosa = False - ' Exit Sub - 'End If - Fact.TipoComprobante = ValorXML(nodo, "tipoDeComprobante") Fact.TipoCambio = ValorXML(nodo, "TipoCambio", "1").ToDecimal + Fact.noCertificado = ValorXML(nodo, "NoCertificado") + Fact.FormaDePago = ValorXML(nodo, "formaDePago") + Fact.condicionesDePago = ValorXML(nodo, "condicionesDePago", "") + Fact.NumCtaPagoNumCtaPago = ValorXML(nodo, "NumCtaPago", "") If Fact.Version = "3.3" Or Fact.Version = "4.0" Then Dim drm As DataRow = ClsPaginas.GlobalDTVtaMetodoPago.FiltroPrimero(String.Format("ClaveMetodoPagoSAT = '{0}'", ValorXML(nodo, "MetodoPago"))) If drm IsNot Nothing Then - 'Fact.MetododePago = drm("CveMetodoPago").ToString.ToEntero Fact.MetododePago = drm("MetodoPagoSAT").ToString End If End If @@ -7446,12 +7763,99 @@ Namespace ADS.eFacturas Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" End If + namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") + Fact.sUPPrefijo = Prefijo + + If StrCFDIVersion = "3.2" Then + + For i As Integer = 0 To XMLDoc.DocumentElement.ChildNodes(2).ChildNodes.Count - 1 + nodo = XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i) + Fact.AddPS(Convert.ToDouble(nodo.Attributes.GetNamedItem("cantidad").Value), nodo.Attributes.GetNamedItem("unidad").Value, nodo.Attributes.GetNamedItem("descripcion").Value, Convert.ToDouble(nodo.Attributes.GetNamedItem("valorUnitario").Value), 0, Convert.ToDouble(nodo.Attributes.GetNamedItem("importe").Value)) + Next + + Try + + Dim nodosEmisor = XMLDoc.DocumentElement.ChildNodes.Cast(Of XmlNode)().FirstOrDefault(Function(n) n.Name.Equals("cfdi:Emisor", StringComparison.OrdinalIgnoreCase)) + + Dim nodoEmisor As XmlNode = nodosEmisor + + Fact.EmiRFC = ValorXML(nodoEmisor, "rfc", "") + Fact.EmiNombre = ValorXML(nodoEmisor, "nombre", "") + + nodoEmisor = nodosEmisor.ChildNodes(0) + Fact.DomFisCalle = ValorXML(nodoEmisor, "calle", "") + Fact.DomFisNoExt = ValorXML(nodoEmisor, "noExterior", "") + Fact.DomFisCol = ValorXML(nodoEmisor, "colonia", "") + Fact.DomFisCP = ValorXML(nodoEmisor, "codigoPostal", "") + Fact.DomFisMun = ValorXML(nodoEmisor, "municipio", "") + Fact.DomFisLoc = ValorXML(nodoEmisor, "localidad", "") + Fact.DomFisEst = ValorXML(nodoEmisor, "estado", "") + Fact.DomFisPais = ValorXML(nodoEmisor, "pais", "") + + nodoEmisor = nodosEmisor.ChildNodes(1) + Fact.ExpEnCalle = ValorXML(nodoEmisor, "calle", "") + Fact.ExpEnNoExt = ValorXML(nodoEmisor, "noExterior", "") + Fact.ExpEnCol = ValorXML(nodoEmisor, "colonia", "") + Fact.ExpEnCP = ValorXML(nodoEmisor, "codigoPostal", "") + Fact.ExpEnMun = ValorXML(nodoEmisor, "municipio", "") + Fact.ExpEnLoc = ValorXML(nodoEmisor, "localidad", "") + Fact.ExpEnEst = ValorXML(nodoEmisor, "estado", "") + Fact.ExpEnPais = ValorXML(nodoEmisor, "pais", "") + + nodoEmisor = nodoEmisor.ChildNodes(2) + Fact.Regimen = ValorXML(nodo, "Regimen", "") + Catch ex As Exception + Throw New Exception($"Error CargaEmisorXML - {ex.Message} - {ex.StackTrace}") + End Try + + Try + Dim nodosReceptor = XMLDoc.DocumentElement.ChildNodes.Cast(Of XmlNode)().FirstOrDefault(Function(n) n.Name.Equals("cfdi:Receptor", StringComparison.OrdinalIgnoreCase)) + + Dim nodoReceptor As XmlNode = nodosReceptor + Fact.RecRfc = ValorXML(nodoReceptor, "rfc", "") + Fact.RecNombre = ValorXML(nodoReceptor, "nombre", "") + + nodoReceptor = nodosReceptor.ChildNodes(0) + Fact.DomRecCalle = ValorXML(nodoReceptor, "calle", "") + Fact.DomRecFisNoExt = ValorXML(nodoReceptor, "noExterior", "") + Fact.DomRecFisNoInt = ValorXML(nodoReceptor, "noInterior", "") + Fact.DomRecCol = ValorXML(nodoReceptor, "colonia", "") + Fact.DomRecCP = ValorXML(nodoReceptor, "codigoPostal", "") + Fact.DomRecMun = ValorXML(nodoReceptor, "municipio", "") + Fact.DomRecLoc = ValorXML(nodoReceptor, "localidad", "") + Fact.DomRecEst = ValorXML(nodoReceptor, "estado", "") + Fact.DomRecPais = ValorXML(nodoReceptor, "pais", "") + Catch ex As Exception + Throw New Exception($"Error CargaReceptorXML - {ex.Message} - {ex.StackTrace}") + End Try + + + ElseIf StrCFDIVersion = "3.3" OrElse StrCFDIVersion = "4.0" Then + Try + Dim nodos = XMLDoc.DocumentElement.ChildNodes.Cast(Of XmlNode)().Where(Function(n) n.Name.Equals("cfdi:Conceptos", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().ChildNodes + + For Each item As XmlNode In nodos + Dim cantidad = Convert.ToDouble(item.Attributes.Cast(Of XmlAttribute)().Where(Function(n) n.Name.Equals("cantidad", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Value) + Dim unidad = item.Attributes.Cast(Of XmlAttribute)().Where(Function(n) n.Name.Equals("ClaveUnidad", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Value + Dim descripcion = item.Attributes.Cast(Of XmlAttribute)().Where(Function(n) n.Name.Equals("descripcion", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Value + Dim valorUnitario = Convert.ToDouble(item.Attributes.Cast(Of XmlAttribute)().Where(Function(n) n.Name.Equals("valorUnitario", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Value) + Dim importe = Convert.ToDouble(item.Attributes.Cast(Of XmlAttribute)().Where(Function(n) n.Name.Equals("importe", StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Value) + + Fact.AddPS(cantidad, unidad, descripcion, valorUnitario, 0, importe) + Next + Catch ex As Exception + Throw New Exception($"Error CargaConceptosXML - {ex.Message} - {ex.StackTrace}") + End Try + End If + + + If Fact.TipoComprobante.ToUpper = "E" AndAlso (Fact.Version.Contiene("3.3", "4.0")) Then Dim UUIDS As String = "" @@ -7464,7 +7868,6 @@ Namespace ADS.eFacturas UUIDSLista.Add("" & CFDIRelacionados.Attributes("UUID").Value.ToString & "") Next End If - 'DocumentosRelacionadosUUIDSList = UUIDSLista End If Dim node As XmlNode @@ -7481,21 +7884,6 @@ Namespace ADS.eFacturas Fact.ReceptorRFC = ValorXML(node, "RFC") End If - 'If UsuarioActual.CveEmpresa.Contiene(119, 7) Then - ' node = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces) - ' If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then - ' If ValorXML(node, "TipoRelacion").ToString.Contiene("07") Then - ' Dim nodeDocumentosRelacionados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:CfdiRelacionado", Prefijo), namespaces) - ' For Each documento As XmlNode In nodeDocumentosRelacionados - ' If documento.Attributes("UUID").Value <> "" Then - ' DocumentosRelacionadosAnticiposUUIDList.Add(documento.Attributes("UUID").Value) - ' End If - ' TieneAnticiposXML = True - ' Next - ' End If - ' End If - 'End If - node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Retenciones/{0}:Retencion", Prefijo), namespaces) @@ -7540,7 +7928,7 @@ Namespace ADS.eFacturas End If Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) - If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then + If nodeComp IsNot Nothing AndAlso nodeComp.ChildNodes.Count > 0 Then Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) Fact.UUID = ValorXML(nodeTFD, "UUID", "") @@ -7551,25 +7939,1558 @@ Namespace ADS.eFacturas End If End If - Dim ObjCompra As New ClsCompras + If Fact.TipoComprobante = "P" Then + CargaPagos(XMLDoc, Fact) + End If - ObjCompra.AddFactura(Fact.Serie, Fact.Folio, Fact.Fecha, Fact.EmisorNombre, Fact.EmisorRFC, Fact.SubTotal, Fact.RetencionIVA, Fact.Total, Fact.UUID, Fact.ReceptorRFC, "", "", Fact.Version, Fact.Descuento, Fact.Moneda, Fact.TipoComprobante, Fact.TipoCambio, 0, CveEmpresa, "") + rowLog("Serie") = Fact.Serie + rowLog("Folio") = Fact.Folio + rowLog("Fecha") = Fact.Fecha + rowLog("Proveedor") = Fact.EmisorNombre + rowLog("Importe") = Fact.Total + rowLog("Motivo") = "" - ObjCompra.Dispose() + If Registrar Then + + If Fact.ReceptorRFC = RFCEmpresa Then + + Dim ObjCompra As New ClsCompras + Dim Correcto As Boolean = False + + ObjCompra.IniciaTransacSQL() + + Fact.RespuestaInsert = ObjCompra.AddFactura(Fact.Serie, Fact.Folio, Fact.Fecha, Fact.EmisorNombre, Fact.EmisorRFC, Fact.SubTotal, Fact.TrasladoIVA, Fact.Total, Fact.UUID, Fact.ReceptorRFC, "", "", Fact.Version, Fact.Descuento, Fact.TipoCambio, Fact.Validada, CveEmpresa, Fact.sUPPrefijo, Fact.TipoComprobante, Fact.Moneda, Fact.MetododePago, 3, Fact.Version, Fact.IEPS, Fact.RetencionIVA, Fact.RetencionISR) + + If Fact.RespuestaInsert >= 0 Then + + Dim Destino As String = $"{DirectorioEmpresa}\Compras\" + + Try + If Not Directory.Exists(Destino & Fact.EmisorRFC) Then + Directory.CreateDirectory(Destino & Fact.EmisorRFC) + End If + + Select Case Fact.RespuestaInsert + Case 0 + Dim RRutaDestino As String = String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjCompra.CveFactura) + ModExtensiones.GuardaLog(String.Format(" '--------{0} Compra ya insertada : {1}{2} - {3}", 1, Fact.Serie, Fact.Folio, RRutaDestino)) + + File.WriteAllText(RRutaDestino, StrFuente, UTF8Encoding.UTF8) + 'ObjCompra.UpdateArchivo(ObjCompra.CveFactura, "XML") + ModExtensiones.GuardaLog(" '--------XML Actualizado ") + rowLog("Motivo") = $"Ya registrado {Fact.Serie}-{Fact.Folio} se actualiza XML." + + Correcto = True + Exit Select + + Case 1 + + Dim StrMover As String = "" + Try + File.WriteAllText(String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjCompra.CveFactura), StrFuente, UTF8Encoding.UTF8) + ' ObjCompra.UpdateArchivo(ObjCompra.CveFactura, "XML") + ModExtensiones.GuardaLog($" '-------- XML Guardado Factura: {Fact.Serie}-{Fact.Folio} UUID: {Fact.UUID} , RFC Emisor: {Fact.EmisorRFC}") + + ' Si se movieron los dos archivos, los marca como correcto + If File.Exists(String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjCompra.CveFactura)) Then + Correcto = True + Else + Correcto = False + End If + + ModExtensiones.GuardaLog(" '++++++++ Compra Insertada :" & Fact.Serie & Fact.Folio & " - Correcto:" & If(Correcto, "Si", "No" & " Obs: ")) + rowLog("Motivo") = $"Agregado {Fact.Serie}-{Fact.Folio}" + + Catch ex As Exception + StrMover = ex.Message + Correcto = False + ModExtensiones.GuardaLog(" '++++++++ Compra no Insertada :" & Fact.Serie & Fact.Folio & " - Correcto:" & If(Correcto, "Si", "No" & " Obs: ") & StrMover) + rowLog("Motivo") = $"Error al agregar {Fact.Serie}-{Fact.Folio}" + End Try + + Exit Select + End Select + + Catch ex As Exception + Correcto = True + GuardaLog(ex.ToString()) + End Try + + Else + rowLog("Motivo") = $"RFC ""{Fact.ReceptorRFC}"" Error al insertar" + End If + + + If Correcto Then + ObjCompra.Commit() + Fact.CveFactura = ObjCompra.CveFactura + Fact.ArchivoXML = $"{ObjCompra.CveFactura}.xml" + Else + ObjCompra.RollBack() + End If + + ObjCompra.Dispose() + + Else + ModExtensiones.GuardaLog($" '++++++++ Compra RFC Distinto RFC Empresa: {RFCEmpresa}, RFC XML: {Fact.ReceptorRFC} ") + rowLog("Motivo") = "RFC Distinto" + rowLog("Motivo") = $"RFC ""{Fact.ReceptorRFC}"" Incorrecto" + End If + + End If - 'If XMLCargaExistosa Then - ' If Not ValidateUUID(UUID) Then - ' GuardaLog($"UUID Invalido {UUID} .") - ' Errores.AppendLine($"UUID Invalido {UUID} .") - ' XMLCargaExistosa = False - ' End If - 'End If Return Fact End Function + + + + Public Function GeneraPDF(ByVal Ruta As String, ByVal Fact As Factura, DirectorioEmpresa As String, Guardar As Boolean) As Boolean + Dim RutaXML As String = String.Empty + Dim RutaPDF As String = String.Empty + Dim Retorno As Boolean = False + Try + Dim XMLDoc As New XmlDocument() + Dim TmpArchivoPDF As String = $"{Ruta}\Temp\Facturas\{Path.GetFileNameWithoutExtension(Fact.ArchivoXML)}-ttt.pdf" + Dim TmpArchivoQR As String = $"{Ruta}\Temp\Facturas\{Path.GetFileNameWithoutExtension(Fact.ArchivoXML)}-ttt.jpg" + Dim ArchivoXML As String = String.Format("{0}\Compras\{2}\{1}", DirectorioEmpresa, Fact.ArchivoXML, Fact.EmisorRFC) + Dim ArchivoPDF As String = String.Format("{0}\Compras\{2}\{1}.pdf", DirectorioEmpresa, Fact.CveFactura, Fact.EmisorRFC) + Dim dtotal As Decimal = If(Fact.Total <= 0.0D, 0.0001D, Fact.Total) + Dim cfdi As New RVCFDI33.GeneraCFDI() + + Try + Dim b As Byte() = cfdi.ConvertirQrCode(String.Format("?re={0}&rr={1}&tt={2}&id={3}", Fact.EmisorRFC, Fact.ReceptorRFC, String.Format("{0,12:F6}", dtotal).Trim(), Fact.UUID)) + File.WriteAllBytes(TmpArchivoQR, b) + Catch ex As Exception + ModExtensiones.GuardaLog(ex.Message) + End Try + + If System.IO.File.Exists(TmpArchivoQR) Then + Dim TipoDocto As String = "" + If Fact.Version = "3.3" Or Fact.Version = "4.0" Then + Select Case Fact.TipoComprobante + Case "I" + TipoDocto = "Ing" + Case "E" + TipoDocto = "Egs" + Case "P" + TipoDocto = "Pag" + Case "T" + TipoDocto = "Tra" + Case Else + End Select + Else + TipoDocto = Fact.TipoComprobante + End If + + 'Dim DtPagos As DataTable = Nothing + 'Dim DtDocumentosR As DataTable = Nothing + + If Fact.TipoComprobante.Contiene("P", "T") Then + ModExtensiones.GuardaLog(String.Format(" '--------PDF Generar Tipo {0}", Fact.TipoComprobante)) + Retorno = GenGoPdf(ArchivoXML, TmpArchivoPDF, DirectorioEmpresas) + Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) + + Try + If Guardar Then + If File.Exists(ArchivoPDF) Then + File.Delete(ArchivoPDF) + End If + File.Move(TmpArchivoPDF, ArchivoPDF) + End If + Retorno = True + Catch ex As Exception + Retorno = False + End Try + + Else + + If (Fact.Version = "3.3" Or Fact.Version = "4.0") Then + Dim cxml As XmlSatCFDI = XmlSatCFDI.readXML(ArchivoXML) + ModExtensiones.GuardaLog(String.Format(" *********** UUID : {0} ***********", cxml.complemento.UUID)) + cxml.ImprimirPDF(TmpArchivoPDF, DirectorioEmpresa, Fact.TipoComprobante) + Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) + + Try + If Guardar Then + If File.Exists(ArchivoPDF) Then + File.Delete(ArchivoPDF) + End If + File.Move(TmpArchivoPDF, ArchivoPDF) + End If + Retorno = True + Catch ex As Exception + Retorno = False + End Try + + Else + ModExtensiones.GuardaLog(String.Format(" *********** TFDUUID : {0} ***********", Fact.UUID)) + Dim DomFiscal As String = String.Format("Domicilio Fiscal {0}{1} {2}{0}Col.{3}{0}CP. {4} {5},{6},{7}", vbCr, Fact.DomFisCalle, Fact.DomFisNoExt, Fact.DomFisCol, Fact.DomFisCP, Fact.DomFisMun, Fact.DomFisEst, Fact.DomFisPais) + + If GeneraPDFNew(TmpArchivoPDF, Fact.UUID, Fact.SubTotal, Fact.Descuento, Fact.Total, Fact.TrasladoIVA.FormatoNumero(), Fact.Moneda, Fact.FormaDePago, Fact.TFDNoCertSAT, Fact.TFDFechaTimbrado.ToDate(), Fact.noCertificado, + Fact.DTConceptos, Fact.TFDSelloCFD, Fact.TFDSelloSAT, TmpArchivoQR, Fact.Serie + Fact.Folio, Fact.TipoComprobante, "", Fact.ReceptorRFC, Fact.RecNombre, Fact.DomRecCalle, Fact.DomRecCol, Fact.DomRecFisNoExt, + Fact.DomRecFisNoInt, Fact.DomRecCP, Fact.DomRecMun, Fact.DomRecEst, Fact.Regimen, Fact.condicionesDePago, Fact.MetododePago, Fact.NumCtaPagoNumCtaPago, NowADS, Fact.DtPagos, Fact.DtDocumentosR, Fact.RetencionIVA, + Fact.RetencionISR, Fact.EmiNombre, Fact.EmiRFC, Fact.ReceptorNombre, DirectorioEmpresa, DomFiscal) Then + + Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) + Retorno = True + + If Guardar Then + + End If + + End If + + + + End If + + File.Delete(TmpArchivoQR) + + End If + + RutaPDF = TmpArchivoPDF + Else + Retorno = False + + End If + 'If DTConceptos IsNot Nothing Then DTConceptos.Dispose() + Catch ex As Exception + Dim MensajeError As String = "***********Ocurrio un error al generar el pdf: " & ex.Message & "" + + If ex.InnerException Is Nothing Then + MensajeError &= "." + Else + MensajeError &= " - " & ex.InnerException.ToString() + End If + + ModExtensiones.GuardaLog(MensajeError) + End Try + Return Retorno + End Function + + + Private Function GeneraPDFNew(ByVal TmpArchivoPDF As String, ByVal FolioFiscal As String, ByVal SubTotal As Decimal, ByVal Descuento As Decimal, ByVal Total As Decimal, ByVal IVA As String, ByVal Moneda As String, ByVal FormaDePago As String, + ByVal NoSerieCertificado As String, ByVal FechaCertificacion As DateTime, ByVal NoSerieCertificadoContribuyente As String, ByVal DTConceptos As DataTable, ByVal SelloCFDi As String, ByVal SelloSAT As String, + ByVal CBB As String, ByVal Folio As String, ByVal TipodeComprobante As String, ByVal CadenaOriginalCFD As String, ByVal RFC As String, ByVal Cliente As String, ByVal Direccion As String, ByVal Colonia As String, + ByVal NoExt As String, ByVal NoInt As String, ByVal CP As String, ByVal Ciudad As String, ByVal Estado As String, ByVal Regimen As String, ByVal CondicionPago As String, ByVal MetodoPago As String, ByVal NumCtaPago As String, + ByVal fecha As DateTime, Optional ByVal DtPagos As DataTable = Nothing, Optional ByVal DtRelacionados As DataTable = Nothing, Optional ByVal RetIVA As Double = 0, Optional ByVal RetISR As Double = 0, + Optional EmiNombre As String = "", Optional EmiRFC As String = "", Optional NombreEmpresa As String = "", Optional DirectorioEmpresa As String = "", Optional DomFiscal As String = "") As Boolean + + + Dim RutaRDLC As String = If(TipodeComprobante = "Pag", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIPago.rdlc", $"{DirectorioEmpresa}..\Grales\Formatos\CFDI.rdlc") + + Dim Retorno As Boolean = False + Dim NombreArchivo As String = TmpArchivoPDF + Dim CadenaOriginal As String = "||1.0|" & FolioFiscal & "|" & FechaCertificacion.ToString("yyyy-MM-dd") & "T" & FechaCertificacion.ToString("HH:mm:ss") & "|" & SelloCFDi & "|" & NoSerieCertificado & "||" + Dim RutaFormato As String = RutaRDLC + + + Try + Dim Archivo As New System.IO.FileInfo(RutaFormato) + + If Archivo.Exists Then + Dim parametros As New List(Of ReportParameter)() + parametros.Add(New ReportParameter("FolioFiscal", FolioFiscal)) + parametros.Add(New ReportParameter("SubTotal", SubTotal.FormatoNumero())) + parametros.Add(New ReportParameter("Descuento", Descuento.FormatoNumero())) + parametros.Add(New ReportParameter("Total", Total.FormatoNumero())) + parametros.Add(New ReportParameter("IVA", IVA.FormatoNumero())) + parametros.Add(New ReportParameter("RetIVA", RetIVA.FormatoNumero())) + parametros.Add(New ReportParameter("RetISR", RetISR.FormatoNumero())) + parametros.Add(New ReportParameter("Moneda", Moneda)) + parametros.Add(New ReportParameter("FormaDePago", FormaDePago)) + parametros.Add(New ReportParameter("NoSerieCertificado", NoSerieCertificado)) + parametros.Add(New ReportParameter("FechaCertificacion", FechaCertificacion.ToString("yyyy-MM-dd") & "T" & FechaCertificacion.ToString("HH:mm:ss"))) + parametros.Add(New ReportParameter("NoSerieCertificadoContribuyente", NoSerieCertificadoContribuyente)) + parametros.Add(New ReportParameter("SelloCFDi", SelloCFDi)) + parametros.Add(New ReportParameter("SelloSAT", SelloSAT)) + parametros.Add(New ReportParameter("CBB", String.Format("file:///{0}", CBB))) + parametros.Add(New ReportParameter("Folio", Folio)) + parametros.Add(New ReportParameter("TipodeComprobante", TipodeComprobante.ToUpper())) + parametros.Add(New ReportParameter("CadenaOriginalCFD", CadenaOriginalCFD)) + parametros.Add(New ReportParameter("RFC", RFC)) + parametros.Add(New ReportParameter("Cliente", Cliente)) + parametros.Add(New ReportParameter("Direccion", Direccion)) + parametros.Add(New ReportParameter("Colonia", Colonia)) + parametros.Add(New ReportParameter("NoExt", NoExt)) + parametros.Add(New ReportParameter("NoInt", NoInt)) + parametros.Add(New ReportParameter("CP", CP)) + parametros.Add(New ReportParameter("Ciudad", Ciudad)) + parametros.Add(New ReportParameter("Estado", Estado)) + parametros.Add(New ReportParameter("Regimen", Regimen)) + parametros.Add(New ReportParameter("CondicionPago", CondicionPago)) + parametros.Add(New ReportParameter("MetodoPago", MetodoPago)) + parametros.Add(New ReportParameter("NumCtaPago", NumCtaPago)) + parametros.Add(New ReportParameter("fecha", fecha.ToString("yyyy-MM-dd") & "T" & fecha.ToString("HH:mm:ss"))) + parametros.Add(New ReportParameter("Fiscal", DomFiscal)) + parametros.Add(New ReportParameter("EmiNombre", EmiNombre)) + parametros.Add(New ReportParameter("EmiRFC", EmiRFC)) + parametros.Add(New ReportParameter("TotalLetra", ModExtensiones.Texto2Letras(Total))) + parametros.Add(New ReportParameter("Empresa", NombreEmpresa)) + + + + Using MR As New ReportViewer() + Dim rds1 As New ReportDataSource() + rds1.Name = "DsOC" + rds1.Value = DTConceptos + + MR.LocalReport.DataSources.Add(rds1) + + If DtPagos IsNot Nothing Then + Dim rds2 As New ReportDataSource() + rds2.Name = "DsPago" + rds2.Value = DtPagos + MR.LocalReport.DataSources.Add(rds2) + End If + If DtRelacionados IsNot Nothing Then + Dim rds3 As New ReportDataSource() + rds3.Name = "DsDocRelacionados" + rds3.Value = DtRelacionados + MR.LocalReport.DataSources.Add(rds3) + End If + + MR.LocalReport.ReportPath = RutaFormato + 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 + Dim bytes As Byte() = Nothing + bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) + + Using fs As New FileStream(NombreArchivo, FileMode.Create) + fs.Write(bytes, 0, bytes.Length) + fs.Close() + End Using + End Using + Retorno = True + Else + ModExtensiones.GuardaLog("ERROR: No existe Formato Base") + End If + Catch ex As Exception + ModExtensiones.GuardaLog(String.Format("Ocurrio un Error al generar el reporte RLDC :" & ex.ToString())) + Retorno = False + End Try + Return Retorno + End Function + + + Private Sub CargaPagos(ByVal XMLDoc As XmlDocument, ByRef Fact As Factura) + + Fact.Pagos.Clear() + + Dim nodo = XMLDoc.DocumentElement + + Dim Prefijo As String = If(String.IsNullOrEmpty(XMLDoc.DocumentElement.Prefix), "cfd", XMLDoc.DocumentElement.Prefix) + Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3" + Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) + + Dim Version As String = ValorXML(nodo, "version").Replace("..", ".") + Dim PrefijoPagos As String = "" + + If Prefijo.ToLower() <> "cfdi" Then + cfdVer = "http://www.sat.gob.mx/cfd/2" + End If + + If Version = "3.3" Then + PrefijoPagos = "pago10" + namespaces.AddNamespace(PrefijoPagos, "http://www.sat.gob.mx/Pagos") + Prefijo = "cfdi" + cfdVer = "http://www.sat.gob.mx/cfd/3" + namespaces.AddNamespace(Prefijo, cfdVer) + ElseIf Version = "4.0" Then + PrefijoPagos = "pago20" + namespaces.AddNamespace(PrefijoPagos, "http://www.sat.gob.mx/Pagos20") + Prefijo = "cfdi" + cfdVer = "http://www.sat.gob.mx/cfd/4" + namespaces.AddNamespace(Prefijo, cfdVer) + End If + + Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) + + If Version = "3.3" OrElse Version = "4.0" Then + If nodeComp IsNot Nothing AndAlso nodeComp.ChildNodes.Count > 0 Then + Dim NodosNodePagos As XmlNodeList = nodeComp.SelectNodes($"//{PrefijoPagos}:Pago", namespaces) + + If NodosNodePagos IsNot Nothing Then + Try + Dim nodePagos As XmlNode = nodeComp.SelectSingleNode($"//{PrefijoPagos}:Pagos", namespaces) + If Version = "3.3" Then + XMLNodosPagos = nodePagos.InnerXml.Replace("pago10:", "").Replace("pagos10:", "").Replace(PrefijoPagos & ":", "") + Else + XMLNodosPagos = nodePagos.InnerXml.Replace("pago20:", "").Replace("pagos20:", "").Replace(PrefijoPagos & ":", "") + End If + Catch ex As Exception + ModExtensiones.GuardaLog(ex.ToString()) + End Try + End If + + Dim Pagos As New List(Of Pago)() + For Each nodePago As XmlNode In NodosNodePagos + Dim FechaPago As DateTime = NowADS() + Try + FechaPago = ValorXML(nodePago, "FechaPago").ToDate() + Catch e As Exception + End Try + + Dim pago As New Pago() + pago.FechaPago = FechaPago + pago.FormaDePagoP = ValorXML(nodePago, "FormaDePagoP").ToString() + pago.MonedaP = ValorXML(nodePago, "MonedaP").ToString() + pago.Monto = ValorXML(nodePago, "Monto").ToString().ToDecimal() + + Dim docs As New List(Of DoctoRelacionado)() + Dim NodosPagosRelacionados As XmlNodeList = nodePago.SelectNodes($"//{PrefijoPagos}:DoctoRelacionado", namespaces) + + For Each docto As XmlNode In NodosPagosRelacionados + Dim idDoc = ValorXML(docto, "idDocumento") + Dim ImportePago = ValorXML(docto, "ImpPagado").ToDecimal() + Dim serie = ValorXML(docto, "Serie") + Dim Folio = ValorXML(docto, "Folio") + Dim MonedaDR = ValorXML(docto, "MonedaDR") + Dim MetodoDePagoDR = ValorXML(docto, "MetodoDePagoDR") + Dim NumParcialidad = ValorXML(docto, "NumParcialidad") + Dim ImpSaldoInsoluto = ValorXML(docto, "ImpSaldoInsoluto").ToDecimal() + Dim ImpSaldoAnt = ValorXML(docto, "ImpSaldoAnt").ToDecimal() + docs.Add(New DoctoRelacionado() With { + .idDocumento = idDoc, + .ImportePago = ImportePago, + .Serie = serie, + .Folio = Folio, + .MonedaDR = MonedaDR, + .MetodoDePagoDR = MetodoDePagoDR, + .NumParcialidad = NumParcialidad, + .ImpSaldoAnt = ImpSaldoAnt, + .ImpSaldoInsoluto = ImpSaldoInsoluto + }) + Next + + pago.Documentos = docs + Pagos.Add(pago) + Next + Fact.Pagos = Pagos + End If + End If + End Sub + + + Private Function GenGoPdf(ByVal XmlRutaArchivo As String, ByVal PDFRutaArchivo As String, DirectorioEmpresa As String) As Boolean + ModExtensiones.GuardaLog(" '--------PDF GenGoPdf Inicia ") + + Dim Respuesta As Boolean = False + Dim RutaRDLC As String = $"{DirectorioEmpresa}\Grales\Formatos\ReciboDePagoGOPDF.rdlc" 'String.Format("{0}{1}", Extensiones.ApplicationParameter.RutaArchivos, "Empresas\Grales\Formatos\ReciboDePagoGOPDF.rdlc") + + Dim Inicio As DateTime = DateTime.Now + Dim goPdf As New GoPdf.GoPdf() + Dim logotipo As Byte() = Nothing 'File.ReadAllBytes(@"C:\inetpub\WWWSIGGit\Empresas\119\Logo.jpg") + + Try + Dim XmlString As String = File.ReadAllText(XmlRutaArchivo) + Dim result As Byte() = goPdf.ExportarPdf(XmlString, logotipo, "", RutaRDLC, New GoPdf.Modelos.DatosAdicionales() With {.DomicilioReceptor = ""}) + + Dim Fin As DateTime = DateTime.Now + If result IsNot Nothing Then + File.WriteAllBytes(PDFRutaArchivo, result) + Respuesta = True + ModExtensiones.GuardaLog($" '--------PDF GenGoPdf Generado") + Else + ModExtensiones.GuardaLog($" '--------PDF GenGoPdf Error se genero nulo \n RDLC: {RutaRDLC} Ruta Xml: {XmlRutaArchivo} Ruta PDF: {PDFRutaArchivo} \n MensajeError: {goPdf.MensajeError} CodigoError :{goPdf.CodigoError}") + End If + Catch ex As Exception + ModExtensiones.GuardaLog($" '--------PDF GenGoPdf Error {ex.Message} -- > {ex.StackTrace} \n RDLC: {RutaRDLC} Ruta Xml: {XmlRutaArchivo} Ruta PDF: {PDFRutaArchivo}") + End Try + + ModExtensiones.GuardaLog(" '--------PDF GenGoPdf Finaliza ") + Return Respuesta + End Function + + End Class + + + + ''' + ''' Clase para contener los valores de un xml CFDI cambio norma + ''' + Public Class XmlSatCFDI + Public Sub New() + comprobante = New CFDIComprobante() + emisor = New CFDIEmisor() + receptor = New CFDIReceptor() + complemento = New CFDIComplemento() + cFDIRelacionados = New List(Of CFDIRelacionado)() + conceptos = New List(Of CFDIConcepto)() + Impuestos = New List(Of CFDIImpuesto)() + End Sub + + Public comprobante As CFDIComprobante + Public emisor As CFDIEmisor + Public receptor As CFDIReceptor + Public complemento As CFDIComplemento + Public cFDIRelacionados As List(Of CFDIRelacionado) + Public conceptos As List(Of CFDIConcepto) + Public Impuestos As List(Of CFDIImpuesto) + + Public Function GetConceptosforpdf() As List(Of CFDIConcepto_I) + Dim lcon As New List(Of CFDIConcepto_I)() + If conceptos IsNot Nothing Then + Dim _orden As Integer = 0 + For Each item As CFDIConcepto In conceptos + _orden += 1 + Dim con As New CFDIConcepto_I With { + .tipo = 1, + .orden = _orden, + .ClaveProdServ = item.ClaveProdServ, + .NoIdentificacion = item.NoIdentificacion, + .Cantidad = item.Cantidad, + .ClaveUnidad = item.ClaveUnidad, + .Unidad = item.Unidad, + .ValorUnitario = item.ValorUnitario, + .Importe = item.Importe, + .Descuento = item.Descuento, + .NumeroPedimento = item.NumeroPedimento, + .CuentaPredial = item.CuentaPredial, + .Descripcion = item.Descripcion + } + Dim index As Integer = 0 + For Each Imp As CFDIConceptoImpuesto In item.Impuestos + index += 1 + If index > 1 Then + lcon.Add(con) + con = New CFDIConcepto_I With { + .tipo = 2, + .orden = _orden + } + End If + + con.Impuesto = Imp.ImpuestoTexto + con.Impuesto_Tipo = Imp.Tipo + con.Impuesto_Base = Imp.Base + con.Impuesto_TipoFactor = Imp.TipoFactor + con.Impuesto_TasaOCuota = Imp.TasaOCuota + con.Impuesto_Importe = Imp.Importe + Next + lcon.Add(con) + Next + End If + + Return lcon + End Function + + Public Shared Function readXML(fileUrl As String) As XmlSatCFDI + Dim xmlCFDI As New XmlSatCFDI() + Dim canread As Boolean = True + ' Keys + Dim keyComprobante As String = "cfdi:Comprobante" + Dim keyCfdiRelacionados As String = "cfdi:CfdiRelacionados" + Dim keyEmisor As String = "cfdi:Emisor" + Dim keyReceptor As String = "cfdi:Receptor" + Dim keyConceptos As String = "cfdi:Conceptos" + Dim keyImpuestos As String = "cfdi:Impuestos" + Dim keyComplemento As String = "cfdi:Complemento" + ' Endkeys + Dim PrimerNivel As String() = {keyCfdiRelacionados, keyEmisor, keyReceptor, keyConceptos, keyImpuestos, keyComplemento} + + ' (canread = xtr.Read()) para evitar ciclos infinitos, todos los .Read() los guardo en la variable Canread y en los while reviso primero esta variable + If File.Exists(fileUrl) Then + Dim settings As New XmlReaderSettings() + settings.ConformanceLevel = ConformanceLevel.Fragment + settings.IgnoreWhitespace = True + settings.IgnoreComments = True + Using xtr As XmlReader = XmlReader.Create(fileUrl, settings) + While (InlineAssignHelper.Assign(canread, xtr.Read())) AndAlso Not (xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyComprobante) + 'if (xtr.NodeType != XmlNodeType.Element) { while (xtr.Read() && xtr.NodeType != XmlNodeType.Element) { } } + End While + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyComprobante Then + Dim Nivel As Integer = xtr.Depth + Dim cont As Boolean = xtr.MoveToFirstAttribute() + While cont + Select Case xtr.Name.ToUpper() + Case "XMLNS:CFDI" + xmlCFDI.comprobante.xmlns_cfdi = xtr.Value + Case "XMLNS:XSI" + xmlCFDI.comprobante.xmlns_xsi = xtr.Value + Case "XSI:SCHEMALOCATION" + xmlCFDI.comprobante.xsi_schemaLocation = xtr.Value + Case "VERSION" + xmlCFDI.comprobante.Version = xtr.Value + Case "SERIE" + xmlCFDI.comprobante.Serie = xtr.Value + Case "FOLIO" + xmlCFDI.comprobante.Folio = xtr.Value + Case "FECHA" + xmlCFDI.comprobante.Fecha = xtr.Value + Case "MONEDA" + xmlCFDI.comprobante.Moneda = xtr.Value + Case "SUBTOTAL" + Dim SubTotal As Decimal = 0 + Decimal.TryParse(xtr.Value, SubTotal) + xmlCFDI.comprobante.SubTotal = SubTotal + Case "TOTAL" + Dim Total As Decimal = 0 + Decimal.TryParse(xtr.Value, Total) + xmlCFDI.comprobante.Total = Total + Case "DESCUENTO" + Dim Descuento As Decimal = 0 + Decimal.TryParse(xtr.Value, Descuento) + xmlCFDI.comprobante.Descuento = Descuento + Case "TIPOCAMBIO" + Dim TipoCambio As Decimal = 0 + Decimal.TryParse(xtr.Value, TipoCambio) + xmlCFDI.comprobante.TipoCambio = TipoCambio + Case "TIPODECOMPROBANTE" + xmlCFDI.comprobante.TipoDeComprobante = xtr.Value + Case "FORMAPAGO", "FORMADEPAGO" + xmlCFDI.comprobante.FormaPago = xtr.Value + Case "METODOPAGO", "METODODEPAGO" + xmlCFDI.comprobante.MetodoPago = xtr.Value + Case "CONDICIONESDEPAGO" + xmlCFDI.comprobante.CondicionesDePago = xtr.Value + Case "LUGAREXPEDICION" + xmlCFDI.comprobante.LugarExpedicion = xtr.Value + Case "CONFIRMACION" + xmlCFDI.comprobante.Confirmacion = xtr.Value + Case "NOCERTIFICADO" + xmlCFDI.comprobante.NoCertificado = xtr.Value + Case "SELLO" + xmlCFDI.comprobante.Sello = xtr.Value + Case "CERTIFICADO" + xmlCFDI.comprobante.Certificado = xtr.Value + End Select + cont = xtr.MoveToNextAttribute() + End While + + cont = xtr.MoveToFirstAttribute() + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > Nivel + If PrimerNivel.Contains(xtr.Name) Then + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyCfdiRelacionados Then + Dim cDepth As Integer = xtr.Depth + + Dim TipoRelacion As String = Nothing + cont = xtr.MoveToFirstAttribute() + While cont + If xtr.Name.ToUpper() = "TIPORELACION" Then + TipoRelacion = xtr.Value + End If + cont = xtr.MoveToNextAttribute() + End While + + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepth + If xtr.Name = "cfdi:CfdiRelacionado" Then + Dim cfdir As New CFDIRelacionado() + cfdir.TipoRelacion = TipoRelacion + cfdir.UUID = xtr.GetAttribute("UUID") + xmlCFDI.cFDIRelacionados.Add(cfdir) + End If + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End While + + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyEmisor Then + Dim curentNivel As Integer = xtr.Depth + cont = xtr.MoveToFirstAttribute() + While cont + Select Case xtr.Name.ToUpper() + Case "REGIMENFISCAL" + xmlCFDI.emisor.RegimenFiscal = xtr.Value + Case "NOMBRE" + xmlCFDI.emisor.Nombre = xtr.Value + Case "RFC" + xmlCFDI.emisor.Rfc = xtr.Value + End Select + cont = xtr.MoveToNextAttribute() + End While + + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso Not (xtr.NodeType = XmlNodeType.Element AndAlso curentNivel >= xtr.Depth) + End While 'continua hasta que no tenga nodos y (el nodo sea tipo elemento y este en el mismo nivel) + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyReceptor Then + Dim curentNivel As Integer = xtr.Depth + cont = xtr.MoveToFirstAttribute() + While cont + Select Case xtr.Name.ToUpper() + Case "RFC" + xmlCFDI.receptor.Rfc = xtr.Value + Case "NOMBRE" + xmlCFDI.receptor.Nombre = xtr.Value + Case "RESIDENCIAFISCAL" + xmlCFDI.receptor.ResidenciaFiscal = xtr.Value + Case "NUMREGIDTRIB" + xmlCFDI.receptor.NumRegIdTrib = xtr.Value + Case "USOCFDI" + xmlCFDI.receptor.UsoCFDI = xtr.Value + End Select + cont = xtr.MoveToNextAttribute() + End While + + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso Not (xtr.NodeType = XmlNodeType.Element AndAlso curentNivel >= xtr.Depth) + End While 'continua hasta que no tenga nodos y (el nodo sea tipo elemento y este en el mismo nivel) + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyConceptos Then + Dim cDepth As Integer = xtr.Depth + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepth + If xtr.Name = "cfdi:Concepto" Then + Dim cDepthb As Integer = xtr.Depth + Dim concepto As New CFDIConcepto() + + cont = xtr.MoveToFirstAttribute() + While cont + Select Case xtr.Name.ToUpper() + Case "CLAVEPRODSERV" + concepto.ClaveProdServ = xtr.Value + Case "NOIDENTIFICACION" + concepto.NoIdentificacion = xtr.Value + Case "CANTIDAD" + concepto.Cantidad = xtr.Value + Case "CLAVEUNIDAD" + concepto.ClaveUnidad = xtr.Value + Case "UNIDAD" + concepto.Unidad = xtr.Value + Case "VALORUNITARIO" + Dim ValorUnitario As Decimal = 0 + Decimal.TryParse(xtr.Value, ValorUnitario) + concepto.ValorUnitario = ValorUnitario + Case "IMPORTE" + Dim Importe As Decimal = 0 + Decimal.TryParse(xtr.Value, Importe) + concepto.Importe = Importe + Case "DESCUENTO" + Dim DDescuento As Decimal = 0 + Decimal.TryParse(xtr.Value, DDescuento) + concepto.Descuento = DDescuento + Case "DESCRIPCION" + concepto.Descripcion = xtr.Value + End Select + cont = xtr.MoveToNextAttribute() + End While + + xtr.MoveToFirstAttribute() + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepthb + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = "cfdi:Impuestos" Then + Dim cDepthc As Integer = xtr.Depth + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepthc + If xtr.Name = "cfdi:Traslado" OrElse xtr.Name = "cfdi:Retencion" Then + Dim impuesto As New CFDIConceptoImpuesto() + impuesto.Impuesto = xtr.GetAttribute("Impuesto") + impuesto.Tipo = xtr.LocalName + Dim Base As Decimal = 0 + Decimal.TryParse(xtr.GetAttribute("Base"), Base) + impuesto.Base = Base + impuesto.TipoFactor = xtr.GetAttribute("TipoFactor") + Dim tasaOCuota As Decimal = 0 + Decimal.TryParse(xtr.GetAttribute("TasaOCuota"), tasaOCuota) + impuesto.TasaOCuota = If(impuesto.TipoFactor = "Tasa", (tasaOCuota * 100).ToString("N4"), xtr.GetAttribute("TasaOCuota")) + Dim ImImporte As Decimal = 0 + Decimal.TryParse(xtr.GetAttribute("Importe"), ImImporte) + impuesto.Importe = ImImporte + + concepto.Impuestos.Add(impuesto) + End If + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End While + Else + Dim rednew As Boolean = True + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = "cfdi:InformacionAduanera" Then + concepto.NumeroPedimento = xtr.GetAttribute("NumeroPedimento") + rednew = False + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End If + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = "cfdi:CuentaPredial" Then + concepto.CuentaPredial = xtr.GetAttribute("CuentaPredial") + rednew = False + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End If + If rednew Then + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End If + End If + End While + + xmlCFDI.conceptos.Add(concepto) + End If + End While + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyImpuestos Then + Dim cDepth As Integer = xtr.Depth + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepth + Dim impuest As New CFDIImpuesto() + If (xtr.Name = "cfdi:Traslado" OrElse xtr.Name = "cfdi:Retencion") AndAlso xmlCFDI.comprobante.Version IsNot Nothing Then + impuest.Tipo = If(xtr.LocalName = "Traslado", "Traslados", If(xtr.LocalName = "Retencion", "Retenciones", "")) + impuest.Impuesto = If(xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "4.0", xtr.GetAttribute("Impuesto"), xtr.GetAttribute("impuesto")) + impuest.TipoFactor = xtr.GetAttribute("TipoFactor") + impuest.TasaOCuota = If(xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "4.0", xtr.GetAttribute("TasaOCuota"), xtr.GetAttribute("tasa")) + Dim ImImporte As Decimal = 0 + Decimal.TryParse(If(xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "4.0", xtr.GetAttribute("Importe"), xtr.GetAttribute("importe")), ImImporte) + impuest.Importe = ImImporte + xmlCFDI.Impuestos.Add(impuest) + End If + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End While + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.Name = keyComplemento Then + Dim cDepth As Integer = xtr.Depth + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > cDepth + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.LocalName = "TimbreFiscalDigital" AndAlso xmlCFDI.comprobante.Version IsNot Nothing Then + xmlCFDI.complemento.xmlns_tfd = xtr.GetAttribute("xmlns:tfd") + xmlCFDI.complemento.xsi_schemaLocation = xtr.GetAttribute("xsi:schemaLocation") + xmlCFDI.complemento.Version = xtr.GetAttribute("Version") + xmlCFDI.complemento.UUID = xtr.GetAttribute("UUID") + xmlCFDI.complemento.FechaTimbrado = xtr.GetAttribute("FechaTimbrado") + xmlCFDI.complemento.RfcProvCertif = xtr.GetAttribute("RfcProvCertif") + xmlCFDI.complemento.SelloCFD = If(xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "4.0", xtr.GetAttribute("SelloCFD"), xtr.GetAttribute("selloCFD")) + xmlCFDI.complemento.NoCertificadoSAT = If(xmlCFDI.comprobante.Version = "3.3", xtr.GetAttribute("NoCertificadoSAT"), xtr.GetAttribute("noCertificadoSAT")) + xmlCFDI.complemento.SelloSAT = If(xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "4.0", xtr.GetAttribute("SelloSAT"), xtr.GetAttribute("selloSAT")) + End If + + If xtr.NodeType = XmlNodeType.Element AndAlso xtr.LocalName = "Pagos" AndAlso xmlCFDI.comprobante.Version IsNot Nothing Then + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + xmlCFDI.complemento.Pagos = New CFDIPago() + Dim depthpagos As Integer = xtr.Depth + Dim conts As Boolean = xtr.MoveToFirstAttribute() + While conts + Dim Base As Decimal = 0 + Select Case xtr.Name.ToUpper() + Case "FECHAPAGO" + xmlCFDI.complemento.Pagos.FechaPago = xtr.Value + Case "FORMADEPAGOP" + xmlCFDI.complemento.Pagos.FormaDePagoP = xtr.Value + Case "FORMADEPAGOPTEXT" + xmlCFDI.complemento.Pagos.FormaDePagoPText = xtr.Value + Case "MONEDAP" + xmlCFDI.complemento.Pagos.MonedaP = xtr.Value + Case "MONTO" + Decimal.TryParse(xtr.Value, Base) + xmlCFDI.complemento.Pagos.Monto = Base + Case "TIPOCAMBIOP" + Decimal.TryParse(xtr.Value, Base) + xmlCFDI.complemento.Pagos.TipoCambioP = Base + Case "NUMOPERACION" + xmlCFDI.complemento.Pagos.NumOperacion = xtr.Value + Case "NOMBANCOORDEXT" + xmlCFDI.complemento.Pagos.NomBancoOrdExt = xtr.Value + Case "RFCEMISORCTAORD" + xmlCFDI.complemento.Pagos.RfcEmisorCtaOrd = xtr.Value + Case "CTAORDENANTE" + xmlCFDI.complemento.Pagos.CtaOrdenante = xtr.Value + Case "RFCEMISORCTABEN" + xmlCFDI.complemento.Pagos.RfcEmisorCtaBen = xtr.Value + Case "CTABENEFICIARIO" + xmlCFDI.complemento.Pagos.CtaBeneficiario = xtr.Value + End Select + conts = xtr.MoveToNextAttribute() + End While + + conts = xtr.MoveToFirstAttribute() + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + + While canread AndAlso xtr.Depth > depthpagos + Dim objpago As New CFDIPagoDoctoRelacionado() + conts = xtr.MoveToFirstAttribute() + While conts + Dim Basep As Decimal = 0 + Select Case xtr.Name.ToUpper() + Case "IDDOCUMENTO" + objpago.IdDocumento = xtr.Value + Case "SERIE" + objpago.Serie = xtr.Value + Case "FOLIO" + objpago.Folio = xtr.Value + Case "MONEDADR" + objpago.MonedaDR = xtr.Value + Case "METODODEPAGODR" + objpago.MetodoDePagoDR = xtr.Value + Case "NUMPARCIALIDAD" + objpago.NumParcialidad = xtr.Value + Case "IMPSALDOANT" + Decimal.TryParse(xtr.Value, Basep) + objpago.ImpSaldoAnt = Basep + Case "IMPPAGADO" + Decimal.TryParse(xtr.Value, Basep) + objpago.ImpPagado = Basep + Case "IMPSALDOINSOLUTO" + Decimal.TryParse(xtr.Value, Basep) + objpago.ImpSaldoInsoluto = Basep + End Select + conts = xtr.MoveToNextAttribute() + End While + + conts = xtr.MoveToFirstAttribute() + xmlCFDI.complemento.Pagos.doctosRelacionados.Add(objpago) + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End While + Else + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End If + End While + End If + Else + 'si no entro en ninguna de los anteriores no se debe ciclar + While InlineAssignHelper.Assign(canread, xtr.Read()) AndAlso xtr.NodeType <> XmlNodeType.Element + End While + End If + End While + End If + End Using + End If + + If xmlCFDI.comprobante.Version = "4.0" OrElse xmlCFDI.comprobante.Version = "3.3" OrElse xmlCFDI.comprobante.Version = "3.2" Then + Return xmlCFDI + Else + Return Nothing + End If + End Function + + Public Sub ImprimirPDF(NombreArchivo As String, DirectorioEmpresa As String, TipodeComprobante As String) + Dim objxml As XmlSatCFDI = Me + + Dim rutaReporte As String = If(TipodeComprobante = "Pag", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIV3Pago.rdlc", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIV3.rdlc") + + + Dim cQr As Byte() = Nothing + Try + Dim cfdi As New RVCFDI33.GeneraCFDI() + cQr = cfdi.ConvertirQrCode($"?re={objxml.emisor.Rfc}&rr={objxml.receptor.Rfc}&tt={(If(objxml.complemento.Pagos Is Nothing, objxml.comprobante.Total, objxml.complemento.Pagos.Monto))}&id={objxml.complemento.UUID}") + Catch exQR As Exception + ModExtensiones.GuardaLog("Error al generar QR - " & exQR.Message & " - " & exQR.StackTrace.ToString()) + End Try + + Dim parametros As New List(Of ReportParameter)() + ' Comprobante + parametros.Add(New ReportParameter("comprobante_Certificado", objxml.comprobante.Certificado)) + parametros.Add(New ReportParameter("comprobante_CondicionesDePago", objxml.comprobante.CondicionesDePago)) + parametros.Add(New ReportParameter("comprobante_Confirmacion", objxml.comprobante.Confirmacion)) + parametros.Add(New ReportParameter("comprobante_Fecha", objxml.comprobante.Fecha)) + parametros.Add(New ReportParameter("comprobante_Serie", objxml.comprobante.Serie)) + parametros.Add(New ReportParameter("comprobante_Folio", objxml.comprobante.Folio)) + parametros.Add(New ReportParameter("comprobante_Descuento", objxml.comprobante.Descuento.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_SubTotal", objxml.comprobante.SubTotal.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_Total", objxml.comprobante.Total.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_Version", objxml.comprobante.Version)) + parametros.Add(New ReportParameter("comprobante_TipoDeComprobante", objxml.comprobante.TipoDeComprobanteTexto)) + parametros.Add(New ReportParameter("comprobante_FormaPago", objxml.comprobante.FormaPagoTexto)) + parametros.Add(New ReportParameter("comprobante_LugarExpedicion", objxml.comprobante.LugarExpedicion)) + parametros.Add(New ReportParameter("comprobante_NoCertificado", objxml.comprobante.NoCertificado)) + parametros.Add(New ReportParameter("comprobante_Sello", objxml.comprobante.Sello)) + parametros.Add(New ReportParameter("comprobante_Moneda", objxml.comprobante.Moneda)) + parametros.Add(New ReportParameter("comprobante_TipoCambio", objxml.comprobante.TipoCambio.ToString("N2"))) + parametros.Add(New ReportParameter("comprobante_MetodoPago", objxml.comprobante.MetodoPagoTexto)) + ' Emisor + parametros.Add(New ReportParameter("emisor_Rfc", objxml.emisor.Rfc)) + parametros.Add(New ReportParameter("emisor_Nombre", objxml.emisor.Nombre)) + parametros.Add(New ReportParameter("emisor_RegimenFiscal", objxml.emisor.RegimenFiscalTexto)) + ' Receptor + parametros.Add(New ReportParameter("receptor_Rfc", objxml.receptor.Rfc)) + parametros.Add(New ReportParameter("receptor_Nombre", objxml.receptor.Nombre)) + parametros.Add(New ReportParameter("receptor_NumRegIdTrib", objxml.receptor.NumRegIdTrib)) + parametros.Add(New ReportParameter("receptor_ResidenciaFiscal", objxml.receptor.ResidenciaFiscal)) + parametros.Add(New ReportParameter("receptor_UsoCFDI", objxml.receptor.UsoCFDITexto)) + ' Complemento + parametros.Add(New ReportParameter("complemento_FechaTimbrado", objxml.complemento.FechaTimbrado)) + parametros.Add(New ReportParameter("complemento_NoCertificadoSAT", objxml.complemento.NoCertificadoSAT)) + parametros.Add(New ReportParameter("complemento_RfcProvCertif", objxml.complemento.RfcProvCertif)) + parametros.Add(New ReportParameter("complemento_SelloCFD", objxml.complemento.SelloCFD)) + parametros.Add(New ReportParameter("complemento_SelloSAT", objxml.complemento.SelloSAT)) + parametros.Add(New ReportParameter("complemento_UUID", objxml.complemento.UUID)) + parametros.Add(New ReportParameter("complemento_CadenaOriginal", objxml.complemento.CadenaOriginal)) + ' Pagos + If objxml.complemento.Pagos IsNot Nothing Then + parametros.Add(New ReportParameter("CPFechaPago", objxml.complemento.Pagos.FechaPago)) + parametros.Add(New ReportParameter("CPFormaDePagoP", objxml.complemento.Pagos.FormaDePagoP)) + parametros.Add(New ReportParameter("CPFormaDePagoPText", objxml.complemento.Pagos.FormaDePagoPText)) + parametros.Add(New ReportParameter("CPMonedaP", objxml.complemento.Pagos.MonedaP)) + parametros.Add(New ReportParameter("CPMonto", objxml.complemento.Pagos.Monto.ToString())) + parametros.Add(New ReportParameter("CPTipoCambioP", objxml.complemento.Pagos.TipoCambioP.ToString())) + parametros.Add(New ReportParameter("CPNumOperacion", objxml.complemento.Pagos.NumOperacion)) + parametros.Add(New ReportParameter("CPNomBancoOrdExt", objxml.complemento.Pagos.NomBancoOrdExt)) + parametros.Add(New ReportParameter("CPRfcEmisorCtaOrd", objxml.complemento.Pagos.RfcEmisorCtaOrd)) + parametros.Add(New ReportParameter("CPCtaOrdenante", objxml.complemento.Pagos.CtaOrdenante)) + parametros.Add(New ReportParameter("CPRfcEmisorCtaBen", objxml.complemento.Pagos.RfcEmisorCtaBen)) + parametros.Add(New ReportParameter("CPCtaBeneficiario", objxml.complemento.Pagos.CtaBeneficiario)) + End If + + Using MR As New ReportViewer() + Dim rdsTotales As New ReportDataSource() + Dim ltotales As New List(Of utilValores)() + ltotales.Add(New utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2"))) + If objxml.comprobante.Descuento > 0 Then + ltotales.Add(New utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2"))) + End If + + For Each item As CFDIImpuesto In objxml.Impuestos + If item.Importe > 0 Then + Dim TasaOCuota As Decimal = 0 + Decimal.TryParse(item.TasaOCuota, TasaOCuota) + ltotales.Add(New utilValores($"Impuestos {item.Tipo} {item.ImpuestoTexto} {(If(item.TipoFactor = "Tasa", (TasaOCuota * 100).ToString("N4"), item.TasaOCuota))} {(If(item.TipoFactor = "Tasa", "%", ""))}", item.Importe.ToString("N2"))) + End If + Next + + ltotales.Add(New utilValores("Total", objxml.comprobante.Total.ToString("N2"))) + rdsTotales.Name = "dsTotales" + rdsTotales.Value = ltotales + MR.LocalReport.DataSources.Add(rdsTotales) + + Dim rds2 As New ReportDataSource() + Dim limagenes As New List(Of utilImage)() + limagenes.Add(New utilImage(cQr)) + rds2.Name = "dsImagenes" + rds2.Value = limagenes + MR.LocalReport.DataSources.Add(rds2) + + Dim rdsrelacionados As New ReportDataSource() + rdsrelacionados.Name = "dsRelacionados" + rdsrelacionados.Value = objxml.cFDIRelacionados + MR.LocalReport.DataSources.Add(rdsrelacionados) + + Dim rds1 As New ReportDataSource() + rds1.Name = "dsConceptos" + rds1.Value = objxml.GetConceptosforpdf() + MR.LocalReport.DataSources.Add(rds1) + + If objxml.complemento.Pagos IsNot Nothing Then + Dim rdsp As New ReportDataSource() + rdsp.Name = "dsPagos" + rdsp.Value = objxml.complemento.Pagos.doctosRelacionados + MR.LocalReport.DataSources.Add(rdsp) + End If + + 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 + Dim bytes As Byte() = Nothing + bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) + + Using fs As New FileStream(NombreArchivo, FileMode.Create) + fs.Write(bytes, 0, bytes.Length) + fs.Close() + End Using + End Using + End Sub + + Public Class utilValores + Public Sub New(nombre As String, valor As String) + Me.Nombre = nombre + Me.Valor = valor + End Sub + Public Property Nombre As String + Public Property Valor As String + End Class + + Public Class utilImage + Public Sub New(imagenByte As Byte()) + Me.ImagenByte = imagenByte + End Sub + Public Property ImagenByte As Byte() + End Class + End Class + + Public Module InlineAssignHelper + Public Function Assign(Of T)(ByRef target As T, value As T) As T + target = value + Return value + End Function + End Module + +#Region "impresion nd" + Public Class CFDIComprobante + Public Property xmlns_cfdi As String + Public Property xmlns_xsi As String + Public Property xsi_schemaLocation As String + Public Property Version As String + Public Property Serie As String + Public Property Folio As String + Public Property Fecha As String + Public Property Moneda As String + Public Property SubTotal As Decimal + Public Property Total As Decimal + Public Property Descuento As Decimal + Public Property TipoCambio As Decimal + Public Property TipoDeComprobante As String + Public ReadOnly Property TipoDeComprobanteTexto As String + Get + Dim retorno As String = "" + If Version = "3.3" OrElse Version = "4.0" Then + Select Case TipoDeComprobante + Case "I" + retorno = "Ingreso" + Case "E" + retorno = "Egreso" + Case "P" + retorno = "Pago" + Case "T" + retorno = "Traslado" + Case "N" + retorno = "Nómina" + Case Else + retorno = TipoDeComprobante + End Select + End If + If Version = "3.2" Then + Select Case TipoDeComprobante + Case "ingreso" + retorno = "Ing" + Case "egreso" + retorno = "Egs" + Case "P" + retorno = "PA" + Case Else + retorno = TipoDeComprobante + End Select + Else + retorno = TipoDeComprobante + End If + Return retorno + End Get + End Property + Public ReadOnly Property TipoDeComprobanteSIG As String + Get + Dim retorno As String = "" + If Version = "3.3" OrElse Version = "4.0" Then + Select Case TipoDeComprobante + Case "I" + retorno = "Ing" + Case "E" + retorno = "Egs" + Case "P" + retorno = "PA" + Case Else + retorno = TipoDeComprobante + End Select + End If + If Version = "3.2" Then + Select Case TipoDeComprobante + Case "ingreso" + retorno = "Ing" + Case "egreso" + retorno = "Egs" + Case "P" + retorno = "PA" + Case Else + retorno = TipoDeComprobante + End Select + Else + retorno = TipoDeComprobante + End If + Return retorno + End Get + End Property + Public Property FormaPago As String + Public ReadOnly Property FormaPagoTexto As String + Get + Dim retorno As String = "" + Select Case FormaPago + Case "01" + retorno = "Efectivo" + Case "02" + retorno = "Cheque nominativo" + Case "03" + retorno = "Transferencia electrónica de fondos" + Case "04" + retorno = "Tarjeta de crédito" + Case "05" + retorno = "Monedero electrónico" + Case "06" + retorno = "Dinero electrónico" + Case "08" + retorno = "Vales de despensa" + Case "12" + retorno = "Dación en pago" + Case "13" + retorno = "Pago por subrogación" + Case "14" + retorno = "Pago por consignación" + Case "15" + retorno = "Condonación" + Case "17" + retorno = "Compensación" + Case "23" + retorno = "Novación" + Case "24" + retorno = "Confusión" + Case "25" + retorno = "Remisión de deuda" + Case "26" + retorno = "Prescripción o caducidad" + Case "27" + retorno = "A satisfacción del acreedor" + Case "28" + retorno = "Tarjeta de débito" + Case "29" + retorno = "Tarjeta de servicios" + Case "30" + retorno = "Aplicación de anticipos" + Case "31" + retorno = "Intermediario pagos" + Case "99" + retorno = "Por definir" + Case Else + retorno = FormaPago + End Select + Return retorno + End Get + End Property + Public Property MetodoPago As String + Public ReadOnly Property MetodoPagoTexto As String + Get + Dim retorno As String = "" + Select Case MetodoPago + Case "PUE" + retorno = "Pago en una sola exhibición" + Case "PPD" + retorno = "Pago en parcialidades o diferido" + Case Else + retorno = MetodoPago + End Select + Return retorno + End Get + End Property + Public Property CondicionesDePago As String + Public Property LugarExpedicion As String + Public Property Confirmacion As String + Public Property NoCertificado As String + Public Property Sello As String + Public Property Certificado As String + End Class + + Public Class CFDIEmisor + Public Property RegimenFiscal As String + Public ReadOnly Property RegimenFiscalTexto As String + Get + Dim retorno As String = "" + Select Case RegimenFiscal + Case "601" + retorno = "General de Ley Personas Morales" + Case "603" + retorno = "Personas Morales con Fines no Lucrativos" + Case "605" + retorno = "Sueldos y Salarios e Ingresos Asimilados a Salarios" + Case "606" + retorno = "Arrendamiento" + Case "608" + retorno = "Demás ingresos" + Case "609" + retorno = "Consolidación" + Case "610" + retorno = "Residentes en el Extranjero sin Establecimiento Permanente en México" + Case "611" + retorno = "Ingresos por Dividendos (socios y accionistas)" + Case "612" + retorno = "Personas Físicas con Actividades Empresariales y Profesionales" + Case "614" + retorno = "Ingresos por intereses" + Case "616" + retorno = "Sin obligaciones fiscales" + Case "620" + retorno = "Sociedades Cooperativas de Producción que optan por diferir sus ingresos" + Case "621" + retorno = "Incorporación Fiscal" + Case "622" + retorno = "Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras" + Case "623" + retorno = "Opcional para Grupos de Sociedades" + Case "624" + retorno = "Coordinados" + Case "628" + retorno = "Hidrocarburos" + Case "607" + retorno = "Régimen de Enajenación o Adquisición de Bienes" + Case "629" + retorno = "De los Regímenes Fiscales Preferentes y de las Empresas Multinacionales" + Case "630" + retorno = "Enajenación de acciones en bolsa de valores" + Case "615" + retorno = "Régimen de los ingresos por obtención de premios" + End Select + Return retorno + End Get + End Property + Public Property Nombre As String + Public Property Rfc As String + End Class + + Public Class CFDIReceptor + Public Property Rfc As String + Public Property Nombre As String + Public Property ResidenciaFiscal As String + Public Property NumRegIdTrib As String + Public Property UsoCFDI As String + Public ReadOnly Property UsoCFDITexto As String + Get + Dim retorno As String = "N/A" + Select Case UsoCFDI + Case "G01" + retorno = "Adquisición de mercancías" + Case "G02" + retorno = "Devoluciones, descuentos o bonificaciones" + Case "G03" + retorno = "Gastos en general" + Case "I01" + retorno = "Construcciones" + Case "I02" + retorno = "Mobiliario y equipo de oficina por inversiones" + Case "I03" + retorno = "Equipo de transporte" + Case "I04" + retorno = "Equipo de cómputo y accesorios" + Case "I05" + retorno = "Dados, troqueles, moldes, matrices y herramental" + Case "I06" + retorno = "Comunicaciones telefónicas" + Case "I07" + retorno = "Comunicaciones satelitales" + Case "I08" + retorno = "Otra maquinaria y equipo" + Case "D01" + retorno = "Honorarios médicos, dentales y gastos hospitalarios." + Case "D02" + retorno = "Gastos médicos por incapacidad o discapacidad" + Case "D03" + retorno = "Gastos funerales." + Case "D04" + retorno = "Donativos." + Case "D05" + retorno = "Intereses reales efectivamente pagados por créditos hipotecarios (casa habitación)." + Case "D06" + retorno = "Aportaciones voluntarias al SAR." + Case "D07" + retorno = "Primas por seguros de gastos médicos." + Case "D08" + retorno = "Gastos de transportación escolar obligatoria." + Case "D09" + retorno = "Depósitos en cuentas para el ahorro, primas que tengan como base planes de pensiones." + Case "D10" + retorno = "Pagos por servicios educativos (colegiaturas)" + Case "P01" + retorno = "Por definir" + Case Else + retorno = UsoCFDI + End Select + Return retorno + End Get + End Property + End Class + + Public Class CFDIComplemento + Public Property xmlns_tfd As String + Public Property xsi_schemaLocation As String + Public Property Version As String + Public Property UUID As String + Public Property FechaTimbrado As String + Public Property RfcProvCertif As String + Public Property SelloCFD As String + Public Property NoCertificadoSAT As String + Public Property SelloSAT As String + Public Property Pagos As CFDIPago + + Public ReadOnly Property CadenaOriginal As String + Get + Return $"||{Version}|{UUID}|{FechaTimbrado}|{RfcProvCertif}|{SelloCFD}|{NoCertificadoSAT}||" + End Get + End Property + End Class + + Public Class CFDIPago + Public Sub New() + doctosRelacionados = New List(Of CFDIPagoDoctoRelacionado)() + End Sub + + Public Property FechaPago As String + Public Property FormaDePagoP As String + Public Property FormaDePagoPText As String + Public Property MonedaP As String + Public Property Monto As Decimal + Public Property TipoCambioP As Decimal + Public Property NumOperacion As String + Public Property NomBancoOrdExt As String + Public Property RfcEmisorCtaOrd As String + Public Property CtaOrdenante As String + Public Property RfcEmisorCtaBen As String + Public Property CtaBeneficiario As String + Public Property doctosRelacionados As List(Of CFDIPagoDoctoRelacionado) + End Class + + Public Class CFDIPagoDoctoRelacionado + Public Property IdDocumento As String + Public Property Serie As String + Public Property Folio As String + Public Property MonedaDR As String + Public Property MetodoDePagoDR As String + Public Property NumParcialidad As String + Public Property ImpSaldoAnt As Decimal + Public Property ImpPagado As Decimal + Public Property ImpSaldoInsoluto As Decimal + End Class + + Public Class CFDIRelacionado + Public Property TipoRelacion As String + Public ReadOnly Property TipoRelacionTexto As String + Get + Dim retorno As String = "" + Select Case TipoRelacion + Case "01" + retorno = "Nota de crédito de los documentos relacionados" + Case "02" + retorno = "Nota de débito de los documentos relacionados" + Case "03" + retorno = "Devolución de mercancía sobre facturas o traslados previos" + Case "04" + retorno = "Sustitución de los CFDI previos" + Case "05" + retorno = "Traslados de mercancías facturados previamente" + Case "06" + retorno = "Factura generada por los traslados previos" + Case "07" + retorno = "CFDI por aplicación de anticipo" + Case Else + retorno = "Por definir" + End Select + Return retorno + End Get + End Property + Public Property UUID As String + End Class + + Public Class CFDIConcepto + Public Sub New() + Impuestos = New List(Of CFDIConceptoImpuesto)() + End Sub + + Public Property ClaveProdServ As String + Public Property NoIdentificacion As String + Public Property Cantidad As String + Public Property ClaveUnidad As String + Public Property Unidad As String + Public Property ValorUnitario As Decimal + Public Property Importe As Decimal + Public Property Descuento As Decimal + Public Property NumeroPedimento As String + Public Property CuentaPredial As String + Public Property Descripcion As String + Public Property Impuestos As List(Of CFDIConceptoImpuesto) + End Class + + Public Class CFDIConceptoImpuesto + Public Property Impuesto As String + Public ReadOnly Property ImpuestoTexto As String + Get + Dim retorno As String = "" + Select Case Impuesto + Case "001" + retorno = "ISR" + Case "002" + retorno = "IVA" + Case "003" + retorno = "IEPS" + End Select + Return retorno + End Get + End Property + Public Property Tipo As String + Public Property Base As Decimal + Public Property TipoFactor As String + Public Property TasaOCuota As String + Public Property Importe As Decimal + End Class + + Public Class CFDIImpuesto + Public Property Tipo As String + Public Property Impuesto As String + Public ReadOnly Property ImpuestoTexto As String + Get + Dim retorno As String = "" + Select Case Impuesto + Case "001" + retorno = "ISR" + Case "002" + retorno = "IVA" + Case "003" + retorno = "IEPS" + End Select + Return retorno + End Get + End Property + Public Property TipoFactor As String + Public Property TasaOCuota As String + Public Property Importe As Decimal + End Class + + Public Class CFDIConcepto_I + Public Property tipo As Integer + Public Property orden As Integer + Public Property ClaveProdServ As String + Public Property NoIdentificacion As String + Public Property Cantidad As String + Public Property ClaveUnidad As String + Public Property Unidad As String + Public Property ValorUnitario As Decimal + Public Property Importe As Decimal + Public Property Descuento As Decimal + Public Property NumeroPedimento As String + Public Property CuentaPredial As String + Public Property Descripcion As String + Public Property Impuesto As String + Public Property Impuesto_Tipo As String + Public Property Impuesto_Base As Decimal + Public Property Impuesto_TipoFactor As String + Public Property Impuesto_TasaOCuota As String + Public Property Impuesto_Importe As Decimal + End Class + +#End Region + End Namespace Public Class GeneralesAPIeFacturas From 4de07405cc446bf46f8ecac2ec5dbd8ab284cf31 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 15 Jul 2024 19:31:10 -0700 Subject: [PATCH 51/69] Ventas Moneda vista previa --- 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 4ab55aa65..779f48636 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -12239,7 +12239,7 @@ Partial Class Ventas ObjFactura.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFactura.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFactura.Det_ContraRecibo = TxtDet_ContraRecibo.Text.Trim - ObjFactura.MonedaAbreviatura = "" + ObjFactura.MonedaAbreviatura = DdlMoneda.SelectedItem.Text If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DvModalRequiereOSFecha.Visible Then ObjFactura.FechaEjecucion = TxtFechaOS.Text.Trim.ToDateTime From 716227afb41257831d3282c71b04ef6904cddb9a Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Jul 2024 20:44:39 -0700 Subject: [PATCH 52/69] =?UTF-8?q?--=20mejoras=20en=20filtros,=20actualizac?= =?UTF-8?q?i=C3=B3n=20de=20contrato?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Transportes/RepContratosCalendario.aspx | 17 +++---- Transportes/RepContratosCalendario.aspx.vb | 58 ++++++++++++---------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx index 459bf6fc3..1c418781b 100644 --- a/Transportes/RepContratosCalendario.aspx +++ b/Transportes/RepContratosCalendario.aspx @@ -102,7 +102,7 @@ <%-- Estatus --%> -
    +
    + + +
    SerieFolioFechaProveedorImporteMotivo
    {0}{0}{0}{0}{0}{0}
    Motivo devolución:  +
    @@ -7611,6 +7616,16 @@
    +
    +
    + +
    +
    + + + +
    +
    " style="display: inline-block; margin-right: -20px; width: 150px;" /> diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 779f48636..ad8e35e7f 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -5284,6 +5284,8 @@ Partial Class Ventas Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) + TrMotivoDev.Visible = True + lblMotivoDev.Text = DbRowVenta("MotivoDevolucion").ToString() Case "Ped" DdlTipoComprobante.Items.Insert(0, New ListItem("Pedido", "Ped")) CvePedido = CveVenta @@ -5527,6 +5529,7 @@ Partial Class Ventas TxtObsFact.Text = DbRowVenta("Observaciones").ToString() LblUsuario.Text = DbRowVenta("Nombre").ToString().SubStringADS(30) LblFechaRegistro.Text = DbRowVenta("FechaIng").ToString().ToDate.ToShortDateString + LblSeTimbro.Text = DbRowVenta("SeTimbro").ToString() LblMail.Text = DbRowVenta("EnvioMail").ToString() TxtFechaPago.Text = DbRowVenta("FechaVencimiento").ToString() @@ -8957,7 +8960,7 @@ Partial Class Ventas If ValidaExistencia AndAlso DdlTipoComprobante.SelectedValue <> "Cot" And ChkSinExistencia.Checked = False AndAlso Not RegistroxOC Then 'VALIDA EXISTENCIA - If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 140, 153}) Then + If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 140, 153, 190, 192, 197}) Then 'SI ES VENTA NUEVA TOMA EN CUENTA LO DEL TMPDT If CveVenta <= 0 Then If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < TxtCantidad.Text.ToDouble Then @@ -14008,6 +14011,11 @@ Partial Class Ventas 'CveAlmacenTraspasoDestino End If + Dim CveMotivoDevolucion As Integer = -1 + If DdlMotivoDevolucion.SelectedValue.ToEntero() > 0 Then + CveMotivoDevolucion = DdlMotivoDevolucion.SelectedValue.ToEntero() + End If + If Not ObjVentas.AddVenta(factura.TipoDocto, factura.Folio, factura.CveCliente, factura.CveClienteSucursal, factura.SubTotalTC, factura.DescuentoTC, factura.AmortizacionTC, factura.IVATC, factura.RetIVATC, factura.RetISRTC, @@ -14027,7 +14035,7 @@ Partial Class Ventas FormaPaqueteria:=RblPaqueteria.SelectedValue.ToEntero, FacturarSucursal:=factura.FacturarSucursal, VentaDesglosaIEPS:=factura.VentaDesglosaIEPS, RFCReceptor:=RFCReceptor, Adjunto:=Adjunto, DevolucionImportePagado:=factura.DevolucionImportePagado, EsGarantia:=factura.EsGarantia, ServicioDomicilio:=TrServicioDomicilio.Visible, CveLineaAdicional:=DdlLineaAdicional.SelectedValue.ToEntero(), DescripcionVenta:=DescripcionVenta, CveMedico:=CveMedico, CveProcedimiento:=CveProcedimiento, CveTipoVenta:=CveTipoVentaGuardar, RequiereOS:=ChkRequiereTecnico.Checked, FechaParaSurtir:=factura.FechaParaSurtir, - Paciente:=TxtPaciente.Text, Episodio:=TxtEpisodio.Text) Then + Paciente:=TxtPaciente.Text, Episodio:=TxtEpisodio.Text, CveMotivoDevolucion:=CveMotivoDevolucion) Then ErrorList.Add("Ocurrió un error al Generar la Venta.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Else If factura.TipoDocto.Contiene("Dev", "Egs") OrElse DtVentasNC IsNot Nothing OrElse CveEstatusRefacturacion > 0 OrElse CveAnticipoPadre > 0 Then @@ -18887,7 +18895,7 @@ Partial Class Ventas If ValidaExistencia Then 'VALIDA EXISTENCIA - If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 153, 140, 186, 190}) Then + If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 153, 140, 186, 190, 192, 197}) Then Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) @@ -18899,7 +18907,14 @@ Partial Class Ventas CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=0, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) Else - Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), + + Dim CveAlmacenConsulta As Integer = -1 + + If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso DivAlmacen.Visible Then + CveAlmacenConsulta = ddlAlmacen.SelectedValue.ToEntero() + End If + + Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, CveAlmacenConsulta, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) End If @@ -18907,7 +18922,19 @@ Partial Class Ventas If CveVenta <= 0 OrElse Me.EsCreaApartirDe Then If Existencia - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") < (If(CantidadModal > 0, CantidadModal, TxtCantidad.Text.ToDouble)) Then - Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + ".", TipoMensaje.MsgAdvertencia) + + Dim CveAlmacenConsulta As Integer = -1 + Dim StrAlmacen As New StringBuilder + + If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso DivAlmacen.Visible Then + CveAlmacenConsulta = ddlAlmacen.SelectedValue.ToEntero() + If CveAlmacenConsulta > 0 Then + Dim Almacen As String = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenConsulta).FiltroPrimeroValor("Almacen") + StrAlmacen.AppendFormat("
    Almacén: {0}", Almacen) + End If + End If + + Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.FormatoNumero(2) + "." + StrAlmacen.ToString(), TipoMensaje.MsgAdvertencia) Return False End If Else @@ -24047,9 +24074,9 @@ Partial Class Ventas Dim AmortizacionNC As Decimal = 0 'SI ES AMORTIZACION POR NOTA DE CREDITO DEBE SUMAR LA TOTALIDAD PARA COMPARAR EL PAGO - If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then + If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") AndAlso DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("2", "4") Then For Each gvr As GridViewRow In GVAnticipos.Rows - If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(3) Then + If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(3, 12) Then AmortizacionNC += gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal End If Next @@ -37387,6 +37414,22 @@ Partial Class Ventas End If If PuedeAplicarDevolucion Then + + If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then + DivMotivoDevolucion.Visible = True + + Using ObjVenta As New ClsVentas + If ObjVenta.GetMotivoDevolucion(-1, 1, UsuarioActual.CveEmpresa) Then + DdlMotivoDevolucion.DataSource = ObjVenta.DtResultados.Copy() + End If + DdlMotivoDevolucion.DataBind() + DdlMotivoDevolucion.Items.Insert(0, New ListItem("Seleccione", "-1")) + End Using + + UpDevolucion.Update() + End If + + RegistraScript("$('#DivAplicaDevolucion').modal('show');") End If From 57abb42cbfa619d0d37337470e49b19bf60e7523 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 17 Jul 2024 20:59:50 -0700 Subject: [PATCH 64/69] -- --- 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 a23cdaaa2..c51b13eb9 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -18116,7 +18116,7 @@ Partial Class Ventas End Sub Protected Sub DdlNCFactura_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlNCFactura.SelectedIndexChanged Dim objcompras As New ClsCompras - If objcompras.GetCompraDetallealmacen(0, DdlNCFactura.SelectedValue.ToEntero()) Then + If objcompras.GetCompraDetalleAlmacen(0, DdlNCFactura.SelectedValue.ToEntero()) Then GvInvNC.DataSource = objcompras.DtResultados If objcompras.DtResultados.Rows.Count > 0 Then Tab.ActiveTabIndex = 1 From 2cd6d71ee7bdcefe44c6f8e7e039b13ba32e2f3a Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 17 Jul 2024 21:04:51 -0700 Subject: [PATCH 65/69] eFacturas agregar facturas, compras rnc grtid seleccion, contatos trasnportes --- App_Code/CalendarEvent.vb | 2 + App_Code/ClsCompras.vb | 33 +++ App_Code/ClsPaginas.vb | 2 +- Ashx/CargaEventos.ashx | 5 +- Compras/Compras.aspx | 45 +++- Compras/Compras.aspx.vb | 223 ++++++++++-------- Compras/eFacturas.aspx.vb | 30 ++- Contabilidad/RepIVA.aspx.cs | 6 +- Empresas/119/Formatos/RepIVAAcreditable.rpt | Bin 131072 -> 147456 bytes .../Grales/Formatos/CartaPorteTimbrado.rdlc | 2 +- Transportes/RepContratoDetalle.aspx.vb | 19 +- Transportes/RepContratos.aspx | 6 + Transportes/RepContratos.aspx.vb | 2 +- Transportes/RepContratosCalendario.aspx | 9 + 14 files changed, 271 insertions(+), 113 deletions(-) diff --git a/App_Code/CalendarEvent.vb b/App_Code/CalendarEvent.vb index c2edf807a..da3261896 100644 --- a/App_Code/CalendarEvent.vb +++ b/App_Code/CalendarEvent.vb @@ -48,6 +48,8 @@ Public Class CalendarEvent Public Property CveVenta As Integer Public Property SerieFolioVenta As String Public Property CveActivoFijo As Integer + Public Property CveTipoAF As Integer + Public Property AFCodigo As String Public Property CveMovimiento As Integer Public Property MovimientoFolio As String diff --git a/App_Code/ClsCompras.vb b/App_Code/ClsCompras.vb index 84ee4f34b..b1af7b204 100644 --- a/App_Code/ClsCompras.vb +++ b/App_Code/ClsCompras.vb @@ -1776,6 +1776,39 @@ Public Class ClsCompras End Function + Public Function AddBitacoraFactura(ByVal Serie As String, ByVal Folio As String, ByVal RFCDe As String, ByVal Observacion As String, ByVal Estatus As Integer, ByVal CveUsuario As Integer, ByVal CveEmpresa As Integer, ByVal Correo As String, ByVal Proveedor As String, ByVal Importe As Decimal, ByVal TipoDeComprobante As String) As Boolean + + Dim Retorno As Boolean = False + + + DataAdapter("PA_Comp_FacturasBitacoraAdd") + With SqlAdapter.SelectCommand.Parameters + .Add("@Serie", SqlDbType.VarChar).Value = Serie + .Add("@Folio", SqlDbType.VarChar).Value = Folio + .Add("@RFCDE", SqlDbType.VarChar).Value = If(RFCDe Is Nothing, "", RFCDe) + .Add("@Observacion", SqlDbType.VarChar).Value = Observacion + .Add("@Estatus", SqlDbType.Int).Value = Estatus + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@Correo", SqlDbType.VarChar).Value = Correo + .Add("@Proveedor", SqlDbType.VarChar).Value = Proveedor + .Add("@Importe", SqlDbType.Decimal).Value = Importe + .Add("@TipoDeComprobante", SqlDbType.VarChar).Value = TipoDeComprobante + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + Me.OnError("Ocurrió un error al intentar Guardar la bitácora.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + + End Function + + + 'Public Function AddFactura(Serie As String, Folio As String, FechaFactura As DateTime, NombreProveedor As String, RFCDe As String, SubTotal As Double, 'IVA As Double, Total As Double, UUID As String, RFCPara As String, XML As String, PDF As String, 'VersionCFD As String, Descuento As Double, Moneda As String, TipodeComprobante As String, TipoCambio As Double, FueValidado As Integer, diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 161feb1ab..f3365603a 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -7776,7 +7776,7 @@ Public Class ClsPaginas If CveSubProyectoEntrega > 0 Then - Dim DTSubProyectoEntrega As DataTable = GlobalDTSubProyectos(-1, CveSubProyectoEntrega) + Dim DTSubProyectoEntrega As DataTable = GlobalDTSubProyectos(-1, CveSubProyectoEntrega, UsuarioActual.CveEmpresa) params.Add(New ReportParameter("SubProyectoEntrega", DTSubProyectoEntrega(0)("SubProyecto").ToString)) diff --git a/Ashx/CargaEventos.ashx b/Ashx/CargaEventos.ashx index 871d8fab2..d5dbda671 100644 --- a/Ashx/CargaEventos.ashx +++ b/Ashx/CargaEventos.ashx @@ -518,7 +518,8 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState cevent.Dolares = dr("Importe").ToString.ToDecimal cevent.Pesos = dr("ImporteMax").ToString.ToDecimal cevent.Anticipo = dr("ImporteMin").ToString.ToDecimal - cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero + cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero + cevent.CveTipoAF = dr("CveTipoAF").ToString.ToEntero cevent.backgroundColor = dr("BackgroundColor").ToString cevent.CantidadPasajeros = dr("CantidadPasajeros").ToString cevent.NumeroContrato = dr("NumeroContrato").ToString @@ -581,6 +582,7 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState cevent.CveCliente = dr("CveCliente").ToString.ToEntero cevent.NombreComercial = dr("NombreComercial").ToString cevent.NombreAcercamiento = dr("Ubicacion").ToString + cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero cevent.CvePersonal = dr("CveChofer").ToString.ToEntero @@ -607,6 +609,7 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState cevent.start = String.Format("{0:s}", dr("FechaInicial").ToString.ToDateTime) cevent.end = If(tipoVista = "fecha", String.Format("{0:s}", dr("FechaInicial").ToString.ToDateTime.AddHours(1)), String.Format("{0:s}", dr("FechaFinal").ToString.ToDateTime)) cevent.NombreAcercamiento = dr("Ubicacion").ToString + cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero cevent.CveActivoFijo = dr("CveAF").ToString.ToEntero cevent.allDay = False diff --git a/Compras/Compras.aspx b/Compras/Compras.aspx index 32c51a0c3..c0c9e9e00 100644 --- a/Compras/Compras.aspx +++ b/Compras/Compras.aspx @@ -543,7 +543,7 @@
    Remisión Nota de Crédito
    - + <%----%> @@ -875,6 +875,7 @@
    + @@ -954,6 +955,48 @@ + + + + + + + + + + + + Factura + + + + + + Fecha + + + + + + Saldo + + + + + + + Mon + +   + + + + + + +
    diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 73230e99f..40e49a25c 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -1192,17 +1192,7 @@ Partial Class Compras_Compras End Set End Property - Private Property ImporteRNCSaldar As Decimal - Get - If ViewState("ImporteRNCSaldar") Is Nothing Then - ViewState("ImporteRNCSaldar") = 0D - End If - Return ViewState("ImporteRNCSaldar").ToString.ToDecimal - End Get - Set(value As Decimal) - ViewState("ImporteRNCSaldar") = value - End Set - End Property + Private Property DTRemisionesNotaDeCredito As DataTable Get @@ -1220,53 +1210,10 @@ Partial Class Compras_Compras End Property - Private Property SerieFolioProntoPago As String - Get - If ViewState("SerieFolioProntoPago") Is Nothing Then - ViewState("SerieFolioProntoPago") = "" - End If - Return ViewState("SerieFolioProntoPago").ToString - End Get - Set(value As String) - ViewState("SerieFolioProntoPago") = value - End Set - End Property - Private Property TipoCambioProntoPago As Decimal - Get - If ViewState("TipoCambioProntoPago") Is Nothing Then - ViewState("TipoCambioProntoPago") = 0D - End If - Return ViewState("TipoCambioProntoPago").ToString.ToDecimal - End Get - Set(value As Decimal) - ViewState("TipoCambioProntoPago") = value - End Set - End Property - Private Property FechaProntoPago As Date - Get - If ViewState("FechaProntoPago") Is Nothing Then - ViewState("FechaProntoPago") = MinFecha - End If - Return ViewState("FechaProntoPago").ToString.ToDate - End Get - Set(value As Date) - ViewState("FechaProntoPago") = value - End Set - End Property - Private Property CveMonedaProntoPago As Integer - Get - If ViewState("CveMonedaProntoPago") Is Nothing Then - ViewState("CveMonedaProntoPago") = 0D - End If - Return ViewState("CveMonedaProntoPago").ToString.ToEntero - End Get - Set(value As Integer) - ViewState("CveMonedaProntoPago") = value - End Set - End Property + 'ImporteRNCSaldar = 0 'SerieFolioProntoPago = "" @@ -1687,10 +1634,22 @@ Partial Class Compras_Compras DdlTipoComprobante.Items.Add(New ListItem("Devolución", "DEV")) DdlTipoComprobante.SelectedValueExist("DEV") End If + + + + If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 AndAlso DdlTipoComprobante.SelectedValue = "NC" Then + + + + ConfiguraseleccionRemisionNotaCredito() + + + End If + End If - 'SE OCUPAN AFUERA DEL POSTBACK ?? - cargaddlVinculacionServcios() + 'SE OCUPAN AFUERA DEL POSTBACK ?? + cargaddlVinculacionServcios() If UsuarioActual.TienePermisoProceso(117) Then HplAddClasificacion.Visible = False @@ -1719,6 +1678,56 @@ Partial Class Compras_Compras End Sub + Private Sub ConfiguraseleccionRemisionNotaCredito() + + Dim AutoSelRNC As Boolean = False + DdlTipoComprobante_SelectedIndexChanged(Nothing, Nothing) + DdlTipoCompra.SelectedValueExist(15) + DdlTipoCompra_SelectedIndexChanged(Nothing, Nothing) + + + For Each gvRow As GridViewRow In GvFacturaNC.Rows + If gvRow.DataKey("CveCompra").ToEntero > 0 AndAlso gvRow.FCCheckBox("ChkFacturaNC").Checked Then + Dim SerieFolioFacura As String = ObtenerUltimaParte(gvRow.DataKey("SerieFolio")) + Dim seleccion As String = "" + + For Each item As ListItem In DdlRemisionNotaCredito.Items + Dim serieFolioItem As String = ObtenerUltimaParte(item.Text) + If SerieFolioFacura = serieFolioItem Then + 'seleccion = item.Value + AutoSelRNC = True + DdlRemisionNotaCredito.SelectedValueExist(item.Value) + Exit For + End If + + Next + + If AutoSelRNC Then + Exit For + End If + + End If + Next + + If AutoSelRNC Then + 'DdlRemisionNotaCredito_SelectedIndexChanged(Nothing, Nothing) + End If + + HLAplicaNCFact.Visible = True + UpPS.Update() + UpEstatus.Update() + + End Sub + + Public Function ObtenerUltimaParte(SerieFolioFactura As String) As String + Dim posicionUltimoGuion As Integer = SerieFolioFactura.LastIndexOf("-") + If posicionUltimoGuion <> -1 Then + Return SerieFolioFactura.Substring(posicionUltimoGuion + 1) + Else + Return SerieFolioFactura + End If + End Function + #Region "C A R G A S" Private Sub MostrarOcultarColumnaIEPS() @@ -7046,26 +7055,44 @@ Partial Class Compras_Compras End If End If Next + If UsuarioActual.Empresa.Funcionalidad(574) = "1" Then - If DdlRemisionNotaCredito.SelectedValue.ToEntero > 0 AndAlso ImporteRNCSaldar > 0 Then - If Not ErrorPrepoliza Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteRNCSaldar, ImporteRNCSaldar, 373, Referencia, Concepto, CveCompra:=DdlRemisionNotaCredito.SelectedValue.ToEntero, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio, - CveClasificacion:=-1, CveSubProyecto:=CompraActual.CveSubProyecto, Contabilizable:=True) Then - ErrorPrepoliza = True - End If + + For Each gvRow As GridViewRow In GVRemisionesNotaDeCredito.Rows + + If gvRow.FCCheckBox("Chk").Checked Then + + Dim ImporteRNCSaldar As Decimal = gvRow.DataKey("Saldo").ToDecimal + Dim CveCompraRNC As Integer = gvRow.DataKey("CveCompra").ToEntero If Not ErrorPrepoliza Then - Dim ConPrePNC As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(15, CompraActual.CveMoneda, True, CompraActual.CveTipoConceptoProveedor) - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteRNCSaldar, ImporteRNCSaldar, ConPrePNC.CveConcepto, Referencia, Concepto, CveCompra:=CompraActual.CveCompra, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio, + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteRNCSaldar, ImporteRNCSaldar, 373, Referencia, Concepto, CveCompra:=CveCompraRNC, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio, CveClasificacion:=-1, CveSubProyecto:=CompraActual.CveSubProyecto, Contabilizable:=True) Then ErrorPrepoliza = True + Exit For + End If + + If Not ErrorPrepoliza Then + Dim ConPrePNC As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(15, CompraActual.CveMoneda, True, CompraActual.CveTipoConceptoProveedor) + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteRNCSaldar, ImporteRNCSaldar, ConPrePNC.CveConcepto, Referencia, Concepto, CveCompra:=CompraActual.CveCompra, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio, + CveClasificacion:=-1, CveSubProyecto:=CompraActual.CveSubProyecto, Contabilizable:=True) Then + ErrorPrepoliza = True + Exit For + End If End If End If End If - End If + + + Next + + + + + If ErrorPrepoliza Then ErrorMovtosCxP = True @@ -15688,7 +15715,7 @@ Partial Class Compras_Compras Protected Sub DdlProveedores_SelectedIndexChanged(sender As Object, e As EventArgs) CargarFacturas() If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then - CargaDdlRemisionNotaCredito() + CargaGVRemisionNotaCredito() End If End Sub @@ -16222,7 +16249,7 @@ Partial Class Compras_Compras End If Next - UpINV.Update() + UpInv.Update() UpSerie.Update() TxtSerieLote.Focus() RegistraScript(String.Format("$('#DivSerie').on('shown.bs.modal', function () {{$('#DivSerie').focus(); $('#{0}').trigger(jQuery.Event('keypress', {{which: 13}})); }});$('#DivSerie').modal('show'); ", TxtSerieLote.ClientID)) @@ -18649,7 +18676,7 @@ Partial Class Compras_Compras GvInvMov.Visible = True ObjVentas.Dispose() - UpINV.Update() + UpInv.Update() End Sub Private Sub GvInvMov_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvInvMov.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then @@ -19719,7 +19746,7 @@ Partial Class Compras_Compras If DdlTipoCompra.SelectedValue = "15" Then 'Remisión de nota de crédito If DdlTipoComprobante.SelectedValue = "NC" Then - CargaDdlRemisionNotaCredito() + CargaGVRemisionNotaCredito() 'bloquear la vinculación a la compra HLAplicaNCFact.Visible = False Else @@ -21140,51 +21167,49 @@ Partial Class Compras_Compras End Sub - Private Sub CargaDdlRemisionNotaCredito() + Private Sub CargaGVRemisionNotaCredito() DvDdlRemisionNotaCredito.Visible = True DTRemisionesNotaDeCredito = New DataTable - + GVRemisionesNotaDeCredito.DataSource = Nothing + GVRemisionesNotaDeCredito.Visible = False Dim ObjCompras As New ClsCompras If ObjCompras.GetNotasCreditoRep(DdlProveedor.SelectedValue.ToEntero, 0, "-1", "-1", UsuarioActual.CveEmpresa, 2) Then - DdlRemisionNotaCredito.DataSource = ObjCompras.DtResultados + 'DdlRemisionNotaCredito.DataSource = ObjCompras.DtResultados DTRemisionesNotaDeCredito = ObjCompras.DtResultados + GVRemisionesNotaDeCredito.DataSource = DTRemisionesNotaDeCredito + GVRemisionesNotaDeCredito.Visible = True End If ObjCompras.Dispose() - DdlRemisionNotaCredito.DataBind() - DdlRemisionNotaCredito.Items.Insert(0, New ListItem("-", "-1")) + + GVRemisionesNotaDeCredito.DataBind() + + 'DdlRemisionNotaCredito.DataBind() + 'DdlRemisionNotaCredito.Items.Insert(0, New ListItem("-", "-1")) + UpPS.Update() UpEstatus.Update() End Sub - Protected Sub DdlRemisionNotaCredito_SelectedIndexChanged(sender As Object, e As EventArgs) + 'Protected Sub DdlRemisionNotaCredito_SelectedIndexChanged(sender As Object, e As EventArgs) - ImporteRNCSaldar = 0 - SerieFolioProntoPago = "" - TipoCambioProntoPago = 1 - FechaProntoPago = MinFecha - CveMonedaProntoPago = 1 + ' ImporteRNCSaldar = 0 + ' SerieFolioProntoPago = "" + ' TipoCambioProntoPago = 1 + ' FechaProntoPago = MinFecha + ' CveMonedaProntoPago = 1 - If DdlRemisionNotaCredito.SelectedValue.ToEntero > 0 Then - ImporteRNCSaldar = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Saldo", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal - SerieFolioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("SerieFolio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ") - TipoCambioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("TipoCambio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal - FechaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Fecha", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToString.ToDate - CveMonedaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("CveMoneda", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToEntero - End If - - ''Alert(ImporteRNCSaldar.ToString) - 'CompraPago.SerieFolio = Gvr.DataKey("SerieFolio") - 'CompraPago.TC = Gvr.DataKey("TipoCambio").ToDecimal - 'CompraPago.Fecha = Gvr.DataKey("Fecha").ToDate - 'CompraPago.CveMoneda = Gvr.DataKey("CveMoneda").ToEntero - - 'CompraPago.Total = Gvr.DataKey("Total").ToDecimal - 'CompraPago.CveTipoConceptoProveedor = CveTipoConcepto + ' If DdlRemisionNotaCredito.SelectedValue.ToEntero > 0 Then + ' ImporteRNCSaldar = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Saldo", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal + ' SerieFolioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("SerieFolio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ") + ' TipoCambioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("TipoCambio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal + ' FechaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Fecha", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToString.ToDate + ' CveMonedaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("CveMoneda", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToEntero + ' End If - End Sub + 'End Sub #End Region diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index 39f14166c..0c556ae5a 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -1513,6 +1513,11 @@ Partial Class Compras_eFacturas DTLOG.Columns.Add("Proveedor", GetType(String)) DTLOG.Columns.Add("Importe", GetType(Decimal)) DTLOG.Columns.Add("Motivo", GetType(String)) + DTLOG.Columns.Add("RFCde", GetType(String)) + DTLOG.Columns.Add("Estatus", GetType(Integer)) + DTLOG.Columns.Add("Tipo", GetType(String)) + + 'Serie Folio Fecha Proveedor Importe Motivo Dim sw As New Diagnostics.Stopwatch @@ -1667,6 +1672,10 @@ Partial Class Compras_eFacturas rowLog("Proveedor") = "" rowLog("Importe") = 0 rowLog("Motivo") = "" + rowLog("RFCde") = "" + rowLog("Estatus") = 0 + rowLog("Tipo") = "" + Dim fInfoXML As New FileInfo(filePathXML) @@ -1884,10 +1893,13 @@ Partial Class Compras_eFacturas RegistraScript(String.Format("$('#{0}').modal('hide');", "ModalFacturas")) RegistraScript("$('#ModalBitacoraEfacturas').modal()") - CargaDatosBitacora() + mesajeFaturasSubidas(DTLOG) + + CargaDatosBitacora() + 'Alert(String.Format("Se cargaron {0} Facturas", Arreglo.Count), TipoMensaje.MsgInformacion) End Sub @@ -1900,6 +1912,7 @@ Partial Class Compras_eFacturas Dim conta As Integer = 1 Str.Append("Se procesó la información con la siguiente información:
    ") + Dim objCompra As New ClsCompras For Each dr As DataRow In DTLOG.Rows @@ -1909,13 +1922,18 @@ Partial Class Compras_eFacturas Str.AppendFormat("", dr("Folio")) Str.AppendFormat("", If(dr("Fecha").ToString <> "", dr("Fecha").ToString.ToDate.ToShortDateString, "")) Str.AppendFormat("", dr("Proveedor")) - Str.AppendFormat("", dr("Importe").ToString.ToDouble.FormatoNumero) + Str.AppendFormat("", dr("Importe").ToString.ToDecimal.FormatoNumero) Str.AppendFormat("", dr("Motivo")) Str.Append("") conta += 1 + + objCompra.AddBitacoraFactura(dr("Serie").ToString, dr("Folio").ToString, dr("RFCde").ToString, dr("Motivo").ToString, dr("Estatus").ToString.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, "Modulo eFacturas", + dr("Proveedor").ToString, dr("Importe").ToString.ToDecimal, dr("Tipo").ToString) Next + 'RFCde,Estatus,Tipo + objCompra.Dispose() If DTLOG.Rows.Count > 0 Then 'si las facturas no recividas son matores a cero se muestra el mensaje Alert(Str.ToString, TipoMensaje.MsgInformacion) @@ -7950,6 +7968,12 @@ Namespace ADS.eFacturas rowLog("Importe") = Fact.Total rowLog("Motivo") = "" + rowLog("RFCde") = Fact.EmisorRFC + rowLog("Estatus") = 0 + rowLog("Tipo") = Fact.TipoComprobante + + + If Registrar Then If Fact.ReceptorRFC = RFCEmpresa Then @@ -7963,6 +7987,8 @@ Namespace ADS.eFacturas If Fact.RespuestaInsert >= 0 Then + rowLog("Estatus") = 1 + Dim Destino As String = $"{DirectorioEmpresa}\Compras\" Try diff --git a/Contabilidad/RepIVA.aspx.cs b/Contabilidad/RepIVA.aspx.cs index 1a90339d7..43b56f5e5 100644 --- a/Contabilidad/RepIVA.aspx.cs +++ b/Contabilidad/RepIVA.aspx.cs @@ -255,14 +255,14 @@ public partial class Contabilidad_RepIVA : ClsPaginas Ruta = string.Format("{0}Formatos\\{1}", UsuarioActual.Empresa.Ruta, Formato); //ImprimirbytesPDF(ImprimirPDFCrystal(Ruta, Dt, para, "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); - if (UsuarioActual.Empresa.Funcionalidad(713).ToEntero() == 1) + if (UsuarioActual.Empresa.Funcionalidad(713).ToEntero() == 1 && !Ruta.Contains( "RepIVAAcreditable.rpt")) { ImprimirbytesPDF(ImprimirSubRepPDFCrystal(Ruta, Dt, para, DtIEPSA, DtIVAA, "RepIEPSPorcentaje.rpt", "RepIVAPorcentaje.rpt", "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); } else { - //ImprimirbytesPDF(ImprimirPDFCrystal(Ruta, Dt, para, "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); - ImprimirbytesPDF(ImprimirSubRepPDFCrystal(Ruta, Dt, para, new DataTable(), new DataTable(), "RepIEPSPorcentaje.rpt", "RepIVAPorcentaje.rpt", "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); + ImprimirbytesPDF(ImprimirPDFCrystal(Ruta, Dt, para, "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); + //ImprimirbytesPDF(ImprimirSubRepPDFCrystal(Ruta, Dt, para, new DataTable(), new DataTable(), "RepIEPSPorcentaje.rpt", "RepIVAPorcentaje.rpt", "Reporte de IVA", Opcion), "Reporte de IVA", Opcion); } }else diff --git a/Empresas/119/Formatos/RepIVAAcreditable.rpt b/Empresas/119/Formatos/RepIVAAcreditable.rpt index 384b35d05c52f5ce525a9eed280bbe9640230d09..dcfbc35fd4c43265a6d1129a8e2d15afe0ed574a 100644 GIT binary patch delta 24058 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 delta 12581 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 diff --git a/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc index eb97b6a19..5bd34f062 100644 --- a/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc +++ b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc @@ -4241,7 +4241,7 @@ - =Parameters!CartaPorteVersion.Value + =IIF(Parameters!RFC.Value = "BBD021220APA", "3.1", Parameters!CartaPorteVersion.Value) @@ -1762,7 +1762,7 @@ =IIF(LEN(Parameters!SubProyectoEntrega.Value) > 0,"Lugar de Entrega: " + Parameters!SubProyectoEntrega.Value,"") @@ -1770,7 +1770,7 @@ @@ -1785,8 +1785,8 @@ =Parameters!SubProyectoEntregaDir.Value @@ -1867,7 +1867,7 @@ =Parameters!RFC.Value @@ -1884,7 +1884,7 @@ "(" & Mid(Parameters!Telefono.Value, 1, 3) & ") " & Mid(Parameters!Telefono.Value, 4)) @@ -1899,7 +1899,7 @@ USO CFDI: @@ -1907,7 +1907,7 @@ =Parameters!UsoCFDI.Value From 37c11e281020c7bd7635bb835f5ada026986b560 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 20 Jul 2024 07:23:05 -0700 Subject: [PATCH 68/69] =?UTF-8?q?--=20se=20activ=C3=B3=20para=20todos=20la?= =?UTF-8?q?s=20carta=20porte=203.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/Timbrado.vb | 159 ++++++++++++------------------------------- 1 file changed, 45 insertions(+), 114 deletions(-) diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 0db156ffd..3084bd295 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -2552,12 +2552,10 @@ concep.DescripcionesEspecificas.NumeroSerie) Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte - If UsuarioActual.CveEmpresa.Contiene(1, 140) Then - ''DATOS GENERALES - cfdi.CartaPorte31("", Carta.TranspInternac, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) - - 'UBICACIONES - If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then + ''DATOS GENERALES + cfdi.CartaPorte31("", Carta.TranspInternac, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) + 'UBICACIONES + If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones 'origen cfdi.CartaPorte31Ubicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) @@ -2566,123 +2564,56 @@ concep.DescripcionesEspecificas.NumeroSerie) Next End If - 'MERCANCIAS - If Carta.Mercancias IsNot Nothing Then - cfdi.CartaPorte31Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) - If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then - For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - If concep.ValorMercancia <= 0 Then concep.Moneda = "" - cfdi.CartaPorte31Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), - concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, - If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, - concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) - For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta - cfdi.CartaPorte31CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) - Next + 'MERCANCIAS + If Carta.Mercancias IsNot Nothing Then + cfdi.CartaPorte31Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) + If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then + For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias + If concep.ValorMercancia <= 0 Then concep.Moneda = "" + cfdi.CartaPorte31Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), + concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, + If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, + concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) + For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta + cfdi.CartaPorte31CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) Next - End If - End If - ' - If Carta.FiguraTransporte IsNot Nothing Then - - If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then - - cfdi.CartaPorte31Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) - - cfdi.CartaPorte31IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) - - If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" - Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" - End If - - cfdi.CartaPorte31Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, - Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) - - If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then - For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques - cfdi.CartaPorte31Remolque(concep.SubTipoRemolque, concep.Placa) - Next - End If - End If - - If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then - For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - cfdi.CartaPorte31TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) - If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador - cfdi.CartaPorte31PartesTransporte("PT01") - cfdi.CartaPorte31PartesTransporteDomicilio(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) - End If - Next - End If - End If - Else - ''DATOS GENERALES - cfdi.CartaPorte30("", Carta.TranspInternac, Carta.RegimenAduanero, Carta.EntradaSalidaMercancia, Carta.PaisOrigenDestino, Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida, Carta.RegistroISTMO, Carta.UbicacionPoloOrigen, Carta.UbicacionPoloDestino) - - 'UBICACIONES - If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then - For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones - 'origen - cfdi.CartaPorte30Ubicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) - 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida) - cfdi.CartaPorte30Domicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP) Next End If + End If + ' + If Carta.FiguraTransporte IsNot Nothing Then - 'MERCANCIAS - If Carta.Mercancias IsNot Nothing Then - cfdi.CartaPorte30Mercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion, Carta.Mercancias.LogisticaInversaRecoleccionDevolucion) - If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then - For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - If concep.ValorMercancia <= 0 Then concep.Moneda = "" - cfdi.CartaPorte30Mercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), - concep.SectorCOFEPRIS, concep.NombreIngredienteActivo, concep.NomQuimico, concep.DenominacionGenericaProd, concep.DenominacionDistintivaProd, concep.Fabricante, concep.FechaCaducidad, concep.LoteMedicamento, concep.FormaFarmaceutica, concep.CondicionesEspTransp, concep.RegistroSanitarioFolioAutorizacion, - If(Carta.TranspInternac <> "No", concep.PermisoImportacion, ""), If(Carta.TranspInternac <> "No", concep.FolioImpoVUCEM, ""), concep.NumCAS, If(Carta.TranspInternac <> "No", concep.RazonSocialEmpImp, ""), concep.NumRegSanPlagCOFEPRIS, concep.DatosFabricante, concep.DatosFormulador, concep.DatosMaquilador, concep.UsoAutorizado, - concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt, concep.TipoMateria, If(concep.TipoMateria = "05", concep.TipoMateriaDescripcion, "")) - For Each transp As CFDICartaPorteMercanciaTransporta In concep.MercanciasCantidadTransporta - cfdi.CartaPorte30CantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) - Next + If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then + + cfdi.CartaPorte31Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) + + cfdi.CartaPorte31IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) + + If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" + Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" + End If + + cfdi.CartaPorte31Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, + Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, + Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) + + If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then + For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques + cfdi.CartaPorte31Remolque(concep.SubTipoRemolque, concep.Placa) Next End If End If - ' - If Carta.FiguraTransporte IsNot Nothing Then - If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then - - cfdi.CartaPorte30Autotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) - - cfdi.CartaPorte30IdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PesoBrutoVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) - - If Carta.Mercancias.Mercancias.Max(Function(x) x.MaterialPeligroso) = "" Then 'si no hay material peligro se limpian los valores - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente = "" - Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente = "" + If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then + For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores + cfdi.CartaPorte31TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) + If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador + cfdi.CartaPorte31PartesTransporte("PT01") + cfdi.CartaPorte31PartesTransporteDomicilio(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) End If - - cfdi.CartaPorte30Seguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, - Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) - - If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then - For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques - cfdi.CartaPorte30Remolque(concep.SubTipoRemolque, concep.Placa) - Next - End If - End If - - If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then - For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - cfdi.CartaPorte30TiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) - If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador - cfdi.CartaPorte30PartesTransporte("PT01") - cfdi.CartaPorte30PartesTransporteDomicilio(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) - End If - Next - End If + Next End If End If End If From 816b0145fbc9e5aeafca7db465076ee56fbf74ad Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 20 Jul 2024 07:24:22 -0700 Subject: [PATCH 69/69] =?UTF-8?q?--=20en=20mensaje=20en=20bit=C3=A1cora=20?= =?UTF-8?q?poner=20el=20cveventa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 4299a4c92..e9bdcd82d 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -16113,7 +16113,7 @@ Partial Class Ventas If Not TraspasoAlmacen(ObjInventario, ObjVentas, CveRemision, ObjConta, True, 9, TmpDTDetalle) Then OcurrioError = True ErrorList.Add("Ocurrió un error al verificar inventario de remisiones.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") - ModExtensiones.GuardaLog("Ocurrió un error al verificar inventario de remisiones.Revise su factura y cualquier detalle comuníquese a Soporte Técnico") + ModExtensiones.GuardaLog("Ocurrió un error al verificar inventario de remisiones.Revise su factura y cualquier detalle comuníquese a Soporte Técnico: CveVenta:" & CveRemision & " ") Exit For End If Next
    SerieFolioFechaProveedorImporteMotivo
    {0}{0}{0}{0}{0}{0}