package com.warehousecorporation.warehouse; import java.math.BigDecimal; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.qcadoo.model.api.DataDefinition; import com.qcadoo.model.api.DataDefinitionService; import com.qcadoo.model.api.Entity; import com.qcadoo.security.api.SecurityService; import com.qcadoo.view.api.ComponentState; import com.qcadoo.view.api.ViewDefinitionState; @Service public class WarehouseService { @Autowired private DataDefinitionService dataDefinitionService; @Autowired private SecurityService securityService; public void setWorkersDatesAndResourceQuantity(final DataDefinition dataDefinition, final Entity transfer) { if (transfer.getId() == null) { transfer.setField("requestWorker", securityService.getCurrentUserName()); transfer.setField("requestDate", new Date()); } if ("02done".equals(transfer.getField("status"))) { transfer.setField("confirmWorker", securityService.getCurrentUserName()); transfer.setField("confirmDate", new Date()); DataDefinition resourceDataDefinition = dataDefinitionService.get("warehouse", "resource"); Entity resource = transfer.getBelongsToField("resource"); BigDecimal currentQuantity = (BigDecimal) resource.getField("quantity"); BigDecimal transferQuantity = (BigDecimal) transfer.getField("quantity"); BigDecimal newQuantity; if ("02outgoing".equals(transfer.getField("type"))) { newQuantity = new BigDecimal(currentQuantity.doubleValue() - transferQuantity.doubleValue()); } else { newQuantity = new BigDecimal(currentQuantity.doubleValue() + transferQuantity.doubleValue()); } if (newQuantity.doubleValue() >= 0) { resource.setField("quantity", newQuantity); resourceDataDefinition.save(resource); } } } public boolean checkIfHasEnoughtQuantity(final DataDefinition dataDefinition, final Entity transfer) { if ("02done".equals(transfer.getField("status")) && "02outgoing".equals(transfer.getField("type"))) { Entity resource = transfer.getBelongsToField("resource"); BigDecimal currentQuantity = (BigDecimal) resource.getField("quantity"); BigDecimal transferQuantity = (BigDecimal) transfer.getField("quantity"); if (transferQuantity.compareTo(currentQuantity) > 0) { transfer.addError(dataDefinition.getField("quantity"), "warehouse.not.enought.resource.error"); return false; } } return true; } public void setResourceInitialQuantity(final ViewDefinitionState state) { ComponentState quantity = (ComponentState) state.getComponentByReference("quantity"); if(quantity.getFieldValue() == null) { quantity.setFieldValue(0); } } }