/** * *************************************************************************** * Copyright (c) 2010 Qcadoo Limited * Project: Qcadoo MES * Version: 1.4 * * This file is part of Qcadoo. * * Qcadoo is free software; you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation; either version 3 of the License, * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *************************************************************************** */ package com.qcadoo.mes.masterOrders.hooks; import java.math.BigDecimal; import java.util.Date; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.qcadoo.localization.api.utils.DateUtils; import com.qcadoo.mes.basic.ParameterService; import com.qcadoo.mes.basic.constants.BasicConstants; import com.qcadoo.mes.masterOrders.constants.MasterOrderFields; import com.qcadoo.mes.masterOrders.constants.MasterOrderProductFields; import com.qcadoo.mes.masterOrders.constants.MasterOrdersConstants; import com.qcadoo.mes.masterOrders.constants.OrderFieldsMO; import com.qcadoo.mes.masterOrders.constants.ParameterFieldsMO; import com.qcadoo.mes.masterOrders.util.MasterOrderOrdersDataProvider; import com.qcadoo.mes.orders.OrderService; import com.qcadoo.mes.orders.constants.OrderFields; import com.qcadoo.mes.orders.constants.OrdersConstants; import com.qcadoo.mes.orders.constants.ParameterFieldsO; import com.qcadoo.mes.technologies.constants.TechnologyFields; import com.qcadoo.model.api.BigDecimalUtils; import com.qcadoo.model.api.DataDefinitionService; import com.qcadoo.model.api.Entity; import com.qcadoo.model.api.NumberService; import com.qcadoo.view.api.ViewDefinitionState; import com.qcadoo.view.api.components.CheckBoxComponent; import com.qcadoo.view.api.components.FieldComponent; import com.qcadoo.view.api.components.FormComponent; import com.qcadoo.view.api.components.LookupComponent; import com.qcadoo.view.api.utils.NumberGeneratorService; @Service public class OrderDetailsHooksMO { private static final String L_FORM = "form"; @Autowired private DataDefinitionService dataDefinitionService; @Autowired private NumberService numberService; @Autowired private NumberGeneratorService numberGeneratorService; @Autowired private ParameterService parameterService; @Autowired private MasterOrderOrdersDataProvider masterOrderOrdersDataProvider; @Autowired private OrderService orderService; public void fillMasterOrderFields(final ViewDefinitionState view) { FormComponent orderForm = (FormComponent) view.getComponentByReference(L_FORM); Entity order = orderForm.getEntity(); Entity masterOrder = order.getBelongsToField(OrderFieldsMO.MASTER_ORDER); Entity masterOrderProduct = order.getBelongsToField(OrderFieldsMO.MASTER_ORDER_PRODUCT); Entity masterOrderProductComponent = order.getBelongsToField(OrderFieldsMO.MASTER_ORDER_PRODUCT_COMPONENT); if (order.getId() == null) { if (masterOrder != null) { Long masterOrderId = masterOrder.getId(); masterOrder = getMasterOrder(masterOrderId); fillMasterOrderFields(view, masterOrder, masterOrderProduct, masterOrderProductComponent); } } if (masterOrder != null) { disableOrderType(view); } } private void disableOrderType(final ViewDefinitionState view) { FieldComponent orderTypeField = (FieldComponent) view.getComponentByReference(OrderFields.ORDER_TYPE); orderTypeField.setEnabled(false); orderTypeField.requestComponentUpdateState(); } private void fillMasterOrderFields(final ViewDefinitionState view, final Entity masterOrder, final Entity product, Entity productComponent) { FieldComponent numberField = (FieldComponent) view.getComponentByReference(OrderFields.NUMBER); LookupComponent companyLookup = (LookupComponent) view.getComponentByReference(OrderFields.COMPANY); FieldComponent deadlineField = (FieldComponent) view.getComponentByReference(OrderFields.DEADLINE); FieldComponent dateFromField = (FieldComponent) view.getComponentByReference(OrderFields.DATE_FROM); FieldComponent dateToField = (FieldComponent) view.getComponentByReference(OrderFields.DATE_TO); LookupComponent productLookup = (LookupComponent) view.getComponentByReference(OrderFields.PRODUCT); LookupComponent technologyPrototypeLookup = (LookupComponent) view .getComponentByReference(OrderFields.TECHNOLOGY_PROTOTYPE); FieldComponent plannedQuantityField = (FieldComponent) view.getComponentByReference(OrderFields.PLANNED_QUANTITY); FieldComponent descriptionField = (FieldComponent) view.getComponentByReference(OrderFields.DESCRIPTION); boolean fillOrderDescriptionBasedOnTechnology = dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER,BasicConstants.MODEL_PARAMETER).find().setMaxResults(1).uniqueResult().getBooleanField(ParameterFieldsO.FILL_ORDER_DESCRIPTION_BASED_ON_TECHNOLOGY_DESCRIPTION); LookupComponent addressLookup = (LookupComponent) view.getComponentByReference(OrderFields.ADDRESS); if (masterOrder != null) { Entity parameter = parameterService.getParameter(); String masterOrderNumber = masterOrder.getStringField(MasterOrderFields.NUMBER); Entity masterOrderCompany = masterOrder.getBelongsToField(MasterOrderFields.COMPANY); Date masterOrderDeadline = masterOrder.getDateField(MasterOrderFields.DEADLINE); Date masterOrderStartDate = masterOrder.getDateField(MasterOrderFields.START_DATE); Date masterOrderFinishDate = masterOrder.getDateField(MasterOrderFields.FINISH_DATE); Entity masterOrderProduct = masterOrder.getBelongsToField(MasterOrderFields.PRODUCT); Entity masterOrderAddress = masterOrder.getBelongsToField(MasterOrderFields.ADDRESS); BigDecimal masterOrderQuantity; BigDecimal cumulatedOrderQuantity; if (productComponent == null) { masterOrderQuantity = BigDecimalUtils .convertNullToZero(masterOrder.getDecimalField(MasterOrderFields.MASTER_ORDER_QUANTITY)); cumulatedOrderQuantity = BigDecimalUtils.convertNullToZero( masterOrderOrdersDataProvider.sumBelongingOrdersPlannedQuantities(masterOrder, masterOrderProduct)); } else { masterOrderQuantity = BigDecimalUtils .convertNullToZero(productComponent.getDecimalField(MasterOrderProductFields.MASTER_ORDER_QUANTITY)); cumulatedOrderQuantity = BigDecimalUtils .convertNullToZero(productComponent.getDecimalField(MasterOrderProductFields.CUMULATED_ORDER_QUANTITY)); } BigDecimal plannedQuantity = masterOrderQuantity.subtract(cumulatedOrderQuantity, numberService.getMathContext()); if (product != null) { masterOrderProduct = product; } Entity masterOrderTechnology = masterOrder.getBelongsToField(MasterOrderFields.TECHNOLOGY); String generatedNumber; if (parameter.getBooleanField(ParameterFieldsMO.SAME_ORDER_NUMBER)) { generatedNumber = masterOrderNumber; } else { generatedNumber = numberGeneratorService.generateNumberWithPrefix(OrdersConstants.PLUGIN_IDENTIFIER, OrdersConstants.MODEL_ORDER, 3, masterOrderNumber + "-"); } numberField.setFieldValue(generatedNumber); numberField.requestComponentUpdateState(); if ((companyLookup.getEntity() == null) && (masterOrderCompany != null)) { companyLookup.setFieldValue(masterOrderCompany.getId()); companyLookup.requestComponentUpdateState(); } if ((addressLookup.getEntity() == null) && (masterOrderAddress != null)) { addressLookup.setFieldValue(masterOrderAddress.getId()); addressLookup.requestComponentUpdateState(); } if (StringUtils.isEmpty((String) deadlineField.getFieldValue()) && (masterOrderDeadline != null)) { deadlineField.setFieldValue(DateUtils.toDateTimeString(masterOrderDeadline)); deadlineField.requestComponentUpdateState(); } if (StringUtils.isEmpty((String) dateFromField.getFieldValue()) && (masterOrderStartDate != null)) { dateFromField.setFieldValue(DateUtils.toDateTimeString(masterOrderStartDate)); dateFromField.requestComponentUpdateState(); } if (StringUtils.isEmpty((String) dateToField.getFieldValue()) && (masterOrderFinishDate != null)) { dateToField.setFieldValue(DateUtils.toDateTimeString(masterOrderFinishDate)); dateToField.requestComponentUpdateState(); } if (StringUtils.isEmpty((String) plannedQuantityField.getFieldValue()) && (plannedQuantity != null) && (BigDecimal.ZERO.compareTo(plannedQuantity) < 0)) { plannedQuantityField.setFieldValue(numberService.format(plannedQuantity)); plannedQuantityField.requestComponentUpdateState(); } if ((productLookup.getEntity() == null) && (masterOrderProduct != null)) { productLookup.setFieldValue(masterOrderProduct.getId()); productLookup.requestComponentUpdateState(); productLookup.performEvent(view, "onSelectedEntityChange", ""); } if (view.isViewAfterRedirect() && masterOrderTechnology != null) { technologyPrototypeLookup.setFieldValue(masterOrderTechnology.getId()); technologyPrototypeLookup.requestComponentUpdateState(); technologyPrototypeLookup.performEvent(view, "onSelectedEntityChange", ""); } String orderDescription = orderService.buildOrderDescription(masterOrder,masterOrderTechnology,fillOrderDescriptionBasedOnTechnology); if(((String)descriptionField.getFieldValue()).isEmpty()){ descriptionField.setFieldValue(""); descriptionField.requestComponentUpdateState(); descriptionField.setFieldValue(orderDescription); descriptionField.requestComponentUpdateState(); } } } private Entity getMasterOrder(final Long masterOrderId) { return dataDefinitionService.get(MasterOrdersConstants.PLUGIN_IDENTIFIER, MasterOrdersConstants.MODEL_MASTER_ORDER) .get(masterOrderId); } }