Changeset 416

Show
Ignore:
Timestamp:
12-05-10 15:38:46 (4 years ago)
Author:
duh
Message:

- updated Events to handle constraints properly
- updated event wizard

Location:
trunk/grails-app
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy

    r414 r416  
    260260                        }.to "events" 
    261261                        on("add") { 
    262                                 /* 
    263                                 def startTime   = (params.get('startTime')) ? params.startTime = new Date().parse("d/M/yyyy HH:mm", params.get('startTime').toString()) : null 
    264                                 def endTime             = (params.get('endTime')) ? new Date().parse("d/M/yyyy HH:mm", params.get('endTime').toString()) : null 
    265                                 def template    = params.get('template') 
    266  
    267                                 // handle template 
    268                                 if (template instanceof String && template.size() > 0) { 
    269                                         template = Template.findByName(template) 
    270                                 } else if (!template instanceof Template) { 
    271                                         template = null 
    272                                 } 
    273  
    274                                 // handle data 
    275                                 if (template && startTime && endTime) { 
    276                                         // add an event instance 
    277                                         def event = new Event( 
    278                                                 template        : template, 
    279                                                 startTime       : startTime, 
    280                                                 endTime         : endTime 
    281                                         ) 
    282  
    283                                         // validate event 
    284                                         if (event.validate()) { 
    285                                                 // add event to event list 
    286                                                 flow.events[ flow.events.size() ] = event 
    287                                                 success() 
    288                                         } else { 
    289                                                 // validation failed, feedback errors 
    290                                                 flash.errors = [:] 
    291                                                 flash.values = params 
    292                                                 this.appendErrors(event, flash.errors) 
    293                                                 error() 
    294                                         } 
    295                                 } else { 
    296                                         // validation failed, feedback errors 
    297                                         flash.errors    = [:] 
    298                                         flash.values    = params 
    299  
    300                                         if (!template)  this.appendErrorMap(['template': 'You need to select an event template'], flash.errors) 
    301                                         if (!startTime) this.appendErrorMap(['startTime': 'You need to define the start time of your study event'], flash.errors) 
    302                                         if (!endTime)   this.appendErrorMap(['endTime': 'You need to define the end time of your study event'], flash.errors) 
    303                                         error() 
    304                                 } 
    305                                 */ 
    306262                                flash.values                    = params 
    307263                                def eventTemplateName   = params.get('template') 
     
    322278                                // validate event object 
    323279                                if (flow.event.validate()) { 
    324  
    325 flow.event.template.fields.each() { 
    326         println "["+it.name+"] = "+flow.event.getFieldValue(it.name)     
    327 } 
    328280                                        // it validated! Duplicate the event object... 
    329281                                        def newEvent    = flow.event 
     
    412364                                flash.values = params 
    413365                                flash.errors = [:] 
    414                                 /* 
    415  
    416                                 // handle event groupings 
    417                                 this.handleEventGrouping(flow, flash, params) 
    418  
    419                                 // check if we have at least one subject 
    420                                 // and check form data 
     366 
     367                                // handle study data 
    421368                                if (flow.events.size() < 1) { 
    422369                                        // append error map 
    423370                                        flash.values = params 
    424371                                        this.appendErrorMap(['events': 'You need at least to create one event for your study'], flash.errors) 
     372                                        error()                                          
     373                                } else if (this.handleEvents(flow, flash, params)) { 
     374                                        success() 
     375                                } else { 
    425376                                        error() 
    426377                                } 
    427                                 */ 
    428378                        }.to "events" 
    429379                } 
     
    645595         */ 
    646596        def handleEvents(flow, flash, params) { 
     597                def errors = false 
     598                 
    647599                // got an event in the flash scope? 
    648600                if (!flow.event) flow.event = new Event() 
     
    669621                flow.eventTemplates.each() { eventTemplate -> 
    670622                        // iterate through events 
    671                         eventTemplate.getValue().events.each() { event -> 
    672                                 println eventTemplate 
    673                                 println event.class 
    674                                 //println event.template 
    675  
     623                        eventTemplate.getValue().events.each() { eventId -> 
    676624                                // iterate through template fields 
    677                                 /* 
    678                                 event.giveFields().each() { eventField -> 
    679                                         event.setFieldValue(eventField.name, params.get( 'event_' + event + '_' + eventField.escapedName() ) ) 
     625                                flow.events[ eventId ].giveFields().each() { eventField -> 
     626                                        flow.events[ eventId ].setFieldValue(eventField.name, params.get( 'event_' + eventId + '_' + eventField.escapedName() ) ) 
    680627                                } 
    681628 
    682629                                // validate event 
    683                                 if (!flow.events[ event ].validate()) { 
     630                                if (!flow.events[ eventId ].validate()) { 
    684631                                        errors = true 
    685632                                        this.appendErrors(flow.events[ eventId ], flash.errors, 'event_' + eventId + '_') 
    686633                                } 
    687                                 */ 
    688634                        } 
    689635                } 
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r408 r416  
    1717        Date endTime 
    1818 
     19        /** 
     20         * Constraints 
     21         */ 
    1922        static constraints = { 
    20                 endTime(validator: {val, obj -> 
    21                         if (val && val.before(obj.startTime)) { 
    22                                 return 'endTimeshouldbegreater' 
     23                endTime(validator: { fields, obj, errors -> 
     24                        def error = false 
     25 
     26                        // endTime must be >= the startTime 
     27                        if ( fields && fields.compareTo(obj.startTime) < 0 ) { 
     28                                error = true 
     29                                errors.rejectValue( 
     30                                        'endTime', 
     31                                        'event.endTime.greaterThanStartTime', 
     32                                        ['endTime', fields] as Object[], 
     33                                        'End time should be greater than or equal to the Start Time' 
     34                                ) 
    2335                        } 
     36 
     37                        return (!error) 
    2438                }) 
    2539        } 
  • trunk/grails-app/i18n/messages.properties

    r332 r416  
    6363templateEntity.typeMismatch.date=Property {0} must be of type Date and is currently of type {1} 
    6464templateEntity.typeMismatch.term=Property {0} must be of type Term and is currently of type {1} 
     65 
     66event.endTime.greaterThanStartTime=End time should be greater than or equal to the Start Time 
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r399 r416  
    620620                        def from = [] 
    621621                        attrs.from.each { from[ from.size() ] = it.toString() } 
     622 
     623                        // sort alphabetically 
     624                        from.sort() 
     625 
     626                        // set attributes 
    622627                        attrs.from = from 
    623628                        attrs.value = (attrs.value) ? attrs.value.toString() : '' 
  • trunk/grails-app/views/wizard/pages/_events.gsp

    r397 r416  
    2929<g:if test="${events}"> 
    3030        <g:each var="eventTemplate" in="${eventTemplates}"> 
     31                <g:set var="showHeader" value="${true}" /> 
    3132                <h1>${eventTemplate.getValue().name} template</h1> 
    3233        <div class="table"> 
    33                 <div class="header"> 
    34                         <div class="firstColumn">#</div> 
    35                         <div class="firstColumn"></div> 
    36                         <wizard:templateColumnHeaders template="${eventTemplate.getValue().template}" class="column"/> 
    37                         <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}"> 
    38                         <div class="column"> 
    39                                 <g:textField name="eventGroup_${g}_name" value="${eventGroup.name}" /> 
    40                                 <wizard:ajaxButton name="deleteEventGroup" src="../images/icons/famfamfam/delete.png" alt="delete this eventgroup" class="famfamfam" value="-" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" before="\$(\'input[name=do]\').val(${g});" afterSuccess="onWizardPage()" /> 
     34                <g:each var="eventId" in="${eventTemplate.getValue().events}"> 
     35                        <g:if test="${showHeader}"> 
     36                        <g:set var="showHeader" value="${false}" /> 
     37                        <div class="header"> 
     38                                <div class="firstColumn">#</div> 
     39                                <div class="firstColumn"></div> 
     40                                <wizard:templateColumnHeaders entity="${events[ eventId ]}" class="column"/> 
     41                                <g:if test="${eventGroups}"><g:each var="eventGroup" status="g" in="${eventGroups}"> 
     42                                <div class="column"> 
     43                                        <g:textField name="eventGroup_${g}_name" value="${eventGroup.name}" /> 
     44                                        <wizard:ajaxButton name="deleteEventGroup" src="../images/icons/famfamfam/delete.png" alt="delete this eventgroup" class="famfamfam" value="-" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" before="\$(\'input[name=do]\').val(${g});" afterSuccess="onWizardPage()" /> 
     45                                </div> 
     46                                </g:each></g:if> 
     47                                <div class="column"> 
     48                                        <wizard:ajaxButton name="addEventGroup" src="../images/icons/famfamfam/add.png" alt="add a new eventgroup" class="famfamfam" value="+" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" /> 
     49                                </div> 
    4150                        </div> 
    42                         </g:each></g:if> 
    43                         <div class="column"> 
    44                                 <wizard:ajaxButton name="addEventGroup" src="../images/icons/famfamfam/add.png" alt="add a new eventgroup" class="famfamfam" value="+" url="[controller:'wizard',action:'pages']" update="[success:'wizardPage',failure:'wizardError']" afterSuccess="onWizardPage()" /> 
    45                         </div> 
    46                 </div> 
    47                 <g:each var="eventId" in="${eventTemplate.getValue().events}"> 
     51                        </g:if> 
    4852                        <div class="row"> 
    4953                                <div class="firstColumn">${eventId + 1}</div>