public void GetFedexTracking(string trackingNumber)
        {
            using (var db = _dbFactory.GetRWDb())
            {
                var fedexInfo = _company.ShipmentProviderInfoList.FirstOrDefault(sh => sh.Type == (int)ShipmentProviderType.FedexOneRate);

                var fedexTrackingProvider = new FedexTrackingApi(_log,
                                                                 _time,
                                                                 fedexInfo.EndPointUrl,
                                                                 fedexInfo.UserName,
                                                                 fedexInfo.Password,
                                                                 fedexInfo.Key1,
                                                                 fedexInfo.Key2,
                                                                 fedexInfo.Key3,
                                                                 _company.ShortName);


                var trackList = new List <TrackingNumberToCheckDto>()
                {
                    new TrackingNumberToCheckDto()
                    {
                        TrackingNumber = trackingNumber
                    }
                };

                var stateList = fedexTrackingProvider.TrackShipments(trackList);

                Console.WriteLine(stateList);
            }
        }
        public void ReProcessTrackInfoFull(IDbFactory dbFactory, string trackingNumber)
        {
            using (var db = dbFactory.GetRWDb())
            {
                var shippings = db.Orders.GetUnDeliveredShippingInfoes(_time.GetUtcTime(), false, null)
                                .Where(o => o.TrackingNumber == trackingNumber)
                                .OrderByDescending(o => o.OrderDate)
                                .ToList();

                shippings.AddRange(db.Orders.GetUnDeliveredMailInfoes(_time.GetUtcTime(), false, null)
                                   .Where(o => o.TrackingNumber == trackingNumber)
                                   .OrderByDescending(o => o.OrderDate)
                                   .ToList());

                var actionService       = new SystemActionService(_log, _time);
                var companyAddress      = new CompanyAddressService(_company);
                var addressService      = new AddressService(null, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.GetPickupAddress(MarketIdentifier.Empty()));
                var notificationService = new NotificationService(_log, _time, dbFactory);

                var ruleList = new List <ITrackingRule>()
                {
                    new NeverShippedTrackingRule(_log, notificationService, _time),
                    new GetStuckTrackingRule(_log, notificationService, _time),
                    new NoticeLeftTrackingRule(_log, actionService, addressService, _time),
                    //new UndeliverableAsAddressedTrackingRule(_log, actionService, addressService, _emailService, _time)
                };

                var trackingService = new TrackingManager(_log,
                                                          actionService,
                                                          addressService,
                                                          _emailService,
                                                          _time,
                                                          ruleList);

                var trackingProvider = new ComposedUspsAndCanadaPostTrackingProvider(_log, _time, _company.USPSUserId, _company.CanadaPostKeys);

                var fedexInfo             = _company.ShipmentProviderInfoList.FirstOrDefault(sh => sh.Type == (int)ShipmentProviderType.FedexGeneral);
                var fedexTrackingProvider = new FedexTrackingApi(_log,
                                                                 _time,
                                                                 fedexInfo.EndPointUrl,
                                                                 fedexInfo.UserName,
                                                                 fedexInfo.Password,
                                                                 fedexInfo.Key1,
                                                                 fedexInfo.Key2,
                                                                 fedexInfo.Key3,
                                                                 _company.ShortName);

                //var dhlInfo = _company.ShipmentProviderInfoList.FirstOrDefault(sh => sh.Type == (int)ShipmentProviderType.Dhl);
                //var trackingProvider = new DhlTrackingProvider(_log,
                //    _time,
                //    dhlInfo.EndPointUrl,
                //    dhlInfo.UserName,
                //    dhlInfo.Password,
                //    dhlInfo.Key1);

                trackingService.UpdateOrderTracking(db, _company, shippings, fedexTrackingProvider);
            }
        }
        public void UpdateFedexTrackOrders()
        {
            while (true)
            {
                using (var db = new UnitOfWork(_log))
                {
                    var service             = new UpdateOrderTrackingStatus(_company.Id, null, TimeSpan.FromSeconds(10));
                    var actionService       = new SystemActionService(_log, _time);
                    var dbFactory           = new DbFactory();
                    var notificationService = new NotificationService(_log, _time, dbFactory);
                    var companyAddress      = new CompanyAddressService(_company);
                    var addressService      = new AddressService(null, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.GetPickupAddress(MarketIdentifier.Empty()));
                    var ruleList            = new List <ITrackingRule>()
                    {
                    };

                    var trackingService = new TrackingManager(_log, actionService, addressService, _emailService, _time, ruleList);
                    var fedexInfo       = _company.ShipmentProviderInfoList.FirstOrDefault(sh => sh.Type == (int)ShipmentProviderType.FedexOneRate);

                    var fedexTrackingProvider = new FedexTrackingApi(_log,
                                                                     _time,
                                                                     fedexInfo.EndPointUrl,
                                                                     fedexInfo.UserName,
                                                                     fedexInfo.Password,
                                                                     fedexInfo.Key1,
                                                                     fedexInfo.Key2,
                                                                     fedexInfo.Key3,
                                                                     _company.ShortName);

                    service.UpdateAllShippedOrderStatus(trackingService,
                                                        _time,
                                                        db,
                                                        fedexTrackingProvider,
                                                        _company);
                }
                Thread.Sleep(TimeSpan.FromMinutes(0));
            }
        }