<?php
class SaveDetailV2Action extends wtActions
{
    public function execute()
    {
        $i_Id     = $this->getRequestParameter( 'i_Id' );
        $TypeSub  = $this->getRequestParameter( 'TypeSub' );
        
        //$a_DescuentoFlag       = $this->getRequestParameter( 'DescuentoFlag' );
        //$a_FechaFin            = $this->getRequestParameter( 'FechaFin' );
        //$a_FechaInicio         = $this->getRequestParameter( 'FechaInicio' );
        $a_IdItem              = $this->getRequestParameter( 'IdItem' );
        //$a_MontoDescuento      = $this->getRequestParameter( 'MontoDescuento' );
        //$a_PorcentajeDescuento = $this->getRequestParameter( 'PorcentajeDescuento' );
        
        $a_PrecioCosto           = $this->getRequestParameter( 'PrecioCosto' );
        $a_PrecioCostoIGV        = $this->getRequestParameter( 'PrecioCostoIGV' );
        $a_PrecioVentaPr         = $this->getRequestParameter( 'PrecioVenta' );
        $a_MontoIGVPr            = $this->getRequestParameter( 'MontoIGV' );
        $a_PrecioVentaIGVPr      = $this->getRequestParameter( 'PrecioVentaIGV' );
        $a_PorcentajeUtilidadPr  = $this->getRequestParameter( 'PorcentajeUtilidad' );
            
        $a_Ids      = explode( "_", $i_Id );
        $IdCompania = ( int ) $a_Ids[0];
        $IdSucursal = ( int ) $a_Ids[1];
        
        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;
            }

            foreach ( $a_PrecioVentaPr as $i_Key => $s_PrecioVenta )
            {
                $IdItem = $a_IdItem[$i_Key];
                
                $PrecioCosto           = floatval( $a_PrecioCosto[$i_Key] );
                $PrecioCostoIGV        = floatval( $a_PrecioCostoIGV[$i_Key] );
                $a_PorcentajeUtilidad  = $a_PorcentajeUtilidadPr[$i_Key];
                $a_PrecioVenta         = $a_PrecioVentaPr[$i_Key];
                $a_MontoIGV            = $a_MontoIGVPr[$i_Key];
                $a_PrecioVentaIGV      = $a_PrecioVentaIGVPr[$i_Key];
                if( isset( $a_DescuentoFlag[$i_Key] ) )
                {
                    $DescuentoFlag       = $a_DescuentoFlag[$i_Key];
                    $MontoDescuento      = floatval( $a_MontoDescuento[$i_Key] );
                    $PorcentajeDescuento = floatval( $a_PorcentajeDescuento[$i_Key] );
                }
                else 
                {
                    $DescuentoFlag       = "N";
                    $MontoDescuento      = 0;
                    $PorcentajeDescuento = 0;
                }
                
                //SE GUARDA LOS DATOS
                foreach ( $a_PorcentajeUtilidad as $i_IdTipoPrecio => $s_ValorPorcen )
                {
                    $i_IdTipoPrecio = ( string ) $i_IdTipoPrecio;

                    if( trim( $s_ValorPorcen ) != "" )
                    {
                        $PorcentajeUtilidad = floatval( $s_ValorPorcen );
                        $PrecioVenta        = floatval( $a_PrecioVenta[$i_IdTipoPrecio] );
                        $MontoIGV           = floatval( $a_MontoIGV[$i_IdTipoPrecio] );
                        $PrecioVentaIGV     = floatval( $a_PrecioVentaIGV[$i_IdTipoPrecio] );
                        
                        $o_MST_ListaPrecioDetalleFN = new MST_ListaPrecioDetalleFN();
                        $o_MST_ListaPrecioDetalleBN = $o_MST_ListaPrecioDetalleFN->selectByPK( $IdCompania, $IdSucursal, $IdItem, $i_IdTipoPrecio );
                        if( $o_MST_ListaPrecioDetalleBN )
                        {
                            //SE GUARDA EL LOG
                            $o_MST_ListaPrecioDetalleLogDP = new MST_ListaPrecioDetalleLogDP();
                            $o_MST_ListaPrecioDetalleLogDP->setIdCompania( $o_MST_ListaPrecioDetalleBN->getIdCompania() );
                            $o_MST_ListaPrecioDetalleLogDP->setIdSucursal( $o_MST_ListaPrecioDetalleBN->getIdSucursal() );
                            $o_MST_ListaPrecioDetalleLogDP->setIdItem( $o_MST_ListaPrecioDetalleBN->getIdItem() );
                            $o_MST_ListaPrecioDetalleLogDP->setIdTipoPrecio( $i_IdTipoPrecio );
                            //$o_MST_ListaPrecioDetalleLogDP->setFechaInicio( $o_MST_ListaPrecioDetalleBN->getFechaInicio() );
                            //$o_MST_ListaPrecioDetalleLogDP->setFechaFin( $o_MST_ListaPrecioDetalleBN->getFechaFin() );
                            $o_MST_ListaPrecioDetalleLogDP->setEstado( $o_MST_ListaPrecioDetalleBN->getEstado() );
                            $o_MST_ListaPrecioDetalleLogDP->setPrecioCosto( $o_MST_ListaPrecioDetalleBN->getPrecioCosto() );
                            $o_MST_ListaPrecioDetalleLogDP->setPorcentajeUtilidad( $o_MST_ListaPrecioDetalleBN->getPorcentajeUtilidad() );
                            $o_MST_ListaPrecioDetalleLogDP->setPrecioVenta( $o_MST_ListaPrecioDetalleBN->getPrecioVenta() );
                            $o_MST_ListaPrecioDetalleLogDP->setMontoDescuento( $o_MST_ListaPrecioDetalleBN->getMontoDescuento() );
                            $o_MST_ListaPrecioDetalleLogDP->setPorcentajeDescuento( $o_MST_ListaPrecioDetalleBN->getPorcentajeDescuento() );
                            $o_MST_ListaPrecioDetalleLogDP->setDescuentoFlag( $o_MST_ListaPrecioDetalleBN->getDescuentoFlag() );
                            $o_MST_ListaPrecioDetalleLogDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                            $o_MST_ListaPrecioDetalleLogDP->setUsuarioCreacion( $o_MST_ListaPrecioDetalleBN->getUsuarioCreacion() );
                            $o_MST_ListaPrecioDetalleLogDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                            $o_MST_ListaPrecioDetalleLogDP->setUsuarioModificacion( $o_MST_ListaPrecioDetalleBN->getUsuarioModificacion() );
                            $o_MST_ListaPrecioDetalleLogDP->save();
                            
                            //UPDATE
                            $o_DefaultDP = new MST_ListaPrecioDetalleDP();
                            $o_DefaultDP->setIdCompania( $IdCompania );
                            $o_DefaultDP->setIdSucursal( $IdSucursal );
                            $o_DefaultDP->setIdItem( $IdItem );
                            $o_DefaultDP->setIdTipoPrecio( $i_IdTipoPrecio );
                            //$o_DefaultDP->setFechaInicio( $FechaInicio );
                            //$o_DefaultDP->setFechaFin( $FechaFin );
                            $o_DefaultDP->setPrecioCosto( $PrecioCosto );
                            $o_DefaultDP->setPrecioCostoIGV( $PrecioCostoIGV );
                            $o_DefaultDP->setPorcentajeUtilidad( $PorcentajeUtilidad );
                            $o_DefaultDP->setPrecioVenta( $PrecioVenta );
                            $o_DefaultDP->setMontoIGV( $MontoIGV );
                            $o_DefaultDP->setPrecioVentaIGV( $PrecioVentaIGV );
                            $o_DefaultDP->setMontoDescuento( $MontoDescuento );
                            $o_DefaultDP->setPorcentajeDescuento( $PorcentajeDescuento );
                            $o_DefaultDP->setDescuentoFlag( $DescuentoFlag );
                            $o_DefaultDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                            $o_DefaultDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                            $b_Result = $o_DefaultDP->update();
                            $i_IdDet = $IdCompania."_".$IdSucursal."_".$IdItem;
                        }
                        else 
                        {
                            //INSERT
                            $o_DefaultDP = new MST_ListaPrecioDetalleDP();
                            $o_DefaultDP->setIdCompania( $IdCompania );
                            $o_DefaultDP->setIdSucursal( $IdSucursal );
                            $o_DefaultDP->setIdItem( $IdItem );
                            $o_DefaultDP->setIdTipoPrecio( $i_IdTipoPrecio );
                            //$o_DefaultDP->setFechaInicio( $FechaInicio );
                            //$o_DefaultDP->setFechaFin( $FechaFin );
                            $o_DefaultDP->setPrecioCosto( $PrecioCosto );
                            $o_DefaultDP->setPrecioCostoIGV( $PrecioCostoIGV );
                            $o_DefaultDP->setPorcentajeUtilidad( $PorcentajeUtilidad );
                            $o_DefaultDP->setPrecioVenta( $PrecioVenta );
                            $o_DefaultDP->setMontoIGV( $MontoIGV );
                            $o_DefaultDP->setPrecioVentaIGV( $PrecioVentaIGV );
                            $o_DefaultDP->setMontoDescuento( $MontoDescuento );
                            $o_DefaultDP->setPorcentajeDescuento( $PorcentajeDescuento );
                            $o_DefaultDP->setDescuentoFlag( $DescuentoFlag );
                            
                            $o_DefaultDP->setEstado( "A" );
                            
                            $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() );
                            $b_Result = $o_DefaultDP->save();
                            $i_IdDet = $IdCompania."_".$IdSucursal."_".$IdItem;
                        }

                        //ahora se actualiza en la tabla de item como referencia principal
                        $o_ALM_ItemMastDP = new ALM_ItemMastDP();
                        $o_ALM_ItemMastDP->setIdItem( $IdItem );
                        
                        $o_ALM_ItemMastDP->setPrecioCosto( $PrecioCosto );
                        $o_ALM_ItemMastDP->setPrecioVenta( $PrecioCostoIGV );

                        if( $o_MST_ListaPrecioCabeceraBN->getIdMoneda() == "LO" ) //MONEDA DE LA LISTA DE PRECIOS ES SOLES
                        {
                            $f_PrecioUnitarioLocal   = $PrecioCosto;
                            $f_PrecioUnitarioDolares = utilMath::fnround( $PrecioCosto / $f_TipoCob, 2 );
                        }
                        if( $o_MST_ListaPrecioCabeceraBN->getIdMoneda() == "EX" ) //MONEDA DE LA LISTA DE PRECIOS ES DOLARES
                        {

                            $f_PrecioUnitarioLocal   = utilMath::fnround( $PrecioCosto * $f_TipoCob, 2 );
                            $f_PrecioUnitarioDolares = $PrecioCosto;
                        }

                        $o_ALM_ItemMastDP->setPrecioUnitarioLocal( $f_PrecioUnitarioLocal );
                        $o_ALM_ItemMastDP->setPrecioUnitarioDolares( $f_PrecioUnitarioDolares );
                        $o_ALM_ItemMastDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                        $o_ALM_ItemMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                        $o_ALM_ItemMastDP->update();
                    }
                    else
                    {
                        //aqui se elimina el tipo de precio
                        $o_DefaultDP = new MST_ListaPrecioDetalleDP();
                        $o_DefaultDP->setIdCompania( myUser::getUser()->getIdBusiness() );
                        $o_DefaultDP->setIdSucursal( myUser::getUser()->getIdSucursal() );
                        $o_DefaultDP->setIdItem( $IdItem );
                        $o_DefaultDP->setIdTipoPrecio( $i_IdTipoPrecio );
                        $o_DefaultDP->delete();
                    }
                }
            }
            $a_Rs['type_sub'] = $TypeSub;
            $a_Rs['error']    = false;
            $a_Rs['id']       = $i_IdDet;
        }
        catch ( Exception $o_Exception )
        {
            pr( $o_Exception );
            $a_Rs['error']         = true;
            $a_Rs['mensaje_error'] = $o_Exception->getMessage();
        }
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
    }
}