private bool SaveSalesOrder(DatColPickTicket order, IEnumerable <DatColPickTicket> orderLines)
        {
            try
            {
                var listOfCurrentWebOrderNumbers = _orderRepo
                                                   .GetOrderByContainsWebOrderNumber(order.OrderNumber)
                                                   .Select(x => x.WebSiteOrderNumber)
                                                   .ToArray();

                string tempWebOrderNumber;
                if (!_orderHelper.ConvertOriginalOrderNumberToConcentratorOrderNumber(order.OrderNumber, listOfCurrentWebOrderNumbers, 9, out tempWebOrderNumber))
                {
                    _log.AuditError(string.Format("OrderNumber {0} cannot be converted. This ordernumbers are already exist: {1}",
                                                  order.OrderNumber,
                                                  string.Join(", ", listOfCurrentWebOrderNumbers)));
                    return(false);
                }

                var orderToSave = CreateOrder(tempWebOrderNumber, order, orderLines);

                if (!_orderRepo.InsertOrder(orderToSave))
                {
                    _log.AuditError(string.Format("Failed to insert order: {0}", orderToSave.WebSiteOrderNumber));
                    return(false);
                }
                return(true);
            }
            catch (Exception)
            {
                _log.AuditError(string.Format("Database Error: Failed to save the order. OrderNumber '{0}'", order.OrderNumber));
                return(false);
            }
        }
        private bool ProcessSalesOrder(DatColPickTicket firstOrder, IEnumerable <DatColPickTicket> orderLines)
        {
            List <DatColErrorMessage> listOfErrors;

            var listOfSalesOrderLines = orderLines as DatColPickTicket[] ?? orderLines.ToArray();

            if (_orderHelper.IsValidSalesOrder(listOfSalesOrderLines, _sapphConnectorID, vendorIDs, out listOfErrors, true))
            {
                if (SaveSalesOrder(firstOrder, listOfSalesOrderLines))
                {
                    return(true);
                }

                _failedPickTicketOrderNumber = firstOrder.OrderNumber;
                _archiveService.ExportToAxapta(listOfSalesOrderLines, SaveTo.CorruptPickTicketDirectory, FailedPickTicketOrderFileName);

                return(false);
            }

            _failedPickTicketOrderNumber = firstOrder.OrderNumber;
            _archiveService.ExportToAxapta(listOfSalesOrderLines, SaveTo.CorruptPickTicketDirectory, FailedPickTicketOrderFileName);

            var fileName = string.Format("{0}.log", Path.GetFileNameWithoutExtension(FailedPickTicketOrderFileName));

            _archiveService.ExportToAxapta(listOfErrors, SaveTo.CorruptPickTicketDirectory, fileName);

            return(false);
        }
        private bool SaveTransferOrder(DatColPickTicket firstOrder, IEnumerable <DatColPickTicket> listOfTransferOrderLines)
        {
            try
            {
                var transferOrders = listOfTransferOrderLines.GroupBy(x => x.CustomerNumber).ToList();

                var subOrderCounter  = 0;
                var orderNumberParts = firstOrder.OrderNumber.Split('_');
                var listOfOrders     = new List <Order>();

                foreach (var transferOrder in transferOrders)
                {
                    var substituteOrderNumber = string.Format("{0}_{1:D3}", orderNumberParts[0], ++subOrderCounter);
                    var firstTransferOrder    = transferOrder.First();
                    var orderToSave           = CreateOrder(substituteOrderNumber, firstTransferOrder, transferOrder);

                    orderToSave.Document = firstOrder.OrderNumber;

                    listOfOrders.Add(orderToSave);
                }

                if (!_orderRepo.InsertOrders(listOfOrders))
                {
                    _log.AuditError(string.Format("Failed to insert order: {0}", firstOrder.OrderNumber));
                    return(false);
                }
                return(true);
            }
            catch (Exception)
            {
                _log.AuditError(string.Format("Database Error: Failed to save the order. OrderNumber '{0}'", firstOrder.OrderNumber));
                return(false);
            }
        }
        private bool CreateTransferOrderNotification(IEnumerable <OrderNotification> listOfSalesOrderLines, out List <DatColOrderTransfer> listOfNotifications)
        {
            listOfNotifications = new List <DatColOrderTransfer>();
            var engine = new FileHelperEngine(typeof(DatColPickTicket));

            var orderLines = listOfSalesOrderLines
                             .GroupBy(x => x.OrderLineID, x => x);

            foreach (var orderLine in orderLines)
            {
                DatColPickTicket originalLine = null;

                try
                {
                    var originalLines = engine.ReadString(orderLine.First().OriginalLine) as DatColPickTicket[];

                    if (originalLines != null)
                    {
                        originalLine = originalLines.First();
                    }

                    if (originalLine == null)
                    {
                        return(false);
                    }
                }
                catch
                {
                    return(false);
                }

                var shippedItems   = GetShippedItems(orderLine);
                var cancelledItems = GetCancelledItems(orderLine);

                var transferOrder = new DatColOrderTransfer
                {
                    FromWarehouse        = originalLine.Warehouse,
                    ToWarehouse          = originalLine.CustomerNumber,
                    AxaptaCustomerNumber = originalLine.CustomItemNumber,
                    DeliveryDate         = originalLine.DeliveryDate,
                    PickedItems          = shippedItems.ToString(CultureInfo.InvariantCulture)
                };

                listOfNotifications.Add(transferOrder);
            }
            return(true);
        }
        private bool CreateSalesOrderNotification(IEnumerable <OrderNotification> salesOrder, out List <DatColPickTicket> listOfNotifications)
        {
            listOfNotifications = new List <DatColPickTicket>();
            var engine = new FileHelperEngine(typeof(DatColPickTicket));

            var orderLines = salesOrder
                             .GroupBy(x => x.OrderLineID, x => x);

            foreach (var orderLine in orderLines)
            {
                DatColPickTicket originalLine = null;

                try
                {
                    var originalLines = engine.ReadString(orderLine.First().OriginalLine) as DatColPickTicket[];

                    if (originalLines != null)
                    {
                        originalLine = originalLines.First();
                    }

                    if (originalLine == null)
                    {
                        return(false);
                    }
                }
                catch
                {
                    return(false);
                }

                var shippedItems   = GetShippedItems(orderLine);
                var cancelledItems = GetCancelledItems(orderLine);

                originalLine.PickedItems = shippedItems.ToString(CultureInfo.InvariantCulture);

                listOfNotifications.Add(originalLine);
            }

            return(true);
        }
        private Order CreateOrder(string webOrderNumber, DatColPickTicket order, IEnumerable <DatColPickTicket> orderLines)
        {
            var orderToSave = new Order
            {
                OrderLines             = new List <OrderLine>(),
                ConnectorID            = _sapphConnectorID,
                CustomerOrderReference = order.CustomerNumber,
                HoldOrder          = false,
                WebSiteOrderNumber = webOrderNumber,
                PaymentTermsCode   = "SHOP",
                PaymentInstrument  = string.Empty,
                ReceivedDate       = DateTime.Now.ToUniversalTime(),
                OrderType          = (int)OrderTypes.PickTicketOrder
            };

            var engine = new FileHelperEngine(typeof(DatColPickTicket));

            var currentVendorAssortments = _productRepo
                                           .GetListOfSkusByVendorIDs(vendorIDs)
                                           .ToLookup(x => Regex.Replace(x.VendorItemNumber, @"\s+", ""))
                                           .ToDictionary(x => x.Key, x => x.First());

            foreach (var orderLine in orderLines)
            {
                var orderLineToSave = new OrderLine
                {
                    OrderID         = orderToSave.OrderID,
                    CustomerOrderNr = orderToSave.WebSiteOrderNumber,
                    ProductID       = currentVendorAssortments[Regex.Replace(orderLine.CustomItemNumber, @"\s+", "")].ProductID,
                    Quantity        = int.Parse(orderLine.QuantityOnPickTicket, NumberStyles.Number, new CultureInfo("nl-NL")),
                    isDispatched    = false,
                    OriginalLine    = engine.WriteString(new List <DatColPickTicket> {
                        orderLine
                    }),
                    PriceOverride = false
                };
                orderToSave.OrderLines.Add(orderLineToSave);
            }
            return(orderToSave);
        }