/** * Axelor Business Solutions * * Copyright (C) 2016 Axelor (<http://axelor.com>). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * 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, see <http://www.gnu.org/licenses/>. */ package com.axelor.apps.production.web; import java.util.List; import javax.inject.Inject; import com.axelor.apps.production.db.BillOfMaterial; import com.axelor.apps.production.db.CostSheet; import com.axelor.apps.production.db.repo.BillOfMaterialRepository; import com.axelor.apps.production.service.BillOfMaterialService; import com.axelor.apps.production.service.CostSheetService; import com.axelor.apps.production.service.ProdProcessService; import com.axelor.exception.AxelorException; import com.axelor.i18n.I18n; import com.axelor.meta.schema.actions.ActionView; import com.axelor.rpc.ActionRequest; import com.axelor.rpc.ActionResponse; import com.google.common.collect.Lists; public class BillOfMaterialController { @Inject BillOfMaterialService billOfMaterialService; @Inject CostSheetService costSheetService; @Inject BillOfMaterialRepository billOfMaterialRepo; @Inject protected ProdProcessService prodProcessService; public void computeCostPrice (ActionRequest request, ActionResponse response) throws AxelorException { BillOfMaterial billOfMaterial = request.getContext().asType( BillOfMaterial.class ); CostSheet costSheet = costSheetService.computeCostPrice(billOfMaterialRepo.find(billOfMaterial.getId())); response.setView(ActionView .define(String.format(I18n.get("Cost sheet - %s"), billOfMaterial.getName())) .model(CostSheet.class.getName()) .param("popup", "true") .param("show-toolbar", "false") .param("show-confirm", "false") .param("popup-save", "false") .add("grid", "cost-sheet-bill-of-material-grid") .add("form", "cost-sheet-bill-of-material-form") .context("_showRecord", String.valueOf(costSheet.getId())).map()); response.setReload(true); } public void updateProductCostPrice (ActionRequest request, ActionResponse response) throws AxelorException { BillOfMaterial billOfMaterial = request.getContext().asType( BillOfMaterial.class ); billOfMaterialService.updateProductCostPrice(billOfMaterialRepo.find(billOfMaterial.getId())); response.setReload(true); } public void checkOriginalBillOfMaterial(ActionRequest request, ActionResponse response){ BillOfMaterial billOfMaterial = billOfMaterialRepo.find( request.getContext().asType(BillOfMaterial.class).getId() ); List<BillOfMaterial> billOfMaterialList = Lists.newArrayList(); billOfMaterialList = billOfMaterialRepo.all().filter("self.originalBillOfMaterial = :origin").bind("origin", billOfMaterial).fetch(); String message; if(!billOfMaterialList.isEmpty()){ String existingVersions = ""; for (BillOfMaterial billOfMaterialVersion : billOfMaterialList) { existingVersions += "<li>" + billOfMaterialVersion.getFullName() + "</li>"; } message = String.format(I18n.get("This bill of material already has the following versions : <br/><ul> %s </ul>And these versions may also have ones. Do you still wish to create a new one ?"), existingVersions); } else{ message = I18n.get("Do you really wish to create a new version of this bill of material ?"); } response.setAlert(message); } public void generateNewVersion(ActionRequest request, ActionResponse response){ BillOfMaterial billOfMaterial = billOfMaterialRepo.find( request.getContext().asType(BillOfMaterial.class).getId() ); BillOfMaterial copy = billOfMaterialService.generateNewVersion(billOfMaterial); response.setView(ActionView.define("Bill of material") .model(BillOfMaterial.class.getName()) .add("form","bill-of-material-form") .add("grid","bill-of-material-grid") .domain("self.isRawMaterial = false AND self.personalized = false AND self.parentBillOfMaterial IS NULL") .context("_showRecord", String.valueOf(copy.getId())) .map()); } public void validateProdProcess(ActionRequest request, ActionResponse response) throws AxelorException{ BillOfMaterial billOfMaterial = request.getContext().asType(BillOfMaterial.class); if (billOfMaterial != null && billOfMaterial.getProdProcess() != null){ if(billOfMaterial.getProdProcess().getIsConsProOnOperation()){ prodProcessService.validateProdProcess(billOfMaterial.getProdProcess(),billOfMaterial); } } } }