<?php
class SaveDetailV3Action extends wtActions
{
    public function execute()
    {
        $i_Id               = $this->getRequestParameter( 'i_Id' );
        $a_IdItem           = $this->getRequestParameter( 'IdItem' );
        $a_PrecioCostoIGV   = $this->getRequestParameter( 'PrecioCostoIGV' );
        $a_PrecioVenta      = $this->getRequestParameter( 'PrecioVenta' );
        $a_MontoIGV         = $this->getRequestParameter( 'MontoIGV' );
        $a_AfectoIGV        = $this->getRequestParameter( 'AfectoIGV' );
        $a_PrecioVentaIGVPr = $this->getRequestParameter( 'PrecioVentaIGV' );
        $s_IdTipoLista      = $this->getRequestParameter( 'IdTipoLista' );
        $s_IdRango          = $this->getRequestParameter( 'IdRango' );
        
        try
        {
            $o_MST_ListaPrecioCabeceraFN = new MST_ListaPrecioCabeceraFN();
            $o_MST_ListaPrecioCabeceraFN->setIdListaPreciCab( $i_Id );
            $o_MST_ListaPrecioCabeceraBN = $o_MST_ListaPrecioCabeceraFN = $o_MST_ListaPrecioCabeceraFN->selectByPK();

            $IdCompania = $o_MST_ListaPrecioCabeceraBN->getIdCompania();
            $IdSucursal = $o_MST_ListaPrecioCabeceraBN->getIdSucursal();

            //el tipo de cambio
            /*$f_TipoCob = GSS_TipoCambioFN::getStaticTipoCambioCobranza(); //EN EL FUTURO PODRIA SER EL TIPO DE CAMBIO GUARDADO EN LA ORDEN CABECERA
            $f_TipoCon = GSS_TipoCambioFN::getStaticTipoCambioCompra(); //EN EL FUTURO PODRIA SER EL TIPO DE CAMBIO GUARDADO EN LA ORDEN CABECERA
            
            if( !$f_TipoCob )
            {
                throw new Exception( "El Tipo de Cambio no esta ingresado." );
            }
            if( $o_MST_ListaPrecioCabeceraBN->getIdMoneda() == "EX" )
            {
                if( !$f_TipoCob )
                {
                    throw new Exception( "El Tipo de Cambio no esta ingresado." );
                }
            }
            else
            {
                $f_TipoCob = 1;
            }*/
            
            //////////////////////////////////////////////////////////////////////////////////////////
            //SE RECUPERA VALOR DE IGV ACTUAL
            $f_ValorIGV       = GSS_ParametroMastFN::getValorPorTipo( "AL", "IGV" ); //0.18
            $f_ValorIGVMasUno = $f_ValorIGV + 1;  //1.18
            //////////////////////////////////////////////////////////////////////////////////////////
            
            $i_IdTipoPrecio = "1";

            //pr( $_REQUEST ); exit;

            if( $a_PrecioVentaIGVPr )
            {
                foreach( $a_PrecioVentaIGVPr as $s_IdItem => $a_Data )
                {
                    $i_AfectoIGV = 1;
                    if( $a_AfectoIGV[$s_IdItem] == "NO" )
                    {
                        $i_AfectoIGV = 0;
                    }
                    foreach( $a_Data as $s_IdRangoDet => $s_PrecioIGV )
                    {
                        $f_PrecioCostoIGV = floatval( $a_PrecioCostoIGV[$s_IdItem] );
                        $f_PrecioVentaIGV = floatval( $s_PrecioIGV );
                        $f_MontoIGV       = floatval( $a_MontoIGV[ $s_IdItem ][ $s_IdRangoDet ] );
                        $f_PrecioVenta    = floatval( $a_PrecioVenta[ $s_IdItem ][ $s_IdRangoDet ] );

                        $o_MST_ListaPrecioDetalleFN = new MST_ListaPrecioDetalleFN();
                        $o_MST_ListaPrecioDetalleFN->setIdCompania( $IdCompania );
                        $o_MST_ListaPrecioDetalleFN->setIdSucursal( $IdSucursal );
                        $o_MST_ListaPrecioDetalleFN->setIdItem( $s_IdItem );
                        $o_MST_ListaPrecioDetalleFN->setIdTipoLista( $s_IdTipoLista );
                        $o_MST_ListaPrecioDetalleFN->setIdRango( $s_IdRango );
                        $o_MST_ListaPrecioDetalleFN->setIdRangoDetalle( $s_IdRangoDet );
                        $a_MST_ListaPrecioDetalle = $o_MST_ListaPrecioDetalleFN->select();

                        $o_DefaultDP = new MST_ListaPrecioDetalleDP();
                        $o_DefaultDP->setIdCompania( $IdCompania );
                        $o_DefaultDP->setIdSucursal( $IdSucursal );
                        $o_DefaultDP->setIdListaPreciCab( ( int ) $i_Id );
                        $o_DefaultDP->setIdItem( $s_IdItem );
                        $o_DefaultDP->setIdTipoLista( ( int ) $s_IdTipoLista );
                        $o_DefaultDP->setIdRango( ( int ) $s_IdRango );
                        $o_DefaultDP->setIdRangoDetalle( ( int ) $s_IdRangoDet );
                        $o_DefaultDP->setIdTipoPrecio( $i_IdTipoPrecio );
                        $o_DefaultDP->setAfectoIGV( $i_AfectoIGV );
                        $o_DefaultDP->setPrecioCosto( round( ( $f_PrecioCostoIGV / 1.18 ), 2 ) );
                        $o_DefaultDP->setPrecioCostoIGV( $f_PrecioCostoIGV );
                        $o_DefaultDP->setPrecioVenta( $f_PrecioVenta );
                        $o_DefaultDP->setMontoIGV( $f_MontoIGV );
                        $o_DefaultDP->setPrecioVentaIGV( $f_PrecioVentaIGV );
                        $o_DefaultDP->setMontoDescuento( 0 );
                        $o_DefaultDP->setPorcentajeDescuento( 0 );
                        $o_DefaultDP->setDescuentoFlag( "N" );
                        $o_DefaultDP->setEstado( "A" );

                        if( $a_MST_ListaPrecioDetalle )
                        {
                            //update
                            $i_IdDet = $a_MST_ListaPrecioDetalle[0]->getIdListaPreciDet();
                            $o_DefaultDP->setIdListaPreciDet( $i_IdDet );

                            $o_DefaultDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                            $o_DefaultDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                            $o_DefaultDP->update();
                        }
                        else
                        {
                            //insert
                            $i_IdDet = MST_ListaPrecioDetalleDP::recuperarId();

                            //$o_DefaultDP = new MST_ListaPrecioDetalleDP();
                            $o_DefaultDP->setIdListaPreciDet( $i_IdDet );

                            $o_DefaultDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                            $o_DefaultDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                            $o_DefaultDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                            $o_DefaultDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                            $o_DefaultDP->save();
                        }
                    }
                }
            }
            
            $a_Rs['error']    = false;
            $a_Rs['id']       = $i_IdDet;
        }
        catch ( Exception $o_Exception )
        {
            $a_Rs['error']         = true;
            $a_Rs['mensaje_error'] = $o_Exception->getMessage();
        }
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
        
    }
}