using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.PPC.BugReporting.TFS;
using Tango.PPC.Common;
using Tango.Settings;
using Tango.TFS;
using Tango.Touch.Controls;
namespace Tango.PPC.BugReporting.ViewModels
{
///
/// Represents the main view VM and entry point for .
///
///
public class MainViewVM : PPCViewModel
{
private TeamFoundationServicePPCClient _tfsService;
private BugReportingSettings _settings;
public AutoCompleteProvider TeamMembersProvider { get; set; }
private String _title;
public String Title
{
get { return _title; }
set { _title = value; RaisePropertyChangedAuto(); }
}
private String _steps;
public String Steps
{
get { return _steps; }
set { _steps = value; RaisePropertyChangedAuto(); }
}
private TeamMember _fromMember;
public TeamMember FromMember
{
get { return _fromMember; }
set { _fromMember = value; RaisePropertyChangedAuto(); }
}
private TeamMember _toMember;
public TeamMember ToMember
{
get { return _toMember; }
set { _toMember = value; RaisePropertyChangedAuto(); }
}
private Severity _severity;
public Severity Severity
{
get { return _severity; }
set { _severity = value; RaisePropertyChangedAuto(); }
}
private List _members;
public List Members
{
get { return _members; }
set { _members = value; RaisePropertyChangedAuto(); }
}
public RelayCommand SubmitCommand { get; set; }
///
/// Initializes a new instance of the class.
///
public MainViewVM()
{
TeamMembersProvider = new AutoCompleteProvider((member, filter) =>
{
if (filter != null && member != null)
{
return member.DisplayName.ToLower().Contains(filter.ToLower());
}
else
{
return false;
}
});
Severity = Severity.Medium;
SubmitCommand = new RelayCommand(SubmitBug);
}
///
/// Initializes a new instance of the class.
///
/// The TFS service.
public MainViewVM(TeamFoundationServicePPCClient tfsService) : this()
{
_tfsService = tfsService;
_tfsService.Initialized += _tfsService_Initialized;
}
private void _tfsService_Initialized(object sender, EventArgs e)
{
Members = _tfsService.Project.Members.ToList();
}
private async void SubmitBug()
{
if (String.IsNullOrWhiteSpace(Title))
{
await NotificationProvider.ShowError("Report title is required.");
return;
}
if (FromMember == null)
{
await NotificationProvider.ShowError("Created By team member is required.");
return;
}
if (ToMember == null)
{
await NotificationProvider.ShowError("Assigned To team member is required.");
return;
}
try
{
IsFree = false;
await _tfsService.SubmitBug(Title, Steps, FromMember, ToMember, Severity);
await NotificationProvider.ShowSuccess("Issue reported successfully");
await NavigationManager.NavigateBack();
_settings.LastCreatedBy = FromMember.Email;
_settings.LastAssignedTo = ToMember.Email;
_settings.Save();
Title = null;
Steps = null;
Severity = Severity.Medium;
}
catch (Exception ex)
{
LogManager.Log(ex, "Error on TFS bug reporting.");
await NotificationProvider.ShowError("An error occurred while trying to submit the report. Please restart the application and try again.");
}
finally
{
IsFree = true;
}
}
public async override void OnNavigatedTo()
{
base.OnNavigatedTo();
Title = null;
Steps = null;
Severity = Severity.Medium;
if (!_tfsService.IsInitialized)
{
await NotificationProvider.ShowError("The reporting service was not initialized properly. Issue reporting is currently disabled.");
await NavigationManager.NavigateBack();
return;
}
FromMember = Members.SingleOrDefault(x => x.Email == _settings.LastCreatedBy);
ToMember = Members.SingleOrDefault(x => x.Email == _settings.LastAssignedTo);
}
///
/// Called when the application has been started
///
public override void OnApplicationStarted()
{
//Start initializing here rather then in the constructor.
_settings = SettingsManager.Default.GetOrCreate();
}
}
}