This commit is contained in:
2025-04-14 15:35:58 -07:00
2 changed files with 47 additions and 51 deletions

View File

@@ -670,16 +670,11 @@ Partial Class OP_OP
Dim CveMP As Integer = GvMPAgregados.DataKeys(row.RowIndex)("CvePSMateriaPrima").ToString().ToEntero()
Dim CveUMMP As Integer = GvMPAgregados.DataKeys(row.RowIndex)("CveUMMateriaPrima").ToString().ToEntero()
Dim CantidadSolicitada As Decimal = DtMP.Rows(row.RowIndex)("Cantidad").ToString().ToDecimal()
Dim Existencia As Decimal = ObjInventario.GetExistenciasPS(
CvePS:=CveMP,
CveUnidadMedida:=CveUMMP,
CveEmpresa:=UsuarioActual.CveEmpresa,
CveAlmacen:=DdlAlmacenOrigenMP.SelectedValue.ToEntero()
)
CveAlmacen:=DdlAlmacenOrigenMP.SelectedValue.ToEntero())
If Existencia < CantidadSolicitada Then
Dim NombreProducto As String = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveMP).FiltroPrimeroValor("Producto", "")
@@ -705,16 +700,16 @@ Partial Class OP_OP
Dim TieneError As Boolean = False
Dim FolioSolicitud As Integer = ObjInventario.AddTrasladoSolicitud(
TxtObservacionesMP.Text.Trim(),
DdlAlmacenOrigenMP.SelectedValue.ToEntero(),
DdlAlmacenDestinoMP.SelectedValue.ToEntero(),
Estatus,
-1,
NowADS,
CveUsuario:=UsuarioActual.CveUsuario,
CveEmpresa:=UsuarioActual.CveEmpresa,
EstatusAlmacen:=EstatusAlmacen
)
TxtObservacionesMP.Text.Trim(),
DdlAlmacenOrigenMP.SelectedValue.ToEntero(),
DdlAlmacenDestinoMP.SelectedValue.ToEntero(),
Estatus,
-1,
NowADS,
CveUsuario:=UsuarioActual.CveUsuario,
CveEmpresa:=UsuarioActual.CveEmpresa,
EstatusAlmacen:=EstatusAlmacen
)
If FolioSolicitud > 0 Then
CveTraspasoSolicitud = ObjInventario.CveTraspasoSolicitud
@@ -743,7 +738,6 @@ Partial Class OP_OP
Next
End If
If Not TieneError Then
ObjInventario.Commit()
Alert($"Solicitud de Traspaso guardada. Folio: <b>{FolioSolicitud}</b>", TipoMensaje.MsgInformacion)
@@ -775,8 +769,6 @@ Partial Class OP_OP
Try
If Me.CveOP = -1 Then ' Modo CREACIÓN
Dim xmlProductos As String = DataTableToXML(DtPS)
@@ -925,18 +917,14 @@ Partial Class OP_OP
' 1. Cargar almacén de salida (Tipo 28)
DdlAlmacenOrigenSalidaMP.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 28")
DdlAlmacenOrigenSalidaMP.DataBind()
' 2. Cargar almacén de producto terminado
DdlAlmacenTerminado.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 1")
DdlAlmacenTerminado.DataBind()
DdlAlmacenTerminado.Items.Insert(0, New ListItem("Seleccionar almacén", "-1"))
' Almacén de Devoluciones (Tipo 1)
DdlAlmacenDevolucion.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 1")
DdlAlmacenDevolucion.DataBind()
DdlAlmacenDevolucion.Items.Insert(0, New ListItem("Seleccionar almacén", "-1"))
' 3. Cargar GridViews
GvProductoTerminado.DataSource = DtPS.FiltraParametros("Tipo = 'Producto'")
GvProductoTerminado.DataBind()
@@ -1010,8 +998,12 @@ Partial Class OP_OP
ObjInventario.IniciaTransacSQL()
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim ObjOP As New ClsOP(ObjInventario.IniciaTransacSQL())
Try
Dim TotalMPProducto As Decimal = 0
Dim TotalMOProducto As Decimal = 0
Dim TotalCIProducto As Decimal = 0
Try
'Salida de MP
CveMovimientoSalida = ObjInventario.AddMovimiento(DdlAlmacenOrigenSalidaMP.SelectedValue.ToEntero(), TipoMovimientoSalida, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:="Finalización OP #" & LblFolio.Text, Modulo:="OP/FinalizarOPSalida")
FolioEntrada = ObjInventario.Folio
Dim DtMPAlmacen As DataTable = Nothing
@@ -1034,18 +1026,13 @@ Partial Class OP_OP
End If
DtMPAlmacen = ObjInventario.DtResultados.Copy()
' 5. Calcular TotalCostoMP (ya está actualizado)
' 5. Calcular TotalCostoMP
TotalCostoMP = ObjInventario.DtResultados.SUMD("Total")
Dim CostosPorProducto As New Dictionary(Of Integer, Decimal)
' 1. Recorrer cada Producto Terminado en la OP
For Each rowProducto As DataRow In DtPS.Select("Tipo = 'Producto'")
Dim CvePSProducto As Integer = rowProducto("Clave").ToString.ToEntero()
Dim CantidadProducto As Decimal = rowProducto("Cantidad").ToString.ToDecimal()
Dim TotalMPProducto As Decimal = 0
Dim TotalMOProducto As Decimal = 0
Dim TotalCIProducto As Decimal = 0
' 2. Calcular Costo de Materias Primas por Producto
For Each rowMP As DataRow In DtMP.Select($"Clave = {CvePSProducto}")
@@ -1064,10 +1051,13 @@ Partial Class OP_OP
For Each rowCI As DataRow In DtCI.Select($"Clave = {CvePSProducto}")
TotalCIProducto += rowCI("Total").ToString.ToDecimal()
Next
' 5. Determinar las devoluciones del Producto
Dim TotalDevPT As Decimal = GvMPUtilizada.Rows.Cast(Of GridViewRow)().Where($"datakey.cvepspt = {CvePSProducto}").Sum(Function(row) DirectCast(row.FindControl("TxtDevolucionMP"), TextBox).Text.ToDecimal())
' 5. Sumar Total por Producto (MP + MO + CI)
Dim TotalProducto As Decimal = TotalMPProducto + TotalMOProducto + TotalCIProducto
CostosPorProducto.Add(CvePSProducto, TotalProducto)
' 6. Sumar Total por Producto (MP + MO + CI)
Dim TotalProducto As Decimal = TotalMPProducto + TotalMOProducto + TotalCIProducto - TotalDevPT
rowProducto("Costo") = TotalProducto
Next
' 2. PROCESAR DEVOLUCIONES SI EXISTEN
@@ -1082,7 +1072,6 @@ Partial Class OP_OP
CveMovimientoDev = ObjInventario.AddMovimiento(DdlAlmacenDevolucion.SelectedValue.ToEntero(), TipoMovimientoDev, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=$"Devolución OP #{LblFolio.Text}", Modulo:="OP/Devoluciones", CveMovimientoRelacionado:=CveMovimientoSalida)
If CveMovimientoDev > 0 Then
For Each row As GridViewRow In GvMPUtilizada.Rows
Dim Devolucion As Decimal = row.FCTextBox("TxtDevolucionMP").Text.ToDecimal()
@@ -1108,9 +1097,9 @@ Partial Class OP_OP
Next
End If
End If
End If
'ENTRADA DE PRODUCTO TERMINADO
If Not ErrorMovInv Then
CveMovimientoEntrada = ObjInventario.AddMovimiento(DdlAlmacenTerminado.SelectedValue.ToEntero(), CveConceptoEntrada, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:="Finalización OP #" & LblFolio.Text, Modulo:="OP/FinalizarOPEntrada", CveMovimientoRelacionado:=CveMovimientoSalida)
End If
@@ -1121,7 +1110,7 @@ Partial Class OP_OP
Dim PU_PT As Decimal = If(CantidadPT > 0, CostoPTAjustado / CantidadPT, 0)
For Each rowPT As DataRow In DtPS.Select("Tipo = 'Producto'")
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, rowPT("Cantidad").ToString.ToDecimal(), rowPT("CveUM").ToString.ToEntero(), rowPT("Clave").ToString.ToEntero(), PU_PT) Then
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, rowPT("Cantidad").ToString.ToDecimal(), rowPT("CveUM").ToString.ToEntero(), rowPT("Clave").ToString.ToEntero(), rowPT("Costo").ToString.ToDecimal()) Then
ErrorMovInv = True : TextoError = "x" : Exit For
End If
Next
@@ -1130,22 +1119,29 @@ Partial Class OP_OP
Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/OPFinalizada", 53, 0, 0, 1, Fecha, "Producción OP #" & LblFolio.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePoliza > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoMP, TotalCostoMP, 68, "Consumo MP OP #" & LblFolio.Text, "Consumo MP OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovimientoSalida) Then
ErrorMovInv = True
If CvePrePoliza > 0 Then
'salida MP
If CvePrePoliza > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoMP, TotalCostoMP, 68, "Consumo MP OP #" & LblFolio.Text, "Consumo MP OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovimientoSalida) Then
ErrorMovInv = True
End If
' entrada PT
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, CostoPTAjustado, CostoPTAjustado, 68, "Producción PT OP #" & LblFolio.Text, "Producción PT OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovimientoEntrada) Then
ErrorMovInv = True
End If
'dev MP
If Not ErrorMovInv AndAlso CostoDevoluciones <> 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, CostoDevoluciones, CostoDevoluciones, 95, "", $"OP #{LblFolio.Text}", CveMovimientoAlmacen:=CveMovimientoDev) Then
ErrorMovInv = True
End If
'costo indirecto
If Not ErrorMovInv AndAlso TotalCIProducto <> 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCIProducto, TotalCIProducto, 95, "Producción PT OP #" & LblFolio.Text, "Producción PT OP #" & LblFolio.Text) Then
ErrorMovInv = True
End If
'mano de obra
If Not ErrorMovInv AndAlso TotalCIProducto <> 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalMOProducto, TotalCIProducto, 95, "Producción PT OP #" & LblFolio.Text, "Producción PT OP #" & LblFolio.Text) Then
ErrorMovInv = True
End If
End If
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, CostoPTAjustado, CostoPTAjustado, 68, "Producción PT OP #" & LblFolio.Text, "Producción PT OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovimientoEntrada) Then
ErrorMovInv = True
End If
ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, CostoDevoluciones, CostoDevoluciones, 95, "", $"OP #{LblFolio.Text}", CveMovimientoAlmacen:=CveMovimientoDev)
'If Not ErrorMovInv Then
'If Not ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual) Then
'ErrorMovInv = True : TextoError = "Error en validación de póliza"

View File

@@ -103,7 +103,7 @@ Partial Class Ventas_RepVentasResumen
VxC = Nothing
End If
If ObjMovtos.GetRepRecuperacion(TxtFechaI.Text.ToDate, TxtFechaF.Text.ToDate, -1, DdlSubProyecto.SelectedValue.ToEntero, -1, -1, -1, "-1", UsuarioActual.CveEmpresa, 5, -1, "-1", CveUsuarioConsulta:=UsuarioActual.CveUsuario) Then
If ObjMovtos.GetRepRecuperacion(TxtFechaI.Text.ToDate, TxtFechaF.Text.ToDate, MinFecha, MaxFecha, -1, DdlSubProyecto.SelectedValue.ToEntero, -1, -1, -1, "-1", UsuarioActual.CveEmpresa, 5, -1, "-1", CveUsuarioConsulta:=UsuarioActual.CveUsuario) Then
Datos = ObjVentas.DtResultados
GvPxC.DataSource = Datos
Else