Exemple #1
0
        public void GetExpensePhoto()
        {
            var assignmentTask = service.GetAssignmentsAsync(CancellationToken.None);

            assignmentTask.Wait();
            var assignment = assignmentTask.Result.First(a => a.CompanyName == "Xamarin");

            var expenseTask = service.GetExpensesForAssignmentAsync(assignment, CancellationToken.None);

            expenseTask.Wait();

            var expense = expenseTask.Result.First();

            var photo = new ExpensePhoto {
                ExpenseId = expense.Id,
                Image     = new byte [1],
            };

            service.SaveExpensePhotoAsync(photo, CancellationToken.None).Wait();

            var expensePhotoTask = service.GetExpensePhotoAsync(expense, CancellationToken.None);

            expensePhotoTask.Wait();

            Assert.That(expensePhotoTask.Result, Is.Not.Null);
        }
        public ExpenseViewModel()
        {
            picker = new MediaPicker();

            assignmentViewModel = ServiceContainer.Resolve <AssignmentViewModel>();

            addExpenseCommand = new DelegateCommand(async obj => {
                var expense = obj as Expense;
                if (expense != null)
                {
                    SelectedExpense  = expense;
                    CanDelete        = true;
                    AddExpenseHeader = "Expense";
                    await LoadPhotoAsync(expense);
                }
                else
                {
                    SelectedExpense  = new Expense();
                    CanDelete        = false;
                    AddExpenseHeader = "Add Expense";
                    Photo            = new ExpensePhoto();
                }
                if (addExpensePopUp != null && addExpensePopUp.IsOpen)
                {
                    addExpensePopUp.IsOpen = false;
                }
                addExpensePopUp                   = new Popup();
                addExpensePopUp.Height            = Window.Current.Bounds.Height;
                addExpensePopUp.Width             = Constants.PopUpWidth;
                AddExpenseFlyoutPanel flyoutpanel = new AddExpenseFlyoutPanel();
                flyoutpanel.Width                 = addExpensePopUp.Width;
                flyoutpanel.Height                = addExpensePopUp.Height;
                addExpensePopUp.Child             = flyoutpanel;
                addExpensePopUp.SetValue(Canvas.LeftProperty, Window.Current.Bounds.Width - Constants.PopUpWidth);
                addExpensePopUp.SetValue(Canvas.TopProperty, 0);
                addExpensePopUp.IsOpen = true;
            });

            saveExpenseCommand = new DelegateCommand(async _ => {
                selectedExpense.Cost         = ExpenseCost.ToDecimal(CultureInfo.InvariantCulture);
                selectedExpense.AssignmentId = assignmentViewModel.SelectedAssignment.Id;
                var task = SaveExpenseAsync(assignmentViewModel.SelectedAssignment, SelectedExpense);
                if (Photo != null && Photo.Image != null)
                {
                    task = task.ContinueWith(obj => {
                        Photo.ExpenseId = SelectedExpense.Id;
                    });
                    await SavePhotoAsync();
                }
                await LoadExpensesAsync(assignmentViewModel.SelectedAssignment);
                addExpensePopUp.IsOpen = false;
            });

            deleteExpenseCommand = new DelegateCommand(async _ => {
                await DeleteExpenseAsync(assignmentViewModel.SelectedAssignment, selectedExpense);
                await LoadExpensesAsync(assignmentViewModel.SelectedAssignment);
                addExpensePopUp.IsOpen = false;
            });

            cancelExpenseCommand = new DelegateCommand(_ => {
                addExpensePopUp.IsOpen = false;
            });

            addImageCommand = new DelegateCommand(async _ => {
                bool cameraCommand = false, imageCommand = false;
                var dialog         = new MessageDialog("Take picture with your built in camera or select one from your photo library.", "Add Image");
                if (picker.IsCameraAvailable)
                {
                    dialog.Commands.Add(new UICommand("Camera", new UICommandInvokedHandler(q => cameraCommand = true)));
                }
                dialog.Commands.Add(new UICommand("Library", new UICommandInvokedHandler(q => imageCommand = true)));

                await dialog.ShowAsync();

                if (cameraCommand)
                {
                    try {
                        var mediaFile = await picker.TakePhotoAsync(new StoreCameraMediaOptions());

                        var photo = await mediaFile.GetStream().LoadBytes();
                        if (Photo == null)
                        {
                            Photo = new ExpensePhoto {
                                ExpenseId = SelectedExpense.Id
                            }
                        }
                        ;
                        Photo.Image = photo;
                        OnPropertyChanged("Photo");
                    } catch (Exception exc) {
                        Debug.WriteLine(exc.Message);
                        //this could happen if they cancel, etc.
                    }
                }
                else if (imageCommand)
                {
                    try {
                        var mediaFile = await picker.PickPhotoAsync();

                        var photo = await mediaFile.GetStream().LoadBytes();
                        if (Photo == null)
                        {
                            Photo = new ExpensePhoto {
                                ExpenseId = SelectedExpense.Id
                            }
                        }
                        ;
                        Photo.Image = photo;
                        OnPropertyChanged("Photo");
                    } catch (Exception exc) {
                        Debug.WriteLine(exc.Message);
                        //this could happen if they cancel, etc.
                    }
                }
            });
        }
 public Task <int> SaveExpensePhotoAsync(ExpensePhoto photo, CancellationToken cancellationToken)
 {
     return(Task.Factory.StartNew(() => 1));
 }