@@ -9,13 +9,10 @@ import eu.pretix.libpretixsync.crypto.readPubkeyFromPem
9
9
import eu.pretix.libpretixsync.crypto.sig1.TicketProtos
10
10
import eu.pretix.libpretixsync.db.Answer
11
11
import eu.pretix.libpretixsync.db.NonceGenerator
12
- import eu.pretix.libpretixsync.db.Order
13
- import eu.pretix.libpretixsync.db.OrderPosition
14
12
import eu.pretix.libpretixsync.db.QuestionLike
15
13
import eu.pretix.libpretixsync.db.QueuedCall
16
14
import eu.pretix.libpretixsync.db.QueuedCheckIn
17
15
import eu.pretix.libpretixsync.models.CheckIn
18
- import eu.pretix.libpretixsync.models.CheckInList
19
16
import eu.pretix.libpretixsync.models.Event
20
17
import eu.pretix.libpretixsync.models.Order as OrderModel
21
18
import eu.pretix.libpretixsync.models.OrderPosition as OrderPositionModel
@@ -29,7 +26,6 @@ import eu.pretix.libpretixsync.utils.logic.JsonLogic
29
26
import eu.pretix.libpretixsync.utils.logic.truthy
30
27
import io.requery.BlockingEntityStore
31
28
import io.requery.Persistable
32
- import io.requery.kotlin.Logical
33
29
import io.requery.query.*
34
30
import org.joda.time.DateTime
35
31
import org.joda.time.DateTimeZone
@@ -1129,48 +1125,6 @@ class AsyncCheckProvider(private val config: ConfigStore, private val dataStore:
1129
1125
return results
1130
1126
}
1131
1127
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
-
1174
1128
@Throws(CheckException ::class )
1175
1129
override fun status (eventSlug : String , listId : Long ): TicketCheckProvider .StatusResult {
1176
1130
sentry.addBreadcrumb(" provider.status" , " offline status started" )
@@ -1195,24 +1149,75 @@ class AsyncCheckProvider(private val config: ConfigStore, private val dataStore:
1195
1149
for (product in products) {
1196
1150
val variations: MutableList <TicketCheckProvider .StatusResultItemVariation > = ArrayList ()
1197
1151
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
+
1198
1168
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_server_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_server_id = list.serverId,
1187
+ item_id = product.id,
1188
+ variation_id = `var `.server_id,
1189
+ ).executeAsOne().toInt()
1190
+
1205
1191
variations.add(TicketCheckProvider .StatusResultItemVariation (
1206
1192
`var `.server_id,
1207
1193
`var `.stringValue,
1208
1194
position_count,
1209
1195
ci_count
1210
1196
))
1211
1197
}
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_server_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_server_id = list.serverId,
1217
+ item_id = product.id,
1218
+ variation_id = - 1L ,
1219
+ ).executeAsOne().toInt()
1220
+
1216
1221
items.add(TicketCheckProvider .StatusResultItem (
1217
1222
product.serverId,
1218
1223
product.internalName,
0 commit comments