import { SubscriptionExpirationDateService } from '../../../../shared/services/subscription-expiration-date.service'; import { LoginAsParamService } from '../../../../../api/api-services/login-as-param.service'; import { IPlatformUserAccountVm } from '../../../../../api/platform-user-account-vm.model'; import { ILogiAsResultVm } from '../../../../../api/logi-as-result-vm.model'; import { IDetailsControl } from '../../../../shared/models/details-control'; import { DialogService } from '../../../../shared/services/dialog.service'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ILoginAsIm } from '../../../../../api/login-as-im.model'; import { MessageService } from 'primeng/api'; import { Subscription } from 'rxjs'; import { SimpleChanges, Component, OnDestroy, OnInit, inject, Input, } from '@angular/core'; @Component({ selector: 'lib-users-details', templateUrl: './users-details.component.html', styleUrl: './users-details.component.scss', }) export class UsersDetailsComponent implements OnInit, OnDestroy { @Input() dialogID_usersDetails!: string; @Input() userIndex!: number; @Input() usersList!: IPlatformUserAccountVm[]; @Input() user!: IPlatformUserAccountVm; private dialogStateSubscription!: Subscription; private _expirationDateService = inject(SubscriptionExpirationDateService); private _loginAsParamService = inject(LoginAsParamService); private _messageService = inject(MessageService); private _dialogService = inject(DialogService); private _fb = inject(FormBuilder); public dialogID_userAssignSub = 'userAssignSub'; public isSubscriptionsEdit: boolean = false; public rangeDates: Date[] | undefined; public dialogState!: IDetailsControl; public selectedTabIndex: number = 0; public selectedSubscription!: any; public userUpdateForm!: FormGroup; public permisions: string[] = []; public daysToExtend: number = 30; public subscriptionList!: any; public subscriprion!: any; public transSelected: any; public transation!: any; public transColumns = [ { field: 'creationDate', header: 'Data transakcji', sortable: true, columnClass: 'flex justify-content-between align-items-center', }, { field: 'subscriptionType', header: 'Wartość', sortable: true, columnClass: '', }, { field: 'subscriptionType', header: 'Faktura', columnClass: '', }, { field: 'subscriptionType', header: 'Data wystawienia', columnClass: '', }, { field: 'actions', header: 'Akcje', columnClass: 'flex justify-content-center align-items-center', actions: [ { label: 'Wystaw fakturę', buttonClass: 'primary-button', }, ], }, ]; ngOnInit(): void { this.setFormStructure(); this.dialogStateSubscription = this._dialogService .getDialogState(this.dialogID_usersDetails) .subscribe((state) => { this.dialogState = state; }); } ngOnDestroy(): void { this.dialogStateSubscription.unsubscribe(); } ngOnChanges(changes: SimpleChanges) { if (this.user) { if (changes['user']) { this.setFormStructure(); } } } logAsCurrentUser(serviceType: 'Userserviceurl' | 'Admserviceurl'): void { const payload: ILoginAsIm = { email: this.user.email, serviceType, }; this._loginAsParamService .post(payload) .subscribe((res: ILogiAsResultVm) => { if (res.url) { window.open(res.url, '_blank'); // Open in a new tab } }); } handleTabSwitch($event: any) { this.selectedTabIndex = $event.index; } getSubscriptionStatus(subscriptionStatus: string) { return this._expirationDateService.getSubscriptionStatus( subscriptionStatus ); } getSubscriptionStatusMessage(subscriptionStatus: string) { return this._expirationDateService.getSubscriptionStatusMessage( subscriptionStatus ); } getSubscriptionTypeColor( subscriptionType: string, subscriptionStatus: string ) { return this._expirationDateService.getSubscriptionTypeColor( subscriptionType, subscriptionStatus ); } getSubscriptionStatusColor(subscriptionStatus: string): string { return this._expirationDateService.getSubscriptionStatusColor( subscriptionStatus ); } showSuccess() { this._messageService.add({ severity: 'success', detail: 'Pytanie zaktualizowane poprawnie', }); } setFormStructure(): void { this.userUpdateForm = this._fb.group({ userNick: [this.user?.displayName ?? null, [Validators.required]], userCreationDate: [this.user?.created ?? null, [Validators.required]], userFirstName: [this.user?.firstName ?? null, [Validators.required]], userLastName: [this.user?.lastName ?? null, [Validators.required]], userField: ['Polee', [Validators.required]], userPesel: ['123456789', [Validators.required]], userEmail: ['adresemail@adres.pl', [Validators.required]], userPassword: ['cokolwiek', [Validators.required]], }); } // saveQuestion() { // this.detailsControl.isEditing = false; // const dataToPut: IExamQuestionAdminMetaUp = { // guid: '', // examPoints: 0, // questionCategoryGuid: '', // knowledgeType: 0, // }; // const { knowledgeTypeId, questionCategoryGuid, points } = // this.questionUpdateForm.value; // dataToPut.guid = this.question.guid; // dataToPut.examPoints = points; // dataToPut.questionCategoryGuid = questionCategoryGuid; // dataToPut.knowledgeType = knowledgeTypeId; // console.log(dataToPut); // this._putQuestionBase.putQuestionsBase$(dataToPut).subscribe({ // next: (response) => { // console.log(response); // this.showSuccess(); // this.hideDialog(); // this.inicializeQuestionList.emit(); // }, // error: (error) => { // console.error(error); // }, // }); // } editOn() { this.setEditMode(this.dialogID_usersDetails, true); } closeDialog(): void { this._dialogService.closeDialog(this.dialogID_usersDetails); } openDialog(id: string): void { this._dialogService.openDialog(id); } setEditMode(id: string, isEditing: boolean): void { this._dialogService.setEditingState(id, isEditing); } editSubscriptionToggle() { this.isSubscriptionsEdit = !this.isSubscriptionsEdit; } moveUp() { this.userIndex = (this.userIndex + 1) % this.usersList.length; this.user = this.usersList[this.userIndex]; this.setFormStructure(); this.setEditMode(this.dialogID_usersDetails, false); } moveDown() { this.userIndex = (this.userIndex - 1 + this.usersList.length) % this.usersList.length; this.user = this.usersList[this.userIndex]; this.setFormStructure(); this.setEditMode(this.dialogID_usersDetails, false); } }