use of com.axelor.apps.stock.db.StockLocation in project axelor-open-suite by axelor.
the class ProductController method setIndicatorsOfProduct.
public void setIndicatorsOfProduct(ActionRequest request, ActionResponse response) {
try {
Map<String, Long> mapId = Beans.get(ProjectedStockService.class).getProductIdCompanyIdStockLocationIdFromContext(request.getContext());
if (mapId == null) {
return;
}
Context context = request.getContext();
Long productId = mapId.get("productId");
Long companyId = mapId.get("companyId");
Long stockLocationId = mapId.get("stockLocationId");
if (companyId == 0L && stockLocationId != 0L) {
stockLocationId = 0L;
} else if (companyId != 0L && stockLocationId != 0L) {
StockLocation sl = Beans.get(StockLocationRepository.class).find(stockLocationId);
if (sl != null && sl.getCompany() != null && sl.getCompany().getId() != companyId) {
stockLocationId = 0L;
response.setValue("stockLocation", null);
context.put("$stockLocation", null);
}
}
Map<String, Object> map = Beans.get(ProductStockLocationService.class).computeIndicators(productId, companyId, stockLocationId);
response.setValues(map);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
use of com.axelor.apps.stock.db.StockLocation in project axelor-open-suite by axelor.
the class ProductController method findAllSubLocation.
@SuppressWarnings("unchecked")
public void findAllSubLocation(ActionRequest request, ActionResponse response) {
Context context = request.getContext();
Long stockLocationId = 0L;
Long companyId = 0L;
LinkedHashMap<String, Object> companyHashMap = (LinkedHashMap<String, Object>) context.get("company");
if (companyHashMap != null) {
companyId = Long.valueOf(companyHashMap.get("id").toString());
}
LinkedHashMap<String, Object> stockLocationHashMap = (LinkedHashMap<String, Object>) context.get("stockLocation");
if (stockLocationHashMap != null) {
stockLocationId = Long.valueOf(stockLocationHashMap.get("id").toString());
}
if (companyId != 0L && stockLocationId != 0L) {
StockLocation stockLocation = Beans.get(StockLocationRepository.class).find(stockLocationId);
if (stockLocation != null && stockLocation.getCompany().getId() == companyId) {
List<Long> stockLocationIdList = Beans.get(StockLocationService.class).getAllLocationAndSubLocationId(stockLocation, false);
response.setValue("$stockLocationIdList", stockLocationIdList);
return;
}
}
response.setValue("$stockLocationIdList", Arrays.asList(0L));
}
use of com.axelor.apps.stock.db.StockLocation in project axelor-open-suite by axelor.
the class MrpForecastController method generateMrpForecast.
@SuppressWarnings("unchecked")
public void generateMrpForecast(ActionRequest request, ActionResponse response) {
Context context = request.getContext();
LinkedHashMap<String, Object> sopLineMap = (LinkedHashMap<String, Object>) context.get("_sopLine");
LinkedHashMap<String, Object> periodMap = (LinkedHashMap<String, Object>) sopLineMap.get("period");
Period period = Beans.get(PeriodRepository.class).find(Long.parseLong(periodMap.get("id").toString()));
ArrayList<LinkedHashMap<String, Object>> mrpForecastList = (ArrayList<LinkedHashMap<String, Object>>) context.get("mrpForecasts");
LinkedHashMap<String, Object> stockLocationMap = (LinkedHashMap<String, Object>) context.get("stockLocation");
StockLocation stockLocation = Beans.get(StockLocationRepository.class).find(Long.parseLong(stockLocationMap.get("id").toString()));
if (mrpForecastList != null && !mrpForecastList.isEmpty()) {
mrpForecastProductionService.generateMrpForecast(period, mrpForecastList, stockLocation, MrpForecastRepository.TECHNICAL_ORIGIN_CREATED_FROM_SOP);
}
response.setCanClose(true);
}
use of com.axelor.apps.stock.db.StockLocation in project axelor-open-suite by axelor.
the class ManufOrderServiceImpl method merge.
@Transactional(rollbackOn = { Exception.class })
public void merge(List<Long> ids) throws AxelorException {
if (!canMerge(ids)) {
throw new AxelorException(ManufOrder.class, TraceBackRepository.CATEGORY_INCONSISTENCY, I18n.get(IExceptionMessage.MANUF_ORDER_NO_GENERATION));
}
List<ManufOrder> manufOrderList = manufOrderRepo.all().filter("self.id in (" + Joiner.on(",").join(ids) + ")").fetch();
/* Init all the necessary values to create the new Manuf Order */
Product product = manufOrderList.get(0).getProduct();
StockLocation stockLocation = manufOrderList.get(0).getWorkshopStockLocation();
Company company = manufOrderList.get(0).getCompany();
BillOfMaterial billOfMaterial = manufOrderList.stream().filter(x -> x.getBillOfMaterial().getVersionNumber() == 1).findFirst().get().getBillOfMaterial();
int priority = manufOrderList.stream().mapToInt(ManufOrder::getPrioritySelect).max().orElse(2);
Unit unit = billOfMaterial.getUnit();
BigDecimal qty = BigDecimal.ZERO;
String note = "";
ManufOrder mergedManufOrder = new ManufOrder();
for (ManufOrder manufOrder : manufOrderList) {
manufOrder.setStatusSelect(ManufOrderRepository.STATUS_MERGED);
manufOrder.setManufOrderMergeResult(mergedManufOrder);
for (ProductionOrder productionOrder : manufOrder.getProductionOrderSet()) {
mergedManufOrder.addProductionOrderSetItem(productionOrder);
}
for (SaleOrder saleOrder : manufOrder.getSaleOrderSet()) {
mergedManufOrder.addSaleOrderSetItem(saleOrder);
}
/*
* If unit are the same, then add the qty If not, convert the unit and get the converted qty
*/
if (manufOrder.getUnit().equals(unit)) {
qty = qty.add(manufOrder.getQty());
} else {
BigDecimal qtyConverted = Beans.get(UnitConversionService.class).convert(manufOrder.getUnit(), unit, manufOrder.getQty(), appBaseService.getNbDecimalDigitForQty(), null);
qty = qty.add(qtyConverted);
}
if (manufOrder.getNote() != null && !manufOrder.getNote().equals("")) {
note += manufOrder.getManufOrderSeq() + " : " + manufOrder.getNote() + "\n";
}
}
Optional<LocalDateTime> minDate = manufOrderList.stream().filter(mo -> mo.getPlannedStartDateT() != null).map(ManufOrder::getPlannedStartDateT).min(LocalDateTime::compareTo);
minDate.ifPresent(mergedManufOrder::setPlannedStartDateT);
/* Update the created manuf order */
mergedManufOrder.setStatusSelect(ManufOrderRepository.STATUS_DRAFT);
mergedManufOrder.setProduct(product);
mergedManufOrder.setUnit(unit);
mergedManufOrder.setWorkshopStockLocation(stockLocation);
mergedManufOrder.setQty(qty);
mergedManufOrder.setBillOfMaterial(billOfMaterial);
mergedManufOrder.setCompany(company);
mergedManufOrder.setPrioritySelect(priority);
mergedManufOrder.setProdProcess(billOfMaterial.getProdProcess());
mergedManufOrder.setNote(note);
/*
* Check the config to see if you directly plan the created manuf order or just prefill the
* operations
*/
if (appProductionService.isApp("production") && appProductionService.getAppProduction().getIsManufOrderPlannedAfterMerge()) {
manufOrderWorkflowService.plan(mergedManufOrder);
} else {
preFillOperations(mergedManufOrder);
}
manufOrderRepo.save(mergedManufOrder);
}
use of com.axelor.apps.stock.db.StockLocation 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;
}
Aggregations