import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:unit2/utils/request.dart'; import 'package:unit2/utils/text_container.dart'; import '../../model/profile/learning_development.dart'; import '../../utils/urls.dart'; import 'package:http/http.dart' as http; class LearningDevelopmentServices { static final LearningDevelopmentServices _instance = LearningDevelopmentServices(); static LearningDevelopmentServices get instance => _instance; Future> getLearningDevelopments( int profileId, String token) async { List learningsAndDevelopments = []; String authToken = "Token $token"; String path = "${Url.instance.learningAndDevelopments()}$profileId/"; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authToken }; try { http.Response response = await Request.instance .getRequest(path: path, param: {}, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); if (data['data'] != null) { data['data'].forEach((var learnings) { LearningDevelopement learningDevelopement = LearningDevelopement.fromJson(learnings); learningsAndDevelopments.add(learningDevelopement); }); } } } catch (e) { throw e.toString(); } return learningsAndDevelopments; } ////Add Future> add( {required LearningDevelopement learningDevelopement, required String token, required int profileId}) async { String authtoken = "Token $token"; String path = '${Url.instance.learningAndDevelopments()}$profileId/'; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; Map statusResponse = {}; try { Map body = { "training_conduct_id": learningDevelopement.conductedTraining?.id, "total_hours_attended": learningDevelopement.totalHoursAttended.toString(), "sponsor_id": learningDevelopement.sponsoredBy?.id, "sponsor_name": learningDevelopement.sponsoredBy?.name, "sponsor_category": learningDevelopement.sponsoredBy?.category?.id, "sponsor_private": learningDevelopement.sponsoredBy?.privateEntity, "training_id": learningDevelopement.conductedTraining?.title?.id, "training_title": learningDevelopement.conductedTraining?.title?.title, "topic_id": learningDevelopement.conductedTraining?.topic?.id, "topic_title": learningDevelopement.conductedTraining?.topic?.title, "conductor_id": learningDevelopement.conductedTraining?.conductedBy?.id, "conductor_name": learningDevelopement.conductedTraining?.conductedBy?.name, "conductor_category": learningDevelopement.conductedTraining?.conductedBy?.category?.id!, "conductor_private": learningDevelopement.conductedTraining?.conductedBy?.privateEntity, "venue_city_municipality": learningDevelopement .conductedTraining?.venue?.cityMunicipality?.code, "venue_barangay": learningDevelopement.conductedTraining?.venue?.barangay?.code, "learning_development_type": learningDevelopement.conductedTraining?.learningDevelopmentType?.id, "from_date": learningDevelopement.conductedTraining?.fromDate?.toString(), "to_date": learningDevelopement.conductedTraining?.toDate?.toString(), "total_hours": learningDevelopement.conductedTraining?.totalHours, "locked": false, "venue_country": learningDevelopement.conductedTraining!.venue!.country!.id }; http.Response response = await Request.instance .postRequest(path: path, param: {}, body: body, headers: headers); if (response.statusCode == 201) { Map data = jsonDecode(response.body); statusResponse = data; } else { statusResponse.addAll({'success': false}); } return statusResponse; } catch (e) { throw e.toString(); } } ////Add Future> update( {required LearningDevelopement learningDevelopement, required String token, required int profileId}) async { String authtoken = "Token $token"; String path = '${Url.instance.learningAndDevelopments()}$profileId/'; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; Map statusResponse = {}; try { Map body = { "training_conduct_id": learningDevelopement.conductedTraining?.id, "total_hours_attended": learningDevelopement.totalHoursAttended.toString(), "sponsor_id": learningDevelopement.sponsoredBy?.id, "sponsor_name": learningDevelopement.sponsoredBy?.name, "sponsor_category": learningDevelopement.sponsoredBy?.category?.id, "sponsor_private": learningDevelopement.sponsoredBy?.privateEntity, "training_id": learningDevelopement.conductedTraining?.title?.id, "training_title": learningDevelopement.conductedTraining?.title?.title, "topic_id": learningDevelopement.conductedTraining?.topic?.id, "topic_title": learningDevelopement.conductedTraining?.topic?.title, "conductor_id": learningDevelopement.conductedTraining?.conductedBy?.id, "conductor_name": learningDevelopement.conductedTraining?.conductedBy?.name, "conductor_category": learningDevelopement.conductedTraining?.conductedBy?.category?.id!, "conductor_private": learningDevelopement.conductedTraining?.conductedBy?.privateEntity, "venue_city_municipality": learningDevelopement .conductedTraining?.venue?.cityMunicipality?.code, "venue_barangay": learningDevelopement.conductedTraining?.venue?.barangay?.code, "learning_development_type": learningDevelopement.conductedTraining?.learningDevelopmentType?.id, "from_date": learningDevelopement.conductedTraining?.fromDate?.toString(), "to_date": learningDevelopement.conductedTraining?.toDate?.toString(), "total_hours": learningDevelopement.conductedTraining?.totalHours, "locked": learningDevelopement.conductedTraining?.locked, "venue_country": learningDevelopement.conductedTraining!.venue!.country!.id }; http.Response response = await Request.instance .putRequest(path: path, param: {}, body: body, headers: headers); if (response.statusCode == 201) { Map data = jsonDecode(response.body); statusResponse = data; } else { statusResponse.addAll({'success': false}); } return statusResponse; } catch (e) { throw e.toString(); } } ////Delete Future delete( {required int profileId, required String token, required int? sponsorId, required double totalHours, required int trainingId}) async { bool? success; Map params = {"force_mode": "true"}; String authToken = "Token $token"; String path = '${Url.instance.learningAndDevelopments()}$profileId/'; Map body = { "sponsor_id": sponsorId, "total_hours_attended": totalHours, "training_conduct_id": trainingId }; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authToken }; try { http.Response response = await Request.instance.deleteRequest( path: path, headers: headers, body: body, param: params); if (response.statusCode == 200) { Map data = jsonDecode(response.body); success = data['success']; } else { success = false; } } catch (e) { throw e.toString(); } return success!; } Future> getConductedTrainings( {required String key, required int page}) async { List trainings = []; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', }; Map params = { "title__title___ilike": key, "page": page.toString() }; String path = Url.instance.conductedTrainings(); try { http.Response response = await Request.instance .getRequest(path: path, param: params, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); if (data['data'] != null) { data['data'].forEach((var element) { ConductedTraining training = ConductedTraining.fromJson(element); trainings.add(training); }); } } } catch (e) { throw e.toString(); } return trainings; } Future> getLearningDevelopmentType() async { List types = []; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', }; String path = Url.instance.learningAndDevelopmentType(); try { http.Response response = await Request.instance .getRequest(path: path, param: {}, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); if (data['data'] != null) { data['data'].forEach((var element) { LearningDevelopmentType type = LearningDevelopmentType.fromJson(element); types.add(type); }); } } } catch (e) { throw e.toString(); } return types; } Future> getTrainingTopics() async { List topics = []; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', }; String path = Url.instance.learningAndDevelopmentTopics(); try { http.Response response = await Request.instance .getRequest(path: path, param: {}, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); if (data['data'] != null) { data['data'].forEach((var element) { LearningDevelopmentType type = LearningDevelopmentType.fromJson(element); topics.add(type); }); } } } catch (e) { throw e.toString(); } return topics; } }