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);
}
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;
}
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);
}
}
}
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;
}
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;
}
Aggregations