<?php

class updateTipoAsignacionAction extends sfAction{


  public function handleError(){

    $this->forward('recursos_asignacion','editTipoAsignacion');
    
  }


  public function validate(){

    // Validación de Sesión
    $sv = new sessionValidate($this);
    if(!$sv->valSessionAtt('recursos', 'recursos_asignacion', 100)){
      return $this->redirect('recursos_asignacion');
    }

    // Parámetros de la forma
    $mes = $this->getRequestParameter('mes');
    $ano = $this->getRequestParameter('ano');
    $producto_origen_fondos_id = $this->getRequestParameter('producto_origen_fondos_id');

    // init $retorno
    $retorno = true;

    // objeto request
    $request = $this->getRequest();

    if ($mes && $ano && $producto_origen_fondos_id) {

      // Se verifica antes que todo que la asignación no sea para un mes pasado
      $ano_mes_actual = date('Y-m');

      if ($mes <= 9) {

        $mesf = "0$mes";

      }
      else {

        $mesf = $mes;

      }

      $ano_mes = $ano.'-'.$mesf;

      if ($ano_mes < $ano_mes_actual) {

        $this->getRequest()->setError('error','No se pueden asignar recursos a un mes pasado.');

        $retorno = false;

      }
      else {

        // Se verifica que haya aunque sea una asignación el mes anterior
        if ($mes < 2) {

          // Estamos en Enero
          $mes_anterior = 12;

          $ano_anterior = $ano-1;

        }
        else {

          // Estamos en cualquier mes excepto Enero
          $mes_anterior = $mes-1;

          $ano_anterior = $ano;

        }

        $c = new Criteria();

        // Se parte de la premisa de que haya aunque sea un registro de este tipo de origen de fondos
        $c->add(RecursoPresupuestoPeer::PRODUCTO_ORIGEN_FONDOS_ID, $producto_origen_fondos_id);

        $presupuesto_origen = RecursoPresupuestoPeer::doSelectOne($c);

        $c->clear();

        if ($presupuesto_origen) {

          // Ahora se verifica si existen registros de este mes
          $c->add(RecursoPresupuestoPeer::PRODUCTO_ORIGEN_FONDOS_ID, $producto_origen_fondos_id);

          $c->add(RecursoPresupuestoPeer::MES, $mes);

          $c->add(RecursoPresupuestoPeer::ANO, $ano);

          $recurso_presupuesto_actual = RecursoPresupuestoPeer::doSelectOne($c);

          $c->clear();

          if (!$recurso_presupuesto_actual) {

            // Se va a crear nuevas asignaciones en el mes elegido, se verifica si haya asignaciones en el mes anterior
            $c->add(RecursoPresupuestoPeer::PRODUCTO_ORIGEN_FONDOS_ID, $producto_origen_fondos_id);

            $c->add(RecursoPresupuestoPeer::MES, $mes_anterior);

            $c->add(RecursoPresupuestoPeer::ANO, $ano_anterior);

            $recurso_presupuesto_anterior = RecursoPresupuestoPeer::doSelectOne($c);

            $c->clear();

            if (!$recurso_presupuesto_anterior) {

              $this->getRequest()->setError('error','Aún no se han asignado recursos el mes anterior.');

              $retorno = false;

            }

          }

        }

      }

    }

    return $retorno;

  }


  public function execute(){

    // Validación de Sesión
    $sv = new sessionValidate($this);
    $sv->setSessionAtt('recursos', 'recursos_asignacion', 200);

    $mes = $this->getRequestParameter('mes');
    $ano = $this->getRequestParameter('ano');
    $producto_origen_fondos_id = $this->getRequestParameter('producto_origen_fondos_id');

    // Se redirecciona al siguiente paso que es la lista de entidades asignadas
    return $this->redirect('recursos_asignacion/editEntidadesAsignadas?mes='.$mes.'&ano='.$ano.'&producto_origen_fondos_id='.$producto_origen_fondos_id);

  }


}
