<?php
class SaveDetailV3Action extends wtActions
{
    public function execute()
    {
        $i_Id               = $this->getRequestParameter( 'i_Id' );
        $a_IdItem           = $this->getRequestParameter( 'IdItem' );
        $a_PrecioVenta      = $this->getRequestParameter( 'PrecioVenta' );
        $a_MontoIGV         = $this->getRequestParameter( 'MontoIGV' );
        $a_PrecioVentaIGVPr = $this->getRequestParameter( 'PrecioVentaIGV' );
        $s_IdTipoLista      = $this->getRequestParameter( 'IdTipoLista' );
        $s_IdRango          = $this->getRequestParameter( 'IdRango' );
        
        try
        {
            $o_MST_ListaPrecioCabeceraFN = new MST_ListaPrecioCabeceraFN();
            $o_MST_ListaPrecioCabeceraBN = $o_MST_ListaPrecioCabeceraFN = $o_MST_ListaPrecioCabeceraFN->selectByPK( myUser::getUser()->getIdBusiness(), myUser::getUser()->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";
            
            foreach ( $a_PrecioVentaIGVPr as $s_IdItem => $a_Data )
            {
                foreach ( $a_Data as $s_IdRangoDet => $s_PrecioIGV )
                {
                    $f_PrecioVentaIGV   = floatval( $s_PrecioIGV );
                    $f_MontoIGV         = floatval( $a_MontoIGV[$s_IdItem][$s_IdRangoDet] );
                    $f_PrecioVenta      = floatval( $a_PrecioVenta[$s_IdItem][$s_IdRangoDet] );
                    
                    /*$f_MontoIncImpuestoUnidad  = $f_PrecioVentaIGV;
                    $f_PrecioUnitario          = round( $f_MontoIncImpuestoUnidad / $f_ValorIGVMasUno, 13 );
                    $f_MontoImpuestoUnidad     = round( $f_PrecioUnitario * $f_ValorIGV, 13 );
                    $f_MontoImpuestoUnidad     = round( $f_MontoImpuestoUnidad, 2 );
                    $f_PrecioUnitario          = round( $f_PrecioUnitario, 2 );*/
                    
                    $o_MST_ListaPrecioDetalleFN = new MST_ListaPrecioDetalleFN();
                    $o_MST_ListaPrecioDetalleFN->setIdCompania( myUser::getUser()->getIdBusiness() );
                    $o_MST_ListaPrecioDetalleFN->setIdSucursal( myUser::getUser()->getIdSucursal() );
                    $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( myUser::getUser()->getIdBusiness() );
                    $o_DefaultDP->setIdSucursal( myUser::getUser()->getIdSucursal() );
                    $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->setFechaInicio( $FechaInicio );
                    //$o_DefaultDP->setFechaFin( $FechaFin );
                    /*$o_DefaultDP->setPrecioCosto( 0 );
                    $o_DefaultDP->setPrecioCostoIGV( 0 );
                    $o_DefaultDP->setPorcentajeUtilidad( 0 );*/
                    $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;
        
    }
}