|
|
|
|
@@ -93,7 +93,7 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackOn = {Exception.class})
|
|
|
|
|
@Transactional(rollbackOn = { Exception.class })
|
|
|
|
|
public Invoice createInvoice(
|
|
|
|
|
StockMove stockMove,
|
|
|
|
|
Integer operationSelect,
|
|
|
|
|
@@ -130,9 +130,8 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
if (StockMoveRepository.ORIGIN_SALE_ORDER.equals(stockMove.getOriginTypeSelect())) {
|
|
|
|
|
invoice = createInvoiceFromSaleOrder(stockMove, saleOrderRepo.find(origin), qtyToInvoiceMap);
|
|
|
|
|
} else if (StockMoveRepository.ORIGIN_PURCHASE_ORDER.equals(stockMove.getOriginTypeSelect())) {
|
|
|
|
|
invoice =
|
|
|
|
|
createInvoiceFromPurchaseOrder(
|
|
|
|
|
stockMove, purchaseOrderRepo.find(origin), qtyToInvoiceMap);
|
|
|
|
|
invoice = createInvoiceFromPurchaseOrder(
|
|
|
|
|
stockMove, purchaseOrderRepo.find(origin), qtyToInvoiceMap);
|
|
|
|
|
} else {
|
|
|
|
|
invoice = createInvoiceFromOrderlessStockMove(stockMove, qtyToInvoiceMap);
|
|
|
|
|
}
|
|
|
|
|
@@ -147,10 +146,9 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
for (StockMoveLine subLine : stockMoveLine.getSubLineList()) {
|
|
|
|
|
BigDecimal qty = BigDecimal.ZERO;
|
|
|
|
|
if (stockMoveLine.getQty().compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
qty =
|
|
|
|
|
qtyToInvoiceItem
|
|
|
|
|
.multiply(subLine.getQty())
|
|
|
|
|
.divide(stockMoveLine.getQty(), 2, RoundingMode.HALF_EVEN);
|
|
|
|
|
qty = qtyToInvoiceItem
|
|
|
|
|
.multiply(subLine.getQty())
|
|
|
|
|
.divide(stockMoveLine.getQty(), 2, RoundingMode.HALF_EVEN);
|
|
|
|
|
}
|
|
|
|
|
qty = qty.setScale(2, RoundingMode.HALF_EVEN);
|
|
|
|
|
qtyToInvoiceMap.put(subLine.getId(), qty);
|
|
|
|
|
@@ -159,13 +157,13 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackOn = {Exception.class})
|
|
|
|
|
@Transactional(rollbackOn = { Exception.class })
|
|
|
|
|
public Invoice createInvoiceFromSaleOrder(
|
|
|
|
|
StockMove stockMove, SaleOrder saleOrder, Map<Long, BigDecimal> qtyToInvoiceMap)
|
|
|
|
|
throws AxelorException {
|
|
|
|
|
|
|
|
|
|
InvoiceGenerator invoiceGenerator =
|
|
|
|
|
saleOrderInvoiceService.createInvoiceGenerator(saleOrder, stockMove.getIsReversion());
|
|
|
|
|
InvoiceGenerator invoiceGenerator = saleOrderInvoiceService.createInvoiceGenerator(saleOrder,
|
|
|
|
|
stockMove.getIsReversion());
|
|
|
|
|
|
|
|
|
|
Invoice invoice = invoiceGenerator.generate();
|
|
|
|
|
|
|
|
|
|
@@ -210,14 +208,13 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackOn = {Exception.class})
|
|
|
|
|
@Transactional(rollbackOn = { Exception.class })
|
|
|
|
|
public Invoice createInvoiceFromPurchaseOrder(
|
|
|
|
|
StockMove stockMove, PurchaseOrder purchaseOrder, Map<Long, BigDecimal> qtyToInvoiceMap)
|
|
|
|
|
throws AxelorException {
|
|
|
|
|
|
|
|
|
|
InvoiceGenerator invoiceGenerator =
|
|
|
|
|
purchaseOrderInvoiceService.createInvoiceGenerator(
|
|
|
|
|
purchaseOrder, stockMove.getIsReversion());
|
|
|
|
|
InvoiceGenerator invoiceGenerator = purchaseOrderInvoiceService.createInvoiceGenerator(
|
|
|
|
|
purchaseOrder, stockMove.getIsReversion());
|
|
|
|
|
|
|
|
|
|
Invoice invoice = invoiceGenerator.generate();
|
|
|
|
|
|
|
|
|
|
@@ -249,7 +246,7 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackOn = {Exception.class})
|
|
|
|
|
@Transactional(rollbackOn = { Exception.class })
|
|
|
|
|
public Invoice createInvoiceFromOrderlessStockMove(
|
|
|
|
|
StockMove stockMove, Map<Long, BigDecimal> qtyToInvoiceMap) throws AxelorException {
|
|
|
|
|
|
|
|
|
|
@@ -274,15 +271,14 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InvoiceGenerator invoiceGenerator =
|
|
|
|
|
new InvoiceGeneratorSupplyChain(stockMove, invoiceOperationType) {
|
|
|
|
|
InvoiceGenerator invoiceGenerator = new InvoiceGeneratorSupplyChain(stockMove, invoiceOperationType) {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Invoice generate() throws AxelorException {
|
|
|
|
|
@Override
|
|
|
|
|
public Invoice generate() throws AxelorException {
|
|
|
|
|
|
|
|
|
|
return super.createInvoiceHeader();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
return super.createInvoiceHeader();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Invoice invoice = invoiceGenerator.generate();
|
|
|
|
|
|
|
|
|
|
@@ -340,15 +336,13 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
Long id = stockMoveLine.getId();
|
|
|
|
|
if (qtyToInvoiceMap != null) {
|
|
|
|
|
if (qtyToInvoiceMap.containsKey(id)) {
|
|
|
|
|
invoiceLineListCreated =
|
|
|
|
|
this.createInvoiceLine(invoice, stockMoveLine, qtyToInvoiceMap.get(id));
|
|
|
|
|
invoiceLineListCreated = this.createInvoiceLine(invoice, stockMoveLine, qtyToInvoiceMap.get(id));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
invoiceLineListCreated =
|
|
|
|
|
this.createInvoiceLine(
|
|
|
|
|
invoice,
|
|
|
|
|
stockMoveLine,
|
|
|
|
|
stockMoveLine.getRealQty().subtract(stockMoveLine.getQtyInvoiced()));
|
|
|
|
|
invoiceLineListCreated = this.createInvoiceLine(
|
|
|
|
|
invoice,
|
|
|
|
|
stockMoveLine,
|
|
|
|
|
stockMoveLine.getRealQty().subtract(stockMoveLine.getQtyInvoiced()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (invoiceLineListCreated != null) {
|
|
|
|
|
@@ -424,32 +418,31 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
stockMoveLine.getStockMove().getStockMoveSeq());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InvoiceLineGenerator invoiceLineGenerator =
|
|
|
|
|
new InvoiceLineGeneratorSupplyChain(
|
|
|
|
|
invoice,
|
|
|
|
|
product,
|
|
|
|
|
stockMoveLine.getProductName(),
|
|
|
|
|
stockMoveLine.getDescription(),
|
|
|
|
|
qty,
|
|
|
|
|
stockMoveLine.getUnit(),
|
|
|
|
|
sequence,
|
|
|
|
|
false,
|
|
|
|
|
stockMoveLine.getSaleOrderLine(),
|
|
|
|
|
stockMoveLine.getPurchaseOrderLine(),
|
|
|
|
|
stockMoveLine,
|
|
|
|
|
stockMoveLine.getIsSubLine(),
|
|
|
|
|
stockMoveLine.getPackPriceSelect()) {
|
|
|
|
|
@Override
|
|
|
|
|
public List<InvoiceLine> creates() throws AxelorException {
|
|
|
|
|
InvoiceLineGenerator invoiceLineGenerator = new InvoiceLineGeneratorSupplyChain(
|
|
|
|
|
invoice,
|
|
|
|
|
product,
|
|
|
|
|
stockMoveLine.getProductName(),
|
|
|
|
|
stockMoveLine.getDescription(),
|
|
|
|
|
qty,
|
|
|
|
|
stockMoveLine.getUnit(),
|
|
|
|
|
sequence,
|
|
|
|
|
false,
|
|
|
|
|
stockMoveLine.getSaleOrderLine(),
|
|
|
|
|
stockMoveLine.getPurchaseOrderLine(),
|
|
|
|
|
stockMoveLine,
|
|
|
|
|
stockMoveLine.getIsSubLine(),
|
|
|
|
|
stockMoveLine.getPackPriceSelect()) {
|
|
|
|
|
@Override
|
|
|
|
|
public List<InvoiceLine> creates() throws AxelorException {
|
|
|
|
|
|
|
|
|
|
InvoiceLine invoiceLine = this.createInvoiceLine();
|
|
|
|
|
InvoiceLine invoiceLine = this.createInvoiceLine();
|
|
|
|
|
|
|
|
|
|
List<InvoiceLine> invoiceLines = new ArrayList<InvoiceLine>();
|
|
|
|
|
invoiceLines.add(invoiceLine);
|
|
|
|
|
List<InvoiceLine> invoiceLines = new ArrayList<InvoiceLine>();
|
|
|
|
|
invoiceLines.add(invoiceLine);
|
|
|
|
|
|
|
|
|
|
return invoiceLines;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
return invoiceLines;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
List<InvoiceLine> invoiceLines = invoiceLineGenerator.creates();
|
|
|
|
|
for (InvoiceLine invoiceLine : invoiceLines) {
|
|
|
|
|
@@ -465,7 +458,8 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get a list of stock move lines consolidated by parent line (sale or purchase order).
|
|
|
|
|
* Get a list of stock move lines consolidated by parent line (sale or purchase
|
|
|
|
|
* order).
|
|
|
|
|
*
|
|
|
|
|
* @param stockMoveLineList
|
|
|
|
|
* @return
|
|
|
|
|
@@ -484,8 +478,8 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
if (stockMoveLine.getSaleOrderLine() != null) {
|
|
|
|
|
list = stockMoveLineSaleMap.get(stockMoveLine.getSaleOrderLine());
|
|
|
|
|
// if (list == null) {
|
|
|
|
|
// list = new ArrayList<>();
|
|
|
|
|
// stockMoveLineSaleMap.put(stockMoveLine.getSaleOrderLine(), list);
|
|
|
|
|
// list = new ArrayList<>();
|
|
|
|
|
// stockMoveLineSaleMap.put(stockMoveLine.getSaleOrderLine(), list);
|
|
|
|
|
// }
|
|
|
|
|
// list.add(stockMoveLine);
|
|
|
|
|
resultList.add(stockMoveLine);
|
|
|
|
|
@@ -496,7 +490,9 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
stockMoveLinePurchaseMap.put(stockMoveLine.getPurchaseOrderLine(), list);
|
|
|
|
|
}
|
|
|
|
|
list.add(stockMoveLine);
|
|
|
|
|
} else { // if the stock move line does not have a parent line (sale or purchase order line)
|
|
|
|
|
resultList.add(stockMoveLine);
|
|
|
|
|
} else { // if the stock move line does not have a parent line (sale or purchase order
|
|
|
|
|
// line)
|
|
|
|
|
resultList.add(stockMoveLine);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -544,18 +540,16 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService {
|
|
|
|
|
stockMove = Beans.get(StockMoveRepository.class).find(stockMove.getId());
|
|
|
|
|
|
|
|
|
|
if (stockMove.getInvoiceSet() != null && !stockMove.getInvoiceSet().isEmpty()) {
|
|
|
|
|
Double totalInvoicedQty =
|
|
|
|
|
stockMove
|
|
|
|
|
.getStockMoveLineList()
|
|
|
|
|
.stream()
|
|
|
|
|
.mapToDouble(sml -> Double.parseDouble(sml.getQtyInvoiced().toString()))
|
|
|
|
|
.sum();
|
|
|
|
|
Double totalRealQty =
|
|
|
|
|
stockMove
|
|
|
|
|
.getStockMoveLineList()
|
|
|
|
|
.stream()
|
|
|
|
|
.mapToDouble(sml -> Double.parseDouble(sml.getRealQty().toString()))
|
|
|
|
|
.sum();
|
|
|
|
|
Double totalInvoicedQty = stockMove
|
|
|
|
|
.getStockMoveLineList()
|
|
|
|
|
.stream()
|
|
|
|
|
.mapToDouble(sml -> Double.parseDouble(sml.getQtyInvoiced().toString()))
|
|
|
|
|
.sum();
|
|
|
|
|
Double totalRealQty = stockMove
|
|
|
|
|
.getStockMoveLineList()
|
|
|
|
|
.stream()
|
|
|
|
|
.mapToDouble(sml -> Double.parseDouble(sml.getRealQty().toString()))
|
|
|
|
|
.sum();
|
|
|
|
|
if (totalRealQty.compareTo(totalInvoicedQty) == 1) {
|
|
|
|
|
invoiceStatus = 1;
|
|
|
|
|
} else if (totalRealQty.compareTo(totalInvoicedQty) == 0) {
|
|
|
|
|
|