Park Byung Eun da5188c3bf bug fix
2022-09-14 04:27:21 +00:00

250 lines
6.9 KiB
TypeScript

import {
ChangeDetectorRef,
Component,
Inject,
OnInit,
ViewEncapsulation,
} from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { FuseAlertType } from '@fuse/components/alert';
import { SiteService } from 'app/modules/polyglot/site/services/site.service';
import { IdentityService } from 'app/modules/polyglot/identity/services/identity.service';
import { MemberService } from 'app/modules/polyglot/member/services/member.service';
import {
CreateMemberRequest,
CreateMemberResponse,
} from 'app/modules/proto/c2se/member_pb';
import { Bank } from 'app/modules/proto/models/bank_pb';
import { Site } from 'app/modules/proto/models/site_pb';
import { MemberModel } from 'app/modules/proto/models/member_pb';
import { fuseAnimations } from '@fuse/animations';
import { BankService } from 'app/modules/polyglot/bank/services/bank.service';
import { environment } from 'environments/environment';
export interface RegistComposeData {
title: string;
parent?: MemberModel;
classId: string;
}
export interface RegistComposeResult {
choice: boolean;
}
@Component({
selector: 'app-regist-compose',
templateUrl: './regist-compose.component.html',
encapsulation: ViewEncapsulation.None,
animations: fuseAnimations,
})
export class RegistComposeComponent implements OnInit {
composeForm!: FormGroup;
sites!: Site[];
banks!: Bank[];
alert: { type: FuseAlertType; message: string } = {
type: 'success',
message: '등록이 성공하였습니다.',
};
showAlert: boolean = false;
isSendDisable = false;
/**
* Constructor
*/
constructor(
private _changeDetectorRef: ChangeDetectorRef,
public matDialogRef: MatDialogRef<RegistComposeComponent>,
@Inject(MAT_DIALOG_DATA) public data: RegistComposeData,
private _formBuilder: FormBuilder,
private _identityService: IdentityService,
private _memberService: MemberService,
private _siteService: SiteService,
private _bankService: BankService
) {}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void {
// Create the form
this.composeForm = this._formBuilder.group({
partnerId: [{ value: this.data.parent?.getUsername(), disabled: true }],
siteId: ['', [Validators.required]],
username: [
'',
[Validators.required, Validators.pattern('^[a-zA-Z0-9]{6,12}$')],
],
password: [
'beteran',
[
Validators.required,
Validators.pattern(
'^(?=.*[A-Za-z])(?=.*d)(?=.*[@$!%*#?&])[A-Za-zd@$!%*#?&]{8,20}$'
),
],
],
exchangePassword: [
'beteran',
[Validators.required, Validators.pattern('^[a-zA-Z0-9]{4,8}$')],
],
nickname: [
'',
[
Validators.required,
Validators.pattern('^[a-z|0-9|ㄱ-ㅎ|가-힣]{2,8}$'),
],
],
calculateType: ['', [Validators.required]],
mobilePhoneNumber: ['', [Validators.required]],
bankId: ['', [Validators.required]],
accountNumber: ['', [Validators.required]],
accountHolder: ['', [Validators.required]],
});
this._siteService
.listSites()
.then((result) => {
this.sites = result.getSitesList();
})
.catch((reson) => console.log(reson));
this._bankService
.listBanks()
.then((result) => {
this.banks = result.getBanksList();
})
.catch((reson) => console.log(reson));
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Save and close
*/
saveAndClose(): void {
// Save the message as a draft
this.saveAsDraft();
// Close the dialog
this.matDialogRef.close();
}
/**
* Discard the message
*/
discard(): void {}
/**
* Save the message as a draft
*/
saveAsDraft(): void {}
/**
* Send the message
*
}
*/
send(): void {
if (!this.composeForm.valid) {
return;
}
this.isSendDisable = true;
const {
partnerId,
siteId,
username,
password,
exchangePassword,
nickname,
calculateType,
mobilePhoneNumber,
bankId,
accountNumber,
accountHolder,
} = this.composeForm.value;
let bank_account = new CreateMemberRequest.BankAccount();
bank_account.setBankId(bankId);
bank_account.setName(accountHolder);
bank_account.setAccountNumber(accountNumber);
bank_account.setExchangePassword(exchangePassword);
const member = new CreateMemberRequest();
const site = new Site();
const parentUsername = !!this.data.parent?.getUsername()
? this.data.parent?.getUsername()
: undefined;
site.setId(siteId);
member.setSiteId(siteId);
member.setUsername(username);
member.setPassword(password);
member.setMemberClassId(this.data.classId);
member.setMemberLevelId(environment.constants.levelIds.level1);
if (!!parentUsername) {
member.setReferrerMemberUsername(parentUsername);
}
member.setNickname(nickname);
member.setMobilePhoneNumber(mobilePhoneNumber);
member.setBankAccount(bank_account);
this._memberService
.createMember(member)
.then((res: CreateMemberResponse.Result) => {
console.log(res.getMember());
this.showAlert = true;
})
.then(() => setTimeout(() => this.close(), 5000))
.catch((e) => {
this.showAlert = true;
this.alert = { type: 'error', message: '등록에 실패하였습니다.' };
this.isSendDisable = false;
});
}
close(): void {
this.matDialogRef.close({
choice: true,
});
}
__checkUsernameDuplicate(event: FocusEvent): void {
const username = this.composeForm.get('username')?.value;
// console.log(event, '::', username);
this._identityService
.checkUsernameForDuplication(username)
.then((isUse: boolean) => {
if (!!isUse) {
this.composeForm
.get('username')
?.setErrors({ usernameDuplicate: true });
}
// this._changeDetectorRef.markForCheck();
});
}
__checkNickname(event: FocusEvent): void {
const nickname = this.composeForm.get('nickname')?.value;
this._identityService
.checkNicknameForDuplication(nickname)
.then((isUse: boolean) => {
if (!!isUse) {
this.composeForm
.get('nickname')
?.setErrors({ nicknameDuplicate: true });
}
// this._changeDetectorRef.markForCheck();
});
}
}