/// <summary>
        /// Callback method for timer
        /// </summary>
        private void OnTimer()
        {
            GetOrdersCall       getOrdersApiCall = new GetOrdersCall(apiContext);
            OrderTypeCollection orders           = null;

            try
            {
                orders = getOrdersApiCall.GetOrders(new TimeFilter {
                    TimeFrom = DateTime.Now.AddDays(DaysAgo), TimeTo = DateTime.Now
                }, TradingRoleCodeType.Seller, OrderStatusCodeType.Completed);
            }
            catch (Exception e)
            {
                eventLog.WriteEntry("Unable to connect to the server");
                return;
            }

            int  counter       = 0;
            var  ordersList    = new List <HeaderRecords>();
            bool orderInserted = false;

            foreach (OrderType order in orders)
            {
                try
                {
                    if (!DAL.HeaderRecords.Exists(order.OrderID))
                    {
                        orderInserted = true;
                        #region Header record
                        var headerRecord = new HeaderRecords
                        {
                            OrderID             = order.OrderID,
                            InvoiceID           = order.ShippingDetails.SellingManagerSalesRecordNumber.ToString(),
                            OrderDate           = order.PaidTime.ToShortDateString(),
                            Email               = order.TransactionArray[0].Buyer.Email, //? it gives the value of "invalid request"
                            BilltoFirstName     = order.ShippingAddress.Name,
                            BilltoLastName      = order.ShippingAddress.Name,
                            BilltoCompanyName   = order.BuyerUserID,
                            DeliveryMethod      = order.ShippingServiceSelected.ShippingService == "ShippingMethodStandard" ? "1" : "5",
                            ShippingAndHandling = order.ShippingServiceSelected.ShippingServiceCost.Value.ToString(),
                            Tax                   = order.ShippingDetails.SalesTax.SalesTaxAmount.Value.ToString(),
                            Discount              = "0",
                            OverallTotal          = order.Total.Value.ToString(),
                            ShiptoFirstName       = order.ShippingAddress.Name.Split(' ')[0],
                            ShiptoLastName        = order.ShippingAddress.Name.Split(' ')[1],
                            ShiptoCompanyName     = order.BuyerUserID,
                            ShiptoStreetAddress   = order.ShippingAddress.Street1,
                            ShiptoOptionalAddress = order.ShippingAddress.Street2,
                            ShiptoCity            = order.ShippingAddress.CityName,
                            ShiptoState           = order.ShippingAddress.StateOrProvince,
                            ShiptoZip             = order.ShippingAddress.PostalCode,
                            ShiptoCountry         = order.ShippingAddress.CountryName,
                            ShiptoPhone           = order.ShippingAddress.Phone,
                            CatalogName           = "EBAY",
                            Source                = "EBAY"
                        };
                        #endregion

                        List <DAL.DetailRecord> detailRecordList = new List <DAL.DetailRecord>();
                        foreach (TransactionType transactionItem in order.TransactionArray)
                        {
                            #region Detail record
                            var dr = new DAL.DetailRecord
                            {
                                InvoiceID          = headerRecord.InvoiceID,
                                PurchaseID         = transactionItem.ShippingDetails.SellingManagerSalesRecordNumber.ToString(),
                                SourceCode         = transactionItem.Item.Site.ToString(),
                                ItemID             = transactionItem.Item.ItemID,
                                ProductDescription = transactionItem.Item.Title,
                                Quantity           = transactionItem.QuantityPurchased,
                                UnitPrice          = transactionItem.TransactionPrice.Value,
                                ExtendedPrice      = transactionItem.TransactionPrice.Value * transactionItem.QuantityPurchased
                            };

                            detailRecordList.Add(dr);
                            #endregion
                        }

                        headerRecord.ProductSubtotal = detailRecordList.Sum(x => x.ExtendedPrice).ToString();
                        headerRecord.Commision       = GetCommission(headerRecord.ProductSubtotal);
                        try
                        {
                            #region Inserting objects in database
                            using (var scope = new TransactionScope())
                            {
                                DAL.HeaderRecords.Add(headerRecord);
                                SetSkuCodeForDetailsRecord(detailRecordList);

                                DAL.DetailRecord.Add(detailRecordList);
                                headerRecord.Items.AddRange(detailRecordList);

                                var orderStatus = new DAL.OrderStatus {
                                    OrderID = order.OrderID, Status = 1
                                };
                                DAL.OrderStatus.Add(orderStatus);

                                var orderMessage = new DAL.OrderMessage {
                                    InvoiceID = headerRecord.InvoiceID
                                };
                                DAL.OrderMessage.Add(orderMessage);

                                scope.Complete();
                            }
                            #endregion
                        }

                        catch (TransactionAbortedException)
                        {
                            eventLog.WriteEntry("TransactionAbortedException has been thrown");
                        }

                        ordersList.Add(headerRecord);
                    }
                }
                catch (Exception e)
                {
                    eventLog.WriteEntry(string.Format("An error occured at the step #: {0}; message: {1}", counter, e.Message));
                }

                finally
                {
                    counter++;
                }
            }

            if (orderInserted)
            {
                CreateXmlFile(ordersList);
            }

            RestartTimer();
        }