Merge branch 'SUPPORT-8943_seamlessness' into develop

This commit is contained in:
Zaripov Emil 2025-04-04 14:24:25 +03:00
commit e4b2e0d92e
161 changed files with 12074 additions and 1221 deletions

View file

@ -1,8 +1,12 @@
import java.time.Duration;
import javax.sql.DataSource;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.StreamReadConstraints;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import liquibase.integration.spring.SpringLiquibase;
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
@ -14,6 +18,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.retry.annotation.EnableRetry;
@ -87,8 +92,20 @@ public class AppConfig {
}
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, true);
@Primary
public ObjectMapper jacksonObjectMapper() {
JsonFactory factory = JsonFactory.builder()
.streamReadConstraints(
StreamReadConstraints.builder()
.maxStringLength(100_000_000)
.build())
.build();
return new ObjectMapper(factory)
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true)
.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true)
.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, true)
.registerModule(new JavaTimeModule());
}
}

View file

@ -27,6 +27,7 @@ public class EnumColumnFormatter implements Formatter {
strObjectToStringMapping.put("EDIT_USER_ACCOUNT", "Изменение учетной записи пользователя");
strObjectToStringMapping.put("EDIT_USER_ROLES", "Изменение ролей пользователя");
strObjectToStringMapping.put("BLOCK_USER", "Деактивация пользователя");
strObjectToStringMapping.put("UNBLOCK_USER", "Активация пользователя");
strObjectToStringMapping.put("RESET_PASSWORD", "Сброс пароля пользователя");
strObjectToStringMapping.put("MALE", "Мужской");
strObjectToStringMapping.put("FEMALE", "Женский");

View file

@ -57,6 +57,12 @@ public class RecruitmentDao {
.orderBy(DSL.field(DSL.name("recruitment_hierarchy", "depth")).asc())
.fetchInto(String.class);
}
public List<String> getAllRecruitmentIds() {
return dslContext.select(Recruitment.RECRUITMENT.IDM_ID)
.from(Recruitment.RECRUITMENT)
.fetch(Recruitment.RECRUITMENT.IDM_ID);
}
}

View file

@ -0,0 +1,14 @@
package ru.micord.ervu.account_applications.component.exception;
/**
* @author Adel Kalimullin
*/
public class ApiResponseException extends RuntimeException{
public ApiResponseException(String message) {
super(message);
}
public ApiResponseException(String message, Throwable cause) {
super(message, cause);
}
}

View file

@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;
import ru.micord.ervu.account_applications.component.exception.ApiResponseException;
import ru.micord.ervu.account_applications.component.exception.UserDataLoadException;
import ru.micord.ervu.account_applications.component.field.persist.filter.StaticFilterComponent;
import ru.micord.ervu.account_applications.component.model.dto.GridServiceRequest;
@ -95,6 +96,14 @@ public class ErvuUserGridLoadService extends Behavior implements GridService {
HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString()
);
if (response.statusCode() != 200) {
throw new ApiResponseException(
String.format("Некорректный статус ответа. Статус: %d. Тело ответа: %s.",
response.statusCode(), response.body())
);
}
return objectMapper.readValue(response.body(),
new TypeReference<GridServiceResponse<User>>() {
}

View file

@ -4,13 +4,17 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import component.field.persist.filter.FilterControl;
import model.Filter;
import model.grid.GridRows;
import model.grid.SortInfo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import ru.micord.ervu.account_applications.component.dao.RecruitmentDao;
import ru.micord.ervu.account_applications.security.model.jwt.UserSession;
import ru.micord.ervu.account_applications.security.model.role.ErvuRoleAuthority;
import service.GridV2ServiceImpl;
import ru.cg.webbpm.modules.database.api.dao.option.LoadOptions;
@ -35,6 +39,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
@LocalGraphSource(sourceFieldName = "loadDao")
@NotNull
public EntityColumn recruitmentColumn;
@Value("${ervu.role.admin:security_administrator}")
private String ervuRoleAuthority;
public RecruitmentGridService(RecruitmentDao recruitmentDao, SecurityContext securityContext) {
this.recruitmentDao = recruitmentDao;
@ -43,13 +49,21 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
@Override
public GridRows loadData(Integer offset, Integer limit, Filter[] filters, SortInfo[] sortInfos) {
List<Filter> updatedFilters = new ArrayList<>(Arrays.asList(filters));
Optional<Filter> recruitmentFilterOpt = findRecruitmentFilter(updatedFilters);
List<String> recruitmentIds = recruitmentFilterOpt.map(
filter -> getChildRecruitmentIds(updatedFilters, filter))
.orElseGet(this::getRecruitmentIdsForCurrentUser);
UserSession userSession = securityContext.getUserSession();
Set<ErvuRoleAuthority> roles = userSession.roles();
List<String> recruitmentIds;
List<Filter> updatedFilters;
if (ervuRoleAuthority != null && roles.stream().anyMatch(role -> role.getAuthority().equals(ervuRoleAuthority))) {
updatedFilters = new ArrayList<>();
recruitmentIds = getAllRecruitmentIds();
}
else {
updatedFilters = new ArrayList<>(Arrays.asList(filters));
Optional<Filter> recruitmentFilterOpt = findRecruitmentFilter(updatedFilters);
recruitmentIds = recruitmentFilterOpt.map(
filter -> getChildRecruitmentIds(updatedFilters, filter))
.orElseGet(this::getRecruitmentIdsForCurrentUser);
}
LoadOptions options = getOptions(offset, limit, updatedFilters.toArray(new Filter[0]),
sortInfos
);
@ -78,5 +92,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
private EntityFilter getEntityFilterForRecruitmentIds(List<String> recruitmentIds) {
return new EntityFilter(recruitmentIds, FilterOperation.IN, this.recruitmentColumn);
}
}
private List<String> getAllRecruitmentIds() {
return recruitmentDao.getAllRecruitmentIds();
}
}

View file

@ -32,9 +32,9 @@ import ru.micord.ervu.account_applications.dto.Person;
import ru.micord.ervu.account_applications.dto.ProcessResponse;
import ru.micord.ervu.account_applications.dto.Role;
import ru.micord.ervu.account_applications.dto.Roles;
import ru.micord.ervu.account_applications.dto.deactivate.DeactivateData;
import ru.micord.ervu.account_applications.dto.deactivate.DeactivateDto;
import ru.micord.ervu.account_applications.dto.deactivate.DeactivateProcessRequest;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationData;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationDto;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationProcessRequest;
import ru.micord.ervu.account_applications.dto.edit.EditAccountDto;
import ru.micord.ervu.account_applications.dto.edit.EditData;
import ru.micord.ervu.account_applications.dto.edit.EditRolesDto;
@ -44,11 +44,12 @@ import ru.micord.ervu.account_applications.dto.password.ResetPasswordData;
import ru.micord.ervu.account_applications.dto.password.ResetPasswordDto;
import ru.micord.ervu.account_applications.dto.password.ResetPasswordProcessRequest;
import ru.micord.ervu.account_applications.dto.password.UserIdInfo;
import ru.micord.ervu.account_applications.enums.ProcessKey;
import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.service.RoleServiceImpl;
import ru.micord.ervu.account_applications.service.UserApplicationListService;
import static ru.micord.ervu.account_applications.enums.ProcessKey.*;
/**
* @author gulnaz
*/
@ -86,7 +87,7 @@ public class AdminController {
.collect(Collectors.toList());
Roles roles = new Roles(rolesList);
CreateProcessRequest request = new CreateProcessRequest(
ProcessKey.CREATE.getValue(), getUserId(), new CreateData(credential, account, person, roles));
CREATE.getValue(), getUserId(), new CreateData(credential, account, person, roles));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@ -94,7 +95,7 @@ public class AdminController {
public ResponseEntity<?> editPerson(@RequestBody @Valid EditPersonDto dto) {
Person person = new Person(dto.id(), dto.surname(), dto.firstname(), dto.middlename(), dto.sex(),
dto.email(), dto.birthdate(), dto.snils(), dto.ipAddresses());
EditPersonProcessRequest request = new EditPersonProcessRequest(ProcessKey.EDIT_PERSON.getValue(),
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_PERSON.getValue(),
getUserId(), new EditData(dto.accountId(), person));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@ -102,7 +103,7 @@ public class AdminController {
@PostMapping(value = "/account", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> editAccount(@RequestBody @Valid EditAccountDto dto) {
Account account = new Account(dto.accountId(), dto.userDomain(), dto.position());
EditPersonProcessRequest request = new EditPersonProcessRequest(ProcessKey.EDIT_ACCOUNT.getValue(),
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_ACCOUNT.getValue(),
getUserId(), new EditData(account));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@ -116,15 +117,22 @@ public class AdminController {
List<String> removedRoleIds = roleService.fetchRemovedRoleIds(dto.accountId(), dto.roles());
Account account = new Account(dto.accountId(), removedRoleIds, rolesList);
EditPersonProcessRequest request = new EditPersonProcessRequest(ProcessKey.EDIT_ROLES.getValue(),
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_ROLES.getValue(),
getUserId(), new EditData(account));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/deactivation", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> deactivate(@RequestBody @Valid DeactivateDto dto) {
DeactivateProcessRequest request = new DeactivateProcessRequest(ProcessKey.DEACTIVATE.getValue(),
getUserId(), new DeactivateData(Collections.singletonList(dto.accountId())));
public ResponseEntity<?> deactivate(@RequestBody @Valid ChangeActivationDto dto) {
ChangeActivationProcessRequest request = new ChangeActivationProcessRequest(DEACTIVATE.getValue(),
getUserId(), new ChangeActivationData(Collections.singletonList(dto.accountId())));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/activation", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> activate(@RequestBody @Valid ChangeActivationDto dto) {
ChangeActivationProcessRequest request = new ChangeActivationProcessRequest(ACTIVATE.getValue(),
getUserId(), new ChangeActivationData(Collections.singletonList(dto.accountId())));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@ -139,7 +147,7 @@ public class AdminController {
UserIdInfo userIdInfo = new UserIdInfo(dto.accountId());
ResetPasswordData resetPasswordData = new ResetPasswordData(userIdInfo);
ResetPasswordProcessRequest request = new ResetPasswordProcessRequest(
ProcessKey.RESET_PASSWORD.getValue(),
RESET_PASSWORD.getValue(),
getUserId(), resetPasswordData
);
return doRequestAndSaveTraceId(request, dto.appNumber());

View file

@ -0,0 +1,9 @@
package ru.micord.ervu.account_applications.dto.activation;
import java.util.List;
/**
* @author gulnaz
*/
public record ChangeActivationData(List<String> accountIdList) {
}

View file

@ -1,6 +1,5 @@
package ru.micord.ervu.account_applications.dto.deactivate;
package ru.micord.ervu.account_applications.dto.activation;
import java.util.List;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@ -9,5 +8,5 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
* @author gulnaz
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record DeactivateDto(@NotNull long appNumber, @NotNull String accountId) {
public record ChangeActivationDto(@NotNull long appNumber, @NotNull String accountId) {
}

View file

@ -0,0 +1,13 @@
package ru.micord.ervu.account_applications.dto.activation;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author gulnaz
*/
public class ChangeActivationProcessRequest extends ProcessRequest<ChangeActivationData> {
public ChangeActivationProcessRequest(String processKey, String userId, ChangeActivationData data) {
super(processKey, userId, data);
}
}

View file

@ -1,9 +0,0 @@
package ru.micord.ervu.account_applications.dto.deactivate;
import java.util.List;
/**
* @author gulnaz
*/
public record DeactivateData(List<String> accountIdList) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.deactivate;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author gulnaz
*/
public class DeactivateProcessRequest extends ProcessRequest<DeactivateData> {
public DeactivateProcessRequest(String processKey, String userId, DeactivateData data) {
super(processKey, userId, data);
}
}

View file

@ -5,9 +5,9 @@ import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author Adel Kalimullin
*/
public class ResetPasswordProcessRequest extends ProcessRequest {
public class ResetPasswordProcessRequest extends ProcessRequest<ResetPasswordData> {
public ResetPasswordProcessRequest(String processKey, String userId, Object data) {
public ResetPasswordProcessRequest(String processKey, String userId, ResetPasswordData data) {
super(processKey, userId, data);
}
}

View file

@ -9,6 +9,7 @@ public enum ProcessKey {
EDIT_ACCOUNT("milBaseEditAccountIDMProcess"),
EDIT_ROLES("milBaseEditAccountRolesIDMSubProcess"),
DEACTIVATE("milBaseMassDeActivateAccountIDMProcess"),
ACTIVATE("milBaseMassActivateAccountIDMProcess"),
RESET_PASSWORD("milBaseResetPasswordProcess");
private final String value;

View file

@ -9,7 +9,7 @@ import ru.micord.ervu.account_applications.service.ErvuDirectoriesService;
* @author Eduard Tihomirov
*/
@Component
public class ErvuDirectoriesListner {
public class ErvuDirectoriesListener {
@Autowired
private ErvuDirectoriesService ervuDirectoriesService;

View file

@ -14,6 +14,7 @@ import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.support.serializer.JsonDeserializer;
/**
* @author Eduard Tihomirov

View file

@ -11,7 +11,7 @@ import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.net.HttpHeaders;
import org.springframework.beans.factory.annotation.Value;
import ru.micord.ervu.account_applications.component.exception.ApiResponseException;
/**
@ -43,7 +43,10 @@ public abstract class AbstractUserDataService implements UserDataService {
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new IllegalStateException("Некорректный статус ответа: " + response.statusCode());
throw new ApiResponseException(
String.format("Некорректный статус ответа. Статус: %d. Тело ответа: %s.",
response.statusCode(), response.body())
);
}
return response;

View file

@ -1,6 +1,7 @@
package ru.micord.ervu.account_applications.service;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.jooq.Record2;
@ -21,16 +22,16 @@ public class ErvuDirectoriesDaoService {
@Autowired
private ErvuDirectoriesDao ervuDirectoriesDao;
@Cacheable(value = "role-ids", unless = "#result == null")
public List<String> getRoleIds() {
return ervuDirectoriesDao.getRoleIds();
}
@Cacheable(value = "domain-ids", unless = "#result == null")
public Result<Record2<UUID, String>> getDomainIds() {
return ervuDirectoriesDao.getDomainIds();
public Map<String, UUID> getDomainIds() {
return ervuDirectoriesDao.getDomainIds().intoMap(Record2::value2, Record2::value1);
}
@Cacheable(value = "role-ids", unless = "#result == null")
public UserApplicationRoleRecord getRoleRecord() {
return ervuDirectoriesDao.getRoleRecord();
}

View file

@ -6,12 +6,11 @@ import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.jooq.Record2;
import org.jooq.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -31,26 +30,24 @@ import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserA
import ru.micord.ervu.account_applications.model.RecruitmentResponse;
import ru.micord.ervu.account_applications.model.RoleResponse;
import static ru.micord.ervu.account_applications.db_beans.public_.tables.Recruitment.RECRUITMENT;
/**
* @author Eduard Tihomirov
*/
@Service
@DependsOn({"liquibase", "ervuDirectoriesListner"})
@DependsOn({"liquibase", "ervuDirectoriesListener"})
public class ErvuDirectoriesService {
private static final Logger LOGGER = LoggerFactory.getLogger(
MethodHandles.lookup().lookupClass());
@Value("${ervu.url}")
private String ervuUrl;
@Value("${idm.url}")
private String idmUrl;
@Value("${ervu.collection:domain, role}")
private String ervuCollection;
@Autowired
private RestTemplate restTemplate;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private ErvuDirectoriesDaoService ervuDirectoriesDaoService;
@Autowired
private ObjectMapper objectMapper;
@Caching(evict = {
@ -61,7 +58,7 @@ public class ErvuDirectoriesService {
try {
String[] ervuCollectionArray = ervuCollection.split(",");
Arrays.stream(ervuCollectionArray).forEach(ervuCollection -> {
String targetUrl = ervuUrl + "/service/idm/reconcile/"+ ervuCollection + "/to/kafka/v1";
String targetUrl = idmUrl + "/reconcile/"+ ervuCollection + "/to/kafka/v1";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
String emptyJson = "{}";
@ -76,7 +73,7 @@ public class ErvuDirectoriesService {
}
catch (Exception e) {
LOGGER.error(e.getMessage());
//trow error for clean cache
//trow error for not clean cache
throw new RuntimeException(e);
}
@ -84,36 +81,36 @@ public class ErvuDirectoriesService {
@Transactional
public void upsertKafkaDomainMessage(String kafkaMessage) {
RecruitmentResponse[] response = null;
RecruitmentResponse[] recruitmentResponses;
try {
response = objectMapper.readValue(kafkaMessage, RecruitmentResponse[].class);
recruitmentResponses = objectMapper.readValue(kafkaMessage, RecruitmentResponse[].class);
}
catch (JsonProcessingException e) {
throw new RuntimeException("Error with parsing domain kafka message", e);
throw new RuntimeException(e);
}
if (response.length > 0 && response[0].getData() != null && !response[0].getData().isEmpty()) {
upsertRecruitmentData(response[0].getData());
if (recruitmentResponses.length > 0 && recruitmentResponses[0].getData() != null && !recruitmentResponses[0].getData().isEmpty()) {
upsertRecruitmentData(recruitmentResponses[0].getData());
}
}
@Transactional
public void upsertKafkaRoleMessage(String kafkaMessage) {
RoleResponse[] response = null;
RoleResponse[] roleResponses;
try {
response = objectMapper.readValue(kafkaMessage, RoleResponse[].class);
roleResponses = objectMapper.readValue(kafkaMessage, RoleResponse[].class);
}
catch (JsonProcessingException e) {
throw new RuntimeException("Error with parsing role kafka message", e);
throw new RuntimeException(e);
}
if (response.length > 0 && response[0].getData() != null && !response[0].getData().isEmpty()) {
upsertRoleData(response[0].getData());
if (roleResponses.length > 0 && roleResponses[0].getData() != null && !roleResponses[0].getData().isEmpty()) {
upsertRoleData(roleResponses[0].getData());
}
}
private void upsertRecruitmentData(List<RecruitmentResponse.Data> dataList) {
List<RecruitmentRecord> newRecruitmentRecords = new ArrayList<>();
List<RecruitmentRecord> recruitmentRecords = new ArrayList<>();
Result<Record2<UUID, String>> ids = ervuDirectoriesDaoService.getDomainIds();
Map<String, UUID> ids = ervuDirectoriesDaoService.getDomainIds();
dataList.forEach(data -> {
Timestamp updatedAt = Timestamp.from(Instant.ofEpochSecond(data.getModified()));
Timestamp createdAt = Timestamp.from(Instant.ofEpochSecond(data.getCreateDate()));
@ -152,16 +149,12 @@ public class ErvuDirectoriesService {
recruitmentRecord.setCreatedAt(createdAt);
recruitmentRecord.setUpdatedAt(updatedAt);
recruitmentRecord.setTs(new Timestamp(System.currentTimeMillis()));
boolean isExisting = false;
for (Record2<UUID, String> resultRecord : ids) {
if (resultRecord.get(RECRUITMENT.IDM_ID).equals(recruitmentRecord.getIdmId())) {
recruitmentRecord.setId(resultRecord.get(RECRUITMENT.ID));
recruitmentRecords.add(recruitmentRecord);
isExisting = true;
break;
}
String idmId = recruitmentRecord.getIdmId();
if (ids.containsKey(idmId)) {
recruitmentRecord.setId(ids.get(idmId));
recruitmentRecords.add(recruitmentRecord);
}
if (!isExisting) {
else {
newRecruitmentRecords.add(recruitmentRecord);
}
});

View file

@ -21,10 +21,11 @@ KAFKA_PASS=Blfi9d2OFG
KAFKA_CONSUMER_GROUP_ID=1
KAFKA_DOMAIN_GROUP_ID=ervu-account-applications-backend-domain
KAFKA_ROLE_GROUP_ID=ervu-account-applications-backend-role
IDM_URL=http://idm
ERVU_URL=https://ervu-dev.pgs.rtlabs.ru
ERVU_HTTP_TIMEOUT=30
ERVU_PWD_SIGN_SECRET_KEY=xoL2Y3VRdQ4phXG85o6dRqcgqb4bk6ULdkJJdlRLhZM=
KAFKA_ROLE_RECONCILIATION=idmv2.role.reconciliation
KAFKA_DOMAIN_RECONCILIATION=idmv2.domain.reconciliation
IDM_URL=http://idm
ERVU_ROLE_ADMIN=security_administrator

View file

@ -1726,9 +1726,9 @@
}
},
"@webbpm/base-package": {
"version": "3.192.4",
"resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.192.4.tgz",
"integrity": "sha512-x2SFa7O/aUf4fyfiHrJMVuQZAMMOuQoqHuuVJiuBUI3nLTfUmdb+Pnqu+nCcKc+qahT6PYzzJ0t0Wub3bw/JGQ==",
"version": "3.192.6",
"resolved": "https://repo.micord.ru/repository/npm-all/@webbpm/base-package/-/base-package-3.192.6.tgz",
"integrity": "sha512-ID4VCBD3ds7tPFaokDTfJ4GcPjtiGMUSJ5vvUobg4wmC4M+AKTS50ZpsovhxGGzOQlS+uk0MCCoX5KzgMmQbZA==",
"requires": {
"tslib": "^1.9.0"
}

View file

@ -26,7 +26,7 @@
"@angular/platform-browser-dynamic": "7.2.15",
"@angular/router": "7.2.15",
"@ng-bootstrap/ng-bootstrap": "4.2.2-micord.1",
"@webbpm/base-package": "3.192.4",
"@webbpm/base-package": "3.192.6",
"ag-grid-angular": "29.0.0-micord.4",
"ag-grid-community": "29.0.0-micord.4",
"angular-calendar": "0.28.28",

View file

@ -51,6 +51,9 @@ export class UserManagementService extends Behavior {
case ApplicationKind.BLOCK_USER:
this.doRequest("user/deactivation", jsonObj);
break;
case ApplicationKind.UNBLOCK_USER:
this.doRequest("user/activation", jsonObj);
break;
case ApplicationKind.RESET_PASSWORD:
this.doRequest("user/password/reset", jsonObj);
break;

View file

@ -4,5 +4,6 @@ export enum ApplicationKind {
EDIT_USER_ACCOUNT = "EDIT_USER_ACCOUNT",
EDIT_USER_ROLES = "EDIT_USER_ROLES",
BLOCK_USER = "BLOCK_USER",
UNBLOCK_USER = "UNBLOCK_USER",
RESET_PASSWORD = "RESET_PASSWORD"
}

View file

@ -15,6 +15,6 @@ export class DropdownTreeviewSelectI18n extends DefaultTreeviewI18n {
}
getText(selection: TreeviewSelection): string {
return this.internalSelectedItem ? this.internalSelectedItem.text : 'Элемент не выбран';
return this.internalSelectedItem ? this.internalSelectedItem.text : '';
}
}

View file

@ -54,15 +54,20 @@ export class DropdownTreeViewComponent extends InputControl {
@Visible("false")
public items: TreeviewItem[];
@Visible("false")
public value: any;
public value: TreeItemDto;
@Visible("false")
public valueChangeEvent: Event<TreeItemDto> = new Event<TreeItemDto>();
@AdvancedProperty()
public skipInitialSelection: boolean;
@NotNull()
public preferBusinessId: boolean = false;
private rpcService: TreeItemRpcService;
private localStorageService: LocalStorageService;
private taskParamsProvider: TaskParamsProvider;
private pageContextHolder: PageContextHolder;
private webbpmStorage: WebbpmStorage;
private storageKey: string;
private rootValues: TreeItemDto[];
constructor(el: ElementRef, cd: ChangeDetectorRef,
private i18n: DropdownTreeviewSelectI18n) {
@ -81,7 +86,8 @@ export class DropdownTreeViewComponent extends InputControl {
this.loadTreeItems();
}
private getTreeValuesStorage(treeValuesCacheStrategy: TreeValuesCacheStrategy, customKeyName: string) {
private getTreeValuesStorage(treeValuesCacheStrategy: TreeValuesCacheStrategy,
customKeyName: string) {
if (!treeValuesCacheStrategy) {
return null;
}
@ -109,13 +115,14 @@ export class DropdownTreeViewComponent extends InputControl {
@Visible()
public loadTreeItems(): void {
this.rpcService.loadTreeData().then((res: TreeItemDto[]) => {
this.rpcService.loadTreeData().then((res: TreeItemDto[]) => {
this.populateTree(res);
});
}
private populateTree(res: TreeItemDto[]){
private populateTree(res: TreeItemDto[]) {
this.items = res.map(value => new TreeviewItem(this.createTreeItem(value)));
this.rootValues = res;
const rootItem = this.items[0];
if (this.cachedValue) {
const matchedItem = this.findTreeItemByValue(this.items, this.cachedValue);
@ -124,13 +131,12 @@ export class DropdownTreeViewComponent extends InputControl {
this.value = matchedItem.value;
}
}
else {
else if (!this.skipInitialSelection) {
this.i18n.selectedItem = rootItem;
this.value = rootItem.value;
}
this.doCollapseLevel();
this.valueChangeEvent.trigger(this.value);
this.cd.markForCheck();
this.onValueChange(this.value);
}
private findTreeItemByValue(rootItems: TreeviewItem[], valueToFind: any): TreeviewItem | null {
@ -171,6 +177,7 @@ export class DropdownTreeViewComponent extends InputControl {
this.setCachedValue(this.value);
this.valueChangeEvent.trigger($event);
this.applyListener(this.changeListeners);
this.cd.markForCheck();
}
@Visible()
@ -198,13 +205,13 @@ export class DropdownTreeViewComponent extends InputControl {
}
}
protected setCachedValue(newValue: any): void {
protected setCachedValue(newValue: TreeItemDto): void {
if (this.webbpmStorage) {
this.webbpmStorage.put(this.storageKey, newValue);
}
}
protected getCachedValue(): any {
protected getCachedValue(): TreeItemDto {
if (this.webbpmStorage) {
return this.webbpmStorage.get(this.storageKey);
}
@ -220,23 +227,41 @@ export class DropdownTreeViewComponent extends InputControl {
}
getPresentationValue(): string | number | boolean {
return this.value;
return this.value ? this.value.label : '';
}
@Visible()
getValue(): any {
return this.value;
return this.value ? this.value.id : this.value;
}
getValueAsModel(): any {
getValueAsModel(): TreeItemDto {
return this.value ? this.value : null;
}
getValueForForm(): any {
return this.getBusinessId();
return this.preferBusinessId ? this.getBusinessId() : this.getValue();
}
setValue(value: any): any {
this.value = value;
@Visible()
setValue(value: any): void {
this.items = [...this.items];
this.value = this.findValueInRootsById(value);
this.onValueChange(this.value);
}
private findValueInRootsById(id: any): TreeItemDto {
let searchArray: TreeItemDto[] = this.rootValues.slice();
while (searchArray.length > 0) {
const current = searchArray.shift();
if (current.id == id) {
return current;
}
if (current.children && current.children.length > 0) {
searchArray.push(...current.children);
}
}
return null;
}
onChange() {
@ -251,5 +276,4 @@ export class DropdownTreeViewComponent extends InputControl {
unsubscribeToModelChange() {
//empty because there is no ngModel here
}
}

View file

@ -44,6 +44,11 @@ const appRoutes: Routes = [
path: 'process_application_edit_user/:id',
loadChildren: 'generated-sources/page-process_application_edit_user.module#Pageprocess_application_edit_userModule',
canActivate: [ConfirmExitGuard, RolesGuard]
},
{
path: 'unblock_user_application',
loadChildren: 'generated-sources/page-unblock_user_application.module#Pageunblock_user_applicationModule',
canActivate: [ConfirmExitGuard, RolesGuard]
}
];

View file

@ -2,7 +2,7 @@ import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import {BrowserModule} from "@angular/platform-browser";
import {FormsModule} from "@angular/forms";
import {NgbModule} from "@ng-bootstrap/ng-bootstrap";
import {ToastNoAnimationModule} from "ngx-toastr";
import {OverlayContainer, ToastNoAnimationModule} from "ngx-toastr";
import {AgGridModule} from "ag-grid-angular";
import {AppRoutingModule} from "../app/app-routing.module";
import {
@ -27,6 +27,7 @@ import {RolesGuard} from "../app/guard/RolesGuard";
import {TokenProvider} from "../app/provider/token.provider";
import {MfeTokenProvider} from "./provider/mfe-token.provider";
import {DEFAULT_HTTP_INTERCEPTOR_PROVIDERS} from "./interceptor/mfe-default-interceptors.prod";
import {MfeOverlayContainer} from "./overlay/mfe-overlay-container.service";
let IMPORTS = [
@ -59,6 +60,7 @@ let IMPORTS = [
{provide: ProgressIndicationService, useClass: MfeProgressIndicationService},
{provide: RolesGuard, useClass: MfeRolesGuard},
{provide: TokenProvider, useClass: MfeTokenProvider},
{provide: OverlayContainer, useClass: MfeOverlayContainer},
DEFAULT_HTTP_INTERCEPTOR_PROVIDERS
],
bootstrap: [

View file

@ -0,0 +1,35 @@
import {OverlayContainer} from "ngx-toastr";
import {Inject, Injectable} from "@angular/core";
import {DOCUMENT} from "@angular/common";
@Injectable({ providedIn: 'root' })
export class MfeOverlayContainer extends OverlayContainer {
constructor(@Inject(DOCUMENT) _document: any) {
super(_document);
}
ngOnDestroy() {
super.ngOnDestroy();
}
protected _createContainer(): void {
super._createContainer();
this.appendToRootComponent();
}
private appendToRootComponent(): void {
if (!this._containerElement) {
return;
}
const rootElement = this.getRootElement();
const parent = rootElement || this._document.body;
parent.appendChild(this._containerElement);
}
private getRootElement(): Element {
return this._document.querySelector('mfe-webbpm')
.shadowRoot.querySelector('[webbpm]');
}
}

View file

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>resources</artifactId>
<version>3.192.4</version>
<version>3.192.6</version>
<organization>
<name>Micord</name>
</organization>
@ -28,13 +28,13 @@
<jooq.version>3.19.3</jooq.version>
<jupiter.version>5.10.2</jupiter.version>
<enforcer.manageVersions>true</enforcer.manageVersions>
<webbpm-platform.version>3.192.4</webbpm-platform.version>
<webbpm-platform.version>3.192.6</webbpm-platform.version>
<h2.version>1.4.200</h2.version>
<build.timestamp>0324074119</build.timestamp>
<build.timestamp>0402110850</build.timestamp>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<junit.platform.version>1.10.0</junit.platform.version>
<enforcer.manageExclusions>true</enforcer.manageExclusions>
<revision>3.192.4</revision>
<revision>3.192.6</revision>
<metadata.ts.filename>typescript.metadata.json</metadata.ts.filename>
<package.repository.url>https://repo.micord.ru</package.repository.url>
<maven.build.timestamp.format>MMddHHmmss</maven.build.timestamp.format>
@ -47,19 +47,19 @@
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>converters</artifactId>
<version>3.192.4</version>
<version>3.192.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>backend</artifactId>
<version>3.192.4</version>
<version>3.192.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>frontend</artifactId>
<version>3.192.4</version>
<version>3.192.6</version>
<scope>compile</scope>
</dependency>
</dependencies>

View file

@ -60,7 +60,7 @@
<ul>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x435;&#x448;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>https://www.wildberries.ru/catalog/${sku}/detail.aspx</code></li>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x443;&#x442;&#x440;&#x435;&#x43d;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.192.4</code></li>
<li>&#x41e;&#x431;&#x440;&#x430;&#x437;&#x435;&#x446; &#x432;&#x43d;&#x443;&#x442;&#x440;&#x435;&#x43d;&#x43d;&#x435;&#x439; &#x441;&#x441;&#x44b;&#x43b;&#x43a;&#x438;: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.192.6</code></li>
</ul>
</li>
<li>

View file

@ -4,17 +4,17 @@
<description>Base webbpm package</description>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>resources</artifactId>
<version>3.192.4</version>
<studioVersion>3.192.4</studioVersion>
<version>3.192.6</version>
<studioVersion>3.192.6</studioVersion>
<backendModule>
<groupId>ru.cg.webbpm.packages.base</groupId>
<artifactId>backend</artifactId>
<version>3.192.4</version>
<version>3.192.6</version>
</backendModule>
<frontendModule>
<packageName>@webbpm/base-package</packageName>
<version>3.192.4</version>
<version>3.192.6</version>
</frontendModule>
</packageInfo>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_отмены.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_очистки_фильтра.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_удаления.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаагрузки.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_вызова_ошибки.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<documentation>component/buttons/Кнопка_выполнения_бизнес-процесса.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_выполнения_SQL.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_для_фильтрации.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаавигации.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_сохранения.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_выбора.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопка_подписи.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/Кнопкаапуска_бизнес-процесса.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/reporting/Кнопка_печати_из_графа_сущности.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/buttons/reporting/Кнопка_печати_отчета_из_формы.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Сворачиваемая_панель.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Диалог.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Контейнер_с_кнопками.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Группа_полей.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Набор_фильтров.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Форма.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Горизонтальный_контейнер.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Контейнер_вкладок.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Вкладка.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Вертикальный_контейнер.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/containers/Окно.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/editable-grids/EditableGrid.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/autocomplete</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/check-box</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/combo-box</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/date-time-picker</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/money-field</localization>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/number-field</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -6,11 +6,11 @@
<localization>META-INF/components/localization/editable-grids/read-only</localization>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -5,11 +5,11 @@
<category>editable-grids</category>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>Статичный_выпадающий_список_колонки_таблицы.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/text-area</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/text-field</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -7,11 +7,11 @@
<localization>META-INF/components/localization/editable-grids/time-picker</localization>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/ФИАС.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Поле_ввода_с_подбором_значения.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Флаг.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Выпадающий_список.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Дата.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/EditableOneToMany.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Файл.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Файл.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/ManyToMany.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/ManyToManyField.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Денежное_поле.html</documentation>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Числовое_поле.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/OneToMany.html</documentation>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/OneToMany.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Переключатель.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/SignVerification.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Статичный_выпадающий_список.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Статичный_переключатель.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Текст.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Многострочное_поле.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Текстовое_поле.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/Время.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -8,11 +8,11 @@
<documentation>component/fields/TreeField.html</documentation>
<internal>false</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/editable-grid</localization>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -4,11 +4,11 @@
<name>EditableOneToManyForm</name>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

View file

@ -5,11 +5,11 @@
<localization>META-INF/components/localization/fields/file-upload-field</localization>
<internal>true</internal>
<versions>
<studioVersion>3.192.4</studioVersion>
<studioVersion>3.192.6</studioVersion>
<packageVersions>
<entry>
<key>ru.cg.webbpm.packages.base.resources</key>
<value>3.192.4</value>
<value>3.192.6</value>
</entry>
</packageVersions>
</versions>

Some files were not shown because too many files have changed in this diff Show more