-Dserver.port.https=8443 dev run-app -https
Tuesday, September 12, 2017
Monday, August 28, 2017
Angular with tbSort AFTER loading of all ng-repeat
<!--class="{{{'cancelled': 'danger', 'closed': 'warning'}[sect.SECT_STATUS.toLowerCase()] || (((+sect.ENROLLED) >= (+sect.CAPACITY)) && 'warning')}}">-->
<tr ng-repeat="sect in crs.Sections" class="{{(!oldView) ? {'cancelled': 'danger', 'closed':
'warning'}[sect.SECT_STATUS.toLowerCase()] : ''}}">
<td style="vertical-align: middle" ng-repeat="col in cols" ng-if="!!allTitle || !col.hide || !col.hide(crs)" ng-bind-html="col.code(sect)"
class="media-middle {{(!oldView) ? 'highBorder' : 'highBorder'}}">
<!--{{($parent.$parent.$parent.$last &&
$parent.$parent.$last && $parent.$last && $last) &&
finish(sect)}}-->
<div ng-if="$parent.$parent.$parent.$last && $parent.$parent.$last && $parent.$last && $last">
<div ng-init="finish()"></div>
</div>
$scope.finish = function (it) {
// $scope.prnt($scope.curTerm + $scope.curSubj, true)
$scope.prnt('finish()')
if (!!$scope.wait || !$scope.loading) return
if (!!it) $scope.prnt(it)
// $('[data-toggle="tooltip"]').tooltip()
// $('[data-toggle="popover"]').popover()
$('.header').off('click').removeClass('header')
$('.tbSort').each(function () {
if ($(this).find('tr').length > 2) {
$(this).tablesorter()
}
})
// $scope.prnt($('.tbSort'))
$scope.loading = false
$scope.prnt('done')
}
Tuesday, August 22, 2017
Wednesday, August 16, 2017
Mapping a table or sequence to a schema
static mapping = { def cls = "admin" def appName = "see" table name: "${appName}_${cls}", schema: "NJITSRC" id column : "${cls}_id", generator : 'sequence', params: [sequence: "${appName}_${cls}_sequence", schema: "NJITSRC"]
Friday, August 11, 2017
Grails Export Plugin 1.5 Controller
def test = { params.exportFormat = 'pdf' params.format = 'pdf' params.extension = 'pdf' print params if(params?.exportFormat && params.exportFormat != "html"){ response.contentType = grailsApplication.config.grails.mime.types[params.exportFormat] response.setHeader("Content-disposition", "attachment; filename=hangtags.${params.extension}") List<String> fields = ['id', 'address'] Map labels = [address:"Address", deliverVia: ""] /* Formatter closure in previous releasesdef upperCase = { value -> return value.toUpperCase()}*/ // Formatter closure def upperCase = { domain, value -> return value.toUpperCase() } Map formatters = [address: upperCase] Map parameters = [title: "Hangtags", "column.widths": [0.2, 0.3, 0.5]] exportService.export(params.format, response.outputStream, HangTag.list(), fields, labels, formatters, parameters) [HangTag: HangTag.list()] } }
Front End Validation
1. If there is an ng-del checkbox newHt and existing hangtag
ng-disabled="(${hangTag ? true : false} && !newHt)"
Passing date from Oracle timestamp/ Grails backend to Javascript/ Angular controller
res.htDateDeliveredY = res.hangTag.dateDelivered.toString()[0..3].toInteger() res.htDateDeliveredM = (res.hangTag.dateDelivered.toString()[5..6]).toInteger() - 1res.htDateDeliveredD = res.hangTag.dateDelivered.toString()[8..9].toInteger()
$scope.htDateDelivered = new Date(${htDateDeliveredY},${htDateDeliveredM},${htDateDeliveredD})
OR
var dateDelivered = "${htDateDeliveredY}-${htDateDeliveredM}-${htDateDeliveredD}";document.getElementById("delDate").value = dateDelivered;console.log(dateDelivered);
Thursday, August 3, 2017
Domain Class
package main import grails.util.Holders /** * This domain class holds details (individual courses) of a request for combining 2 or more courses. * This domain class is used with "Request" domain class. * * READ DESCRIPTION IN "REQUEST" DOMAIN CLASS. * * !! RUN THE FOLLOWING LINE IN ORACLE DATABASE TO CREATE A SEQUENCE FOR THIS TABLE !! * CREATE SEQUENCE "NJIT_GNS"."LMIS_REQUESTINFO_SEQUENCE" MINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE ; * * Columns: ( ** indicates "important". * indicates "not important but being used". nothing indicates "not being used") * "id" is a primary key and created by default * "version" is created by default * ** "req" is "Request" object to indicate this course belong to which request * ** "crn" is CRN of this course. "crn" and "term" together form a composite unique key * ** "term" is "Term" object to indicate this course belong to which term. "crn" and "term" together form a composite unique key * "schd_code" is "SCHD_CODE" of this course (e.g. 'LEC','ADV','LLB',etc.) * ** "active" is general column to indicate whether this course is active or inactive (inactive indicates this course is no longer a part of a combined course) * * "lastUpdated" is general column for datetime this data is last updated * * "updater" is general column for UCID of the person who updated this data */class RequestInfo { def springSecurityService String updater, crn, schd_code, section Boolean active Date lastUpdated Term term Request req static belongsTo = Request def beforeValidate = { // defaults active = (active == null) ? true : active updater = updater ?: springSecurityService.principal.usr.ucid } static mapping = { def cls = className.split('main.')[-1].toLowerCase() def appName = Holders.grailsApplication.config.app.name table "${appName}_${cls}" id column : "${cls}_reqinfoid", generator : 'sequence', params: [sequence: "${appName}_${cls}_sequence"] // version false version column : "${cls}_version", defaultValue: '0' req column : "${cls}_reqid" crn column : "${cls}_crn" section column : "${cls}_section" term column : "${cls}_term" schd_code column : "${cls}_schd_code" active column : "${cls}_is_active", defaultValue: '1' lastUpdated column : "${cls}_activity_date", defaultValue: 'sysdate' updater column : "${cls}_updated_by" } static constraints = { crn unique : 'term' crn size : 0..20 schd_code size : 0..3 updater maxSize : 10, matches: '[a-z0-9]+' section nullable: true } }
Multiple angular actions on ng click
ng-click="(vhc = ${vhc as grails.converters.JSON}) && (vhc.relate = '${vhc.relate.code}') && (vhcs.vhc_${vhc.id} = !vhcs.vhc_${vhc.id})">
Submit button (angular controller)
<button type="button" class="btn btn-success pull-right" ng-click="main.submitFrm(formRequest)" ng-init="formRequest.validate = validRegFrm" ng-disabled="!formRequest.validate(true)" disabled%{--ng-disabled="combineOK < 2 || !radio"--}% %{--ng-click="reqSubmit()" --}%> <i class="fa fa-check" aria-hidden="true"></i> Submit Combine Request </button>
Tuesday, August 1, 2017
Pass flashScope to webservice
mainService.saveNonNJITUser(user, WebUtils?.retrieveGrailsWebRequest()?.flashScope)
Redirect from action to another - with params
redirect(action: 'hangtagIndividual', params: [njitID: params.njitID, term: params.term])
Monday, July 31, 2017
Config values from DB
DATABASE
qry = """insert into NJITVRS_CONFIG (CONFIG_KEY, CONFIG_UPDATED_BY, CONFIG_VALUE) VALUES (?, '${usr}', ?)""".toString()
sql.executeInsert(qry, ['ht_comments', '[NR:"Not Recieved", L : "Lost", S : "Stolen", TC: "Type Change", REF: "Refund", DNP : "Do Not Process", DEL: "Deleted", RES:"Resigned", RET: "Returned Permit"]'])CONTROLLERhtComments : Eval.me(Config.findWhere(key: "ht_comments").value)FRONT END GSP<g:select from="${htComments}" noSelection="${['': 'Select']}" optionKey="key" optionValue="value" class="form-control" name="htComments" id="htComments" ng-model="htComments"></g:select>
Saving a GORM object
try { if (!term.save(flush: true)) { term.errors.allErrors.each { print it } flash << [success: false, message: 'Errors while changing term', obj: term] return } else { def oldTerms = Term.findAll() oldTerms = oldTerms.remove(Term.findIndexOf {term}) oldTerms.each { oldterm -> oldterm.active = false oldterm.save(flush: true) } flash << [success: true, message: 'Updated term successfully!'] } } catch (org.springframework.dao.DataIntegrityViolationException e) { flash << [success: false, message: 'Attempted duplicate term', obj: term] return false}
Subscribe to:
Posts (Atom)