hola:
Hice las modificaciones recomendadas pero sigue sin funcionar, donde llama a la función para cerrar acta, lo hago acá (en negrita):
“\pers_unq\modelo\transacciones\carga_notas_cursada.php”
//---------------------------------------------
// EVENTOS
//---------------------------------------------
function evt__procesar_folio($seleccion, $renglones, $param_sistema)
{
$acta_cab = $this->info__acta_cabecera($seleccion);
$error = new error_guarani_procesar_renglones('Error cargando notas');
$error_acta = new \siu\errores\error_guarani_acta_cursada_cerrada('Error cargando notas - Acta no disponible');
//array('asentar_notas_actas_regulares' => $asentar_notas_actas_regulares, 'cierre_parcial' => $cierre_parcial)
// N = No Obligatoria, O = Obligatoria, S = Sin Notas
if ($this->acta_regular_activa($seleccion)) {
$hay_renglones_actualizados = false;
foreach($renglones as $renglon) {
try {
$renglon['LEGAJO_DOCENTE'] = kernel::persona()->get_legajo_docente();
$renglon['FECHA_INICIO'] = $acta_cab['FECHA_INICIO'];
$renglon['COMISION'] = $acta_cab['COMISION'];
if(!empty($renglon['CONDICION']))
{
$parametros = array('condicion' => $renglon['CONDICION']);
$resultado = catalogo::consultar('carga_notas_cursada', 'get_resultado_condicion', $parametros);
}
else
{
$resultado = "";
}
// validacion sobre el renglon
// $param_sistema = array('asentar_notas_actas_regulares', 'cierre_parcial')
$error_nota = false;
if ($param_sistema['cierre_parcial']){ //Si está en cierre parcial
if ($resultado == "P" && $renglon['PROMOCIONAL'] == "S"){ //CONTROLO PARÁMETRO cargar_notas_promocion PARA ALMUNOS PROMOCIONALES
if ($renglon['CONDICION'] != "" && $renglon['FECHA'] != "" ){
switch($param_sistema['cargar_notas_promocion']){
case "O":
if (empty($renglon['NOTA'])){
$error_nota = true;
$error->add_renglon($renglon['RENGLON'], "Debe ingresar la nota de la promoción", $renglon);
}
break;
}
} else {
$error_nota = true;
$error->add_renglon($renglon['RENGLON'], "Debe ingresar la condición de regularidad y la fecha", $renglon);
}
}
//Obligo a cargar todos los datos del alumno
if ($renglon['CONDICION'] != "" && $renglon['FECHA'] != ""){
switch($param_sistema['asentar_notas_actas_regulares']){
case "O":
if (empty($renglon['NOTA']) && ($resultado != "U") ){
$error_nota = true;
$error->add_renglon($renglon['RENGLON'], "Debe ingresar la nota de la regularidad", $renglon);
}
break;
case "S":
if($renglon['PROMOCIONAL'] == "S" && $param_sistema['cargar_notas_promocion'] == 'O')
{
$renglon['NOTA'] = $renglon['NOTA'];
}
else
{
$renglon['NOTA'] = "";
}
break;
}
} else {
if ($renglon['CONDICION'] == "" && $renglon['FECHA'] == "" && $renglon['ASISTENCIA'] == "" && $renglon['NOTA'] == "")
{
$renglon['RESULTADO'] = "";
}
else
{
$error_nota = true;
$error->add_renglon($renglon['RENGLON'], "Debe ingresar la condición de regularidad y la fecha", $renglon);
}
}
}
if (!$error_nota){
$ok = catalogo::consultar('carga_notas_cursada', 'guardar_renglon', $renglon);
if($ok[0]==1) {
$hay_renglones_actualizados = true;
} else {
$error->add_renglon($renglon['RENGLON'], $ok[1], $renglon);
}
}
} catch (error_kernel $e) {
$error->add_renglon($renglon['RENGLON'], $e->getMessage(), $renglon);
//kernel::log()->add_error($e);
}
}
if ($hay_renglones_actualizados){
$parametros = array('comision' => $acta_cab['COMISION']);
$ok = catalogo::consultar('carga_notas_cursada', 'actualizar_acta', $parametros);
// INICIO - Cerrar acta
catalogo::consultar(‘carga_notas_cursada’, ‘cerrar_acta’, $parametros); //<====> Deberías agregar esta función que cierra el acta
// FIN - Cerrar acta
catalogo::limpiar_cache(‘carga_notas_cursada’, ‘porcentaje_carga_notas_comision’, $parametros);
}
if($error->hay_renglones()) {
throw $error;
}
} else {
throw $error_acta;
}
}
Paso los procedimientos, pero funcionan por separado.
En “pers\pers_unq\modelo\datos\db\carga_notas_cursada.php”, quedo como me recomendaste:
/**
* parametros: _ua, comision
* cache: no
* filas: 1
*/
function cerrar_acta($parametros)
{
////////////////////////////////////////////////
// INICIO – Cerrar acta promoción y cursadas
////////////////////////////////////////////////
// maxima cantidad de folios del acta
$sql = “SELECT SUM(CASE resultado WHEN NULL THEN 0 ELSE 1 END) * 100 / COUNT(*) AS porcentajes
FROM sga_curs_pendiente
WHERE comision = {$parametros[‘comision’]}”;
$porcentaje = current(kernel::db()->consultar_fila($sql, db::FETCH_NUM));
$sqlActas = "select SUM(CASE fecha_regularidad WHEN NULL THEN 0 ELSE 1 END) * 100 / COUNT(*) AS porcentajef from sga_curs_pendiente where comision = {$parametros['comision']}";
$fechasRegularidad = kernel::db()->consultar_fila($sqlActas, db::FETCH_NUM);
if ($porcentaje[0] == $fechasRegularidad[0]){
$sqlActas = "select DISTINCT acta_promocion, acta_regular from sga_curs_pendiente where comision = {$parametros['comision']}";
$datos = kernel::db()->consultar_fila($sqlActas, db::FETCH_NUM);
$param1 = kernel::db()->quote($datos[0]);
$sqlGrabarPromo = "EXECUTE PROCEDURE sp_cerrar_actaprom_294_unq({$parametros['_ua']},$param1)";
kernel::db()->consultar_fila($sqlGrabarPromo, db::FETCH_NUM);
$param2 = kernel::db()->quote($datos[1]);
$sqlGrabarCursado = "EXECUTE PROCEDURE sp_cerrar_actareg_294_unq({$parametros['_ua']},$param2)";
kernel::db()->consultar_fila($sqlGrabarCursado, db::FETCH_NUM);
}
////////////////////////////////////////////////
// FIN – Cerrar acta promoción y cursadas
////////////////////////////////////////////////
}
Donde le estoy errando?.Muchas gracias!!!
sp_cerrar_actareg_294_unq.sql (14 KB)
sp_cerrar_actaprom_294_unq (copia).sql (13.3 KB)