OSDN Git Service

Association Notify with Attach
[open-pdm-light/PartList.git] / PartsList / PartsList / app / controllers / PartsMasterController.scala
1 package controllers
2
3 import play.api._
4 import play.api.i18n._
5 import play.api.mvc._
6 import play.api.data._
7 import play.api.data.Forms._
8 import forms._
9 import models._
10 import beans._
11 import utils._
12 import org.squeryl._
13 import org.squeryl.PrimitiveTypeMode._
14 import scala.collection.mutable.ArrayBuffer
15
16 object PartsMasterController extends Controller{
17    
18    val Home = Redirect(routes.PartsMasterController.list(0,""))
19
20    val partRegistForm = Form(
21        mapping(
22            "name" -> nonEmptyText,
23            "atach" -> mapping(
24                "grpName" -> text
25              )(AtachForm.apply)(AtachForm.unapply),
26            "projectName" -> nonEmptyText
27         )(PartForm.apply)(PartForm.unapply)
28     )
29
30         def create = Action { implicit request =>
31           Ok(views.html.createPartForm(partRegistForm))
32         }
33
34         def partRegistration() = Action(parse.multipartFormData) { implicit request =>
35           partRegistForm.bindFromRequest.fold(
36               formWithErrors => BadRequest(views.html.createPartForm(formWithErrors)),
37 //            formWithErrors => BadRequest(views.html.error(formWithErrors)),
38               part => {
39                 inTransaction {
40                   val project = getProject(part.projectName)              
41                    val newPart = PartsListDb.parts.insert(Part(part.name, part.atach, project.id))
42                    val uploadAtach = UploadAtach()
43               request.body.file("atach").map { atach =>
44                 uploadAtach.uploadAtach(atach, newPart.atach.grpName, newPart.id, 0, 0)
45                     }
46                   Home.flashing("success" -> "Part %s has been created".format(part.name))
47                 }  
48               }
49           )
50         }
51
52         def update(id:Long) = Action { implicit request =>
53           inTransaction {
54             val part = getPart(id)
55             val partForm = PartForm(part.name, null, part.project.assign(part.project.head).name)
56                 Ok(views.html.updatePartForm(partRegistForm.fill(partForm), id, part))
57           }
58         }
59
60         def partModification(id:Long) = Action(parse.multipartFormData) { implicit request =>
61           partRegistForm.bindFromRequest.fold(
62               formWithErrors => BadRequest(views.html.updatePartForm(formWithErrors, id , null)),
63               part => {
64                 inTransaction {
65                   val project = getProject(part.projectName)
66                   val updPart = getPart(id)
67                   val uploadAtach = UploadAtach()
68                   updPart.name = part.name
69                   updPart.projectId = project.id
70                   PartsListDb.parts.update(updPart)
71                    request.body.file("atach").map { atach =>
72                      uploadAtach.uploadAtach(atach, part.atach.grpName, updPart.id, 0, 0)
73                     }
74                   Home.flashing("success" -> "Part %s has been created".format(part.name))
75                 }  
76               }
77           )
78         }
79
80         def partDelete(id:Long) = Action {
81           inTransaction {
82             PartsListDb.parts.deleteWhere(p => p.id === id)
83         Home.flashing("success" -> "Part %s has been created".format(id))
84           }
85         }
86         
87         def list(page:Int, key:String) = Action { implicit request =>
88           inTransaction {
89                   val row = Integer.decode(Messages("list.row"))
90                   val buff = PartsListDb.parts.where(p => p.name like key + "%")
91                   Ok(views.html.partsmastershow(buff.page(page*row, row), buff.size, key, page))
92           }
93         }
94         
95         def getPart(id:Long):Part =  {
96           PartsListDb.parts.where(p => p.id === id).head
97         }
98
99         def getProject(name:String):Project = {
100           PartsListDb.projects.where(p => p.name === name).head
101          }
102         
103
104 }