add mrp (CBN)
This commit is contained in:
@@ -19,7 +19,9 @@ package com.axelor.apps.production.service;
|
||||
|
||||
import com.axelor.apps.base.db.Company;
|
||||
import com.axelor.apps.base.db.Product;
|
||||
import com.axelor.apps.base.db.Unit;
|
||||
import com.axelor.apps.base.db.repo.ProductRepository;
|
||||
import com.axelor.apps.base.service.UnitConversionService;
|
||||
import com.axelor.apps.production.db.BillOfMaterial;
|
||||
import com.axelor.apps.production.db.ManufOrder;
|
||||
import com.axelor.apps.production.db.OperationOrder;
|
||||
@@ -36,11 +38,14 @@ import com.axelor.apps.stock.db.repo.StockRulesRepository;
|
||||
import com.axelor.apps.stock.service.StockLocationService;
|
||||
import com.axelor.apps.stock.service.StockRulesService;
|
||||
import com.axelor.apps.supplychain.db.Mrp;
|
||||
import com.axelor.apps.supplychain.db.MrpForecast;
|
||||
import com.axelor.apps.supplychain.db.MrpLine;
|
||||
import com.axelor.apps.supplychain.db.MrpLineOrigin;
|
||||
import com.axelor.apps.supplychain.db.MrpLineSophal;
|
||||
import com.axelor.apps.supplychain.db.MrpLineType;
|
||||
import com.axelor.apps.supplychain.db.repo.MrpForecastRepository;
|
||||
import com.axelor.apps.supplychain.db.repo.MrpLineRepository;
|
||||
import com.axelor.apps.supplychain.db.repo.MrpLineSophalRepository;
|
||||
import com.axelor.apps.supplychain.db.repo.MrpLineTypeRepository;
|
||||
import com.axelor.apps.supplychain.db.repo.MrpRepository;
|
||||
import com.axelor.apps.supplychain.service.MrpLineService;
|
||||
@@ -48,12 +53,18 @@ import com.axelor.apps.supplychain.service.MrpServiceImpl;
|
||||
import com.axelor.apps.tool.StringTool;
|
||||
import com.axelor.db.JPA;
|
||||
import com.axelor.exception.AxelorException;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -437,4 +448,106 @@ public class MrpServiceProductionImpl extends MrpServiceImpl {
|
||||
this.createManufOrderMrpLines();
|
||||
return mrp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createAvailableMrpLineSophal(Mrp mrp) throws AxelorException{
|
||||
super.createAvailableMrpLineSophal(mrp);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createMrpLineSophal(Mrp mrp, Product product,Unit unit,BigDecimal qty,List<MrpForecast> mrpForecastList, Map<Long, Double> productQty) throws AxelorException{
|
||||
|
||||
if(mrp.getIncludeBOM()){
|
||||
|
||||
BillOfMaterial defaultBillOfMaterial = product.getDefaultBillOfMaterial();
|
||||
|
||||
if (defaultBillOfMaterial != null) {
|
||||
|
||||
for (BillOfMaterial billOfMaterial : defaultBillOfMaterial.getBillOfMaterialSet()) {
|
||||
List<MrpForecast> forecastList = mrpForecastList.stream().filter(t -> t.getProduct() == product).collect(Collectors.toList());
|
||||
|
||||
Product subProduct = billOfMaterial.getProduct();
|
||||
|
||||
if (this.isMrpProduct(subProduct)) {
|
||||
|
||||
Double prodQty = productQty.get(subProduct.getId()) == null ? Double.parseDouble("0") : productQty.get(subProduct.getId());
|
||||
BigDecimal reelQty =new BigDecimal(prodQty);
|
||||
|
||||
createMrpLineSophalProd(mrp, subProduct,product, reelQty ,billOfMaterial.getQty(),defaultBillOfMaterial.getQty(),forecastList);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}else{
|
||||
super.createMrpLineSophal(mrp, product,unit, qty, mrpForecastList,productQty);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void createMrpLineSophalProd(Mrp mrp,Product product,Product parentProduct,BigDecimal qty,BigDecimal reorderdQty,BigDecimal defaultQty, List<MrpForecast> forecastList){
|
||||
MrpLineSophal mrpLineSophal = new MrpLineSophal();
|
||||
mrpLineSophal.setQty(qty);
|
||||
BigDecimal reelQty = qty;
|
||||
BigDecimal sumQty = BigDecimal.ZERO;
|
||||
for (MrpForecast forecast : forecastList) {
|
||||
|
||||
if(forecast.getProduct().getId() == parentProduct.getId()){
|
||||
BigDecimal dividedQty = (forecast.getQty().multiply(reorderdQty)).divide(defaultQty);
|
||||
reelQty = reelQty.subtract(dividedQty);
|
||||
sumQty = sumQty.add(dividedQty);
|
||||
BigDecimal displayedQty = reelQty;
|
||||
switch (forecast.getMonthSelect()) {
|
||||
case 1:
|
||||
mrpLineSophal.setJanuary(displayedQty);
|
||||
break;
|
||||
case 2:
|
||||
mrpLineSophal.setFebruary(displayedQty);
|
||||
break;
|
||||
case 3:
|
||||
mrpLineSophal.setMarch(displayedQty);
|
||||
break;
|
||||
case 4:
|
||||
mrpLineSophal.setApril(displayedQty);
|
||||
case 5:
|
||||
mrpLineSophal.setMay(displayedQty);
|
||||
case 6:
|
||||
mrpLineSophal.setJuin(displayedQty);
|
||||
break;
|
||||
case 7:
|
||||
mrpLineSophal.setJuly(displayedQty);
|
||||
break;
|
||||
case 8:
|
||||
mrpLineSophal.setAugust(displayedQty);
|
||||
break;
|
||||
case 9:
|
||||
mrpLineSophal.setSeptember(displayedQty);
|
||||
break;
|
||||
case 10:
|
||||
mrpLineSophal.setOctober(displayedQty);
|
||||
break;
|
||||
case 11:
|
||||
mrpLineSophal.setNovember(displayedQty);
|
||||
break;
|
||||
case 12:
|
||||
mrpLineSophal.setDecember(displayedQty);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
mrpLineSophal.setMrp(mrp);
|
||||
mrpLineSophal.setProduct(product);
|
||||
mrpLineSophal.setUnit(product.getPurchasesUnit());
|
||||
mrpLineSophal.setProductOrigin(parentProduct);
|
||||
|
||||
Stream<MrpForecast> filter = forecastList.stream().filter(t -> t.getProduct().getId() == parentProduct.getId());
|
||||
Long totalForecast = filter.count();
|
||||
|
||||
mrpLineSophal.setSecurityStock(sumQty.divide(new BigDecimal(totalForecast) ,5, RoundingMode.HALF_EVEN));
|
||||
Beans.get(MrpLineSophalRepository.class).save(mrpLineSophal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user