diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.java deleted file mode 100755 index dc5be523b9f..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online; - -import android.os.Bundle; - -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.online.centerdetails.CenterDetailsFragment; -import com.mifos.mifosxdroid.online.clientlist.ClientListFragment; -import com.mifos.mifosxdroid.online.grouplist.GroupListFragment; -import com.mifos.mifosxdroid.online.savingsaccount.SavingsAccountFragment; -import com.mifos.objects.client.Client; -import com.mifos.utils.Constants; - -import java.util.List; - -public class CentersActivity extends MifosBaseActivity implements - GroupListFragment.OnFragmentInteractionListener, - CenterDetailsFragment.OnFragmentInteractionListener { - - private final String LOG_TAG = this.getClass().getSimpleName(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_toolbar_container); - showBackButton(); - - Bundle bundle = getIntent().getExtras(); - if (bundle != null) { - int centerId = bundle.getInt(Constants.CENTER_ID); - replaceFragment(CenterDetailsFragment.newInstance(centerId), false, R.id.container); - } - } - - @Override - public void loadGroupsOfCenter(int centerId) { - replaceFragment(GroupListFragment.newInstance(centerId), true, R.id.container); - } - - @Override - public void loadClientsOfGroup(List clientList) { - replaceFragment(ClientListFragment.newInstance(clientList, true), true, R.id.container); - } - - @Override - public void addCenterSavingAccount(int centerId) { - replaceFragment(SavingsAccountFragment.newInstance(centerId, true), true, R.id.container); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.kt new file mode 100755 index 00000000000..3cd5d096db8 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/CentersActivity.kt @@ -0,0 +1,42 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online + +import android.os.Bundle +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.online.centerdetails.CenterDetailsFragment +import com.mifos.mifosxdroid.online.centerdetails.CenterDetailsFragment.Companion.newInstance +import com.mifos.mifosxdroid.online.clientlist.ClientListFragment +import com.mifos.mifosxdroid.online.grouplist.GroupListFragment +import com.mifos.mifosxdroid.online.savingsaccount.SavingsAccountFragment +import com.mifos.objects.client.Client +import com.mifos.utils.Constants + +class CentersActivity : MifosBaseActivity(), GroupListFragment.OnFragmentInteractionListener, CenterDetailsFragment.OnFragmentInteractionListener { + private val LOG_TAG = this.javaClass.simpleName + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_toolbar_container) + showBackButton() + val bundle = intent.extras + if (bundle != null) { + val centerId = bundle.getInt(Constants.CENTER_ID) + replaceFragment(newInstance(centerId), false, R.id.container) + } + } + + override fun loadGroupsOfCenter(centerId: Int) { + replaceFragment(GroupListFragment.newInstance(centerId), true, R.id.container) + } + + override fun loadClientsOfGroup(clientList: List) { + replaceFragment(ClientListFragment.newInstance(clientList, true), true, R.id.container) + } + + override fun addCenterSavingAccount(centerId: Int) { + replaceFragment(SavingsAccountFragment.newInstance(centerId, true), true, R.id.container) + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.java deleted file mode 100644 index 20017f50b1e..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.java +++ /dev/null @@ -1,236 +0,0 @@ -package com.mifos.mifosxdroid.online.centerdetails; - -import android.app.Activity; -import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentTransaction; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.online.activate.ActivateFragment; -import com.mifos.objects.group.CenterInfo; -import com.mifos.objects.group.CenterWithAssociations; -import com.mifos.utils.Constants; -import com.mifos.utils.FragmentConstants; -import com.mifos.utils.Utils; - -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -/** - * Created by Rajan Maurya on 05/02/17. - */ -public class CenterDetailsFragment extends MifosBaseFragment implements CenterDetailsMvpView { - - @BindView(R.id.tv_center_activation_date) - TextView tvActivationDate; - - @BindView(R.id.tv_staff_name) - TextView tvStaffName; - - @BindView(R.id.tv_meeting_date) - TextView tvMeetingDate; - - @BindView(R.id.tv_meeting_frequency) - TextView tvMeetingFrequency; - - @BindView(R.id.tv_active_clients) - TextView tvActiveClients; - - @BindView(R.id.tv_active_group_loans) - TextView tvActiveGroupLoans; - - @BindView(R.id.tv_active_client_loans) - TextView tvActiveClientLoans; - - @BindView(R.id.tv_active_group_borrowers) - TextView tvActiveGroupBorrowers; - - @BindView(R.id.tv_active_client_borrowers) - TextView tvActiveClientBorrowers; - - @BindView(R.id.tv_active_overdue_group_loans) - TextView tvActiveOverdueGroupLoans; - - @BindView(R.id.tv_active_overdue_client_loans) - TextView tvActiveOverdueClientLoans; - - @BindView(R.id.rl_center) - RelativeLayout rlCenter; - - @BindView(R.id.ll_bottom_panel) - LinearLayout llBottomPanel; - - @Inject - CenterDetailsPresenter centerDetailsPresenter; - - View rootView; - - private int centerId; - - private OnFragmentInteractionListener listener; - - public static CenterDetailsFragment newInstance(int centerId) { - CenterDetailsFragment fragment = new CenterDetailsFragment(); - Bundle args = new Bundle(); - args.putInt(Constants.CENTER_ID, centerId); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - if (getArguments() != null) { - this.centerId = getArguments().getInt(Constants.CENTER_ID); - } - setHasOptionsMenu(true); - } - - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable - Bundle savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_center_details, container, false); - - ButterKnife.bind(this, rootView); - centerDetailsPresenter.attachView(this); - - centerDetailsPresenter.loadCentersGroupAndMeeting(centerId); - centerDetailsPresenter.loadSummaryInfo(centerId); - - return rootView; - } - - @OnClick(R.id.btn_activate_center) - void onClickActivateCenter() { - ActivateFragment activateFragment = - ActivateFragment.newInstance(centerId, Constants.ACTIVATE_CENTER); - FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() - .beginTransaction(); - fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CENTER_DETAIL); - fragmentTransaction.replace(R.id.container, activateFragment); - fragmentTransaction.commit(); - } - - @Override - public void showProgressbar(boolean show) { - if (show) { - rlCenter.setVisibility(View.GONE); - showMifosProgressBar(); - } else { - rlCenter.setVisibility(View.VISIBLE); - hideMifosProgressBar(); - } - } - - @Override - public void showCenterDetails(CenterWithAssociations centerWithAssociations) { - setToolbarTitle(centerWithAssociations.getName()); - if (!centerWithAssociations.getActivationDate().isEmpty()) { - if (centerWithAssociations.getStaffName() != null) { - tvStaffName.setText(centerWithAssociations.getStaffName()); - } else { - tvStaffName.setText(R.string.no_staff); - } - tvActivationDate.setText(Utils.getStringOfDate - (centerWithAssociations.getActivationDate())); - } - } - - @Override - public void showMeetingDetails(CenterWithAssociations centerWithAssociations) { - if (!centerWithAssociations.getActive()) { - llBottomPanel.setVisibility(View.VISIBLE); - showErrorMessage(R.string.error_center_inactive); - } - if (centerWithAssociations.getCollectionMeetingCalendar().getCalendarInstanceId() == null) { - tvMeetingDate.setText(getString(R.string.unassigned)); - if (getView() != null) { - getView().findViewById(R.id.row_meeting_frequency).setVisibility(View.GONE); - } - } else { - tvMeetingDate.setText(Utils.getStringOfDate(centerWithAssociations - .getCollectionMeetingCalendar().getNextTenRecurringDates().get(0))); - if (getView() != null) { - getView().findViewById(R.id.row_meeting_frequency).setVisibility(View.VISIBLE); - tvMeetingFrequency.setText(centerWithAssociations.getCollectionMeetingCalendar() - .getHumanReadable()); - } - } - } - - @Override - public void showSummaryInfo(List centerInfos) { - CenterInfo centerInfo = centerInfos.get(0); - tvActiveClients.setText(String.valueOf(centerInfo.getActiveClients())); - tvActiveGroupLoans.setText(String.valueOf(centerInfo.getActiveGroupLoans())); - tvActiveClientLoans.setText(String.valueOf(centerInfo.getActiveClientLoans())); - tvActiveClientBorrowers.setText(String.valueOf(centerInfo.getActiveClientBorrowers())); - tvActiveGroupBorrowers.setText(String.valueOf(centerInfo.getActiveGroupBorrowers())); - tvActiveOverdueClientLoans.setText(String.valueOf(centerInfo.getOverdueClientLoans())); - tvActiveOverdueGroupLoans.setText(String.valueOf(centerInfo.getOverdueGroupLoans())); - } - - @Override - public void showErrorMessage(int message) { - Toaster.show(rootView, message); - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_center, menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int menuItemId = item.getItemId(); - switch (menuItemId) { - case R.id.add_savings_account: - listener.addCenterSavingAccount(centerId); - break; - case R.id.view_group_list: - listener.loadGroupsOfCenter(centerId); - break; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - try { - listener = (CenterDetailsFragment.OnFragmentInteractionListener) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() + " must implement " + - "OnFragmentInteractionListener"); - } - } - - public interface OnFragmentInteractionListener { - void addCenterSavingAccount(int centerId); - void loadGroupsOfCenter(int centerId); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - centerDetailsPresenter.detachView(); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.kt new file mode 100644 index 00000000000..d1218a54ad5 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsFragment.kt @@ -0,0 +1,215 @@ +package com.mifos.mifosxdroid.online.centerdetails + +import android.app.Activity +import android.os.Bundle +import android.view.* +import android.widget.LinearLayout +import android.widget.RelativeLayout +import android.widget.TextView +import butterknife.BindView +import butterknife.ButterKnife +import butterknife.OnClick +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.online.activate.ActivateFragment +import com.mifos.objects.group.CenterInfo +import com.mifos.objects.group.CenterWithAssociations +import com.mifos.utils.Constants +import com.mifos.utils.FragmentConstants +import com.mifos.utils.Utils +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 05/02/17. + */ +class CenterDetailsFragment : MifosBaseFragment(), CenterDetailsMvpView { + @JvmField + @BindView(R.id.tv_center_activation_date) + var tvActivationDate: TextView? = null + + @JvmField + @BindView(R.id.tv_staff_name) + var tvStaffName: TextView? = null + + @JvmField + @BindView(R.id.tv_meeting_date) + var tvMeetingDate: TextView? = null + + @JvmField + @BindView(R.id.tv_meeting_frequency) + var tvMeetingFrequency: TextView? = null + + @JvmField + @BindView(R.id.tv_active_clients) + var tvActiveClients: TextView? = null + + @JvmField + @BindView(R.id.tv_active_group_loans) + var tvActiveGroupLoans: TextView? = null + + @JvmField + @BindView(R.id.tv_active_client_loans) + var tvActiveClientLoans: TextView? = null + + @JvmField + @BindView(R.id.tv_active_group_borrowers) + var tvActiveGroupBorrowers: TextView? = null + + @JvmField + @BindView(R.id.tv_active_client_borrowers) + var tvActiveClientBorrowers: TextView? = null + + @JvmField + @BindView(R.id.tv_active_overdue_group_loans) + var tvActiveOverdueGroupLoans: TextView? = null + + @JvmField + @BindView(R.id.tv_active_overdue_client_loans) + var tvActiveOverdueClientLoans: TextView? = null + + @JvmField + @BindView(R.id.rl_center) + var rlCenter: RelativeLayout? = null + + @JvmField + @BindView(R.id.ll_bottom_panel) + var llBottomPanel: LinearLayout? = null + + @JvmField + @Inject + var centerDetailsPresenter: CenterDetailsPresenter? = null + lateinit var rootView: View + private var centerId = 0 + private var listener: OnFragmentInteractionListener? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + if (arguments != null) { + centerId = arguments!!.getInt(Constants.CENTER_ID) + } + setHasOptionsMenu(true) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + rootView = inflater.inflate(R.layout.fragment_center_details, container, false) + ButterKnife.bind(this, rootView) + centerDetailsPresenter!!.attachView(this) + centerDetailsPresenter!!.loadCentersGroupAndMeeting(centerId) + centerDetailsPresenter!!.loadSummaryInfo(centerId) + return rootView + } + + @OnClick(R.id.btn_activate_center) + fun onClickActivateCenter() { + val activateFragment = ActivateFragment.newInstance(centerId, Constants.ACTIVATE_CENTER) + val fragmentTransaction = activity!!.supportFragmentManager + .beginTransaction() + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CENTER_DETAIL) + fragmentTransaction.replace(R.id.container, activateFragment) + fragmentTransaction.commit() + } + + override fun showProgressbar(show: Boolean) { + if (show) { + rlCenter!!.visibility = View.GONE + showMifosProgressBar() + } else { + rlCenter!!.visibility = View.VISIBLE + hideMifosProgressBar() + } + } + + override fun showCenterDetails(centerWithAssociations: CenterWithAssociations?) { + setToolbarTitle(centerWithAssociations!!.name) + if (!centerWithAssociations.activationDate.isEmpty()) { + if (centerWithAssociations.staffName != null) { + tvStaffName!!.text = centerWithAssociations.staffName + } else { + tvStaffName!!.setText(R.string.no_staff) + } + tvActivationDate!!.text = Utils.getStringOfDate(centerWithAssociations.activationDate) + } + } + + override fun showMeetingDetails(centerWithAssociations: CenterWithAssociations?) { + if (!centerWithAssociations!!.active) { + llBottomPanel!!.visibility = View.VISIBLE + showErrorMessage(R.string.error_center_inactive) + } + if (centerWithAssociations.collectionMeetingCalendar.calendarInstanceId == null) { + tvMeetingDate!!.text = getString(R.string.unassigned) + if (view != null) { + view!!.findViewById(R.id.row_meeting_frequency).visibility = View.GONE + } + } else { + tvMeetingDate!!.text = Utils.getStringOfDate(centerWithAssociations + .collectionMeetingCalendar.nextTenRecurringDates[0]) + if (view != null) { + view!!.findViewById(R.id.row_meeting_frequency).visibility = View.VISIBLE + tvMeetingFrequency!!.text = centerWithAssociations.collectionMeetingCalendar + .humanReadable + } + } + } + + override fun showSummaryInfo(centerInfos: List?) { + val centerInfo = centerInfos?.get(0) + tvActiveClients!!.text = centerInfo!!.activeClients.toString() + tvActiveGroupLoans!!.text = centerInfo.activeGroupLoans.toString() + tvActiveClientLoans!!.text = centerInfo.activeClientLoans.toString() + tvActiveClientBorrowers!!.text = centerInfo.activeClientBorrowers.toString() + tvActiveGroupBorrowers!!.text = centerInfo.activeGroupBorrowers.toString() + tvActiveOverdueClientLoans!!.text = centerInfo.overdueClientLoans.toString() + tvActiveOverdueGroupLoans!!.text = centerInfo.overdueGroupLoans.toString() + } + + override fun showErrorMessage(message: Int) { + Toaster.show(rootView, message) + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.menu_center, menu) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + val menuItemId = item.itemId + when (menuItemId) { + R.id.add_savings_account -> listener!!.addCenterSavingAccount(centerId) + R.id.view_group_list -> listener!!.loadGroupsOfCenter(centerId) + } + return super.onOptionsItemSelected(item) + } + + override fun onAttach(activity: Activity) { + super.onAttach(activity) + listener = try { + activity as OnFragmentInteractionListener + } catch (e: ClassCastException) { + throw ClassCastException(activity.toString() + " must implement " + + "OnFragmentInteractionListener") + } + } + + interface OnFragmentInteractionListener { + fun addCenterSavingAccount(centerId: Int) + fun loadGroupsOfCenter(centerId: Int) + } + + override fun onDestroyView() { + super.onDestroyView() + centerDetailsPresenter!!.detachView() + } + + companion object { + @JvmStatic + fun newInstance(centerId: Int): CenterDetailsFragment { + val fragment = CenterDetailsFragment() + val args = Bundle() + args.putInt(Constants.CENTER_ID, centerId) + fragment.arguments = args + return fragment + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.java deleted file mode 100644 index 2d7c6a3e399..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mifos.mifosxdroid.online.centerdetails; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.group.CenterInfo; -import com.mifos.objects.group.CenterWithAssociations; - -import java.util.List; - -/** - * Created by Rajan Maurya on 05/02/17. - */ - -public interface CenterDetailsMvpView extends MvpView { - - void showProgressbar(boolean show); - - void showCenterDetails(CenterWithAssociations centerWithAssociations); - - void showMeetingDetails(CenterWithAssociations centerWithAssociations); - - void showSummaryInfo(List centerInfos); - - void showErrorMessage(int message); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.kt new file mode 100644 index 00000000000..23e7f87de99 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsMvpView.kt @@ -0,0 +1,16 @@ +package com.mifos.mifosxdroid.online.centerdetails + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.group.CenterInfo +import com.mifos.objects.group.CenterWithAssociations + +/** + * Created by Rajan Maurya on 05/02/17. + */ +interface CenterDetailsMvpView : MvpView { + override fun showProgressbar(show: Boolean) + fun showCenterDetails(centerWithAssociations: CenterWithAssociations?) + fun showMeetingDetails(centerWithAssociations: CenterWithAssociations?) + fun showSummaryInfo(centerInfos: List?) + fun showErrorMessage(message: Int) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.java deleted file mode 100644 index 855efdcd822..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.mifos.mifosxdroid.online.centerdetails; - -import com.mifos.api.datamanager.DataManagerCenter; -import com.mifos.api.datamanager.DataManagerRunReport; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.group.CenterInfo; -import com.mifos.objects.group.CenterWithAssociations; - -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 Rajan Maurya on 05/02/17. - */ - -public class CenterDetailsPresenter extends BasePresenter { - - private final DataManagerCenter dataManagerCenter; - private final DataManagerRunReport dataManagerRunReport; - private CompositeSubscription subscriptions; - - @Inject - public CenterDetailsPresenter(DataManagerCenter dataManagerCenter, - DataManagerRunReport dataManagerRunReport) { - this.dataManagerCenter = dataManagerCenter; - this.dataManagerRunReport = dataManagerRunReport; - subscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(CenterDetailsMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - subscriptions.clear(); - } - - public void loadCentersGroupAndMeeting(final int centerId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerCenter.getCentersGroupAndMeeting(centerId) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showErrorMessage(R.string.failed_to_fetch_Group_and_meeting); - } - - @Override - public void onNext(CenterWithAssociations centerWithAssociations) { - getMvpView().showProgressbar(false); - getMvpView().showMeetingDetails(centerWithAssociations); - getMvpView().showCenterDetails(centerWithAssociations); - } - })); - } - - public void loadSummaryInfo(int centerId) { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerRunReport.getCenterSummarInfo(centerId, false) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showErrorMessage(R.string.failed_to_fetch_center_info); - } - - @Override - public void onNext(List centerInfos) { - getMvpView().showProgressbar(false); - getMvpView().showSummaryInfo(centerInfos); - } - })); - } -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.kt new file mode 100644 index 00000000000..4db8e672d60 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerdetails/CenterDetailsPresenter.kt @@ -0,0 +1,74 @@ +package com.mifos.mifosxdroid.online.centerdetails + +import com.mifos.api.datamanager.DataManagerCenter +import com.mifos.api.datamanager.DataManagerRunReport +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.group.CenterInfo +import com.mifos.objects.group.CenterWithAssociations +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 05/02/17. + */ +class CenterDetailsPresenter @Inject constructor(private val dataManagerCenter: DataManagerCenter, + private val dataManagerRunReport: DataManagerRunReport) : BasePresenter() { + private val subscriptions: CompositeSubscription + override fun attachView(mvpView: CenterDetailsMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + subscriptions.clear() + } + + fun loadCentersGroupAndMeeting(centerId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerCenter.getCentersGroupAndMeeting(centerId) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showErrorMessage(R.string.failed_to_fetch_Group_and_meeting) + } + + override fun onNext(centerWithAssociations: CenterWithAssociations?) { + mvpView!!.showProgressbar(false) + mvpView!!.showMeetingDetails(centerWithAssociations) + mvpView!!.showCenterDetails(centerWithAssociations) + } + })) + } + + fun loadSummaryInfo(centerId: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerRunReport.getCenterSummarInfo(centerId, false) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showErrorMessage(R.string.failed_to_fetch_center_info) + } + + override fun onNext(centerInfos: List?) { + mvpView!!.showProgressbar(false) + mvpView!!.showSummaryInfo(centerInfos) + } + })) + } + + init { + subscriptions = CompositeSubscription() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.java deleted file mode 100755 index 7a008f918d8..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.java +++ /dev/null @@ -1,391 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online.centerlist; - -import android.content.Intent; -import android.os.Bundle; -import androidx.fragment.app.FragmentTransaction; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener; -import androidx.appcompat.view.ActionMode; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; - -import com.github.therajanmaurya.sweeterror.SweetUIErrorHandler; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.adapters.CentersListAdapter; -import com.mifos.mifosxdroid.core.EndlessRecyclerViewScrollListener; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.core.RecyclerItemClickListener; -import com.mifos.mifosxdroid.core.RecyclerItemClickListener.OnItemClickListener; -import com.mifos.mifosxdroid.core.util.Toaster; -import com.mifos.mifosxdroid.dialogfragments.synccenterdialog.SyncCentersDialogFragment; -import com.mifos.mifosxdroid.online.CentersActivity; -import com.mifos.mifosxdroid.online.collectionsheet.CollectionSheetFragment; -import com.mifos.mifosxdroid.online.createnewcenter.CreateNewCenterFragment; -import com.mifos.mifosxdroid.uihelpers.MFDatePicker; -import com.mifos.objects.group.Center; -import com.mifos.objects.group.CenterWithAssociations; -import com.mifos.utils.Constants; -import com.mifos.utils.FragmentConstants; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -/** - * Created by ishankhanna on 11/03/14. - *

- * CenterListFragment Fetching and Showing CenterList in RecyclerView from - * demo.openmf.org/fineract-provider/api/v1/centers?paged=true&offset=0&limit=100 - */ -public class CenterListFragment extends MifosBaseFragment - implements CenterListMvpView, OnItemClickListener, OnRefreshListener { - - @BindView(R.id.rv_center_list) - RecyclerView rvCenters; - - @BindView(R.id.swipe_container) - SwipeRefreshLayout swipeRefreshLayout; - - @BindView(R.id.progressbar_center) - ProgressBar pbCenter; - - @BindView(R.id.layout_error) - View layoutError; - - @Inject - CenterListPresenter mCenterListPresenter; - - @Inject - CentersListAdapter centersListAdapter; - - private View rootView; - private List

centers; - private List
selectedCenters; - private LinearLayoutManager layoutManager; - private ActionModeCallback actionModeCallback; - private ActionMode actionMode; - private SweetUIErrorHandler sweetUIErrorHandler; - - @Override - public void onItemClick(View childView, int position) { - if (actionMode != null) { - toggleSelection(position); - } else { - Intent centerIntent = new Intent(getActivity(), CentersActivity.class); - centerIntent.putExtra(Constants.CENTER_ID, centers.get(position).getId()); - startActivity(centerIntent); - } - } - - @Override - public void onItemLongPress(View childView, int position) { - if (actionMode == null) { - actionMode = ((MifosBaseActivity) getActivity()).startSupportActionMode - (actionModeCallback); - } - toggleSelection(position); - } - - public static CenterListFragment newInstance() { - CenterListFragment centerListFragment = new CenterListFragment(); - Bundle args = new Bundle(); - centerListFragment.setArguments(args); - return centerListFragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - centers = new ArrayList<>(); - selectedCenters = new ArrayList<>(); - actionModeCallback = new ActionModeCallback(); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle - savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_centers_list, container, false); - - ButterKnife.bind(this, rootView); - mCenterListPresenter.attachView(this); - - //Showing User Interface. - showUserInterface(); - - //Fetching Centers - - /** - * This is the LoadMore of the RecyclerView. It called When Last Element of RecyclerView - * will shown on the Screen. - */ - rvCenters.addOnScrollListener(new EndlessRecyclerViewScrollListener(layoutManager) { - @Override - public void onLoadMore(int page, int totalItemsCount) { - mCenterListPresenter.loadCenters(true, totalItemsCount); - } - }); - - mCenterListPresenter.loadCenters(false, 0); - mCenterListPresenter.loadDatabaseCenters(); - - return rootView; - } - - /** - * This Method is setting the UI - */ - @Override - public void showUserInterface() { - setToolbarTitle(getResources().getString(R.string.title_activity_centers)); - layoutManager = new LinearLayoutManager(getActivity()); - layoutManager.setOrientation(LinearLayoutManager.VERTICAL); - rvCenters.setLayoutManager(layoutManager); - rvCenters.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), this)); - rvCenters.setHasFixedSize(true); - centersListAdapter.setContext(getActivity()); - rvCenters.setAdapter(centersListAdapter); - swipeRefreshLayout.setColorSchemeColors(getActivity() - .getResources().getIntArray(R.array.swipeRefreshColors)); - swipeRefreshLayout.setOnRefreshListener(this); - sweetUIErrorHandler = new SweetUIErrorHandler(getActivity(), rootView); - } - - @OnClick(R.id.fab_create_center) - void onClickCreateNewCenter() { - ((MifosBaseActivity) getActivity()).replaceFragment(CreateNewCenterFragment.newInstance(), - true, R.id.container); - } - - /** - * This Method will be called, whenever user will pull down to RefreshLayout. - */ - @Override - public void onRefresh() { - mCenterListPresenter.loadCenters(false, 0); - mCenterListPresenter.loadDatabaseCenters(); - if (actionMode != null) actionMode.finish(); - } - - /** - * OnClick Error Image icon, reload the centers - */ - @OnClick(R.id.btn_try_again) - public void reloadOnError() { - sweetUIErrorHandler.hideSweetErrorLayoutUI(rvCenters, layoutError); - mCenterListPresenter.loadCenters(false, 0); - mCenterListPresenter.loadDatabaseCenters(); - } - - /** - * Attaching the this.centers to the CentersListAdapter - * - * @param centers List
- */ - @Override - public void showCenters(List
centers) { - this.centers = centers; - centersListAdapter.setCenters(centers); - centersListAdapter.notifyDataSetChanged(); - } - - /** - * Updating the CenterListAdapter - * - * @param centers List
- */ - @Override - public void showMoreCenters(List
centers) { - this.centers.addAll(centers); - centersListAdapter.notifyDataSetChanged(); - } - - /** - * Showing that Server response is Empty - * - * @param message - */ - @Override - public void showEmptyCenters(int message) { - sweetUIErrorHandler.showSweetEmptyUI(getString(R.string.center), getString(message), - R.drawable.ic_error_black_24dp, rvCenters, layoutError); - } - - /** - * This Method for showing simple SeekBar - * - * @param message - */ - @Override - public void showMessage(int message) { - Toaster.show(rootView, getStringMessage(message)); - } - - /** - * This Method for showing the CollectionSheet of Center - * - * @param centerWithAssociations - * @param id - */ - @Override - public void showCentersGroupAndMeeting(final CenterWithAssociations centerWithAssociations, - final int id) { - MFDatePicker mfDatePicker = new MFDatePicker(); - mfDatePicker.setOnDatePickListener(new MFDatePicker.OnDatePickListener() { - @Override - public void onDatePicked(String date) { - if (centerWithAssociations.getCollectionMeetingCalendar().getId() != null) { - ((MifosBaseActivity) getActivity()) - .replaceFragment(CollectionSheetFragment.newInstance(id, date, - centerWithAssociations.getCollectionMeetingCalendar().getId()), - true, R.id.container); - - } else { - showMessage(R.string.no_meeting_found); - } - } - }); - mfDatePicker.show(getActivity().getSupportFragmentManager(), MFDatePicker.TAG); - } - - /** - * If Loading Centers is failed on first request then show to user a message that center failed - * to load. - */ - @Override - public void showFetchingError() { - String errorMessage = getStringMessage(R.string.failed_to_fetch_centers); - sweetUIErrorHandler.showSweetErrorUI(errorMessage, - R.drawable.ic_error_black_24dp, rvCenters, layoutError); - } - - /** - * This Method for showing Progress bar if the Center count is zero otherwise - * shows swipeRefreshLayout - * - * @param show Boolean - */ - @Override - public void showProgressbar(boolean show) { - swipeRefreshLayout.setRefreshing(show); - if (show && centersListAdapter.getItemCount() == 0) { - pbCenter.setVisibility(View.VISIBLE); - swipeRefreshLayout.setRefreshing(false); - } else { - pbCenter.setVisibility(View.GONE); - } - } - - /** - * This Method unregister the RecyclerView OnScrollListener and SwipeRefreshLayout - * and NoClientIcon click event. - */ - @Override - public void unregisterSwipeAndScrollListener() { - rvCenters.clearOnScrollListeners(); - swipeRefreshLayout.setEnabled(false); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.mItem_search) - getActivity().finish(); - return super.onOptionsItemSelected(item); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mCenterListPresenter.detachView(); - } - - /** - * Toggle the selection state of an item. - *

- * If the item was the last one in the selection and is unselected, the selection is stopped. - * Note that the selection must already be started (actionMode must not be null). - * - * @param position Position of the item to toggle the selection state - */ - private void toggleSelection(int position) { - centersListAdapter.toggleSelection(position); - int count = centersListAdapter.getSelectedItemCount(); - - if (count == 0) { - actionMode.finish(); - } else { - actionMode.setTitle(String.valueOf(count)); - actionMode.invalidate(); - } - } - - /** - * This ActionModeCallBack Class handling the User Event after the Selection of Clients. Like - * Click of Menu Sync Button and finish the ActionMode - */ - private class ActionModeCallback implements ActionMode.Callback { - @SuppressWarnings("unused") - private final String LOG_TAG = ActionModeCallback.class.getSimpleName(); - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - mode.getMenuInflater().inflate(R.menu.menu_sync, menu); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - switch (item.getItemId()) { - case R.id.action_sync: - - selectedCenters.clear(); - for (Integer position : centersListAdapter.getSelectedItems()) { - selectedCenters.add(centers.get(position)); - } - - SyncCentersDialogFragment syncCentersDialogFragment = - SyncCentersDialogFragment.newInstance(selectedCenters); - FragmentTransaction fragmentTransaction = getActivity() - .getSupportFragmentManager().beginTransaction(); - fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_SYNC); - syncCentersDialogFragment.setCancelable(false); - syncCentersDialogFragment.show(fragmentTransaction, - getResources().getString(R.string.sync_centers)); - mode.finish(); - return true; - - default: - return false; - } - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - centersListAdapter.clearSelection(); - actionMode = null; - } - } -} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.kt new file mode 100755 index 00000000000..7c70a7e5b79 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListFragment.kt @@ -0,0 +1,350 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online.centerlist + +import android.content.Intent +import android.os.Bundle +import android.view.* +import android.widget.ProgressBar +import androidx.appcompat.view.ActionMode +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener +import butterknife.BindView +import butterknife.ButterKnife +import butterknife.OnClick +import com.github.therajanmaurya.sweeterror.SweetUIErrorHandler +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.adapters.CentersListAdapter +import com.mifos.mifosxdroid.core.EndlessRecyclerViewScrollListener +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.core.RecyclerItemClickListener +import com.mifos.mifosxdroid.core.util.Toaster +import com.mifos.mifosxdroid.dialogfragments.synccenterdialog.SyncCentersDialogFragment +import com.mifos.mifosxdroid.online.CentersActivity +import com.mifos.mifosxdroid.online.collectionsheet.CollectionSheetFragment +import com.mifos.mifosxdroid.online.createnewcenter.CreateNewCenterFragment +import com.mifos.mifosxdroid.uihelpers.MFDatePicker +import com.mifos.objects.group.Center +import com.mifos.objects.group.CenterWithAssociations +import com.mifos.utils.Constants +import com.mifos.utils.FragmentConstants +import java.util.* +import javax.inject.Inject + +/** + * Created by ishankhanna on 11/03/14. + * + * + * CenterListFragment Fetching and Showing CenterList in RecyclerView from + * >demo.openmf.org/fineract-provider/api/v1/centers?paged=true&offset=0&limit=100> + */ +class CenterListFragment : MifosBaseFragment(), CenterListMvpView, RecyclerItemClickListener.OnItemClickListener, OnRefreshListener { + @JvmField + @BindView(R.id.rv_center_list) + var rvCenters: RecyclerView? = null + + @JvmField + @BindView(R.id.swipe_container) + var swipeRefreshLayout: SwipeRefreshLayout? = null + + @JvmField + @BindView(R.id.progressbar_center) + var pbCenter: ProgressBar? = null + + @JvmField + @BindView(R.id.layout_error) + var layoutError: View? = null + + @JvmField + @Inject + var mCenterListPresenter: CenterListPresenter? = null + + @JvmField + @Inject + var centersListAdapter: CentersListAdapter? = null + private lateinit var rootView: View + private var centers: List

? = null + private var selectedCenters: MutableList
? = null + private var layoutManager: LinearLayoutManager? = null + private var actionModeCallback: ActionModeCallback? = null + private var actionMode: ActionMode? = null + private var sweetUIErrorHandler: SweetUIErrorHandler? = null + override fun onItemClick(childView: View, position: Int) { + if (actionMode != null) { + toggleSelection(position) + } else { + val centerIntent = Intent(activity, CentersActivity::class.java) + centerIntent.putExtra(Constants.CENTER_ID, centers!![position].id) + startActivity(centerIntent) + } + } + + override fun onItemLongPress(childView: View, position: Int) { + if (actionMode == null) { + actionMode = (activity as MifosBaseActivity?)!!.startSupportActionMode(actionModeCallback!!) + } + toggleSelection(position) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + centers = ArrayList() + selectedCenters = ArrayList() + actionModeCallback = ActionModeCallback() + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + rootView = inflater.inflate(R.layout.fragment_centers_list, container, false) + ButterKnife.bind(this, rootView) + mCenterListPresenter!!.attachView(this) + + //Showing User Interface. + showUserInterface() + + //Fetching Centers + /** + * This is the LoadMore of the RecyclerView. It called When Last Element of RecyclerView + * will shown on the Screen. + */ + rvCenters!!.addOnScrollListener(object : EndlessRecyclerViewScrollListener(layoutManager) { + override fun onLoadMore(page: Int, totalItemsCount: Int) { + mCenterListPresenter!!.loadCenters(true, totalItemsCount) + } + }) + mCenterListPresenter!!.loadCenters(false, 0) + mCenterListPresenter!!.loadDatabaseCenters() + return rootView + } + + /** + * This Method is setting the UI + */ + override fun showUserInterface() { + setToolbarTitle(resources.getString(R.string.title_activity_centers)) + layoutManager = LinearLayoutManager(activity) + layoutManager!!.orientation = LinearLayoutManager.VERTICAL + rvCenters!!.layoutManager = layoutManager + rvCenters!!.addOnItemTouchListener(RecyclerItemClickListener(activity, this)) + rvCenters!!.setHasFixedSize(true) + centersListAdapter!!.setContext(activity) + rvCenters!!.adapter = centersListAdapter + swipeRefreshLayout!!.setColorSchemeColors(*activity + ?.getResources()!!.getIntArray(R.array.swipeRefreshColors)) + swipeRefreshLayout!!.setOnRefreshListener(this) + sweetUIErrorHandler = SweetUIErrorHandler(activity, rootView) + } + + @OnClick(R.id.fab_create_center) + fun onClickCreateNewCenter() { + (activity as MifosBaseActivity?)!!.replaceFragment(CreateNewCenterFragment.newInstance(), + true, R.id.container) + } + + /** + * This Method will be called, whenever user will pull down to RefreshLayout. + */ + override fun onRefresh() { + mCenterListPresenter!!.loadCenters(false, 0) + mCenterListPresenter!!.loadDatabaseCenters() + if (actionMode != null) actionMode!!.finish() + } + + /** + * OnClick Error Image icon, reload the centers + */ + @OnClick(R.id.btn_try_again) + fun reloadOnError() { + sweetUIErrorHandler!!.hideSweetErrorLayoutUI(rvCenters, layoutError) + mCenterListPresenter!!.loadCenters(false, 0) + mCenterListPresenter!!.loadDatabaseCenters() + } + + /** + * Attaching the this.centers to the CentersListAdapter + * + * @param centers List
+
*/ + override fun showCenters(centers: List?) { + this.centers = centers as List
? + centersListAdapter!!.setCenters(centers) + centersListAdapter!!.notifyDataSetChanged() + } + + /** + * Updating the CenterListAdapter + * + * @param centers List
+
*/ + override fun showMoreCenters(centers: List?) { + this.centers.addAll() + centersListAdapter!!.notifyDataSetChanged() + } + + /** + * Showing that Server response is Empty + * + * @param message + */ + override fun showEmptyCenters(message: Int) { + sweetUIErrorHandler!!.showSweetEmptyUI(getString(R.string.center), getString(message), + R.drawable.ic_error_black_24dp, rvCenters, layoutError) + } + + /** + * This Method for showing simple SeekBar + * + * @param message + */ + override fun showMessage(message: Int) { + Toaster.show(rootView, getStringMessage(message)) + } + + /** + * This Method for showing the CollectionSheet of Center + * + * @param centerWithAssociations + * @param id + */ + override fun showCentersGroupAndMeeting(centerWithAssociations: CenterWithAssociations?, id: Int) { + val mfDatePicker = MFDatePicker() + mfDatePicker.setOnDatePickListener { date -> + if (centerWithAssociations!!.collectionMeetingCalendar.id != null) { + (activity as MifosBaseActivity?) + ?.replaceFragment(CollectionSheetFragment.newInstance(id, date, + centerWithAssociations.collectionMeetingCalendar.id), + true, R.id.container) + } else { + showMessage(R.string.no_meeting_found) + } + } + mfDatePicker.show(activity!!.supportFragmentManager, MFDatePicker.TAG) + } + + /** + * If Loading Centers is failed on first request then show to user a message that center failed + * to load. + */ + override fun showFetchingError() { + val errorMessage = getStringMessage(R.string.failed_to_fetch_centers) + sweetUIErrorHandler!!.showSweetErrorUI(errorMessage, + R.drawable.ic_error_black_24dp, rvCenters, layoutError) + } + + /** + * This Method for showing Progress bar if the Center count is zero otherwise + * shows swipeRefreshLayout + * + * @param show Boolean + */ + override fun showProgressbar(show: Boolean) { + swipeRefreshLayout!!.isRefreshing = show + if (show && centersListAdapter!!.itemCount == 0) { + pbCenter!!.visibility = View.VISIBLE + swipeRefreshLayout!!.isRefreshing = false + } else { + pbCenter!!.visibility = View.GONE + } + } + + /** + * This Method unregister the RecyclerView OnScrollListener and SwipeRefreshLayout + * and NoClientIcon click event. + */ + override fun unregisterSwipeAndScrollListener() { + rvCenters!!.clearOnScrollListeners() + swipeRefreshLayout!!.isEnabled = false + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == R.id.mItem_search) activity!!.finish() + return super.onOptionsItemSelected(item) + } + + override fun onDestroyView() { + super.onDestroyView() + mCenterListPresenter!!.detachView() + } + + /** + * Toggle the selection state of an item. + * + * + * If the item was the last one in the selection and is unselected, the selection is stopped. + * Note that the selection must already be started (actionMode must not be null). + * + * @param position Position of the item to toggle the selection state + */ + private fun toggleSelection(position: Int) { + centersListAdapter!!.toggleSelection(position) + val count = centersListAdapter!!.selectedItemCount + if (count == 0) { + actionMode!!.finish() + } else { + actionMode!!.title = count.toString() + actionMode!!.invalidate() + } + } + + /** + * This ActionModeCallBack Class handling the User Event after the Selection of Clients. Like + * Click of Menu Sync Button and finish the ActionMode + */ + private inner class ActionModeCallback : ActionMode.Callback { + private val LOG_TAG = ActionModeCallback::class.java.simpleName + override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { + mode.menuInflater.inflate(R.menu.menu_sync, menu) + return true + } + + override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { + return false + } + + override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { + return when (item.itemId) { + R.id.action_sync -> { + selectedCenters!!.clear() + for (position in centersListAdapter!!.selectedItems) { + selectedCenters!!.add(centers!![position!!]) + } + val syncCentersDialogFragment = SyncCentersDialogFragment.newInstance(selectedCenters) + val fragmentTransaction = activity + ?.getSupportFragmentManager()!!.beginTransaction() + fragmentTransaction.addToBackStack(FragmentConstants.FRAG_CLIENT_SYNC) + syncCentersDialogFragment.isCancelable = false + syncCentersDialogFragment.show(fragmentTransaction, + resources.getString(R.string.sync_centers)) + mode.finish() + true + } + else -> false + } + } + + override fun onDestroyActionMode(mode: ActionMode) { + centersListAdapter!!.clearSelection() + actionMode = null + } + } + + companion object { + @JvmStatic + fun newInstance(): CenterListFragment { + val centerListFragment = CenterListFragment() + val args = Bundle() + centerListFragment.arguments = args + return centerListFragment + } + } +} + +private fun List?.addAll() { + +} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.java deleted file mode 100644 index 5459053ab04..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mifos.mifosxdroid.online.centerlist; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.group.Center; -import com.mifos.objects.group.CenterWithAssociations; - -import java.util.List; - -/** - * Created by Rajan Maurya on 5/6/16. - */ -public interface CenterListMvpView extends MvpView { - - void showUserInterface(); - - void showCenters(List
centers); - - void showMoreCenters(List
centers); - - void showEmptyCenters(int message); - - void showMessage(int message); - - void unregisterSwipeAndScrollListener(); - - void showCentersGroupAndMeeting(CenterWithAssociations centerWithAssociations, int id); - - void showFetchingError(); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.kt new file mode 100644 index 00000000000..7578f680b6d --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListMvpView.kt @@ -0,0 +1,19 @@ +package com.mifos.mifosxdroid.online.centerlist + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.group.Center +import com.mifos.objects.group.CenterWithAssociations + +/** + * Created by Rajan Maurya on 5/6/16. + */ +interface CenterListMvpView : MvpView { + fun showUserInterface() + fun showCenters(centers: List?) + fun showMoreCenters(centers: List?) + fun showEmptyCenters(message: Int) + fun showMessage(message: Int) + fun unregisterSwipeAndScrollListener() + fun showCentersGroupAndMeeting(centerWithAssociations: CenterWithAssociations?, id: Int) + fun showFetchingError() +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.java deleted file mode 100644 index ea99cbe4fa5..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.java +++ /dev/null @@ -1,212 +0,0 @@ -package com.mifos.mifosxdroid.online.centerlist; - -import com.mifos.api.datamanager.DataManagerCenter; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.client.Page; -import com.mifos.objects.group.Center; -import com.mifos.objects.group.CenterWithAssociations; - -import java.util.ArrayList; -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 Rajan Maurya on 5/6/16. - */ -public class CenterListPresenter extends BasePresenter { - - private final DataManagerCenter mDataManagerCenter; - private CompositeSubscription mSubscriptions; - - private List
mDbCenterList; - private List
mSyncCenterList; - - private int limit = 100; - private Boolean loadmore = false; - private Boolean mRestApiCenterSyncStatus = false; - private Boolean mDatabaseCenterSyncStatus = false; - - @Inject - public CenterListPresenter(DataManagerCenter dataManagerCenter) { - mDataManagerCenter = dataManagerCenter; - mSubscriptions = new CompositeSubscription(); - mDbCenterList = new ArrayList<>(); - mSyncCenterList = new ArrayList<>(); - } - - - @Override - public void attachView(CenterListMvpView mvpView) { - super.attachView(mvpView); - } - - - @Override - public void detachView() { - super.detachView(); - mSubscriptions.unsubscribe(); - } - - - /** - * This Method for loading the first 100 centers. - * - * @param loadmore - * @param offset - */ - public void loadCenters(boolean loadmore, int offset) { - this.loadmore = loadmore; - loadCenters(true, offset, limit); - } - - /** - * This Method For showing Center List in UI. - * - * @param centers - */ - public void showCenters(List
centers) { - if (loadmore) { - getMvpView().showMoreCenters(centers); - } else { - getMvpView().showCenters(centers); - } - } - - /** - * Setting CenterSync Status True when mRestApiCenterSyncStatus && mDatabaseCenterSyncStatus - * are true. - */ - public void setAlreadyCenterSyncStatus() { - if (mRestApiCenterSyncStatus && mDatabaseCenterSyncStatus) { - showCenters(checkCenterAlreadySyncedOrNot(mSyncCenterList)); - } - } - - /** - * @param paged True Enabling the Pagination of the API - * @param offset Value given from which position Center List will be fetched. - * @param limit Number of Centers to fetch. - */ - public void loadCenters(boolean paged, int offset, int limit) { - checkViewAttached(); - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerCenter.getCenters(paged, offset, limit) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - if (loadmore) { - getMvpView().showMessage(R.string.failed_to_fetch_centers); - } else { - getMvpView().showFetchingError(); - } - } - - @Override - public void onNext(Page
centerPage) { - mSyncCenterList = centerPage.getPageItems(); - - if (mSyncCenterList.size() == 0 && !loadmore) { - getMvpView().showEmptyCenters(R.string.center); - getMvpView().unregisterSwipeAndScrollListener(); - } else if (mSyncCenterList.size() == 0 && loadmore) { - getMvpView().showMessage(R.string.no_more_centers_available); - } else { - showCenters(mSyncCenterList); - mRestApiCenterSyncStatus = true; - setAlreadyCenterSyncStatus(); - } - getMvpView().showProgressbar(false); - } - })); - } - - public void loadCentersGroupAndMeeting(final int id) { - getMvpView().showProgressbar(true); - mSubscriptions.add(mDataManagerCenter.getCentersGroupAndMeeting(id) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showMessage(R.string.failed_to_fetch_Group_and_meeting); - } - - @Override - public void onNext(CenterWithAssociations centerWithAssociations) { - getMvpView().showProgressbar(false); - getMvpView().showCentersGroupAndMeeting(centerWithAssociations, id); - } - })); - } - - /** - * This Method Loading the Center From Database. It request Observable to DataManagerCenter - * and DataManagerCenter Request to DatabaseHelperCenter to load the Center List Page from the - * Center_Table and As the Center List Page is loaded DataManagerCenter gives the Center List - * Page after getting response from DatabaseHelperCenter - */ - public void loadDatabaseCenters() { - checkViewAttached(); - mSubscriptions.add(mDataManagerCenter.getAllDatabaseCenters() - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - } - - @Override - public void onError(Throwable e) { - getMvpView().showMessage(R.string.failed_to_load_db_centers); - } - - @Override - public void onNext(Page
centerPage) { - mDatabaseCenterSyncStatus = true; - mDbCenterList = centerPage.getPageItems(); - setAlreadyCenterSyncStatus(); - } - }) - ); - } - - /** - * This Method Filtering the Centers Loaded from Server is already sync or not. If yes the - * put the center.setSync(true) and view will show those centers as sync already to user - * - * @param - * @return Page
- */ - public List
checkCenterAlreadySyncedOrNot(List
centers) { - if (mDbCenterList.size() != 0) { - for (Center dbCenter : mDbCenterList) { - for (Center syncCenter : centers) { - if (dbCenter.getId().equals(syncCenter.getId())) { - syncCenter.setSync(true); - break; - } - } - } - } - return centers; - } -} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.kt new file mode 100644 index 00000000000..f33a97addcd --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/centerlist/CenterListPresenter.kt @@ -0,0 +1,182 @@ +package com.mifos.mifosxdroid.online.centerlist + +import com.mifos.api.datamanager.DataManagerCenter +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.client.Page +import com.mifos.objects.group.Center +import com.mifos.objects.group.CenterWithAssociations +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import java.util.* +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 5/6/16. + */ +class CenterListPresenter @Inject constructor(private val mDataManagerCenter: DataManagerCenter) : BasePresenter() { + private val mSubscriptions: CompositeSubscription + private var mDbCenterList: List
+ private var mSyncCenterList: List + private val limit = 100 + private var loadmore = false + private var mRestApiCenterSyncStatus = false + private var mDatabaseCenterSyncStatus = false + override fun attachView(mvpView: CenterListMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + mSubscriptions.unsubscribe() + } + + /** + * This Method for loading the first 100 centers. + * + * @param loadmore + * @param offset + */ + fun loadCenters(loadmore: Boolean, offset: Int) { + this.loadmore = loadmore + loadCenters(true, offset, limit) + } + + /** + * This Method For showing Center List in UI. + * + * @param centers + */ + fun showCenters(centers: List?) { + if (loadmore) { + mvpView!!.showMoreCenters(centers) + } else { + mvpView!!.showCenters(centers) + } + } + + /** + * Setting CenterSync Status True when mRestApiCenterSyncStatus && mDatabaseCenterSyncStatus + * are true. + */ + fun setAlreadyCenterSyncStatus() { + if (mRestApiCenterSyncStatus && mDatabaseCenterSyncStatus) { + showCenters(checkCenterAlreadySyncedOrNot(mSyncCenterList)) + } + } + + /** + * @param paged True Enabling the Pagination of the API + * @param offset Value given from which position Center List will be fetched. + * @param limit Number of Centers to fetch. + */ + fun loadCenters(paged: Boolean, offset: Int, limit: Int) { + checkViewAttached() + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerCenter.getCenters(paged, offset, limit) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + if (loadmore) { + mvpView!!.showMessage(R.string.failed_to_fetch_centers) + } else { + mvpView!!.showFetchingError() + } + } + + override fun onNext(centerPage: Page?) { + mSyncCenterList = centerPage!!.pageItems + if (mSyncCenterList.size == 0 && !loadmore) { + mvpView!!.showEmptyCenters(R.string.center) + mvpView!!.unregisterSwipeAndScrollListener() + } else if (mSyncCenterList.size == 0 && loadmore) { + mvpView!!.showMessage(R.string.no_more_centers_available) + } else { + showCenters(mSyncCenterList) + mRestApiCenterSyncStatus = true + setAlreadyCenterSyncStatus() + } + mvpView!!.showProgressbar(false) + } + })) + } + + fun loadCentersGroupAndMeeting(id: Int) { + mvpView!!.showProgressbar(true) + mSubscriptions.add(mDataManagerCenter.getCentersGroupAndMeeting(id) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showMessage(R.string.failed_to_fetch_Group_and_meeting) + } + + override fun onNext(centerWithAssociations: CenterWithAssociations?) { + mvpView!!.showProgressbar(false) + mvpView!!.showCentersGroupAndMeeting(centerWithAssociations, id) + } + })) + } + + /** + * This Method Loading the Center From Database. It request Observable to DataManagerCenter + * and DataManagerCenter Request to DatabaseHelperCenter to load the Center List Page from the + * Center_Table and As the Center List Page is loaded DataManagerCenter gives the Center List + * Page after getting response from DatabaseHelperCenter + */ + fun loadDatabaseCenters() { + checkViewAttached() + mSubscriptions.add(mDataManagerCenter.allDatabaseCenters + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showMessage(R.string.failed_to_load_db_centers) + } + + override fun onNext(centerPage: Page?) { + mDatabaseCenterSyncStatus = true + if (centerPage != null) { + mDbCenterList = centerPage.pageItems as List
+ } + setAlreadyCenterSyncStatus() + } + }) + ) + } + + /** + * This Method Filtering the Centers Loaded from Server is already sync or not. If yes the + * put the center.setSync(true) and view will show those centers as sync already to user + * + * @param + * @return Page
+
*/ + fun checkCenterAlreadySyncedOrNot(centers: List): List { + if (mDbCenterList.size != 0) { + for (dbCenter in mDbCenterList) { + for (syncCenter in centers) { + if (dbCenter.id == syncCenter!!.id) { + syncCenter.isSync = true + break + } + } + } + } + return centers + } + + init { + mSubscriptions = CompositeSubscription() + mDbCenterList = ArrayList() + mSyncCenterList = ArrayList() + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.java deleted file mode 100755 index 62e9a3de939..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * This project is licensed under the open source MPL V2. - * See https://github.com/openMF/android-client/blob/master/LICENSE.md - */ - -package com.mifos.mifosxdroid.online.createnewcenter; - -/** - * Created by nellyk on 1/22/2016. - */ - -import android.app.Activity; -import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.Spinner; -import android.widget.TextView; -import android.widget.Toast; - -import com.mifos.exceptions.InvalidTextInputException; -import com.mifos.exceptions.RequiredFieldException; -import com.mifos.exceptions.ShortOfLengthException; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.core.MifosBaseActivity; -import com.mifos.mifosxdroid.core.MifosBaseFragment; -import com.mifos.mifosxdroid.uihelpers.MFDatePicker; -import com.mifos.objects.organisation.Office; -import com.mifos.objects.response.SaveResponse; -import com.mifos.services.data.CenterPayload; -import com.mifos.utils.DateHelper; -import com.mifos.utils.FragmentConstants; -import com.mifos.utils.MifosResponseHandler; -import com.mifos.utils.ValidationUtil; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - - -public class CreateNewCenterFragment extends MifosBaseFragment - implements MFDatePicker.OnDatePickListener, CreateNewCenterMvpView { - - - private static final String TAG = "CreateNewCenter"; - - @BindView(R.id.et_center_name) - EditText et_centerName; - - @BindView(R.id.cb_center_active_status) - CheckBox cb_centerActiveStatus; - - @BindView(R.id.tv_center_activationDate) - TextView tv_activationDate; - - @BindView(R.id.sp_center_offices) - Spinner sp_offices; - - @BindView(R.id.btn_submit) - Button bt_submit; - - @BindView(R.id.ll_center) - LinearLayout llCenter; - - @BindView(R.id.layout_submission) - LinearLayout layout_submission; - - int officeId; - Boolean result = true; - - @Inject - CreateNewCenterPresenter mCreateNewCenterPresenter; - - private View rootView; - private String activationdateString; - private DialogFragment newDatePicker; - private HashMap officeNameIdHashMap = new HashMap(); - - public static CreateNewCenterFragment newInstance() { - CreateNewCenterFragment createNewCenterFragment = new CreateNewCenterFragment(); - return createNewCenterFragment; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ((MifosBaseActivity) getActivity()).getActivityComponent().inject(this); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle - savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_create_new_center, null); - - ButterKnife.bind(this, rootView); - mCreateNewCenterPresenter.attachView(this); - - inflateOfficeSpinner(); - inflateActivationDate(); - //client active checkbox onCheckedListener - cb_centerActiveStatus.setOnCheckedChangeListener(new CompoundButton - .OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { - if (isChecked) { - layout_submission.setVisibility(View.VISIBLE); - - activationdateString = tv_activationDate.getText().toString(); - activationdateString = DateHelper.getDateAsStringUsedForCollectionSheetPayload - (activationdateString).replace("-", " "); - - } else { - layout_submission.setVisibility(View.GONE); - } - - } - }); - - bt_submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - CenterPayload centerPayload = new CenterPayload(); - - centerPayload.setName(et_centerName.getEditableText().toString()); - centerPayload.setActive(cb_centerActiveStatus.isChecked()); - centerPayload.setActivationDate(activationdateString); - centerPayload.setOfficeId(officeId); - centerPayload.setDateFormat("dd MMMM yyyy"); - centerPayload.setLocale("en"); - - initiateCenterCreation(centerPayload); - - } - }); - - return rootView; - } - - //inflating office list spinner - private void inflateOfficeSpinner() { - mCreateNewCenterPresenter.loadOffices(); - } - - - private void initiateCenterCreation(CenterPayload centerPayload) { - - if (isCenterNameValid()) { - mCreateNewCenterPresenter.createCenter(centerPayload); - } - } - - - public void inflateActivationDate() { - newDatePicker = MFDatePicker.newInsance(this); - - tv_activationDate.setText(MFDatePicker.getDatePickedAsString()); - - tv_activationDate.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - newDatePicker.show(getActivity().getSupportFragmentManager(), FragmentConstants - .DFRAG_DATE_PICKER); - } - - }); - - - } - - public void onDatePicked(String date) { - tv_activationDate.setText(date); - - } - - public boolean isCenterNameValid() { - result = true; - try { - if (TextUtils.isEmpty(et_centerName.getEditableText().toString())) { - throw new RequiredFieldException(getResources().getString(R.string.center_name), - getResources().getString(R.string.error_cannot_be_empty)); - } - - if (et_centerName.getEditableText().toString().trim().length() < 4 && et_centerName - .getEditableText().toString().trim().length() > 0) { - throw new ShortOfLengthException(getResources().getString(R.string.center_name), 4); - } - if (!ValidationUtil.isNameValid(et_centerName.getEditableText().toString())) { - throw new InvalidTextInputException( - getResources().getString(R.string.center_name), - getResources().getString(R.string.error_should_contain_only), - InvalidTextInputException.TYPE_ALPHABETS); - } - } catch (InvalidTextInputException e) { - e.notifyUserWithToast(getActivity()); - result = false; - } catch (ShortOfLengthException e) { - e.notifyUserWithToast(getActivity()); - result = false; - } catch (RequiredFieldException e) { - e.notifyUserWithToast(getActivity()); - result = false; - } - return result; - } - - - @Override - public void showOffices(List offices) { - final List officeList = new ArrayList(); - - for (Office office : offices) { - officeList.add(office.getName()); - officeNameIdHashMap.put(office.getName(), office.getId()); - } - Collections.sort(officeList); - ArrayAdapter officeAdapter = new ArrayAdapter(getActivity(), - android.R.layout.simple_spinner_item, officeList); - officeAdapter.setDropDownViewResource(android.R.layout - .simple_spinner_dropdown_item); - sp_offices.setAdapter(officeAdapter); - sp_offices.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - - @Override - public void onItemSelected(AdapterView adapterView, - View view, int i, long l) { - officeId = officeNameIdHashMap.get(officeList.get(i)); - Log.d("officeId " + officeList.get(i), String.valueOf(officeId)); - if (officeId != -1) { - - } else { - Toast.makeText(getActivity(), getString(R.string.error_select_office) - , Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onNothingSelected(AdapterView parent) { - - } - }); - } - - @Override - public void centerCreatedSuccessfully(SaveResponse saveResponse) { - Toast.makeText(getActivity(), "Center " + MifosResponseHandler.getResponse(), - Toast.LENGTH_LONG).show(); - getActivity().getSupportFragmentManager().popBackStack(); - } - - @Override - public void showFetchingError(int errorMessage) { - Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show(); - } - - @Override - public void showFetchingError(String s) { - Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show(); - } - - @Override - public void showProgressbar(boolean show) { - if (show) { - llCenter.setVisibility(View.GONE); - showMifosProgressBar(); - } else { - llCenter.setVisibility(View.VISIBLE); - hideMifosProgressBar(); - } - } - - @SuppressWarnings("deprecation") - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mCreateNewCenterPresenter.detachView(); - } - - @Override - public void onDetach() { - super.onDetach(); - } -} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.kt new file mode 100755 index 00000000000..ead7aa4c554 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterFragment.kt @@ -0,0 +1,235 @@ +/* + * This project is licensed under the open source MPL V2. + * See https://github.com/openMF/android-client/blob/master/LICENSE.md + */ +package com.mifos.mifosxdroid.online.createnewcenter + +import android.app.Activity +import android.os.Bundle +import android.text.TextUtils +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.* +import android.widget.AdapterView.OnItemSelectedListener +import androidx.fragment.app.DialogFragment +import butterknife.BindView +import butterknife.ButterKnife +import com.mifos.exceptions.InvalidTextInputException +import com.mifos.exceptions.RequiredFieldException +import com.mifos.exceptions.ShortOfLengthException +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.core.MifosBaseActivity +import com.mifos.mifosxdroid.core.MifosBaseFragment +import com.mifos.mifosxdroid.uihelpers.MFDatePicker +import com.mifos.mifosxdroid.uihelpers.MFDatePicker.OnDatePickListener +import com.mifos.objects.organisation.Office +import com.mifos.objects.response.SaveResponse +import com.mifos.services.data.CenterPayload +import com.mifos.utils.DateHelper +import com.mifos.utils.FragmentConstants +import com.mifos.utils.MifosResponseHandler +import com.mifos.utils.ValidationUtil +import java.util.* +import javax.inject.Inject + +/** + * Created by nellyk on 1/22/2016. + */ +class CreateNewCenterFragment : MifosBaseFragment(), OnDatePickListener, CreateNewCenterMvpView { + @JvmField + @BindView(R.id.et_center_name) + var et_centerName: EditText? = null + + @JvmField + @BindView(R.id.cb_center_active_status) + var cb_centerActiveStatus: CheckBox? = null + + @JvmField + @BindView(R.id.tv_center_activationDate) + var tv_activationDate: TextView? = null + + @JvmField + @BindView(R.id.sp_center_offices) + var sp_offices: Spinner? = null + + @JvmField + @BindView(R.id.btn_submit) + var bt_submit: Button? = null + + @JvmField + @BindView(R.id.ll_center) + var llCenter: LinearLayout? = null + + @JvmField + @BindView(R.id.layout_submission) + var layout_submission: LinearLayout? = null + var officeId = 0 + var result = true + + @JvmField + @Inject + var mCreateNewCenterPresenter: CreateNewCenterPresenter? = null + private lateinit var rootView: View + private var activationdateString: String? = null + private var newDatePicker: DialogFragment? = null + private val officeNameIdHashMap = HashMap() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as MifosBaseActivity?)!!.activityComponent.inject(this) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + rootView = inflater.inflate(R.layout.fragment_create_new_center, null) + ButterKnife.bind(this, rootView) + mCreateNewCenterPresenter!!.attachView(this) + inflateOfficeSpinner() + inflateActivationDate() + //client active checkbox onCheckedListener + cb_centerActiveStatus!!.setOnCheckedChangeListener { compoundButton, isChecked -> + if (isChecked) { + layout_submission!!.visibility = View.VISIBLE + activationdateString = tv_activationDate!!.text.toString() + activationdateString = DateHelper.getDateAsStringUsedForCollectionSheetPayload(activationdateString).replace("-", " ") + } else { + layout_submission!!.visibility = View.GONE + } + } + bt_submit!!.setOnClickListener { + val centerPayload = CenterPayload() + centerPayload.name = et_centerName!!.editableText.toString() + centerPayload.isActive = cb_centerActiveStatus!!.isChecked + centerPayload.activationDate = activationdateString + centerPayload.officeId = officeId + centerPayload.dateFormat = "dd MMMM yyyy" + centerPayload.locale = "en" + initiateCenterCreation(centerPayload) + } + return rootView + } + + //inflating office list spinner + private fun inflateOfficeSpinner() { + mCreateNewCenterPresenter!!.loadOffices() + } + + private fun initiateCenterCreation(centerPayload: CenterPayload) { + if (isCenterNameValid) { + mCreateNewCenterPresenter!!.createCenter(centerPayload) + } + } + + fun inflateActivationDate() { + newDatePicker = MFDatePicker.newInsance(this) + tv_activationDate!!.text = MFDatePicker.getDatePickedAsString() + tv_activationDate!!.setOnClickListener { (newDatePicker as MFDatePicker?)!!.show(activity!!.supportFragmentManager, FragmentConstants.DFRAG_DATE_PICKER) } + } + + override fun onDatePicked(date: String) { + tv_activationDate!!.text = date + } + + val isCenterNameValid: Boolean + get() { + result = true + try { + if (TextUtils.isEmpty(et_centerName!!.editableText.toString())) { + throw RequiredFieldException(resources.getString(R.string.center_name), + resources.getString(R.string.error_cannot_be_empty)) + } + if (et_centerName!!.editableText.toString().trim { it <= ' ' }.length < 4 && et_centerName!! + .getEditableText().toString().trim { it <= ' ' }.length > 0) { + throw ShortOfLengthException(resources.getString(R.string.center_name), 4) + } + if (!ValidationUtil.isNameValid(et_centerName!!.editableText.toString())) { + throw InvalidTextInputException( + resources.getString(R.string.center_name), + resources.getString(R.string.error_should_contain_only), + InvalidTextInputException.TYPE_ALPHABETS) + } + } catch (e: InvalidTextInputException) { + e.notifyUserWithToast(activity) + result = false + } catch (e: ShortOfLengthException) { + e.notifyUserWithToast(activity) + result = false + } catch (e: RequiredFieldException) { + e.notifyUserWithToast(activity) + result = false + } + return result + } + + override fun showOffices(offices: List?) { + val officeList: MutableList = ArrayList() + for (office in offices!!) { + officeList.add(office!!.name) + officeNameIdHashMap[office.name] = office.id + } + Collections.sort(officeList) + val officeAdapter = ArrayAdapter(activity, + android.R.layout.simple_spinner_item, officeList) + officeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + sp_offices!!.adapter = officeAdapter + sp_offices!!.onItemSelectedListener = object : OnItemSelectedListener { + override fun onItemSelected(adapterView: AdapterView<*>?, + view: View, i: Int, l: Long) { + officeId = officeNameIdHashMap[officeList[i]]!! + Log.d("officeId " + officeList[i], officeId.toString()) + if (officeId != -1) { + } else { + Toast.makeText(activity, getString(R.string.error_select_office) + , Toast.LENGTH_SHORT).show() + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) {} + } + } + + override fun centerCreatedSuccessfully(saveResponse: SaveResponse?) { + Toast.makeText(activity, "Center " + MifosResponseHandler.getResponse(), + Toast.LENGTH_LONG).show() + activity!!.supportFragmentManager.popBackStack() + } + + override fun showFetchingError(errorMessage: Int) { + Toast.makeText(activity, errorMessage, Toast.LENGTH_SHORT).show() + } + + override fun showFetchingError(s: String?) { + Toast.makeText(activity, s, Toast.LENGTH_SHORT).show() + } + + override fun showProgressbar(show: Boolean) { + if (show) { + llCenter!!.visibility = View.GONE + showMifosProgressBar() + } else { + llCenter!!.visibility = View.VISIBLE + hideMifosProgressBar() + } + } + + override fun onAttach(activity: Activity) { + super.onAttach(activity) + } + + override fun onDestroyView() { + super.onDestroyView() + mCreateNewCenterPresenter!!.detachView() + } + + override fun onDetach() { + super.onDetach() + } + + companion object { + private const val TAG = "CreateNewCenter" + @JvmStatic + fun newInstance(): CreateNewCenterFragment { + return CreateNewCenterFragment() + } + } +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.java deleted file mode 100644 index 7192ff62b3d..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mifos.mifosxdroid.online.createnewcenter; - -import com.mifos.mifosxdroid.base.MvpView; -import com.mifos.objects.organisation.Office; -import com.mifos.objects.response.SaveResponse; - -import java.util.List; - -/** - * Created by Rajan Maurya on 06/06/16. - */ -public interface CreateNewCenterMvpView extends MvpView { - - void showOffices(List offices); - - void centerCreatedSuccessfully(SaveResponse saveResponse); - - void showFetchingError(int errorMessage); - - void showFetchingError(String s); -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.kt new file mode 100644 index 00000000000..d79fa4b0365 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterMvpView.kt @@ -0,0 +1,15 @@ +package com.mifos.mifosxdroid.online.createnewcenter + +import com.mifos.mifosxdroid.base.MvpView +import com.mifos.objects.organisation.Office +import com.mifos.objects.response.SaveResponse + +/** + * Created by Rajan Maurya on 06/06/16. + */ +interface CreateNewCenterMvpView : MvpView { + fun showOffices(offices: List?) + fun centerCreatedSuccessfully(saveResponse: SaveResponse?) + fun showFetchingError(errorMessage: Int) + fun showFetchingError(s: String?) +} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.java b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.java deleted file mode 100644 index 9d7b58f2b16..00000000000 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.mifos.mifosxdroid.online.createnewcenter; - -import com.mifos.api.datamanager.DataManagerCenter; -import com.mifos.mifosxdroid.R; -import com.mifos.mifosxdroid.base.BasePresenter; -import com.mifos.objects.organisation.Office; -import com.mifos.objects.response.SaveResponse; -import com.mifos.services.data.CenterPayload; -import com.mifos.utils.MFErrorParser; - -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 Rajan Maurya on 06/06/16. - */ -public class CreateNewCenterPresenter extends BasePresenter { - - private final DataManagerCenter dataManagerCenter; - private CompositeSubscription subscriptions; - - @Inject - public CreateNewCenterPresenter(DataManagerCenter dataManager) { - dataManagerCenter = dataManager; - subscriptions = new CompositeSubscription(); - } - - @Override - public void attachView(CreateNewCenterMvpView mvpView) { - super.attachView(mvpView); - } - - @Override - public void detachView() { - super.detachView(); - subscriptions.unsubscribe(); - } - - - public void loadOffices() { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerCenter.getOffices() - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(R.string.failed_to_fetch_offices); - } - - @Override - public void onNext(List offices) { - getMvpView().showProgressbar(false); - getMvpView().showOffices(offices); - } - })); - } - - public void createCenter(CenterPayload centerPayload) { - checkViewAttached(); - getMvpView().showProgressbar(true); - subscriptions.add(dataManagerCenter.createCenter(centerPayload) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - getMvpView().showProgressbar(false); - } - - @Override - public void onError(Throwable e) { - getMvpView().showProgressbar(false); - getMvpView().showFetchingError(MFErrorParser.errorMessage(e)); - } - - @Override - public void onNext(SaveResponse saveResponse) { - getMvpView().showProgressbar(false); - getMvpView().centerCreatedSuccessfully(saveResponse); - } - })); - } - - -} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.kt new file mode 100644 index 00000000000..60fcf738b05 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/createnewcenter/CreateNewCenterPresenter.kt @@ -0,0 +1,76 @@ +package com.mifos.mifosxdroid.online.createnewcenter + +import com.mifos.api.datamanager.DataManagerCenter +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.base.BasePresenter +import com.mifos.objects.organisation.Office +import com.mifos.objects.response.SaveResponse +import com.mifos.services.data.CenterPayload +import com.mifos.utils.MFErrorParser +import rx.Subscriber +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import rx.subscriptions.CompositeSubscription +import javax.inject.Inject + +/** + * Created by Rajan Maurya on 06/06/16. + */ +class CreateNewCenterPresenter @Inject constructor(private val dataManagerCenter: DataManagerCenter) : BasePresenter() { + private val subscriptions: CompositeSubscription + override fun attachView(mvpView: CreateNewCenterMvpView?) { + super.attachView(mvpView) + } + + override fun detachView() { + super.detachView() + subscriptions.unsubscribe() + } + + fun loadOffices() { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerCenter.offices + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber?>() { + override fun onCompleted() {} + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(R.string.failed_to_fetch_offices) + } + + override fun onNext(offices: List?) { + mvpView!!.showProgressbar(false) + mvpView!!.showOffices(offices) + } + })) + } + + fun createCenter(centerPayload: CenterPayload?) { + checkViewAttached() + mvpView!!.showProgressbar(true) + subscriptions.add(dataManagerCenter.createCenter(centerPayload) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(object : Subscriber() { + override fun onCompleted() { + mvpView!!.showProgressbar(false) + } + + override fun onError(e: Throwable) { + mvpView!!.showProgressbar(false) + mvpView!!.showFetchingError(MFErrorParser.errorMessage(e)) + } + + override fun onNext(saveResponse: SaveResponse?) { + mvpView!!.showProgressbar(false) + mvpView!!.centerCreatedSuccessfully(saveResponse) + } + })) + } + + init { + subscriptions = CompositeSubscription() + } +} \ No newline at end of file