浏览代码

Avance órdenes de trabajo

Jose Brito 2 年之前
父节点
当前提交
f84097a634

+ 2 - 0
sistema-mantenimiento-front/src/app/app-routing.module.ts

@@ -123,6 +123,7 @@ import { DocumentsEmployeeComponent } from './components/personal-management/emp
 import { ContractsHistoryEmployeeComponent } from './components/personal-management/employee/contracts-history-employee/contracts-history-employee.component';
 import { ContractFormComponent } from './components/personal-management/intervention/contract-form/contract-form.component';
 import { MaintenanceSimulationComponent } from './components/preventive-maintenance/maintenance-simulation/maintenance-simulation.component';
+import { BudgetAnalysisComponent } from './components/preventive-maintenance/work-orders/budget-analysis/budget-analysis.component';
 
 const routes: Routes = [
   { path: '', redirectTo: '/login', pathMatch: 'full' },
@@ -186,6 +187,7 @@ const routes: Routes = [
       { path: 'GMPR/ORTR/COTP', component: WorkOrdersComponent }, 
       { path: 'GMPR/ORTR/COTP/nuevo', component: NewWorkOrderComponent }, 
       { path: 'GMPR/ORTR/COTP/editar', component: NewWorkOrderComponent }, 
+      { path: 'GMPR/ORTR/COTP/analisis', component: BudgetAnalysisComponent }, 
       { path: 'GMPR/ORTR/BEOT', component: WorkOrdersHistoryComponent },
       { path: 'GMPR/AOTR/ACMA', component: ActiveOrdersComponent },
       { path: 'GMPR/AOTR/RVTP', component: UnprogrammedVisitsComponent },

+ 6 - 0
sistema-mantenimiento-front/src/app/components/preventive-maintenance/work-orders/budget-analysis/budget-analysis.component.css

@@ -0,0 +1,6 @@
+.form-order-container{
+    width: 100%;
+    height: calc(100vh - 306px);
+    overflow-x: hidden;
+    overflow-y: auto;
+}

+ 30 - 1
sistema-mantenimiento-front/src/app/components/preventive-maintenance/work-orders/budget-analysis/budget-analysis.component.html

@@ -1 +1,30 @@
-<p>budget-analysis works!</p>
+<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">Órdenes de trabajo preventivo</div>
+    </div>
+  </div>
+  <mat-card class="override-elevation-z8" style="width: 100%; height: 100%;">
+    <mat-card-title style="text-align: center; margin: 15px 0;">Asignación del análisis presupuestario de la orden #{{ idOrder }}</mat-card-title>
+    <mat-card-content>
+      <div class="form-order-container" *ngIf="isLoading">
+        <div class="is-loading animated fadeIn fast">
+          <mat-spinner align="center"></mat-spinner>
+          <h3>Cargando datos ...</h3>
+        </div>
+      </div>
+
+      <div class="form-order-container" *ngIf="!isLoading && hasError">
+        <div class="is-loading animated fadeIn fast">
+          <mat-icon class="red_primary_font mb-40" style="transform: scale(4.5);">error</mat-icon>
+          <h3>{{ errorStr }}</h3>
+        </div>
+      </div>
+
+      <div class="form-order-container" *ngIf="!isLoading && !hasError">
+
+      </div>
+    </mat-card-content>
+  </mat-card>
+</div>

+ 113 - 2
sistema-mantenimiento-front/src/app/components/preventive-maintenance/work-orders/budget-analysis/budget-analysis.component.ts

@@ -1,4 +1,10 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, Inject, OnInit } from '@angular/core';
+import { MatSnackBar } from '@angular/material/snack-bar';
+import { ActivatedRoute } from '@angular/router';
+import { lastValueFrom } from 'rxjs';
+import { PreventiveWorkOrder, PreventiveWorkOrderResponse } from 'src/app/interfaces/preventive-work-order.interface';
+import { EncService } from 'src/app/services/enc/enc.service';
+import { PreventiveMaintenanceService } from 'src/app/services/preventive-maintenance.service';
 
 @Component({
   selector: 'app-budget-analysis',
@@ -6,10 +12,115 @@ import { Component, OnInit } from '@angular/core';
   styleUrls: ['./budget-analysis.component.css']
 })
 export class BudgetAnalysisComponent implements OnInit {
+  public btnSmall: boolean = false;
 
-  constructor() { }
+  idOrder: number;
+  isLoading: boolean;
+  hasError: boolean;
+  errorStr: string;
+
+  workOrder: PreventiveWorkOrder | null;
+
+  constructor(
+    private _prevMaintService: PreventiveMaintenanceService,
+    private _encService: EncService,
+    private _router: ActivatedRoute,
+    private _snackBar: MatSnackBar,
+  ) { 
+    this.idOrder = 0;
+    this.isLoading = true;
+    this.hasError = false;
+    this.errorStr = "";
+    this.workOrder = null;
+    this.btnSmall = window.innerWidth <= 1405;
+  }
 
   ngOnInit(): void {
+    this._router.queryParams.subscribe(res => {
+      let idOrderEnc = res['data'];
+      if(idOrderEnc == undefined || idOrderEnc == null || idOrderEnc == ''){
+        this.openSnackBar('No se envió información.');
+        this.goBack(1);
+      }else{
+        this.getWorkOrder(idOrderEnc);
+      }
+    });
+  }
+
+  async getWorkOrder(idOrderEnc: string){
+    try{
+      let idOrderDec = await this._encService.desencriptar(idOrderEnc);
+      this.idOrder = parseInt(idOrderDec);
+
+      let idUser = localStorage.getItem('idusuario');
+      let shortEnc = await lastValueFrom(this._encService.shortEncrypt(idUser!));
+      let idOrderShort = await lastValueFrom(this._encService.shortEncrypt(idOrderEnc));
+
+      let order: PreventiveWorkOrderResponse = await lastValueFrom(this._prevMaintService.getWorkOrder(
+        idOrderShort.response.encrypted,
+        shortEnc.response.encrypted,
+        1
+      ));
+
+      this.hasError = order.error;
+      this.errorStr = order.msg;
+
+      if(!this.hasError){
+        this.workOrder = order.response;
+      }
+      
+      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;
+    }
   }
 
+  getTeams(teamsStr: string, teamsConfStr: string): any[]{
+    let teamsArr = JSON.parse(teamsStr);
+    let teamsConfObj = JSON.parse(teamsConfStr);
+    let teams: any[] = [];
+
+    teamsArr.forEach((team: any) => {
+      let id = team.ID;
+      let conf = parseInt(teamsConfObj[id]);
+      let confArr: string[] = [];
+
+      for(let i = 0; i < conf; i++){
+        confArr.push(`${id}-PERS-${i}`);
+      }
+
+      teams.push({
+        ID: id,
+        ESP: team.ESP,
+        NOMB: team.NOMB,
+        CANT: conf,
+        CONF: confArr
+      })
+    });
+    
+    return teams;
+  }
+
+  public onResize():void {
+    this.btnSmall = window.innerWidth <= 1405;
+  }
+
+  goBack(steps: number){
+    window.history.go(steps * -1);
+  }
+
+  openSnackBar(msg: string){
+    this._snackBar.open(msg, undefined, {
+      duration: 2500,
+    })
+  }
 }

+ 2 - 2
sistema-mantenimiento-front/src/app/components/preventive-maintenance/work-orders/work-orders.component.html

@@ -116,11 +116,11 @@
                   <mat-icon>receipt_long</mat-icon>
                   <span>Ver detalles</span>
                 </button>
-                <button mat-menu-item>
+                <button mat-menu-item (click)="changeOrderStatus(row.IDORDEN, 'A')" *ngIf="row.ESTATUS == 'R'">
                   <mat-icon>done</mat-icon>
                   <span>Aprobar orden</span>
                 </button>
-                <button mat-menu-item>
+                <button mat-menu-item (click)="openAnalysisDialog(row.IDORDEN)">
                   <mat-icon>edit_note</mat-icon>
                   <span>Asignar análisis presupuestario</span>
                 </button>

+ 11 - 25
sistema-mantenimiento-front/src/app/components/preventive-maintenance/work-orders/work-orders.component.ts

@@ -1,14 +1,9 @@
-import { DOCUMENT } from '@angular/common';
-import { WorkOrdersByMonthResponse, WorkOrderMonth } from './../../../interfaces/work-orders-by-month.interface';
 import { PreventiveMaintenanceService } from 'src/app/services/preventive-maintenance.service';
-import { NewWorkOrderComponent } from './new-work-order/new-work-order.component';
-import { CalendarEventsComponent } from './calendar-events/calendar-events.component';
 import { MatDialog } from '@angular/material/dialog';
-import { FormBuilder } from '@angular/forms';
 import { MatSnackBar } from '@angular/material/snack-bar';
 import { EncService } from './../../../services/enc/enc.service';
 import { Router } from '@angular/router';
-import { Component, Inject, OnInit, ViewChild } from '@angular/core';
+import { Component, OnInit, ViewChild } from '@angular/core';
 import { MatTableDataSource } from '@angular/material/table';
 import { PreventiveWorkOrders, PreventiveWorkOrdersResponse } from 'src/app/interfaces/preventive-work-orders.interface';
 import { MatPaginator } from '@angular/material/paginator';
@@ -23,25 +18,6 @@ import { CopyOrderComponent } from './copy-order/copy-order.component';
 import { AlertComponent } from '../../resources/dialogs/alert/alert.component';
 import { OrderDetailsComponent } from './order-details/order-details.component';
 
-interface CalendarDay{
-  day: number,
-  date: string,
-  isActualMonth: boolean,
-  isActualDay: boolean,
-}
-interface DisplayedEvent{
-  id: number;
-  title: string;
-  isOverflow: boolean;
-  status: string;
-}
-interface OrderStatus{
-  name: string;
-  selected: boolean;
-  value: string;
-  color: string;
-  subStatus?: OrderStatus[];
-}
 @Component({
   selector: 'app-work-orders',
   templateUrl: './work-orders.component.html',
@@ -83,6 +59,7 @@ export class WorkOrdersComponent implements OnInit {
     this.createOrdersEnabled = true;
     this.ordersHistoryEnabled = true;
     this.copyOrderEnabled = true;
+    this.btnSmall = window.innerWidth <= 1405;
   }
 
   ngOnInit(): void {
@@ -317,6 +294,15 @@ export class WorkOrdersComponent implements OnInit {
     }
   }
 
+  async openAnalysisDialog(idOrder: number){
+    let idEnc = await this._encService.encriptar(`${idOrder}`);
+    this._router.navigate(['sam/GMPR/ORTR/COTP/analisis'], {
+      queryParams: {
+        data: idEnc,
+      }
+    })
+  }
+
   openOrderDetails(idOrder: number){
     let dialogRef = this._dialog.open(OrderDetailsComponent, {
       width: '820px',