/** * 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.service; import com.axelor.apps.base.db.Product; import com.axelor.apps.base.service.administration.GeneralService; import com.axelor.apps.base.service.user.UserService; import com.axelor.apps.production.db.ManufOrder; import com.axelor.apps.production.db.OperationOrder; import com.axelor.apps.production.db.repo.ProductionOrderRepository; import com.axelor.apps.purchase.db.repo.PurchaseOrderRepository; import com.axelor.apps.purchase.service.PurchaseOrderLineService; import com.axelor.apps.stock.service.MinStockRulesService; import com.axelor.apps.supplychain.db.MrpLine; import com.axelor.apps.supplychain.db.repo.MrpLineTypeRepository; import com.axelor.apps.supplychain.service.MrpLineServiceImpl; import com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl; import com.axelor.db.Model; import com.axelor.exception.AxelorException; import com.google.inject.Inject; import com.google.inject.persist.Transactional; public class MrpLineServiceProductionImpl extends MrpLineServiceImpl { protected ManufOrderService manufOrderService; @Inject public MrpLineServiceProductionImpl(GeneralService generalService, UserService userService, PurchaseOrderServiceSupplychainImpl purchaseOrderServiceSupplychainImpl, PurchaseOrderLineService purchaseOrderLineService, PurchaseOrderRepository purchaseOrderRepo, ManufOrderService manufOrderService, ProductionOrderRepository productionOrderRepo, MinStockRulesService minStockRulesService) { super(generalService, userService, purchaseOrderServiceSupplychainImpl, purchaseOrderLineService, purchaseOrderRepo, minStockRulesService); this.manufOrderService = manufOrderService; } @Override public void generateProposal(MrpLine mrpLine) throws AxelorException { super.generateProposal(mrpLine); if(mrpLine.getMrpLineType().getElementSelect() == MrpLineTypeRepository.ELEMENT_MANUFACTURING_PROPOSAL) { this.generateManufacturingProposal(mrpLine); } } @Transactional(rollbackOn = {AxelorException.class, Exception.class}) protected void generateManufacturingProposal(MrpLine mrpLine) throws AxelorException { Product product = mrpLine.getProduct(); manufOrderService.generateManufOrder(product, mrpLine.getQty(), ManufOrderService.DEFAULT_PRIORITY, ManufOrderService.IS_TO_INVOICE, null, mrpLine.getMaturityDate().toDateTimeAtStartOfDay().toLocalDateTime()); // TODO compute the time to produce to put the manuf order at the correct day } @Override protected String computeReleatedName(Model model) { if(model instanceof ManufOrder) { return ((ManufOrder) model).getManufOrderSeq(); } else if(model instanceof OperationOrder) { return ((OperationOrder) model).getName(); } else { return super.computeReleatedName(model); } } }