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"); } }
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())); } }