use of com.axelor.apps.purchase.db.PurchaseOrder in project axelor-open-suite by axelor.
the class PurchaseOrderController method supplierPartnerDomain.
/**
* Called on supplier partner select. Set the domain for the field supplierPartner
*
* @param request
* @param response
*/
public void supplierPartnerDomain(ActionRequest request, ActionResponse response) {
try {
PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class);
Company company = purchaseOrder.getCompany();
long companyId = company.getPartner() == null ? 0L : company.getPartner().getId();
String domain = String.format("self.id != %d AND self.isContact = false AND self.isSupplier = true", companyId);
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);
}
domain += " AND :company member of self.companySet";
response.setAttr("supplierPartner", "domain", domain);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
use of com.axelor.apps.purchase.db.PurchaseOrder in project axelor-open-suite by axelor.
the class PurchaseOrderController method compute.
public void compute(ActionRequest request, ActionResponse response) {
PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class);
if (purchaseOrder != null) {
try {
purchaseOrder = Beans.get(PurchaseOrderService.class).computePurchaseOrder(purchaseOrder);
response.setValues(purchaseOrder);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
}
use of com.axelor.apps.purchase.db.PurchaseOrder in project axelor-open-suite by axelor.
the class PurchaseOrderController method cancel.
public void cancel(ActionRequest request, ActionResponse response) {
try {
PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class);
purchaseOrder = Beans.get(PurchaseOrderRepository.class).find(purchaseOrder.getId());
Beans.get(PurchaseOrderWorkflowService.class).cancelPurchaseOrder(purchaseOrder);
response.setReload(true);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
use of com.axelor.apps.purchase.db.PurchaseOrder in project axelor-open-suite by axelor.
the class PurchaseOrderController method mergePurchaseOrder.
// Generate single purchase order from several
@SuppressWarnings({ "rawtypes", "unchecked" })
public void mergePurchaseOrder(ActionRequest request, ActionResponse response) {
List<PurchaseOrder> purchaseOrderList = new ArrayList<PurchaseOrder>();
List<Long> purchaseOrderIdList = new ArrayList<Long>();
boolean fromPopup = false;
if (request.getContext().get("purchaseOrderToMerge") != null) {
if (request.getContext().get("purchaseOrderToMerge") instanceof List) {
// No confirmation popup, purchase orders are content in a parameter list
List<Map> purchaseOrderMap = (List<Map>) request.getContext().get("purchaseOrderToMerge");
for (Map map : purchaseOrderMap) {
purchaseOrderIdList.add(new Long((Integer) map.get("id")));
}
} else {
// After confirmation popup, purchase order's id are in a string separated by ","
String purchaseOrderIdListStr = (String) request.getContext().get("purchaseOrderToMerge");
for (String purchaseOrderId : purchaseOrderIdListStr.split(",")) {
purchaseOrderIdList.add(new Long(purchaseOrderId));
}
fromPopup = true;
}
}
// Check if currency, supplierPartner, company and tradingName are the same for all selected
// purchase orders
Currency commonCurrency = null;
Partner commonSupplierPartner = null;
Company commonCompany = null;
Partner commonContactPartner = null;
TradingName commonTradingName = null;
// Useful to determine if a difference exists between contact partners of all purchase orders
boolean existContactPartnerDiff = false;
PriceList commonPriceList = null;
// Useful to determine if a difference exists between price lists of all purchase orders
boolean existPriceListDiff = false;
PurchaseOrder purchaseOrderTemp;
boolean allTradingNamesAreNull = true;
int count = 1;
for (Long purchaseOrderId : purchaseOrderIdList) {
purchaseOrderTemp = JPA.em().find(PurchaseOrder.class, purchaseOrderId);
purchaseOrderList.add(purchaseOrderTemp);
if (count == 1) {
commonCurrency = purchaseOrderTemp.getCurrency();
commonSupplierPartner = purchaseOrderTemp.getSupplierPartner();
commonCompany = purchaseOrderTemp.getCompany();
commonContactPartner = purchaseOrderTemp.getContactPartner();
commonPriceList = purchaseOrderTemp.getPriceList();
commonTradingName = purchaseOrderTemp.getTradingName();
allTradingNamesAreNull = commonTradingName == null;
} else {
if (commonCurrency != null && !commonCurrency.equals(purchaseOrderTemp.getCurrency())) {
commonCurrency = null;
}
if (commonSupplierPartner != null && !commonSupplierPartner.equals(purchaseOrderTemp.getSupplierPartner())) {
commonSupplierPartner = null;
}
if (commonCompany != null && !commonCompany.equals(purchaseOrderTemp.getCompany())) {
commonCompany = null;
}
if (commonContactPartner != null && !commonContactPartner.equals(purchaseOrderTemp.getContactPartner())) {
commonContactPartner = null;
existContactPartnerDiff = true;
}
if (commonPriceList != null && !commonPriceList.equals(purchaseOrderTemp.getPriceList())) {
commonPriceList = null;
existPriceListDiff = true;
}
if (!Objects.equals(commonTradingName, purchaseOrderTemp.getTradingName())) {
commonTradingName = null;
allTradingNamesAreNull = false;
}
}
count++;
}
StringBuilder fieldErrors = new StringBuilder();
if (commonCurrency == null) {
fieldErrors.append(I18n.get(IExceptionMessage.PURCHASE_ORDER_MERGE_ERROR_CURRENCY));
}
if (commonSupplierPartner == null) {
if (fieldErrors.length() > 0) {
fieldErrors.append("<br/>");
}
fieldErrors.append(I18n.get(IExceptionMessage.PURCHASE_ORDER_MERGE_ERROR_SUPPLIER_PARTNER));
}
if (commonCompany == null) {
if (fieldErrors.length() > 0) {
fieldErrors.append("<br/>");
}
fieldErrors.append(I18n.get(IExceptionMessage.PURCHASE_ORDER_MERGE_ERROR_COMPANY));
}
if (commonTradingName == null && !allTradingNamesAreNull) {
fieldErrors.append(I18n.get(IExceptionMessage.PURCHASE_ORDER_MERGE_ERROR_TRADING_NAME));
}
if (fieldErrors.length() > 0) {
response.setFlash(fieldErrors.toString());
return;
}
// Check if priceList or contactPartner are content in parameters
if (request.getContext().get("priceList") != null) {
commonPriceList = JPA.em().find(PriceList.class, new Long((Integer) ((Map) request.getContext().get("priceList")).get("id")));
}
if (request.getContext().get("contactPartner") != null) {
commonContactPartner = JPA.em().find(Partner.class, new Long((Integer) ((Map) request.getContext().get("contactPartner")).get("id")));
}
if (!fromPopup && (existContactPartnerDiff || existPriceListDiff)) {
// Need to display intermediate screen to select some values
ActionViewBuilder confirmView = ActionView.define("Confirm merge purchase order").model(Wizard.class.getName()).add("form", "purchase-order-merge-confirm-form").param("popup", "true").param("show-toolbar", "false").param("show-confirm", "false").param("popup-save", "false").param("forceEdit", "true");
if (existPriceListDiff) {
confirmView.context("contextPriceListToCheck", "true");
}
if (existContactPartnerDiff) {
confirmView.context("contextContactPartnerToCheck", "true");
confirmView.context("contextPartnerId", commonSupplierPartner.getId().toString());
}
confirmView.context("purchaseOrderToMerge", Joiner.on(",").join(purchaseOrderIdList));
response.setView(confirmView.map());
return;
}
try {
PurchaseOrder purchaseOrder = Beans.get(PurchaseOrderService.class).mergePurchaseOrders(purchaseOrderList, commonCurrency, commonSupplierPartner, commonCompany, commonContactPartner, commonPriceList, commonTradingName);
if (purchaseOrder != null) {
// Open the generated purchase order in a new tab
response.setView(ActionView.define("Purchase order").model(PurchaseOrder.class.getName()).add("grid", "purchase-order-grid").add("form", "purchase-order-form").param("search-filters", "purchase-order-filters").param("forceEdit", "true").context("_showRecord", String.valueOf(purchaseOrder.getId())).map());
response.setCanClose(true);
}
} catch (Exception e) {
response.setFlash(e.getLocalizedMessage());
}
}
use of com.axelor.apps.purchase.db.PurchaseOrder in project axelor-open-suite by axelor.
the class PurchaseOrderLineController method updateProductInformation.
public void updateProductInformation(ActionRequest request, ActionResponse response) {
Context context = request.getContext();
PurchaseOrderLine purchaseOrderLine = context.asType(PurchaseOrderLine.class);
PurchaseOrder purchaseOrder = this.getPurchaseOrder(context);
if (purchaseOrder == null || purchaseOrderLine.getProduct() == null) {
return;
}
try {
PurchaseOrderLineService purchaseOrderLineService = Beans.get(PurchaseOrderLineService.class);
BigDecimal price = purchaseOrderLine.getProduct().getInAti() ? purchaseOrderLineService.getInTaxUnitPrice(purchaseOrder, purchaseOrderLine, purchaseOrderLine.getTaxLine()) : purchaseOrderLineService.getExTaxUnitPrice(purchaseOrder, purchaseOrderLine, purchaseOrderLine.getTaxLine());
Map<String, Object> catalogInfo = purchaseOrderLineService.updateInfoFromCatalog(purchaseOrder, purchaseOrderLine);
Product product = purchaseOrderLine.getProduct();
String productName = null;
String productCode = null;
ProductCompanyService productCompanyService = Beans.get(ProductCompanyService.class);
if (catalogInfo != null) {
if (catalogInfo.get("price") != null) {
price = (BigDecimal) catalogInfo.get("price");
}
productName = catalogInfo.get("productName") != null ? (String) catalogInfo.get("productName") : (String) productCompanyService.get(product, "name", purchaseOrder.getCompany());
productCode = catalogInfo.get("productCode") != null ? (String) catalogInfo.get("productCode") : (String) productCompanyService.get(product, "code", purchaseOrder.getCompany());
} else {
productName = (String) productCompanyService.get(product, "name", purchaseOrder.getCompany());
productCode = (String) productCompanyService.get(product, "code", purchaseOrder.getCompany());
}
if (purchaseOrderLine.getProductName() == null) {
response.setValue("productName", productName);
}
if (purchaseOrderLine.getProductCode() == null) {
response.setValue("productCode", productCode);
}
Map<String, Object> discounts = purchaseOrderLineService.getDiscountsFromPriceLists(purchaseOrder, purchaseOrderLine, price);
if (discounts != null) {
if (discounts.get("price") != null) {
price = (BigDecimal) discounts.get("price");
}
if (purchaseOrderLine.getProduct().getInAti() != purchaseOrder.getInAti() && (Integer) discounts.get("discountTypeSelect") != PriceListLineRepository.AMOUNT_TYPE_PERCENT) {
response.setValue("discountAmount", purchaseOrderLineService.convertUnitPrice(purchaseOrderLine.getProduct().getInAti(), purchaseOrderLine.getTaxLine(), (BigDecimal) discounts.get("discountAmount")));
} else {
response.setValue("discountAmount", discounts.get("discountAmount"));
}
response.setValue("discountTypeSelect", discounts.get("discountTypeSelect"));
}
if (price.compareTo(purchaseOrderLine.getProduct().getInAti() ? purchaseOrderLine.getInTaxPrice() : purchaseOrderLine.getPrice()) != 0) {
if (purchaseOrderLine.getProduct().getInAti()) {
response.setValue("inTaxPrice", price);
response.setValue("price", purchaseOrderLineService.convertUnitPrice(true, purchaseOrderLine.getTaxLine(), price));
} else {
response.setValue("price", price);
response.setValue("inTaxPrice", purchaseOrderLineService.convertUnitPrice(false, purchaseOrderLine.getTaxLine(), price));
}
}
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
Aggregations