private ServiceConnectionViewModel GenerateServiceConnectionVM(IEnumerable <UserChannel> userChannels)
        {
            //get channels' Ids
            var channelMagento = userChannels.SingleOrDefault(channel => channel.ChannelType == Shared.Enums.ChannelType.Magento);
            var channelEbay    = userChannels.SingleOrDefault(channel => channel.ChannelType == Shared.Enums.ChannelType.Ebay);
            var channelEmail   = userChannels.SingleOrDefault(channel => channel.ChannelType == Shared.Enums.ChannelType.Email);

            //assign channels into viewmodel
            ServiceConnectionViewModel model = new ServiceConnectionViewModel();

            if (channelMagento != null)
            {
                model.channelMagento = mapper.Map <ChannelMagentoViewModel>(
                    channelMagentoService.GetChannel(channelMagento.ChannelId)
                    );
                model.channelMagento.IsConnected = magentoService.IsConnected(model.channelMagento.Host, model.channelMagento.Username, model.channelMagento.Password);
            }
            if (channelEbay != null)
            {
                model.channelEbay = mapper.Map <ChannelEbayViewModel>(
                    channelEbayService.GetChannel(channelEbay.ChannelId)
                    );
                var validateToken = ebayService.IsValidToken(model.channelEbay.Token);
                if (!validateToken.HasError && validateToken.Result)
                {
                    model.channelEbay.IsConnected = true;
                }
            }
            if (channelEmail != null)
            {
                var channelEmailModel = channelEmailService.GetChannel(channelEmail.ChannelId);
                model.channelEmail = mapper.Map <ChannelEmailViewModel>(channelEmailModel);
                var token = mapper.Map <SmartHub.Channels.Gmail.Models.Token>(channelEmailModel);
                model.channelEmail.IsConnected = gmailService.IsConnected(token);
            }
            return(model);
        }
Exemple #2
0
        public void Proceed(Services.Models.Connection connection)
        {
            TextBuffer.WriteLine("EmailMagentoProcessor - Start");
            TextBuffer.WriteLine("EmailMagentoProcessor - Proceed Connection " + connection.Id);

            var syncTime = DateTime.UtcNow;

            connection.Status = ConnectionStatus.Synchronizing;
            connectionService.Update(connection);

            var userChannelEmail   = userChannelService.GetUserChannel(connection.UserChannelSource);
            var userChannelMagento = userChannelService.GetUserChannel(connection.UserChannelTarget);

            var channelEmail   = channelEmailService.GetChannel(userChannelEmail.ChannelId);
            var channelMagento = channelMagentoService.GetChannel(userChannelMagento.ChannelId);
            var channelMagento_TimeZoneOffset =
                TimeZoneInfo.GetSystemTimeZones()
                .FirstOrDefault(x => x.DisplayName == channelMagento.TimeZoneDisplayName)
                .BaseUtcOffset;

            var emailTokenResponse = emailService.RefreshToken(channelEmail.RefreshToken);

            if (emailTokenResponse.HasError)
            {
                connection.Status         = ConnectionStatus.Error;
                connection.Message        = "Invalid Email Token";
                connection.LastSyncedDate = syncTime;
                connection.NextSyncedDate = connection.LastSyncedDate.Value.AddMinutes(emailMagentoTaskIntervalInMinutes);
                connection.Counter++;
                connectionService.Update(connection);
                return;
            }

            var magentoTokenCall = magentoService.GetToken(channelMagento.Host, channelMagento.Username, channelMagento.Password);

            if (magentoTokenCall.HasError)
            {
                connection.Status         = ConnectionStatus.Error;
                connection.Message        = "Invalid Magento Token";
                connection.LastSyncedDate = syncTime;
                connection.NextSyncedDate = connection.LastSyncedDate.Value.AddMinutes(emailMagentoTaskIntervalInMinutes);
                connection.Counter++;
                connectionService.Update(connection);
                return;
            }
            var magentoToken = magentoTokenCall.Result;

            #region Email to Magento
            //1. Pull Email and persist to local db
            #region Pull Email from Gmail

            var lastSyncedDate        = channelEmail.LastSyncedDate ?? DateTime.UtcNow;
            var emailMessagesResponse = emailService.GetMessages(emailTokenResponse.Result, lastSyncedDate, DateTime.UtcNow);
            if (emailMessagesResponse.HasError)
            {
                channelEmail.Message += emailMessagesResponse.Error;
            }
            else
            {
                var emailMessages = emailMessagesResponse.Result;
                foreach (var emailMessage in emailMessages)
                {
                }
            }

            #endregion

            #endregion


            connection.Status         = ConnectionStatus.Connected;
            connection.LastSyncedDate = syncTime;
            connection.NextSyncedDate = connection.LastSyncedDate.Value.AddMinutes(emailMagentoTaskIntervalInMinutes);
            connection.Counter++;
            connectionService.Update(connection);

            TextBuffer.WriteLine("EmailMagentoProcessor - End Connection " + connection.Id);
        }