Merge remote-tracking branch 'origin/release/1.9.11' into develop

# Conflicts:
#	backend/src/main/java/ru/micord/ervu/account_applications/EnumColumnFormatter.java
#	backend/src/main/java/ru/micord/ervu/account_applications/service/AbstractUserDataService.java
#	backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesDaoService.java
#	resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page
#	resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page
This commit is contained in:
adel.kalimullin 2025-04-11 09:19:06 +03:00
commit a4703b0d4a
23 changed files with 167 additions and 291 deletions

View file

@ -1,57 +0,0 @@
ARG BUILDER_IMAGE=registry.gosuslugi.local/ervu-uat/micord-deps:1.9.11
ARG RUNTIME_IMAGE=registry.gosuslugi.local/os/altlinux@sha256:fd478a99adab9e195d652f78d0c90638de83f6f605fd7254f6241e594054f0f2
FROM $BUILDER_IMAGE AS builder
ARG MVN_FLAGS="-T4C -Pprod -DexecuteNpmInstall=false --batch-mode --no-transfer-progress"
RUN apt-get update \
&& apt-get -y install git glibc-locales java-17-openjdk-devel maven node \
&& apt-get clean
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8
WORKDIR /app
COPY . .
RUN mkdir -p /root/.m2 \
&& cp config/uat/settings.xml /root/.m2/settings.xml
RUN mvn clean ${MVN_FLAGS} \
&& mvn package ${MVN_FLAGS}
FROM $RUNTIME_IMAGE
COPY --from=builder /usr/lib/locale/ru_RU /usr/lib/locale/ru_RU
COPY --from=builder /usr/lib/locale/ru_RU.utf8 /usr/lib/locale/ru_RU.utf8
COPY --from=builder /usr/share/locale/ru_RU /usr/share/locale/ru_RU
COPY config/entrypoint.sh /entrypoint.sh
RUN apt-get update \
&& apt-get -y install fonts-ttf-ms java-17-openjdk-headless tomcat tomcat-webapps tomcat-admin-webapps \
&& apt-get clean \
&& rm -f /var/cache/apt/*.bin \
&& rm -f /var/lib/apt/lists/update* \
&& chmod +x /entrypoint.sh
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
COPY config/tomcat /
RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \
&& chown -R tomcat:tomcat /var/lib/tomcat/webapps
COPY --from=builder /app/backend/target/account-applications.war /var/lib/tomcat/webapps/account-applications.war
USER tomcat
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -1,63 +0,0 @@
ARG BUILDER_IMAGE=registry-dev.pgs.rtlabs.ru/ervu/micord-deps:0.0.1-shaeb3853d5
ARG RUNTIME_IMAGE=registry-dev.pgs.rtlabs.ru/basealt/altsp:c10f1
FROM $BUILDER_IMAGE AS builder
ARG MVN_FLAGS="-T4C -Pprod -DexecuteNpmInstall=false --batch-mode --no-transfer-progress"
RUN rm -f /etc/apt/sources.list.d/* \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/x86_64 classic" > /etc/apt/sources.list \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/noarch classic" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get -y install git glibc-locales java-17-openjdk-devel maven node \
&& apt-get clean
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8
WORKDIR /app
COPY . .
RUN mkdir -p /root/.m2 \
&& cp config/settings.xml /root/.m2/settings.xml
RUN mvn clean ${MVN_FLAGS} \
&& mvn package ${MVN_FLAGS}
FROM $RUNTIME_IMAGE
COPY --from=builder /usr/lib/locale/ru_RU /usr/lib/locale/ru_RU
COPY --from=builder /usr/lib/locale/ru_RU.utf8 /usr/lib/locale/ru_RU.utf8
COPY --from=builder /usr/share/locale/ru_RU /usr/share/locale/ru_RU
COPY config/entrypoint.sh /entrypoint.sh
RUN rm -f /etc/apt/sources.list.d/* \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/x86_64 classic" > /etc/apt/sources.list \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/noarch classic" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get -y install fonts-ttf-ms java-17-openjdk-headless tomcat tomcat-webapps \
&& apt-get clean \
&& rm -f /var/cache/apt/*.bin \
&& rm -f /var/lib/apt/lists/update* \
&& chmod +x /entrypoint.sh
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
COPY config/tomcat /
RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \
&& chown -R tomcat:tomcat /var/lib/tomcat/webapps
COPY --from=builder /app/backend/target/account-applications.war /var/lib/tomcat/webapps/account-applications.war
USER tomcat
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -0,0 +1,26 @@
package ru.micord.ervu.account_applications.component.property.grid.formatter;
import property.grid.Formatter;
/**
* @author Adel Kalimullin
*/
public class ErvuSnilsFormatter implements Formatter<String, String> {
@Override
public String format(String value) {
if (value == null) {
return null;
}
String number = value.replaceAll("\\D", "");
if (number.length() != 11) {
throw new IllegalArgumentException("Некорректный формат СНИЛС: " + number);
}
return number.substring(0, 3) + "-" +
number.substring(3, 6) + "-" +
number.substring(6, 9) + " " +
number.substring(9);
}
}

View file

@ -13,6 +13,7 @@ import com.google.common.net.HttpHeaders;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import ru.micord.ervu.account_applications.component.exception.ApiResponseException; import ru.micord.ervu.account_applications.component.exception.ApiResponseException;
/** /**
* @author Adel Kalimullin * @author Adel Kalimullin
*/ */

View file

@ -76,7 +76,7 @@ public class AccountServiceImpl extends AbstractUserDataService {
} }
if (FIELD_SNILS.equals(field.getName()) && value instanceof String snils) { if (FIELD_SNILS.equals(field.getName()) && value instanceof String snils) {
map.put(field.getName(), formatSnils(snils)); map.put(field.getName(), snils.replaceAll("\\D", ""));
continue; continue;
} }
@ -117,20 +117,4 @@ public class AccountServiceImpl extends AbstractUserDataService {
private boolean isSimple(Class<?> type) { private boolean isSimple(Class<?> type) {
return ClassUtils.isPrimitiveOrWrapper(type) || type == String.class; return ClassUtils.isPrimitiveOrWrapper(type) || type == String.class;
} }
private String formatSnils(String snils) {
if (snils == null) {
return null;
}
String number = snils.replaceAll("\\D", "");
if (number.length() != 11) {
throw new IllegalArgumentException("Некорректный формат СНИЛС: " + number);
}
return number.substring(0, 3) + "-" +
number.substring(3, 6) + "-" +
number.substring(6, 9) + " " +
number.substring(9);
}
} }

View file

@ -16,7 +16,6 @@ import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import ru.micord.ervu.account_applications.component.exception.UserDataLoadException; import ru.micord.ervu.account_applications.component.exception.UserDataLoadException;
import ru.micord.ervu.account_applications.component.model.Role; import ru.micord.ervu.account_applications.component.model.Role;
import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.service.constant.PathConstant; import ru.micord.ervu.account_applications.service.constant.PathConstant;
/** /**

View file

@ -1,74 +0,0 @@
name: ervu-account-applications-backend
replicaCount: 1
resources:
requests:
memory: '256Mi'
cpu: '50m'
limits:
memory: '2Gi'
cpu: '1'
env:
- name: ERVU_URL
value: 'https://{{ $.Values.ingress_base_host }}'
- name: ERVU_PWD_SIGN_SECRET_KEY
value: 'DtCAQdeKnrAMLfdJkFVdfQnyT/Z5OINK4jqX0LbavfM='
ports:
- name: http
containerPort: 8080
services:
- name: '{{ $.Values.name }}'
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
postgres:
database: 'ervu_account_applications'
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 3
httpGet:
path: /account-applications/version
port: 8080
initialDelaySeconds: 30
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 5
ingress:
- name: '{{ $.Values.name }}'
annotations:
nginx.ingress.kubernetes.io/affinity: 'cookie'
nginx.ingress.kubernetes.io/session-cookie-name: 'stickysession'
nginx.ingress.kubernetes.io/session-cookie-max-age: '7200'
nginx.ingress.kubernetes.io/proxy-body-size: "75m"
nginx.ingress.kubernetes.io/rewrite-target: /account-applications/$2
labels:
app/name: ervu-account-applications
rules:
- host: '{{ $.Values.ingress_base_host }}'
http:
paths:
- path: /mfe/account-applications/account-applications(/|$)(.*)
pathType: Prefix
backend:
service:
name: '{{ $.Values.name }}'
port:
name: http

View file

@ -33,7 +33,7 @@ http {
server { server {
listen 80 default; listen 80 default;
access_log /var/log/nginx/access.log nginx_main; access_log /var/log/nginx/access.log nginx_main;
error_log /var/log/nginx/error.log error; error_log /var/log/nginx/error.log error;
charset utf-8; charset utf-8;
@ -55,8 +55,8 @@ http {
gzip_min_length 256; gzip_min_length 256;
gzip_types gzip_types
application/atom+xml application/atom+xml
application/geo+json application/geo+json
application/javascript application/javascript
application/x-javascript application/x-javascript
application/json application/json
application/ld+json application/ld+json
@ -75,41 +75,41 @@ http {
text/xml; text/xml;
location / { location / {
root /frontend; root /frontend;
index index.html; index index.html;
try_files $uri @index; try_files $uri @index;
#Application config #Application config
location = /src/resources/app-config.json { location = /src/resources/app-config.json {
add_header Cache-Control "no-cache"; add_header Cache-Control "no-cache";
expires 0; expires 0;
} }
# Media: images, icons, video, audio, HTC # Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff|ttf)$ { location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff|ttf)$ {
expires 1M; expires 1M;
access_log off; access_log off;
# max-age must be in seconds # max-age must be in seconds
add_header Cache-Control "max-age=2629746, public"; add_header Cache-Control "max-age=2629746, public";
} }
# CSS and Javascript # CSS and Javascript
location ~* \.(?:css|js)$ { location ~* \.(?:css|js)$ {
expires 1y; expires 1y;
access_log off; access_log off;
add_header Cache-Control "max-age=31556952, public"; add_header Cache-Control "max-age=31556952, public";
} }
} }
location @index { location @index {
root /frontend; root /frontend;
add_header Cache-Control "no-cache"; add_header Cache-Control "no-cache";
expires 0; expires 0;
try_files /index.html =404; try_files /index.html =404;
} }
location = /health { location = /health {
access_log off; access_log off;
add_header 'Content-Type' 'application/json'; add_header 'Content-Type' 'application/json';
return 200 '{"status":"UP"}'; return 200 '{"status":"UP"}';
} }
} }
} }

View file

@ -1,13 +0,0 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>central-mirror</id>
<name>rtlabs-public</name>
<url>https://nexus-dev.pgs.rtlabs.ru/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>

View file

@ -1,13 +0,0 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>central-mirror</id>
<name>rtlabs-public</name>
<url>http://nexus.gosuslugi.local/content/repositories/central</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>

View file

@ -4269,7 +4269,7 @@
}, },
"inputmask": { "inputmask": {
"version": "5.0.10-beta.37", "version": "5.0.10-beta.37",
"resolved": "https://repo.micord.ru/repository/npm-all/inputmask/-/inputmask-5.0.10-beta.37.tgz", "resolved": "https://registry.npmjs.org/inputmask/-/inputmask-5.0.10-beta.37.tgz",
"integrity": "sha512-01fRvuo1ck4+/ttrSRFhLJ0exzFYdj2Q5x3qfBu4uJ/r0F81qFGpseHPcwK1e3YQL0531jew4Ipt3UCUCPA4CA==" "integrity": "sha512-01fRvuo1ck4+/ttrSRFhLJ0exzFYdj2Q5x3qfBu4uJ/r0F81qFGpseHPcwK1e3YQL0531jew4Ipt3UCUCPA4CA=="
}, },
"inquirer": { "inquirer": {

View file

@ -28,7 +28,6 @@ import {
import { import {
TreeItemRpcService TreeItemRpcService
} from "../../../generated/ru/micord/ervu/account_applications/component/rpc/TreeItemRpcService"; } from "../../../generated/ru/micord/ervu/account_applications/component/rpc/TreeItemRpcService";
import {AuthorizationService} from "../../../modules/app/service/authorization.service";
@Component({ @Component({
@ -81,10 +80,6 @@ export class DropdownTreeViewComponent extends InputControl {
this.taskParamsProvider = this.injector.get(TaskParamsProvider); this.taskParamsProvider = this.injector.get(TaskParamsProvider);
this.localStorageService = this.injector.get(LocalStorageService); this.localStorageService = this.injector.get(LocalStorageService);
this.pageContextHolder = this.injector.get(PageContextHolder); this.pageContextHolder = this.injector.get(PageContextHolder);
let authService = this.injector.get(AuthorizationService);
if (authService.hasRole('security_administrator')) {
this.skipInitialSelection = true;
}
this.webbpmStorage = this.webbpmStorage =
this.getTreeValuesStorage(this.treeValuesCacheStrategy, this.treeValuesCustomName); this.getTreeValuesStorage(this.treeValuesCacheStrategy, this.treeValuesCustomName);
this.cachedValue = this.getCachedValue(); this.cachedValue = this.getCachedValue();

View file

@ -4,7 +4,7 @@ import {NgModuleRef} from "@angular/core";
let childEventHandlerFromContainer = null; let childEventHandlerFromContainer = null;
export type ChildEventType = 'navigate' | 'token-request' export type ChildEventType = 'navigate' | 'token-request' | 'ws-request'
export type ParentEventType = 'navigate'; export type ParentEventType = 'navigate';
export function fireMfeEventToContainer(eventType: ChildEventType, eventData: any): Promise<any> { export function fireMfeEventToContainer(eventType: ChildEventType, eventData: any): Promise<any> {

View file

@ -0,0 +1,3 @@
export class SocketProvider {
public getSocket(): Promise<any> { return null }
}

View file

@ -1,6 +1,7 @@
import {Injectable} from "@angular/core"; import {Injectable} from "@angular/core";
import {Subject} from "rxjs"; import {Subject} from "rxjs";
import {HttpClient} from "@angular/common/http"; import {HttpClient} from "@angular/common/http";
import {SocketProvider} from "../provider/socket.provider";
export interface UserSession { export interface UserSession {
userId: string, userId: string,
@ -17,10 +18,12 @@ export class AuthorizationService {
public onSessionUpdate: Subject<UserSession> = new Subject<UserSession>(); public onSessionUpdate: Subject<UserSession> = new Subject<UserSession>();
constructor(protected httpClient: HttpClient) {} constructor(protected httpClient: HttpClient, protected socketProvider: SocketProvider) {}
public getCurrentSession(): Promise<any> { public getCurrentSession(): Promise<any> {
if (this.session) return new Promise(resolve => resolve(this.session)) if (this.session) return new Promise(resolve => resolve(this.session));
//TODO remove after test
this.listenSocket();
return this.httpClient.get('session') return this.httpClient.get('session')
.toPromise() .toPromise()
.then((session: UserSession) => { .then((session: UserSession) => {
@ -30,6 +33,13 @@ export class AuthorizationService {
}) })
} }
private async listenSocket(): Promise<void> {
const webSocketPlugin = await this.socketProvider.getSocket();
webSocketPlugin.addListener((e: MessageEvent) => {
console.log('socket msg!!!', JSON.parse(e.data));
});
}
isAuthorized(): boolean { isAuthorized(): boolean {
return !!this.session; return !!this.session;
} }
@ -61,4 +71,4 @@ export class AuthorizationService {
getRoles(): string[] { getRoles(): string[] {
return this.isAuthorized() ? this.session.roles : null; return this.isAuthorized() ? this.session.roles : null;
} }
} }

View file

@ -28,6 +28,8 @@ import {TokenProvider} from "../app/provider/token.provider";
import {MfeTokenProvider} from "./provider/mfe-token.provider"; import {MfeTokenProvider} from "./provider/mfe-token.provider";
import {DEFAULT_HTTP_INTERCEPTOR_PROVIDERS} from "./interceptor/mfe-default-interceptors.prod"; import {DEFAULT_HTTP_INTERCEPTOR_PROVIDERS} from "./interceptor/mfe-default-interceptors.prod";
import {MfeOverlayContainer} from "./overlay/mfe-overlay-container.service"; import {MfeOverlayContainer} from "./overlay/mfe-overlay-container.service";
import {MfeSocketProvider} from "./provider/mfe-socket-provider";
import {SocketProvider} from "../app/provider/socket.provider";
let IMPORTS = [ let IMPORTS = [
@ -61,6 +63,7 @@ let IMPORTS = [
{provide: RolesGuard, useClass: MfeRolesGuard}, {provide: RolesGuard, useClass: MfeRolesGuard},
{provide: TokenProvider, useClass: MfeTokenProvider}, {provide: TokenProvider, useClass: MfeTokenProvider},
{provide: OverlayContainer, useClass: MfeOverlayContainer}, {provide: OverlayContainer, useClass: MfeOverlayContainer},
{provide: SocketProvider, useClass: MfeSocketProvider},
DEFAULT_HTTP_INTERCEPTOR_PROVIDERS DEFAULT_HTTP_INTERCEPTOR_PROVIDERS
], ],
bootstrap: [ bootstrap: [

View file

@ -0,0 +1,8 @@
import {fireMfeEventToContainer} from "../../../mfe-app-tools";
import {SocketProvider} from "../../app/provider/socket.provider";
export class MfeSocketProvider extends SocketProvider {
getSocket(): Promise<any> {
return fireMfeEventToContainer('ws-request', {});
}
}

View file

@ -345,11 +345,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>2.0.11</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<repositories> <repositories>

49
release_notes.md Normal file
View file

@ -0,0 +1,49 @@
# Обновления
## 1.9.11
### Список изменений
- SUPPORT-9035: Доработка иерархии по органу "Восьмое управление Генерального штаба Вооруженных сил Российской Федерации Вооруженных сил Российской Федерации"
- SUPPORT-9090: Разрешить нижнее подчеркивание "_"
- SUPPORT-9006: Ошибки отображаются не корректно
- SUPPORT-9087: не отображается пол и снилс при "деактивации пользователя"
- SUPPORT-9080: Ошибка дубликатов в УЗ
- SUPPORT-9060: Исправление отображения ошибок
- SUPPORT-9089: Исправление всплывающего окна
- SUPPORT-9100: Добавить возможность сброса фильтра
### Сборка и запуск
1.
## 1.9.1.19
### Список изменений
### Сборка и запуск
1. Перед обновлением в БД ervu-account-applications необходимо выполнить скрипты
```sql
TRUNCATE public.recruitment CASCADE;
TRUNCATE public.user_application_role CASCADE;
update public.databasechangelog set md5sum
= '9:8795b0e00061befe614be286eeabfc30' where md5sum =
'9:39afe954412277085ff1587d63120ca3';
update public.databasechangelog set md5sum
= '9:16457e9dc1cb2016b77e63581889a56d' where md5sum = '9:8ca0742d3cdccff8efbd3ae9a8bdac4f';
```
## 1.9.1.16
### Список изменений
* Реализована возможность создавать заявки по своему ВК и ВК своего региона
### Сборка и запуск
1. В values.yaml сервиса ervu-account-applications-backend необходимо задать параметр: nginx.ingress.kubernetes.io/proxy-body-size: "75m"

View file

@ -1896,7 +1896,7 @@
<entry> <entry>
<key>unMaskValue</key> <key>unMaskValue</key>
<value> <value>
<simple>false</simple> <simple>true</simple>
</value> </value>
</entry> </entry>
</properties> </properties>

View file

@ -8866,6 +8866,13 @@
<container>false</container> <container>false</container>
<removed>true</removed> <removed>true</removed>
</children> </children>
<children id="5b8c5ac4-549d-411f-80ff-d29293638e5f">
<prototypeId>887d2044-9e34-46a5-852c-e9ce07b42f30</prototypeId>
<componentRootId>5b8c5ac4-549d-411f-80ff-d29293638e5f</componentRootId>
<name>Пол</name>
<container>false</container>
<removed>true</removed>
</children>
<children id="39040b94-4780-4067-864e-64ad3d22a2a3"> <children id="39040b94-4780-4067-864e-64ad3d22a2a3">
<prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId> <prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId>
<componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId> <componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId>

View file

@ -8867,6 +8867,13 @@
<container>false</container> <container>false</container>
<removed>true</removed> <removed>true</removed>
</children> </children>
<children id="5b8c5ac4-549d-411f-80ff-d29293638e5f">
<prototypeId>887d2044-9e34-46a5-852c-e9ce07b42f30</prototypeId>
<componentRootId>5b8c5ac4-549d-411f-80ff-d29293638e5f</componentRootId>
<name>Пол</name>
<container>false</container>
<removed>true</removed>
</children>
<children id="39040b94-4780-4067-864e-64ad3d22a2a3"> <children id="39040b94-4780-4067-864e-64ad3d22a2a3">
<prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId> <prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId>
<componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId> <componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId>

View file

@ -4670,7 +4670,6 @@
<componentRootId>df951b69-a0bb-422e-b3ef-f5976671dba1</componentRootId> <componentRootId>df951b69-a0bb-422e-b3ef-f5976671dba1</componentRootId>
<name>Grid</name> <name>Grid</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="07201df9-ff33-4c71-9aae-a2cfdd028234"> <scripts id="07201df9-ff33-4c71-9aae-a2cfdd028234">
<properties> <properties>
@ -5380,6 +5379,7 @@
<componentRootId>ae7272c0-e392-47c4-bacf-e7e8348f3711</componentRootId> <componentRootId>ae7272c0-e392-47c4-bacf-e7e8348f3711</componentRootId>
<name>СНИЛС</name> <name>СНИЛС</name>
<container>false</container> <container>false</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="9c5c7a86-dc40-4b30-a5a7-5e7b4c7ea1e1"/> <scripts id="9c5c7a86-dc40-4b30-a5a7-5e7b4c7ea1e1"/>
<scripts id="fd653fca-12f9-4e35-baa4-b6b5dd3f6d59"> <scripts id="fd653fca-12f9-4e35-baa4-b6b5dd3f6d59">
@ -5402,6 +5402,15 @@
<simple>{"schema":"public","table":"user_application_list","entity":"user_application_list","name":"snils"}</simple> <simple>{"schema":"public","table":"user_application_list","entity":"user_application_list","name":"snils"}</simple>
</value> </value>
</entry> </entry>
<entry>
<key>formatter</key>
<value>
<implRef type="JAVA">
<className>ErvuSnilsFormatter</className>
<packageName>ru.micord.ervu.account_applications.component.property.grid.formatter</packageName>
</implRef>
</value>
</entry>
</properties> </properties>
</scripts> </scripts>
</children> </children>