Jose Brito 1 rok temu
rodzic
commit
2c790d406d

+ 15 - 15
sistema-mantenimiento-front/src/app/components/corrective-maintenance/operations-management/corrective-order-form/corrective-order-form.component.ts

@@ -273,11 +273,10 @@ export class CorrectiveOrderFormComponent implements OnInit {
         this.getOrderPriorities();
       }
     }catch(error: any){
-      console.log(error);
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (1).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (2).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -327,9 +326,9 @@ export class CorrectiveOrderFormComponent implements OnInit {
       }
     }catch(error: any){
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (3).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (4).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -358,9 +357,9 @@ export class CorrectiveOrderFormComponent implements OnInit {
       }
     }catch(error: any){
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (5).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (6).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -407,9 +406,9 @@ export class CorrectiveOrderFormComponent implements OnInit {
       }
     }catch(error: any){
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (7).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (8).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -451,9 +450,9 @@ export class CorrectiveOrderFormComponent implements OnInit {
       }
     }catch(error: any){
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (9).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (10).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -497,9 +496,9 @@ export class CorrectiveOrderFormComponent implements OnInit {
       }
     }catch(error: any){
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (11).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (12).';
       }else{
         this.errorStr = error.error.msg;
       }
@@ -534,10 +533,11 @@ export class CorrectiveOrderFormComponent implements OnInit {
         this.getSubcontratists();
       }
     }catch(error: any){
+      console.log(error);
       if(error.error == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (13).';
       }else if(error.error.msg == undefined){
-        this.errorStr = 'Ocurrió un error inesperado.';
+        this.errorStr = 'Ocurrió un error inesperado (14).';
       }else{
         this.errorStr = error.error.msg;
       }

+ 4 - 4
sistema-mantenimiento-front/src/app/components/equipment-management/equipment-management.component.html

@@ -27,7 +27,7 @@
       <mat-icon>settings</mat-icon>
     </button>
     <mat-menu #menu yPosition="below" xPosition="before">
-      <button mat-menu-item (click)="openEquipmentForm('new')">
+      <button mat-menu-item (click)="openEquipmentForm('new')" [disabled]="!addEquipmentEnabled">
         <mat-icon>add</mat-icon> Registrar equipamiento
       </button>
       <button mat-menu-item (click)="manageFamilies()">
@@ -42,13 +42,13 @@
       <button mat-menu-item (click)="openGraphicArborescence()">
         <mat-icon>account_tree</mat-icon> Vista gráfica de la arborescencia
       </button>
-      <button mat-menu-item (click)="manageEquipmentTypes()">
+      <button mat-menu-item (click)="manageEquipmentTypes()" [disabled]="!equipmentTypeManagementEnabled">
         <mat-icon>checklist</mat-icon> Tipos de equipamientos
       </button>
-      <button mat-menu-item (click)="locationsNavigation()">
+      <button mat-menu-item (click)="locationsNavigation()" [disabled]="!equipmentLocationEnabled">
         <mat-icon>pin_drop</mat-icon> Localización de equipamientos
       </button>
-      <button mat-menu-item (click)="navigateToArborescenceCalendar()">
+      <button mat-menu-item (click)="navigateToArborescenceCalendar()" [disabled]="!viewArborescenceInData">
         <mat-icon>event</mat-icon> Calendario de arborescencias
       </button>
     </mat-menu>

+ 11 - 2
sistema-mantenimiento-front/src/app/components/equipment-management/families-management/families-management.component.html

@@ -21,9 +21,14 @@
             (click)="applyFilter('', 'EST')" matSuffix>close</mat-icon>
           </mat-form-field>
           <div class="override-buttons">
-            <button mat-raised-button color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')">
+            <button mat-raised-button color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')" 
+            [disabled]="!familyRegisterEnabled" *ngIf="!btnSmall">
               <mat-icon>add</mat-icon> Registrar familia
             </button>
+            <button mat-mini-fab color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')" matTooltip="Registrar familia" 
+            [disabled]="!familyRegisterEnabled" *ngIf="btnSmall">
+              <mat-icon>add</mat-icon>
+            </button>
             <button mat-mini-fab class="cyan_dark_background white_font override_no_shadow mr-10" matTooltip="Actualizar datos" 
             (click)="getData()">
               <mat-icon>refresh</mat-icon>
@@ -42,9 +47,13 @@
         <h3>{{ errorStr }}</h3>
       </div>
 
+      <div class="animated fadeIn" *ngIf="!familyConsultEnabled && !isLoading && !hasError">
+        <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 class="override-table" [ngClass]="{ hidden: isLoading || hasError }">
         <table mat-table [dataSource]="dataSource!" matSort class="animated fadeIn" 
-        [style.display]="!isLoading &&  !hasError ? 'revert' : 'none'">
+        [style.display]="!isLoading && familyConsultEnabled && !hasError ? 'revert' : 'none'">
           <ng-container matColumnDef="CODIGO">
             <th mat-header-cell *matHeaderCellDef mat-sort-header>Código</th>
             <td mat-cell *matCellDef="let row">{{ row.CODIGOFAMILIA }}</td>

+ 94 - 0
sistema-mantenimiento-front/src/app/components/equipment-management/families-management/families-management.component.ts

@@ -11,6 +11,11 @@ import { FunctionsService } from 'src/app/services/functions.service';
 import { MatPaginator } from '@angular/material/paginator';
 import { MatSort } from '@angular/material/sort';
 import { Router } from '@angular/router';
+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';
 
 @Component({
   selector: 'app-families-management',
@@ -31,6 +36,9 @@ export class FamiliesManagementComponent implements OnInit {
   @ViewChild(MatPaginator) paginator?: MatPaginator;
   @ViewChild(MatSort) sort?: MatSort;
 
+  familyConsultEnabled: boolean;
+  familyRegisterEnabled: boolean;
+
   constructor(
     private _dialog: MatDialog,
     private _encService: EncService,
@@ -38,6 +46,8 @@ export class FamiliesManagementComponent implements OnInit {
     private _equipmentManagementService: EquipmentManagementService,
     private _functionsService: FunctionsService,
     private _router: Router,
+    private _socketService: SocketService,
+    private _usersProfilesService: UsersProfilesService,
   ) {
     this.btnSmall = window.innerWidth <= 1405;
     this.txtBuscador = '';
@@ -45,10 +55,67 @@ export class FamiliesManagementComponent implements OnInit {
     this.isLoading = true;
     this.hasError = false;
     this.errorStr = "";
+
+    this.familyConsultEnabled = true;
+    this.familyRegisterEnabled = true;
   }
 
   ngOnInit(): void {
     this.getData();
+
+    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 == 'S002V01M07GEEQ');
+            if(modPerm.length > 0){
+              let funPerm = modPerm[0].children.filter(item => item.id == 'S002V01F02DFSU');
+              if(funPerm.length > 0){
+                let familyConsultEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P01COFA');
+                if(familyConsultEnabled.length > 0){
+                  this.familyConsultEnabled = familyConsultEnabled[0].access > 0;
+                }
+  
+                let familyRegisterEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P02REFA');
+                if(familyRegisterEnabled.length > 0){
+                  this.familyRegisterEnabled = familyRegisterEnabled[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}`);
+        }
+      }
+    });
   } 
 
   public onResize():void {
@@ -120,6 +187,33 @@ export class FamiliesManagementComponent implements OnInit {
         this.dataSource = new MatTableDataSource(familiesArr);
         this.dataSource.paginator = this.paginator!;
         this.dataSource.sort = this.sort!;
+
+        let permissionsEnc = localStorage.getItem('permisos');
+        let permissionsDec = '';
+        if(permissionsEnc == '' || permissionsEnc == undefined || permissionsEnc == null){
+          permissionsDec = '[]';
+        }else{
+          permissionsDec = await this._encService.decrypt(permissionsEnc!);
+        }
+  
+        let permissionsArr: Permissions = JSON.parse(permissionsDec);
+        if(permissionsArr.permissions != undefined){
+          let modPerm = permissionsArr.permissions.filter(item => item.id == 'S002V01M07GEEQ');
+          if(modPerm.length > 0){
+            let funPerm = modPerm[0].children.filter(item => item.id == 'S002V01F02DFSU');
+            if(funPerm.length > 0){
+              let familyConsultEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P01COFA');
+              if(familyConsultEnabled.length > 0){
+                this.familyConsultEnabled = familyConsultEnabled[0].access > 0;
+              }
+
+              let familyRegisterEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P02REFA');
+              if(familyRegisterEnabled.length > 0){
+                this.familyRegisterEnabled = familyRegisterEnabled[0].access > 0;
+              }
+            }
+          }
+        }
       }
       
       this.isLoading = false;

+ 14 - 2
sistema-mantenimiento-front/src/app/components/equipment-management/subfamilies-management/subfamilies-management.component.html

@@ -21,9 +21,14 @@
             (click)="applyFilter('', 'EST')" matSuffix>close</mat-icon>
           </mat-form-field>
           <div class="override-buttons">
-            <button mat-raised-button color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')">
+            <button mat-raised-button color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')" 
+            [disabled]="!subfamilyRegisterEnabled" *ngIf="!btnSmall">
               <mat-icon>add</mat-icon> Registrar subfamilia
             </button>
+            <button mat-mini-fab color="primary" class="override_no_shadow mr-10 animated fadeIn" (click)="openFamilyForm('new')" matTooltip="Registrar subfamilia" 
+            [disabled]="!subfamilyRegisterEnabled" *ngIf="btnSmall">
+              <mat-icon>add</mat-icon>
+            </button>
             <button mat-mini-fab class="cyan_dark_background white_font override_no_shadow mr-10" matTooltip="Actualizar datos" (click)="getSubfamilies()">
               <mat-icon>refresh</mat-icon>
             </button>
@@ -41,9 +46,13 @@
         <h3>{{ errorStr }}</h3>
       </div>
 
+      <div class="animated fadeIn" *ngIf="!subfamilyConsultEnabled && !isLoading && !hasError">
+        <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 class="override-table" [ngClass]="{ hidden: isLoading || hasError }">
         <table mat-table [dataSource]="dataSource!" matSort class="animated fadeIn" 
-        [style.display]="!isLoading &&  !hasError ? 'revert' : 'none'">
+        [style.display]="!isLoading && subfamilyConsultEnabled && !hasError ? 'revert' : 'none'">
           <ng-container matColumnDef="CODIGO">
             <th mat-header-cell *matHeaderCellDef mat-sort-header>Código</th>
             <td mat-cell *matCellDef="let row">{{ row.CODIGOSUBFAMILIA }}</td>
@@ -80,6 +89,9 @@
               (click)="deleteSubfamily(row.CODIGOSUBFAMILIA)">
                 <mat-icon>delete</mat-icon>
               </button>
+              <button>
+                
+              </button>
             </td>
           </ng-container>
 

+ 34 - 0
sistema-mantenimiento-front/src/app/components/equipment-management/subfamilies-management/subfamilies-management.component.ts

@@ -11,6 +11,7 @@ import { SubfamiliesListItem, SubfamiliesListResponse } from 'src/app/interfaces
 import { FunctionsService } from 'src/app/services/functions.service';
 import { MatPaginator } from '@angular/material/paginator';
 import { MatSort } from '@angular/material/sort';
+import { Permissions } from 'src/app/interfaces/permissions.interface';
 
 @Component({
   selector: 'app-subfamilies-management',
@@ -33,6 +34,9 @@ export class SubfamiliesManagementComponent implements OnInit {
   @ViewChild(MatPaginator) paginator?: MatPaginator;
   @ViewChild(MatSort) sort?: MatSort;
 
+  subfamilyConsultEnabled: boolean;
+  subfamilyRegisterEnabled: boolean;
+
   constructor(
     private _activatedRoute: ActivatedRoute,
     private _resourcesService: ResourcesService,
@@ -47,6 +51,9 @@ export class SubfamiliesManagementComponent implements OnInit {
     this.familyCode = "";
     this.familyName = "";
     this.txtBuscador = '';
+
+    this.subfamilyConsultEnabled = true;
+    this.subfamilyRegisterEnabled = true;
   }
 
   ngOnInit(): void {
@@ -81,6 +88,33 @@ export class SubfamiliesManagementComponent implements OnInit {
   }
 
   async init(familyInfoEnc: string){
+    let permissionsEnc = localStorage.getItem('permisos');
+    let permissionsDec = '';
+    if(permissionsEnc == '' || permissionsEnc == undefined || permissionsEnc == null){
+      permissionsDec = '[]';
+    }else{
+      permissionsDec = await this._encService.decrypt(permissionsEnc!);
+    }
+  
+    let permissionsArr: Permissions = JSON.parse(permissionsDec);
+    if(permissionsArr.permissions != undefined){
+      let modPerm = permissionsArr.permissions.filter(item => item.id == 'S002V01M07GEEQ');
+      if(modPerm.length > 0){
+        let funPerm = modPerm[0].children.filter(item => item.id == 'S002V01F02DFSU');
+        if(funPerm.length > 0){
+          let subfamilyConsultEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P03COSU');
+          if(subfamilyConsultEnabled.length > 0){
+            this.subfamilyConsultEnabled = subfamilyConsultEnabled[0].access > 0;
+          }
+
+          let subfamilyRegisterEnabled = funPerm[0].children.filter(item => item.id == 'S002V01P04RESU');
+          if(subfamilyConsultEnabled.length > 0){
+            this.subfamilyRegisterEnabled = subfamilyRegisterEnabled[0].access > 0;
+          }
+        }
+      }
+    }
+
     let familyInfoDec = await this._encService.decrypt(familyInfoEnc);
     let familyInfoArr = familyInfoDec.split('|');
 

+ 4 - 4
sistema-mantenimiento-front/src/environments/environment.prod.ts

@@ -118,10 +118,10 @@ export const supportedFiles = [
   }
 ];
 export const validateRFC = /^([A-ZÑ&]{3,4}) ?(?:- ?)?(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])) ?(?:- ?)?([A-Z\d]{2})([A\d])$/;
-export const socket = 'http://localhost:3200';
-// export const socket = 'https://a9cf-209-50-56-224.ngrok-free.app';
-export const apiTemp = `http://192.168.100.105:8000/api/`;
-// export const apiTemp = 'http://git.ittec.mx/sam/public/api/';
+// export const socket = 'http://localhost:3200';
+export const socket = 'https://a9cf-209-50-56-224.ngrok-free.app';
+// export const apiTemp = `http://192.168.100.105:8000/api/`;
+export const apiTemp = 'http://git.ittec.mx/sam/public/api/';
 
 
 /*******************************************************************************/