| package org.apache.fineract.jobs; |
| |
| import android.annotation.SuppressLint; |
| import androidx.annotation.NonNull; |
| import android.util.Log; |
| |
| import com.evernote.android.job.Job; |
| import com.evernote.android.job.JobRequest; |
| |
| import org.apache.fineract.data.datamanager.api.DataManagerCustomer; |
| import org.apache.fineract.data.datamanager.contracts.ManagerCustomer; |
| import org.apache.fineract.data.local.database.helpers.DatabaseHelperCustomer; |
| import org.apache.fineract.data.models.customer.Customer; |
| |
| import java.util.List; |
| import java.util.concurrent.TimeUnit; |
| |
| import javax.inject.Inject; |
| import javax.inject.Singleton; |
| |
| import io.reactivex.CompletableSource; |
| import io.reactivex.Observable; |
| import io.reactivex.ObservableSource; |
| import io.reactivex.android.schedulers.AndroidSchedulers; |
| import io.reactivex.functions.Function; |
| import io.reactivex.observers.DisposableCompletableObserver; |
| import io.reactivex.schedulers.Schedulers; |
| |
| @Singleton |
| public class CreationUpdationCustomerJob extends Job { |
| |
| private ManagerCustomer dataManagerCustomer; |
| private DatabaseHelperCustomer databaseHelper; |
| public static final String TAG = "CUSTOMERS_CREATION_UPDATION"; |
| |
| @Inject |
| public CreationUpdationCustomerJob(DataManagerCustomer dataManagerCustomer, |
| DatabaseHelperCustomer databaseHelper) { |
| this.dataManagerCustomer = dataManagerCustomer; |
| this.databaseHelper = databaseHelper; |
| } |
| |
| @NonNull |
| @Override |
| protected Result onRunJob(@NonNull Params params) { |
| syncCustomer(); |
| return Result.SUCCESS; |
| } |
| |
| @SuppressLint("CheckResult") |
| private void syncCustomer() { |
| databaseHelper.fetchCustomerPayload() |
| .flatMap(new Function<List<Customer>, ObservableSource<Customer>>() { |
| @Override |
| public ObservableSource<Customer> apply(List<Customer> customers) { |
| return Observable.fromIterable(customers); |
| } |
| }) |
| .flatMapCompletable(new Function<Customer, CompletableSource>() { |
| @Override |
| public CompletableSource apply(Customer customer) { |
| return dataManagerCustomer.createCustomer(customer); |
| } |
| }) |
| .subscribeOn(Schedulers.io()) |
| .observeOn(AndroidSchedulers.mainThread()) |
| .subscribeWith(new DisposableCompletableObserver() { |
| @Override |
| public void onComplete() { |
| // getting the updates once the data is synced to the server. |
| StartSyncJob.scheduleItNow(); |
| } |
| |
| @Override |
| public void onError(Throwable e) { |
| Log.d(StartSyncJob.class.getSimpleName(), e.toString()); |
| } |
| }); |
| |
| } |
| |
| public static void schedulePeriodic() { |
| new JobRequest.Builder(CreationUpdationCustomerJob.TAG) |
| .setPeriodic(TimeUnit.MINUTES.toMillis(15), |
| TimeUnit.MINUTES.toMillis(10)) |
| .setUpdateCurrent(true) |
| .build() |
| .schedule(); |
| } |
| } |