Beispiel #1
0
        public async Task <ResponseData <Dashboard> > Index(string accountid, string applianceid)
        {
            try
            {
                var accountAppliance = _accountApplianceService.GetAccountApplianceByAccountId(Convert.ToInt64(accountid));
                var _event           = _eventService.GetEventByApplianceId(Convert.ToInt64(applianceid));
                var lAccounts        = _accountApplianceService.GetAccountByApplianceId(Convert.ToInt64(applianceid), true);
                List <AccountApplianceDTO> accountApplianceDTO = new List <AccountApplianceDTO>();

                if (accountAppliance != null && accountAppliance.Count > 0)
                {
                    foreach (var item in accountAppliance)
                    {
                        accountApplianceDTO.Add(new AccountApplianceDTO(item));
                    }
                }

                lAccounts = lAccounts.Where(x => x.Id != Convert.ToInt64(accountid)).ToList();

                if (!TelitApi.IsConnected)
                {
                    TelitApi.CheckIOTConnection().Wait();
                }

                var appliance = _applianceService.GetApplianceById(Convert.ToInt64(applianceid));
                var thingFind = await TelitApi.ThingFind(appliance.SerialNumber);



                Telit.ThingFind.Params _params = new Telit.ThingFind.Params();
                string applianceEnvironment    = string.Empty;

                ApplianceDTO applianceDTO = new ApplianceDTO();

                if (thingFind != null && thingFind.Things != null && thingFind.Things.success && thingFind.Things.@params != null)
                {
                    _params = thingFind.Things.@params;
                }

                if (_params != null && _params.alarms != null && _params.alarms.env != null && _params.alarms.env.state >= 0 && _params.alarms.env.state < 16)
                {
                    applianceEnvironment = Convert.ToString(_params.alarms.env.state, 2).PadLeft(4, '0');
                    var array = !string.IsNullOrEmpty(applianceEnvironment) ? applianceEnvironment.ToArray() : new char[] { };

                    applianceDTO.Cellular     = array.Length == 4 ? Convert.ToBoolean(Convert.ToInt16(array[2].ToString())) : false;
                    applianceDTO.Power        = array.Length == 4 ? Convert.ToBoolean(Convert.ToInt16(array[3].ToString())) : false;
                    applianceDTO.Wifi         = array.Length == 4 ? Convert.ToBoolean(Convert.ToInt16(array[1].ToString())) : false;
                    applianceDTO.WiFiInternet = array.Length == 4 ? Convert.ToBoolean(Convert.ToInt16(array[0].ToString())) : false;
                }

                applianceDTO.TimerEnabled = _params != null && _params.alarms != null && _params.alarms.timerState != null ? (Convert.ToInt64(_params.alarms.timerState.state) != 0 ? true : false) : false;
                applianceDTO.DeviceName   = _params != null && _params.attrs != null && _params.attrs.name != null ? _params.attrs.name.value : appliance.DeviceName;
                applianceDTO.SerialNumber = appliance.SerialNumber;
                applianceDTO.TriggerMile  = appliance.TriggerMile;
                applianceDTO.Id           = appliance.Id;
                applianceDTO.IsOn         = _params != null && _params.alarms != null && _params.alarms.on != null?CheckApplianceIsOn(Convert.ToInt16(_params.alarms.on.state)) : false;

                applianceDTO.IsConnected     = _params.connected;
                applianceDTO.Lat             = appliance.Lat;
                applianceDTO.Lon             = appliance.Lon;
                applianceDTO.GeoFenceEnabled = appliance.GeoFenceEnabled;
                applianceDTO.Status          = appliance.Status;

                if (_params != null && _params.alarms != null)
                {
                    applianceDTO.TrustLevel = _params.alarms.trust != null ? (int?)_params.alarms.trust.state : 3;
                }

                var plans = _stripeService.GetPlans();

                var      subscriptionId = _accountApplianceService.GetAccountApplianceByAccountIdAndApplianceId(Convert.ToInt64(accountid), Convert.ToInt64(applianceid));
                DateTime?expireDate     = null;
                bool     cancelAtEnd    = false;
                if (subscriptionId != null && !string.IsNullOrEmpty(subscriptionId.SubscriptionId))
                {
                    var stripe = _stripeService.RetrieveSubscription(subscriptionId.SubscriptionId);
                    // current period end
                    expireDate  = stripe.CurrentPeriodEnd;
                    cancelAtEnd = stripe.CancelAtPeriodEnd;
                }

                var dashboard = new Dashboard()
                {
                    AccountAppliance     = accountApplianceDTO,
                    Events               = _event,
                    ListAccountsDTO      = lAccounts,
                    IsIOTConnected       = TelitApi.IsConnected,
                    Plans                = plans,
                    AppDTO               = applianceDTO,
                    ExpireDate           = expireDate,
                    CancelAtEnd          = cancelAtEnd,
                    IsApplianceConnected = applianceDTO.IsConnected.Value
                };

                var response = new ResponseData <Dashboard>();

                response.Data    = dashboard;
                response.Message = ResponseMessage.Success;
                response.Status  = ResponseStatus.Success.ToString();
                return(response);
            }
            catch (Exception ex)
            {
                var response = new ResponseData <Dashboard>();
                response.Message = ex.Message;
                response.Status  = ResponseStatus.Error.ToString();
                return(response);
            }
        }