chnages has been made and net salary is being displayed
This commit is contained in:
@@ -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: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user