From d3e10f4fa0ff4b4863187ebf51c632354adde98b Mon Sep 17 00:00:00 2001 From: Rahul Babbar Date: Sun, 5 Mar 2017 01:45:56 +0530 Subject: [PATCH] feat: fetch & show notes for client and group --- .../java/com/mifos/api/BaseApiManager.java | 8 + .../api/datamanager/DataManagerNote.java | 39 ++++ .../databasehelper/DatabaseHelperNote.java | 16 ++ .../java/com/mifos/api/model/APIEndPoint.java | 1 + .../com/mifos/api/services/NoteService.java | 25 +++ .../mifosxdroid/adapters/NoteAdapter.java | 76 ++++++++ .../component/ActivityComponent.java | 19 +- .../component/ApplicationComponent.java | 4 + .../clientdetails/ClientDetailsFragment.java | 16 ++ .../groupdetails/GroupDetailsFragment.java | 14 ++ .../mifosxdroid/online/note/NoteFragment.java | 166 ++++++++++++++++++ .../mifosxdroid/online/note/NoteMvpView.java | 22 +++ .../online/note/NotePresenter.java | 76 ++++++++ .../java/com/mifos/objects/noncore/Note.java | 158 +++++++++++++++++ .../src/main/res/layout/fragment_notes.xml | 49 ++++++ .../src/main/res/layout/item_note.xml | 38 ++++ .../src/main/res/menu/menu_group.xml | 12 +- .../src/main/res/values/strings.xml | 3 + 18 files changed, 731 insertions(+), 11 deletions(-) create mode 100644 mifosng-android/src/main/java/com/mifos/api/datamanager/DataManagerNote.java create mode 100644 mifosng-android/src/main/java/com/mifos/api/local/databasehelper/DatabaseHelperNote.java create mode 100644 mifosng-android/src/main/java/com/mifos/api/services/NoteService.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/adapters/NoteAdapter.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java create mode 100644 mifosng-android/src/main/java/com/mifos/objects/noncore/Note.java create mode 100644 mifosng-android/src/main/res/layout/fragment_notes.xml create mode 100644 mifosng-android/src/main/res/layout/item_note.xml diff --git a/mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java b/mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java index 302f1635711..06967662ed0 100755 --- a/mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java +++ b/mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java @@ -16,6 +16,7 @@ import com.mifos.api.services.DocumentService; import com.mifos.api.services.GroupService; import com.mifos.api.services.LoanService; +import com.mifos.api.services.NoteService; import com.mifos.api.services.OfficeService; import com.mifos.api.services.RunReportsService; import com.mifos.api.services.SavingsAccountService; @@ -54,6 +55,7 @@ public class BaseApiManager { private static StaffService staffApi; private static SurveyService surveyApi; private static RunReportsService runreportsService; + private static NoteService noteService; public BaseApiManager() { createService(); @@ -75,6 +77,8 @@ public static void init() { surveyApi = createApi(SurveyService.class); chargeApi = createApi(ChargeService.class); runreportsService = createApi(RunReportsService.class); + noteService = createApi(NoteService.class); + } private static T createApi(Class clazz) { @@ -155,4 +159,8 @@ public ChargeService getChargeApi() { public RunReportsService getRunReportsService() { return runreportsService; } + + public NoteService getNoteApi() { + return noteService; + } } diff --git a/mifosng-android/src/main/java/com/mifos/api/datamanager/DataManagerNote.java b/mifosng-android/src/main/java/com/mifos/api/datamanager/DataManagerNote.java new file mode 100644 index 00000000000..8f3807005da --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/api/datamanager/DataManagerNote.java @@ -0,0 +1,39 @@ +package com.mifos.api.datamanager; + +import com.mifos.api.BaseApiManager; +import com.mifos.api.local.databasehelper.DatabaseHelperNote; +import com.mifos.objects.noncore.Note; + +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import rx.Observable; + +/** + * This DataManager is for Managing Notes API, In which Request is going to Server + * and In Response, We are getting Notes API Observable Response using Retrofit2 + * Created by rahul on 4/3/17. + */ +@Singleton +public class DataManagerNote { + + public final BaseApiManager mBaseApiManager; + public final DatabaseHelperNote mDatabaseHelperNote; + + @Inject + public DataManagerNote(BaseApiManager baseApiManager, + DatabaseHelperNote databaseHelperNote) { + mBaseApiManager = baseApiManager; + mDatabaseHelperNote = databaseHelperNote; + } + + + /** + * This Method Request the REST API of Note and In response give the List of Notes + */ + public Observable> getNotes(String entityType, int entityId) { + return mBaseApiManager.getNoteApi().getNotes(entityType, entityId); + } +} diff --git a/mifosng-android/src/main/java/com/mifos/api/local/databasehelper/DatabaseHelperNote.java b/mifosng-android/src/main/java/com/mifos/api/local/databasehelper/DatabaseHelperNote.java new file mode 100644 index 00000000000..ed35f157dd0 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/api/local/databasehelper/DatabaseHelperNote.java @@ -0,0 +1,16 @@ +package com.mifos.api.local.databasehelper; + +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + * Created by rahul on 4/3/17. + */ +@Singleton +public class DatabaseHelperNote { + + @Inject + public DatabaseHelperNote() { + + } +} diff --git a/mifosng-android/src/main/java/com/mifos/api/model/APIEndPoint.java b/mifosng-android/src/main/java/com/mifos/api/model/APIEndPoint.java index 6b060d29d82..dcaf91f9407 100755 --- a/mifosng-android/src/main/java/com/mifos/api/model/APIEndPoint.java +++ b/mifosng-android/src/main/java/com/mifos/api/model/APIEndPoint.java @@ -35,4 +35,5 @@ public class APIEndPoint { public static final String RECURRING_ACCOUNTS = "recurringdepositaccounts"; public static final String DISBURSE = "disburse"; + public static final String NOTES = "notes"; } diff --git a/mifosng-android/src/main/java/com/mifos/api/services/NoteService.java b/mifosng-android/src/main/java/com/mifos/api/services/NoteService.java new file mode 100644 index 00000000000..d24e4991e4d --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/api/services/NoteService.java @@ -0,0 +1,25 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.api.services; + +import com.mifos.api.model.APIEndPoint; +import com.mifos.objects.noncore.Note; + +import java.util.List; + +import retrofit2.http.GET; +import retrofit2.http.Path; +import rx.Observable; + +public interface NoteService { + @GET("{entityType}/{entityId}/" + APIEndPoint.NOTES) + Observable> getNotes(@Path("entityType") String entityType, + @Path("entityId") int entityId); + /** + * @param entityType - Type for which note is being fetched (Client or Group) + * @param entityId - Id of Entity + */ +} + diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/adapters/NoteAdapter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/adapters/NoteAdapter.java new file mode 100644 index 00000000000..6d60a27e418 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/adapters/NoteAdapter.java @@ -0,0 +1,76 @@ +package com.mifos.mifosxdroid.adapters; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.mifos.mifosxdroid.R; +import com.mifos.objects.noncore.Note; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by rahul on 4/3/17. + */ + +public class NoteAdapter extends RecyclerView.Adapter { + + List notes; + + @Inject + public NoteAdapter() { + notes = new ArrayList<>(); + } + + @Override + public NoteAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_note, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final NoteAdapter.ViewHolder holder, int position) { + Note note = notes.get(position); + holder.tvNote.setText(note.getNoteContent()); + } + + + public void setNotes(List notes) { + this.notes = notes; + notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return notes.size(); + } + + public Note getItem(int position) { + return notes.get(position); + } + + @Override + public long getItemId(int i) { + return 0; + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.tv_note) + TextView tvNote; + + public ViewHolder(View v) { + super(v); + ButterKnife.bind(this, v); + } + } +} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ActivityComponent.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ActivityComponent.java index cce043dff3d..310f2bdf55d 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ActivityComponent.java +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ActivityComponent.java @@ -6,13 +6,7 @@ import com.mifos.mifosxdroid.dialogfragments.datatablerowdialog.DataTableRowDialogFragment; import com.mifos.mifosxdroid.dialogfragments.documentdialog.DocumentDialogFragment; import com.mifos.mifosxdroid.dialogfragments.identifierdialog.IdentifierDialogFragment; -import com.mifos.mifosxdroid.online.activate.ActivateFragment; -import com.mifos.mifosxdroid.online.centerdetails.CenterDetailsFragment; -import com.mifos.mifosxdroid.online.datatable.DataTableFragment; -import com.mifos.mifosxdroid.online.loanaccountapproval.LoanAccountApproval; -import com.mifos.mifosxdroid.online.loanaccountdisbursement.LoanAccountDisbursementFragment; import com.mifos.mifosxdroid.dialogfragments.loanchargedialog.LoanChargeDialogFragment; -import com.mifos.mifosxdroid.online.savingsaccountapproval.SavingsAccountApprovalFragment; import com.mifos.mifosxdroid.dialogfragments.syncclientsdialog.SyncClientsDialogFragment; import com.mifos.mifosxdroid.dialogfragments.syncgroupsdialog.SyncGroupsDialogFragment; import com.mifos.mifosxdroid.injection.PerActivity; @@ -23,18 +17,20 @@ import com.mifos.mifosxdroid.offline.syncgrouppayloads.SyncGroupPayloadsFragment; import com.mifos.mifosxdroid.offline.syncloanrepaymenttransacition.SyncLoanRepaymentTransactionFragment; import com.mifos.mifosxdroid.offline.syncsavingsaccounttransaction.SyncSavingsAccountTransactionFragment; +import com.mifos.mifosxdroid.online.activate.ActivateFragment; +import com.mifos.mifosxdroid.online.centerdetails.CenterDetailsFragment; import com.mifos.mifosxdroid.online.centerlist.CenterListFragment; import com.mifos.mifosxdroid.online.clientcharge.ClientChargeFragment; import com.mifos.mifosxdroid.online.clientdetails.ClientDetailsFragment; import com.mifos.mifosxdroid.online.clientidentifiers.ClientIdentifiersFragment; import com.mifos.mifosxdroid.online.clientlist.ClientListFragment; -import com.mifos.mifosxdroid.online.datatablelistfragment.DataTableListFragment; -import com.mifos.mifosxdroid.online.search.SearchFragment; import com.mifos.mifosxdroid.online.collectionsheet.CollectionSheetFragment; import com.mifos.mifosxdroid.online.createnewcenter.CreateNewCenterFragment; import com.mifos.mifosxdroid.online.createnewclient.CreateNewClientFragment; import com.mifos.mifosxdroid.online.createnewgroup.CreateNewGroupFragment; +import com.mifos.mifosxdroid.online.datatable.DataTableFragment; import com.mifos.mifosxdroid.online.datatabledata.DataTableDataFragment; +import com.mifos.mifosxdroid.online.datatablelistfragment.DataTableListFragment; import com.mifos.mifosxdroid.online.documentlist.DocumentListFragment; import com.mifos.mifosxdroid.online.generatecollectionsheet.GenerateCollectionSheetFragment; import com.mifos.mifosxdroid.online.groupdetails.GroupDetailsFragment; @@ -42,14 +38,19 @@ import com.mifos.mifosxdroid.online.grouploanaccount.GroupLoanAccountFragment; import com.mifos.mifosxdroid.online.groupslist.GroupsListFragment; import com.mifos.mifosxdroid.online.loanaccount.LoanAccountFragment; +import com.mifos.mifosxdroid.online.loanaccountapproval.LoanAccountApproval; +import com.mifos.mifosxdroid.online.loanaccountdisbursement.LoanAccountDisbursementFragment; import com.mifos.mifosxdroid.online.loanaccountsummary.LoanAccountSummaryFragment; import com.mifos.mifosxdroid.online.loancharge.LoanChargeFragment; import com.mifos.mifosxdroid.online.loanrepayment.LoanRepaymentFragment; import com.mifos.mifosxdroid.online.loanrepaymentschedule.LoanRepaymentScheduleFragment; import com.mifos.mifosxdroid.online.loantransactions.LoanTransactionsFragment; +import com.mifos.mifosxdroid.online.note.NoteFragment; import com.mifos.mifosxdroid.online.savingaccountsummary.SavingsAccountSummaryFragment; import com.mifos.mifosxdroid.online.savingaccounttransaction.SavingsAccountTransactionFragment; import com.mifos.mifosxdroid.online.savingsaccount.SavingsAccountFragment; +import com.mifos.mifosxdroid.online.savingsaccountapproval.SavingsAccountApprovalFragment; +import com.mifos.mifosxdroid.online.search.SearchFragment; import com.mifos.mifosxdroid.online.surveylist.SurveyListFragment; import com.mifos.mifosxdroid.online.surveysubmit.SurveySubmitFragment; @@ -162,4 +163,6 @@ public interface ActivityComponent { void inject(ActivateFragment activateClientFragment); void inject(DataTableFragment dataTableFragment); + + void inject(NoteFragment noteFragment); } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ApplicationComponent.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ApplicationComponent.java index 4c48a5e4269..af30022a562 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ApplicationComponent.java +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/injection/component/ApplicationComponent.java @@ -12,6 +12,7 @@ import com.mifos.api.datamanager.DataManagerDocument; import com.mifos.api.datamanager.DataManagerGroups; import com.mifos.api.datamanager.DataManagerLoan; +import com.mifos.api.datamanager.DataManagerNote; import com.mifos.api.datamanager.DataManagerOffices; import com.mifos.api.datamanager.DataManagerRunReport; import com.mifos.api.datamanager.DataManagerSavings; @@ -24,6 +25,7 @@ import com.mifos.api.local.databasehelper.DatabaseHelperDataTable; import com.mifos.api.local.databasehelper.DatabaseHelperGroups; import com.mifos.api.local.databasehelper.DatabaseHelperLoan; +import com.mifos.api.local.databasehelper.DatabaseHelperNote; import com.mifos.api.local.databasehelper.DatabaseHelperOffices; import com.mifos.api.local.databasehelper.DatabaseHelperSavings; import com.mifos.api.local.databasehelper.DatabaseHelperStaff; @@ -66,6 +68,7 @@ public interface ApplicationComponent { DataManagerSearch dataManagerSearch(); DataManagerRunReport dataManagerRunReport(); DataManagerAuth dataManagerAuth(); + DataManagerNote dataManagerNote(); DatabaseHelperClient databaseHelperClient(); @@ -78,5 +81,6 @@ public interface ApplicationComponent { DatabaseHelperLoan databaseHelperLoan(); DatabaseHelperSavings databaseHelperSavings(); DatabaseHelperSurveys databaseHelperSurveys(); + DatabaseHelperNote databaseHelperNote(); } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/clientdetails/ClientDetailsFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/clientdetails/ClientDetailsFragment.java index 92dac9c655d..5cbf84a5afe 100755 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/clientdetails/ClientDetailsFragment.java +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/clientdetails/ClientDetailsFragment.java @@ -49,6 +49,7 @@ import com.mifos.mifosxdroid.online.datatable.DataTableFragment; import com.mifos.mifosxdroid.online.documentlist.DocumentListFragment; import com.mifos.mifosxdroid.online.loanaccount.LoanAccountFragment; +import com.mifos.mifosxdroid.online.note.NoteFragment; import com.mifos.mifosxdroid.online.savingsaccount.SavingsAccountFragment; import com.mifos.mifosxdroid.online.surveylist.SurveyListFragment; import com.mifos.mifosxdroid.views.CircularImageView; @@ -91,6 +92,8 @@ public class ClientDetailsFragment extends MifosBaseFragment implements ClientDe public static final int MENU_ITEM_DOCUMENTS = 1006; public static final int MENU_ITEM_IDENTIFIERS = 1007; public static final int MENU_ITEM_SURVEYS = 1008; + public static final int MENU_ITEM_NOTE = 1009; + private final String TAG = ClientDetailsFragment.class.getSimpleName(); @@ -239,6 +242,7 @@ public void onPrepareOptionsMenu(Menu menu) { menu.add(Menu.NONE, MENU_ITEM_DOCUMENTS, Menu.NONE, getString(R.string.documents)); menu.add(Menu.NONE, MENU_ITEM_IDENTIFIERS, Menu.NONE, getString(R.string.identifiers)); menu.add(Menu.NONE, MENU_ITEM_SURVEYS, Menu.NONE, getString(R.string.survey)); + menu.add(Menu.NONE, MENU_ITEM_NOTE, Menu.NONE, getString(R.string.note)); } super.onPrepareOptionsMenu(menu); } @@ -272,6 +276,8 @@ public boolean onOptionsItemSelected(MenuItem item) { case MENU_ITEM_SURVEYS: loadSurveys(); break; + case MENU_ITEM_NOTE: + loadNotes(); } return super.onOptionsItemSelected(item); } @@ -307,6 +313,16 @@ public void loadDocuments() { fragmentTransaction.commit(); } + public void loadNotes() { + NoteFragment noteFragment = NoteFragment.newInstance(Constants + .ENTITY_TYPE_CLIENTS, clientId); + FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() + .beginTransaction(); + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_DETAILS); + fragmentTransaction.replace(R.id.container, noteFragment); + fragmentTransaction.commit(); + } + public void loadClientCharges() { ClientChargeFragment clientChargeFragment = ClientChargeFragment.newInstance(clientId, chargesList); diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/groupdetails/GroupDetailsFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/groupdetails/GroupDetailsFragment.java index 5cf13e71c3b..ef52a68b705 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/groupdetails/GroupDetailsFragment.java +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/groupdetails/GroupDetailsFragment.java @@ -31,6 +31,7 @@ import com.mifos.mifosxdroid.online.datatable.DataTableFragment; import com.mifos.mifosxdroid.online.documentlist.DocumentListFragment; import com.mifos.mifosxdroid.online.grouploanaccount.GroupLoanAccountFragment; +import com.mifos.mifosxdroid.online.note.NoteFragment; import com.mifos.objects.accounts.GroupAccounts; import com.mifos.objects.accounts.savings.DepositType; import com.mifos.objects.client.Client; @@ -156,6 +157,16 @@ public void loadDocuments() { fragmentTransaction.commit(); } + public void loadNotes() { + NoteFragment noteFragment = NoteFragment.newInstance(Constants + .ENTITY_TYPE_GROUPS, groupId); + FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() + .beginTransaction(); + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_DETAILS); + fragmentTransaction.replace(R.id.container, noteFragment); + fragmentTransaction.commit(); + } + public void addGroupLoanAccount() { GroupLoanAccountFragment grouploanAccountFragment = GroupLoanAccountFragment.newInstance (groupId); @@ -311,6 +322,9 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.group_clients: mGroupDetailsPresenter.loadGroupAssociateClients(groupId); break; + case R.id.group_notes: + loadNotes(); + break; } return super.onOptionsItemSelected(item); diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java new file mode 100644 index 00000000000..00d95c2d9c0 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteFragment.java @@ -0,0 +1,166 @@ +package com.mifos.mifosxdroid.online.note; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.mifos.mifosxdroid.R; +import com.mifos.mifosxdroid.adapters.NoteAdapter; +import com.mifos.mifosxdroid.core.MifosBaseActivity; +import com.mifos.mifosxdroid.core.MifosBaseFragment; +import com.mifos.mifosxdroid.core.util.Toaster; +import com.mifos.objects.noncore.Note; +import com.mifos.utils.Constants; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by rahul on 4/3/17. + */ +public class NoteFragment extends MifosBaseFragment implements NoteMvpView, + SwipeRefreshLayout.OnRefreshListener { + + @BindView(R.id.rv_note) + RecyclerView rvNote; + + @BindView(R.id.swipe_container) + SwipeRefreshLayout swipeRefreshLayout; + + @BindView(R.id.tv_error) + TextView tvError; + + @BindView(R.id.iv_error) + ImageView ivError; + + @BindView(R.id.ll_error) + LinearLayout llError; + + @Inject + NotePresenter notePresenter; + + @Inject + NoteAdapter noteAdapter; + + private View rootView; + private String entityType; + private int entityId; + private List notes; + + + public static NoteFragment newInstance(String entityType, int entityId) { + NoteFragment noteFragment = new NoteFragment(); + Bundle args = new Bundle(); + args.putString(Constants.ENTITY_TYPE, entityType); + args.putInt(Constants.ENTITY_ID, entityId); + noteFragment.setArguments(args); + return noteFragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); + notes = new ArrayList<>(); + if (getArguments() != null) { + entityType = getArguments().getString(Constants.ENTITY_TYPE); + entityId = getArguments().getInt(Constants.ENTITY_ID); + } + } + + @Override + public void onResume() { + super.onResume(); + notePresenter.loadNote(entityType, entityId); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable + Bundle savedInstanceState) { + rootView = inflater.inflate(R.layout.fragment_notes, container, false); + ButterKnife.bind(this, rootView); + notePresenter.attachView(this); + + showUserInterface(); + notePresenter.loadNote(entityType, entityId); + + return rootView; + } + + @Override + public void onRefresh() { + notePresenter.loadNote(entityType, entityId); + } + + @Override + public void showUserInterface() { + setToolbarTitle(getResources().getString(R.string.note)); + LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); + mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + rvNote.setLayoutManager(mLayoutManager); + rvNote.setHasFixedSize(true); + rvNote.setAdapter(noteAdapter); + swipeRefreshLayout.setColorSchemeColors(getActivity() + .getResources().getIntArray(R.array.swipeRefreshColors)); + swipeRefreshLayout.setOnRefreshListener(this); + } + + @Override + public void showNote(List notes) { + this.notes = notes; + noteAdapter.setNotes(this.notes); + } + + @Override + public void showEmptyNotes() { + llError.setVisibility(View.VISIBLE); + rvNote.setVisibility(View.GONE); + tvError.setText(R.string.empty_notes); + } + + @Override + public void showResetVisibility() { + llError.setVisibility(View.GONE); + rvNote.setVisibility(View.VISIBLE); + } + + @Override + public void showError(int message) { + Toaster.show(rootView, message); + llError.setVisibility(View.VISIBLE); + rvNote.setVisibility(View.GONE); + tvError.setText( getString(R.string.failed_to_fetch_notes)); + } + + @Override + public void showProgressbar(boolean show) { + if (show && (noteAdapter.getItemCount() == 0)) { + showMifosProgressBar(); + swipeRefreshLayout.setRefreshing(false); + } else { + hideMifosProgressBar(); + swipeRefreshLayout.setRefreshing(show); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + hideMifosProgressBar(); + notePresenter.detachView(); + } +} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java new file mode 100644 index 00000000000..9c8d8b277c6 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NoteMvpView.java @@ -0,0 +1,22 @@ +package com.mifos.mifosxdroid.online.note; + +import com.mifos.mifosxdroid.base.MvpView; +import com.mifos.objects.noncore.Note; + +import java.util.List; + +/** + * Created by rahul on 4/3/17. + */ +public interface NoteMvpView extends MvpView { + + void showUserInterface(); + + void showNote(List note); + + void showEmptyNotes(); + + void showResetVisibility(); + + void showError(int message); +} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java new file mode 100644 index 00000000000..ad179e8b739 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/note/NotePresenter.java @@ -0,0 +1,76 @@ +package com.mifos.mifosxdroid.online.note; + +import com.mifos.api.datamanager.DataManagerNote; +import com.mifos.mifosxdroid.R; +import com.mifos.mifosxdroid.base.BasePresenter; +import com.mifos.objects.noncore.Note; + +import java.util.List; + +import javax.inject.Inject; + +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import rx.subscriptions.CompositeSubscription; + +/** + * Created by rahul on 4/3/17. + */ +public class NotePresenter extends BasePresenter { + + private final DataManagerNote dataManagerNote; + private CompositeSubscription subscriptions; + + @Inject + public NotePresenter(DataManagerNote dataManagerNote) { + this.dataManagerNote = dataManagerNote; + subscriptions = new CompositeSubscription(); + } + + @Override + public void attachView(NoteMvpView mvpView) { + super.attachView(mvpView); + } + + @Override + public void detachView() { + super.detachView(); + subscriptions.unsubscribe(); + } + + /** + * This method load the Notes. + * Response: List + */ + public void loadNote(String type, int id) { + checkViewAttached(); + getMvpView().showProgressbar(true); + getMvpView().showResetVisibility(); + subscriptions.add(dataManagerNote.getNotes(type, id) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Subscriber>() { + @Override + public void onCompleted() { + } + + @Override + public void onError(Throwable e) { + getMvpView().showProgressbar(false); + getMvpView().showError(R.string.failed_to_fetch_datatable); + } + + @Override + public void onNext(List note) { + getMvpView().showProgressbar(false); + if (!note.isEmpty()) { + getMvpView().showNote(note); + } else { + getMvpView().showEmptyNotes(); + } + } + })); + } + +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/objects/noncore/Note.java b/mifosng-android/src/main/java/com/mifos/objects/noncore/Note.java new file mode 100644 index 00000000000..5bed005ccca --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/objects/noncore/Note.java @@ -0,0 +1,158 @@ +package com.mifos.objects.noncore; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.google.gson.annotations.SerializedName; +import com.mifos.api.local.MifosBaseModel; + +/** + * Created by rahul on 4/3/17. + */ +public class Note extends MifosBaseModel implements Parcelable { + + @SerializedName("id") + Integer id; + + @SerializedName("clientId") + Integer clientId; + + @SerializedName("note") + String noteContent; + + @SerializedName("createdById") + Integer createdById; + + @SerializedName("createdByUsername") + String createdByUsername; + + @SerializedName("createdOn") + long createdOn; + + @SerializedName("updatedById") + Integer updatedById; + + @SerializedName("updatedByUsername") + String updatedByUsername; + + @SerializedName("updatedOn") + long updatedOn; + + protected Note(Parcel in) { + id = in.readInt(); + clientId = in.readInt(); + noteContent = in.readString(); + createdById = in.readInt(); + createdByUsername = in.readString(); + createdOn = in.readLong(); + updatedById = in.readInt(); + updatedByUsername = in.readString(); + updatedOn = in.readLong(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public Note createFromParcel(Parcel in) { + return new Note(in); + } + + @Override + public Note[] newArray(int size) { + return new Note[size]; + } + }; + + public long getUpdatedOn() { + return updatedOn; + } + + public void setUpdatedOn(long updatedOn) { + this.updatedOn = updatedOn; + } + + public String getUpdatedByUsername() { + return updatedByUsername; + } + + public void setUpdatedByUsername(String updatedByUsername) { + this.updatedByUsername = updatedByUsername; + } + + public int getUpdatedById() { + return updatedById; + } + + public void setUpdatedById(int updatedById) { + this.updatedById = updatedById; + } + + public long getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(long createdOn) { + this.createdOn = createdOn; + } + + public String getCreatedByUsername() { + return createdByUsername; + } + + public void setCreatedByUsername(String createdByUsername) { + this.createdByUsername = createdByUsername; + } + + public int getCreatedById() { + return createdById; + } + + public void setCreatedById(int createdById) { + this.createdById = createdById; + } + + public int getClientId() { + return clientId; + } + + public void setClientId(int clientId) { + this.clientId = clientId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getNoteContent() { + return noteContent; + } + + public void setNoteContent(String noteContent) { + this.noteContent = noteContent; + } + + public Note() { + } + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int i) { + parcel.writeInt(id); + parcel.writeInt(clientId); + parcel.writeString(noteContent); + parcel.writeInt(createdById); + parcel.writeString(createdByUsername); + parcel.writeLong(createdOn); + parcel.writeInt(updatedById); + parcel.writeString(updatedByUsername); + parcel.writeLong(updatedOn); + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/res/layout/fragment_notes.xml b/mifosng-android/src/main/res/layout/fragment_notes.xml new file mode 100644 index 00000000000..cd99ae6a0f0 --- /dev/null +++ b/mifosng-android/src/main/res/layout/fragment_notes.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mifosng-android/src/main/res/layout/item_note.xml b/mifosng-android/src/main/res/layout/item_note.xml new file mode 100644 index 00000000000..cbf8bf61202 --- /dev/null +++ b/mifosng-android/src/main/res/layout/item_note.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/mifosng-android/src/main/res/menu/menu_group.xml b/mifosng-android/src/main/res/menu/menu_group.xml index 2b995de8a86..d2c801dbfdc 100644 --- a/mifosng-android/src/main/res/menu/menu_group.xml +++ b/mifosng-android/src/main/res/menu/menu_group.xml @@ -4,9 +4,9 @@ --> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:context="com.mifos.mifosxdroid.online.GroupsActivity"> + + diff --git a/mifosng-android/src/main/res/values/strings.xml b/mifosng-android/src/main/res/values/strings.xml index fe96ca0ae69..3e1920c2082 100755 --- a/mifosng-android/src/main/res/values/strings.xml +++ b/mifosng-android/src/main/res/values/strings.xml @@ -645,6 +645,9 @@ This Survey is Empty Account No: %1$s no staff + Notes + Empty Notes + Failed to Fetch Notes \ No newline at end of file