<script type="text/javascript">
//AQUI SE ASIGNA EL ULTIMO ELMENTO INPUT DEL CODIGO DE ITEM A LA HORA DE HACER CLICK EN EL [AGREGAR ITEM]
var global_elm = null;
</script>

<table class="marco" width="100%" border="0" style="">
    <tr>
        <td>
            <input id="btnAgregar" type="button" class="button" value="[+] Productos" onclick=""/>
            <input id="btnAgregarRefe" type="button" class="button" value="[+] Referencia" onclick=""/>
            <!--<button type="button" id="btnAgregarSrv" class="button">[-] Servicios</button>-->
            <script>
            $( "#btnAgregar" )
            .click
            (
                function()
                {
                    if( $( "#IdCompania" ).val() == "" )
                    {
                        alert( "Debe de seleccionar la empresa o iniciar session." );
                        return false;
                    }
                    if( $( "#IdAlmacen" ).val() == "" )
                    {
                        alert( "Debe de seleccionar el almacen." );
                        return false;
                    }
                    $( "#content_nvo" ).append( $( "#content_copy_nvo" ).html() );
                    $( "#content_nvo tr:last input:first" ).focus();
                    //global_elm = $( "#content_nvo tr:last input:first" )[0];
                    global_elm = $( "#content_nvo tr:last input:eq(0)" )[0];

                    var valor_trans = $( "[name='IdTransaccionOperacion']:checked" ).val();
                    switch ( valor_trans )
                    {
                        case "I":
                            $( "#content_nvo tr:last [alias='linea_salida']" ).hide();
                            $( "#content_nvo tr:last [alias='linea_ingreso']" ).show();
                        break;
                        case "E":
                            $( "#content_nvo tr:last [alias='linea_salida']" ).show();
                            $( "#content_nvo tr:last [alias='linea_ingreso']" ).hide();
                        break;
                    }
                    openPopup();
                }
            );
            $( "#btnAgregarSrv" ).click
                (
                    function()
                    {
                        $( "#content_nvo" ).append( $( "#content_copy_nvo" ).html() );
                        $( "#content_nvo tr:last input:first" ).focus();
                        buscarServiciosPopup();
                    }
                );
            $( "#btnAgregarRefe" ).click
            (
                function()
                {
                    buscarReferenciaPopup();
                }
            );
            </script>
        </td>
        <td align="right">
            <input id="btnAgregarRefe" type="button" class="button" value="Limpiar" onclick="$( '#content_nvo' ).html( '' );"/>
        </td>
    </tr>
</table>


<fieldset style="padding-left: 6px; padding-right: 6px; margin-top: 0;border-left: 1px solid #999999; border-right: 1px solid #999999; margin-left: 0; margin-right: 0;">
    <div id="content_result_grid1">
        <table class="grid" cellspacing="0" cellpadding="3" border="0" align="center" width="100%" style="border-bottom: 1px solid #999999;">
            <tbody id="">
                <tr>
                    <td width="2%"  align="center" class="header"><b>No</b></td>
                    <td width="10%" align="center" class="header"><b>C&oacute;digo</b></td>
                    <td width="30%" align=""       class="header"><b>Descripci&oacute;n</b></td>

                    <?php if( myUser::getUser()->getObjectCompania()->getMostrarNumeroLote() ){ ?>
                    <td width="20%" align="center" class="header"><b>Lote<br>F.Vencimiento</b></td>
                    <?php } ?>
                    
                    <td width="10%" align="center" class="header"><b>Stock Actual</b></td>
                    <td width="10%" align="center" class="header"><b>Uni.Medida</b></td>
                    <td width="10%" align="center" class="header"><b>Cantidad</b></td>
                    
                    <td width="10%" align="center" class="header"><b>Costo Con IGV</b></td>
                    
                    <td width="5%"  align="center" class="header">&nbsp;</td>
                </tr>
            </tbody>
            <tbody id="content_nvo">
            </tbody>

            <!--
            <tbody>
                <tr>
                    <td colspan="5"></td>
                    <td style="text-align: right;"><b>TOTAL:</b></td>
                    <td  class="text-center">
                        <input type="hidden" name="SumaMontoSubTotal" id="SumaMontoSubTotal" value="">
                        <input type="hidden" name="SumaMontoIGV" id="SumaMontoIGV" value="">
                        <input type="text" class="form-control text-right" name="SumaMontoTotal" id="SumaMontoTotal" value="" readonly="">
                    </td>
                    <td style=""></td>
                </tr>
            </tbody>
            -->
            
        </table>
    </div>
</fieldset>

<div id="content_result_grid_pl1" style="display:none;">
    <table class="grid" cellspacing="0" cellpadding="0" borde r="0" align="center" width="100%" style="border-bottom: 1px solid #999999;">
        <tbody id="content_copy_nvo">
            <tr>
                <td align="center">&nbsp;</td>
                <td align="center">
                    <input type="text" class="text" name="IdItem[]" style="width: 150px; text-align: center;" onkeyup="eventoPopup( event, this );" onblur="executeFindItem( this );" onfocus="this.select()">
                    <input type="hidden" name="IdOrdenClasificacion[]" value="">
                </td>
                <td style="cursor:pointer; color:#2743B2; text-decoration:underline;" onclick="buscarResumenStock( $( $( this ).closest( 'tr' ) ).find( 'input[name=\'IdItem[]\']' ).val() );" >&nbsp;</td>

                <?php if( myUser::getUser()->getObjectCompania()->getMostrarNumeroLote() ){ ?>
                <td align="center" >
                    <div alias="linea_salida" style="display: none;">
                        <select class="combo" name="IdLote[]" onchange="buscarStockActual( this );" style="width: 90%;"></select>
                    </div>
                    <div alias="linea_ingreso" style="display: none;">
                        <input type="text" class="text" name="NumeroLote[]" title="Numero de Lote"
                                style="width:50%;text-align:center;" alias="numerolote"  onkeypress="return ImputCheckAlphanumeric( event, this );"
                                onfocus="this.select()" placeholder="Numero Lote" autocomplete="off"
                                onblur="buscarStockActualxNumLote( this, this.value );">
                        <input type="text" class="text" name="FechaVencimiento[]" title="Fecha de Vencimiento"
                                style="width:50%;text-align:center;" placeholder="anio-mes-dia" autocomplete="off"
                                alias="fechavencimiento">
                    </div>
                </td>
                <?php } ?>

                <td align="center" class="stock">&nbsp;</td>
                <td align="center" >
                    <select class="combo" name="IdUnidad[]" onchange="buscarStockActualPorUnidad( this );">
                        <option value=""> - SELECCIONE - </option>
                        <?php foreach ( MST_UnidadMastFN::selectActivos() as $i_Key => $o_MST_UnidadMastBN ){ ?>
                        <option value="<?=$o_MST_UnidadMastBN->getIdUnidad()?>"> <?=$o_MST_UnidadMastBN->getDescripcionCorta()?> </option>
                        <?php } ?>
                    </select>
                </td>
                <td align="center">
                    <input type="text" class="text" name="Cantidad[]" style="width: 100px; text-align: center;" onkeypress="return NumCheckDecimal( event, this );" onfocus="this.select()" autocomplete="off">
                </td>
                
                <td align="center">
                    <input type="text" class="text" name="PrecioUnitario[]" style="width: 100px; text-align: center;" onkeypress="return NumCheckDecimal( event, this );" onfocus="this.select()">
                </td>
                
                <td align="center">
                    <img src="<?=getUrlImage( "btnDelete.gif" )?>" title="Eliminar" onclick="$( $( this ).closest( 'tr' ) ).remove();" style="cursor:pointer">
                </td>
            </tr>
        </tbody>
    </table>
</div>

<?=crearPopupResumenStock( array( "name_function"=>"buscarResumenStock" ) )?>
<?=crearFuentePopupIframe( array( "div_id"=>"dialog", "iframe_id"=>"myIframe", "popup_title"=>"", "modal"=>true ) )?>

<script>
    // Uso del sleep en una función async
    function sleep( ms )
    {
        return new Promise( resolve => setTimeout( resolve, ms ) );
    }

    async function buscarCodigosParaAgregar( jsonString )
    {
        closeWindow();
        blockContent( 'content_marco' );
        $( '#content_nvo' ).html( '' );
        // Parsear el string JSON a objeto JavaScript
        var jsonArray = JSON.parse( jsonString );
        // Recorrer el array y mostrar las descripciones
        for ( let item of jsonArray )
        {
            for ( let key in item )
            {
                if ( item.hasOwnProperty( key ) )
                {
                    console.log( "Código: " + key + ", Descripción: " + item[key] );
                    await agregarLineaPrs( key, item[key] );
                }
            }
        }

        unBlockContent( 'content_marco' );
    }

    async function agregarLineaPrs( id_item, item_descripcion )
    {
        $( "#content_nvo" ).append( $( "#content_copy_nvo" ).html() );
        //$( "#content_nvo tr:last input:first" ).focus();
        setTimeout( '$( "#content_nvo tr:last input:first" ).focus();', 100 );
        pr( $( "#content_nvo tr:last input:first" ) );

        global_elm = $( "#content_nvo tr:last input:eq(0)" )[0];

        $( "#content_nvo tr:last input:first" ).val( id_item );
        $( $( "#content_nvo tr:last input:first" ).closest( 'tr' ) ).find( 'td:eq( 2 )' ).html( item_descripcion );

        $( "#content_nvo tr:last input:first" ).trigger( "blur" );

        //setTimeout( '$( $( "#content_nvo tr:last input:first" ).closest( "tr" ) ).find( "input[name=\'Cantidad[]\']" ).focus();', 100 );

        await sleep( 1000 ); // Espera 2 segundos (2000 milisegundos)
    }

/**
    [ONBLUR][CODIGO_ITEM]
    AQUI SE BUSCA LA DESCRIPCION DEL ITEM
*/
executeFindItem = function( elm_sel )
{
    var item_code = $( elm_sel ).val();
    var str_serialize = "s_ItemId=" + item_code + "&IdCompania=" + $( "#IdCompania" ).val() + "&IdAlmacen=" + $( "#IdAlmacen" ).val();
    executeAjaxJson
    ( 
        "<?php echo buildUrl( 'transacciones/findItem' ) ?>", 
        str_serialize,
        function( o_json )
        {
            if( o_json.error )
            {
                mostrarMensajeError( o_json.mensaje_error );
                return false;
            }
            if( o_json.result )
            {
                $( $( elm_sel ).closest( 'tr' ) ).find( 'td:eq( 2 )' ).html( o_json.DescripcionCompleta );
                //$( $( elm_sel ).closest( 'tr' ) ).find( 'input:text' ).val( o_json.UnidadCompra );
                
                //se identifica el id de unidad asignado
                $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" ).attr( "uni_ref", o_json.UnidadCompra );

                //ahora se carga las unidades equivalentes
                $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" )[0].options.length = 0;
                $.each
                (
                    o_json.a_Unidad, function ( i, o_Unidad )
                    {
                        $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" ).append
                        (
                            $( '<option>', { value: o_Unidad.IdUnidad, text : o_Unidad.UnidadDesc } )
                        );
                    }
                );
                //
                $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" ).val( o_json.UnidadCompra );

                //$( $( elm_sel ).closest( 'tr' ) ).find( 'td:eq( 3 )' ).html( o_json.StockActual );
                //$( $( elm_sel ).closest( 'tr' ) ).find( 'input:hidden' ).val( o_json.IdOrdenClasificacion );
                //$( $( elm_sel ).closest( 'tr' ) ).find( 'td:eq( 5 )' ).html( o_json.UnidadCompraDesc );
                //cargar el lote:
                //$( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" )[0].options.length = 0; //se comento por caja chica 2019-11-30
                if( o_json.a_Lotes )
                {
                    $.each
                    (
                        o_json.a_Lotes, function( index, item )
                        {
                            //$( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ).append( "<option value=" + item + ">" + item + "</option>" );
                            $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ).append( "<option value=" + item.IdLote + ">" + item.IdLote + " - " + item.FechaVencimiento + "</option>" );
                            //console.log( $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ) );
                            //console.log( item );
                        }
                    );
                }

                //$( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ).trigger( "change" ); //se comenta por cajachica 2019-11-30
                $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" ).trigger( "change" );
                
                //POR EL PARAMETRO DE MANEJA LOTE: 
                //se comento por cajachica 2019-11-30
                /*if( !o_json.ManejaLote )
                {
                	//$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).datepicker( "destroy" );
                	//$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).removeClass( "hasDatepicker" ).removeAttr( 'id' );
                	$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).prop( 'readonly', true );
                	$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).addClass( "text0" );
                	
                	$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='numerolote']" ).prop( 'readonly', true );
                	$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='numerolote']" ).addClass( "text0" );
                }
                else
                {
                    //$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).val( o_json.FechaVencimientoLote );
                	$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).datepicker( { dateFormat: "yy-mm-dd", changeYear:true, yearRange: "-0:+6", changeMonth: true, onClose: function (){ this.focus(); } } );
                }*/
            }
        } 
    );
}
buscarStockActualPorUnidad = function( elm )
{
    //pr( "ingresa" );
    var id_unidad_new = $( elm ).val();
    var id_unidad_ref = $( elm ).attr( "uni_ref" );

    if( id_unidad_new == "" )
    {
        alert( "Debe de seleccionar la Unidad de Medida." );
        $( elm ).val( id_unidad_ref );
        return false;
    }
    if( id_unidad_ref == '58' && id_unidad_new == '59' )
    {
        alert( "No se puede seleccionar la Uniad Caja." );
        $( elm ).val( id_unidad_ref );
        return false;
    }

    buscarStockActual( elm );
}
buscarStockActual = function( elm_sel, num_lote )
{
    //console.log( jQuery.type( num_lote ) );
    
    var item_id   = $( $( elm_sel ).closest( 'tr' ) ).find( "input[name='IdItem[]']" ).val();

    var valor_trans = $( "[name='IdTransaccionOperacion']:checked" ).val();
    switch ( valor_trans )
    {
        case "I": 
            var lote_id   = $( $( elm_sel ).closest( 'tr' ) ).find( "[alias='numerolote']" ).val();
        break;
        case "E": 
            var lote_id   = $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ).val();
        break;
    }

    //var lote_id   = $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdLote[]']" ).val();

    var unidad_id = $( $( elm_sel ).closest( 'tr' ) ).find( "select[name='IdUnidad[]']" ).val();
    
    if( jQuery.type( num_lote ) != "undefined" )
    {
        console.log( "lote lleno." );
        var lote_id = num_lote;
    }
    
    var str_serialize = "TipoProc=getStockActual&IdItem=" + item_id + "&IdCompania=" + $( "#IdCompania" ).val() + "&IdAlmacen=" + $( "#IdAlmacen" ).val() + "&IdLote=" + lote_id + "&IdUnidad=" + unidad_id;
    
    executeAjaxJson
    ( 
        "<?php echo buildUrl( 'transacciones/request' ) ?>", 
        str_serialize,
        function( o_json )
        {
            //console.log( o_json );
            if( o_json.error )
            {
                mostrarMensajeError( o_json.mensaje_error );
                return false;
            }
            if( o_json.result )
            {
                //$( $( elm_sel ).closest( 'tr' ) ).find( 'td:eq( 3 )' ).html( o_json.StockActual ); //dependiendo, si esta comentario lote es 3, sino 4 2019-11-30
                $( $( elm_sel ).closest( 'tr' ) ).find( 'td.stock' ).html( o_json.StockActual ); //dependiendo, si esta comentario lote es 3, sino 4 2019-11-30
                $( $( elm_sel ).closest( 'tr' ) ).find( "input[name='PrecioUnitario[]']" ).val( o_json.Costo );
                if( o_json.FechaVencimientoLote )
                {
                    //$( $( elm_sel ).closest( 'tr' ) ).find( "[alias='fechavencimiento']" ).val( o_json.FechaVencimientoLote );
                }

                //setTimeout( '$( $( global_elm ).closest( "tr" ) ).find( "input[name=\'Cantidad[]\']" ).focus();', 50 );
            }
        } 
    );
}
buscarStockActualxNumLote = function( elm_sel, num_lote, id_item, tr_id )
{
    if( num_lote != "" )
    {
    	buscarStockActual( elm_sel, num_lote );
    }
}
eventoPopup = function( object, select )
{
    if( object.which === 107 ) 
    {
        global_elm = select;
        object.target.value = "";
		openPopup();
    }
}
openPopup = function()
{
    var s_param = "empresa/" + $( "#IdCompania" ).val() + "/IdAlmacen/" + $( "#IdAlmacen" ).val() + "/type/01";
    $( '#myIframe' ).attr( 'src', '<?=buildUrl( 'transacciones/listItem' )?>' + s_param );
    $( '#dialog' ).dialog( 'open' );	
}
buscarServiciosPopup = function()
{
    pr( "ingresa" );
    //$( "#exampleModalLongTitle" ).html( "Buscar Servicios" );
    //$( '#exampleModalCenter' ).modal( { show:true } );
    var s_almacen_id = $( "#IdAlmacen" ).val();
    var frameSrc = '<?=buildUrlComplet( 'vta.php/pro/listServices' )?>' + 'moneda_cod/LO/IdAlmacen/' + s_almacen_id + '/module/cot/i_Id/';
    
    $( '#myIframe' ).attr( 'src', frameSrc );
    $( '#dialog' ).dialog( 'open' );
    
}
buscarReferenciaPopup = function()
{
    if( $( "#IdProveedor" ).val() == "" )
    {
        alert( "Debe de seleccionar un Proveedor." );
        return false;
    }
    var s_param = "IdProveedor/" + $( "#IdProveedor" ).val() + "/IdAlmacen/" + $( "#IdAlmacen" ).val();
    $( '#myIframe' ).attr( 'src', '<?=buildUrl( 'transacciones/listItemRefe' )?>' + s_param );
    $( '#dialog' ).dialog( 'open' );
}
closeWindow = function()
{
    $( '#dialog' ).dialog( 'close' );
}
//asignarItem = function( id_item, item_descripcion )
asignarItem = function( id_item, item_descripcion, id_unidad )
{
	$( "#content_nvo tr:last input:first" ).val( id_item );
    $( $( "#content_nvo tr:last input:first" ).closest( 'tr' ) ).find( 'td:eq( 2 )' ).html( item_descripcion );
    
    //$( global_elm ).trigger( "blur" );
    //$( global_elm ).blur();
    closeWindow();
    setTimeout( '$( $( "#content_nvo tr:last input:first" ).closest( "tr" ) ).find( "input[name=\'Cantidad[]\']" ).focus();', 100 );
}
asignarValores = function( id_item, item_descripcion )
{
    console.log( arguments );
    asignarItem( id_item, item_descripcion, 58 );

    $( $( $( "#content_nvo tr:last input:first" ) ).closest( "tr" ) ).find( "input[name=\'Cantidad[]\']" ).val( 1 );
}
limpiarDetalle = function()
{
    $( "#content_nvo" ).html( '' );
}
</script>

<script type="text/javascript">
agregarLineaTrx = function( codigo, cantidad, costo )
{
    $( "#content_nvo" ).append( $( "#content_copy_nvo" ).html() );
    //$( "#content_nvo tr:last input:first" ).focus();
    $( "#content_nvo tr:last input:first" ).val( codigo );
    $( "#content_nvo tr:last input:first" ).trigger( "blur" );
    $( $( $( "#content_nvo tr:last input:first" ) ).closest( "tr" ) ).find( "input[name=\'Cantidad[]\']" ).val( cantidad );
    $( $( $( "#content_nvo tr:last input:first" ) ).closest( "tr" ) ).find( "input[name=\'PrecioUnitario[]\']" ).val( costo );
}
</script>

<script>
//ESCAPE, DETECTA EL F5, CTRL+F5
$( document ).bind
(
    'keyup', 
    function( e ) 
    {
        //console.log( e.which );
        if( e.which === 116 ) 
        {
           
        }
        if( e.which === 82 && e.ctrlKey ) 
        {
           
        }
        if( e.which === 107 ) //tecla +
        {
            //openPopup();
            $( "#btnAgregar" ).trigger( "click" );
        }
        if( e.which === 107 ){ buscarProductosPopup(); } // tecla +
        //if( e.which === 109 ){ buscarServiciosPopup(); } // tecla -
        if( e.which === 119 ) 
        {
           
        }
        if( e.which === 27 ) //ESCAPE
        {
            
        }
    }
);
</script>