use of de.metas.purchasecandidate.PurchaseCandidate in project metasfresh-webui-api by metasfresh.
the class PurchaseRowsLoader method handleThrowableForAsyncAvailabilityCheck.
private void handleThrowableForAsyncAvailabilityCheck(@Nullable final Throwable throwable) {
if (throwable == null) {
return;
}
if (throwable instanceof AvailabilityException) {
final AvailabilityException availabilityException = (AvailabilityException) throwable;
final List<DocumentId> changedRowIds = new ArrayList<>();
final Set<Entry<PurchaseCandidate, Throwable>> entrySet = availabilityException.getPurchaseCandidate2Throwable().entrySet();
for (final Entry<PurchaseCandidate, Throwable> purchaseCandidate2throwable : entrySet) {
final PurchaseRow purchaseRowToAugment = purchaseCandidate2purchaseRow.get(purchaseCandidate2throwable.getKey());
final PurchaseRow availabilityResultRow = purchaseRowFactory.rowFromThrowableBuilder().parentRow(purchaseRowToAugment).throwable(purchaseCandidate2throwable.getValue()).build();
purchaseRowToAugment.setAvailabilityInfoRows(ImmutableList.of(availabilityResultRow));
changedRowIds.add(purchaseRowToAugment.getId());
}
notifyViewOfChanges(changedRowIds);
} else {
// TODO: display an error-message in the webui
}
}
use of de.metas.purchasecandidate.PurchaseCandidate in project metasfresh-webui-api by metasfresh.
the class SalesOrder2PurchaseViewFactory method saveRowsAndEnqueueIfOrderCompleted.
private void saveRowsAndEnqueueIfOrderCompleted(final PurchaseView purchaseView) {
final List<PurchaseCandidate> purchaseCandidates = saveRows(purchaseView);
if (purchaseCandidates.isEmpty()) {
return;
}
//
// If the sales order was already completed, enqueue the purchase candidates
final I_C_Order salesOrder = getSingleSalesOrder(purchaseCandidates);
if (IDocument.STATUS_Completed.equals(salesOrder.getDocStatus())) {
final Set<Integer> purchaseCandidateIds = purchaseCandidates.stream().filter(purchaseCandidate -> !purchaseCandidate.isProcessedOrLocked()).filter(purchaseCandidate -> purchaseCandidate.getQtyToPurchase().signum() > 0).map(PurchaseCandidate::getPurchaseCandidateId).collect(ImmutableSet.toImmutableSet());
if (purchaseCandidateIds.size() > 0) {
C_PurchaseCandidates_GeneratePurchaseOrders.enqueue(purchaseCandidateIds);
}
}
}
use of de.metas.purchasecandidate.PurchaseCandidate in project metasfresh-webui-api by metasfresh.
the class PurchaseRowsLoaderTest method test.
@Test
public void test() {
final I_C_OrderLine orderLine = newInstance(I_C_OrderLine.class);
orderLine.setM_Product(product);
orderLine.setC_Order(order);
orderLine.setDatePromised(SystemTime.asTimestamp());
save(orderLine);
final I_C_BPartner_Product bPartnerProduct = newInstance(I_C_BPartner_Product.class);
bPartnerProduct.setC_BPartner_Vendor(bPartnerVendor);
bPartnerProduct.setM_Product(product);
bPartnerProduct.setVendorProductNo("bPartnerProduct.VendorProductNo");
bPartnerProduct.setProductName("bPartnerProduct.ProductName");
save(bPartnerProduct);
final PurchaseCandidate purchaseCandidate = createPurchaseCandidate(orderLine, bPartnerProduct);
final //
ImmutableList<SalesOrderLineWithCandidates> salesOrderLinesWithPurchaseCandidates = createSalesOrderLinesWithPurchaseCandidates(orderLine, purchaseCandidate);
// @formatter:off
new Expectations() {
{
salesOrderLines.getSalesOrderLinesWithCandidates();
result = salesOrderLinesWithPurchaseCandidates;
}
};
// @formatter:on
final Multimap<PurchaseCandidate, AvailabilityResult> checkAvailabilityResult = ArrayListMultimap.create();
checkAvailabilityResult.put(purchaseCandidate, AvailabilityResult.builder().purchaseCandidate(purchaseCandidate).qty(BigDecimal.TEN).type(Type.AVAILABLE).build());
// @formatter:off
new Expectations() {
{
salesOrderLines.checkAvailability();
result = checkAvailabilityResult;
}
};
// @formatter:on
final PurchaseRowsLoader loader = PurchaseRowsLoader.builder().salesOrderLines(salesOrderLines).purchaseRowFactory(new PurchaseRowFactory()).viewSupplier(() -> null).build();
final List<PurchaseRow> groupRows = loader.load();
assertThat(groupRows).hasSize(1);
final PurchaseRow groupRow = groupRows.get(0);
assertThat(groupRow.getRowType()).isEqualTo(PurchaseRowType.GROUP);
assertThat(groupRow.getIncludedRows()).hasSize(1);
final PurchaseRow purchaseRow = groupRow.getIncludedRows().get(0);
assertThat(purchaseRow.getRowType()).isEqualTo(PurchaseRowType.LINE);
assertThat(purchaseRow.getIncludedRows()).isEmpty();
loader.createAndAddAvailabilityResultRows();
assertThat(purchaseRow.getIncludedRows()).hasSize(1);
final PurchaseRow availabilityRow = purchaseRow.getIncludedRows().get(0);
assertThat(availabilityRow.getRowType()).isEqualTo(PurchaseRowType.AVAILABILITY_DETAIL);
assertThat(availabilityRow.getRowId().toDocumentId()).isNotEqualTo(purchaseRow.getRowId().toDocumentId());
}
use of de.metas.purchasecandidate.PurchaseCandidate in project metasfresh-webui-api by metasfresh.
the class PurchaseRowsLoaderTest method createPurchaseCandidate.
private static PurchaseCandidate createPurchaseCandidate(final I_C_OrderLine orderLine, final I_C_BPartner_Product bPartnerProduct) {
final VendorProductInfo vendorProductInfo = VendorProductInfo.fromDataRecord(bPartnerProduct);
final PurchaseCandidate purchaseCandidate = PurchaseCandidate.builder().orgId(20).dateRequired(orderLine.getDatePromised()).productId(orderLine.getM_Product_ID()).qtyToPurchase(orderLine.getQtyOrdered()).salesOrderId(orderLine.getC_Order_ID()).salesOrderLineId(orderLine.getC_OrderLine_ID()).uomId(orderLine.getM_Product().getC_UOM_ID()).vendorBPartnerId(vendorProductInfo.getVendorBPartnerId()).vendorProductInfo(vendorProductInfo).warehouseId(30).build();
return purchaseCandidate;
}
use of de.metas.purchasecandidate.PurchaseCandidate in project metasfresh-webui-api by metasfresh.
the class PurchaseRowFactoryTest method test.
@Test
public void test() {
final PurchaseCandidate purchaseCandidate = createPurchaseCandidate(30);
final PurchaseRowFactory purchaseRowFactory = new PurchaseRowFactory();
final PurchaseRow candidateRow = purchaseRowFactory.rowFromPurchaseCandidateBuilder().purchaseCandidate(purchaseCandidate).vendorProductInfo(purchaseCandidate.getVendorProductInfo()).datePromised(SystemTime.asTimestamp()).build();
final DocumentId id = candidateRow.getId();
final PurchaseRowId purchaseRowId = PurchaseRowId.fromDocumentId(id);
assertThat(purchaseRowId.getVendorBPartnerId()).isEqualTo(purchaseCandidate.getVendorBPartnerId());
assertThat(purchaseRowId.getSalesOrderLineId()).isEqualTo(purchaseCandidate.getSalesOrderLineId());
assertThat(purchaseRowId.getProcessedPurchaseCandidateId()).isEqualTo(30);
}
Aggregations