package controllers import play.api._ import play.api.data._ import play.api.data.Forms._ import play.api.mvc._ import play.api.db.slick._ import play.api.db.slick.Config.driver.simple._ import play.api.Play.current import scala.concurrent.Future import models._ case class SaleData(endDate: java.sql.Date, name: String, shortDescription: String, longDescription: String, initialPrice: BigDecimal) object Sale extends Controller { def sales = Auth { implicit request => DB.withSession { implicit session => val currentDateTime = new java.sql.Timestamp((new java.util.Date).getTime) val sales = Views.Sales.filter(_.endDate > currentDateTime).sortBy(_.endDate.asc).run Ok(views.html.pages.sales.currentSales(sales)) } } val saleForm = Form( mapping( "endDate" -> sqlDate, "name" -> nonEmptyText(minLength = 5, maxLength = 20), "shortDescription" -> nonEmptyText(minLength = 10, maxLength = 30), "longDescription" -> nonEmptyText, "initialPrice" -> bigDecimal(precision = 8, scale = 2) )(SaleData.apply)(SaleData.unapply) ) def sell = Auth { implicit request => if (request.account.isEmpty) { Redirect(routes.Authentication.login()) .flashing("error" -> "Authentication required") } else { Ok(views.html.pages.sales.sellForm(saleForm)) } } def sellSubmit = Auth { implicit request => if (request.account.isEmpty) { Redirect(routes.Authentication.login()) .flashing("error" -> "Authentication required") } else { DB.withSession { implicit session => saleForm.bindFromRequest.fold( formWithErrors => { BadRequest(views.html.pages.sales.sellForm(formWithErrors)) }, validForm => { val items = Tables.Items returning Tables.Items.map(_.uuid) val uuid = items += Tables.Item( userUuid = request.account.get.userUuid.get, startDate = new java.sql.Timestamp(new java.util.Date().getTime), endDate = new java.sql.Timestamp(validForm.endDate.getTime), itemName = validForm.name, shortDesc = validForm.shortDescription, longDesc = validForm.longDescription, initialPrice = validForm.initialPrice ) Redirect(routes.Application.index()) .flashing("success" -> "Your item is now on sale.") } ) } } } def item(itemUuid: String) = TODO def bids(itemUuid: String) = TODO def bidSubmit(itemUuid: String) = TODO }