From 510e37a0476fcd4ee25ef109a04edf4d8316e028 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Fri, 22 Aug 2025 19:26:03 +0300 Subject: [PATCH 1/2] fix connection check for custom api urls and allow connection to https for debug build --- .../me/android/data/net/MeServiceFactory.java | 14 +-------- .../android/data/net/common/CommonService.kt | 9 ------ .../repository/common/CommonRepository.kt | 8 +---- .../common/datasource/CommonDataSource.kt | 2 -- .../datasource/CommonRemoteDataSource.kt | 13 ++++----- presentation/src/dev/AndroidManifest.xml | 3 ++ .../check_api_status/CheckApiPresenter.kt | 29 +++++++------------ .../api_config/dialogs/TestApiErrorDialog.kt | 22 +++++++------- .../dialogs/TestApiSuccessDialog.kt | 22 +++++++------- .../account/pair_device/PairDeviceActivity.kt | 6 ---- 10 files changed, 43 insertions(+), 85 deletions(-) create mode 100644 presentation/src/dev/AndroidManifest.xml diff --git a/data/src/main/java/io/forus/me/android/data/net/MeServiceFactory.java b/data/src/main/java/io/forus/me/android/data/net/MeServiceFactory.java index d77107123..c5208714d 100755 --- a/data/src/main/java/io/forus/me/android/data/net/MeServiceFactory.java +++ b/data/src/main/java/io/forus/me/android/data/net/MeServiceFactory.java @@ -51,7 +51,6 @@ public T createRetrofitService(final Class clazz, final String endPoint) } public T createRetrofitService(final Class clazz, final String endPoint, final String customAccessToken) throws Exception{ - okhttp3.OkHttpClient.Builder httpClient = new okhttp3.OkHttpClient.Builder(); MeHttpLoggingInterceptor logging = new MeHttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT); @@ -59,14 +58,8 @@ public T createRetrofitService(final Class clazz, final String endPoint, logging.setLogAccessToken(false); httpClient.addInterceptor(logging); httpClient.addInterceptor(chain -> { - Request original = chain.request(); - - HttpUrl url = original.url() - .newBuilder() - .build(); - - + HttpUrl url = original.url().newBuilder().build(); String userAgent = getUserAgent(); Log.d("forus","userAgent="+userAgent); @@ -134,7 +127,6 @@ private String getUserAgent(){ e.printStackTrace(); } - return String.format(Locale.US, "%s/%s (Android %s; %s; %s %s; %s)", appName, @@ -145,8 +137,4 @@ private String getUserAgent(){ Build.DEVICE, Locale.getDefault().getLanguage()); } - - - - } diff --git a/data/src/main/java/io/forus/me/android/data/net/common/CommonService.kt b/data/src/main/java/io/forus/me/android/data/net/common/CommonService.kt index 0b22658ff..312f2948c 100644 --- a/data/src/main/java/io/forus/me/android/data/net/common/CommonService.kt +++ b/data/src/main/java/io/forus/me/android/data/net/common/CommonService.kt @@ -1,8 +1,5 @@ package io.forus.me.android.data.net.common -import io.forus.me.android.data.entity.common.Success -import io.forus.me.android.data.entity.records.request.* -import io.forus.me.android.data.entity.records.response.* import io.reactivex.Observable import okhttp3.ResponseBody import retrofit2.http.* @@ -11,12 +8,6 @@ import retrofit2.http.* * Created by maestrovs on 03.05.2020 */ interface CommonService { - - - @GET("api/v1/status") fun status() : Observable - - - } \ No newline at end of file diff --git a/data/src/main/java/io/forus/me/android/data/repository/common/CommonRepository.kt b/data/src/main/java/io/forus/me/android/data/repository/common/CommonRepository.kt index d8fb42f59..3106d4f4e 100644 --- a/data/src/main/java/io/forus/me/android/data/repository/common/CommonRepository.kt +++ b/data/src/main/java/io/forus/me/android/data/repository/common/CommonRepository.kt @@ -4,14 +4,8 @@ import io.forus.me.android.data.repository.common.datasource.CommonDataSource import io.forus.me.android.domain.repository.common.CommonRepository import io.reactivex.Observable - class CommonRepository(private val commonDataSource: CommonDataSource) : CommonRepository { - - override fun status(): Observable { - return commonDataSource.status() - .map { - it - } + return commonDataSource.status().map { it } } } \ No newline at end of file diff --git a/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonDataSource.kt b/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonDataSource.kt index 8f18c5c91..3acb45a2f 100644 --- a/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonDataSource.kt +++ b/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonDataSource.kt @@ -1,9 +1,7 @@ package io.forus.me.android.data.repository.common.datasource -import com.gigawatt.android.data.net.sign.models.request.SignUp import io.reactivex.Observable interface CommonDataSource { - fun status(): Observable } \ No newline at end of file diff --git a/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonRemoteDataSource.kt b/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonRemoteDataSource.kt index a10dd40f3..6cd3c278c 100644 --- a/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonRemoteDataSource.kt +++ b/data/src/main/java/io/forus/me/android/data/repository/common/datasource/CommonRemoteDataSource.kt @@ -4,14 +4,13 @@ import io.forus.me.android.data.net.common.CommonService import io.forus.me.android.data.repository.datasource.RemoteDataSource import io.reactivex.Observable -class CommonRemoteDataSource(f: () -> CommonService) : CommonDataSource, RemoteDataSource(f) { +class CommonRemoteDataSource(f: () -> CommonService) : CommonDataSource, + RemoteDataSource(f) { override fun status(): Observable { - return service.status() - .map { - val result = it.string(); - result == "1"||result.isEmpty() - - } + return service.status().map { + val json = it.string() + json.contains("\"success\":true") + } } } diff --git a/presentation/src/dev/AndroidManifest.xml b/presentation/src/dev/AndroidManifest.xml new file mode 100644 index 000000000..5230cc750 --- /dev/null +++ b/presentation/src/dev/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/presentation/src/main/java/io/forus/me/android/presentation/api_config/check_api_status/CheckApiPresenter.kt b/presentation/src/main/java/io/forus/me/android/presentation/api_config/check_api_status/CheckApiPresenter.kt index acd754238..1cd42207e 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/api_config/check_api_status/CheckApiPresenter.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/api_config/check_api_status/CheckApiPresenter.kt @@ -5,35 +5,26 @@ import io.forus.me.android.data.net.MeServiceFactory import io.forus.me.android.data.net.common.CommonService import io.forus.me.android.data.repository.common.CommonRepository import io.forus.me.android.data.repository.common.datasource.CommonRemoteDataSource -import io.forus.me.android.presentation.api_config.ApiConfig -import io.forus.me.android.presentation.internal.Injection import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers -import javax.inject.Inject class CheckApiPresenter(val context: Context) { - - fun checkApi(apiString: String, success: (Boolean) -> Unit, error: (Throwable) -> Unit) { - try { - val commonRemoteDataSource = CommonRemoteDataSource { MeServiceFactory.getInstance().createRetrofitService(CommonService::class.java, apiString) } - val commonRepository = CommonRepository(commonRemoteDataSource) commonRepository.status() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .map { - success(it) - it - } - .onErrorReturn { - error(it) - false - }.subscribe() - + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .map { result -> + success(result) + result + } + .onErrorReturn { throwable -> + error(throwable) + false + }.subscribe() } catch (e: Exception) { error(e) } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiErrorDialog.kt b/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiErrorDialog.kt index 2996f93cd..f1a18fd9b 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiErrorDialog.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiErrorDialog.kt @@ -2,20 +2,20 @@ package io.forus.me.android.presentation.api_config.dialogs import android.content.Context import com.afollestad.materialdialogs.MaterialDialog -import io.forus.me.android.presentation.R - - -class TestApiErrorDialog(private val context: Context, private val message: String, - private val cancelListener: () -> Unit){ +class TestApiErrorDialog( + context: Context, + message: String, + private val cancelListener: () -> Unit +) { private val dialog: MaterialDialog = MaterialDialog.Builder(context) - .title("Error test API server") - .content(message) - .negativeText("Cancel") - .cancelListener { cancelListener.invoke() } - .build() + .title("Error test API server") + .content(message) + .negativeText("Cancel") + .cancelListener { cancelListener.invoke() } + .build() - fun show(){ + fun show() { dialog.show() } } \ No newline at end of file diff --git a/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiSuccessDialog.kt b/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiSuccessDialog.kt index 29e79fbaa..e10cb1639 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiSuccessDialog.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/api_config/dialogs/TestApiSuccessDialog.kt @@ -2,20 +2,20 @@ package io.forus.me.android.presentation.api_config.dialogs import android.content.Context import com.afollestad.materialdialogs.MaterialDialog -import io.forus.me.android.presentation.R - - -class TestApiSuccessDialog(private val context: Context, private val message: String, - private val positiveCallback: () -> Unit){ +class TestApiSuccessDialog( + context: Context, + message: String, + private val positiveCallback: () -> Unit +) { private val dialog: MaterialDialog = MaterialDialog.Builder(context) - .title("Success test API server") - .content(message) - .positiveText("OK") - .onPositive { dialog, which -> positiveCallback.invoke() } - .build() + .title("Success test API server") + .content(message) + .positiveText("OK") + .onPositive { dialog, which -> positiveCallback.invoke() } + .build() - fun show(){ + fun show() { dialog.show() } } \ No newline at end of file diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/account/pair_device/PairDeviceActivity.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/account/pair_device/PairDeviceActivity.kt index 6ee76cb14..0e6d1d3a0 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/account/pair_device/PairDeviceActivity.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/account/pair_device/PairDeviceActivity.kt @@ -5,19 +5,13 @@ import android.content.Context import android.content.Intent import android.os.Bundle import io.forus.me.android.presentation.R - -import io.forus.me.android.presentation.view.activity.BaseActivity import io.forus.me.android.presentation.view.activity.CommonActivity /** * Activity Pair Device. */ class PairDeviceActivity : CommonActivity() { - - companion object { - - fun getCallingIntent(context: Context): Intent { return Intent(context, PairDeviceActivity::class.java) } From 1299bd3be915bc18e3e652114a366cbde82e88cf Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 18 Mar 2026 03:26:59 +0200 Subject: [PATCH 2/2] migrate vouchers, transactions and products UI to use amount_locale and price_locale api props --- bench.php | 81 ---- .../entity/vouchers/response/Product.java | 23 +- .../entity/vouchers/response/Transaction.java | 19 +- .../entity/vouchers/response/Voucher.java | 43 +- .../repository/vouchers/VouchersRepository.kt | 270 ++++++----- .../datasource/TransactionsMockList.kt | 17 +- .../domain/models/vouchers/Transaction.kt | 29 +- .../android/domain/models/vouchers/Voucher.kt | 31 +- .../domain/models/wallets/Transaction.kt | 13 +- .../mappers/CurrencyDataMapper.kt | 10 - .../mappers/TransactionDataMapper.kt | 27 +- .../presentation/mappers/VoucherDataMapper.kt | 61 +-- .../models/vouchers/Transaction.kt | 43 +- .../presentation/models/vouchers/Voucher.kt | 14 +- .../screens/vouchers/item/VoucherFragment.kt | 89 +--- .../screens/vouchers/item/VoucherPresenter.kt | 7 +- .../item/transactions/TransactionsVH.kt | 11 +- .../screens/vouchers/list/VouchersAdapter.kt | 22 +- .../screens/vouchers/list/VouchersFragment.kt | 31 +- .../vouchers/list/VouchersPresenter.kt | 260 ++++++---- .../view/screens/vouchers/list/VouchersVH.kt | 13 +- .../ProductReservationPresenter.kt | 269 +++++++---- .../vouchers/provider/ProviderFragment.kt | 14 +- .../vouchers/provider/ProviderPresenter.kt | 449 ++++++++++-------- .../adapter/TransactionsLogAdapter.kt | 14 +- .../details/TransactionDetailsPopupDialog.kt | 13 +- 26 files changed, 1025 insertions(+), 848 deletions(-) delete mode 100644 bench.php delete mode 100644 presentation/src/main/java/io/forus/me/android/presentation/mappers/CurrencyDataMapper.kt diff --git a/bench.php b/bench.php deleted file mode 100644 index 53bfe261b..000000000 --- a/bench.php +++ /dev/null @@ -1,81 +0,0 @@ - $function) { - if (!function_exists($function)) unset($mathFunctions[$key]); - } - for ($i=0; $i < $count; $i++) { - foreach ($mathFunctions as $function) { - $r = call_user_func_array($function, array($i)); - } - } - return number_format(microtime(true) - $time_start, 3); - } - - - function test_StringManipulation($count = 130000) { - $time_start = microtime(true); - $stringFunctions = array("addslashes", "chunk_split", "metaphone", "strip_tags", "md5", "sha1", "strtoupper", "strtolower", "strrev", "strlen", "soundex", "ord"); - foreach ($stringFunctions as $key => $function) { - if (!function_exists($function)) unset($stringFunctions[$key]); - } - $string = "the quick brown fox jumps over the lazy dog"; - for ($i=0; $i < $count; $i++) { - foreach ($stringFunctions as $function) { - $r = call_user_func_array($function, array($string)); - } - } - return number_format(microtime(true) - $time_start, 3); - } - - - function test_Loops($count = 19000000) { - $time_start = microtime(true); - for($i = 0; $i < $count; ++$i); - $i = 0; while($i < $count) ++$i; - return number_format(microtime(true) - $time_start, 3); - } - - - function test_IfElse($count = 9000000) { - $time_start = microtime(true); - for ($i=0; $i < $count; $i++) { - if ($i == -1) { - } elseif ($i == -2) { - } else if ($i == -3) { - } - } - return number_format(microtime(true) - $time_start, 3); - } - - - $total = 0; - $functions = get_defined_functions(); - $line = str_pad("-",38,"-"); - echo "
$line\n|".str_pad("PHP BENCHMARK SCRIPT",36," ",STR_PAD_BOTH)."|\n$line\nStart : ".date("Y-m-d H:i:s")."\nServer : {$_SERVER['SERVER_NAME']}@{$_SERVER['SERVER_ADDR']}\nPHP version : ".PHP_VERSION."\nPlatform : ".PHP_OS. "\n$line\n";
-	foreach ($functions['user'] as $user) {
-		if (preg_match('/^test_/', $user)) {
-			$total += $result = $user();
-            echo str_pad($user, 25) . " : " . $result ." sec.\n";
-        }
-	}
-	echo str_pad("-", 38, "-") . "\n" . str_pad("Total time:", 25) . " : " . $total ." sec.
"; - -?> - diff --git a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Product.java b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Product.java index 1ecf7c65c..623b9dfe5 100644 --- a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Product.java +++ b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Product.java @@ -24,6 +24,9 @@ public class Product { @SerializedName("price") private BigDecimal price; + @SerializedName("price_locale") + private String price_locale; + @SerializedName("old_price") private BigDecimal oldPrice; @@ -44,13 +47,28 @@ public class Product { public Product() { } - public Product(long id, long organizationId, long productCategoryId, String name, String description, BigDecimal price, BigDecimal oldPrice, long totalAmount, long soldAmount, Logo photo, ProductCategory productCategory, Organization organization) { + public Product( + long id, + long organizationId, + long productCategoryId, + String name, + String description, + BigDecimal price, + String price_locale, + BigDecimal oldPrice, + long totalAmount, + long soldAmount, + Logo photo, + ProductCategory productCategory, + Organization organization + ) { this.id = id; this.organizationId = organizationId; this.productCategoryId = productCategoryId; this.name = name; this.description = description; this.price = price; + this.price_locale = price_locale; this.oldPrice = oldPrice; this.totalAmount = totalAmount; this.soldAmount = soldAmount; @@ -102,6 +120,9 @@ public void setDescription(String description) { public BigDecimal getPrice() { return price; } + public String getPriceLocale() { + return price_locale; + } public void setPrice(BigDecimal price) { this.price = price; diff --git a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Transaction.java b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Transaction.java index 3cdbd40ac..43c2ab228 100644 --- a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Transaction.java +++ b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Transaction.java @@ -19,9 +19,15 @@ public class Transaction { @SerializedName("amount") private BigDecimal amount; + @SerializedName("amount_locale") + private String amount_locale; + @SerializedName("amount_extra_cash") private BigDecimal amount_extra_cash; + @SerializedName("amount_extra_cash_locale") + private String amount_extra_cash_locale; + @SerializedName("address") private String address; @@ -56,14 +62,17 @@ public class Transaction { public Transaction() { } - public Transaction(Long id, Long organizationId, Long productId, BigDecimal amount, BigDecimal amount_extra_cash, + public Transaction(Long id, Long organizationId, Long productId, BigDecimal amount, String amount_locale, BigDecimal amount_extra_cash, + String amount_extra_cash_locale, String address, Date createdAt, Date updatedAt, String date, Long timestamp, Organization organization, Product product, Fund fund, String state, String note) { this.id = id; this.organizationId = organizationId; this.productId = productId; this.amount = amount; + this.amount_locale = amount_locale; this.amount_extra_cash = amount_extra_cash; + this.amount_extra_cash_locale = amount_extra_cash_locale; this.address = address; this.createdAt = createdAt; this.updatedAt = updatedAt; @@ -104,6 +113,10 @@ public BigDecimal getAmount() { return amount; } + public String getAmountLocale() { + return amount_locale; + } + public void setAmount(BigDecimal amount) { this.amount = amount; } @@ -184,6 +197,10 @@ public BigDecimal getAmount_extra_cash() { return amount_extra_cash; } + public String getAmountExtraCashLocale() { + return amount_extra_cash_locale; + } + public void setAmount_extra_cash(BigDecimal amount_extra_cash) { this.amount_extra_cash = amount_extra_cash; diff --git a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Voucher.java b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Voucher.java index d5ec0df8b..fab3c1884 100644 --- a/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Voucher.java +++ b/data/src/main/java/io/forus/me/android/data/entity/vouchers/response/Voucher.java @@ -53,6 +53,9 @@ public enum Type { @SerializedName("amount") private BigDecimal amount; + @SerializedName("amount_locale") + private String amount_locale; + @SerializedName("fund") private Fund fund; @@ -78,13 +81,31 @@ public enum Type { @SerializedName("amount_visible") private boolean amount_visible; - public Voucher() { } - - public Voucher(Long fundId, String identityAddress, String address, Date createdAt, String createdAtLocale, - boolean expired, String expireAtLocale, Long timestamp, Type type, Product product, BigDecimal amount, - Fund fund, List transactions, List allowedOrganizations, List allowedProductCategories, - List allowedProducts, List childVouchers, List offices, - boolean amount_visible) { + public Voucher() { + } + + public Voucher( + Long fundId, + String identityAddress, + String address, + Date createdAt, + String createdAtLocale, + boolean expired, + String expireAtLocale, + Long timestamp, + Type type, + Product product, + BigDecimal amount, + String amount_locale, + Fund fund, + List transactions, + List allowedOrganizations, + List allowedProductCategories, + List allowedProducts, + List childVouchers, + List offices, + boolean amount_visible + ) { this.fundId = fundId; this.identityAddress = identityAddress; this.address = address; @@ -96,6 +117,7 @@ public Voucher(Long fundId, String identityAddress, String address, Date created this.type = type; this.product = product; this.amount = amount; + this.amount_locale = amount_locale; this.fund = fund; this.transactions = transactions; this.allowedOrganizations = allowedOrganizations; @@ -181,6 +203,9 @@ public void setProduct(Product product) { public BigDecimal getAmount() { return amount; } + public String getAmountLocale() { + return amount_locale; + } public void setAmount(BigDecimal amount) { this.amount = amount; @@ -262,11 +287,11 @@ public void setUsed(boolean used) { this.used = used; } - public void setAmountVisible(boolean amount_visible){ + public void setAmountVisible(boolean amount_visible) { this.amount_visible = amount_visible; } - public boolean getAmountVisible(){ + public boolean getAmountVisible() { return amount_visible; } } diff --git a/data/src/main/java/io/forus/me/android/data/repository/vouchers/VouchersRepository.kt b/data/src/main/java/io/forus/me/android/data/repository/vouchers/VouchersRepository.kt index ce6394462..1ce79d055 100644 --- a/data/src/main/java/io/forus/me/android/data/repository/vouchers/VouchersRepository.kt +++ b/data/src/main/java/io/forus/me/android/data/repository/vouchers/VouchersRepository.kt @@ -16,10 +16,8 @@ import java.util.* class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : io.forus.me.android.domain.repository.vouchers.VouchersRepository { - val dateLocaleFormat = SimpleDateFormat("MMM dd, yyyy HH:mm", Locale.US) - @Suppress("SENSELESS_COMPARISON") private fun voucherIsUsed(voucher: io.forus.me.android.data.entity.vouchers.response.Voucher): Boolean { return if (voucher.isUsed != null) { @@ -42,24 +40,22 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : if (isProduct) voucher.product.organization.name else voucher.fund.organization.name var createdAt: Date? = null - try { - if (voucher.createdAtLocale != null) createdAt = - dateLocaleFormat.parse(voucher.createdAtLocale) - } catch (e: Exception) { + try { + if (voucher.createdAtLocale != null) + createdAt = dateLocaleFormat.parse(voucher.createdAtLocale) + } catch (_: Exception) { } if (createdAt == null) { - createdAt = - if (voucher.createdAt != null) voucher.createdAt - else (Date(voucher.timestamp * 1000)) + createdAt = voucher.createdAt ?: Date(voucher.timestamp * 1000) } val description = if (isProduct) voucher.product.description else null val product = voucher.product val amount = voucher.amount ?: voucher.product.price - val euro = Currency("€") + val amountLocale = voucher.amountLocale ?: voucher.product?.priceLocale ?: "" val productLogoUrl = voucher.product?.photo?.sizes?.large ?: (voucher.product?.organization?.logo?.sizes?.large ?: ((voucher.fund?.logo?.sizes?.large @@ -67,13 +63,10 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : ?: "")))) val organizationLogoUrl = voucher.product?.organization?.logo?.sizes?.large ?: "" - val transactions = mutableListOf() - if (voucher.transactions != null) { - + if (voucher.transactions != null) { transactions.addAll(voucher.transactions.map { - val fund = Fund( it.fund.id, it.fund.name, it.fund.organization?.id, null, Organization( @@ -88,38 +81,44 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : ) ) - val _product = if (it.product == null) { - null - } else { - - val logo = if (it.product.organization.logo != null) { - it.product.organization.logo.sizes.thumbnail - } else { + val voucherProduct = + if (it.product == null) { null - } - - Product( - it.product.id, it.product.organizationId, - it.product.productCategoryId, - it.product.name, it.product.description, - it.product.price, it.product.oldPrice, - it.product.totalAmount, it.product.soldAmount, - ProductCategory( - it.product.productCategory.id, - it.product.productCategory.key, - it.product.productCategory.name - ), - Organization( - it.product.organization.id, it.product.organization.name, - logo, it.product.organization.lat, - it.product.organization.lon, it.product.organization.identityAddress, - it.product.organization.phone, it.product.organization.email + } else { + val logo = if (it.product.organization.logo != null) { + it.product.organization.logo.sizes.thumbnail + } else { + null + } + + Product( + it.product.id, it.product.organizationId, + it.product.productCategoryId, + it.product.name, it.product.description, + it.product.price, it.product.oldPrice, + it.product.totalAmount, it.product.soldAmount, + ProductCategory( + it.product.productCategory?.id + ?: it.product.productCategoryId, + it.product.productCategory?.key ?: "", + it.product.productCategory?.name ?: "" + ), + Organization( + it.product.organization.id, + it.product.organization.name, + logo, + it.product.organization.lat, + it.product.organization.lon, + it.product.organization.identityAddress, + it.product.organization.phone, + it.product.organization.email + ) ) - ) - } + } Transaction( - it.address, Organization( + it.address, + Organization( it.organization.id, it.organization.name, it.organization?.logo?.sizes?.large @@ -132,57 +131,78 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : ?: "", it.organization?.email ?: "" - ), euro, it.amount, it.amount_extra_cash, it.createdAt, _product, it.state, - fund, it.note + ), + it.amount, + it.amountLocale, + it.amount_extra_cash, + it.amountExtraCashLocale, + it.createdAt, + voucherProduct, + it.state, + fund, + it.note ) }) } if (voucher.childVouchers != null) { transactions.addAll(voucher.childVouchers.map { childVoucher -> - - val organization = childVoucher.product?.organization - val _product = if (voucher.product == null) { - null - } else { - Product( - voucher.product.id, voucher.product.organizationId, - voucher.product.productCategoryId, - voucher.product.name, voucher.product.description, - voucher.product.price, voucher.product.oldPrice, - voucher.product.totalAmount, voucher.product.soldAmount, - ProductCategory( - voucher.product.productCategory.id, - voucher.product.productCategory.key, - voucher.product.productCategory.name - ), - Organization( - voucher.product.organization.id, - voucher.product.organization.name, - voucher.product.organization.logo.sizes.thumbnail, - voucher.product.organization.lat, - voucher.product.organization.lon, - voucher.product.organization.identityAddress, - voucher.product.organization.phone, - voucher.product.organization.email + + val voucherProduct = + if (voucher.product == null) { + null + } else { + Product( + voucher.product.id, + voucher.product.organizationId, + voucher.product.productCategoryId, + voucher.product.name, + voucher.product.description, + voucher.product.price, + voucher.product.oldPrice, + voucher.product.totalAmount, + voucher.product.soldAmount, + ProductCategory( + voucher.product.productCategory?.id + ?: voucher.product.productCategoryId, + voucher.product.productCategory?.key ?: "", + voucher.product.productCategory?.name ?: "" + ), + Organization( + voucher.product.organization.id, + voucher.product.organization.name, + voucher.product.organization.logo?.sizes?.thumbnail, + voucher.product.organization.lat, + voucher.product.organization.lon, + voucher.product.organization.identityAddress, + voucher.product.organization.phone, + voucher.product.organization.email + ) ) - ) - } + } + Transaction( - "", Organization( + "", + Organization( childVoucher.product.organizationId, childVoucher.product.name, "", - organization?.lat - ?: 0.0, + organization?.lat ?: 0.0, organization?.lon ?: 0.0, - organization?.identityAddress - ?: "", + organization?.identityAddress ?: "", organization?.phone ?: "", - organization?.email - ?: "" - ), euro, childVoucher.amount, 0f.toBigDecimal(), childVoucher.createdAt, _product, null, null, null + organization?.email ?: "" + ), + childVoucher.amount, + childVoucher.amountLocale, + 0f.toBigDecimal(), + null, + childVoucher.createdAt, + voucherProduct, + null, + null, + null ) }) } @@ -191,8 +211,8 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : }) var productMapped: Product? = null - product?.let { + product?.let { var organization = Organization( it.organization.id, it.organization.name, organizationLogoUrl, it.organization.lat, @@ -234,30 +254,26 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : val offices = mutableListOf() - if (voucher.offices != null) { - voucher.offices.map { + if (voucher.offices != null) { + voucher.offices.forEach { it -> val schedulers = mutableListOf() + if (it.schedule != null) { - it.schedule.map { + it.schedule.forEach { schedulers.add( - Schedule( - it.id, - it.officeId, - it.weekDay, - it.startTime, - it.endTime - ) + Schedule(it.id, it.officeId, it.weekDay, it.startTime, it.endTime) ) } } - var organization = Organization( + val organization = Organization( it.organization.id, it.organization.name, organizationLogoUrl, it.organization.lat, it.organization.lon, it.organization.identityAddress ?: "", it.organization.phone ?: "", it.organization.email ?: "" ) + offices.add( Office( it.id, @@ -277,27 +293,23 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : return Voucher( isProduct, isUsed, - voucher.address - ?: "", + voucher.address ?: "", voucher.identityAddress ?: "", name, organizationName, - voucher.fund?.name - ?: "", - voucher.fund?.type - ?: "", + voucher.fund?.name ?: "", + voucher.fund?.type ?: "", voucher.fund?.webShopUrl ?: "", description, - createdAt!!, - euro, + createdAt, amount, + amountLocale, productLogoUrl, transactions, productMapped, voucher.isDeactivated, voucher.isExpired, - voucher.expireAtLocale - ?: "", + voucher.expireAtLocale ?: "", offices, voucher.amountVisible ) @@ -324,6 +336,7 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : null } else { val org = productAction.organization + Organization( org.id, org.name, @@ -340,6 +353,7 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : null } else { val org = productAction.sponsor + Organization( org.id, org.name, @@ -381,10 +395,9 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : } private fun mapToLogTransaction(transaction: io.forus.me.android.data.entity.vouchers.response.Transaction): Transaction { - - val fund = Fund( transaction.fund.id, transaction.fund.name, transaction.fund.organization?.id, null, + Organization( transaction.organization.id, transaction.organization.name, @@ -397,7 +410,6 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : ) ) - val organization: Organization? = if (transaction.organization == null) { null } else { @@ -414,41 +426,44 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : ) } - - val product: Product? = if (transaction.product == null) { - null - } else { - val prc = transaction.product - Product( - prc.id, prc.organizationId, null, prc.name, null, prc.price, - null, null, null, null, null - ) - } - - - + val product: Product? = + if (transaction.product == null) { + null + } else { + val prc = transaction.product + Product( + prc.id, prc.organizationId, null, prc.name, null, prc.price, + null, null, null, null, null + ) + } return Transaction( - transaction.id.toString(), organization, null, transaction.amount, + transaction.id.toString(), + organization, + transaction.amount, + transaction.amountLocale, transaction.amount_extra_cash, - transaction.createdAt, product, transaction.state, fund, transaction.note + transaction.amountExtraCashLocale, + transaction.createdAt, + product, + transaction.state, + fund, + transaction.note, ) - } - private fun getFakeVoucherProvider(): VoucherProvider { val date = Calendar.getInstance().getTime() - val currency = Currency("EUR", "") val organization = Organization( 0, "Test bedrijf", "", 0.0, 0.0, "", "", "" ) + val organizationsList = mutableListOf() organizationsList.add(organization) val transaction = Transaction( - "0", organization, currency, 0f.toBigDecimal(), 0f.toBigDecimal(), date, null, + "0", organization, 0f.toBigDecimal(), "€ 0,-", 0f.toBigDecimal(), "€ 0,-", date, null, null, null, "" ) val transactionList = mutableListOf() @@ -468,7 +483,7 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : val voucher = Voucher( false, false, "", "", "Test bedrijf", "", "", "", "", - "", date, currency, 1000.toBigDecimal(), "", + "", date, 1000.toBigDecimal(), "€ 1000,-", "", transactionList, product, false, false, "", offices, false ) @@ -480,7 +495,6 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : return vouchersDataSource.listAllVouchers().map { it.map { mapToSimple(it) } } } - override fun getVoucher(address: String): Observable { return vouchersDataSource.retrieveVoucher(address).map { mapToSimple(it) } } @@ -529,12 +543,12 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : note: String, organizationId: Long ): Observable { - return if(amountExtraCash > 0.toBigDecimal()){ //Make transaction with extra cash amount + return if (amountExtraCash > 0.toBigDecimal()) { //Make transaction with extra cash amount vouchersDataSource.makeTransactionWithExtraCashAmount( address, MakeTransactionWithExtraCashAmount(amount, amountExtraCash, note, organizationId) ).map { true } - }else { //Make transaction without extra cash amount + } else { //Make transaction without extra cash amount vouchersDataSource.makeTransaction( address, MakeTransaction( @@ -566,4 +580,4 @@ class VouchersRepository(private val vouchersDataSource: VouchersDataSource) : it.data.state == "accepted" } } -} \ No newline at end of file +} diff --git a/data/src/main/java/io/forus/me/android/data/repository/vouchers/datasource/TransactionsMockList.kt b/data/src/main/java/io/forus/me/android/data/repository/vouchers/datasource/TransactionsMockList.kt index 53e379273..f1184137d 100644 --- a/data/src/main/java/io/forus/me/android/data/repository/vouchers/datasource/TransactionsMockList.kt +++ b/data/src/main/java/io/forus/me/android/data/repository/vouchers/datasource/TransactionsMockList.kt @@ -1,5 +1,5 @@ package io.forus.me.android.data.repository.vouchers.datasource -import io.forus.me.android.domain.models.currency.Currency + import io.forus.me.android.domain.models.vouchers.Transaction import java.math.BigDecimal import java.util.Date @@ -23,10 +23,21 @@ fun mockTransactionsList(page: Int, perPage: Int): List { fun generateMockTransaction(id: Int): Transaction { val organization = null - val currency = Currency() val amount = BigDecimal(id) val createdAt = Date() val state = "Active" - return Transaction(id.toString(), organization, currency, amount, 0f.toBigDecimal(), createdAt, null, state, null, null) + return Transaction( + id.toString(), + organization, + amount, + "€ $id,-", + 0f.toBigDecimal(), + "€ 0,-", + createdAt, + null, + state, + null, + null, + ) } diff --git a/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Transaction.kt b/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Transaction.kt index 60ec543f4..258aeb852 100644 --- a/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Transaction.kt +++ b/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Transaction.kt @@ -1,6 +1,5 @@ package io.forus.me.android.domain.models.vouchers -import io.forus.me.android.domain.models.currency.Currency import java.math.BigDecimal import java.util.* @@ -10,12 +9,14 @@ class Transaction { var organization: Organization? - var currency: Currency? - var amount: BigDecimal? + var amount_locale: String? + var amount_extra_cash: BigDecimal? + var amount_extra_cash_locale: String? + var createdAt: Date? var type: Type = Type.Payed @@ -26,15 +27,27 @@ class Transaction { var fund: Fund? - var note : String? - - constructor(id: String, organization: Organization?, currency: Currency?, amount: BigDecimal?,amount_extra_cash: BigDecimal?, createdAt: Date?, - product: Product?, state: String?, fund: Fund?, note: String?) { + var note: String? + + constructor( + id: String, + organization: Organization?, + amount: BigDecimal?, + amount_locale: String?, + amount_extra_cash: BigDecimal?, + amount_extra_cash_locale: String?, + createdAt: Date?, + product: Product?, + state: String?, + fund: Fund?, + note: String? + ) { this.id = id this.organization = organization - this.currency = currency this.amount = amount + this.amount_locale = amount_locale this.amount_extra_cash = amount_extra_cash + this.amount_extra_cash_locale = amount_extra_cash_locale this.createdAt = createdAt this.type = type this.product = product diff --git a/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Voucher.kt b/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Voucher.kt index e4a871888..1ec48b666 100644 --- a/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Voucher.kt +++ b/domain/src/main/java/io/forus/me/android/domain/models/vouchers/Voucher.kt @@ -1,13 +1,28 @@ package io.forus.me.android.domain.models.vouchers -import io.forus.me.android.domain.models.currency.Currency import java.math.BigDecimal import java.util.Date -class Voucher(var isProduct: Boolean?, var isUsed: Boolean?, var address: String?, var identyAddress: String?, var name: String?, var organizationName: String?, var fundName: String?, var fundType: String?, var fundWebShopUrl: String?, - var description: String?, var createdAt: Date?, var currency: Currency?, var amount: BigDecimal?, var logo: String, var transactions: List, var product: Product? = null, - val deactivated: Boolean?, val expired: Boolean?, val expireDate: String?, val offices: List, - var amount_visible: Boolean?) { - - -} +class Voucher( + var isProduct: Boolean?, + var isUsed: Boolean?, + var address: String?, + var identyAddress: String?, + var name: String?, + var organizationName: String?, + var fundName: String?, + var fundType: String?, + var fundWebShopUrl: String?, + var description: String?, + var createdAt: Date?, + var amount: BigDecimal?, + var amount_locale: String, + var logo: String, + var transactions: List, + var product: Product? = null, + val deactivated: Boolean?, + val expired: Boolean?, + val expireDate: String?, + val offices: List, + var amount_visible: Boolean? +) diff --git a/domain/src/main/java/io/forus/me/android/domain/models/wallets/Transaction.kt b/domain/src/main/java/io/forus/me/android/domain/models/wallets/Transaction.kt index 62192df0b..d4861b3ad 100644 --- a/domain/src/main/java/io/forus/me/android/domain/models/wallets/Transaction.kt +++ b/domain/src/main/java/io/forus/me/android/domain/models/wallets/Transaction.kt @@ -23,7 +23,17 @@ class Transaction { var status: Status - constructor(id: String, walletId: Long, timestamp: Date, title: String, receiver: String, currency: Currency, value: Double, type: Type, status: Status) { + constructor( + id: String, + walletId: Long, + timestamp: Date, + title: String, + receiver: String, + currency: Currency, + value: Double, + type: Type, + status: Status + ) { this.id = id this.walletId = walletId this.timestamp = timestamp @@ -35,7 +45,6 @@ class Transaction { this.status = status } - enum class Type { PAYMENT, INCOME } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/mappers/CurrencyDataMapper.kt b/presentation/src/main/java/io/forus/me/android/presentation/mappers/CurrencyDataMapper.kt deleted file mode 100644 index daeb1891b..000000000 --- a/presentation/src/main/java/io/forus/me/android/presentation/mappers/CurrencyDataMapper.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.forus.me.android.presentation.mappers - -import io.forus.me.android.presentation.models.currency.Currency -import io.forus.me.android.domain.models.currency.Currency as CurrencyDomain - -class CurrencyDataMapper: Mapper() { - - override fun transform(domainModel: CurrencyDomain?): Currency? = - if (domainModel != null) Currency(domainModel.name, domainModel.logoUrl) else null -} \ No newline at end of file diff --git a/presentation/src/main/java/io/forus/me/android/presentation/mappers/TransactionDataMapper.kt b/presentation/src/main/java/io/forus/me/android/presentation/mappers/TransactionDataMapper.kt index 0f1d49b50..856b3f1b1 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/mappers/TransactionDataMapper.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/mappers/TransactionDataMapper.kt @@ -3,15 +3,20 @@ package io.forus.me.android.presentation.mappers import io.forus.me.android.presentation.models.vouchers.Transaction import io.forus.me.android.domain.models.vouchers.Transaction as TransactionDomain -class TransactionDataMapper(private val currencyDataMapper: CurrencyDataMapper, - private val organizationDataMapper: OrganizationDataMapper, - private val productDataMapper: ProductDataMapper) : Mapper() { - +class TransactionDataMapper( + private val organizationDataMapper: OrganizationDataMapper, + private val productDataMapper: ProductDataMapper, +) : Mapper() { override fun transform(domainModel: TransactionDomain): Transaction = - Transaction(domainModel.id, - if (domainModel.organization != null) organizationDataMapper.transform(domainModel.organization!!) else null, - if (domainModel.currency != null) currencyDataMapper.transform(domainModel.currency) else null, - domainModel.amount ?: 0f.toBigDecimal(), domainModel.createdAt, - Transaction.Type.valueOf(domainModel.type.name), - if (domainModel.product != null) productDataMapper.transform(domainModel.product!!) else null) -} \ No newline at end of file + Transaction( + domainModel.id, + if (domainModel.organization != null) organizationDataMapper.transform(domainModel.organization!!) else null, + domainModel.amount ?: 0f.toBigDecimal(), + domainModel.amount_locale, + domainModel.amount_extra_cash ?: 0f.toBigDecimal(), + domainModel.amount_extra_cash_locale, + domainModel.createdAt, + Transaction.Type.valueOf(domainModel.type.name), + if (domainModel.product != null) productDataMapper.transform(domainModel.product!!) else null + ) +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/mappers/VoucherDataMapper.kt b/presentation/src/main/java/io/forus/me/android/presentation/mappers/VoucherDataMapper.kt index a8581ef00..4c8c15cf2 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/mappers/VoucherDataMapper.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/mappers/VoucherDataMapper.kt @@ -6,41 +6,42 @@ import io.forus.me.android.presentation.models.vouchers.Voucher import io.forus.me.android.domain.models.vouchers.Voucher as VoucherDomain -class VoucherDataMapper(private val currencyDataMapper: CurrencyDataMapper, - private val transactionDataMapper: TransactionDataMapper, - private val productDataMapper: ProductDataMapper, - private val officeDataMapper: OfficeDataMapper) : Mapper() { +class VoucherDataMapper( + private val transactionDataMapper: TransactionDataMapper, + private val productDataMapper: ProductDataMapper, + private val officeDataMapper: OfficeDataMapper +) : Mapper() { override fun transform(domainModel: VoucherDomain): Voucher { - return with(domainModel) { - Voucher(isProduct ?: false, - isUsed ?: false, - address ?: "", - identyAddress?:"", - name ?: "", - organizationName ?: "", - fundName ?: "", - fundType ?: "", - fundWebShopUrl ?: "", - description ?: "", - createdAt, - currencyDataMapper.transform(currency), - amount ?: 0f.toBigDecimal(), - logo, - transactionDataMapper.transform(transactions) as List, - if (product != null) { - productDataMapper.transform(product!!) - } else { - null - }, - deactivated ?: false, - expired ?: false, - expireDate ?: "", - officeDataMapper.transform(offices) as List, + Voucher( + isProduct ?: false, + isUsed ?: false, + address ?: "", + identyAddress ?: "", + name ?: "", + organizationName ?: "", + fundName ?: "", + fundType ?: "", + fundWebShopUrl ?: "", + description ?: "", + createdAt, + amount ?: 0f.toBigDecimal(), + amount_locale, + logo, + transactionDataMapper.transform(transactions) as List, + if (product != null) { + productDataMapper.transform(product!!) + } else { + null + }, + deactivated ?: false, + expired ?: false, + expireDate ?: "", + officeDataMapper.transform(offices) as List, amount_visible ?: false ) } } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Transaction.kt b/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Transaction.kt index 4b72167ed..153b6d850 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Transaction.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Transaction.kt @@ -2,23 +2,31 @@ package io.forus.me.android.presentation.models.vouchers import android.os.Parcel import android.os.Parcelable - -import io.forus.me.android.presentation.models.currency.Currency import java.math.BigDecimal -import java.util.* - -class Transaction(var id: String, var organization: Organization?, var currency: Currency?, var amount: BigDecimal, var createdAt: Date?, - var type: Type = Type.Payed, var product: Product?) : Parcelable { - - +import java.util.Date + +class Transaction( + var id: String, + var organization: Organization?, + var amount: BigDecimal, + var amount_locale: String? = null, + var amount_extra_cash: BigDecimal, + var amount_extra_cash_locale: String? = null, + var createdAt: Date?, + var type: Type = Type.Payed, + var product: Product? +) : Parcelable { constructor(parcel: Parcel) : this( - parcel.readString() ?: "", - parcel.readParcelable(Organization::class.java.classLoader)?: Organization(), - parcel.readParcelable(Currency::class.java.classLoader) ?: Currency(), - BigDecimal.valueOf(parcel.readDouble()), - Date(parcel.readLong()), - Type.valueOf(parcel.readString() ?: "Payed"), - parcel.readParcelable(Product::class.java.classLoader) ?: null) + parcel.readString() ?: "", + parcel.readParcelable(Organization::class.java.classLoader) ?: Organization(), + BigDecimal.valueOf(parcel.readDouble()), + parcel.readString(), + BigDecimal.valueOf(parcel.readDouble()), + parcel.readString(), + Date(parcel.readLong()), + Type.valueOf(parcel.readString() ?: "Payed"), + parcel.readParcelable(Product::class.java.classLoader) ?: null + ) enum class Type { Payed, Refund, Cancel, Income, Product @@ -27,8 +35,10 @@ class Transaction(var id: String, var organization: Organization?, var currency: override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(id) parcel.writeParcelable(organization, flags) - parcel.writeParcelable(currency, flags) parcel.writeDouble(amount.toDouble()) + parcel.writeString(amount_locale) + parcel.writeDouble(amount_extra_cash.toDouble()) + parcel.writeString(amount_extra_cash_locale) parcel.writeLong(createdAt?.time ?: 0) parcel.writeString(type.name) parcel.writeParcelable(product, flags) @@ -47,5 +57,4 @@ class Transaction(var id: String, var organization: Organization?, var currency: return arrayOfNulls(size) } } - } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Voucher.kt b/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Voucher.kt index ab428cbb3..5d7b9fcdb 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Voucher.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/models/vouchers/Voucher.kt @@ -2,9 +2,8 @@ package io.forus.me.android.presentation.models.vouchers import android.os.Parcel import android.os.Parcelable -import io.forus.me.android.presentation.models.currency.Currency import java.math.BigDecimal -import java.util.* +import java.util.Date class Voucher( var isProduct: Boolean, @@ -18,8 +17,8 @@ class Voucher( var fundWebShopUrl: String?, var description: String?, var createdAt: Date?, - var currency: Currency?, var amount: BigDecimal?, + var amount_locale: String?, var logo: String?, var transactions: List, val product: Product? = null, @@ -41,8 +40,8 @@ class Voucher( parcel.readString() ?: "", parcel.readString() ?: "", Date(parcel.readLong()), - parcel.readParcelable(Currency::class.java.classLoader) ?: Currency(), BigDecimal.valueOf(parcel.readDouble()), + parcel.readString(), parcel.readString() ?: "", parcel.createTypedArrayList(Transaction) ?: listOf(), parcel.readParcelable(Product::class.java.classLoader), @@ -51,7 +50,6 @@ class Voucher( parcel.readString() ?: "", parcel.createTypedArrayList(Office) ?: listOf(), parcel.readByte() != 0.toByte() - ) override fun writeToParcel(parcel: Parcel, flags: Int) { @@ -65,7 +63,9 @@ class Voucher( parcel.writeString(fundType) parcel.writeString(fundWebShopUrl) parcel.writeString(description) - parcel.writeParcelable(currency, flags) + parcel.writeLong(createdAt?.time ?: 0) + parcel.writeDouble(amount?.toDouble() ?: 0.0) + parcel.writeString(amount_locale) parcel.writeString(logo) parcel.writeTypedList(transactions) parcel.writeParcelable(product, flags) @@ -89,6 +89,4 @@ class Voucher( return arrayOfNulls(size) } } - - } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/item/VoucherFragment.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/item/VoucherFragment.kt index 172ec8bb2..c87d2b3e9 100755 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/item/VoucherFragment.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/item/VoucherFragment.kt @@ -27,9 +27,7 @@ import io.forus.me.android.domain.models.qr.QrCode import io.forus.me.android.presentation.R import io.forus.me.android.presentation.UIThread import io.forus.me.android.presentation.databinding.FragmentVoucherBinding -import io.forus.me.android.presentation.helpers.format import io.forus.me.android.presentation.internal.Injection -import io.forus.me.android.presentation.mappers.CurrencyDataMapper import io.forus.me.android.presentation.mappers.OfficeDataMapper import io.forus.me.android.presentation.mappers.OrganizationDataMapper import io.forus.me.android.presentation.mappers.ProductDataMapper @@ -128,21 +126,17 @@ class VoucherFragment : ToolbarLRFragment() - override fun getShortToken(): Observable = shortToken + override fun getShortToken(): Observable = shortToken override fun viewForSnackbar(): View = binding.root - override fun loadRefreshPanel() = binding.lrPanel - - override fun sendEmail(): Observable = RxView.clicks(binding.btnEmail).map { Unit } - - override fun showInfo(): Observable = RxView.clicks(info_button!!).map { Unit } + override fun sendEmail(): Observable = RxView.clicks(binding.btnEmail).map { } + override fun showInfo(): Observable = RxView.clicks(info_button!!).map { } private val sendEmailDialogShows = PublishSubject.create() private val sentEmailDialogShown = PublishSubject.create() override fun sendEmailDialogShows(): Observable = sendEmailDialogShows - override fun sentEmailDialogShown(): Observable = sentEmailDialogShown override fun onCreate(savedInstanceState: Bundle?) { @@ -157,12 +151,8 @@ class VoucherFragment : ToolbarLRFragment 0) { + if ((activity?.supportFragmentManager?.backStackEntryCount ?: 0) > 0) { activity?.supportFragmentManager?.popBackStack() - } else { activity?.onBackPressed() } @@ -244,7 +217,6 @@ class VoucherFragment : ToolbarLRFragment) { super.render(vs) - binding.name.text = vs.model.item?.name binding.type.text = vs.model.item?.organizationName - - - vs.model.item?.let { voucher -> - + setToolbarTitle(resources.getString(if (voucher.isProduct) R.string.vouchers_item_product else R.string.vouchers_item)) if (voucher.fundType == FundType.subsidies.name) { adapter.isActionsVoucher = true @@ -376,9 +343,7 @@ class VoucherFragment : ToolbarLRFragment { showEmailSendDialog() } @@ -539,18 +489,13 @@ class VoucherFragment : ToolbarLRFragment() { - - var vouchers: List = emptyList() set(value) { val old = field @@ -18,29 +16,31 @@ class VouchersAdapter : RecyclerView.Adapter() { DiffUtil.calculateDiff(object : DiffUtil.Callback() { override fun getOldListSize() = old.size override fun getNewListSize() = field.size - override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = old[oldItemPosition] == field[newItemPosition] - override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = old[oldItemPosition] == field[newItemPosition] + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = + old[oldItemPosition] == field[newItemPosition] + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = + old[oldItemPosition] == field[newItemPosition] }).dispatchUpdatesTo(this) notifyDataSetChanged() } - + var clickListener: ((voucher: Voucher, sharedViews: List, position: Int) -> Unit)? = null + init { setHasStableIds(true) } - var clickListener: ((voucher: Voucher, sharedViews: List, position: Int) -> Unit)? = null - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VouchersVH { - val binding = ItemVouchersListBinding.inflate(LayoutInflater.from(parent.context), parent, false) + val binding = + ItemVouchersListBinding.inflate(LayoutInflater.from(parent.context), parent, false) return VouchersVH(binding) } override fun onBindViewHolder(holder: VouchersVH, position: Int) { val item = vouchers[position] - holder.bind(item){ voucher -> - clickListener?.invoke(voucher, listOf(),position) + holder.bind(item) { voucher -> + clickListener?.invoke(voucher, listOf(), position) } } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersFragment.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersFragment.kt index 1e7c58f5f..b2653113b 100755 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersFragment.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersFragment.kt @@ -1,30 +1,28 @@ package io.forus.me.android.presentation.view.screens.vouchers.list import android.os.Bundle -import androidx.recyclerview.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController -import io.forus.me.android.presentation.view.base.lr.LRViewState +import androidx.recyclerview.widget.LinearLayoutManager import io.forus.me.android.presentation.R import io.forus.me.android.presentation.databinding.FragmentVouchersRecyclerBinding import io.forus.me.android.presentation.internal.Injection import io.forus.me.android.presentation.models.vouchers.Voucher -import io.forus.me.android.presentation.view.activity.BaseActivity import io.forus.me.android.presentation.view.base.MViewModelProvider +import io.forus.me.android.presentation.view.base.lr.LRViewState import io.forus.me.android.presentation.view.component.images.AutoLoadImageView import io.forus.me.android.presentation.view.fragment.ToolbarLRFragment import io.forus.me.android.presentation.view.screens.vouchers.VoucherViewModel -import io.forus.me.android.presentation.view.screens.vouchers.item.VoucherFragment /** * Fragment Vouchers Delegates Screen. */ -class VouchersFragment : ToolbarLRFragment(), VouchersView, +class VouchersFragment : ToolbarLRFragment(), + VouchersView, MViewModelProvider { override val viewModel by lazy { @@ -42,7 +40,6 @@ class VouchersFragment : ToolbarLRFragment, position: Int -> viewModel.setVoucher(voucher) - viewModel.setAddress(voucher.address?:"") + viewModel.setAddress(voucher.address ?: "") findNavController().navigate(R.id.action_vouchersFragment_to_voucherFragment) } @@ -87,7 +85,7 @@ class VouchersFragment : ToolbarLRFragment) { super.render(vs) - binding.tvNoVouchers.visibility = if (!vs.loading && vs.loadingError == null && vs.model.items.isEmpty()) View.VISIBLE else View.INVISIBLE + binding.tvNoVouchers.visibility = + if (!vs.loading && vs.loadingError == null && vs.model.items.isEmpty()) View.VISIBLE else View.INVISIBLE adapter.vouchers = vs.model.items } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersPresenter.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersPresenter.kt index 877f9cc07..79d95441e 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersPresenter.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersPresenter.kt @@ -1,9 +1,13 @@ package io.forus.me.android.presentation.view.screens.vouchers.list -import io.forus.me.android.domain.models.vouchers.Schedule import io.forus.me.android.domain.repository.vouchers.VouchersRepository -import io.forus.me.android.presentation.models.currency.Currency -import io.forus.me.android.presentation.models.vouchers.* +import io.forus.me.android.presentation.models.vouchers.Office +import io.forus.me.android.presentation.models.vouchers.Organization +import io.forus.me.android.presentation.models.vouchers.Product +import io.forus.me.android.presentation.models.vouchers.ProductCategory +import io.forus.me.android.presentation.models.vouchers.Schedule +import io.forus.me.android.presentation.models.vouchers.Transaction +import io.forus.me.android.presentation.models.vouchers.Voucher import io.forus.me.android.presentation.view.base.lr.LRPresenter import io.forus.me.android.presentation.view.base.lr.LRViewState import io.forus.me.android.presentation.view.base.lr.PartialChange @@ -11,90 +15,171 @@ import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import java.math.BigDecimal -class VouchersPresenter constructor(val vouchersRepository: VouchersRepository) : LRPresenter, VouchersModel, VouchersView>() { - - - override fun initialModelSingle(): Single> = Single.fromObservable(vouchersRepository.getVouchers().map { domainVouchers -> - domainVouchers.map { domainVoucher -> - with(domainVoucher) { - - val transactionsMapped = transactions.map { - - val organization = Organization(it.organization?.id ?: 0, - it.organization?.name ?: "", it.organization?.logo ?: "", - it.organization?.lat ?: 0.0, it.organization?.lon ?: 0.0, +class VouchersPresenter(val vouchersRepository: VouchersRepository) : + LRPresenter, VouchersModel, VouchersView>() { + + override fun initialModelSingle(): Single> = + Single.fromObservable(vouchersRepository.getVouchers().map { domainVouchers -> + domainVouchers.map { domainVoucher -> + with(domainVoucher) { + val transactionsMapped = transactions.map { + val organization = Organization( + it.organization?.id ?: 0, + it.organization?.name ?: "", + it.organization?.logo ?: "", + it.organization?.lat ?: 0.0, + it.organization?.lon ?: 0.0, it.organization?.address ?: "", it.organization?.phone ?: "", - it.organization?.email ?: "") - - val product:io.forus.me.android.presentation.models.vouchers.Product? = - if(it.product == null){ null }else{ - Product(it.product!!.id?:-1L, it.product!!.organizationId?:-1L, - it.product!!.productCategoryId?:-1L, - it.product!!.name,it.product!!.description, - it.product!!.price?: BigDecimal(-1), - it.product!!.oldPrice?:BigDecimal(-1), it.product!!.totalAmount?:-1L, - it.product!!.soldAmount?:-1L, - ProductCategory(it.product?.productCategory?.id?:-1L, - it.product?.productCategory?.key?:"", - it.product?.productCategory?.name?:""),organization) - } + it.organization?.email ?: "" + ) + val product: Product? = if (it.product == null) { + null + } else { + Product( + it.product!!.id ?: -1L, + it.product!!.organizationId ?: -1L, + it.product!!.productCategoryId ?: -1L, + it.product!!.name, + it.product!!.description, + it.product!!.price ?: BigDecimal(-1), + it.product!!.oldPrice ?: BigDecimal(-1), + it.product!!.totalAmount ?: -1L, + it.product!!.soldAmount ?: -1L, + ProductCategory( + it.product?.productCategory?.id ?: -1L, + it.product?.productCategory?.key ?: "", + it.product?.productCategory?.name ?: "" + ), + organization + ) + } - Transaction(it.id, organization, - Currency(it.currency?.name ?: "", it.currency?.logoUrl ?: ""), - it?.amount ?: 0f.toBigDecimal(), it.createdAt, - Transaction.Type.valueOf(it.type.name), product) - } - val domainProduct = domainVoucher.product - val product = when (domainProduct) { - null -> null - else -> Product(domainProduct.id ?:-1L, - domainProduct.organizationId?:-1L, - domainProduct.productCategoryId?:-1L, - domainProduct.name, domainProduct.description, - domainProduct.price?: BigDecimal(-1), domainProduct.oldPrice?: BigDecimal(-1), - domainProduct.totalAmount?:-1L, domainProduct.soldAmount?:-1L, - if(domainProduct.productCategory != null){ - ProductCategory( domainProduct.productCategory!!.id, - domainProduct!!.productCategory!!.key, domainProduct!!.productCategory!!.name)}else{null}, - if(domainProduct.organization!=null){ - Organization(domainProduct.organization!!.id, - domainProduct.organization!!.name, domainProduct.organization!!.logo, domainProduct.organization!!.lat, domainProduct.organization!!.lon, - domainProduct.organization!!.address, domainProduct.organization!!.phone, domainProduct.organization!!.email)}else{null}) - } - - val officesList = mutableListOf() - val officesMapped = offices.map { + Transaction( + it.id, + organization, + it.amount ?: 0f.toBigDecimal(), + it.amount_locale, + it.amount_extra_cash ?: 0f.toBigDecimal(), + it.amount_extra_cash_locale, + it.createdAt, + Transaction.Type.valueOf(it.type.name), + product + ) + } - val schedulers = mutableListOf() - if(it.schedulers != null){ - it.schedulers!!.map { - schedulers.add(io.forus.me.android.presentation.models.vouchers.Schedule(it.id,it.officeId ?:-1L,it.weekDay?:0,it.startTime,it.endTime)) - } + val product = when (val domainProduct = domainVoucher.product) { + null -> null + else -> Product( + domainProduct.id ?: -1L, + domainProduct.organizationId ?: -1L, + domainProduct.productCategoryId ?: -1L, + domainProduct.name, + domainProduct.description, + domainProduct.price ?: BigDecimal(-1), + domainProduct.oldPrice ?: BigDecimal(-1), + domainProduct.totalAmount ?: -1L, + domainProduct.soldAmount ?: -1L, + if (domainProduct.productCategory != null) { + ProductCategory( + domainProduct.productCategory!!.id, + domainProduct.productCategory!!.key, + domainProduct.productCategory!!.name + ) + } else { + null + }, + if (domainProduct.organization != null) { + Organization( + domainProduct.organization!!.id, + domainProduct.organization!!.name, + domainProduct.organization!!.logo, + domainProduct.organization!!.lat, + domainProduct.organization!!.lon, + domainProduct.organization!!.address, + domainProduct.organization!!.phone, + domainProduct.organization!!.email + ) + } else { + null + } + ) } + val officesList = mutableListOf() + offices.forEach { it -> + val schedulers = mutableListOf() + + if (it.schedulers != null) { + it.schedulers!!.forEach { + schedulers.add( + Schedule( + it.id, + it.officeId ?: -1L, + it.weekDay ?: 0, + it.startTime, + it.endTime + ) + ) + } + } - val organization = Organization(it.organization?.id ?: 0, - it.organization?.name ?: "", it.organization?.logo ?: "", - it.organization?.lat ?: 0.0, it.organization?.lon ?: 0.0, + val organization = Organization( + it.organization?.id ?: 0, + it.organization?.name ?: "", + it.organization?.logo ?: "", + it.organization?.lat ?: 0.0, + it.organization?.lon ?: 0.0, it.organization?.address ?: "", it.organization?.phone ?: "", - it.organization?.email ?: "") + it.organization?.email ?: "" + ) + + officesList.add( + Office( + it.id, + it.organizationId, + it.address, + it.phone, + it.lat, + it.lon, + it.photo, + organization, + schedulers + ) + ) - officesList.add(Office(it.id,it.organizationId,it.address,it.phone,it.lat,it.lon,it.photo,organization, schedulers)) + } + Voucher( + isProduct ?: false, + isUsed ?: false, + address, + identyAddress, + name, + organizationName, + fundName, + fundType, + fundWebShopUrl, + description, + createdAt, + amount, + amount_locale, + logo, + transactionsMapped, + product, + deactivated ?: false, + expired ?: false, + expireDate, + officesList, + amount_visible ?: false + ) } - - Voucher(isProduct ?: false, isUsed ?: false, address, identyAddress, name, organizationName, - fundName, fundType,fundWebShopUrl, description, createdAt, Currency(currency?.name, currency?.logoUrl), amount, logo, - transactionsMapped, product, deactivated ?: false, expired ?: false, expireDate , officesList, amount_visible?:false - ) } - } - }) + }) override fun VouchersModel.changeInitialModel(i: List): VouchersModel { val vouchers: MutableList = mutableListOf() @@ -108,31 +193,24 @@ class VouchersPresenter constructor(val vouchersRepository: VouchersRepository) val initialViewState = LRViewState( - false, - null, - false, - false, - null, - false, - VouchersModel(), - false) + false, null, false, false, null, false, VouchersModel(), false + ) subscribeViewState( - observable.scan(initialViewState, this::stateReducer) - .observeOn(AndroidSchedulers.mainThread()), - VouchersView::render) - + observable.scan(initialViewState, this::stateReducer) + .observeOn(AndroidSchedulers.mainThread()), VouchersView::render + ) } - override fun stateReducer(viewState: LRViewState, change: PartialChange): LRViewState { - - if (change !is VouchersPartialChanges) return super.stateReducer(viewState, change) + override fun stateReducer( + vs: LRViewState, change: PartialChange + ): LRViewState { + if (change !is VouchersPartialChanges) { + return super.stateReducer(vs, change) + } return run { - super.stateReducer(viewState, change) + super.stateReducer(vs, change) } - } - - -} \ No newline at end of file +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersVH.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersVH.kt index 847d78e80..3189afaab 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersVH.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/list/VouchersVH.kt @@ -4,7 +4,6 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import io.forus.me.android.presentation.R import io.forus.me.android.presentation.databinding.ItemVouchersListBinding -import io.forus.me.android.presentation.helpers.format import io.forus.me.android.presentation.models.vouchers.FundType import io.forus.me.android.presentation.models.vouchers.Voucher @@ -13,8 +12,7 @@ class VouchersVH(private val binding: ItemVouchersListBinding) : RecyclerView.ViewHolder(binding.root) { fun bind( - item: Voucher, - clickListener: ((Voucher) -> Unit)? + item: Voucher, clickListener: ((Voucher) -> Unit)? ) { binding.apply { @@ -45,13 +43,11 @@ class VouchersVH(private val binding: ItemVouchersListBinding) : usedOrExpiredLb.text = usedOrExpiredLb.context.getString(R.string.voucher_expired) } else if (item.deactivated) { usedOrExpiredLb.visibility = View.VISIBLE - usedOrExpiredLb.text = - usedOrExpiredLb.context.getString(R.string.voucher_deactivated) + usedOrExpiredLb.text = usedOrExpiredLb.context.getString(R.string.voucher_deactivated) } else { usedOrExpiredLb.visibility = View.GONE - value.text = "${item.currency?.name} ${item.amount?.toDouble().format(2)}" + value.text = item.amount_locale ?: "" } - } value.visibility = if (item.isProduct) { @@ -62,7 +58,6 @@ class VouchersVH(private val binding: ItemVouchersListBinding) : root.setOnClickListener { clickListener?.invoke(item) } - } } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/product_reservation/ProductReservationPresenter.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/product_reservation/ProductReservationPresenter.kt index 063f005a2..edcb78dcb 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/product_reservation/ProductReservationPresenter.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/product_reservation/ProductReservationPresenter.kt @@ -2,108 +2,187 @@ package io.forus.me.android.presentation.view.screens.vouchers.product_reservati import io.forus.me.android.domain.repository.vouchers.VouchersRepository import io.forus.me.android.presentation.firestore_logging.FirestoreTokenManager -import io.forus.me.android.presentation.models.currency.Currency -import io.forus.me.android.presentation.models.vouchers.* +import io.forus.me.android.presentation.models.vouchers.Office +import io.forus.me.android.presentation.models.vouchers.Organization +import io.forus.me.android.presentation.models.vouchers.Product +import io.forus.me.android.presentation.models.vouchers.ProductCategory +import io.forus.me.android.presentation.models.vouchers.Schedule +import io.forus.me.android.presentation.models.vouchers.Transaction +import io.forus.me.android.presentation.models.vouchers.Voucher import io.forus.me.android.presentation.view.base.lr.LRPresenter import io.forus.me.android.presentation.view.base.lr.LRViewState import io.forus.me.android.presentation.view.base.lr.PartialChange - import io.forus.me.android.presentation.view.screens.vouchers.list.VouchersPartialChanges -import io.forus.me.android.presentation.view.screens.vouchers.list.VouchersView -import io.reactivex.Observable import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers import java.math.BigDecimal -class ProductReservationPresenter constructor(val vouchersRepository: VouchersRepository, - val voucherAddress: String - , private val firestoreTokenManager: FirestoreTokenManager -) - : LRPresenter, ProductReservationModel, ProductReservationView>() { - - - override fun initialModelSingle(): Single> = Single.fromObservable(vouchersRepository.getProductVouchersAsProvider(voucherAddress).map { domainVouchers -> - domainVouchers.map { domainVoucher -> - with(domainVoucher) { - - firestoreTokenManager.writeGetProductVoucherAsProvider( - voucherAddress, true, null - ) - - val transactionsMapped = transactions.map { - val organization = Organization(it.organization?.id ?: 0, - it.organization?.name ?: "", it.organization?.logo ?: "", - it.organization?.lat ?: 0.0, it.organization?.lon ?: 0.0, +class ProductReservationPresenter( + val vouchersRepository: VouchersRepository, + val voucherAddress: String, + private val firestoreTokenManager: FirestoreTokenManager +) : LRPresenter, ProductReservationModel, ProductReservationView>() { + override fun initialModelSingle(): Single> = Single.fromObservable( + vouchersRepository.getProductVouchersAsProvider(voucherAddress).map { domainVouchers -> + domainVouchers.map { domainVoucher -> + with(domainVoucher) { + + firestoreTokenManager.writeGetProductVoucherAsProvider( + voucherAddress, true, null + ) + + val transactionsMapped = transactions.map { + val organization = Organization( + it.organization?.id ?: 0, + it.organization?.name ?: "", + it.organization?.logo ?: "", + it.organization?.lat ?: 0.0, + it.organization?.lon ?: 0.0, it.organization?.address ?: "", it.organization?.phone ?: "", - it.organization?.email ?: "") - - val product:io.forus.me.android.presentation.models.vouchers.Product? = - if(it.product == null){ null }else{ - Product(it.product!!.id?:-1L, it.product!!.organizationId?:-1L, - it.product!!.productCategoryId?:-1L, - it.product!!.name,it.product!!.description, - it.product!!.price?: BigDecimal(-1), - it.product!!.oldPrice?: BigDecimal(-1), it.product!!.totalAmount?:-1L, - it.product!!.soldAmount?:-1L, - ProductCategory(it.product!!.productCategory?.id?:-1L, - it.product!!.productCategory?.key, - it.product!!.productCategory?.name),organization) + it.organization?.email ?: "" + ) + + val product: io.forus.me.android.presentation.models.vouchers.Product? = + if (it.product == null) { + null + } else { + Product( + it.product!!.id ?: -1L, + it.product!!.organizationId ?: -1L, + it.product!!.productCategoryId ?: -1L, + it.product!!.name, + it.product!!.description, + it.product!!.price ?: BigDecimal(-1), + it.product!!.oldPrice ?: BigDecimal(-1), + it.product!!.totalAmount ?: -1L, + it.product!!.soldAmount ?: -1L, + ProductCategory( + it.product!!.productCategory?.id ?: -1L, + it.product!!.productCategory?.key, + it.product!!.productCategory?.name + ), + organization + ) } - Transaction(it.id, organization, - Currency(it.currency?.name ?: "", it.currency?.logoUrl ?: ""), - it?.amount ?: 0f.toBigDecimal(), it.createdAt, + Transaction( + it.id, + organization, + it.amount ?: 0f.toBigDecimal(), + it.amount_locale, + it.amount_extra_cash ?: 0f.toBigDecimal(), + it.amount_extra_cash_locale, + it.createdAt, Transaction.Type.valueOf(it.type.name), - product) - } - - val domainProduct = domainVoucher.product - val product = when (domainProduct) { - null -> null - else -> Product(domainProduct.id?:-1L, - domainProduct.organizationId?:-1L, - domainProduct.productCategoryId?:-1L, - domainProduct.name, domainProduct.description, - domainProduct.price?: BigDecimal(-1), domainProduct.oldPrice?: BigDecimal(-1), - domainProduct.totalAmount?:-1L, domainProduct.soldAmount?:-1L, - ProductCategory( domainProduct.productCategory?.id?:-1L, - domainProduct.productCategory?.key, domainProduct.productCategory?.name), - Organization(domainProduct.organization?.id?:-1L, - domainProduct.organization?.name, domainProduct.organization?.logo, domainProduct.organization?.lat, - domainProduct.organization?.lon, domainProduct.organization?.address, domainProduct.organization?.phone, domainProduct.organization?.email)) - } + product + ) + } - val officesList = mutableListOf() - val officesMapped = offices.map { + val domainProduct = domainVoucher.product + + val product = when (domainProduct) { + null -> null + else -> Product( + domainProduct.id ?: -1L, + domainProduct.organizationId ?: -1L, + domainProduct.productCategoryId ?: -1L, + domainProduct.name, + domainProduct.description, + domainProduct.price ?: BigDecimal(-1), + domainProduct.oldPrice ?: BigDecimal(-1), + domainProduct.totalAmount ?: -1L, + domainProduct.soldAmount ?: -1L, + ProductCategory( + domainProduct.productCategory?.id ?: -1L, + domainProduct.productCategory?.key, + domainProduct.productCategory?.name + ), + Organization( + domainProduct.organization?.id ?: -1L, + domainProduct.organization?.name, + domainProduct.organization?.logo, + domainProduct.organization?.lat, + domainProduct.organization?.lon, + domainProduct.organization?.address, + domainProduct.organization?.phone, + domainProduct.organization?.email + ) + ) + } - val schedulers = mutableListOf() - if(it.schedulers != null){ - it.schedulers!!.map { - schedulers.add(io.forus.me.android.presentation.models.vouchers.Schedule(it.id,it.officeId ?:-1L,it.weekDay?:0,it.startTime,it.endTime)) + val officesList = mutableListOf() + offices.forEach { it -> + val schedulers = mutableListOf() + + if (it.schedulers != null) { + it.schedulers!!.forEach { + schedulers.add( + Schedule( + it.id, + it.officeId ?: -1L, + it.weekDay ?: 0, + it.startTime, + it.endTime + ) + ) + } } - } - val organization = Organization(it.organization?.id ?: 0, - it.organization?.name ?: "", it.organization?.logo ?: "", - it.organization?.lat ?: 0.0, it.organization?.lon ?: 0.0, + val organization = Organization( + it.organization?.id ?: 0, + it.organization?.name ?: "", + it.organization?.logo ?: "", + it.organization?.lat ?: 0.0, + it.organization?.lon ?: 0.0, it.organization?.address ?: "", it.organization?.phone ?: "", - it.organization?.email ?: "") + it.organization?.email ?: "" + ) + + officesList.add( + Office( + it.id, + it.organizationId, + it.address, + it.phone, + it.lat, + it.lon, + it.photo, + organization, + schedulers + ) + ) - officesList.add(Office(it.id,it.organizationId,it.address,it.phone,it.lat,it.lon,it.photo,organization,schedulers)) + } + Voucher( + isProduct ?: false, + isUsed ?: false, + address, + identyAddress, + name, + organizationName, + fundName, + fundType, + fundWebShopUrl, + description, + createdAt, + amount, + amount_locale, + logo, + transactionsMapped, + product, + deactivated ?: false, + expired ?: false, + expireDate, + officesList, + amount_visible ?: false + ) } - - Voucher(isProduct ?: false, isUsed ?: false, address, identyAddress, name, organizationName, - fundName, fundType, fundWebShopUrl, description, createdAt, Currency(currency?.name, currency?.logoUrl), amount, logo, - transactionsMapped, product, deactivated ?: false, expired ?: false, expireDate,officesList, amount_visible?:false - ) } - } - }) + }) override fun ProductReservationModel.changeInitialModel(i: List): ProductReservationModel { val vouchers: MutableList = mutableListOf() @@ -115,35 +194,23 @@ class ProductReservationPresenter constructor(val vouchersRepository: VouchersRe override fun bindIntents() { val observable = loadRefreshPartialChanges() - val initialViewState = LRViewState( - false, - null, - false, - false, - null, - false, - ProductReservationModel(), - false) + false, null, false, false, null, false, ProductReservationModel(), false + ) subscribeViewState( - observable.scan(initialViewState, this::stateReducer) - .observeOn(AndroidSchedulers.mainThread()), - ProductReservationView::render) - + observable.scan(initialViewState, this::stateReducer) + .observeOn(AndroidSchedulers.mainThread()), ProductReservationView::render + ) } - - - override fun stateReducer(viewState: LRViewState, change: PartialChange): LRViewState { - - if (change !is VouchersPartialChanges) return super.stateReducer(viewState, change) + override fun stateReducer( + vs: LRViewState, change: PartialChange + ): LRViewState { + if (change !is VouchersPartialChanges) return super.stateReducer(vs, change) return run { - super.stateReducer(viewState, change) + super.stateReducer(vs, change) } - } - - -} \ No newline at end of file +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/provider/ProviderFragment.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/provider/ProviderFragment.kt index ef450e1e8..36c76bb17 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/provider/ProviderFragment.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/provider/ProviderFragment.kt @@ -1,12 +1,13 @@ package io.forus.me.android.presentation.view.screens.vouchers.provider +//import kotlinx.android.synthetic.main.fragment_voucher_provider.* +//import kotlinx.android.synthetic.main.view_organization.* import android.content.DialogInterface import android.content.DialogInterface.OnDismissListener import android.content.res.ColorStateList import android.os.Bundle import android.text.Editable import android.text.TextWatcher -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -16,7 +17,6 @@ import io.forus.me.android.domain.exception.RetrofitException import io.forus.me.android.domain.exception.RetrofitExceptionMapper import io.forus.me.android.presentation.R import io.forus.me.android.presentation.databinding.FragmentVoucherProviderBinding -import io.forus.me.android.presentation.helpers.format import io.forus.me.android.presentation.internal.Injection import io.forus.me.android.presentation.models.vouchers.Organization import io.forus.me.android.presentation.view.base.MViewModelProvider @@ -33,8 +33,6 @@ import io.forus.me.android.presentation.view.screens.vouchers.provider.dialogs.C import io.forus.me.android.presentation.view.screens.vouchers.provider.dialogs.organizations_dialog.OrganizationsListDialog import io.reactivex.Observable import io.reactivex.subjects.PublishSubject -//import kotlinx.android.synthetic.main.fragment_voucher_provider.* -//import kotlinx.android.synthetic.main.view_organization.* import java.math.BigDecimal @@ -185,11 +183,7 @@ class ProviderFragment : ToolbarLRFragment - binding.tvPrice.text = "€ ${amount.toFloat().format(2)}" - } - - + binding.tvPrice.text = vs.model.item?.voucher?.amount_locale ?: "" if (isDemoVoucher != null && isDemoVoucher!!) { tv_organization_name?.text = @@ -333,4 +327,4 @@ class ProviderFragment : ToolbarLRFragment() { +class ProviderPresenter( + private val vouchersRepository: VouchersRepository, + private val firestoreTokenManager: FirestoreTokenManager, + private val address: String, + private val isDemoVoucher: Boolean? = false +) : LRPresenter() { private var organizationId = 0L private var note = "" @@ -24,140 +30,225 @@ class ProviderPresenter constructor(private val vouchersRepository: VouchersRepo override fun initialModelSingle(): Single { if (isDemoVoucher != null && isDemoVoucher) { - val officesList = mutableListOf() - return return Single.fromObservable(vouchersRepository.getTestVoucherAsProvider().map { - VoucherProvider(Voucher(it.voucher?.isProduct ?: false, it.voucher?.isUsed - ?: false, it.voucher.address, it.voucher.identyAddress,it.voucher.name, it.voucher.organizationName, - it.voucher.fundName, it.voucher.fundType, it.voucher.fundWebShopUrl, it.voucher.description, it.voucher.createdAt, - Currency(it.voucher.currency?.name, it.voucher.currency?.logoUrl), it.voucher.amount, it.voucher.logo, + return Single.fromObservable(vouchersRepository.getTestVoucherAsProvider().map { + VoucherProvider( + Voucher( + it.voucher.isProduct ?: false, + it.voucher.isUsed ?: false, + it.voucher.address, + it.voucher.identyAddress, + it.voucher.name, + it.voucher.organizationName, + it.voucher.fundName, + it.voucher.fundType, + it.voucher.fundWebShopUrl, + it.voucher.description, + it.voucher.createdAt, + it.voucher.amount, + it.voucher.amount_locale, + it.voucher.logo, it.voucher.transactions.map { transaction -> - Transaction(transaction.id, - Organization(transaction.organization?.id ?: 0, - transaction.organization?.name, - transaction.organization?.logo, - transaction.organization?.lat, - transaction.organization?.lon, - transaction.organization?.address, - transaction.organization?.phone, - transaction.organization?.email), - Currency(transaction.currency?.name, - transaction.currency?.logoUrl), - transaction?.amount ?: 0f.toBigDecimal(), - transaction.createdAt, - Transaction.Type.valueOf(transaction.type.name), null) - }, null, it.voucher.deactivated ?: false, it.voucher.expired ?: false,"", officesList, - it.voucher.amount_visible?:false - ), - - it.allowedOrganizations.map { organization -> - Organization(organization.id, - organization.name, - organization.logo, - organization.lat, - organization.lon, - organization.address, - organization.phone, - organization.email) + Transaction( + transaction.id, + Organization( + transaction.organization?.id ?: 0, + transaction.organization?.name, + transaction.organization?.logo, + transaction.organization?.lat, + transaction.organization?.lon, + transaction.organization?.address, + transaction.organization?.phone, + transaction.organization?.email + ), + transaction.amount ?: 0f.toBigDecimal(), + transaction.amount_locale, + transaction.amount_extra_cash ?: 0f.toBigDecimal(), + transaction.amount_extra_cash_locale, + transaction.createdAt, + Transaction.Type.valueOf(transaction.type.name), + null + ) }, + null, + it.voucher.deactivated ?: false, + it.voucher.expired ?: false, + "", + officesList, + it.voucher.amount_visible ?: false + ), - it.allowedProductCategories.map { productCategory -> - ProductCategory(productCategory.id, productCategory.key, productCategory.name) - }) + it.allowedOrganizations.map { organization -> + Organization( + organization.id, + organization.name, + organization.logo, + organization.lat, + organization.lon, + organization.address, + organization.phone, + organization.email + ) + }, + + it.allowedProductCategories.map { productCategory -> + ProductCategory(productCategory.id, productCategory.key, productCategory.name) + }) }) } else { - return Single.fromObservable(vouchersRepository.getVoucherAsProvider(address).map { - - firestoreTokenManager.writeGetVoucherAsProvider( - address, true, null - ) + return Single.fromObservable(vouchersRepository.getVoucherAsProvider(address).map { it -> + firestoreTokenManager.writeGetVoucherAsProvider(address, true, null) val officesList = mutableListOf() - val officesMapped = it.voucher.offices.map { + it.voucher.offices.forEach { val schedulers = mutableListOf() - if(it.schedulers != null){ + + if (it.schedulers != null) { it.schedulers!!.map { - schedulers.add(io.forus.me.android.presentation.models.vouchers.Schedule(it.id,it.officeId ?:-1L,it.weekDay?:0,it.startTime,it.endTime)) + schedulers.add( + io.forus.me.android.presentation.models.vouchers.Schedule( + it.id, it.officeId ?: -1L, it.weekDay ?: 0, it.startTime, it.endTime + ) + ) } } - val organization = Organization(it.organization?.id ?: 0, - it.organization?.name ?: "", it.organization?.logo ?: "", - it.organization?.lat ?: 0.0, it.organization?.lon ?: 0.0, - it.organization?.address ?: "", - it.organization?.phone ?: "", - it.organization?.email ?: "") - - officesList.add(Office(it.id,it.organizationId,it.address,it.phone,it.lat,it.lon,it.photo,organization,schedulers)) + val organization = Organization( + it.organization?.id ?: 0, + it.organization?.name ?: "", + it.organization?.logo ?: "", + it.organization?.lat ?: 0.0, + it.organization?.lon ?: 0.0, + it.organization?.address ?: "", + it.organization?.phone ?: "", + it.organization?.email ?: "" + ) + + officesList.add( + Office( + it.id, + it.organizationId, + it.address, + it.phone, + it.lat, + it.lon, + it.photo, + organization, + schedulers + ) + ) } + VoucherProvider( + Voucher( + it.voucher.isProduct ?: false, + it.voucher.isUsed ?: false, + it.voucher.address, + it.voucher.identyAddress, + it.voucher.name, + it.voucher.organizationName, + it.voucher.fundName, + it.voucher.fundType, + it.voucher.fundWebShopUrl, + it.voucher.description, + it.voucher.createdAt, + it.voucher.amount, + it.voucher.amount_locale, + it.voucher.logo, + it.voucher.transactions.map { transaction -> + val organization = Organization( + transaction.organization?.id ?: 0, + transaction.organization?.name, + transaction.organization?.logo, + transaction.organization?.lat, + transaction.organization?.lon, + transaction.organization?.address, + transaction.organization?.phone, + transaction.organization?.email + ) + + val product: io.forus.me.android.presentation.models.vouchers.Product? = + if (transaction.product == null) { + null + } else { + io.forus.me.android.presentation.models.vouchers.Product( + transaction.product?.id ?: -1L, + transaction.product!!.organizationId!!, + transaction.product!!.productCategoryId!!, + transaction.product!!.name, + transaction.product!!.description, + transaction.product!!.price!!, + transaction.product!!.oldPrice!!, + transaction.product!!.totalAmount!!, + transaction.product!!.soldAmount!!, + ProductCategory( + transaction.product!!.productCategory?.id ?: -1L, + transaction.product!!.productCategory?.key, + transaction.product!!.productCategory?.name + ), + organization + ) + } - VoucherProvider(Voucher(it.voucher?.isProduct ?: false, it.voucher?.isUsed - ?: false, it.voucher.address, it.voucher.identyAddress, it.voucher.name, it.voucher.organizationName, - it.voucher.fundName, it.voucher.fundType, it.voucher.fundWebShopUrl, it.voucher.description, it.voucher.createdAt, - Currency(it.voucher.currency?.name, it.voucher.currency?.logoUrl), it.voucher.amount, it.voucher.logo, - it.voucher.transactions.map { transaction -> - val organization = Organization(transaction.organization?.id ?: 0, - transaction.organization?.name, - transaction.organization?.logo, - transaction.organization?.lat, - transaction.organization?.lon, - transaction.organization?.address, - transaction.organization?.phone, - transaction.organization?.email) - - val product:io.forus.me.android.presentation.models.vouchers.Product? = if(transaction.product == null){ null }else { - io.forus.me.android.presentation.models.vouchers.Product(transaction.product?.id?:-1L, - transaction.product!!.organizationId!!,transaction.product!!.productCategoryId!!, - transaction.product!!.name,transaction.product!!.description, - transaction.product!!.price!!,transaction.product!!.oldPrice!!, - transaction.product!!.totalAmount!!,transaction.product!!.soldAmount!!, - ProductCategory(transaction.product!!.productCategory?.id?:-1L, - transaction.product!!.productCategory?.key, - transaction.product!!.productCategory?.name), organization) - } - - - - Transaction(transaction.id,organization, - Currency(transaction.currency?.name, - transaction.currency?.logoUrl), - transaction?.amount ?: 0f.toBigDecimal(), - transaction.createdAt, - Transaction.Type.valueOf(transaction.type.name), product) - }, null, it.voucher.deactivated ?: false, it.voucher.expired ?: false,"", officesList, - it.voucher.amount_visible?:false), - - it.allowedOrganizations.map { organization -> - Organization(organization.id, - organization.name, - organization.logo, - organization.lat, - organization.lon, - organization.address, - organization.phone, - organization.email) + Transaction( + transaction.id, + organization, + transaction.amount ?: 0f.toBigDecimal(), + transaction.amount_locale, + transaction.amount_extra_cash ?: 0f.toBigDecimal(), + transaction.amount_extra_cash_locale, + transaction.createdAt, + Transaction.Type.valueOf(transaction.type.name), + product + ) }, + null, + it.voucher.deactivated ?: false, + it.voucher.expired ?: false, + "", + officesList, + it.voucher.amount_visible ?: false + ), - it.allowedProductCategories.map { productCategory -> - ProductCategory(productCategory.id, productCategory.key, productCategory.name) - }) + it.allowedOrganizations.map { organization -> + Organization( + organization.id, + organization.name, + organization.logo, + organization.lat, + organization.lon, + organization.address, + organization.phone, + organization.email + ) + }, + + it.allowedProductCategories.map { productCategory -> + ProductCategory( + productCategory.id, productCategory.key, productCategory.name + ) + }) }) } } override fun ProviderModel.changeInitialModel(i: VoucherProvider): ProviderModel { - val organization = if (i.allowedOrganizations.isNotEmpty()) i.allowedOrganizations.get(0) else Organization(organizationId, i.voucher.organizationName, "", i.voucher.product?.organization?.lat - ?: 0.0, i.voucher.product?.organization?.lon - ?: 0.0, i.voucher.product?.organization?.address - ?: "", i.voucher.product?.organization?.phone - ?: "", i.voucher.product?.organization?.email ?: "") + val organization = if (i.allowedOrganizations.isNotEmpty()) i.allowedOrganizations.get(0) else Organization( + organizationId, + i.voucher.organizationName, + "", + i.voucher.product?.organization?.lat ?: 0.0, + i.voucher.product?.organization?.lon ?: 0.0, + i.voucher.product?.organization?.address ?: "", + i.voucher.product?.organization?.phone ?: "", + i.voucher.product?.organization?.email ?: "" + ) organizationId = organization.id return copy(item = i, selectedOrganization = organization) } @@ -166,103 +257,79 @@ class ProviderPresenter constructor(private val vouchersRepository: VouchersRepo val observable = Observable.merge( - Arrays.asList( - - loadRefreshPartialChanges(), - - intent { it.selectAmount() } - .map { ProviderPartialChanges.SetAmount(it) }, - - intent { it.selectNote() } - .map { ProviderPartialChanges.SetNote(it) }, - - - intent { it.charge() } - .switchMap {amount -> - vouchersRepository.makeTransaction( - address, - amount.first, - amount.second, - note, - organizationId - ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .map { - firestoreTokenManager.writeTransaction( - address, amount.first, note, organizationId, true, null - ) - ProviderPartialChanges.MakeTransactionEnd() - } - .onErrorReturn { throwable -> - firestoreTokenManager.writeTransaction( - address, amount.first, note, organizationId, false, - throwable.localizedMessage - ) - ProviderPartialChanges.MakeTransactionError(throwable) - } - .startWith(ProviderPartialChanges.MakeTransactionStart()) - }, - - - intent { it.selectOrganization() } - .map { ProviderPartialChanges.SelectOrganization(it) }, - - intent { it.demoCharge() } - .switchMap { - - - vouchersRepository.makeDemoTransaction(address) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .map { - ProviderPartialChanges.MakeTransactionEnd() - } - .onErrorReturn { - ProviderPartialChanges.MakeTransactionError(it) - } - .startWith(ProviderPartialChanges.MakeTransactionStart()) - - - } - ) + Arrays.asList( + loadRefreshPartialChanges(), + intent { it.selectAmount() }.map { ProviderPartialChanges.SetAmount(it) }, + intent { it.selectNote() }.map { ProviderPartialChanges.SetNote(it) }, + intent { it.charge() }.switchMap { amount -> + vouchersRepository.makeTransaction( + address, amount.first, amount.second, note, organizationId + ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).map { + firestoreTokenManager.writeTransaction( + address, amount.first, note, organizationId, true, null + ) + ProviderPartialChanges.MakeTransactionEnd() + }.onErrorReturn { throwable -> + firestoreTokenManager.writeTransaction( + address, amount.first, note, organizationId, false, throwable.localizedMessage + ) + ProviderPartialChanges.MakeTransactionError(throwable) + }.startWith(ProviderPartialChanges.MakeTransactionStart()) + }, + intent { it.selectOrganization() }.map { ProviderPartialChanges.SelectOrganization(it) }, + intent { it.demoCharge() }.switchMap { + vouchersRepository.makeDemoTransaction(address).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()).map { + ProviderPartialChanges.MakeTransactionEnd() + }.onErrorReturn { + ProviderPartialChanges.MakeTransactionError(it) + }.startWith(ProviderPartialChanges.MakeTransactionStart()) + }) ) - val initialViewState = LRViewState( - false, - null, - false, - false, - null, - false, - ProviderModel(), - false) + val initialViewState = LRViewState(false, null, false, false, null, false, ProviderModel(), false) subscribeViewState( - observable.scan(initialViewState, this::stateReducer) - .observeOn(AndroidSchedulers.mainThread()), - ProviderView::render) + observable.scan(initialViewState, this::stateReducer).observeOn(AndroidSchedulers.mainThread()), + ProviderView::render + ) } - override fun stateReducer(vs: LRViewState, change: PartialChange): LRViewState { + override fun stateReducer( + vs: LRViewState, change: PartialChange + ): LRViewState { if (change !is ProviderPartialChanges) return super.stateReducer(vs, change) return when (change) { - is ProviderPartialChanges.MakeTransactionEnd -> vs.copy(closeScreen = true, model = vs.model.copy(sendingMakeTransaction = false, makeTransactionError = null), loading = false) - is ProviderPartialChanges.MakeTransactionStart -> vs.copy(model = vs.model.copy(sendingMakeTransaction = true, makeTransactionError = null), loading = true) - is ProviderPartialChanges.MakeTransactionError -> vs.copy(model = vs.model.copy(sendingMakeTransaction = false, makeTransactionError = change.error)) - is ProviderPartialChanges.SetAmount -> vs.copy(model = vs.model.copy(selectedAmount = change.amount, makeTransactionError = null)) + is ProviderPartialChanges.MakeTransactionEnd -> vs.copy( + closeScreen = true, + model = vs.model.copy(sendingMakeTransaction = false, makeTransactionError = null), + loading = false + ) + + is ProviderPartialChanges.MakeTransactionStart -> vs.copy( + model = vs.model.copy(sendingMakeTransaction = true, makeTransactionError = null), loading = true + ) + + is ProviderPartialChanges.MakeTransactionError -> vs.copy( + model = vs.model.copy(sendingMakeTransaction = false, makeTransactionError = change.error) + ) + + is ProviderPartialChanges.SetAmount -> vs.copy( + model = vs.model.copy(selectedAmount = change.amount, makeTransactionError = null) + ) + is ProviderPartialChanges.SetNote -> { note = change.note vs.copy(model = vs.model.copy(selectedNote = change.note, makeTransactionError = null)) } - is ProviderPartialChanges.SelectOrganization -> { + is ProviderPartialChanges.SelectOrganization -> { organizationId = change.organization.id vs.copy(model = vs.model.copy(selectedOrganization = change.organization, makeTransactionError = null)) } } } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/adapter/TransactionsLogAdapter.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/adapter/TransactionsLogAdapter.kt index dae5d99f4..aedd5a7c4 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/adapter/TransactionsLogAdapter.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/adapter/TransactionsLogAdapter.kt @@ -1,20 +1,16 @@ package io.forus.me.android.presentation.view.screens.vouchers.transactions_log.adapter import android.content.Context -import androidx.recyclerview.widget.RecyclerView -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView -import io.forus.me.android.domain.models.vouchers.ProductAction +import androidx.recyclerview.widget.RecyclerView import io.forus.me.android.domain.models.vouchers.Transaction import io.forus.me.android.presentation.R import io.forus.me.android.presentation.view.screens.vouchers.transactions_log.utils.transactionsDateFormat -import java.text.NumberFormat import java.text.SimpleDateFormat -import java.util.* -import kotlin.collections.ArrayList +import java.util.Locale class TransactionsLogAdapter(val context: Context, var items: ArrayList, val callback: Callback) : RecyclerView.Adapter() { @@ -45,12 +41,12 @@ class TransactionsLogAdapter(val context: Context, var items: ArrayList 0.0) { + subtitle2.text = if (hasAmount) { overline2.visibility = View.VISIBLE - NumberFormat.getCurrencyInstance(Locale("nl", "NL")).format(item.amount?.toDouble()) + item.amount_locale } else { overline2.visibility = View.INVISIBLE "" } diff --git a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/details/TransactionDetailsPopupDialog.kt b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/details/TransactionDetailsPopupDialog.kt index 441088b5b..2763e1e15 100644 --- a/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/details/TransactionDetailsPopupDialog.kt +++ b/presentation/src/main/java/io/forus/me/android/presentation/view/screens/vouchers/transactions_log/details/TransactionDetailsPopupDialog.kt @@ -13,8 +13,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import io.forus.me.android.domain.models.vouchers.Transaction import io.forus.me.android.presentation.R import io.forus.me.android.presentation.extensions.formatToDisplay -import java.text.NumberFormat -import java.util.Locale class TransactionDetailsPopupDialog( @@ -74,8 +72,7 @@ class TransactionDetailsPopupDialog( } dateTimeTV.text = transaction.createdAt.formatToDisplay() - amountTV.text = NumberFormat.getCurrencyInstance(Locale("nl", "NL")) - .format(transaction.amount) + amountTV.text = transaction.amount_locale ?: "" val status = when (transaction.state) { @@ -88,15 +85,11 @@ class TransactionDetailsPopupDialog( idTV.text = transaction.id fundTV.text = transaction.fund?.name providerTV.text = transaction.organization?.name - extraAmountTV.text = NumberFormat.getCurrencyInstance(Locale("nl", "NL")) - .format(transaction.amount_extra_cash) + extraAmountTV.text = transaction.amount_extra_cash_locale ?: "" noteTV.text = transaction.note ?: "" - - } - override fun getTheme(): Int { return R.style.AppBottomSheetDialogTheme } -} \ No newline at end of file +}