Files
SIG/Ventas/RepPedidosSTF.aspx.vb

448 lines
19 KiB
VB.net

Option Explicit On
Option Strict On
Imports System.Activities.Expressions
Imports System.Data
Imports DocumentFormat.OpenXml.Office.CustomUI
Imports Extensiones
Imports Microsoft.Reporting.WebForms
Partial Class Ventas_RepPedidosSTF
Inherits ClsPaginas
Public Property DTProductosEdicion As DataTable
Get
If ViewState("DTProductosEdicion") Is Nothing Then
ViewState("DTProductosEdicion") = New DataTable
End If
Return DirectCast(ViewState("DTProductosEdicion"), DataTable)
End Get
Set(value As DataTable)
ViewState("DTProductosEdicion") = value
End Set
End Property
Public Property DatosGV As DataTable
Get
If ViewState("DatosGV") Is Nothing Then
ViewState("DatosGV") = New DataTable
End If
Return DirectCast(ViewState("DatosGV"), DataTable)
End Get
Set(value As DataTable)
ViewState("DatosGV") = value
End Set
End Property
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
CargaCombos()
CargaProductosEdicion()
End If
End Sub
Private Sub CargaCombos()
txtFechaI.Text = NowADS.FirstDayOfMonth.ToShortDateString
txtFechaF.Text = NowADS.LastDayOfMonth.ToShortDateString
CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto)
'Vendedor
DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=-1).FiltraParametros("VendedorTipo in (1,4)") 'vendedores y vendedores de piso
DdlVendedor.DataBind()
DdlVendedor.Items.Insert(0, New ListItem("Todos", "-1"))
DdlVendedor.Items.Insert(1, New ListItem("Sin Vendedor", "-2"))
If UsuarioActual.CveVendedor > 0 Then
DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor)
DdlVendedor.Enabled = False
End If
DdlClientes.setEsWebService(True)
End Sub
Protected Sub CargaDatos()
LnkImprimirPedidos.Visible = False
LnkImprimirPedidosExcel.Visible = False
DatosGV = New DataTable
Dim Opcion As Integer = 1
Dim FechaInicio As Date = MinFecha
Dim FechaFin As Date = MaxFecha
Dim tCveCliente As Integer = DdlClientes.SelectedValue.ToEntero
LnkImprimirPedidos.Visible = False
DatosGV = New DataTable
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, tCveCliente) Then
GvE.DataSource = ObjVentas.DtResultados
End If
ObjVentas.Dispose()
GvE.DataBind()
Else
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, tCveCliente) Then
DatosGV = ObjVentas.DtResultados
DatosGV.Columns.Add("CantidadOrg", GetType(Decimal))
DatosGV.Columns.Add("CvePSOrg", GetType(Integer))
DatosGV.Columns.Add("CodigoPSOrg", GetType(String))
GvDatos.DataSource = DatosGV
If DatosGV IsNot Nothing AndAlso DatosGV.Rows.Count > 0 Then
LnkImprimirPedidos.Visible = True
LnkImprimirPedidosExcel.Visible = True
End If
End If
ObjVentas.Dispose()
GvDatos.DataBind()
End If
End Sub
Private Sub CargaProductosEdicion()
DTProductosEdicion = New DataTable
Dim ObjVentas As ClsVentas = New ClsVentas()
If ObjVentas.GetPSSubProyectosVendedores(UsuarioActual.CveEmpresa) Then
DTProductosEdicion = ObjVentas.DtResultados
'If UsuarioActual.CveRol = 1 Then
' DTProductosEdicion = ObjVentas.DtResultados.FiltraParametros("", "CodigoPS", {"CvePS", "CodigoPS", "Precio"})
'Else
' DTProductosEdicion = ObjVentas.DtResultados.FiltraParametros($" CveVendedor = {UsuarioActual.CveVendedor}")
'End If
End If
ObjVentas.Dispose()
End Sub
Protected Sub GvDatos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvDatos.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.DBCampo("CveVendedor") = "" OrElse e.Row.DBCampo("CvePS") = "" Then
e.Row.FCCheckBox("Chk").InputAttributes.Add("onclick", $"seleccionVenta('{e.Row.FCCheckBox("Chk").ClientID}','{e.Row.DataKey("CveVenta")}')")
e.Row.FCLinkButton("imgE").Visible = False
Else
e.Row.FCCheckBox("Chk").InputAttributes.Add("class", e.Row.DataKey("CveVenta"))
End If
If e.Row.DBCampo("TipoRenglon") = "1" Then e.Row.CssClass = "SubTotales"
End If
If e.Row.RowState = DataControlRowState.Edit OrElse e.Row.RowState = 5 Then
If e.Row.DBCampo("CveVendedor") = "" OrElse e.Row.DBCampo("CvePS") = "" Then
Else
e.Row.FCDropDownList("DdlPS").DataSource = DTProductosEdicion.FiltraParametros($"CveVendedor = {e.Row.DataKey("CveVendedor")}")
e.Row.FCDropDownList("DdlPS").DataBind()
e.Row.FCDropDownList("DdlPS").SelectedValueExist(e.Row.DBCampo("CvePS"))
End If
End If
End Sub
Protected Sub GvDatos_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvDatos.RowEditing
GvDatos.EditIndex = e.NewEditIndex
CargaGvDatos()
End Sub
Protected Sub GvDatos_RowCancelingEdit(sender As Object, e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvDatos.RowCancelingEdit
GvDatos.EditIndex = -1
CargaGvDatos()
End Sub
Protected Sub GvDatos_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvDatos.RowUpdating
Dim Cantidad As Decimal = GvDatos.Rows(e.RowIndex).FCTextBox("TxtCantidad").Text.ToDecimal
Dim CvePSNuevo As Integer = GvDatos.Rows(e.RowIndex).FCDropDownList("DdlPS").SelectedValue.ToEntero
Dim PSNuevo As String = GvDatos.Rows(e.RowIndex).FCDropDownList("DdlPS").SelectedItem.Text
Dim PU As Decimal = DTProductosEdicion.FiltroPrimeroValor("Precio", $"CvePS = {CvePSNuevo}").ToDecimal
If Not CvePSNuevo > 0 Then
Alert("Producto no encontrado.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not Cantidad > 0 Then
Alert("Debe especificar la cantidad.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not PU > 0 Then
Alert("El precio del producto no puede ser 0.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim CvPSOrg As Integer = DatosGV.Rows(GvDatos.EditIndex)("CvePSOrg").ToString.ToEntero
Dim CantidadOrg As Decimal = DatosGV.Rows(GvDatos.EditIndex)("CantidadOrg").ToString.ToDecimal
If Not (CvPSOrg > 0 Or CantidadOrg > 0) Then
DatosGV.Rows(GvDatos.EditIndex)("CantidadOrg") = GvDatos.Rows(GvDatos.EditIndex).DataKey("Cantidad")
DatosGV.Rows(GvDatos.EditIndex)("CvePSOrg") = GvDatos.Rows(GvDatos.EditIndex).DataKey("CvePS")
DatosGV.Rows(GvDatos.EditIndex)("CodigoPSOrg") = GvDatos.Rows(GvDatos.EditIndex).DataKey("CodigoPS")
End If
DatosGV.Rows(GvDatos.EditIndex)("Cantidad") = Cantidad
DatosGV.Rows(GvDatos.EditIndex)("CvePS") = CvePSNuevo
DatosGV.Rows(GvDatos.EditIndex)("CodigoPS") = PSNuevo
DatosGV.Rows(GvDatos.EditIndex)("PU") = PU
DatosGV.AcceptChanges()
GvDatos.EditIndex = -1
GvDatos.DataSource = DatosGV
GvDatos.DataBind()
UPDatos.Update()
End Sub
Private Sub CargaGvDatos()
GvDatos.DataSource = DatosGV
GvDatos.DataBind()
UPDatos.Update()
End Sub
Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs)
CargaDatos()
UPDatos.Update()
End Sub
Protected Sub BtnEntregar_Click(sender As Object, e As EventArgs)
'validar que están seleccionados
Dim TmpDTRemis As New DataTable
TmpDTRemis.Columns.Add("CveVentaDetalle", GetType(Integer))
TmpDTRemis.Columns.Add("CveCliente", GetType(Integer))
TmpDTRemis.Columns.Add("CveSubProyecto", GetType(Integer))
TmpDTRemis.Columns.Add("CvePS", GetType(Integer))
TmpDTRemis.Columns.Add("Cantidad", GetType(Decimal))
TmpDTRemis.Columns.Add("CveUnidadMedida", GetType(Integer))
TmpDTRemis.Columns.Add("PU", GetType(Decimal))
TmpDTRemis.Columns.Add("CveVendedor", GetType(Decimal))
TmpDTRemis.Columns.Add("GastosEnvio", GetType(Decimal))
TmpDTRemis.Columns.Add("Observacion", GetType(String))
TmpDTRemis.Columns.Add("CantidadOrg", GetType(Decimal))
TmpDTRemis.Columns.Add("CvePSOrg", GetType(Integer))
TmpDTRemis.Columns.Add("CodigoPSOrg", GetType(String))
'agruparo por cliente
For Each gvr As GridViewRow In GvDatos.Rows
If gvr.DataKey("CveVendedor").ToEntero > 0 AndAlso gvr.DataKey("CvePS").ToEntero > 0 AndAlso gvr.FCCheckBox("chk").Checked Then
Dim drp As DataRow = TmpDTRemis.NewRow
drp("CvePS") = gvr.DataKey("CvePS").ToEntero
drp("Cantidad") = gvr.DataKey("Cantidad").ToDecimal
drp("PU") = gvr.DataKey("PU").ToDecimal
drp("CveUnidadMedida") = gvr.DataKey("CveUnidadMedida").ToEntero
drp("CveSubProyecto") = gvr.DataKey("CveSubProyecto").ToEntero
drp("CveCliente") = gvr.DataKey("CveCliente").ToEntero
drp("CveVendedor") = gvr.DataKey("CveVendedor").ToEntero
drp("CveVentaDetalle") = gvr.DataKey("CveVentaDetalle").ToEntero
drp("GastosEnvio") = gvr.DataKey("GastosEnvio").ToDecimal
drp("Observacion") = gvr.DataKey("SerieFolio")
drp("CantidadOrg") = gvr.DataKey("CantidadOrg").ToDecimal
drp("CvePSOrg") = gvr.DataKey("CvePSOrg").ToEntero
drp("CodigoPSOrg") = gvr.DataKey("CodigoPSOrg")
TmpDTRemis.Rows.Add(drp)
End If
Next
Dim DTDeriesFolio As DataTable = TmpDTRemis.FiltraParametros("", "", {"Observacion"})
Dim Observaciones As String = ""
Dim lista As New List(Of String)
For Each drow As DataRow In DTDeriesFolio.Rows
lista.Add(drow("Observacion").ToString)
Next
Observaciones = String.Join(", ", lista)
If TmpDTRemis IsNot Nothing AndAlso TmpDTRemis.Rows.Count = 0 Then
Alert("No se ha seleccionado ninguna partida, favor de seleccionar", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim ObjA As New ClsInventarios
ObjA.IniciaTransacSQL()
Dim TieneError As Boolean = False
Dim StrAlerta As New StringBuilder
For Each drt As DataRow In TmpDTRemis.FiltraParametros("", DistinctColumns:={"CveCliente", "CveSubProyecto", "CveVendedor", "GastosEnvio"}).Rows
Dim ObjFactura As Modelos.Factura = Modelos.Factura.CrearVentaNueva(UsuarioActual, drt("CveSubProyecto").ToString.ToEntero, drt("CveCliente").ToString.ToEntero, 1, "Rem")
ObjFactura.CveVendedor = drt("CveVendedor").ToString.ToEntero
ObjFactura.Observaciones = Observaciones
For Each dr As DataRow In TmpDTRemis.FiltraParametros($"CveCliente ={drt("CveCliente")} AND CveVendedor = {drt("CveVendedor")} AND CveSubProyecto = {drt("CveSubProyecto")}").Rows
If ObjFactura IsNot Nothing Then
Dim Obs As String = dr("Observacion").ToString
If (dr("CantidadOrg").ToString.ToEntero > 0) AndAlso (dr("Cantidad").ToString.ToDecimal <> dr("CantidadOrg").ToString.ToDecimal) Then
Obs = $"{Obs}, Cantidad Original: {dr("CantidadOrg").ToString.ToDecimal.ToString("###,###,###.00")}"
End If
If (dr("CvePSOrg").ToString.ToEntero > 0) AndAlso (dr("CvePS").ToString.ToEntero <> dr("CvePSOrg").ToString.ToEntero) Then
Obs = $"{Obs}, Producto Original: {dr("CodigoPSOrg").ToString}"
End If
If Not ObjFactura.AgregarPS(dr("CvePS").ToString.ToEntero, dr("Cantidad").ToString.ToDecimal, dr("PU").ToString.ToDecimal, 0, Obs, CveSubProyecto:=dr("CveSubProyecto").ToString.ToEntero, CveVentaDetallePadre:=dr("CveVentaDetalle").ToString.ToEntero) Then
Alert("Error al agregar producto", TipoMensaje.MsgAdvertencia)
TieneError = True
Exit For
Else
If Not ObjA.UpdateEstatusAlmacen(dr("CveVentaDetalle").ToString.ToEntero, 1) Then
TieneError = True
End If
End If
End If
Next
If drt("GastosEnvio").ToString.ToDecimal > 0 Then
Dim tCvePSEnvio As Integer = UsuarioActual.Empresa.Funcionalidad(160).ToEntero
If Not ObjFactura.AgregarPS(tCvePSEnvio, 1, drt("GastosEnvio").ToString.ToDecimal, 0, "", CveSubProyecto:=drt("CveSubProyecto").ToString.ToEntero) Then
TieneError = True
End If
End If
If Not TieneError Then
ObjFactura.CalculaTotales()
Dim Resp As New Modelos.Factura.MMensajeFactura
Resp = ObjFactura.EmitirFactura(False, Transac:=ObjA.IniciaTransacSQL)
If Resp.CveVenta > 0 Then
Dim a As String = "a"
StrAlerta.AppendFormat("<a href = '/Ventas/Ventas.aspx?CveVenta={0}' class='Texto'>{1}</a><br/>", Resp.CveVenta, Resp.SerieFolio)
'Respuesta.CveVenta = Resp.CveVenta
'Respuesta.SerieFolio = Resp.SerieFolio
'Respuesta.dtdetalle = TmpDTMat
Else
TieneError = True
End If
End If
Next
If Not TieneError Then
ObjA.Commit()
Alert("Se registraron las siguientes remisiones: <br/>" & StrAlerta.ToString)
CargaDatos()
Else
ObjA.RollBack()
End If
End Sub
Protected Sub LnkImprimirPedidos_Click(sender As Object, e As EventArgs)
ImprimirReporte("PDF")
End Sub
Protected Sub LnkImprimirPedidosExcel_Click(sender As Object, e As EventArgs)
ImprimirReporte("Excel")
End Sub
Private Sub ImprimirReporte(Formato As String)
Dim FechaI As String = txtFechaI.Text
Dim FechaF As String = txtFechaF.Text
If txtFechaI.Text = "" Then FechaI = "-1"
If txtFechaF.Text = "" Then FechaF = "-1"
Dim Sucursal As String = If(DdlSubProyecto.SelectedValue = "-1", "", $"&emsp;<b>Sucursal:</b>&nbsp;{DdlSubProyecto.SelectedItem.Text}")
Dim Vendedor As String = If(DdlVendedor.SelectedValue = "-1", "", $"&emsp;<b>Vendedor:</b>&nbsp;{DdlVendedor.SelectedItem.Text}")
Dim FechaIn As String = If(txtFechaI.Text = "", "", $"&emsp;<b>Fecha Inicio:</b>&nbsp;{txtFechaI.Text}")
Dim FechaFn As String = If(txtFechaF.Text = "", "", $"&emsp;<b>Fecha Fin:</b>&nbsp;{txtFechaF.Text}")
Dim TituloReporte As String = "Reporte de Pedidos"
If DatosGV.Rows.Count > 0 Then
Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/RepProveedorCxP.rpt", UsuarioActual.Empresa.Ruta))
Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta))
Dim params As New List(Of ReportParameter)
params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa))
params.Add(New ReportParameter("FechaInicio", FechaI))
params.Add(New ReportParameter("FechaFin", FechaF))
params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString))
params.Add(New ReportParameter("TituloReporte", TituloReporte))
params.Add(New ReportParameter("AgrupadoPor", $" {Sucursal}{Vendedor}{FechaIn}{FechaFn}"))
If Imagen.Exists Then ''POR EMPRESA
params.Add(New ReportParameter("LogoPath", $"file://{Imagen.FullName}"))
Else
params.Add(New ReportParameter("LogoPath", ""))
End If
ImprimirPDF("Empresas/Grales/Formatos/RepPedidos.rdlc", DatosGV, params, "ReportePedidos", Formato)
Else
Alert("No hay datos consultados", TipoMensaje.MsgAdvertencia)
End If
End Sub
Protected Sub BtnEditarHorariosPedidos_Click(sender As Object, e As EventArgs)
Dim objSisEmpresas As New ClsSisEmpresas
If objSisEmpresas.UpdateEmpresaFuncionalidad(546, $"{TxtHorarioDe.Text}|{TxtHorarioA.Text}", UsuarioActual.CveEmpresa) Then
If objSisEmpresas.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then
Dim dttmp As Data.DataTable = objSisEmpresas.DtResultados
Dim EmpresasFuncionalidades As New HybridDictionary
For Each Row As Data.DataRow In dttmp.Rows
EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString)
Next
UsuarioActual.Empresa.SetFuncionalidades(EmpresasFuncionalidades)
End If
Alert("Guardado correctamente.")
RegistraScript("$('#divHorariosPedidos').modal('hide');")
End If
objSisEmpresas.Dispose()
End Sub
Protected Sub BtnHorariosPedidos_Click(sender As Object, e As EventArgs)
Dim objSisEmpresas As New ClsSisEmpresas
If objSisEmpresas.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then
Dim dttmp As Data.DataTable = objSisEmpresas.DtResultados
Dim EmpresasFuncionalidades As New HybridDictionary
For Each Row As Data.DataRow In dttmp.Rows
EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString)
Next
UsuarioActual.Empresa.SetFuncionalidades(EmpresasFuncionalidades)
End If
objSisEmpresas.Dispose()
TxtHorarioDe.Text = UsuarioActual.Empresa.Funcionalidad(546).Split("|"c)(0)
TxtHorarioA.Text = UsuarioActual.Empresa.Funcionalidad(546).Split("|"c)(1)
UpBodyHorariosPedidos.Update()
RegistraScript("$('#divHorariosPedidos').modal({ backdrop: 'static', keyboard: false});")
End Sub
End Class