/**
  * Duplica la llamada con los parametros comunes.
  * @author Ana Martín
  * @version 26-02-09
  */
 protected function duplicarTarea($tarea)
 {
     $nueva_tarea = new Tarea();
     $nueva_tarea->setIdEmpresa($tarea->getIdEmpresa());
     $nueva_tarea->setResumen($tarea->getResumen());
     $nueva_tarea->setIdEstadoTarea(TareaPeer::ID_ESTADO_EVENTO_PLANEADO);
     $nueva_tarea->setEsEvento(1);
     return $nueva_tarea;
 }
 protected function updateItemsFormularioFromRequest($empresa, $id_tabla = null)
 {
     //parametros obtenidos de la formulario_modelo.
     if (!$empresa) {
         return null;
     }
     $campos = $empresa->getCamposFormularioOrdenadosAlcancetablas($id_tabla);
     foreach ($campos as $campo) {
         $name_campo = "campo_" . $campo->getIdCampo();
         $datos_campo = $this->getRequestParameter($name_campo);
         if (!$campo->esTipoLista()) {
             $item_base = $campo->getElementoUnico();
             $name_item = "item_base_" . $item_base->getIdItemBase() . "";
             $item = $this->getItemOrCreate($item_base->getIdItemBase());
             $item->setIdFormulario($this->formulario->getIdFormulario());
             if ($campo->esTipoTextoCorto()) {
                 $item->setTextoCorto(isset($datos_campo[$name_item]) && $datos_campo[$name_item] != '' ? $datos_campo[$name_item] : null);
             } elseif ($campo->esTipoTextoLargo()) {
                 $item->setTextoLargo(isset($datos_campo[$name_item]) && $datos_campo[$name_item] != '' ? $datos_campo[$name_item] : null);
             } elseif ($campo->esTipoNumero()) {
                 $item->setNumero(isset($datos_campo[$name_item]) && $datos_campo[$name_item] != '' ? $datos_campo[$name_item] : null);
             } elseif ($campo->esTipoFecha()) {
                 if (isset($datos_campo[$name_item]) && $datos_campo[$name_item] != "") {
                     $value = sfContext::getInstance()->getI18N()->getTimestampForCulture($datos_campo[$name_item], $this->getUser()->getCulture());
                     $mi_date = new Date($value);
                     $item->setFecha($mi_date->getTimestamp());
                     //BORRAMOS LAS TAREAS QUE EXISTAN PARA ESTE ITEM, AUNQUE SEA UN CAMPO SIN ALARMA, POR SI ACASO
                     if ($item->getIdItem() != 0) {
                         $c = new Criteria();
                         $c->addAnd(TareaPeer::ID_CAMPO, $campo->getIdCampo(), Criteria::EQUAL);
                         $c->addAnd(TareaPeer::ID_FORMULARIO, $this->formulario->getIdFormulario(), Criteria::EQUAL);
                         TareaPeer::doDelete($c);
                     }
                     //CAMPOS CON ALARMA
                     if ($campo->getMostrarEnPadre() && isset($datos_campo["tiene_alarma"])) {
                         $item->setSiNo(true);
                         $item->setNumero($datos_campo['usuario_avisar']);
                         if (!isset($datos_campo['cuando_alarma'])) {
                             $datos_campo['cuando_alarma'] = array();
                         }
                         if (!is_array($datos_campo['cuando_alarma'])) {
                             $datos_campo['cuando_alarma'] = array($datos_campo['cuando_alarma']);
                         }
                         $cuando = implode("##", $datos_campo['cuando_alarma']);
                         $item->setTextoCorto($cuando);
                         //CREAMOS TAREAS
                         foreach ($datos_campo['cuando_alarma'] as $cu) {
                             if ($cu == "1") {
                                 $fecha_avisar = new Date($mi_date->getTimestamp());
                                 $fecha_avisar->addMonths(-1);
                                 $txt_avisar = "Falta un mes para";
                             } else {
                                 if ($cu == "2") {
                                     $fecha_avisar = new Date($mi_date->getTimestamp());
                                     $fecha_avisar->addWeeks(-2);
                                     $txt_avisar = "Faltan dos semanas para";
                                 } else {
                                     if ($cu == "3") {
                                         $fecha_avisar = new Date($mi_date->getTimestamp());
                                         $fecha_avisar->addWeeks(-1);
                                         $txt_avisar = "Falta una semana para";
                                     } else {
                                         if ($cu == "4") {
                                             $fecha_avisar = new Date($mi_date->getTimestamp());
                                             $fecha_avisar->addDays(-1);
                                             $txt_avisar = "Falta un día para";
                                         } else {
                                             if ($cu == "5") {
                                                 $fecha_avisar = new Date($mi_date->getTimestamp());
                                                 //$fecha_avisar->addMonths(-1);
                                                 $txt_avisar = "";
                                             }
                                         }
                                     }
                                 }
                             }
                             $hoy = new Date();
                             if ($fecha_avisar->getTimestamp() < $hoy->getTimestamp()) {
                                 continue;
                             }
                             $tarea = new Tarea();
                             $tarea->setIdCampo($campo->getIdCampo());
                             $tarea->setIdFormulario($this->formulario->getIdFormulario());
                             $tarea->setIdEmpresa(sfContext::getInstance()->getUser()->getAttribute('idempresa'));
                             if ($item->getNumero() != "" || $item->getNumero() != "0") {
                                 $tarea->setAvisarEmail(true);
                                 $tarea->setIdUsuario($item->getNumero());
                             } else {
                                 $tarea->setAvisarEmail(false);
                             }
                             $mtabla = TablaPeer::retrieveByPK($id_tabla);
                             if (!$mtabla instanceof Tabla) {
                                 $mtabla = new Tabla();
                             }
                             $txt = $txt_avisar . " el " . $item->__toString() . ", '" . strtolower($campo->getNombre()) . "' de '" . strtolower($mtabla->getNombre()) . "' para '" . $this->formulario->__toString() . "'";
                             $tarea->setResumen($txt);
                             $tarea->setEsEvento(false);
                             $tarea->setIdEstadoTarea(TareaPeer::ID_ESTADO_TAREA_PLANEADO);
                             $fecha_avisar->setHours(8);
                             $fecha_avisar->setMinutes(0);
                             $tarea->setFechaInicio($fecha_avisar->getTimestamp());
                             $fecha_avisar->setHours(20);
                             $fecha_avisar->setMinutes(0);
                             $tarea->setFechaVencimiento($fecha_avisar->getTimestamp());
                             $tarea->save();
                             //$mis_tareas[] = $tarea->getIdTarea();
                         }
                     } else {
                         $item->setSiNo(false);
                         $item->setTextoCorto("");
                     }
                 } else {
                     $item->setFecha(null);
                 }
             } elseif ($campo->esTipoBooleano()) {
                 $item->setSiNo(isset($datos_campo[$name_item]) ? true : false);
             } elseif ($campo->esTipoSelectPeriodo()) {
                 $name_item_year = "item_base_year_" . $item_base->getIdItemBase();
                 //hace falta nuevo campo en "item", para almacenar el tipo de periodo.
                 $item->setNumero(isset($datos_campo[$name_item]) ? $datos_campo[$name_item] : null);
                 $item->setAnio(isset($datos_campo[$name_item_year]) && $datos_campo[$name_item_year] != '' ? $datos_campo[$name_item_year] : null);
             } elseif ($campo->esTipoTabla()) {
                 $item->setIdTabla(isset($datos_campo[$name_item]) && $datos_campo[$name_item] != '' ? $datos_campo[$name_item] : null);
             } elseif ($campo->esTipoObjeto()) {
                 $item->setIdObjeto(isset($datos_campo[$name_item]) && $datos_campo[$name_item] != '' ? $datos_campo[$name_item] : null);
             } elseif ($campo->esTipoDocumento()) {
                 $fileName = $this->getRequest()->getFileName($name_campo);
                 if (isset($fileName) && $fileName != '') {
                     $filePath = $this->getRequest()->getFilePath($name_campo);
                     if (is_uploaded_file($filePath)) {
                         if (!file_exists(sfConfig::get('app_directorio_upload') . '/docs/')) {
                             mkdir(sfConfig::get('app_directorio_upload') . '/docs/');
                         }
                         if ($item->getTextoCorto() != "") {
                             @unlink(sfConfig::get('app_directorio_upload') . '/docs/' . $item->getTextoCorto());
                         }
                         move_uploaded_file($filePath, sfConfig::get('app_directorio_upload') . '/docs/' . $item->getIdItem() . "_" . $fileName);
                         $item->setTextoCorto($item->getIdItem() . "_" . $fileName);
                     }
                 }
             } else {
                 //?
             }
             if (!$item->isDeleted()) {
                 //$this->formulario->addItem($item)
                 $item->save();
             }
         } else {
             //es una lista
             $id_item_base_radio_seleccionado = isset($datos_campo['item_base']) ? $datos_campo['item_base'] : null;
             $items_base = $campo->getItemsBaseOrdenados();
             foreach ($items_base as $item_base) {
                 $name_item = "item_base_" . $item_base->getIdItemBase() . "";
                 $name_item_texto_auxiliar = "item_base_texto_" . $item_base->getIdItemBase();
                 if ($campo->getSeleccionMultiple()) {
                     $item = $this->getItemOrCreate($item_base->getIdItemBase());
                     $item->setIdFormulario($this->formulario->getIdFormulario());
                     if (isset($datos_campo[$name_item])) {
                         $item->setSiNo(true);
                         $item->setTextoAuxiliar(isset($datos_campo[$name_item_texto_auxiliar]) ? $datos_campo[$name_item_texto_auxiliar] : '');
                     } else {
                         if (!$item->isNew()) {
                             $item->setSiNo(false);
                             $item->setTextoAuxiliar(null);
                         }
                         //anteriormente lo borraba.
                     }
                     if (!$item->isDeleted()) {
                         //$this->formulario->addItem($item);
                         $item->save();
                     }
                 } else {
                     //solo puede haber uno.
                     $item_radio = $this->getItemOrCreate($item_base->getIdItemBase());
                     $item_radio_anterior = $item_radio;
                     if ($item_base->getIdItemBase() == $id_item_base_radio_seleccionado) {
                         $item_radio_seleccionado = $this->getItemOrCreate($item_base->getIdItemBase());
                         $item_radio_seleccionado->setIdFormulario($this->formulario->getIdFormulario());
                         $item_radio_seleccionado->setSiNo(true);
                         $item_radio_seleccionado->setTextoAuxiliar(isset($datos_campo[$name_item_texto_auxiliar]) ? $datos_campo[$name_item_texto_auxiliar] : '');
                         //$this->formulario->addItem($item_radio_seleccionado);
                         $item_radio_seleccionado->save();
                     } else {
                         $item_radio_no_seleccionado = $this->getItemOrCreate($item_base->getIdItemBase());
                         if ($item_radio_no_seleccionado->getIdItem()) {
                             $item_radio_no_seleccionado->delete();
                         }
                     }
                 }
             }
         }
         //fin lista
     }
     //die();
 }