First commit (wating to add alerts in budget)
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package com.axelor.apps.suppliermanagement.db.repo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.axelor.apps.account.db.BudgetDistribution;
|
||||
import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine;
|
||||
|
||||
public class PurchaseOrderSupplierLineManagementRepository extends PurchaseOrderSupplierLineRepository {
|
||||
|
||||
@Override
|
||||
public Map<String, Object> populate(Map<String, Object> json, Map<String, Object> context) {
|
||||
Long supplierLine = (Long) json.get("id");
|
||||
PurchaseOrderSupplierLine line = find(supplierLine);
|
||||
List<BudgetDistribution> budgetDistributiList = line.getPurchaseOrderLine().getBudgetDistributionList();
|
||||
BigDecimal totalBudgetAmountAvailable = BigDecimal.ZERO;
|
||||
for (BudgetDistribution budgetDistribution : budgetDistributiList) {
|
||||
totalBudgetAmountAvailable = totalBudgetAmountAvailable.add(budgetDistribution.getBudgetAmountAvailable());
|
||||
}
|
||||
json.put("budgetRemainingAmount", totalBudgetAmountAvailable);
|
||||
|
||||
return super.populate(json, context);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.axelor.apps.suppliermanagement.module;
|
||||
|
||||
import com.axelor.app.AxelorModule;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineManagementRepository;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository;
|
||||
|
||||
public class SupplierManagementModule extends AxelorModule{
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(PurchaseOrderSupplierLineRepository.class).to(PurchaseOrderSupplierLineManagementRepository.class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import com.axelor.apps.purchase.service.app.AppPurchaseService;
|
||||
import com.axelor.apps.purchase.web.EmailUtil;
|
||||
import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository;
|
||||
import com.axelor.apps.supplychain.service.PurchaseOrderLineServiceSupplychainImpl;
|
||||
import com.axelor.auth.AuthUtils;
|
||||
import com.axelor.exception.AxelorException;
|
||||
import com.axelor.exception.db.repo.TraceBackRepository;
|
||||
@@ -44,8 +45,10 @@ import com.google.inject.persist.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class PurchaseOrderSupplierLineService {
|
||||
|
||||
@@ -61,7 +64,6 @@ public class PurchaseOrderSupplierLineService {
|
||||
|
||||
@Inject private MailAccountService mailAccountService;
|
||||
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void accept(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException {
|
||||
|
||||
@@ -83,6 +85,7 @@ public class PurchaseOrderSupplierLineService {
|
||||
// set tax from tco
|
||||
BigDecimal priceDiscounted = this.computeDiscount(purchaseOrderSupplierLine);
|
||||
|
||||
purchaseOrderLine.setQty(purchaseOrderSupplierLine.getAvailableQty());
|
||||
purchaseOrderLine.setTaxLine(purchaseOrderSupplierLine.getTaxLine());
|
||||
purchaseOrderLine.setPrice(purchaseOrderSupplierLine.getPrice());
|
||||
purchaseOrderLine.setExTaxTotal(
|
||||
@@ -95,7 +98,15 @@ public class PurchaseOrderSupplierLineService {
|
||||
// sophal add acceptedOn and By TCO
|
||||
purchaseOrderSupplierLine.setAcceptanceDate(appPurchaseService.getTodayDate());
|
||||
purchaseOrderSupplierLine.setAcceptedByUser(AuthUtils.getUser());
|
||||
;
|
||||
|
||||
if(!purchaseOrderLine.getBudgetDistributionList().isEmpty()){
|
||||
Beans.get(PurchaseOrderLineServiceSupplychainImpl.class)
|
||||
.computeBudgetDistributionSumAmount(purchaseOrderLine, purchaseOrderLine.getPurchaseOrder());
|
||||
}
|
||||
|
||||
if(!purchaseOrderLine.getAnalyticMoveLineList().isEmpty()){
|
||||
Beans.get(PurchaseOrderLineServiceSupplychainImpl.class).computeAnalyticDistribution(purchaseOrderLine);
|
||||
}
|
||||
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
@@ -151,11 +162,34 @@ public class PurchaseOrderSupplierLineService {
|
||||
this.putStandBy(line, raison);
|
||||
}
|
||||
}
|
||||
PurchaseOrder po = purchaseOrderSupplierLines.get(0).getPurchaseOrderLine().getPurchaseOrder();
|
||||
String email = purchaseOrderSupplierLines.get(0).getPurchaseOrderLine().getCreatedBy().getPartner().getEmailAddress().getAddress();
|
||||
String raisonTmp = raison != null ? raison : "";
|
||||
if(email != null){
|
||||
EmailUtil.sendEmail(mailAccountService, email, "TCO En Attente "+po.getPurchaseOrderSeq(),po.getPurchaseOrderSeq()+ " a été mis en anttente avec le motif suivant <br><b>"+raisonTmp+"</b>");
|
||||
// PurchaseOrder po =
|
||||
// purchaseOrderSupplierLines.get(0).getPurchaseOrderLine().getPurchaseOrder();
|
||||
|
||||
Set<PurchaseOrder> purchaseOrderSet = new HashSet<>();
|
||||
|
||||
for (PurchaseOrderSupplierLine line : purchaseOrderSupplierLines) {
|
||||
purchaseOrderSet.add(line.getPurchaseOrderLine().getPurchaseOrder());
|
||||
}
|
||||
|
||||
for (PurchaseOrder pOrder : purchaseOrderSet) {
|
||||
// List<PurchaseOrderSupplierLine> pslines = purchaseOrderSupplierLines.stream().filter(arg0
|
||||
// -> arg0.getPurchaseOrderLine().getPurchaseOrder().getId() ==
|
||||
// pOrder.getId()).collect(Collectors.toList());
|
||||
String email = pOrder.getCreatedBy().getPartner().getEmailAddress().getAddress();
|
||||
String raisonTmp = raison != null ? raison : "";
|
||||
if (email != null) {
|
||||
EmailUtil.sendEmailWithCC(
|
||||
mailAccountService,
|
||||
email,
|
||||
"De(s) TCO(s) mis en attente(s) : " + pOrder.getPurchaseOrderSeq(),
|
||||
"Des TCO's ont été mis en anttentes de la CA : "
|
||||
+ pOrder.getPurchaseOrderSeq()
|
||||
+ " avec le motif suivant <br><b>"
|
||||
+ raisonTmp
|
||||
+ "</b>",
|
||||
"bachir.souldi@sophal.dz",
|
||||
"zakaria.hachemi@sophal.dz");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,12 +357,12 @@ public class PurchaseOrderSupplierLineService {
|
||||
return map;
|
||||
}
|
||||
|
||||
BigDecimal priceDiscounted = this.computeDiscount(line).setScale(5,RoundingMode.HALF_EVEN);
|
||||
|
||||
BigDecimal priceDiscounted = this.computeDiscount(line).setScale(5, RoundingMode.HALF_EVEN);
|
||||
|
||||
BigDecimal taxRate = line.getTaxLine().getValue();
|
||||
|
||||
|
||||
BigDecimal exTaxTotal = PurchaseOrderLineServiceImpl.computeAmount(line.getAvailableQty(), priceDiscounted);
|
||||
|
||||
BigDecimal exTaxTotal =
|
||||
PurchaseOrderLineServiceImpl.computeAmount(line.getAvailableQty(), priceDiscounted);
|
||||
BigDecimal taxTotal = exTaxTotal.multiply(taxRate);
|
||||
BigDecimal inTaxTotal = exTaxTotal.add(exTaxTotal.multiply(taxRate));
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.axelor.apps.stock.service.StockLocationService;
|
||||
import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository;
|
||||
import com.axelor.apps.supplychain.exception.IExceptionMessage;
|
||||
import com.axelor.apps.supplychain.service.PurchaseOrderLineServiceSupplychainImpl;
|
||||
import com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl;
|
||||
import com.axelor.auth.AuthUtils;
|
||||
import com.axelor.dms.db.DMSFile;
|
||||
@@ -70,7 +71,7 @@ public class PurchaseOrderSupplierService {
|
||||
|
||||
@Inject private PurchaseOrderServiceSupplychainImpl purchaseOrderServiceSupplychainImpl;
|
||||
|
||||
@Inject private PurchaseOrderLineService purchaseOrderLineService;
|
||||
@Inject private PurchaseOrderLineServiceSupplychainImpl purchaseOrderLineServiceSupplychainImpl;
|
||||
|
||||
@Inject protected PurchaseOrderRepository poRepo;
|
||||
|
||||
@@ -322,13 +323,7 @@ public class PurchaseOrderSupplierService {
|
||||
"Création d'une ligne de commande fournisseur pour le produit : {}",
|
||||
new Object[] {purchaseOrderLine.getProductName()});
|
||||
|
||||
return purchaseOrderLineService.createPurchaseOrderLine(
|
||||
purchaseOrder,
|
||||
purchaseOrderLine.getProduct(),
|
||||
purchaseOrderLine.getProductName(),
|
||||
purchaseOrderLine.getDescription(),
|
||||
purchaseOrderLine.getQty(),
|
||||
purchaseOrderLine.getUnit());
|
||||
return purchaseOrderLineServiceSupplychainImpl.createPurchaseOrderLineFromSplit(purchaseOrderLine);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
@@ -398,13 +393,7 @@ public class PurchaseOrderSupplierService {
|
||||
new Object[] {purchaseOrderLine.getProductName()});
|
||||
|
||||
PurchaseOrderLine PurchaseOrderLineNew =
|
||||
purchaseOrderLineService.createPurchaseOrderLine(
|
||||
purchaseOrder,
|
||||
purchaseOrderLine.getProduct(),
|
||||
purchaseOrderLine.getProductName(),
|
||||
purchaseOrderLine.getDescription(),
|
||||
purchaseOrderLine.getQty(),
|
||||
purchaseOrderLine.getUnit());
|
||||
purchaseOrderLineServiceSupplychainImpl.createPurchaseOrderLineFromSplit(purchaseOrderLine);
|
||||
|
||||
PurchaseOrderLineNew.setPrice(purchaseOrderLine.getPrice());
|
||||
PurchaseOrderLineNew.setInTaxPrice(purchaseOrderLine.getInTaxPrice());
|
||||
@@ -455,6 +444,7 @@ public class PurchaseOrderSupplierService {
|
||||
po.setRefusedByUser(poLineSupplierParnet.getRefusedByUser());
|
||||
po.setAttrs(poLineSupplierParnet.getAttrs());
|
||||
po.setCurrency(poLineSupplierParnet.getCurrency());
|
||||
po.setPriceDiscounted(poLineSupplierParnet.getPriceDiscounted());
|
||||
// LOG.debug("purchaseOrderLineNew.getId(): {}",purchaseOrderLineNew.get(index).getId());
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class).save(po);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.axelor.apps.purchase.service.app.AppPurchaseService;
|
||||
import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository;
|
||||
import com.axelor.apps.suppliermanagement.service.PurchaseOrderSupplierLineService;
|
||||
import com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.schema.actions.ActionView;
|
||||
@@ -287,4 +288,13 @@ public class PurchaseOrderSupplierLineController {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void computeBudgetDistribution(ActionRequest request, ActionResponse response){
|
||||
|
||||
PurchaseOrderSupplierLine purchaseOrderSupplierLine = Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
|
||||
Beans.get(PurchaseOrderServiceSupplychainImpl.class).computeBudgetDistribution(purchaseOrderSupplierLine.getPurchaseOrderLine());
|
||||
response.setReload(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
<string name="rejectionRaison" title="Rejection Raison" large="true"/>
|
||||
<string name="standbyRaison" title="Standby Raison" large="true"/>
|
||||
|
||||
<decimal name="budgetRemainingAmount" title="Budget remaining amount" precision="20" scale="10"/>
|
||||
|
||||
<extra-code><![CDATA[
|
||||
|
||||
//STATE SELECT
|
||||
|
||||
Reference in New Issue
Block a user