-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(bank-sdk): Add SkontoValidator to parse compound extractions for…
… skonto - add a flag to enable/disable skonto feature PP-480
- Loading branch information
1 parent
19aa716
commit 011fa90
Showing
5 changed files
with
182 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
bank-sdk/sdk/src/main/java/net/gini/android/bank/sdk/capture/skonto/SkontoException.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package net.gini.android.bank.sdk.capture.skonto | ||
|
||
/** | ||
* Exceptions related to the Skonto feature. | ||
*/ | ||
sealed class SkontoException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class SkontoMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class DueDateMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class AmountDiscountedMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class AmountToPayMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class RemainingDaysMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class PaymentMethodMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
|
||
|
||
/** | ||
* Internal use only. | ||
* | ||
* @suppress | ||
*/ | ||
class PercentageDiscountedMissingException(message: String? = null, cause: Throwable? = null) : SkontoException(message, cause) | ||
} |
85 changes: 85 additions & 0 deletions
85
bank-sdk/sdk/src/main/java/net/gini/android/bank/sdk/capture/skonto/SkontoValidator.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
package net.gini.android.bank.sdk.capture.skonto | ||
|
||
import net.gini.android.bank.sdk.capture.digitalinvoice.DigitalInvoiceException.* | ||
import net.gini.android.bank.sdk.capture.skonto.SkontoException.* | ||
import net.gini.android.capture.network.model.GiniCaptureCompoundExtraction | ||
|
||
internal typealias Validate = (compoundExtractions: Map<String, GiniCaptureCompoundExtraction>) -> Unit | ||
|
||
/** | ||
* It checks that the compound extractions contain valid skonto objects which can be used to show the Skonto screen. | ||
*/ | ||
class SkontoValidator { | ||
|
||
companion object { | ||
|
||
/** | ||
* Checks that the compound extractions contain valid line items. | ||
* | ||
* In case it's not valid an appropriate [SkontoException] subclass will be thrown. | ||
* | ||
* @param compoundExtractions a map of [GiniCaptureCompoundExtraction]s | ||
* @throws SkontoMissingException if skontoDiscounts are missing from the compound extractions | ||
* @throws DueDateMissingException if skontoDueDate is missing from skontoDiscaounts object | ||
* @throws AmountToPayMissingException if skontoAmountToPay is missing from skontoDiscaounts object | ||
* @throws RemainingDaysMissingException if skontoRemainingDays is missing from skontoDiscaounts object | ||
* @throws PercentageDiscountedMissingException if skontoPercentageDiscounted is missing from skontoDiscaounts object | ||
*/ | ||
@JvmStatic | ||
@Throws(Exception::class) | ||
fun validate(compoundExtractions: Map<String, GiniCaptureCompoundExtraction>) = listOf( | ||
skontoDiscountsAvailable, | ||
skontoDueDateAvailable, | ||
skontoAmountToPayAvailable, | ||
skontoRemainingDaysAvailable, | ||
skontoPercentageDiscountedAvailable | ||
).forEach { it(compoundExtractions) } | ||
} | ||
} | ||
|
||
//mandatory | ||
internal val skontoDiscountsAvailable: Validate = { compoundExtractions -> | ||
if (!compoundExtractions.containsKey("skontoDiscounts")) { | ||
throw SkontoMissingException() | ||
} | ||
} | ||
//mandatory | ||
internal val skontoDueDateAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoDueDate") || it.containsKey("skontoDueDateCalculated") }) != true) { | ||
throw DueDateMissingException() | ||
} | ||
} | ||
//not mandatory | ||
internal val skontoAmountDiscountedAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoAmountDiscounted") || it.containsKey("skontoAmountDiscountedCalculated") }) != true) { | ||
throw AmountDiscountedMissingException() | ||
} | ||
} | ||
//mandatory | ||
internal val skontoAmountToPayAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoAmountToPay") || it.containsKey("skontoAmountToPayCalculated") }) != true) { | ||
throw AmountToPayMissingException() | ||
} | ||
} | ||
|
||
//mandatory | ||
internal val skontoRemainingDaysAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoRemainingDays") || it.containsKey("skontoRemainingDaysCalculated") }) != true) { | ||
throw RemainingDaysMissingException() | ||
} | ||
} | ||
|
||
//not mandatory | ||
internal val skontoPaymentMethodAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoPaymentMethod") }) != true) { | ||
throw PaymentMethodMissingException() | ||
} | ||
} | ||
|
||
//mandatory | ||
internal val skontoPercentageDiscountedAvailable: Validate = { compoundExtractions -> | ||
if ((compoundExtractions["skontoDiscounts"]?.specificExtractionMaps?.all { it.containsKey("skontoPercentageDiscounted") || it.containsKey("skontoPercentageDiscountedCalculated") }) != true) { | ||
throw PercentageDiscountedMissingException() | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters