Cancelacion OP

This commit is contained in:
Luis Quijada
2025-04-22 12:42:12 -07:00
parent cf44233599
commit ececb24483
2 changed files with 207 additions and 1 deletions

View File

@@ -776,6 +776,16 @@
</div>
</div>
<div class="row mt-4">
<div class="col-md-12 d-flex justify-content-end">
<asp:Button ID="BtnCancelarOP" runat="server" Text="Cancelar OP"
CssClass="btn btn-danger" Visible="false"
OnClick="BtnCancelarOP_Click" />
</div>
</div>
<div id="DVModalFinalizarOP" class="modal ADS fade" role="dialog" data-backdrop="static">
<div class="modal-dialog" style="width: 750px;">
<asp:UpdatePanel runat="server" class="modal-content" ID="UpModalFinalizar" UpdateMode="Conditional">
@@ -877,6 +887,73 @@
<!-- Modal de Cancelación -->
<div id="DVModalCancelarOP" class="modal ADS fade" role="dialog" data-backdrop="static">
<div class="modal-dialog" style="width: 750px;">
<asp:UpdatePanel runat="server" class="modal-content" ID="UpModalCancelar" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Cancelar Orden de Producción #<%= LblFolio.Text %></h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-4 form-group">
<label>Almacén Salida MP:</label>
<asp:DropDownList ID="DdlAlmacenSalidaMP" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
<div class="col-md-4 form-group">
<label>Almacén Devoluciones:</label>
<asp:DropDownList ID="DdlAlmacenDevolucionCancel" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
<div class="col-md-4 form-group">
<label>Almacén Mermas:</label>
<asp:DropDownList ID="DdlAlmacenMermas" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
</div>
<div class="section-title">Materia Prima</div>
<asp:GridView ID="GvMPCancelacion" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%"
DataKeyNames="CvePSMateriaPrima,CveUMMateriaPrima">
<Columns>
<asp:BoundField DataField="PSCodigo" HeaderText="Producto" />
<asp:BoundField DataField="UnidadMedida" HeaderText="UM" />
<asp:BoundField DataField="Cantidad" HeaderText="Cantidad" DataFormatString="{0:N2}" ItemStyle-HorizontalAlign="Right" />
<asp:TemplateField HeaderText="Merma">
<ItemTemplate>
<asp:TextBox ID="TxtMerma" runat="server" Text="0"
CssClass="form-control" TextMode="Number" step="0.01" min="0" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Devolución">
<ItemTemplate>
<asp:TextBox ID="TxtDevolucionCancel" runat="server" Text="0"
CssClass="form-control" TextMode="Number" step="0.01" min="0" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div class="modal-footer">
<asp:Button ID="BtnAceptarCancelacion" runat="server"
Text="Aceptar Cancelación" CssClass="btn btn-primary"
OnClick="BtnAceptarCancelacion_Click" />
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</asp:Content>
@@ -892,7 +969,7 @@
}
}
</script>
</asp:Content>

View File

@@ -107,6 +107,8 @@ Partial Class OP_OP
CreaPS()
SetValues()
End If
BtnCancelarOP.Visible = (CveOP > 0 AndAlso TipoEstatus <> 3 AndAlso TipoEstatus <> 4)
End Sub
Private Sub CreaPS()
@@ -900,6 +902,133 @@ Partial Class OP_OP
End If
End Sub
#Region "Cancelar"
Protected Sub BtnCancelarOP_Click(sender As Object, e As EventArgs)
' Cargar almacenes
DdlAlmacenSalidaMP.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 1")
DdlAlmacenSalidaMP.DataBind()
DdlAlmacenDevolucionCancel.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 1")
DdlAlmacenDevolucionCancel.DataBind()
DdlAlmacenMermas.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen = 1")
DdlAlmacenMermas.DataBind()
' Cargar MP
GvMPCancelacion.DataSource = DtMP.FiltraParametros("Tipo = 'MP'")
GvMPCancelacion.DataBind()
RegistraScript("$('#DVModalCancelarOP').modal('show');")
UpModalCancelar.Update()
End Sub
Protected Sub BtnAceptarCancelacion_Click(sender As Object, e As EventArgs)
Dim ObjInventario As New ClsInventarios()
Dim TieneError As Boolean = False
Dim MensajeError As String = ""
ObjInventario.IniciaTransacSQL()
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim ObjOP As New ClsOP(ObjInventario.IniciaTransacSQL())
Try
' Validaciones
If DdlAlmacenSalidaMP.SelectedValue = "-1" OrElse
DdlAlmacenDevolucionCancel.SelectedValue = "-1" Then
Throw New Exception("Seleccione todos los almacenes requeridos")
End If
' 1. Movimiento de Salida MP
Dim CveMovSalida As Integer = ObjInventario.AddMovimiento(
DdlAlmacenSalidaMP.SelectedValue.ToEntero(), 26, 1, NowADS, -1,
UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa,
Observaciones:="Cancelación OP #" & LblFolio.Text)
' 2. Movimiento de Entrada Devoluciones
Dim CveMovEntradaDev As Integer = ObjInventario.AddMovimiento(
DdlAlmacenDevolucionCancel.SelectedValue.ToEntero(), 27, 1, NowADS, -1,
UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
' 3. Procesar cada material
For Each row As GridViewRow In GvMPCancelacion.Rows
Dim Cantidad As Decimal = CDec(row.Cells(2).Text)
Dim Merma As Decimal = row.FCTextBox("TxtMerma").Text.ToDecimal()
Dim Devolucion As Decimal = row.FCTextBox("TxtDevolucionCancel").Text.ToDecimal()
If (Merma + Devolucion) > Cantidad Then
Throw New Exception("La suma de merma y devolución no puede exceder la cantidad")
End If
Dim CvePS As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(0)
Dim CveUM As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(1)
' Registrar salida
ObjInventario.AddMovimientoDetalle(CveMovSalida, Cantidad, CveUM, CvePS, 0)
' Registrar devolución
If Devolucion > 0 Then
ObjInventario.AddMovimientoDetalle(CveMovEntradaDev, Devolucion, CveUM, CvePS, 0)
End If
Next
' 4. Registrar mermas si existen
Dim TotalMermas As Decimal = 0
If DdlAlmacenMermas.SelectedValue <> "-1" Then
Dim CveMovMerma As Integer = ObjInventario.AddMovimiento(
DdlAlmacenMermas.SelectedValue.ToEntero(), 26, 1, NowADS, -1,
UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
For Each row As GridViewRow In GvMPCancelacion.Rows
Dim Merma As Decimal = row.FCTextBox("TxtMerma").Text.ToDecimal()
If Merma > 0 Then
Dim CvePS As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(0)
Dim CveUM As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(1)
ObjInventario.AddMovimientoDetalle(CveMovMerma, Merma, CveUM, CvePS, 0)
TotalMermas += Merma
End If
Next
End If
' 5. Generar pólizas contables
Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OP/Cancelacion", 53, 0, 0, 1, NowADS,
"Cancelación OP #" & LblFolio.Text,
UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
' Salida MP (Abono 68)
ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMP, TotalMP, 68, "Salida MP Cancelación")
' Entrada Devoluciones (Cargo 68)
ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalDevoluciones, TotalDevoluciones, 68, "Devoluciones Cancelación")
If TotalMermas > 0 Then
' Salida Mermas (Abono 68)
ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMermas, TotalMermas, 68, "Mermas Cancelación")
' Cargo Mermas (95)
ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalMermas, TotalMermas, 95, "Ajuste por Mermas")
End If
' 6. Actualizar estatus OP
If ObjOP.UpdateEstatusOP(CveOP, 4, UsuarioActual.CveEmpresa) Then
ObjInventario.Commit()
TxtEstatus.Text = "Cancelado"
BtnCancelarOP.Visible = False
UpOP.Update()
RegistraScript("$('#DVModalCancelarOP').modal('hide');")
Alert("OP cancelada correctamente", TipoMensaje.MsgInformacion)
Else
Throw New Exception("Error al actualizar el estatus de la OP")
End If
Catch ex As Exception
ObjInventario.RollBack()
Alert($"Error: {ex.Message}", TipoMensaje.MsgError)
Finally
ObjInventario.Dispose()
ObjConta.Dispose()
End Try
End Sub
#End Region
#Region "Finalizar"