feat: sincronización avanzada SIU por código ASIG, perfil con foto/nombre de Moodle y refinamiento visual violeta
This commit is contained in:
+13
-54
@@ -1,15 +1,17 @@
|
||||
<ion-header [translucent]="true">
|
||||
<ion-toolbar color="secondary">
|
||||
<div class="header-content">
|
||||
<img src="assets/logo_unicaba_mini.png" class="header-logo" alt="UNICABA Logo" (click)="openCredencial()"
|
||||
style="cursor: pointer;" title="Ver Credencial Digital">
|
||||
<img src="assets/logo_unicaba_mini.png" class="header-logo" alt="UNICABA Logo">
|
||||
<ion-title class="ion-text-center">
|
||||
Cartelera de Aulas
|
||||
UNICABA
|
||||
</ion-title>
|
||||
<ion-buttons slot="end">
|
||||
<ion-button *ngIf="viewMode === 'favoritos'" (click)="importarRespaldoManual()" title="Importar Respaldo">
|
||||
<ion-icon slot="icon-only" name="cloud-download-outline"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button (click)="goToPerfil()" title="Mi Perfil">
|
||||
<ion-icon slot="icon-only" name="person-circle-outline"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button (click)="isInfoModalOpen = true">
|
||||
<ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
|
||||
</ion-button>
|
||||
@@ -207,12 +209,10 @@
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;">
|
||||
<span class="selector-title" style="margin: 0;">Plan de Estudios / Recorrido</span>
|
||||
<div style="display: flex; gap: 8px;">
|
||||
<ion-button fill="outline" color="primary" size="small" (click)="forzarRespaldo()" style="margin: 0;" title="Guardar Manualmente" class="header-btn">
|
||||
<ion-button fill="outline" color="primary" size="small" (click)="forzarRespaldo()" style="margin: 0;"
|
||||
title="Guardar Manualmente" class="header-btn">
|
||||
<ion-icon name="save-outline" slot="icon-only"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button fill="outline" [color]="siuMaterias && siuMaterias.length > 0 ? 'success' : 'tertiary'" size="small" (click)="openSiuModal()" style="margin: 0;" title="Conectar con SIU Guaraní" class="header-btn">
|
||||
<ion-icon name="school-outline" slot="icon-only"></ion-icon>
|
||||
</ion-button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="selector-desc">Selecciona tu carrera para guardar tu avance y ver el recorrido sugerido, toca materias
|
||||
@@ -244,7 +244,8 @@
|
||||
[class.encurso]="isEnCurso(row.c1.name)" [class.optativa-cell]="row.c1.isOptativa"
|
||||
(click)="handleCellClick(row.c1)">
|
||||
<span class="m-name">{{ abreviarMateria(row.c1.name) }}</span>
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c1.name) as siuMat" [ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c1.name) as siuMat"
|
||||
[ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
{{ getSiuBadgeText(siuMat) }}
|
||||
</ion-badge>
|
||||
</div>
|
||||
@@ -254,7 +255,8 @@
|
||||
[class.encurso]="isEnCurso(row.c2.name)" [class.optativa-cell]="row.c2.isOptativa"
|
||||
(click)="handleCellClick(row.c2)">
|
||||
<span class="m-name">{{ abreviarMateria(row.c2.name) }}</span>
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c2.name) as siuMat" [ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c2.name) as siuMat"
|
||||
[ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
{{ getSiuBadgeText(siuMat) }}
|
||||
</ion-badge>
|
||||
</div>
|
||||
@@ -264,7 +266,8 @@
|
||||
[class.encurso]="isEnCurso(row.c3.name)" [class.optativa-cell]="row.c3.isOptativa"
|
||||
(click)="handleCellClick(row.c3)">
|
||||
<span class="m-name">{{ abreviarMateria(row.c3.name) }}</span>
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c3.name) as siuMat" [ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
<ion-badge *ngIf="getSiuMateriaParaCelda(row.c3.name) as siuMat"
|
||||
[ngClass]="'custom-badge-' + getNotaColor(siuMat.nota)" class="siu-cell-badge">
|
||||
{{ getSiuBadgeText(siuMat) }}
|
||||
</ion-badge>
|
||||
</div>
|
||||
@@ -276,50 +279,6 @@
|
||||
<!-- The SIU Guaraní list at the bottom was removed per user request -->
|
||||
</div>
|
||||
|
||||
<!-- Modal SIU Guaraní (Login) -->
|
||||
<ion-modal [isOpen]="isSiuModalOpen" (didDismiss)="closeSiuModal()" class="siu-login-modal" initialBreakpoint="0.8" [breakpoints]="[0, 0.8, 1]">
|
||||
<ng-template>
|
||||
<ion-header class="ion-no-border">
|
||||
<ion-toolbar color="primary">
|
||||
<ion-title>Conectar con SIU</ion-title>
|
||||
<ion-buttons slot="end">
|
||||
<ion-button (click)="closeSiuModal()" [disabled]="siuLoading">Cerrar</ion-button>
|
||||
</ion-buttons>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
<ion-content class="ion-padding siu-login-content">
|
||||
<div class="ion-text-center siu-logo-container ion-margin-bottom">
|
||||
<ion-icon name="school" color="primary" style="font-size: 64px;"></ion-icon>
|
||||
<h2 style="margin-top: 10px;">Historia Académica</h2>
|
||||
<p style="color: var(--ion-color-medium);">Ingresá para traer tu recorrido y notas automáticamente a la app.</p>
|
||||
</div>
|
||||
|
||||
<ion-list class="ion-margin-bottom siu-form-list" lines="full">
|
||||
<ion-item>
|
||||
<ion-icon name="person-outline" slot="start" color="medium"></ion-icon>
|
||||
<ion-input type="text" placeholder="DNI (Sin puntos)" [(ngModel)]="siuDni" [disabled]="siuLoading" clearInput required></ion-input>
|
||||
</ion-item>
|
||||
<ion-item>
|
||||
<ion-icon name="lock-closed-outline" slot="start" color="medium"></ion-icon>
|
||||
<ion-input type="password" placeholder="Contraseña de SIU" [(ngModel)]="siuPass" [disabled]="siuLoading" clearOnEdit="false" required></ion-input>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
|
||||
<div class="siu-info ion-margin-bottom" style="font-size: 0.85rem; color: var(--ion-color-medium); background: rgba(var(--ion-color-primary-rgb), 0.1); padding: 12px; border-radius: 8px; border-left: 4px solid var(--ion-color-primary);">
|
||||
<p style="margin-top: 0;"><ion-icon name="shield-checkmark-outline"></ion-icon> Privacidad Zero-Trust: Las credenciales no se envían a ningún servidor nuestro. La app se conecta directo con el portal localmente desde tu teléfono.</p>
|
||||
<p style="margin-bottom: 0;"><ion-icon name="alert-circle-outline"></ion-icon> Al conectar, se importará tu última situación curricular.</p>
|
||||
</div>
|
||||
|
||||
<ion-button expand="block" color="primary" class="ion-margin-top" (click)="sincronizarSiu()" [disabled]="siuLoading || !siuDni || !siuPass">
|
||||
<ng-container *ngIf="!siuLoading">
|
||||
<ion-icon name="log-in-outline" slot="start"></ion-icon>
|
||||
Conectar y Sincronizar
|
||||
</ng-container>
|
||||
<ion-spinner *ngIf="siuLoading" name="crescent"></ion-spinner>
|
||||
</ion-button>
|
||||
</ion-content>
|
||||
</ng-template>
|
||||
</ion-modal>
|
||||
|
||||
</ion-content>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user