OSDN Git Service

Refactoring
[open-pdm-light/PartList.git] / PartsList / PartsList / app / controllers / DesignChangeController.scala
1 package controllers
2 import play.api._
3 import play.api.i18n._
4 import play.api.mvc._
5 import play.api.data._
6 import play.api.data.Forms._
7 import controllers.services._
8 import models.services._
9 import forms._
10 import beans._
11 import org.squeryl._
12 import org.squeryl.PrimitiveTypeMode._
13 import org.squeryl.annotations.Column
14 import scala.collection.mutable.ArrayBuffer
15 import models.PartRelation
16
17 object DesignChangeController extends Controller{
18    val Home = Redirect(routes.DesignChangeController.list(0,""))
19    val Home2 = Redirect(routes.PartsListController.index(0,0,""))
20
21    val designChangeRegistForm = Form(
22       mapping(
23           "dcNo" -> nonEmptyText,
24           "dcDescription" -> nonEmptyText
25        )(DesignChangeForm.apply)(DesignChangeForm.unapply)
26   )
27   
28    val designChangeRelationRegistForm = Form(
29        mapping(
30             "partsListBeanBefore" -> mapping(
31                 "parent" -> text,
32                 "child" -> text,
33                 "quantity" -> longNumber
34                 )(PartsListBean.apply)(PartsListBean.unapply),
35               "partsListBeanAfter" -> mapping(
36                   "parent" -> nonEmptyText,
37                   "child" -> text,
38                   "quantity" -> longNumber
39                   )(PartsListBean.apply)(PartsListBean.unapply),
40             "dcno" -> nonEmptyText
41          )(DesignChangeRelationForm.apply)(DesignChangeRelationForm.unapply)
42      )
43
44   
45   def create = Action { implicit request =>
46     Ok(views.html.createDesignChangeForm(designChangeRegistForm))
47   }
48   
49   def designChangeCoverRegistration() = Action { implicit request =>
50     designChangeRegistForm.bindFromRequest.fold(
51         formWithErrors => BadRequest(views.html.createDesignChangeForm(formWithErrors)),
52         designChange => {
53           inTransaction {
54             DesignChangeManager().insert(designChange)
55           }
56                   Home.flashing("success" -> "Design Change %s has been created".format(designChange.dcNo))       
57         }
58      )
59   }
60   
61   def designChangeCoverModify(designChangeId: Long, dcSeq: Long, message: String) = Action { implicit request =>
62     inTransaction {
63       var partBuffer = ArrayBuffer[PartsListBean]()
64       val designChange = DesignChangeManager().getById(designChangeId)
65       val designChangeForm = DesignChangeForm(designChange.dcNo, designChange.dcDescription)
66       val designChangeBuffer = DesignChangeManager().getDesinChangeInformation(designChange)
67       if(dcSeq != 0) {
68         val delRelation = designChange.delPartRelation.where(pr => pr.dcSeq === dcSeq).head
69         for(returnPartBuffer <- PartRecursion().up(delRelation.child.head, 1)) {
70           partBuffer += returnPartBuffer
71         }
72       }
73       Ok(views.html.updateDesignChangeForm(designChangeRegistForm.fill(designChangeForm), designChangeId, designChangeBuffer, designChange.addPartRelation, partBuffer, dcSeq, message))
74     }
75   }
76
77   def designChangeCoverModification(id: Long) = Action{ implicit request =>
78     designChangeRegistForm.bindFromRequest.fold(
79         formWithErrors => BadRequest(views.html.updateDesignChangeForm(formWithErrors, id, null, null, null, 0, null)),
80         designChange => {
81           inTransaction {
82             DesignChangeManager().update(id, designChange)
83           }
84           Home.flashing("success" -> "Design Change %s has been created".format(designChange.dcNo))       
85         }
86     )
87   }
88   
89   def list(page: Int, key: String) = Action { implicit request =>
90     inTransaction {
91       val row = Integer.decode(Messages("list.row"))
92       val buff = DesignChangeManager().list(key)
93       Ok(views.html.designchangelist(buff.page(page*row, row), buff.size, key, page))
94     }
95   }
96   
97   def designChangeCancel(id: Long) = Action { 
98     inTransaction {
99       DesignChangeManager().designChangeCancel(id)
100       Redirect(routes.DesignChangeController.designChangeCoverModify(id, 0, ""))
101      }
102   }
103   
104   def designChangeCancelByLine(designChangeId: Long, delParentName: String, delChildName: String, addParentName: String, addChildName: String) = Action {
105     inTransaction {
106       val designChange = DesignChangeManager().getById(designChangeId)
107       if(!delParentName.isEmpty()) {
108         val delParent = PartManager().getByName(delParentName)
109         val delChild = PartManager().getByName(delChildName)
110         val cancelDelRelation = designChange.delPartRelation.where(pr => pr.parentId === delParent.id and pr.childId === delChild.id).head
111         DesignChangeManager().designChangeDelCancelBySeq(designChangeId, cancelDelRelation.dcSeq)
112       }
113       if(!addParentName.isEmpty()) {
114         val addParent = PartManager().getByName(addParentName)
115         val addChild = PartManager().getByName(addChildName)
116         val cancelAddRelation = designChange.addPartRelation.where(pr => pr.parentId === addParent.id and pr.childId === addChild.id).head
117         DesignChangeManager().designChangeAddCancelBySeq(designChangeId, cancelAddRelation.dcSeq)
118       }
119     }
120     Redirect(routes.DesignChangeController.designChangeCoverModify(designChangeId, 0, ""))    
121   }
122   
123   def designChangeForm(parentName:String, childName:String) = Action { implicit request =>
124     inTransaction {
125       var designChangeRelationForm = DesignChangeRelationForm(null, null, "")
126        // 設計変更追加の場合、変更前の上位品番はセットしない。
127       if(childName.isEmpty()) {
128         designChangeRelationForm = DesignChangeRelationForm(generatePartsListBean("", childName), generatePartsListBean(parentName, childName), "")
129       } else {
130         designChangeRelationForm = DesignChangeRelationForm(generatePartsListBean(parentName, childName), generatePartsListBean(parentName, childName), "")
131        }
132       Ok(views.html.designChangeRelationForm(designChangeRelationRegistForm.fill(designChangeRelationForm), ""))
133       }
134         }
135
136         def designChange() = Action { implicit request =>
137           designChangeRelationRegistForm.bindFromRequest.fold(
138               formWithErrors => BadRequest(views.html.designChangeRelationForm(formWithErrors, "")),
139               data => {
140                   inTransaction {
141                     val message= DesignChangeManager().designChange(data)
142                     if(message == null) {
143                       Home2.flashing("success" -> "Relation %s has been changed".format(data.partsListBeanBefore.parent + "/" + data.partsListBeanBefore.child))
144                     } else {
145                       Ok(views.html.designChangeRelationForm(designChangeRelationRegistForm.fill(data), message))
146                     }
147                   }
148               }
149           )
150         }
151
152   def designChangeAppend(designChangeId: Long, dcSeq: Long, targetParentName: String) = Action {
153     inTransaction {
154       val designChange = DesignChangeManager().getById(designChangeId)
155       val delRelation =designChange.delPartRelation.where(pr => pr.dcSeq === dcSeq).head 
156       val addRelation =designChange.addPartRelation.where(pr => pr.dcSeq === dcSeq).head 
157       val delPart = delRelation.child.head
158       val addPart = addRelation.child.head
159       val ParentPart = PartManager().getByName(targetParentName)
160       val delPartsListBean = PartsListBean(ParentPart.name, delPart.name, delRelation.quantity)
161       val addPartsListBean = PartsListBean(ParentPart.name, addPart.name, addRelation.quantity)
162       val data = DesignChangeRelationForm(delPartsListBean, addPartsListBean, designChange.dcNo)
163       val message = DesignChangeManager().designChange(data)
164       if(message == null) {
165         Redirect(routes.DesignChangeController.designChangeCoverModify(designChangeId, dcSeq, ""))
166       } else {
167         Redirect(routes.DesignChangeController.designChangeCoverModify(designChangeId, dcSeq, message))
168       }
169     }
170   }
171   
172   def designChangeRealtionModify(designChangeId: Long, dcDelSeq: Long, dcAddSeq: Long) = Action { implicit request =>
173     inTransaction {
174        var targetDelRelation = PartRelation(0, 0, 0, 0, 0, 0)
175        var targetAddRelation = PartRelation(0, 0, 0, 0, 0, 0)
176        var delParentNo = ""
177        var delChildNo = ""
178        var addParentNo = ""
179        var addChildNo = ""
180         val designChange = DesignChangeManager().getById(designChangeId)
181         if(dcDelSeq != 0) {
182                 targetDelRelation = designChange.delPartRelation.where(pr => pr.dcSeq === dcDelSeq).head
183                 delParentNo = targetDelRelation.parent.head.name
184                 delChildNo = targetDelRelation.child.head.name
185         }
186         if(dcAddSeq != 0) {
187                 targetAddRelation = designChange.addPartRelation.where(pr => pr.dcSeq === dcAddSeq).head
188                 addParentNo = targetAddRelation.parent.head.name
189                 addChildNo = targetAddRelation.child.head.name
190         } else if(dcDelSeq != 0) {
191                 targetDelRelation = designChange.delPartRelation.where(pr => pr.dcSeq === dcDelSeq).head
192                 addParentNo = targetDelRelation.parent.head.name
193         }
194         val designChangeRelationForm = DesignChangeRelationForm(generatePartsListBean(delParentNo, delChildNo), generatePartsListBean(addParentNo, addChildNo), designChange.dcNo)
195         Ok(views.html.updateDesignChangeRelationForm(designChangeRelationRegistForm.fill(designChangeRelationForm), designChangeId, addChildNo, ""))
196     }
197   }
198   
199   def designChangeRelationModification(partName: String) = Action { implicit request =>
200     designChangeRelationRegistForm.bindFromRequest.fold(
201         formWithErrors => BadRequest(views.html.updateDesignChangeRelationForm(formWithErrors, 0, "", "")),
202         designChangeRelation => {
203           inTransaction {
204             val designChange = DesignChangeManager().getByName(designChangeRelation.dcno)
205             val message = DesignChangeManager().designChangeUpdate(designChangeRelation, partName)
206             if(message == null) {
207               Redirect(routes.DesignChangeController.designChangeCoverModify(designChange.id, 0, ""))
208             } else {
209               Ok(views.html.updateDesignChangeRelationForm(designChangeRelationRegistForm.fill(designChangeRelation), designChange.id, partName, message))              }
210             }
211           }
212      )
213     
214   }
215
216         def generatePartsListBean(parentNo:String, childNo:String):PartsListBean = {
217           if(childNo.isEmpty()) {
218               PartsListBean(parentNo, childNo, 0)
219           } else {
220                   PartsListBean(parentNo, childNo, PartManager().getByName(parentNo).partRelation(PartManager().getByName(childNo).id).quantity)
221           }
222         }
223
224 }