import 'dart:convert'; import 'package:unit2/utils/request.dart'; import '../../model/profile/family_backround.dart'; import '../../utils/urls.dart'; import 'package:http/http.dart' as http; class FamilyService { static final FamilyService _instance = FamilyService(); static FamilyService get instance => _instance; Future> getFamilies( int profileId, String token) async { List families = []; String authToken = "Token $token"; String path = "${Url.instance.getFamilies()}$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 family) { FamilyBackground familyBackground = FamilyBackground.fromJson(family); families.add(familyBackground); }); } } } catch (e) { throw e.toString(); } return families; } Future> add( {required int profileId, required String token, required int relationshipId, required FamilyBackground? family}) async { Map? _response = {}; String authtoken = "Token $token"; String path = "${Url.instance.getFamilies()}$profileId/"; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; Map body = { "relation_type_id": relationshipId, "company_address": family?.companyAddress, "company_contact_number": family?.companyContactNumber, "first_name": family!.relatedPerson!.firstName, "middle_name": family.relatedPerson!.middleName, "last_name": family.relatedPerson!.lastName, "name_extension": family.relatedPerson?.nameExtension, "birthdate": family.relatedPerson!.birthdate.toString(), "sex": family.relatedPerson!.sex, "blood_type": family.relatedPerson?.bloodType, "civil_status": family.relatedPerson?.civilStatus, "height": family.relatedPerson?.heightM, "weight": family.relatedPerson?.weightKg, "position_id": family.position?.id, "agency_id": family.company?.id, "_positionName": family.position?.title, "_agencyName": family.company?.name, "_agencyCatId": family.company?.category?.id, "_privateEntity": family.company?.privateEntity, "maidenMiddleName": family.relatedPerson?.maidenName?.middleName, "maidenLastName": family.relatedPerson?.maidenName?.lastName, "gender": family.relatedPerson!.gender, "deceased": family.relatedPerson!.deceased, }; try { http.Response response = await Request.instance .postRequest(param: {}, path: path, body: body, headers: headers); if (response.statusCode == 201) { Map data = jsonDecode(response.body); _response = data; } else { _response.addAll({'success': false}); } } catch (e) { throw (e.toString()); } return _response; } //// Add Emergency Future> addEmergency( {required int profileId, required String token, required int relatedPersonId, required String? numberMail, required int? contactInfoId, required String requestType, }) async { Map? _response = {}; String authtoken = "Token $token"; String path = Url.instance.addEmergency(); Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; Map body = { "personid": profileId, "related_personid": relatedPersonId, "request_type": requestType, "number_mail": numberMail, "contactinfoid": contactInfoId }; try { http.Response response = await Request.instance .postRequest(param: {}, path: path, body: body, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); _response = data; print(_response.toString()); } else { _response.addAll({'success': false}); } } catch (e) { throw (e.toString()); } return _response; } ////Update Future> update( {required int profileId, required String token, required int relationshipId, required FamilyBackground family}) async { Map? _response = {}; String authtoken = "Token $token"; String path = "${Url.instance.getFamilies()}$profileId/"; Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authtoken }; Map body = { "relation_type_id": relationshipId, "related_person_id": family.relatedPerson!.id, "company_address": family.companyAddress, "company_contact_number": family.companyContactNumber, "first_name": family.relatedPerson!.firstName, "middle_name": family.relatedPerson!.middleName!.isEmpty?null:family.relatedPerson!.middleName!, "last_name": family.relatedPerson!.lastName, "name_extension": family.relatedPerson?.nameExtension, "birthdate": family.relatedPerson!.birthdate.toString(), "sex": family.relatedPerson!.sex, "blood_type": family.relatedPerson?.bloodType, "civil_status": family.relatedPerson?.civilStatus, "height": family.relatedPerson!.heightM, "weight": family.relatedPerson!.weightKg, "position_id": family.position?.id, "agency_id": family.company?.id, "_positionName": family.position?.title, "_agencyName": family.company?.name, "_agencyCatId": family.company?.category?.id, "_privateEntity": family.company?.privateEntity, "maidenMiddleName": family.relatedPerson?.maidenName?.middleName, "maidenLastName": family.relatedPerson?.maidenName?.lastName, "gender": family.relatedPerson!.gender, "deceased": family.relatedPerson!.deceased, }; try { http.Response response = await Request.instance .putRequest(param: {}, path: path, body: body, headers: headers); if (response.statusCode == 200) { Map data = jsonDecode(response.body); _response = data; } else { _response.addAll({'success': false}); } } catch (e) { throw (e.toString()); } return _response; } ////delete Future delete( {required int personRelatedId, required int profileId, required String token}) async { bool? success; String authtoken = "Token $token"; String path = "${Url.instance.getFamilies()}$profileId/"; Map body = {"related_person_id": personRelatedId}; Map params = {"force_mode": "true"}; 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!; } }