/**
      *
      *Editar los detalles de un gasto.
      <br/><br/><b>Update : </b> Tambien se deberia de tomar  de la sesion el id del usuario qeu hiso al ultima modificacion y una fecha de ultima modificacion.
      *
      * @param id_gasto int Id que hace referencia a este gasto
      * @param fecha_gasto string Fecha que el usuario selecciona en el sistema, a la cual le quiere asignar el gasto.
      * @param monto float Monto a gastar
      * @param id_concepto_gasto int Id del concepto del gasto
      * @param descripcion string Descripcion del gasto en caso de que no este en la lista de conceptos.
      * @param nota string Informacion adicinal sobre el gasto
      * @param folio string Folio de la factura de ese gasto
      **/
 public static function EditarGasto($id_gasto, $descripcion = null, $fecha_gasto = null, $folio = null, $id_concepto_gasto = null, $nota = null)
 {
     Logger::log("Editando gasto");
     //valida si se recibieron parametros a editar o no
     if (!$fecha_gasto && !$id_concepto_gasto && !$descripcion && !$nota && !$folio) {
         Logger::warn("No se recibieron parametros para editar, no hay nada que editar");
         throw new Exception("No se recibieron parametros para editar, no hay nada que editar");
     }
     //valida los parametros obtenidos
     $validar = self::validarParametrosGasto($id_concepto_gasto, null, null, null, $fecha_gasto, null, null, $nota, $descripcion, $folio);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new Exception($validar);
     }
     $gasto = GastoDAO::getByPK($id_gasto);
     //Los parametros que no sean null seran tomados como actualizacion
     if (!is_null($fecha_gasto)) {
         $gasto->setFechaDelGasto($fecha_gasto);
     }
     if (!is_null($id_concepto_gasto)) {
         $gasto->setIdConceptoGasto($id_concepto_gasto);
     }
     if (!is_null($descripcion)) {
         $gasto->setDescripcion($descripcion);
     }
     if (!is_null($nota)) {
         $gasto->setNota($nota);
     }
     if (!is_null($folio)) {
         $gasto->setFolio($folio);
     }
     DAO::transBegin();
     try {
         GastoDAO::save($gasto);
     } catch (Exception $e) {
         DAO::transRollBack();
         Logger::error("No se pudo editar el gasto: " . $e);
         throw new Exception("No se pudo editar el gasto");
     }
     DAO::transEnd();
     Logger::log("Gasto editado exitosamente");
 }