TD-835: Remove swag-questionary-aggr-proxy (#160)

This commit is contained in:
Rinat Arsaev 2024-01-10 17:49:48 +07:00 committed by GitHub
parent fe6438f83c
commit 2b1820f78d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 8 additions and 628 deletions

View File

@ -1 +1 @@
module.exports = require("@vality/prettier-config"); module.exports = require('@vality/prettier-config');

View File

@ -7,8 +7,6 @@
"transloco", "transloco",
"xrequest", "xrequest",
"klass", "klass",
"aggr",
"kontur",
"unflat", "unflat",
"datepicker", "datepicker",
"autoselect", "autoselect",
@ -28,7 +26,6 @@
"actionbar", "actionbar",
"topo", "topo",
"toponim", "toponim",
"dadata",
"unlim", "unlim",
"apikeys", "apikeys",
"anapi", "anapi",

13
package-lock.json generated
View File

@ -31,7 +31,6 @@
"@vality/swag-claim-management": "0.1.1-7a03f9b.0", "@vality/swag-claim-management": "0.1.1-7a03f9b.0",
"@vality/swag-organizations": "1.0.1-cd6cc10.0", "@vality/swag-organizations": "1.0.1-cd6cc10.0",
"@vality/swag-payments": "0.1.1-01da4bb.0", "@vality/swag-payments": "0.1.1-01da4bb.0",
"@vality/swag-questionary-aggr-proxy": "0.1.1-ed41741.0",
"@vality/swag-url-shortener": "0.1.1-f780d07.0", "@vality/swag-url-shortener": "0.1.1-f780d07.0",
"@vality/swag-wallet": "0.1.3-6c7361c.0", "@vality/swag-wallet": "0.1.3-6c7361c.0",
"angular-file": "^3.0.1", "angular-file": "^3.0.1",
@ -6538,18 +6537,6 @@
"@angular/core": "^13.0.0" "@angular/core": "^13.0.0"
} }
}, },
"node_modules/@vality/swag-questionary-aggr-proxy": {
"version": "0.1.1-ed41741.0",
"resolved": "https://registry.npmjs.org/@vality/swag-questionary-aggr-proxy/-/swag-questionary-aggr-proxy-0.1.1-ed41741.0.tgz",
"integrity": "sha512-Zm2DINHuG4xP+rmxWo2yvRHpkf84hNBS7giuE5AHw/zYPXiKG+9FiQxKYpU6g3OB4geZZWkt4lWLYgVwfcFFfQ==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^13.0.0",
"@angular/core": "^13.0.0"
}
},
"node_modules/@vality/swag-url-shortener": { "node_modules/@vality/swag-url-shortener": {
"version": "0.1.1-f780d07.0", "version": "0.1.1-f780d07.0",
"resolved": "https://registry.npmjs.org/@vality/swag-url-shortener/-/swag-url-shortener-0.1.1-f780d07.0.tgz", "resolved": "https://registry.npmjs.org/@vality/swag-url-shortener/-/swag-url-shortener-0.1.1-f780d07.0.tgz",

View File

@ -48,7 +48,6 @@
"@vality/swag-claim-management": "0.1.1-7a03f9b.0", "@vality/swag-claim-management": "0.1.1-7a03f9b.0",
"@vality/swag-organizations": "1.0.1-cd6cc10.0", "@vality/swag-organizations": "1.0.1-cd6cc10.0",
"@vality/swag-payments": "0.1.1-01da4bb.0", "@vality/swag-payments": "0.1.1-01da4bb.0",
"@vality/swag-questionary-aggr-proxy": "0.1.1-ed41741.0",
"@vality/swag-url-shortener": "0.1.1-f780d07.0", "@vality/swag-url-shortener": "0.1.1-f780d07.0",
"@vality/swag-wallet": "0.1.3-6c7361c.0", "@vality/swag-wallet": "0.1.3-6c7361c.0",
"angular-file": "^3.0.1", "angular-file": "^3.0.1",

View File

@ -1,29 +0,0 @@
import { Injectable } from '@angular/core';
import {
DaDataService as ApiDaDataService,
DaDataRequest,
} from '@vality/swag-questionary-aggr-proxy';
import { Observable } from 'rxjs';
import { pluck } from 'rxjs/operators';
import { createApi } from '../utils';
import { ParamsByRequestType, ResponseByRequestType, SuggestionsByRequestType } from './utils';
type RequestType = DaDataRequest.DaDataRequestTypeEnum;
@Injectable({
providedIn: 'root',
})
export class DaDataService extends createApi(ApiDaDataService) {
suggest<T extends RequestType>(
daDataRequestType: T,
params: ParamsByRequestType[T],
): Observable<SuggestionsByRequestType[T]> {
const requestParams = { request: { daDataRequestType, ...params } };
const request = this.requestDaData({ daDataParams: requestParams }) as Observable<
ResponseByRequestType[T]
>;
return request.pipe(pluck('suggestions')) as Observable<SuggestionsByRequestType[T]>;
}
}

View File

@ -1,4 +0,0 @@
export * from './questionary-aggr-proxy.module';
export * from './kontur-focus.service';
export * from './utils';
export * from './dadata.service';

View File

@ -1,61 +0,0 @@
import { Injectable } from '@angular/core';
import {
KonturFocusService as ApiKonturFocusService,
BeneficialOwnerQuery,
BeneficialOwnerResponses,
EgrDetailsQuery,
EgrDetailsResponses,
KonturFocusRequest,
KonturFocusResponse,
LicencesQuery,
LicencesResponses,
ReqQuery,
ReqResponses,
} from '@vality/swag-questionary-aggr-proxy';
import { Observable } from 'rxjs';
import { pluck } from 'rxjs/operators';
import { Mapping } from '../../../type-utils';
import { createApi } from '../utils';
type RequestType = KonturFocusRequest.KonturFocusRequestTypeEnum;
type ParamsByRequestType = Mapping<
RequestType,
KonturFocusRequest,
{
/* eslint-disable @typescript-eslint/naming-convention */
ReqQuery: ReqQuery;
EgrDetailsQuery: EgrDetailsQuery;
LicencesQuery: LicencesQuery;
BeneficialOwnerQuery: BeneficialOwnerQuery;
/* eslint-enable @typescript-eslint/naming-convention */
}
>;
export type ResponsesByRequestType = Mapping<
RequestType,
KonturFocusResponse,
{
/* eslint-disable @typescript-eslint/naming-convention */
ReqQuery: ReqResponses;
EgrDetailsQuery: EgrDetailsResponses;
LicencesQuery: LicencesResponses;
BeneficialOwnerQuery: BeneficialOwnerResponses;
/* eslint-enable @typescript-eslint/naming-convention */
}
>;
@Injectable({
providedIn: 'root',
})
export class KonturFocusService extends createApi(ApiKonturFocusService) {
request<T extends RequestType>(
konturFocusRequestType: T,
requestParams: Partial<Omit<ParamsByRequestType[T], 'konturFocusRequestType'>>,
): Observable<ResponsesByRequestType[T]['responses']> {
return this.requestKonturFocus({
konturFocusParams: { request: { konturFocusRequestType, ...requestParams } },
}).pipe(pluck<ResponsesByRequestType[T], 'responses'>('responses'));
}
}

View File

@ -1,16 +0,0 @@
import { NgModule } from '@angular/core';
import { Configuration } from '@vality/swag-questionary-aggr-proxy';
import { ConfigService } from '../../config';
@NgModule({
providers: [
{
provide: Configuration,
deps: [ConfigService],
useFactory: (configService: ConfigService) =>
new Configuration({ basePath: `${configService.apiEndpoint}/dark-api/v1` }),
},
],
})
export class QuestionaryAggrProxyModule {}

View File

@ -1,3 +0,0 @@
export function createIndividualEntityRegisteredName(fio: string): string {
return `ИП ${fio}`;
}

View File

@ -1,20 +0,0 @@
import { ParsedAddressRF, Toponim } from '@vality/swag-questionary-aggr-proxy';
function getAddressPart(toponim: Toponim): string {
return [toponim?.topoShortName, toponim?.topoValue].filter(Boolean).join(' ');
}
export function getAddress(address: ParsedAddressRF): string {
return [
getAddressPart(address.regionName),
getAddressPart(address.district),
getAddressPart(address.city),
getAddressPart(address.settlement),
getAddressPart(address.street),
getAddressPart(address.bulk),
getAddressPart(address.house),
getAddressPart(address.flat),
]
.filter((v) => !!v)
.join(', ');
}

View File

@ -1,7 +0,0 @@
export * from './is-req-individual-entity';
export * from './is-req-legal-entity';
export * from './get-address';
export * from './create-individual-entity-registered-name';
export * from './suggestion';
export * from './suggest-request';
export * from './suggest-response';

View File

@ -1,7 +0,0 @@
import { ReqContractor, ReqIndividualEntity } from '@vality/swag-questionary-aggr-proxy';
export function isReqIndividualEntity(
contractor: ReqContractor,
): contractor is ReqIndividualEntity {
return contractor.reqContractorType === 'ReqIndividualEntity';
}

View File

@ -1,5 +0,0 @@
import { ReqContractor, ReqLegalEntity } from '@vality/swag-questionary-aggr-proxy';
export function isReqLegalEntity(contractor: ReqContractor): contractor is ReqLegalEntity {
return contractor.reqContractorType === 'ReqLegalEntity';
}

View File

@ -1,32 +0,0 @@
import {
AddressQuery,
BankQuery,
DaDataRequest,
FioQuery,
FmsUnitQuery,
OkvedQuery,
PartyQuery,
} from '@vality/swag-questionary-aggr-proxy';
import { Mapping } from '@dsh/type-utils';
type RequestType = DaDataRequest.DaDataRequestTypeEnum;
type FullParamsByRequestType = Mapping<
RequestType,
DaDataRequest,
{
/* eslint-disable @typescript-eslint/naming-convention */
AddressQuery: AddressQuery;
BankQuery: BankQuery;
FioQuery: FioQuery;
FmsUnitQuery: FmsUnitQuery;
OkvedQuery: OkvedQuery;
PartyQuery: PartyQuery;
/* eslint-enable @typescript-eslint/naming-convention */
}
>;
export type ParamsByRequestType = {
[name in RequestType]: Omit<FullParamsByRequestType[name], 'daDataRequestType'>;
};

View File

@ -1,37 +0,0 @@
import {
AddressResponse,
BankResponse,
DaDataRequest,
DaDataResponse,
FioResponse,
FmsUnitResponse,
OkvedResponse,
PartyResponse,
} from '@vality/swag-questionary-aggr-proxy';
import { Mapping } from '@dsh/type-utils';
type RequestType = DaDataRequest.DaDataRequestTypeEnum;
export type ResponseByRequestType = Mapping<
RequestType,
DaDataResponse,
{
/* eslint-disable @typescript-eslint/naming-convention */
AddressQuery: AddressResponse;
BankQuery: BankResponse;
FioQuery: FioResponse;
FmsUnitQuery: FmsUnitResponse;
OkvedQuery: OkvedResponse;
PartyQuery: PartyResponse;
/* eslint-enable @typescript-eslint/naming-convention */
}
>;
export type SuggestionsByRequestType = {
[name in RequestType]: ResponseByRequestType[name]['suggestions'];
};
export type ContentByRequestType = {
[name in RequestType]: SuggestionsByRequestType[name][number];
};

View File

@ -1,4 +0,0 @@
export interface Suggestion {
value?: string;
unrestrictedValue?: string;
}

View File

@ -29,7 +29,6 @@ import * as Sentry from '@sentry/angular-ivy';
import { AnapiModule } from '@dsh/app/api/anapi'; import { AnapiModule } from '@dsh/app/api/anapi';
import { ClaimManagementModule } from '@dsh/app/api/claim-management'; import { ClaimManagementModule } from '@dsh/app/api/claim-management';
import { PaymentsModule } from '@dsh/app/api/payments'; import { PaymentsModule } from '@dsh/app/api/payments';
import { QuestionaryAggrProxyModule } from '@dsh/app/api/questionary-aggr-proxy';
import { UrlShortenerModule } from '@dsh/app/api/url-shortener'; import { UrlShortenerModule } from '@dsh/app/api/url-shortener';
import { WalletModule } from '@dsh/app/api/wallet'; import { WalletModule } from '@dsh/app/api/wallet';
import { ErrorModule } from '@dsh/app/shared/services'; import { ErrorModule } from '@dsh/app/shared/services';
@ -75,7 +74,6 @@ import { TranslocoHttpLoaderService } from './transloco-http-loader.service';
PaymentsModule, PaymentsModule,
OrganizationsModule, OrganizationsModule,
UrlShortenerModule, UrlShortenerModule,
QuestionaryAggrProxyModule,
WalletModule, WalletModule,
SpinnerModule, SpinnerModule,
ApiKeysModule, ApiKeysModule,

View File

@ -1,27 +0,0 @@
@use '@angular/material' as mat;
@mixin dsh-dadata-autocomplete-theme($theme) {
$primary: map-get($theme, primary);
.dsh-dadata-autocomplete-mark {
background-color: mat.get-color-from-palette($primary, 100);
}
}
@mixin dsh-dadata-autocomplete-typography($config) {
.dsh-dadata-autocomplete-option-header {
font: {
family: mat.font-family($config, body-1);
size: mat.font-size($config, body-1);
weight: mat.font-weight($config, body-1);
}
}
.dsh-dadata-autocomplete-option-description {
font: {
family: mat.font-family($config, caption);
size: mat.font-size($config, caption);
weight: mat.font-weight($config, caption);
}
}
}

View File

@ -1,25 +0,0 @@
<mat-form-field class="field">
<mat-label>{{ label }}</mat-label>
<input [formControl]="control" [matAutocomplete]="auto" [required]="required" matInput />
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="optionSelectedHandler($event)">
<ng-container *ngIf="!(isOptionsLoading$ | async)">
<mat-option
*ngFor="let option of options$ | async"
[value]="option.label"
class="option"
>
<div
[innerHTML]="option.label | highlight: control.value"
class="dsh-dadata-autocomplete-option-header"
></div>
<div
[innerHTML]="option.description | highlight: control.value"
class="dsh-dadata-autocomplete-option-description"
></div>
</mat-option>
</ng-container>
</mat-autocomplete>
<button *ngIf="control.value" mat-icon-button matSuffix (click)="clear()">
<dsh-bi icon="x" size="lg"></dsh-bi>
</button>
</mat-form-field>

View File

@ -1,7 +0,0 @@
.field {
width: 100%;
}
.option {
line-height: 1.4;
}

View File

@ -1,156 +0,0 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
import { FormControlSuperclass, createControlProviders } from '@vality/ng-core';
import {
BankContent,
DaDataRequest,
FmsUnitContent,
FmsUnitQuery,
PartyContent,
} from '@vality/swag-questionary-aggr-proxy';
import { coerceBoolean } from 'coerce-property';
import isEmpty from 'lodash-es/isEmpty';
import { interval, Observable } from 'rxjs';
import { debounce, filter, map, switchMap, take } from 'rxjs/operators';
import {
ContentByRequestType,
DaDataService,
ParamsByRequestType,
Suggestion,
} from '@dsh/app/api/questionary-aggr-proxy';
import { progress, shareReplayUntilDestroyed, takeError } from '@dsh/app/custom-operators';
import { Type } from './type';
import DaDataRequestType = DaDataRequest.DaDataRequestTypeEnum;
interface Option<S extends Suggestion> {
label: string;
description: string;
value: S;
}
type RequestTypeByType = { [name in Type]: DaDataRequestType };
const REQUEST_TYPE_BY_TYPE: RequestTypeByType = {
address: DaDataRequestType.AddressQuery,
bank: DaDataRequestType.BankQuery,
fio: DaDataRequestType.FioQuery,
fmsUnit: DaDataRequestType.FmsUnitQuery,
okved: DaDataRequestType.OkvedQuery,
party: DaDataRequestType.PartyQuery,
};
@UntilDestroy()
@Component({
selector: 'dsh-dadata-autocomplete',
styleUrls: ['dadata.component.scss'],
templateUrl: 'dadata.component.html',
providers: createControlProviders(() => DaDataAutocompleteComponent),
})
export class DaDataAutocompleteComponent<
T extends Type = Type,
R extends DaDataRequestType = RequestTypeByType[T],
>
extends FormControlSuperclass<string>
implements OnInit
{
@Input() type: T;
@Input() params: ParamsByRequestType[R];
@Input() label: string;
@Input() @coerceBoolean required = false;
@Output() optionSelected = new EventEmitter<ContentByRequestType[R]>();
@Output() errorOccurred = new EventEmitter<unknown>();
@Output() suggestionNotFound = new EventEmitter();
suggestions$: Observable<ContentByRequestType[R][]> = this.control.valueChanges.pipe(
filter<string>(Boolean),
debounce(() => interval(300)),
switchMap((v) => this.loadSuggestions(v)),
shareReplayUntilDestroyed(this),
);
options$: Observable<Option<ContentByRequestType[R]>[]> = this.suggestions$.pipe(
map((suggestions) => suggestions.map((s) => this.getOption(s))),
shareReplayUntilDestroyed(this),
);
isOptionsLoading$: Observable<boolean> = progress(
this.control.valueChanges,
this.suggestions$,
).pipe(shareReplayUntilDestroyed(this));
constructor(private daDataService: DaDataService) {
super();
}
ngOnInit(): void {
this.isOptionsLoading$.pipe(untilDestroyed(this)).subscribe();
this.suggestions$
.pipe(filter(isEmpty), untilDestroyed(this))
.subscribe(() => this.suggestionNotFound.emit());
this.suggestions$
.pipe(takeError, untilDestroyed(this))
.subscribe((error) => this.errorOccurred.next(error));
}
optionSelectedHandler(e: MatAutocompleteSelectedEvent): void {
const idx = e.source.options.toArray().findIndex((option) => option === e.option);
this.options$
.pipe(take(1), untilDestroyed(this))
.subscribe((options) => this.optionSelected.next(options[idx].value));
}
clear(): void {
this.control.setValue('');
this.optionSelected.emit(null);
}
private loadSuggestions(query: string): Observable<ContentByRequestType[R][]> {
const params: ParamsByRequestType[R] = { query } as ParamsByRequestType[R];
return this.daDataService.suggest(
REQUEST_TYPE_BY_TYPE[this.type],
this.withSpecificParams(params),
) as unknown as Observable<ContentByRequestType[R][]>;
}
private withSpecificParams(params: ParamsByRequestType[R]): ParamsByRequestType[R] {
switch (this.type) {
case 'fmsUnit': {
const fmsUnitParams = { ...params } as FmsUnitQuery;
fmsUnitParams.queryType = 'FullTextSearch';
return fmsUnitParams;
}
default:
return params;
}
}
private getOption(suggestion: ContentByRequestType[R]): Option<ContentByRequestType[R]> {
return {
label: suggestion.value || '',
description: this.getDescription(suggestion),
value: suggestion,
};
}
private getDescription(suggestion: ContentByRequestType[R]): string {
switch (this.type) {
case 'bank': {
const { bic, address } = suggestion as BankContent;
return [bic, address?.value].filter(Boolean).join(' ');
}
case 'party': {
const { inn, ogrn, address } = suggestion as PartyContent;
const innOGRN = [inn, ogrn].filter(Boolean).join('/');
return [innOGRN, address?.value].filter(Boolean).join(' ');
}
case 'fmsUnit': {
const { code } = suggestion as FmsUnitContent;
return code;
}
default:
return '';
}
}
}

View File

@ -1,30 +0,0 @@
import { CommonModule } from '@angular/common';
import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatInputModule } from '@angular/material/input';
import { FormControlsModule } from '@dsh/components/form-controls';
import { BootstrapIconModule } from '@dsh/components/indicators';
import { DaDataAutocompleteComponent } from './dadata.component';
import { HighlightSearchPipe } from './highlight.pipe';
@NgModule({
imports: [
HttpClientModule,
MatAutocompleteModule,
CommonModule,
FormsModule,
ReactiveFormsModule,
MatInputModule,
FormControlsModule,
BootstrapIconModule,
MatButtonModule,
],
declarations: [DaDataAutocompleteComponent, HighlightSearchPipe],
exports: [DaDataAutocompleteComponent],
})
export class DaDataModule {}

View File

@ -1,29 +0,0 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({
name: 'highlight',
})
export class HighlightSearchPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform(value: string, args: string): SafeHtml {
if (!args) {
return value;
}
const re = new RegExp(args, 'gi');
// eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
const match = value.match(re);
if (!match) {
return value;
}
const replacedValue = value.replace(
re,
'<mark class="dsh-dadata-autocomplete-mark">' + match[0] + '</mark>',
);
return this.sanitizer.bypassSecurityTrustHtml(replacedValue);
}
}

View File

@ -1 +0,0 @@
export * from './dadata.module';

View File

@ -1,2 +0,0 @@
export const TYPE = ['address', 'party', 'bank', 'fio', 'fmsUnit', 'okved'] as const;
export type Type = (typeof TYPE)[number];

View File

@ -4,12 +4,6 @@
fxLayout="column" fxLayout="column"
fxLayoutGap="16px" fxLayoutGap="16px"
> >
<dsh-dadata-autocomplete
[formControl]="searchControl"
[label]="p('form.search')"
type="party"
(optionSelected)="updateSuggestion($event)"
></dsh-dadata-autocomplete>
<mat-form-field> <mat-form-field>
<mat-label>{{ p('form.registeredName') }}</mat-label> <mat-label>{{ p('form.registeredName') }}</mat-label>
<input <input

View File

@ -1,17 +1,7 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { FormControl, FormBuilder } from '@angular/forms'; import { FormBuilder } from '@angular/forms';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { UntilDestroy } from '@ngneat/until-destroy';
import { FormGroupSuperclass, createControlProviders } from '@vality/ng-core'; import { FormGroupSuperclass, createControlProviders } from '@vality/ng-core';
import { PartyContent, ReqResponse, OrgType } from '@vality/swag-questionary-aggr-proxy';
import { map } from 'rxjs/operators';
import {
KonturFocusService,
createIndividualEntityRegisteredName,
isReqLegalEntity,
isReqIndividualEntity,
getAddress,
} from '@dsh/app/api/questionary-aggr-proxy';
import { RussianBankAccountForm } from '../russian-bank-account-form/types/bank-account-form-data'; import { RussianBankAccountForm } from '../russian-bank-account-form/types/bank-account-form-data';
@ -43,64 +33,8 @@ export class NewContractorFormComponent extends FormGroupSuperclass<Partial<NewC
representativeDocument: null, representativeDocument: null,
bankAccount: null, bankAccount: null,
}); });
searchControl = new FormControl<string>('');
constructor( constructor(private fb: FormBuilder) {
private fb: FormBuilder,
private konturFocusService: KonturFocusService,
) {
super(); super();
} }
updateSuggestion(dadata: PartyContent): void {
if (!dadata) return this.control.patchValue(this.getFormByData());
this.konturFocusService
.request('ReqQuery', {
inn: [dadata.inn],
})
.pipe(
map(([kontur]): Partial<NewContractorForm> => this.getFormByData(dadata, kontur)),
untilDestroyed(this),
)
.subscribe(
(data) => this.control.patchValue(data),
(err) => {
console.error('Kontur.Focus API error', err);
this.control.patchValue(this.getFormByData(dadata));
},
);
}
private getFormByData(dadata?: PartyContent, kontur?: ReqResponse): Partial<NewContractorForm> {
const result: Partial<NewContractorForm> = {
inn: kontur?.inn || dadata?.inn || null,
registeredNumber: kontur?.ogrn || dadata?.ogrn || null,
registeredName: dadata?.name?.shortWithOpf || null,
actualAddress: null,
representativeFullName: null,
};
if (dadata) {
if (dadata.orgType === OrgType.Individual) {
result.actualAddress = dadata.address?.value || result.actualAddress;
result.representativeFullName =
dadata.name?.fullName || result.representativeFullName;
}
}
if (kontur) {
if (isReqIndividualEntity(kontur.contractor)) {
result.registeredName =
createIndividualEntityRegisteredName(kontur.contractor.fio) ||
result.registeredName;
result.representativeFullName =
kontur.contractor.fio || result.representativeFullName;
}
if (isReqLegalEntity(kontur.contractor)) {
result.registeredName =
kontur.contractor.legalName.shortName || result.registeredName;
result.actualAddress =
getAddress(kontur.contractor.legalAddress.addressRf) || result.actualAddress;
}
}
return result;
}
} }

View File

@ -4,13 +4,6 @@
fxLayout="column" fxLayout="column"
fxLayoutGap="16px" fxLayoutGap="16px"
> >
<dsh-dadata-autocomplete
[formControl]="searchControl"
[label]="p('search')"
type="bank"
(optionSelected)="bankSelected($event)"
></dsh-dadata-autocomplete>
<div gdColumns="1fr" gdColumns.gt-sm="1fr 1fr" gdGap="24px"> <div gdColumns="1fr" gdColumns.gt-sm="1fr 1fr" gdGap="24px">
<mat-form-field gdColumn="1/-1"> <mat-form-field gdColumn="1/-1">
<mat-label>{{ p('name') }}</mat-label> <mat-label>{{ p('name') }}</mat-label>

View File

@ -1,7 +1,6 @@
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
import { FormBuilder } from '@angular/forms'; import { FormBuilder } from '@angular/forms';
import { createControlProviders, FormGroupSuperclass } from '@vality/ng-core'; import { createControlProviders, FormGroupSuperclass } from '@vality/ng-core';
import { BankContent } from '@vality/swag-questionary-aggr-proxy';
import { RussianBankAccountForm } from './types/bank-account-form-data'; import { RussianBankAccountForm } from './types/bank-account-form-data';
@ -20,17 +19,8 @@ export class RussianBankAccountFormComponent extends FormGroupSuperclass<
bankPostAccount: null, bankPostAccount: null,
bankBik: null, bankBik: null,
}); });
searchControl = this.fb.control<string>('');
constructor(private fb: FormBuilder) { constructor(private fb: FormBuilder) {
super(); super();
} }
bankSelected(bank: BankContent): void {
this.control.patchValue({
bankName: bank?.value || null,
bankBik: bank?.bic || null,
bankPostAccount: bank?.correspondentAccount || null,
});
}
} }

View File

@ -22,7 +22,6 @@ import { ButtonModule } from '@dsh/components/buttons';
import { FormatInputModule } from '@dsh/components/form-controls'; import { FormatInputModule } from '@dsh/components/form-controls';
import { DetailsItemModule } from '@dsh/components/layout'; import { DetailsItemModule } from '@dsh/components/layout';
import { DaDataModule } from '../../../../dadata';
import { ShopPayoutToolDetailsService } from '../../../../sections/payment-section/shops/services/shop-payout-tool-details/shop-payout-tool-details.service'; import { ShopPayoutToolDetailsService } from '../../../../sections/payment-section/shops/services/shop-payout-tool-details/shop-payout-tool-details.service';
import { CurrencyAutocompleteFieldModule } from '../../inputs/currency-autocomplete-field'; import { CurrencyAutocompleteFieldModule } from '../../inputs/currency-autocomplete-field';
@ -43,7 +42,6 @@ import { CreateRussianShopEntityService } from './services/create-russian-shop-e
MatInputModule, MatInputModule,
MatDividerModule, MatDividerModule,
MatRadioModule, MatRadioModule,
DaDataModule,
FormatInputModule, FormatInputModule,
MatSelectModule, MatSelectModule,
PayoutToolDetailsModule, PayoutToolDetailsModule,

View File

@ -220,8 +220,7 @@
"registeredNumber": "OGRN/OGRNIP", "registeredNumber": "OGRN/OGRNIP",
"representativeDocument": "EEC/representative document", "representativeDocument": "EEC/representative document",
"representativeFullName": "EEC/representative full name", "representativeFullName": "EEC/representative full name",
"representativePosition": "Position of EEC/representative", "representativePosition": "Position of EEC/representative"
"search": "To search, enter the name of the legal entity, INN, OGRN/OGRNIP"
} }
}, },
"newInternationalContractorForm": { "newInternationalContractorForm": {
@ -269,8 +268,7 @@
"account": "Operating account", "account": "Operating account",
"bik": "BIC", "bik": "BIC",
"name": "Name", "name": "Name",
"postAccount": "Correspondent account", "postAccount": "Correspondent account"
"search": "For search, specify the name, BIC, SWIFT or TIN of the bank"
}, },
"select-active-organization-dialog": { "select-active-organization-dialog": {
"confirm": "Confirm", "confirm": "Confirm",

View File

@ -220,8 +220,7 @@
"registeredNumber": "ОГРН/ОГРНИП", "registeredNumber": "ОГРН/ОГРНИП",
"representativeDocument": "Документ ЕИО/представителя", "representativeDocument": "Документ ЕИО/представителя",
"representativeFullName": "ФИО ЕИО/представителя", "representativeFullName": "ФИО ЕИО/представителя",
"representativePosition": "Должность ЕИО/представителя", "representativePosition": "Должность ЕИО/представителя"
"search": "Для поиска укажите название юр. лица, ИНН, ОГРН/ОГРНИП"
} }
}, },
"newInternationalContractorForm": { "newInternationalContractorForm": {
@ -269,8 +268,7 @@
"account": "Расчетный счет", "account": "Расчетный счет",
"bik": "БИК", "bik": "БИК",
"name": "Наименование", "name": "Наименование",
"postAccount": "Корреспондентский счет", "postAccount": "Корреспондентский счет"
"search": "Для поиска укажите название, БИК, SWIFT или ИНН банка"
}, },
"select-active-organization-dialog": { "select-active-organization-dialog": {
"confirm": "Подтвердить", "confirm": "Подтвердить",

View File

@ -23,7 +23,6 @@
@import '../../app/home/home-theme'; @import '../../app/home/home-theme';
@import '../../app/home/actionbar/actionbar-theme'; @import '../../app/home/actionbar/actionbar-theme';
@import '../../app/home/mobile-grid/mobile-grid-theme'; @import '../../app/home/mobile-grid/mobile-grid-theme';
@import '../../app/dadata/dadata-theme';
@import '../../app/sections/payment-section/analytics/percent-difference/percent-difference-theme'; @import '../../app/sections/payment-section/analytics/percent-difference/percent-difference-theme';
@import '../../app/sections/payment-section/analytics/stat-item/stat-item-theme'; @import '../../app/sections/payment-section/analytics/stat-item/stat-item-theme';
@import '../../app/sections/payment-section/balances/balances-theme'; @import '../../app/sections/payment-section/balances/balances-theme';
@ -39,7 +38,6 @@
@include dsh-mobile-grid-theme($theme); @include dsh-mobile-grid-theme($theme);
@include dsh-button-theme($theme); @include dsh-button-theme($theme);
@include dsh-status-theme($theme); @include dsh-status-theme($theme);
@include dsh-dadata-autocomplete-theme($theme);
@include dsh-details-item-theme($theme); @include dsh-details-item-theme($theme);
@include dsh-panel-theme($theme); @include dsh-panel-theme($theme);
@include dsh-bar-chart-theme($theme); @include dsh-bar-chart-theme($theme);

View File

@ -20,7 +20,6 @@
@import '../../app/home/home-theme'; @import '../../app/home/home-theme';
@import '../../app/home/mobile-grid/mobile-grid-theme'; @import '../../app/home/mobile-grid/mobile-grid-theme';
@import '../../app/dadata/dadata-theme';
@import '../../app/sections/payment-section/balances/balances-theme'; @import '../../app/sections/payment-section/balances/balances-theme';
@import '../../app/sections/payment-section/no-shops-alert/no-shops-alert-theme'; @import '../../app/sections/payment-section/no-shops-alert/no-shops-alert-theme';
@ -30,7 +29,6 @@
@include dsh-state-nav-typography($config); @include dsh-state-nav-typography($config);
@include dsh-card-typography($config); @include dsh-card-typography($config);
@include dsh-dropdown-typography($config); @include dsh-dropdown-typography($config);
@include dsh-dadata-autocomplete-typography($config);
@include dsh-panel-typography($config); @include dsh-panel-typography($config);
@include dsh-charts-typography($config); @include dsh-charts-typography($config);
@include dsh-row-typography($config); @include dsh-row-typography($config);