integrated address API

feature/passo/PASSO-#1-Sync-data-from-device-to-postgre-and-vice-versa
PGAN-MIS 2023-02-08 11:07:30 +08:00
parent f74ad83667
commit d2a34d8e22
9 changed files with 600 additions and 66 deletions

View File

@ -1,13 +1,15 @@
import 'package:unit2/model/profile/basic_information/adress.dart';
import 'package:unit2/model/profile/basic_information/citizenship.dart';
import 'package:unit2/model/profile/basic_information/contact_information.dart';
import 'package:unit2/model/profile/basic_information/identification_information.dart';
import 'package:unit2/model/profile/basic_information/primary-information.dart';
class BasicInfo{
PrimaryInformation primaryInformation;
PrimaryInformation? primaryInformation;
List<ContactInfo> contactInformation;
List<Identification> identifications;
List<Citizenship> citizenships;
BasicInfo({required this.contactInformation, required this.primaryInformation,required this.identifications,required this.citizenships});
List<MainAdress> addresses;
BasicInfo({required this.addresses, required this.contactInformation, required this.primaryInformation,required this.identifications,required this.citizenships});
}

View File

@ -0,0 +1,249 @@
class MainAdress {
MainAdress({
this.id,
this.address,
this.details,
this.subdivision,
});
final int? id;
final AddressClass? address;
final String? details;
final Subdivision? subdivision;
factory MainAdress.fromJson(Map<String, dynamic> json) => MainAdress(
id: json["id"],
address: json["address"] == null ? null : AddressClass.fromJson(json["address"]),
details: json["details"],
subdivision: json["subdivision"] == null ? null : Subdivision.fromJson(json["subdivision"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"address": address?.toJson(),
"details": details,
"subdivision": subdivision?.toJson(),
};
}
class AddressClass {
AddressClass({
this.id,
this.country,
this.barangay,
this.category,
this.areaClass,
this.cityMunicipality,
});
final int? id;
final Country? country;
final Barangay? barangay;
final Category? category;
final String? areaClass;
final CityMunicipality? cityMunicipality;
factory AddressClass.fromJson(Map<String, dynamic> json) => AddressClass(
id: json["id"],
country: json["country"] == null ? null : Country.fromJson(json["country"]),
barangay: json["barangay"] == null ? null : Barangay.fromJson(json["barangay"]),
category: json["category"] == null ? null : Category.fromJson(json["category"]),
areaClass: json["area_class"],
cityMunicipality: json["city_municipality"] == null ? null : CityMunicipality.fromJson(json["city_municipality"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"country": country?.toJson(),
"barangay": barangay?.toJson(),
"category": category?.toJson(),
"area_class": areaClass,
"city_municipality": cityMunicipality?.toJson(),
};
}
class Barangay {
Barangay({
this.code,
this.description,
this.cityMunicipality,
});
final String? code;
final String? description;
final CityMunicipality? cityMunicipality;
factory Barangay.fromJson(Map<String, dynamic> json) => Barangay(
code: json["code"],
description: json["description"],
cityMunicipality: json["city_municipality"] == null ? null : CityMunicipality.fromJson(json["city_municipality"]),
);
Map<String, dynamic> toJson() => {
"code": code,
"description": description,
"city_municipality": cityMunicipality?.toJson(),
};
}
class CityMunicipality {
CityMunicipality({
this.code,
this.zipcode,
this.province,
this.psgcCode,
this.description,
});
final String? code;
final String? zipcode;
final Province? province;
final String? psgcCode;
final String? description;
factory CityMunicipality.fromJson(Map<String, dynamic> json) => CityMunicipality(
code: json["code"],
zipcode: json["zipcode"],
province: json["province"] == null ? null : Province.fromJson(json["province"]),
psgcCode: json["psgc_code"],
description: json["description"],
);
Map<String, dynamic> toJson() => {
"code": code,
"zipcode": zipcode,
"province": province?.toJson(),
"psgc_code": psgcCode,
"description": description,
};
}
class Province {
Province({
this.code,
this.region,
this.psgcCode,
this.shortname,
this.description,
});
final String? code;
final Region? region;
final String? psgcCode;
final String? shortname;
final String? description;
factory Province.fromJson(Map<String, dynamic> json) => Province(
code: json["code"],
region: json["region"] == null ? null : Region.fromJson(json["region"]),
psgcCode: json["psgc_code"],
shortname: json["shortname"],
description: json["description"],
);
Map<String, dynamic> toJson() => {
"code": code,
"region": region?.toJson(),
"psgc_code": psgcCode,
"shortname": shortname,
"description": description,
};
}
class Region {
Region({
this.code,
this.psgcCode,
this.description,
});
final int? code;
final String? psgcCode;
final String? description;
factory Region.fromJson(Map<String, dynamic> json) => Region(
code: json["code"],
psgcCode: json["psgc_code"],
description: json["description"],
);
Map<String, dynamic> toJson() => {
"code": code,
"psgc_code": psgcCode,
"description": description,
};
}
class Category {
Category({
this.id,
this.name,
this.type,
});
final int? id;
final String? name;
final String? type;
factory Category.fromJson(Map<String, dynamic> json) => Category(
id: json["id"],
name: json["name"],
type: json["type"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"type": type,
};
}
class Country {
Country({
this.id,
this.code,
this.name,
});
final int? id;
final String? code;
final String? name;
factory Country.fromJson(Map<String, dynamic> json) => Country(
id: json["id"],
code: json["code"],
name: json["name"],
);
Map<String, dynamic> toJson() => {
"id": id,
"code": code,
"name": name,
};
}
class Subdivision {
Subdivision({
this.id,
this.lotNo,
this.blockNo,
});
final int? id;
final int? lotNo;
final int? blockNo;
factory Subdivision.fromJson(Map<String, dynamic> json) => Subdivision(
id: json["id"],
lotNo: json["lot_no"],
blockNo: json["block_no"],
);
Map<String, dynamic> toJson() => {
"id": id,
"lot_no": lotNo,
"block_no": blockNo,
};
}

View File

@ -1,8 +1,10 @@
import 'package:unit2/model/profile/other_information/non_acedimic_recognition.dart';
import 'package:unit2/model/profile/other_information/organization_memberships.dart';
import 'package:unit2/model/profile/other_information/skills_and_hobbies.dart';
class OtherInformation{
List<SkillsHobbies> skillsAndHobbies;
List<OrganizationMembership>orgMemberships;
OtherInformation({required this.skillsAndHobbies, required this.orgMemberships});
List<NonAcademicRecognition> nonAcademicRecognition;
OtherInformation({required this.skillsAndHobbies, required this.orgMemberships, required this.nonAcademicRecognition});
}

View File

@ -0,0 +1,109 @@
// To parse this JSON data, do
//
// final nonAcademicRecognition = nonAcademicRecognitionFromJson(jsonString);
import 'dart:convert';
NonAcademicRecognition nonAcademicRecognitionFromJson(String str) => NonAcademicRecognition.fromJson(json.decode(str));
String nonAcademicRecognitionToJson(NonAcademicRecognition data) => json.encode(data.toJson());
class NonAcademicRecognition {
NonAcademicRecognition({
this.id,
this.title,
this.presenter,
});
final int? id;
final String? title;
final Presenter? presenter;
factory NonAcademicRecognition.fromJson(Map<String, dynamic> json) => NonAcademicRecognition(
id: json["id"],
title: json["title"],
presenter: json["presenter"] == null ? null : Presenter.fromJson(json["presenter"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"title": title,
"presenter": presenter?.toJson(),
};
}
class Presenter {
Presenter({
this.id,
this.name,
this.category,
this.privateEntity,
});
final int? id;
final String? name;
final Category? category;
final bool? privateEntity;
factory Presenter.fromJson(Map<String, dynamic> json) => Presenter(
id: json["id"],
name: json["name"],
category: json["category"] == null ? null : Category.fromJson(json["category"]),
privateEntity: json["private_entity"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"category": category?.toJson(),
"private_entity": privateEntity,
};
}
class Category {
Category({
this.id,
this.name,
this.industryClass,
});
final int? id;
final String? name;
final IndustryClass? industryClass;
factory Category.fromJson(Map<String, dynamic> json) => Category(
id: json["id"],
name: json["name"],
industryClass: json["industry_class"] == null ? null : IndustryClass.fromJson(json["industry_class"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"industry_class": industryClass?.toJson(),
};
}
class IndustryClass {
IndustryClass({
this.id,
this.name,
this.description,
});
final int? id;
final String? name;
final dynamic description;
factory IndustryClass.fromJson(Map<String, dynamic> json) => IndustryClass(
id: json["id"],
name: json["name"],
description: json["description"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
};
}

View File

@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import 'package:unit2/model/profile/basic_information/adress.dart';
import 'package:unit2/theme-data.dart/colors.dart';
import 'package:unit2/utils/global.dart';
class AddressScreen extends StatefulWidget {
final List<MainAdress> addresses;
const AddressScreen({super.key, required this.addresses});
@override
State<AddressScreen> createState() => _AddressScreenState();
}
class _AddressScreenState extends State<AddressScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Addresses"),centerTitle: true, backgroundColor: primary,),
body: ListView.builder(
itemCount: widget.addresses.length,
itemBuilder: (
BuildContext context, int index){
String? subdivision = widget.addresses[index].details??'';
String category = widget.addresses[index].address!.category!.name!;
String? barangay = widget.addresses[index].address!.barangay != null?widget.addresses[index].address!.barangay!.description:'';
String cityMunicipality = widget.addresses[index].address!.cityMunicipality!.description!;
String province = widget.addresses[index].address!.cityMunicipality!.province!.description!;
String region = widget.addresses[index].address!.cityMunicipality!.province!.region!.description!;
return Column(children: [
Container(
width: screenWidth,
decoration: BoxDecoration(
color: Colors.grey[200],
borderRadius: const BorderRadius.all(Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12,vertical: 8),
child: Row(children: [
Expanded(child: Column(children: [
Row(children: [Text(subdivision), const SizedBox(width: 5,), Text(category)],),
Text("$barangay $cityMunicipality $province $region"),
],)),
IconButton(onPressed: (){}, icon: const Icon(Icons.more_vert))
]),
),
const SizedBox(height: 5,)
],);
}),
);
}
}

View File

@ -0,0 +1,54 @@
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/placeholder.dart';
import 'package:unit2/model/profile/other_information/non_acedimic_recognition.dart';
import 'package:unit2/theme-data.dart/colors.dart';
import 'package:unit2/utils/global.dart';
class NonAcademicRecognitionScreen extends StatefulWidget {
final List<NonAcademicRecognition> nonAcademicRecognitions;
const NonAcademicRecognitionScreen({super.key, required this.nonAcademicRecognitions});
@override
State<NonAcademicRecognitionScreen> createState() => _NonAcademicRecognitionScreenState();
}
class _NonAcademicRecognitionScreenState extends State<NonAcademicRecognitionScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Non Academic Recognition"), centerTitle: true, backgroundColor: primary,),
body: ListView.builder(
itemCount: widget.nonAcademicRecognitions.length,
itemBuilder: (BuildContext context, int index){
String award = widget.nonAcademicRecognitions[index].title!;
String presenter = widget.nonAcademicRecognitions[index].presenter!.name!;
return Column(
children: [
Container(
width: screenWidth,
decoration: BoxDecoration(
color: Colors.grey[200],
borderRadius: const BorderRadius.all(Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12,vertical: 8),
child: Row(
children: [
Expanded(child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(award),
Text(presenter),
],)),
IconButton(onPressed: (){}, icon: const Icon(Icons.more_vert))
],
),
),
const SizedBox(height: 5,),
],
);
}),
);
}
}

View File

@ -8,6 +8,7 @@ import 'package:fluttericon/entypo_icons.dart';
import 'package:fluttericon/font_awesome5_icons.dart';
import 'package:fluttericon/modern_pictograms_icons.dart';
import 'package:unit2/bloc/profile/profile_bloc.dart';
import 'package:unit2/screens/profile/components/basic_information/address_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/citizenship_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/contact_information.dart';
import 'package:unit2/screens/profile/components/basic_information/identification_information.dart';
@ -16,6 +17,7 @@ import 'package:unit2/screens/profile/components/education_screen.dart';
import 'package:unit2/screens/profile/components/eligibility.dart';
import 'package:unit2/screens/profile/components/learning_and_development_screen.dart';
import 'package:unit2/screens/profile/components/loading_screen.dart';
import 'package:unit2/screens/profile/components/other_information/non_academic_recognition.dart';
import 'package:unit2/screens/profile/components/other_information/org_membership.dart';
import 'package:unit2/screens/profile/components/other_information/skills_and_hobbies_screen.dart';
import 'package:unit2/screens/profile/components/references_screen.dart';
@ -89,10 +91,15 @@ class _ProfileInfoState extends State<ProfileInfo> {
items: [
subMenu(Icons.person, "Primary",(){
Navigator.push(context,MaterialPageRoute(builder: (BuildContext context){
return PrimaryInfo(primaryInformation: state.profileInformation.basicInfo.primaryInformation);
return PrimaryInfo(primaryInformation: state.profileInformation.basicInfo.primaryInformation!);
}) );
}),
subMenu(Icons.home, "Home Addresses",(){}),
subMenu(Icons.home, "Home Addresses",(){
Navigator.push(context,MaterialPageRoute(builder: (BuildContext context){
return AddressScreen(addresses: state.profileInformation.basicInfo.addresses);
}) );
}),
subMenu(
Icons.contact_mail, "Identifications",(){
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context){
@ -207,7 +214,12 @@ class _ProfileInfoState extends State<ProfileInfo> {
}));
}),
subMenu(Entypo.doc_text,
"Non-Academic Recognitions",(){}),
"Non-Academic Recognitions",(){
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context){
return NonAcademicRecognitionScreen(nonAcademicRecognitions: state.profileInformation.otherInformation.nonAcademicRecognition);
}));
}),
]),
ExpandableGroup(
collapsedIcon:

View File

@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:unit2/model/login_data/employee_info/employee_info.dart';
import 'package:unit2/model/profile/basic_info.dart';
import 'package:unit2/model/profile/basic_information/adress.dart';
import 'package:unit2/model/profile/basic_information/citizenship.dart';
import 'package:unit2/model/profile/basic_information/contact_information.dart';
import 'package:unit2/model/profile/basic_information/identification_information.dart';
@ -9,6 +10,7 @@ import 'package:unit2/model/profile/educational_background.dart';
import 'package:unit2/model/profile/eligibility.dart';
import 'package:unit2/model/profile/learning_development.dart';
import 'package:unit2/model/profile/other_info.dart';
import 'package:unit2/model/profile/other_information/non_acedimic_recognition.dart';
import 'package:unit2/model/profile/profileInfomation.dart';
import 'package:unit2/model/profile/references.dart';
import 'package:unit2/model/profile/other_information/skills_and_hobbies.dart';
@ -28,18 +30,20 @@ class ProfileService {
String url = Url.instance.profileInformation();
String path = url + id.toString();
ProfileInformation? profileInformation0;
PrimaryInformation primaryInformation;
List<WorkHistory> workExperiences =[];
PrimaryInformation? primaryInformation;
List<WorkHistory> workExperiences = [];
List<PersonalReference> references = [];
List<MainAdress> addresses = [];
List<Identification> identificationInformation = [];
List<ContactInfo> contactInformation = [];
List<EligibityCert> eligibilities = [];
List<Citizenship> citizenships = [];
List<LearningDevelopement> learningsDevelopments = [];
List<EducationalBackground> educationalBackgrounds = [];
List<VoluntaryWork> voluntaryWorks =[];
List<VoluntaryWork> voluntaryWorks = [];
List<SkillsHobbies> skillsHobbies = [];
List<OrganizationMembership> orgMemberships = [];
List<NonAcademicRecognition> nonAcademicRecognitions = [];
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': "Token $token"
@ -49,86 +53,140 @@ class ProfileService {
.getRequest(path: path, param: {}, headers: headers);
if (response.statusCode == 200) {
Map data = jsonDecode(response.body);
// get primary information
if (data['data']['basic_information']['primary_information'] != null) {
primaryInformation = PrimaryInformation.fromJson(
data['data']['basic_information']['primary_information']);
} else {
primaryInformation = null;
}
// get all contacts
if (data['data']['basic_information']['contact_information'] != null) {
data['data']['basic_information']['contact_information']
.forEach((var contact) {
ContactInfo contactInfo = ContactInfo.fromJson(contact['contact_info']);
ContactInfo contactInfo =
ContactInfo.fromJson(contact['contact_info']);
contactInformation.add(contactInfo);
});
}
// get all addresses
if (data['data']['basic_information']['addresses'] != null) {
data['data']['basic_information']['addresses'].forEach((var address) {
MainAdress mainAdress = MainAdress.fromJson(address);
addresses.add(mainAdress);
});
}
// get all identifications
data['data']['basic_information']['identification_records']
if (data['data']['basic_information']['identification_records'] != null) {
data['data']['basic_information']['identification_records']!
.forEach((var identity) {
Identification identification = Identification.fromJson(identity);
identificationInformation.add(identification);
});
}
//get all eligibilities
data['data']['eligibilities'].forEach((var cert) {
if (data['data']['eligibilities'] != null) {
data['data']['eligibilities']!.forEach((var cert) {
EligibityCert eligibility = EligibityCert.fromJson(cert);
eligibilities.add(eligibility);
});
}
// get all citizenships
if (data['data']['citizenship'] != null) {
data['data']['citizenships'].forEach((var citizenship) {
data['data']['citizenships']!.forEach((var citizenship) {
Citizenship person = Citizenship.fromJson(citizenship);
citizenships.add(person);
});
}
// get all references;
if (data['data']['personal_references'] != null) {
data['data']['personal_references'].forEach((var person) {
PersonalReference reference = PersonalReference.fromJson(person);
references.add(reference);
});
}
//get all learning and developments
if (data['data']['learning_development'] != null) {
data['data']['learning_development'].forEach((var training) {
LearningDevelopement learnings =
LearningDevelopement.fromJson(training);
learningsDevelopments.add(learnings);
});
}
//get all educational background
if (data['data']['education_background'] != null) {
data['data']['education_background'].forEach((var education) {
EducationalBackground educationalBackground =
EducationalBackground.fromJson(education);
educationalBackgrounds.add(educationalBackground);
});
}
// get all work history
data['data']['work_experiences'].forEach((var work){
if (data['data']['work_experiences'] != null) {
data['data']['work_experiences'].forEach((var work) {
WorkHistory experience = WorkHistory.fromJson(work);
workExperiences.add(experience);
});
}
// get all voluntary works
data['data']['voluntary_works'].forEach((var work){
if (data['data']['voluntary_works'] != null) {
data['data']['voluntary_works'].forEach((var work) {
VoluntaryWork vwork = VoluntaryWork.fromJson(work);
voluntaryWorks.add(vwork);
});
}
// get all hobbies
data['data']['other_information']['skills_hobbies'].forEach((var skills_hobbies){
SkillsHobbies skillsAndHobbies = SkillsHobbies.fromJson(skills_hobbies);
if (data['data']['other_information']['skills_hobbies'] != null) {
data['data']['other_information']['skills_hobbies']
.forEach((var skills_hobbies) {
SkillsHobbies skillsAndHobbies =
SkillsHobbies.fromJson(skills_hobbies);
skillsHobbies.add(skillsAndHobbies);
});
}
data['data']['other_information']['organization_memberships'].forEach((var org) {
//get all organization memberships
if (data['data']['other_information']['organization_memberships'] !=
null) {
data['data']['other_information']['organization_memberships']
.forEach((var org) {
OrganizationMembership organization =
OrganizationMembership.fromJson(org);
orgMemberships.add(organization);
});
}
//get all non academic recognition
if (data['data']['other_information']['non_academic_records'] != null) {
data['data']['other_information']['non_academic_records']
.forEach((var recognition) {
NonAcademicRecognition nonAcademicRecognition =
NonAcademicRecognition.fromJson(recognition);
nonAcademicRecognitions.add(nonAcademicRecognition);
});
}
BasicInfo basicInfo = BasicInfo(
contactInformation: contactInformation,
primaryInformation: primaryInformation,
identifications: identificationInformation,
citizenships: citizenships);
OtherInformation otherInformation = OtherInformation(skillsAndHobbies: skillsHobbies,orgMemberships: orgMemberships);
citizenships: citizenships,
addresses: addresses);
OtherInformation otherInformation = OtherInformation(
skillsAndHobbies: skillsHobbies,
orgMemberships: orgMemberships,
nonAcademicRecognition: nonAcademicRecognitions);
ProfileInformation profileInformation = ProfileInformation(
otherInformation: otherInformation,
workExperiences: workExperiences,
@ -137,9 +195,7 @@ class ProfileService {
references: references,
learningsAndDevelopment: learningsDevelopments,
educationalBackgrounds: educationalBackgrounds,
voluntaryWorks: voluntaryWorks
);
voluntaryWorks: voluntaryWorks);
profileInformation0 = profileInformation;
}
// }catch(e){