Skip to content

Commit bddf57b

Browse files
committed
Add substitution informations to the periods
1 parent d5cc7ec commit bddf57b

5 files changed

Lines changed: 108 additions & 9 deletions

File tree

API.Test/TimeTableTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void GetTimetable()
8282
{
8383
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
8484

85-
Task<Period[]> timetable = Client.GetTimetableForStudentAsync(Client.User as Student, new DateTime(2023, 06, 09), new DateTime(2023, 06, 16));
85+
Task<Period[]> timetable = Client.GetTimetableForStudentAsync(Client.User as Student, new DateTime(2023, 05, 29), new DateTime(2023, 06, 2));
8686
timetable.Wait();
8787
if (timetable.Result.Length > 0)
8888
Assert.Pass();
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using WebUntisAPI.Client.Extensions;
9+
using WebUntisAPI.Client.Models;
10+
11+
namespace WebUntisAPI.Client.Converter
12+
{
13+
internal class TimetableRequestModelJsonConverter : JsonConverter<TimetableRequestModel>
14+
{
15+
public override TimetableRequestModel ReadJson(JsonReader reader, Type objectType, TimetableRequestModel existingValue, bool hasExistingValue, JsonSerializer serializer)
16+
{
17+
JObject options = JObject.Load(reader).Value<JObject>("options");
18+
return new TimetableRequestModel()
19+
{
20+
Id = options.Value<JObject>("element").Value<int>("id"),
21+
Type = options.Value<JObject>("element").Value<int>("type"),
22+
StartDate = new DateTime().FromWebUntisTimeFormat(options.Value<string>("startDate"), "000"),
23+
EndDate = new DateTime().FromWebUntisTimeFormat(options.Value<string>("endDate"), "000")
24+
};
25+
}
26+
27+
public override void WriteJson(JsonWriter writer, TimetableRequestModel value, JsonSerializer serializer)
28+
{
29+
writer.WriteStartObject();
30+
31+
writer.WritePropertyName("options");
32+
writer.WriteStartObject();
33+
34+
writer.WritePropertyName("element");
35+
writer.WriteStartObject();
36+
37+
writer.WritePropertyName("id");
38+
writer.WriteValue(value.Id);
39+
40+
writer.WritePropertyName("type");
41+
writer.WriteValue(value.Type);
42+
43+
writer.WriteEndObject();
44+
45+
value.StartDate.ToWebUntisTimeFormat(out string startDateString, out _);
46+
writer.WritePropertyName("startDate");
47+
writer.WriteValue(startDateString);
48+
49+
value.EndDate.ToWebUntisTimeFormat(out string endDateString, out _);
50+
writer.WritePropertyName("endDate");
51+
writer.WriteValue(endDateString);
52+
53+
writer.WritePropertyName("showBooking");
54+
writer.WriteValue(true);
55+
56+
writer.WritePropertyName("showInfo");
57+
writer.WriteValue(true);
58+
59+
writer.WritePropertyName("showSubstText");
60+
writer.WriteValue(true);
61+
62+
writer.WritePropertyName("showLsText");
63+
writer.WriteValue(true);
64+
65+
writer.WritePropertyName("showLsNumber");
66+
writer.WriteValue(true);
67+
68+
writer.WritePropertyName("showStudentgroup");
69+
writer.WriteValue(true);
70+
71+
writer.WriteEndObject();
72+
writer.WriteEndObject();
73+
}
74+
}
75+
}

WebUntisAPI.Client/Exceptions/WebUntisException.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ public enum Codes
3838
/// <summary>
3939
/// The element that you requested was not found
4040
/// </summary>
41-
NoSuchElementFound = -7002
41+
NoSuchElementFound = -7002,
42+
43+
/// <summary>
44+
/// Access dinied for substitutions
45+
/// </summary>
46+
NoRightForGetSubstitutions = -8509
4247
}
4348

4449
/// <summary>

WebUntisAPI.Client/Models/Period.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,42 @@ public class Period
8484
[JsonProperty("code")]
8585
public Code Code { get; set; } = Code.None;
8686

87+
/// <summary>
88+
/// Number of the lesson
89+
/// </summary>
90+
[JsonProperty("lsnumber")]
91+
public int LessonNumber { get; set; }
92+
8793
/// <summary>
8894
/// Statistical flags of the lesson
8995
/// </summary>
9096
[JsonProperty("statflags")]
9197
public string StatisticalFlags { get; set; } = string.Empty;
9298

9399
/// <summary>
94-
/// Text of the lesson
100+
/// Informations about the lesson
95101
/// </summary>
96102
[JsonProperty("lstext")]
97103
public string LessonText { get; set; } = string.Empty;
98104

105+
/// <summary>
106+
/// Additional informations about the student group
107+
/// </summary>
108+
[JsonProperty("sg")]
109+
public string StudentGroup { get; set; } = string.Empty;
110+
111+
/// <summary>
112+
/// Additional text when it is a substitution
113+
/// </summary>
114+
[JsonProperty("substText")]
115+
public string SubstitutionText { get; set; } = string.Empty;
116+
117+
/// <summary>
118+
/// Additional informations for the students
119+
/// </summary>
120+
[JsonProperty("info")]
121+
public string Info { get; set; } = string.Empty;
122+
99123
/// <summary>
100124
/// The activity type in the lesson
101125
/// </summary>

WebUntisAPI.Client/Models/TimetableRequestModel.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
namespace WebUntisAPI.Client.Models
1010
{
11+
[JsonConverter(typeof(TimetableRequestModelJsonConverter))]
1112
internal struct TimetableRequestModel
1213
{
1314
/// <summary>
1415
/// Id of that what you want too request
1516
/// </summary>
16-
[JsonProperty("id")]
1717
public int Id { get; set; }
1818

1919
/// <summary>
@@ -29,21 +29,16 @@ internal struct TimetableRequestModel
2929
/// <item>5 = student</item>
3030
/// </list>
3131
/// </remarks>
32-
[JsonProperty("type")]
3332
public int Type { get; set; }
3433

3534
/// <summary>
3635
/// Start date of requested informations
3736
/// </summary>
38-
[JsonProperty("startDate")]
39-
[JsonConverter(typeof(DateJsonConverter))]
4037
public DateTime StartDate { get; set; }
4138

4239
/// <summary>
4340
/// End date of the requested informations
4441
/// </summary>
45-
[JsonProperty("endDate")]
46-
[JsonConverter(typeof(DateJsonConverter))]
4742
public DateTime EndDate { get; set; }
4843
}
4944
}

0 commit comments

Comments
 (0)