Search in sources :

Example 1 with StockConfigProductionService

use of com.axelor.apps.production.service.config.StockConfigProductionService in project axelor-open-suite by axelor.

the class OperationOrderStockMoveService method _createToConsumeStockMove.

protected StockMove _createToConsumeStockMove(OperationOrder operationOrder, Company company) throws AxelorException {
    StockConfigProductionService stockConfigService = Beans.get(StockConfigProductionService.class);
    StockConfig stockConfig = stockConfigService.getStockConfig(company);
    StockLocation virtualStockLocation = stockConfigService.getProductionVirtualStockLocation(stockConfig, operationOrder.getManufOrder().getProdProcess().getOutsourcing());
    StockLocation fromStockLocation;
    ProdProcessLine prodProcessLine = operationOrder.getProdProcessLine();
    if (operationOrder.getManufOrder().getIsConsProOnOperation() && prodProcessLine != null && prodProcessLine.getStockLocation() != null) {
        fromStockLocation = prodProcessLine.getStockLocation();
    } else if (!operationOrder.getManufOrder().getIsConsProOnOperation() && prodProcessLine != null && prodProcessLine.getProdProcess() != null && prodProcessLine.getProdProcess().getStockLocation() != null) {
        fromStockLocation = prodProcessLine.getProdProcess().getStockLocation();
    } else {
        fromStockLocation = stockConfigService.getComponentDefaultStockLocation(stockConfig);
    }
    return stockMoveService.createStockMove(null, null, company, fromStockLocation, virtualStockLocation, null, operationOrder.getPlannedStartDateT().toLocalDate(), null, StockMoveRepository.TYPE_INTERNAL);
}
Also used : StockConfig(com.axelor.apps.stock.db.StockConfig) StockLocation(com.axelor.apps.stock.db.StockLocation) StockConfigProductionService(com.axelor.apps.production.service.config.StockConfigProductionService) ProdProcessLine(com.axelor.apps.production.db.ProdProcessLine)

Example 2 with StockConfigProductionService

use of com.axelor.apps.production.service.config.StockConfigProductionService in project axelor-open-suite by axelor.

the class ManufOrderServiceImpl method generateWasteStockMove.

@Override
@Transactional(rollbackOn = { Exception.class })
public StockMove generateWasteStockMove(ManufOrder manufOrder) throws AxelorException {
    StockMove wasteStockMove = null;
    Company company = manufOrder.getCompany();
    if (manufOrder.getWasteProdProductList() == null || company == null || manufOrder.getWasteProdProductList().isEmpty()) {
        return wasteStockMove;
    }
    StockConfigProductionService stockConfigService = Beans.get(StockConfigProductionService.class);
    StockMoveService stockMoveService = Beans.get(StockMoveService.class);
    StockMoveLineService stockMoveLineService = Beans.get(StockMoveLineService.class);
    AppBaseService appBaseService = Beans.get(AppBaseService.class);
    StockConfig stockConfig = stockConfigService.getStockConfig(company);
    StockLocation virtualStockLocation = stockConfigService.getProductionVirtualStockLocation(stockConfig, false);
    StockLocation wasteStockLocation = stockConfigService.getWasteStockLocation(stockConfig);
    wasteStockMove = stockMoveService.createStockMove(virtualStockLocation.getAddress(), wasteStockLocation.getAddress(), company, virtualStockLocation, wasteStockLocation, null, appBaseService.getTodayDate(company), manufOrder.getWasteProdDescription(), StockMoveRepository.TYPE_INTERNAL);
    for (ProdProduct prodProduct : manufOrder.getWasteProdProductList()) {
        stockMoveLineService.createStockMoveLine(prodProduct.getProduct(), (String) productCompanyService.get(prodProduct.getProduct(), "name", company), (String) productCompanyService.get(prodProduct.getProduct(), "description", company), prodProduct.getQty(), (BigDecimal) productCompanyService.get(prodProduct.getProduct(), "costPrice", company), (BigDecimal) productCompanyService.get(prodProduct.getProduct(), "costPrice", company), prodProduct.getUnit(), wasteStockMove, StockMoveLineService.TYPE_WASTE_PRODUCTIONS, false, BigDecimal.ZERO);
    }
    stockMoveService.validate(wasteStockMove);
    manufOrder.setWasteStockMove(wasteStockMove);
    return wasteStockMove;
}
Also used : StockMoveLineService(com.axelor.apps.stock.service.StockMoveLineService) Company(com.axelor.apps.base.db.Company) StockMove(com.axelor.apps.stock.db.StockMove) StockMoveService(com.axelor.apps.stock.service.StockMoveService) OperationOrderStockMoveService(com.axelor.apps.production.service.operationorder.OperationOrderStockMoveService) StockConfig(com.axelor.apps.stock.db.StockConfig) AppBaseService(com.axelor.apps.base.service.app.AppBaseService) StockLocation(com.axelor.apps.stock.db.StockLocation) StockConfigProductionService(com.axelor.apps.production.service.config.StockConfigProductionService) ProdProduct(com.axelor.apps.production.db.ProdProduct) Transactional(com.google.inject.persist.Transactional)

Example 3 with StockConfigProductionService

use of com.axelor.apps.production.service.config.StockConfigProductionService in project axelor-open-suite by axelor.

the class ManufOrderStockMoveService method partialFinish.

/**
 * Allows to create and realize in or out stock moves for the given manufacturing order.
 *
 * @param manufOrder
 * @param inOrOut can be {@link ManufOrderStockMoveService#PART_FINISH_IN} or {@link
 *     ManufOrderStockMoveService#PART_FINISH_OUT}
 * @throws AxelorException
 */
protected void partialFinish(ManufOrder manufOrder, int inOrOut) throws AxelorException {
    if (inOrOut != PART_FINISH_IN && inOrOut != PART_FINISH_OUT) {
        throw new IllegalArgumentException(I18n.get(IExceptionMessage.IN_OR_OUT_INVALID_ARG));
    }
    Company company = manufOrder.getCompany();
    StockConfigProductionService stockConfigService = Beans.get(StockConfigProductionService.class);
    StockConfig stockConfig = stockConfigService.getStockConfig(company);
    StockLocation fromStockLocation;
    StockLocation toStockLocation;
    List<StockMove> stockMoveList;
    if (inOrOut == PART_FINISH_IN) {
        stockMoveList = manufOrder.getInStockMoveList();
        fromStockLocation = getDefaultStockLocation(manufOrder, company, STOCK_LOCATION_IN);
        toStockLocation = stockConfigService.getProductionVirtualStockLocation(stockConfig, manufOrder.getProdProcess().getOutsourcing());
    } else {
        stockMoveList = manufOrder.getOutStockMoveList();
        fromStockLocation = stockConfigService.getProductionVirtualStockLocation(stockConfig, manufOrder.getProdProcess().getOutsourcing());
        toStockLocation = getDefaultStockLocation(manufOrder, company, STOCK_LOCATION_OUT);
    }
    // realize current stock move and update the price
    Optional<StockMove> stockMoveToRealize = getPlannedStockMove(stockMoveList);
    if (stockMoveToRealize.isPresent()) {
        updateRealPrice(manufOrder, stockMoveToRealize.get());
        finishStockMove(stockMoveToRealize.get());
    }
    // generate new stock move
    StockMove newStockMove = stockMoveService.createStockMove(null, null, company, fromStockLocation, toStockLocation, null, manufOrder.getPlannedStartDateT().toLocalDate(), null, StockMoveRepository.TYPE_INTERNAL);
    newStockMove.setStockMoveLineList(new ArrayList<>());
    newStockMove.setOrigin(manufOrder.getManufOrderSeq());
    newStockMove.setOriginId(manufOrder.getId());
    newStockMove.setOriginTypeSelect(StockMoveRepository.ORIGIN_MANUF_ORDER);
    createNewStockMoveLines(manufOrder, newStockMove, inOrOut);
    if (!newStockMove.getStockMoveLineList().isEmpty()) {
        // plan the stockmove
        stockMoveService.plan(newStockMove);
        if (inOrOut == PART_FINISH_IN) {
            manufOrder.addInStockMoveListItem(newStockMove);
            newStockMove.getStockMoveLineList().forEach(manufOrder::addConsumedStockMoveLineListItem);
            manufOrder.clearDiffConsumeProdProductList();
        } else {
            manufOrder.addOutStockMoveListItem(newStockMove);
            newStockMove.getStockMoveLineList().forEach(manufOrder::addProducedStockMoveLineListItem);
        }
    }
}
Also used : Company(com.axelor.apps.base.db.Company) StockMove(com.axelor.apps.stock.db.StockMove) StockConfig(com.axelor.apps.stock.db.StockConfig) StockLocation(com.axelor.apps.stock.db.StockLocation) StockConfigProductionService(com.axelor.apps.production.service.config.StockConfigProductionService)

Example 4 with StockConfigProductionService

use of com.axelor.apps.production.service.config.StockConfigProductionService in project axelor-open-suite by axelor.

the class ManufOrderStockMoveService method getDefaultStockLocation.

/**
 * Given a manuf order, its company and whether we want to create a in or out stock move,
 * determine the default stock location and return it. First search in prodprocess, then in
 * company stock configuration.
 *
 * @param manufOrder a manufacturing order.
 * @param company a company with stock config.
 * @param inOrOut can be {@link ManufOrderStockMoveService#STOCK_LOCATION_IN} or {@link
 *     ManufOrderStockMoveService#STOCK_LOCATION_OUT}.
 * @return the found stock location, which can be null.
 * @throws AxelorException if the stock config is missing for the company.
 */
public StockLocation getDefaultStockLocation(ManufOrder manufOrder, Company company, int inOrOut) throws AxelorException {
    if (inOrOut != STOCK_LOCATION_IN && inOrOut != STOCK_LOCATION_OUT) {
        throw new IllegalArgumentException(I18n.get(IExceptionMessage.IN_OR_OUT_INVALID_ARG));
    }
    StockConfigProductionService stockConfigService = Beans.get(StockConfigProductionService.class);
    StockConfig stockConfig = stockConfigService.getStockConfig(company);
    StockLocation stockLocation = getDefaultStockLocation(manufOrder.getProdProcess(), inOrOut);
    if (stockLocation == null) {
        stockLocation = inOrOut == STOCK_LOCATION_IN ? stockConfigService.getComponentDefaultStockLocation(stockConfig) : stockConfigService.getFinishedProductsDefaultStockLocation(stockConfig);
    }
    return stockLocation;
}
Also used : StockConfig(com.axelor.apps.stock.db.StockConfig) StockLocation(com.axelor.apps.stock.db.StockLocation) StockConfigProductionService(com.axelor.apps.production.service.config.StockConfigProductionService)

Example 5 with StockConfigProductionService

use of com.axelor.apps.production.service.config.StockConfigProductionService in project axelor-open-suite by axelor.

the class ManufOrderStockMoveService method _createToProduceStockMove.

protected StockMove _createToProduceStockMove(ManufOrder manufOrder, Company company) throws AxelorException {
    StockConfigProductionService stockConfigService = Beans.get(StockConfigProductionService.class);
    StockConfig stockConfig = stockConfigService.getStockConfig(company);
    StockLocation virtualStockLocation = stockConfigService.getProductionVirtualStockLocation(stockConfig, manufOrder.getProdProcess().getOutsourcing());
    LocalDateTime plannedEndDateT = manufOrder.getPlannedEndDateT();
    LocalDate plannedEndDate = plannedEndDateT != null ? plannedEndDateT.toLocalDate() : null;
    StockLocation producedProductStockLocation = manufOrder.getProdProcess().getProducedProductStockLocation();
    if (producedProductStockLocation == null) {
        producedProductStockLocation = stockConfigService.getFinishedProductsDefaultStockLocation(stockConfig);
    }
    StockMove stockMove = stockMoveService.createStockMove(null, null, company, virtualStockLocation, producedProductStockLocation, null, plannedEndDate, null, StockMoveRepository.TYPE_INTERNAL);
    stockMove.setOriginId(manufOrder.getId());
    stockMove.setOriginTypeSelect(StockMoveRepository.ORIGIN_MANUF_ORDER);
    stockMove.setOrigin(manufOrder.getManufOrderSeq());
    return stockMove;
}
Also used : LocalDateTime(java.time.LocalDateTime) StockMove(com.axelor.apps.stock.db.StockMove) StockConfig(com.axelor.apps.stock.db.StockConfig) StockLocation(com.axelor.apps.stock.db.StockLocation) StockConfigProductionService(com.axelor.apps.production.service.config.StockConfigProductionService) LocalDate(java.time.LocalDate)

Aggregations

StockConfigProductionService (com.axelor.apps.production.service.config.StockConfigProductionService)7 StockConfig (com.axelor.apps.stock.db.StockConfig)7 StockLocation (com.axelor.apps.stock.db.StockLocation)7 StockMove (com.axelor.apps.stock.db.StockMove)5 Company (com.axelor.apps.base.db.Company)3 ProdProcessLine (com.axelor.apps.production.db.ProdProcessLine)2 ProdProduct (com.axelor.apps.production.db.ProdProduct)2 StockMoveLineService (com.axelor.apps.stock.service.StockMoveLineService)2 StockMoveService (com.axelor.apps.stock.service.StockMoveService)2 Transactional (com.google.inject.persist.Transactional)2 ProductCompanyService (com.axelor.apps.base.service.ProductCompanyService)1 AppBaseService (com.axelor.apps.base.service.app.AppBaseService)1 ManufOrder (com.axelor.apps.production.db.ManufOrder)1 OperationOrder (com.axelor.apps.production.db.OperationOrder)1 ManufOrderStockMoveService (com.axelor.apps.production.service.manuforder.ManufOrderStockMoveService)1 OperationOrderStockMoveService (com.axelor.apps.production.service.operationorder.OperationOrderStockMoveService)1 StockMoveLine (com.axelor.apps.stock.db.StockMoveLine)1 StockLocationRepository (com.axelor.apps.stock.db.repo.StockLocationRepository)1 StockMoveRepository (com.axelor.apps.stock.db.repo.StockMoveRepository)1 AxelorException (com.axelor.exception.AxelorException)1