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(); }