public void SaveTransaction(ObservableCollection<Transaction> transactions, Action<Exception> callback)
            {
                App.Instance.StaticServiceData.SetServerStatus(async status =>
                {
                    //continue with local if status is ok but is pending Sync
                    if (status != Model.StaticServiceData.ServerStatus.Ok || !App.Instance.IsSync)
                    {
                        try
                        {
                            foreach (var item in transactions)
                                item.OptimizeOnTopLevel(Transaction.ImageRemovalStatus.None);

                            foreach (var item in TransactionList.Where(x => x.HasChanges))
                                item.HasChanges = false;

                            await SetupTransactionList(transactions, false);

                            App.Instance.IsSync = false;

                            callback(null);
                        }
                        catch (Exception ex)
                        {
                            callback(ex);
                        }
                    }
                    else
                    {
                        var client = new MainClient();

                        foreach (var item in transactions)
                            item.OptimizeOnTopLevel(Transaction.ImageRemovalStatus.Unchanged);

                        client.SaveTransactionsAsync(transactions);
                        client.SaveTransactionsCompleted +=  async (sender, completedEventArgs) =>
                        {
                            if (completedEventArgs.Error == null)
                            {
                                await SetupTransactionList(completedEventArgs.Result, true);

                                //Only update sync when offline and in login and main pages
                                //App.Instance.IsSync = true;

                                callback(null);
                            }
                            else
                                callback(completedEventArgs.Error);

                        };
                    }
                });
            }