Search in sources :

Example 6 with Either

use of com.qcadoo.commons.functional.Either in project mes by qcadoo.

the class TechnologyCustomizerTest method shouldCreateCustomizedTechnologyWithAlteredMainOutputProduct2.

@Test
public final void shouldCreateCustomizedTechnologyWithAlteredMainOutputProduct2() {
    // given
    given(generatorSettings.shouldCreateAndSwitchProducts()).willReturn(false);
    Entity technologyCopy = mockTechnology(2L, true, null);
    Entity technology = mockTechnology(1L, true, technologyCopy);
    stubIsValid(technology, true);
    Entity nodeProduct = mockProduct(ProductFamilyElementType.PARTICULAR_PRODUCT);
    stubIsValid(nodeProduct, true);
    Entity node = mockNodeEntity(technology, TechnologyStructureNodeType.COMPONENT, null, nodeProduct);
    stubIsValid(node, true);
    stubNodeSearchResult(node);
    String generatedTechNumber = "generatedTechNumber";
    String generatedTechName = "generated tech name";
    stubTechNameAndNumberGenerator(mainProduct, generatedTechNumber, generatedTechName);
    // when
    Optional<Either<String, TechnologyId>> result = technologyCustomizer.customize(NODE_ID, mainProduct, generatorSettings, false);
    // then
    assertTrue(result.isPresent());
    assertTrue(result.get().isRight());
    assertEquals((long) result.get().getRight().get(), 2L);
    verify(technologyOperationProductsCustomizer, never()).customize(any(TechnologyId.class), anyEntity(), anyEntity(), any(GeneratorSettings.class));
    verify(technologyOperationProductsCustomizer).prepareMainTechnologyProduct(technologyCopy, mainProduct);
    verify(technologyNameAndNumberGenerator).generateName(mainProduct);
    verify(technologyNameAndNumberGenerator).generateNumber(mainProduct);
    verify(technologyCopy).setField(TechnologyFields.NUMBER, generatedTechNumber);
    verify(technologyCopy).setField(TechnologyFields.NAME, generatedTechName);
    verify(node).setField(GeneratorTreeNodeFields.PRODUCT_TECHNOLOGY, 2L);
    verify(productCustomizer, never()).findOrCreate(anyEntity(), anyEntity(), any(ProductSuffixes.class), any(GeneratorSettings.class));
}
Also used : QcadooModelMatchers.anyEntity(com.qcadoo.testing.model.QcadooModelMatchers.anyEntity) Entity(com.qcadoo.model.api.Entity) ProductSuffixes(com.qcadoo.mes.technologiesGenerator.customization.product.domain.ProductSuffixes) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) Either(com.qcadoo.commons.functional.Either) GeneratorSettings(com.qcadoo.mes.technologiesGenerator.GeneratorSettings) Test(org.junit.Test)

Example 7 with Either

use of com.qcadoo.commons.functional.Either in project mes by qcadoo.

the class TechnologyCustomizerTest method shouldCreateCustomizedTechnologyWithoutAlteringMainOutputProduct.

@Test
public final void shouldCreateCustomizedTechnologyWithoutAlteringMainOutputProduct() {
    // given
    given(generatorSettings.shouldCreateAndSwitchProducts()).willReturn(true);
    Entity technologyCopy = mockTechnology(2L, true, null);
    Entity technology = mockTechnology(1L, true, technologyCopy);
    stubIsValid(technology, true);
    Entity nodeProduct = mockProduct(ProductFamilyElementType.PARTICULAR_PRODUCT);
    stubIsValid(nodeProduct, true);
    Entity node = mockNodeEntity(technology, TechnologyStructureNodeType.COMPONENT, mockEntity(), nodeProduct);
    stubBelongsToField(node, GeneratorTreeNodeFields.PRODUCT, nodeProduct);
    stubIsValid(node, true);
    stubNodeSearchResult(node);
    String generatedTechNumber = "generatedTechNumber";
    String generatedTechName = "generated tech name";
    stubTechNameAndNumberGenerator(nodeProduct, generatedTechNumber, generatedTechName);
    // when
    Optional<Either<String, TechnologyId>> result = technologyCustomizer.customize(NODE_ID, mainProduct, generatorSettings, false);
    // then
    assertTrue(result.isPresent());
    assertTrue(result.get().isRight());
    assertEquals((long) result.get().getRight().get(), 2L);
    verify(technologyOperationProductsCustomizer).customize(new TechnologyId(technologyCopy.getId()), mainProduct, nodeProduct, generatorSettings);
    verify(technologyOperationProductsCustomizer, never()).prepareMainTechnologyProduct(anyEntity(), anyEntity());
    verify(technologyNameAndNumberGenerator).generateName(nodeProduct);
    verify(technologyNameAndNumberGenerator).generateNumber(nodeProduct);
    verify(technologyCopy).setField(TechnologyFields.NUMBER, generatedTechNumber);
    verify(technologyCopy).setField(TechnologyFields.NAME, generatedTechName);
    verify(node).setField(GeneratorTreeNodeFields.PRODUCT_TECHNOLOGY, 2L);
    verify(productCustomizer, never()).findOrCreate(anyEntity(), anyEntity(), any(ProductSuffixes.class), any(GeneratorSettings.class));
}
Also used : QcadooModelMatchers.anyEntity(com.qcadoo.testing.model.QcadooModelMatchers.anyEntity) Entity(com.qcadoo.model.api.Entity) ProductSuffixes(com.qcadoo.mes.technologiesGenerator.customization.product.domain.ProductSuffixes) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) Either(com.qcadoo.commons.functional.Either) GeneratorSettings(com.qcadoo.mes.technologiesGenerator.GeneratorSettings) Test(org.junit.Test)

Example 8 with Either

use of com.qcadoo.commons.functional.Either in project mes by qcadoo.

the class OrderCreationService method createOrder.

public OrderCreationResponse createOrder(OrderCreationRequest orderCreationRequest) {
    Entity parameter = parameterService.getParameter();
    boolean createOperationalTasks = !orderCreationRequest.getTechnologyOperations().isEmpty();
    if (Objects.isNull(orderCreationRequest.getTechnologyId())) {
        if (!isParameterSet(parameter, createOperationalTasks)) {
            return new OrderCreationResponse(translationService.translate("basic.dashboard.orderDefinitionWizard.createOrder.parameterNotSet", LocaleContextHolder.getLocale()));
        }
    }
    Entity product = getProduct(orderCreationRequest.getProductId());
    Either<String, Entity> isTechnology = getOrCreateTechnology(orderCreationRequest);
    if (isTechnology.isLeft()) {
        return new OrderCreationResponse(isTechnology.getLeft());
    }
    Entity technology = isTechnology.getRight();
    Entity productionLine = getProductionLine(orderCreationRequest.getProductionLineId(), technology);
    OrderCreationResponse response = new OrderCreationResponse(OrderCreationResponse.StatusCode.OK);
    Entity order = dataDefinitionService.get(OrdersConstants.PLUGIN_IDENTIFIER, OrdersConstants.MODEL_ORDER).create();
    order.setField(OrderFields.NUMBER, numberGeneratorService.generateNumber(OrdersConstants.PLUGIN_IDENTIFIER, OrdersConstants.MODEL_ORDER, 6));
    order.setField(OrderFields.NAME, orderService.makeDefaultName(product, technology, LocaleContextHolder.getLocale()));
    order.setField(OrderFields.PRODUCT, product);
    order.setField(OrderFields.TECHNOLOGY_PROTOTYPE, technology);
    order.setField(OrderFields.PRODUCTION_LINE, productionLine);
    order.setField(OrderFields.DIVISION, orderService.getDivision(technology));
    order.setField(OrderFields.DATE_FROM, orderCreationRequest.getStartDate());
    order.setField(OrderFields.DATE_TO, orderCreationRequest.getFinishDate());
    order.setField(OrderFields.EXTERNAL_SYNCHRONIZED, true);
    order.setField(IS_SUBCONTRACTED, false);
    order.setField(OrderFields.STATE, OrderStateStringValues.PENDING);
    order.setField(OrderFields.PLANNED_QUANTITY, orderCreationRequest.getQuantity());
    order.setField(OrderFields.DESCRIPTION, buildDescription(parameter, orderCreationRequest.getDescription(), technology, product));
    order.setField(IGNORE_MISSING_COMPONENTS, parameter.getBooleanField(IGNORE_MISSING_COMPONENTS));
    order.setField("typeOfProductionRecording", orderCreationRequest.getTypeOfProductionRecording());
    order = order.getDataDefinition().save(order);
    if (order.isValid()) {
        if (!order.getGlobalMessages().isEmpty()) {
            Optional<GlobalMessage> message = order.getGlobalMessages().stream().filter(gm -> gm.getMessage().equals("orders.order.message.plannedQuantityChanged")).findFirst();
            message.ifPresent(m -> {
                response.setAdditionalInformation(translationService.translate(m.getMessage(), LocaleContextHolder.getLocale(), m.getVars()[0], m.getVars()[1]));
            });
        }
        final StateChangeContext orderStateChangeContext = stateChangeContextBuilder.build(orderStateChangeAspect.getChangeEntityDescriber(), order, OrderState.ACCEPTED.getStringValue());
        orderStateChangeAspect.changeState(orderStateChangeContext);
        order = order.getDataDefinition().get(order.getId());
        if (!order.getStringField(OrderFields.STATE).equals(OrderStateStringValues.ACCEPTED)) {
            return new OrderCreationResponse(translationService.translate("basic.dashboard.orderDefinitionWizard.createOrder.acceptError", LocaleContextHolder.getLocale(), order.getStringField(OrderFields.NUMBER)));
        }
    } else {
        return new OrderCreationResponse(translationService.translate("basic.dashboard.orderDefinitionWizard.createOrder.validationError", LocaleContextHolder.getLocale()));
    }
    if (createOperationalTasks) {
        createOperationalTasks(order, orderCreationRequest);
        modifyProductionCountingQuantityForEach(order, orderCreationRequest.getTechnologyOperations());
    } else {
        modifyProductionCountingQuantity(order, orderCreationRequest.getMaterials());
    }
    response.setMessage(translationService.translate("orders.orderCreationService.created", LocaleContextHolder.getLocale(), order.getStringField(OrderFields.NUMBER)));
    if (createOperationalTasks) {
        response.setOperationalTasks(dashboardKanbanDataProvider.getOperationalTasksPendingForOrder(order.getId()));
    } else {
        response.setOrder(dashboardKanbanDataProvider.getOrder(order.getId()));
    }
    return response;
}
Also used : LocaleContextHolder(org.springframework.context.i18n.LocaleContextHolder) ProductFamilyElementType(com.qcadoo.mes.basic.constants.ProductFamilyElementType) OrderDetailsListeners(com.qcadoo.mes.orders.listeners.OrderDetailsListeners) Autowired(org.springframework.beans.factory.annotation.Autowired) ProductionLinesConstants(com.qcadoo.mes.productionLines.constants.ProductionLinesConstants) StringUtils(org.apache.commons.lang3.StringUtils) TechnologyOperationComponentFields(com.qcadoo.mes.technologies.constants.TechnologyOperationComponentFields) ParameterFields(com.qcadoo.mes.basic.constants.ParameterFields) TechnologyStateChangeAspect(com.qcadoo.mes.technologies.states.aop.TechnologyStateChangeAspect) BigDecimal(java.math.BigDecimal) TechnologyNameAndNumberGenerator(com.qcadoo.mes.technologies.TechnologyNameAndNumberGenerator) BasicConstants(com.qcadoo.mes.basic.constants.BasicConstants) Map(java.util.Map) GlobalMessage(com.qcadoo.model.api.validators.GlobalMessage) SearchRestrictions(com.qcadoo.model.api.search.SearchRestrictions) OperationProductInComponentFields(com.qcadoo.mes.technologies.constants.OperationProductInComponentFields) TechnologyState(com.qcadoo.mes.technologies.states.constants.TechnologyState) Set(java.util.Set) WorkstationFields(com.qcadoo.mes.basic.constants.WorkstationFields) TechnologyOperationComponentFieldsTNFO(com.qcadoo.mes.timeNormsForOperations.constants.TechnologyOperationComponentFieldsTNFO) TechnologyOperationDto(com.qcadoo.mes.orders.controllers.dto.TechnologyOperationDto) Collectors(java.util.stream.Collectors) OrderCreationResponse(com.qcadoo.mes.orders.controllers.responses.OrderCreationResponse) Sets(com.google.common.collect.Sets) OperationFields(com.qcadoo.mes.technologies.constants.OperationFields) Objects(java.util.Objects) List(java.util.List) OrderStateChangeAspect(com.qcadoo.mes.orders.states.aop.OrderStateChangeAspect) Entity(com.qcadoo.model.api.Entity) ParameterService(com.qcadoo.mes.basic.ParameterService) ParameterFieldsO(com.qcadoo.mes.orders.constants.ParameterFieldsO) OrderStateStringValues(com.qcadoo.mes.orders.states.constants.OrderStateStringValues) OperationProductOutComponentFields(com.qcadoo.mes.technologies.constants.OperationProductOutComponentFields) Optional(java.util.Optional) SearchCriteriaBuilder(com.qcadoo.model.api.search.SearchCriteriaBuilder) TechnologiesConstants(com.qcadoo.mes.technologies.constants.TechnologiesConstants) TechnologyFields(com.qcadoo.mes.technologies.constants.TechnologyFields) DataDefinitionService(com.qcadoo.model.api.DataDefinitionService) DashboardKanbanDataProvider(com.qcadoo.mes.orders.controllers.dataProvider.DashboardKanbanDataProvider) OrderFields(com.qcadoo.mes.orders.constants.OrderFields) ParameterFieldsPL(com.qcadoo.mes.productionLines.constants.ParameterFieldsPL) OrdersConstants(com.qcadoo.mes.orders.constants.OrdersConstants) TechnologyService(com.qcadoo.mes.technologies.TechnologyService) OrderCreationRequest(com.qcadoo.mes.orders.controllers.requests.OrderCreationRequest) Lists(com.google.common.collect.Lists) GlobalTypeOfMaterial(com.qcadoo.mes.basic.constants.GlobalTypeOfMaterial) NumberGeneratorService(com.qcadoo.view.api.utils.NumberGeneratorService) Service(org.springframework.stereotype.Service) MaterialDto(com.qcadoo.mes.technologies.controller.dataProvider.MaterialDto) StateChangeContext(com.qcadoo.mes.states.StateChangeContext) OrderState(com.qcadoo.mes.orders.states.constants.OrderState) TranslationService(com.qcadoo.localization.api.TranslationService) StateChangeContextBuilder(com.qcadoo.mes.states.service.StateChangeContextBuilder) Either(com.qcadoo.commons.functional.Either) NumberService(com.qcadoo.model.api.NumberService) TechnologyStateStringValues(com.qcadoo.mes.technologies.states.constants.TechnologyStateStringValues) ProductFields(com.qcadoo.mes.basic.constants.ProductFields) ParameterFieldsT(com.qcadoo.mes.technologies.constants.ParameterFieldsT) OrderService(com.qcadoo.mes.orders.OrderService) Comparator(java.util.Comparator) OperationalTaskFields(com.qcadoo.mes.orders.constants.OperationalTaskFields) Entity(com.qcadoo.model.api.Entity) OrderCreationResponse(com.qcadoo.mes.orders.controllers.responses.OrderCreationResponse) GlobalMessage(com.qcadoo.model.api.validators.GlobalMessage) StateChangeContext(com.qcadoo.mes.states.StateChangeContext)

Example 9 with Either

use of com.qcadoo.commons.functional.Either in project mes by qcadoo.

the class GeneratorViewListeners method tryPerformCustomization.

private Optional<Either<String, TechnologyId>> tryPerformCustomization(final GeneratorView generatorView, final Entity context) {
    try {
        Optional<Either<String, TechnologyId>> customizedTechId = Optional.ofNullable(context.getBelongsToField(GeneratorContextFields.PRODUCT)).flatMap(mainProduct -> generatorView.getSelectedNodeId().flatMap(nodeId -> technologyCustomizer.customize(nodeId, mainProduct, GeneratorSettings.from(context, parameterService.getParameter()), false)));
        customizedTechId.ifPresent(cti -> {
            if (cti.isRight()) {
                TechnologyId technologyId = cti.getRight();
                technologyCustomizer.addCustomizedProductToQualityCard(technologyId);
            }
        });
        return customizedTechId;
    } catch (Exception e) {
        if (LOGGER.isWarnEnabled()) {
            LOGGER.warn("Cannot perform technology customization due to unexpected error", e);
        }
        return Optional.of(Either.left("Cannot perform technology customization due to unexpected error"));
    }
}
Also used : TechnologiesGeneratorForProductsService(com.qcadoo.mes.technologiesGenerator.TechnologiesGeneratorForProductsService) TechnologyCustomizer(com.qcadoo.mes.technologiesGenerator.customization.technology.TechnologyCustomizer) Logger(org.slf4j.Logger) ImmutableMap(com.google.common.collect.ImmutableMap) GeneratorContextFields(com.qcadoo.mes.technologiesGenerator.constants.GeneratorContextFields) ComponentState(com.qcadoo.view.api.ComponentState) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) GeneratorSettings(com.qcadoo.mes.technologiesGenerator.GeneratorSettings) ContextId(com.qcadoo.mes.technologiesGenerator.domain.ContextId) GridComponent(com.qcadoo.view.api.components.GridComponent) TreeGenerator(com.qcadoo.mes.technologiesGenerator.tree.TreeGenerator) Entity(com.qcadoo.model.api.Entity) ViewDefinitionState(com.qcadoo.view.api.ViewDefinitionState) ParameterService(com.qcadoo.mes.basic.ParameterService) GeneratorView(com.qcadoo.mes.technologiesGenerator.view.GeneratorView) Service(org.springframework.stereotype.Service) Either(com.qcadoo.commons.functional.Either) Optional(java.util.Optional) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) Either(com.qcadoo.commons.functional.Either)

Example 10 with Either

use of com.qcadoo.commons.functional.Either in project mes by qcadoo.

the class TreeGenerator method performGeneration.

private Either<String, ContextId> performGeneration(final Entity context, final GeneratorSettings settings, boolean applyCustomized) {
    Entity technology = context.getBelongsToField(GeneratorContextFields.TECHNOLOGY);
    TechnologyId technologyId = new TechnologyId(technology.getId());
    ContextId contextId = new ContextId(context.getId());
    Map<OperationProductKey, Long> customizedOperationProductTechnologies = getCustomizedTechnologies(context, applyCustomized);
    Either<String, TechnologyStructureNode> mRoot = tryBuildStructure(settings, technologyId, contextId);
    Either<String, Entity> generationResults = mRoot.flatMap(root -> regenerateNodes(context, root).flatMap(x -> markContextAsGenerated(contextId)));
    if (applyCustomized) {
        updateNodesToCustomized(context, customizedOperationProductTechnologies);
    }
    logResults(generationResults);
    return generationResults.map(Entity::getId).map(ContextId::new);
}
Also used : TechnologyFields(com.qcadoo.mes.technologies.constants.TechnologyFields) DataDefinitionService(com.qcadoo.model.api.DataDefinitionService) GeneratorContextFields(com.qcadoo.mes.technologiesGenerator.constants.GeneratorContextFields) LoggerFactory(org.slf4j.LoggerFactory) TechnologiesGeneratorConstants(com.qcadoo.mes.technologiesGenerator.constants.TechnologiesGeneratorConstants) Autowired(org.springframework.beans.factory.annotation.Autowired) GeneratorSettings(com.qcadoo.mes.technologiesGenerator.GeneratorSettings) TechnologyService(com.qcadoo.mes.technologies.TechnologyService) TechnologyOperationComponentFields(com.qcadoo.mes.technologies.constants.TechnologyOperationComponentFields) TechnologyStructureNode(com.qcadoo.mes.technologiesGenerator.domain.TechnologyStructureNode) TechnologyOperationId(com.qcadoo.mes.technologies.tree.domain.TechnologyOperationId) Service(org.springframework.stereotype.Service) Map(java.util.Map) SizeGroupId(com.qcadoo.mes.technologies.domain.SizeGroupId) Logger(org.slf4j.Logger) OperationProductKey(com.qcadoo.mes.technologiesGenerator.domain.OperationProductKey) SearchRestrictions(com.qcadoo.model.api.search.SearchRestrictions) TechnologyStructureNodeType(com.qcadoo.mes.technologiesGenerator.domain.TechnologyStructureNodeType) TechnologyStructureTreeDataProvider(com.qcadoo.mes.technologiesGenerator.dataProvider.TechnologyStructureTreeDataProvider) Collectors(java.util.stream.Collectors) Maps(com.google.common.collect.Maps) ContextId(com.qcadoo.mes.technologiesGenerator.domain.ContextId) DataDefinition(com.qcadoo.model.api.DataDefinition) Objects(java.util.Objects) JoinType(com.qcadoo.model.api.search.JoinType) List(java.util.List) TechnologyInputProductTypeId(com.qcadoo.mes.technologies.domain.TechnologyInputProductTypeId) Entity(com.qcadoo.model.api.Entity) GeneratorContextDataProvider(com.qcadoo.mes.technologiesGenerator.dataProvider.GeneratorContextDataProvider) ProductInfo(com.qcadoo.mes.technologiesGenerator.domain.ProductInfo) Either(com.qcadoo.commons.functional.Either) Optional(java.util.Optional) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) TechnologiesConstants(com.qcadoo.mes.technologies.constants.TechnologiesConstants) GeneratorTreeNodeFields(com.qcadoo.mes.technologiesGenerator.constants.GeneratorTreeNodeFields) Transactional(org.springframework.transaction.annotation.Transactional) OperationId(com.qcadoo.mes.technologies.domain.OperationId) Entity(com.qcadoo.model.api.Entity) TechnologyId(com.qcadoo.mes.technologies.domain.TechnologyId) ContextId(com.qcadoo.mes.technologiesGenerator.domain.ContextId) TechnologyStructureNode(com.qcadoo.mes.technologiesGenerator.domain.TechnologyStructureNode) OperationProductKey(com.qcadoo.mes.technologiesGenerator.domain.OperationProductKey)

Aggregations

Either (com.qcadoo.commons.functional.Either)13 Entity (com.qcadoo.model.api.Entity)13 TechnologyId (com.qcadoo.mes.technologies.domain.TechnologyId)10 GeneratorSettings (com.qcadoo.mes.technologiesGenerator.GeneratorSettings)9 ProductSuffixes (com.qcadoo.mes.technologiesGenerator.customization.product.domain.ProductSuffixes)8 QcadooModelMatchers.anyEntity (com.qcadoo.testing.model.QcadooModelMatchers.anyEntity)7 Test (org.junit.Test)7 Optional (java.util.Optional)5 Autowired (org.springframework.beans.factory.annotation.Autowired)5 Service (org.springframework.stereotype.Service)5 DataDefinitionService (com.qcadoo.model.api.DataDefinitionService)4 List (java.util.List)4 Lists (com.google.common.collect.Lists)3 ParameterService (com.qcadoo.mes.basic.ParameterService)3 ProductFields (com.qcadoo.mes.basic.constants.ProductFields)3 TechnologyService (com.qcadoo.mes.technologies.TechnologyService)3 GeneratorContextFields (com.qcadoo.mes.technologiesGenerator.constants.GeneratorContextFields)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 OrderFields (com.qcadoo.mes.orders.constants.OrderFields)2