temporary branch
This commit is contained in:
@@ -21,46 +21,47 @@ import com.axelor.apps.base.db.Company;
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.base.db.repo.BlockingRepository;
|
||||
import com.axelor.apps.base.service.BlockingService;
|
||||
import com.axelor.apps.base.service.PriceListService;
|
||||
import com.axelor.apps.base.service.app.AppBaseService;
|
||||
import com.axelor.apps.message.service.MailAccountService;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrder;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrderLine;
|
||||
import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository;
|
||||
import com.axelor.apps.purchase.exception.IExceptionMessage;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderLineService;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderLineServiceImpl;
|
||||
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.auth.AuthUtils;
|
||||
import com.axelor.exception.AxelorException;
|
||||
import com.axelor.exception.db.repo.TraceBackRepository;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.rpc.Context;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import com.itextpdf.text.pdf.PdfStructTreeController.returnType;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrder;
|
||||
import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderLineService;
|
||||
|
||||
import java.math.RoundingMode;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.RoundingMode;
|
||||
import com.axelor.apps.base.service.app.AppBaseService;
|
||||
|
||||
public class PurchaseOrderSupplierLineService {
|
||||
|
||||
@Inject PurchaseOrderSupplierLineRepository poSupplierLineRepo;
|
||||
|
||||
@Inject protected AppPurchaseService appPurchaseService;
|
||||
|
||||
|
||||
@Inject private PurchaseOrderLineRepository purchaseOrderLineRepo;
|
||||
|
||||
@Inject private PurchaseOrderLineService purchaseOrderLineService;
|
||||
|
||||
@Inject protected AppBaseService appBaseService;
|
||||
|
||||
@Inject private MailAccountService mailAccountService;
|
||||
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void accept(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException {
|
||||
|
||||
@@ -80,30 +81,146 @@ public class PurchaseOrderSupplierLineService {
|
||||
}
|
||||
purchaseOrderLine.setSupplierPartner(supplierPartner);
|
||||
// set tax from tco
|
||||
BigDecimal priceDiscounted = this.computeDiscount(purchaseOrderSupplierLine);
|
||||
|
||||
purchaseOrderLine.setTaxLine(purchaseOrderSupplierLine.getTaxLine());
|
||||
purchaseOrderLine.setPrice(purchaseOrderSupplierLine.getPrice());
|
||||
purchaseOrderLine.setExTaxTotal(
|
||||
PurchaseOrderLineServiceImpl.computeAmount(
|
||||
purchaseOrderLine.getQty(), purchaseOrderLine.getPrice()));
|
||||
purchaseOrderLine.setPriceDiscounted(purchaseOrderSupplierLine.getPrice()); // sophal
|
||||
PurchaseOrderLineServiceImpl.computeAmount(purchaseOrderLine.getQty(), priceDiscounted));
|
||||
purchaseOrderLine.setDiscountTypeSelect(
|
||||
purchaseOrderSupplierLine.getDiscountTypeSelect()); // sophal
|
||||
purchaseOrderLine.setDiscountAmount(purchaseOrderSupplierLine.getDiscountAmount()); // sophal
|
||||
purchaseOrderLine.setPriceDiscounted(purchaseOrderSupplierLine.getPriceDiscounted()); // sophal
|
||||
purchaseOrderSupplierLine.setStateSelect(PurchaseOrderSupplierLineRepository.STATE_ACCEPTED);
|
||||
// sophal add acceptedOn and By TCO
|
||||
purchaseOrderSupplierLine.setAcceptanceDate(appPurchaseService.getTodayDate());
|
||||
purchaseOrderSupplierLine.setAcceptedByUser(AuthUtils.getUser());;
|
||||
purchaseOrderSupplierLine.setAcceptedByUser(AuthUtils.getUser());
|
||||
;
|
||||
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void refuse(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException {
|
||||
purchaseOrderSupplierLine.setStateSelect(PurchaseOrderSupplierLineRepository.STATE_NOT_ACCEPTED);
|
||||
purchaseOrderSupplierLine.setStateSelect(
|
||||
PurchaseOrderSupplierLineRepository.STATE_NOT_ACCEPTED);
|
||||
// sophal add acceptedOn and By TCO
|
||||
purchaseOrderSupplierLine.setRefusalDate(appPurchaseService.getTodayDate());
|
||||
purchaseOrderSupplierLine.setRefusedByUser(AuthUtils.getUser());;
|
||||
purchaseOrderSupplierLine.setRefusedByUser(AuthUtils.getUser());
|
||||
;
|
||||
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void approve(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException {
|
||||
purchaseOrderSupplierLine.setStateSelect(PurchaseOrderSupplierLineRepository.STATE_APPROVED);
|
||||
purchaseOrderSupplierLine.setApprovalDate(appPurchaseService.getTodayDate());
|
||||
purchaseOrderSupplierLine.setApprovedByUser(AuthUtils.getUser());
|
||||
;
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void putStandBy(PurchaseOrderSupplierLine purchaseOrderSupplierLine, String raison)
|
||||
throws AxelorException {
|
||||
purchaseOrderSupplierLine.setStateSelect(PurchaseOrderSupplierLineRepository.STATE_STANDBY);
|
||||
purchaseOrderSupplierLine.setStandbyDate(appPurchaseService.getTodayDate());
|
||||
purchaseOrderSupplierLine.setStandbyByUser(AuthUtils.getUser());
|
||||
purchaseOrderSupplierLine.setStandbyRaison(raison);
|
||||
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void massPutStandBy(List<Long> requestIds, String raison) throws AxelorException {
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
throw new AxelorException(
|
||||
TraceBackRepository.CATEGORY_MISSING_FIELD,
|
||||
"Please Select at least one PurchaseOrderSupplierLine");
|
||||
}
|
||||
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLines =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.all()
|
||||
.filter("self.id in (?1)", requestIds)
|
||||
.fetch();
|
||||
|
||||
if (requestIds != null || !requestIds.isEmpty()) {
|
||||
for (PurchaseOrderSupplierLine line : purchaseOrderSupplierLines) {
|
||||
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>");
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void massAccept(List<Long> requestIds) throws AxelorException {
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
throw new AxelorException(
|
||||
TraceBackRepository.CATEGORY_MISSING_FIELD,
|
||||
"Please Select at least one PurchaseOrderSupplierLine");
|
||||
}
|
||||
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLines =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.all()
|
||||
.filter("self.id in (?1)", requestIds)
|
||||
.fetch();
|
||||
|
||||
if (requestIds != null || !requestIds.isEmpty()) {
|
||||
for (PurchaseOrderSupplierLine line : purchaseOrderSupplierLines) {
|
||||
this.accept(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void massRefuse(List<Long> requestIds) throws AxelorException {
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
throw new AxelorException(
|
||||
TraceBackRepository.CATEGORY_MISSING_FIELD,
|
||||
"Please Select at least one PurchaseOrderSupplierLine");
|
||||
}
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLines =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.all()
|
||||
.filter("self.id in (?1)", requestIds)
|
||||
.fetch();
|
||||
|
||||
if (requestIds != null || !requestIds.isEmpty()) {
|
||||
for (PurchaseOrderSupplierLine line : purchaseOrderSupplierLines) {
|
||||
this.refuse(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void massApprove(List<Long> requestIds) throws AxelorException {
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
throw new AxelorException(
|
||||
TraceBackRepository.CATEGORY_MISSING_FIELD,
|
||||
"Please Select at least one PurchaseOrderSupplierLine");
|
||||
}
|
||||
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLines =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.all()
|
||||
.filter("self.id in (?1)", requestIds)
|
||||
.fetch();
|
||||
|
||||
if (requestIds != null || !requestIds.isEmpty()) {
|
||||
for (PurchaseOrderSupplierLine line : purchaseOrderSupplierLines) {
|
||||
this.approve(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public PurchaseOrderSupplierLine create(Partner supplierPartner, BigDecimal price) {
|
||||
|
||||
return new PurchaseOrderSupplierLine(
|
||||
@@ -111,96 +228,123 @@ public class PurchaseOrderSupplierLineService {
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public void savePurchaseSupplierLine(PurchaseOrderSupplierLine purchaseOrderSupplierLine){
|
||||
public void savePurchaseSupplierLine(PurchaseOrderSupplierLine purchaseOrderSupplierLine) {
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void calculateAmountsTco(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException{
|
||||
|
||||
|
||||
@Transactional
|
||||
public void calculateAmountsTco(PurchaseOrderSupplierLine purchaseOrderSupplierLine)
|
||||
throws AxelorException {
|
||||
|
||||
BigDecimal ExTaxTotal = BigDecimal.ZERO;
|
||||
BigDecimal taxTotal = BigDecimal.ZERO;
|
||||
BigDecimal inTaxTotal = BigDecimal.ZERO;
|
||||
|
||||
ExTaxTotal = purchaseOrderSupplierLine.getPrice().multiply(purchaseOrderSupplierLine.getAvailableQty())
|
||||
.setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
|
||||
ExTaxTotal =
|
||||
purchaseOrderSupplierLine
|
||||
.getPrice()
|
||||
.multiply(purchaseOrderSupplierLine.getAvailableQty())
|
||||
.setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
|
||||
purchaseOrderSupplierLine.setExTaxTotal(ExTaxTotal);
|
||||
|
||||
if(purchaseOrderSupplierLine.getTaxLine().getValue() != null){
|
||||
|
||||
taxTotal = ExTaxTotal.multiply(purchaseOrderSupplierLine.getTaxLine().getValue())
|
||||
.setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
|
||||
|
||||
if (purchaseOrderSupplierLine.getTaxLine().getValue() != null) {
|
||||
|
||||
taxTotal =
|
||||
ExTaxTotal.multiply(purchaseOrderSupplierLine.getTaxLine().getValue())
|
||||
.setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
|
||||
purchaseOrderSupplierLine.setTaxTotal(taxTotal);
|
||||
}
|
||||
|
||||
inTaxTotal = ExTaxTotal.add(taxTotal).setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);;
|
||||
inTaxTotal =
|
||||
ExTaxTotal.add(taxTotal)
|
||||
.setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);
|
||||
;
|
||||
purchaseOrderSupplierLine.setInTaxTotal(inTaxTotal);
|
||||
|
||||
|
||||
poSupplierLineRepo.save(purchaseOrderSupplierLine);
|
||||
}
|
||||
|
||||
public BigDecimal computeDiscount(PurchaseOrderSupplierLine purchaseOrderSupplierLine) {
|
||||
|
||||
BigDecimal price = purchaseOrderSupplierLine.getPrice();
|
||||
|
||||
return Beans.get(PriceListService.class)
|
||||
.computeDiscount(
|
||||
price,
|
||||
purchaseOrderSupplierLine.getDiscountTypeSelect(),
|
||||
purchaseOrderSupplierLine.getDiscountAmount());
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void splitPurchaseOrderLinesSpecialInto2(
|
||||
PurchaseOrder purchaseOrder, PurchaseOrderLine purchaseOrderLine, BigDecimal splitQty) throws AxelorException{
|
||||
|
||||
BigDecimal totalQty = purchaseOrderLine.getQty();
|
||||
totalQty = totalQty.subtract(splitQty);
|
||||
PurchaseOrder purchaseOrder, PurchaseOrderLine purchaseOrderLine, BigDecimal splitQty)
|
||||
throws AxelorException {
|
||||
|
||||
if(totalQty.compareTo(BigDecimal.ZERO) > 0){
|
||||
|
||||
PurchaseOrderLine newLine = purchaseOrderLineRepo.copy(purchaseOrderLine, true);
|
||||
newLine.setQty(splitQty);
|
||||
purchaseOrderLineService.compute(newLine, purchaseOrder);
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLineList;
|
||||
purchaseOrderSupplierLineList = newLine.getPurchaseOrderSupplierLineList();
|
||||
if (purchaseOrderSupplierLineList != null) {
|
||||
for (PurchaseOrderSupplierLine purchaseOrderSupplierLine : purchaseOrderSupplierLineList) {
|
||||
purchaseOrderSupplierLine.setAvailableQty(splitQty);
|
||||
this.calculateAmountsTco(purchaseOrderSupplierLine);
|
||||
}
|
||||
BigDecimal totalQty = purchaseOrderLine.getQty();
|
||||
totalQty = totalQty.subtract(splitQty);
|
||||
|
||||
if (totalQty.compareTo(BigDecimal.ZERO) > 0) {
|
||||
|
||||
PurchaseOrderLine newLine = purchaseOrderLineRepo.copy(purchaseOrderLine, true);
|
||||
newLine.setQty(splitQty);
|
||||
purchaseOrderLineService.compute(newLine, purchaseOrder);
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLineList;
|
||||
purchaseOrderSupplierLineList = newLine.getPurchaseOrderSupplierLineList();
|
||||
if (purchaseOrderSupplierLineList != null) {
|
||||
for (PurchaseOrderSupplierLine purchaseOrderSupplierLine : purchaseOrderSupplierLineList) {
|
||||
purchaseOrderSupplierLine.setAvailableQty(splitQty);
|
||||
this.calculateAmountsTco(purchaseOrderSupplierLine);
|
||||
}
|
||||
purchaseOrder.addPurchaseOrderLineListItem(newLine);
|
||||
|
||||
PurchaseOrderLine newLine2 = purchaseOrderLineRepo.copy(purchaseOrderLine, true);
|
||||
newLine2.setQty(totalQty);
|
||||
purchaseOrderLineService.compute(newLine2, purchaseOrder);
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLineList2;
|
||||
purchaseOrderSupplierLineList2 = newLine2.getPurchaseOrderSupplierLineList();
|
||||
if (purchaseOrderSupplierLineList2 != null) {
|
||||
for (PurchaseOrderSupplierLine purchaseOrderSupplierLine2 : purchaseOrderSupplierLineList2) {
|
||||
purchaseOrderSupplierLine2.setAvailableQty(totalQty);
|
||||
this.calculateAmountsTco(purchaseOrderSupplierLine2);
|
||||
}
|
||||
}
|
||||
purchaseOrder.addPurchaseOrderLineListItem(newLine2);
|
||||
|
||||
|
||||
purchaseOrder.removePurchaseOrderLineListItem(purchaseOrderLine);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Map<String, BigDecimal> compute(PurchaseOrderSupplierLine line) {
|
||||
|
||||
HashMap<String, BigDecimal> map = new HashMap<>();
|
||||
if (line == null
|
||||
|| line.getPrice() == null
|
||||
|| line.getTaxLine() == null) {
|
||||
return map;
|
||||
}
|
||||
purchaseOrder.addPurchaseOrderLineListItem(newLine);
|
||||
|
||||
PurchaseOrderLine newLine2 = purchaseOrderLineRepo.copy(purchaseOrderLine, true);
|
||||
newLine2.setQty(totalQty);
|
||||
purchaseOrderLineService.compute(newLine2, purchaseOrder);
|
||||
List<PurchaseOrderSupplierLine> purchaseOrderSupplierLineList2;
|
||||
purchaseOrderSupplierLineList2 = newLine2.getPurchaseOrderSupplierLineList();
|
||||
if (purchaseOrderSupplierLineList2 != null) {
|
||||
for (PurchaseOrderSupplierLine purchaseOrderSupplierLine2 :
|
||||
purchaseOrderSupplierLineList2) {
|
||||
purchaseOrderSupplierLine2.setAvailableQty(totalQty);
|
||||
this.calculateAmountsTco(purchaseOrderSupplierLine2);
|
||||
}
|
||||
}
|
||||
purchaseOrder.addPurchaseOrderLineListItem(newLine2);
|
||||
|
||||
BigDecimal exTaxTotal = line.getPrice().multiply(line.getAvailableQty()) ;
|
||||
BigDecimal taxRate = line.getTaxLine().getValue();
|
||||
BigDecimal taxTotal = exTaxTotal.multiply(taxRate);
|
||||
BigDecimal inTaxTotal = exTaxTotal.add(taxTotal);
|
||||
map.put("exTaxTotal", exTaxTotal);
|
||||
map.put("taxTotal", taxTotal);
|
||||
map.put("inTaxTotal", inTaxTotal);
|
||||
return map;
|
||||
|
||||
purchaseOrder.removePurchaseOrderLineListItem(purchaseOrderLine);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, BigDecimal> compute(PurchaseOrderSupplierLine line) {
|
||||
|
||||
HashMap<String, BigDecimal> map = new HashMap<>();
|
||||
if (line == null || line.getPrice() == null || line.getTaxLine() == null) {
|
||||
return map;
|
||||
}
|
||||
|
||||
BigDecimal priceDiscounted = this.computeDiscount(line).setScale(5,RoundingMode.HALF_EVEN);
|
||||
|
||||
BigDecimal taxRate = line.getTaxLine().getValue();
|
||||
|
||||
|
||||
BigDecimal exTaxTotal = PurchaseOrderLineServiceImpl.computeAmount(line.getAvailableQty(), priceDiscounted);
|
||||
BigDecimal taxTotal = exTaxTotal.multiply(taxRate);
|
||||
BigDecimal inTaxTotal = exTaxTotal.add(exTaxTotal.multiply(taxRate));
|
||||
|
||||
map.put("exTaxTotal", exTaxTotal);
|
||||
map.put("taxTotal", taxTotal);
|
||||
map.put("inTaxTotal", inTaxTotal);
|
||||
map.put("priceDiscounted", priceDiscounted);
|
||||
return map;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void setPurchaseOrderLinesPartner(
|
||||
List<PurchaseOrderLine> purchaseOrderLines, Partner partner) {
|
||||
for (PurchaseOrderLine purchaseOrderLine : purchaseOrderLines) {
|
||||
purchaseOrderLine.setSupplierPartner(partner);
|
||||
Beans.get(PurchaseOrderLineRepository.class).save(purchaseOrderLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,12 +36,11 @@ import com.axelor.apps.purchase.db.repo.PurchaseRequestRepository;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderLineService;
|
||||
import com.axelor.apps.purchase.service.app.AppPurchaseService;
|
||||
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.PurchaseOrderServiceSupplychainImpl;
|
||||
import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository;
|
||||
import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine;
|
||||
import com.axelor.auth.AuthUtils;
|
||||
import com.axelor.db.JPA;
|
||||
import com.axelor.dms.db.DMSFile;
|
||||
import com.axelor.dms.db.repo.DMSFileRepository;
|
||||
import com.axelor.exception.AxelorException;
|
||||
@@ -49,22 +48,19 @@ import com.axelor.exception.db.repo.TraceBackRepository;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.db.MetaAttachment;
|
||||
import com.axelor.meta.db.MetaFile;
|
||||
import com.axelor.meta.db.repo.MetaAttachmentRepository;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collector;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.persistence.Query;
|
||||
|
||||
public class PurchaseOrderSupplierService {
|
||||
|
||||
@@ -147,72 +143,101 @@ public class PurchaseOrderSupplierService {
|
||||
Map<Partner, List<PurchaseOrderLine>> purchaseOrderLinesBySupplierPartner =
|
||||
this.splitBySupplierPartner(purchaseOrder.getPurchaseOrderLineList());
|
||||
|
||||
// remove link purchase order purchase request
|
||||
PurchaseRequest purchaseRequest = Beans.get(PurchaseRequestRepository.class).find(purchaseOrder.getPurchaseRequestOrigin().getId());
|
||||
// remove link purchase order purchase request
|
||||
PurchaseRequest purchaseRequest =
|
||||
Beans.get(PurchaseRequestRepository.class)
|
||||
.find(purchaseOrder.getPurchaseRequestOrigin().getId());
|
||||
|
||||
Set<PurchaseOrder> po = purchaseRequest.getPurchaseOrderSet().stream().filter((t) -> t.getId() != purchaseOrder.getId()).collect(Collectors.toSet());
|
||||
Set<PurchaseOrder> po =
|
||||
purchaseRequest
|
||||
.getPurchaseOrderSet()
|
||||
.stream()
|
||||
.filter((t) -> t.getId() != purchaseOrder.getId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
purchaseRequest.getPurchaseOrderSet().removeIf((t) -> t.getId() == purchaseOrder.getId());
|
||||
|
||||
Set<PurchaseOrder> hash_Set = new HashSet<PurchaseOrder>();
|
||||
hash_Set.addAll(po);
|
||||
purchaseRequest.getPurchaseOrderSet().removeIf((t) -> t.getId() == purchaseOrder.getId());
|
||||
|
||||
Set<PurchaseOrder> hash_Set = new HashSet<PurchaseOrder>();
|
||||
hash_Set.addAll(po);
|
||||
for (Partner supplierPartner : purchaseOrderLinesBySupplierPartner.keySet()) {
|
||||
|
||||
PurchaseOrder PurchaseOrderNew = this.createPurchaseOrderSophal(
|
||||
supplierPartner, purchaseOrderLinesBySupplierPartner.get(supplierPartner), purchaseOrder);
|
||||
// sophal
|
||||
hash_Set.add(PurchaseOrderNew);
|
||||
PurchaseOrder PurchaseOrderNew =
|
||||
this.createPurchaseOrderSophal(
|
||||
supplierPartner,
|
||||
purchaseOrderLinesBySupplierPartner.get(supplierPartner),
|
||||
purchaseOrder);
|
||||
// sophal
|
||||
hash_Set.add(PurchaseOrderNew);
|
||||
|
||||
// start attachement heritage
|
||||
List<MetaAttachment> metaAttachments = metaAttachmentRepository.all().filter("self.objectId = ?1",purchaseOrder.getId()).fetch();
|
||||
List<DMSFile> dmsFiles = dmsFileRepository.all().filter("self.relatedId = ?1",purchaseOrder.getId()).fetch();
|
||||
|
||||
Long idRoot = dmsFileRepository.all().filter("self.relatedId = ?1 and relatedModel = ?2",(long) 0,purchaseOrder.getClass().getCanonicalName()).fetchOne().getId();
|
||||
// start attachement heritage
|
||||
List<MetaAttachment> metaAttachments =
|
||||
metaAttachmentRepository
|
||||
.all()
|
||||
.filter("self.objectId = ?1", purchaseOrder.getId())
|
||||
.fetch();
|
||||
List<DMSFile> dmsFiles =
|
||||
dmsFileRepository.all().filter("self.relatedId = ?1", purchaseOrder.getId()).fetch();
|
||||
|
||||
for (MetaAttachment metaAttach : metaAttachments) {
|
||||
MetaAttachment metaAttachment = new MetaAttachment();
|
||||
metaAttachment.setObjectId(PurchaseOrderNew.getId());
|
||||
metaAttachment.setObjectName(purchaseOrder.getClass().getCanonicalName());
|
||||
metaAttachment.setMetaFile(metaAttach.getMetaFile());
|
||||
metaAttachmentRepository.save(metaAttachment);
|
||||
}
|
||||
Long idRoot =
|
||||
dmsFileRepository
|
||||
.all()
|
||||
.filter(
|
||||
"self.relatedId = ?1 and relatedModel = ?2",
|
||||
(long) 0,
|
||||
purchaseOrder.getClass().getCanonicalName())
|
||||
.fetchOne()
|
||||
.getId();
|
||||
|
||||
for (MetaAttachment metaAttach : metaAttachments) {
|
||||
MetaAttachment metaAttachment = new MetaAttachment();
|
||||
metaAttachment.setObjectId(PurchaseOrderNew.getId());
|
||||
metaAttachment.setObjectName(purchaseOrder.getClass().getCanonicalName());
|
||||
metaAttachment.setMetaFile(metaAttach.getMetaFile());
|
||||
metaAttachmentRepository.save(metaAttachment);
|
||||
}
|
||||
|
||||
for (DMSFile dmsFile : dmsFiles) {
|
||||
if(dmsFile.getIsDirectory() == true){
|
||||
DMSFile dms = new DMSFile();
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setRelatedId(PurchaseOrderNew.getId());
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setIsDirectory(dmsFile.getIsDirectory());
|
||||
dms.setParent(dmsFileRepository.find(idRoot));
|
||||
dms.setRelatedModel(purchaseOrder.getClass().getCanonicalName());
|
||||
dmsFileRepository.save(dms);
|
||||
}
|
||||
}
|
||||
for (DMSFile dmsFile : dmsFiles) {
|
||||
if (dmsFile.getIsDirectory() == true) {
|
||||
DMSFile dms = new DMSFile();
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setRelatedId(PurchaseOrderNew.getId());
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setIsDirectory(dmsFile.getIsDirectory());
|
||||
dms.setParent(dmsFileRepository.find(idRoot));
|
||||
dms.setRelatedModel(purchaseOrder.getClass().getCanonicalName());
|
||||
dmsFileRepository.save(dms);
|
||||
}
|
||||
}
|
||||
|
||||
for (DMSFile dmsFile : dmsFiles) {
|
||||
if(dmsFile.getIsDirectory() != true){
|
||||
DMSFile dmsParent = dmsFileRepository.all().filter("self.relatedId = ?1 and self.isDirectory = true",PurchaseOrderNew.getId()).fetchOne();
|
||||
DMSFile dms = new DMSFile();
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setRelatedId(PurchaseOrderNew.getId());
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setMetaFile(dmsFile.getMetaFile());
|
||||
dms.setIsDirectory(dmsFile.getIsDirectory());
|
||||
dms.setRelatedModel(purchaseOrder.getClass().getCanonicalName());
|
||||
dms.setParent(dmsParent);
|
||||
for (DMSFile dmsFile : dmsFiles) {
|
||||
if (dmsFile.getIsDirectory() != true) {
|
||||
DMSFile dmsParent =
|
||||
dmsFileRepository
|
||||
.all()
|
||||
.filter(
|
||||
"self.relatedId = ?1 and self.isDirectory = true", PurchaseOrderNew.getId())
|
||||
.fetchOne();
|
||||
DMSFile dms = new DMSFile();
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setRelatedId(PurchaseOrderNew.getId());
|
||||
dms.setFileName(dmsFile.getFileName());
|
||||
dms.setMetaFile(dmsFile.getMetaFile());
|
||||
dms.setIsDirectory(dmsFile.getIsDirectory());
|
||||
dms.setRelatedModel(purchaseOrder.getClass().getCanonicalName());
|
||||
dms.setParent(dmsParent);
|
||||
|
||||
dmsFileRepository.save(dms);
|
||||
}
|
||||
}
|
||||
//PurchaseOrderNew.setStatusSelect(0);//Approuve
|
||||
createPurchaseOrderSupplierLineTCO(PurchaseOrderNew.getPurchaseOrderLineList() ,purchaseOrderLinesBySupplierPartner.get(supplierPartner));
|
||||
dmsFileRepository.save(dms);
|
||||
}
|
||||
}
|
||||
// PurchaseOrderNew.setStatusSelect(0);//Approuve
|
||||
createPurchaseOrderSupplierLineTCO(
|
||||
PurchaseOrderNew.getPurchaseOrderLineList(),
|
||||
purchaseOrderLinesBySupplierPartner.get(supplierPartner));
|
||||
}
|
||||
|
||||
|
||||
purchaseRequest.setPurchaseOrderSet(hash_Set);
|
||||
purchaseRequestRepo.save(purchaseRequest);
|
||||
purchaseOrder.setArchived(true);
|
||||
purchaseOrder.setArchived(true);
|
||||
poRepo.save(purchaseOrder);
|
||||
}
|
||||
|
||||
@@ -265,6 +290,7 @@ public class PurchaseOrderSupplierService {
|
||||
null,
|
||||
parentPurchaseOrder.getPurchaseOrderSeq(),
|
||||
parentPurchaseOrder.getExternalReference(),
|
||||
"",
|
||||
Beans.get(StockLocationService.class)
|
||||
.getDefaultReceiptStockLocation(parentPurchaseOrder.getCompany()),
|
||||
Beans.get(AppBaseService.class).getTodayDate(),
|
||||
@@ -304,8 +330,7 @@ public class PurchaseOrderSupplierService {
|
||||
purchaseOrderLine.getQty(),
|
||||
purchaseOrderLine.getUnit());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
public PurchaseOrder createPurchaseOrderSophal(
|
||||
Partner supplierPartner,
|
||||
@@ -327,6 +352,7 @@ public class PurchaseOrderSupplierService {
|
||||
null,
|
||||
parentPurchaseOrder.getPurchaseOrderSeq(),
|
||||
parentPurchaseOrder.getExternalReference(),
|
||||
"",
|
||||
Beans.get(StockLocationService.class)
|
||||
.getDefaultReceiptStockLocation(parentPurchaseOrder.getCompany()),
|
||||
Beans.get(AppBaseService.class).getTodayDate(),
|
||||
@@ -339,17 +365,16 @@ public class PurchaseOrderSupplierService {
|
||||
|
||||
for (PurchaseOrderLine purchaseOrderLine : purchaseOrderLineList) {
|
||||
|
||||
// purchaseOrder.addPurchaseOrderLineListItem(
|
||||
// this.createPurchaseOrderLine(purchaseOrder, purchaseOrderLine));
|
||||
// purchaseOrder.addPurchaseOrderLineListItem(
|
||||
// this.createPurchaseOrderLine(purchaseOrder, purchaseOrderLine));
|
||||
purchaseOrder.addPurchaseOrderLineListItem(
|
||||
this.createPurchaseOrderLineSophal(purchaseOrder, purchaseOrderLine));
|
||||
|
||||
this.createPurchaseOrderLineSophal(purchaseOrder, purchaseOrderLine));
|
||||
}
|
||||
|
||||
purchaseOrderServiceSupplychainImpl.computePurchaseOrder(purchaseOrder);
|
||||
|
||||
//purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED);
|
||||
purchaseOrder.setStatusSelect(parentPurchaseOrder.getStatusSelect());
|
||||
// purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED);
|
||||
purchaseOrder.setStatusSelect(parentPurchaseOrder.getStatusSelect());
|
||||
purchaseOrder.setReceiptState(PurchaseOrderRepository.STATE_NOT_RECEIVED);
|
||||
purchaseOrder.setPurchaseRequestOrigin(parentPurchaseOrder.getPurchaseRequestOrigin());
|
||||
purchaseOrder.setPurchaseType(parentPurchaseOrder.getPurchaseType());
|
||||
@@ -358,83 +383,82 @@ public class PurchaseOrderSupplierService {
|
||||
purchaseOrder.setDeliveryPartner(parentPurchaseOrder.getSupplierPartner());
|
||||
purchaseOrder.setPayerPartner(parentPurchaseOrder.getSupplierPartner());
|
||||
// copy description from parent po
|
||||
purchaseOrder.setNotes(parentPurchaseOrder.getNotes());;
|
||||
purchaseOrder.setNotes(parentPurchaseOrder.getNotes());
|
||||
;
|
||||
poRepo.save(purchaseOrder);
|
||||
|
||||
|
||||
return purchaseOrder;
|
||||
}
|
||||
|
||||
|
||||
public PurchaseOrderLine createPurchaseOrderLineSophal(
|
||||
PurchaseOrder purchaseOrder, PurchaseOrderLine purchaseOrderLine) throws AxelorException {
|
||||
|
||||
|
||||
LOG.debug(
|
||||
"SOPHAL Création d'une ligne de commande fournisseur pour le produit : {}",
|
||||
new Object[] {purchaseOrderLine.getProductName()});
|
||||
|
||||
PurchaseOrderLine PurchaseOrderLineNew = purchaseOrderLineService.createPurchaseOrderLine(
|
||||
purchaseOrder,
|
||||
purchaseOrderLine.getProduct(),
|
||||
purchaseOrderLine.getProductName(),
|
||||
purchaseOrderLine.getDescription(),
|
||||
purchaseOrderLine.getQty(),
|
||||
purchaseOrderLine.getUnit());
|
||||
|
||||
PurchaseOrderLine PurchaseOrderLineNew =
|
||||
purchaseOrderLineService.createPurchaseOrderLine(
|
||||
purchaseOrder,
|
||||
purchaseOrderLine.getProduct(),
|
||||
purchaseOrderLine.getProductName(),
|
||||
purchaseOrderLine.getDescription(),
|
||||
purchaseOrderLine.getQty(),
|
||||
purchaseOrderLine.getUnit());
|
||||
|
||||
PurchaseOrderLineNew.setPrice(purchaseOrderLine.getPrice());
|
||||
PurchaseOrderLineNew.setInTaxPrice(purchaseOrderLine.getInTaxPrice());
|
||||
PurchaseOrderLineNew.setPriceDiscounted(purchaseOrderLine.getPriceDiscounted());
|
||||
PurchaseOrderLineNew.setExTaxTotal(purchaseOrderLine.getExTaxTotal());
|
||||
PurchaseOrderLineNew.setInTaxTotal(purchaseOrderLine.getInTaxTotal());
|
||||
PurchaseOrderLineNew.setDiscountAmount(purchaseOrderLine.getDiscountAmount());
|
||||
PurchaseOrderLineNew.setDiscountTypeSelect(purchaseOrderLine.getDiscountTypeSelect());
|
||||
PurchaseOrderLineNew.setSupplierPartner(purchaseOrderLine.getSupplierPartner());
|
||||
// set taxline to children
|
||||
PurchaseOrderLineNew.setTaxLine(purchaseOrderLine.getTaxLine());
|
||||
PurchaseOrderLineNew.setPrice(purchaseOrderLine.getPrice());
|
||||
PurchaseOrderLineNew.setInTaxPrice(purchaseOrderLine.getInTaxPrice());
|
||||
PurchaseOrderLineNew.setPriceDiscounted(purchaseOrderLine.getPriceDiscounted());
|
||||
PurchaseOrderLineNew.setExTaxTotal(purchaseOrderLine.getExTaxTotal());
|
||||
PurchaseOrderLineNew.setInTaxTotal(purchaseOrderLine.getInTaxTotal());
|
||||
PurchaseOrderLineNew.setDiscountAmount(purchaseOrderLine.getDiscountAmount());
|
||||
PurchaseOrderLineNew.setDiscountTypeSelect(purchaseOrderLine.getDiscountTypeSelect());
|
||||
PurchaseOrderLineNew.setSupplierPartner(purchaseOrderLine.getSupplierPartner());
|
||||
// set taxline to children
|
||||
PurchaseOrderLineNew.setTaxLine(purchaseOrderLine.getTaxLine());
|
||||
|
||||
return PurchaseOrderLineNew ;
|
||||
return PurchaseOrderLineNew;
|
||||
}
|
||||
|
||||
|
||||
public void createPurchaseOrderSupplierLineTCO(
|
||||
List<PurchaseOrderLine> purchaseOrderLN, List<PurchaseOrderLine> purchaseOrderLP) throws AxelorException {
|
||||
|
||||
int index=0;
|
||||
List<PurchaseOrderLine> purchaseOrderLineNew = purchaseOrderLN;
|
||||
for (PurchaseOrderLine purchaseOrderLineParnet : purchaseOrderLP) {
|
||||
|
||||
List<PurchaseOrderSupplierLine> PurchaseOrderSupplierLineParnetList =
|
||||
List<PurchaseOrderLine> purchaseOrderLN, List<PurchaseOrderLine> purchaseOrderLP)
|
||||
throws AxelorException {
|
||||
|
||||
int index = 0;
|
||||
List<PurchaseOrderLine> purchaseOrderLineNew = purchaseOrderLN;
|
||||
for (PurchaseOrderLine purchaseOrderLineParnet : purchaseOrderLP) {
|
||||
|
||||
List<PurchaseOrderSupplierLine> PurchaseOrderSupplierLineParnetList =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.all()
|
||||
.filter("self.purchaseOrderLine =?1 ", purchaseOrderLineParnet.getId())
|
||||
.fetch();
|
||||
|
||||
for (PurchaseOrderSupplierLine poLineSupplierParnet : PurchaseOrderSupplierLineParnetList) {
|
||||
|
||||
PurchaseOrderSupplierLine po = new PurchaseOrderSupplierLine();
|
||||
po.setPrice(poLineSupplierParnet.getPrice());
|
||||
po.setExTaxTotal(poLineSupplierParnet.getExTaxTotal());
|
||||
po.setInTaxTotal(poLineSupplierParnet.getInTaxTotal());
|
||||
po.setTaxTotal(poLineSupplierParnet.getTaxTotal());
|
||||
po.setAvailableQty(poLineSupplierParnet.getAvailableQty());
|
||||
po.setPurchaseOrderLine(purchaseOrderLineNew.get(index));
|
||||
po.setStateSelect(poLineSupplierParnet.getStateSelect());
|
||||
po.setTaxLine(poLineSupplierParnet.getTaxLine());
|
||||
po.setSupplierPartner(poLineSupplierParnet.getSupplierPartner());
|
||||
po.setComments(poLineSupplierParnet.getComments());
|
||||
po.setArchived(poLineSupplierParnet.getArchived());
|
||||
po.setEstimatedDelivDate(poLineSupplierParnet.getEstimatedDelivDate());
|
||||
po.setAcceptanceDate(poLineSupplierParnet.getAcceptanceDate());
|
||||
po.setAcceptedByUser(poLineSupplierParnet.getAcceptedByUser());
|
||||
po.setRefusalDate(poLineSupplierParnet.getRefusalDate());
|
||||
po.setRefusedByUser(poLineSupplierParnet.getRefusedByUser());
|
||||
po.setAttrs(poLineSupplierParnet.getAttrs());
|
||||
po.setCurrency(poLineSupplierParnet.getCurrency());
|
||||
//LOG.debug("purchaseOrderLineNew.getId(): {}",purchaseOrderLineNew.get(index).getId());
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class).save(po);
|
||||
|
||||
}
|
||||
index++;
|
||||
|
||||
for (PurchaseOrderSupplierLine poLineSupplierParnet : PurchaseOrderSupplierLineParnetList) {
|
||||
|
||||
PurchaseOrderSupplierLine po = new PurchaseOrderSupplierLine();
|
||||
po.setPrice(poLineSupplierParnet.getPrice());
|
||||
po.setExTaxTotal(poLineSupplierParnet.getExTaxTotal());
|
||||
po.setInTaxTotal(poLineSupplierParnet.getInTaxTotal());
|
||||
po.setTaxTotal(poLineSupplierParnet.getTaxTotal());
|
||||
po.setAvailableQty(poLineSupplierParnet.getAvailableQty());
|
||||
po.setPurchaseOrderLine(purchaseOrderLineNew.get(index));
|
||||
po.setStateSelect(poLineSupplierParnet.getStateSelect());
|
||||
po.setTaxLine(poLineSupplierParnet.getTaxLine());
|
||||
po.setSupplierPartner(poLineSupplierParnet.getSupplierPartner());
|
||||
po.setComments(poLineSupplierParnet.getComments());
|
||||
po.setArchived(poLineSupplierParnet.getArchived());
|
||||
po.setEstimatedDelivDate(poLineSupplierParnet.getEstimatedDelivDate());
|
||||
po.setAcceptanceDate(poLineSupplierParnet.getAcceptanceDate());
|
||||
po.setAcceptedByUser(poLineSupplierParnet.getAcceptedByUser());
|
||||
po.setRefusalDate(poLineSupplierParnet.getRefusalDate());
|
||||
po.setRefusedByUser(poLineSupplierParnet.getRefusedByUser());
|
||||
po.setAttrs(poLineSupplierParnet.getAttrs());
|
||||
po.setCurrency(poLineSupplierParnet.getCurrency());
|
||||
// LOG.debug("purchaseOrderLineNew.getId(): {}",purchaseOrderLineNew.get(index).getId());
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class).save(po);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,16 +17,25 @@
|
||||
*/
|
||||
package com.axelor.apps.suppliermanagement.web;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.base.db.repo.PartnerRepository;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrder;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrderLine;
|
||||
import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository;
|
||||
import com.axelor.apps.purchase.db.repo.PurchaseOrderRepository;
|
||||
import com.axelor.apps.suppliermanagement.exceptions.IExceptionMessage;
|
||||
import com.axelor.apps.suppliermanagement.service.PurchaseOrderSupplierLineService;
|
||||
import com.axelor.apps.suppliermanagement.service.PurchaseOrderSupplierService;
|
||||
import com.axelor.db.mapper.Mapper;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.rpc.ActionRequest;
|
||||
import com.axelor.rpc.ActionResponse;
|
||||
import com.google.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
@Singleton
|
||||
@@ -35,24 +44,26 @@ public class PurchaseOrderController {
|
||||
public void generateSuppliersPurchaseOrder(ActionRequest request, ActionResponse response) {
|
||||
|
||||
PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class);
|
||||
List<PurchaseOrder> purchaseOrders = Beans.get(PurchaseOrderRepository.class).all()
|
||||
.filter("self.parentPurchaseOrder = ?1 ", purchaseOrder.getId())
|
||||
.fetch();
|
||||
|
||||
if(purchaseOrders.size() < 1){
|
||||
try {
|
||||
Beans.get(PurchaseOrderSupplierService.class)
|
||||
.generateSuppliersPurchaseOrder(
|
||||
Beans.get(PurchaseOrderRepository.class).find(purchaseOrder.getId()));
|
||||
response.setFlash(I18n.get(IExceptionMessage.PURCHASE_ORDER_1));
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
List<PurchaseOrder> purchaseOrders =
|
||||
Beans.get(PurchaseOrderRepository.class)
|
||||
.all()
|
||||
.filter("self.parentPurchaseOrder = ?1 ", purchaseOrder.getId())
|
||||
.fetch();
|
||||
|
||||
if (purchaseOrders.size() < 1) {
|
||||
try {
|
||||
Beans.get(PurchaseOrderSupplierService.class)
|
||||
.generateSuppliersPurchaseOrder(
|
||||
Beans.get(PurchaseOrderRepository.class).find(purchaseOrder.getId()));
|
||||
response.setFlash(I18n.get(IExceptionMessage.PURCHASE_ORDER_1));
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
} else {
|
||||
response.setFlash("Vous avez deja genere les commandes fournisseurs associees");
|
||||
}
|
||||
}else{
|
||||
response.setFlash("Vous avez deja genere les commandes fournisseurs associees");
|
||||
}
|
||||
}
|
||||
|
||||
public void generateSuppliersRequests(ActionRequest request, ActionResponse response) {
|
||||
|
||||
@@ -68,4 +79,50 @@ public class PurchaseOrderController {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
// sophal
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public void setPurchaseOrderLinesPartner(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
List<HashMap> selectedPurchaseOrderLineMapList =
|
||||
(List<HashMap>) request.getContext().get("purchaseOrderLineList");
|
||||
if (selectedPurchaseOrderLineMapList == null) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.PURCHASE_ORDER_1));
|
||||
return;
|
||||
}
|
||||
|
||||
List<PurchaseOrderLine> purchaseOrderLineList = new ArrayList<>();
|
||||
PurchaseOrderLineRepository purchaseOrderLineRepo =
|
||||
Beans.get(PurchaseOrderLineRepository.class);
|
||||
for (HashMap map : selectedPurchaseOrderLineMapList) {
|
||||
PurchaseOrderLine purchaseOrderLine =
|
||||
(PurchaseOrderLine) Mapper.toBean(PurchaseOrderLine.class, map);
|
||||
purchaseOrderLineList.add(purchaseOrderLineRepo.find(purchaseOrderLine.getId()));
|
||||
}
|
||||
|
||||
if (purchaseOrderLineList.isEmpty()) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.PURCHASE_ORDER_2));
|
||||
return;
|
||||
}
|
||||
|
||||
Long partnerId = 0L;
|
||||
|
||||
LinkedHashMap<String, Object> partnerHashMap =
|
||||
(LinkedHashMap<String, Object>) request.getContext().get("partner");
|
||||
if (partnerHashMap != null) {
|
||||
partnerId = Long.valueOf(partnerHashMap.get("id").toString());
|
||||
}
|
||||
Partner partner = Beans.get(PartnerRepository.class).find(partnerId);
|
||||
if (partner == null) {
|
||||
response.setFlash("No partners");
|
||||
return;
|
||||
}
|
||||
|
||||
Beans.get(PurchaseOrderSupplierLineService.class)
|
||||
.setPurchaseOrderLinesPartner(purchaseOrderLineList, partner);
|
||||
response.setCanClose(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,35 +23,33 @@ import com.axelor.apps.base.service.BlockingService;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrder;
|
||||
import com.axelor.apps.purchase.db.PurchaseOrderLine;
|
||||
import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderService;
|
||||
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.suppliermanagement.service.PurchaseOrderSupplierService;
|
||||
import com.axelor.apps.purchase.service.PurchaseOrderService;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.schema.actions.ActionView;
|
||||
import com.axelor.rpc.ActionRequest;
|
||||
import com.axelor.rpc.ActionResponse;
|
||||
import com.axelor.rpc.Context;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import com.axelor.meta.schema.actions.ActionView;
|
||||
import java.math.BigDecimal;
|
||||
import com.axelor.exception.AxelorException;
|
||||
|
||||
|
||||
@Singleton
|
||||
public class PurchaseOrderSupplierLineController {
|
||||
|
||||
public void showPurchaseOrder(ActionRequest request, ActionResponse response) {
|
||||
PurchaseOrderSupplierLine purchaseOrderSupplierLine = Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
|
||||
PurchaseOrder purchaseOrder = purchaseOrderSupplierLine.getPurchaseOrderLine().getPurchaseOrder();
|
||||
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
|
||||
PurchaseOrder purchaseOrder =
|
||||
purchaseOrderSupplierLine.getPurchaseOrderLine().getPurchaseOrder();
|
||||
response.setView(
|
||||
ActionView.define("Devis fournisseur")
|
||||
.model(PurchaseOrder.class.getName())
|
||||
@@ -59,7 +57,7 @@ public class PurchaseOrderSupplierLineController {
|
||||
.param("show-toolbar", "false")
|
||||
.param("show-confirm", "false")
|
||||
.param("popup-save", "false")
|
||||
.param("show-toolbar","true")
|
||||
.param("show-toolbar", "true")
|
||||
.param("popup", "true")
|
||||
.context("_showRecord", String.valueOf(purchaseOrder.getId()))
|
||||
.map());
|
||||
@@ -78,14 +76,14 @@ public class PurchaseOrderSupplierLineController {
|
||||
.find(request.getContext().getParent().asType(PurchaseOrderLine.class).getId()));
|
||||
}
|
||||
|
||||
// sophal refresh purchase order price
|
||||
PurchaseOrder order = purchaseOrderSupplierLine.getPurchaseOrderLine().getPurchaseOrder();
|
||||
// sophal refresh purchase order price
|
||||
PurchaseOrder order = purchaseOrderSupplierLine.getPurchaseOrderLine().getPurchaseOrder();
|
||||
|
||||
try {
|
||||
Beans.get(PurchaseOrderSupplierLineService.class).accept(purchaseOrderSupplierLine);
|
||||
// sophal refresh purchase order price
|
||||
Beans.get(PurchaseOrderService.class).computePurchaseOrder(order);
|
||||
Beans.get(PurchaseOrderService.class).updateCostPrice(order);
|
||||
// sophal refresh purchase order price
|
||||
Beans.get(PurchaseOrderService.class).computePurchaseOrder(order);
|
||||
Beans.get(PurchaseOrderService.class).updateCostPrice(order);
|
||||
// response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
@@ -93,7 +91,7 @@ public class PurchaseOrderSupplierLineController {
|
||||
}
|
||||
|
||||
public void refuse(ActionRequest request, ActionResponse response) {
|
||||
|
||||
|
||||
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class)
|
||||
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
|
||||
@@ -103,7 +101,108 @@ public class PurchaseOrderSupplierLineController {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void massPutStandBy(ActionRequest request, ActionResponse response) {
|
||||
|
||||
List<Long> requestIds = (List<Long>) request.getContext().get("_ids");
|
||||
System.out.println("****************");
|
||||
System.out.println(requestIds);
|
||||
System.out.println("****************");
|
||||
String raison = (String) request.getContext().get("standbyRaison");
|
||||
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!requestIds.isEmpty()) {
|
||||
Beans.get(PurchaseOrderSupplierLineService.class).massPutStandBy(requestIds, raison);
|
||||
response.setReload(true);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void putStandBy(ActionRequest request, ActionResponse response) {
|
||||
|
||||
System.out.println(String.valueOf(request.getContext().get("_id")));
|
||||
Long id = new Long(String.valueOf(request.getContext().get("_id")));
|
||||
String raison = (String) request.getContext().get("standbyRaison");
|
||||
|
||||
try {
|
||||
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
|
||||
Beans.get(PurchaseOrderSupplierLineRepository.class).find(id);
|
||||
Beans.get(PurchaseOrderSupplierLineService.class)
|
||||
.putStandBy(purchaseOrderSupplierLine, raison);
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void massAccept(ActionRequest request, ActionResponse response) {
|
||||
|
||||
List<Long> requestIds = (List<Long>) request.getContext().get("_ids");
|
||||
System.out.println("*************************");
|
||||
System.out.println(requestIds);
|
||||
System.out.println("*************************");
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!requestIds.isEmpty()) {
|
||||
Beans.get(PurchaseOrderSupplierLineService.class).massAccept(requestIds);
|
||||
response.setReload(true);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void massApprove(ActionRequest request, ActionResponse response) {
|
||||
|
||||
List<Long> requestIds = (List<Long>) request.getContext().get("_ids");
|
||||
System.out.println("*************************");
|
||||
System.out.println(requestIds);
|
||||
System.out.println("*************************");
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!requestIds.isEmpty()) {
|
||||
Beans.get(PurchaseOrderSupplierLineService.class).massApprove(requestIds);
|
||||
response.setReload(true);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void massRefuse(ActionRequest request, ActionResponse response) {
|
||||
|
||||
List<Long> requestIds = (List<Long>) request.getContext().get("_ids");
|
||||
System.out.println("*************************");
|
||||
System.out.println(requestIds);
|
||||
System.out.println("*************************");
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
if (!requestIds.isEmpty()) {
|
||||
Beans.get(PurchaseOrderSupplierLineService.class).massRefuse(requestIds);
|
||||
response.setReload(true);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on supplier partner select. Set the domain for the field supplierPartner
|
||||
*
|
||||
@@ -158,39 +257,34 @@ public class PurchaseOrderSupplierLineController {
|
||||
|
||||
response.setAttr("supplierPartner", "domain", domain);
|
||||
}
|
||||
|
||||
|
||||
public void splitPurchaseOrderLinesInto2(ActionRequest request, ActionResponse response){
|
||||
|
||||
public void splitPurchaseOrderLinesInto2(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
Long Id = (Long) request.getContext().get("id");
|
||||
PurchaseOrderLineRepository purchaseOrderLineRepository = Beans.get(PurchaseOrderLineRepository.class);
|
||||
PurchaseOrderLine purchaseOrderLine = purchaseOrderLineRepository.find(Id);
|
||||
PurchaseOrder purchaseOrder = purchaseOrderLine.getPurchaseOrder();
|
||||
|
||||
BigDecimal splitQty = new BigDecimal(request.getContext().get("splitQty").toString());
|
||||
|
||||
Beans.get(PurchaseOrderSupplierLineService.class)
|
||||
.splitPurchaseOrderLinesSpecialInto2(purchaseOrder, purchaseOrderLine, splitQty);
|
||||
Long Id = (Long) request.getContext().get("id");
|
||||
PurchaseOrderLineRepository purchaseOrderLineRepository =
|
||||
Beans.get(PurchaseOrderLineRepository.class);
|
||||
PurchaseOrderLine purchaseOrderLine = purchaseOrderLineRepository.find(Id);
|
||||
PurchaseOrder purchaseOrder = purchaseOrderLine.getPurchaseOrder();
|
||||
|
||||
BigDecimal splitQty = new BigDecimal(request.getContext().get("splitQty").toString());
|
||||
|
||||
Beans.get(PurchaseOrderSupplierLineService.class)
|
||||
.splitPurchaseOrderLinesSpecialInto2(purchaseOrder, purchaseOrderLine, splitQty);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void compute(ActionRequest request, ActionResponse response) {
|
||||
|
||||
|
||||
try {
|
||||
Context context = request.getContext();
|
||||
PurchaseOrderSupplierLine line = context.asType(PurchaseOrderSupplierLine.class);
|
||||
|
||||
Map<String, BigDecimal> map = Beans.get(PurchaseOrderSupplierLineService.class).compute(line);
|
||||
response.setValues(map);
|
||||
|
||||
response.setValues(map);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,7 +37,19 @@
|
||||
<many-to-one name="refusedByUser" ref="com.axelor.auth.db.User" readonly="true" title="Refused by"/>
|
||||
<date name="refusalDate" title="refusal date" readonly="true"/>
|
||||
|
||||
<many-to-one name="standbyByUser" ref="com.axelor.auth.db.User" readonly="true" title="Standby by"/>
|
||||
<date name="standbyDate" title="Standby date" readonly="true"/>
|
||||
|
||||
<many-to-one name="approvedByUser" ref="com.axelor.auth.db.User" readonly="true" title="Approved by"/>
|
||||
<date name="approvalDate" title="Approval date" readonly="true"/>
|
||||
|
||||
<decimal name="discountAmount" title="Discount amount" precision="20" scale="10"/>
|
||||
<integer name="discountTypeSelect" title="Discount Type" selection="base.price.list.line.amount.type.select" default="0" />
|
||||
<decimal name="priceDiscounted" title="Unit price discounted" precision="20" scale="10"/>
|
||||
|
||||
<!-- sophal -->
|
||||
<string name="rejectionRaison" title="Rejection Raison" large="true"/>
|
||||
<string name="standbyRaison" title="Standby Raison" large="true"/>
|
||||
|
||||
<extra-code><![CDATA[
|
||||
|
||||
@@ -47,6 +59,8 @@
|
||||
public static final int STATE_ACCEPTED = 3;
|
||||
public static final int STATE_NOT_ACCEPTED = 4;
|
||||
public static final int STATE_CANCELED = 5;
|
||||
public static final int STATE_STANDBY = 6;
|
||||
public static final int STATE_APPROVED = 7;
|
||||
]]>
|
||||
</extra-code>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user