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));
}
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));
}
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;
}
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"));
}
}
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);
}
Aggregations