Пример #1
0
            public void WhenMainframeTransactionFails_ThrowsHostTransactionFailureException()
            {
                // arrange
                int WSAECONNRESET = 10054;

                MockDependents mockDependents = new MockDependents();

                mockDependents.MockOrderSocketConnectionRepository
                .Setup(m => m.Receive())
                .Throws(BuildMockException(WSAECONNRESET));

                IOrderQueueLogic testunit = MakeUnitToBeTested(true, mockDependents);

                // act
                string    jsonOrderFile = GetMockData("OrderFile.json");
                OrderFile order         = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);
                Action    sendToHost    = () => testunit.SendToHost(order);

                // assert
                sendToHost.Should()
                .Throw <HostTransactionFailureException>()
                .WithInnerException <SocketResponseException>()
                .WithInnerException <IOException>()
                .WithMessage("*connection was forcibly closed by the remote host*");
            }
Пример #2
0
            public void WhenMainframeDoesNotRespond_ThrowsTimeoutException()
            {
                // arrange
                int WSAETIMEDOUT = 10060;

                MockDependents mockDependents = new MockDependents();

                mockDependents.MockOrderSocketConnectionRepository
                .Setup(m => m.Receive())
                .Throws(BuildMockException(WSAETIMEDOUT));

                IOrderQueueLogic testunit = MakeUnitToBeTested(true, mockDependents);

                // act
                string    jsonOrderFile = GetMockData("OrderFile.json");
                OrderFile order         = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);
                Action    sendToHost    = () => testunit.SendToHost(order);

                // assert
                sendToHost.Should()
                .Throw <TimeoutException>()
                .WithInnerException <SocketResponseException>()
                .WithInnerException <IOException>()
                .WithMessage("*host has failed to respond*");
            }
Пример #3
0
        public void SendToHost(OrderFile order)
        {
            if (order.Header.OrderType == OrderType.SpecialOrder) // KSOS
            {
                // Insert to KSOS - RH then RI
                _specialOrder.Create(order);
            }
            else // direct to main frame
            {
                // open connection and call program
                _mfConnection.Connect();

                SendStartTransaction(order.Header.ControlNumber.ToString());

                // start the order transmission to the mainframe
                _mfConnection.Send("OTX");

                SendHeaderRecordToHost(order.Header);
                SendDetailRecordsToHost(order.Details, order.Header.ControlNumber);
                SendEndOfRecordToHost();

                // stop order transmission to the mainframe
                _mfConnection.Send("STOP");

                _mfConnection.Close();
            }
        }
Пример #4
0
        private void ConsumeMessages()
        {
            if (Configuration.OrderServiceKDOELogExtension == null)
            {
                throw new Exception("AppSetting OrderServiceKDOELogExtension is not set.");
            }
            while (consumingMessages && doListenForMessagesInTask)
            {
                string msg = ConsumeMessageFromQueue();

                if (msg != null)
                {
                    eventLogRepository.WriteInformationLog("Processing from queue. OrderHistory: {QueueMessage}".InjectSingleValue("QueueMessage", msg));

                    OrderFile order = JsonConvert.DeserializeObject <OrderFile>(msg);

                    string json = JsonConvert.SerializeObject(order, Formatting.Indented);

                    System.IO.File.WriteAllText
                        (Path.Combine(Configuration.OrderServiceKDOELogPath,
                                      string.Format("{0}{1}{2}.{3}", Configuration.OrderServiceKDOELogPre,
                                                    order.Header.ControlNumber.ToString("D7"),
                                                    Configuration.OrderServiceKDOELogPost,
                                                    Configuration.OrderServiceKDOELogExtension)),
                        json);
                }
                else
                {
                    consumingMessages = false;
                }
            }
        }
Пример #5
0
 private void accordionControlElement47_Click(object sender, EventArgs e)
 {
     of = new OrderFile();
     of.Show();
     of.Dock = DockStyle.Fill;
     panel2.Controls.Clear();
     panel2.Controls.Add(of);
 }
Пример #6
0
        public void WriteOrder(OrderFile orderFile)
        {
            XmlSerializer xs = new XmlSerializer(typeof(Order));
            TextWriter    tw = new StreamWriter(@"..\..\LocalData\Orders\" + orderFile.Order.Name + ".ord");

            xs.Serialize(tw, orderFile.Order);
            tw.Close();
        }
Пример #7
0
        public Task AddFile(int orderid)
        {
            return(Task.Run(() =>
            {
                var order = _dbcontext.Orders.Where(o => o.Id == orderid).AsNoTracking().FirstOrDefault();
                if (order == null)
                {
                    throw new NotFoundException();
                }

                var file = _httpContextAccessor.HttpContext.Request.Form.Files[0];
                Stream stream = file.OpenReadStream();

                if (stream.Length > 0)
                {
                    string filePathFull = Path.Combine(_filePath, orderid.ToString()); //Path.GetFileName(file.FileName)
                    if (!Directory.Exists(filePathFull))
                    {
                        Directory.CreateDirectory(filePathFull);
                    }

                    string filename = Guid.NewGuid().ToString(); // + Path.GetExtension(file.FileName);

                    filePathFull = Path.Combine(filePathFull, filename);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        stream.CopyTo(ms);
                        File.WriteAllBytes(filePathFull, ms.ToArray());
                    }

                    try
                    {
                        OrderFile orderFile = new OrderFile()
                        {
                            Id = 0,
                            Filename = Path.GetFileName(file.FileName),
                            OrderId = order.Id,
                            RepFileName = filename,
                            userid = _authService.CurrentUserId()
                        };

                        _dbcontext.Update(orderFile);
                        _dbcontext.SaveChanges();
                    }
                    catch (Exception ex) {
                        if (File.Exists(filePathFull))
                        {
                            File.Delete(filePathFull);
                        }
                        GC.Collect();
                        throw new Exception("Ошибка загрузки файла");
                    }
                }
            }));
        }
Пример #8
0
        public void Create(OrderFile file)
        {
            var query = _specialOrderDbContext.RequestHeaderIds
                        .SqlQuery("dbo.spGetNextRequestHeaderId @branchId", new SqlParameter("branchId", file.Header.Branch));
            string headerId = query.FirstAsync().Result.CurrentId.PadLeft(CONFNUMBER_LENGTH, CONFNUMBER_PADDINGCHAR);

            // next, call create after converting OrderFile to RequestHeader
            RequestHeader requestHeader = BuildRequestHeader(file.Header, headerId);

            _specialOrderDbContext.RequestHeaders.Add(requestHeader);

            _specialOrderDbContext.Context.SaveChanges();


            foreach (OrderDetail detail in file.Details)
            {
                _specialOrderDbContext.RequestItems.Add(BuildRequestDetail(detail, headerId, file.Header.Branch, file.Header.CustomerNumber, file.Header.PONumber));
            }

            _specialOrderDbContext.Context.SaveChanges();

            // add idToUse to order history
            var orderHistory = _orderHistory.ReadByConfirmationNumber(file.Header.ControlNumber.ToString().PadLeft(CONFNUMBER_LENGTH, CONFNUMBER_PADDINGCHAR), "B").FirstOrDefault();

            if (orderHistory == null)
            {
                // this could only happen if the order was created in Dev and it is being processed in QA
                StringBuilder warningMessage = new StringBuilder();
                warningMessage.Append("Order not found in order history. This should only happen when created in one environment and processed in another(e.g. Local and Dev). ");
                warningMessage.Append("Affected order number is ");
                warningMessage.Append(file.Header.ControlNumber);

                _log.WriteWarningLog(warningMessage.ToString());
            }
            else
            {
                //details
                foreach (var orderItem in orderHistory.OrderDetails)
                {
                    var detailItems = file.Details.Where(x => x.ItemNumber == orderItem.ItemNumber.Trim()).ToList();
                    foreach (var detailItem in detailItems)
                    {
                        orderItem.ManufacturerId         = detailItem.ManufacturerName;//todo
                        orderItem.SpecialOrderLineNumber = detailItem.LineNumber.ToString();
                        orderItem.SpecialOrderHeaderId   = headerId;
                    }
                }
                _unitOfWork.SaveChangesAndClearContext();
            }

            requestHeader.OrderStatusId = KSOS_STATUS_SEND;
            _specialOrderDbContext.Context.SaveChanges();
        }
Пример #9
0
        public InFileOrderRepository()
        {
            lock (syncroot)
            {
                lines = File.ReadAllLines(Path);
            }

            foreach (var item in lines)
            {
                var order = OrderFile.DeSerialize(item);
                orderList.Add(order);
            }
        }
Пример #10
0
 /// <summary>
 /// No duplicated allowed
 /// </summary>
 /// <param name="newItem"></param>
 public void AddItem(OrderFile newItem)
 {
     //if (_newItems.Select(x => x.Chemical.Name).Contains(newItem.Chemical.Name))
     //{
     //    InventoryItem item = _newItems.First(x => x.Chemical.Name == newItem.Chemical.Name);
     //    item.QuantityKTWConventional += newItem.QuantityKTWConventional;
     //    item.QuantitySMWConventional += newItem.QuantitySMWConventional;
     //    item.QuantityKTWOrganic += newItem.QuantityKTWOrganic;
     //    item.QuantitySMWOrganic += newItem.QuantitySMWOrganic;
     //    item.QuantityTKM += newItem.QuantityTKM;
     //}
     //else
     _orders.Add(newItem);
     NotifyPropertyChanged("Orders");
 }
Пример #11
0
            public void Order_HasValidOrderDate()
            {
                // arrange
                string jsonOrderFile = GetMockData("OrderFile.json");

                //expect
                string   expectedCustomerNumber = "700766";
                DateTime expectedOrderdate      = new DateTime(2018, 07, 19, 16, 34, 51);

                // act
                OrderFile orderFile = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);

                // assert
                orderFile.Header.CustomerNumber.Should().Be(expectedCustomerNumber);
                orderFile.Header.OrderCreateDateTime.Should().Be(expectedOrderdate);
            }
Пример #12
0
        public async Task <long> SaveAsync(SaveOrderFileDto request)
        {
            var model = new OrderFile
            {
                FileName          = request.FileName,
                ReferenceFileName = request.ReferenceFileName,
                CreatedById       = request.CreatedById,
                CreatedOn         = request.CreatedOn,
                Status            = ImportFileStatus.Pending
            };

            _orderFileRepo.Add(model);
            await _orderFileRepo.SaveChangesAsync();

            return(model.Id);
        }
Пример #13
0
            public void WhenOrderTransmissionIsSuccessful_ExecutesInReasonableTimeSpan()
            {
                Queue <string> successfulResponseQueue = GetSuccessfulResponseQueue();

                MockDependents mockDependents = new MockDependents();

                mockDependents.MockOrderSocketConnectionRepository
                .Setup(m => m.Receive())
                .Returns(() => successfulResponseQueue.Dequeue());

                IOrderQueueLogic testunit = MakeUnitToBeTested(true, mockDependents);

                // act
                string    jsonOrderFile = GetMockData("OrderFile.json");
                OrderFile order         = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);
                Action    sendToHost    = () => testunit.SendToHost(order);

                // assert
                sendToHost.ExecutionTime().Should().BeLessOrEqualTo(TimeSpan.FromMilliseconds(1000));
            }
Пример #14
0
        private void ProcessObj(OBJ obj)
        {
            obj.Processed = true;
            OrderFile.Add(obj);

            var neighbors =
                (
                    from o in ObjectSet
                    where o.Processed == false
                    let dis = Distance.EuclideanDistance(obj.Element, o.Element)
                              where dis < Epsilon
                              orderby dis
                              select o
                ).ToList();

            if (neighbors.Count >= MinPoints)
            {
                obj.CoreDistance = Distance.EuclideanDistance(obj.Element, neighbors[MinPoints - 1].Element);
                UpdateOrderSeeds(neighbors, obj);
            }
        }
Пример #15
0
            public void WhenOrderTransmissionIsSuccessful_HasNoExceptions()
            {
                // arrange
                Queue <string> successfulResponseQueue = GetSuccessfulResponseQueue();

                MockDependents mockDependents = new MockDependents();

                mockDependents.MockOrderSocketConnectionRepository
                .Setup(m => m.Receive())
                .Returns(() => successfulResponseQueue.Dequeue());

                IOrderQueueLogic testunit = MakeUnitToBeTested(true, mockDependents);

                // act
                string    jsonOrderFile = GetMockData("OrderFile.json");
                OrderFile order         = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);
                Action    sendToHost    = () => testunit.SendToHost(order);

                // assert
                sendToHost.Should().NotThrow();
            }
Пример #16
0
        public List <OrderFile> getOrders()
        {
            DirectoryInfo d = new DirectoryInfo(@"..\..\LocalData\Orders");

            FileInfo[]       files  = d.GetFiles("*.ord");
            List <OrderFile> orders = new List <OrderFile>();

            XmlSerializer xs = new XmlSerializer(typeof(Order));

            foreach (FileInfo file in files)
            {
                string     fileLocation = @"..\..\LocalData\Orders\" + file.Name;
                FileStream fs           = new FileStream(fileLocation, FileMode.Open);
                XmlReader  reader       = XmlReader.Create(fs);
                Order      i            = (Order)xs.Deserialize(reader);
                OrderFile  orderFile    = new OrderFile(i, file);
                orders.Add(orderFile);
                fs.Close();
            }

            return(orders);
        }
Пример #17
0
        private void WorkOrderQueue(OrderQueueLocation queue)
        {
            string rawOrder = _orderQueue.ConsumeFromQueue(Configuration.RabbitMQOrderServer, Configuration.RabbitMQUserNameConsumer, Configuration.RabbitMQUserPasswordConsumer, Configuration.RabbitMQVHostOrder, GetSelectedQueue(queue));

            while (!string.IsNullOrEmpty(rawOrder))
            {
                OrderFile order = JsonConvert.DeserializeObject <OrderFile>(rawOrder);

                try
                {
                    _log.WriteInformationLog(string.Format("Sending order to mainframe({0})", order.Header.ControlNumber));

                    SendToHost(order);
                    SendToHistory(rawOrder);

                    _log.WriteInformationLog(string.Format("Order sent to mainframe({0})", order.Header.ControlNumber));
                }
                catch (Exception ex)
                {
                    string errorMessage = string.Format("Error while sending order({0})", order.Header.ControlNumber);
                    _log.WriteErrorLog(errorMessage, ex);
                    ExceptionEmail.Send(ex, "", errorMessage);

                    if (ex is EarlySocketException || ex is CancelledTransactionException)
                    {
                        SendToReprocess(rawOrder);
                    }
                    else
                    {
                        SendToError(ex, rawOrder);
                    }

                    throw;
                }

                rawOrder = _orderQueue.ConsumeFromQueue(Configuration.RabbitMQOrderServer, Configuration.RabbitMQUserNameConsumer, Configuration.RabbitMQUserPasswordConsumer, Configuration.RabbitMQVHostOrder, GetSelectedQueue(queue));
            }
        }
Пример #18
0
            public void WhenOrderTransmissionIsSuccessful_InvokesReceive()
            {
                // arrange
                Queue <string> successfulResponseQueue = GetSuccessfulResponseQueue();

                MockDependents mockDependents = new MockDependents();

                mockDependents.MockOrderSocketConnectionRepository
                .Setup(m => m.Receive())
                .Returns(() => successfulResponseQueue.Dequeue());

                IOrderQueueLogic testunit = MakeUnitToBeTested(true, mockDependents);

                // act
                string    jsonOrderFile = GetMockData("OrderFile.json");
                OrderFile order         = JsonConvert.DeserializeObject <OrderFile>(jsonOrderFile);
                Action    sendToHost    = () => testunit.SendToHost(order);

                sendToHost.Invoke();

                // assert
                mockDependents.MockOrderSocketConnectionRepository
                .Verify(m => m.Receive(), Times.Exactly(6), "not called.");
            }
Пример #19
0
        public void WriteFileToQueue(string orderingUserEmail, string orderNumber, CS.PurchaseOrder newPurchaseOrder, OrderType orderType, string catalogType, string dsrNumber,
                                     string addressStreet, string addressCity, string addressState, string addressZip)
        {
            var newOrderFile = new OrderFile()
            {
                SenderApplicationName = Configuration.ApplicationName,
                SenderProcessName     = "Send order to queue",

                Header = new OrderHeader()
                {
                    OrderingSystem      = OrderSource.Entree,
                    Branch              = newPurchaseOrder.Properties["BranchId"].ToString().ToUpper(),
                    CustomerNumber      = newPurchaseOrder.Properties["CustomerId"].ToString(),
                    DsrNumber           = dsrNumber,
                    AddressStreet       = addressStreet,
                    AddressCity         = addressCity,
                    AddressRegionCode   = addressState,
                    AddressPostalCode   = addressZip,
                    DeliveryDate        = newPurchaseOrder.Properties["RequestedShipDate"].ToString(),
                    PONumber            = newPurchaseOrder.Properties["PONumber"] == null ? string.Empty : newPurchaseOrder.Properties["PONumber"].ToString(),
                    Specialinstructions = string.Empty,
                    ControlNumber       = int.Parse(orderNumber),
                    OrderType           = orderType,
                    InvoiceNumber       = orderType == OrderType.NormalOrder ? string.Empty : (string)newPurchaseOrder.Properties["MasterNumber"],
                    OrderCreateDateTime = newPurchaseOrder.Properties["DateCreated"].ToString().ToDateTime().Value,
                    OrderSendDateTime   = DateTime.Now.ToLongDateFormatWithTime(),
                    UserId              = orderingUserEmail.ToUpper(),
                    OrderFilled         = false,
                    FutureOrder         = false,
                    CatalogType         = catalogType
                },
                Details = new List <OrderDetail>()
            };

            foreach (var lineItem in ((CommerceServer.Foundation.CommerceRelationshipList)newPurchaseOrder.Properties["LineItems"]))
            {
                var item = (CS.LineItem)lineItem.Target;
                if ((orderType == OrderType.ChangeOrder && String.IsNullOrEmpty(item.Status)) ||
                    orderType == OrderType.DeleteOrder)    // do not include line items a) during a change order with no change or b) during a delete order
                {
                    continue;
                }

                OrderDetail detail = new OrderDetail()
                {
                    ItemNumber                 = item.ProductId,
                    OrderedQuantity            = (short)item.Quantity,
                    UnitOfMeasure              = ((bool)item.Each ? UnitOfMeasure.Package : UnitOfMeasure.Case),
                    SellPrice                  = (double)item.PlacedPrice,
                    Catchweight                = (bool)item.CatchWeight,
                    LineNumber                 = Convert.ToInt16(lineItem.Target.Properties["LinePosition"]),
                    SubOriginalItemNumber      = string.Empty,
                    ReplacedOriginalItemNumber = string.Empty,
                    Description                = item.DisplayName,
                    ManufacturerName           = item.Notes,
                    UnitCost = (decimal)item.ListPrice
                };

                if (orderType == OrderType.ChangeOrder)
                {
                    switch (item.Status)
                    {
                    case "added":
                        detail.ItemChange = LineType.Add;
                        break;

                    case "changed":
                        detail.ItemChange = LineType.Change;
                        break;

                    case "deleted":
                        detail.ItemChange = LineType.Delete;
                        break;

                    default:
                        detail.ItemChange = LineType.NoChange;
                        break;
                    }
                }

                newOrderFile.Details.Add(detail);
            }

            _log.WriteInformationLog(string.Format("Writing order to queue: {0}", JsonConvert.SerializeObject(newOrderFile)));

            _orderQueue.PublishToQueue(JsonConvert.SerializeObject(newOrderFile), Configuration.RabbitMQOrderServer, Configuration.RabbitMQUserNamePublisher, Configuration.RabbitMQUserPasswordPublisher, Configuration.RabbitMQVHostOrder, GetSelectedExchange(OrderQueueLocation.Normal));

            //set order status ID to 5
        }