Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
lahirulakruwan committed Oct 23, 2024
2 parents d0598d8 + 8336cab commit cf82dab
Show file tree
Hide file tree
Showing 9 changed files with 1,183 additions and 107 deletions.
35 changes: 21 additions & 14 deletions campus/frontend/lib/avinya/attendance/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class _CampusAttendanceManagementSystemState
'/bulk_attendance_marker/class2',
'/daily_attendance_report',
'/weekly_payment_report',
'/monthly_payment_report',
'/avinya_types',
'/#access_token',
'/person_attendance_report',
Expand Down Expand Up @@ -128,26 +129,30 @@ class _CampusAttendanceManagementSystemState
'/daily_attendance_report', '/daily_attendance_report', {}, {});
final weeklyPaymentReportRoute =
ParsedRoute('/weekly_payment_report', '/weekly_payment_report', {}, {});
final monthlyPaymentReportRoute = ParsedRoute(
'/monthly_payment_report', '/monthly_payment_report', {}, {});

final personAttendanceReportRoute = ParsedRoute(
'/person_attendance_report', '/person_attendance_report', {}, {});
final lateAttendanceReportRoute = ParsedRoute(
'/late_attendance_report', '/late_attendance_report', {}, {});

final dutyParticipantsRoute = ParsedRoute(
'/duty_participants','/duty_participants', {}, {});
final dutyParticipantsRoute =
ParsedRoute('/duty_participants', '/duty_participants', {}, {});

final dutyAttendanceMarkerRoute = ParsedRoute(
'/duty_attendance_marker','/duty_attendance_marker', {}, {});
'/duty_attendance_marker', '/duty_attendance_marker', {}, {});

final qrAttendanceMarkerRoute =
ParsedRoute('/qr_attendance_marker', '/qr_attendance_marker', {}, {});

final dailyDutyAttendanceReportRoute =
ParsedRoute('/daily_duty_attendance_report', '/daily_duty_attendance_report', {}, {});

final dailyAttendanceSummaryReportRoute =
ParsedRoute('/daily_attendance_summary_report', '/daily_attendance_summary_report', {}, {});
final dailyDutyAttendanceReportRoute = ParsedRoute(
'/daily_duty_attendance_report',
'/daily_duty_attendance_report', {}, {});

final dailyAttendanceSummaryReportRoute = ParsedRoute(
'/daily_attendance_summary_report',
'/daily_attendance_summary_report', {}, {});

// // Go to /apply if the user is not signed in
log("_guard signed in $signedIn");
Expand All @@ -168,13 +173,15 @@ class _CampusAttendanceManagementSystemState
return dailyAttendanceReportRoute;
} else if (signedIn && from == weeklyPaymentReportRoute) {
return weeklyPaymentReportRoute;
} else if (signedIn && from == personAttendanceReportRoute){
} else if (signedIn && from == weeklyPaymentReportRoute) {
return monthlyPaymentReportRoute;
} else if (signedIn && from == personAttendanceReportRoute) {
return personAttendanceReportRoute;
} else if (signedIn && from == dutyParticipantsRoute){
return dutyParticipantsRoute;
} else if (signedIn && from == dutyAttendanceMarkerRoute){
return dutyAttendanceMarkerRoute;
}else if (signedIn && from == qrAttendanceMarkerRoute) {
} else if (signedIn && from == dutyParticipantsRoute) {
return dutyParticipantsRoute;
} else if (signedIn && from == dutyAttendanceMarkerRoute) {
return dutyAttendanceMarkerRoute;
} else if (signedIn && from == qrAttendanceMarkerRoute) {
} else if (signedIn && from == lateAttendanceReportRoute) {
return lateAttendanceReportRoute;
} else if (signedIn && from == qrAttendanceMarkerRoute) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
// Copyright 2019 The Flutter team. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:attendance/widgets/excel_export.dart';
import 'package:gallery/data/person.dart';
import 'package:attendance/data/activity_attendance.dart';
import 'package:gallery/avinya/attendance/lib/widgets/monthly_payment_report.dart';
import 'package:gallery/data/campus_apps_portal.dart';
import 'package:intl/intl.dart';

class MonthlyPaymentReportScreen extends StatefulWidget {
const MonthlyPaymentReportScreen({super.key});

@override
_MonthlyPaymentReportScreenState createState() =>
_MonthlyPaymentReportScreenState();
}

class _MonthlyPaymentReportScreenState extends State<MonthlyPaymentReportScreen>
with SingleTickerProviderStateMixin {
List<ActivityAttendance> _fetchedExcelReportData = [];
List<Person> _fetchedStudentList = [];
List<String?> columnNames = [];
var activityId = 0;
bool isFetching = true;

//calendar specific variables
DateTime _focusedDay = DateTime.now();
DateTime? _selectedDay;
DateTime? _rangeStart;
DateTime? _rangeEnd;

late String formattedStartDate;
late String formattedEndDate;

void selectWeek(DateTime today, activityId) async {
// Calculate the start of the week (excluding weekends) based on the selected day
DateTime startOfWeek = today.subtract(Duration(days: today.weekday - 1));
while (startOfWeek.weekday > DateTime.friday) {
startOfWeek = startOfWeek.subtract(Duration(days: 1));
}

// Calculate the end of the week (excluding weekends) based on the start of the week
DateTime endOfWeek = startOfWeek.add(Duration(days: 4));

int? parentOrgId =
campusAppsPortalInstance.getUserPerson().organization!.id;

if (parentOrgId != null) {
setState(() {
this.isFetching = true;
});
try {
_fetchedExcelReportData =
await getClassActivityAttendanceReportByParentOrg(
parentOrgId,
activityId,
DateFormat('yyyy-MM-dd').format(startOfWeek),
DateFormat('yyyy-MM-dd').format(endOfWeek));
_fetchedStudentList = await fetchStudentList(parentOrgId);

setState(() {
this._fetchedExcelReportData = _fetchedExcelReportData;
this._fetchedStudentList = _fetchedStudentList;
this.isFetching = false;
});
} catch (e) {
setState(() {
this.isFetching = false;
});
}
}
}

void updateDateRange(_rangeStart, _rangeEnd) async {
int? parentOrgId =
campusAppsPortalInstance.getUserPerson().organization!.id;
if (parentOrgId != null) {
setState(() {
this.isFetching = true;
});
try {
_fetchedExcelReportData =
await getClassActivityAttendanceReportByParentOrg(
parentOrgId,
activityId,
DateFormat('yyyy-MM-dd').format(_rangeStart),
DateFormat('yyyy-MM-dd').format(_rangeEnd));
setState(() {
final startDate = _rangeStart ?? _selectedDay;
final endDate = _rangeEnd ?? _selectedDay;
final formatter = DateFormat('MMM d, yyyy');
final formattedStartDate = formatter.format(startDate!);
final formattedEndDate = formatter.format(endDate!);
this.formattedStartDate = formattedStartDate;
this.formattedEndDate = formattedEndDate;
this._fetchedStudentList = _fetchedStudentList;
// this.isFetching = false;
this._fetchedExcelReportData = _fetchedExcelReportData;
});
} catch (e) {
setState(() {
this.isFetching = false;
});
}
}
}

@override
void initState() {
super.initState();
var today = DateTime.now();
activityId = campusAppsPortalInstance.activityIds['homeroom']!;
selectWeek(today, activityId);
}

void updateExcelState() {
ExcelExport(
fetchedAttendance: _fetchedExcelReportData,
columnNames: columnNames,
fetchedStudentList: _fetchedStudentList,
updateExcelState: updateExcelState,
isFetching: isFetching,
);
}

@override
void dispose() {
super.dispose();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text("Weekly Student Payment Report",
style: TextStyle(color: Colors.black)),
backgroundColor: Color.fromARGB(255, 236, 230, 253),
),
body: SingleChildScrollView(
child: Container(
child: Column(
children: [
MonthlyPaymentReport(
title: 'Weekly Student Payment',
updateDateRangeForExcel: updateDateRange,
)
],
),
),
),
floatingActionButton: this.isFetching
? null
: ExcelExport(
fetchedAttendance: _fetchedExcelReportData,
columnNames: columnNames,
fetchedStudentList: _fetchedStudentList,
updateExcelState: updateExcelState,
isFetching: isFetching,
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
);
}
}
41 changes: 34 additions & 7 deletions campus/frontend/lib/avinya/attendance/lib/screens/scaffold.dart
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ class _SMSScaffoldState extends State<SMSScaffold> {
padding: EdgeInsets.only(left: 15.0, right: 15.0, bottom: 5.0),
child: ListTile(
hoverColor: Colors.white.withOpacity(0.3),
leading: Icon(Icons.summarize_sharp,
color: Colors.white, size: 20.0),
leading:
Icon(Icons.summarize_sharp, color: Colors.white, size: 20.0),
title: Container(
margin: EdgeInsets.only(left: 12.0),
transform: Matrix4.translationValues(-25, 0.0, 0.0),
Expand Down Expand Up @@ -161,6 +161,29 @@ class _SMSScaffoldState extends State<SMSScaffold> {
),
),
),
// Material(
// type: MaterialType.transparency,
// child: Container(
// padding: EdgeInsets.only(left: 15.0, right: 15.0, bottom: 5.0),
// child: ListTile(
// hoverColor: Colors.white.withOpacity(0.3),
// leading:
// Icon(Icons.paid_outlined, color: Colors.white, size: 20.0),
// title: Container(
// margin: EdgeInsets.only(left: 12.0),
// transform: Matrix4.translationValues(-25, 0.0, 0.0),
// child: Text(
// "Weekly Payment Report",
// style: TextStyle(color: Colors.white, fontSize: 12),
// ),
// ),
// onTap: () {
// Navigator.pop(context); // Close the drawer
// routeState.go('/weekly_payment_report');
// },
// ),
// ),
// ),
Material(
type: MaterialType.transparency,
child: Container(
Expand All @@ -173,13 +196,13 @@ class _SMSScaffoldState extends State<SMSScaffold> {
margin: EdgeInsets.only(left: 12.0),
transform: Matrix4.translationValues(-25, 0.0, 0.0),
child: Text(
"Weekly Payment Report",
"Monthly Payment Report",
style: TextStyle(color: Colors.white, fontSize: 12),
),
),
onTap: () {
Navigator.pop(context); // Close the drawer
routeState.go('/weekly_payment_report');
routeState.go('/monthly_payment_report');
},
),
),
Expand Down Expand Up @@ -319,12 +342,16 @@ class _SMSScaffoldState extends State<SMSScaffold> {

return Scaffold(
appBar: AppBar(
title: Text("Avinya Academy - Campus Attendance Portal",style: TextStyle(color: Colors.white)),
title: Text("Avinya Academy - Campus Attendance Portal",
style: TextStyle(color: Colors.white)),
backgroundColor: Colors.deepPurpleAccent,
iconTheme: IconThemeData(color: Colors.white),
actions: <Widget>[
IconButton(
icon: const Icon(Icons.logout,color: Colors.white,),
icon: const Icon(
Icons.logout,
color: Colors.white,
),
tooltip: 'Logout',
onPressed: () {
SMSAuthScope.of(context).signOut();
Expand All @@ -333,7 +360,7 @@ class _SMSScaffoldState extends State<SMSScaffold> {
},
),
IconButton(
icon: const Icon(Icons.info,color: Colors.white),
icon: const Icon(Icons.info, color: Colors.white),
tooltip: 'Help',
onPressed: () {
Navigator.push(context, MaterialPageRoute<void>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:attendance/screens/duty_attendance_marker.dart';
import 'package:attendance/screens/late_attendance_report.dart';
import 'package:attendance/screens/dashboard/dashboard_screen.dart';
import 'package:attendance/screens/daily_attendance_summary_report.dart';
import 'package:gallery/avinya/attendance/lib/screens/monthly_payment_report.dart';

import '../routing.dart';
import '../widgets/fade_transition_page.dart';
Expand Down Expand Up @@ -83,6 +84,12 @@ class SMSScaffoldBody extends StatelessWidget {
key: ValueKey('weekly_payment_report'),
child: WeeklyPaymentReportScreen(),
)
else if (currentRoute.pathTemplate
.startsWith('/monthly_payment_report'))
const FadeTransitionPage<void>(
key: ValueKey('monthly_payment_report'),
child: MonthlyPaymentReportScreen(),
)
else if (currentRoute.pathTemplate
.startsWith('/person_attendance_report'))
const FadeTransitionPage<void>(
Expand Down
Loading

0 comments on commit cf82dab

Please sign in to comment.