feat: Enhance Supply Chain Module with Analytic Move Line Features

- Added support for analytic move lines in InvoiceServiceSupplychainImpl.
- Implemented methods to check for missing analytic move lines in PurchaseOrderController and PurchaseRequestController.
- Introduced budget distribution line generation in PurchaseOrderController.
- Updated SaleOrderController to generate analytic move lines.
- Enhanced StockMoveController with budget distribution line generation.
- Modified StockMoveLineController to include analytic account and axis handling.
- Updated domain models to include references to analytic accounts and axes in Partner, StockLocation, and StockMoveLine.
- Created unit tests for StockMoveLineServiceSupplychainImpl to ensure proper functionality of new features.
- Added MockQuery class for testing purposes.
This commit is contained in:
BACHIR SOULDI
2026-02-17 15:13:17 +01:00
parent 9eb959f07a
commit 6881c439b2
74 changed files with 2975 additions and 930 deletions

View File

@@ -50,7 +50,7 @@ public class PurchaseOrderManagementRepository extends PurchaseOrderRepository {
try {
purchaseOrder = super.save(purchaseOrder);
Beans.get(PurchaseOrderService.class).setDraftSequence(purchaseOrder);
Beans.get(PurchaseOrderService.class).setPurchaseOrderBarCodeSeq(purchaseOrder);
Beans.get(PurchaseOrderService.class).setPurchaseOrderBarCodeSeq(purchaseOrder);
return purchaseOrder;
} catch (Exception e) {
throw new PersistenceException(e.getLocalizedMessage());

View File

@@ -84,7 +84,7 @@ public interface PurchaseOrderLineService {
Unit unit)
throws AxelorException;
public PurchaseOrderLine createPurchaseOrderLine(
public PurchaseOrderLine createPurchaseOrderLine(
PurchaseOrder purchaseOrder,
Product product,
String productName,

View File

@@ -730,10 +730,17 @@ public class PurchaseOrderLineServiceImpl implements PurchaseOrderLineService {
}
@Override
public PurchaseOrderLine createPurchaseOrderLine(PurchaseOrder purchaseOrder, Product product, String productName,
String description, BigDecimal qty, Unit unit, PurchaseRequestLine purchaseRequestLine) throws AxelorException {
PurchaseOrderLine purchaseOrderLine = this.createPurchaseOrderLine(purchaseOrder, product, productName, description, qty, unit);
return purchaseOrderLine;
public PurchaseOrderLine createPurchaseOrderLine(
PurchaseOrder purchaseOrder,
Product product,
String productName,
String description,
BigDecimal qty,
Unit unit,
PurchaseRequestLine purchaseRequestLine)
throws AxelorException {
PurchaseOrderLine purchaseOrderLine =
this.createPurchaseOrderLine(purchaseOrder, product, productName, description, qty, unit);
return purchaseOrderLine;
}
}

View File

@@ -42,7 +42,7 @@ public class PurchaseRequestPrintServiceImpl implements PurchaseRequestPrintServ
public String printPurchaseRequest(PurchaseRequest purchaseRequest, String formatPdf)
throws AxelorException {
String fileName = getPurchaseRequestFilesName(false, formatPdf);
String fileName = getPurchaseRequestFilesName(false, formatPdf);
return PdfTool.getFileLinkFromPdfFile(print(purchaseRequest, formatPdf), fileName);
}
@@ -84,7 +84,6 @@ public class PurchaseRequestPrintServiceImpl implements PurchaseRequestPrintServ
ReportSettings reportSetting =
ReportFactory.createReport(IReport.PURCHASE_REQUEST, title + " - ${date}");
return reportSetting
.addParam("PurchaseRequestId", purchaseRequest.getId())
.addParam("Locale", locale)
@@ -103,8 +102,6 @@ public class PurchaseRequestPrintServiceImpl implements PurchaseRequestPrintServ
@Override
public String getFileName(PurchaseRequest purchaseRequest) {
return I18n.get("Purchase request")
+ " "
+ purchaseRequest.getPurchaseRequestSeq();
return I18n.get("Purchase request") + " " + purchaseRequest.getPurchaseRequestSeq();
}
}

View File

@@ -696,7 +696,7 @@ public class PurchaseOrderController {
Beans.get(PurchaseOrderRepository.class)
.find(request.getContext().asType(PurchaseOrder.class).getId());
if (purchaseOrder.getCurrency().getId() != 41){
if (purchaseOrder.getCurrency().getId() != 41) {
ImportationFolder importationFolder =
Beans.get(PurchaseOrderServiceImpl.class).generateImportationFolder(purchaseOrder);

View File

@@ -101,6 +101,12 @@
<boolean name="isWithoutPayment" title="Is Without Payment"/>
<boolean name="authorizeBudget" title="Authoriser depassement budget"/>
<boolean name="budgetChecked" title="Budget checked" default="false"/>
<many-to-one name="verifiedByUser" ref="com.axelor.auth.db.User" readonly="true" title="Verified by"/>
<date name="budgetVerificationDate" title="Budget verification date" readonly="true"/>
<unique-constraint columns="purchaseOrderSeq,company"/>
<extra-code>

View File

@@ -43,6 +43,12 @@
<integer name="limitPo" title="limit Po" default="1"/>
<boolean name="budgetChecked" title="Budget checked"/>
<many-to-one name="verifiedByUser" ref="com.axelor.auth.db.User" readonly="true" title="Verified by"/>
<date name="budgetVerificationDate" title="Budget verification date" readonly="true"/>
<date name="budgetRejectionDate" title="Budget rejection date" readonly="true"/>
<unique-constraint columns="purchaseRequestSeq"/>
<extra-code>
@@ -63,6 +69,7 @@
<field name="statusSelect"/>
<field name="supplierUser"/>
<field name="purchaseRequestSeq" />
<field name="budgetChecked" />
</track>
</entity>