Option Explicit On Imports Extensiones Imports System.Data Imports GemBox.Spreadsheet Partial Class Ventas_ActualizarPrecios Inherits ClsPaginas Private Property DtSubProyectos As DataTable Get Return If(IsNothing(ViewState("DtSubProyectos")), Nothing, CType(ViewState("DtSubProyectos"), DataTable)) End Get Set(value As DataTable) ViewState("DtSubProyectos") = value End Set End Property Private Property CveSucursal As Integer Get If ViewState("CveSucursal") Is Nothing Then Return -1 Else Return ViewState("CveSucursal").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveSucursal") = value End Set End Property Private Property CvePS As Integer Get If ViewState("CvePS") Is Nothing Then Return -1 Else Return ViewState("CvePS").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CvePS") = value End Set End Property Private Property PS As String Get If ViewState("PS") Is Nothing Then Return "" Else Return ViewState("PS").ToString End If End Get Set(value As String) ViewState("PS") = value End Set End Property Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then CargaCombos() End If End Sub Public Sub CargaCombos() CargaDDlClasif() CargaPS() CargaPreciosLista() CargaProveedores() CargarMarcas() End Sub Public Sub CargaDDlClasif() DDlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) DDlClasificacion.DataBind() DDlClasificacion.Items.Insert(0, New ListItem("Todos", "-1")) End Sub Public Sub CargaPreciosLista() DdlPrecioLista.Items.Clear() If UsuarioActual.Empresa.Funcionalidad(404).ToString = "1" Then 'si manneja precios de lista Dim ObjVta As New ClsVentas Dim primerItem As String = "" If ObjVta.GetPrecioListas(UsuarioActual.CveEmpresa) Then DdlPrecioLista.DataSource = ObjVta.DtResultados.Copy() DdlPrecioListaCarga.DataSource = ObjVta.DtResultados.Copy() primerItem = ObjVta.DtResultados.FiltroPrimeroValor("CvePrecioLista") End If ObjVta.Dispose() DdlPrecioLista.DataBind() DdlPrecioListaCarga.DataBind() If (DdlPrecioLista.Items.Count = 1) Then DdlPrecioLista.Items.FindByValue(primerItem).Selected = True End If Else DdlPrecioLista.Items.Insert(0, New ListItem("Sin Precio Lista", "-2")) DdlPrecioListaCarga.Items.Insert(0, New ListItem("Sin Precio Lista", "-2")) End If End Sub Public Sub CargaPS() 'FUNCIONALIDAD 105 If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then DDlPs.setEsWebService(True) Else DDlPs.setEsWebService(False) 'FUNCIONALIDAD DE COMPUESTO If UsuarioActual.Empresa.Funcionalidad(143) = "1" Then DDlPs.ddl.DataTextField = "PSCodigoCompuesto" End If DDlPs.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) DDlPs.DataBind() DDlPs.ddl.Items.Insert(0, New ListItem("Todos", "-1")) End If End Sub Private Sub CargaProveedores() If UsuarioActual.Empresa.Funcionalidad(524) <> "" Then DdlProveedor.setEsWebService(True) DivProveedorCompra.Visible = True LblProveedorCompra.Visible = True End If End Sub Protected Sub CargarMarcas() If UsuarioActual.Empresa.Funcionalidad(130) = "1" Then Dim ObjMarcas As New ClsProductosServicios If ObjMarcas.GetMarcas(UsuarioActual.CveEmpresa) Then DdlMarca.DataSource = ObjMarcas.DtResultados End If ObjMarcas.Dispose() DdlMarca.DataBind() LblMarca.Visible = True DdlMarca.Visible = True End If DdlMarca.Items.Insert(0, New ListItem("Todos", "-1")) End Sub Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) Dim objPS As New ClsProductosServicios Dim CveProveedor As Integer = -1 Dim CvePS As Integer = -1 If DDlPs.SelectedValue.ToEntero > 0 Then CvePS = DDlPs.SelectedValue.ToEntero End If If DdlProveedor.txtValue.Value.ToEntero > 0 Then CveProveedor = DdlProveedor.txtValue.Value.ToEntero End If If objPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, DdlPrecioLista.SelectedValue.ToEntero, DDlClasificacion.SelectedValue.ToEntero, CvePS, CveProveedor:=CveProveedor, Estado:=DdlEstado.SelectedValue.ToEntero, CveMarca:=DdlMarca.SelectedValue.ToEntero()) Then GVPrecios.DataSource = objPS.DtResultados End If objPS.Dispose() dvDatos.Visible = True GVPrecios.DataBind() UpDescargar.Update() UpDatos.Update() End Sub Protected Sub DDlClasificacion_SelectedIndexChanged(sender As Object, e As EventArgs) CargaPS() UpEncabezado.Update() End Sub Protected Sub RblTipo_SelectedIndexChanged(sender As Object, e As EventArgs) If RblTipo.SelectedValue = "Imp" Then ImporteFijo.Visible = True Else ImporteFijo.Visible = False End If UPPrecioLista.Update() End Sub Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click If RblTipo.SelectedIndex = 1 And TxtPorcentaje.Text.ToDecimal = 0 Then Alert("Se debe de especificar un porcentaje.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim Correcto As Boolean = False 'Dim Importe As Decimal = If(TxtImporte.Text = "", -1, TxtImporte.Text.ToDecimal) Dim Porcentaje As Decimal = If(TxtPorcentaje.Text = "", -1, TxtPorcentaje.Text.ToDecimal) Dim ObjPS As New ClsProductosServicios For Each row As GridViewRow In GVPrecios.Rows If row.FCCheckBox("chkPS").Checked Then Correcto = ObjPS.UpdatePSPreciosLista(row.FCTextBox("TxtPrecio").Text.ToDecimal, DdlPrecioLista.SelectedValue.ToEntero, Porcentaje, row.DataKey("CvePS").ToEntero, UsuarioActual.CveUsuario, DateTime.Now, If(RblTipo.SelectedValue = "Imp", True, False), PrecioMinimo:=row.FCTextBox("TxtPrecioMinimo").Text.ToDecimal) If Not Correcto Then Exit Sub End If End If Next If Correcto Then Alert("Los Precios de lista de los Productos/Servicios se actualizaron correctamente") End If ObjPS.Dispose() BtnConsultar_Click(Nothing, Nothing) RegistraScript("$('#divAgregar').modal('hide')") TxtImporte.Text = "" TxtPrecio.Text = "" TxtPorcentaje.Text = "" End Sub #Region "MODAL PRECIOS MINIMOS" Public Sub LnkPrecioMinActual_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) CvePS = GvRow.DataKey("CvePS").ToEntero PS = GvRow.DataKey("PS").ToString TxtAplicarPrecio.Text = "" CargaDatosModalPreciosMinimos() RegistraScript("$('#ModalActualizaPrecios').modal({ backdrop: 'static', keyboard: false}); $('#ChkSeleccionarTodos').find('input[type=checkbox]').prop('checked', false);") End Sub Protected Sub LnkModalGuardarPreciosMinimos_Click(sender As Object, e As EventArgs) ProcesaPreciosSucursales() CargaDatosModalPreciosMinimos() End Sub Private Sub CargaDatosModalPreciosMinimos() Dim ObjPS As New ClsProductosServicios If ObjPS.GetPSSucursales(CvePS, UsuarioActual.CveEmpresa) Then gvSucursal.DataSource = ObjPS.DtResultados End If ObjPS.Dispose() gvSucursal.DataBind() LtlModalTitleUpModalTitulo.Text = PS UpModalActualizaPrecios.Update() UpModalTitulo.Update() End Sub Private Sub ProcesaPreciosSucursales() Dim ObjProductosServicios As New ClsProductosServicios() For i As Integer = 0 To gvSucursal.Rows.Count - 1 If gvSucursal.Rows(i).FCCheckBox("chkSucursal").Checked Then If gvSucursal.Rows(i).FCHiddenField("hdnEnBD").Value.ToEntero = 1 Then ObjProductosServicios.UpdatePSSucursales(CvePS, -1, gvSucursal.Rows(i).FCTextBox("TxtMinimo").Text.ToDouble, -1, UsuarioActual.CveUsuario, gvSucursal.Rows(i).DataKey("CveSubProyecto").ToEntero, PrecioMinimo:=gvSucursal.Rows(i).FCTextBox("TxtPrecioMinimo").Text.ToDecimal) Else ObjProductosServicios.AddPSSucursales(CvePS, Nothing, gvSucursal.Rows(i).FCTextBox("TxtMinimo").Text.ToDouble, -1, UsuarioActual.CveUsuario, gvSucursal.Rows(i).DataKey("CveSubProyecto").ToEntero, PrecioMinimo:=gvSucursal.Rows(i).FCTextBox("TxtPrecioMinimo").Text.ToDecimal) End If End If Next ObjProductosServicios.Dispose() End Sub #End Region #Region "C A R G A R E X C E L " Private Sub BtnDescargarFormato_Click(sender As Object, e As EventArgs) Handles BtnDescargarFormato.Click Dim DtExcel As DataTable = (From row As GridViewRow In GVPrecios.Rows Where row.RowType = DataControlRowType.DataRow Select New With { .Codigo = row.DataKey("Codigo"), .PS = row.DataKey("PS"), .Precio = row.FCTextBox("TxtPrecio").Text.ToDecimal() }).QueryToDataTable(True) If DtExcel.Rows.Count < 1 Then Alert("No hay resutados en la busqueda.", TipoMensaje.MsgAdvertencia) Exit Sub End If DtExcel.TableName = DdlPrecioLista.SelectedItem.Text DtExcel.Columns("Codigo").ColumnName = "Código" DtExcel.Columns("PS").ColumnName = "Producto / Servicio" SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) Dim FileExcel As New ExcelFile() Dim worksheet = FileExcel.Worksheets.Add(DtExcel.TableName) worksheet.InsertDataTable(DtExcel, New InsertDataTableOptions() With { .ColumnHeaders = True, .StartRow = 0, .StartColumn = 0 }) worksheet.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) worksheet.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) Dim columnCount = worksheet.CalculateMaxUsedColumns() For i = 0 To columnCount worksheet.Columns(i).AutoFit(1, worksheet.Rows(0), worksheet.Rows(worksheet.Rows.Count - 1)) Next 'worksheet.Cells.Style.Locked = False 'worksheet.Cells.Style.FormulaHidden = False 'worksheet.Columns(0).Cells.Style.Locked = True 'worksheet.Protected = True 'Dim protectionSettings = worksheet.ProtectionSettings 'protectionSettings.AllowDeletingColumns = False 'protectionSettings.AllowDeletingRows = True 'protectionSettings.AllowEditingObjects = True 'protectionSettings.AllowEditingScenarios = True 'protectionSettings.AllowFormattingCells = True 'protectionSettings.AllowFormattingColumns = True 'protectionSettings.AllowFormattingRows = True 'protectionSettings.AllowInsertingColumns = False 'protectionSettings.AllowInsertingRows = True 'protectionSettings.AllowSelectingLockedCells = True 'protectionSettings.AllowSelectingUnlockedCells = True 'protectionSettings.AllowSelectingUnlockedCells = True 'protectionSettings.AllowSorting = True 'protectionSettings.AllowUsingAutoFilter = True 'protectionSettings.AllowUsingPivotTableReports = True 'protectionSettings.SetPassword(ModExtensiones.IMEI) FileExcel.Save(Response, "Precios.xlsx", SaveOptions.XlsxDefault) End Sub Private Sub BtnCargaExcel_Click(sender As Object, e As EventArgs) Handles BtnCargaExcel.Click If TxtExcel.getfiles().Archivos.Count > 0 Then Dim file As Archivo = TxtExcel.getfiles().Archivos(0) Dim Directorio As String = AppDomain.CurrentDomain.BaseDirectory & file.patch CargarArchivo(Directorio, file.filename) Else Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError) End If End Sub Private Sub CargarArchivo(Ruta As String, FileName As String) SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) Dim Tipo As String = "EXCEL" Dim dt As DataTable = Nothing Dim ErrorArchivo = False Try dt = ReadExcelFile(Ruta + FileName, True) Catch ex As Exception ErrorArchivo = True OnError("Ocurrio un error al leer el archivo
" & ex.Message, ex) End Try If Not ErrorArchivo AndAlso dt IsNot Nothing Then If DdlPrecioListaCarga.SelectedValue.ToEntero() = -1 Then Alert("Debe Seleccionar la lista de precios a cargar. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(0).ColumnName = "Código" Then Alert("El nombre de la tercera columna debe ser 'Codigo'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(1).ColumnName = "Producto / Servicio" Then Alert("El nombre de la cuarta columna debe ser 'Producto / Servicio'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(2).ColumnName = "Precio" Then Alert("El nombre de la sexta columna debe ser 'Precio'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If dt.TableName = "Datos" Dim ProductosNoCargados As New StringBuilder() Dim RowsCargados As Integer = 0 Dim RowsNoCargados As Integer = 0 Dim ObjPS As New ClsProductosServicios 'ObjPS.IniciaTransacSQL() Try Dim DtPS As DataTable = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) For Each row As DataRow In dt.Rows Dim Correcto As Boolean = False Dim CvePS As Integer = DtPS.FiltroPrimeroValor("CvePS", String.Format("Codigo='{0}' AND CveEmpresa={1}", row(0).ToString(), UsuarioActual.CveEmpresa)) Dim CvePrecioLista As Integer = DdlPrecioListaCarga.SelectedValue.ToEntero() Dim PrecioNuevo As Decimal = row("Precio").ToString().ToDecimal() Dim Porcentaje As Decimal = -1 If CvePS > 0 AndAlso CvePrecioLista > 0 Then Correcto = ObjPS.UpdatePSPreciosLista(PrecioNuevo, CvePrecioLista, Porcentaje, CvePS, UsuarioActual.CveUsuario, DateTime.Now, True) If Correcto Then RowsCargados += 1 End If Else If CvePS > 0 AndAlso CvePrecioLista = -2 Then Correcto = ObjPS.UpdatePSPrecios(PrecioNuevo, CvePrecioLista, Porcentaje, CvePS, UsuarioActual.CveUsuario, DateTime.Now, True) If Correcto Then RowsCargados += 1 End If Else Correcto = False End If End If If Not Correcto Then ProductosNoCargados.AppendFormat("{0},", row("Producto / Servicio").ToString()) RowsNoCargados += 1 End If Next Catch ex As Exception OnError("Ocurrió un error al cargar los precios.", ex) Finally Dim MensajeFinal As New StringBuilder() If RowsNoCargados = 0 AndAlso RowsCargados > 0 Then MensajeFinal.Append("Los precios de los Productos/Servicios se cargaron correctamente.

") End If If RowsCargados > 0 Then MensajeFinal.Append("Se actualizaron " & RowsCargados & " Productos o Servicios correctamente.") End If If RowsNoCargados > 0 Then MensajeFinal.Append("No se pudieron actualizar " & RowsNoCargados & " Productos/Servicios.
Los siguientes Productos o Servicios no se pudieron actualizar: " & ProductosNoCargados.ToString()) End If Alert(MensajeFinal.ToString()) ObjPS.Dispose() End Try 'If RowNoEncontrados.Length > 0 Then ' Alert("Los siguientes Productos o Servicios no se encontraron en la Base de Datos.<\BR>" & RowNoEncontrados, TipoMensaje.MsgAdvertencia) 'Else ' Alert("Se Cargaron " & NumRow & " Productos o Servicios correctamente.") 'End If End If End Sub Private Function ReadExcelFile(ByVal flatFilePath As String, ByVal firstRowHasHeaders As Boolean) As DataTable SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) Dim excelFile As ExcelFile = ExcelFile.Load(flatFilePath) Dim unnamed As Integer = 0 Dim cols As Integer Dim columns As String() Dim curRow As Integer = 0 Dim curCol As Integer = 0 Dim dataTable As DataTable = New DataTable() Dim worksheet As ExcelWorksheet = excelFile.Worksheets(0) For cols = 0 To worksheet.Rows(0).AllocatedCells.Count - 1 If firstRowHasHeaders Then If worksheet.Rows(0).Cells(cols).Value IsNot Nothing Then dataTable.Columns.Add(worksheet.Rows(0).Cells(cols).Value.ToString()) Else dataTable.Columns.Add("Unnamed Column " & (System.Threading.Interlocked.Increment(unnamed))) End If curRow = 1 Else dataTable.Columns.Add("Column " & (cols + 1)) End If Next While curRow < worksheet.Rows.Count columns = New String(cols - 1) {} For curCol = 0 To cols - 1 If worksheet.Rows(curRow).Cells(curCol).Value Is Nothing Then columns(curCol) = "" Else columns(curCol) = worksheet.Rows(curRow).Cells(curCol).Value.ToString() End If Next dataTable.Rows.Add(columns) curRow += 1 End While Return dataTable End Function #End Region Protected Sub gvSucursal_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCTextBox("TxtPrecioMinimo").Attributes.Add("onKeyUp", String.Format("FncSeleccionaChk({0});", e.Row.FCCheckBox("chkSucursal").ClientID)) End If End Sub End Class