Kaynağa Gözat

Integración de permisos por perfil al módulo de gestión documental electrónica

Jose Brito 1 yıl önce
ebeveyn
işleme
020cbd7910

+ 11 - 195
sistema-mantenimiento-front/src/app/components/gdel/gdel.component.html

@@ -1,4 +1,4 @@
-<main class="main-container animated fadeIn" (window:resize)="onResize()">
+<main class="main-container" (window:resize)="onResize()">
   
   <!-- <header id="navigation" class="btn-navigate mb-8">
     <div class="prev-page prevent-select indigo_primary_background mat-elevation-z8" matRipple
@@ -9,10 +9,11 @@
   </header> -->
  <app-btn-navigate navigate="goback" nameButton="Regresar" />
 
-  <mat-card class="override-card override-elevation-z8 prevent-select">
+  <mat-card class="override-card override-elevation-z8 prevent-select animated fadeIn">
     <div class="horizontal-container">
       <div class="left-panel">
-        <div class="new-file-button" (click)="openUploadDialog()" [ngClass]="{ new_file_button_enabled: !isFromModule, new_file_button_disabled: isFromModule }">
+        <div class="new-file-button" (click)="openUploadDialog()" [ngClass]="{ new_file_button_enabled: !isFromModule && registerDocumentsEnabled, 
+        new_file_button_disabled: isFromModule || !registerDocumentsEnabled }">
           <mat-icon class="mr-8">add</mat-icon>
           Registrar archivo
         </div>
@@ -82,7 +83,7 @@
             <mat-icon style="transform: scale(4.5);margin: 45px 0;" class="red_primary_font">error</mat-icon>
             <h3>{{ errorStr }}</h3>
           </div>
-          <div class="file-table-results" [ngClass]="{ hidden: !(!isLoading && !hasError) }">
+          <div class="file-table-results animated fadeIn" [ngClass]="{ hidden: !(!isLoading && !hasError && documentsManagementEnabled) }">
             <div class="file-table">
               <table mat-table [dataSource]="dataSource!" matSort class="animated fadeIn" 
               [style.display]="!isLoading ? 'revert' : 'none'">
@@ -131,15 +132,15 @@
                       <mat-icon>more_vert</mat-icon>
                     </button>
                     <mat-menu #menu>
-                      <button mat-menu-item (click)="downloadFile(row.CODIGO, row.VERSION, row.NOMBRE)">
+                      <button mat-menu-item (click)="downloadFile(row.CODIGO, row.VERSION, row.NOMBRE)" [disabled]="!documentsEditorEnabled">
                         <mat-icon>download</mat-icon>
                         <span>Descargar archivo</span>
                       </button>
-                      <button mat-menu-item (click)="openViewer(row.CODIGO, row.VERSION, row.NOMBRE)">
+                      <button mat-menu-item (click)="openViewer(row.CODIGO, row.VERSION, row.NOMBRE)" [disabled]="!documentsViewerEnabled">
                         <mat-icon>open_in_new</mat-icon>
                         <span>Abrir archivo</span>
                       </button>
-                      <button mat-menu-item (click)="openShareDialog(row.CODIGO, row.VERSION, row.NOMBRE)">
+                      <button mat-menu-item (click)="openShareDialog(row.CODIGO, row.VERSION, row.NOMBRE)" [disabled]="!shareDocumentsEnabled">
                         <mat-icon>person_add</mat-icon>
                         <span>Compartir</span>
                       </button>
@@ -168,196 +169,11 @@
             </div>
             <mat-paginator [pageSizeOptions]="[10, 50, 100]" class="override-paginator"></mat-paginator>
           </div>
+          <div class="animated fadeIn" *ngIf="!isLoading && !hasError && !documentsManagementEnabled">
+            <h3 class="ml-20"><b>Su perfil no cuenta con los permisos necesarios para visualizar la información de esta sección.</b></h3>
+          </div>
         </div>
       </div>
     </div>
   </mat-card>
-
-  <!--<mat-card class="override-card-GDEL override-elevation-z8">
-    <section class="override-section">
-      <nav class="override-nav">
-        <mat-card-title class="mat-card-title centre">Administración de documentos</mat-card-title>
-        <mat-drawer-container class="example-container">2
-          <mat-drawer mode="side" opened class="mat-options">
-              <div>
-                  <nav
-                      style="height: 56px; justify-content: space-between; padding: 0 10px; margin-bottom: 20px;">
-                      <div class="options-divider">
-                          <ul *ngIf="!ulOptSmall">
-                              <li class="container" *ngFor="let row of options;let i = index"
-                                  [ngClass]="{'active': clickedIndex == i}"
-                                  (click)="clickedIndex == i? clickedIndex = null : clickedIndex = i; selectTab(i)">
-                                  <mat-icon class="maticon-drawer">{{row.icon}}</mat-icon> {{row.items}}
-                              </li>
-                          </ul>
-                          <ul *ngIf="ulOptSmall">
-                              <li class="container" *ngFor="let row of options;let i = index"
-                                  [ngClass]="{'active': clickedIndex == i}"
-                                  (click)="clickedIndex == i? clickedIndex = null : clickedIndex = i; selectTab(i)"
-                                  matTooltip="">
-                                  <mat-icon class="maticon-drawer">{{row.icon}}</mat-icon>
-                              </li>
-                          </ul>
-                      </div>
-                  </nav>
-              </div>
-          </mat-drawer>
-          <mat-drawer-content>
-            <div class="override-actions">
-              <div class="mt-10">
-                <mat-form-field appearance="outline" class="w-300p mr-8">
-                  <mat-label>Buscador</mat-label>
-                  <input matInput [(ngModel)]="txtBuscador" (keyup)="applyFilter($event,'INP')"
-                    placeholder="Ingrese la palabra a buscar" />
-                  <mat-icon *ngIf="txtBuscador.length === 0" matSuffix>search</mat-icon>
-                  <mat-icon *ngIf="txtBuscador.length > 0" class="clickable"
-                    matTooltip="Eliminar filtro" (click)="applyFilter('', 'EST')"
-                    matSuffix>close</mat-icon>
-                </mat-form-field>
-              </div>
-              <div class="override-buttons">
-                <button mat-raised-button color="primary" matTooltip=""
-                  [routerLink]="['/sam/GDEL/ADDO/crear']" [disabled]="isLoadingForm" *ngIf="!btnSmall"
-                  class="override_no_shadow mr-10">
-                  <mat-icon>note_add</mat-icon> Registrar documento
-                </button>
-                <button mat-mini-fab color="primary" class="override_no_shadow mr-8"
-                  [routerLink]="['/sam/GDEL/ADDO/crear']" [disabled]="isLoadingForm" *ngIf="btnSmall"
-                  matTooltip="Registrar Documento">
-                  <mat-icon>note_add</mat-icon>
-                </button>
-                <button mat-mini-fab class="cyan_dark_background white_font override_no_shadow mr-10"
-                  matTooltip="Actualizar datos" (click)="refreshDocuments()">
-                  <mat-icon>refresh</mat-icon>
-                </button>
-              </div>
-            </div>
-            <div>
-                <div class="is-loading animated fadeIn fast" *ngIf="isLoading">
-                    <mat-spinner align="center"></mat-spinner>
-                    <h3>Cargando datos ...</h3>
-                </div>
-                <mat-progress-bar mode="indeterminate" *ngIf="isLoadingForm"></mat-progress-bar>
-                <div class="override-table">
-                    <table mat-table [dataSource]="dataSource" matSort class="animated fadeIn"
-                        [style.display]="isLoading ? 'none' : 'revert'"> <ng-container matColumnDef="ID">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Código</th>
-                            <td mat-cell *matCellDef="let row"
-                                style="overflow:hidden; white-space:nowrap; text-overflow: ellipsis;">{{
-                                row.NOMBRE_ARC }} </td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="NAME">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Nombre</th>
-                            <td mat-cell *matCellDef="let row">{{ row.NOMBRE_ARC }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="EXT">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Extensión</th>
-                            <td mat-cell *matCellDef="let row">{{ row.EXTENSION }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="SIZE">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Tamaño</th>
-                            <td mat-cell *matCellDef="let row">{{ row.TAMANIO }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="VERSION">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Versión</th>
-                            <td mat-cell *matCellDef="let row">{{ row.VERSION }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="FRMOD">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Fecha de registro</th>
-                            <td mat-cell *matCellDef="let row">{{ row.FECHA_REGISTRO }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="USMOD">
-                            <th mat-header-cell *matHeaderCellDef mat-sort-header>Propietario</th>
-                            <td mat-cell *matCellDef="let row">{{ row.PROPIETARIO }}</td>
-                        </ng-container>
-
-                        <ng-container matColumnDef="ACTIONS" style="width: 350px !important;">
-                            <th mat-header-cell *matHeaderCellDef>Acciones</th>
-                            <td mat-cell *matCellDef="let element">
-                                <BOTONES DE ACCIONES NORMALES
-                                <div *ngIf="!btnSmall">
-                                    <button mat-mini-fab color="primary" class="override_no_shadow mr-4"
-                                        matTooltip="Abrir" (click)="openViewer(element.URL)">
-                                        <mat-icon>open_in_new</mat-icon>
-                                    </button>
-                                    <button mat-mini-fab color="primary" class="override_no_shadow mr-4"
-                                        matTooltip="Editar">
-                                        <mat-icon>edit</mat-icon>
-                                    </button>
-                                    <button mat-mini-fab color="primary" class="override_no_shadow mr-4"
-                                        matTooltip="Compartir">
-                                        <mat-icon>share</mat-icon>
-                                    </button>
-                                    <button mat-mini-fab class="cyan_dark_background white_font override_no_shadow mr-4"
-                                        matTooltip="Historial de Versiones">
-                                        <mat-icon>history</mat-icon>
-                                    </button>
-                                    <button mat-mini-fab class="cyan_dark_background white_font override_no_shadow mr-4"
-                                        matTooltip="Descargar" (click)="downloadFile(element.ID)">
-                                        <mat-icon>download</mat-icon>
-                                    </button>
-                                    <a #download [href]="downloadLink" target="_blank" [download]="element.NOMBRE_ARC"></a>
-
-                                    <button mat-mini-fab color="warn" class="override_no_shadow mr-4"
-                                        matTooltip="Eliminar">
-                                        <mat-icon>delete</mat-icon>
-                                    </button>
-                                </div>
-                                BOTONES DE ACCIONES CON PANTALLA REDUCIDA
-                                <div *ngIf="btnSmall">
-                                    <button mat-mini-fab color="primary" [matMenuTriggerFor]="menu"
-                                        #menuTrigger matTooltip="Desplegar opciones"
-                                        class="override_no_shadow">
-                                        <mat-icon>settings</mat-icon>
-                                    </button>
-                                    <mat-menu #menu="matMenu">
-                                        <button mat-menu-item>
-                                            <mat-icon>open_in_new</mat-icon> Abrir
-                                        </button>
-                                        <button mat-menu-item>
-                                            <mat-icon>edit</mat-icon> Editar
-                                        </button>
-                                        <button mat-menu-item>
-                                            <mat-icon>share</mat-icon> Compartir
-                                        </button>
-                                        <button mat-menu-item>
-                                            <mat-icon>history</mat-icon> Historial de Versiones
-                                        </button>
-                                        <button mat-menu-item (click)="downloadFile(element.ID)">
-                                            <mat-icon>download</mat-icon> Descargar
-                                        </button>
-                                        <button mat-menu-item>
-                                            <mat-icon>delete</mat-icon> Eliminar
-                                        </button>
-                                    </mat-menu>
-                                </div>
-                            </td>
-                        </ng-container>
-
-                        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
-                        <tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
-
-                        <tr class="mat-row" *matNoDataRow>
-                            <td class="p-80 centre" colspan="12"><object data="assets/img/empty_data.svg"
-                                    width="300"></object>
-                                <h2>Sin datos</h2>
-                            </td>
-                        </tr>
-
-                    </table>
-                </div>
-            </div>
-          </mat-drawer-content>
-        </mat-drawer-container>
-      </nav>
-    </section>
-    <mat-paginator [pageSizeOptions]="[10, 25, 50, 100]"
-      aria-label="Selecciona la página de usuarios"></mat-paginator>
-  </mat-card>-->
 </main>

+ 137 - 22
sistema-mantenimiento-front/src/app/components/gdel/gdel.component.ts

@@ -27,6 +27,12 @@ import { DOCUMENT } from '@angular/common';
 import { ShareFileComponent } from './share-file/share-file.component';
 import { AccessDialogComponent } from './access-dialog/access-dialog.component';
 import { OrderAssociatonComponent } from './order-associaton/order-associaton.component';
+import { Permissions } from 'src/app/interfaces/permissions.interface';
+import { SocketService } from 'src/app/services/socket.service';
+import { UserConsultResponse } from 'src/app/interfaces/user.interface';
+import { UsersProfilesService } from 'src/app/services/users-profiles.service';
+import { ProfileInterface } from 'src/app/interfaces/profile.interface';
+import { FunctionsService } from 'src/app/services/functions.service';
 
 export interface FoundedFiles{
   CODIGO: string;
@@ -85,13 +91,24 @@ export class GDELComponent implements OnInit {
   isFromModule: boolean;
   module: string;
 
+  documentsManagementEnabled: boolean;
+  documentsViewerEnabled: boolean;
+  documentsEditorEnabled: boolean;
+  shareDocumentsEnabled: boolean;
+  registerDocumentsEnabled: boolean;
+  versionsHistoryEnabled: boolean;
+
   constructor(
     @Inject(DOCUMENT) private _document: Document,
     private _encService: EncService,
     private _dialog: MatDialog,
     private _gdelService: GdelService,
-    private _snackBar: MatSnackBar,
     private _activatedRoute: ActivatedRoute,
+    private _resourcesService: ResourcesService,
+    private _socketService: SocketService,
+    private _usersProfilesService: UsersProfilesService,
+    private _router: Router,
+    private _functionsService: FunctionsService,
   ) {
     this.btnSmall = false;
     this.isLoading = true;
@@ -112,9 +129,91 @@ export class GDELComponent implements OnInit {
 
     this.isFromModule = false;
     this.module = '';
+
+    this.documentsManagementEnabled = true;
+    this.documentsViewerEnabled = true;
+    this.documentsEditorEnabled = true;
+    this.shareDocumentsEnabled = true;
+    this.registerDocumentsEnabled = true;
+    this.versionsHistoryEnabled = true;
   }
 
   ngOnInit(): void {
+    this.initPermissions();
+    this._socketService.refreshPermissions().subscribe(async (profUpdEnc) => {
+      try{
+        let idUser = localStorage.getItem('idusuario')!;
+        let usrInfo: UserConsultResponse = await lastValueFrom(this._usersProfilesService.getUser(idUser, idUser, 1));
+        
+        if(usrInfo.error){
+          this._resourcesService.openSnackBar('ERR_NPE000: Ocurrió un error inesperado.');
+        }else{
+          let idProfDec = await this._encService.decrypt(usrInfo.response.PERFIL);
+          let currentProfile = await this._encService.decrypt(localStorage.getItem('perfil')!);
+
+          if(idProfDec != currentProfile){
+            this._router.navigate(['/sam/home']);
+            return;
+          }
+          
+          let profileUpdated = await this._encService.decrypt(`${profUpdEnc}`);
+          if(profileUpdated == currentProfile){
+            let profile = localStorage.getItem('perfil')!;
+            let profInfo: ProfileInterface = await lastValueFrom(this._usersProfilesService.getProfile(
+              profile,
+              idUser,
+              1
+            ));
+
+            let permArr = await this._functionsService.processPermissions(profInfo.response.PERMISOS.permissions);
+            let modPerm = permArr.filter(item => item.id == 'S002V01M04GDEL');
+            if(modPerm.length > 0){
+              let funPerm = modPerm[0].children.filter(item => item.id == 'S002V01F01ADDO');
+              if(funPerm.length > 0){
+                let documentsManagementEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P01GEDO');
+                if(documentsManagementEnabled.length > 0){
+                  this.documentsManagementEnabled = documentsManagementEnabled[0].access > 0;
+                }
+
+                let documentsViewerEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P02VIDO');
+                if(documentsViewerEnabled.length > 0){
+                  this.documentsViewerEnabled = documentsViewerEnabled[0].access > 0;
+                }
+
+                let documentsEditorEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P03EDDO');
+                if(documentsEditorEnabled.length > 0){
+                  this.documentsEditorEnabled = documentsEditorEnabled[0].access > 0;
+                }
+
+                let shareDocumentsEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P04CODO');
+                if(shareDocumentsEnabled.length > 0){
+                  this.shareDocumentsEnabled = shareDocumentsEnabled[0].access > 0;
+                }
+
+                let registerDocumentsEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P05REDO');
+                if(registerDocumentsEnabled.length > 0){
+                  this.registerDocumentsEnabled = registerDocumentsEnabled[0].access > 0;
+                }
+
+                let versionsHistoryEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P06HIVE');
+                if(versionsHistoryEnabled.length > 0){
+                  this.versionsHistoryEnabled = versionsHistoryEnabled[0].access > 0;
+                }
+              }
+            }
+          }
+        }
+      }catch(error: any){
+        if(error.error == undefined){
+          this._resourcesService.openSnackBar('ERR_PAD001: Ocurrió un error inesperado.');
+        }else if(error.error.msg == undefined){
+          this._resourcesService.openSnackBar('ERR_PAD002: Ocurrió un error inesperado.');
+        }else{
+          this._resourcesService.openSnackBar(`ERR_PAD003: ${error.error.msg}`);
+        }
+      }
+    });
+
     this.moduleControl.valueChanges.subscribe(mod => {
       let cla = this.clasificationControl.value;
       let sda = this.startDate;
@@ -246,6 +345,28 @@ export class GDELComponent implements OnInit {
     });
   }
 
+  async initPermissions(){
+    try{
+      let permissionsEnc = localStorage.getItem('permisos');
+      let permissionsDec = await this._encService.decrypt(permissionsEnc!);
+      let permissionsArr: Permissions = JSON.parse(permissionsDec);
+
+      let modPerm = permissionsArr.permissions.filter(item => item.id == 'S002V01M04GDEL')[0];
+      let funPerm = modPerm.children.filter(item => item.id == 'S002V01F01ADDO')[0];
+
+      this.documentsManagementEnabled = funPerm.children.filter(item => item.id == 'S002V01P01GEDO')[0].access > 0;
+      this.documentsViewerEnabled = funPerm.children.filter(item => item.id == 'S002V01P02VIDO')[0].access > 0;
+      this.documentsEditorEnabled = funPerm.children.filter(item => item.id == 'S002V01P03EDDO')[0].access > 0;
+      this.shareDocumentsEnabled = funPerm.children.filter(item => item.id == 'S002V01P04CODO')[0].access > 0;
+      this.registerDocumentsEnabled = funPerm.children.filter(item => item.id == 'S002V01P05REDO')[0].access > 0;
+      this.versionsHistoryEnabled = funPerm.children.filter(item => item.id == 'S002V01P06HIVE')[0].access > 0;
+      console.log(this.documentsManagementEnabled);
+    }catch(error: any){
+      this._resourcesService.openSnackBar('Hubo un error al obtener los permisos del módulo.');
+      this.documentsManagementEnabled = false;
+    }
+  }
+
   async getFiles(module: string | undefined, clas: string | undefined, startDate: Date | null, endDate: Date | null, name: string | undefined, type: string | undefined){
     try{
       this.isLoading = true;
@@ -314,12 +435,6 @@ export class GDELComponent implements OnInit {
     return `${year}${month}${day}`;
   }
 
-  openSnackBar(msg: string){
-    this._snackBar.open(msg, undefined, {
-      duration: 2500,
-    });
-  }
-
   formatBytes(bytes: number, decimals = 2) {
     if (bytes === 0) return '0 Bytes';
 
@@ -401,7 +516,7 @@ export class GDELComponent implements OnInit {
   }
 
   openUploadDialog(){
-    if(!this.isFromModule){
+    if(!this.isFromModule && this.registerDocumentsEnabled){
       let dialogRef = this._dialog.open(UploadDialogComponent, {
         width: '480px',
         disableClose: true,
@@ -425,7 +540,7 @@ export class GDELComponent implements OnInit {
   async downloadFile(code: string, version: string, name: string){
     try{
       let idFile = `${code}=${version}=${name}`;
-      this.openSnackBar(`Iniciando la descarga del archivo ${idFile}...`);
+      this._resourcesService.openSnackBar(`Iniciando la descarga del archivo ${idFile}...`);
 
       let idFileEnc = await this._encService.encrypt(idFile);
       let download = this._document.getElementById(`download`) as HTMLAnchorElement;
@@ -442,11 +557,11 @@ export class GDELComponent implements OnInit {
       download.click();
     }catch(error: any){
       if(error.error == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else if(error.error.msg == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else{
-        this.openSnackBar(error.error.msg);
+        this._resourcesService.openSnackBar(error.error.msg);
       }
     }
   }
@@ -454,7 +569,7 @@ export class GDELComponent implements OnInit {
   async openViewer(code: string, version: string, name: string) {
     try{
       let idFile = `${code}=${version}=${name}`;
-      this.openSnackBar(`Abriendo el archivo ${idFile}...`);
+      this._resourcesService.openSnackBar(`Abriendo el archivo ${idFile}...`);
       
       let idFileEnc = await this._encService.encrypt(idFile);
       let idUser = localStorage.getItem('idusuario')!;
@@ -475,11 +590,11 @@ export class GDELComponent implements OnInit {
       });
     }catch(error: any){
       if(error.error == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else if(error.error.msg == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else{
-        this.openSnackBar(error.error.msg);
+        this._resourcesService.openSnackBar(error.error.msg);
       }
     }
   }
@@ -501,7 +616,7 @@ export class GDELComponent implements OnInit {
 
   async updateFilePermissions(idFile: string, permissions: string){
     try{
-      this.openSnackBar(`Actualizando permisos del archivo ${idFile}`);
+      this._resourcesService.openSnackBar(`Actualizando permisos del archivo ${idFile}`);
       this.isLoading = true;
       this.hasError = false;
       this.errorStr = '';
@@ -516,7 +631,7 @@ export class GDELComponent implements OnInit {
       formData.append('permissions', permissions);
 
       await lastValueFrom(this._gdelService.updateFilePermissions(formData));
-      this.openSnackBar(`Los permisos se actualizaron correctamente`);
+      this._resourcesService.openSnackBar(`Los permisos se actualizaron correctamente`);
       
       let mod = this.moduleControl.value;
       let cla = this.clasificationControl.value;
@@ -594,7 +709,7 @@ export class GDELComponent implements OnInit {
       formData.append('linea', '1');
 
       await lastValueFrom(this._gdelService.deleteFile(formData));
-      this.openSnackBar('El archivo se eliminó correctamente.');
+      this._resourcesService.openSnackBar('El archivo se eliminó correctamente.');
       
       let mod = this.moduleControl.value;
       let cla = this.clasificationControl.value;
@@ -606,11 +721,11 @@ export class GDELComponent implements OnInit {
       this.getFiles(mod, cla, sda, eda, dna, ext);
     }catch(error: any){
       if(error.error == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else if(error.error.msg == undefined){
-        this.openSnackBar('Ocurrió un error inesperado.');
+        this._resourcesService.openSnackBar('Ocurrió un error inesperado.');
       }else{
-        this.openSnackBar(error.error.msg);
+        this._resourcesService.openSnackBar(error.error.msg);
       }
     }
   }