Query para sacar numero de acta para libro de este año

Hola

Estoy haciendo la personalizacion de generar un nuevo numero de acta(maximo_nro + 1), pero teniendo en cuenta solo las actas de este año(Si el mayor numero de acta 2012 fue 524, y el del 2013 es 102, el nuevo numero tiene que ser 103).
Para eso defini una nueva query que va a estar en la fs get_libro_de_actas de co_actas.php de G3.

Queria preguntarles si es correcta como yo la pensé(probe con $origen=‘E’):

SELECT COALESCE(MAX(CAST(acta.nro_acta AS integer)), 0) + 1 as nro_acta
FROM sga_actas acta, sga_actas_folios fol, sga_libros_actas lib
WHERE acta.origen = $origen AND
acta.id_acta = fol.id_acta AND
lib.libro = fol.libro AND
lib.anio_academico = EXTRACT(YEAR FROM CURRENT_DATE);

Saludos!

Hola Francisco.

Entiendo lo que queres hacer, pero me parece que no lo estas haciendo de manera correcta.
Al margen de que la consulta este bien o mal, no entiendo porque queres obtener el nro. de acta cuando obtenes el libro.
Pregunta ¿Eso lo queres hacer solo para actas de exámenes o de comisiones también?

Hay un método en php para obtener el nro. de acta.Creo que la forma correcta para realizar esta personalizacion seria modificar ese método con una consulta especifica para eso, sin necesidad de mezclar el libro.
Si me contas un poco mas donde queres obtener el nro., te puedo dar una ayuda un poco mas especifica.

Saludos,

Gonzalo

Hola

En realidad esto lo estaba hablando por mail para una personalizacion que estamos haciendo en la UBA. Basicamente como habiamos hablando con Guillermo en unas reuniones que tuvimos acerca de las actas y de los libros.

Basicamente nosotros tenemos 1 libro por año, y cada libro tiene una cantidad de actas. Lo que quiero hacer es conseguir el numero de acta mas grande del libro de este año academico. Como me habian comentado, en la wiki de guarani explica que clase y metodo se llama cuando se quiere generar un nuevo numero de acta: https://repositorio.siu.edu.ar/trac/Portal-G3/wiki/NotasTecnicas/metodopersonal
Entonces, mi idea fue personalizar ese metodo para que devuelva el numero de acta correcto segun el libro de ese año.

Espero haber aclarado un poco

Saludos!

Hola Francisco:

   Te cuento antes que nada, el método que deberias modificar es:

Clase: co_actas.php 
Método: generar_nro_acta($parametros) 

Para llegar al número de acta que sigue al libro de ese año deberias:

en el caso de que sea origen examen:

  1. Recuperar el año de la fecha de la mesa
  2. Buscar el libro de ese año… si no existe, crear uno
  3. buscar el maximo numero de acta para ese libro
  4. si existe, sumar 1, si no existe, asignar nuevo libro y nro en 1

Saludos
Sergio

El año de la fecha de la mesa solo es valido si es un caso origen_examen, no?

Te pego la parte de codigo que me refiero


switch ($parametros['origen']) {
			case acta::origen_examen:
				$llamado_mesa = toba::db()->quote($parametros['llamado_mesa']);
			break;
			case acta::origen_regulares:
				$comision = toba::db()->quote($parametros['comision']);
			break;
			case acta::origen_promociones:
				$comision = toba::db()->quote($parametros['comision']);
			break;
		}

Si si, por eso lo aclaré en la respuesta anterior! Entiendo que están trabajando con actas de examen.

Saludos!

Estoy intentando ver como conseguir el año del acta, pero en la tabla sga_mesas_examen tiene el campo anio_academico vacio.

Me fije en guarani, y la mesa de examen creada tiene todos los datos cargados(a pesar de que no encontre ninguno que se llame anio_academico).

Los datos los tengo que sacar de algun otro lado?

Tambien aprovecho para consultar cuando no existe un libro de actas de ese año. Yo tengo entendido que alcanza con llamar a get_libro_de_actas($parametros).
Acaso vos te referis a otra cosa?

Saludos!

Hola Francisco:

Para conseguir el año, lo obtenes del llamado_mesa

Al método generar_nro_acta, le entra como parámetro el llamado_mesa, con ese dato


SELECT  extract(year from fecha)
FROM sga_llamados_mesa
WHERE sga_llamados_mesa.llamado_mesa = $llamado_mesa

Aprovecho para aclararte que para obtener el libro … (item 2 de 4 post atrás) debe ser

  1. Buscar el libro activo para exámes de ese año, si no existe, crear uno… … eso en el metodo get_libro_de_actas del co_actas

SELECT * 
FROM sga_libros_actas
JOIN sga_libros_actas_alcance on (sga_libros_actas_alcance.libro = sga_libros_actas.libro)
WHERE sga_libros_actas_alcance.origen = 'E' 
AND sga_libros_actas.es_libro_activo = 'S'
AND sga_libros_actas.anio_academico = $anio_de_la_fecha_de_llamado

Saludos
Sergio

Muchas gracias por la respuesta Sergio!

Asumo que en el metodo get_libro_de_actas la idea es la misma: Agarrar el año de llamado de la mesa, y devolver el libro correspondiente a ese año, verdad?

Antes yo lo habia personalizado para que devuelva el libro del año actual, pero con lo que me dijiste antes, asumo que esta mal:


$sql = "SELECT 	sga_libros_actas.libro
				FROM 	sga_libros_actas, 
						sga_libros_actas_alcance
				WHERE 	sga_libros_actas.libro				= sga_libros_actas_alcance.libro AND
						sga_libros_actas_alcance.origen		= $origen AND
						sga_libros_actas.es_libro_activo	= '".comunes::si."' AND
                                                sga_libros_actas.anio_academico         = EXTRACT(YEAR FROM CURRENT_DATE)

Creo que entedi mejor lo que querias decir:
La queri:


$libro_acta_sql = "SELECT * FROM sga_libros_actas JOIN sga_libros_actas_alcance 
                                            on (sga_libros_actas_alcance.libro = sga_libros_actas.libro) 
                                                    WHERE sga_libros_actas_alcance.origen = 'E'
                                                    AND sga_libros_actas.es_libro_activo = 'S'
                                                    AND sga_libros_actas.anio_academico = $anio_llamado";

Va en get_libro_de_actas, en el caso de que sea un examen.

Lo que no termino de entender es que si esa query me da vacia(es decir, no hay un libro creado o ya se completo el folio de los anteriores), como hago para crear un nuevo libro?

Saludos!

Hola

Por el momento no continúes con el desarrollo ya que necesitamos analizar el esquema con la configuración de ustedes de los siguientes parámetros :

 exa_forma_asignacion_folio_fisico = Define cuando se asignan los folios fisicos al acta de examen

 exa_agrega_folios_fisicos_extra = Agregar folios físicos extras al libro de actas de examen cuando no hay folios libres

 exa_carga_manual_libro_examen:  Define el modo de carga del libro de actas de examen

Por favor confirmame si entendimos bien la forma de archivo de actas que implementarán:

Libro único por año calendario
( Ejemplo: en el libro del 2013 se guardan actas del año académico 2012 (enero -febrero y marzo 2012) y las del 2013 hasta las mesas del 31-12-2013)

Cada libro
tendrá n tomos

Cada tomo
tendrá xxxx hojas
El número de acta es correlativo entre tomo y tomo. ( EJ : tomo 1 : acta n° 1 a la 290 , Tomo 2: acta 291 a … )
Folio físico: cada tomo tiene su propio foliado físico ( número de hoja 1 a n dentro de cada tomo )

EJEMPLO: Esto significa que la nota de un examen del año 2012 para un alumno se PUEDE ENCONTRAR EN
Libro 2012
tomo 3, folio físco 24 , nro de acta 450 …

Nros de actas: cada acta tendrá n folios ( hojas )
Ejemplo:
Libro 2013
Tomo 1
Nro acta 34
cant folios dentro del acta 2.

Folio físco: A continuación dejo un ejemplo incluyendo el folio físco:

Libro 2012
Tomo 1
Nro acta 1
folio físico 1


Nro acta 11
folio físico 234
Fin tomo 1

   [b] Tomo 2[/b]
       [b]   Nro  acta 12[/b]
          folio físico 1
      ...........
      ..........
          [b]Nro  acta 34[/b]
              folio físico 50
              folio físico 51
  [b]        Nro  acta 35[/b]
              folio físico 52

Libro 2013
Tomo 1
Nro acta 1
folio físico 1
folio físico 2
Nro acta 2
folio físico 3
Nro acta 3
folio físico 4
folio físico 5
folio físico 6
Fin tomo 1

Tomo 2
Nro acta 4
folio físico 1
folio físico 2
Nro acta 5
folio físico 1
folio físico 2
folio físico 3


Nro acta 33
folio físico 44
folio físico 45
Nro acta 34
folio físico 46
Nro acta 35
folio físico 47

Cualquier duda consultanos
Saludos,

Ana María

Hola

Ahora que aclaramos como va a ser el archivado de los actas entre Ana Maria y la gente de academica, retomo este post.

Ahora estoy en el metodo get:_libro_de_actas y me surgieron algunas dudas. En particular, la funcion deberia hacer lo siguiente, a mi entender:

[ol]- Con el id de la mesa, sacar el año de llamado

  • Buscar el ultimo tomo del libro de actas de ese año. Siempre va a existir al menos 1 porque al inicio del año, la gente de academica carga un nuevo libro
  • Si ese tomo no tiene la cantidad de folios fisicos necesarios para guardar el acta, me fijo el valor del parametro “exa_agrega_folios_fisicos_extra”
  • Dependiendo el valor del param, agrego folios al tomo o genero un tomo nuevo
  • Devuelvo el id del libro, sea un nuevo tomo o no.[/ol]

En caso de que mi idea este bien, tengo dudas en como llevar a cabo el paso 3 y 4:

[ol]- Para crear un nuevo tomo, hay que hacer un INSERT directamente en la tabla(no creo que esa sea la mejor idea) o existe una ABM de libro/tomo?

  • Como me fijo cuantos folios le quedan a un libro/tomo?[/ol]

Muchas gracias!

Hola

Revivo denuevo el thread

Le agrego a la pregunta anterior una nueva:

Estamos manejando la version 3.5 de G3, que trae el nuevo esquema de personalizaciones. La idea ahora seria hacer una clase co_actas.php que hereda del co_actas.php de /php/nucleo/actas, y sobrecargar los metodos generar_nro_acta y get_libro_de_actas.

Sin embargo, yo tenia entendido que todas las clases de de nucleo ahora se llamaban <nombre_de_clase>_nucleo para evitar problemas de clases con mismo nombre. Sin embargo, la clase co_actas de co_actas_php se sigue llamando de la forma antigua(las otras clases de /actas si tienen la extension _nucleo).

La pregunta es: Los cambios en los metodos que tengo que personalizar los hago en el archivo original de php/nucleo, o voy a tener que usar el esquema de personalizacion como yo lo habia etendido, es decir, crear el mismo path, y hacer una clase co_actas que extienda el co_actas original?

Saludos!

Hola Francisco.

Para personalizar los “co” tenes que realizar el cambio desde el toba editor!
Las clases de consulta (co) están registradas como objetos TOBA en el sistema, con lo cual para la modificación de alguna de ellas debes generar una clase nueva que extienda de la original dentro de la misma estructura en la carpeta de personalizaciones y además, desde toba_editor personalizar el “co” actual y hacerlo apuntar a la clase nueva. Es por eso que los co_xxx del sistema no tienen el sufijo “_nucleo” ya que son clases que corresponden a objetos TOBA y no forman parte del núcleo del sistema.
En este caso que planteas deberias crear la clase “co_actas_U806” que extienda de co_actas y luego en desde el toba editor ubicando esta clase de consulta, deberas ponerle el punto de montaje “personalizacion” y referenciar a este archivo y nombre de clase. Si te fijas, eso hicimos con co_encuestas y co_inscripciones_cursadas a la cual le aplicaron personalizaciones (ahi tenes un ejemplo).
Espero se entienda. Chequealo y cualquier cosa consulta.

Saludos,

Gonzalo

Muchas Gracias Gonza!
Despues lo pruebo y cualquier problema te aviso!

De paso posteo una post que me quedo a la mitad y que nadie llego a responder:

Ahora estoy en el metodo get:_libro_de_actas y me surgieron algunas dudas. En particular, la funcion deberia hacer lo siguiente, a mi entender:
Con el id de la mesa, sacar el año de llamado
Buscar el ultimo tomo del libro de actas de ese año. Siempre va a existir al menos 1 porque al inicio del año, la gente de academica carga un nuevo libro
Si ese tomo no tiene la cantidad de folios fisicos necesarios para guardar el acta, me fijo el valor del parametro “exa_agrega_folios_fisicos_extra”
Dependiendo el valor del param, agrego folios al tomo o genero un tomo nuevo
Devuelvo el id del libro, sea un nuevo tomo o no.
En caso de que mi idea este bien, tengo dudas en como llevar a cabo el paso 3 y 4:
Para crear un nuevo tomo, hay que hacer un INSERT directamente en la tabla(no creo que esa sea la mejor idea) o existe una ABM de libro/tomo?
Como me fijo cuantos folios le quedan a un libro/tomo?

Saludos!

Posteo denuevo porque se le fue el formato de los numeros:

Ahora estoy en el metodo get:_libro_de_actas y me surgieron algunas dudas. En particular, la funcion deberia hacer lo siguiente, a mi entender:

[ol]- Con el id de la mesa, sacar el año de llamado

  • Buscar el ultimo tomo del libro de actas de ese año. Siempre va a existir al menos 1 porque al inicio del año, la gente de academica carga un nuevo libro
  • Si ese tomo no tiene la cantidad de folios fisicos necesarios para guardar el acta, me fijo el valor del parametro “exa_agrega_folios_fisicos_extra”
  • Dependiendo el valor del param, agrego folios al tomo o genero un tomo nuevo
  • Devuelvo el id del libro, sea un nuevo tomo o no.[/ol]

En caso de que mi idea este bien, tengo dudas en como llevar a cabo el paso 3 y 4:

[ol]- Para crear un nuevo tomo, hay que hacer un INSERT directamente en la tabla(no creo que esa sea la mejor idea) o existe una ABM de libro/tomo?

  • Como me fijo cuantos folios le quedan a un libro/tomo?[/ol]
  1. OK: El año lo sacas de la fecha de la de la mesa de examen
  2. OK: Se esta rehaciendo el tema de la relacion libro-tomos. En este caso sacar el libro de actas que corresponde al año del punto 1. ¿Año calendario, no?
    3 y 4. Duda: Si existe un libro de actas por año, no deberian tener un maximo de folios por libro, o si lo tienen? Es decir el libro se deberia llenar con todas las actas que caen ese año, sin restringir la cantidad de folios.
    En el caso que si tengan definido una maxima cantidad de folios por cada libro de actas la consulta (considerando que bucsan cantidad de folios por el libro que corresponde al año academico) es:

  SELECT COUNT (*)   
     FROM sga_libros_actas as l,  sga_actas_folios as f
  WHERE l.libro = f.libro
       AND l.anio_academico = <año de la mesa de examen - punto 1>   -- Si registran el año del libro en el campo "anio_academico"
       AND l.es_libro_activo =   'S'      -- Solo buscar en el libro activo de ese año.
       AND f.folio_fisico IS NOT NULL; -- Solo folios de las actas que ya tengan definido el folio fisico del libro.

En el caso que el libro ya este completo (si tienen definida una cantidad maxima de foliso por libro) deberian crear uno nuevo, esto lo pueden hacer automáticamente con la función f_duplicar_libro_acta (libro, activarnuevolibro) . Esto en el caso que hubiere ya creado un libro de actas para ese año, sino deberá insertarse directamente un libro de actas para el año de la mesa.

Hola Alejandro

Muchas gracias por la respuesta! Ahora me voy a poner a definir get_libro_de_actas con esta informacion.

Te cuento como quedo la definicion que hicimos con Ana Maria:

  • Libro anual único.
  • Por Año Calendario.
  • “n” cantidad de tomos
  • cada tomo 300 folios físicos
  • cada tomo puede tener folios extras a fin de completar el acta
  • cada folio contiene 20 renglones

Asi que me parece, si entendi bien, que la definicion de la query que me pasaste deberia andar.

Despues les cuento como salio

Saludos!

Me surgio una duda:

Como alcare antes, vamos a tener 1 libro unico, pero que va a tener varios tomos.

En la query que me pasaste, filtramos por los libros activos de ese año. Es decir, si yo tengo el libro “Actas 2013”, con 2 tomos( y cada uno con 300 folios de espacio), esa queri me deberia traer un numero entre 300 y 600.

No tengo que filtrar ademas por el maximo numero de tomo de ese año, y ahi fijarme cuantos folios ocupa?

O acaso cuando genero un nuevo tomo, automaticamente los tomos anteriores dejan de estar activos? Digamos, tengo 1 solo tomo activo por año al mismo tiempo.

Tambien aprovecho para preguntarte como invoco a f_duplicar_libro_acta, porque la busque en el proyecto, pero no encontre nada.

Saludos y gracias!

Hola, sumo otra consulta:

Como verifico la cantidad de folios que ocupa el acta que estoy intentando asignar a un libro? Segun pude ver, lo puedo sacar del campo folios_fisicos de la tabla tabla sga_actas_folios, pero para eso necesito el numero de acta, y en la llamada a la funcion get_libro_de_actas no encuentro de donde puedo sacarla.

Basicamente = como saco el numero de acta para poder ver cuantos folios ocupa(para ver si entra o no en el tomo)?

Saludos!