Browse Source

Implementación pantallas de magnitudes

Jose Brito 7 months ago
parent
commit
589413c68e

File diff suppressed because it is too large
+ 528 - 291
package-lock.json


+ 2 - 2
package.json

@@ -45,8 +45,8 @@
     "zone.js": "~0.15.0"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^18.0.7",
-    "@angular/cli": "^18.0.7",
+    "@angular-devkit/build-angular": "^19.0.7",
+    "@angular/cli": "^19.0.7",
     "@angular/compiler-cli": "^19.0.6",
     "@types/jasmine": "~5.1.0",
     "jasmine-core": "~5.1.0",

+ 1 - 0
src/app/app-routing.module.ts

@@ -297,6 +297,7 @@ const routes: Routes = [
       { path: 'GIST/analysis-tool/value-stock', component: ValueStockComponent },
       { path: 'GIST/analysis-tool/without-movements-article', component: WithoutMovementsArticleComponent },
       { path: 'GIST/analysis-tool/reset-articles', component: ResetArticlesComponent },
+      { path: 'GIST/register/:form', component: RegisterArtitleComponent}, // Recepción de pedidos
       //Gestión de mantenimiento correctivo
       { path: 'GMCO', component: CorrectiveMaintenanceComponent },
       { path: 'GMCO/ORTR/GEOP', component: OperationsManagementComponent },

+ 4 - 6
src/app/components/acquisition-management/dispatch/order-reception/register-artitle/register-artitle.component.html

@@ -1,9 +1,8 @@
 <div class="items-container animated fadeIn prevent-select" (window:resize)="onResize()">
-  <div id="navigation" class="mb-8">
-    <div class="prev-page prevent-select indigo_primary_background mat-elevation-z8" (click)="goBack(1)" matRipple>
-      <mat-icon style="color: white;">arrow_back</mat-icon>
-      <div class="page-name ml-4">Regresar</div>
-    </div>
+  <div class="row-tools-bar no-padding">
+    <button mat-raised-button class="raised-button-background mb-8" (click)="goBack(1)">
+      Regresar<mat-icon>arrow_back</mat-icon>
+    </button>
   </div>
   <mat-card class="override-elevation-z8" style="width: 100%; height: 100%;">
     <mat-card-title style="text-align: center; margin: 15px 0;">{{ action }} equipamiento 
@@ -292,7 +291,6 @@
                   }
                 </div>
               }
-
             </div>
             @if (codeType.value == '3' || codeType.value == '4' || codeType.value == '6') {
               <div class="form-row animated fadeIn">

+ 26 - 9
src/app/components/acquisition-management/dispatch/order-reception/register-artitle/register-artitle.component.ts

@@ -58,6 +58,7 @@ export class RegisterArtitleComponent implements OnInit {
   generatedTag: string;
   formGroup: FormGroup;
   disableAttachActions: boolean;
+  directToStock: boolean;
 
   locationsArr: LocationsListItem[];
   levelsArr: any[];
@@ -168,6 +169,7 @@ export class RegisterArtitleComponent implements OnInit {
     this.errorStr = "";
     this.generatedTag = "";
     this.disableAttachActions = false;
+    this.directToStock = false;
 
     this.locationsArr = [];
     this.levelsArr = [];
@@ -273,7 +275,6 @@ export class RegisterArtitleComponent implements OnInit {
     if (dataUrlForm !== null) {
       const decDataForm: string = await this._encService.decrypt(dataUrlForm);
       const objDataForm: GetDataRegisterArtitle = JSON.parse(decDataForm);
-      console.log(objDataForm);
       if (objDataForm.action === 'new' && objDataForm.order === undefined && objDataForm.info === undefined && objDataForm.cantidad === undefined) {
         this.action = 'Registrar';        
         await this.getLocations();
@@ -382,7 +383,6 @@ export class RegisterArtitleComponent implements OnInit {
       }
     });
 
-
     this.formGroup.controls['acquisitionDateControl'].valueChanges.subscribe((dateAdquisition) => {
       if (typeof dateAdquisition === 'object') {
         this.minDateWarrantyStart = dateAdquisition;
@@ -395,11 +395,24 @@ export class RegisterArtitleComponent implements OnInit {
 
       }
     });
+
     this.formGroup.controls['warrantyEndDateControl'].valueChanges.subscribe((dateEnd) => {
       if (typeof dateEnd === 'object') {
         this.maxDateWarrantyStart = dateEnd;
       }
     });
+
+    let currentLocation = window.location.href;
+    let currentLocationArr = currentLocation.split('#').reverse();
+
+    if(currentLocationArr.length > 1){
+      let currentLocationStr = currentLocationArr[0].replace('/sam/', '');
+      let moduleCode = currentLocationStr.substring(0, 4);
+
+      if(moduleCode == 'GIST'){
+        this.directToStock = true;
+      }
+    }
   }
 
   private _filterEquipments(value: string): string[]{
@@ -2472,6 +2485,7 @@ export class RegisterArtitleComponent implements OnInit {
         this.resourcesService.openSnackBar('Los documentos relacionados deben contener por lo menos 1 registro.');
       }else{
         this.resourcesService.openSnackBar('Guardando registro...');
+
         let formValue = this.formGroup.getRawValue();
         let formData = new FormData();
         let idUser = localStorage.getItem('idusuario')!;
@@ -2505,18 +2519,16 @@ export class RegisterArtitleComponent implements OnInit {
         formData.append('equipment_type', formValue.equipmentTypeControl);
         formData.append('equipment_model', formValue.equipmentModelControl);
 
-
-        let warehouseID = formValue.warehouseIDControl.replace('-enc', '');;
-        let areaID = formValue.areaIDControl.replace('-enc', '');;
-        let levelID = formValue.levelIDControl.replace('-enc', '');;
-        let zoneID = formValue.zoneIDControl.replace('-enc', '');;
+        let warehouseID = formValue.warehouseIDControl.replace('-enc', '');
+        let areaID = formValue.areaIDControl.replace('-enc', '');
+        let levelID = formValue.levelIDControl.replace('-enc', '');
+        let zoneID = formValue.zoneIDControl.replace('-enc', '');
 
         formData.append('warehouse', warehouseID);
         formData.append('area', areaID);
         formData.append('level', levelID);
         formData.append('zone', zoneID);
         formData.append('number_items', this.numberItems.toString());
-        
   
         let imagesArr = JSON.stringify(this.attachedImages);
         let documentsArr = JSON.stringify(this.attachedDocuments);
@@ -2542,6 +2554,11 @@ export class RegisterArtitleComponent implements OnInit {
         formData.append('acquisition_date', acquisitionDateStr);
         formData.append('warranty_start_date', warrantyStartDateStr);
         formData.append('warranty_end_date', warrantyEndDateStr);
+        console.log(formData);
+        
+        /*
+
+        
 
         let providerArr = formValue.equipmentProviderControl.split(')');
         let providerStr = providerArr[0].replace('(', '');
@@ -2620,7 +2637,7 @@ export class RegisterArtitleComponent implements OnInit {
           )
         } else if ( isExit) {
           this.goBack(1);
-        }
+        }*/
 
       }
     }catch(error: any){      

+ 8 - 7
src/app/components/inventory-management/inventory-management.component.html

@@ -1,10 +1,11 @@
 <div style="display: flex; justify-content: space-between;">
   <app-btn-navigate [navigate]="'/sam/home'" [nameButton]="'Regresar'" [widthPosition]="'14px'" />
-  <button mat-fab extended color="primary" class="m-16" [matMenuTriggerFor]="menu">
+  <button mat-raised-button color="primary" class="m-16" [matMenuTriggerFor]="menu">
     <mat-icon>construction</mat-icon> Herramienta de análisis
   </button>
 
   <mat-menu #menu="matMenu">
+    <button mat-menu-item (click)="registerArtitlesToEquipment()">Registro de artículos existentes</button>
     <button mat-menu-item [routerLink]="['/sam/GIST/analysis-tool/article-clasificate']">Clasificación de artículos</button>
     <button mat-menu-item [routerLink]="['/sam/GIST/analysis-tool/value-stock']">Valor de inventarios por naturaleza y periodo</button>
     <button mat-menu-item [routerLink]="['/sam/GIST/analysis-tool/without-movements-article']">Lista de artículos sin movimientos</button>
@@ -19,12 +20,12 @@
 <div class="menu-card">
   @for (functions of arrFunctions; track functions) {
     <mat-card class="animated fadeIn fast centre menu-card-item" (click)="openMenu(functions)">
-        @if (functions.IMAGENFUNCION !== undefined) {
-          <img mat-card-md-image [src]="'assets/img/'+functions.IMAGENFUNCION+'.svg'">
-        } @else {
-          <mat-card-content class="p-32"><mat-icon>{{ functions.ICONOFUNCION }}</mat-icon></mat-card-content>
-        }
-        <mat-card-title class="fz-15">{{ functions.NOMBREFUNCION }}</mat-card-title>
+      @if (functions.IMAGENFUNCION !== undefined) {
+        <img mat-card-md-image [src]="'assets/img/'+functions.IMAGENFUNCION+'.svg'">
+      } @else {
+        <mat-card-content class="p-32"><mat-icon>{{ functions.ICONOFUNCION }}</mat-icon></mat-card-content>
+      }
+      <mat-card-title class="fz-15">{{ functions.NOMBREFUNCION }}</mat-card-title>
     </mat-card>
   }
 

+ 12 - 0
src/app/components/inventory-management/inventory-management.component.ts

@@ -6,6 +6,7 @@ import { ModulesService } from '../../services/modules.service';
 import { Router } from '@angular/router';
 import { lastValueFrom } from 'rxjs';
 import { HttpErrorResponse } from '@angular/common/http';
+import { GetDataRegisterArtitle } from '../acquisition-management/dispatch/order-reception/move-stock/move-stock.component';
 
 @Component({
     selector: 'app-inventory-management',
@@ -62,4 +63,15 @@ export class InventoryManagementComponent implements OnInit {
       this.resourcesService.openSnackBar(`Ocurrió un error al obtener la función del módulo.`);
     }    
   }
+
+  public async registerArtitlesToEquipment() {
+    const contentForm: GetDataRegisterArtitle = {
+      action: 'new'
+    }
+
+    const strContentForm: string = JSON.stringify(contentForm);
+    const encContentForm: string = await this._encService.encrypt(strContentForm);
+
+    this._router.navigate([`/sam/GIST/register/${encContentForm}`]);
+  }
 }

+ 27 - 1
src/app/components/system-admin/system-params/magnitude-form/magnitude-form.component.html

@@ -1 +1,27 @@
-<p>magnitude-form works!</p>
+<h1 mat-dialog-title class="prevent-select">Registrar magnitud</h1>
+<div mat-dialog-content class="prevent-select">
+  <div class="is-loading animated fadeIn fast" *ngIf="isLoading">
+    <mat-spinner align="center"></mat-spinner>
+    <h3>Cargando datos ...</h3>
+  </div>
+  <div class="has-error animated fadeIn pt-64" *ngIf="!isLoading && hasError">
+    <mat-icon class="red_primary_font">error</mat-icon>
+    <h2>{{ errorStr }}</h2>
+  </div>
+  <div class="animated fadeIn pt-8" *ngIf="!isLoading && !hasError">
+    <mat-form-field class="w-100" appearance="outline" *ngIf="!isNew">
+      <mat-label>ID magnitud</mat-label>
+      <input matInput [formControl]="magnitudeIDControl">
+    </mat-form-field>
+    <mat-form-field class="w-100" appearance="outline">
+      <mat-label>Nombre de la magnitud</mat-label>
+      <input matInput [formControl]="magnitudeControl" (input)="magnitudeControl.markAsTouched()">
+      <mat-error *ngIf="magnitudeControl.hasError('required')">Este campo es requerido.</mat-error>
+      <mat-error *ngIf="magnitudeControl.hasError('maxlength')">La longitud máxima de este campo es de 50 caracteres.</mat-error>
+    </mat-form-field>
+  </div>
+</div>
+<div mat-dialog-actions align="end">
+  <button mat-button mat-dialog-close>Cerrar</button>
+  <button mat-button [disabled]="magnitudeControl.invalid" [mat-dialog-close]="magnitudeControl.value">Guardar</button>
+</div>

+ 68 - 2
src/app/components/system-admin/system-params/magnitude-form/magnitude-form.component.ts

@@ -1,4 +1,10 @@
-import { Component } from '@angular/core';
+import { Component, Inject, OnInit } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { SystemAdminService } from '../../../../services/system-admin.service';
+import { EncService } from '../../../../services/enc.service';
+import { MagnitudeDetailsResponse } from '../../../../interfaces/counters-activators.interface';
+import { lastValueFrom } from 'rxjs';
 
 @Component({
     selector: 'app-magnitude-form',
@@ -6,6 +12,66 @@ import { Component } from '@angular/core';
     styleUrl: './magnitude-form.component.css',
     standalone: false
 })
-export class MagnitudeFormComponent {
+export class MagnitudeFormComponent implements OnInit {
+  isNew: boolean;
+  isLoading: boolean;
+  hasError: boolean;
+  errorStr: string;
 
+  magnitudeControl: FormControl;
+  magnitudeIDControl: FormControl;
+
+  constructor(
+    @Inject(MAT_DIALOG_DATA) private _data: any,
+    private _sysAdminService: SystemAdminService,
+    private _encService: EncService,
+  ) {
+    this.isNew = true;
+    this.isLoading = true;
+    this.hasError = false;
+    this.errorStr = '';
+
+    this.magnitudeControl = new FormControl('', [Validators.required, Validators.maxLength(50)]);
+    this.magnitudeIDControl = new FormControl({value: '', disabled: true});
+  }
+
+  ngOnInit(): void {
+    if(this._data.type == 'nuevo'){
+      this.isNew = true;
+      this.isLoading = false;
+    }else{
+      this.isNew = false;
+      this.getMagnitude(this._data.idMagnitude);
+    }
+  }
+
+  async getMagnitude(idMagnitudeEnc: string){
+    try{
+      let idUser = localStorage.getItem('idusuario')!;
+      let magnitude: MagnitudeDetailsResponse = await lastValueFrom(this._sysAdminService.getMagnitude(idMagnitudeEnc, idUser, 1));
+
+      this.hasError = magnitude.error;
+      this.errorStr = magnitude.msg;
+
+      if(!this.hasError){
+        let idDec = await this._encService.decrypt(magnitude.response.ID_MAGNITUD);
+
+        this.magnitudeIDControl.setValue(idDec);
+        this.magnitudeControl.setValue(magnitude.response.MAGNITUD);
+      }
+
+      this.isLoading = false;
+    }catch(error: any){
+      if(error.error == undefined){
+        this.errorStr = 'Ocurrió un error inesperado.';
+      }else if(error.error.msg == undefined){
+        this.errorStr = 'Ocurrió un error inesperado.';
+      }else{
+        this.errorStr = error.error.msg;
+      }
+
+      this.hasError = true;
+      this.isLoading = false;
+    }
+  }
 }

+ 38 - 1
src/app/components/system-admin/system-params/unit-form/unit-form.component.html

@@ -1 +1,38 @@
-<p>unit-form works!</p>
+<h1 mat-dialog-title class="prevent-select">Registrar unidad</h1>
+<div mat-dialog-content class="prevent-select">
+  <div class="is-loading animated fadeIn fast" *ngIf="isLoading">
+    <mat-spinner align="center"></mat-spinner>
+    <h3>Cargando datos ...</h3>
+  </div>
+  <div class="has-error animated fadeIn pt-64" *ngIf="!isLoading && hasError">
+    <mat-icon class="red_primary_font">error</mat-icon>
+    <h2>{{ errorStr }}</h2>
+  </div>
+  <div class="animated fadeIn pt-8" *ngIf="!isLoading && !hasError">
+    <mat-form-field class="w-100" appearance="outline">
+      <mat-label>Magnitud relacionada</mat-label>
+      <input matInput [formControl]="magnitudeControl">
+    </mat-form-field>
+    <mat-form-field class="w-100" appearance="outline" *ngIf="!isNew">
+      <mat-label>ID unidad</mat-label>
+      <input matInput [formControl]="unitIDControl">
+    </mat-form-field>
+    <mat-form-field class="w-100" appearance="outline">
+      <mat-label>Unidad</mat-label>
+      <input matInput [formControl]="unitControl" (input)="unitControl.markAsTouched()">
+      <mat-error *ngIf="unitControl.hasError('required')">Este campo es requerido.</mat-error>
+      <mat-error *ngIf="unitControl.hasError('maxlength')">La longitud máxima de este campo es de 150 caracteres.</mat-error>
+    </mat-form-field>
+    <mat-form-field class="w-100" appearance="outline">
+      <mat-label>Acrónimo</mat-label>
+      <input matInput [formControl]="acronymControl" (input)="acronymControl.markAsTouched()">
+      <mat-error *ngIf="acronymControl.hasError('required')">Este campo es requerido.</mat-error>
+      <mat-error *ngIf="acronymControl.hasError('maxlength')">La longitud máxima de este campo es de 10 caracteres.</mat-error>
+    </mat-form-field>
+  </div>
+</div>
+<div mat-dialog-actions align="end">
+  <button mat-button mat-dialog-close>Cerrar</button>
+  <button mat-button [disabled]="unitControl.invalid || acronymControl.invalid" 
+  [mat-dialog-close]="unitControl.value + '|' + acronymControl.value">Guardar</button>
+</div>

+ 85 - 2
src/app/components/system-admin/system-params/unit-form/unit-form.component.ts

@@ -1,4 +1,10 @@
-import { Component } from '@angular/core';
+import { Component, Inject, OnInit } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { EncService } from '../../../../services/enc.service';
+import { SystemAdminService } from '../../../../services/system-admin.service';
+import { UnitDetailsResponse } from '../../../../interfaces/counters-activators.interface';
+import { lastValueFrom } from 'rxjs';
 
 @Component({
     selector: 'app-unit-form',
@@ -6,6 +12,83 @@ import { Component } from '@angular/core';
     styleUrl: './unit-form.component.css',
     standalone: false
 })
-export class UnitFormComponent {
+export class UnitFormComponent implements OnInit {
+  isLoading: boolean;
+  hasError: boolean;
+  errorStr: string;
+  isNew: boolean;
 
+  magnitudeControl: FormControl;
+  unitIDControl: FormControl;
+  unitControl: FormControl;
+  acronymControl: FormControl;
+
+  constructor(
+    @Inject(MAT_DIALOG_DATA) private _data: any,
+    private _encService: EncService,
+    private _sysAdminService: SystemAdminService,
+  ) {
+    this.isLoading = true;
+    this.hasError = false;
+    this.errorStr = '';
+    this.isNew = true;
+
+    this.magnitudeControl = new FormControl({value: '', disabled: true});
+    this.unitIDControl = new FormControl({value: '', disabled: true});
+    this.unitControl = new FormControl('', [Validators.required, Validators.maxLength(150)]);
+    this.acronymControl = new FormControl('', [Validators.required, Validators.maxLength(10)]);
+  }
+
+  ngOnInit(): void {
+    if(this._data.type == 'nuevo'){
+      this.isNew = true;
+      this.isLoading = false;
+
+      this.magnitudeControl.setValue(this._data.magnitude);
+    }else{
+      this.isNew = false;
+      this.magnitudeControl.setValue(this._data.magnitude);
+      this.getUnit(this._data.idUnit);
+    }
+  }
+
+  async getUnit(idUnitEnc: string){
+    try{
+      let idMagnitudeArr = this._data.magnitude.split('(').reverse();
+      let idMagnitudeStr = idMagnitudeArr[0].replace(')', '');
+      let idMagnitudeEnc = await this._encService.encrypt(idMagnitudeStr);
+
+      let idUser = localStorage.getItem('idusuario')!;
+      let unit: UnitDetailsResponse = await lastValueFrom(this._sysAdminService.getUnit(
+        idMagnitudeEnc,
+        idUnitEnc,
+        idUser,
+        1
+      ));
+
+      this.hasError = unit.error;
+      this.errorStr = unit.msg;
+
+      if(!this.hasError){
+        let idUnitDec = await this._encService.decrypt(idUnitEnc);
+        
+        this.unitIDControl.setValue(idUnitDec);
+        this.unitControl.setValue(unit.response.NOMBRE_UNIDAD);
+        this.acronymControl.setValue(unit.response.ACRONIMO_UNIDAD);
+      }
+
+      this.isLoading = false;
+    }catch(error: any){
+      if(error.error == undefined){
+        this.errorStr = 'Ocurrió un error inesperado.';
+      }else if(error.error.msg == undefined){
+        this.errorStr = 'Ocurrió un error inesperado.';
+      }else{
+        this.errorStr = error.error.msg;
+      }
+
+      this.hasError = true;
+      this.isLoading = false;
+    }
+  }
 }

Some files were not shown because too many files changed in this diff