Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: