Manually merged.

This commit is contained in:
Oliver Hauff 2021-12-08 17:57:30 +01:00
parent d5832e010e
commit c7c9f252af
112 changed files with 1127 additions and 352 deletions

View file

@ -0,0 +1,21 @@
using TINK.Model.MiniSurvey;
namespace TINK.Model
{
/// <summary>
/// Holds tasks to be accoumplished/ information shown to user after booking has finished.
/// </summary>
public class BookingFinishedModel
{
/// <summary>
/// Minisurvey to query user.
/// </summary>
public MiniSurveyModel MiniSurvey { get; set; } = new MiniSurveyModel();
/// <summary>
/// Holds info about co2 saving accomplished by using cargo bike.
/// </summary>
public string Co2Saving { get; set; }
}
}

View file

@ -122,13 +122,13 @@ namespace TINK.Model.Connector
Log.ForContext<Command>().Error("Unexpected booking request detected. No user logged in.");
await Task.CompletedTask;
}
public async Task<MiniSurveyModel> DoReturn(
public async Task<BookingFinishedModel> DoReturn(
Bikes.Bike.BluetoothLock.IBikeInfoMutable bike,
LocationDto location,
ISmartDevice smartDevice)
{
Log.ForContext<Command>().Error("Unexpected returning request detected. No user logged in.");
return await Task.FromResult(new MiniSurveyModel());
return await Task.FromResult(new BookingFinishedModel());
}
/// <summary>

View file

@ -248,7 +248,7 @@ namespace TINK.Model.Connector
/// <param name="bike">Bike to return.</param>
/// <param name="locaton">Position of the bike.</param>
/// <param name="smartDevice">Provides info about hard and software.</param>
public async Task<MiniSurveyModel> DoReturn(
public async Task<BookingFinishedModel> DoReturn(
Bikes.Bike.BluetoothLock.IBikeInfoMutable bike,
LocationDto location,
ISmartDevice smartDevice)
@ -258,7 +258,7 @@ namespace TINK.Model.Connector
throw new ArgumentNullException("Can not return bike. No bike object available.");
}
ReservationCancelReturnResponse response;
DoReturnResponse response;
try
{
response = (await CopriServer.DoReturn(bike.Id, location, smartDevice, bike.OperatorUri)).GetIsReturnBikeResponseOk(bike.Id);
@ -270,7 +270,7 @@ namespace TINK.Model.Connector
}
bike.Load(Bikes.Bike.BC.NotifyPropertyChangedLevel.None);
return response?.Create() ?? new MiniSurveyModel();
return response?.Create() ?? new BookingFinishedModel();
}
/// <summary>

View file

@ -50,7 +50,7 @@ namespace TINK.Model.Connector
/// <param name="bike">Bike to return.</param>
/// <param name="location">Geolocation of lock when returning bike.</param>
/// <param name="smartDevice">Provides info about hard and software.</param>
Task<MiniSurveyModel> DoReturn(Bikes.Bike.BluetoothLock.IBikeInfoMutable bike, LocationDto geolocation = null, ISmartDevice smartDevice = null);
Task<BookingFinishedModel> DoReturn(Bikes.Bike.BluetoothLock.IBikeInfoMutable bike, LocationDto geolocation = null, ISmartDevice smartDevice = null);
/// <summary> True if connector has access to copri server, false if cached values are used. </summary>
bool IsConnected { get; }

View file

@ -512,6 +512,46 @@ namespace TINK.Model.Connector
};
}
/// <summary> Creates a booking finished object from response.</summary>
/// <param name="response">Response to create survey object from.</param>
public static BookingFinishedModel Create(this DoReturnResponse response)
{
var bookingFinished = new BookingFinishedModel
{
Co2Saving = response?.co2saving
};
if (response?.user_miniquery == null)
{
return bookingFinished;
}
var miniquery = response.user_miniquery;
bookingFinished.MiniSurvey = new MiniSurveyModel
{
Title = miniquery.title,
Subtitle = miniquery.subtitle,
Footer = miniquery.footer
};
foreach (var question in miniquery?.questions?.OrderBy(x => x.Key) ?? new Dictionary<string, MiniSurveyResponse.Question>().OrderBy(x => x.Key))
{
if (string.IsNullOrEmpty(question.Key.Trim())
|| question.Value.query == null)
{
// Skip invalid entries.
continue;
}
bookingFinished.MiniSurvey.Questions.Add(
question.Key,
new MiniSurveyModel.QuestionModel());
}
return bookingFinished;
}
/// <summary> Creates a survey object from response.</summary>
/// <param name="response">Response to create survey object from.</param>
public static MiniSurveyModel Create(this ReservationCancelReturnResponse response)

View file

@ -3,6 +3,9 @@
namespace TINK.Model.MiniSurvey
{
/// <summary>
/// Holds mini survey.
/// </summary>
public class MiniSurveyModel
{
public enum Type
@ -12,21 +15,17 @@ namespace TINK.Model.MiniSurvey
}
public class QuestionModel
{
public QuestionModel()
{
PossibleAnswers = new Dictionary<string, string>();
}
/// <summary>
/// Holds the query description.
/// </summary>
public string Text { get; set; }
public Type Type { get; set; }
public Dictionary<string, string> PossibleAnswers { get; private set; }
}
public MiniSurveyModel()
{
Questions = new Dictionary<string, QuestionModel>();
/// <summary>
/// Holds the collection of possible answers.
/// </summary>
public Dictionary<string, string> PossibleAnswers { get; private set; } = new Dictionary<string, string>();
}
public string Title { get; set; }
@ -35,6 +34,6 @@ namespace TINK.Model.MiniSurvey
public string Footer { get; set; }
public Dictionary<string, QuestionModel> Questions { get; }
public Dictionary<string, QuestionModel> Questions { get; } = new Dictionary<string, QuestionModel>();
}
}

View file

@ -455,8 +455,13 @@ namespace TINK.Model
AppResources.ChangeLog3_0_250 // Third-party components updated.
},
{
new Version(3, 0, 262),
AppResources.ChangeLog3_0_262
new Version(3, 0, 260),
// Same info as for version 3.0.251 and 3.0.252
AppResources.ChangeLog3_0_231 // Minor improvements.
},
{
new Version(3, 0, 263),
AppResources.ChangeLog3_0_263
}
};