Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Max Mecklin
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 6adad270
authored
Dec 04, 2014
by
Tuomas Riihimäki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Place Slot stuff.
1 parent
229bef52
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
113 additions
and
35 deletions
code/moya-beans-client/ejbModule/fi/codecrew/moya/beans/PlaceBeanLocal.java
code/moya-beans/ejbModule/fi/codecrew/moya/beans/PlaceBean.java
code/moya-beans/ejbModule/fi/codecrew/moya/beans/ProductBean.java
code/moya-beans/ejbModule/fi/codecrew/moya/facade/PlaceSlotFacade.java
code/moya-web/WebContent/neomap/view.xhtml
code/moya-web/src/main/java/fi/codecrew/moya/rest/placemap/v1/PlacemapRestViewV1.java
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/map/PlaceView.java
code/moya-beans-client/ejbModule/fi/codecrew/moya/beans/PlaceBeanLocal.java
View file @
6adad27
...
...
@@ -118,6 +118,6 @@ public interface PlaceBeanLocal {
List
<
Product
>
getMapProducts
(
EventMap
map
);
List
<
PlaceSlot
>
getFreePlaceslots
(
EventUser
user
);
List
<
PlaceSlot
>
getFreePlaceslots
(
EventUser
user
,
Product
product
);
}
code/moya-beans/ejbModule/fi/codecrew/moya/beans/PlaceBean.java
View file @
6adad27
...
...
@@ -238,6 +238,17 @@ public class PlaceBean implements PlaceBeanLocal {
if
(!
place
.
isTaken
()
||
(
permbean
.
hasPermission
(
MapPermission
.
MANAGE_OTHERS
)
&&
permbean
.
getCurrentUser
().
equals
(
place
.
getCurrentUser
())))
{
if
(
place
.
isBuyable
()
||
permbean
.
hasPermission
(
MapPermission
.
MANAGE_OTHERS
))
{
if
(
place
.
getProduct
().
getProductFlags
().
contains
(
ProductFlag
.
PREPAID_CREDIT
))
{
// TODO: We should check there is enough credits...
}
else
{
List
<
PlaceSlot
>
slots
=
placeSlotFacade
.
findFreePlaceSlots
(
user
,
place
.
getProduct
());
if
(
slots
!=
null
&&
!
slots
.
isEmpty
())
{
PlaceSlot
slot
=
slots
.
get
(
0
);
slot
.
setPlace
(
place
);
slot
.
setUsed
(
new
Date
());
}
}
if
(!
place
.
isBuyable
())
{
place
.
setBuyable
(
true
);
}
...
...
@@ -546,6 +557,11 @@ public class PlaceBean implements PlaceBeanLocal {
}
place
.
setCurrentUser
(
null
);
place
.
setReleaseTime
(
null
);
PlaceSlot
slot
=
placeSlotFacade
.
findSlotForPlace
(
place
);
if
(
slot
!=
null
)
{
slot
.
setPlace
(
null
);
slot
.
setUsed
(
null
);
}
return
true
;
...
...
@@ -566,7 +582,7 @@ public class PlaceBean implements PlaceBeanLocal {
}
place
.
setGroup
(
null
);
place
.
setCurrentUser
(
null
);
if
(
place
.
getPlaceReserver
()
!=
null
)
{
GroupMembership
res
=
place
.
getPlaceReserver
();
...
...
@@ -705,12 +721,12 @@ public class PlaceBean implements PlaceBeanLocal {
}
@Override
public
List
<
PlaceSlot
>
getFreePlaceslots
(
EventUser
user
)
{
public
List
<
PlaceSlot
>
getFreePlaceslots
(
EventUser
user
,
Product
product
)
{
user
=
eventUserFacade
.
reload
(
user
);
if
(!
permbean
.
isCurrentUser
(
user
)
&&
!
permbean
.
hasPermission
(
MapPermission
.
MANAGE_OTHERS
))
throw
new
EJBAccessException
(
"User "
+
permbean
.
getCurrentUser
()
+
"tried to fetch free places for user "
+
user
);
return
placeSlotFacade
.
findFreePlaceSlots
(
user
);
return
placeSlotFacade
.
findFreePlaceSlots
(
user
,
product
);
}
@Override
...
...
code/moya-beans/ejbModule/fi/codecrew/moya/beans/ProductBean.java
View file @
6adad27
...
...
@@ -51,6 +51,7 @@ import fi.codecrew.moya.facade.EventUserFacade;
import
fi.codecrew.moya.facade.GroupMembershipFacade
;
import
fi.codecrew.moya.facade.InventoryEventFacade
;
import
fi.codecrew.moya.facade.PlaceFacade
;
import
fi.codecrew.moya.facade.PlaceSlotFacade
;
import
fi.codecrew.moya.facade.ProductFacade
;
import
fi.codecrew.moya.facade.UserFacade
;
import
fi.codecrew.moya.model.AccountEvent
;
...
...
@@ -137,6 +138,9 @@ public class ProductBean implements ProductBeanLocal {
@EJB
private
GroupMembershipFacade
gmfacade
;
@EJB
private
PlaceSlotFacade
slotfacade
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ProductBean
.
class
);
/**
...
...
@@ -198,6 +202,7 @@ public class ProductBean implements ProductBeanLocal {
@Override
public
HashMap
<
Integer
,
BigDecimal
>
getProductLimit
(
Map
<
Integer
,
BigDecimal
>
prodCounts
,
EventUser
user
)
{
Set
<
Role
>
userroles
=
new
HashSet
<
Role
>(
userbean
.
findUsersRoles
(
user
));
HashMap
<
Integer
,
BigDecimal
>
ret
=
new
HashMap
<
Integer
,
BigDecimal
>();
for
(
Entry
<
Integer
,
BigDecimal
>
pc
:
prodCounts
.
entrySet
())
...
...
@@ -206,6 +211,18 @@ public class ProductBean implements ProductBeanLocal {
BigDecimal
lim
=
getPrivateProductLimit
(
prod
,
user
,
prodCounts
,
userroles
);
ret
.
put
(
prod
.
getId
(),
lim
);
// logger.info("Added product limit {} to {}", lim, prod);
if
(!
prod
.
getProductFlags
().
contains
(
ProductFlag
.
PREPAID_CREDIT
))
{
if
(
prod
.
getPlaces
()
!=
null
&&
!
prod
.
getPlaces
().
isEmpty
())
{
int
totalcount
=
prod
.
getPlaces
().
size
();
Long
boughtSlots
=
slotfacade
.
totalSlotcount
(
prod
);
int
freeCount
=
totalcount
-
boughtSlots
.
intValue
();
logger
.
info
(
"Prodlimit totcnt {}, bought {}, free {}, prod {}"
,
totalcount
,
boughtSlots
,
freeCount
,
prod
);
ret
.
put
(
prod
.
getId
(),
BigDecimal
.
valueOf
(
freeCount
));
}
}
}
return
ret
;
}
...
...
@@ -407,16 +424,16 @@ public class ProductBean implements ProductBeanLocal {
return
ret
;
}
@Override
public
AccountEvent
createAccountEvent
(
Product
product
,
BigDecimal
overriddenUnitPrice
,
BigDecimal
quantity
,
EventUser
user
)
{
user
=
eventUserFacade
.
reload
(
user
);
@Override
public
AccountEvent
createAccountEvent
(
Product
product
,
BigDecimal
overriddenUnitPrice
,
BigDecimal
quantity
,
EventUser
user
)
{
user
=
eventUserFacade
.
reload
(
user
);
AccountEvent
ret
=
productPBean
.
createAccountEvent
(
product
,
quantity
,
overriddenUnitPrice
,
user
,
Calendar
.
getInstance
(),
null
);
cardTemplateBean
.
checkPrintedCard
(
user
);
return
ret
;
}
AccountEvent
ret
=
productPBean
.
createAccountEvent
(
product
,
quantity
,
overriddenUnitPrice
,
user
,
Calendar
.
getInstance
(),
null
);
cardTemplateBean
.
checkPrintedCard
(
user
);
return
ret
;
}
@Override
@Override
// @RolesAllowed(ShopPermission.S_LIST_ALL_PRODUCTS)
public
Product
findByBarcode
(
String
barcode
)
{
return
productFacade
.
findProductByBarcode
(
barcode
);
...
...
code/moya-beans/ejbModule/fi/codecrew/moya/facade/PlaceSlotFacade.java
View file @
6adad27
...
...
@@ -38,6 +38,7 @@ import fi.codecrew.moya.model.EventUser;
import
fi.codecrew.moya.model.Place
;
import
fi.codecrew.moya.model.PlaceSlot
;
import
fi.codecrew.moya.model.PlaceSlot_
;
import
fi.codecrew.moya.model.Product
;
@Stateless
@LocalBean
...
...
@@ -57,23 +58,48 @@ public class PlaceSlotFacade extends IntegerPkGenericFacade<PlaceSlot> {
* Returns placeslots this user can use.
*
* @param user
* @param product
* @return
*/
public
List
<
PlaceSlot
>
findFreePlaceSlots
(
EventUser
user
)
{
public
List
<
PlaceSlot
>
findFreePlaceSlots
(
EventUser
user
,
Product
product
)
{
CriteriaBuilder
cb
=
getEm
().
getCriteriaBuilder
();
CriteriaQuery
<
PlaceSlot
>
q
=
cb
.
createQuery
(
PlaceSlot
.
class
);
Root
<
PlaceSlot
>
root
=
q
.
from
(
PlaceSlot
.
class
);
Path
<
Bill
>
bill
=
root
.
get
(
PlaceSlot_
.
bill
);
q
.
where
(
cb
.
equal
(
bill
.
get
(
Bill_
.
user
),
user
),
cb
.
isNotNull
(
bill
.
get
(
Bill_
.
paidDate
)),
cb
.
isNull
(
root
.
get
(
PlaceSlot_
.
used
))
cb
.
isNull
(
root
.
get
(
PlaceSlot_
.
used
)),
cb
.
equal
(
root
.
get
(
PlaceSlot_
.
product
),
product
)
);
return
getEm
().
createQuery
(
q
).
getResultList
();
}
// private List<PlaceSlot> getSlotsForUser(EventUser u) {
//
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<PlaceSlot> cq = cb.createQuery(PlaceSlot.class);
//
// }
public
PlaceSlot
findSlotForPlace
(
Place
place
)
{
CriteriaBuilder
cb
=
getEm
().
getCriteriaBuilder
();
CriteriaQuery
<
PlaceSlot
>
q
=
cb
.
createQuery
(
PlaceSlot
.
class
);
Root
<
PlaceSlot
>
root
=
q
.
from
(
PlaceSlot
.
class
);
q
.
where
(
cb
.
equal
(
root
.
get
(
PlaceSlot_
.
place
),
place
));
PlaceSlot
slot
=
super
.
getSingleNullableResult
(
getEm
().
createQuery
(
q
));
return
slot
;
}
public
Long
totalSlotcount
(
Product
prod
)
{
CriteriaBuilder
cb
=
getEm
().
getCriteriaBuilder
();
CriteriaQuery
<
Long
>
q
=
cb
.
createQuery
(
Long
.
class
);
Root
<
PlaceSlot
>
root
=
q
.
from
(
PlaceSlot
.
class
);
q
.
select
(
cb
.
count
(
root
));
q
.
where
(
cb
.
equal
(
root
.
get
(
PlaceSlot_
.
product
),
prod
));
Long
count
=
super
.
getSingleNullableResult
(
getEm
().
createQuery
(
q
));
return
count
;
}
}
code/moya-web/WebContent/neomap/view.xhtml
View file @
6adad27
...
...
@@ -22,7 +22,8 @@
action=
"#{ajaxMapView.placeClicked()}"
/>
</h:form>
<p:dialog
rendered=
"#{ajaxMapView.isMgmtPermission()}"
visible=
"#{!empty ajaxMapView.place}"
id=
"fbdiag"
>
<p:dialog
rendered=
"#{ajaxMapView.isMgmtPermission()}"
visible=
"#{!empty ajaxMapView.place}"
id=
"fbdiag"
>
Clicked place name : #{ajaxMapView.place.name};
<h:link
rendered=
"#{!empty ajaxMapView.place}"
outcome=
"/place/edit"
>
<f:param
name=
"placeid"
value=
"#{ajaxMapView.place.id}"
/>
...
...
@@ -34,9 +35,10 @@
<h:outputScript
target=
"head"
library=
"seatjs"
name=
"d3-tip.js"
/>
<h:outputScript
target=
"head"
library=
"seatjs"
name=
"seatmap.js"
/>
<h:outputStylesheet
library=
"seatjs"
name=
"placemap.css"
/>
<button
onclick=
"px.update()"
>
Update
</button><br/>
<svg
id=
"seatmap"
style=
"margin: auto; border: 1px solid black;"
width=
"#{ajaxMapView.map.width}px"
height=
"#{ajaxMapView.map.height}px"
/>
width=
"#{ajaxMapView.map.width}px"
height=
"#{ajaxMapView.map.height}px"
/>
<script
type=
"text/javascript"
>
px
=
placemap
({
element
:
document
.
getElementById
(
"seatmap"
),
...
...
@@ -45,7 +47,7 @@
onclick
:
function
(
d
)
{
px
.
update
();
//alert(d);
#
{
ajaxMapView
.
isMgmtPermission
()?
'placeClicker([{name: \'placeId\', value: d}])'
:
''
}
//
#{ajaxMapView.isMgmtPermission()?'placeClicker([{name: \'placeId\', value: d}])':''}
return
false
;
}
});
...
...
code/moya-web/src/main/java/fi/codecrew/moya/rest/placemap/v1/PlacemapRestViewV1.java
View file @
6adad27
...
...
@@ -20,12 +20,15 @@ import javax.ws.rs.core.Response.ResponseBuilder;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
fi.codecrew.moya.beans.PermissionBeanLocal
;
import
fi.codecrew.moya.beans.PlaceBeanLocal
;
import
fi.codecrew.moya.model.EventMap
;
import
fi.codecrew.moya.model.EventUser
;
import
fi.codecrew.moya.model.Place
;
import
fi.codecrew.moya.rest.pojo.placemap.PlacemapMapRootPojo
;
import
fi.codecrew.moya.rest.pojo.placemap.SimplePlacePojo
;
import
fi.codecrew.moya.rest.pojo.placemap.SimplePlacelistRoot
;
import
fi.codecrew.moya.web.annotations.SelectedUser
;
import
fi.codecrew.moya.web.cdiview.user.UserView
;
@RequestScoped
...
...
@@ -38,6 +41,12 @@ public class PlacemapRestViewV1 {
private
PlaceBeanLocal
placebean
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
PlacemapRestViewV1
.
class
);
@EJB
private
PermissionBeanLocal
permbean
;
@Inject
private
UserView
userView
;
// @GET
// @Path("/maps")
// public PlacemapMapRootPojo getMaps()
...
...
@@ -50,7 +59,7 @@ public class PlacemapRestViewV1 {
@POST
@Path
(
"/place/{id}/reserve"
)
public
void
reservePlace
()
{
logger
.
warn
(
"Reserving not yet implemented"
);
logger
.
warn
(
"Reserving not yet implemented"
);
}
@GET
...
...
@@ -70,7 +79,7 @@ public class PlacemapRestViewV1 {
EventMap
map
=
placebean
.
findMap
(
id
);
byte
[]
data
=
map
.
getMapData
();
ResponseBuilder
ret
=
Response
.
ok
(
data
,
"image/png"
);
ret
.
expires
(
new
Date
(
System
.
currentTimeMillis
()
+
6
*
60
*
60
*
1000
));
ret
.
expires
(
new
Date
(
System
.
currentTimeMillis
()
+
6
*
60
*
60
*
1000
));
return
ret
.
build
();
}
...
...
@@ -81,34 +90,42 @@ public class PlacemapRestViewV1 {
{
EventMap
map
=
placebean
.
findMap
(
mapId
);
return
SimplePlacelistRoot
.
wrap
(
map
.
getPlaces
(),
null
);
EventUser
user
=
null
;
if
(
userView
!=
null
)
{
user
=
userView
.
getSelectedUser
();
}
return
SimplePlacelistRoot
.
wrap
(
map
.
getPlaces
(),
user
);
}
@GET
@Path
(
"/place/{place}"
)
public
SimplePlacelistRoot
getPlace
(
@PathParam
(
"place"
)
Integer
placeId
)
{
List
<
Place
>
thisplace
=
new
ArrayList
<
Place
>();
List
<
Place
>
thisplace
=
new
ArrayList
<
Place
>();
thisplace
.
add
(
placebean
.
find
(
placeId
));
return
SimplePlacelistRoot
.
wrap
(
thisplace
,
eventuser
.
getSelected
User
());
return
SimplePlacelistRoot
.
wrap
(
thisplace
,
permbean
.
getCurrent
User
());
}
@POST
@Path
(
"/place/{place}"
)
public
SimplePlacelistRoot
setPlace
(
@PathParam
(
"place"
)
Integer
placeId
)
public
SimplePlacelistRoot
togglePlaceReservation
(
@PathParam
(
"place"
)
Integer
placeId
)
{
EventUser
user
=
null
;
if
(
userView
!=
null
)
{
user
=
userView
.
getSelectedUser
();
}
Place
p
=
placebean
.
find
(
placeId
);
if
(
p
.
isReservedFor
(
eventuser
.
getSelectedUser
()))
{
if
(
p
.
isReservedFor
(
user
))
{
placebean
.
releasePlace
(
p
);
}
else
if
(
p
.
isBuyable
()
&&
!
p
.
isTaken
())
{
placebean
.
reservePlace
(
p
,
user
);
}
else
if
(
p
.
isBuyable
()
&&
!
p
.
isTaken
())
{
placebean
.
reservePlace
(
p
,
eventuser
.
getSelectedUser
());
}
p
=
placebean
.
find
(
placeId
);
List
<
Place
>
thisplace
=
new
ArrayList
<
Place
>();
List
<
Place
>
thisplace
=
new
ArrayList
<
Place
>();
thisplace
.
add
(
p
);
return
SimplePlacelistRoot
.
wrap
(
thisplace
,
eventuser
.
getSelectedUser
());
return
SimplePlacelistRoot
.
wrap
(
thisplace
,
user
);
}
}
code/moya-web/src/main/java/fi/codecrew/moya/web/cdiview/map/PlaceView.java
View file @
6adad27
...
...
@@ -142,7 +142,7 @@ public class PlaceView extends GenericCDIView {
logger
.
debug
(
"Did not have enought credits to reserve place! required {} , got {}"
,
price
,
balance
);
}
else
{
List
<
PlaceSlot
>
placeslots
=
placebean
.
getFreePlaceslots
(
user
);
List
<
PlaceSlot
>
placeslots
=
placebean
.
getFreePlaceslots
(
user
,
place
.
getProduct
()
);
canReserve
=
placeslots
.
size
()
>
0
;
}
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment