public void UpdateUSPSTrackOrders()
        {
            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 uspsTrackingProvider = new ComposedUspsAndCanadaPostTrackingProvider(_log, _time, _company.USPSUserId, _company.CanadaPostKeys);

                    service.UpdateAllShippedOrderStatus(trackingService,
                                                        _time,
                                                        db,
                                                        uspsTrackingProvider,
                                                        _company);
                }
                Thread.Sleep(TimeSpan.FromMinutes(0));
            }
        }
        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 GetUSPSTrackingByUSPS(string trackingNumber)
        {
            var uspsTrackingProvider = new ComposedUspsAndCanadaPostTrackingProvider(_log, _time, _company.USPSUserId, _company.CanadaPostKeys);
            var results = uspsTrackingProvider.TrackShipments(new List <TrackingNumberToCheckDto>()
            {
                new TrackingNumberToCheckDto()
                {
                    TrackingNumber = trackingNumber
                }
            });

            _log.Info("Result lines: " + results.Count);
        }