Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as PHP by Cruce_SIMAT ( 3 years ago )
/**
* Muestra el formulario para cargar la BD SIMAT de un periodo.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function cargarSimat($id)
{
$periodo = Periodo::findOrFail($id);
$breadcrumbs = [
['link'=>"tecnico/periodos",'name'=>"Periodos"], ['name'=>"Cargar SIMAT Periodo"]
];
return view('/coordinador/cargar_simat_periodo', [
'breadcrumbs' => $breadcrumbs,
'periodo' => $periodo,
'simat_count' => Simat::where('id_periodo', $id)->get()->count(),
'cruce_simat' => $periodo->cruce_simat
]);
}
/**
* Cruza la BD SIMAT con la BD de actas_verificacion_personas de un periodo determinado.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function cruceSimat($id)
{
$periodo = Periodo::findOrFail($id);
$fecha_limite_retiro = Carbon::parse($periodo->fecha_inicio)->addDays(14);
// Limpiar datos si ya fue cruzado el SIMAT
if ($periodo->cruce_simat) {
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
])
->update([
'actas_verificacion_personas.estado_simat' => null,
'actas_verificacion_personas.matricula_contratada_simat' => null,
'actas_verificacion_personas.fuente_recursos_simat' => null,
'actas_verificacion_personas.certificacion' => null,
'actas_verificacion_personas.observacion' => null,
'actas_verificacion_personas.codigo_dane_simat' => null,
'actas_verificacion_personas.codigo_dane_simat_valido' => null,
'actas_verificacion_personas.fecha_inicio_simat' => null,
]);
}
// Actualiza en la base de datos actas_verificacion_personas los cambos relacionados con la BD de SIMAT que cruzaron
$personas = ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('simat', 'simat.numero_documento_confirmado', '=', 'actas_verificacion_personas.numero_documento_confirmado')
->where([
['actas_verificacion.id_periodo', $id],
['simat.id_periodo', $id],
])
->select(
'actas_verificacion_personas.id as id',
'simat.estado as estado_simat',
'simat.matricula_contratada as matricula_contratada_simat',
'simat.fuente_recursos as fuente_recursos_simat',
'simat.codigo_dane_sede as codigo_dane_simat',
'simat.fecha_inicio as fecha_inicio_simat'
)
->get()
->toArray();
foreach (array_chunk($personas, 3000) as $data) {
$personas_cruce_simat = new ActaVerificacionPersona;
\Batch::update($personas_cruce_simat, $data, 'id');
}
// Actualizar si contiene dane_simat válido
ActaVerificacionPersona::join('dane_simat', 'dane_simat.id', '=', 'actas_verificacion_personas.id_dane_simat')
->join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
])
->whereColumn('actas_verificacion_personas.codigo_dane_simat', 'dane_simat.dane_simat')
->update([
'actas_verificacion_personas.codigo_dane_simat_valido' => true
]);
// Actualizar si contiene dane_simat inválido
ActaVerificacionPersona::join('dane_simat', 'dane_simat.id', '=', 'actas_verificacion_personas.id_dane_simat')
->join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
])
->whereColumn('actas_verificacion_personas.codigo_dane_simat', '<>', 'dane_simat.dane_simat')
->update([
'actas_verificacion_personas.codigo_dane_simat_valido' => false,
'actas_verificacion_personas.certificacion' => 'NO CERTIFICAR',
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Estudiante matriculado en otra institución educativa')"),
]);
// Si está retirado del SIMAT actualizar observación a retirado en SIMAT y certificacion a NO CERTIFICAR
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.estado_simat', 'RETIRADO'],
])
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Retirado en SIMAT')"),
'certificacion' => 'NO CERTIFICAR'
]);
// Si está retirado de SICO actualizar observación a retirado en SICO y certificacion a NO CERTIFICAR
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.verificacion', 5],
])
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Retirado en SICO')"),
'certificacion' => 'NO CERTIFICAR'
]);
/*
* Certificar si:
* - Es modalidad confesión religiosa
* - Tiene estado_simat: MATRICULADO
* - codigo_dane_simat coincide con el código del id_dane_simat
* - matricula_contratada_simat: N
* - fuente_recurso_simat: SGP
* - verificacion: 1, 2, 4
*/
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'sedes.id_contrato', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', 3], // Confesión religiosa
['actas_verificacion_personas.estado_simat', 'MATRICULADO'],
['actas_verificacion_personas.codigo_dane_simat_valido', true],
['actas_verificacion_personas.matricula_contratada_simat', 'N'],
['actas_verificacion_personas.fuente_recursos_simat', 'SGP'],
])
->whereIn('actas_verificacion_personas.verificacion', [1, 2, 4])
->update([
'observacion' => null,
'actas_verificacion_personas.certificacion' => 'CERTIFICAR'
]);
/*
* Certificar si:
* - Es modalidad confesión religiosa
* - Tiene estado_simat: RETIRADO
* - codigo_dane_simat coincide con el código del id_dane_simat
* - matricula_contratada_simat: N
* - fuente_recurso_simat: SGP
* - verificacion: 1, 2, 4
* - fecha retiro SIMAT >= fecha inicio periodo + 14
*/
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'sedes.id_contrato', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', 3], // Confesión religiosa
['actas_verificacion_personas.estado_simat', 'RETIRADO'],
['actas_verificacion_personas.codigo_dane_simat_valido', true],
['actas_verificacion_personas.matricula_contratada_simat', 'N'],
['actas_verificacion_personas.fuente_recursos_simat', 'SGP'],
['actas_verificacion_personas.fecha_inicio_simat', '>=', $fecha_limite_retiro],
])
->whereIn('actas_verificacion_personas.verificacion', [1, 2, 4])
->update([
'observacion' => null,
'actas_verificacion_personas.certificacion' => 'CERTIFICAR'
]);
/*
* Certificar si:
* - Es modalidad diferente a confesión religiosa
* - Tiene estado_simat: MATRICULADO
* - codigo_dane_simat coincide con el código del id_dane_simat
* - matricula_contratada_simat: S
* - fuente_recurso_simat: SGP
* - verificacion: 1, 2 o 4
*/
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'sedes.id_contrato', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', '<>', 3], // Modalidades diferentes a confesiones religiosas
['actas_verificacion_personas.estado_simat', 'MATRICULADO'],
['actas_verificacion_personas.codigo_dane_simat_valido', true],
['actas_verificacion_personas.matricula_contratada_simat', 'S'],
['actas_verificacion_personas.fuente_recursos_simat', 'SGP'],
])
->whereIn('actas_verificacion_personas.verificacion', [1, 2, 4])
->update([
'observacion' => null,
'actas_verificacion_personas.certificacion' => 'CERTIFICAR'
]);
/*
* Certificar si:
* - Es modalidad diferente a confesión religiosa
* - Tiene estado_simat: RETIRADO
* - codigo_dane_simat coincide con el código del id_dane_simat
* - matricula_contratada_simat: S
* - fuente_recurso_simat: SGP
* - verificacion: 1, 2 o 4
* - fecha retiro SIMAT >= fecha inicio periodo + 14
*/
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'sedes.id_contrato', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', '<>', 3], // Modalidades diferentes a confesiones religiosas
['actas_verificacion_personas.estado_simat', 'RETIRADO'],
['actas_verificacion_personas.codigo_dane_simat_valido', true],
['actas_verificacion_personas.matricula_contratada_simat', 'S'],
['actas_verificacion_personas.fuente_recursos_simat', 'SGP'],
['actas_verificacion_personas.fecha_inicio_simat', '>=', $fecha_limite_retiro],
])
->whereIn('actas_verificacion_personas.verificacion', [1, 2, 4])
->update([
'observacion' => null,
'actas_verificacion_personas.certificacion' => 'CERTIFICAR'
]);
// Si está ausente sin excusa (3) actualizar observación a Estudiante ausente sin excusa y certificacion a NO CERTIFICAR
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.verificacion', 3],
])
->update([
'actas_verificacion_personas.observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Estudiante ausente sin excusa')"),
'actas_verificacion_personas.certificacion' => 'NO CERTIFICAR'
]);
// Si está retirado (5) y tiene fecha de retiro menor a la fecha inicio del periodo + 14 días actualizar observación a Estudiante retirado de la institución el dd-mm-aaaa y certificacion a NO CERTIFICAR
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('periodos', 'periodos.id', '=', 'actas_verificacion.id_periodo')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.verificacion', 5],
['actas_verificacion_personas.fecha_retiro', '<', $fecha_limite_retiro],
])
->whereNotNull('actas_verificacion_personas.fecha_retiro')
->update([
'actas_verificacion_personas.observacion' => DB::raw("CONCAT('Estudiante retirado de la institución el ', to_char(fecha_retiro, 'DD-MM-YYYY'))"),
'actas_verificacion_personas.certificacion' => 'NO CERTIFICAR'
]);
// Si está retirado (5) y no tiene fecha de retiro actualizar observación a Estudiante retirado de la institución y certificacion a NO CERTIFICAR
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.verificacion', 5],
])
->whereNull('actas_verificacion_personas.fecha_retiro')
->update([
'actas_verificacion_personas.observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Estudiante retirado de la institución')"),
'actas_verificacion_personas.certificacion' => 'NO CERTIFICAR'
]);
// Si estado_simat está GRADUADO actualizar observación a graduado en SIMAT
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.estado_simat', 'GRADUADO'],
])
->whereNull('actas_verificacion_personas.fecha_retiro')
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Graduado en SIMAT')")
]);
// Si el estado SIMAT no es MATRICULADO o RETIRADO o es nulo colocar Estudiante no matriculado en SIMAT
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->where([
['actas_verificacion.id_periodo', $id],
])
->where(function ($query) {
$query->whereNotIn('estado_simat', ['MATRICULADO', 'RETIRADO', 'GRADUADO'])
->orWhere('estado_simat', '=', null);
})
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Estudiante no matriculado en SIMAT')"),
'certificacion' => 'NO CERTIFICAR'
]);
// Si es confesión religiosa, está matriculado, pero está mal tipificado en matricula contratada
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'contratos.id', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', 3], // Confesión religiosa
['actas_verificacion_personas.estado_simat', 'MATRICULADO'],
['actas_verificacion_personas.matricula_contratada_simat', '!=', 'N'],
])
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Mal tipificado en SIMAT (Matricula contratada ') || matricula_contratada_simat || ')'"),
'certificacion' => 'NO CERTIFICAR'
]);
// Si no es confesión religiosa, está matriculado, pero está mal tipificado en matricula contratada
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'contratos.id', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['modalidades.id', '<>', 3], // Modalidades diferentes a confesiones religiosas
['actas_verificacion_personas.estado_simat', 'MATRICULADO'],
['actas_verificacion_personas.matricula_contratada_simat', '!=', 'S'],
])
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Mal tipificado en SIMAT (Matricula contratada ') || matricula_contratada_simat || ')'"),
'certificacion' => 'NO CERTIFICAR'
]);
// Si está matriculado, pero está mal tipificado en fuente de recurso
ActaVerificacionPersona::join('actas_verificacion', 'actas_verificacion.id', '=', 'actas_verificacion_personas.id_acta_verificacion')
->join('sedes', 'sedes.id', '=', 'actas_verificacion.id_sede')
->join('contratos', 'contratos.id', '=', 'sedes.id_contrato')
->join('modalidades', 'modalidades.id', '=', 'contratos.id_modalidad')
->where([
['actas_verificacion.id_periodo', $id],
['actas_verificacion_personas.estado_simat', 'MATRICULADO'],
['actas_verificacion_personas.fuente_recursos_simat', '<>', 'SGP'],
])
->update([
'observacion' => DB::raw("CONCAT_WS(', ', observacion, 'Mal tipificado en SIMAT (Fuente de Recursos NO APLICA)')"),
'certificacion' => 'NO CERTIFICAR'
]);
return back()->with('status', "Se han cruzado " . count($personas) . " personas en Simat correctamente.");
}
/**
* Guardar el formulario para cargar la BD SIMAT de un periodo.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function guardarSimat(Request $request, $id)
{
$periodo = Periodo::findOrFail($id);
Simat::where('id_periodo', $id)->delete();
try {
define("ID_IMPORTACION_SIMAT", uniqid());
$this->data = [];
(new FastExcel)->import($request->file('SimatImportar'), function ($row) use ($id) {
return $this->data[] = [
'id_periodo' => $id,
'estado' => $row['ESTADO'],
'codigo_dane_sede' => $row['CODIGO_DANE_SEDE'],
'fecha_inicio' => $row['FECHAINI'],
'numero_documento_confirmado' => $row['DOC'],
'primer_apellido' => $row['APELLIDO1'],
'segundo_apellido' => $row['APELLIDO2'],
'primer_nombre' => $row['NOMBRE1'],
'segundo_nombre' => $row['NOMBRE2'],
'matricula_contratada' => $row['MATRICULACONTRATADA'],
'fuente_recursos' => $row['FUENTE_RECURSOS'],
'id_importacion' => ID_IMPORTACION_SIMAT,
];
});
$insert_data = collect($this->data);
$chunks = $insert_data->chunk(100);
foreach ($chunks as $chunk)
{
DB::table('simat')->insert($chunk->toArray());
}
$this->cruceSimat($id);
$periodo->update(['cruce_simat' => true]);
return back()->with('status', "Se han cruzado " . count($insert_data) . " personas en Simat correctamente.");
} catch (ErrorException | Error | QueryException $e){
Simat::where('id_importacion', ID_IMPORTACION_SIMAT)->delete();
$message = $e->getMessage();
if($e->getCode()) {
$message = $this->mensajePersonalizado($e->getCode(), $message);
}
return back()->withErrors($message);
} catch (IOException $e) {
return back()->withErrors("El archivo no puede ser abierto porque está protegido, por favor copie su contenido en un nuevo archivo sin protección");
}
}
Revise this Paste