<?php
class SaveVtaDetailAction extends wtActions
{
    public function execute()
    {
        $block      = $this->getRequestParameter( 'block' );
        $i_Id       = $this->getRequestParameter( 'i_Id' );
        $s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        $TypeSub    = $this->getRequestParameter( 'TypeSub' );
        
        $i_Id = $this->getRequestParameter( 'i_Id' );
        
        $a_Ids = explode( "_", $i_Id );
        
        $IdTipoDocumento = $a_Ids[0];
        $IdCompania      = ( int ) $a_Ids[1];
        $NumeroDocumento = $a_Ids[2];
        
        $con = Conexion::getConexion();
        $con->begin();
        try
        {
            myUser::getUser()->validar_session();

            $Secuencia      = is_null( $this->getRequestParameter( 'Secuencia' ) ) ? null : ( int ) $this->getRequestParameter( 'Secuencia' );
            $IdItem         = $this->getRequestParameter( 'IdItem' );
            $IdAlmacen      = $this->getRequestParameter( 'IdAlmacen' );
            $IdLote         = $this->getRequestParameter( 'IdLote' );
            $IdUnidad       = $this->getRequestParameter( 'IdMedida' );
            $CantidadPedida = floatval( $this->getRequestParameter( 'CantidadPedida' ) );
            $PrecioUnitario = floatval( $this->getRequestParameter( 'PrecioUnitario' ) ); //se tiene que modificar si se hace el proceso de bajar precio
            $NoAfecImpuesto = $this->getRequestParameter( 'NoAfectoImpuestoVentasFlag' );
            
            //$CantidadPedidaUni = floatval( $this->getRequestParameter( 'CantidadPedidaUni' ) );
            
            $o_VTA_DocumentoDetalleBN = new VTA_DocumentoDetalleBN();
            $o_VTA_DocumentoDetalleBN->setIdSucursal( myUser::getUser()->getIdSucursal() );
            $o_VTA_DocumentoDetalleBN->setSecuencia( $Secuencia );
            
            if( $this->getRequestParameter( 'CodigoBarra' ) && trim( $this->getRequestParameter( 'CodigoBarra' ) ) != "" )
            {
                //aqui se cambia el procedimiento, el codigo de barras del proveedor es unico, por lo tanto se buscar el id asociado al codigo
                $o_ALM_ItemMastFN = new ALM_ItemMastFN();
                $o_ALM_ItemMastFN->setCodigoBarrasFabricante( $this->getRequestParameter( 'CodigoBarra' ) );
                $a_ALM_ItemMast = $o_ALM_ItemMastFN->select();
                if( count( $a_ALM_ItemMast ) > 1 )
                {
                    throw new Exception( "El codigo de barras tiene otros items asociados." );
                }
                if( !$a_ALM_ItemMast )
                {
                    throw new Exception( "El codigo de Barras ingresado, no tiene un producto asociado." );
                }                
                $IdItem   = $a_ALM_ItemMast[0]->getIdItem();
                $IdUnidad = $a_ALM_ItemMast[0]->getUnidadVenta();
            }
            $o_VTA_DocumentoDetalleBN->setItemCodigo( $IdItem );
            $o_VTA_DocumentoDetalleBN->setAlmacenCodigo( $IdAlmacen );
            $o_VTA_DocumentoDetalleBN->setIdCompania( $IdCompania );
            $o_VTA_DocumentoDetalleBN->setLote( $IdLote );
            $o_VTA_DocumentoDetalleBN->setLoteAlias( $IdLote );
            $o_VTA_DocumentoDetalleBN->setIdUnidad( intval( $IdUnidad ) );
            $o_VTA_DocumentoDetalleBN->setCantidadPedida( $CantidadPedida );
            $o_VTA_DocumentoDetalleBN->setNumeroDocumento( $NumeroDocumento );
            $o_VTA_DocumentoDetalleBN->setIdTipoDocumento( $IdTipoDocumento );
            //$o_VTA_DocumentoDetalleBN->setCantidadPedida( $CantidadPedida );
            //$o_VTA_DocumentoDetalleBN->setCantidadEntregada( $CantidadPedidaUni );
            
            $o_VTA_DocumentoDetalleBN->setPrecioUnitario( $PrecioUnitario );
            $o_OrdenVentaDetalleBL = new OrdenVentaDetalleBL();
            $o_OrdenVentaDetalleBL->iniciarProceso( $o_VTA_DocumentoDetalleBN );
            
            $con->commit();
            
            $a_Rs['type_sub'] = $TypeSub;
            $a_Rs['error']   = false;
            $a_Rs['id']      = $i_Id;
        }
        catch ( Exception $o_Exception )
        {
            $con->rollback();
            $a_Rs['error']        = true;
            $a_Rs['mensaje_error'] = $o_Exception->getMessage();
        }
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
    }
}