//Methods
        #region SyncSingleArticle
        private void SyncSingleArticle(Article article, DateTime now)
        {
            try
            {
                //Total
                article.SyncDate  = now;
                article.SyncTotal = (Int32)article.AmountOnStock;

                //Ebay
                EbayStockInfo ebayStockInfo = EbayController.GetEbayStockInfo(article);
                article.SyncEbayActive     = ebayStockInfo.ActiveQuantity;
                article.SyncEbayAvailiable = ebayStockInfo.AvailiableQuantity;
                article.SyncEbayTemplate   = ebayStockInfo.TemplateAmount;

                //Magento
                Int32 magentoStockAmount = (Int32)article.AmountOnStock - ebayStockInfo.TotalStockQuantity;
                magentoStockAmount  = magentoStockAmount <= 0 ? 0 : magentoStockAmount;
                article.SyncMagento = magentoStockAmount;

                //Save
                MagentoController.SetAvailiableQuantity(article, magentoStockAmount);
                article.MustSyncStockAmount = false;
                MyDataContext.Default.SaveChanges();

                //Status
                if (ebayStockInfo.TotalStockQuantity + magentoStockAmount > article.AmountOnStock)
                {
                    article.SyncTechnicalInfo = StringTable.CautionStockExceeded;
                }
                else if (this.IsRunningLowByPerformance(article))
                {
                    article.SyncTechnicalInfo = StringTable.CautionAverageAmount;
                }
                else if (this.IsRunningLowOnEbay(article))
                {
                    article.SyncTechnicalInfo = StringTable.CautionStockLow;
                }
                else if (article.AmountOnStock < 0)
                {
                    article.SyncTechnicalInfo = StringTable.CautionStockOversold;
                }
                else if ((article.SyncEbayActive + article.SyncMagento) > article.AmountOnStock)
                {
                    article.SyncTechnicalInfo = StringTable.CautionToManyOffers;
                }
                else
                {
                    article.SyncTechnicalInfo = StringTable.Okay;
                }

                System.Diagnostics.Trace.WriteLine(String.Format(StringTable.SyncSuccess, article.Id));
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("===========");
                System.Diagnostics.Trace.WriteLine(ex.DeepParse());
                article.SyncTechnicalInfo = ex.DeepParse() + ex.StackTrace;
                System.Diagnostics.Trace.WriteLine(String.Format("Article: {0} - {1}", article == null ? "???" : article.Id.ToString(), ex.Message));
            }
            finally
            {
                MyDataContext.Default.SaveChanges();
            }
        }
        static void Main(String[] args)
        {
            MyDataContext.Default = new MyDataContext();

            try
            {
                ShopperConfiguration.Default = ShopperConfigurationReader.FromWebConfig();
                System.Diagnostics.Trace.Listeners.Add(new Models.Syncer.SyncerTraceListener());
                System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.ConsoleTraceListener());
                System.Diagnostics.Trace.AutoFlush = true;

                if (args.Contains(SyncProcessRemote.SyncTypes.Stock.ToString()))
                {
                    StockSyncer syncer = new StockSyncer();
                    syncer.PerformInMutex(() =>
                    {
                        System.Diagnostics.Trace.WriteLine("Stock sync started...");
                        syncer.SyncStock();
                        System.Diagnostics.Trace.WriteLine("Stock sync finished!");
                    });
                }

                if (args.Contains(SyncProcessRemote.SyncTypes.TrackingNumber.ToString()))
                {
                    TrackingNumberSyncer syncer = new TrackingNumberSyncer();
                    syncer.PerformInMutex(() =>
                    {
                        System.Diagnostics.Trace.WriteLine("TrackingNumber sync started...");
                        syncer.SyncTrackingNumbersWithEbay();
                        System.Diagnostics.Trace.WriteLine("TrackingNumber sync finished!");
                    });
                }

                if (args.Contains(SyncProcessRemote.SyncTypes.Sales.ToString()))
                {
                    SalesSyncer syncer = new SalesSyncer();
                    syncer.PerformInMutex(() =>
                    {
                        System.Diagnostics.Trace.WriteLine("Sales sync started...");

                        DateTime from  = DateTime.Now.Date.AddDays(ShopperConfiguration.Default.ImportDaysBack * -1);
                        DateTime until = DateTime.Now.Date.AddDays(1);
                        System.Diagnostics.Trace.WriteLine("Loading Magento transactions...");

                        try
                        {
                            var magentoItems  = MagentoController.LoadMagentoTransactions(from);
                            var magentoSyncer = new MagentoSalesSyncer();
                            magentoSyncer.Import(magentoItems);
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Trace.WriteLine("Magento could's not be synced: " + ex.Message);
                        }

                        try
                        {
                            System.Diagnostics.Trace.WriteLine("Loading ebay transactions...");
                            var ebayItems = EbayController.LoadEbayTransactions(from, until);
                            System.Diagnostics.Trace.WriteLine("Ebay transactions loaded!");

                            var ebaySyncer = new EbaySalesSyncer();
                            ebaySyncer.Import(ebayItems);
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Trace.WriteLine("Ebay could's not be synced: " + ex.Message);
                        }

                        System.Diagnostics.Trace.WriteLine("Sales sync finished!");
                    });
                }

                if (args.Contains(SyncProcessRemote.SyncTypes.Articles.ToString()))
                {
                    var products = EbayController.LoadEbaySellingManagerProducts();
                    EbayController.ReviseSellingManagerTemplates(products);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.DeepParse());
            }
        }