import modules._
import scala.io.Source
import java.io.FileInputStream
+import scala.concurrent.Future
+import play.api.libs.concurrent.Execution.Implicits._
object PartsListController extends Controller{
val inject = Guice.createInjector(new ServiceModules)
}
}
- def downLoad(opt:Int, page:Int, key:String, relationKey:String) = AuthAction {
+ def downLoadFuture(opt:Int, page:Int, key:String, relationKey:String) = AuthAction {
Action { implicit request =>
if(request == null) {
Ok(views.html.errors.errorNotAuthentication())
} else {
- inTransaction{
- val partsBuffer = PartsList().getPartsBuffer(opt, page, key, relationKey)
- var totalCost:Long =0
- for(partBuffer <- partsBuffer) {
- totalCost += partBuffer.cost
- }
- val attachment = "attachment; filename=" + key + "_download.csv"
- Ok(views.html.partsListsCsv(partsBuffer)).withHeaders(CONTENT_DISPOSITION -> attachment).as("text/csv")
+ val futureOfPartsBuffer: Future[Seq[PartsListShowBean]] = Future {
+ PartsList().getPartsBuffer(opt, page, key, relationKey)
+ }
+ val attachment = "attachment; filename=" + key + "_download.csv"
+ Async {
+ futureOfPartsBuffer.map { fpb =>
+ Ok(views.html.partsListsCsv(fpb)).withHeaders(CONTENT_DISPOSITION -> attachment).as("text/csv")
}
- }
+ }
+ }
}
}
package controllers.services
import scala.collection.immutable.Map
import scala.collection.immutable.Seq
+import org.squeryl.PrimitiveTypeMode._
import beans._
import models._
import models.services._
case class PartsList() {
def getPartsBuffer(opt:Int, page:Int, key:String, relationKey:String):Seq[PartsListShowBean] = {
+ inTransaction {
var partsBuffer = Seq[PartsListShowBean]()
val targetParts = PartManager().getByName(key)
if(targetParts.size != 0) {
}
}
return partsBuffer
+ }
}
def getMatrixPartsList(partsListBeans: Seq[Seq[PartsListShowBean]], allChildren: Seq[Part]): Map[Part, Seq[MultiPartsListBean]] = {
</div>
<div id="action2">
- @helper.form(action=routes.PartsListController.downLoad(opt, page, key, relationKey)) {
+ @helper.form(action=routes.PartsListController.downLoadFuture(opt, page, key, relationKey)) {
<input type="hidden" name="opt" value="@opt">
<input type="hidden" name="key" value="@key">
<input type="hidden" name="relationKey" value="@relationKey">
# Home page
GET / controllers.Application.index
GET /single_partslist controllers.PartsListController.index(opt:Int=0, page:Int, key:String, relationKey:String)
-GET /single_partslist_download controllers.PartsListController.downLoad(opt:Int, page:Int, key:String, relationKey:String)
+GET /single_partslist_download_future controllers.PartsListController.downLoadFuture(opt:Int, page:Int, key:String, relationKey:String)
GET /multi_partslist controllers.PartsListController.index(opt:Int=1, page:Int, key:String, relationKey:String)
POST /multi_partslist controllers.PartsListController.index(opt:Int=1, page:Int, key:String, relationKey:String)
GET /matrix_partslists controllers.PartsListController.matrixPartList(project:String)