diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractOrderPosition.java b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractOrderPosition.java index deaea93f..0602cb5b 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractOrderPosition.java +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractOrderPosition.java @@ -101,6 +101,15 @@ public BigDecimal getPrice() { } } + public String getTaxCode() { + try { + return getJSON().optString("tax_code", null); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + } + public BigDecimal getTaxRate() { try { return new BigDecimal(getJSON().getString("tax_rate")); diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractReceiptLine.java b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractReceiptLine.java index 4ac33ed4..84b2c412 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractReceiptLine.java +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractReceiptLine.java @@ -63,6 +63,8 @@ public class AbstractReceiptLine implements LocalObject { public Long tax_rule; + public String tax_code; + public BigDecimal tax_value; @Nullable @@ -196,6 +198,7 @@ public JSONObject toJSON() throws JSONException { jo.put("tax_rate", tax_rate != null ? tax_rate.setScale(2, RoundingMode.HALF_UP) : "0.00"); jo.put("tax_value", tax_value != null ? tax_value.setScale(2, RoundingMode.HALF_UP) : "0.00"); jo.put("tax_rule", tax_rule != null ? tax_rule : JSONObject.NULL); + jo.put("tax_code", tax_code != null ? tax_code : JSONObject.NULL); jo.put("secret", secret); jo.put("seat", seat_guid != null ? seat_guid : JSONObject.NULL); jo.put("subevent", subevent_id); diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractTaxRule.java b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractTaxRule.java index 0d7209e9..67e64960 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractTaxRule.java +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/AbstractTaxRule.java @@ -34,6 +34,18 @@ public boolean includesTax() { } } + public String getCode() { + try { + if (!getJSON().has("code") || getJSON().isNull("code")) { + return null; + } + return getJSON().getString("code"); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + } + public BigDecimal getRate() { try { return new BigDecimal(getJSON().getString("rate")); diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/Migrations.java b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/Migrations.java index 94343ddd..f659d786 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/Migrations.java +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/db/Migrations.java @@ -15,7 +15,7 @@ public class Migrations { private static EntityModel model = Models.DEFAULT; - public static int CURRENT_VERSION = 105; + public static int CURRENT_VERSION = 106; private static void createVersionTable(Connection c, int version) throws SQLException { Statement s2 = c.createStatement(); @@ -430,6 +430,10 @@ public static void migrate(DataSource dataSource, boolean dbIsNew) throws SQLExc execIgnore(c, "ALTER TABLE settings DROP COLUMN covid_certificates_allow_vaccinated_products;", new String[] {"no such column", "existiert", "syntax error"}); updateVersionTable(c, 105); } + if (db_version < 106) { + execIgnore(c, "ALTER TABLE receiptline ADD tax_code TEXT NULL;", new String[] {"duplicate column name", "already exists", "existiert bereits"}); + updateVersionTable(c, 106); + } // Note that the Android app currently does not use these queries! diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/OrderPosition.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/OrderPosition.kt index 07a2d18e..42014146 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/OrderPosition.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/OrderPosition.kt @@ -24,6 +24,7 @@ class OrderPosition( val price: BigDecimal? = null, val taxRate: BigDecimal? = null, val taxValue: BigDecimal? = null, + val taxCode: String? = null, val seatName: String? = null, val addonToServerId: Long? = null, val blocked: Boolean = false, diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/ReceiptLine.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/ReceiptLine.kt index fb1cca81..da081046 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/ReceiptLine.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/ReceiptLine.kt @@ -28,6 +28,7 @@ data class ReceiptLine( val taxRate: BigDecimal? = null, val taxRule: Long? = null, val taxValue: BigDecimal? = null, + val taxCode: String? = null, val eventDateFrom: OffsetDateTime? = null, val eventDateTo: OffsetDateTime? = null, val subEventServerId: Long? = null, diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/TaxRule.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/TaxRule.kt index 78609544..c0acd545 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/TaxRule.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/TaxRule.kt @@ -7,4 +7,5 @@ data class TaxRule( val serverId: Long, val rate: BigDecimal = BigDecimal("0.00"), val includesTax: Boolean = false, + val code: String? = null, ) diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderPositionExtensions.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderPositionExtensions.kt index f226cdfb..40896434 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderPositionExtensions.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/OrderPositionExtensions.kt @@ -29,6 +29,7 @@ fun OrderPosition.toModel(): OrderPositionModel { zipcode = json.optString("zipcode", null), price = parsePrice(json), taxRate = parseTaxRate(json), + taxCode = parseTaxCode(json), taxValue = parseTaxValue(json), seatName = parseSeatName(json), addonToServerId = parseAddonToServerId(json), @@ -50,6 +51,15 @@ private fun parsePrice(json: JSONObject): BigDecimal? { } } +private fun parseTaxCode(json: JSONObject): String? { + try { + return json.optString("tax_code", null) + } catch (e: JSONException) { + e.printStackTrace() + return null + } +} + private fun parseTaxRate(json: JSONObject): BigDecimal? { try { return BigDecimal(json.getString("tax_rate")) diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/ReceiptLineExtensions.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/ReceiptLineExtensions.kt index 51bb43e0..0b729605 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/ReceiptLineExtensions.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/ReceiptLineExtensions.kt @@ -25,6 +25,7 @@ fun ReceiptLine.toModel() = voucherCode = voucher_code, useReusableMedium = use_reusable_medium, taxRate = tax_rate, + taxCode = tax_code, taxRule = tax_rule, taxValue = tax_value, eventDateFrom = SafeOffsetDateTimeMapper.decode(event_date_from), diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/TaxRuleExtensions.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/TaxRuleExtensions.kt index 80e766f9..a8b27e43 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/TaxRuleExtensions.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/models/db/TaxRuleExtensions.kt @@ -14,6 +14,7 @@ fun TaxRule.toModel(): TaxRuleModel { serverId = this.server_id!!, rate = parseRate(json), includesTax = parseIncludesTax(json), + code = parseCode(json), ) } @@ -34,3 +35,15 @@ private fun parseIncludesTax(json: JSONObject): Boolean { return false } } + +private fun parseCode(json: JSONObject): String? { + try { + if (!json.has("code") or json.isNull("code")) { + return null + } + return json.getString("code") + } catch (e: JSONException) { + e.printStackTrace() + return null + } +} diff --git a/libpretixsync/src/main/java/eu/pretix/libpretixsync/sqldelight/ReceiptLineExtensions.kt b/libpretixsync/src/main/java/eu/pretix/libpretixsync/sqldelight/ReceiptLineExtensions.kt index 53cf0170..c1cfd669 100644 --- a/libpretixsync/src/main/java/eu/pretix/libpretixsync/sqldelight/ReceiptLineExtensions.kt +++ b/libpretixsync/src/main/java/eu/pretix/libpretixsync/sqldelight/ReceiptLineExtensions.kt @@ -20,6 +20,7 @@ fun ReceiptLine.toJSON(): JSONObject { jo.put("tax_rate", tax_rate?.setScale(2, RoundingMode.HALF_UP)) jo.put("tax_value", tax_value?.setScale(2, RoundingMode.HALF_UP) ?: "0.00") jo.put("tax_rule", tax_rule ?: JSONObject.NULL) + jo.put("tax_code", tax_code ?: JSONObject.NULL) jo.put("secret", secret) jo.put("seat", seat_guid ?: JSONObject.NULL) jo.put("subevent", subevent_id) diff --git a/libpretixsync/src/main/sqldelight/common/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq b/libpretixsync/src/main/sqldelight/common/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq index 7767a499..18af6b11 100644 --- a/libpretixsync/src/main/sqldelight/common/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq +++ b/libpretixsync/src/main/sqldelight/common/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq @@ -49,6 +49,7 @@ INSERT INTO ReceiptLine ( tax_rate, tax_rule, tax_value, + tax_code, type, use_reusable_medium, variation_id, @@ -97,5 +98,6 @@ VALUES ( ?, ?, ?, + ?, ? ); diff --git a/libpretixsync/src/main/sqldelight/migrations/105.sqm b/libpretixsync/src/main/sqldelight/migrations/105.sqm new file mode 100644 index 00000000..b9486462 --- /dev/null +++ b/libpretixsync/src/main/sqldelight/migrations/105.sqm @@ -0,0 +1 @@ +-- Empty migration to set database version to 106 diff --git a/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq b/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq index d643aa29..4caf9fe4 100644 --- a/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq +++ b/libpretixsync/src/main/sqldelight/postgres/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq @@ -40,6 +40,7 @@ CREATE TABLE ReceiptLine ( tax_rate numeric, tax_rule bigint, tax_value numeric, + tax_code character varying(255), type character varying(255), use_reusable_medium bigint, variation_id bigint, diff --git a/libpretixsync/src/main/sqldelight/sqlite/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq b/libpretixsync/src/main/sqldelight/sqlite/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq index b2167095..bcd4cdf9 100644 --- a/libpretixsync/src/main/sqldelight/sqlite/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq +++ b/libpretixsync/src/main/sqldelight/sqlite/eu/pretix/libpretixsync/sqldelight/ReceiptLine.sq @@ -43,6 +43,7 @@ CREATE TABLE ReceiptLine ( tax_rate REAL AS BigDecimal, tax_rule INTEGER, tax_value REAL AS BigDecimal, + tax_code TEXT, type TEXT, use_reusable_medium INTEGER, variation_id INTEGER,