Commit 6b9ad566 by Liv Haapala

List users with unused place codes

1 parent 00e96261
...@@ -28,6 +28,8 @@ import javax.persistence.PersistenceContext; ...@@ -28,6 +28,8 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.sun.enterprise.security.webservices.GFServerPipeCreator;
import fi.codecrew.moya.enums.apps.SpecialPermission; import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.ApprovalFacade; import fi.codecrew.moya.facade.ApprovalFacade;
...@@ -586,6 +588,9 @@ public class UserBean implements UserBeanLocal { ...@@ -586,6 +588,9 @@ public class UserBean implements UserBeanLocal {
return user; return user;
} }
@Override @Override
public SearchResult<User> getEventUsers(SearchQuery search) { public SearchResult<User> getEventUsers(SearchQuery search) {
if (search.getSearch() == null || search.getSearch().isEmpty()) if (search.getSearch() == null || search.getSearch().isEmpty())
...@@ -615,6 +620,20 @@ public class UserBean implements UserBeanLocal { ...@@ -615,6 +620,20 @@ public class UserBean implements UserBeanLocal {
returnUsers = new SearchResult<EventUser>(newSearchList, (long) newSearchList.size()); returnUsers = new SearchResult<EventUser>(newSearchList, (long) newSearchList.size());
} }
else if(searchQuery.isUsersWithUnusedCodes()){
List<EventUser> newSearchList = new ArrayList<EventUser>();
List<GroupMembership> groupMembers = new ArrayList<GroupMembership>();
groupMembers = gmfacade.findAllWithoutUser();
for (GroupMembership member : groupMembers) {
PlaceGroup group = member.getPlaceGroup();
if(group != null && !newSearchList.contains(group.getCreator())) {
newSearchList.add(group.getCreator());
}
}
returnUsers = new SearchResult<EventUser>(newSearchList, (long)newSearchList.size());
}
return returnUsers; return returnUsers;
} }
......
...@@ -108,4 +108,17 @@ public class GroupMembershipFacade extends IntegerPkGenericFacade<GroupMembershi ...@@ -108,4 +108,17 @@ public class GroupMembershipFacade extends IntegerPkGenericFacade<GroupMembershi
// return p.getResultList(); // return p.getResultList();
} }
public List<GroupMembership> findAllWithoutUser() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
Root<GroupMembership> root = cq.from(GroupMembership.class);
Path<PlaceGroup> pg = root.get(GroupMembership_.placeGroup);
cq.where(cb.isNull(root.get(GroupMembership_.user)),
cb.equal(pg.get(PlaceGroup_.event), eventbean.getCurrentEvent())
);
return getEm().createQuery(cq).getResultList();
}
} }
...@@ -16,6 +16,7 @@ public class UserSearchQuery extends SearchQuery { ...@@ -16,6 +16,7 @@ public class UserSearchQuery extends SearchQuery {
private List<Role> filterRoles = new ArrayList<Role>(); private List<Role> filterRoles = new ArrayList<Role>();
private boolean onlyThisEvent = true; private boolean onlyThisEvent = true;
private boolean placeAssoc = false; private boolean placeAssoc = false;
private boolean usersWithUnusedCodes = false;
private DatabaseHasCompare requireImage = DatabaseHasCompare.NONE; private DatabaseHasCompare requireImage = DatabaseHasCompare.NONE;
private BigDecimal accountSaldo; private BigDecimal accountSaldo;
...@@ -34,6 +35,14 @@ public class UserSearchQuery extends SearchQuery { ...@@ -34,6 +35,14 @@ public class UserSearchQuery extends SearchQuery {
this.onlyThisEvent = onlyThisEvent; this.onlyThisEvent = onlyThisEvent;
} }
public boolean isUsersWithUnusedCodes() {
return usersWithUnusedCodes;
}
public void setUsersWithUnusedCodes(boolean usersWithUnusedCodes) {
this.usersWithUnusedCodes = usersWithUnusedCodes;
}
public List<Role> getFilterRoles() { public List<Role> getFilterRoles() {
return filterRoles; return filterRoles;
} }
......
...@@ -42,6 +42,11 @@ ...@@ -42,6 +42,11 @@
<h:selectBooleanCheckbox id="onlythisevent" value="#{userSearchView.searchQuery.onlyThisEvent}" /> <h:selectBooleanCheckbox id="onlythisevent" value="#{userSearchView.searchQuery.onlyThisEvent}" />
<h:outputLabel for="onlythisevent" value="#{i18n['userlist.onlythisevent']}" /> <h:outputLabel for="onlythisevent" value="#{i18n['userlist.onlythisevent']}" />
<br /> <br />
<h:selectBooleanCheckbox id="userswithunusedcodes" value="#{userSearchView.searchQuery.usersWithUnusedCodes}" />
<h:outputLabel for="userswithunusedcodes" value="#{i18n['userlist.usersWithUnusedCodes']}" />
<br />
<h:inputText value="#{userSearchView.search}" /> <h:inputText value="#{userSearchView.search}" />
<h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" /> <h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" />
</h:panelGroup> </h:panelGroup>
......
...@@ -87,8 +87,6 @@ error.error = You have encountered an error. ...@@ -87,8 +87,6 @@ error.error = You have encountered an error.
eventorg.create = Create eventorg.create = Create
game.active = Aktiivinen game.active = Aktiivinen
usercart.showoverview=Vie tarkastusn\u00E4kym\u00E4\u00E4n
usercart.downloadCsv=CSV
game.codecount = Avattuja game.codecount = Avattuja
game.codes.available = Lisenssikoodit game.codes.available = Lisenssikoodit
game.codes.opened = Avatut lisenssikoodit game.codes.opened = Avatut lisenssikoodit
...@@ -167,8 +165,11 @@ resetMail.username = Username ...@@ -167,8 +165,11 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password. resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent resetmailSent.header = Email sent
subnavi.cards = \t\t subnavi.cards = \u0009\u0009
topnavi.license = Lisenssikoodit topnavi.license = Lisenssikoodit
user.unauthenticated = Kirjautumaton user.unauthenticated = Kirjautumaton
usercart.downloadCsv = CSV
usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
...@@ -904,6 +904,7 @@ userlist.saldofilter = Saldo ...@@ -904,6 +904,7 @@ userlist.saldofilter = Saldo
userlist.search = Search userlist.search = Search
userlist.searchcount = Result count userlist.searchcount = Result count
userlist.showAdvancedSearch = Advanced search userlist.showAdvancedSearch = Advanced search
userlist.usersWithUnusedCodes = List this event's users with unused place codes
usertitle.managingUser = Shop usertitle.managingUser = Shop
......
...@@ -18,8 +18,6 @@ accountEvent.seller = Myyj\u00E4 ...@@ -18,8 +18,6 @@ accountEvent.seller = Myyj\u00E4
accountEvent.total = Yhteens\u00E4 accountEvent.total = Yhteens\u00E4
accountEvent.unitPrice = Yksikk\u00F6hinta accountEvent.unitPrice = Yksikk\u00F6hinta
bill.allowStatistics = Tietoni saa julkaista tilastoissa
actionlog.create.header = Luo uusi ActionMessage actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti actionlog.create.message = Viesti
actionlog.create.role = Kohderooli actionlog.create.role = Kohderooli
...@@ -58,10 +56,11 @@ bill.addr3 = Osoite 3 ...@@ -58,10 +56,11 @@ bill.addr3 = Osoite 3
bill.addr4 = Osoite 4 bill.addr4 = Osoite 4
bill.addr5 = Osoite 5 bill.addr5 = Osoite 5
bill.address = Maksajan osoite bill.address = Maksajan osoite
bill.allowStatistics = Tietoni saa julkaista tilastoissa
bill.billAmount = Laskun summa bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu bill.billIsPaid = Lasku on maksettu
bill.billLines = Tuotteet bill.billLines = Tuotteet
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan\! bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan!
bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi
bill.billNumber = Numero bill.billNumber = Numero
bill.billPaidDate = Maksup\u00E4iv\u00E4 bill.billPaidDate = Maksup\u00E4iv\u00E4
...@@ -130,10 +129,10 @@ cart.total = Yhteens\u00E4 ...@@ -130,10 +129,10 @@ cart.total = Yhteens\u00E4
checkout.cancel.errorMessage = Virhe peruutuksen vahvistuksessa\u2026 Ilmoita t\u00E4st\u00E4 osoitteeseen code@codecrew.fi checkout.cancel.errorMessage = Virhe peruutuksen vahvistuksessa\u2026 Ilmoita t\u00E4st\u00E4 osoitteeseen code@codecrew.fi
checkout.cancel.successMessage = Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi. checkout.cancel.successMessage = Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.reject.errorMessage = Virhe hyl\u00E4tyn maksun k\u00E4sittelyss\u00E4. Raportoi t\u00E4m\u00E4 virhe osoitteeseen\: code@codecrew.fi checkout.reject.errorMessage = Virhe hyl\u00E4tyn maksun k\u00E4sittelyss\u00E4. Raportoi t\u00E4m\u00E4 virhe osoitteeseen: code@codecrew.fi
checkout.reject.successMessage = Maksu hyl\u00E4tty. Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi. checkout.reject.successMessage = Maksu hyl\u00E4tty. Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.return.errorDelayed = Virhe viiv\u00E4stetyn maksun vahvistuksessa. Ota yhteytt\u00E4 code@codecrew.fi checkout.return.errorDelayed = Virhe viiv\u00E4stetyn maksun vahvistuksessa. Ota yhteytt\u00E4 code@codecrew.fi
checkout.return.errorMessage = Virhe maksun onnistuneen maksun vahvistuksessa. Raportoi t\u00E4m\u00E4 virhe yll\u00E4pidolle\: code@codecrew.fi checkout.return.errorMessage = Virhe maksun onnistuneen maksun vahvistuksessa. Raportoi t\u00E4m\u00E4 virhe yll\u00E4pidolle: code@codecrew.fi
checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvistet\u00E4\u00E4n my\u00F6hemp\u00E4n\u00E4 ajankohtana, yleens\u00E4 noin tunnin sis\u00E4ll\u00E4. checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvistet\u00E4\u00E4n my\u00F6hemp\u00E4n\u00E4 ajankohtana, yleens\u00E4 noin tunnin sis\u00E4ll\u00E4.
checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu. Voit siirty\u00E4 eteenp\u00E4in tilauksessasi. checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu. Voit siirty\u00E4 eteenp\u00E4in tilauksessasi.
...@@ -169,7 +168,7 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot ...@@ -169,7 +168,7 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot
entry.edit = Muokkaa entry.edit = Muokkaa
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon\: error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen. error.error = Olet kohdannut virheen.
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
...@@ -184,7 +183,7 @@ event.startTime = Aloitusp\u00E4iv\u00E4 ...@@ -184,7 +183,7 @@ event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.domainname = Domain eventdomain.domainname = Domain
eventdomain.remove = Poista eventdomain.remove = Poista
eventmap.active = Aktiivinen\t eventmap.active = Aktiivinen\u0009
eventmap.buyable.like = Paikat eventmap.buyable.like = Paikat
eventmap.buyable.lock = Lukitse paikat eventmap.buyable.lock = Lukitse paikat
eventmap.buyable.release = Vapauta paikat eventmap.buyable.release = Vapauta paikat
...@@ -305,7 +304,7 @@ generic.sure.yes = Kyll\u00E4 ...@@ -305,7 +304,7 @@ generic.sure.yes = Kyll\u00E4
global.cancel = Peruuta global.cancel = Peruuta
global.copyright = Codecrew Ry global.copyright = Codecrew Ry
global.eventname = Tapahtumanimi global.eventname = Tapahtumanimi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4\! global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle. global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna global.save = Tallenna
...@@ -448,7 +447,7 @@ page.bill.placemap.header = Paikkakartta ...@@ -448,7 +447,7 @@ page.bill.placemap.header = Paikkakartta
page.bill.show.header = Laskun tiedot page.bill.show.header = Laskun tiedot
page.checkout.cancel.header = Maksu peruutettu. page.checkout.cancel.header = Maksu peruutettu.
page.checkout.delayed.header = Viiv\u00E4stetty maksu page.checkout.delayed.header = Viiv\u00E4stetty maksu
page.checkout.reject.header = Maksu hyl\u00E4tty\! page.checkout.reject.header = Maksu hyl\u00E4tty!
page.checkout.return.header = Maksu vahvistettu page.checkout.return.header = Maksu vahvistettu
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.place.mygroups.header = Paikkaryhm\u00E4t page.place.mygroups.header = Paikkaryhm\u00E4t
...@@ -477,7 +476,7 @@ passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et o ...@@ -477,7 +476,7 @@ passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et o
passwordreset.mailSubject = [{0}] Salasanan vaihtaminen passwordreset.mailSubject = [{0}] Salasanan vaihtaminen
passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4. passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia\! permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
permissiondenied.header = P\u00E4\u00E4sy kielletty permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle. permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
...@@ -525,7 +524,7 @@ placegroup.printPdf = Tulosta paikkakoodit ...@@ -525,7 +524,7 @@ placegroup.printPdf = Tulosta paikkakoodit
placegroupview.groupCreator = Varaaja placegroupview.groupCreator = Varaaja
placegroupview.header = Omat paikat placegroupview.header = Omat paikat
placegroupview.noMemberships = Ei omia paikkoja placegroupview.noMemberships = Ei omia paikkoja
placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui\! placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui!
placegroupview.placeReleased = Paikka {0} vapautettu placegroupview.placeReleased = Paikka {0} vapautettu
placegroupview.releasePlace = Vapauta placegroupview.releasePlace = Vapauta
placegroupview.reservationName = Paikka placegroupview.reservationName = Paikka
...@@ -536,7 +535,7 @@ placetoken.commit = Liit\u00E4 ...@@ -536,7 +535,7 @@ placetoken.commit = Liit\u00E4
placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi
placetoken.placelist = Omat paikat placetoken.placelist = Omat paikat
placetoken.token = Paikkakoodi placetoken.token = Paikkakoodi
placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt\! Tarkista koodi. placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt! Tarkista koodi.
placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n. placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n.
poll.answer = Vastaa kyselyyn poll.answer = Vastaa kyselyyn
...@@ -763,7 +762,7 @@ svm.failure.errorMessage = Verkkomaksuvirhe. ...@@ -763,7 +762,7 @@ svm.failure.errorMessage = Verkkomaksuvirhe.
svm.failure.successMessage = Maksuvirhe onnistunut. ( Maksu mahdollisesti merkitty jo maksetuksi ) svm.failure.successMessage = Maksuvirhe onnistunut. ( Maksu mahdollisesti merkitty jo maksetuksi )
svm.pending.errorMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse. svm.pending.errorMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.pending.successMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse. svm.pending.successMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.success.errorMessage = Verkkomaksua ei voitu verifioida\! Virheest\u00E4 on raportoitu eteenp\u00E4in. svm.success.errorMessage = Verkkomaksua ei voitu verifioida! Virheest\u00E4 on raportoitu eteenp\u00E4in.
svm.success.successMessage = Verkkomaksu onnistui. svm.success.successMessage = Verkkomaksu onnistui.
template.loggedInAs = Kirjautunut tunnuksella template.loggedInAs = Kirjautunut tunnuksella
...@@ -888,15 +887,16 @@ userlist.saldofilter = Tilin saldo ...@@ -888,15 +887,16 @@ userlist.saldofilter = Tilin saldo
userlist.search = Etsi userlist.search = Etsi
userlist.searchcount = Tuloksia userlist.searchcount = Tuloksia
userlist.showAdvancedSearch = Tarkennettu haku userlist.showAdvancedSearch = Tarkennettu haku
userlist.usersWithUnusedCodes = Lista t\u00E4m\u00E4n tapahtuman k\u00E4ytt\u00E4jist\u00E4, joilla on k\u00E4ytt\u00E4m\u00E4tt\u00F6mi\u00E4 paikkakoodeja
usertitle.managingUser = Kauppa usertitle.managingUser = Kauppa
userview.invalidEmail = Virheeliinen s\u00E4hk\u00F6postiosoite userview.invalidEmail = Virheeliinen s\u00E4hk\u00F6postiosoite
userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4. userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4.
userview.oldPasswordError = V\u00E4\u00E4r\u00E4 salasana\! userview.oldPasswordError = V\u00E4\u00E4r\u00E4 salasana!
userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4. userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
userview.passwordsChanged = Salasana vaihdettu userview.passwordsChanged = Salasana vaihdettu
userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat\! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen. userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen.
userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4. userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4.
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen. viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!