employee.component.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <main class="main-container animated fadeIn" (window:resize)="onResize()">
  2. <header id="navigation" class="btn-navigate mb-8" [style]="changeOnTab && cardSmall ? 'width: calc(100% - 40%)!important' : ''">
  3. <div class="prev-page prevent-select indigo_primary_background
  4. mat-elevation-z8" matRipple [routerLink]="['/sam/GPRS']">
  5. <mat-icon style="color: white">arrow_back</mat-icon>
  6. <div class="page-name ml-4">Menú de Gestión del Personal</div>
  7. </div>
  8. </header>
  9. <mat-card class="override-card override-elevation-z8" [style]="changeOnTab && cardSmall ? 'width: calc(100% - 40%)!important' : ''">
  10. <mat-tab-group style="overflow: auto;" #tabGroup
  11. (selectedTabChange)="tabChange($event)">
  12. <mat-tab label="Empleados">
  13. <section class="override-section">
  14. <nav class="override-nav">
  15. <mat-card-title class="mat-card-title centre">Lista de
  16. Empleados</mat-card-title>
  17. <div class="override-actions">
  18. <mat-form-field appearance="outline" class="w-300p
  19. mr-8">
  20. <mat-label>Buscador</mat-label>
  21. <input matInput
  22. [(ngModel)]="txtBuscadorEmployees"
  23. (keyup)="applyFilterEmployees($event,'INP')"
  24. placeholder="Ingrese la palabra a buscar" />
  25. <mat-icon *ngIf="txtBuscadorEmployees.length ===
  26. 0"
  27. matSuffix>search</mat-icon>
  28. <mat-icon *ngIf="txtBuscadorEmployees.length> 0"
  29. class="clickable" matTooltip="Eliminar
  30. filtro"
  31. (click)="applyFilterEmployees('', 'EST')"
  32. matSuffix>close</mat-icon>
  33. </mat-form-field>
  34. <div class="override-buttons">
  35. <button mat-raised-button color="primary"
  36. matTooltip="Registrar Empleado"
  37. [disabled]="isLoading" *ngIf="!btnSmall"
  38. class="override-no-shadow mr-10"
  39. (click)="openDialog('REG')">
  40. <mat-icon>add</mat-icon> Nuevo
  41. </button>
  42. <button mat-mini-fab color="primary"
  43. matTooltip="Registrar Empleado"
  44. [disabled]="isLoading" *ngIf="btnSmall"
  45. class="override-no-shadow mr-8"
  46. (click)="openDialog('REG')">
  47. <mat-icon>add</mat-icon>
  48. </button>
  49. <button mat-mini-fab color="info"
  50. (click)="getEmployees()"
  51. [disabled]="isLoading"
  52. matTooltip="Actualizar
  53. Datos" class="override-no-shadow mr-10">
  54. <mat-icon>refresh</mat-icon>
  55. </button>
  56. </div>
  57. </div>
  58. </nav>
  59. <!-- ALERTAS - CARGANDO FORMULARIOS -->
  60. <div>
  61. <div class="is-loading animated fadeIn fast"
  62. *ngIf="isLoading">
  63. <mat-spinner align="center"></mat-spinner>
  64. <h3>Cargando datos ...</h3>
  65. </div>
  66. <mat-progress-bar mode="indeterminate"
  67. *ngIf="isLoadingForm"></mat-progress-bar>
  68. </div>
  69. <!-- CONTENEDOR DE LA TABLA -->
  70. <div class="override-table" style="height: calc(100% -
  71. 66px)!important;">
  72. <!-- TABLA -->
  73. <table mat-table [dataSource]="dataSourceEmployees!"
  74. matSort
  75. class="animated fadeIn" [style.display]="isLoading ?
  76. 'none' : 'revert'">
  77. <ng-container matColumnDef="NAME">
  78. <th mat-header-cell *matHeaderCellDef
  79. mat-sort-header>Nombre</th>
  80. <td mat-cell *matCellDef="let element">{{
  81. element.NAME }}</td>
  82. </ng-container>
  83. <ng-container matColumnDef="WORKTEAMS">
  84. <th mat-header-cell *matHeaderCellDef
  85. mat-sort-header>Equipo de Trabajo</th>
  86. <td mat-cell *matCellDef="let element">{{
  87. resourcesService.resizeText(element.WORKTEAMS, 37) }}</td>
  88. </ng-container>
  89. <ng-container matColumnDef="CONTRACT_TYPE">
  90. <th mat-header-cell *matHeaderCellDef
  91. mat-sort-header>Contrato</th>
  92. <td mat-cell *matCellDef="let element">{{
  93. element.CONTRACT_TYPE }}</td>
  94. </ng-container>
  95. <ng-container matColumnDef="SPECIALITY">
  96. <th mat-header-cell *matHeaderCellDef
  97. mat-sort-header>Especialidad</th>
  98. <td mat-cell *matCellDef="let element">{{
  99. element.SPECIALITY }}</td>
  100. </ng-container>
  101. <ng-container matColumnDef="STATUS">
  102. <th mat-header-cell *matHeaderCellDef
  103. mat-sort-header>Estado</th>
  104. <td mat-cell *matCellDef="let element">
  105. <mat-chip-listbox>
  106. <mat-chip
  107. class="teal_primary_background"
  108. selected *ngIf="element.STATUS ===
  109. 'Activo'"
  110. (click)="applyFilterEmployees(element.STATUS,
  111. 'EST')"> {{ element.STATUS }}
  112. </mat-chip>
  113. <mat-chip class="red_dark_background"
  114. selected
  115. *ngIf="element.STATUS ===
  116. 'Eliminado'"
  117. (click)="applyFilterEmployees(element.STATUS,
  118. 'EST')"> {{ element.STATUS }}
  119. </mat-chip>
  120. </mat-chip-listbox>
  121. </td>
  122. </ng-container>
  123. <ng-container matColumnDef="ACCIONES">
  124. <th mat-header-cell *matHeaderCellDef>Acciones</th>
  125. <td mat-cell *matCellDef="let element">
  126. <button mat-mini-fab color="accent" *ngIf="btnSmall && element.STATUS !== 'Eliminado'"
  127. [disabled]="isLoading" [matMenuTriggerFor]="menu"
  128. #menuTrigger class="override-no-shadow">
  129. <mat-icon>settings</mat-icon>
  130. </button>
  131. <button mat-mini-fab color="success" class="override-no-shadow" [disabled]="isLoading"
  132. (click)="openDialog('ACT', element)" *ngIf="btnSmall && element.STATUS == 'Eliminado'">
  133. <mat-icon>restore_from_trash</mat-icon>
  134. </button>
  135. <mat-menu #menu="matMenu">
  136. <button mat-menu-item
  137. (click)="openDialog('DET',
  138. element)">
  139. <mat-icon>visibility</mat-icon>
  140. Detalles
  141. </button>
  142. <button mat-menu-item
  143. (click)="openDialog('TAH',
  144. element)">
  145. <mat-icon>timer</mat-icon>
  146. Tasa Horaria
  147. </button>
  148. <button mat-menu-item
  149. (click)="openDialog('DOC',
  150. element)">
  151. <mat-icon>folder_open</mat-icon>
  152. Documentos
  153. </button>
  154. <button mat-menu-item
  155. (click)="openDialog('ORD',
  156. element)">
  157. <mat-icon>description</mat-icon>
  158. Órdenes
  159. </button>
  160. <button mat-menu-item
  161. (click)="openDialog('UPD',
  162. element)">
  163. <mat-icon>edit</mat-icon> Editar
  164. </button>
  165. <button mat-menu-item
  166. (click)="openDialog('DEL',
  167. element)">
  168. <mat-icon>delete</mat-icon> Eliminar
  169. </button>
  170. </mat-menu>
  171. <div *ngIf="!btnSmall">
  172. <button mat-mini-fab color="primary" class="override-no-shadow ml-4" matTooltip="Ver Detalles"
  173. (click)="openDialog('DET', element)" [disabled]="element.STATUS == 'Eliminado' || isLoadingForm">
  174. <mat-icon>visibility</mat-icon>
  175. </button>
  176. <button mat-mini-fab color="accent" class="override-no-shadow ml-4" matTooltip="Ver Tasa Horaria"
  177. (click)="openDialog('TAH', element)" [disabled]="element.STATUS == 'Eliminado' || isLoadingForm">
  178. <mat-icon>timer</mat-icon>
  179. </button>
  180. <button mat-mini-fab color="info" class="override-no-shadow ml-4" matTooltip="Ver Documentos"
  181. (click)="openDialog('DOC', element)" [disabled]="element.STATUS == 'Eliminado' || isLoadingForm">
  182. <mat-icon>folder_open</mat-icon>
  183. </button>
  184. <button mat-mini-fab color="success" class="override-no-shadow ml-4" matTooltip="Ver Órdenes"
  185. (click)="openDialog('ORD', element)" [disabled]="element.STATUS == 'Eliminado' || isLoadingForm">
  186. <mat-icon>description</mat-icon>
  187. </button>
  188. <button mat-mini-fab color="accent" class="override-no-shadow ml-4" matTooltip="Editar Empleado"
  189. (click)="openDialog('UPD', element)" [disabled]="element.STATUS == 'Eliminado' || isLoadingForm">
  190. <mat-icon>edit</mat-icon>
  191. </button>
  192. <button mat-mini-fab color="warn" class="override-no-shadow ml-4" matTooltip="Eliminar Empleado"
  193. (click)="openDialog('DEL', element)" [disabled]="isLoadingForm" *ngIf="element.STATUS == 'Activo'">
  194. <mat-icon>delete</mat-icon>
  195. </button>
  196. <button mat-mini-fab color="success" class="override-no-shadow ml-4" matTooltip="Activar Empleado"
  197. (click)="openDialog('ACT', element)" [disabled]="isLoadingForm" *ngIf="element.STATUS == 'Eliminado'">
  198. <mat-icon>restore_from_trash</mat-icon>
  199. </button>
  200. </div>
  201. </td>
  202. </ng-container>
  203. <tr mat-header-row
  204. *matHeaderRowDef="displayedColumnsEmployees"></tr>
  205. <tr mat-row *matRowDef="let row; columns:
  206. displayedColumnsEmployees"></tr>
  207. <tr class="mat-row" *matNoDataRow>
  208. <td class="mat-cell p-80 centre" colspan="12">
  209. <object data="assets/img/empty_data.svg"
  210. width="300"></object>
  211. <h2>Sin datos</h2>
  212. </td>
  213. </tr>
  214. </table>
  215. </div>
  216. </section>
  217. </mat-tab>
  218. <mat-tab label="Contratos">
  219. <section class="override-section">
  220. <nav>
  221. <mat-card-title class="mat-card-title centre">Lista de
  222. Contratos por Empleado</mat-card-title>
  223. <div class="override-actions">
  224. <mat-form-field appearance="outline" class="w-300p
  225. mr-8">
  226. <mat-label>Buscador</mat-label>
  227. <input matInput
  228. [(ngModel)]="txtBuscadorContracts"
  229. (keyup)="applyFilterContracts($event,'INP')"
  230. placeholder="Ingrese la palabra a buscar" />
  231. <mat-icon *ngIf="txtBuscadorContracts.length ===
  232. 0"
  233. matSuffix>search</mat-icon>
  234. <mat-icon *ngIf="txtBuscadorContracts.length> 0"
  235. class="clickable" matTooltip="Eliminar
  236. filtro"
  237. (click)="applyFilterContracts('', 'EST')"
  238. matSuffix>close</mat-icon>
  239. </mat-form-field>
  240. <div class="override-buttons">
  241. <button mat-mini-fab color="info"
  242. (click)="getContractsByEmployees()"
  243. [disabled]="isLoading"
  244. matTooltip="Actualizar
  245. Datos" class="override-no-shadow mr-10">
  246. <mat-icon>refresh</mat-icon>
  247. </button>
  248. </div>
  249. </div>
  250. </nav>
  251. <!-- ALERTAS - CARGANDO FORMULARIOS -->
  252. <div>
  253. <div class="is-loading animated fadeIn fast"
  254. *ngIf="isLoading">
  255. <mat-spinner align="center"></mat-spinner>
  256. <h3>Cargando datos ...</h3>
  257. </div>
  258. <mat-progress-bar mode="indeterminate"
  259. *ngIf="isLoadingForm"></mat-progress-bar>
  260. </div>
  261. <!-- CONTENEDOR DE LA TABLA -->
  262. <div class="override-table" style="height: calc(100% -
  263. 66px)!important;">
  264. <!-- TABLA -->
  265. <table mat-table [dataSource]="dataSourceContracts!"
  266. matSort #MatSort2="matSort"
  267. class="animated fadeIn" [style.display]="isLoading ?
  268. 'none' : 'revert'">
  269. <ng-container matColumnDef="NAME">
  270. <th mat-header-cell *matHeaderCellDef
  271. mat-sort-header>Nombre</th>
  272. <td mat-cell *matCellDef="let element">{{
  273. element.NAME }}</td>
  274. </ng-container>
  275. <ng-container matColumnDef="CONTRACTS_COUNT">
  276. <th mat-header-cell *matHeaderCellDef
  277. mat-sort-header>Cantidad
  278. Contratos</th>
  279. <td mat-cell *matCellDef="let element">{{
  280. element.CONTRACTS_COUNT }}</td>
  281. </ng-container>
  282. <ng-container matColumnDef="ACCIONES">
  283. <th mat-header-cell *matHeaderCellDef>Acciones</th>
  284. <td mat-cell *matCellDef="let element">
  285. <button
  286. mat-mini-fab
  287. color="primary"
  288. class="override-no-shadow mr-4"
  289. [disabled]="isLoadingForm"
  290. matTooltip="Ver Historial"
  291. (click)="openDialog('HIS',
  292. element)">
  293. <mat-icon>history</mat-icon>
  294. </button>
  295. </td>
  296. </ng-container>
  297. <tr mat-header-row
  298. *matHeaderRowDef="displayedColumnsContracts"></tr>
  299. <tr mat-row *matRowDef="let row; columns:
  300. displayedColumnsContracts"></tr>
  301. <tr class="mat-row" *matNoDataRow>
  302. <td class="mat-cell p-80 centre" colspan="12">
  303. <object data="assets/img/empty_data.svg"
  304. width="300"></object>
  305. <h2>Sin datos</h2>
  306. </td>
  307. </tr>
  308. </table>
  309. </div>
  310. </section>
  311. </mat-tab>
  312. </mat-tab-group>
  313. <!-- PAGINADOR -->
  314. <div class="override-paginator">
  315. <mat-paginator [pageSizeOptions]="[10, 50, 100]"
  316. [style.display]="changeOnTab ?
  317. 'none' : 'revert'"></mat-paginator>
  318. <mat-paginator [pageSizeOptions]="[10, 50, 100]"
  319. #MatPaginator2="matPaginator"
  320. [style.display]="!changeOnTab ?
  321. 'none' : 'revert'"></mat-paginator>
  322. </div>
  323. </mat-card>
  324. </main>