From ebcd08c989f524cb233ca3d5b6042d3c40a52c1c Mon Sep 17 00:00:00 2001 From: rakcsle Date: Mon, 17 Feb 2025 16:40:56 -0700 Subject: [PATCH] Activar carga por excel con datos de prorrateo --- Compras/eFacturas.aspx | 146 +++++++++++++++++++++----------------- Compras/eFacturas.aspx.vb | 117 ++++++++++++++++++++++++++++-- 2 files changed, 192 insertions(+), 71 deletions(-) diff --git a/Compras/eFacturas.aspx b/Compras/eFacturas.aspx index 0e1e68e12..d0b0efbb4 100644 --- a/Compras/eFacturas.aspx +++ b/Compras/eFacturas.aspx @@ -33,6 +33,10 @@ .ajax__tab_xp .ajax__tab_body { font-size: 12px !important; } + + .addropzone { + min-height: 170px; + } @@ -933,61 +937,86 @@ - <%--
+
-
- -
-
--%> +
+ +
+
+ Formato +
+
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
-
-
- - - - <%-- - --%> - -
- -
-
-
- - - - - -
-
-
- -
- -
-
-
- - -
-
-
-
- - -
-
+
+
@@ -1018,6 +1047,9 @@
+ + +
diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index ef4ea68b0..1141c23ff 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -5587,13 +5587,13 @@ Partial Class Compras_eFacturas If DdlSubProyectoProrrateoGasolina.SelectedValue.ToEntero > 0 Then - AgregarProrrateoGasolina(DdlSubProyectoProrrateoGasolina.SelectedValue.ToEntero, DdlSubProyectoProrrateoGasolina.SelectedItem.Text, CvePs, CveUM, UM, CveClasificacion, Clasificacion) + AgregarProrrateoGasolina(DdlSubProyectoProrrateoGasolina.SelectedValue.ToEntero, DdlSubProyectoProrrateoGasolina.SelectedItem.Text, CvePs, CveUM, UM, CveClasificacion, Clasificacion, TxtPrecioProrrateoGasolina.Text.ToDecimal) Else DTProrrateoTmp.Rows.Clear() For Each item As ListItem In DdlSubProyectoProrrateoGasolina.Items If item.Value.ToEntero > 0 Then - AgregarProrrateoGasolina(item.Value.ToEntero, item.Text, CvePs, CveUM, UM, CveClasificacion, Clasificacion) + AgregarProrrateoGasolina(item.Value.ToEntero, item.Text, CvePs, CveUM, UM, CveClasificacion, Clasificacion, TxtPrecioProrrateoGasolina.Text.ToDecimal) End If Next End If @@ -5605,7 +5605,7 @@ Partial Class Compras_eFacturas End Sub - Private Sub AgregarProrrateoGasolina(CveSubProyecto As Integer, SubProyecto As String, CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String) + Private Sub AgregarProrrateoGasolina(CveSubProyecto As Integer, SubProyecto As String, CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, Porcentaje As Decimal) ''' este prco3eso compratira todo esto se debe de llevar a la genracion de la factura por porcentaje @@ -5615,7 +5615,7 @@ Partial Class Compras_eFacturas Dim RetIVAOriginal As Decimal = 0D 'TxtRetIVA.Text.ToDecimal Dim TotalOriginal As Decimal = 1 - Dim totalParcialDeseado As Decimal = TxtPrecioProrrateoGasolina.Text.ToDecimal + Dim totalParcialDeseado As Decimal = Porcentaje Dim PorcentajeCalculado As Decimal = totalParcialDeseado / TotalOriginal Dim subtotalParcial As Decimal = SubTotalOriginal * PorcentajeCalculado @@ -5643,7 +5643,7 @@ Partial Class Compras_eFacturas nRow("Total") = totalParcialDeseado.RoundSQL(4) nRow("PorcentajeIVA") = (ivaParcial / subtotalParcial).RoundSQL(4) - nRow("Porcentaje") = TxtPrecioProrrateoGasolina.Text.ToDecimal '((totalParcialDeseado.RoundSQL(4) * 100) / TotalOriginal).RoundSQL(2) + nRow("Porcentaje") = Porcentaje '((totalParcialDeseado.RoundSQL(4) * 100) / TotalOriginal).RoundSQL(2) 'nRow("RetIVAPorcentaje") = (retIvaParcial / subtotalParcial).RoundSQL(4) 'nRow("RetISRPorcentaje") = (retIsrParcial / subtotalParcial).RoundSQL(4) @@ -6213,6 +6213,113 @@ Partial Class Compras_eFacturas End Sub + + Protected Sub LnkDecargaPlatilla_Click(sender As Object, e As EventArgs) + + Dim rutaArchivoPlantilla As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\CargaProrrateoPorcentaje.xlsx" + + Dim nombreArchivo As String = "CargaProrrateoPorcentaje.xlsx" + + ' Configurar la respuesta HTTP + Response.Clear() + Response.ContentType = "application/octet-stream" + Response.AppendHeader("Content-Disposition", "attachment; filename=" & nombreArchivo) + + Dim contenido As Byte() = System.IO.File.ReadAllBytes(rutaArchivoPlantilla) + Response.BinaryWrite(contenido) + + Response.Flush() + Response.End() + + End Sub + + Protected Sub BrnAgregarPlantilla_Click(sender As Object, e As EventArgs) + + If TxtExcel.getfiles().Archivos.Count > 0 Then + Dim file As Archivo = TxtExcel.getfiles().Archivos(0) + Dim Directorio As String = Server.MapPath("~") & file.path + Dim Tipo As String = If(file.Extension.Contiene("xlsx", "xlsx", "xlsm", "xlsb"), "EXCEL", "CSV") + + Dim DTPlantilla As DataTable = ReadExcelFile(Directorio + file.filename, True) + + ProcesaPlantilla(DTPlantilla) + + Else + Alert("No existe el archivo.Favor de subir un archivo csv o excel a la plataforma", TipoMensaje.MsgError) + End If + + End Sub + + + Function ProcesaPlantilla(DTPlantilla As DataTable) As Boolean + + + Dim CvePs As Integer = DdlPS.SelectedValue.ToEntero + + If Not CvePs > 0 Then + Alert("Debe seleccionar un producto", TipoMensaje.MsgAdvertencia) + Return False + End If + + Dim PsRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePs).FiltroPrimero("") + + If PsRow Is Nothing Then + Alert("No se encontro el producto", TipoMensaje.MsgAdvertencia) + Return False + End If + + Dim CveUM As Integer = PsRow("CveUM").ToString.ToEntero + Dim UM As String = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimeroValor("UnidadMedida", $" CveUnidadMedida = {CveUM} ") + + Dim CveClasificacion As Integer = PsRow("CveClasificacion").ToString.ToEntero + Dim Clasificacion As String = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $" CveClasificacion = {CveClasificacion} ") + + Dim TotalPorcentaje As Decimal + Dim ErrorProceso As Boolean = False + Dim SbSubProyectosNoencontrados As New StringBuilder + + For Each dRow As DataRow In DTPlantilla.Rows + If dRow("Porcentaje").ToString.ToDecimal < 0 Then + Alert("No se admiten porcentajes negativos.", TipoMensaje.MsgAdvertencia) + Return False + End If + TotalPorcentaje = TotalPorcentaje + dRow("Porcentaje").ToString.ToDecimal + Next + + TotalPorcentaje = TotalPorcentaje.RoundSQL + If TotalPorcentaje <> 100 Then + Alert($"La suma de porcentaje es diferente de 100%, el porcetaje actual es de {TotalPorcentaje}%", TipoMensaje.MsgAdvertencia) + Return False + End If + + If Not DTPlantilla.Columns.Contains("CveSubProyecto") Then + DTPlantilla.Columns.Add("CveSubProyecto", GetType(Integer)) + End If + + + For Each dRow As DataRow In DTPlantilla.Rows + Dim CveSubProyecto As Integer = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $" SubProyecto = '{dRow("CentroCosto").ToString}' ").ToEntero + If CveSubProyecto > 0 Then + dRow("CveSubProyecto") = CveSubProyecto + Else + ErrorProceso = True + SbSubProyectosNoencontrados.AppendLine($"{dRow("CentroCosto").ToString}
") + End If + Next + + If ErrorProceso AndAlso SbSubProyectosNoencontrados.Length > 0 Then + Alert($"No se encontraron los siguientes centros de costo
{SbSubProyectosNoencontrados.ToString}", TipoMensaje.MsgAdvertencia) + End If + + For Each dRow As DataRow In DTPlantilla.Rows + AgregarProrrateoGasolina(dRow("CveSubProyecto").ToString.ToEntero, dRow("CentroCosto").ToString, CvePs, CveUM, UM, CveClasificacion, Clasificacion, dRow("Porcentaje").ToString.ToDecimal) + Next + + TxtExcel.Text = "[]" + Return True + + End Function + End Class