chnages has been made and net salary is being displayed

This commit is contained in:
Daniah Ayad Al-sultani
2026-02-11 14:31:03 +03:00
parent 1002937045
commit a7930d19e5
23 changed files with 691 additions and 141 deletions

View File

@@ -7,6 +7,7 @@ import '../dto/attendance_record_dto.dart';
import '../dto/overtime_dto.dart';
import '../dto/reward_dto.dart';
import '../dto/punishment_dto.dart';
import '../dto/salary_response_dto.dart';
abstract class AttendanceRemoteDataSource {
Future<AttendanceResponseDto> login({
@@ -25,6 +26,11 @@ abstract class AttendanceRemoteDataSource {
Future<List<OvertimeDto>> getExtraHours({required String employeeId});
Future<List<RewardDto>> getRewards({required String employeeId});
Future<List<PunishmentDto>> getPunishments({required String employeeId});
Future<SalaryResponseDto> calculateSalary({
required String employeeId,
required int month,
required int year,
});
}
class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
@@ -286,4 +292,66 @@ class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
throw ServerException(message: 'خطأ غير متوقع');
}
}
@override
Future<SalaryResponseDto> calculateSalary({
required String employeeId,
required int month,
required int year,
}) async {
try {
final response = await apiClient.get(
'/SalaryRecord/calculate',
queryParameters: {
'EmployeeId': employeeId,
'Month': month,
'Year': year,
},
);
print('Salary Response Status: ${response.statusCode}');
if (response.statusCode == 200 || response.statusCode == 201) {
final responseData = response.data;
print(
'Salary Response Data: $responseData (${responseData.runtimeType})',
);
if (responseData is Map<String, dynamic>) {
return SalaryResponseDto.fromJson(responseData);
} else if (responseData is num) {
// Handle case where API returns raw number
return SalaryResponseDto(
isSuccess: true,
message: 'Success',
data: SalaryDataDto(netAmount: responseData.toDouble()),
);
} else if (responseData is String &&
double.tryParse(responseData) != null) {
// Handle case where API returns raw numeric string
return SalaryResponseDto(
isSuccess: true,
message: 'Success',
data: SalaryDataDto(netAmount: double.parse(responseData)),
);
} else {
throw ServerException(
message: 'استجابة غير صحيحة من الخادم: $responseData',
statusCode: response.statusCode,
);
}
} else {
throw ServerException(
message: 'فشل في حساب الراتب (Status: ${response.statusCode})',
statusCode: response.statusCode,
);
}
} on DioException catch (e) {
throw ServerException(
message: e.message ?? 'Unknown error',
statusCode: e.response?.statusCode,
);
} catch (e) {
throw ServerException(message: 'خطأ غير متوقع');
}
}
}