First commit waiting for Budget Alert

This commit is contained in:
2025-09-04 13:37:35 +01:00
commit 2d681f27f5
4563 changed files with 1061534 additions and 0 deletions

View File

@ -0,0 +1,16 @@
apply plugin: "com.axelor.app-module"
apply from: "../version.gradle"
apply {
version = openSuiteVersion
}
axelor {
title "Axelor Supplier Management"
description "Axelor Supplier Management Module"
}
dependencies {
compile project(":modules:axelor-supplychain")
}

View File

@ -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);
}
}

View File

@ -0,0 +1,30 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.suppliermanagement.exceptions;
public interface IExceptionMessage {
/** Purchase order supplier line service */
static final String CURRENCY_CONVERSION_2 = /*$$(*/
"WARNING : To Date must be after or equals to From Date" /*)*/;
/** Purchase order Controller */
static final String PURCHASE_ORDER_1 = /*$$(*/ "Supplier's consulting's request created" /*)*/;
static final String PURCHASE_ORDER_2 = /*$$(*/ "Suppliers orders' generation over" /*)*/;
}

View File

@ -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);
}
}

View File

@ -0,0 +1,384 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.suppliermanagement.service;
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.apps.supplychain.service.PurchaseOrderLineServiceSupplychainImpl;
import com.axelor.auth.AuthUtils;
import com.axelor.exception.AxelorException;
import com.axelor.exception.db.repo.TraceBackRepository;
import com.axelor.i18n.I18n;
import com.axelor.inject.Beans;
import com.google.inject.Inject;
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 {
@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 {
PurchaseOrderLine purchaseOrderLine = purchaseOrderSupplierLine.getPurchaseOrderLine();
purchaseOrderLine.setEstimatedDelivDate(purchaseOrderSupplierLine.getEstimatedDelivDate());
Partner supplierPartner = purchaseOrderSupplierLine.getSupplierPartner();
Company company = purchaseOrderLine.getPurchaseOrder().getCompany();
if (Beans.get(BlockingService.class)
.getBlocking(supplierPartner, company, BlockingRepository.PURCHASE_BLOCKING)
!= null) {
throw new AxelorException(
TraceBackRepository.TYPE_FUNCTIONNAL,
I18n.get(IExceptionMessage.SUPPLIER_BLOCKED),
supplierPartner);
}
purchaseOrderLine.setSupplierPartner(supplierPartner);
// set tax from tco
BigDecimal priceDiscounted = this.computeDiscount(purchaseOrderSupplierLine);
purchaseOrderLine.setQty(purchaseOrderSupplierLine.getAvailableQty());
purchaseOrderLine.setTaxLine(purchaseOrderSupplierLine.getTaxLine());
purchaseOrderLine.setPrice(purchaseOrderSupplierLine.getPrice());
purchaseOrderLine.setExTaxTotal(
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());
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);
}
@Transactional(rollbackOn = {Exception.class})
public void refuse(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException {
purchaseOrderSupplierLine.setStateSelect(
PurchaseOrderSupplierLineRepository.STATE_NOT_ACCEPTED);
// sophal add acceptedOn and By TCO
purchaseOrderSupplierLine.setRefusalDate(appPurchaseService.getTodayDate());
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();
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");
}
}
}
@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(
price, PurchaseOrderSupplierLineRepository.STATE_REQUESTED, supplierPartner);
}
@Transactional(rollbackOn = {Exception.class})
public void savePurchaseSupplierLine(PurchaseOrderSupplierLine purchaseOrderSupplierLine) {
poSupplierLineRepo.save(purchaseOrderSupplierLine);
}
@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);
purchaseOrderSupplierLine.setExTaxTotal(ExTaxTotal);
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);
;
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);
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;
}
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);
}
}
}

View File

@ -0,0 +1,454 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.suppliermanagement.service;
import com.axelor.apps.base.db.Blocking;
import com.axelor.apps.base.db.Company;
import com.axelor.apps.base.db.Partner;
import com.axelor.apps.base.db.Product;
import com.axelor.apps.base.db.repo.BlockingRepository;
import com.axelor.apps.base.db.repo.PriceListRepository;
import com.axelor.apps.base.service.BlockingService;
import com.axelor.apps.base.service.PartnerPriceListService;
import com.axelor.apps.base.service.app.AppBaseService;
import com.axelor.apps.purchase.db.PurchaseOrder;
import com.axelor.apps.purchase.db.PurchaseOrderLine;
import com.axelor.apps.purchase.db.PurchaseRequest;
import com.axelor.apps.purchase.db.SupplierCatalog;
import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository;
import com.axelor.apps.purchase.db.repo.PurchaseOrderRepository;
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.PurchaseOrderLineServiceSupplychainImpl;
import com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl;
import com.axelor.auth.AuthUtils;
import com.axelor.dms.db.DMSFile;
import com.axelor.dms.db.repo.DMSFileRepository;
import com.axelor.exception.AxelorException;
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.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;
public class PurchaseOrderSupplierService {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Inject private PurchaseOrderSupplierLineService purchaseOrderSupplierLineService;
@Inject private PurchaseOrderServiceSupplychainImpl purchaseOrderServiceSupplychainImpl;
@Inject private PurchaseOrderLineServiceSupplychainImpl purchaseOrderLineServiceSupplychainImpl;
@Inject protected PurchaseOrderRepository poRepo;
@Inject private PurchaseRequestRepository purchaseRequestRepo;
@Inject private MetaAttachmentRepository metaAttachmentRepository;
@Inject private DMSFileRepository dmsFileRepository;
@Transactional
public void generateAllSuppliersRequests(PurchaseOrder purchaseOrder) {
for (PurchaseOrderLine purchaseOrderLine : purchaseOrder.getPurchaseOrderLineList()) {
this.generateSuppliersRequests(purchaseOrderLine);
}
poRepo.save(purchaseOrder);
}
/**
* Generate supplier requests for one PurchaseOrderLine. Make sure to only call this function when
* you are sure the line passed as argument has a valid purchaseOrder. Else, use the
* generateSuppliersRequests(PurchaseOrderLine purchaseOrderLine, PurchaseOrder purchaseOrder)
* format below.
*
* @param purchaseOrderLine
*/
@Transactional
public void generateSuppliersRequests(PurchaseOrderLine purchaseOrderLine) {
this.generateSuppliersRequests(purchaseOrderLine, purchaseOrderLine.getPurchaseOrder());
}
@Transactional
public void generateSuppliersRequests(
PurchaseOrderLine purchaseOrderLine, PurchaseOrder purchaseOrder) {
if (purchaseOrder == null) {
return;
}
Product product = purchaseOrderLine.getProduct();
Company company = purchaseOrder.getCompany();
if (Beans.get(AppPurchaseService.class).getAppPurchase().getManageSupplierCatalog()
&& product != null
&& product.getSupplierCatalogList() != null) {
for (SupplierCatalog supplierCatalog : product.getSupplierCatalogList()) {
Partner supplierPartner = supplierCatalog.getSupplierPartner();
Blocking blocking =
Beans.get(BlockingService.class)
.getBlocking(supplierPartner, company, BlockingRepository.PURCHASE_BLOCKING);
if (blocking == null) {
purchaseOrderLine.addPurchaseOrderSupplierLineListItem(
purchaseOrderSupplierLineService.create(supplierPartner, supplierCatalog.getPrice()));
}
}
}
Beans.get(PurchaseOrderLineRepository.class).save(purchaseOrderLine);
}
@Transactional(rollbackOn = {Exception.class})
public void generateSuppliersPurchaseOrder(PurchaseOrder purchaseOrder) throws AxelorException {
if (purchaseOrder.getPurchaseOrderLineList() == null) {
return;
}
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());
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);
for (Partner supplierPartner : purchaseOrderLinesBySupplierPartner.keySet()) {
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();
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 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));
}
purchaseRequest.setPurchaseOrderSet(hash_Set);
purchaseRequestRepo.save(purchaseRequest);
purchaseOrder.setArchived(true);
poRepo.save(purchaseOrder);
}
public Map<Partner, List<PurchaseOrderLine>> splitBySupplierPartner(
List<PurchaseOrderLine> purchaseOrderLineList) throws AxelorException {
Map<Partner, List<PurchaseOrderLine>> purchaseOrderLinesBySupplierPartner = new HashMap<>();
for (PurchaseOrderLine purchaseOrderLine : purchaseOrderLineList) {
Partner supplierPartner = purchaseOrderLine.getSupplierPartner();
if (supplierPartner == null) {
throw new AxelorException(
purchaseOrderLine,
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
I18n.get(IExceptionMessage.SO_PURCHASE_1),
purchaseOrderLine.getProductName());
}
if (!purchaseOrderLinesBySupplierPartner.containsKey(supplierPartner)) {
purchaseOrderLinesBySupplierPartner.put(
supplierPartner, new ArrayList<PurchaseOrderLine>());
}
purchaseOrderLinesBySupplierPartner.get(supplierPartner).add(purchaseOrderLine);
}
return purchaseOrderLinesBySupplierPartner;
}
@Transactional(rollbackOn = {Exception.class})
public void createPurchaseOrder(
Partner supplierPartner,
List<PurchaseOrderLine> purchaseOrderLineList,
PurchaseOrder parentPurchaseOrder)
throws AxelorException {
LOG.debug(
"Création d'une commande fournisseur depuis le devis fournisseur : {} et le fournisseur : {}",
parentPurchaseOrder.getPurchaseOrderSeq(),
supplierPartner.getFullName());
PurchaseOrder purchaseOrder =
purchaseOrderServiceSupplychainImpl.createPurchaseOrder(
AuthUtils.getUser(),
parentPurchaseOrder.getCompany(),
null,
supplierPartner.getCurrency(),
null,
parentPurchaseOrder.getPurchaseOrderSeq(),
parentPurchaseOrder.getExternalReference(),
"",
Beans.get(StockLocationService.class)
.getDefaultReceiptStockLocation(parentPurchaseOrder.getCompany()),
Beans.get(AppBaseService.class).getTodayDate(),
Beans.get(PartnerPriceListService.class)
.getDefaultPriceList(supplierPartner, PriceListRepository.TYPE_PURCHASE),
supplierPartner,
parentPurchaseOrder.getTradingName());
purchaseOrder.setParentPurchaseOrder(parentPurchaseOrder);
for (PurchaseOrderLine purchaseOrderLine : purchaseOrderLineList) {
purchaseOrder.addPurchaseOrderLineListItem(
this.createPurchaseOrderLine(purchaseOrder, purchaseOrderLine));
}
purchaseOrderServiceSupplychainImpl.computePurchaseOrder(purchaseOrder);
purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED);
purchaseOrder.setReceiptState(PurchaseOrderRepository.STATE_NOT_RECEIVED);
poRepo.save(purchaseOrder);
}
public PurchaseOrderLine createPurchaseOrderLine(
PurchaseOrder purchaseOrder, PurchaseOrderLine purchaseOrderLine) throws AxelorException {
LOG.debug(
"Création d'une ligne de commande fournisseur pour le produit : {}",
new Object[] {purchaseOrderLine.getProductName()});
return purchaseOrderLineServiceSupplychainImpl.createPurchaseOrderLineFromSplit(purchaseOrderLine);
}
@Transactional(rollbackOn = {Exception.class})
public PurchaseOrder createPurchaseOrderSophal(
Partner supplierPartner,
List<PurchaseOrderLine> purchaseOrderLineList,
PurchaseOrder parentPurchaseOrder)
throws AxelorException {
LOG.debug(
"Création d'une commande fournisseur depuis le devis fournisseur : {} et le fournisseur : {}",
parentPurchaseOrder.getPurchaseOrderSeq(),
supplierPartner.getFullName());
PurchaseOrder purchaseOrder =
purchaseOrderServiceSupplychainImpl.createPurchaseOrder(
AuthUtils.getUser(),
parentPurchaseOrder.getCompany(),
null,
supplierPartner.getCurrency(),
null,
parentPurchaseOrder.getPurchaseOrderSeq(),
parentPurchaseOrder.getExternalReference(),
"",
Beans.get(StockLocationService.class)
.getDefaultReceiptStockLocation(parentPurchaseOrder.getCompany()),
Beans.get(AppBaseService.class).getTodayDate(),
Beans.get(PartnerPriceListService.class)
.getDefaultPriceList(supplierPartner, PriceListRepository.TYPE_PURCHASE),
supplierPartner,
parentPurchaseOrder.getTradingName());
purchaseOrder.setParentPurchaseOrder(parentPurchaseOrder);
for (PurchaseOrderLine purchaseOrderLine : purchaseOrderLineList) {
// purchaseOrder.addPurchaseOrderLineListItem(
// this.createPurchaseOrderLine(purchaseOrder, purchaseOrderLine));
purchaseOrder.addPurchaseOrderLineListItem(
this.createPurchaseOrderLineSophal(purchaseOrder, purchaseOrderLine));
}
purchaseOrderServiceSupplychainImpl.computePurchaseOrder(purchaseOrder);
// purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED);
purchaseOrder.setStatusSelect(parentPurchaseOrder.getStatusSelect());
purchaseOrder.setReceiptState(PurchaseOrderRepository.STATE_NOT_RECEIVED);
purchaseOrder.setPurchaseRequestOrigin(parentPurchaseOrder.getPurchaseRequestOrigin());
purchaseOrder.setPurchaseType(parentPurchaseOrder.getPurchaseType());
purchaseOrder.setStamp(parentPurchaseOrder.getStamp());
purchaseOrder.setFixTax(parentPurchaseOrder.getFixTax());
purchaseOrder.setDeliveryPartner(parentPurchaseOrder.getSupplierPartner());
purchaseOrder.setPayerPartner(parentPurchaseOrder.getSupplierPartner());
// copy description from parent po
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 =
purchaseOrderLineServiceSupplychainImpl.createPurchaseOrderLineFromSplit(purchaseOrderLine);
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;
}
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 =
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());
po.setPriceDiscounted(poLineSupplierParnet.getPriceDiscounted());
// LOG.debug("purchaseOrderLineNew.getId(): {}",purchaseOrderLineNew.get(index).getId());
Beans.get(PurchaseOrderSupplierLineRepository.class).save(po);
}
index++;
}
}
}

View File

@ -0,0 +1,128 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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
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);
}
} else {
response.setFlash("Vous avez deja genere les commandes fournisseurs associees");
}
}
public void generateSuppliersRequests(ActionRequest request, ActionResponse response) {
PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class);
try {
Beans.get(PurchaseOrderSupplierService.class)
.generateAllSuppliersRequests(
Beans.get(PurchaseOrderRepository.class).find(purchaseOrder.getId()));
response.setFlash(I18n.get(IExceptionMessage.PURCHASE_ORDER_2));
response.setReload(true);
} catch (Exception e) {
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);
}
}
}

View File

@ -0,0 +1,63 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.suppliermanagement.web;
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.suppliermanagement.service.PurchaseOrderSupplierService;
import com.axelor.exception.service.TraceBackService;
import com.axelor.inject.Beans;
import com.axelor.rpc.ActionRequest;
import com.axelor.rpc.ActionResponse;
import com.axelor.rpc.Context;
import com.google.inject.Singleton;
@Singleton
public class PurchaseOrderLineController {
public void generateSuppliersRequests(ActionRequest request, ActionResponse response) {
PurchaseOrderLine purchaseOrderLine =
Beans.get(PurchaseOrderLineRepository.class)
.find(request.getContext().asType(PurchaseOrderLine.class).getId());
try {
if (purchaseOrderLine.getPurchaseOrder() == null) {
PurchaseOrder purchaseOrder = request.getContext().getParent().asType(PurchaseOrder.class);
Beans.get(PurchaseOrderSupplierService.class)
.generateSuppliersRequests(purchaseOrderLine, purchaseOrder);
} else {
Beans.get(PurchaseOrderSupplierService.class).generateSuppliersRequests(purchaseOrderLine);
}
response.setReload(true);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
public void defaultValuesSuppliersRequests(ActionRequest request, ActionResponse response) {
try {
Context context = request.getContext().getParent();
response.setValue("availableQty", context.get("qty"));
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
}

View File

@ -0,0 +1,300 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.suppliermanagement.web;
import com.axelor.apps.base.db.Company;
import com.axelor.apps.base.db.repo.BlockingRepository;
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.supplychain.service.PurchaseOrderServiceSupplychainImpl;
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.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@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();
response.setView(
ActionView.define("Devis fournisseur")
.model(PurchaseOrder.class.getName())
.add("form", "purchase-order-form")
.param("show-toolbar", "false")
.param("show-confirm", "false")
.param("popup-save", "false")
.param("show-toolbar", "true")
.param("popup", "true")
.context("_showRecord", String.valueOf(purchaseOrder.getId()))
.map());
}
public void accept(ActionRequest request, ActionResponse response) {
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
Beans.get(PurchaseOrderSupplierLineRepository.class)
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
if (purchaseOrderSupplierLine.getPurchaseOrderLine() == null
&& request.getContext().getParent() != null) {
purchaseOrderSupplierLine.setPurchaseOrderLine(
Beans.get(PurchaseOrderLineRepository.class)
.find(request.getContext().getParent().asType(PurchaseOrderLine.class).getId()));
}
// 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);
// response.setReload(true);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
public void refuse(ActionRequest request, ActionResponse response) {
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
Beans.get(PurchaseOrderSupplierLineRepository.class)
.find(request.getContext().asType(PurchaseOrderSupplierLine.class).getId());
try {
Beans.get(PurchaseOrderSupplierLineService.class).refuse(purchaseOrderSupplierLine);
} catch (Exception e) {
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
*
* @param request
* @param response
*/
public void supplierPartnerDomain(ActionRequest request, ActionResponse response) {
PurchaseOrderSupplierLine purchaseOrderSupplierLine =
request.getContext().asType(PurchaseOrderSupplierLine.class);
PurchaseOrderLine purchaseOrderLine = purchaseOrderSupplierLine.getPurchaseOrderLine();
if (purchaseOrderLine == null) {
purchaseOrderLine = request.getContext().getParent().asType(PurchaseOrderLine.class);
}
PurchaseOrder purchaseOrder = purchaseOrderLine.getPurchaseOrder();
if (purchaseOrder == null) {
purchaseOrder = request.getContext().getParent().getParent().asType(PurchaseOrder.class);
}
Company company = purchaseOrder.getCompany();
String domain = "";
if (Beans.get(AppPurchaseService.class).getAppPurchase().getManageSupplierCatalog()
&& purchaseOrderLine.getProduct() != null
&& !purchaseOrderLine.getProduct().getSupplierCatalogList().isEmpty()) {
domain +=
"self.id != "
+ company.getPartner().getId()
+ " AND self.id IN "
+ purchaseOrderLine
.getProduct()
.getSupplierCatalogList()
.stream()
.map(s -> s.getSupplierPartner().getId())
.collect(Collectors.toList())
.toString()
.replace('[', '(')
.replace(']', ')');
String blockedPartnerQuery =
Beans.get(BlockingService.class)
.listOfBlockedPartner(company, BlockingRepository.PURCHASE_BLOCKING);
if (!Strings.isNullOrEmpty(blockedPartnerQuery)) {
domain += String.format(" AND self.id NOT in (%s)", blockedPartnerQuery);
}
} else {
domain += "self.id = 0";
}
domain += " AND " + company.getId() + " in (SELECT id FROM self.companySet)";
response.setAttr("supplierPartner", "domain", domain);
}
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);
} catch (Exception 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);
} catch (Exception e) {
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);
}
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
<input file="auth_permission.csv" separator=";" type="com.axelor.auth.db.Permission" search="self.name = :name" call="com.axelor.csv.script.ImportPermission:importPermissionToRole">
<bind to="canRead" eval="can_read == 'x' ? 'true' : 'false'"/>
<bind to="canWrite" eval="can_write == 'x' ? 'true' : 'false'"/>
<bind to="canCreate" eval="can_create == 'x' ? 'true' : 'false'"/>
<bind to="canRemove" eval="can_remove == 'x' ? 'true' : 'false'"/>
<bind to="canExport" eval="can_export == 'x' ? 'true' : 'false'"/>
</input>
<input file="meta_metaMenu.csv" separator=";" type="com.axelor.meta.db.MetaMenu" search="self.name = :name" update="true" />
</csv-inputs>

View File

@ -0,0 +1,2 @@
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
"perm.suppliermanagement.all";"com.axelor.apps.suppliermanagement.db.*";"x";"x";"x";"x";"x";;;"Admin"
1 name object can_read can_write can_create can_remove can_export condition conditionParams roleName
2 perm.suppliermanagement.all com.axelor.apps.suppliermanagement.db.* x x x x x Admin

View File

@ -0,0 +1,2 @@
"name";"roles.name"
"sc-root-purchase-order-supplier-lines-requests";"Admin"
1 name roles.name
2 sc-root-purchase-order-supplier-lines-requests Admin

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="base" package="com.axelor.apps.base.db"/>
<entity name="AppPurchase" lang="java" extends="App">
<boolean name="supplierRequestMgt" title="Manage supplier consultations"/>
<track>
<field name="supplierRequestMgt" on="UPDATE"/>
</track>
</entity>
</domain-models>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="purchase" package="com.axelor.apps.purchase.db"/>
<entity name="PurchaseOrder" lang="java">
<!-- Champ du module Supplier Management -->
<many-to-one name="parentPurchaseOrder" ref="com.axelor.apps.purchase.db.PurchaseOrder" title="Initial purchase order"/>
<boolean name="isPurchaseParent" title="Purchase order"/>
</entity>
</domain-models>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="purchase" package="com.axelor.apps.purchase.db"/>
<entity name="PurchaseOrderLine" lang="java">
<!-- Champ du module Supplier Management -->
<one-to-many name="purchaseOrderSupplierLineList" ref="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine" mappedBy="purchaseOrderLine" title="Suppliers requests"/>
<many-to-one name="supplierPartner" ref="com.axelor.apps.base.db.Partner" title="Supplier"/>
</entity>
</domain-models>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="suppliermanagement" package="com.axelor.apps.suppliermanagement.db"/>
<entity name="PurchaseOrderSupplierLine" lang="java">
<many-to-one name="purchaseOrderLine" ref="com.axelor.apps.purchase.db.PurchaseOrderLine" title="Purchase order" index="idx_suppmanage_po_supp_line_po_line"/>
<decimal name="availableQty" title="Available qty" default="0"/>
<decimal name="price" title="Unit price" initParam="true"/>
<string name="comments" title="Comments" large="true"/>
<date name="estimatedDelivDate" title="Estim. delivery date"/>
<integer name="stateSelect" title="State" selection="isuppliermanagement.purchase.order.supplier.line.state.select" initParam="true"/>
<many-to-one name="supplierPartner" ref="com.axelor.apps.base.db.Partner" title="Supplier" initParam="true" index="idx_suppmanage_po_supp_line_supp_partner"/>
<!-- sophal -->
<many-to-one name="taxLine" ref="com.axelor.apps.account.db.TaxLine" title="Tax"/>
<!-- Total HT -->
<decimal name="exTaxTotal" title="Total W.T." scale="2" precision="20" readonly="true"/>
<!-- Total T.V.A. -->
<decimal name="taxTotal" title="Total Tax" scale="2" precision="20" readonly="true"/>
<!-- Total T.T.C -->
<decimal name="inTaxTotal" title="Total A.T.I." scale="2" precision="20" readonly="true"/>
<many-to-one name="currency" ref="com.axelor.apps.base.db.Currency" title="Currency"/>
<many-to-one name="acceptedByUser" ref="com.axelor.auth.db.User" readonly="true" title="Accepted by"/>
<date name="acceptanceDate" title="Acceptance date" readonly="true"/>
<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"/>
<decimal name="budgetRemainingAmount" title="Budget remaining amount" precision="20" scale="10"/>
<extra-code><![CDATA[
//STATE SELECT
public static final int STATE_REQUESTED = 1;
public static final int STATE_SUBMITTED = 2;
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>
<!-- sophal -->
<track>
<field name="stateSelect"/>
</track>
</entity>
</domain-models>

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept",,,
"Accepted",,,
"Actions",,,
"Available qty",,,
"Cancel",,,
"Canceled",,,
"Comments",,,
"Estim. delivery date",,,
"Generate all suppliers requests",,,
"Generate suppliers purchase orders",,,
"Initial purchase order",,,
"Manage supplier consultations",,,
"My R.F.Q.",,,
"My R.F.Q. to complete",,,
"My deliveries",,,
"My purchase orders",,,
"My space",,,
"Not accept",,,
"Not accepted",,,
"Ordered quantity",,,
"Purchase order",,,
"Purchase order Details",,,
"Receipt date",,,
"Request",,,
"Requested",,,
"Show suppliers purchase orders",,,
"State",,,
"Status",,,
"Stock move",,,
"Stock move informations",,,
"Stock move line",,,
"Stock move lines",,,
"Stock move reference",,,
"Stock moves",,,
"Submit",,,
"Submitted",,,
"Supplier",,,
"Supplier RFQ/PO",,,
"Supplier consultations",,,
"Supplier request",,,
"Supplier's consulting's request created",,,
"Suppliers orders' generation over",,,
"Suppliers purchase",,,
"Suppliers requests",,,
"Tools",,,
"Unit price",,,
"WARNING : To Date must be after or equals to From Date",,,
"Write to the supplier",,,
"suppliers requests",,,
1 key message comment context
2 Accept
3 Accepted
4 Actions
5 Available qty
6 Cancel
7 Canceled
8 Comments
9 Estim. delivery date
10 Generate all suppliers requests
11 Generate suppliers purchase orders
12 Initial purchase order
13 Manage supplier consultations
14 My R.F.Q.
15 My R.F.Q. to complete
16 My deliveries
17 My purchase orders
18 My space
19 Not accept
20 Not accepted
21 Ordered quantity
22 Purchase order
23 Purchase order Details
24 Receipt date
25 Request
26 Requested
27 Show suppliers purchase orders
28 State
29 Status
30 Stock move
31 Stock move informations
32 Stock move line
33 Stock move lines
34 Stock move reference
35 Stock moves
36 Submit
37 Submitted
38 Supplier
39 Supplier RFQ/PO
40 Supplier consultations
41 Supplier request
42 Supplier's consulting's request created
43 Suppliers orders' generation over
44 Suppliers purchase
45 Suppliers requests
46 Tools
47 Unit price
48 WARNING : To Date must be after or equals to From Date
49 Write to the supplier
50 suppliers requests

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Akzeptieren",,
"Accepted","Akzeptiert",,
"Actions","Aktionen",,
"Available qty","Verfügbare Menge",,
"Cancel","Abbrechen",,
"Canceled","Abgesagt",,
"Comments","Kommentare",,
"Estim. delivery date","Voraussichtlicher Liefertermin",,
"Generate all suppliers requests","Generierung aller Lieferantenanfragen",,
"Generate suppliers purchase orders","Lieferantenbestellungen generieren",,
"Initial purchase order","Erstbestellung",,
"Manage supplier consultations",,,
"My R.F.Q.","My R.F.Q.",,
"My R.F.Q. to complete","Mein R.F.Q. zum Ausfüllen",,
"My deliveries","Meine Lieferungen",,
"My purchase orders","Meine Bestellungen",,
"My space","Mein Bereich",,
"Not accept","Nicht akzeptieren",,
"Not accepted","Nicht akzeptiert",,
"Ordered quantity","Bestellmenge",,
"Purchase order","Bestellung",,
"Purchase order Details","Bestelldaten",,
"Receipt date","Eingangsdatum",,
"Request","Anfrage",,
"Requested","Angefordert",,
"Show suppliers purchase orders","Lieferantenbestellungen anzeigen",,
"State","Zustand",,
"Status","Status",,
"Stock move","Lagerbewegung",,
"Stock move informations","Informationen zur Lagerbewegung",,
"Stock move line","Lagerbewegungslinie",,
"Stock move lines","Lagerbewegungslinien",,
"Stock move reference","Referenz zur Lagerbewegung",,
"Stock moves","Lagerbewegungen",,
"Submit","Absenden",,
"Submitted","Eingereicht",,
"Supplier","Lieferant",,
"Supplier RFQ/PO","Lieferantenanfrage/PO",,
"Supplier consultations",,,
"Supplier request","Lieferantenanfrage",,
"Supplier's consulting's request created","Anfrage der Lieferantenberatung erstellt",,
"Suppliers orders' generation over","Generierung von Lieferantenaufträgen über die gesamte Laufzeit",,
"Suppliers purchase","Lieferanten kaufen",,
"Suppliers requests","Anfragen von Lieferanten",,
"Tools","Werkzeuge",,
"Unit price","Stückpreis",,
"WARNING : To Date must be after or equals to From Date","WARNUNG: Bis-Datum muss nach oder gleich dem Von-Datum sein.",,
"Write to the supplier","Schreiben Sie an den Lieferanten",,
"suppliers requests","Lieferantenanfragen",,
1 key message comment context
2 Accept Akzeptieren
3 Accepted Akzeptiert
4 Actions Aktionen
5 Available qty Verfügbare Menge
6 Cancel Abbrechen
7 Canceled Abgesagt
8 Comments Kommentare
9 Estim. delivery date Voraussichtlicher Liefertermin
10 Generate all suppliers requests Generierung aller Lieferantenanfragen
11 Generate suppliers purchase orders Lieferantenbestellungen generieren
12 Initial purchase order Erstbestellung
13 Manage supplier consultations
14 My R.F.Q. My R.F.Q.
15 My R.F.Q. to complete Mein R.F.Q. zum Ausfüllen
16 My deliveries Meine Lieferungen
17 My purchase orders Meine Bestellungen
18 My space Mein Bereich
19 Not accept Nicht akzeptieren
20 Not accepted Nicht akzeptiert
21 Ordered quantity Bestellmenge
22 Purchase order Bestellung
23 Purchase order Details Bestelldaten
24 Receipt date Eingangsdatum
25 Request Anfrage
26 Requested Angefordert
27 Show suppliers purchase orders Lieferantenbestellungen anzeigen
28 State Zustand
29 Status Status
30 Stock move Lagerbewegung
31 Stock move informations Informationen zur Lagerbewegung
32 Stock move line Lagerbewegungslinie
33 Stock move lines Lagerbewegungslinien
34 Stock move reference Referenz zur Lagerbewegung
35 Stock moves Lagerbewegungen
36 Submit Absenden
37 Submitted Eingereicht
38 Supplier Lieferant
39 Supplier RFQ/PO Lieferantenanfrage/PO
40 Supplier consultations
41 Supplier request Lieferantenanfrage
42 Supplier's consulting's request created Anfrage der Lieferantenberatung erstellt
43 Suppliers orders' generation over Generierung von Lieferantenaufträgen über die gesamte Laufzeit
44 Suppliers purchase Lieferanten kaufen
45 Suppliers requests Anfragen von Lieferanten
46 Tools Werkzeuge
47 Unit price Stückpreis
48 WARNING : To Date must be after or equals to From Date WARNUNG: Bis-Datum muss nach oder gleich dem Von-Datum sein.
49 Write to the supplier Schreiben Sie an den Lieferanten
50 suppliers requests Lieferantenanfragen

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept",,,
"Accepted",,,
"Actions",,,
"Available qty",,,
"Cancel",,,
"Canceled",,,
"Comments",,,
"Estim. delivery date",,,
"Generate all suppliers requests",,,
"Generate suppliers purchase orders",,,
"Initial purchase order",,,
"Manage supplier consultations",,,
"My R.F.Q.",,,
"My R.F.Q. to complete",,,
"My deliveries",,,
"My purchase orders",,,
"My space",,,
"Not accept",,,
"Not accepted",,,
"Ordered quantity",,,
"Purchase order",,,
"Purchase order Details",,,
"Receipt date",,,
"Request",,,
"Requested",,,
"Show suppliers purchase orders",,,
"State",,,
"Status",,,
"Stock move",,,
"Stock move informations",,,
"Stock move line",,,
"Stock move lines",,,
"Stock move reference",,,
"Stock moves",,,
"Submit",,,
"Submitted",,,
"Supplier",,,
"Supplier RFQ/PO",,,
"Supplier consultations",,,
"Supplier request",,,
"Supplier's consulting's request created",,,
"Suppliers orders' generation over",,,
"Suppliers purchase",,,
"Suppliers requests",,,
"Tools",,,
"Unit price",,,
"WARNING : To Date must be after or equals to From Date",,,
"Write to the supplier",,,
"suppliers requests",,,
1 key message comment context
2 Accept
3 Accepted
4 Actions
5 Available qty
6 Cancel
7 Canceled
8 Comments
9 Estim. delivery date
10 Generate all suppliers requests
11 Generate suppliers purchase orders
12 Initial purchase order
13 Manage supplier consultations
14 My R.F.Q.
15 My R.F.Q. to complete
16 My deliveries
17 My purchase orders
18 My space
19 Not accept
20 Not accepted
21 Ordered quantity
22 Purchase order
23 Purchase order Details
24 Receipt date
25 Request
26 Requested
27 Show suppliers purchase orders
28 State
29 Status
30 Stock move
31 Stock move informations
32 Stock move line
33 Stock move lines
34 Stock move reference
35 Stock moves
36 Submit
37 Submitted
38 Supplier
39 Supplier RFQ/PO
40 Supplier consultations
41 Supplier request
42 Supplier's consulting's request created
43 Suppliers orders' generation over
44 Suppliers purchase
45 Suppliers requests
46 Tools
47 Unit price
48 WARNING : To Date must be after or equals to From Date
49 Write to the supplier
50 suppliers requests

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Aceptar",,
"Accepted","Aceptado",,
"Actions","Acciones",,
"Available qty","Cantidad disponible",,
"Cancel","Cancelar",,
"Canceled","Cancelado",,
"Comments","Comentarios",,
"Estim. delivery date","Fecha estimada de entrega",,
"Generate all suppliers requests","Generar todas las solicitudes de los proveedores",,
"Generate suppliers purchase orders","Generar órdenes de compra de proveedores",,
"Initial purchase order","Pedido inicial",,
"Manage supplier consultations",,,
"My R.F.Q.","Mi R.F.Q.",,
"My R.F.Q. to complete","Mi R.F.Q. para completar",,
"My deliveries","Mis entregas",,
"My purchase orders","Mis pedidos",,
"My space","Mi espacio",,
"Not accept","No aceptar",,
"Not accepted","No se acepta",,
"Ordered quantity","Cantidad pedida",,
"Purchase order","Pedido",,
"Purchase order Details","Detalles de la orden de compra",,
"Receipt date","Fecha de entrada",,
"Request","Solicitar",,
"Requested","Solicitado",,
"Show suppliers purchase orders","Mostrar pedidos de proveedores",,
"State","Estado",,
"Status","Estado",,
"Stock move","Movimiento de stock",,
"Stock move informations","Información de movimientos de acciones",,
"Stock move line","Línea de movimiento",,
"Stock move lines","Líneas de movimiento",,
"Stock move reference","Referencia de movimiento de stock",,
"Stock moves","Movimientos de stock",,
"Submit","Enviar",,
"Submitted","Presentado",,
"Supplier","Proveedor",,
"Supplier RFQ/PO","Petición de oferta/PO de proveedor",,
"Supplier consultations",,,
"Supplier request","Solicitud de proveedor",,
"Supplier's consulting's request created","Creación de la solicitud de consultoría del proveedor",,
"Suppliers orders' generation over","Generación de pedidos de proveedores a lo largo de",,
"Suppliers purchase","Compra de proveedores",,
"Suppliers requests","Solicitudes de proveedores",,
"Tools","Herramientas",,
"Unit price","Precio unitario",,
"WARNING : To Date must be after or equals to From Date","ADVERTENCIA : Hasta la fecha debe ser posterior o igual a Desde la fecha",,
"Write to the supplier","Escribir al proveedor",,
"suppliers requests","solicitudes de proveedores",,
1 key message comment context
2 Accept Aceptar
3 Accepted Aceptado
4 Actions Acciones
5 Available qty Cantidad disponible
6 Cancel Cancelar
7 Canceled Cancelado
8 Comments Comentarios
9 Estim. delivery date Fecha estimada de entrega
10 Generate all suppliers requests Generar todas las solicitudes de los proveedores
11 Generate suppliers purchase orders Generar órdenes de compra de proveedores
12 Initial purchase order Pedido inicial
13 Manage supplier consultations
14 My R.F.Q. Mi R.F.Q.
15 My R.F.Q. to complete Mi R.F.Q. para completar
16 My deliveries Mis entregas
17 My purchase orders Mis pedidos
18 My space Mi espacio
19 Not accept No aceptar
20 Not accepted No se acepta
21 Ordered quantity Cantidad pedida
22 Purchase order Pedido
23 Purchase order Details Detalles de la orden de compra
24 Receipt date Fecha de entrada
25 Request Solicitar
26 Requested Solicitado
27 Show suppliers purchase orders Mostrar pedidos de proveedores
28 State Estado
29 Status Estado
30 Stock move Movimiento de stock
31 Stock move informations Información de movimientos de acciones
32 Stock move line Línea de movimiento
33 Stock move lines Líneas de movimiento
34 Stock move reference Referencia de movimiento de stock
35 Stock moves Movimientos de stock
36 Submit Enviar
37 Submitted Presentado
38 Supplier Proveedor
39 Supplier RFQ/PO Petición de oferta/PO de proveedor
40 Supplier consultations
41 Supplier request Solicitud de proveedor
42 Supplier's consulting's request created Creación de la solicitud de consultoría del proveedor
43 Suppliers orders' generation over Generación de pedidos de proveedores a lo largo de
44 Suppliers purchase Compra de proveedores
45 Suppliers requests Solicitudes de proveedores
46 Tools Herramientas
47 Unit price Precio unitario
48 WARNING : To Date must be after or equals to From Date ADVERTENCIA : Hasta la fecha debe ser posterior o igual a Desde la fecha
49 Write to the supplier Escribir al proveedor
50 suppliers requests solicitudes de proveedores

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Accepter",,
"Accepted","Accepté",,
"Actions","Actions",,
"Available qty","Qté disponible",,
"Cancel","Annuler",,
"Canceled","Annulé",,
"Comments","Commentaires",,
"Estim. delivery date","Date de livr. Estimée",,
"Generate all suppliers requests","Générer toutes les demandes aux fournisseurs",,
"Generate suppliers purchase orders","Générer commandes fournisseurs",,
"Initial purchase order","Cmde initiale",,
"Manage supplier consultations","Gestion des consultations fournisseurs",,
"My R.F.Q.","Mes demandes de cotations",,
"My R.F.Q. to complete","Mes demandes de cotations à compléter",,
"My deliveries","Mes livraisons",,
"My purchase orders","Mes commandes",,
"My space","Mon espace",,
"Not accept","Ne pas retenir",,
"Not accepted","Non retenu",,
"Ordered quantity","Quantité commandée",,
"Purchase order","Commande d'Achat",,
"Purchase order Details","Informations sur la commande d'achat",,
"Receipt date","Date de reception",,
"Request","Demander",,
"Requested","Demandé",,
"Show suppliers purchase orders","Les commandes fournisseurs associées",,
"State","Statut",,
"Status",,,
"Stock move","Mouvement de stock",,
"Stock move informations","Informations sur Stocks Internes",,
"Stock move line","Ligne mvt. de stock",,
"Stock move lines","Lignes mvt. de stock",,
"Stock move reference","Références mouvement de stock",,
"Stock moves","Mouvements de stock",,
"Submit","Envoyer",,
"Submitted","Soumis(e)",,
"Supplier","Fournisseur",,
"Supplier RFQ/PO","Dv/Cmde Fourn.",,
"Supplier consultations","Consultations fournisseur",,
"Supplier request","Demande d'achat",,
"Supplier's consulting's request created","Demande de consultations fournisseurs créées",,
"Suppliers orders' generation over","Génération des devis fournisseurs terminée",,
"Suppliers purchase","Achats fournisseurs",,
"Suppliers requests","Demandes d'achat",,
"Tools",,,
"Unit price","Prix unitaire",,
"WARNING : To Date must be after or equals to From Date","Attention : Date de fin doit être égale ou supérieure à Date de début",,
"Write to the supplier","Ecrire au fournisseur",,
"suppliers requests","Demandes de devis fournisseurs",,
1 key message comment context
2 Accept Accepter
3 Accepted Accepté
4 Actions Actions
5 Available qty Qté disponible
6 Cancel Annuler
7 Canceled Annulé
8 Comments Commentaires
9 Estim. delivery date Date de livr. Estimée
10 Generate all suppliers requests Générer toutes les demandes aux fournisseurs
11 Generate suppliers purchase orders Générer commandes fournisseurs
12 Initial purchase order Cmde initiale
13 Manage supplier consultations Gestion des consultations fournisseurs
14 My R.F.Q. Mes demandes de cotations
15 My R.F.Q. to complete Mes demandes de cotations à compléter
16 My deliveries Mes livraisons
17 My purchase orders Mes commandes
18 My space Mon espace
19 Not accept Ne pas retenir
20 Not accepted Non retenu
21 Ordered quantity Quantité commandée
22 Purchase order Commande d'Achat
23 Purchase order Details Informations sur la commande d'achat
24 Receipt date Date de reception
25 Request Demander
26 Requested Demandé
27 Show suppliers purchase orders Les commandes fournisseurs associées
28 State Statut
29 Status
30 Stock move Mouvement de stock
31 Stock move informations Informations sur Stocks Internes
32 Stock move line Ligne mvt. de stock
33 Stock move lines Lignes mvt. de stock
34 Stock move reference Références mouvement de stock
35 Stock moves Mouvements de stock
36 Submit Envoyer
37 Submitted Soumis(e)
38 Supplier Fournisseur
39 Supplier RFQ/PO Dv/Cmde Fourn.
40 Supplier consultations Consultations fournisseur
41 Supplier request Demande d'achat
42 Supplier's consulting's request created Demande de consultations fournisseurs créées
43 Suppliers orders' generation over Génération des devis fournisseurs terminée
44 Suppliers purchase Achats fournisseurs
45 Suppliers requests Demandes d'achat
46 Tools
47 Unit price Prix unitaire
48 WARNING : To Date must be after or equals to From Date Attention : Date de fin doit être égale ou supérieure à Date de début
49 Write to the supplier Ecrire au fournisseur
50 suppliers requests Demandes de devis fournisseurs

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Accettare",,
"Accepted","Accettati",,
"Actions","Azioni",,
"Available qty","Qtà disponibile",,
"Cancel","Annulla",,
"Canceled","Annullato",,
"Comments","Commenti",,
"Estim. delivery date","Data di consegna prevista",,
"Generate all suppliers requests","Generare tutte le richieste dei fornitori",,
"Generate suppliers purchase orders","Generare gli ordini di acquisto dei fornitori",,
"Initial purchase order","Ordine di acquisto iniziale",,
"Manage supplier consultations",,,
"My R.F.Q.","Il mio Q.Q.R.F.F.",,
"My R.F.Q. to complete","Il mio Q.Q.R.F.F. da completare",,
"My deliveries","Le mie consegne",,
"My purchase orders","I miei ordini di acquisto",,
"My space","Il mio spazio",,
"Not accept","Non accetto",,
"Not accepted","Non accettata",,
"Ordered quantity","Quantità ordinata",,
"Purchase order","Ordine d'acquisto",,
"Purchase order Details","Dettagli dell'ordine di acquisto",,
"Receipt date","Data di ricezione",,
"Request","Richiesta",,
"Requested","Richiesto",,
"Show suppliers purchase orders","Mostra gli ordini di acquisto dei fornitori",,
"State","Stato",,
"Status","Stato",,
"Stock move","Spostamento delle scorte",,
"Stock move informations","Informazioni sulla movimentazione delle azioni",,
"Stock move line","Linea stock move line",,
"Stock move lines","Linee di spostamento delle scorte",,
"Stock move reference","Riferimento per lo spostamento delle scorte",,
"Stock moves","Movimenti di magazzino",,
"Submit","Invia",,
"Submitted","Presentato",,
"Supplier","Fornitore",,
"Supplier RFQ/PO","Fornitore RFQ/PO",,
"Supplier consultations",,,
"Supplier request","Richiesta del fornitore",,
"Supplier's consulting's request created","Creazione della richiesta di consulenza del fornitore",,
"Suppliers orders' generation over","Generazione degli ordini dei fornitori nel corso dell'anno",,
"Suppliers purchase","Acquisto fornitori",,
"Suppliers requests","Richieste dei fornitori",,
"Tools","Strumenti",,
"Unit price","Prezzo unitario",,
"WARNING : To Date must be after or equals to From Date","ATTENZIONE: la data deve essere successiva o uguale a quella della data.",,
"Write to the supplier","Scrivere al fornitore",,
"suppliers requests","richieste dei fornitori",,
1 key message comment context
2 Accept Accettare
3 Accepted Accettati
4 Actions Azioni
5 Available qty Qtà disponibile
6 Cancel Annulla
7 Canceled Annullato
8 Comments Commenti
9 Estim. delivery date Data di consegna prevista
10 Generate all suppliers requests Generare tutte le richieste dei fornitori
11 Generate suppliers purchase orders Generare gli ordini di acquisto dei fornitori
12 Initial purchase order Ordine di acquisto iniziale
13 Manage supplier consultations
14 My R.F.Q. Il mio Q.Q.R.F.F.
15 My R.F.Q. to complete Il mio Q.Q.R.F.F. da completare
16 My deliveries Le mie consegne
17 My purchase orders I miei ordini di acquisto
18 My space Il mio spazio
19 Not accept Non accetto
20 Not accepted Non accettata
21 Ordered quantity Quantità ordinata
22 Purchase order Ordine d'acquisto
23 Purchase order Details Dettagli dell'ordine di acquisto
24 Receipt date Data di ricezione
25 Request Richiesta
26 Requested Richiesto
27 Show suppliers purchase orders Mostra gli ordini di acquisto dei fornitori
28 State Stato
29 Status Stato
30 Stock move Spostamento delle scorte
31 Stock move informations Informazioni sulla movimentazione delle azioni
32 Stock move line Linea stock move line
33 Stock move lines Linee di spostamento delle scorte
34 Stock move reference Riferimento per lo spostamento delle scorte
35 Stock moves Movimenti di magazzino
36 Submit Invia
37 Submitted Presentato
38 Supplier Fornitore
39 Supplier RFQ/PO Fornitore RFQ/PO
40 Supplier consultations
41 Supplier request Richiesta del fornitore
42 Supplier's consulting's request created Creazione della richiesta di consulenza del fornitore
43 Suppliers orders' generation over Generazione degli ordini dei fornitori nel corso dell'anno
44 Suppliers purchase Acquisto fornitori
45 Suppliers requests Richieste dei fornitori
46 Tools Strumenti
47 Unit price Prezzo unitario
48 WARNING : To Date must be after or equals to From Date ATTENZIONE: la data deve essere successiva o uguale a quella della data.
49 Write to the supplier Scrivere al fornitore
50 suppliers requests richieste dei fornitori

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Keur goed",,
"Accepted","Aanvaard",,
"Actions","Acties",,
"Available qty","Beschikbaar qty",,
"Cancel","Annuleren",,
"Canceled","Geannuleerd",,
"Comments","Commentaar",,
"Estim. delivery date","Vermoedelijke leveringsdatum",,
"Generate all suppliers requests","Genereer alle verzoeken van leveranciers",,
"Generate suppliers purchase orders","Leveranciers inkooporders genereren",,
"Initial purchase order","Eerste bestelling",,
"Manage supplier consultations",,,
"My R.F.Q.","Mijn R.F.Q.",,
"My R.F.Q. to complete","Mijn R.F.Q. in te vullen",,
"My deliveries","Mijn leveringen",,
"My purchase orders","Mijn bestellingen",,
"My space","Mijn ruimte",,
"Not accept","Niet accepteren",,
"Not accepted","Niet geaccepteerd",,
"Ordered quantity","Bestelde hoeveelheid",,
"Purchase order","Aankooporder",,
"Purchase order Details","Aankooporder Details",,
"Receipt date","Ontvangstdatum",,
"Request","Aanvraag",,
"Requested","Gevraagd",,
"Show suppliers purchase orders","Toon leveranciers inkooporders",,
"State","Staat",,
"Status","Status",,
"Stock move","Voorraadverhuizing",,
"Stock move informations","Informatie over voorraadverplaatsingen",,
"Stock move line","Voorraadverplaatsingslijn",,
"Stock move lines","Voorraadverplaatsingslijnen",,
"Stock move reference","Voorraadverplaatsing referentie",,
"Stock moves","Voorraad verhuizingen",,
"Submit","Aanmelden",,
"Submitted","Ingediend",,
"Supplier","Leverancier",,
"Supplier RFQ/PO","Leverancier RFQ/PO",,
"Supplier consultations",,,
"Supplier request","Aanvraag leverancier",,
"Supplier's consulting's request created","Het verzoek van de leverancier om advies opgesteld",,
"Suppliers orders' generation over","Leveranciers orders genereren meer dan",,
"Suppliers purchase","Leveranciers kopen",,
"Suppliers requests","Verzoeken van leveranciers",,
"Tools","Gereedschap",,
"Unit price","Eenheidsprijs",,
"WARNING : To Date must be after or equals to From Date","WAARSCHUWING: Tot datum moet na of gelijk zijn aan Vanaf datum",,
"Write to the supplier","Schrijf naar de leverancier",,
"suppliers requests","leveranciersaanvragen",,
1 key message comment context
2 Accept Keur goed
3 Accepted Aanvaard
4 Actions Acties
5 Available qty Beschikbaar qty
6 Cancel Annuleren
7 Canceled Geannuleerd
8 Comments Commentaar
9 Estim. delivery date Vermoedelijke leveringsdatum
10 Generate all suppliers requests Genereer alle verzoeken van leveranciers
11 Generate suppliers purchase orders Leveranciers inkooporders genereren
12 Initial purchase order Eerste bestelling
13 Manage supplier consultations
14 My R.F.Q. Mijn R.F.Q.
15 My R.F.Q. to complete Mijn R.F.Q. in te vullen
16 My deliveries Mijn leveringen
17 My purchase orders Mijn bestellingen
18 My space Mijn ruimte
19 Not accept Niet accepteren
20 Not accepted Niet geaccepteerd
21 Ordered quantity Bestelde hoeveelheid
22 Purchase order Aankooporder
23 Purchase order Details Aankooporder Details
24 Receipt date Ontvangstdatum
25 Request Aanvraag
26 Requested Gevraagd
27 Show suppliers purchase orders Toon leveranciers inkooporders
28 State Staat
29 Status Status
30 Stock move Voorraadverhuizing
31 Stock move informations Informatie over voorraadverplaatsingen
32 Stock move line Voorraadverplaatsingslijn
33 Stock move lines Voorraadverplaatsingslijnen
34 Stock move reference Voorraadverplaatsing referentie
35 Stock moves Voorraad verhuizingen
36 Submit Aanmelden
37 Submitted Ingediend
38 Supplier Leverancier
39 Supplier RFQ/PO Leverancier RFQ/PO
40 Supplier consultations
41 Supplier request Aanvraag leverancier
42 Supplier's consulting's request created Het verzoek van de leverancier om advies opgesteld
43 Suppliers orders' generation over Leveranciers orders genereren meer dan
44 Suppliers purchase Leveranciers kopen
45 Suppliers requests Verzoeken van leveranciers
46 Tools Gereedschap
47 Unit price Eenheidsprijs
48 WARNING : To Date must be after or equals to From Date WAARSCHUWING: Tot datum moet na of gelijk zijn aan Vanaf datum
49 Write to the supplier Schrijf naar de leverancier
50 suppliers requests leveranciersaanvragen

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Akceptacja",,
"Accepted","Przyjęty",,
"Actions","Działania",,
"Available qty","Dostępna ilość",,
"Cancel","Anulowanie",,
"Canceled","Anulowany",,
"Comments","Komentarze",,
"Estim. delivery date","Szacowana data dostawy",,
"Generate all suppliers requests","Generowanie wszystkich zapytań od dostawców",,
"Generate suppliers purchase orders","Generowanie zamówień zakupu dla dostawców",,
"Initial purchase order","Pierwsze zamówienie zakupu",,
"Manage supplier consultations",,,
"My R.F.Q.","Moje R.F.Q.",,
"My R.F.Q. to complete","Moje R.F.Q. do ukończenia",,
"My deliveries","Moje dostawy",,
"My purchase orders","Moje zamówienia zakupu",,
"My space","Moja przestrzeń",,
"Not accept","Nie akceptuj.",,
"Not accepted","Nie przyjęto.",,
"Ordered quantity","Zamówiona ilość",,
"Purchase order","Zamówienie zakupu",,
"Purchase order Details","Zamówienie zakupu Szczegóły",,
"Receipt date","Data otrzymania",,
"Request","Żądanie",,
"Requested","Wnioskowany",,
"Show suppliers purchase orders","Pokaż dostawcom zamówienia zakupu",,
"State","państwo",,
"Status","Status",,
"Stock move","Przenoszenie zapasów",,
"Stock move informations","Informacje o przesunięciach magazynowych",,
"Stock move line","Linia przesuwu zapasów",,
"Stock move lines","Linie przesuwu zapasów",,
"Stock move reference","Odniesienie do przeniesienia zapasów",,
"Stock moves","Przeniesienia magazynowe",,
"Submit","Zgłoś się",,
"Submitted","Przedłożone",,
"Supplier","Dostawca",,
"Supplier RFQ/PO","Dostawca RFQ/PO",,
"Supplier consultations",,,
"Supplier request","Żądanie dostawcy",,
"Supplier's consulting's request created","Stworzony wniosek dostawcy o konsultację",,
"Suppliers orders' generation over","Generowanie zamówień dostawców ponad",,
"Suppliers purchase","Zakupy przez dostawców",,
"Suppliers requests","Wnioski dostawców",,
"Tools","Narzędzia",,
"Unit price","Cena jednostkowa",,
"WARNING : To Date must be after or equals to From Date","OSTRZEŻENIE: Data musi być późniejsza lub równa dacie",,
"Write to the supplier","Napisz do dostawcy",,
"suppliers requests","wnioski dostawców",,
1 key message comment context
2 Accept Akceptacja
3 Accepted Przyjęty
4 Actions Działania
5 Available qty Dostępna ilość
6 Cancel Anulowanie
7 Canceled Anulowany
8 Comments Komentarze
9 Estim. delivery date Szacowana data dostawy
10 Generate all suppliers requests Generowanie wszystkich zapytań od dostawców
11 Generate suppliers purchase orders Generowanie zamówień zakupu dla dostawców
12 Initial purchase order Pierwsze zamówienie zakupu
13 Manage supplier consultations
14 My R.F.Q. Moje R.F.Q.
15 My R.F.Q. to complete Moje R.F.Q. do ukończenia
16 My deliveries Moje dostawy
17 My purchase orders Moje zamówienia zakupu
18 My space Moja przestrzeń
19 Not accept Nie akceptuj.
20 Not accepted Nie przyjęto.
21 Ordered quantity Zamówiona ilość
22 Purchase order Zamówienie zakupu
23 Purchase order Details Zamówienie zakupu Szczegóły
24 Receipt date Data otrzymania
25 Request Żądanie
26 Requested Wnioskowany
27 Show suppliers purchase orders Pokaż dostawcom zamówienia zakupu
28 State państwo
29 Status Status
30 Stock move Przenoszenie zapasów
31 Stock move informations Informacje o przesunięciach magazynowych
32 Stock move line Linia przesuwu zapasów
33 Stock move lines Linie przesuwu zapasów
34 Stock move reference Odniesienie do przeniesienia zapasów
35 Stock moves Przeniesienia magazynowe
36 Submit Zgłoś się
37 Submitted Przedłożone
38 Supplier Dostawca
39 Supplier RFQ/PO Dostawca RFQ/PO
40 Supplier consultations
41 Supplier request Żądanie dostawcy
42 Supplier's consulting's request created Stworzony wniosek dostawcy o konsultację
43 Suppliers orders' generation over Generowanie zamówień dostawców ponad
44 Suppliers purchase Zakupy przez dostawców
45 Suppliers requests Wnioski dostawców
46 Tools Narzędzia
47 Unit price Cena jednostkowa
48 WARNING : To Date must be after or equals to From Date OSTRZEŻENIE: Data musi być późniejsza lub równa dacie
49 Write to the supplier Napisz do dostawcy
50 suppliers requests wnioski dostawców

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Aceitar",,
"Accepted","Aceite",,
"Actions","Ações",,
"Available qty","Quantidade disponível",,
"Cancel","Cancelar",,
"Canceled","Cancelado",,
"Comments","Comentários",,
"Estim. delivery date","Data estimada de entrega",,
"Generate all suppliers requests","Gerar todas as solicitações de fornecedores",,
"Generate suppliers purchase orders","Gerar pedidos de compra de fornecedores",,
"Initial purchase order","Pedido inicial",,
"Manage supplier consultations",,,
"My R.F.Q.","O meu R.F.Q.",,
"My R.F.Q. to complete","O meu R.F.Q. para completar",,
"My deliveries","Minhas entregas",,
"My purchase orders","Meus pedidos de compra",,
"My space","Meu espaço",,
"Not accept","Não aceitar",,
"Not accepted","Não aceite",,
"Ordered quantity","Quantidade pedida",,
"Purchase order","Pedido de compra",,
"Purchase order Details","Detalhes do pedido de compra",,
"Receipt date","Data de recebimento",,
"Request","Solicitar",,
"Requested","Solicitado",,
"Show suppliers purchase orders","Mostrar pedidos de compra de fornecedores",,
"State","Estado",,
"Status","Estado",,
"Stock move","Movimento de estoque",,
"Stock move informations","Informações sobre movimento de estoque",,
"Stock move line","Linha de movimentação de estoque",,
"Stock move lines","Linhas de movimentação de estoque",,
"Stock move reference","Referência de movimento de estoque",,
"Stock moves","Movimentos de estoque",,
"Submit","Enviar",,
"Submitted","Submetido",,
"Supplier","Fornecedor",,
"Supplier RFQ/PO","Solicitação de cotação/ordem de compra do fornecedor",,
"Supplier consultations",,,
"Supplier request","Solicitação de fornecedor",,
"Supplier's consulting's request created","Solicitação de consultoria do fornecedor criada",,
"Suppliers orders' generation over","Geração de encomendas de fornecedores ao longo de",,
"Suppliers purchase","Compra de fornecedores",,
"Suppliers requests","Pedidos de fornecedores",,
"Tools","Ferramentas",,
"Unit price","Preço unitário",,
"WARNING : To Date must be after or equals to From Date","AVISO: A data até deve ser posterior ou igual à data de início",,
"Write to the supplier","Escrever para o fornecedor",,
"suppliers requests","solicitações de fornecedores",,
1 key message comment context
2 Accept Aceitar
3 Accepted Aceite
4 Actions Ações
5 Available qty Quantidade disponível
6 Cancel Cancelar
7 Canceled Cancelado
8 Comments Comentários
9 Estim. delivery date Data estimada de entrega
10 Generate all suppliers requests Gerar todas as solicitações de fornecedores
11 Generate suppliers purchase orders Gerar pedidos de compra de fornecedores
12 Initial purchase order Pedido inicial
13 Manage supplier consultations
14 My R.F.Q. O meu R.F.Q.
15 My R.F.Q. to complete O meu R.F.Q. para completar
16 My deliveries Minhas entregas
17 My purchase orders Meus pedidos de compra
18 My space Meu espaço
19 Not accept Não aceitar
20 Not accepted Não aceite
21 Ordered quantity Quantidade pedida
22 Purchase order Pedido de compra
23 Purchase order Details Detalhes do pedido de compra
24 Receipt date Data de recebimento
25 Request Solicitar
26 Requested Solicitado
27 Show suppliers purchase orders Mostrar pedidos de compra de fornecedores
28 State Estado
29 Status Estado
30 Stock move Movimento de estoque
31 Stock move informations Informações sobre movimento de estoque
32 Stock move line Linha de movimentação de estoque
33 Stock move lines Linhas de movimentação de estoque
34 Stock move reference Referência de movimento de estoque
35 Stock moves Movimentos de estoque
36 Submit Enviar
37 Submitted Submetido
38 Supplier Fornecedor
39 Supplier RFQ/PO Solicitação de cotação/ordem de compra do fornecedor
40 Supplier consultations
41 Supplier request Solicitação de fornecedor
42 Supplier's consulting's request created Solicitação de consultoria do fornecedor criada
43 Suppliers orders' generation over Geração de encomendas de fornecedores ao longo de
44 Suppliers purchase Compra de fornecedores
45 Suppliers requests Pedidos de fornecedores
46 Tools Ferramentas
47 Unit price Preço unitário
48 WARNING : To Date must be after or equals to From Date AVISO: A data até deve ser posterior ou igual à data de início
49 Write to the supplier Escrever para o fornecedor
50 suppliers requests solicitações de fornecedores

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept","Принять",,
"Accepted","Принято",,
"Actions","Действия",,
"Available qty","Доступно qty",,
"Cancel","Отмена",,
"Canceled","Отмена",,
"Comments","Комментарии",,
"Estim. delivery date","Смета. дата поставки",,
"Generate all suppliers requests","Генерировать все запросы поставщиков",,
"Generate suppliers purchase orders","Генерировать заказы на поставку от поставщиков",,
"Initial purchase order","Первоначальный заказ на покупку",,
"Manage supplier consultations",,,
"My R.F.Q.","Мой R.F.Q.",,
"My R.F.Q. to complete","Мой R.F.Q., чтобы закончить",,
"My deliveries","Мои поставки",,
"My purchase orders","Мои заказы",,
"My space","Мое место",,
"Not accept","Не принимаю",,
"Not accepted","Не принято",,
"Ordered quantity","Заказанное количество",,
"Purchase order","Заказ на покупку",,
"Purchase order Details","Заказ на поставку Детали",,
"Receipt date","Дата получения",,
"Request","Запрос",,
"Requested","Запрошенный",,
"Show suppliers purchase orders","Показать поставщикам заказы на поставку",,
"State","Государство",,
"Status","Статус",,
"Stock move","Перемещение запасов",,
"Stock move informations","Информация о движении запасов",,
"Stock move line","Линия перемещения запасов",,
"Stock move lines","Линии перемещения запасов",,
"Stock move reference","Справочник по перемещению запасов",,
"Stock moves","Перемещение запасов",,
"Submit","Представить",,
"Submitted","Представленный",,
"Supplier","Поставщик",,
"Supplier RFQ/PO","Поставщик RFQ/PO",,
"Supplier consultations",,,
"Supplier request","Запрос поставщика",,
"Supplier's consulting's request created","Создан запрос поставщика на консультацию",,
"Suppliers orders' generation over","Генерация заказов поставщиков свыше",,
"Suppliers purchase","Покупка поставщиков",,
"Suppliers requests","Запросы поставщиков",,
"Tools","Инструменты",,
"Unit price","Цена единицы",,
"WARNING : To Date must be after or equals to From Date","ПРЕДУПРЕЖДЕНИЕ: Свидание должно быть после даты или равно дате от нее.",,
"Write to the supplier","Напишите поставщику.",,
"suppliers requests","запросы поставщиков",,
1 key message comment context
2 Accept Принять
3 Accepted Принято
4 Actions Действия
5 Available qty Доступно qty
6 Cancel Отмена
7 Canceled Отмена
8 Comments Комментарии
9 Estim. delivery date Смета. дата поставки
10 Generate all suppliers requests Генерировать все запросы поставщиков
11 Generate suppliers purchase orders Генерировать заказы на поставку от поставщиков
12 Initial purchase order Первоначальный заказ на покупку
13 Manage supplier consultations
14 My R.F.Q. Мой R.F.Q.
15 My R.F.Q. to complete Мой R.F.Q., чтобы закончить
16 My deliveries Мои поставки
17 My purchase orders Мои заказы
18 My space Мое место
19 Not accept Не принимаю
20 Not accepted Не принято
21 Ordered quantity Заказанное количество
22 Purchase order Заказ на покупку
23 Purchase order Details Заказ на поставку Детали
24 Receipt date Дата получения
25 Request Запрос
26 Requested Запрошенный
27 Show suppliers purchase orders Показать поставщикам заказы на поставку
28 State Государство
29 Status Статус
30 Stock move Перемещение запасов
31 Stock move informations Информация о движении запасов
32 Stock move line Линия перемещения запасов
33 Stock move lines Линии перемещения запасов
34 Stock move reference Справочник по перемещению запасов
35 Stock moves Перемещение запасов
36 Submit Представить
37 Submitted Представленный
38 Supplier Поставщик
39 Supplier RFQ/PO Поставщик RFQ/PO
40 Supplier consultations
41 Supplier request Запрос поставщика
42 Supplier's consulting's request created Создан запрос поставщика на консультацию
43 Suppliers orders' generation over Генерация заказов поставщиков свыше
44 Suppliers purchase Покупка поставщиков
45 Suppliers requests Запросы поставщиков
46 Tools Инструменты
47 Unit price Цена единицы
48 WARNING : To Date must be after or equals to From Date ПРЕДУПРЕЖДЕНИЕ: Свидание должно быть после даты или равно дате от нее.
49 Write to the supplier Напишите поставщику.
50 suppliers requests запросы поставщиков

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
<input file="supplychain_permission.csv" separator=";" type="com.axelor.auth.db.Permission" search="self.name = :name" call="com.axelor.csv.script.ImportPermission:importPermissionToRole">
<bind to="canRead" eval="can_read == 'x' ? 'true' : 'false'"/>
<bind to="canWrite" eval="can_write == 'x' ? 'true' : 'false'"/>
<bind to="canCreate" eval="can_create == 'x' ? 'true' : 'false'"/>
<bind to="canRemove" eval="can_remove == 'x' ? 'true' : 'false'"/>
<bind to="canExport" eval="can_export == 'x' ? 'true' : 'false'"/>
</input>
<input file="supplychain_metaMenu.csv" separator=";" type="com.axelor.meta.db.MetaMenu" search="self.name = :name" update="true">
<bind column="roles" to="roles" search="self.name in :roles" eval="roles.split('\\|') as List"/>
</input>
</csv-inputs>

View File

@ -0,0 +1,2 @@
"name";"roles.name"
"sc-root-purchase-order-supplier-lines-requests";"Supplychain Manager|Supplychain User|Supplychain Read"
1 name roles.name
2 sc-root-purchase-order-supplier-lines-requests Supplychain Manager|Supplychain User|Supplychain Read

View File

@ -0,0 +1,4 @@
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
"perm.suppliermanagement.PurchaseOrderSupplierLine.r";"com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine";"x";;;;;;;"Supplychain Read"
"perm.suppliermanagement.PurchaseOrderSupplierLine.rwc";"com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine";"x";"x";"x";;;;;"Supplychain User"
"perm.suppliermanagement.PurchaseOrderSupplierLine.rwcde";"com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine";"x";"x";"x";"x";"x";;;"Supplychain Manager"
1 name object can_read can_write can_create can_remove can_export condition conditionParams roleName
2 perm.suppliermanagement.PurchaseOrderSupplierLine.r com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine x Supplychain Read
3 perm.suppliermanagement.PurchaseOrderSupplierLine.rwc com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine x x x Supplychain User
4 perm.suppliermanagement.PurchaseOrderSupplierLine.rwcde com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine x x x x x Supplychain Manager

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<menuitem name="sc-root-purchase-order-supplier-lines-requests" title="Supplier consultations" order="30" if="__config__.app.getApp('purchase') &amp;&amp; __config__.app.getApp('purchase').getSupplierRequestMgt()"
action="sc.root.purchase.orders.supplier.lines.requests" parent="sc-root-purchase"/>
<action-view name="sc.root.purchase.orders.supplier.lines.requests" title="Supplier consultations"
model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine" >
<view type="grid" name="purchase-order-supplier-line-grid" />
<view type="form" name="purchase-order-supplier-line-form" />
</action-view>
</object-views>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<form name="purchase-order-supplier-form" title="Supplier RFQ/PO" model="com.axelor.apps.purchase.db.PurchaseOrder" >
<panel name="mainPanel" colSpan="12">
<field name="isPurchaseParent"/>
<field name="parentPurchaseOrder" hideIf="isPurchaseParent" form-view="purchase-order-form" grid-view="purchase-order-grid"/>
<button name="generateSuppliersPurchaseOrderBtn" title="Generate suppliers purchase orders" onClick="save,action-purchase-order-method-generate-suppliers-purchase-order,save"/>
<button name="showSuppliersPurchaseOrderBtn" title="Show suppliers purchase orders" onClick="action-purchase-order-view-show-suppliers-purchase-order"/>
<button name="generatePurchaseOrderSupplierLineBtn" title="Generate all suppliers requests" onClick="save,action-purchase-order-method-generate-purchase-order-supplier-line,save"/>
</panel>
</form>
<action-method name="action-purchase-order-method-generate-suppliers-purchase-order">
<call class="com.axelor.apps.suppliermanagement.web.PurchaseOrderController" method="generateSuppliersPurchaseOrder"/>
</action-method>
<action-method name="action-purchase-order-method-generate-purchase-order-supplier-line">
<call class="com.axelor.apps.suppliermanagement.web.PurchaseOrderController" method="generateSuppliersRequests"/>
</action-method>
<action-view name="action-purchase-order-view-show-suppliers-purchase-order" model="com.axelor.apps.purchase.db.PurchaseOrder" title="Suppliers purchase">
<view type="grid" name="purchase-order-grid"/>
<view type="form" name="purchase-order-form"/>
<domain>self.parentPurchaseOrder.id = :_parentPurchaseOrderId</domain>
<context name="_parentPurchaseOrderId" expr="eval: __this__.id"/>
</action-view>
</object-views>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="purchase-order-supplier-line-grid" title="suppliers requests" canNew="false" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<hilite if="stateSelect == 1" color="info" />
<hilite if="stateSelect == 2" color="primary" />
<hilite if="stateSelect == 3" color="success" />
<hilite if="stateSelect == 4" color="warning" />
<hilite if="stateSelect == 5" color="danger" />
<field name="supplierPartner" form-view="partner-form" grid-view="partner-grid"/>
<field name="purchaseOrderLine.product" form-view="product-form" grid-view="product-grid" />
<field name="availableQty" aggregate="sum"/>
<field name="purchaseOrderLine.unit" form-view="unit-form" grid-view="unit-grid"/>
<field name="price"/>
<field name="estimatedDelivDate"/>
<field name="stateSelect"/>
</grid>
<form name="purchase-order-supplier-line-form" title="Supplier request" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine"
onNew="action-purchase-order-supplier-line-record-request,action-purchase-order-supplier-line-attrs-new" canNew="false">
<menubar>
<menu name="purchaseOrderSupplierLineToolsMenu" title="Tools">
<item name="writeToSupplierItem" title="Write to the supplier" action="save,action-send-by-email-with-template"/>
</menu>
</menubar>
<panel name="statusPanel" title="Status">
<field name="stateSelect" showTitle="false" readonly="true" colSpan="12" widget="NavSelect"/>
</panel>
<panel name="mainPanel" >
<field name="supplierPartner" onSelect="action-purchase-order-supplier-line-method-supplier-partner-domain" form-view="partner-form" grid-view="partner-grid"/>
<field name="availableQty"/>
<field name="purchaseOrderLine.unit" form-view="unit-form" grid-view="unit-grid"/>
<field name="price"/>
<field name="estimatedDelivDate"/>
</panel>
<panel name="purchaseOrderDetailsPanel" title="Purchase order Details" readOnly="true">
<field name="purchaseOrderLine"/>
<field name="purchaseOrderLine.product"/>
<field name="purchaseOrderLine.qty" title="Ordered quantity"/>
<field name="purchaseOrderLine.price"/>
<field name="purchaseOrderLine.desiredDelivDate"/>
</panel>
<panel name="commentsPanel">
<field name="comments" colSpan="12"/>
</panel>
<panel sidebar="true" name="actionsPanel" title="Actions">
<button name="acceptBtn" title="Accept" showIf="stateSelect == 1 || stateSelect == 2" onClick="save,action-purchase-order-supplier-line-method-accept,save"/>
<button name="notAcceptBtn" title="Not accept" showIf="stateSelect == 1 || stateSelect == 2" onClick="save,action-purchase-order-supplier-line-record-not-accept,save"/>
<button name="cancelBtn" title="Cancel" hideIf="stateSelect == 5" onClick="save,action-purchase-order-supplier-line-record-cancel,save"/>
<button name="requestBtn" title="Request" showIf="stateSelect == 5" onClick="save,action-purchase-order-supplier-line-record-request,save"/>
</panel>
</form>
<grid name="purchase-order-supplier-line-supplier-grid" title="Suppliers requests" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<field name="purchaseOrderLine.product" form-view="product-form" grid-view="product-grid"/>
<field name="purchaseOrderLine.qty"/>
<field name="purchaseOrderLine.desiredDelivDate"/>
<field name="availableQty" aggregate="sum"/>
<field name="purchaseOrderLine.unit" form-view="unit-form" grid-view="unit-grid"/>
<field name="price"/>
<field name="estimatedDelivDate"/>
<field name="comments"/>
<field name="stateSelect"/>
</grid>
<form name="purchase-order-supplier-line-supplier-form" title="Supplier request" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine" width="large">
<panel name="mainPanel" >
<field name="stateSelect" showTitle="false" readonly="true" colSpan="12" widget="NavSelect"/>
<field name="purchaseOrderLine.purchaseOrder.purchaseOrderSeq"/>
<field name="purchaseOrderLine.product" form-view="product-form" grid-view="product-grid"/>
<field name="purchaseOrderLine.qty"/>
<field name="purchaseOrderLine.unit" form-view="unit-form" grid-view="unit-grid"/>
<field name="availableQty" readonlyIf="stateSelect != 1"/>
<field name="purchaseOrderLine.desiredDelivDate"/>
<field name="price" readonlyIf="stateSelect != 1"/>
<field name="estimatedDelivDate" readonlyIf="stateSelect != 1"/>
<button name="submit" title="Submit" showIf="stateSelect == 1" onClick="save,action-purchase-order-supplier-line-record-submit,save"/>
</panel>
<panel name="commentsPanel">
<field name="comments" colSpan="12"/>
</panel>
</form>
<action-record name="action-purchase-order-supplier-line-record-request" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<field name="stateSelect" expr="1"/>
</action-record>
<action-record name="action-purchase-order-supplier-line-record-submit" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<field name="stateSelect" expr="2"/>
</action-record>
<action-record name="action-purchase-order-supplier-line-record-not-accept" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<field name="stateSelect" expr="4"/>
</action-record>
<action-record name="action-purchase-order-supplier-line-record-cancel" model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<field name="stateSelect" expr="5"/>
</action-record>
<action-method name="action-purchase-order-supplier-line-method-accept">
<call class="com.axelor.apps.suppliermanagement.web.PurchaseOrderSupplierLineController" method="accept"/>
</action-method>
<action-method name="action-purchase-order-supplier-line-method-supplier-partner-domain">
<call class="com.axelor.apps.suppliermanagement.web.PurchaseOrderSupplierLineController" method="supplierPartnerDomain"/>
</action-method>
<action-attrs name="action-purchase-order-supplier-line-attrs-new">
<attribute name="readonly" for="supplierPartner" expr="eval: false"/>
</action-attrs>
</object-views>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<!-- Nomenclature : * name : "interfaceName" + "fieldName" + ".select" -->
<selection name="isuppliermanagement.purchase.order.supplier.line.state.select">
<option value="1">Requested</option>
<option value="2">Submitted</option>
<option value="3">Accepted</option>
<option value="4">Not accepted</option>
<option value="5">Canceled</option>
</selection>
</object-views>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<action-view name="wizard-supplier-view" title="My space" model="com.axelor.apps.base.db.Wizard">
<view type="form" name="wizard-supplier-form"/>
<view-param name="show-toolbar" value="false"/>
</action-view>
<form name="wizard-supplier-form" title="My space" model="com.axelor.apps.base.db.Wizard">
<panel name="mainPanel" hidden="true">
<field name="id"/>
</panel>
<panel name="actionsPanel">
<button name="myPurchaseOrderBtn" title="My purchase orders" onClick="wizard-supplier-form-open-my-purchase-order" css="img-button client-img-menu" icon="img/128px/clientMenuSo_128px.jpg"/>
<button name="myRFQToCompleteBtn" title="My R.F.Q. to complete" onClick="wizard-supplier-form-open-my-rfq-to-complete" css="img-button client-img-menu" icon="img/128px/clientMenuInvoice_128px.jpg"/>
<button name="myRFQBtn" title="My R.F.Q." onClick="wizard-supplier-form-open-my-rfq" css="img-button client-img-menu" icon="img/128px/clientMenuTicket_128px.jpg"/>
<button name="myStockMoveBtn" title="My deliveries" onClick="wizard-supplier-form-open-stock-move" css="img-button client-img-menu" icon="img/128px/clientMenuTicket_128px.jpg"/>
</panel>
</form>
<action-view name="wizard-supplier-form-open-my-purchase-order" title="My purchase orders"
model="com.axelor.apps.purchase.db.PurchaseOrder">
<view type="grid" name="purchase-order-grid"/>
<view type="form" name="purchase-order-form"/>
<domain>self.supplierPartner = :_myPartner AND self.statusSelect in (2,3,4,5)</domain>
<context name="_myPartner" expr="call:com.axelor.apps.base.service.user.UserService:getUserPartner()"/>
</action-view>
<action-view name="wizard-supplier-form-open-my-rfq-to-complete" title="My R.F.Q. to complete"
model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<view type="grid" name="purchase-order-supplier-line-supplier-grid"/>
<view type="form" name="purchase-order-supplier-line-supplier-form"/>
<domain>self.supplierPartner = :_myPartner AND self.stateSelect = 1</domain>
<context name="_myPartner" expr="call:com.axelor.apps.base.service.user.UserService:getUserPartner()"/>
</action-view>
<action-view name="wizard-supplier-form-open-my-rfq" title="My R.F.Q."
model="com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine">
<view type="grid" name="purchase-order-supplier-line-supplier-grid"/>
<view type="form" name="purchase-order-supplier-line-supplier-form"/>
<domain>self.supplierPartner = :_myPartner AND self.stateSelect in (2,3,4)</domain>
<context name="_myPartner" expr="call:com.axelor.apps.base.service.user.UserService:getUserPartner()"/>
</action-view>
<action-view name="wizard-supplier-form-open-stock-move" title="My deliveries"
model="com.axelor.apps.stock.db.StockMove">
<view type="grid" name="stock-move-supplier-grid"/>
<view type="form" name="stock-move-supplier-form"/>
<domain>self.typeSelect = 3 AND self.partner = :_myPartner</domain>
<context name="_myPartner" expr="call:com.axelor.apps.base.service.user.UserService:getUserPartner()"/>
</action-view>
<grid name="stock-move-supplier-grid" title="Stock moves" model="com.axelor.apps.stock.db.StockMove" orderBy="-estimatedDate" canNew="false" canDelete="false">
<field name="stockMoveSeq"/>
<field name="estimatedDate"/>
<field name="realDate"/>
<field name="toAddress"/>
<field name="company" if="__config__.app.getApp('base').getEnableMultiCompany()"/>
<field name="partner"/>
<field name="statusSelect"/>
</grid>
<form name="stock-move-supplier-form" title="Stock move" model="com.axelor.apps.stock.db.StockMove" canNew="false" canDelete="false" canCopy="false">
<panel name="statusPanel" >
<field name="statusSelect" readonly="true" widget="NavSelect" colSpan="12"/>
</panel>
<panel name="generalInfoPanel" readonly="true">
<panel name="detailsPanel" title="Stock move reference">
<field name="stockMoveSeq" colSpan="12"/>
<field name="name" colSpan="12"/>
<field name="company" widget="SuggestBox" form-view="company-form" colSpan="12"/>
<field name="partner" domain="self.isContact = false" form-view="partner-form" grid-view="partner-grid" colSpan="12"/>
</panel>
<panel name="stockMoveInformationsPanel" title="Stock move informations">
<field name="estimatedDate" colSpan="12"/>
<field name="realDate" title="Receipt date" colSpan="12"/>
<field name="fromAddress" showIf="typeSelect == 3" colSpan="12"/>
</panel>
</panel>
<panel-related name="stockMoveLineListPanel" field="stockMoveLineList" readonlyIf="company == null || fromStockLocation == null" colSpan="12" canNew="false" canRemove="false" form-view="stock-move-line-supplier-form" grid-view="stock-move-line-supplier-grid"/>
</form>
<grid name="stock-move-line-supplier-grid" title="Stock move lines" model="com.axelor.apps.stock.db.StockMoveLine" editable="true">
<field name="product" readonly="true"/>
<field name="shippedQty"/>
<field name="unit" readonly="true"/>
<field name="shippedDate"/>
</grid>
<form name="stock-move-line-supplier-form" title="Stock move line" model="com.axelor.apps.stock.db.StockMoveLine">
<panel name="mainPanel" >
<field name="product" readonly="true"/>
<field name="shippedQty"/>
<field name="unit" readonly="true"/>
<field name="shippedDate"/>
</panel>
</form>
</object-views>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="testUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/axelor-erp" />
<property name="javax.persistence.jdbc.user" value="axelor" />
<property name="javax.persistence.jdbc.password" value="" />
<!--
value="create" to build a new database on each run;
value="update" to modify an existing database;
value="create-drop" means the same as "create" but also drops tables when Hibernate closes;
value="validate" makes no changes to the database
-->
<property name="hibernate.hbm2ddl.auto" value="none" />
<!--
<property name="hibernate.show_sql" value="true"/>
-->
</properties>
</persistence-unit>
</persistence>