@stiunb/unb-lib-components 18.0.30 → 18.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +38 -31
- package/esm2022/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.mjs +2 -1
- package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +18 -21
- package/fesm2022/stiunb-unb-lib-components.mjs +91 -85
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
- package/lib/unb-nav-bar/unb-nav-bar.component.d.ts +9 -7
- package/lib/unb-usuario/unb-usuario.component.d.ts +2 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stiunb-unb-lib-components.mjs","sources":["../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-message.model.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.service.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.html","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.module.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.model.ts","../../../projects/unb-lib-components/src/lib/services/unb-auth.service.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.html","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.html","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.module.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-tipo-pessoa.enum.ts","../../../projects/unb-lib-components/src/lib/utils/unb-utils.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.service.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/pessoa-tabelas-apoio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.ts","../../../projects/unb-lib-components/src/public-api.ts","../../../projects/unb-lib-components/src/stiunb-unb-lib-components.ts"],"sourcesContent":["export class UnbMensagemModel {\r\n message!: string;\r\n background_color!: string;\r\n font_color!: string;\r\n border_color!: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\n\r\nexport enum UnbTipoMensagemEnum {\r\n SUCCESS = 0,\r\n INFO,\r\n WARNING,\r\n DANGER,\r\n}\r\n\r\n// Interface auxiliar para o evento\r\ninterface UnbMensagemEvent {\r\n model: UnbMensagemModel;\r\n targetId?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbMensagemService {\r\n\r\n // Mudamos o tipo do Subject para aceitar o evento com ID\r\n public messageSubject = new Subject<UnbMensagemEvent>(); \r\n public cores: [string, string, string][] = [ // Ajustei a tipagem do array\r\n ['#dff0d8', '#3c763d', '#d6e9c6'], // SUCCESS\r\n ['#d9edf7', '#31708f', '#bce8f1'], // INFO\r\n ['#fcf8e3', '#8a6d3b', '#faebcc'], // WARNING\r\n ['#f2dede', '#a94442', '#ebccd1'] // DANGER\r\n ];\r\n\r\n constructor() {}\r\n\r\n /**\r\n * @param message mensagem que vai aparecer na tela\r\n * @param tipo tipo da mensagem: success, info, warning, danger.\r\n * @param id (Opcional) Identificador do componente que deve exibir a mensagem\r\n */\r\n public showMessage(message: string, type: number, id?: string) {\r\n const model = this.createAlertMessage(message, ...this.cores[type]);\r\n // Envia o modelo E o id alvo (se houver)\r\n this.messageSubject.next({ model: model, targetId: id }); \r\n }\r\n\r\n /**\r\n * Esconde o componente. \r\n * @param id (Opcional) Se informado, esconde apenas o componente com este ID.\r\n */\r\n public hideMessage(id?: string) {\r\n // Envia modelo vazio para esconder\r\n this.messageSubject.next({ model: new UnbMensagemModel(), targetId: id }); \r\n }\r\n\r\n public getMessageSubject(): Observable<UnbMensagemEvent> {\r\n return this.messageSubject.asObservable();\r\n } \r\n\r\n private createAlertMessage(message: string, background_color: string, font_color: string, border_color: string): UnbMensagemModel {\r\n return { message, background_color, font_color, border_color }; \r\n }\r\n}","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { UnbTipoMensagemEnum, UnbMensagemService } from './unb-mensagem.service';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'unb-mensagem',\r\n templateUrl: './unb-mensagem.component.html',\r\n styleUrls: ['./unb-mensagem.component.css']\r\n})\r\nexport class UnbMensagemComponent implements OnInit, OnDestroy {\r\n\r\n @Input() mensagem!: string; \r\n @Input() tipo!: string;\r\n \r\n // Input opcional para identificar este componente específico\r\n @Input() identificador?: string;\r\n \r\n alertMessage!: UnbMensagemModel;\r\n private subscription!: Subscription | null;\r\n \r\n constructor(private mensagemService: UnbMensagemService) {}\r\n\r\n ngOnInit() { \r\n this.subscription = this.mensagemService.getMessageSubject().subscribe(event => {\r\n \r\n // LÓGICA DE FILTRAGEM:\r\n \r\n // 1. Se a mensagem tem um targetId, mas este componente não tem ID ou o ID não bate: IGNORA\r\n if (event.targetId && event.targetId !== this.identificador) {\r\n return; \r\n }\r\n\r\n // 2. Se a mensagem tem targetId e bate com o meu ID: ACEITA\r\n // 3. Se a mensagem NÃO tem targetId (global): ACEITA (comportamento padrão/antigo)\r\n \r\n if (event.model) {\r\n this.alertMessage = event.model;\r\n }\r\n }); \r\n }\r\n\r\n ngAfterContentInit() {\r\n if (this.mensagem != null && this.mensagem != undefined) {\r\n // Aqui passamos o this.id para garantir que a mensagem inicial fique neste componente\r\n this.showMessage(this.mensagem, this.getTipo()); \r\n }\r\n }\r\n\r\n hide(): void { \r\n // Ao fechar pelo X, passamos o próprio ID para não fechar outros componentes sem querer\r\n this.mensagemService.hideMessage(this.identificador);\r\n }\r\n\r\n showMessage(message: string, tipo: number) {\r\n this.mensagemService.showMessage(message, tipo, this.identificador);\r\n }\r\n \r\n ngOnDestroy() {\r\n if (this.subscription) { \r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n getTipo(): number {\r\n // ... (mesma implementação anterior) ...\r\n if (this.tipo != null && this.tipo != undefined){ \r\n let valor = this.tipo.toLowerCase();\r\n if (valor == 'warning' || valor == 'warn' || valor == 'aviso'){\r\n return UnbTipoMensagemEnum.WARNING ;\r\n } else if (valor == 'sucesso' || valor == 'success' || valor == 'sucess'){\r\n return UnbTipoMensagemEnum.SUCCESS;\r\n } else if (valor == 'danger' || valor == 'erro' || valor == 'error'){\r\n return UnbTipoMensagemEnum.DANGER;\r\n } else if (valor == 'info'){\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n }\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n}","\r\n<div class=\"alert\" *ngIf=\"alertMessage && alertMessage.message && alertMessage.message.length > 1\" [ngStyle]=\"{background: alertMessage.background_color, 'border-color': alertMessage.border_color}\"> \r\n <div class=\"mensagem\" [ngStyle]=\"{color: alertMessage.font_color}\" [innerHtml]= \"alertMessage.message\"></div>\r\n <a class=\"close\" (click)=\"hide()\" aria-label=\"fechar\" [ngStyle]=\"{color: alertMessage.font_color}\">x</a>\r\n</div> \r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbMensagemComponent } from './unb-mensagem.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@NgModule({\r\n declarations: [ UnbMensagemComponent ],\r\n imports: [CommonModule, \r\n MatIconModule,\r\n MatButtonModule ],\r\n exports: [ UnbMensagemComponent ]\r\n})\r\nexport class UnbMensagemModule { }\r\n","export class UnbUsuarioModel {\r\n public autenticado: boolean = false;\r\n public usuarioNome: string = \"\";\r\n public perfis: string[] = [];\r\n public expiration: number = 0;\r\n}","import { Injectable } from '@angular/core';\r\nimport { LoginResponse, OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { OidcDecodedToken } from '../unb-usuario/oidc-decoded-token';\r\nimport { OidcUserData } from '../unb-usuario/oidc-user-data';\r\nimport { UnbUsuarioModel } from '../unb-usuario/unb-usuario.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbAuthService {\r\n // Inicializamos o BehaviorSubject com uma lista vazia de perfis\r\n private usuarioSubject = new BehaviorSubject<UnbUsuarioModel>(new UnbUsuarioModel);\r\n usuario$ = this.usuarioSubject.asObservable();\r\n private usuarioModel: UnbUsuarioModel = new UnbUsuarioModel();\r\n private oidcSecurityService!: OidcSecurityService;\r\n\r\n\r\n constructor() {\r\n \r\n }\r\n\r\n initiate(oidcSecurityService: OidcSecurityService) {\r\n this.oidcSecurityService = oidcSecurityService;\r\n this.logAuthenticatedState();\r\n }\r\n\r\n private logAuthenticatedState() {\r\n this.oidcSecurityService.checkAuth().subscribe((loginResponse: LoginResponse) => {\r\n if (!loginResponse.isAuthenticated) {\r\n this.usuarioModel.autenticado = false;\r\n this.usuarioSubject.next(this.usuarioModel);\r\n } else {\r\n this.usuarioModel.autenticado = true;\r\n this.setUserData(loginResponse.userData);\r\n }\r\n });\r\n }\r\n\r\n private setUserData(userData: OidcUserData) {\r\n const nomeCompleto = userData.given_name.trim();\r\n const nomes = nomeCompleto.split(' ');\r\n\r\n this.usuarioModel.usuarioNome = nomes.length > 1 \r\n ? `${nomes[0]} ${nomes[nomes.length - 1]}` \r\n : nomes[0];\r\n\r\n this.oidcSecurityService.getPayloadFromAccessToken().subscribe((authResult: OidcDecodedToken) => {\r\n this.usuarioModel.perfis = authResult.realm_access.roles || [];\r\n // Atualiza o BehaviorSubject com o modelo atualizado\r\n this.usuarioSubject.next(this.usuarioModel);\r\n });\r\n }\r\n\r\n public login() {\r\n this.oidcSecurityService.authorize();\r\n }\r\n\r\n public logout() {\r\n this.oidcSecurityService\r\n .logoff()\r\n .subscribe(() => this.usuarioSubject.next(new UnbUsuarioModel()) );\r\n }\r\n \r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioModel } from './unb-usuario.model';\r\n\r\n@Component({\r\n selector: 'unb-usuario',\r\n templateUrl: './unb-usuario.component.html',\r\n styleUrls: ['./unb-usuario.component.css']\r\n})\r\nexport class UnbUsuarioComponent implements OnInit {\r\n usuario$!: Observable<UnbUsuarioModel>;\r\n \r\n @Input() oidcSecurityService!:OidcSecurityService;\r\n\r\n constructor(protected authService: UnbAuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.oidcSecurityService == null) {\r\n console.log(\"Erro: oidcService está null!\")\r\n return;\r\n }\r\n\r\n this.authService.initiate(this.oidcSecurityService);\r\n this.usuario$ = this.authService.usuario$;\r\n }\r\n\r\n login() {\r\n this.authService.login();\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n }\r\n","<button mat-mini-fab color=\"primary\" aria-label=\"Login Button\" [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>person</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"usuario$ | async as usuario\"> \r\n <mat-card-header class=\"menuHeader\" *ngIf=\"usuario && usuario.autenticado; else notAuthenticated\">\r\n <mat-card-title>\r\n <div class=\"user-info-container\">\r\n <span>{{ usuario.usuarioNome }}</span>\r\n <mat-icon matTooltip=\"{{ usuario.perfis.join(', ') }}\" aria-label=\"Perfis de usuário\" *ngIf=\"usuario.perfis\">\r\n account_circle\r\n </mat-icon>\r\n </div>\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <ng-template #notAuthenticated>\r\n <mat-card-header class=\"menuHeader\">\r\n <button mat-menu-item (click)=\"login()\">\r\n <mat-icon>login</mat-icon>\r\n <span>Login</span>\r\n </button>\r\n </mat-card-header>\r\n </ng-template>\r\n\r\n <mat-divider *ngIf=\"usuario.autenticado\"></mat-divider>\r\n\r\n <mat-card-actions *ngIf=\"usuario.autenticado\">\r\n <button mat-menu-item (click)=\"logout()\">\r\n <mat-icon>exit_to_app</mat-icon>\r\n <span>Sair</span>\r\n </button>\r\n </mat-card-actions>\r\n </div>\r\n</mat-menu>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\n\r\n@Component({\r\n selector: 'unb-nav-bar',\r\n templateUrl: './unb-nav-bar.component.html',\r\n styleUrls: ['./unb-nav-bar.component.css']\r\n})\r\nexport class UnbNavBarComponent {\r\n\r\n @Input() nomeSistema: string= \"Nome do Sistema\"; /* O nome do sistema */ \r\n @Input() menuSize = 300; /** O tamanho do menu em px */\r\n @Input() widthToHideMenu = 800; /* O tamanho da tela ateh esconder o menu */\r\n @Input() contentBackgroundColor = '#f0f3f7'; /* A cor do Content */\r\n @Input() containerPadding = 10; /* O tamanho do padding to container que fica o content */\r\n \r\n @Input() oidcSecurityService!:OidcSecurityService;\r\n\r\n @ViewChild(MatSidenav)\r\n sidenav!: MatSidenav;\r\n isMobile= true;\r\n\r\n constructor(private observer: BreakpointObserver) { }\r\n\r\n ngOnInit() {\r\n this.observer.observe(['(max-width: '+ this.widthToHideMenu + 'px)' ]).subscribe((screenSize) => {\r\n if(screenSize.matches){\r\n this.isMobile = true;\r\n } else {\r\n this.isMobile = false;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"example-container\" >\r\n <mat-toolbar class=\"example-toolbar\">\r\n <button mat-icon-button class=\"minifab\" type=\"button\" aria-label=\"Toggle sidenav\" color=\"accent\" (click)=\"snav.toggle()\"><mat-icon>menu</mat-icon></button> \r\n <img src=\"assets/img/unb_icon_branco.svg\" alt=\"\" style=\"width: 40px\"> \r\n <span style=\"color: white;\">{{nomeSistema}}</span>\r\n <span class=\"spacer\"></span> \r\n <unb-usuario [oidcSecurityService]=\"oidcSecurityService\"></unb-usuario>\r\n </mat-toolbar>\r\n\r\n <mat-sidenav-container class=\"example-sidenav-container\" [ngStyle]=\"{'background-color': contentBackgroundColor}\" > \r\n <mat-sidenav #snav [mode]=\"isMobile ? 'over' : 'side'\" [opened]=\"isMobile ? 'false' : 'true'\" [style.max-width.px]=\"menuSize\" > \r\n <ng-content select=\"[menu]\"></ng-content> \r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content [ngStyle]=\"{'padding.px': containerPadding}\">\r\n <ng-content select=\"[body]\"></ng-content> \r\n </mat-sidenav-content>\r\n\r\n </mat-sidenav-container>\r\n</div>","import { LayoutModule } from '@angular/cdk/layout';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioComponent } from './unb-usuario.component';\r\n\r\n@NgModule({\r\n declarations: [UnbUsuarioComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule, \r\n MatCardModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule \r\n ], \r\n exports: [UnbUsuarioComponent],\r\n providers: [UnbAuthService]\r\n})\r\nexport class UnbUsuarioModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbNavBarComponent } from './unb-nav-bar.component';\r\nimport { LayoutModule } from '@angular/cdk/layout';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [UnbNavBarComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n MatCardModule \r\n ],\r\n exports: [UnbNavBarComponent]\r\n})\r\nexport class UnbNavBarModule { }\r\n","export class UnbPessoaEmail {\r\n codigo?: number;\r\n tipoEmailCodigo?: number;\r\n tipo?: string;\r\n email?: string;\r\n autorizacao?: boolean;\r\n ordem?: number;\r\n ordemEmail?: number | null;\r\n}\r\n\r\nexport class UnbPessoaEmailTipo {\r\n index?: number;\r\n codigo?: number;\r\n denominacao?: string;\r\n}","import { UnbTipoPessoaEnum } from \"../unb-tipo-pessoa.enum\";\r\nimport { UnbPessoaEmail } from \"./unb-pessoa-email.model\";\r\nimport { UnbPessoaEndereco } from \"./unb-pessoa-endereco.model\";\r\nimport { UnbPessoaPais } from \"./unb-pessoa-pais\";\r\nimport { UnbPessoaTelefone } from \"./unb-pessoa-telefone.model\";\r\n\r\n/** \r\n * Essa eh uma classe base, com propriedades comum a todas as outras pessoas. \r\n * */\r\nexport class UnbPessoaModel {\r\n idPessoa!: number;\r\n codigoPessoa!: number; \r\n enderecos!: UnbPessoaEndereco[];\r\n telefones!: UnbPessoaTelefone[];\r\n emails!: UnbPessoaEmail[];\r\n tipoPessoa!: UnbTipoPessoaEnum; // inicializa com o fisica selecionado\r\n\r\n // Atributos da Pessoa Física\r\n idServidor!: number;\r\n matriculaSipes!: number;\r\n matriculaSiape!: number;\r\n nome!: string;\r\n cpf!: string;\r\n rg!: string;\r\n rgOrgao!: string;\r\n rgUf!: string;\r\n rgDataEmissao!: string;\r\n numeroTituloEleitor!: string;\r\n dataEmissaoTituloEleitor!: string;\r\n zonaTituloEleitor!: string;\r\n secaoTituloEleitor!: string;\r\n ufTituloEleitor!: string;\r\n numeroReservista!: string;\r\n serieReservista!: string;\r\n orgaoReservista!: string;\r\n dataNascimento!: Date | null;\r\n \r\n paisNascimento!: string;\r\n ufNascimento!: string;\r\n naturalidade!: string;\r\n codigoPaisNascimento!: number | null ;;\r\n codigoPaisPassaporte!: number;\r\n codigoEstadoCivil!: number | null ;\r\n nacionalidade!: string;\r\n estadoCivil!: string;\r\n nomePai!: string;\r\n nomeMae!: string;\r\n tipoSanguineo!: string;\r\n escolaridade!: number |null;\r\n numeroCarteiraTrabalho!: string;\r\n serieCarteiraTrabalho!: string;\r\n ufCarteiraTrabalho!: string;\r\n pisPasep!: string;\r\n numeroHabilitacao!: string;\r\n registroHabilitacao!: string;\r\n dataEmissaoHabilitacao!: string;\r\n dataValidadeHabilitacao!: string;\r\n categoriaHabilitacao!: string;\r\n deficienciaFisicaHabilitacao!: string;\r\n primeiraHabilitacao!: string;\r\n autoCadastro!: boolean;\r\n nomeSocial!: string;\r\n sexo!: string; \r\n codigoSexo!: number;\r\n\r\n // Atributos da Pessoa Estrangeira\r\n passaporte!: string;\r\n paisOrigem!: string;\r\n dataChegadaBrasil!: Date | null;\r\n\r\n // Atributos da Pessoa Jurídica\r\n cnpj!: string;\r\n razaoSocial!: string;\r\n nomeFantasia!: string;\r\n sigla!: string;\r\n pais!: UnbPessoaPais;\r\n paginaWeb!: string;\r\n\r\n}","export enum UnbTipoPessoaEnum {\r\n FISICA = 'FISICA',\r\n JURIDICA = 'JURIDICA',\r\n ESTRANGEIRA = 'ESTRANGEIRA'\r\n}","export class UnbUtils {\r\n removeNull(key:any, value:any) {\r\n // Filtering out properties\r\n if (value === null) {\r\n return undefined;\r\n }\r\n\r\n return value;\r\n }\r\n \r\n // forma cpf\r\n static formataCpf(valor:any) {\r\n return valor.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/g,\"\\$1.\\$2.\\$3\\-\\$4\");\r\n }\r\n\r\n // forma cpf ou cnpj\r\n static formataCnpj(valor:string): string {\r\n return valor.replace(/^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/, \"$1.$2.$3/$4-$5\");\r\n }\r\n\r\n static validarCPF(cpf: string): boolean {\r\n if (!cpf) return false; // Se CPF for null, undefined ou vazio, retorna falso\r\n \r\n cpf = cpf.replace(/\\D/g, ''); // Remove todos os caracteres não numéricos \r\n if (cpf=='') return false;\r\n\r\n if (cpf.length !== 11 || /^(\\d)\\1+$/.test(cpf)) {\r\n return false; // Verifica se tem 11 dígitos e não é uma sequência repetida (ex: 11111111111)\r\n }\r\n \r\n let soma = 0, resto: number;\r\n \r\n // Validação do primeiro dígito verificador\r\n for (let i = 0; i < 9; i++) {\r\n soma += Number(cpf[i]) * (10 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n if (resto !== Number(cpf[9])) return false;\r\n \r\n soma = 0;\r\n \r\n // Validação do segundo dígito verificador\r\n for (let i = 0; i < 10; i++) {\r\n soma += Number(cpf[i]) * (11 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n \r\n return resto === Number(cpf[10]);\r\n }\r\n \r\n\r\n static validarCNPJ(cnpj: string): boolean {\r\n cnpj = cnpj.replace(/[^\\d]+/g, ''); // Remove caracteres não numéricos\r\n \r\n if (cnpj.length !== 14 || /^(\\d)\\1+$/.test(cnpj)) {\r\n return false; // Verifica se tem 14 dígitos e não é uma sequência repetida\r\n }\r\n \r\n let tamanho = cnpj.length - 2;\r\n let numeros = cnpj.substring(0, tamanho);\r\n let digitos = cnpj.substring(tamanho);\r\n let soma = 0, pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n let resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n if (resultado !== parseInt(digitos.charAt(0))) return false;\r\n \r\n tamanho = tamanho + 1;\r\n numeros = cnpj.substring(0, tamanho);\r\n soma = 0;\r\n pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n return resultado === parseInt(digitos.charAt(1));\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, catchError, map, Observable, of, throwError } from 'rxjs';\r\nimport { UnbPessoaEndereco } from './unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from './unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaEstadoCivil } from './unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaMunincipio } from './unb-pessoa-models/unb-pessoa-municipio';\r\nimport { UnbPessoaPais } from './unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaModel } from './unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbTipoPessoaEnum } from './unb-tipo-pessoa.enum';\r\nimport { UnbUtils } from '../utils/unb-utils';\r\n\r\n// Interface para padronizar o erro que chega nos componentes\r\nexport interface UnbPessoaErroPadrao {\r\n status: number;\r\n mensagemSimples: string; // Para usar no SnackBar\r\n mensagemHtml: string; // Para usar no AlertService (com <ul>, <li>, <strong>)\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnBPessoaService {\r\n\r\n // Armazena apenas a string da URL. Inicializa vazio.\r\n private backendUrlSubject = new BehaviorSubject<string>('');\r\n // Exposta como Observable (caso algum componente queira se inscrever)\r\n backendUrl$ = this.backendUrlSubject.asObservable();\r\n\r\n // pra facilitar o debug, pode já passar o token. Mas isso nao pode estar na producao pq vai expor o token pro usuario no front\r\n private token: string = '';\r\n\r\n // Cache das listas de tipos (para normalização de endereço, telefone, email)\r\n private tipoEnderecoCache: { codigo: number; denominacao: string }[] | null = null;\r\n private tipoTelefoneCache: { codigo: number; denominacao: string }[] | null = null;\r\n private tipoEmailCache: { codigo: number; denominacao: string }[] | null = null;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Setter agora recebe string direta\r\n setBackendUrl(url: string) {\r\n // Tratamento remove barra no final para padronizar\r\n if (url && url.endsWith('/')) {\r\n url = url.slice(0, -1);\r\n }\r\n this.backendUrlSubject.next(url);\r\n }\r\n\r\n setToken(token: string) {\r\n this.token = token;\r\n }\r\n\r\n // Getter retorna string direta\r\n getBackendUrl(): string {\r\n return this.backendUrlSubject.getValue();\r\n }\r\n\r\n // Headers padrão com Content-Type e Authorization (se token existir)\r\n private getHeaders() {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json'\r\n });\r\n\r\n // Se o token estiver preenchido (cenário de debug/dev), adiciona o Authorization\r\n if (this.token) {\r\n headers = headers.set('Authorization', `Bearer ${this.token}`);\r\n }\r\n\r\n // Retorna o objeto no formato esperado pelo HttpClient { headers: ... }\r\n return { headers };\r\n }\r\n\r\n // Métodos de busca\r\n findByCpf(cpf: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?cpf=${cpf}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByCnpj(cnpj: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?cnpj=${cnpj}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByPassaporte(passaporte: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?passaporte=${passaporte}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.ESTRANGEIRA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaFisicaByCodigoPessoa(id: number): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?codigoPessoa=${id}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaJuridicaByCodigoPessoa(id: number): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?codigoPessoa=${id}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaFisica(filtro: UnbPessoaModel, page?: number, size?: number, sort?: string): Observable<UnbPessoaModel[]> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas`;\r\n let params = new HttpParams();\r\n\r\n Object.keys(filtro).forEach((key) => {\r\n const valor = filtro[key as keyof UnbPessoaModel];\r\n if (valor !== null && valor !== undefined && valor !== '') {\r\n params = params.append(key, valor.toString());\r\n }\r\n });\r\n\r\n // 2. Adiciona os parâmetros de Paginação (se foram passados)\r\n if (page !== undefined && page !== null) {\r\n params = params.append('page', page.toString());\r\n }\r\n if (size !== undefined && size !== null) {\r\n params = params.append('size', size.toString());\r\n }\r\n if (sort) {\r\n params = params.append('sort', sort);\r\n }\r\n\r\n // 3. Monta as opções da requisição\r\n const options = {\r\n params,\r\n ...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }\r\n };\r\n\r\n return this.http.get<UnbPessoaModel[]>(url, options)\r\n .pipe(\r\n map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.FISICA))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaJuridica(filtro: UnbPessoaModel, page?: number, size?: number, sort?: string): Observable<UnbPessoaModel[]> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas`;\r\n let params = new HttpParams();\r\n\r\n // 1. Adiciona APENAS os filtros permitidos do Model\r\n const camposPermitidos = ['idPessoa', 'codigoPessoa', 'cnpj', 'nomeFantasia', 'razaoSocial', 'sigla'];\r\n\r\n Object.keys(filtro).forEach((key) => {\r\n if (camposPermitidos.includes(key)) {\r\n const valor = filtro[key as keyof UnbPessoaModel];\r\n if (valor !== null && valor !== undefined && valor !== '') {\r\n params = params.append(key, valor.toString());\r\n }\r\n }\r\n });\r\n\r\n // 2. Adiciona os parâmetros de Paginação (se foram passados)\r\n if (page !== undefined && page !== null) {\r\n params = params.append('page', page.toString());\r\n }\r\n if (size !== undefined && size !== null) {\r\n params = params.append('size', size.toString());\r\n }\r\n if (sort) {\r\n params = params.append('sort', sort);\r\n }\r\n\r\n // 3. Monta as opções da requisição\r\n const options = {\r\n params,\r\n ...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }\r\n };\r\n\r\n return this.http.get<UnbPessoaModel[]>(url, options)\r\n .pipe(\r\n map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.JURIDICA))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n pesquisarCep(cep: string) {\r\n const url = `${this.getBackendUrl()}/pessoa-api/public/busca-cep/servico-1/${cep}`;\r\n return this.http.get<UnbPessoaEndereco>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Salvar (decide fisica ou juridica)\r\n salvar(payload: any, tipoPessoa: UnbTipoPessoaEnum): Observable<UnbPessoaModel | null> {\r\n\r\n // (Para o componente conseguir ler .mensagemSimples e .mensagemHtml)\r\n if (!payload) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Dados para salvamento inválidos (Payload null).',\r\n mensagemHtml: '<strong>Erro interno:</strong> Tentativa de salvar dados vazios.'\r\n }));\r\n }\r\n\r\n if (!tipoPessoa) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Tipo de pessoa não definido.',\r\n mensagemHtml: '<strong>Erro interno:</strong> O tipo de pessoa é obrigatório para salvar.'\r\n }));\r\n }\r\n\r\n // 2. Delegação\r\n // Como savePessoaFisica e savePessoaJuridica JÁ TÊM o .pipe(catchError),\r\n // aqui nós apenas retornamos o Observable deles. O erro subirá tratado.\r\n if (tipoPessoa == UnbTipoPessoaEnum.FISICA || tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n return this.savePessoaFisica(payload);\r\n } else if (tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n return this.savePessoaJuridica(payload);\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n // Salvar recebendo diretamente o Model e convertendo internamente para o payload do backend\r\n public salvarPessoa(pessoa: UnbPessoaModel): Observable<UnbPessoaModel | null> {\r\n if (!pessoa) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Pessoa inválida (null).',\r\n mensagemHtml: '<strong>Erro interno:</strong> Objeto pessoa vazio.'\r\n }));\r\n }\r\n\r\n const payload = this.convertPessoaToPayload(pessoa);\r\n return this.salvar(payload, pessoa.tipoPessoa);\r\n }\r\n\r\n // Salvar Pessoa Física\r\n private savePessoaFisica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getBackendUrl();\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n\r\n // Variável para armazenar o Observable antes de retornar\r\n let request$: Observable<UnbPessoaModel>;\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n request$ = this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas`, body, httpOptions);\r\n } else {\r\n request$ = this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n\r\n // Antes de retornar, passamos pelo 'pipe' para tratar o erro se ele ocorrer.\r\n return request$.pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Salvar Pessoa Jurídica\r\n private savePessoaJuridica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getBackendUrl();\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n let request$: Observable<UnbPessoaModel>;\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n request$ = this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas`, body, httpOptions);\r\n } else {\r\n request$ = this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n\r\n return request$.pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Dados auxiliares públicos\r\n public getEscolaridade() {\r\n return this.http.get<UnbPessoaEscolaridade[]>(`${this.getBackendUrl()}/pessoa-api/public/escolaridades/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getEstadoCivil() {\r\n return this.http.get<UnbPessoaEstadoCivil[]>(`${this.getBackendUrl()}/pessoa-api/public/estados-civis/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getMunicipios() {\r\n return this.http.get<UnbPessoaMunincipio[]>(`${this.getBackendUrl()}/pessoa-api/public/municipios/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getPaises() {\r\n return this.http.get<{ content: UnbPessoaPais[] }>(\r\n `${this.getBackendUrl()}/pessoa-api/public/paises/listagem?&page=0&size=200&sort=denominacao,asc`\r\n ).pipe(\r\n map(response => {\r\n return response.content.sort((a, b) => {\r\n // ... sua lógica de ordenação ...\r\n const nomeA = a?.denominacao?.toUpperCase() || '';\r\n const nomeB = b?.denominacao?.toUpperCase() || '';\r\n if (nomeA === 'BRASIL') return -1;\r\n if (nomeB === 'BRASIL') return 1;\r\n return nomeA.localeCompare(nomeB);\r\n });\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getRacaCor() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/public/etnias/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoEndereco() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-endereco/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoEnderecoCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoTelefone() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-telefone/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoTelefoneCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoEmail() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-email/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoEmailCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n private formatarLabel(text: string) {\r\n return text\r\n .toLowerCase()\r\n .replace(/_/g, ' ')\r\n .replace(/\\b\\w/g, l => l.toUpperCase());\r\n }\r\n\r\n /**\r\n * Normaliza o payload retornado pelo backend para `UnbPessoaModel` pronto para UI.\r\n */\r\n private normalizePessoa(resultado: UnbPessoaModel | null, tipoForcado?: UnbTipoPessoaEnum): UnbPessoaModel {\r\n const pessoa = (resultado || new UnbPessoaModel()) as UnbPessoaModel;\r\n\r\n // Define tipoPessoa quando o endpoint não retorna\r\n if (tipoForcado != null) {\r\n pessoa.tipoPessoa = tipoForcado;\r\n }\r\n\r\n // Garante arrays\r\n pessoa.enderecos = pessoa.enderecos || [];\r\n pessoa.telefones = pessoa.telefones || [];\r\n pessoa.emails = pessoa.emails || [];\r\n\r\n // Sexo -> codigoSexo\r\n if ((pessoa as any).sexo) {\r\n const sexo = ((pessoa as any).sexo as string).toUpperCase().trim();\r\n if (sexo === 'FEMININO') pessoa.codigoSexo = 2;\r\n else if (sexo === 'MASCULINO') pessoa.codigoSexo = 1;\r\n }\r\n\r\n // Datas para Date\r\n pessoa.dataNascimento = this.parseData(pessoa.dataNascimento as any);\r\n // Demais datas permanecem como string para compatibilidade com o model\r\n\r\n // Campos com 'codigo - label' -> codigo\r\n pessoa.codigoEstadoCivil = this.parseCodigo((pessoa as any).estadoCivil);\r\n pessoa.codigoPaisNascimento = this.parseCodigo((pessoa as any).paisNascimento);\r\n pessoa.escolaridade = this.parseCodigo((pessoa as any).escolaridade);\r\n\r\n // Endereços: ordem/uf\r\n pessoa.enderecos.forEach((end: any, i: number) => {\r\n end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);\r\n if (!end.ufEndereco && end.uf) end.ufEndereco = end.uf;\r\n\r\n // Mapeia tipo string para tipoEnderecoCodigo usando o cache\r\n if (!end.tipoEnderecoCodigo && end.tipo && this.tipoEnderecoCache) {\r\n const tipoEncontrado = this.tipoEnderecoCache.find(t => \r\n t.denominacao?.toLowerCase() === String(end.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) end.tipoEnderecoCodigo = tipoEncontrado.codigo;\r\n }\r\n\r\n // Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)\r\n if (!end.paisEnderecoCodigo && end.pais) {\r\n end.paisEnderecoCodigo = this.parseCodigo(end.pais);\r\n }\r\n });\r\n\r\n // Telefones: ordem e tipo\r\n pessoa.telefones.forEach((tel: any, i: number) => {\r\n tel.ordem = tel.ordem || (i + 1);\r\n \r\n // Mapeia tipo string para tipoTelefoneCodigo usando o cache\r\n if (!tel.tipoTelefoneCodigo && tel.tipo && this.tipoTelefoneCache) {\r\n const tipoEncontrado = this.tipoTelefoneCache.find(t => \r\n t.denominacao?.toLowerCase() === String(tel.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) tel.tipoTelefoneCodigo = tipoEncontrado.codigo;\r\n }\r\n });\r\n\r\n // Emails: ordem e tipo\r\n pessoa.emails.forEach((email: any, i: number) => {\r\n email.ordem = email.ordem || (i + 1);\r\n \r\n // Mapeia tipo string para tipoEmailCodigo usando o cache\r\n if (!email.tipoEmailCodigo && email.tipo && this.tipoEmailCache) {\r\n const tipoEncontrado = this.tipoEmailCache.find(t => \r\n t.denominacao?.toLowerCase() === String(email.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) email.tipoEmailCodigo = tipoEncontrado.codigo;\r\n }\r\n });\r\n\r\n // Formata documento para UI\r\n if (pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA && pessoa.cpf) {\r\n const digits = String(pessoa.cpf).replace(/\\D/g, '');\r\n (pessoa as any).cpf = UnbUtils.formataCpf(digits);\r\n } else if (pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA && pessoa.cnpj) {\r\n const digits = String(pessoa.cnpj).replace(/\\D/g, '');\r\n (pessoa as any).cnpj = UnbUtils.formataCnpj(digits);\r\n }\r\n\r\n return pessoa;\r\n }\r\n\r\n private parseCodigo(valor: any): number | null {\r\n if (valor == null) return null;\r\n if (typeof valor === 'number') return valor;\r\n if (typeof valor !== 'string') return null;\r\n const sepIndex = valor.indexOf(' - ');\r\n if (sepIndex === -1) {\r\n const num = parseInt(valor, 10);\r\n return isNaN(num) ? null : num;\r\n }\r\n const codigo = parseInt(valor.substring(0, sepIndex).trim(), 10);\r\n return isNaN(codigo) ? null : codigo;\r\n }\r\n\r\n private parseData(dataString: any): Date | null {\r\n if (!dataString) return null;\r\n if (dataString instanceof Date) return dataString;\r\n if (typeof dataString !== 'string' || !dataString.includes('/')) return null;\r\n\r\n const partes = dataString.split('/');\r\n if (partes.length !== 3) return null;\r\n const dia = parseInt(partes[0], 10);\r\n const mes = parseInt(partes[1], 10) - 1;\r\n const ano = parseInt(partes[2], 10);\r\n const dataObj = new Date(ano, mes, dia);\r\n if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {\r\n return dataObj;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Converte uma instância (ou objeto) de UnbPessoaModel para o payload esperado pelo backend.\r\n */\r\n private convertPessoaToPayload(pessoa: UnbPessoaModel): any {\r\n if (!pessoa) return null;\r\n\r\n const enderecosPayload = (pessoa.enderecos || []).map((end: any) => ({\r\n ordemEndereco: end.ordemEndereco,\r\n tipoEnderecoCodigo: end.tipoEnderecoCodigo,\r\n municipioCodigo: end.municipioCodigo,\r\n paisEnderecoCodigo: end.paisEnderecoCodigo,\r\n logradouro: end.logradouro,\r\n complemento: end.complemento,\r\n cep: end.cep,\r\n bairro: end.bairro,\r\n ufEndereco: end.ufEndereco,\r\n caixaPostal: end.caixaPostal,\r\n correspondencia: end.correspondencia\r\n }));\r\n\r\n const telefonesPayload = (pessoa.telefones || []).map((tel: any) => ({\r\n ordemTelefone: tel.ordem,\r\n tipoTelefoneCodigo: tel.tipoTelefoneCodigo,\r\n ddi: tel.ddi,\r\n ddd: tel.ddd,\r\n numeroTelefone: tel.numero,\r\n ramal: tel.ramal,\r\n autorizaSMS: tel.autorizaSMS\r\n }));\r\n\r\n const emailsPayload = (pessoa.emails || []).map((email: any) => ({\r\n tipoEmailCodigo: email.tipoEmailCodigo,\r\n ordemEmail: email.ordem,\r\n email: email.email,\r\n autorizacao: email.autorizacao\r\n }));\r\n\r\n return {\r\n idPessoa: pessoa.idPessoa,\r\n codigoPessoa: pessoa.codigoPessoa,\r\n\r\n nome: pessoa.nome,\r\n nomeSocial: pessoa.nomeSocial,\r\n ...(pessoa.cpf && { cpf: pessoa.cpf.replace(/\\D/g, '') }),\r\n codigoSexo: pessoa.codigoSexo,\r\n codigoEstadoCivil: pessoa.codigoEstadoCivil,\r\n codigoEscolaridade: pessoa.escolaridade,\r\n nomePai: pessoa.nomePai,\r\n nomeMae: pessoa.nomeMae,\r\n\r\n dataNascimento: this.formatarDataParaBackend(pessoa.dataNascimento),\r\n codigoPaisNascimento: pessoa.codigoPaisNascimento,\r\n ufNascimento: pessoa.ufNascimento,\r\n naturalidade: pessoa.naturalidade,\r\n dataChegadaBrasil: this.formatarDataParaBackend(pessoa.dataChegadaBrasil as any),\r\n\r\n rg: pessoa.rg,\r\n rgOrgao: pessoa.rgOrgao,\r\n rgUf: pessoa.rgUf,\r\n rgDataEmissao: this.formatarDataParaBackend(pessoa.rgDataEmissao),\r\n\r\n numeroTituloEleitor: pessoa.numeroTituloEleitor,\r\n dataEmissaoTituloEleitor: this.formatarDataParaBackend(pessoa.dataEmissaoTituloEleitor),\r\n zonaTituloEleitor: pessoa.zonaTituloEleitor,\r\n secaoTituloEleitor: pessoa.secaoTituloEleitor,\r\n ufTituloEleitor: pessoa.ufTituloEleitor,\r\n\r\n numeroReservista: pessoa.numeroReservista,\r\n serieReservista: pessoa.serieReservista,\r\n orgaoReservista: pessoa.orgaoReservista,\r\n\r\n numeroCarteiraTrabalho: pessoa.numeroCarteiraTrabalho,\r\n serieCarteiraTrabalho: pessoa.serieCarteiraTrabalho,\r\n ufCarteiraTrabalho: pessoa.ufCarteiraTrabalho,\r\n pisPasep: pessoa.pisPasep,\r\n\r\n numeroHabilitacao: pessoa.numeroHabilitacao,\r\n registroHabilitacao: pessoa.registroHabilitacao,\r\n dataEmissaoHabilitacao: this.formatarDataParaBackend(pessoa.dataEmissaoHabilitacao),\r\n dataValidadeHabilitacao: this.formatarDataParaBackend(pessoa.dataValidadeHabilitacao),\r\n categoriaHabilitacao: pessoa.categoriaHabilitacao,\r\n deficienciaFisicaHabilitacao: pessoa.deficienciaFisicaHabilitacao,\r\n primeiraHabilitacao: this.formatarDataParaBackend(pessoa.primeiraHabilitacao),\r\n\r\n passaporte: pessoa.passaporte,\r\n codigoPaisPassaporte: pessoa.codigoPaisPassaporte,\r\n ...(pessoa.cnpj && { cnpj: pessoa.cnpj.replace(/\\D/g, '') }),\r\n razaoSocial: pessoa.razaoSocial,\r\n nomeFantasia: pessoa.nomeFantasia,\r\n sigla: pessoa.sigla,\r\n paginaWeb: pessoa.paginaWeb,\r\n\r\n autoCadastro: pessoa.autoCadastro,\r\n\r\n enderecos: enderecosPayload,\r\n telefones: telefonesPayload,\r\n emails: emailsPayload\r\n };\r\n }\r\n\r\n /**\r\n * Formata a data no padrão DD/MM/YYYY para o backend.\r\n */\r\n private formatarDataParaBackend(data: any): string | null {\r\n if (!data) return null;\r\n if (typeof data === 'string' && data.includes('/')) return data;\r\n\r\n try {\r\n const d = new Date(data);\r\n if (isNaN(d.getTime())) return null;\r\n\r\n const dia = String(d.getDate()).padStart(2, '0');\r\n const mes = String(d.getMonth() + 1).padStart(2, '0');\r\n const ano = d.getFullYear();\r\n return `${dia}/${mes}/${ano}`;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n\r\n // -------------------------------------------------------------------\r\n // HANDLE ERROR PADRONIZADO \r\n // -------------------------------------------------------------------\r\n private handleError = (error: any) => {\r\n let mensagemSimples = 'Ocorreu um erro ao processar a requisição!';\r\n let mensagemHtml = '<strong>Ocorreu um erro desconhecido.</strong>';\r\n\r\n // 2. Descobre quem é o corpo do erro\r\n let errorBody: any;\r\n\r\n if (error.detalhes || error.codigoStatus) {\r\n // CASO 1: O Interceptor já desembrulhou o erro (é o JSON puro)\r\n errorBody = error;\r\n } else {\r\n // CASO 2: É um HttpErrorResponse padrão (tem a propriedade .error)\r\n errorBody = error.error || error;\r\n }\r\n\r\n // 3. Lógica de Limpeza e Parse (se for string suja)\r\n if (typeof errorBody === 'string') {\r\n try {\r\n errorBody = JSON.parse(errorBody);\r\n } catch (e) {\r\n const start = errorBody.indexOf('{');\r\n const end = errorBody.lastIndexOf('}');\r\n if (start > -1 && end > start) {\r\n try {\r\n errorBody = JSON.parse(errorBody.substring(start, end + 1));\r\n } catch (e2) {\r\n // Se falhar o parse, usa o texto como mensagem\r\n mensagemSimples = errorBody.substring(0, 200);\r\n mensagemHtml = `<strong>${errorBody}</strong>`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 4. Formatação baseada no JSON identificado\r\n if (errorBody && typeof errorBody === 'object') {\r\n\r\n // A: Erros de Validação\r\n if (errorBody.detalhes && Array.isArray(errorBody.detalhes) && errorBody.detalhes.length > 0) {\r\n mensagemSimples = \"O formulário possui erros de validação.\";\r\n\r\n const listaErros = errorBody.detalhes.map((d: any) =>\r\n `<li><strong>${d.nomeCampo || 'Campo'}:</strong> ${d.critica || d.mensagem}</li>`\r\n ).join('');\r\n\r\n mensagemHtml = `<strong>Erros de Validação:</strong> <ul>${listaErros}</ul>`;\r\n }\r\n // B: Erro Genérico com mensagem\r\n else {\r\n const msgBackend = errorBody.mensagem || errorBody.message || errorBody.detail;\r\n if (msgBackend) {\r\n mensagemSimples = msgBackend;\r\n mensagemHtml = `<strong>${msgBackend}</strong>`;\r\n }\r\n }\r\n }\r\n\r\n // 5. Tratamentos de Status HTTP (Se o wrapper original tiver status)\r\n // Nota: Se o interceptor desembrulhou, 'error.status' pode não existir, \r\n // mas 'errorBody.codigoStatus' (do Java) pode existir.\r\n const status = error.status || errorBody?.codigoStatus || 0;\r\n\r\n if (status === 401) {\r\n mensagemSimples = \"Sessão expirada.\";\r\n mensagemHtml = \"<strong>Sessão expirada. Faça login novamente.</strong>\";\r\n } else if (status === 403) {\r\n mensagemSimples = \"Acesso Negado.\";\r\n mensagemHtml = \"<strong>Você não tem permissão para realizar esta ação.</strong>\";\r\n }\r\n\r\n const erroFormatado: UnbPessoaErroPadrao = {\r\n status: status,\r\n mensagemSimples,\r\n mensagemHtml\r\n };\r\n\r\n console.warn('[UnBPessoaService] Erro formatado final:', erroFormatado);\r\n return throwError(() => erroFormatado);\r\n }\r\n}","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-form',\r\n templateUrl: './unb-pessoa-email-form.html',\r\n styleUrl: './unb-pessoa-email-form.css'\r\n})\r\nexport class UnbPessoaEmailFormComponent implements OnInit {\r\n emailSalvo!: UnbPessoaEmail;\r\n email = new UnbPessoaEmail();\r\n emailsList: UnbPessoaEmail[];\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n idMensagemService = \"UnbPessoaEmailForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaEmailFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.email = JSON.parse(JSON.stringify(data.email)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.emailsList) {\r\n this.emailsList = JSON.parse(JSON.stringify(data.emailsList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.emailsList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.email) {\r\n this.email = new UnbPessoaEmail();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // Chamamos o serviço direto. Não guardamos o observable, apenas o resultado.\r\n this.service.getTipoEmail().subscribe({\r\n next: (lista) => {\r\n // 1. Guarda a lista para o HTML usar\r\n this.listaTipoEmail = lista;\r\n\r\n // 2. Lógica de Seleção Automática (Match)\r\n if (this.email.tipoEmailCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.email.tipoEmailCodigo);\r\n if (tipoEncontrado) {\r\n this.email.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.email.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.email.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.email.tipoEmailCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n },\r\n // 3. Usa seu tratamento de erro novo\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // 1. Define o 'tipo' padrão (ex: 1 para 'Pessoal') se não for preenchido\r\n if (!this.email.tipoEmailCodigo) {\r\n this.email.tipoEmailCodigo = 1; // 1 é geralmente 'Pessoal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemEmail')\r\n if (!this.email.ordem || this.email.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de emails já existe e tem itens\r\n if (this.emailsList && this.emailsList.length > 0) {\r\n maxOrdem = Math.max(...this.emailsList.map(e => e.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo email como a maior ordem + 1\r\n this.email.ordem = maxOrdem + 1;\r\n }\r\n // --- Fim da Modificação ---\r\n\r\n if (this.validar(this.email) == false) return;\r\n\r\n this.emailSalvo = this.email;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEmail.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.email.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n /**\r\n * Valida o objeto de e-mail, replicando as regras do validador do backend.\r\n * Retorna true se o e-mail for válido, false caso contrário.\r\n */\r\n validar(emailToValidate: UnbPessoaEmail): boolean {\r\n\r\n // 1. Validação de campo obrigatório (do Java)\r\n if (!emailToValidate.email || emailToValidate.email.trim() === '') {\r\n this.openSnackBar(\"E-mail é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Tamanho Máximo (do Java)\r\n if (emailToValidate.email.trim().length > 60) {\r\n this.openSnackBar(\"E-mail deve ter no máximo 60 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de formato de e-mail (do Java e do Angular)\r\n // [Java: !Validadores.validarEmail(request.getEmail())]\r\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n if (!emailRegex.test(emailToValidate.email)) {\r\n this.openSnackBar(\"Digite um E-mail válido.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de e-mail duplicado (do seu Angular)\r\n const isDuplicate = this.emailsList.some(existingEmail =>\r\n existingEmail.email?.toLowerCase() === emailToValidate.email?.toLowerCase() &&\r\n existingEmail.codigo !== emailToValidate.codigo // Ignora o próprio e-mail se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este e-mail já existe na lista.\");\r\n return false;\r\n }\r\n\r\n // Nota: As validações de 'ordemEmail' e 'tipoEmailCodigo' do Java\r\n // já são tratadas na sua função 'salvar()',\r\n // que atribui valores padrão antes desta função 'validar()' ser chamada.\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.emailSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"email.tipoEmailCodigo\" [compareWith]=\"compararTipos\" name=\"tipoEmailCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoEmail\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>E-mail</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"email.email\" name=\"emailValue\" #emailValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","export class UnbPessoaEndereco {\r\n codigo?: number;\r\n tipoEnderecoCodigo?: number;\r\n tipo?: string;\r\n cep?: string;\r\n logradouro?: string;\r\n municipio?: string;\r\n bairro?: string;\r\n ufEndereco?: string; \r\n uf?: string;\r\n pais?: string;\r\n complemento?: string;\r\n caixaPostal?: string;\r\n correspondencia?: boolean;\r\n ordemEndereco?: number | null;\r\n ordem?: number;\r\n paisEnderecoCodigo?: number | null;\r\n municipioCodigo?: number;\r\n}\r\n\r\nexport class UnbPessoaEnderecoTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaEndereco, UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\n\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-form',\r\n templateUrl: './unb-pessoa-endereco-form.html',\r\n styleUrl: './unb-pessoa-endereco-form.css'\r\n})\r\nexport class UnbPessoaEnderecoFormComponent implements OnInit {\r\n\r\n enderecoSalvo!: UnbPessoaEndereco;\r\n endereco = new UnbPessoaEndereco();\r\n enderecosList: UnbPessoaEndereco[];\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaPaises: UnbPessoaPais[] = [];\r\n paises!: Observable<UnbPessoaPais[]>;\r\n loading: boolean = false;\r\n\r\n idMensagemService = \"UnbPessoaEnderecoForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaEnderecoFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.endereco = JSON.parse(JSON.stringify(data.endereco)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.enderecosList) {\r\n this.enderecosList = JSON.parse(JSON.stringify(data.enderecosList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.enderecosList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.endereco) {\r\n this.endereco = new UnbPessoaEndereco();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // --- Preenche o Tipos de Endereço ---\r\n this.service.getTipoEndereco().subscribe({\r\n next: (lista) => {\r\n this.listaTipoEndereco = lista;\r\n\r\n // Se já tiver tipoEnderecoCodigo, preenche o nome correspondente\r\n if (this.endereco.tipoEnderecoCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.endereco.tipoEnderecoCodigo);\r\n if (tipoEncontrado) {\r\n this.endereco.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.endereco.tipo) {\r\n // Se tiver só o nome, preenche o código\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.endereco.tipo?.toLowerCase()\r\n );\r\n\r\n if (tipoEncontrado) {\r\n this.endereco.tipoEnderecoCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n\r\n // O metodo get retorna uf, mas o put espera ufEndereco\r\n if (this.endereco.uf) {\r\n this.endereco.ufEndereco = this.endereco.uf; // Converte uf para ufEndereco\r\n }\r\n },\r\n // Tratamento de erro no carregamento da lista\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n \r\n // --- Preenche o País ---\r\n this.service.getPaises().subscribe({\r\n next: (listaDePaises) => {\r\n this.listaPaises = listaDePaises; // Armazena a lista de países\r\n\r\n const CODIGO_BRASIL = 22; // Código padrão para o Brasil\r\n\r\n // Lógica 1: Se o ID do país já existe (ex: 22), encontra o nome (ex: \"Brasil\")\r\n if (this.endereco.paisEnderecoCodigo != null) {\r\n const paisEncontrado = this.listaPaises.find(p => p.codigo === this.endereco.paisEnderecoCodigo);\r\n if (paisEncontrado) {\r\n this.endereco.pais = paisEncontrado.denominacao;\r\n }\r\n }\r\n // Lógica 2: Se o nome do país existe (ex: \"Brasil\"), encontra o ID (ex: 22)\r\n else if (this.endereco.pais) {\r\n const paisEncontrado = this.listaPaises.find(\r\n p => p.denominacao?.toLowerCase() === this.endereco.pais?.toLowerCase()\r\n );\r\n\r\n if (paisEncontrado) {\r\n this.endereco.paisEnderecoCodigo = paisEncontrado.codigo;\r\n } else {\r\n // Se o nome foi fornecido mas não encontrado na lista, assume Brasil\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n }\r\n // Lógica 3: Se nem o ID nem o nome existem, assume Brasil por padrão\r\n else {\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // Se a ordemEndereco não estiver definida (novo item) ou for 0\r\n if (!this.endereco.ordemEndereco || this.endereco.ordemEndereco === 0) {\r\n let maxOrdem = 0;\r\n if (this.enderecosList && this.enderecosList.length > 0) {\r\n maxOrdem = Math.max(...this.enderecosList.map(e => e.ordemEndereco || 0));\r\n }\r\n this.endereco.ordemEndereco = maxOrdem + 1;\r\n }\r\n\r\n if (this.validar(this.endereco) == false) return;\r\n\r\n this.enderecoSalvo = this.endereco;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1.codigo === t2.codigo;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEndereco.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.endereco.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n pesquisarCep() {\r\n if (this.endereco.cep && this.endereco.cep.trim() !== '') {\r\n this.loading = true;\r\n let cepFormatado = this.endereco.cep.replace(/\\D/g, ''); // Remove caracteres não numéricos\r\n if (cepFormatado.length !== 8) {\r\n this.handleError('O CEP deve conter exatamente 8 números.');\r\n return;\r\n }\r\n\r\n this.service.pesquisarCep(cepFormatado).subscribe({\r\n next: (data: any) => {\r\n this.loading = false;\r\n if (data.erro === 'true' || data.erro === true) {\r\n this.handleError('CEP não encontrado.');\r\n return; // Para a execução aqui\r\n }\r\n\r\n this.endereco.logradouro = data.logradouro;\r\n this.endereco.bairro = data.bairro;\r\n this.endereco.ufEndereco = data.uf;\r\n this.endereco.uf = data.uf;\r\n this.endereco.complemento = data.complemento;\r\n \r\n },\r\n error: (err: UnbPessoaErroPadrao) => {\r\n this.loading = false;\r\n \r\n if (err.status === 400) {\r\n this.handleError('CEP inválido ou formato incorreto.');\r\n } else if (err.status === 404) {\r\n this.handleError('CEP não encontrado.');\r\n } else {\r\n // Se for 500 ou outro erro, mostra a mensagem original do service\r\n this.handleError(err);\r\n }\r\n }\r\n });\r\n } else {\r\n this.handleError('Por favor, insira um CEP válido.');\r\n }\r\n }\r\n\r\n getListaEstados(): any {\r\n return [\r\n 'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA',\r\n 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN',\r\n 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO'\r\n ];\r\n }\r\n\r\n /**\r\n * Valida o objeto de endereço, replicando as regras do validador do backend.\r\n * Retorna true se o endereço for válido, false caso contrário.\r\n */\r\n validar(enderecoToValidate: UnbPessoaEndereco): boolean {\r\n\r\n // 1. Validação de tipoEnderecoCodigo (Obrigatório e 0-4)\r\n // [Java: request.getTipoEnderecoCodigo() == null]\r\n if (enderecoToValidate.tipoEnderecoCodigo == null) {\r\n this.handleError(\"Tipo de Endereço é um campo obrigatório.\");\r\n return false;\r\n }\r\n // [Java: request.getTipoEnderecoCodigo() < (byte) 0 || request.getTipoEnderecoCodigo() > (byte) 4]\r\n if (enderecoToValidate.tipoEnderecoCodigo < 0 || enderecoToValidate.tipoEnderecoCodigo > 4) {\r\n this.handleError(\"Tipo de Endereço é inválido (deve ser entre 0 e 4).\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de CEP (8 dígitos, se preenchido)\r\n // [Java: request.getCep().trim().length() != 8]\r\n if (enderecoToValidate.cep && enderecoToValidate.cep.trim() !== '') {\r\n const cepLimpo = enderecoToValidate.cep.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (cepLimpo.length !== 8) {\r\n this.handleError(\"CEP deve conter 8 dígitos.\");\r\n return false;\r\n }\r\n }\r\n\r\n // 4. Validação de Logradouro (Max 100, se preenchido)\r\n // [Java: request.getLogradouro().trim().length() > 100]\r\n if (enderecoToValidate.logradouro && enderecoToValidate.logradouro.trim().length > 100) {\r\n this.handleError(\"Logradouro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de Bairro (Max 100, se preenchido)\r\n // [Java: request.getBairro().trim().length() > 100]\r\n if (enderecoToValidate.bairro && enderecoToValidate.bairro.trim().length > 100) {\r\n this.handleError(\"Bairro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Complemento (Max 100, se preenchido)\r\n // [Java: request.getComplemento().trim().length() > 100]\r\n if (enderecoToValidate.complemento && enderecoToValidate.complemento.trim().length > 100) {\r\n this.handleError(\"Complemento deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 7. Validação de Caixa Postal (Max 100, se preenchida)\r\n // [Java: request.getCaixaPostal().trim().length() > 100]\r\n if (enderecoToValidate.caixaPostal && enderecoToValidate.caixaPostal.trim().length > 100) {\r\n this.handleError(\"Caixa Postal deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 8. Validação de UF (2 caracteres, se preenchida)\r\n // O form usa 'ufEndereco', o java usa 'uf'. O ngOnInit mapeia uf -> ufEndereco.\r\n // [Java: request.getUf().trim().length() != 2]\r\n if (enderecoToValidate.ufEndereco && enderecoToValidate.ufEndereco.trim().length !== 2) {\r\n this.handleError(\"UF deve ter 2 caracteres.\");\r\n return false;\r\n }\r\n\r\n // --- Validação de Duplicar ---\r\n const isDuplicate = this.enderecosList.some(existingEndereco =>\r\n existingEndereco.logradouro?.toLowerCase() === enderecoToValidate.logradouro?.toLowerCase() &&\r\n existingEndereco.codigo !== enderecoToValidate.codigo // Ignora o próprio endereço se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este endereço já existe na lista.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.enderecoSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n \r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de Endereço</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.tipoEnderecoCodigo\" name=\"tipo\" #tipo=\"ngModel\"\r\n (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoEndereco\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País</mat-label>\r\n\r\n <mat-select [(ngModel)]=\"endereco.paisEnderecoCodigo\" name=\"paisEnderecoCodigo\" #paisEnderecoCodigo=\"ngModel\">\r\n\r\n <mat-option *ngFor=\"let paises of listaPaises\" [value]=\"paises.codigo\">\r\n <span *ngIf=\"paises.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paises.denominacao }}</b></span>\r\n <span *ngIf=\"paises.denominacao !== 'BRASIL'\">{{ paises.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>CEP</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.cep\" name=\"cep\" #cep=\"ngModel\" />\r\n\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" \r\n [disabled]=\"loading\" (click)=\"pesquisarCep()\">\r\n \r\n <ng-container *ngIf=\"!loading; else loadingIcon\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon>\r\n </ng-container>\r\n\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner \r\n [diameter]=\"20\" \r\n mode=\"indeterminate\" \r\n color=\"primary\" \r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Endereço</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.logradouro\" name=\"logradouro\" #logradouro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Bairro</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.bairro\" name=\"bairro\" #bairro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Complemento</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.complemento\" name=\"complemento\" #complemento=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>UF</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.uf\" name=\"uf\" #uf=\"ngModel\">\r\n <mat-option *ngFor=\"let uf of getListaEstados()\" [value]=\"uf\">\r\n {{ uf }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","export const listaEstados = [\r\n { codigo: 1, identificador: 'AC', descricao: \"Acre\" },\r\n { codigo: 2, identificador: 'AL', descricao: \"Alagoas\" },\r\n { codigo: 3, identificador: 'AM', descricao: \"Amazonas\" },\r\n { codigo: 4, identificador: 'AP', descricao: \"Amapá\" },\r\n { codigo: 5, identificador: 'BA', descricao: \"Bahia\" },\r\n { codigo: 6, identificador: 'CE', descricao: \"Ceará\" },\r\n { codigo: 7, identificador: 'DF', descricao: \"Distrito Federal\" },\r\n { codigo: 8, identificador: 'ES', descricao: \"Espírito Santo\" },\r\n { codigo: 9, identificador: 'GO', descricao: \"Goiás\" },\r\n { codigo: 10, identificador: 'MA', descricao: \"Maranhão\" },\r\n { codigo: 11, identificador: 'MG', descricao: \"Minas Gerais\" },\r\n { codigo: 12, identificador: 'MS', descricao: \"Mato Grosso do Sul\" },\r\n { codigo: 13, identificador: 'MT', descricao: \"Mato Grosso\" },\r\n { codigo: 14, identificador: 'PA', descricao: \"Pará\" },\r\n { codigo: 15, identificador: 'PB', descricao: \"Paraíba\" },\r\n { codigo: 16, identificador: 'PE', descricao: \"Pernambuco\" },\r\n { codigo: 17, identificador: 'PI', descricao: \"Piauí\" },\r\n { codigo: 18, identificador: 'PR', descricao: \"Paraná\" },\r\n { codigo: 19, identificador: 'RJ', descricao: \"Rio de Janeiro\" },\r\n { codigo: 20, identificador: 'RN', descricao: \"Rio Grande do Norte\" },\r\n { codigo: 21, identificador: 'RO', descricao: \"Rondônia\" },\r\n { codigo: 22, identificador: 'RR', descricao: \"Roraima\" },\r\n { codigo: 23, identificador: 'RS', descricao: \"Rio Grande do Sul\" },\r\n { codigo: 24, identificador: 'SC', descricao: \"Santa Catarina\" },\r\n { codigo: 25, identificador: 'SE', descricao: \"Sergipe\" },\r\n { codigo: 26, identificador: 'SP', descricao: \"São Paulo\" },\r\n { codigo: 27, identificador: 'TO', descricao: \"Tocantins\" }\r\n];","import { UnbTipoPessoaEnum } from \"../unb-tipo-pessoa.enum\";\r\nimport { UnbPessoaModel } from \"./unb-pessoa.model\";\r\n/** \r\n * Essa eh uma classe base, com propriedades comum ao componente de pesquisa de pesssoa. Porque tem vários campos que são usados para configurar o comportamento do componente. \r\n * */\r\nexport class UnbPessoaPesquisaConfig {\r\n backendURL: string = \"\"; \r\n token: string = \"\"; // usado para testar autenticação no backend se necessário.\r\n\r\n // Flags com valores padrão (já resolve o booleano)\r\n defaultTipoPessoa: UnbTipoPessoaEnum | 'FISICA' | 'JURIDICA' | 'ESTRANGEIRA' = UnbTipoPessoaEnum.FISICA;\r\n pesquisarPorCPF: boolean = true;\r\n pesquisarPorCNPJ: boolean = true;\r\n pesquisarPorEstrangeiro: boolean = false;\r\n \r\n // UI\r\n mostrarPesquisa: boolean = true;\r\n limparAposPesquisa: boolean = false;\r\n \r\n // Textos\r\n label: string = \"Digite o CPF/CNPJ ou Passaporte\";\r\n placeholder = \"\";\r\n hint = \"\";\r\n \r\n // Construtor opcional para facilitar a criação (atalho)\r\n constructor(init?: Partial<UnbPessoaPesquisaConfig>) {\r\n Object.assign(this, init);\r\n }\r\n\r\n}\r\nexport class UnbPessoaFormConfig {\r\n backendURL: string = \"\";\r\n token: string = \"\";\r\n isReadyOnly: boolean = false;\r\n\r\n pessoa = new UnbPessoaModel();\r\n\r\n constructor(init?: Partial<UnbPessoaFormConfig>) {\r\n Object.assign(this, init);\r\n }\r\n}"," export class UnbPessoaTelefone {\r\n codigo?: number;\r\n tipo?: string;\r\n tipoTelefoneCodigo?: number;\r\n ddi?: string;\r\n ddd?: string;\r\n numero?: string;\r\n ramal?: string;\r\n autorizaSMS?: boolean;\r\n ordem?: number;\r\n nomeResponsavel?: string;\r\n \t\r\n // usado pelo componente unb-pesoa-form, pra indicar que o usuario estah editando\r\n modoEdicao = false; \r\n }\r\n\r\n export class UnbPessoaTelefoneTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n }","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-form',\r\n templateUrl: './unb-pessoa-telefone-form.html',\r\n styleUrl: './unb-pessoa-telefone-form.css'\r\n})\r\nexport class UnbPessoaTelefoneFormComponent implements OnInit {\r\n telefoneSalvo!: UnbPessoaTelefone;\r\n telefone = new UnbPessoaTelefone();\r\n telefonesList: UnbPessoaTelefone[];\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n idMensagemService = \"UnbPessoaTelefoneForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaTelefoneFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.telefone = JSON.parse(JSON.stringify(data.telefone)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.telefonesList) {\r\n this.telefonesList = JSON.parse(JSON.stringify(data.telefonesList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.telefonesList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.telefone) {\r\n this.telefone = new UnbPessoaTelefone();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.service.getTipoTelefone().subscribe({\r\n next: (lista) => {\r\n this.listaTipoTelefone = lista;\r\n\r\n // Se já tiver tipoTelefoneCodigo, preenche o nome correspondente\r\n if (this.telefone.tipoTelefoneCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.telefone.tipoTelefoneCodigo);\r\n if (tipoEncontrado) {\r\n this.telefone.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.telefone.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.telefone.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.telefone.tipoTelefoneCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid ) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n // 1. Define o 'tipo' padrão (1) se não for preenchido (Conforme sua solicitação)\r\n if (!this.telefone.tipoTelefoneCodigo) {\r\n this.telefone.tipoTelefoneCodigo = 1; // 1 é geralmente 'Residencial' ou 'Principal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemTelefone')\r\n if (!this.telefone.ordem || this.telefone.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de telefones já existe e tem itens\r\n if (this.telefonesList && this.telefonesList.length > 0) {\r\n maxOrdem = Math.max(...this.telefonesList.map(t => t.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo telefone como a maior ordem + 1\r\n this.telefone.ordem = maxOrdem + 1;\r\n }\r\n if (this.validar(this.telefone) == false) return;\r\n\r\n this.telefoneSalvo = this.telefone;\r\n this.salvarclose();\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoTelefone.find(t => t.codigo === codigoSelecionado); // <--- Renomeado de listaTipoEndereco\r\n if (tipoSelecionado) {\r\n this.telefone.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Valida o objeto de telefone com base nas regras do backend.\r\n * Retorna true se o telefone for válido, false caso contrário.\r\n */\r\n validar(telefoneToValidate: UnbPessoaTelefone): boolean {\r\n \r\n // 1. Validação de Número (Obrigatório)\r\n if (!telefoneToValidate.numero || telefoneToValidate.numero.trim() === '') {\r\n this.openSnackBar(\"Número do telefone é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Número (Formato)\r\n // que ele espera 8 ou 9 dígitos numéricos (padrão Brasil).\r\n const numeroLimpo = telefoneToValidate.numero.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (numeroLimpo.length !== 9) {\r\n this.openSnackBar(\"Número do telefone deve conter exatamente 9 dígitos.\");\r\n return false;\r\n }\r\n \r\n // 3. Validação de DDD (Obrigatório - Boa prática, embora o Java não exija)\r\n if (!telefoneToValidate.ddd || telefoneToValidate.ddd.trim() === '') {\r\n this.openSnackBar(\"DDD é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de DDD (Tamanho Máximo)\r\n if (telefoneToValidate.ddd.trim().length > 3) {\r\n this.openSnackBar(\"DDD deve ter no máximo 3 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de DDI (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ddi && telefoneToValidate.ddi.trim().length > 5) {\r\n this.openSnackBar(\"DDI deve ter no máximo 5 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Ramal (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ramal && telefoneToValidate.ramal.trim().length > 6) {\r\n this.openSnackBar(\"Ramal deve ter no máximo 6 caracteres.\");\r\n return false;\r\n }\r\n \r\n // 7. Validação de NomeResponsavel (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.nomeResponsavel && telefoneToValidate.nomeResponsavel.trim().length > 100) {\r\n this.openSnackBar(\"Nome do Responsável deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.telefoneSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de Telefone</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"telefone.tipoTelefoneCodigo\" [compareWith]=\"compararTipos\" name=\"tipoTelefoneCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoTelefone\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>DDD</mat-label>\r\n <input type=\"text\" maxlength=\"3\" required matInput [(ngModel)]=\"telefone.ddd\" name=\"dddValue\" #dddValue=\"ngModel\" />\r\n </mat-form-field> \r\n \r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Número</mat-label>\r\n <input type=\"text\" required maxlength=\"9\" matInput [(ngModel)]=\"telefone.numero\" name=\"telefoneValue\" #telefoneValue=\"ngModel\" />\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-list',\r\n templateUrl: './unb-pessoa-telefone-list.html',\r\n styleUrl: './unb-pessoa-telefone-list.css'\r\n})\r\nexport class UnbPessoaTelefoneListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() telefones: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() telefonesEmitted = new EventEmitter<UnbPessoaTelefone[]>();\r\n\r\n tipoTelefone!: Observable<UnbPessoaTelefoneTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoTelefone = this.service.getTipoTelefone();\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista de telefones\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'telefones' mudou\r\n if (changes['telefones'] && this.telefones) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder(); \r\n }\r\n }\r\n\r\n excluir(telefoneParaExcluir: UnbPessoaTelefone) {\r\n if (telefoneParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.telefones = this.telefones.filter(t => t.codigo !== telefoneParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.telefones = this.telefones.filter(t => t.ordem !== telefoneParaExcluir.ordem);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n editar(telefone: UnbPessoaTelefoneTipo) {\r\n this.openFormDialog(telefone);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.telefones.forEach((telefone, idx) => {\r\n telefone.ordem = idx + 1;\r\n });\r\n\r\n // reemite a lista atualizada, igual antes\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n openFormDialog(toEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaTelefoneFormComponent, {\r\n width: '900px',\r\n data: {\r\n telefone: toEdit, // E-mail a ser editado ou vazio para novo\r\n telefonesList: this.telefones // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.telefones.findIndex(t => t.codigo === result.codigo);\r\n }\r\n \r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n // A 'ordem' é o nosso identificador único para itens que\r\n // ainda não foram salvos no banco (criados/editados localmente).\r\n if (index === -1 && result.ordem) {\r\n index = this.telefones.findIndex(t => t.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.telefones[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n // O form (unb-pessoa-telefone-form) já cuidou de\r\n // atribuir a 'ordem' correta (maxOrdem + 1)\r\n this.telefones.push(result);\r\n }\r\n\r\n // vamos apenas re-ordenar a lista pela 'ordem' que já temos\r\n // e depois emitir.\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.telefonesEmitted.emit(this.telefones);\r\n });\r\n }\r\n\r\n moverTelefone(event: CdkDragDrop<any[]>) {\r\n // troca a posição dentro do array\r\n moveItemInArray(this.telefones, event.previousIndex, event.currentIndex);\r\n\r\n // atualiza o campo 'ordem' em cada item\r\n this.atualizarOrdem();\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista para não modificar a original durante a iteração inicial\r\n const tempEmails = [...this.telefones];\r\n\r\n // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes\r\n const orderMap = new Map<number, UnbPessoaTelefone[]>();\r\n const emailsWithoutOrder: UnbPessoaTelefone[] = [];\r\n\r\n tempEmails.forEach(telefone => {\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!orderMap.has(telefone.ordem)) {\r\n orderMap.set(telefone.ordem, []);\r\n }\r\n orderMap.get(telefone.ordem)?.push(telefone);\r\n } else {\r\n emailsWithoutOrder.push(telefone);\r\n }\r\n });\r\n\r\n // 3. Inicialize um Set para rastrear todas as ordens que serão usadas no final\r\n const finalUsedOrders = new Set<number>();\r\n // Inicialize o próximo valor de ordem disponível\r\n let nextAvailableOrder = 0;\r\n\r\n // Função auxiliar para encontrar a próxima ordem disponível\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe telefones com ordem definida:\r\n // - A primeira ocorrência de uma ordem a mantém.\r\n // - Duplicatas recebem uma nova ordem.\r\n // - Adicione as ordens válidas ao finalUsedOrders.\r\n this.telefones.forEach(telefone => { // Iterar sobre a lista original para modificar in-place\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!finalUsedOrders.has(telefone.ordem)) {\r\n // Se a ordem ainda não foi usada, use-a e adicione ao set\r\n finalUsedOrders.add(telefone.ordem);\r\n } else {\r\n // Se a ordem já foi usada (é uma duplicata), atribua uma nova\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para telefones que não tinham ordem definida\r\n emailsWithoutOrder.forEach(telefone => {\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n });\r\n\r\n // 6. Finalmente, ordene a lista completa com as ordens agora únicas\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n }\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ telefones?.length === 1 ? 'Telefone Cadastrado' : 'Telefones Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ telefones?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Telefone\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Telefone\r\n </button>\r\n </div>\r\n\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"telefones && telefones.length > 0\" cdkDropList (cdkDropListDropped)=\"moverTelefone($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th style=\"width: 20%;\">DDD</th>\r\n <th>Número</th> \r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of telefones; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"text-align: center;\"> \r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.ddd }}</td> \r\n <td>{{ valor.numero }}</td> \r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n</table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-list',\r\n templateUrl: './unb-pessoa-endereco-list.html',\r\n styleUrl: './unb-pessoa-endereco-list.css'\r\n})\r\nexport class UnbPessoaenderecoListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() enderecos: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() enderecosEmitted = new EventEmitter<UnbPessoaEndereco[]>();\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sortAndAssignOrder(); // organiza a lista de enderecos. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'enderecos' mudou\r\n if (changes['enderecos'] && this.enderecos) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(enderecoParaExcluir: UnbPessoaEndereco) {\r\n if (enderecoParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.enderecos = this.enderecos.filter(t => t.codigo !== enderecoParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.enderecos = this.enderecos.filter(t => t.ordemEndereco !== enderecoParaExcluir.ordemEndereco);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(endereco: UnbPessoaEndereco) {\r\n this.openFormDialog(endereco);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.enderecos.forEach((endereco, idx) => {\r\n endereco.ordemEndereco = idx + 1;\r\n });\r\n\r\n this.enderecosEmitted.emit(this.enderecos);\r\n }\r\n\r\n openFormDialog(enderecoToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEnderecoFormComponent, {\r\n width: '900px',\r\n data: {\r\n endereco: enderecoToEdit, // E-mail a ser editado ou vazio para novo\r\n enderecosList: this.enderecos // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.enderecos.findIndex(t => t.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordemEndereco) {\r\n index = this.enderecos.findIndex(t => t.ordemEndereco === result.ordemEndereco);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.enderecos[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição) adiciona no fim\r\n this.enderecos.push(result);\r\n }\r\n\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n this.enderecosEmitted.emit([...this.enderecos]);\r\n\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.enderecos, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempenderecos = [...this.enderecos];\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEndereco[]>();\r\n const enderecosWithoutOrder: UnbPessoaEndereco[] = [];\r\n\r\n tempenderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!orderMap.has(endereco.ordemEndereco)) {\r\n orderMap.set(endereco.ordemEndereco, []);\r\n }\r\n orderMap.get(endereco.ordemEndereco)?.push(endereco);\r\n } else {\r\n enderecosWithoutOrder.push(endereco);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe enderecos com ordem definida:\r\n this.enderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!finalUsedOrders.has(endereco.ordemEndereco)) {\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n endereco.ordemEndereco = getNextAvailableOrder();\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para enderecos que não tinham ordem\r\n enderecosWithoutOrder.forEach(endereco => {\r\n endereco.ordemEndereco = getNextAvailableOrder(); //\r\n finalUsedOrders.add(endereco.ordemEndereco); //\r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n }\r\n\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endereço Cadastrado' : 'Endereços Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endereço\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endereço\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-list',\r\n templateUrl: './unb-pessoa-email-list.html',\r\n styleUrl: './unb-pessoa-email-list.css'\r\n})\r\nexport class UnbPessoaEmailListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() emails: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() emailsEmitted = new EventEmitter<UnbPessoaEmail[]>();\r\n\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoEmail = this.service.getTipoEmail();\r\n\r\n this.sortAndAssignOrder(); // organiza a lista de emails. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'emails' mudou\r\n if (changes['emails'] && this.emails) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(emailParaExcluir: UnbPessoaEmail) { // <-- TIPO CORRIGIDO\r\n\r\n if (emailParaExcluir.codigo) {\r\n // Se tem código, remove por ele\r\n this.emails = this.emails.filter(e => e.codigo !== emailParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.emails = this.emails.filter(e => e.ordem !== emailParaExcluir.ordem);\r\n }\r\n\r\n // Chama sua função existente que re-calcula as ordens e emite a lista\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(email: UnbPessoaEmailTipo) {\r\n this.openFormDialog(email);\r\n }\r\n\r\n\r\n atualizarOrdem() {\r\n this.emails.forEach((email, idx) => {\r\n email.ordem = idx + 1;\r\n });\r\n\r\n this.emailsEmitted.emit([...this.emails]);\r\n }\r\n\r\n openFormDialog(emailToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEmailFormComponent, {\r\n width: '900px',\r\n data: {\r\n email: emailToEdit, // E-mail a ser editado ou vazio para novo\r\n emailsList: this.emails // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.emails.findIndex(e => e.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordem) {\r\n index = this.emails.findIndex(e => e.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.emails[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n this.emails.push(result);\r\n }\r\n\r\n // Re-ordena a lista pela 'ordem' e emite uma *nova cópia*\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.emailsEmitted.emit([...this.emails]); // <-- Emite nova cópia\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.emails, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\nprivate sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempEmails = [...this.emails]; // <-- NOME CORRIGIDO\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEmail[]>();\r\n const emailsWithoutOrder: UnbPessoaEmail[] = [];\r\n\r\n tempEmails.forEach(email => {\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!orderMap.has(email.ordem)) {\r\n orderMap.set(email.ordem, []);\r\n }\r\n orderMap.get(email.ordem)?.push(email);\r\n } else {\r\n emailsWithoutOrder.push(email);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe emails com ordem definida:\r\n this.emails.forEach(email => { // <-- NOME CORRIGIDO\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!finalUsedOrders.has(email.ordem)) {\r\n finalUsedOrders.add(email.ordem);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n email.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(email.ordem);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para emails que não tinham ordem\r\n emailsWithoutOrder.forEach(email => { // <-- NOME CORRIGIDO\r\n email.ordem = getNextAvailableOrder(); \r\n finalUsedOrders.add(email.ordem); \r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0)); // <-- 'ordem'\r\n }\r\n }","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ emails?.length === 1 ? 'Email Cadastrado' : 'E-mails Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ emails?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Email\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Email\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"emails && emails.length > 0\" cdkDropList (cdkDropListDropped)=\"moverLinha($event)\">\r\n\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\" cdkDrag>\r\n\r\n <td style=\"text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n\r\n <td>{{ valor.email }}</td>\r\n\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { booleanAttribute, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { listaEstados } from '../pessoa-tabelas-apoio';\r\nimport { UnbPessoaEmail } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from '../unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaEstadoCivil } from '../unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaTelefone } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService, UnbPessoaErroPadrao } from '../unb-pessoa.service';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaFormConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-form',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-form.component.html',\r\n styleUrl: './unb-pessoa-form.component.css'\r\n})\r\nexport class UnbPessoaFormComponent implements OnInit {\r\n\r\n @ViewChild('pessoaForm') pessoaForm!: NgForm;\r\n @Input() config: UnbPessoaFormConfig = new UnbPessoaFormConfig();\r\n @Input() hideSalvarButton: boolean = false; // usado quando eh modal. Nao mostra botao salvar. Pq o Dialog já tem um botao salvar\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n @Output() isLoadingChange = new EventEmitter<boolean>();\r\n\r\n // tabelas tradicionais que vem do backend\r\n escolaridade!: Observable<UnbPessoaEscolaridade[]>;\r\n paises!: Observable<UnbPessoaPais[]>;\r\n estadosCivil!: Observable<UnbPessoaEstadoCivil[]>;\r\n isLoading: boolean = false;\r\n endereco = new UnbPessoaEndereco();\r\n email = new UnbPessoaEmail();\r\n isReadyOnly: boolean = false;\r\n dadosSalvos: { [key: string]: any } = {}; // Armazena os dados ao trocar de tipo\r\n idMensagemService = \"unbPessoaForm\";\r\n\r\n // Controla se está incluindo nova pessoa ou editando existente\r\n documentoPesquisado: string = '';\r\n incluindoNovaPessoa: boolean = false;\r\n editandoPessoa: boolean = false;\r\n\r\n pessoa: UnbPessoaModel = new UnbPessoaModel();\r\n\r\n constructor(private service: UnBPessoaService, private snackBar: MatSnackBar, private alertService: UnbMensagemService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.alertService.hideMessage(this.idMensagemService);\r\n if (this.config.backendURL == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.url está null. Insira o parâmetro (apiPessoaConfig) com o valor válido!\")\r\n return;\r\n } else {\r\n this.service.setBackendUrl(this.config.backendURL);\r\n }\r\n\r\n if (this.config.token && this.config.token != \"\") { \r\n this.service.setToken(this.config.token);\r\n }\r\n\r\n // atencao, o pessoaRecebida que inicializa esse componente\r\n this.escolaridade = this.service.getEscolaridade();\r\n this.paises = this.service.getPaises();\r\n this.estadosCivil = this.service.getEstadoCivil();\r\n this.pessoaRecebida(this.config.pessoa);\r\n }\r\n\r\n pessoaRecebida(pessoaRecebida: UnbPessoaModel) {\r\n if (!pessoaRecebida) {\r\n this.pessoa = {} as UnbPessoaModel; \r\n } else {\r\n this.pessoa = pessoaRecebida;\r\n }\r\n \r\n this.alertService.hideMessage(this.idMensagemService);\r\n\r\n // Reseta o formulário quando uma nova pessoa é recebida\r\n if (this.pessoaForm) {\r\n this.pessoaForm.resetForm();\r\n }\r\n\r\n // inicializa pra nao quebrar\r\n if (!this.pessoa.enderecos) this.pessoa.enderecos = [];\r\n if (!this.pessoa.emails) this.pessoa.emails = [];\r\n if (!this.pessoa.telefones) this.pessoa.telefones = [];\r\n\r\n // 1. Verifica se é um registro que já existe no banco\r\n const existeRegistro = !!this.pessoa?.codigoPessoa;\r\n\r\n // 2. Verifica se é bloqueado pelo SIAPE (Só faz sentido se o registro existir)\r\n this.isReadyOnly = existeRegistro && !!this.pessoa?.matriculaSiape;\r\n\r\n // 3. Define o documento (usando aquele mapa limpo)\r\n const docMap = {\r\n [UnbTipoPessoaEnum.FISICA]: this.pessoa.cpf,\r\n [UnbTipoPessoaEnum.JURIDICA]: this.pessoa.cnpj,\r\n [UnbTipoPessoaEnum.ESTRANGEIRA]: this.pessoa.passaporte\r\n };\r\n this.documentoPesquisado = docMap[this.pessoa.tipoPessoa] || '';\r\n\r\n // 4. (Opcional) Snackbar se for SIAPE\r\n if (this.isReadyOnly) {\r\n this.openSnackBar('Dados importados do SIAPE não podem ser alterados.');\r\n }\r\n }\r\n\r\n salvar(form: NgForm) {\r\n this.alertService.hideMessage(this.idMensagemService);\r\n\r\n // Suas validações\r\n if (!this.validar(form)) return;\r\n\r\n this.isLoading = true;\r\n this.isLoadingChange.emit(true);\r\n // Agora o service converte internamente o Model para o payload correto\r\n // e decide o endpoint com base no tipoPessoa\r\n this.service.salvarPessoa(this.config.pessoa)\r\n .subscribe({\r\n next: (resposta) => {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n // Mensagem de Sucesso\r\n this.alertService.showMessage(\"<strong>Registro salvo com sucesso!</strong>\", UnbTipoMensagemEnum.SUCCESS, this.idMensagemService);\r\n\r\n // Atualiza dados retornados (IDs gerados)\r\n if (resposta) {\r\n this.config.pessoa.codigoPessoa = resposta.codigoPessoa || this.config.pessoa.codigoPessoa;\r\n this.config.pessoa.idPessoa = resposta.idPessoa || this.config.pessoa.idPessoa;\r\n this.pessoaEmitted.emit(this.config.pessoa);\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => {\r\n // AQUI: O 'err' já chega limpo com { mensagemSimples, mensagemHtml }\r\n this.handleError(err);\r\n }\r\n });\r\n }\r\n\r\n validar(form: NgForm): boolean {\r\n if (!this.config.pessoa) {\r\n this.openSnackBar(\"Erro ao carregar objeto pessoa\");\r\n return false;\r\n }\r\n\r\n if (form.invalid) {\r\n // para que os erros apareçam na tela para o usuário.\r\n form.control.markAllAsTouched();\r\n this.openSnackBar(\"Por favor, preencha os campos obrigatórios.\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.telefones == null || (this.config.pessoa.telefones != null && this.config.pessoa.telefones.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um telefone no botão Cadastrar Novo Telefone\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.enderecos == null || (this.config.pessoa.enderecos != null && this.config.pessoa.enderecos.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um endereço no botão Cadastrar Novo Endereço\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.emails == null || (this.config.pessoa.emails != null && this.config.pessoa.emails.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um e-mail no botão Cadastrar Novo Email\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n if (!this.config.pessoa.nome || (this.config.pessoa && this.config.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (!this.config.pessoa.dataNascimento) {\r\n this.openSnackBar(\"Data de Nascimento é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n if (!this.config.pessoa.nome || (this.config.pessoa && this.config.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.passaporte == null || (this.config.pessoa.passaporte != null && this.config.pessoa.passaporte == \"\")) {\r\n this.openSnackBar(\"Passaporte é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n if (this.config.pessoa.cnpj == null || (this.config.pessoa.cnpj != null && this.config.pessoa.cnpj == \"\")) {\r\n this.openSnackBar(\"CNPJ é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n telefonesEmitted(telefones: UnbPessoaTelefone[]) {\r\n this.config.pessoa.telefones = telefones;\r\n }\r\n\r\n enderecosEmitted(enderecos: UnbPessoaEndereco[]) {\r\n this.config.pessoa.enderecos = enderecos;\r\n }\r\n\r\n emailsEmitted(emails: UnbPessoaEmail[]) {\r\n this.config.pessoa.emails = emails;\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return UnbTipoPessoaEnum;\r\n }\r\n\r\n getListaEstados() {\r\n return listaEstados;\r\n }\r\n\r\n\r\n handleErrorPrintConsole(erro: any) {\r\n console.log(erro);\r\n this.handleError(erro);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n\r\n // 1. Mostra a mensagem curta/simples no SnackBar (Fundo da tela)\r\n // Ex: \"O formulário possui erros de validação.\" ou \"Sessão expirada.\"\r\n if (erro.mensagemSimples) {\r\n this.openSnackBar(erro.mensagemSimples);\r\n }\r\n\r\n // 2. Mostra a mensagem detalhada HTML no componente <unb-mensagem>\r\n // Ex: Lista com <ul><li>Campo Data inválido...</li></ul>\r\n if (this.alertService && erro.mensagemHtml) {\r\n // Se o seu alertService suportar ID do componente alvo, passe aqui.\r\n // Caso contrário, ele mostra no componente padrão.\r\n this.alertService.showMessage(erro.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n getLabelDocumento(): string {\r\n switch (this.config.pessoa.tipoPessoa) {\r\n case this.tipoPessoaEnum().FISICA: return 'CPF';\r\n case this.tipoPessoaEnum().JURIDICA: return 'CNPJ';\r\n case this.tipoPessoaEnum().ESTRANGEIRA: return 'Passaporte';\r\n default: return 'Documento';\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n","<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que está incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadyOnly,\r\n 'status-bloqueado': config.isReadyOnly\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadyOnly ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadyOnly\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadyOnly\">Registro SIAPE (Visualização)</ng-container> com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n</div>\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadyOnly || isLoading\" class=\"form-container\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n <!-- Campos Pessoa Física e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>País Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da Mãe</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jurídica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Razão Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documentação</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Órgão Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emissão</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa != tipoPessoaEnum().JURIDICA && (pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA || pessoa.codigoPaisNascimento != 22)\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Número Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadyOnly\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matrícula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"!hideSalvarButton\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadyOnly\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>","import { booleanAttribute, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { forkJoin } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbUtils } from '../../utils/unb-utils';\r\nimport { UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-pesquisar',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-pesquisar.component.html',\r\n styleUrl: './unb-pessoa-pesquisar.component.css'\r\n})\r\nexport class UnbPessoaPesquisarComponent implements OnInit {\r\n isLoading = false;\r\n pessoa = new UnbPessoaModel();\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) config: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n @Output() isLoadingChange = new EventEmitter<boolean>();\r\n\r\n constructor(private pessoaService: UnBPessoaService, private snackBar: MatSnackBar, private alertService: UnbMensagemService) { }\r\n\r\n pessoaEncontrado: Boolean | null = false;\r\n mostrarTipoPessoa!: boolean;\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n\r\n idMensagemService = \"UnbPessoaPesquisar\";\r\n\r\n ngOnInit(): void {\r\n // 1. Validação de Inicialização da API\r\n if (!this.config.backendURL) {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: backendURL está null.\");\r\n return;\r\n }\r\n this.pessoaService.setBackendUrl(this.config.backendURL);\r\n if (this.config.token) {\r\n this.pessoaService.setToken(this.config.token);\r\n }\r\n // 2. Carregamento de Dados de Apoio\r\n forkJoin({\r\n tiposEnd: this.pessoaService.getTipoEndereco(),\r\n tiposTel: this.pessoaService.getTipoTelefone(),\r\n tiposEmail: this.pessoaService.getTipoEmail()\r\n }).subscribe({\r\n next: ({ tiposEnd, tiposTel, tiposEmail }) => {\r\n this.listaTipoEndereco = tiposEnd;\r\n this.listaTipoTelefone = tiposTel;\r\n this.listaTipoEmail = tiposEmail;\r\n },\r\n error: (err) => {\r\n this.handleError(\"Falha ao carregar dados de apoio. Recarregue a página.\");\r\n console.error(\"Erro no forkJoin:\", err);\r\n }\r\n });\r\n\r\n // 3. Definição da Lógica de Exibição e Tipo Padrão\r\n const opcoesAtivas = [this.config.pesquisarPorCPF, this.config.pesquisarPorCNPJ, this.config.pesquisarPorEstrangeiro].filter(v => v).length;\r\n\r\n // Só mostra o rádio se houver escolha real (mais de uma opção ativa)\r\n this.mostrarTipoPessoa = opcoesAtivas > 1;\r\n\r\n if (opcoesAtivas === 0) {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: Nenhuma opção de pesquisa (CPF/CNPJ/Estrangeiro) está ativa.\");\r\n return;\r\n }\r\n\r\n // 4. Atribuição do Tipo Inicial (Ordem de prioridade: Valor padrão -> Opção Única -> CPF)\r\n this.definirTipoPessoaInicial();\r\n }\r\n\r\n /**\r\n * Define qual tipo de pessoa estará selecionado ao carregar o componente\r\n */\r\n private definirTipoPessoaInicial(): void {\r\n // Verifica se o padrão passado é permitido pelas flags de pesquisa\r\n const padraoEhValido =\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.FISICA && this.config.pesquisarPorCPF) ||\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.JURIDICA && this.config.pesquisarPorCNPJ) ||\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.ESTRANGEIRA && this.config.pesquisarPorEstrangeiro);\r\n\r\n if (padraoEhValido) {\r\n // Como o valor da string é igual ao valor do Enum, a atribuição é direta\r\n this.pessoa.tipoPessoa = this.config.defaultTipoPessoa as UnbTipoPessoaEnum;\r\n } else {\r\n if (this.config.defaultTipoPessoa) {\r\n console.warn(\r\n `[UnbPessoaPesquisar] O valor defaultTipoPessoa='${this.config.defaultTipoPessoa}' é incompatível com as opções de pesquisa ativas. Selecionando a primeira disponível.`\r\n );\r\n }\r\n\r\n // Fallback para a primeira opção ativa\r\n if (this.config.pesquisarPorCPF) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.FISICA;\r\n } else if (this.config.pesquisarPorCNPJ) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.JURIDICA;\r\n } else if (this.config.pesquisarPorEstrangeiro) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.ESTRANGEIRA;\r\n }\r\n }\r\n }\r\n\r\n onTipoPessoaChange() {\r\n // Cria uma nova pessoa limpa com o tipo selecionado\r\n const novaPessoa = new UnbPessoaModel();\r\n novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;\r\n\r\n // Inicializa arrays vazios\r\n novaPessoa.telefones = [];\r\n novaPessoa.enderecos = [];\r\n novaPessoa.emails = [];\r\n\r\n // Substitui a pessoa atual\r\n this.pessoa = novaPessoa;\r\n\r\n // Emite a nova pessoa limpa para o componente pai (form)\r\n this.pessoaEmitted.emit(this.pessoa);\r\n }\r\n\r\n pesquisar() {\r\n if (this.validar() == false) return;\r\n this.isLoading = true;\r\n this.isLoadingChange.emit(true);\r\n let result;\r\n if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n let cpf = this.pessoa.cpf.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCpf(cpf);\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n let cnpj = this.pessoa.cnpj.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCnpj(cnpj);\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n result = this.pessoaService.findByPassaporte(this.pessoa.passaporte);\r\n }\r\n\r\n if (result) {\r\n result.subscribe({\r\n next: this.hadleResult.bind(this),\r\n error: this.handleError.bind(this)\r\n });\r\n }\r\n\r\n }\r\n\r\n validar(): boolean {\r\n if (this.config.backendURL == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: backendURL.url está null. Insira o parâmetro (backendURL) com o valor da URL do seu Backend!\")\r\n return false;\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n if (this.pessoa.cpf == null || (this.pessoa.cpf != null && this.pessoa.cpf == \"\")) {\r\n this.handleError(\"CPF é um campo obrigatório.\")\r\n return false;\r\n } else if (!UnbUtils.validarCPF(this.pessoa.cpf)) {\r\n this.handleError(\"Digite um valor válido para o CPF\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n if (this.pessoa.cnpj == null || (this.pessoa.cnpj != null && this.pessoa.cnpj == \"\")) {\r\n this.handleError(\"CNPJ é um campo obrigatório\")\r\n return false;\r\n } else if (!UnbUtils.validarCNPJ(this.pessoa.cnpj)) {\r\n this.handleError(\"Digite um valor válido para o CNPJ!\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n if (this.pessoa.passaporte == null || (this.pessoa.passaporte != null && this.pessoa.passaporte == \"\")) {\r\n this.handleError(\"Passaporte é um campo obrigatório\")\r\n return false;\r\n }\r\n } else {\r\n this.handleError(\"Selecione um tipo de pessoa!\")\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Em unb-pessoa-pesquisar.component.ts\r\n hadleResult(resultado: UnbPessoaModel) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n\r\n if (resultado && resultado.codigoPessoa) {\r\n // Resultado já vem normalizado pelo service (tipoPessoa, arrays, datas, códigos, CPF/CNPJ formatados)\r\n this.pessoa = resultado;\r\n } else {\r\n // Não encontrado: mantém documento e tipo selecionados\r\n const novaPessoa = new UnbPessoaModel();\r\n novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;\r\n if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA) {\r\n novaPessoa.cpf = this.pessoa.cpf;\r\n } else if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA) {\r\n novaPessoa.cnpj = this.pessoa.cnpj;\r\n } else {\r\n novaPessoa.passaporte = this.pessoa.passaporte;\r\n }\r\n this.pessoa = novaPessoa;\r\n }\r\n\r\n this.pessoaEmitted.emit(this.pessoa);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n this.pessoaEncontrado = false;\r\n\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // --- ADAPTER: Converte string para o Objeto Padrão ---\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400, // Erro de validação local geralmente é 400\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n // Se já veio do Service (ou é um objeto manual), usa direto\r\n erroTratado = erro;\r\n }\r\n\r\n // --- LÓGICA DE EXIBIÇÃO ---\r\n\r\n // 1. SnackBar (Mensagem curta)\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. Componente de Mensagem (Mensagem HTML)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n // Se você tiver a variável idMensagemService definida na classe:\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n handleErrorPrintConsole(erro: any) {\r\n console.log(erro);\r\n this.handleError(erro);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return UnbTipoPessoaEnum;\r\n }\r\n\r\n /**\r\n * Formata o CPF enquanto o usuário digita\r\n */\r\n formatarCpf(event: any) {\r\n let valor = event.target.value.replace(/\\D/g, ''); // Remove tudo que não é dígito\r\n\r\n if (valor.length <= 11) {\r\n // Aplica máscara: 000.000.000-00\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d{1,2})$/, '$1-$2');\r\n this.pessoa.cpf = valor;\r\n }\r\n }\r\n\r\n /**\r\n * Formata o CNPJ enquanto o usuário digita\r\n */\r\n formatarCnpj(event: any) {\r\n let valor = event.target.value.replace(/\\D/g, ''); // Remove tudo que não é dígito\r\n\r\n if (valor.length <= 14) {\r\n // Aplica máscara: 00.000.000/0000-00\r\n valor = valor.replace(/(\\d{2})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1/$2');\r\n valor = valor.replace(/(\\d{4})(\\d{1,2})$/, '$1-$2');\r\n this.pessoa.cnpj = valor;\r\n }\r\n }\r\n}\r\n","<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" (ngSubmit)=\"pesquisar()\">\r\n\r\n <div class=\"mensagem-container\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCPF\" [value]=\"tipoPessoaEnum().FISICA\">Pessoa\r\n Física</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCNPJ\" [value]=\"tipoPessoaEnum().JURIDICA\">Pessoa\r\n Jurídica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorEstrangeiro\"\r\n [value]=\"tipoPessoaEnum().ESTRANGEIRA\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" [required]=\"true\"\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\"></mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" [required]=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" /> <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n </div>\r\n</form>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaFormConfig, UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { UnbMensagemService } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\n/**\r\n * Esse é um componente Wrapper utilitário. Ele encapsula a logica de procurar e exibir o formulario de cadastro/alteração inline.\r\n * Isso economiza o ciclo de mostrar a pesquisa do pessoa, e depois mostrar o formulário. \r\n */\r\n@Component({\r\n selector: 'lib-unb-pessoa-crud',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-crud.component.html',\r\n styleUrl: './unb-pessoa-crud.component.css'\r\n})\r\nexport class UnbPessoaCrudComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) pesquisaConfig: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n @Input() showFormOnModal = false;\r\n \r\n @Input() maxWidthPesquisa: string = '450px'; // Input para controlar a largura da área de pesquisa\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n pessoaSelecionada: UnbPessoaModel = new UnbPessoaModel();\r\n pessoaEncontrada: boolean = false;\r\n formConfig = new UnbPessoaFormConfig(); // o formCOnfig a gente monta conforme o pesquisaConfig\r\n\r\n constructor(private snackBar: MatSnackBar, private pessoaService: UnBPessoaService, private alertService: UnbMensagemService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.pesquisaConfig.token) {\r\n this.pessoaService.setToken(this.pesquisaConfig.token);\r\n }\r\n\r\n if (this.pesquisaConfig.backendURL) {\r\n this.pessoaService.setBackendUrl(this.pesquisaConfig.backendURL);\r\n } else {\r\n this.openSnackBar('Backend URL não informada na configuração do componente UnbPessoaCrudComponent!');\r\n }\r\n\r\n this.formConfig = new UnbPessoaFormConfig();\r\n this.formConfig.pessoa = this.pessoaSelecionada;\r\n this.formConfig.backendURL = this.pesquisaConfig.backendURL;\r\n this.formConfig.token = this.pesquisaConfig.token;\r\n }\r\n\r\n loadingPesquisa($event: boolean) {\r\n this.isLoading = $event;\r\n }\r\n\r\npessoaPesquisaRecebida(pessoa: UnbPessoaModel) {\r\n // 1. Verifica se a pessoa é nula ou se é um objeto \"vazio\" (sem ID e sem documentos)\r\n const isVazio = !pessoa || (\r\n !pessoa.codigoPessoa && // Não tem ID\r\n !pessoa.cpf && // Não tem CPF\r\n !pessoa.cnpj && // Não tem CNPJ\r\n !pessoa.passaporte // Não tem Passaporte\r\n );\r\n\r\n if (isVazio) {\r\n // Se for vazio, limpamos a seleção para esconder o formulário\r\n // (O *ngIf=\"pessoaSelecionada\" no HTML vai remover o componente da tela)\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou undefined, dependendo da tipagem\r\n this.pessoaEncontrada = false;\r\n } else {\r\n // Se tiver algum dado (CPF digitado ou pessoa encontrada), atualiza\r\n this.pessoaSelecionada = pessoa;\r\n this.pessoaEncontrada = true;\r\n }\r\n\r\n // 2. Atualiza a configuração do formulário\r\n // Importante: Só tenta acessar 'pessoa' se formConfig existir\r\n if (this.formConfig) {\r\n // Usamos o spread operator (...) para forçar o Angular a detectar a mudança,\r\n // caso o componente filho use ngOnChanges\r\n this.formConfig = {\r\n ...this.formConfig,\r\n pessoa: this.pessoaSelecionada || new UnbPessoaModel() // Evita passar null pro form se não quiser\r\n };\r\n }\r\n}\r\n\r\nopenSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n}\r\n\r\n}\r\n","<div class=\"area-pesquisa\" [style.max-width]=\"maxWidthPesquisa\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [config]=\"pesquisaConfig\"\r\n (isLoadingChange)=\"loadingPesquisa($event)\"\r\n (pessoaEmitted)=\"pessoaPesquisaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<div *ngIf=\"pessoaEncontrada && !isLoading\" class=\"area-formulario\">\r\n <lib-unb-pessoa-form \r\n [config]=\"formConfig\">\r\n </lib-unb-pessoa-form>\r\n</div>","import { Component, EventEmitter, Inject, Input,Output, ViewChild } from '@angular/core';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbPessoaFormConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-form-dialog',\r\n templateUrl: './unb-pessoa-form-dialog.component.html',\r\n styleUrls: ['./unb-pessoa-form-dialog.component.css']\r\n})\r\nexport class UnbPessoaFormDialogComponent {\r\n\r\n @Input() config: UnbPessoaFormConfig = new UnbPessoaFormConfig();\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n @ViewChild(UnbPessoaFormComponent) pessoaFormComponent!: UnbPessoaFormComponent;\r\n\r\n isLoading = false;\r\n titulo = 'Cadastro de Pessoa';\r\n\r\n constructor(private dialogRef: MatDialogRef<UnbPessoaFormComponent>,@Inject(MAT_DIALOG_DATA) data: any) {\r\n if (data && data.config) {\r\n this.config = data.config;\r\n \r\n // Ajusta o título dependendo se é edição ou inclusão\r\n if (this.config.pessoa && this.config.pessoa.codigoPessoa) {\r\n this.titulo = 'Editando Pessoa';\r\n } else {\r\n this.titulo = 'Nova Pessoa';\r\n }\r\n }\r\n }\r\n\r\n onLoadingChange($event: boolean) {\r\n this.isLoading = $event;\r\n }\r\n\r\n fechar() {\r\n this.dialogRef.close();\r\n }\r\n\r\n // se salvar, jah fecha emite o valor salvo. Nao posso deixar aberto, senao vai emitir o close vazio. E o dono nao vai receber a pessoa\r\n onSalvarSucesso($event: UnbPessoaModel) {\r\n this.dialogRef.close($event);\r\n }\r\n\r\n\r\n submitForm() {\r\n // chama o salvar lah do form.\r\n if (this.pessoaFormComponent && this.pessoaFormComponent.pessoaForm) {\r\n this.pessoaFormComponent.salvar(this.pessoaFormComponent.pessoaForm);\r\n }\r\n }\r\n\r\n \r\n}\r\n","<h2 mat-dialog-title>{{ titulo }}</h2>\r\n\r\n<mat-dialog-content class=\"mat-typography\">\r\n <lib-unb-pessoa-form\r\n [config]=\"config\"\r\n [hideSalvarButton]=true\r\n (pessoaEmitted)=\"onSalvarSucesso($event)\"\r\n (isLoadingChange)=\"onLoadingChange($event)\">\r\n </lib-unb-pessoa-form>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button color=\"warn\" [disabled]=\"isLoading\" (click)=\"fechar()\">\r\n Fechar\r\n </button>\r\n\r\n <button [disabled]=\"isLoading\" mat-flat-button color=\"primary\" (click)=\"submitForm()\">\r\n Salvar\r\n </button>\r\n</mat-dialog-actions>\r\n","import { booleanAttribute, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaFormConfig, UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { UnbMensagemService } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UnbPessoaFormDialogComponent } from '../unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\n\r\n/**\r\n * Esse é um componetne Wrapper utilitário. Ele encapsula a logica de procurar e se nao achar iniciar o formulario de cadastro em um modal. \r\n * Também, se achar, ele permite alterar a pessoa encontrada.\r\n * O SGI usa para cadastro de Inquilino no formulario. La tem a pesquisa de Pessoa, se nao achar, abre o formulario de cadastro em modal. Assim, nao precisa ir em outra tela pra cadastrar\r\n * Eh possivel configurar se quer mostrar o botao de Novo (se nao achar) e Alterar (se achar). No SGI, por exemplo eu soh deixo incluir novo, pq nao faz sentido alterar a pessoa no meio do cadastro do inquilino.\r\n*/\r\n@Component({\r\n selector: 'lib-unb-pessoa-crud-modal',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-crud-modal.component.html',\r\n styleUrl: './unb-pessoa-crud-modal.component.css'\r\n})\r\nexport class UnbPessoaCrudModalComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) pesquisaConfig: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n @Input({ transform: booleanAttribute }) incluirBotaoNovo = true; // se pesquisou e nao achou, mostra botao novo\r\n @Input({ transform: booleanAttribute }) incluirBotaoAlterar = true; // se pesquisou e achou, mostra botao alterar\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n pessoaSelecionada = new UnbPessoaModel();\r\n mostrarBotaoNovo = false;\r\n formConfig = new UnbPessoaFormConfig(); // o formCOnfig a gente monta conforme o pesquisaConfig\r\n\r\n constructor(private snackBar: MatSnackBar, private pessoaService: UnBPessoaService, private alertService: UnbMensagemService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.pesquisaConfig.token) {\r\n this.pessoaService.setToken(this.pesquisaConfig.token);\r\n }\r\n\r\n if (this.pesquisaConfig.backendURL) {\r\n this.pessoaService.setBackendUrl(this.pesquisaConfig.backendURL);\r\n } else {\r\n this.openSnackBar('Backend URL não informada na configuração do componente UnbPessoaCrudComponent!');\r\n }\r\n\r\n this.formConfig = new UnbPessoaFormConfig();\r\n this.formConfig.pessoa = this.pessoaSelecionada;\r\n this.formConfig.backendURL = this.pesquisaConfig.backendURL;\r\n this.formConfig.token = this.pesquisaConfig.token;\r\n }\r\n\r\n pessoaPesquisaRecebida(pessoa: UnbPessoaModel) { \r\n // 1. Verifica se a pessoa é nula ou se é um objeto \"vazio\" (sem ID e sem documentos)\r\n const isVazio = !pessoa || (\r\n !pessoa.codigoPessoa && // Não tem ID\r\n !pessoa.cpf && // Não tem CPF\r\n !pessoa.cnpj && // Não tem CNPJ\r\n !pessoa.passaporte // Não tem Passaporte\r\n );\r\n\r\n if (isVazio) {\r\n // Se for vazio, limpamos a seleção para esconder o formulário\r\n // (O *ngIf=\"pessoaSelecionada\" no HTML vai remover o componente da tela)\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou undefined, dependendo da tipagem\r\n this.mostrarBotaoNovo = false;\r\n } else {\r\n // Se tiver algum dado (CPF digitado ou pessoa encontrada), atualiza\r\n this.pessoaSelecionada = pessoa;\r\n if (this.pessoaSelecionada.codigoPessoa) { \r\n // joga pra cima pra falar que uma pessoa foi encontrada\r\n this.pessoaEmitted.emit(pessoa);\r\n } else if (this.incluirBotaoNovo) {\r\n this.mostrarBotaoNovo = true; \r\n }\r\n }\r\n\r\n // 2. Atualiza a configuração do formulário\r\n // Importante: Só tenta acessar 'pessoa' se formConfig existir\r\n if (this.formConfig) {\r\n // Usamos o spread operator (...) para forçar o Angular a detectar a mudança,\r\n // caso o componente filho use ngOnChanges\r\n this.formConfig = {\r\n ...this.formConfig,\r\n pessoa: this.pessoaSelecionada || new UnbPessoaModel() // Evita passar null pro form se não quiser\r\n };\r\n }\r\n }\r\n\r\n limparSelecao() {\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou new UnbPessoaModel()\r\n // Talvez precise avisar o componente filho para limpar o input também\r\n }\r\n\r\n getDocumentoFormatado(pessoa: UnbPessoaModel) {\r\n if (pessoa.cpf && pessoa.cpf.trim() !== '') {\r\n return pessoa.cpf;\r\n } else if (pessoa.cnpj && pessoa.cnpj.trim() !== '') {\r\n return pessoa.cnpj;\r\n } else if (pessoa.passaporte && pessoa.passaporte.trim() !== '') {\r\n return pessoa.passaporte;\r\n }\r\n }\r\n\r\n openModal() {\r\n const dialogRef = this.dialog.open(UnbPessoaFormDialogComponent, {\r\n // 1. Defina um painel de classe para controlar tudo no CSS\r\n panelClass: 'dialog-pessoa-fullscreen', \r\n \r\n // 2. Largura padrão para Desktop (o CSS vai sobrescrever no mobile)\r\n width: '90vw', \r\n maxWidth: '1200px', // Trava para não ficar gigante em monitores ultrawide\r\n \r\n // 3. Altura automática ou máxima (CSS controla o esticar)\r\n maxHeight: '95vh', \r\n\r\n data: {\r\n config: this.formConfig\r\n },\r\n autoFocus: 'first-tabbable'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((pessoaSalva: UnbPessoaModel | null) => {\r\n if (pessoaSalva?.codigoPessoa) {\r\n this.pessoaEmitted.emit(pessoaSalva);\r\n }\r\n });\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"search-wrapper\" [class.disabled-wrapper]=\"isLoading\">\r\n\r\n <div class=\"search-input-area\">\r\n <lib-unb-pessoa-pesquisar \r\n [config]=\"pesquisaConfig\" \r\n (pessoaEmitted)=\"pessoaPesquisaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n </div>\r\n\r\n <div class=\"search-button-area\">\r\n\r\n <button *ngIf=\"incluirBotaoNovo && mostrarBotaoNovo && !pessoaSelecionada.codigoPessoa\" \r\n mat-stroked-button \r\n color=\"accent\"\r\n (click)=\"openModal()\" \r\n type=\"button\" \r\n style=\"white-space: nowrap;\">\r\n <mat-icon>add</mat-icon> Incluir Nova Pessoa\r\n </button>\r\n\r\n <div *ngIf=\"incluirBotaoAlterar && pessoaSelecionada.codigoPessoa\" class=\"mini-card-selected\">\r\n <div class=\"card-avatar\"><mat-icon>person</mat-icon></div>\r\n <div class=\"card-info\">\r\n <div class=\"card-name\">{{ pessoaSelecionada.nome }}</div>\r\n <div class=\"card-doc\">{{ getDocumentoFormatado(pessoaSelecionada) }}</div>\r\n </div>\r\n <div class=\"card-actions\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"openModal()\" type=\"button\">\r\n <mat-icon>edit</mat-icon> Editar\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>","import { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule, NativeDateAdapter } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form/unb-pessoa-email-form';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nimport { UnbPessoaFormComponent } from './unb-pessoa-form/unb-pessoa-form.component';\r\nimport { UnbPessoaPesquisarComponent } from './unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nimport { UnbPessoaEmailListComponent } from './unb-pessoa-email-form/unb-pessoa-email-list';\r\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { UnbPessoaenderecoListComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nimport { UnbPessoaTelefoneListComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\nimport { UnbMensagemModule } from '../unb-mensagem/unb-mensagem.module';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { UnbPessoaCrudComponent } from './unb-pessoa-crud/unb-pessoa-crud.component';\r\nimport { UnbPessoaFormDialogComponent } from './unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\nimport { UnbPessoaCrudModalComponent } from './unb-pessoa-crud-modal/unb-pessoa-crud-modal.component';\r\n\r\n// Força o datepicker a usar o formato dd/MM/yyyy, incluindo parse manual quando o usuário digita.\r\nexport class PtBrDateAdapter extends NativeDateAdapter {\r\n override parse(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n const cleaned = value.trim();\r\n const parts = cleaned.split('/');\r\n if (parts.length === 3) {\r\n const day = Number(parts[0]);\r\n const month = Number(parts[1]) - 1;\r\n const year = Number(parts[2]);\r\n\r\n if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {\r\n const parsed = new Date(year, month, day);\r\n // Garantimos que o browser não ajuste para outro mês/dia por overflow.\r\n if (parsed.getFullYear() === year && parsed.getMonth() === month && parsed.getDate() === day) {\r\n return parsed;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const timestamp = typeof value === 'number' ? value : Date.parse(value);\r\n return isNaN(timestamp) ? null : new Date(timestamp);\r\n }\r\n\r\n override format(date: Date): string {\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n}\r\n\r\nexport const PT_BR_DATE_FORMATS = {\r\n parse: { dateInput: 'dd/MM/yyyy' },\r\n display: {\r\n dateInput: 'dd/MM/yyyy',\r\n monthYearLabel: 'MMM yyyy',\r\n dateA11yLabel: 'dd/MM/yyyy',\r\n monthYearA11yLabel: 'MMMM yyyy'\r\n }\r\n};\r\n\r\n@NgModule({\r\n declarations: [UnbPessoaFormDialogComponent,UnbPessoaCrudComponent, UnbPessoaCrudModalComponent, UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent, UnbPessoaEmailListComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n BrowserModule,\r\n MatIconModule,\r\n DragDropModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n UnbMensagemModule,\r\n MatCardModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatDialogModule,\r\n MatSelectModule, \r\n MatProgressSpinnerModule, \r\n MatButtonModule, \r\n MatProgressBarModule, \r\n MatNativeDateModule,\r\n MatListModule,\r\n MatDialogModule,\r\n MatPaginatorModule,\r\n MatExpansionModule,\r\n MatSnackBarModule, \r\n MatDatepickerModule,\r\n MatRadioModule,\r\n MatCardModule,\r\n MatDividerModule\r\n ],\r\n exports: [UnbPessoaFormDialogComponent, UnbPessoaCrudComponent, UnbPessoaCrudModalComponent, UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent],\r\n providers: [\r\n MatDatepickerModule,\r\n DatePipe,\r\n CurrencyPipe,\r\n { provide: MAT_DATE_LOCALE, useValue: 'pt-BR' },\r\n { provide: DateAdapter, useClass: PtBrDateAdapter, deps: [MAT_DATE_LOCALE] },\r\n { provide: MAT_DATE_FORMATS, useValue: PT_BR_DATE_FORMATS }\r\n ] \r\n})\r\nexport class UnbPessoaModule { }\r\n","export class UnbPessoaEscolaridade {\r\n codigo?: number; // Byte em Java corresponde a number em TypeScript\r\n denominacao?: string;\r\n codigoSiape?: number | null; // Short em Java corresponde a number, e pode ser nulo\r\n extinto: boolean = false;\r\n}","export class UnbPessoaEstadoCivil {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoSiape?: number | null;\r\n extinto: boolean = false;\r\n}","export class UnbPessoaMunincipio {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoIBGE?: number | null;\r\n codigoUf?: number;\r\n siglaUf?: string;\r\n denominacaoUf?: string;\r\n}","export class UnbPessoaPais {\r\n codigo?: number;\r\n denominacao?: string;\r\n sigla?: string;\r\n nacionalidade?: string;\r\n extinto?: boolean;\r\n}","export class UnbPessoaRacaCor{\r\n codigo?: number;\r\n denominacao?: string;\r\n}","/*\r\n * Public API Surface of unb-lib-components\r\n */\r\n\r\nexport * from './lib/unb-mensagem/unb-mensagem.component';\r\nexport * from './lib/unb-mensagem/unb-mensagem.module';\r\nexport * from './lib/unb-mensagem/unb-mensagem.service';\r\n\r\nexport * from './lib/services/unb-auth.service';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.component';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.module';\r\nexport * from './lib/unb-usuario/unb-usuario.model';\r\n\r\n// UNB Pessoa Module\r\nexport * from './lib/unb-pessoa/unb-pessoa.module';\r\nexport * from './lib/unb-pessoa/unb-pessoa.service';\r\nexport * from './lib/unb-pessoa/unb-tipo-pessoa.enum';\r\nexport * from './lib/unb-pessoa/pessoa-tabelas-apoio';\r\n\r\n// UNB Pessoa Models\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model';\r\n\r\n// UNB Pessoa Components\r\nexport * from './lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UnbMensagemService","i2","i1.UnbAuthService","i4","i5","i6","i7","i3","i7.UnbUsuarioComponent","i1","i8.UnbMensagemComponent","i8","i9.UnbMensagemComponent","i10","i11","i12","i13","i2.UnBPessoaService","i1.UnBPessoaService","i3.UnbMensagemService","i9","i14","i16.UnbPessoaTelefoneListComponent","i17.UnbPessoaenderecoListComponent","i18.UnbPessoaEmailListComponent","i6.UnbPessoaFormComponent","i7.UnbPessoaPesquisarComponent","i3.UnbPessoaFormComponent","i8.UnbPessoaPesquisarComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stiunb-unb-lib-components.mjs","sources":["../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-message.model.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.service.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.html","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.module.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.model.ts","../../../projects/unb-lib-components/src/lib/services/unb-auth.service.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.html","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.html","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.module.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-tipo-pessoa.enum.ts","../../../projects/unb-lib-components/src/lib/utils/unb-utils.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.service.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/pessoa-tabelas-apoio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.ts","../../../projects/unb-lib-components/src/public-api.ts","../../../projects/unb-lib-components/src/stiunb-unb-lib-components.ts"],"sourcesContent":["export class UnbMensagemModel {\r\n message!: string;\r\n background_color!: string;\r\n font_color!: string;\r\n border_color!: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\n\r\nexport enum UnbTipoMensagemEnum {\r\n SUCCESS = 0,\r\n INFO,\r\n WARNING,\r\n DANGER,\r\n}\r\n\r\n// Interface auxiliar para o evento\r\ninterface UnbMensagemEvent {\r\n model: UnbMensagemModel;\r\n targetId?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbMensagemService {\r\n\r\n // Mudamos o tipo do Subject para aceitar o evento com ID\r\n public messageSubject = new Subject<UnbMensagemEvent>(); \r\n public cores: [string, string, string][] = [ // Ajustei a tipagem do array\r\n ['#dff0d8', '#3c763d', '#d6e9c6'], // SUCCESS\r\n ['#d9edf7', '#31708f', '#bce8f1'], // INFO\r\n ['#fcf8e3', '#8a6d3b', '#faebcc'], // WARNING\r\n ['#f2dede', '#a94442', '#ebccd1'] // DANGER\r\n ];\r\n\r\n constructor() {}\r\n\r\n /**\r\n * @param message mensagem que vai aparecer na tela\r\n * @param tipo tipo da mensagem: success, info, warning, danger.\r\n * @param id (Opcional) Identificador do componente que deve exibir a mensagem\r\n */\r\n public showMessage(message: string, type: number, id?: string) {\r\n const model = this.createAlertMessage(message, ...this.cores[type]);\r\n // Envia o modelo E o id alvo (se houver)\r\n this.messageSubject.next({ model: model, targetId: id }); \r\n }\r\n\r\n /**\r\n * Esconde o componente. \r\n * @param id (Opcional) Se informado, esconde apenas o componente com este ID.\r\n */\r\n public hideMessage(id?: string) {\r\n // Envia modelo vazio para esconder\r\n this.messageSubject.next({ model: new UnbMensagemModel(), targetId: id }); \r\n }\r\n\r\n public getMessageSubject(): Observable<UnbMensagemEvent> {\r\n return this.messageSubject.asObservable();\r\n } \r\n\r\n private createAlertMessage(message: string, background_color: string, font_color: string, border_color: string): UnbMensagemModel {\r\n return { message, background_color, font_color, border_color }; \r\n }\r\n}","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { UnbTipoMensagemEnum, UnbMensagemService } from './unb-mensagem.service';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'unb-mensagem',\r\n templateUrl: './unb-mensagem.component.html',\r\n styleUrls: ['./unb-mensagem.component.css']\r\n})\r\nexport class UnbMensagemComponent implements OnInit, OnDestroy {\r\n\r\n @Input() mensagem!: string; \r\n @Input() tipo!: string;\r\n \r\n // Input opcional para identificar este componente específico\r\n @Input() identificador?: string;\r\n \r\n alertMessage!: UnbMensagemModel;\r\n private subscription!: Subscription | null;\r\n \r\n constructor(private mensagemService: UnbMensagemService) {}\r\n\r\n ngOnInit() { \r\n this.subscription = this.mensagemService.getMessageSubject().subscribe(event => {\r\n \r\n // LÓGICA DE FILTRAGEM:\r\n \r\n // 1. Se a mensagem tem um targetId, mas este componente não tem ID ou o ID não bate: IGNORA\r\n if (event.targetId && event.targetId !== this.identificador) {\r\n return; \r\n }\r\n\r\n // 2. Se a mensagem tem targetId e bate com o meu ID: ACEITA\r\n // 3. Se a mensagem NÃO tem targetId (global): ACEITA (comportamento padrão/antigo)\r\n \r\n if (event.model) {\r\n this.alertMessage = event.model;\r\n }\r\n }); \r\n }\r\n\r\n ngAfterContentInit() {\r\n if (this.mensagem != null && this.mensagem != undefined) {\r\n // Aqui passamos o this.id para garantir que a mensagem inicial fique neste componente\r\n this.showMessage(this.mensagem, this.getTipo()); \r\n }\r\n }\r\n\r\n hide(): void { \r\n // Ao fechar pelo X, passamos o próprio ID para não fechar outros componentes sem querer\r\n this.mensagemService.hideMessage(this.identificador);\r\n }\r\n\r\n showMessage(message: string, tipo: number) {\r\n this.mensagemService.showMessage(message, tipo, this.identificador);\r\n }\r\n \r\n ngOnDestroy() {\r\n if (this.subscription) { \r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n getTipo(): number {\r\n // ... (mesma implementação anterior) ...\r\n if (this.tipo != null && this.tipo != undefined){ \r\n let valor = this.tipo.toLowerCase();\r\n if (valor == 'warning' || valor == 'warn' || valor == 'aviso'){\r\n return UnbTipoMensagemEnum.WARNING ;\r\n } else if (valor == 'sucesso' || valor == 'success' || valor == 'sucess'){\r\n return UnbTipoMensagemEnum.SUCCESS;\r\n } else if (valor == 'danger' || valor == 'erro' || valor == 'error'){\r\n return UnbTipoMensagemEnum.DANGER;\r\n } else if (valor == 'info'){\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n }\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n}","\r\n<div class=\"alert\" *ngIf=\"alertMessage && alertMessage.message && alertMessage.message.length > 1\" [ngStyle]=\"{background: alertMessage.background_color, 'border-color': alertMessage.border_color}\"> \r\n <div class=\"mensagem\" [ngStyle]=\"{color: alertMessage.font_color}\" [innerHtml]= \"alertMessage.message\"></div>\r\n <a class=\"close\" (click)=\"hide()\" aria-label=\"fechar\" [ngStyle]=\"{color: alertMessage.font_color}\">x</a>\r\n</div> \r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbMensagemComponent } from './unb-mensagem.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@NgModule({\r\n declarations: [ UnbMensagemComponent ],\r\n imports: [CommonModule, \r\n MatIconModule,\r\n MatButtonModule ],\r\n exports: [ UnbMensagemComponent ]\r\n})\r\nexport class UnbMensagemModule { }\r\n","export class UnbUsuarioModel {\r\n public autenticado: boolean = false;\r\n public usuarioNome: string = \"\";\r\n public perfis: string[] = [];\r\n public expiration: number = 0;\r\n}","import { Injectable } from '@angular/core';\r\nimport { LoginResponse, OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { OidcDecodedToken } from '../unb-usuario/oidc-decoded-token';\r\nimport { OidcUserData } from '../unb-usuario/oidc-user-data';\r\nimport { UnbUsuarioModel } from '../unb-usuario/unb-usuario.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbAuthService {\r\n // Inicializamos o BehaviorSubject com uma lista vazia de perfis\r\n private usuarioSubject = new BehaviorSubject<UnbUsuarioModel>(new UnbUsuarioModel);\r\n usuario$ = this.usuarioSubject.asObservable();\r\n private usuarioModel: UnbUsuarioModel = new UnbUsuarioModel();\r\n private oidcSecurityService!: OidcSecurityService;\r\n\r\n\r\n constructor() {\r\n \r\n }\r\n\r\n initiate(oidcSecurityService: OidcSecurityService) {\r\n this.oidcSecurityService = oidcSecurityService;\r\n this.logAuthenticatedState();\r\n }\r\n\r\n private logAuthenticatedState() {\r\n this.oidcSecurityService.checkAuth().subscribe((loginResponse: LoginResponse) => {\r\n if (!loginResponse.isAuthenticated) {\r\n this.usuarioModel.autenticado = false;\r\n this.usuarioSubject.next(this.usuarioModel);\r\n } else {\r\n this.usuarioModel.autenticado = true;\r\n this.setUserData(loginResponse.userData);\r\n }\r\n });\r\n }\r\n\r\n private setUserData(userData: OidcUserData) {\r\n const nomeCompleto = userData.given_name.trim();\r\n const nomes = nomeCompleto.split(' ');\r\n\r\n this.usuarioModel.usuarioNome = nomes.length > 1 \r\n ? `${nomes[0]} ${nomes[nomes.length - 1]}` \r\n : nomes[0];\r\n\r\n this.oidcSecurityService.getPayloadFromAccessToken().subscribe((authResult: OidcDecodedToken) => {\r\n this.usuarioModel.perfis = authResult.realm_access.roles || [];\r\n // Atualiza o BehaviorSubject com o modelo atualizado\r\n this.usuarioSubject.next(this.usuarioModel);\r\n });\r\n }\r\n\r\n public login() {\r\n this.oidcSecurityService.authorize();\r\n }\r\n\r\n public logout() {\r\n this.oidcSecurityService\r\n .logoff()\r\n .subscribe(() => this.usuarioSubject.next(new UnbUsuarioModel()) );\r\n }\r\n \r\n}\r\n","import { Component, Input, OnInit, inject } from '@angular/core';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioModel } from './unb-usuario.model';\r\n\r\n@Component({\r\n selector: 'unb-usuario',\r\n templateUrl: './unb-usuario.component.html',\r\n styleUrls: ['./unb-usuario.component.css']\r\n})\r\nexport class UnbUsuarioComponent implements OnInit {\r\n \r\n // Injeção moderna\r\n private authService = inject(UnbAuthService);\r\n\r\n @Input() oidcSecurityService!: OidcSecurityService;\r\n\r\n usuario$!: Observable<UnbUsuarioModel>;\r\n\r\n ngOnInit() {\r\n if (this.oidcSecurityService) {\r\n this.authService.initiate(this.oidcSecurityService);\r\n this.usuario$ = this.authService.usuario$;\r\n }\r\n }\r\n\r\n login() {\r\n this.authService.login();\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n}","<ng-container *ngIf=\"{ user: usuario$ | async } as state\">\r\n\r\n <div class=\"usuario-container\">\r\n\r\n <ng-container *ngIf=\"state.user?.autenticado; else guestOrLoading\">\r\n \r\n <button mat-icon-button [matMenuTriggerFor]=\"userMenu\" class=\"avatar-button\" aria-label=\"Menu do usuário\">\r\n <mat-icon class=\"avatar-icon\">account_circle</mat-icon>\r\n </button>\r\n\r\n <mat-menu #userMenu=\"matMenu\" xPosition=\"before\" class=\"custom-user-menu\">\r\n <div class=\"menu-header\">\r\n <div class=\"user-avatar-placeholder\">\r\n <mat-icon>person</mat-icon>\r\n </div>\r\n <div class=\"user-details\">\r\n <span class=\"user-name\">{{ state.user?.usuarioNome }}</span>\r\n <span class=\"user-profiles\" *ngIf=\"state.user?.perfis?.length\">\r\n {{ state.user?.perfis?.join(', ') }}\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"logout()\">\r\n <mat-icon>logout</mat-icon>\r\n <span>Sair</span>\r\n </button>\r\n </mat-menu>\r\n\r\n </ng-container>\r\n\r\n <ng-template #guestOrLoading>\r\n <button mat-stroked-button class=\"btn-login\" (click)=\"login()\">\r\n <mat-icon>login</mat-icon>\r\n <span>Entrar</span>\r\n </button>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n</ng-container>","import { Component, Input, ViewChild, inject, OnInit } from '@angular/core';\r\nimport { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { map, shareReplay } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'unb-nav-bar',\r\n templateUrl: './unb-nav-bar.component.html',\r\n styleUrls: ['./unb-nav-bar.component.css']\r\n})\r\nexport class UnbNavBarComponent implements OnInit {\r\n \r\n // Dependências\r\n private breakpointObserver = inject(BreakpointObserver);\r\n\r\n // Inputs de Configuração\r\n @Input() nomeSistema: string = \"Nome do Sistema\";\r\n @Input() nomeSistemaMobile: string = \"UnB\"; // input para nome curto\r\n @Input() menuSize = 280; // Aumentei um pouco o padrão para ficar mais moderno\r\n @Input() widthToHideMenu = 800;\r\n @Input() contentBackgroundColor = '#f5f7fa'; // Cor mais suave e moderna\r\n @Input() containerPadding = 16; // Mais respiro (padding) por padrão\r\n \r\n @Input() oidcSecurityService!: OidcSecurityService;\r\n\r\n // Acesso ao componente visual\r\n @ViewChild('sidenav') sidenav!: MatSidenav;\r\n\r\n // Observable para controlar o estado mobile de forma reativa\r\n isMobile$: Observable<boolean> | undefined;\r\n\r\n ngOnInit() {\r\n // Cria um observable que emite true/false baseado no tamanho da tela\r\n this.isMobile$ = this.breakpointObserver\r\n .observe(`(max-width: ${this.widthToHideMenu}px)`)\r\n .pipe(\r\n map(result => result.matches),\r\n shareReplay()\r\n );\r\n }\r\n\r\n handleMenuClick() {\r\n // Se o modo for 'over', significa que estamos no mobile (ou tela pequena)\r\n // cobrindo o conteúdo. Nesse caso, fechamos ao clicar.\r\n if (this.sidenav.mode === 'over') {\r\n this.sidenav.close();\r\n }\r\n }\r\n}","<div class=\"app-container\">\r\n\r\n <mat-toolbar class=\"app-toolbar\">\r\n\r\n <button mat-icon-button class=\"menu-button\" color=\"accent\" (click)=\"sidenav.toggle()\" aria-label=\"Toggle sidenav\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n\r\n <div class=\"branding\">\r\n <img src=\"assets/img/unb_icon_branco.svg\" alt=\"Logo UnB\" class=\"logo\">\r\n\r\n <span class=\"app-title\" *ngIf=\"{ isMobile: isMobile$ | async } as state\">\r\n {{ state.isMobile ? nomeSistemaMobile : nomeSistema }}\r\n </span>\r\n </div>\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n <div class=\"actions-container\">\r\n <unb-usuario [oidcSecurityService]=\"oidcSecurityService\"></unb-usuario>\r\n </div>\r\n\r\n </mat-toolbar>\r\n\r\n <mat-sidenav-container class=\"sidenav-container\" [ngStyle]=\"{'background-color': contentBackgroundColor}\">\r\n\r\n <mat-sidenav #sidenav [mode]=\"(isMobile$ | async) ? 'over' : 'side'\" [opened]=\"!(isMobile$ | async)\"\r\n [style.width.px]=\"menuSize\" class=\"app-sidenav\">\r\n\r\n <div class=\"menu-wrapper\" (click)=\"handleMenuClick()\"> \r\n <ng-content select=\"[menu]\"></ng-content>\r\n </div>\r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content [ngStyle]=\"{'padding.px': containerPadding}\">\r\n <ng-content select=\"[body]\"></ng-content>\r\n </mat-sidenav-content>\r\n\r\n </mat-sidenav-container>\r\n</div>","import { LayoutModule } from '@angular/cdk/layout';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioComponent } from './unb-usuario.component';\r\n\r\n@NgModule({\r\n declarations: [UnbUsuarioComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule, \r\n MatCardModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule \r\n ], \r\n exports: [UnbUsuarioComponent],\r\n providers: [UnbAuthService]\r\n})\r\nexport class UnbUsuarioModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbNavBarComponent } from './unb-nav-bar.component';\r\nimport { LayoutModule } from '@angular/cdk/layout';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [UnbNavBarComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n MatCardModule \r\n ],\r\n exports: [UnbNavBarComponent]\r\n})\r\nexport class UnbNavBarModule { }\r\n","export class UnbPessoaEmail {\r\n codigo?: number;\r\n tipoEmailCodigo?: number;\r\n tipo?: string;\r\n email?: string;\r\n autorizacao?: boolean;\r\n ordem?: number;\r\n ordemEmail?: number | null;\r\n}\r\n\r\nexport class UnbPessoaEmailTipo {\r\n index?: number;\r\n codigo?: number;\r\n denominacao?: string;\r\n}","import { UnbTipoPessoaEnum } from \"../unb-tipo-pessoa.enum\";\r\nimport { UnbPessoaEmail } from \"./unb-pessoa-email.model\";\r\nimport { UnbPessoaEndereco } from \"./unb-pessoa-endereco.model\";\r\nimport { UnbPessoaPais } from \"./unb-pessoa-pais\";\r\nimport { UnbPessoaTelefone } from \"./unb-pessoa-telefone.model\";\r\n\r\n/** \r\n * Essa eh uma classe base, com propriedades comum a todas as outras pessoas. \r\n * */\r\nexport class UnbPessoaModel {\r\n idPessoa!: number;\r\n codigoPessoa!: number; \r\n enderecos!: UnbPessoaEndereco[];\r\n telefones!: UnbPessoaTelefone[];\r\n emails!: UnbPessoaEmail[];\r\n tipoPessoa!: UnbTipoPessoaEnum; // inicializa com o fisica selecionado\r\n\r\n // Atributos da Pessoa Física\r\n idServidor!: number;\r\n matriculaSipes!: number;\r\n matriculaSiape!: number;\r\n nome!: string;\r\n cpf!: string;\r\n rg!: string;\r\n rgOrgao!: string;\r\n rgUf!: string;\r\n rgDataEmissao!: string;\r\n numeroTituloEleitor!: string;\r\n dataEmissaoTituloEleitor!: string;\r\n zonaTituloEleitor!: string;\r\n secaoTituloEleitor!: string;\r\n ufTituloEleitor!: string;\r\n numeroReservista!: string;\r\n serieReservista!: string;\r\n orgaoReservista!: string;\r\n dataNascimento!: Date | null;\r\n \r\n paisNascimento!: string;\r\n ufNascimento!: string;\r\n naturalidade!: string;\r\n codigoPaisNascimento!: number | null ;;\r\n codigoPaisPassaporte!: number;\r\n codigoEstadoCivil!: number | null ;\r\n nacionalidade!: string;\r\n estadoCivil!: string;\r\n nomePai!: string;\r\n nomeMae!: string;\r\n tipoSanguineo!: string;\r\n escolaridade!: number |null;\r\n numeroCarteiraTrabalho!: string;\r\n serieCarteiraTrabalho!: string;\r\n ufCarteiraTrabalho!: string;\r\n pisPasep!: string;\r\n numeroHabilitacao!: string;\r\n registroHabilitacao!: string;\r\n dataEmissaoHabilitacao!: string;\r\n dataValidadeHabilitacao!: string;\r\n categoriaHabilitacao!: string;\r\n deficienciaFisicaHabilitacao!: string;\r\n primeiraHabilitacao!: string;\r\n autoCadastro!: boolean;\r\n nomeSocial!: string;\r\n sexo!: string; \r\n codigoSexo!: number;\r\n\r\n // Atributos da Pessoa Estrangeira\r\n passaporte!: string;\r\n paisOrigem!: string;\r\n dataChegadaBrasil!: Date | null;\r\n\r\n // Atributos da Pessoa Jurídica\r\n cnpj!: string;\r\n razaoSocial!: string;\r\n nomeFantasia!: string;\r\n sigla!: string;\r\n pais!: UnbPessoaPais;\r\n paginaWeb!: string;\r\n\r\n}","export enum UnbTipoPessoaEnum {\r\n FISICA = 'FISICA',\r\n JURIDICA = 'JURIDICA',\r\n ESTRANGEIRA = 'ESTRANGEIRA'\r\n}","export class UnbUtils {\r\n removeNull(key:any, value:any) {\r\n // Filtering out properties\r\n if (value === null) {\r\n return undefined;\r\n }\r\n\r\n return value;\r\n }\r\n \r\n // forma cpf\r\n static formataCpf(valor:any) {\r\n return valor.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/g,\"\\$1.\\$2.\\$3\\-\\$4\");\r\n }\r\n\r\n // forma cpf ou cnpj\r\n static formataCnpj(valor:string): string {\r\n return valor.replace(/^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/, \"$1.$2.$3/$4-$5\");\r\n }\r\n\r\n static validarCPF(cpf: string): boolean {\r\n if (!cpf) return false; // Se CPF for null, undefined ou vazio, retorna falso\r\n \r\n cpf = cpf.replace(/\\D/g, ''); // Remove todos os caracteres não numéricos \r\n if (cpf=='') return false;\r\n\r\n if (cpf.length !== 11 || /^(\\d)\\1+$/.test(cpf)) {\r\n return false; // Verifica se tem 11 dígitos e não é uma sequência repetida (ex: 11111111111)\r\n }\r\n \r\n let soma = 0, resto: number;\r\n \r\n // Validação do primeiro dígito verificador\r\n for (let i = 0; i < 9; i++) {\r\n soma += Number(cpf[i]) * (10 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n if (resto !== Number(cpf[9])) return false;\r\n \r\n soma = 0;\r\n \r\n // Validação do segundo dígito verificador\r\n for (let i = 0; i < 10; i++) {\r\n soma += Number(cpf[i]) * (11 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n \r\n return resto === Number(cpf[10]);\r\n }\r\n \r\n\r\n static validarCNPJ(cnpj: string): boolean {\r\n cnpj = cnpj.replace(/[^\\d]+/g, ''); // Remove caracteres não numéricos\r\n \r\n if (cnpj.length !== 14 || /^(\\d)\\1+$/.test(cnpj)) {\r\n return false; // Verifica se tem 14 dígitos e não é uma sequência repetida\r\n }\r\n \r\n let tamanho = cnpj.length - 2;\r\n let numeros = cnpj.substring(0, tamanho);\r\n let digitos = cnpj.substring(tamanho);\r\n let soma = 0, pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n let resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n if (resultado !== parseInt(digitos.charAt(0))) return false;\r\n \r\n tamanho = tamanho + 1;\r\n numeros = cnpj.substring(0, tamanho);\r\n soma = 0;\r\n pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n return resultado === parseInt(digitos.charAt(1));\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, catchError, map, Observable, of, throwError } from 'rxjs';\r\nimport { UnbPessoaEndereco } from './unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from './unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaEstadoCivil } from './unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaMunincipio } from './unb-pessoa-models/unb-pessoa-municipio';\r\nimport { UnbPessoaPais } from './unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaModel } from './unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbTipoPessoaEnum } from './unb-tipo-pessoa.enum';\r\nimport { UnbUtils } from '../utils/unb-utils';\r\n\r\n// Interface para padronizar o erro que chega nos componentes\r\nexport interface UnbPessoaErroPadrao {\r\n status: number;\r\n mensagemSimples: string; // Para usar no SnackBar\r\n mensagemHtml: string; // Para usar no AlertService (com <ul>, <li>, <strong>)\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnBPessoaService {\r\n\r\n // Armazena apenas a string da URL. Inicializa vazio.\r\n private backendUrlSubject = new BehaviorSubject<string>('');\r\n // Exposta como Observable (caso algum componente queira se inscrever)\r\n backendUrl$ = this.backendUrlSubject.asObservable();\r\n\r\n // pra facilitar o debug, pode já passar o token. Mas isso nao pode estar na producao pq vai expor o token pro usuario no front\r\n private token: string = '';\r\n\r\n // Cache das listas de tipos (para normalização de endereço, telefone, email)\r\n private tipoEnderecoCache: { codigo: number; denominacao: string }[] | null = null;\r\n private tipoTelefoneCache: { codigo: number; denominacao: string }[] | null = null;\r\n private tipoEmailCache: { codigo: number; denominacao: string }[] | null = null;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Setter agora recebe string direta\r\n setBackendUrl(url: string) {\r\n // Tratamento remove barra no final para padronizar\r\n if (url && url.endsWith('/')) {\r\n url = url.slice(0, -1);\r\n }\r\n this.backendUrlSubject.next(url);\r\n }\r\n\r\n setToken(token: string) {\r\n this.token = token;\r\n }\r\n\r\n // Getter retorna string direta\r\n getBackendUrl(): string {\r\n return this.backendUrlSubject.getValue();\r\n }\r\n\r\n // Headers padrão com Content-Type e Authorization (se token existir)\r\n private getHeaders() {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json'\r\n });\r\n\r\n // Se o token estiver preenchido (cenário de debug/dev), adiciona o Authorization\r\n if (this.token) {\r\n headers = headers.set('Authorization', `Bearer ${this.token}`);\r\n }\r\n\r\n // Retorna o objeto no formato esperado pelo HttpClient { headers: ... }\r\n return { headers };\r\n }\r\n\r\n // Métodos de busca\r\n findByCpf(cpf: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?cpf=${cpf}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByCnpj(cnpj: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?cnpj=${cnpj}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByPassaporte(passaporte: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?passaporte=${passaporte}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.ESTRANGEIRA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaFisicaByCodigoPessoa(id: number): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?codigoPessoa=${id}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaJuridicaByCodigoPessoa(id: number): Observable<UnbPessoaModel> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?codigoPessoa=${id}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaFisica(filtro: UnbPessoaModel, page?: number, size?: number, sort?: string): Observable<UnbPessoaModel[]> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas`;\r\n let params = new HttpParams();\r\n\r\n Object.keys(filtro).forEach((key) => {\r\n const valor = filtro[key as keyof UnbPessoaModel];\r\n if (valor !== null && valor !== undefined && valor !== '') {\r\n params = params.append(key, valor.toString());\r\n }\r\n });\r\n\r\n // 2. Adiciona os parâmetros de Paginação (se foram passados)\r\n if (page !== undefined && page !== null) {\r\n params = params.append('page', page.toString());\r\n }\r\n if (size !== undefined && size !== null) {\r\n params = params.append('size', size.toString());\r\n }\r\n if (sort) {\r\n params = params.append('sort', sort);\r\n }\r\n\r\n // 3. Monta as opções da requisição\r\n const options = {\r\n params,\r\n ...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }\r\n };\r\n\r\n return this.http.get<UnbPessoaModel[]>(url, options)\r\n .pipe(\r\n map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.FISICA))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaJuridica(filtro: UnbPessoaModel, page?: number, size?: number, sort?: string): Observable<UnbPessoaModel[]> {\r\n const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas`;\r\n let params = new HttpParams();\r\n\r\n // 1. Adiciona APENAS os filtros permitidos do Model\r\n const camposPermitidos = ['idPessoa', 'codigoPessoa', 'cnpj', 'nomeFantasia', 'razaoSocial', 'sigla'];\r\n\r\n Object.keys(filtro).forEach((key) => {\r\n if (camposPermitidos.includes(key)) {\r\n const valor = filtro[key as keyof UnbPessoaModel];\r\n if (valor !== null && valor !== undefined && valor !== '') {\r\n params = params.append(key, valor.toString());\r\n }\r\n }\r\n });\r\n\r\n // 2. Adiciona os parâmetros de Paginação (se foram passados)\r\n if (page !== undefined && page !== null) {\r\n params = params.append('page', page.toString());\r\n }\r\n if (size !== undefined && size !== null) {\r\n params = params.append('size', size.toString());\r\n }\r\n if (sort) {\r\n params = params.append('sort', sort);\r\n }\r\n\r\n // 3. Monta as opções da requisição\r\n const options = {\r\n params,\r\n ...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }\r\n };\r\n\r\n return this.http.get<UnbPessoaModel[]>(url, options)\r\n .pipe(\r\n map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.JURIDICA))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n pesquisarCep(cep: string) {\r\n const url = `${this.getBackendUrl()}/pessoa-api/public/busca-cep/servico-1/${cep}`;\r\n return this.http.get<UnbPessoaEndereco>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Salvar (decide fisica ou juridica)\r\n salvar(payload: any, tipoPessoa: UnbTipoPessoaEnum): Observable<UnbPessoaModel | null> {\r\n\r\n // (Para o componente conseguir ler .mensagemSimples e .mensagemHtml)\r\n if (!payload) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Dados para salvamento inválidos (Payload null).',\r\n mensagemHtml: '<strong>Erro interno:</strong> Tentativa de salvar dados vazios.'\r\n }));\r\n }\r\n\r\n if (!tipoPessoa) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Tipo de pessoa não definido.',\r\n mensagemHtml: '<strong>Erro interno:</strong> O tipo de pessoa é obrigatório para salvar.'\r\n }));\r\n }\r\n\r\n // 2. Delegação\r\n // Como savePessoaFisica e savePessoaJuridica JÁ TÊM o .pipe(catchError),\r\n // aqui nós apenas retornamos o Observable deles. O erro subirá tratado.\r\n if (tipoPessoa == UnbTipoPessoaEnum.FISICA || tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n return this.savePessoaFisica(payload);\r\n } else if (tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n return this.savePessoaJuridica(payload);\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n // Salvar recebendo diretamente o Model e convertendo internamente para o payload do backend\r\n public salvarPessoa(pessoa: UnbPessoaModel): Observable<UnbPessoaModel | null> {\r\n if (!pessoa) {\r\n return throwError(() => ({\r\n status: 400,\r\n mensagemSimples: 'Erro interno: Pessoa inválida (null).',\r\n mensagemHtml: '<strong>Erro interno:</strong> Objeto pessoa vazio.'\r\n }));\r\n }\r\n\r\n const payload = this.convertPessoaToPayload(pessoa);\r\n return this.salvar(payload, pessoa.tipoPessoa);\r\n }\r\n\r\n // Salvar Pessoa Física\r\n private savePessoaFisica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getBackendUrl();\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n\r\n // Variável para armazenar o Observable antes de retornar\r\n let request$: Observable<UnbPessoaModel>;\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n request$ = this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas`, body, httpOptions);\r\n } else {\r\n request$ = this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n\r\n // Antes de retornar, passamos pelo 'pipe' para tratar o erro se ele ocorrer.\r\n return request$.pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Salvar Pessoa Jurídica\r\n private savePessoaJuridica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getBackendUrl();\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n let request$: Observable<UnbPessoaModel>;\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n request$ = this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas`, body, httpOptions);\r\n } else {\r\n request$ = this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n\r\n return request$.pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Dados auxiliares públicos\r\n public getEscolaridade() {\r\n return this.http.get<UnbPessoaEscolaridade[]>(`${this.getBackendUrl()}/pessoa-api/public/escolaridades/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getEstadoCivil() {\r\n return this.http.get<UnbPessoaEstadoCivil[]>(`${this.getBackendUrl()}/pessoa-api/public/estados-civis/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getMunicipios() {\r\n return this.http.get<UnbPessoaMunincipio[]>(`${this.getBackendUrl()}/pessoa-api/public/municipios/listagem`).pipe(\r\n catchError(this.handleError) // <--- Adicione aqui\r\n );\r\n }\r\n\r\n public getPaises() {\r\n return this.http.get<{ content: UnbPessoaPais[] }>(\r\n `${this.getBackendUrl()}/pessoa-api/public/paises/listagem?&page=0&size=200&sort=denominacao,asc`\r\n ).pipe(\r\n map(response => {\r\n return response.content.sort((a, b) => {\r\n // ... sua lógica de ordenação ...\r\n const nomeA = a?.denominacao?.toUpperCase() || '';\r\n const nomeB = b?.denominacao?.toUpperCase() || '';\r\n if (nomeA === 'BRASIL') return -1;\r\n if (nomeB === 'BRASIL') return 1;\r\n return nomeA.localeCompare(nomeB);\r\n });\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getRacaCor() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/public/etnias/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoEndereco() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-endereco/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoEnderecoCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoTelefone() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-telefone/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoTelefoneCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n public getTipoEmail() {\r\n return this.http.get<string[]>(`${this.getBackendUrl()}/pessoa-api/tipos-email/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n }))),\r\n map(lista => {\r\n this.tipoEmailCache = lista;\r\n return lista;\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n private formatarLabel(text: string) {\r\n return text\r\n .toLowerCase()\r\n .replace(/_/g, ' ')\r\n .replace(/\\b\\w/g, l => l.toUpperCase());\r\n }\r\n\r\n /**\r\n * Normaliza o payload retornado pelo backend para `UnbPessoaModel` pronto para UI.\r\n */\r\n private normalizePessoa(resultado: UnbPessoaModel | null, tipoForcado?: UnbTipoPessoaEnum): UnbPessoaModel {\r\n const pessoa = (resultado || new UnbPessoaModel()) as UnbPessoaModel;\r\n\r\n // Define tipoPessoa quando o endpoint não retorna\r\n if (tipoForcado != null) {\r\n pessoa.tipoPessoa = tipoForcado;\r\n }\r\n\r\n // Garante arrays\r\n pessoa.enderecos = pessoa.enderecos || [];\r\n pessoa.telefones = pessoa.telefones || [];\r\n pessoa.emails = pessoa.emails || [];\r\n\r\n // Sexo -> codigoSexo\r\n if ((pessoa as any).sexo) {\r\n const sexo = ((pessoa as any).sexo as string).toUpperCase().trim();\r\n if (sexo === 'FEMININO') pessoa.codigoSexo = 2;\r\n else if (sexo === 'MASCULINO') pessoa.codigoSexo = 1;\r\n }\r\n\r\n // Datas para Date\r\n pessoa.dataNascimento = this.parseData(pessoa.dataNascimento as any);\r\n // Demais datas permanecem como string para compatibilidade com o model\r\n\r\n // Campos com 'codigo - label' -> codigo\r\n pessoa.codigoEstadoCivil = this.parseCodigo((pessoa as any).estadoCivil);\r\n pessoa.codigoPaisNascimento = this.parseCodigo((pessoa as any).paisNascimento);\r\n pessoa.escolaridade = this.parseCodigo((pessoa as any).escolaridade);\r\n\r\n // Endereços: ordem/uf\r\n pessoa.enderecos.forEach((end: any, i: number) => {\r\n end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);\r\n if (!end.ufEndereco && end.uf) end.ufEndereco = end.uf;\r\n\r\n // Mapeia tipo string para tipoEnderecoCodigo usando o cache\r\n if (!end.tipoEnderecoCodigo && end.tipo && this.tipoEnderecoCache) {\r\n const tipoEncontrado = this.tipoEnderecoCache.find(t => \r\n t.denominacao?.toLowerCase() === String(end.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) end.tipoEnderecoCodigo = tipoEncontrado.codigo;\r\n }\r\n\r\n // Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)\r\n if (!end.paisEnderecoCodigo && end.pais) {\r\n end.paisEnderecoCodigo = this.parseCodigo(end.pais);\r\n }\r\n });\r\n\r\n // Telefones: ordem e tipo\r\n pessoa.telefones.forEach((tel: any, i: number) => {\r\n tel.ordem = tel.ordem || (i + 1);\r\n \r\n // Mapeia tipo string para tipoTelefoneCodigo usando o cache\r\n if (!tel.tipoTelefoneCodigo && tel.tipo && this.tipoTelefoneCache) {\r\n const tipoEncontrado = this.tipoTelefoneCache.find(t => \r\n t.denominacao?.toLowerCase() === String(tel.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) tel.tipoTelefoneCodigo = tipoEncontrado.codigo;\r\n }\r\n });\r\n\r\n // Emails: ordem e tipo\r\n pessoa.emails.forEach((email: any, i: number) => {\r\n email.ordem = email.ordem || (i + 1);\r\n \r\n // Mapeia tipo string para tipoEmailCodigo usando o cache\r\n if (!email.tipoEmailCodigo && email.tipo && this.tipoEmailCache) {\r\n const tipoEncontrado = this.tipoEmailCache.find(t => \r\n t.denominacao?.toLowerCase() === String(email.tipo).toLowerCase()\r\n );\r\n if (tipoEncontrado) email.tipoEmailCodigo = tipoEncontrado.codigo;\r\n }\r\n });\r\n\r\n // Formata documento para UI\r\n if (pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA && pessoa.cpf) {\r\n const digits = String(pessoa.cpf).replace(/\\D/g, '');\r\n (pessoa as any).cpf = UnbUtils.formataCpf(digits);\r\n } else if (pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA && pessoa.cnpj) {\r\n const digits = String(pessoa.cnpj).replace(/\\D/g, '');\r\n (pessoa as any).cnpj = UnbUtils.formataCnpj(digits);\r\n }\r\n\r\n return pessoa;\r\n }\r\n\r\n private parseCodigo(valor: any): number | null {\r\n if (valor == null) return null;\r\n if (typeof valor === 'number') return valor;\r\n if (typeof valor !== 'string') return null;\r\n const sepIndex = valor.indexOf(' - ');\r\n if (sepIndex === -1) {\r\n const num = parseInt(valor, 10);\r\n return isNaN(num) ? null : num;\r\n }\r\n const codigo = parseInt(valor.substring(0, sepIndex).trim(), 10);\r\n return isNaN(codigo) ? null : codigo;\r\n }\r\n\r\n private parseData(dataString: any): Date | null {\r\n if (!dataString) return null;\r\n if (dataString instanceof Date) return dataString;\r\n if (typeof dataString !== 'string' || !dataString.includes('/')) return null;\r\n\r\n const partes = dataString.split('/');\r\n if (partes.length !== 3) return null;\r\n const dia = parseInt(partes[0], 10);\r\n const mes = parseInt(partes[1], 10) - 1;\r\n const ano = parseInt(partes[2], 10);\r\n const dataObj = new Date(ano, mes, dia);\r\n if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {\r\n return dataObj;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Converte uma instância (ou objeto) de UnbPessoaModel para o payload esperado pelo backend.\r\n */\r\n private convertPessoaToPayload(pessoa: UnbPessoaModel): any {\r\n if (!pessoa) return null;\r\n\r\n const enderecosPayload = (pessoa.enderecos || []).map((end: any) => ({\r\n ordemEndereco: end.ordemEndereco,\r\n tipoEnderecoCodigo: end.tipoEnderecoCodigo,\r\n municipioCodigo: end.municipioCodigo,\r\n paisEnderecoCodigo: end.paisEnderecoCodigo,\r\n logradouro: end.logradouro,\r\n complemento: end.complemento,\r\n cep: end.cep,\r\n bairro: end.bairro,\r\n ufEndereco: end.ufEndereco,\r\n caixaPostal: end.caixaPostal,\r\n correspondencia: end.correspondencia\r\n }));\r\n\r\n const telefonesPayload = (pessoa.telefones || []).map((tel: any) => ({\r\n ordemTelefone: tel.ordem,\r\n tipoTelefoneCodigo: tel.tipoTelefoneCodigo,\r\n ddi: tel.ddi,\r\n ddd: tel.ddd,\r\n numeroTelefone: tel.numero,\r\n ramal: tel.ramal,\r\n autorizaSMS: tel.autorizaSMS\r\n }));\r\n\r\n const emailsPayload = (pessoa.emails || []).map((email: any) => ({\r\n tipoEmailCodigo: email.tipoEmailCodigo,\r\n ordemEmail: email.ordem,\r\n email: email.email,\r\n autorizacao: email.autorizacao\r\n }));\r\n\r\n return {\r\n idPessoa: pessoa.idPessoa,\r\n codigoPessoa: pessoa.codigoPessoa,\r\n\r\n nome: pessoa.nome,\r\n nomeSocial: pessoa.nomeSocial,\r\n ...(pessoa.cpf && { cpf: pessoa.cpf.replace(/\\D/g, '') }),\r\n codigoSexo: pessoa.codigoSexo,\r\n codigoEstadoCivil: pessoa.codigoEstadoCivil,\r\n codigoEscolaridade: pessoa.escolaridade,\r\n nomePai: pessoa.nomePai,\r\n nomeMae: pessoa.nomeMae,\r\n\r\n dataNascimento: this.formatarDataParaBackend(pessoa.dataNascimento),\r\n codigoPaisNascimento: pessoa.codigoPaisNascimento,\r\n ufNascimento: pessoa.ufNascimento,\r\n naturalidade: pessoa.naturalidade,\r\n dataChegadaBrasil: this.formatarDataParaBackend(pessoa.dataChegadaBrasil as any),\r\n\r\n rg: pessoa.rg,\r\n rgOrgao: pessoa.rgOrgao,\r\n rgUf: pessoa.rgUf,\r\n rgDataEmissao: this.formatarDataParaBackend(pessoa.rgDataEmissao),\r\n\r\n numeroTituloEleitor: pessoa.numeroTituloEleitor,\r\n dataEmissaoTituloEleitor: this.formatarDataParaBackend(pessoa.dataEmissaoTituloEleitor),\r\n zonaTituloEleitor: pessoa.zonaTituloEleitor,\r\n secaoTituloEleitor: pessoa.secaoTituloEleitor,\r\n ufTituloEleitor: pessoa.ufTituloEleitor,\r\n\r\n numeroReservista: pessoa.numeroReservista,\r\n serieReservista: pessoa.serieReservista,\r\n orgaoReservista: pessoa.orgaoReservista,\r\n\r\n numeroCarteiraTrabalho: pessoa.numeroCarteiraTrabalho,\r\n serieCarteiraTrabalho: pessoa.serieCarteiraTrabalho,\r\n ufCarteiraTrabalho: pessoa.ufCarteiraTrabalho,\r\n pisPasep: pessoa.pisPasep,\r\n\r\n numeroHabilitacao: pessoa.numeroHabilitacao,\r\n registroHabilitacao: pessoa.registroHabilitacao,\r\n dataEmissaoHabilitacao: this.formatarDataParaBackend(pessoa.dataEmissaoHabilitacao),\r\n dataValidadeHabilitacao: this.formatarDataParaBackend(pessoa.dataValidadeHabilitacao),\r\n categoriaHabilitacao: pessoa.categoriaHabilitacao,\r\n deficienciaFisicaHabilitacao: pessoa.deficienciaFisicaHabilitacao,\r\n primeiraHabilitacao: this.formatarDataParaBackend(pessoa.primeiraHabilitacao),\r\n\r\n passaporte: pessoa.passaporte,\r\n codigoPaisPassaporte: pessoa.codigoPaisPassaporte,\r\n ...(pessoa.cnpj && { cnpj: pessoa.cnpj.replace(/\\D/g, '') }),\r\n razaoSocial: pessoa.razaoSocial,\r\n nomeFantasia: pessoa.nomeFantasia,\r\n sigla: pessoa.sigla,\r\n paginaWeb: pessoa.paginaWeb,\r\n\r\n autoCadastro: pessoa.autoCadastro,\r\n\r\n enderecos: enderecosPayload,\r\n telefones: telefonesPayload,\r\n emails: emailsPayload\r\n };\r\n }\r\n\r\n /**\r\n * Formata a data no padrão DD/MM/YYYY para o backend.\r\n */\r\n private formatarDataParaBackend(data: any): string | null {\r\n if (!data) return null;\r\n if (typeof data === 'string' && data.includes('/')) return data;\r\n\r\n try {\r\n const d = new Date(data);\r\n if (isNaN(d.getTime())) return null;\r\n\r\n const dia = String(d.getDate()).padStart(2, '0');\r\n const mes = String(d.getMonth() + 1).padStart(2, '0');\r\n const ano = d.getFullYear();\r\n return `${dia}/${mes}/${ano}`;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n\r\n // -------------------------------------------------------------------\r\n // HANDLE ERROR PADRONIZADO \r\n // -------------------------------------------------------------------\r\n private handleError = (error: any) => {\r\n let mensagemSimples = 'Ocorreu um erro ao processar a requisição!';\r\n let mensagemHtml = '<strong>Ocorreu um erro desconhecido.</strong>';\r\n\r\n // 2. Descobre quem é o corpo do erro\r\n let errorBody: any;\r\n\r\n if (error.detalhes || error.codigoStatus) {\r\n // CASO 1: O Interceptor já desembrulhou o erro (é o JSON puro)\r\n errorBody = error;\r\n } else {\r\n // CASO 2: É um HttpErrorResponse padrão (tem a propriedade .error)\r\n errorBody = error.error || error;\r\n }\r\n\r\n // 3. Lógica de Limpeza e Parse (se for string suja)\r\n if (typeof errorBody === 'string') {\r\n try {\r\n errorBody = JSON.parse(errorBody);\r\n } catch (e) {\r\n const start = errorBody.indexOf('{');\r\n const end = errorBody.lastIndexOf('}');\r\n if (start > -1 && end > start) {\r\n try {\r\n errorBody = JSON.parse(errorBody.substring(start, end + 1));\r\n } catch (e2) {\r\n // Se falhar o parse, usa o texto como mensagem\r\n mensagemSimples = errorBody.substring(0, 200);\r\n mensagemHtml = `<strong>${errorBody}</strong>`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 4. Formatação baseada no JSON identificado\r\n if (errorBody && typeof errorBody === 'object') {\r\n\r\n // A: Erros de Validação\r\n if (errorBody.detalhes && Array.isArray(errorBody.detalhes) && errorBody.detalhes.length > 0) {\r\n mensagemSimples = \"O formulário possui erros de validação.\";\r\n\r\n const listaErros = errorBody.detalhes.map((d: any) =>\r\n `<li><strong>${d.nomeCampo || 'Campo'}:</strong> ${d.critica || d.mensagem}</li>`\r\n ).join('');\r\n\r\n mensagemHtml = `<strong>Erros de Validação:</strong> <ul>${listaErros}</ul>`;\r\n }\r\n // B: Erro Genérico com mensagem\r\n else {\r\n const msgBackend = errorBody.mensagem || errorBody.message || errorBody.detail;\r\n if (msgBackend) {\r\n mensagemSimples = msgBackend;\r\n mensagemHtml = `<strong>${msgBackend}</strong>`;\r\n }\r\n }\r\n }\r\n\r\n // 5. Tratamentos de Status HTTP (Se o wrapper original tiver status)\r\n // Nota: Se o interceptor desembrulhou, 'error.status' pode não existir, \r\n // mas 'errorBody.codigoStatus' (do Java) pode existir.\r\n const status = error.status || errorBody?.codigoStatus || 0;\r\n\r\n if (status === 401) {\r\n mensagemSimples = \"Sessão expirada.\";\r\n mensagemHtml = \"<strong>Sessão expirada. Faça login novamente.</strong>\";\r\n } else if (status === 403) {\r\n mensagemSimples = \"Acesso Negado.\";\r\n mensagemHtml = \"<strong>Você não tem permissão para realizar esta ação.</strong>\";\r\n }\r\n\r\n const erroFormatado: UnbPessoaErroPadrao = {\r\n status: status,\r\n mensagemSimples,\r\n mensagemHtml\r\n };\r\n\r\n console.warn('[UnBPessoaService] Erro formatado final:', erroFormatado);\r\n return throwError(() => erroFormatado);\r\n }\r\n}","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-form',\r\n templateUrl: './unb-pessoa-email-form.html',\r\n styleUrl: './unb-pessoa-email-form.css'\r\n})\r\nexport class UnbPessoaEmailFormComponent implements OnInit {\r\n emailSalvo!: UnbPessoaEmail;\r\n email = new UnbPessoaEmail();\r\n emailsList: UnbPessoaEmail[];\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n idMensagemService = \"UnbPessoaEmailForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaEmailFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.email = JSON.parse(JSON.stringify(data.email)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.emailsList) {\r\n this.emailsList = JSON.parse(JSON.stringify(data.emailsList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.emailsList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.email) {\r\n this.email = new UnbPessoaEmail();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // Chamamos o serviço direto. Não guardamos o observable, apenas o resultado.\r\n this.service.getTipoEmail().subscribe({\r\n next: (lista) => {\r\n // 1. Guarda a lista para o HTML usar\r\n this.listaTipoEmail = lista;\r\n\r\n // 2. Lógica de Seleção Automática (Match)\r\n if (this.email.tipoEmailCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.email.tipoEmailCodigo);\r\n if (tipoEncontrado) {\r\n this.email.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.email.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.email.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.email.tipoEmailCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n },\r\n // 3. Usa seu tratamento de erro novo\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // 1. Define o 'tipo' padrão (ex: 1 para 'Pessoal') se não for preenchido\r\n if (!this.email.tipoEmailCodigo) {\r\n this.email.tipoEmailCodigo = 1; // 1 é geralmente 'Pessoal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemEmail')\r\n if (!this.email.ordem || this.email.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de emails já existe e tem itens\r\n if (this.emailsList && this.emailsList.length > 0) {\r\n maxOrdem = Math.max(...this.emailsList.map(e => e.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo email como a maior ordem + 1\r\n this.email.ordem = maxOrdem + 1;\r\n }\r\n // --- Fim da Modificação ---\r\n\r\n if (this.validar(this.email) == false) return;\r\n\r\n this.emailSalvo = this.email;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEmail.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.email.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n /**\r\n * Valida o objeto de e-mail, replicando as regras do validador do backend.\r\n * Retorna true se o e-mail for válido, false caso contrário.\r\n */\r\n validar(emailToValidate: UnbPessoaEmail): boolean {\r\n\r\n // 1. Validação de campo obrigatório (do Java)\r\n if (!emailToValidate.email || emailToValidate.email.trim() === '') {\r\n this.openSnackBar(\"E-mail é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Tamanho Máximo (do Java)\r\n if (emailToValidate.email.trim().length > 60) {\r\n this.openSnackBar(\"E-mail deve ter no máximo 60 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de formato de e-mail (do Java e do Angular)\r\n // [Java: !Validadores.validarEmail(request.getEmail())]\r\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n if (!emailRegex.test(emailToValidate.email)) {\r\n this.openSnackBar(\"Digite um E-mail válido.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de e-mail duplicado (do seu Angular)\r\n const isDuplicate = this.emailsList.some(existingEmail =>\r\n existingEmail.email?.toLowerCase() === emailToValidate.email?.toLowerCase() &&\r\n existingEmail.codigo !== emailToValidate.codigo // Ignora o próprio e-mail se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este e-mail já existe na lista.\");\r\n return false;\r\n }\r\n\r\n // Nota: As validações de 'ordemEmail' e 'tipoEmailCodigo' do Java\r\n // já são tratadas na sua função 'salvar()',\r\n // que atribui valores padrão antes desta função 'validar()' ser chamada.\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.emailSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"email.tipoEmailCodigo\" [compareWith]=\"compararTipos\" name=\"tipoEmailCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoEmail\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>E-mail</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"email.email\" name=\"emailValue\" #emailValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","export class UnbPessoaEndereco {\r\n codigo?: number;\r\n tipoEnderecoCodigo?: number;\r\n tipo?: string;\r\n cep?: string;\r\n logradouro?: string;\r\n municipio?: string;\r\n bairro?: string;\r\n ufEndereco?: string; \r\n uf?: string;\r\n pais?: string;\r\n complemento?: string;\r\n caixaPostal?: string;\r\n correspondencia?: boolean;\r\n ordemEndereco?: number | null;\r\n ordem?: number;\r\n paisEnderecoCodigo?: number | null;\r\n municipioCodigo?: number;\r\n}\r\n\r\nexport class UnbPessoaEnderecoTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaEndereco, UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\n\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-form',\r\n templateUrl: './unb-pessoa-endereco-form.html',\r\n styleUrl: './unb-pessoa-endereco-form.css'\r\n})\r\nexport class UnbPessoaEnderecoFormComponent implements OnInit {\r\n\r\n enderecoSalvo!: UnbPessoaEndereco;\r\n endereco = new UnbPessoaEndereco();\r\n enderecosList: UnbPessoaEndereco[];\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaPaises: UnbPessoaPais[] = [];\r\n paises!: Observable<UnbPessoaPais[]>;\r\n loading: boolean = false;\r\n\r\n idMensagemService = \"UnbPessoaEnderecoForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaEnderecoFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.endereco = JSON.parse(JSON.stringify(data.endereco)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.enderecosList) {\r\n this.enderecosList = JSON.parse(JSON.stringify(data.enderecosList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.enderecosList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.endereco) {\r\n this.endereco = new UnbPessoaEndereco();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // --- Preenche o Tipos de Endereço ---\r\n this.service.getTipoEndereco().subscribe({\r\n next: (lista) => {\r\n this.listaTipoEndereco = lista;\r\n\r\n // Se já tiver tipoEnderecoCodigo, preenche o nome correspondente\r\n if (this.endereco.tipoEnderecoCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.endereco.tipoEnderecoCodigo);\r\n if (tipoEncontrado) {\r\n this.endereco.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.endereco.tipo) {\r\n // Se tiver só o nome, preenche o código\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.endereco.tipo?.toLowerCase()\r\n );\r\n\r\n if (tipoEncontrado) {\r\n this.endereco.tipoEnderecoCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n\r\n // O metodo get retorna uf, mas o put espera ufEndereco\r\n if (this.endereco.uf) {\r\n this.endereco.ufEndereco = this.endereco.uf; // Converte uf para ufEndereco\r\n }\r\n },\r\n // Tratamento de erro no carregamento da lista\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n \r\n // --- Preenche o País ---\r\n this.service.getPaises().subscribe({\r\n next: (listaDePaises) => {\r\n this.listaPaises = listaDePaises; // Armazena a lista de países\r\n\r\n const CODIGO_BRASIL = 22; // Código padrão para o Brasil\r\n\r\n // Lógica 1: Se o ID do país já existe (ex: 22), encontra o nome (ex: \"Brasil\")\r\n if (this.endereco.paisEnderecoCodigo != null) {\r\n const paisEncontrado = this.listaPaises.find(p => p.codigo === this.endereco.paisEnderecoCodigo);\r\n if (paisEncontrado) {\r\n this.endereco.pais = paisEncontrado.denominacao;\r\n }\r\n }\r\n // Lógica 2: Se o nome do país existe (ex: \"Brasil\"), encontra o ID (ex: 22)\r\n else if (this.endereco.pais) {\r\n const paisEncontrado = this.listaPaises.find(\r\n p => p.denominacao?.toLowerCase() === this.endereco.pais?.toLowerCase()\r\n );\r\n\r\n if (paisEncontrado) {\r\n this.endereco.paisEnderecoCodigo = paisEncontrado.codigo;\r\n } else {\r\n // Se o nome foi fornecido mas não encontrado na lista, assume Brasil\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n }\r\n // Lógica 3: Se nem o ID nem o nome existem, assume Brasil por padrão\r\n else {\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // Se a ordemEndereco não estiver definida (novo item) ou for 0\r\n if (!this.endereco.ordemEndereco || this.endereco.ordemEndereco === 0) {\r\n let maxOrdem = 0;\r\n if (this.enderecosList && this.enderecosList.length > 0) {\r\n maxOrdem = Math.max(...this.enderecosList.map(e => e.ordemEndereco || 0));\r\n }\r\n this.endereco.ordemEndereco = maxOrdem + 1;\r\n }\r\n\r\n if (this.validar(this.endereco) == false) return;\r\n\r\n this.enderecoSalvo = this.endereco;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1.codigo === t2.codigo;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEndereco.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.endereco.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n pesquisarCep() {\r\n if (this.endereco.cep && this.endereco.cep.trim() !== '') {\r\n this.loading = true;\r\n let cepFormatado = this.endereco.cep.replace(/\\D/g, ''); // Remove caracteres não numéricos\r\n if (cepFormatado.length !== 8) {\r\n this.handleError('O CEP deve conter exatamente 8 números.');\r\n return;\r\n }\r\n\r\n this.service.pesquisarCep(cepFormatado).subscribe({\r\n next: (data: any) => {\r\n this.loading = false;\r\n if (data.erro === 'true' || data.erro === true) {\r\n this.handleError('CEP não encontrado.');\r\n return; // Para a execução aqui\r\n }\r\n\r\n this.endereco.logradouro = data.logradouro;\r\n this.endereco.bairro = data.bairro;\r\n this.endereco.ufEndereco = data.uf;\r\n this.endereco.uf = data.uf;\r\n this.endereco.complemento = data.complemento;\r\n \r\n },\r\n error: (err: UnbPessoaErroPadrao) => {\r\n this.loading = false;\r\n \r\n if (err.status === 400) {\r\n this.handleError('CEP inválido ou formato incorreto.');\r\n } else if (err.status === 404) {\r\n this.handleError('CEP não encontrado.');\r\n } else {\r\n // Se for 500 ou outro erro, mostra a mensagem original do service\r\n this.handleError(err);\r\n }\r\n }\r\n });\r\n } else {\r\n this.handleError('Por favor, insira um CEP válido.');\r\n }\r\n }\r\n\r\n getListaEstados(): any {\r\n return [\r\n 'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA',\r\n 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN',\r\n 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO'\r\n ];\r\n }\r\n\r\n /**\r\n * Valida o objeto de endereço, replicando as regras do validador do backend.\r\n * Retorna true se o endereço for válido, false caso contrário.\r\n */\r\n validar(enderecoToValidate: UnbPessoaEndereco): boolean {\r\n\r\n // 1. Validação de tipoEnderecoCodigo (Obrigatório e 0-4)\r\n // [Java: request.getTipoEnderecoCodigo() == null]\r\n if (enderecoToValidate.tipoEnderecoCodigo == null) {\r\n this.handleError(\"Tipo de Endereço é um campo obrigatório.\");\r\n return false;\r\n }\r\n // [Java: request.getTipoEnderecoCodigo() < (byte) 0 || request.getTipoEnderecoCodigo() > (byte) 4]\r\n if (enderecoToValidate.tipoEnderecoCodigo < 0 || enderecoToValidate.tipoEnderecoCodigo > 4) {\r\n this.handleError(\"Tipo de Endereço é inválido (deve ser entre 0 e 4).\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de CEP (8 dígitos, se preenchido)\r\n // [Java: request.getCep().trim().length() != 8]\r\n if (enderecoToValidate.cep && enderecoToValidate.cep.trim() !== '') {\r\n const cepLimpo = enderecoToValidate.cep.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (cepLimpo.length !== 8) {\r\n this.handleError(\"CEP deve conter 8 dígitos.\");\r\n return false;\r\n }\r\n }\r\n\r\n // 4. Validação de Logradouro (Max 100, se preenchido)\r\n // [Java: request.getLogradouro().trim().length() > 100]\r\n if (enderecoToValidate.logradouro && enderecoToValidate.logradouro.trim().length > 100) {\r\n this.handleError(\"Logradouro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de Bairro (Max 100, se preenchido)\r\n // [Java: request.getBairro().trim().length() > 100]\r\n if (enderecoToValidate.bairro && enderecoToValidate.bairro.trim().length > 100) {\r\n this.handleError(\"Bairro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Complemento (Max 100, se preenchido)\r\n // [Java: request.getComplemento().trim().length() > 100]\r\n if (enderecoToValidate.complemento && enderecoToValidate.complemento.trim().length > 100) {\r\n this.handleError(\"Complemento deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 7. Validação de Caixa Postal (Max 100, se preenchida)\r\n // [Java: request.getCaixaPostal().trim().length() > 100]\r\n if (enderecoToValidate.caixaPostal && enderecoToValidate.caixaPostal.trim().length > 100) {\r\n this.handleError(\"Caixa Postal deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 8. Validação de UF (2 caracteres, se preenchida)\r\n // O form usa 'ufEndereco', o java usa 'uf'. O ngOnInit mapeia uf -> ufEndereco.\r\n // [Java: request.getUf().trim().length() != 2]\r\n if (enderecoToValidate.ufEndereco && enderecoToValidate.ufEndereco.trim().length !== 2) {\r\n this.handleError(\"UF deve ter 2 caracteres.\");\r\n return false;\r\n }\r\n\r\n // --- Validação de Duplicar ---\r\n const isDuplicate = this.enderecosList.some(existingEndereco =>\r\n existingEndereco.logradouro?.toLowerCase() === enderecoToValidate.logradouro?.toLowerCase() &&\r\n existingEndereco.codigo !== enderecoToValidate.codigo // Ignora o próprio endereço se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este endereço já existe na lista.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.enderecoSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n \r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de Endereço</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.tipoEnderecoCodigo\" name=\"tipo\" #tipo=\"ngModel\"\r\n (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoEndereco\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País</mat-label>\r\n\r\n <mat-select [(ngModel)]=\"endereco.paisEnderecoCodigo\" name=\"paisEnderecoCodigo\" #paisEnderecoCodigo=\"ngModel\">\r\n\r\n <mat-option *ngFor=\"let paises of listaPaises\" [value]=\"paises.codigo\">\r\n <span *ngIf=\"paises.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paises.denominacao }}</b></span>\r\n <span *ngIf=\"paises.denominacao !== 'BRASIL'\">{{ paises.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>CEP</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.cep\" name=\"cep\" #cep=\"ngModel\" />\r\n\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" \r\n [disabled]=\"loading\" (click)=\"pesquisarCep()\">\r\n \r\n <ng-container *ngIf=\"!loading; else loadingIcon\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon>\r\n </ng-container>\r\n\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner \r\n [diameter]=\"20\" \r\n mode=\"indeterminate\" \r\n color=\"primary\" \r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n\r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Endereço</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.logradouro\" name=\"logradouro\" #logradouro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Bairro</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.bairro\" name=\"bairro\" #bairro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Complemento</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.complemento\" name=\"complemento\" #complemento=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>UF</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.uf\" name=\"uf\" #uf=\"ngModel\">\r\n <mat-option *ngFor=\"let uf of getListaEstados()\" [value]=\"uf\">\r\n {{ uf }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","export const listaEstados = [\r\n { codigo: 1, identificador: 'AC', descricao: \"Acre\" },\r\n { codigo: 2, identificador: 'AL', descricao: \"Alagoas\" },\r\n { codigo: 3, identificador: 'AM', descricao: \"Amazonas\" },\r\n { codigo: 4, identificador: 'AP', descricao: \"Amapá\" },\r\n { codigo: 5, identificador: 'BA', descricao: \"Bahia\" },\r\n { codigo: 6, identificador: 'CE', descricao: \"Ceará\" },\r\n { codigo: 7, identificador: 'DF', descricao: \"Distrito Federal\" },\r\n { codigo: 8, identificador: 'ES', descricao: \"Espírito Santo\" },\r\n { codigo: 9, identificador: 'GO', descricao: \"Goiás\" },\r\n { codigo: 10, identificador: 'MA', descricao: \"Maranhão\" },\r\n { codigo: 11, identificador: 'MG', descricao: \"Minas Gerais\" },\r\n { codigo: 12, identificador: 'MS', descricao: \"Mato Grosso do Sul\" },\r\n { codigo: 13, identificador: 'MT', descricao: \"Mato Grosso\" },\r\n { codigo: 14, identificador: 'PA', descricao: \"Pará\" },\r\n { codigo: 15, identificador: 'PB', descricao: \"Paraíba\" },\r\n { codigo: 16, identificador: 'PE', descricao: \"Pernambuco\" },\r\n { codigo: 17, identificador: 'PI', descricao: \"Piauí\" },\r\n { codigo: 18, identificador: 'PR', descricao: \"Paraná\" },\r\n { codigo: 19, identificador: 'RJ', descricao: \"Rio de Janeiro\" },\r\n { codigo: 20, identificador: 'RN', descricao: \"Rio Grande do Norte\" },\r\n { codigo: 21, identificador: 'RO', descricao: \"Rondônia\" },\r\n { codigo: 22, identificador: 'RR', descricao: \"Roraima\" },\r\n { codigo: 23, identificador: 'RS', descricao: \"Rio Grande do Sul\" },\r\n { codigo: 24, identificador: 'SC', descricao: \"Santa Catarina\" },\r\n { codigo: 25, identificador: 'SE', descricao: \"Sergipe\" },\r\n { codigo: 26, identificador: 'SP', descricao: \"São Paulo\" },\r\n { codigo: 27, identificador: 'TO', descricao: \"Tocantins\" }\r\n];","import { UnbTipoPessoaEnum } from \"../unb-tipo-pessoa.enum\";\r\nimport { UnbPessoaModel } from \"./unb-pessoa.model\";\r\n/** \r\n * Essa eh uma classe base, com propriedades comum ao componente de pesquisa de pesssoa. Porque tem vários campos que são usados para configurar o comportamento do componente. \r\n * */\r\nexport class UnbPessoaPesquisaConfig {\r\n backendURL: string = \"\"; \r\n token: string = \"\"; // usado para testar autenticação no backend se necessário.\r\n\r\n // Flags com valores padrão (já resolve o booleano)\r\n defaultTipoPessoa: UnbTipoPessoaEnum | 'FISICA' | 'JURIDICA' | 'ESTRANGEIRA' = UnbTipoPessoaEnum.FISICA;\r\n pesquisarPorCPF: boolean = true;\r\n pesquisarPorCNPJ: boolean = true;\r\n pesquisarPorEstrangeiro: boolean = false;\r\n \r\n // UI\r\n mostrarPesquisa: boolean = true;\r\n limparAposPesquisa: boolean = false;\r\n \r\n // Textos\r\n label: string = \"Digite o CPF/CNPJ ou Passaporte\";\r\n placeholder = \"\";\r\n hint = \"\";\r\n \r\n // Construtor opcional para facilitar a criação (atalho)\r\n constructor(init?: Partial<UnbPessoaPesquisaConfig>) {\r\n Object.assign(this, init);\r\n }\r\n\r\n}\r\nexport class UnbPessoaFormConfig {\r\n backendURL: string = \"\";\r\n token: string = \"\";\r\n isReadyOnly: boolean = false;\r\n\r\n pessoa = new UnbPessoaModel();\r\n\r\n constructor(init?: Partial<UnbPessoaFormConfig>) {\r\n Object.assign(this, init);\r\n }\r\n}"," export class UnbPessoaTelefone {\r\n codigo?: number;\r\n tipo?: string;\r\n tipoTelefoneCodigo?: number;\r\n ddi?: string;\r\n ddd?: string;\r\n numero?: string;\r\n ramal?: string;\r\n autorizaSMS?: boolean;\r\n ordem?: number;\r\n nomeResponsavel?: string;\r\n \t\r\n // usado pelo componente unb-pesoa-form, pra indicar que o usuario estah editando\r\n modoEdicao = false; \r\n }\r\n\r\n export class UnbPessoaTelefoneTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n }","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-form',\r\n templateUrl: './unb-pessoa-telefone-form.html',\r\n styleUrl: './unb-pessoa-telefone-form.css'\r\n})\r\nexport class UnbPessoaTelefoneFormComponent implements OnInit {\r\n telefoneSalvo!: UnbPessoaTelefone;\r\n telefone = new UnbPessoaTelefone();\r\n telefonesList: UnbPessoaTelefone[];\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n idMensagemService = \"UnbPessoaTelefoneForm\";\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, private alertService: UnbMensagemService, public dialogRef: MatDialogRef<UnbPessoaTelefoneFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.telefone = JSON.parse(JSON.stringify(data.telefone)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.telefonesList) {\r\n this.telefonesList = JSON.parse(JSON.stringify(data.telefonesList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.telefonesList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.telefone) {\r\n this.telefone = new UnbPessoaTelefone();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.service.getTipoTelefone().subscribe({\r\n next: (lista) => {\r\n this.listaTipoTelefone = lista;\r\n\r\n // Se já tiver tipoTelefoneCodigo, preenche o nome correspondente\r\n if (this.telefone.tipoTelefoneCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.telefone.tipoTelefoneCodigo);\r\n if (tipoEncontrado) {\r\n this.telefone.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.telefone.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.telefone.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.telefone.tipoTelefoneCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => this.handleError(err)\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid ) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n // 1. Define o 'tipo' padrão (1) se não for preenchido (Conforme sua solicitação)\r\n if (!this.telefone.tipoTelefoneCodigo) {\r\n this.telefone.tipoTelefoneCodigo = 1; // 1 é geralmente 'Residencial' ou 'Principal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemTelefone')\r\n if (!this.telefone.ordem || this.telefone.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de telefones já existe e tem itens\r\n if (this.telefonesList && this.telefonesList.length > 0) {\r\n maxOrdem = Math.max(...this.telefonesList.map(t => t.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo telefone como a maior ordem + 1\r\n this.telefone.ordem = maxOrdem + 1;\r\n }\r\n if (this.validar(this.telefone) == false) return;\r\n\r\n this.telefoneSalvo = this.telefone;\r\n this.salvarclose();\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoTelefone.find(t => t.codigo === codigoSelecionado); // <--- Renomeado de listaTipoEndereco\r\n if (tipoSelecionado) {\r\n this.telefone.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Valida o objeto de telefone com base nas regras do backend.\r\n * Retorna true se o telefone for válido, false caso contrário.\r\n */\r\n validar(telefoneToValidate: UnbPessoaTelefone): boolean {\r\n \r\n // 1. Validação de Número (Obrigatório)\r\n if (!telefoneToValidate.numero || telefoneToValidate.numero.trim() === '') {\r\n this.openSnackBar(\"Número do telefone é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Número (Formato)\r\n // que ele espera 8 ou 9 dígitos numéricos (padrão Brasil).\r\n const numeroLimpo = telefoneToValidate.numero.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (numeroLimpo.length !== 9) {\r\n this.openSnackBar(\"Número do telefone deve conter exatamente 9 dígitos.\");\r\n return false;\r\n }\r\n \r\n // 3. Validação de DDD (Obrigatório - Boa prática, embora o Java não exija)\r\n if (!telefoneToValidate.ddd || telefoneToValidate.ddd.trim() === '') {\r\n this.openSnackBar(\"DDD é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de DDD (Tamanho Máximo)\r\n if (telefoneToValidate.ddd.trim().length > 3) {\r\n this.openSnackBar(\"DDD deve ter no máximo 3 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de DDI (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ddi && telefoneToValidate.ddi.trim().length > 5) {\r\n this.openSnackBar(\"DDI deve ter no máximo 5 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Ramal (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ramal && telefoneToValidate.ramal.trim().length > 6) {\r\n this.openSnackBar(\"Ramal deve ter no máximo 6 caracteres.\");\r\n return false;\r\n }\r\n \r\n // 7. Validação de NomeResponsavel (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.nomeResponsavel && telefoneToValidate.nomeResponsavel.trim().length > 100) {\r\n this.openSnackBar(\"Nome do Responsável deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.telefoneSalvo);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // Converte string local em Objeto Padrão\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400,\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n erroTratado = erro;\r\n }\r\n\r\n // 1. SnackBar\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. AlertService (Se houver tag <unb-mensagem> no HTML do dialog)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de Telefone</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"telefone.tipoTelefoneCodigo\" [compareWith]=\"compararTipos\" name=\"tipoTelefoneCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of listaTipoTelefone\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>DDD</mat-label>\r\n <input type=\"text\" maxlength=\"3\" required matInput [(ngModel)]=\"telefone.ddd\" name=\"dddValue\" #dddValue=\"ngModel\" />\r\n </mat-form-field> \r\n \r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Número</mat-label>\r\n <input type=\"text\" required maxlength=\"9\" matInput [(ngModel)]=\"telefone.numero\" name=\"telefoneValue\" #telefoneValue=\"ngModel\" />\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-list',\r\n templateUrl: './unb-pessoa-telefone-list.html',\r\n styleUrl: './unb-pessoa-telefone-list.css'\r\n})\r\nexport class UnbPessoaTelefoneListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() telefones: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() telefonesEmitted = new EventEmitter<UnbPessoaTelefone[]>();\r\n\r\n tipoTelefone!: Observable<UnbPessoaTelefoneTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoTelefone = this.service.getTipoTelefone();\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista de telefones\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'telefones' mudou\r\n if (changes['telefones'] && this.telefones) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder(); \r\n }\r\n }\r\n\r\n excluir(telefoneParaExcluir: UnbPessoaTelefone) {\r\n if (telefoneParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.telefones = this.telefones.filter(t => t.codigo !== telefoneParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.telefones = this.telefones.filter(t => t.ordem !== telefoneParaExcluir.ordem);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n editar(telefone: UnbPessoaTelefoneTipo) {\r\n this.openFormDialog(telefone);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.telefones.forEach((telefone, idx) => {\r\n telefone.ordem = idx + 1;\r\n });\r\n\r\n // reemite a lista atualizada, igual antes\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n openFormDialog(toEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaTelefoneFormComponent, {\r\n width: '900px',\r\n data: {\r\n telefone: toEdit, // E-mail a ser editado ou vazio para novo\r\n telefonesList: this.telefones // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.telefones.findIndex(t => t.codigo === result.codigo);\r\n }\r\n \r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n // A 'ordem' é o nosso identificador único para itens que\r\n // ainda não foram salvos no banco (criados/editados localmente).\r\n if (index === -1 && result.ordem) {\r\n index = this.telefones.findIndex(t => t.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.telefones[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n // O form (unb-pessoa-telefone-form) já cuidou de\r\n // atribuir a 'ordem' correta (maxOrdem + 1)\r\n this.telefones.push(result);\r\n }\r\n\r\n // vamos apenas re-ordenar a lista pela 'ordem' que já temos\r\n // e depois emitir.\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.telefonesEmitted.emit(this.telefones);\r\n });\r\n }\r\n\r\n moverTelefone(event: CdkDragDrop<any[]>) {\r\n // troca a posição dentro do array\r\n moveItemInArray(this.telefones, event.previousIndex, event.currentIndex);\r\n\r\n // atualiza o campo 'ordem' em cada item\r\n this.atualizarOrdem();\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista para não modificar a original durante a iteração inicial\r\n const tempEmails = [...this.telefones];\r\n\r\n // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes\r\n const orderMap = new Map<number, UnbPessoaTelefone[]>();\r\n const emailsWithoutOrder: UnbPessoaTelefone[] = [];\r\n\r\n tempEmails.forEach(telefone => {\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!orderMap.has(telefone.ordem)) {\r\n orderMap.set(telefone.ordem, []);\r\n }\r\n orderMap.get(telefone.ordem)?.push(telefone);\r\n } else {\r\n emailsWithoutOrder.push(telefone);\r\n }\r\n });\r\n\r\n // 3. Inicialize um Set para rastrear todas as ordens que serão usadas no final\r\n const finalUsedOrders = new Set<number>();\r\n // Inicialize o próximo valor de ordem disponível\r\n let nextAvailableOrder = 0;\r\n\r\n // Função auxiliar para encontrar a próxima ordem disponível\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe telefones com ordem definida:\r\n // - A primeira ocorrência de uma ordem a mantém.\r\n // - Duplicatas recebem uma nova ordem.\r\n // - Adicione as ordens válidas ao finalUsedOrders.\r\n this.telefones.forEach(telefone => { // Iterar sobre a lista original para modificar in-place\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!finalUsedOrders.has(telefone.ordem)) {\r\n // Se a ordem ainda não foi usada, use-a e adicione ao set\r\n finalUsedOrders.add(telefone.ordem);\r\n } else {\r\n // Se a ordem já foi usada (é uma duplicata), atribua uma nova\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para telefones que não tinham ordem definida\r\n emailsWithoutOrder.forEach(telefone => {\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n });\r\n\r\n // 6. Finalmente, ordene a lista completa com as ordens agora únicas\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n }\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ telefones?.length === 1 ? 'Telefone Cadastrado' : 'Telefones Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ telefones?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Telefone\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Telefone\r\n </button>\r\n </div>\r\n\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"telefones && telefones.length > 0\" cdkDropList (cdkDropListDropped)=\"moverTelefone($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th style=\"width: 20%;\">DDD</th>\r\n <th>Número</th> \r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of telefones; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"text-align: center;\"> \r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.ddd }}</td> \r\n <td>{{ valor.numero }}</td> \r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n</table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-list',\r\n templateUrl: './unb-pessoa-endereco-list.html',\r\n styleUrl: './unb-pessoa-endereco-list.css'\r\n})\r\nexport class UnbPessoaenderecoListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() enderecos: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() enderecosEmitted = new EventEmitter<UnbPessoaEndereco[]>();\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sortAndAssignOrder(); // organiza a lista de enderecos. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'enderecos' mudou\r\n if (changes['enderecos'] && this.enderecos) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(enderecoParaExcluir: UnbPessoaEndereco) {\r\n if (enderecoParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.enderecos = this.enderecos.filter(t => t.codigo !== enderecoParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.enderecos = this.enderecos.filter(t => t.ordemEndereco !== enderecoParaExcluir.ordemEndereco);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(endereco: UnbPessoaEndereco) {\r\n this.openFormDialog(endereco);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.enderecos.forEach((endereco, idx) => {\r\n endereco.ordemEndereco = idx + 1;\r\n });\r\n\r\n this.enderecosEmitted.emit(this.enderecos);\r\n }\r\n\r\n openFormDialog(enderecoToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEnderecoFormComponent, {\r\n width: '900px',\r\n data: {\r\n endereco: enderecoToEdit, // E-mail a ser editado ou vazio para novo\r\n enderecosList: this.enderecos // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.enderecos.findIndex(t => t.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordemEndereco) {\r\n index = this.enderecos.findIndex(t => t.ordemEndereco === result.ordemEndereco);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.enderecos[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição) adiciona no fim\r\n this.enderecos.push(result);\r\n }\r\n\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n this.enderecosEmitted.emit([...this.enderecos]);\r\n\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.enderecos, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempenderecos = [...this.enderecos];\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEndereco[]>();\r\n const enderecosWithoutOrder: UnbPessoaEndereco[] = [];\r\n\r\n tempenderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!orderMap.has(endereco.ordemEndereco)) {\r\n orderMap.set(endereco.ordemEndereco, []);\r\n }\r\n orderMap.get(endereco.ordemEndereco)?.push(endereco);\r\n } else {\r\n enderecosWithoutOrder.push(endereco);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe enderecos com ordem definida:\r\n this.enderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!finalUsedOrders.has(endereco.ordemEndereco)) {\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n endereco.ordemEndereco = getNextAvailableOrder();\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para enderecos que não tinham ordem\r\n enderecosWithoutOrder.forEach(endereco => {\r\n endereco.ordemEndereco = getNextAvailableOrder(); //\r\n finalUsedOrders.add(endereco.ordemEndereco); //\r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n }\r\n\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endereço Cadastrado' : 'Endereços Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endereço\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endereço\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-list',\r\n templateUrl: './unb-pessoa-email-list.html',\r\n styleUrl: './unb-pessoa-email-list.css'\r\n})\r\nexport class UnbPessoaEmailListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() emails: any = [];\r\n @Input() backendURL: string = '';\r\n @Output() emailsEmitted = new EventEmitter<UnbPessoaEmail[]>();\r\n\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoEmail = this.service.getTipoEmail();\r\n\r\n this.sortAndAssignOrder(); // organiza a lista de emails. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'emails' mudou\r\n if (changes['emails'] && this.emails) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(emailParaExcluir: UnbPessoaEmail) { // <-- TIPO CORRIGIDO\r\n\r\n if (emailParaExcluir.codigo) {\r\n // Se tem código, remove por ele\r\n this.emails = this.emails.filter(e => e.codigo !== emailParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.emails = this.emails.filter(e => e.ordem !== emailParaExcluir.ordem);\r\n }\r\n\r\n // Chama sua função existente que re-calcula as ordens e emite a lista\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(email: UnbPessoaEmailTipo) {\r\n this.openFormDialog(email);\r\n }\r\n\r\n\r\n atualizarOrdem() {\r\n this.emails.forEach((email, idx) => {\r\n email.ordem = idx + 1;\r\n });\r\n\r\n this.emailsEmitted.emit([...this.emails]);\r\n }\r\n\r\n openFormDialog(emailToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEmailFormComponent, {\r\n width: '900px',\r\n data: {\r\n email: emailToEdit, // E-mail a ser editado ou vazio para novo\r\n emailsList: this.emails // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.emails.findIndex(e => e.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordem) {\r\n index = this.emails.findIndex(e => e.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.emails[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n this.emails.push(result);\r\n }\r\n\r\n // Re-ordena a lista pela 'ordem' e emite uma *nova cópia*\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.emailsEmitted.emit([...this.emails]); // <-- Emite nova cópia\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.emails, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\nprivate sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempEmails = [...this.emails]; // <-- NOME CORRIGIDO\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEmail[]>();\r\n const emailsWithoutOrder: UnbPessoaEmail[] = [];\r\n\r\n tempEmails.forEach(email => {\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!orderMap.has(email.ordem)) {\r\n orderMap.set(email.ordem, []);\r\n }\r\n orderMap.get(email.ordem)?.push(email);\r\n } else {\r\n emailsWithoutOrder.push(email);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe emails com ordem definida:\r\n this.emails.forEach(email => { // <-- NOME CORRIGIDO\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!finalUsedOrders.has(email.ordem)) {\r\n finalUsedOrders.add(email.ordem);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n email.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(email.ordem);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para emails que não tinham ordem\r\n emailsWithoutOrder.forEach(email => { // <-- NOME CORRIGIDO\r\n email.ordem = getNextAvailableOrder(); \r\n finalUsedOrders.add(email.ordem); \r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0)); // <-- 'ordem'\r\n }\r\n }","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ emails?.length === 1 ? 'Email Cadastrado' : 'E-mails Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ emails?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Email\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Email\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"emails && emails.length > 0\" cdkDropList (cdkDropListDropped)=\"moverLinha($event)\">\r\n\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\" cdkDrag>\r\n\r\n <td style=\"text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n\r\n <td>{{ valor.email }}</td>\r\n\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { booleanAttribute, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, ViewChild } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { listaEstados } from '../pessoa-tabelas-apoio';\r\nimport { UnbPessoaEmail } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from '../unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaEstadoCivil } from '../unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaTelefone } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService, UnbPessoaErroPadrao } from '../unb-pessoa.service';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaFormConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-form',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-form.component.html',\r\n styleUrl: './unb-pessoa-form.component.css'\r\n})\r\nexport class UnbPessoaFormComponent implements OnInit {\r\n\r\n @ViewChild('pessoaForm') pessoaForm!: NgForm;\r\n @Input() config: UnbPessoaFormConfig = new UnbPessoaFormConfig();\r\n @Input() hideSalvarButton: boolean = false; // usado quando eh modal. Nao mostra botao salvar. Pq o Dialog já tem um botao salvar\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n @Output() isLoadingChange = new EventEmitter<boolean>();\r\n\r\n // tabelas tradicionais que vem do backend\r\n escolaridade!: Observable<UnbPessoaEscolaridade[]>;\r\n paises!: Observable<UnbPessoaPais[]>;\r\n estadosCivil!: Observable<UnbPessoaEstadoCivil[]>;\r\n isLoading: boolean = false;\r\n endereco = new UnbPessoaEndereco();\r\n email = new UnbPessoaEmail();\r\n isReadyOnly: boolean = false;\r\n dadosSalvos: { [key: string]: any } = {}; // Armazena os dados ao trocar de tipo\r\n idMensagemService = \"unbPessoaForm\";\r\n\r\n // Controla se está incluindo nova pessoa ou editando existente\r\n documentoPesquisado: string = '';\r\n incluindoNovaPessoa: boolean = false;\r\n editandoPessoa: boolean = false;\r\n\r\n pessoa: UnbPessoaModel = new UnbPessoaModel();\r\n\r\n constructor(private service: UnBPessoaService, private snackBar: MatSnackBar, private alertService: UnbMensagemService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.alertService.hideMessage(this.idMensagemService);\r\n if (this.config.backendURL == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.url está null. Insira o parâmetro (apiPessoaConfig) com o valor válido!\")\r\n return;\r\n } else {\r\n this.service.setBackendUrl(this.config.backendURL);\r\n }\r\n\r\n if (this.config.token && this.config.token != \"\") { \r\n this.service.setToken(this.config.token);\r\n }\r\n\r\n // atencao, o pessoaRecebida que inicializa esse componente\r\n this.escolaridade = this.service.getEscolaridade();\r\n this.paises = this.service.getPaises();\r\n this.estadosCivil = this.service.getEstadoCivil();\r\n this.pessoaRecebida(this.config.pessoa);\r\n }\r\n\r\n pessoaRecebida(pessoaRecebida: UnbPessoaModel) {\r\n if (!pessoaRecebida) {\r\n this.pessoa = {} as UnbPessoaModel; \r\n } else {\r\n this.pessoa = pessoaRecebida;\r\n }\r\n \r\n this.alertService.hideMessage(this.idMensagemService);\r\n\r\n // Reseta o formulário quando uma nova pessoa é recebida\r\n if (this.pessoaForm) {\r\n this.pessoaForm.resetForm();\r\n }\r\n\r\n // inicializa pra nao quebrar\r\n if (!this.pessoa.enderecos) this.pessoa.enderecos = [];\r\n if (!this.pessoa.emails) this.pessoa.emails = [];\r\n if (!this.pessoa.telefones) this.pessoa.telefones = [];\r\n\r\n // 1. Verifica se é um registro que já existe no banco\r\n const existeRegistro = !!this.pessoa?.codigoPessoa;\r\n\r\n // 2. Verifica se é bloqueado pelo SIAPE (Só faz sentido se o registro existir)\r\n this.isReadyOnly = existeRegistro && !!this.pessoa?.matriculaSiape;\r\n\r\n // 3. Define o documento (usando aquele mapa limpo)\r\n const docMap = {\r\n [UnbTipoPessoaEnum.FISICA]: this.pessoa.cpf,\r\n [UnbTipoPessoaEnum.JURIDICA]: this.pessoa.cnpj,\r\n [UnbTipoPessoaEnum.ESTRANGEIRA]: this.pessoa.passaporte\r\n };\r\n this.documentoPesquisado = docMap[this.pessoa.tipoPessoa] || '';\r\n\r\n // 4. (Opcional) Snackbar se for SIAPE\r\n if (this.isReadyOnly) {\r\n this.openSnackBar('Dados importados do SIAPE não podem ser alterados.');\r\n }\r\n }\r\n\r\n salvar(form: NgForm) {\r\n this.alertService.hideMessage(this.idMensagemService);\r\n\r\n // Suas validações\r\n if (!this.validar(form)) return;\r\n\r\n this.isLoading = true;\r\n this.isLoadingChange.emit(true);\r\n // Agora o service converte internamente o Model para o payload correto\r\n // e decide o endpoint com base no tipoPessoa\r\n this.service.salvarPessoa(this.config.pessoa)\r\n .subscribe({\r\n next: (resposta) => {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n // Mensagem de Sucesso\r\n this.alertService.showMessage(\"<strong>Registro salvo com sucesso!</strong>\", UnbTipoMensagemEnum.SUCCESS, this.idMensagemService);\r\n\r\n // Atualiza dados retornados (IDs gerados)\r\n if (resposta) {\r\n this.config.pessoa.codigoPessoa = resposta.codigoPessoa || this.config.pessoa.codigoPessoa;\r\n this.config.pessoa.idPessoa = resposta.idPessoa || this.config.pessoa.idPessoa;\r\n this.pessoaEmitted.emit(this.config.pessoa);\r\n }\r\n },\r\n error: (err: UnbPessoaErroPadrao) => {\r\n // AQUI: O 'err' já chega limpo com { mensagemSimples, mensagemHtml }\r\n this.handleError(err);\r\n }\r\n });\r\n }\r\n\r\n validar(form: NgForm): boolean {\r\n if (!this.config.pessoa) {\r\n this.openSnackBar(\"Erro ao carregar objeto pessoa\");\r\n return false;\r\n }\r\n\r\n if (form.invalid) {\r\n // para que os erros apareçam na tela para o usuário.\r\n form.control.markAllAsTouched();\r\n this.openSnackBar(\"Por favor, preencha os campos obrigatórios.\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.telefones == null || (this.config.pessoa.telefones != null && this.config.pessoa.telefones.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um telefone no botão Cadastrar Novo Telefone\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.enderecos == null || (this.config.pessoa.enderecos != null && this.config.pessoa.enderecos.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um endereço no botão Cadastrar Novo Endereço\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.emails == null || (this.config.pessoa.emails != null && this.config.pessoa.emails.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um e-mail no botão Cadastrar Novo Email\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n if (!this.config.pessoa.nome || (this.config.pessoa && this.config.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (!this.config.pessoa.dataNascimento) {\r\n this.openSnackBar(\"Data de Nascimento é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n if (!this.config.pessoa.nome || (this.config.pessoa && this.config.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (this.config.pessoa.passaporte == null || (this.config.pessoa.passaporte != null && this.config.pessoa.passaporte == \"\")) {\r\n this.openSnackBar(\"Passaporte é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.config.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n if (this.config.pessoa.cnpj == null || (this.config.pessoa.cnpj != null && this.config.pessoa.cnpj == \"\")) {\r\n this.openSnackBar(\"CNPJ é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n telefonesEmitted(telefones: UnbPessoaTelefone[]) {\r\n this.config.pessoa.telefones = telefones;\r\n }\r\n\r\n enderecosEmitted(enderecos: UnbPessoaEndereco[]) {\r\n this.config.pessoa.enderecos = enderecos;\r\n }\r\n\r\n emailsEmitted(emails: UnbPessoaEmail[]) {\r\n this.config.pessoa.emails = emails;\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return UnbTipoPessoaEnum;\r\n }\r\n\r\n getListaEstados() {\r\n return listaEstados;\r\n }\r\n\r\n\r\n handleErrorPrintConsole(erro: any) {\r\n console.log(erro);\r\n this.handleError(erro);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n\r\n // 1. Mostra a mensagem curta/simples no SnackBar (Fundo da tela)\r\n // Ex: \"O formulário possui erros de validação.\" ou \"Sessão expirada.\"\r\n if (erro.mensagemSimples) {\r\n this.openSnackBar(erro.mensagemSimples);\r\n }\r\n\r\n // 2. Mostra a mensagem detalhada HTML no componente <unb-mensagem>\r\n // Ex: Lista com <ul><li>Campo Data inválido...</li></ul>\r\n if (this.alertService && erro.mensagemHtml) {\r\n // Se o seu alertService suportar ID do componente alvo, passe aqui.\r\n // Caso contrário, ele mostra no componente padrão.\r\n this.alertService.showMessage(erro.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n getLabelDocumento(): string {\r\n switch (this.config.pessoa.tipoPessoa) {\r\n case this.tipoPessoaEnum().FISICA: return 'CPF';\r\n case this.tipoPessoaEnum().JURIDICA: return 'CNPJ';\r\n case this.tipoPessoaEnum().ESTRANGEIRA: return 'Passaporte';\r\n default: return 'Documento';\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n","<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que está incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadyOnly,\r\n 'status-bloqueado': config.isReadyOnly\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadyOnly ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadyOnly\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadyOnly\">Registro SIAPE (Visualização)</ng-container> com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n</div>\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadyOnly || isLoading\" class=\"form-container\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n <!-- Campos Pessoa Física e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>País Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da Mãe</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jurídica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Razão Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documentação</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Órgão Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emissão</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa != tipoPessoaEnum().JURIDICA && (pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA || pessoa.codigoPaisNascimento != 22)\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Número Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"config.backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadyOnly\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matrícula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"!hideSalvarButton\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadyOnly\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>","import { booleanAttribute, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { forkJoin } from 'rxjs';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbUtils } from '../../utils/unb-utils';\r\nimport { UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbPessoaErroPadrao, UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-pesquisar',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-pesquisar.component.html',\r\n styleUrl: './unb-pessoa-pesquisar.component.css'\r\n})\r\nexport class UnbPessoaPesquisarComponent implements OnInit {\r\n isLoading = false;\r\n pessoa = new UnbPessoaModel();\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) config: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n @Output() isLoadingChange = new EventEmitter<boolean>();\r\n\r\n constructor(private pessoaService: UnBPessoaService, private snackBar: MatSnackBar, private alertService: UnbMensagemService) { }\r\n\r\n pessoaEncontrado: Boolean | null = false;\r\n mostrarTipoPessoa!: boolean;\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n\r\n idMensagemService = \"UnbPessoaPesquisar\";\r\n\r\n ngOnInit(): void {\r\n // 1. Validação de Inicialização da API\r\n if (!this.config.backendURL) {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: backendURL está null.\");\r\n return;\r\n }\r\n this.pessoaService.setBackendUrl(this.config.backendURL);\r\n if (this.config.token) {\r\n this.pessoaService.setToken(this.config.token);\r\n }\r\n // 2. Carregamento de Dados de Apoio\r\n forkJoin({\r\n tiposEnd: this.pessoaService.getTipoEndereco(),\r\n tiposTel: this.pessoaService.getTipoTelefone(),\r\n tiposEmail: this.pessoaService.getTipoEmail()\r\n }).subscribe({\r\n next: ({ tiposEnd, tiposTel, tiposEmail }) => {\r\n this.listaTipoEndereco = tiposEnd;\r\n this.listaTipoTelefone = tiposTel;\r\n this.listaTipoEmail = tiposEmail;\r\n },\r\n error: (err) => {\r\n this.handleError(\"Falha ao carregar dados de apoio. Recarregue a página.\");\r\n console.error(\"Erro no forkJoin:\", err);\r\n }\r\n });\r\n\r\n // 3. Definição da Lógica de Exibição e Tipo Padrão\r\n const opcoesAtivas = [this.config.pesquisarPorCPF, this.config.pesquisarPorCNPJ, this.config.pesquisarPorEstrangeiro].filter(v => v).length;\r\n\r\n // Só mostra o rádio se houver escolha real (mais de uma opção ativa)\r\n this.mostrarTipoPessoa = opcoesAtivas > 1;\r\n\r\n if (opcoesAtivas === 0) {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: Nenhuma opção de pesquisa (CPF/CNPJ/Estrangeiro) está ativa.\");\r\n return;\r\n }\r\n\r\n // 4. Atribuição do Tipo Inicial (Ordem de prioridade: Valor padrão -> Opção Única -> CPF)\r\n this.definirTipoPessoaInicial();\r\n }\r\n\r\n /**\r\n * Define qual tipo de pessoa estará selecionado ao carregar o componente\r\n */\r\n private definirTipoPessoaInicial(): void {\r\n // Verifica se o padrão passado é permitido pelas flags de pesquisa\r\n const padraoEhValido =\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.FISICA && this.config.pesquisarPorCPF) ||\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.JURIDICA && this.config.pesquisarPorCNPJ) ||\r\n (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.ESTRANGEIRA && this.config.pesquisarPorEstrangeiro);\r\n\r\n if (padraoEhValido) {\r\n // Como o valor da string é igual ao valor do Enum, a atribuição é direta\r\n this.pessoa.tipoPessoa = this.config.defaultTipoPessoa as UnbTipoPessoaEnum;\r\n } else {\r\n if (this.config.defaultTipoPessoa) {\r\n console.warn(\r\n `[UnbPessoaPesquisar] O valor defaultTipoPessoa='${this.config.defaultTipoPessoa}' é incompatível com as opções de pesquisa ativas. Selecionando a primeira disponível.`\r\n );\r\n }\r\n\r\n // Fallback para a primeira opção ativa\r\n if (this.config.pesquisarPorCPF) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.FISICA;\r\n } else if (this.config.pesquisarPorCNPJ) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.JURIDICA;\r\n } else if (this.config.pesquisarPorEstrangeiro) {\r\n this.pessoa.tipoPessoa = UnbTipoPessoaEnum.ESTRANGEIRA;\r\n }\r\n }\r\n }\r\n\r\n onTipoPessoaChange() {\r\n // Cria uma nova pessoa limpa com o tipo selecionado\r\n const novaPessoa = new UnbPessoaModel();\r\n novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;\r\n\r\n // Inicializa arrays vazios\r\n novaPessoa.telefones = [];\r\n novaPessoa.enderecos = [];\r\n novaPessoa.emails = [];\r\n\r\n // Substitui a pessoa atual\r\n this.pessoa = novaPessoa;\r\n\r\n // Emite a nova pessoa limpa para o componente pai (form)\r\n this.pessoaEmitted.emit(this.pessoa);\r\n }\r\n\r\n pesquisar() {\r\n if (this.validar() == false) return;\r\n this.isLoading = true;\r\n this.isLoadingChange.emit(true);\r\n let result;\r\n if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n let cpf = this.pessoa.cpf.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCpf(cpf);\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n let cnpj = this.pessoa.cnpj.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCnpj(cnpj);\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n result = this.pessoaService.findByPassaporte(this.pessoa.passaporte);\r\n }\r\n\r\n if (result) {\r\n result.subscribe({\r\n next: this.hadleResult.bind(this),\r\n error: this.handleError.bind(this)\r\n });\r\n }\r\n\r\n }\r\n\r\n validar(): boolean {\r\n if (this.config.backendURL == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: backendURL.url está null. Insira o parâmetro (backendURL) com o valor da URL do seu Backend!\")\r\n return false;\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {\r\n if (this.pessoa.cpf == null || (this.pessoa.cpf != null && this.pessoa.cpf == \"\")) {\r\n this.handleError(\"CPF é um campo obrigatório.\")\r\n return false;\r\n } else if (!UnbUtils.validarCPF(this.pessoa.cpf)) {\r\n this.handleError(\"Digite um valor válido para o CPF\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {\r\n if (this.pessoa.cnpj == null || (this.pessoa.cnpj != null && this.pessoa.cnpj == \"\")) {\r\n this.handleError(\"CNPJ é um campo obrigatório\")\r\n return false;\r\n } else if (!UnbUtils.validarCNPJ(this.pessoa.cnpj)) {\r\n this.handleError(\"Digite um valor válido para o CNPJ!\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {\r\n if (this.pessoa.passaporte == null || (this.pessoa.passaporte != null && this.pessoa.passaporte == \"\")) {\r\n this.handleError(\"Passaporte é um campo obrigatório\")\r\n return false;\r\n }\r\n } else {\r\n this.handleError(\"Selecione um tipo de pessoa!\")\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Em unb-pessoa-pesquisar.component.ts\r\n hadleResult(resultado: UnbPessoaModel) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n\r\n if (resultado && resultado.codigoPessoa) {\r\n // Resultado já vem normalizado pelo service (tipoPessoa, arrays, datas, códigos, CPF/CNPJ formatados)\r\n this.pessoa = resultado;\r\n } else {\r\n // Não encontrado: mantém documento e tipo selecionados\r\n const novaPessoa = new UnbPessoaModel();\r\n novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;\r\n if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA) {\r\n novaPessoa.cpf = this.pessoa.cpf;\r\n } else if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA) {\r\n novaPessoa.cnpj = this.pessoa.cnpj;\r\n } else {\r\n novaPessoa.passaporte = this.pessoa.passaporte;\r\n }\r\n this.pessoa = novaPessoa;\r\n }\r\n\r\n this.pessoaEmitted.emit(this.pessoa);\r\n }\r\n\r\n handleError(erro: UnbPessoaErroPadrao | string) {\r\n this.isLoading = false;\r\n this.isLoadingChange.emit(false);\r\n this.pessoaEncontrado = false;\r\n\r\n let erroTratado: UnbPessoaErroPadrao;\r\n\r\n // --- ADAPTER: Converte string para o Objeto Padrão ---\r\n if (typeof erro === 'string') {\r\n erroTratado = {\r\n status: 400, // Erro de validação local geralmente é 400\r\n mensagemSimples: erro,\r\n mensagemHtml: `<strong>${erro}</strong>`\r\n };\r\n } else {\r\n // Se já veio do Service (ou é um objeto manual), usa direto\r\n erroTratado = erro;\r\n }\r\n\r\n // --- LÓGICA DE EXIBIÇÃO ---\r\n\r\n // 1. SnackBar (Mensagem curta)\r\n if (erroTratado.mensagemSimples) {\r\n this.openSnackBar(erroTratado.mensagemSimples);\r\n }\r\n\r\n // 2. Componente de Mensagem (Mensagem HTML)\r\n if (this.alertService && erroTratado.mensagemHtml) {\r\n // Se você tiver a variável idMensagemService definida na classe:\r\n this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);\r\n }\r\n }\r\n\r\n handleErrorPrintConsole(erro: any) {\r\n console.log(erro);\r\n this.handleError(erro);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return UnbTipoPessoaEnum;\r\n }\r\n\r\n /**\r\n * Formata o CPF enquanto o usuário digita\r\n */\r\n formatarCpf(event: any) {\r\n let valor = event.target.value.replace(/\\D/g, ''); // Remove tudo que não é dígito\r\n\r\n if (valor.length <= 11) {\r\n // Aplica máscara: 000.000.000-00\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d{1,2})$/, '$1-$2');\r\n this.pessoa.cpf = valor;\r\n }\r\n }\r\n\r\n /**\r\n * Formata o CNPJ enquanto o usuário digita\r\n */\r\n formatarCnpj(event: any) {\r\n let valor = event.target.value.replace(/\\D/g, ''); // Remove tudo que não é dígito\r\n\r\n if (valor.length <= 14) {\r\n // Aplica máscara: 00.000.000/0000-00\r\n valor = valor.replace(/(\\d{2})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1.$2');\r\n valor = valor.replace(/(\\d{3})(\\d)/, '$1/$2');\r\n valor = valor.replace(/(\\d{4})(\\d{1,2})$/, '$1-$2');\r\n this.pessoa.cnpj = valor;\r\n }\r\n }\r\n}\r\n","<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" (ngSubmit)=\"pesquisar()\">\r\n\r\n <div class=\"mensagem-container\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCPF\" [value]=\"tipoPessoaEnum().FISICA\">Pessoa\r\n Física</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCNPJ\" [value]=\"tipoPessoaEnum().JURIDICA\">Pessoa\r\n Jurídica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorEstrangeiro\"\r\n [value]=\"tipoPessoaEnum().ESTRANGEIRA\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" [required]=\"true\"\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\"></mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" [required]=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" /> <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n </div>\r\n</form>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaFormConfig, UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { UnbMensagemService } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\n/**\r\n * Esse é um componente Wrapper utilitário. Ele encapsula a logica de procurar e exibir o formulario de cadastro/alteração inline.\r\n * Isso economiza o ciclo de mostrar a pesquisa do pessoa, e depois mostrar o formulário. \r\n */\r\n@Component({\r\n selector: 'lib-unb-pessoa-crud',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-crud.component.html',\r\n styleUrl: './unb-pessoa-crud.component.css'\r\n})\r\nexport class UnbPessoaCrudComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) pesquisaConfig: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n @Input() showFormOnModal = false;\r\n \r\n @Input() maxWidthPesquisa: string = '450px'; // Input para controlar a largura da área de pesquisa\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n pessoaSelecionada: UnbPessoaModel = new UnbPessoaModel();\r\n pessoaEncontrada: boolean = false;\r\n formConfig = new UnbPessoaFormConfig(); // o formCOnfig a gente monta conforme o pesquisaConfig\r\n\r\n constructor(private snackBar: MatSnackBar, private pessoaService: UnBPessoaService, private alertService: UnbMensagemService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.pesquisaConfig.token) {\r\n this.pessoaService.setToken(this.pesquisaConfig.token);\r\n }\r\n\r\n if (this.pesquisaConfig.backendURL) {\r\n this.pessoaService.setBackendUrl(this.pesquisaConfig.backendURL);\r\n } else {\r\n this.openSnackBar('Backend URL não informada na configuração do componente UnbPessoaCrudComponent!');\r\n }\r\n\r\n this.formConfig = new UnbPessoaFormConfig();\r\n this.formConfig.pessoa = this.pessoaSelecionada;\r\n this.formConfig.backendURL = this.pesquisaConfig.backendURL;\r\n this.formConfig.token = this.pesquisaConfig.token;\r\n }\r\n\r\n loadingPesquisa($event: boolean) {\r\n this.isLoading = $event;\r\n }\r\n\r\npessoaPesquisaRecebida(pessoa: UnbPessoaModel) {\r\n // 1. Verifica se a pessoa é nula ou se é um objeto \"vazio\" (sem ID e sem documentos)\r\n const isVazio = !pessoa || (\r\n !pessoa.codigoPessoa && // Não tem ID\r\n !pessoa.cpf && // Não tem CPF\r\n !pessoa.cnpj && // Não tem CNPJ\r\n !pessoa.passaporte // Não tem Passaporte\r\n );\r\n\r\n if (isVazio) {\r\n // Se for vazio, limpamos a seleção para esconder o formulário\r\n // (O *ngIf=\"pessoaSelecionada\" no HTML vai remover o componente da tela)\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou undefined, dependendo da tipagem\r\n this.pessoaEncontrada = false;\r\n } else {\r\n // Se tiver algum dado (CPF digitado ou pessoa encontrada), atualiza\r\n this.pessoaSelecionada = pessoa;\r\n this.pessoaEncontrada = true;\r\n }\r\n\r\n // 2. Atualiza a configuração do formulário\r\n // Importante: Só tenta acessar 'pessoa' se formConfig existir\r\n if (this.formConfig) {\r\n // Usamos o spread operator (...) para forçar o Angular a detectar a mudança,\r\n // caso o componente filho use ngOnChanges\r\n this.formConfig = {\r\n ...this.formConfig,\r\n pessoa: this.pessoaSelecionada || new UnbPessoaModel() // Evita passar null pro form se não quiser\r\n };\r\n }\r\n}\r\n\r\nopenSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n}\r\n\r\n}\r\n","<div class=\"area-pesquisa\" [style.max-width]=\"maxWidthPesquisa\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [config]=\"pesquisaConfig\"\r\n (isLoadingChange)=\"loadingPesquisa($event)\"\r\n (pessoaEmitted)=\"pessoaPesquisaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<div *ngIf=\"pessoaEncontrada && !isLoading\" class=\"area-formulario\">\r\n <lib-unb-pessoa-form \r\n [config]=\"formConfig\">\r\n </lib-unb-pessoa-form>\r\n</div>","import { Component, EventEmitter, Inject, Input,Output, ViewChild } from '@angular/core';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnbPessoaFormConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-form-dialog',\r\n templateUrl: './unb-pessoa-form-dialog.component.html',\r\n styleUrls: ['./unb-pessoa-form-dialog.component.css']\r\n})\r\nexport class UnbPessoaFormDialogComponent {\r\n\r\n @Input() config: UnbPessoaFormConfig = new UnbPessoaFormConfig();\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n @ViewChild(UnbPessoaFormComponent) pessoaFormComponent!: UnbPessoaFormComponent;\r\n\r\n isLoading = false;\r\n titulo = 'Cadastro de Pessoa';\r\n\r\n constructor(private dialogRef: MatDialogRef<UnbPessoaFormComponent>,@Inject(MAT_DIALOG_DATA) data: any) {\r\n if (data && data.config) {\r\n this.config = data.config;\r\n \r\n // Ajusta o título dependendo se é edição ou inclusão\r\n if (this.config.pessoa && this.config.pessoa.codigoPessoa) {\r\n this.titulo = 'Editando Pessoa';\r\n } else {\r\n this.titulo = 'Nova Pessoa';\r\n }\r\n }\r\n }\r\n\r\n onLoadingChange($event: boolean) {\r\n this.isLoading = $event;\r\n }\r\n\r\n fechar() {\r\n this.dialogRef.close();\r\n }\r\n\r\n // se salvar, jah fecha emite o valor salvo. Nao posso deixar aberto, senao vai emitir o close vazio. E o dono nao vai receber a pessoa\r\n onSalvarSucesso($event: UnbPessoaModel) {\r\n this.dialogRef.close($event);\r\n }\r\n\r\n\r\n submitForm() {\r\n // chama o salvar lah do form.\r\n if (this.pessoaFormComponent && this.pessoaFormComponent.pessoaForm) {\r\n this.pessoaFormComponent.salvar(this.pessoaFormComponent.pessoaForm);\r\n }\r\n }\r\n\r\n \r\n}\r\n","<h2 mat-dialog-title>{{ titulo }}</h2>\r\n\r\n<mat-dialog-content class=\"mat-typography\">\r\n <lib-unb-pessoa-form\r\n [config]=\"config\"\r\n [hideSalvarButton]=true\r\n (pessoaEmitted)=\"onSalvarSucesso($event)\"\r\n (isLoadingChange)=\"onLoadingChange($event)\">\r\n </lib-unb-pessoa-form>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button color=\"warn\" [disabled]=\"isLoading\" (click)=\"fechar()\">\r\n Fechar\r\n </button>\r\n\r\n <button [disabled]=\"isLoading\" mat-flat-button color=\"primary\" (click)=\"submitForm()\">\r\n Salvar\r\n </button>\r\n</mat-dialog-actions>\r\n","import { booleanAttribute, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaFormConfig, UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';\r\nimport { UnbMensagemService } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { UnbPessoaFormComponent } from '../unb-pessoa-form/unb-pessoa-form.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UnbPessoaFormDialogComponent } from '../unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\n\r\n/**\r\n * Esse é um componetne Wrapper utilitário. Ele encapsula a logica de procurar e se nao achar iniciar o formulario de cadastro em um modal. \r\n * Também, se achar, ele permite alterar a pessoa encontrada.\r\n * O SGI usa para cadastro de Inquilino no formulario. La tem a pesquisa de Pessoa, se nao achar, abre o formulario de cadastro em modal. Assim, nao precisa ir em outra tela pra cadastrar\r\n * Eh possivel configurar se quer mostrar o botao de Novo (se nao achar) e Alterar (se achar). No SGI, por exemplo eu soh deixo incluir novo, pq nao faz sentido alterar a pessoa no meio do cadastro do inquilino.\r\n*/\r\n@Component({\r\n selector: 'lib-unb-pessoa-crud-modal',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-crud-modal.component.html',\r\n styleUrl: './unb-pessoa-crud-modal.component.css'\r\n})\r\nexport class UnbPessoaCrudModalComponent implements OnInit {\r\n\r\n isLoading = false;\r\n\r\n // Configuração do componente\r\n @Input({ required: true }) pesquisaConfig: UnbPessoaPesquisaConfig = new UnbPessoaPesquisaConfig();\r\n @Input({ transform: booleanAttribute }) incluirBotaoNovo = true; // se pesquisou e nao achou, mostra botao novo\r\n @Input({ transform: booleanAttribute }) incluirBotaoAlterar = true; // se pesquisou e achou, mostra botao alterar\r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n pessoaSelecionada = new UnbPessoaModel();\r\n mostrarBotaoNovo = false;\r\n formConfig = new UnbPessoaFormConfig(); // o formCOnfig a gente monta conforme o pesquisaConfig\r\n\r\n constructor(private snackBar: MatSnackBar, private pessoaService: UnBPessoaService, private alertService: UnbMensagemService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.pesquisaConfig.token) {\r\n this.pessoaService.setToken(this.pesquisaConfig.token);\r\n }\r\n\r\n if (this.pesquisaConfig.backendURL) {\r\n this.pessoaService.setBackendUrl(this.pesquisaConfig.backendURL);\r\n } else {\r\n this.openSnackBar('Backend URL não informada na configuração do componente UnbPessoaCrudComponent!');\r\n }\r\n\r\n this.formConfig = new UnbPessoaFormConfig();\r\n this.formConfig.pessoa = this.pessoaSelecionada;\r\n this.formConfig.backendURL = this.pesquisaConfig.backendURL;\r\n this.formConfig.token = this.pesquisaConfig.token;\r\n }\r\n\r\n pessoaPesquisaRecebida(pessoa: UnbPessoaModel) { \r\n // 1. Verifica se a pessoa é nula ou se é um objeto \"vazio\" (sem ID e sem documentos)\r\n const isVazio = !pessoa || (\r\n !pessoa.codigoPessoa && // Não tem ID\r\n !pessoa.cpf && // Não tem CPF\r\n !pessoa.cnpj && // Não tem CNPJ\r\n !pessoa.passaporte // Não tem Passaporte\r\n );\r\n\r\n if (isVazio) {\r\n // Se for vazio, limpamos a seleção para esconder o formulário\r\n // (O *ngIf=\"pessoaSelecionada\" no HTML vai remover o componente da tela)\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou undefined, dependendo da tipagem\r\n this.mostrarBotaoNovo = false;\r\n } else {\r\n // Se tiver algum dado (CPF digitado ou pessoa encontrada), atualiza\r\n this.pessoaSelecionada = pessoa;\r\n if (this.pessoaSelecionada.codigoPessoa) { \r\n // joga pra cima pra falar que uma pessoa foi encontrada\r\n this.pessoaEmitted.emit(pessoa);\r\n } else if (this.incluirBotaoNovo) {\r\n this.openSnackBar('Pessoa não encontrada. Clique em “Incluir Nova Pessoa” para realizar o cadastro.');\r\n this.mostrarBotaoNovo = true; \r\n }\r\n }\r\n\r\n // 2. Atualiza a configuração do formulário\r\n // Importante: Só tenta acessar 'pessoa' se formConfig existir\r\n if (this.formConfig) {\r\n // Usamos o spread operator (...) para forçar o Angular a detectar a mudança,\r\n // caso o componente filho use ngOnChanges\r\n this.formConfig = {\r\n ...this.formConfig,\r\n pessoa: this.pessoaSelecionada || new UnbPessoaModel() // Evita passar null pro form se não quiser\r\n };\r\n }\r\n }\r\n\r\n limparSelecao() {\r\n this.pessoaSelecionada = new UnbPessoaModel(); // ou new UnbPessoaModel()\r\n // Talvez precise avisar o componente filho para limpar o input também\r\n }\r\n\r\n getDocumentoFormatado(pessoa: UnbPessoaModel) {\r\n if (pessoa.cpf && pessoa.cpf.trim() !== '') {\r\n return pessoa.cpf;\r\n } else if (pessoa.cnpj && pessoa.cnpj.trim() !== '') {\r\n return pessoa.cnpj;\r\n } else if (pessoa.passaporte && pessoa.passaporte.trim() !== '') {\r\n return pessoa.passaporte;\r\n }\r\n }\r\n\r\n openModal() {\r\n const dialogRef = this.dialog.open(UnbPessoaFormDialogComponent, {\r\n // 1. Defina um painel de classe para controlar tudo no CSS\r\n panelClass: 'dialog-pessoa-fullscreen', \r\n \r\n // 2. Largura padrão para Desktop (o CSS vai sobrescrever no mobile)\r\n width: '90vw', \r\n maxWidth: '1200px', // Trava para não ficar gigante em monitores ultrawide\r\n \r\n // 3. Altura automática ou máxima (CSS controla o esticar)\r\n maxHeight: '95vh', \r\n\r\n data: {\r\n config: this.formConfig\r\n },\r\n autoFocus: 'first-tabbable'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((pessoaSalva: UnbPessoaModel | null) => {\r\n if (pessoaSalva?.codigoPessoa) {\r\n this.pessoaEmitted.emit(pessoaSalva);\r\n }\r\n });\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"search-wrapper\" [class.disabled-wrapper]=\"isLoading\">\r\n\r\n <div class=\"search-input-area\">\r\n <lib-unb-pessoa-pesquisar \r\n [config]=\"pesquisaConfig\" \r\n (pessoaEmitted)=\"pessoaPesquisaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n </div>\r\n\r\n <div class=\"search-button-area\">\r\n\r\n <button *ngIf=\"incluirBotaoNovo && mostrarBotaoNovo && !pessoaSelecionada.codigoPessoa\" \r\n mat-stroked-button \r\n color=\"accent\"\r\n (click)=\"openModal()\" \r\n type=\"button\" \r\n style=\"white-space: nowrap;\">\r\n <mat-icon>add</mat-icon> Incluir Nova Pessoa\r\n </button>\r\n\r\n <div *ngIf=\"incluirBotaoAlterar && pessoaSelecionada.codigoPessoa\" class=\"mini-card-selected\">\r\n <div class=\"card-avatar\"><mat-icon>person</mat-icon></div>\r\n <div class=\"card-info\">\r\n <div class=\"card-name\">{{ pessoaSelecionada.nome }}</div>\r\n <div class=\"card-doc\">{{ getDocumentoFormatado(pessoaSelecionada) }}</div>\r\n </div>\r\n <div class=\"card-actions\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"openModal()\" type=\"button\">\r\n <mat-icon>edit</mat-icon> Editar\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>","import { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule, NativeDateAdapter } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form/unb-pessoa-email-form';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nimport { UnbPessoaFormComponent } from './unb-pessoa-form/unb-pessoa-form.component';\r\nimport { UnbPessoaPesquisarComponent } from './unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nimport { UnbPessoaEmailListComponent } from './unb-pessoa-email-form/unb-pessoa-email-list';\r\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { UnbPessoaenderecoListComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nimport { UnbPessoaTelefoneListComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\nimport { UnbMensagemModule } from '../unb-mensagem/unb-mensagem.module';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { UnbPessoaCrudComponent } from './unb-pessoa-crud/unb-pessoa-crud.component';\r\nimport { UnbPessoaFormDialogComponent } from './unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\nimport { UnbPessoaCrudModalComponent } from './unb-pessoa-crud-modal/unb-pessoa-crud-modal.component';\r\n\r\n// Força o datepicker a usar o formato dd/MM/yyyy, incluindo parse manual quando o usuário digita.\r\nexport class PtBrDateAdapter extends NativeDateAdapter {\r\n override parse(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n const cleaned = value.trim();\r\n const parts = cleaned.split('/');\r\n if (parts.length === 3) {\r\n const day = Number(parts[0]);\r\n const month = Number(parts[1]) - 1;\r\n const year = Number(parts[2]);\r\n\r\n if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {\r\n const parsed = new Date(year, month, day);\r\n // Garantimos que o browser não ajuste para outro mês/dia por overflow.\r\n if (parsed.getFullYear() === year && parsed.getMonth() === month && parsed.getDate() === day) {\r\n return parsed;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const timestamp = typeof value === 'number' ? value : Date.parse(value);\r\n return isNaN(timestamp) ? null : new Date(timestamp);\r\n }\r\n\r\n override format(date: Date): string {\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n}\r\n\r\nexport const PT_BR_DATE_FORMATS = {\r\n parse: { dateInput: 'dd/MM/yyyy' },\r\n display: {\r\n dateInput: 'dd/MM/yyyy',\r\n monthYearLabel: 'MMM yyyy',\r\n dateA11yLabel: 'dd/MM/yyyy',\r\n monthYearA11yLabel: 'MMMM yyyy'\r\n }\r\n};\r\n\r\n@NgModule({\r\n declarations: [UnbPessoaFormDialogComponent,UnbPessoaCrudComponent, UnbPessoaCrudModalComponent, UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent, UnbPessoaEmailListComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n BrowserModule,\r\n MatIconModule,\r\n DragDropModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n UnbMensagemModule,\r\n MatCardModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatDialogModule,\r\n MatSelectModule, \r\n MatProgressSpinnerModule, \r\n MatButtonModule, \r\n MatProgressBarModule, \r\n MatNativeDateModule,\r\n MatListModule,\r\n MatDialogModule,\r\n MatPaginatorModule,\r\n MatExpansionModule,\r\n MatSnackBarModule, \r\n MatDatepickerModule,\r\n MatRadioModule,\r\n MatCardModule,\r\n MatDividerModule\r\n ],\r\n exports: [UnbPessoaFormDialogComponent, UnbPessoaCrudComponent, UnbPessoaCrudModalComponent, UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent],\r\n providers: [\r\n MatDatepickerModule,\r\n DatePipe,\r\n CurrencyPipe,\r\n { provide: MAT_DATE_LOCALE, useValue: 'pt-BR' },\r\n { provide: DateAdapter, useClass: PtBrDateAdapter, deps: [MAT_DATE_LOCALE] },\r\n { provide: MAT_DATE_FORMATS, useValue: PT_BR_DATE_FORMATS }\r\n ] \r\n})\r\nexport class UnbPessoaModule { }\r\n","export class UnbPessoaEscolaridade {\r\n codigo?: number; // Byte em Java corresponde a number em TypeScript\r\n denominacao?: string;\r\n codigoSiape?: number | null; // Short em Java corresponde a number, e pode ser nulo\r\n extinto: boolean = false;\r\n}","export class UnbPessoaEstadoCivil {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoSiape?: number | null;\r\n extinto: boolean = false;\r\n}","export class UnbPessoaMunincipio {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoIBGE?: number | null;\r\n codigoUf?: number;\r\n siglaUf?: string;\r\n denominacaoUf?: string;\r\n}","export class UnbPessoaPais {\r\n codigo?: number;\r\n denominacao?: string;\r\n sigla?: string;\r\n nacionalidade?: string;\r\n extinto?: boolean;\r\n}","export class UnbPessoaRacaCor{\r\n codigo?: number;\r\n denominacao?: string;\r\n}","/*\r\n * Public API Surface of unb-lib-components\r\n */\r\n\r\nexport * from './lib/unb-mensagem/unb-mensagem.component';\r\nexport * from './lib/unb-mensagem/unb-mensagem.module';\r\nexport * from './lib/unb-mensagem/unb-mensagem.service';\r\n\r\nexport * from './lib/services/unb-auth.service';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.component';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.module';\r\nexport * from './lib/unb-usuario/unb-usuario.model';\r\n\r\n// UNB Pessoa Module\r\nexport * from './lib/unb-pessoa/unb-pessoa.module';\r\nexport * from './lib/unb-pessoa/unb-pessoa.service';\r\nexport * from './lib/unb-pessoa/unb-tipo-pessoa.enum';\r\nexport * from './lib/unb-pessoa/pessoa-tabelas-apoio';\r\n\r\n// UNB Pessoa Models\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model';\r\n\r\n// UNB Pessoa Components\r\nexport * from './lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UnbMensagemService","i2","i1","i3","i4","i5","i6.UnbUsuarioComponent","map","i8.UnbMensagemComponent","i7","i8","i9.UnbMensagemComponent","i10","i11","i12","i13","i2.UnBPessoaService","i6","i1.UnBPessoaService","i3.UnbMensagemService","i9","i14","i16.UnbPessoaTelefoneListComponent","i17.UnbPessoaenderecoListComponent","i18.UnbPessoaEmailListComponent","i6.UnbPessoaFormComponent","i7.UnbPessoaPesquisarComponent","i3.UnbPessoaFormComponent","i8.UnbPessoaPesquisarComponent"],"mappings":"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"}
|