Files
SIG/OP/OP.aspx
2025-06-07 13:21:09 -06:00

1007 lines
48 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%@ Import Namespace="Extensiones" %>
<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="OP.aspx.vb" Inherits="OP_OP" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CP" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Css" runat="Server">
<style>
.v-center {
display: flex;
align-items: center;
}
.ajax__calendar_container {
position: fixed !important;
}
.one {
margin: 10px;
padding: 10px;
}
.btn-verde {
color: #32c5d2;
background-color: #fff;
border-color: #32c5d2;
}
.btn-verde .fa-plus {
color: #32c5d2 !important;
}
.btn-verde:hover {
color: #fff;
background-color: #32c5d2;
border-color: #32c5d2;
}
.btn-verde:hover .fa-plus {
color: white !important;
}
.table-scrollable {
margin-top: 0px !important;
margin-bottom: 0px !important;
}
.Widthall {
width: 100% !important;
}
.dataTables_scrollHeadInner {
width: 100% !important;
background-color: #dddddd;
padding-left: 0px !important;
}
.dataTables_scrollFoot {
display: none;
position: static;
}
.table-scrollable {
margin: 0px !important;
}
.dataTables_scroll {
margin-bottom: 0px;
}
.table.dataTable {
margin-top: 0px !important;
}
.dataTables_scrollBody table th {
padding: 0px !important;
padding-right: 4px !important;
padding-left: 4px !important;
}
.sinlink td a {
pointer-events: none;
cursor: default;
color: black;
font-size: small;
}
.white a {
color: white !important;
}
.Derecha {
text-align: right;
}
.Izquierda {
text-align: left;
}
.SinColor th {
background-color: white;
}
.Excede {
overflow: hidden;
text-overflow: ellipsis;
}
.truncate {
width: 300px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.select2 .select2-selection__rendered {
line-height: 1;
color: #111;
}
.select2 .select2-selection--multiple {
box-sizing: border-box;
cursor: pointer;
display: block;
min-height: 20px;
user-select: none;
-webkit-user-select: none;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
margin-top: 10px;
}
.select2-selection__rendered {
margin-top: 0px;
height: 25px;
}
.select2-selection {
margin-top: 0px;
height: 31px;
}
.select2-container--default.select2-container--focus .select2-selection--multiple {
border: none;
outline: 0;
}
#chartdiv {
width: 100%;
height: 250px;
}
#chartdiv2 {
width: 100%;
height: 250px;
}
#chartdiv3 {
width: 100%;
height: 250px;
}
#chartdiv4 {
width: 100%;
height: 250px;
}
.orange {
color: orange;
background-color: orange;
}
.tooltip-inner {
max-width: 750px !important;
font-size: 14px;
}
.arrow {
left: 20%;
}
.popover {
width: 500px !important;
max-width: 500px !important;
}
.modalBackground {
background-color: Black;
filter: alpha(opacity=90);
opacity: 0.8;
}
.select2anothertable {
position: absolute;
left: 100%;
background-color: white;
/*top: 50px;*/ top: 21px;
/*max-height: 200px;*/ max-height: 229px;
/*background-color: #dcdcdc;*/
overflow: hidden;
}
.select2anothertable > table > tbody > tr > td:nth-of-type(odd) {
background-color: rgba(220, 220, 220, 0.45);
}
.select2anothertable > table > tbody > tr > td {
line-height: 21px;
white-space: nowrap;
}
.select2anothertable > table > tbody > tr.active {
background-color: #5897fb;
}
#C_TrDescuentoProntoPago > td:nth-child(3) > span:nth-child(1) > label:nth-child(2) {
white-space: nowrap;
}
.op-container {
max-width: 1400px;
margin: 20px auto;
padding: 20px;
}
.op-header {
text-align: left;
border-bottom: 2px solid #e0e0e0;
padding-bottom: 15px;
margin-bottom: 25px;
}
.op-title {
font-size: 24px;
color: #2c3e50;
margin: 0;
}
.op-section {
margin-bottom: 25px;
text-align: left;
}
.op-field {
margin-bottom: 15px;
}
.op-label {
font-weight: bold;
color: #7f8c8d;
margin-bottom: 5px;
display: block;
}
.op-input {
width: 100%;
max-width: 400px;
}
.op-date-section {
margin-top: 30px;
padding-top: 15px;
border-top: 1px solid #eee;
}
.op-status {
font-size: 16px;
font-weight: bold;
}
.section-title {
font-weight: bold;
background-color: #CCC;
padding: 5px;
margin-top: 10px;
}
.quantity-control {
position: relative;
display: flex;
align-items: center;
width: 120px;
}
.quantity-input {
width: 70px !important;
padding-right: 30px;
}
.quantity-buttons {
position: absolute;
right: 0;
display: flex;
flex-direction: column;
gap: 2px;
}
.btn-quantity {
padding: 0;
width: 22px;
height: 18px;
line-height: 1;
border: 1px solid #ddd;
background: #f8f9fa;
cursor: pointer;
}
/* Alinear celda y contenido a la derecha */
.celda-derecha {
text-align: right !important;
}
.txt-merma {
/* Ancho reducido al 50% */
margin-left: 30px !important; /* Mueve el TextBox a la derecha dentro de la celda */
display: block !important; /* Permite que margin-left:auto funcione */
/* Alinea el texto interno a la derecha */
}
</style>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="E" runat="Server">
Orden de Producción
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="HB" runat="Server">
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="H" runat="Server">
</asp:Content>
<asp:Content ID="Content6" ContentPlaceHolderID="HA" runat="Server">
</asp:Content>
<asp:Content ID="Content7" ContentPlaceHolderID="C" runat="Server">
<!-- Aquí se muestra la información de la OP -->
<div class="row">
<asp:UpdatePanel ID="UpOP" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="col-md-6">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Orden de producción #<asp:Label ID="LblFolio" runat="server"></asp:Label></span>
</div>
</div>
<div class="portlet-body form">
<div class="labeltruncate labeltext labelbold">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="<%= DdlClientes.ClientID.ToString()%>">Cliente</label>
<ADS:Dropdownlost ID="DdlClientes" runat="server"
CssClassDdl="form-control" DataTextField="NombreComercial"
data-metodo="getcliente"
DataValueField="CveCliente" Enabled="false" />
</div>
</div>
<!-- Columna Fecha-->
<div class="col-md-3">
<div class="form-group">
<label>Fecha</label>
<div class="input-group input-sm input-small date date-picker" style="height: 30px;" data-date-format="dd/mm/yyyy">
<asp:TextBox ID="Txtfecha" runat="server"
CssClass="form-control"
Style="margin-top: -6px;"
Width="100%"
CausesValidation="true"
MaxLength="10"></asp:TextBox>
<span class="input-group-btn">
<asp:LinkButton ID="imgCalendarioF" class="btn default " Style="margin-top: -11px; height: 29px;" Text="<i class='fa fa-calendar'></i>" runat="server"></asp:LinkButton>
</span>
</div>
<ajax:MaskedEditExtender ID="MEEFechaF" runat="server" TargetControlID="Txtfecha" Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left"></ajax:MaskedEditExtender>
<ajax:CalendarExtender runat="server" ID="Calendario2" TargetControlID="Txtfecha" PopupButtonID="imgCalendarioF" PopupPosition="BottomRight" Enabled="True"></ajax:CalendarExtender>
<asp:RequiredFieldValidator ID="rfvFechaF" runat="server" ControlToValidate="Txtfecha" Display="None" ErrorMessage="El campo <b>''Fecha Final''</b> es requerido por la aplicación, por favor ingrese una fecha." ValidationGroup="Valida"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvFechaF" runat="server" ControlToValidate="Txtfecha" Display="None" ErrorMessage="El campo <b>''Fecha Final''</b> no tienes el formato correcto, por favor intente de nuevo con el siguiente formato: (dd/mm/yyyy)." Operator="DataTypeCheck" Type="Date" ValidationGroup="Valida"></asp:CompareValidator>
<ajax:ValidatorCalloutExtender ID="vcoRfvFF" runat="server" HighlightCssClass="vco" TargetControlID="rfvFechaF" Width="350px"></ajax:ValidatorCalloutExtender>
<ajax:ValidatorCalloutExtender ID="vcoCvFF" runat="server" HighlightCssClass="vco" TargetControlID="cvFechaF" Width="350px"></ajax:ValidatorCalloutExtender>
</div>
</div>
</div>
</div>
<!-- Centro de Costo -->
<div class="portlet-body form" style="margin-top: -15px;">
<div class="labeltruncate labeltext labelbold">
<div class="row">
<div class="col-md-16">
<div class="form-group">
<asp:Label ID="LblProyecto" runat="server">
<label>Proyecto:</label>
</asp:Label>
<div runat="server" id="DivProyecto">
<asp:DropDownList ID="DdlProyecto" runat="server" AutoPostBack="true" AppendDataBoundItems="true" DataTextField="Proyecto" DataValueField="CveProyecto" Class="form-control select2me" Style="width: 100%;"></asp:DropDownList>
</div>
<asp:Label ID="LblSubProyecto" runat="server" class="col-md-2">
<label>Subproyecto:</label>
</asp:Label>
<div runat="server" id="DivSubProyecto" class="col-md-4">
<asp:DropDownList ID="DdlSubProyecto" runat="server" AppendDataBoundItems="true" DataTextField="SubProyecto" DataValueField="CveSubProyecto" Class="form-control select2me" Style="width: 100%;"></asp:DropDownList>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Descripción -->
<div class="row">
<div class="col-md-10">
<div class="form-group form-md-line-input input-iconright">
<asp:TextBox ID="TxtDescripcion" runat="server"
CssClass="form-control"
Style="width: 95%; height: 40px;"
ValidationGroup="GrpGuardar"
TextMode="MultiLine"
Rows="2"
MaxLength="1000" />
<asp:RequiredFieldValidator ID="RFVDescripcion" runat="server"
ControlToValidate="TxtDescripcion"
ErrorMessage="Descripción requerida"
Display="None"
CssClass="text-danger"
ValidationGroup="GrpGuardar" />
<label for="<%= TxtDescripcion.ClientID.ToString()%>">Descripcion</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Estatus</span>
</div>
</div>
<div class="portlet-body form">
<asp:Label ID="TxtEstatus" runat="server" CssClass="form-control" Width="150px"></asp:Label>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<!-- GridViews -->
<asp:UpdatePanel ID="UpGvDatosOP" runat="server" UpdateMode="Conditional" style="margin-top: -170px;">
<ContentTemplate>
<div class="row">
<div class="col-md-12">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Productos</span>
</div>
</div>
<div class="portlet-body">
<div class="row">
<div id="PanelProducto" runat="server">
<asp:Label ID="LblProducto" class="col-md-1" runat="server" Style="max-width: 70px;" Text="Producto"></asp:Label>
<div class="col-md-3">
<ADS:Dropdownlost ID="DdlPS" runat="server" Width="100%" CssStyle="width: 100%;"
CssClass="select2me"
CssClassDdl="form-control" DataTextField="PSCodigo"
DataValueField="CvePS" Enabled="false" />
</div>
</div>
<div class="col-md-4 d-flex align-items-center" style="gap: 10px;">
<asp:LinkButton ID="BtnAgregarProducto" runat="server"
CssClass="btn btn-primary"
Style="padding: 4px 10px; border-radius: 50%;"
ValidationGroup="GrpAgregarProducto">
<i class="fa fa-plus"></i>
</asp:LinkButton>
<!-- Botón de Simulación -->
<asp:LinkButton ID="BtnSimularMP" runat="server" Text="Simular MP"
CssClass="btn btn-primary" OnClick="BtnSimularMP_Click" Visible="false"
Style="padding: 4px 10px; border-radius: 50%;">
<i class="fa fa-cogs"></i>
</asp:LinkButton>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="section-title">Productos</div>
<asp:GridView ID="GvProductos" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%"
OnRowDataBound="GvProductos_RowDataBound">
<Columns>
<asp:BoundField DataField="PSCodigo" HeaderText="Producto" />
<asp:BoundField DataField="UnidadMedida" HeaderText="UM" />
<asp:BoundField DataField="Cantidad" HeaderText="Cantidad" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="BtnEliminar" runat="server"
CommandArgument='<%# Eval("CvePS") %>'
OnClick="BtnEliminarProducto_Click"
CssClass="btn btn-circle btn-xs red"
Text="<i class='icon-trash'></i>" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Materia Prima</span>
</div>
<div class="col-md-4 d-flex align-items-center" style="gap: 10px;">
<asp:LinkButton ID="LnkSolicitarMP" runat="server"
CssClass="btn btn-success"
OnClick="LnkSolicitarMP_Click"
Style="padding: 4px 10px; border-radius: 50%;"
Visible="false">
Solicitar MP
</asp:LinkButton>
</div>
</div>
<div class="portlet-body">
<div class="section-title">Materia prima</div>
<asp:GridView ID="GvMateriaPrima" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%">
<Columns>
<asp:BoundField DataField="PSCodigo" HeaderText="Producto" />
<asp:BoundField DataField="UnidadMedida" HeaderText="UM" />
<asp:BoundField DataField="Cantidad" HeaderText="Cantidad" DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
<asp:BoundField DataField="Surtido" HeaderText="Surtido" DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Mano de Obra</span>
</div>
</div>
<div class="portlet-body">
<div class="section-title">Mano de obra</div>
<asp:GridView ID="GvManoObra" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%">
<Columns>
<asp:BoundField DataField="Puesto" HeaderText="Puesto" />
<asp:BoundField DataField="Cantidad" HeaderText="Cantidad" DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
<div class="col-md-6">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Costo Indirecto</span>
</div>
</div>
<div class="portlet-body">
<div class="section-title">Costo indirecto</div>
<asp:GridView ID="GvCostosIndirectos" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%">
<Columns>
<asp:BoundField DataField="productoMateriaPrima" HeaderText="Producto" />
<asp:BoundField DataField="ImporteCostoIndirecto" HeaderText="Costo" DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<div id="DVModalSolicitarMP" class="modal ADS fade" role="dialog" data-backdrop="static">
<div class="modal-dialog" style="width: 750px;">
<asp:UpdatePanel runat="server" class="modal-content" ID="UpModalMP" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Solicitar Materia Prima - OP #<%= LblFolio.Text %></h4>
</div>
<div class="modal-body">
<!-- Almacenes -->
<div class="row">
<div class="col-md-6 form-group">
<label>Almacén Origen:</label>
<asp:DropDownList ID="DdlAlmacenOrigenMP" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" AutoPostBack="true"
OnSelectedIndexChanged="DdlAlmacenOrigenMP_SelectedIndexChanged" />
</div>
<div class="col-md-6 form-group">
<label>Almacén Destino:</label>
<asp:DropDownList ID="DdlAlmacenDestinoMP" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
</div>
<div class="row marginRowLeft">
<div class="col-md-12 form-group">
<label>Observaciones:</label>
<asp:TextBox ID="TxtObservacionesMP" runat="server"
CssClass="form-control" TextMode="MultiLine" Rows="3"
MaxLength="500" placeholder="Ingrese observaciones..." />
</div>
</div>
<!-- Grid de productos agregados -->
<asp:GridView ID="GvMPAgregados" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%"
DataKeyNames="CvePSMateriaPrima,CveUMMateriaPrima, Cantidad" EmptyDataText="No se encontraron Productos registrados" ToolTip="Listado de Productos">
<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" />
</Columns>
</asp:GridView>
</div>
<div class="modal-footer">
<asp:Button ID="BtnGuardarSolicitudMP" runat="server"
Text="Guardar Solicitud" CssClass="btn btn-primary"
OnClick="BtnGuardarSolicitudMP_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<div id="DVModalSimularMP" class="modal fade" role="dialog" data-backdrop="static">
<div class="modal-dialog" style="width: 750px;">
<asp:UpdatePanel ID="UpModalSimular" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Simulación de Materia Prima -
<span id="SpanNombreProducto" runat="server"></span>
</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="portlet light xspadding bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase">Simulación</span>
</div>
<div class="row">
<div class="col-md-12">
<asp:RadioButtonList ID="RblModoSimulacion" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="RblModoSimulacion_SelectedIndexChanged" RepeatDirection="Horizontal">
<asp:ListItem Text="Por Cantidad" Value="1" Selected="True"></asp:ListItem>
<asp:ListItem Text="Por Existencias" Value="2"></asp:ListItem>
</asp:RadioButtonList>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>Almacén:</label>
<asp:DropDownList ID="DdlAlmacenSimular" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control" AutoPostBack="true"
OnSelectedIndexChanged="DdlAlmacenSimular_SelectedIndexChanged"
AppendDataBoundItems="True">
<asp:ListItem Text="Selecciona el almacén" Value="-1" Selected="True"></asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="row">
<asp:Panel ID="PnlCantidad" runat="server" class="col-md-2">
<label>Cantidad:</label>
<asp:TextBox ID="TxtCantidadSimular" runat="server"
CssClass="form-control" TextMode="Number" Min="1" Value="1" AutoPostBack="true" OnTextChanged="TxtCantidadSimular_TextChanged" />
</asp:Panel>
</div>
<div class="row">
<asp:Label ID="LblCantidadPosibleGlobal" runat="server" Class="col-md-2"
Visible="false">
<strong>Cantidad:</strong> <span id="SpanCantidad">0</span>
</asp:Label>
</div>
<div class="section-title">Materia prima</div>
<asp:GridView ID="GvSimulacionMP" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover"
GridLines="None" Width="100%" DataKeyNames="CvePS,CveUM">
<Columns>
<asp:BoundField DataField="productoMateriaPrima" HeaderText="Producto" />
<asp:BoundField DataField="CantidadUnitaria" HeaderText="Cantidad Unitaria"
DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
<asp:BoundField DataField="Disponible" HeaderText="Disponible"
DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right" />
<asp:BoundField DataField="TotalRequerido" HeaderText="Total Requerido"
DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right"
Visible="false" />
<asp:BoundField DataField="Faltante" HeaderText="Faltante"
DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right"
Visible="false" />
<asp:BoundField DataField="CantidadPosible" HeaderText="Cantidad Producible"
DataFormatString="{0:#,##0.####}" ItemStyle-HorizontalAlign="Right"
Visible="false" />
</Columns>
</asp:GridView>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<!-- Área de acción: Guardar, Terminar y Cancelar -->
<asp:UpdatePanel runat="server" ID="UpBtns" UpdateMode="Conditional">
<ContentTemplate>
<div class="row mt-4">
<div class="col-md-12 d-flex justify-content-end align-items-center">
<!-- Botón Guardar -->
<asp:Button
ID="BtnGuardarOP" runat="server"
Text="Guardar Orden de Producción"
CssClass="btn btn-success me-2"
OnClick="BtnGuardarOP_Click"
ValidationGroup="GrpGuardar" />
<!-- Botones Derecha: Terminar y Cancelar -->
<asp:Button
ID="BtnFinalizarOP" runat="server"
Text="Terminar"
CssClass="btn btn-success mr-2"
OnClick="BtnFinalizarOP_Click"
Visible="false" />
<asp:Button
ID="BtnCancelarOP" runat="server"
Text="Cancelar OP"
CssClass="btn btn-danger"
OnClick="BtnCancelarOP_Click"
Visible="false" />
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<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">
<ContentTemplate>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Finalizar Orden de Producción #<%= LblFolio.Text %></h4>
</div>
<div class="modal-body">
<!-- Sección de Almacenes -->
<div class="row">
<!-- Almacén Salida MP -->
<div class="col-md-4 form-group">
<label>Almacén Salida (MP):</label>
<asp:DropDownList ID="DdlAlmacenOrigenSalidaMP" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
<!-- Almacén Entrada PT -->
<div class="col-md-4 form-group">
<label>Almacén Entrada (PT):</label>
<asp:DropDownList ID="DdlAlmacenTerminado" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
<!-- Almacén Devoluciones -->
<div class="col-md-4 form-group">
<label>Almacén Devoluciones:</label>
<asp:DropDownList ID="DdlAlmacenDevolucion" runat="server"
DataTextField="Almacen" DataValueField="CveAlmacen"
CssClass="form-control select2me" />
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="section-title">Producto Terminado</div>
<asp:GridView ID="GvProductoTerminado" runat="server" AutoGenerateColumns="False"
CssClass="table table-striped table-hover" GridLines="None" Width="100%"
OnRowDataBound="GvProductoTerminado_RowDataBound">
<Columns>
<asp:BoundField DataField="PSCodigo" HeaderText="Producto" />
<asp:BoundField DataField="UnidadMedida" HeaderText="UM" />
<asp:TemplateField HeaderText="Cantidad">
<ItemTemplate>
<asp:TextBox ID="TxtCantidadPT" runat="server"
Text='<%# Bind("Cantidad") %>'
CssClass="form-control"
Style="text-align: right;"
TextMode="Number"
min="0"
step="1"
data-original='<%# Eval("Cantidad") %>'
onchange="validarCantidad(this)"
ItemStyle-HorizontalAlign="Right" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div class="col-md-12">
<div class="section-title">Materia Prima</div>
<asp:GridView ID="GvMPUtilizada" runat="server" AutoGenerateColumns="False" DataKeyNames="CvePS, CvePSMateriaPrima, CveUMMateriaPrima"
CssClass="table table-striped table-hover" GridLines="None" Width="100%">
<Columns>
<asp:BoundField DataField="PSCodigo" HeaderText="Producto" />
<asp:BoundField DataField="Cantidad" HeaderText="Cantidad" DataFormatString="{0:N2}" ItemStyle-HorizontalAlign="Right" />
<asp:TemplateField HeaderText="Devolución">
<ItemTemplate>
<asp:TextBox ID="TxtDevolucionMP" runat="server"
Text="0"
Style="width: 50%; text-align: right; margin-left: 38px; display: block;"
TextMode="Number"
min="0"
step="1"
data-original='<%# Eval("Cantidad") %>'
onchange="validarCantidad(this)" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</div>
</div>
<div class="modal-footer">
<asp:Button ID="BtnGuardarFinalizarOP" runat="server" Text="Guardar"
CssClass="btn btn-primary" OnClick="BtnGuardarFinalizarOP_Click" />
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<!-- 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="txt-merma" TextMode="Number" step="0.01" min="0"
Style="width: 50%; text-align: right;"
onchange="calcularDevolucion(this);"
data-original='<%# Eval("Cantidad")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Devolución" ItemStyle-CssClass="celda-derecha">
<ItemTemplate>
<asp:Label ID="LblDevolucion" runat="server" Text='<%# Eval("Cantidad", "{0:N2}") %>' CssClass="devolucion-label" Style="text-align: right;" />
<asp:HiddenField ID="HfDevolucion" runat="server" Value='<%# Eval("Cantidad", "{0:N2}") %>' />
</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>
<asp:Content ID="Content8" ContentPlaceHolderID="JS" runat="Server">
<script>
function validarCantidad(input) {
var valor = parseFloat(input.value) || 0;
var maximo = parseFloat(input.getAttribute('data-original')) || 0;
if (valor > maximo) {
input.value = maximo.toFixed(4);
alert("¡La cantidad no puede superar el valor original!");
}
}
function calcularDevolucion(input) {
var cantidadOriginal = parseFloat(input.dataset.original) || 0; // Usar dataset.original
var merma = parseFloat(input.value) || 0;
if (merma > cantidadOriginal) {
input.value = cantidadOriginal.toFixed(2);
merma = cantidadOriginal;
}
var devolucion = cantidadOriginal - merma;
var row = input.closest('tr');
row.querySelector('.devolucion-label').innerText = devolucion.toFixed(2);
row.querySelector('[id$="HfDevolucion"]').value = devolucion.toFixed(2);
}
</script>
</asp:Content>