@Override
public PromotionLevel newPromotionLevel(PromotionLevel promotionLevel) {
try {
Integer orderNbValue = getFirstItem(
"SELECT MAX(ORDERNB) FROM promotion_levels WHERE BRANCHID = :branchId",
params("branchId", promotionLevel.getBranch().id()),
Integer.class
);
int orderNb = orderNbValue != null ? orderNbValue + 1 : 0;
int id = dbCreate(
"INSERT INTO PROMOTION_LEVELS(BRANCHID, NAME, DESCRIPTION, ORDERNB, CREATION, CREATOR) VALUES (:branchId, :name, :description, :orderNb, :creation, :creator)",
params("name", promotionLevel.getName())
.addValue("description", promotionLevel.getDescription())
.addValue("branchId", promotionLevel.getBranch().id())
.addValue("orderNb", orderNb)
.addValue("creation", dateTimeForDB(promotionLevel.getSignature().getTime()))
.addValue("creator", promotionLevel.getSignature().getUser().getName())
);
return promotionLevel.withId(id(id));
} catch (DuplicateKeyException ex) {
throw new PromotionLevelNameAlreadyDefinedException(promotionLevel.getName());
}
}