Skip to content

Commit ccbaab3

Browse files
committed
changes
1 parent fc4ee1c commit ccbaab3

21 files changed

+814
-222
lines changed

lib/backend/fetch.dart

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import 'package:fluent_ui/fluent_ui.dart';
2-
import 'package:house_management/model/exeat.dart';
32
import 'package:house_management/model/item.dart';
4-
import 'package:house_management/model/logistics.dart';
53
import 'package:house_management/model/programme.dart';
64
import 'package:house_management/model/status.dart';
75

@@ -20,27 +18,6 @@ class Backend extends ChangeNotifier {
2018

2119
List<StatusModel> get status => _status;
2220

23-
late final List<LogisticsModel> _studentLogistics = [];
24-
25-
List<LogisticsModel> get studentLogistics => _studentLogistics;
26-
27-
late final List<ExeatModel> _studentExeat = [];
28-
29-
List<ExeatModel> get studentExeat => _studentExeat;
30-
31-
// fetchStudentExeat({StudentModel? student}) async {
32-
// _studentExeat.clear();
33-
// String query = "select * from exeat e join registration r "
34-
// "on e.std_id=r.std_id where e.std_id=${student!.id}";
35-
// var res = await connection.mappedResultsQuery(query);
36-
// for (final row in res) {
37-
// Map<String, dynamic> exeat = row["exeat"];
38-
// exeat["name"] = row["registration"]["name"];
39-
// _studentExeat.add(ExeatModel.fromMap(exeat));
40-
// }
41-
// notifyListeners();
42-
// }
43-
4421
fetchStudentPunishment({int? id}) async {}
4522

4623
Future fetchProgrammes() async {

lib/backend/roll_call.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import 'package:fluent_ui/fluent_ui.dart';
2+
import 'package:house_management/utils/format_date.dart';
3+
4+
import '../main.dart';
5+
import '../model/roll_call.dart';
6+
import '../model/student.dart';
7+
8+
class RollCallProvider extends ChangeNotifier {
9+
Future fetchUniqueDates() async {
10+
String query = "select distinct(date) from roll_call";
11+
var res = await connection.mappedResultsQuery(query);
12+
return List.generate(
13+
res.length, (index) => formatDate(res[index]['roll_call']['date']));
14+
}
15+
16+
final List<RollCallsModel> _rollCalls = [];
17+
18+
List<RollCallsModel> get rollCalls => _rollCalls;
19+
20+
Future addRoll({required int stdId, bool? value}) async {
21+
String query = "insert into roll_call (date, std_id, status) "
22+
"values (now(), $stdId, ${value ?? false})";
23+
await connection.transaction((ctx) async {
24+
await ctx.query(query);
25+
});
26+
}
27+
28+
Future fetchRolls({StudentModel? student, String? query}) async {
29+
_rollCalls.clear();
30+
String q = query ??
31+
"select rc.id, rc.date, rc. status, rc.std_id, r.house from roll_call rc "
32+
"join registration r on rc.std_id=r.std_id";
33+
if (student != null) q += " where rc.std_id = ${student.id}";
34+
var res = await connection.mappedResultsQuery(q);
35+
for (final row in res) {
36+
Map<String, dynamic> rollCall = row["registration"];
37+
rollCall['present'] = row['']['present'];
38+
rollCall['absent'] = row['']['absent'];
39+
rollCall['date'] = row['roll_call']['date'];
40+
_rollCalls.add(RollCallsModel.fromMap(rollCall));
41+
}
42+
notifyListeners();
43+
if (student != null) {
44+
return List.generate(
45+
res.length,
46+
(index) => RollCallModel.fromMap(res[index]["roll_call"]),
47+
);
48+
}
49+
}
50+
}

lib/backend/student.dart

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:fluent_ui/fluent_ui.dart';
22
import 'package:house_management/backend/exeat.dart';
33
import 'package:house_management/backend/logistic.dart';
4+
import 'package:house_management/backend/roll_call.dart';
45
import 'package:house_management/model/exeat.dart';
56
import 'package:house_management/model/student.dart';
67
import 'package:house_management/utils/to_title_case.dart';
@@ -9,8 +10,33 @@ import 'package:provider/provider.dart';
910
import '../main.dart';
1011
import '../model/logistics.dart';
1112
import '../model/punishment.dart';
13+
import '../model/roll_call.dart';
1214

1315
class StudentProvider extends ChangeNotifier {
16+
final List<RollCallModel> _rollCalls = [];
17+
18+
List<RollCallModel> get rollCalls => _rollCalls;
19+
20+
Future addRollCall(
21+
{required StudentModel student,
22+
required BuildContext context,
23+
bool? value}) async {
24+
await Provider.of<RollCallProvider>(context, listen: false)
25+
.addRoll(stdId: student.id, value: value);
26+
fetchRollCalls(id: student.id);
27+
}
28+
29+
Future fetchRollCalls({required int id}) async {
30+
_rollCalls.clear();
31+
String query = "select * from roll_call where std_id=$id";
32+
var res = await connection.mappedResultsQuery(query);
33+
for (final row in res) {
34+
Map<String, dynamic> rollCall = row["roll_call"];
35+
_rollCalls.add(RollCallModel.fromMap(rollCall));
36+
}
37+
notifyListeners();
38+
}
39+
1440
final List<StudentModel> _students = [];
1541

1642
List<StudentModel> get students => _students;
@@ -186,18 +212,26 @@ class StudentProvider extends ChangeNotifier {
186212
String? query,
187213
}) async {
188214
_students.clear();
189-
var res = await connection.mappedResultsQuery(
215+
List<Map<String, Map<String, dynamic>>> res =
216+
await connection.mappedResultsQuery(
190217
query ??
191218
"select * from registration r join house h on lower(r.house)=lower(h.name) ${id != null ? "where std_id = $id" : ""}",
192219
);
193220
for (final row in res) {
194-
Map<String, dynamic> student = row["registration"];
195-
student['house'] = row['house'];
221+
Map<String, dynamic>? student = row["registration"];
222+
student!['house'] = row['house'];
196223
student['name'] = toTitle(student['name']);
197224
_students.add(StudentModel.fromMap(student));
198225
}
199226
notifyListeners();
200-
if (query != null) return _students;
227+
if (query != null) {
228+
return List.generate(res.length, (index) {
229+
Map<String, dynamic>? std = res[index]['registration'];
230+
std!['house'] = res[index]['house'];
231+
std['name'] = toTitle(std['name']);
232+
return StudentModel.fromMap(std);
233+
});
234+
}
201235
}
202236

203237
Future updateStudent({

lib/main.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:fluent_ui/fluent_ui.dart';
22
import 'package:house_management/backend/exeat.dart';
33
import 'package:house_management/backend/logistic.dart';
44
import 'package:house_management/backend/punishment.dart';
5+
import 'package:house_management/backend/roll_call.dart';
56
import 'package:house_management/backend/student.dart';
67
import 'package:house_management/constants/prefs.dart';
78
import 'package:house_management/pages/auth/login_page.dart';
@@ -65,6 +66,7 @@ class _MyAppState extends State<MyApp> {
6566
ChangeNotifierProvider(create: (context) => ExeatProvider()),
6667
ChangeNotifierProvider(create: (context) => LogisticsProvider()),
6768
ChangeNotifierProvider(create: (context) => PunishmentProvider()),
69+
ChangeNotifierProvider(create: (context) => RollCallProvider()),
6870
],
6971
child: const HomePage(),
7072
);

lib/model/roll_call.dart

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
import 'dart:convert';
2+
3+
class RollCallModel {
4+
final int id;
5+
final DateTime date;
6+
final int std_id;
7+
final bool status;
8+
9+
RollCallModel({
10+
required this.id,
11+
required this.date,
12+
required this.std_id,
13+
required this.status,
14+
});
15+
16+
RollCallModel copyWith({
17+
required int id,
18+
required DateTime date,
19+
required int std_id,
20+
required bool status,
21+
}) {
22+
return RollCallModel(
23+
id: id, // this.id,
24+
date: date, // this.date,
25+
std_id: std_id, // this.std_id,
26+
status: status,
27+
);
28+
}
29+
30+
RollCallModel merge(RollCallModel model) {
31+
return RollCallModel(
32+
id: model.id, // this.id,
33+
date: model.date, // this.date,
34+
std_id: model.std_id, // this.std_id,
35+
status: model.status,
36+
);
37+
}
38+
39+
Map<String, dynamic> toMap() {
40+
return {
41+
'id': id,
42+
'date': date,
43+
'std_id': std_id,
44+
'status': status,
45+
};
46+
}
47+
48+
factory RollCallModel.fromMap(Map<String, dynamic> map) {
49+
return RollCallModel(
50+
id: map['id'],
51+
date: map['date'],
52+
std_id: map['std_id'],
53+
status: map['status']);
54+
}
55+
56+
String toJson() => json.encode(toMap());
57+
58+
factory RollCallModel.fromJson(String source) =>
59+
RollCallModel.fromMap(json.decode(source));
60+
61+
@override
62+
String toString() {
63+
return 'RollCallModel(id: $id, date: $date, std_id: $std_id)';
64+
}
65+
66+
@override
67+
bool operator ==(Object o) {
68+
if (identical(this, o)) return true;
69+
70+
return o is RollCallModel &&
71+
o.id == id &&
72+
o.date == date &&
73+
o.std_id == std_id;
74+
}
75+
76+
@override
77+
int get hashCode {
78+
return id.hashCode ^ date.hashCode ^ std_id.hashCode;
79+
}
80+
}
81+
82+
class RollCallsModel {
83+
final String house;
84+
final int present;
85+
final int absent;
86+
final DateTime date;
87+
RollCallsModel({
88+
required this.house,
89+
required this.present,
90+
required this.absent,
91+
required this.date,
92+
});
93+
94+
RollCallsModel copyWith({
95+
required String house,
96+
required int present,
97+
required int absent,
98+
required DateTime date,
99+
}) {
100+
return RollCallsModel(
101+
house: house, // this.house,
102+
present: present, // this.present,
103+
absent: absent, // this.absent,
104+
date: date, // this.date,
105+
);
106+
}
107+
108+
RollCallsModel merge(RollCallsModel model) {
109+
return RollCallsModel(
110+
house: model.house, // this.house,
111+
present: model.present, // this.present,
112+
absent: model.absent, // this.absent,
113+
date: model.date, // this.date,
114+
);
115+
}
116+
117+
Map<String, dynamic> toMap() {
118+
return {
119+
'house': house,
120+
'present': present,
121+
'absent': absent,
122+
'date': date,
123+
};
124+
}
125+
126+
factory RollCallsModel.fromMap(Map<String, dynamic> map) {
127+
return RollCallsModel(
128+
house: map['house'],
129+
present: map['present'],
130+
absent: map['absent'],
131+
date: map['date'],
132+
);
133+
}
134+
135+
String toJson() => json.encode(toMap());
136+
137+
factory RollCallsModel.fromJson(String source) =>
138+
RollCallsModel.fromMap(json.decode(source));
139+
140+
@override
141+
String toString() {
142+
return 'RollCallsModel(house: $house, present: $present, absent: $absent, date: $date)';
143+
}
144+
145+
@override
146+
bool operator ==(Object o) {
147+
if (identical(this, o)) return true;
148+
149+
return o is RollCallsModel &&
150+
o.house == house &&
151+
o.present == present &&
152+
o.absent == absent &&
153+
o.date == date;
154+
}
155+
156+
@override
157+
int get hashCode {
158+
return house.hashCode ^ present.hashCode ^ absent.hashCode ^ date.hashCode;
159+
}
160+
}

lib/pages/exeat/view.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import 'package:house_management/backend/exeat.dart';
44
import 'package:house_management/utils/format_date.dart';
55
import 'package:provider/provider.dart';
66

7-
import '../registration/filter.dart';
8-
97
class ExeatPage extends StatefulWidget {
108
const ExeatPage({Key? key}) : super(key: key);
119

@@ -38,10 +36,10 @@ class _ExeatPageState extends State<ExeatPage> {
3836
content: Row(
3937
crossAxisAlignment: CrossAxisAlignment.start,
4038
children: [
41-
const FilterWidget(),
42-
const SizedBox(
43-
width: 10,
44-
),
39+
// const FilterWidget(),
40+
// const SizedBox(
41+
// width: 10,
42+
// ),
4543
Expanded(
4644
child: Consumer<ExeatProvider>(
4745
builder: (context, ep, child) {

lib/pages/homepage/view.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import 'package:fluent_ui/fluent_ui.dart';
2+
import 'package:house_management/backend/student.dart';
23
import 'package:house_management/pages/exeat/view.dart';
34
import 'package:house_management/pages/logistics/view.dart';
45
import 'package:house_management/pages/registration/view.dart';
6+
import 'package:provider/provider.dart';
57

68
import '../roll_call/view.dart';
79

@@ -33,7 +35,10 @@ class _HomeState extends State<Home> {
3335
}),
3436
pane: NavigationPane(
3537
selected: selectedIndex,
36-
onChanged: (i) => setState(() => selectedIndex = i),
38+
onChanged: (i) {
39+
Provider.of<StudentProvider>(context, listen: false).clearStudent();
40+
setState(() => selectedIndex = i);
41+
},
3742
displayMode: PaneDisplayMode.auto,
3843
items: [
3944
PaneItem(

lib/pages/logistics/view.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ class _LogisticsPageState extends State<LogisticsPage> {
3737
content: Row(
3838
crossAxisAlignment: CrossAxisAlignment.start,
3939
children: [
40-
const FilterWidget(),
41-
const SizedBox(
42-
width: 10,
43-
),
40+
// const FilterWidget(),
41+
// const SizedBox(
42+
// width: 10,
43+
// ),
4444
Expanded(
4545
child: Consumer<LogisticsProvider>(builder: (context, lp, child) {
4646
return SingleChildScrollView(

0 commit comments

Comments
 (0)