public async System.Threading.Tasks.Task RefreshSyncs()
        {
            Status            = "Downloading your consumption syncs";
            IsRefreshEnabled  = false;
            IsContinueEnabled = false;
            OnPropertyChanged("Status");
            OnPropertyChanged("IsRefreshEnabled");
            OnPropertyChanged("IsContinueEnabled");

            // Build request to get syncs.
            var request = new RestRequest("api/QBDInventoryConsumptionSyncs?orderby=QBDINVENTORYCONSUMPTIONSYNCS/CREATEDAT&orderByDirection=DESC", Method.GET);

            // Execute request.
            var response = await client.ExecuteAsync <List <QBDInventoryConsumptionSync> >(request);

            if ((response.ResponseStatus == ResponseStatus.Completed) &&
                (response.StatusCode == System.Net.HttpStatusCode.OK))
            {
                Syncs = new ObservableCollection <QBDInventoryConsumptionSync>(response.Data);
                OnPropertyChanged("Syncs");

                if (Syncs.Count == 0)
                {
                    Status            = "Uh oh, you do not have any consumption syncs";
                    SelectedSync      = null;
                    IsContinueEnabled = false;
                    OnPropertyChanged("Status");
                    OnPropertyChanged("SelectedSync");
                    OnPropertyChanged("IsContinueEnabled");
                }
                else
                {
                    Status            = "";
                    SelectedSync      = Syncs[0];
                    IsContinueEnabled = true;
                    OnPropertyChanged("Status");
                    OnPropertyChanged("SelectedSync");
                    OnPropertyChanged("IsContinueEnabled");
                }

                IsRefreshEnabled = true;
                OnPropertyChanged("IsRefreshEnabled");
            }
            else
            {
                Syncs             = new ObservableCollection <QBDInventoryConsumptionSync>();
                IsRefreshEnabled  = true;
                IsContinueEnabled = false;
                Status            = response.ErrorMessage;
                OnPropertyChanged("Syncs");
                OnPropertyChanged("IsRefreshEnabled");
                OnPropertyChanged("IsContinueEnabled");
                OnPropertyChanged("Status");
            }
        }
Beispiel #2
0
        public IHttpActionResult PostSync(
            [FromBody] QBDConsumptionSyncDetails details,
            [FromUri] string productName,
            [FromUri] string majorVersion,
            [FromUri] string minorVersion,
            [FromUri] string country,
            [FromUri] string supportedQBXMLVersion,
            [FromUri] string recordingMethod,
            [FromUri] string valueMethod,
            [FromUri] string hostname,
            [FromUri] string companyFilePath)
        {
            var currentUser = CurrentUser();

            // Ensure that user is authorized.
            if (!currentUser.CanSyncInventoryConsumptions)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            // Ensure that the sync is for the same company file.
            var companyFileName = Path.GetFileName(companyFilePath);
            var previous        = _context.QBDInventoryConsumptionSyncs
                                  .Where(q => q.OrganizationId == currentUser.OrganizationId)
                                  .Where(q => q.HostCompanyFileName != companyFileName);

            if (previous.Any())
            {
                return(BadRequest("The company file appears to be different."));
            }

            // Attempt to sync.
            var consumptions = _context.QBDInventoryConsumptions
                               .Where(a => a.OrganizationId == currentUser.OrganizationId)
                               .Where(a => !a.QBDInventoryConsumptionSyncId.HasValue)
                               .Where(a => details.Ids.Contains(a.Id))
                               .ToList();

            // Record the sync.
            var sync = new QBDInventoryConsumptionSync()
            {
                CreatedAt                 = DateTime.UtcNow,
                CreatedByUserId           = currentUser.Id,
                OrganizationId            = currentUser.OrganizationId,
                RecordingMethod           = recordingMethod,
                ValueMethod               = valueMethod,
                HostProductName           = productName,
                HostMajorVersion          = majorVersion,
                HostMinorVersion          = minorVersion,
                HostCountry               = country,
                HostSupportedQBXMLVersion = supportedQBXMLVersion,
                HostCompanyFileName       = companyFileName,
                HostCompanyFilePath       = companyFilePath,
                ConsumptionsCount         = consumptions.Count,
                Hostname = hostname,
                TxnIDs   = string.Join(",", details.TxnIDs)
            };

            _context.QBDInventoryConsumptionSyncs.Add(sync);

            // Assign the consumptions to the sync.
            foreach (var consumption in consumptions)
            {
                consumption.QBDInventoryConsumptionSyncId = sync.Id;
            }

            try
            {
                _context.SaveChanges();

                return(Ok());
            }
            catch (DbEntityValidationException ex)
            {
                string message = "";

                foreach (var eve in ex.EntityValidationErrors)
                {
                    foreach (var ve in eve.ValidationErrors)
                    {
                        message += string.Format("{0} has error '{1}'; ", ve.PropertyName, ve.ErrorMessage);
                    }
                }

                return(BadRequest(message));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(BadRequest(ex.ToString()));
            }
        }