<?php
class AsociarSerieAction extends wtActions 
{
    public function execute()
    {
        LayoutTemplate::getInstance()->setUseBootstrap();

        $this->IdOrdenCompra = $this->getRequestParameter( 'id' );
        $this->Secuencia     = $this->getRequestParameter( 'secuencia' );
        $b_Control           = $this->getRequestParameter( 'b_control' );
        
        $this->s_MensajeError = "";

        try 
        {
            $IdCompania = myUser::getUser()->getIdBusiness();
    
            $o_COM_OrdenCompraCabeceraFN = new COM_OrdenCompraCabeceraFN();
            $o_COM_OrdenCompraCabeceraBN = COM_OrdenCompraCabeceraFN::selectById( $this->IdOrdenCompra );
            
            $o_COM_OrdenCompraDetalleFN = new COM_OrdenCompraDetalleFN();
            $o_COM_OrdenCompraDetalleFN->setIdOrdenCompra( $o_COM_OrdenCompraCabeceraBN->getIdOrdenCompra() );
            $this->a_COM_OrdenCompraDetalle = $o_COM_OrdenCompraDetalleFN->select();

            
            $o_SR_MovimientoFN = new SR_MovimientoFN();
            $o_SR_MovimientoFN->setTipoMovimiento( "ROC" );
            $o_SR_MovimientoFN->setOperacion( "I" );
            $o_SR_MovimientoFN->setAlmacen( $o_COM_OrdenCompraCabeceraBN->getIdAlmacenEntrega() );
            $o_SR_MovimientoFN->setReferenciaTipo( "OC" );
            $o_SR_MovimientoFN->setReferenciaNumero( $this->IdOrdenCompra );
            //$o_SR_MovimientoFN->setReferenciaFecha( $o_COM_OrdenCompraCabeceraBN->getFechaCreacion() );
            $o_SR_MovimientoFN->setEstado( "P" );
            $a_SR_Movimiento = $o_SR_MovimientoFN->select();

            if( $a_SR_Movimiento )
            {
                $o_SR_MovimientoBN = $a_SR_Movimiento[0];
                
                $s_MovimientoId = $o_SR_MovimientoBN->getMovimientoId();
                
                //ahora se actualiza la cantidad de referencia
                $o_SR_MovimientoDetalleFN = new SR_MovimientoDetalleFN();
                $o_SR_MovimientoDetalleFN->setMovimientoId( $s_MovimientoId );
                $a_SR_MovimientoDetalle = $o_SR_MovimientoDetalleFN->select();

                if( !$a_SR_MovimientoDetalle )
                {
                    throw new Exception( "No se encontro informacion del Movimiento Detalle de la Serie." );
                }
            }
            else
            {
                //aqui puede ser que se registre el movimiento serie asociado por la oc que lo invoco
                //por ahora no lo dejo pasar
                throw new Exception( "No se encontro informacion del Movimiento Cabecera de la Serie." );
            }
            
            if( $b_Control )
            {
                $tipo_proc = $this->getRequestParameter( 'tipo_proc' );
                if( $tipo_proc == "registrar_serie" )
                {
                    $cbo_tipo_reg = $this->getRequestParameter( 'cbo_tipo_reg' );
                    
                    if( $cbo_tipo_reg == "S" ) //solo registro por serie
                    {
                        $txt_serie = $this->getRequestParameter( 'txt_serie' );
                        if( $txt_serie )
                        {
                            if( $o_SR_MovimientoBN )
                            {
                                //AQUI REGISTRO LA PRE - SERIE
                                $o_SR_PreSerieBN = new SR_PreSerieBN();
                                $o_SR_PreSerieBN->setMovimientoId( $s_MovimientoId );
                                $o_SR_PreSerieBN->setMovimientoDetalleId( $i_MovimientoDetalleId );
                                $o_SR_PreSerieBN->setProductoId( $this->CodItem );
                                $o_SR_PreSerieBN->setSerieNumero( $txt_serie );
                                $o_SR_PreSerieBN->setOperacion( "I" );
                                $o_SR_PreSerieBN->setAlmacen( $o_COM_OrdenCompraCabeceraBN->getIdAlmacenEntrega() );
                                $o_SR_PreSerieBN->setReferenciaTipo( "OC" );
                                $o_SR_PreSerieBN->setReferenciaNumero( $this->IdOrdenCompra );
                                //$o_SR_PreSerieBN->setReferenciaCantidadLimite( $this->CanDeta ); //cantidad maxima de referencia
                                
                                $o_SerieDetalleBL = new SerieDetalleBL();
                                $o_SerieDetalleBL->registrarPreSerie( $o_SR_PreSerieBN );
                            }
                        }
                    }
                }
                if( $tipo_proc == "eliminar_serie" )
                {
                    $id_preserie_esc = $this->getRequestParameter( 'id_preserie' );
                    $cod_item = $this->getRequestParameter( 'cod_item' );
                    
                    $a_Ids = explode( "_", $id_preserie_esc );
                    $i_MovimientoDet = intval( $a_Ids[0] );
                    $i_IdPreSerie    = intval( $a_Ids[1] );
                    
                    $o_SR_PreSerieEscaneoBN = new SR_PreSerieEscaneoBN();
                    $o_SR_PreSerieEscaneoBN->setMovimientoId( $s_MovimientoId );
                    $o_SR_PreSerieEscaneoBN->setMovimientoDetalleId( $i_MovimientoDet );
                    $o_SR_PreSerieEscaneoBN->setSerieId( $i_IdPreSerie );
                    $o_SR_PreSerieEscaneoBN->setProductoId( $cod_item );
                    $o_SR_PreSerieEscaneoBN->setOperacion( "I" );
                    
                    $o_SerieDetalleBL = new SerieDetalleBL();
                    $o_SerieDetalleBL->eliminarPreSerieEscaneo( $o_SR_PreSerieEscaneoBN );
                }
                if( $tipo_proc == "eliminar_todo_serie" )
                {
                    $o_SR_PreSerieEscaneoBN = new SR_PreSerieEscaneoBN();
                    $o_SR_PreSerieEscaneoBN->setMovimientoId( $s_MovimientoId );
                    $o_SR_PreSerieEscaneoBN->setMovimientoDetalleId( $i_MovimientoDetalleId );
                    //$o_SR_PreSerieEscaneoBN->setSerieId( $i_IdPreSerie );
                    $o_SR_PreSerieEscaneoBN->setProductoId( $this->CodItem );
                    $o_SR_PreSerieEscaneoBN->setOperacion( "I" );
                    
                    $o_SerieDetalleBL = new SerieDetalleBL();
                    $o_SerieDetalleBL->eliminarPreSerieEscaneo( $o_SR_PreSerieEscaneoBN );
                }
            }
        }
        catch ( Exception $o_Exception )
        {
            $this->s_MensajeError = $o_Exception->getMessage();
        }
    }
}