@@ -9,13 +9,10 @@ import eu.pretix.libpretixsync.crypto.readPubkeyFromPem
99import eu.pretix.libpretixsync.crypto.sig1.TicketProtos
1010import eu.pretix.libpretixsync.db.Answer
1111import eu.pretix.libpretixsync.db.NonceGenerator
12- import eu.pretix.libpretixsync.db.Order
13- import eu.pretix.libpretixsync.db.OrderPosition
1412import eu.pretix.libpretixsync.db.QuestionLike
1513import eu.pretix.libpretixsync.db.QueuedCall
1614import eu.pretix.libpretixsync.db.QueuedCheckIn
1715import eu.pretix.libpretixsync.models.CheckIn
18- import eu.pretix.libpretixsync.models.CheckInList
1916import eu.pretix.libpretixsync.models.Event
2017import eu.pretix.libpretixsync.models.Order as OrderModel
2118import eu.pretix.libpretixsync.models.OrderPosition as OrderPositionModel
@@ -29,7 +26,6 @@ import eu.pretix.libpretixsync.utils.logic.JsonLogic
2926import eu.pretix.libpretixsync.utils.logic.truthy
3027import io.requery.BlockingEntityStore
3128import io.requery.Persistable
32- import io.requery.kotlin.Logical
3329import io.requery.query.*
3430import org.joda.time.DateTime
3531import org.joda.time.DateTimeZone
@@ -1129,48 +1125,6 @@ class AsyncCheckProvider(private val config: ConfigStore, private val dataStore:
11291125 return results
11301126 }
11311127
1132- private fun basePositionQuery (lists : List <CheckInList >, onlyCheckedIn : Boolean ): WhereAndOr <out Scalar <Int ?>? > {
1133-
1134- var q = dataStore.count(OrderPosition ::class .java).distinct()
1135- .leftJoin(Order ::class .java).on(OrderPosition .ORDER_ID .eq(Order .ID ))
1136- .where(OrderPosition .SERVER_ID .eq(- 1 )) // stupid logic node just so we can dynamically add .or() below
1137-
1138- for (list in lists) {
1139- var lq: Logical <* , * > = Order .EVENT_SLUG .eq(list.eventSlug)
1140- if (list.includePending) {
1141- lq = lq.and (Order .STATUS .`in `(listOf (" p" , " n" )))
1142- } else {
1143- lq = lq.and (Order .STATUS .eq(" p" ).or (Order .STATUS .eq(" n" ).and (Order .VALID_IF_PENDING .eq(true ))))
1144- }
1145-
1146- if (list.subEventId != null && list.subEventId > 0 ) {
1147- lq = lq.and (OrderPosition .SUBEVENT_ID .eq(list.subEventId))
1148- }
1149-
1150- if (! list.allItems) {
1151- val product_ids = db.checkInListQueries.selectItemIdsForList(list.id)
1152- .executeAsList()
1153- .map {
1154- // Not-null assertion needed for SQLite
1155- it.id!!
1156- }
1157- lq = lq.and (OrderPosition .ITEM_ID .`in `(product_ids))
1158- }
1159-
1160- if (onlyCheckedIn) {
1161- lq = lq.and (OrderPosition .ID .`in `(
1162- db.checkInQueries.selectPositionIdByListIdAndType(
1163- list_server_id = list.serverId,
1164- type = " entry"
1165- ).executeAsList().map { it.position }
1166- ))
1167- }
1168- q = q.or (lq)
1169- }
1170-
1171- return q
1172- }
1173-
11741128 @Throws(CheckException ::class )
11751129 override fun status (eventSlug : String , listId : Long ): TicketCheckProvider .StatusResult {
11761130 sentry.addBreadcrumb(" provider.status" , " offline status started" )
@@ -1195,24 +1149,75 @@ class AsyncCheckProvider(private val config: ConfigStore, private val dataStore:
11951149 for (product in products) {
11961150 val variations: MutableList <TicketCheckProvider .StatusResultItemVariation > = ArrayList ()
11971151 try {
1152+ val subEventId = if (list.subEventId != null && list.subEventId > 0 ) list.subEventId else - 1L
1153+
1154+ val notAllItems = ! list.allItems
1155+ val listItemIds = if (notAllItems) {
1156+ db.checkInListQueries.selectItemIdsForList(list.id)
1157+ .executeAsList()
1158+ .map {
1159+ // Not-null assertion needed for SQLite
1160+ it.id!!
1161+ }
1162+ } else {
1163+ // Dummy ID that is not used. Required for SQLDelight to generate valid SQL.
1164+ // See comments in search().
1165+ listOf (- 1L )
1166+ }
1167+
11981168 for (`var ` in product.variations) {
1199- val position_count = basePositionQuery(listOf (list), false )
1200- .and (OrderPosition .ITEM_ID .eq(product.id))
1201- .and (OrderPosition .VARIATION_ID .eq(`var `.server_id)).get()!! .value()!!
1202- val ci_count = basePositionQuery(listOf (list), true )
1203- .and (OrderPosition .ITEM_ID .eq(product.id))
1204- .and (OrderPosition .VARIATION_ID .eq(`var `.server_id)).get()!! .value()!!
1169+ val position_count = db.orderPositionQueries.countForStatus(
1170+ event_slug = list.eventSlug,
1171+ include_pending = list.includePending,
1172+ subevent_id = subEventId,
1173+ not_all_items = notAllItems,
1174+ list_item_ids = listItemIds,
1175+ only_checked_in_list_id = - 1L ,
1176+ item_id = product.id,
1177+ variation_id = `var `.server_id,
1178+ ).executeAsOne().toInt()
1179+
1180+ val ci_count = db.orderPositionQueries.countForStatus(
1181+ event_slug = list.eventSlug,
1182+ include_pending = list.includePending,
1183+ subevent_id = subEventId,
1184+ not_all_items = notAllItems,
1185+ list_item_ids = listItemIds,
1186+ only_checked_in_list_id = listId,
1187+ item_id = product.id,
1188+ variation_id = `var `.server_id,
1189+ ).executeAsOne().toInt()
1190+
12051191 variations.add(TicketCheckProvider .StatusResultItemVariation (
12061192 `var `.server_id,
12071193 `var `.stringValue,
12081194 position_count,
12091195 ci_count
12101196 ))
12111197 }
1212- val position_count = basePositionQuery(listOf (list), false )
1213- .and (OrderPosition .ITEM_ID .eq(product.id)).get()!! .value()!!
1214- val ci_count = basePositionQuery(listOf (list), true )
1215- .and (OrderPosition .ITEM_ID .eq(product.id)).get()!! .value()!!
1198+
1199+ val position_count = db.orderPositionQueries.countForStatus(
1200+ event_slug = list.eventSlug,
1201+ include_pending = list.includePending,
1202+ subevent_id = subEventId,
1203+ not_all_items = notAllItems,
1204+ list_item_ids = listItemIds,
1205+ only_checked_in_list_id = - 1L ,
1206+ item_id = product.id,
1207+ variation_id = - 1L ,
1208+ ).executeAsOne().toInt()
1209+
1210+ val ci_count = db.orderPositionQueries.countForStatus(
1211+ event_slug = list.eventSlug,
1212+ include_pending = list.includePending,
1213+ subevent_id = subEventId,
1214+ not_all_items = notAllItems,
1215+ list_item_ids = listItemIds,
1216+ only_checked_in_list_id = listId,
1217+ item_id = product.id,
1218+ variation_id = - 1L ,
1219+ ).executeAsOne().toInt()
1220+
12161221 items.add(TicketCheckProvider .StatusResultItem (
12171222 product.serverId,
12181223 product.internalName,
0 commit comments