blob: b407ae4fa6fd895f034be16856887f1d4f3aa34b [file] [log] [blame]
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();
}
}