'use strict' /** * Copyright (c) 2017~2020, OBCon Inc. * All rights reserved. */ /** * @file * @copyright 2017~2020, OBCon Inc. * @author gye hyun james kim [pnuskgh@gmail.com] */ let View = utils.getClass('include', 'view.js'); class GroupsView extends View { constructor() { super(); this._name = 'groups'; this._title = '그룹'; this._model = modules.groups.model; } _promiseParent(req) { let myPromise = new Promise(function(resolve, reject) { let query = { where: { site: req.session.site.id, deleted: false } }; modules.roles.model.table.findAll(query) .then(function(roles) { resolve({ roles: roles }); }.bind(this)).catch(reject); }.bind(this)); return myPromise; } list(req, res, next) { let myPromise = this._promiseParent(req); myPromise = myPromise.then(function(params) { return new Promise(function(resolve, reject) { let theme = this.getTheme('list', req, 'list', 'list.ejs'); theme.javascriptFiles.push('/js/datatables.min.js'); //--- dataTables theme.cssFiles.push('/css/datatables.min.css'); //--- dataTables let search = this.getSearchData(req, res, next, 'list'); let query = { where: { site: req.session.site.id, deleted: false } }; query = this.getSearchQuery(search, query, 'list'); this.model.table.findAll(query) .then(function(results) { let data = { search: search, data: results, roleEnum: modules.roles.view.toEnum(params.roles) }; res.render(utils.getTemplateFullPath(theme.serviceInfo.site.id, theme.layout), { theme: theme, baseUrl: req.baseUrl, session: req.session, data: data }); }).catch(reject); }.bind(this)); }.bind(this)); myPromise = myPromise.catch(function(err) { //--- reject() 함수에서 에러 처리를 위해 호출 한다. utils.obj.loggerError(err); }.bind(this)); } detail(req, res, next) { let myPromise = this._promiseParent(req); myPromise = myPromise.then(function(params) { return new Promise(function(resolve, reject) { let record = req.query.record; let query = { where: { site: req.session.site.id, group: record, deleted: false } }; modules.users.model.table.findAll(query) .then(function(users) { params.users = users; resolve(params); }.bind(this)).catch(reject); }.bind(this)); }.bind(this)); myPromise = myPromise.then(function(params) { return new Promise(function(resolve, reject) { let theme = this.getTheme('detail', req, 'detail', 'detail.ejs'); theme.javascriptFiles.push('/js/datatables.min.js'); //--- dataTables theme.cssFiles.push('/css/datatables.min.css'); //--- dataTables let record = req.query.record; let query = { where: { site: req.session.site.id, id: record, deleted: false } }; this.model.table.findOne(query) .then(function(results) { let data = { item: results, users: params.users, roleEnum: modules.roles.view.toEnum(params.roles) }; res.render(utils.getTemplateFullPath(theme.serviceInfo.site.id, theme.layout), { theme: theme, baseUrl: req.baseUrl, session: req.session, data: data }); }).catch(reject); }.bind(this)); }.bind(this)); myPromise = myPromise.catch(function(err) { //--- reject() 함수에서 에러 처리를 위해 호출 한다. utils.obj.loggerError(err); }.bind(this)); } createView(req, res, next) { let myPromise = this._promiseParent(req); myPromise = myPromise.then(function(params) { return new Promise(function(resolve, reject) { let theme = this.getTheme('createView', req, 'create', 'createView.ejs'); let data = { roleEnum: modules.roles.view.toEnum(params.roles, ['-1', '--선택 않음--']) }; res.render(utils.getTemplateFullPath(theme.serviceInfo.site.id, theme.layout), { theme: theme, baseUrl: req.baseUrl, session: req.session, data: data }); }.bind(this)); }.bind(this)); myPromise = myPromise.catch(function(err) { //--- reject() 함수에서 에러 처리를 위해 호출 한다. utils.obj.loggerError(err); }.bind(this)); } updateView(req, res, next) { let myPromise = this._promiseParent(req); myPromise = myPromise.then(function(params) { return new Promise(function(resolve, reject) { let theme = this.getTheme('updateView', req, 'updateView', 'updateView.ejs'); let record = req.query.record; let query = { where: { site: req.session.site.id, id: record, deleted: false } }; this.model.table.findOne(query) .then(function(results) { //--- To-Do : 읽은 데이터가 없는 경우 (results == null), 오류 페이지를 표시 한다. let data = { item: results, roleEnum: modules.roles.view.toEnum(params.roles, ['-1', '--선택 않음--']) }; res.render(utils.getTemplateFullPath(theme.serviceInfo.site.id, theme.layout), { theme: theme, baseUrl: req.baseUrl, session: req.session, data: data }); }).catch(reject); }.bind(this)); }.bind(this)); myPromise = myPromise.catch(function(err) { //--- reject() 함수에서 에러 처리를 위해 호출 한다. utils.obj.loggerError(err); }.bind(this)); } } module.exports = GroupsView;