private void NotifyReceivedPurchaseOrders() { _log.Info("Searching for received purchase orders"); var criteria = new PerpetualInventoryTransactionCriteria() { ProcessType = ProcessType.PurchaseOrderReceiptNotification, TransactionType = TransactionType.QuantityAdjust }; var poReceiptRecords = _repository.FindPerpetualInventoryTransfers(criteria); var adjustmentsToIgnore = poReceiptRecords.Where(adj => String.IsNullOrWhiteSpace(adj.Ponumber)).ToList(); MarkNotificationRecordsAsProcessed(adjustmentsToIgnore, ProcessType.PurchaseOrderReceiptNotification); var recordsWithPos = poReceiptRecords.Except(adjustmentsToIgnore).ToList(); var distinctPos = recordsWithPos.Select(item => item.Ponumber).Distinct().ToList(); foreach (var poNumber in distinctPos) { var receiptRecord = recordsWithPos.First(r => r.Ponumber == poNumber); var inventoryAdjustmentsForPo = _repository.FindPerpetualInventoryTransfers( new PerpetualInventoryTransactionCriteria() { ProcessType = ProcessType.PurchaseOrderReceiptNotification, PurchaseOrderNumber = poNumber, TransactionType = TransactionType.InventoryAdjustment }); var firstPoInventoryAdjustment = recordsWithPos .Where(r => r.Ponumber == poNumber) .OrderBy(r => MainframeExtensions.ParseDateTime(r.DateCreated, r.TimeCreated)) .First(); var receiptList = SumPixItems(inventoryAdjustmentsForPo); var receipt = new PurchaseOrderReceiptEvent( firstPoInventoryAdjustment.Ponumber, MainframeExtensions.ParseDateTime(firstPoInventoryAdjustment.DateCreated, firstPoInventoryAdjustment.TimeCreated), receiptList ); try { _apiAccess.PurchaseOrderReceived(receipt); } catch (Exception ex) { _log.Exception("Failed to notify service of PO Receipt", ex); } var toMarkComplete = inventoryAdjustmentsForPo.Concat(new[] { receiptRecord }).ToList(); MarkNotificationRecordsAsProcessed(toMarkComplete, ProcessType.PurchaseOrderReceiptNotification); } }
private void NotifyStockedPurchaseOrders(List <ManhattanPerpetualInventoryTransfer> purchaseOrderReceiptNotificationRecords) { var poReceiptGroup = purchaseOrderReceiptNotificationRecords .GroupBy(po => po.Ponumber) .ToList(); foreach (var poReceiptRecordGroup in poReceiptGroup) { _log.Info(String.Format("Processing Po Receipt {0}", poReceiptRecordGroup.Key)); var productQuantities = SumPixItems(poReceiptRecordGroup.ToList()); var stockedEvent = new PurchaseOrderStockedEvent( poReceiptRecordGroup.First().Ponumber, poReceiptRecordGroup.Max(poGroup => MainframeExtensions.ParseDateTime(poGroup.DateCreated, poGroup.TimeCreated)), productQuantities); _apiAccess.PurchaseOrderStocked(stockedEvent); MarkNotificationRecordsAsProcessed(poReceiptRecordGroup.ToList(), ProcessType.InventoryAdjustmentNotification); } }
public Order ToOrder(ICarrierReadRepository carrierReadRepository, ICountryReader countryReader) { int soldToCountry, shipToCountry; int.TryParse(SoldToCountry, out soldToCountry); int.TryParse(ShipToCountry, out shipToCountry); return(new Order { BillingAddress = new Address { City = SoldToCity, Country = countryReader.GetCountryAbbreviation(soldToCountry), Line1 = SoldToAddr1, Line2 = SoldToAddr2, Line3 = SoldToAddr3, Name = SoldToName, State = SoldToState, Zip = SoldToZip }, ShippingAddress = new Address { City = ShipToCity, Country = countryReader.GetCountryAbbreviation(shipToCountry), Line1 = ShipToAddr1, Line2 = ShipToAddr2, Line3 = ShipToAddr3, Name = ShipToName, State = ShipToState, Zip = ShipToZip }, OrderNumber = PickticketControlNumber, //MiscellaneousIns20Byte11, ? OrderDate = (OrderDate != 0 ? MainframeExtensions.ParseDateTime(OrderDate, 0, DateTimeStyles.AssumeUniversal) : MainframeExtensions.ParseDateTime(DateCreated, 0, DateTimeStyles.AssumeUniversal)).ToUniversalTime(), BillingPhone = TelephoneNumber, ShippingPhone = TelephoneNumber, EmailAddress = "*****@*****.**", ShippingMethod = carrierReadRepository.GetOmsShipMethod(ShipVia) }); }