Commit f48e927d authored by Evren Kutar's avatar Evren Kutar

crud controllers refactor

delete wf component
form service no need itemLinksGenerator, get single item
if generated path url and the current path is equal route has to be reload
routes reformatted
parent 9b3991ac
...@@ -330,7 +330,7 @@ module.exports = function (grunt) { ...@@ -330,7 +330,7 @@ module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-preprocess'); grunt.loadNpmTasks('grunt-preprocess');
grunt.loadNpmTasks('grunt-env'); grunt.loadNpmTasks('grunt-env');
grunt.registerTask('dev', ['env:dev', 'preprocess:dev', 'html2js:dev', 'watch:dev']); grunt.registerTask('dev', ['env:dev', 'preprocess:dev', 'html2js:dev', 'default', 'watch:dev']);
grunt.registerTask('test', ['bower', 'karma:continuous']); grunt.registerTask('test', ['bower', 'karma:continuous']);
grunt.registerTask('i18n', ['nggettext_extract', 'nggettext_compile']); grunt.registerTask('i18n', ['nggettext_extract', 'nggettext_compile']);
grunt.registerTask('local_prod', ['bower', 'env:prod', 'preprocess:prod', 'nggettext_compile', 'concat:js', 'concat:css', 'concat:components', 'copy:local_prod', 'html2js:prod', 'uglify:dist', 'connect:prod_server', 'watch:local_prod']); grunt.registerTask('local_prod', ['bower', 'env:prod', 'preprocess:prod', 'nggettext_compile', 'concat:js', 'concat:css', 'concat:components', 'copy:local_prod', 'html2js:prod', 'uglify:dist', 'connect:prod_server', 'watch:local_prod']);
......
...@@ -22,7 +22,6 @@ var app = angular.module( ...@@ -22,7 +22,6 @@ var app = angular.module(
'ulakbus.crud', 'ulakbus.crud',
'ulakbus.debug', 'ulakbus.debug',
'ulakbus.devSettings', 'ulakbus.devSettings',
'ulakbus.wf',
'ulakbus.version', 'ulakbus.version',
//'schemaForm', //'schemaForm',
'gettext', 'gettext',
......
...@@ -22,45 +22,30 @@ app.config(['$routeProvider', function ($routeProvider, $route) { ...@@ -22,45 +22,30 @@ app.config(['$routeProvider', function ($routeProvider, $route) {
// use crud without selected user // use crud without selected user
// important: regex urls must be defined later than static ones // important: regex urls must be defined later than static ones
.when('/:wf/', { .when('/:wf/', {
templateUrl: 'components/crud/templates/form.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDCtrl' controller: 'CRUDCtrl'
}) })
.when('/:wf/list', { .when('/:wf/do/:cmd', {
templateUrl: 'components/crud/templates/list.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListCtrl' controller: 'CRUDListFormCtrl'
}) })
.when('/:wf/form', { .when('/:wf/do/:cmd/:key', {
templateUrl: 'components/crud/templates/form.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDFormCtrl' controller: 'CRUDListFormCtrl'
})
.when('/:wf/form/:key', {
templateUrl: 'components/crud/templates/form.html',
controller: 'CRUDFormCtrl'
})
.when('/:wf/show/:key', {
templateUrl: 'components/crud/templates/show.html',
controller: 'CRUDShowCtrl'
}) })
.when('/:wf/:model', { .when('/:wf/:model', {
templateUrl: 'components/crud/templates/form.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDCtrl' controller: 'CRUDCtrl'
}) })
.when('/:wf/:model/list', { .when('/:wf/:model/do/:cmd', {
templateUrl: 'components/crud/templates/list.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDListCtrl' controller: 'CRUDListFormCtrl'
})
.when('/:wf/:model/form', {
templateUrl: 'components/crud/templates/form.html',
controller: 'CRUDFormCtrl'
}) })
.when('/:wf/:model/form/:key', { .when('/:wf/:model/do/:cmd/:key', {
templateUrl: 'components/crud/templates/form.html', templateUrl: 'components/crud/templates/crud.html',
controller: 'CRUDFormCtrl' controller: 'CRUDListFormCtrl'
})
.when('/:wf/:model/show/:key', {
templateUrl: 'components/crud/templates/show.html',
controller: 'CRUDShowCtrl'
}) })
.otherwise({redirectTo: '/dashboard'}); .otherwise({redirectTo: '/dashboard'});
}]) }])
.run(function ($rootScope) { .run(function ($rootScope) {
......
...@@ -17,6 +17,7 @@ crud.service('CrudUtility', function () { ...@@ -17,6 +17,7 @@ crud.service('CrudUtility', function () {
generateParam: function (scope, routeParams, cmd) { generateParam: function (scope, routeParams, cmd) {
// define api request url path // define api request url path
scope.url = routeParams.wf; scope.url = routeParams.wf;
// why do this??
angular.forEach(routeParams, function (value, key) { angular.forEach(routeParams, function (value, key) {
if (key.indexOf('_id') > -1 && key !== 'param_id') { if (key.indexOf('_id') > -1 && key !== 'param_id') {
scope.param = key; scope.param = key;
...@@ -31,6 +32,10 @@ crud.service('CrudUtility', function () { ...@@ -31,6 +32,10 @@ crud.service('CrudUtility', function () {
wf: routeParams.wf, wf: routeParams.wf,
object_id: routeParams.key object_id: routeParams.key
}; };
scope.model = scope.form_params.model;
scope.wf = scope.form_params.wf;
scope.param = scope.form_params.param;
scope.param_id = scope.form_params.id;
return scope; return scope;
}, },
listPageItems: function (scope, pageData) { listPageItems: function (scope, pageData) {
...@@ -51,80 +56,110 @@ crud.controller('CRUDCtrl', function ($scope, $routeParams, Generator, CrudUtili ...@@ -51,80 +56,110 @@ crud.controller('CRUDCtrl', function ($scope, $routeParams, Generator, CrudUtili
}); });
/** /**
* CRUDAddEditCtrl is a controller *
* which provide a form with form generator.
*/ */
crud.controller('CRUDListFormCtrl', function ($scope, $rootScope, $location, $http, $log, $modal, $timeout, Generator, $routeParams, CrudUtility) {
if ($routeParams.cmd==='show') {
CrudUtility.generateParam($scope, $routeParams, $routeParams.cmd);
// todo: refactor createListObjects func
var createListObjects = function () {
angular.forEach($scope.object, function (value, key) {
if (typeof value == 'object') {
$scope.listobjects[key] = value;
delete $scope.object[key];
}
});
};
crud.controller('CRUDFormCtrl', function ($scope, $rootScope, $location, $http, $log, $modal, $timeout, Generator, $routeParams, CrudUtility) { $scope.listobjects = {};
// get form with generator
if ($routeParams.pageData) {
CrudUtility.generateParam($scope, Generator.getPageData(), 'form');
Generator.generate($scope, Generator.getPageData());
} else {
CrudUtility.generateParam($scope, $routeParams, 'form');
Generator.get_form($scope);
}
$scope.onSubmit = function (form) { var pageData = Generator.getPageData();
$scope.$broadcast('schemaFormValidate'); if (pageData.pageData === true) {
if (form.$valid) { $scope.object = pageData.object;
Generator.submit($scope); Generator.setPageData({pageData: false});
} }
}; else {
// call generator's get_single_item func
Generator.get_single_item($scope).then(function (res) {
$scope.object = res.data.object;
$scope.model = $routeParams.model;
});
}
createListObjects();
}
}); if ($routeParams.cmd==='form' || $routeParams.cmd==='list') {
// function to set scope objects
var setpageobjects = function (data) {
CrudUtility.listPageItems($scope, data);
Generator.generate($scope, data);
Generator.setPageData({pageData: false});
};
/** // get pageData from service
* CRUD List Controller var pageData = Generator.getPageData();
*/
crud.controller('CRUDListCtrl', function ($scope, $rootScope, Generator, $routeParams, CrudUtility) { // if pageData exists do not call get_wf function and manipulate page with pageData
CrudUtility.generateParam($scope, $routeParams, 'list'); if (pageData.pageData === true) {
$log.debug('pagedata', pageData.pageData);
CrudUtility.generateParam($scope, pageData, $routeParams.cmd);
setpageobjects(pageData, pageData);
}
// if pageData didn't defined or is {pageData: false} go get data from api with get_wf function
if (pageData.pageData === undefined || pageData.pageData === false) {
CrudUtility.generateParam($scope, $routeParams, $routeParams.cmd);
Generator.get_wf($scope);
}
if ($routeParams.pageData) { // we use form generator for generic forms. this makes form's scope to confuse on the path to generate form
var pageData = Generator.getPageData(); // object by its name. to manage to locate the form to controllers scope we use a directive called form locator
CrudUtility.listPageItems($scope, pageData); // a bit dirty way to find form working on but solves our problem
} $scope.$on('formLocator', function(event) {
else { $scope.formgenerated = event.targetScope.formgenerated;
// call generator's get_list func });
Generator.get_list($scope)
.then(function (res) {
CrudUtility.listPageItems($scope, res.Data);
});
}
$scope.do_action = function (key, action) { $scope.onSubmit = function (form) {
Generator.doItemAction($scope, key, action); $scope.$broadcast('schemaFormValidate');
if (form.$valid) {
Generator.submit($scope);
}
};
$scope.do_action = function (key, action) {
Generator.doItemAction($scope, key, action);
};
} }
}); });
/** crud.directive('crudListDirective', function () {
* CRUD Show Controller return {
*/ templateUrl: 'components/crud/templates/list.html',
crud.controller('CRUDShowCtrl', function ($scope, $rootScope, $location, Generator, $routeParams, CrudUtility) { restrict: 'E',
CrudUtility.generateParam($scope, $routeParams, 'show'); replace: true
// todo: refactor createListObjects func };
var createListObjects = function () { });
angular.forEach($scope.object, function (value, key) {
if (typeof value == 'object') { crud.directive('crudFormDirective', function () {
$scope.listobjects[key] = value; return {
delete $scope.object[key]; templateUrl: 'components/crud/templates/form.html',
} restrict: 'E',
}); replace: true
}; };
});
$scope.listobjects = {}; crud.directive('crudShowDirective', function () {
return {
templateUrl: 'components/crud/templates/show.html',
restrict: 'E',
replace: true
};
});
if ($routeParams.pageData) { crud.directive('formLocator', function() {
var pageData = Generator.getPageData(); return {
$scope.object = pageData.object; link: function(scope) {
} scope.$emit('formLocator');
else { }
// call generator's get_single_item func
Generator.get_single_item($scope).then(function (res) {
$scope.object = res.data.object;
$scope.model = $routeParams.model;
});
} }
createListObjects();
}); });
\ No newline at end of file
...@@ -18,43 +18,10 @@ describe('crud controller module', function () { ...@@ -18,43 +18,10 @@ describe('crud controller module', function () {
$controller = _$controller_; $controller = _$controller_;
})); }));
describe('crud add controller', function() {
it('should get form', function() {
var $scope = {};
var controller = $controller('CRUDAddEditCtrl', { $scope: $scope });
expect($scope).not.toEqual(null);
});
});
// todo: chack if needed for these tests
// describe('crud list controller', function() {
// it('should get list', function() {
// var $scope = {};
// var controller = $controller('CRUDListCtrl', { $scope: $scope });
// expect($scope).not.toEqual(null);
// });
// });
// describe('crud show controller', function() {
// it('should get single item', function() {
// var $scope = {};
// var controller = $controller('CRUDShowCtrl', { $scope: $scope });
// expect($scope).not.toEqual(null);
// });
// });
describe('crud controller', function () { describe('crud controller', function () {
it('should have CRUDAddEditCtrl', inject(function ($controller) { it('should have CRUDListFormCtrl', inject(function ($controller) {
expect($controller).toBeDefined();
}));
it('should have CRUDListCtrl', inject(function ($controller) {
expect($controller).toBeDefined();
}));
it('should have CRUDShowCtrl', inject(function ($controller) {
expect($controller).toBeDefined(); expect($controller).toBeDefined();
})); }));
}); });
......
<crud-show-directive ng-if="object"></crud-show-directive>
<crud-form-directive ng-if="forms"></crud-form-directive>
<hr>
<crud-list-directive ng-if="objects"></crud-list-directive>
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<h1>{{ schema.title }}</h1> <h1>{{ schema.title }}</h1>
<form id="formgenerated" name="formgenerated" sf-schema="schema" sf-form="form" sf-model="model" <form id="formgenerated" name="formgenerated" sf-schema="schema" sf-form="form" sf-model="model"
ng-submit="onSubmit(formgenerated)"></form> ng-submit="onSubmit(formgenerated)" form-locator></form>
<div ng-repeat="node in Node"> <div ng-repeat="node in Node">
<h3>{{ node.title }} <h3>{{ node.title }}
......
<div class="starter-template container"> <div class="starter-template container">
<h1>{{model}} <!--<h1>{{model}}-->
<a href="{{addLink}}"> <!--<a href="{{addLink}}">-->
<button type="button" class="btn btn-primary">Ekle</button> <!--<button type="button" class="btn btn-primary">Ekle</button>-->
</a> <!--</a>-->
</h1> <!--</h1>-->
<div class="row" ng-if="!objects[1]"> <div class="row" ng-if="!objects[1]">
<div class="col-md-12"> <div class="col-md-12">
<p class="no-content">Listelenecek içerik yok.</p> <p class="no-content">Listelenecek içerik yok.</p>
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
Hepsini Seç Hepsini Seç
</label> </label>
</td> </td>
<td ng-repeat="value in objects[0]" ng-if="objects[0]!='-1'">{{ value }}</td> <td ng-repeat="value in objects[0]" ng-if="objects[0]!='-1'">{{ objects }}</td>
<td ng-if="objects[0]=='-1'">{{ model || wf }}</td> <td ng-if="objects[0]=='-1'">{{ schema.title||model}}</td>
<td>action</td> <td>action</td>
</tr> </tr>
</thead> </thead>
...@@ -34,11 +34,14 @@ ...@@ -34,11 +34,14 @@
<td scope="row" style="text-align:center">{{$index}}</td> <td scope="row" style="text-align:center">{{$index}}</td>
<!-- below 2 of object will not be listed there for ng repeat loops 2 less --> <!-- below 2 of object will not be listed there for ng repeat loops 2 less -->
<td ng-repeat="field in object.fields track by $index" ng-if="objects[0]=='-1'"> <td ng-repeat="field in object.fields track by $index" ng-if="objects[0]=='-1'">
<a ng-href="{{object.detailLink}}">{{field}}</a> <a ng-repeat="action in object.actions" ng-href="javascript:void(0)"
ng-if="action.show_as==='link'&&action.fields.indexOf($parent.$index)>-1" ng-click="do_action(object.key, action)">{{field}}</a>
</td> </td>
<td ng-repeat="field in object.fields track by $index" ng-if="objects[0]!='-1'"> <td ng-repeat="field in object.fields track by $index" ng-if="objects[0]!='-1'">
<a ng-href="{{object.detailLink}}" ng-if="$index==1">{{field}}</a> <a ng-repeat="action in object.actions" ng-href="javascript:void(0)"
ng-if="action.show_as==='link'&&action.fields.indexOf($index)>-1"
ng-click="do_action(object.key, action)">{{field}}</a>
<span ng-if="$index!=1">{{field}}</span> <span ng-if="$index!=1">{{field}}</span>
</td> </td>
<td> <td>
...@@ -46,8 +49,8 @@ ...@@ -46,8 +49,8 @@
ng-if="action.show_as==='button'" ng-click="do_action(object.key, action)">{{action ng-if="action.show_as==='button'" ng-click="do_action(object.key, action)">{{action
.name}} .name}}
</button> </button>
<a ng-href="javascript:void(0)" ng-repeat="action in object.actions" <!--<a ng-href="javascript:void(0)" ng-repeat="action in object.actions"-->
ng-if="action.show_as==='link'" ng-click="do_action(object.key, action)">{{action.name}}</a> <!--ng-if="action.show_as==='link'" ng-click="do_action(object.key, action)">{{action.name}}</a>-->
<br> <br>
</td> </td>
</tr> </tr>
......
<div class="container">
<h1>{{ schema.title }}</h1>
<form id="formgenerated" name="formgenerated" sf-schema="schema" sf-form="form" sf-model="model"
ng-submit="onSubmit(formgenerated)"></form>
<div ng-repeat="node in Node">
<h3>{{ node.title }}
<span ng-if="node.lengthModels < 1">
<a href="javascript:void(0);" modal-for-nodes="{{node.schema.model_name}},Node">
<i class="fa fa-plus-circle fa-fw"></i>
</a>
</span>
</h3>
<div class="node-table">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include>
</div>
<hr>
</div>
<div ng-repeat="node in ListNode">
<h3>{{ node.title }}
<span>
<a href="javascript:void(0);" modal-for-nodes="{{node.schema.model_name}},ListNode,add">
<i class="fa fa-plus-circle fa-fw"></i>
</a>
</span>
</h3>
<div class="list-node-table">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include>
</div>
<hr>
</div>
</div>
\ No newline at end of file
<div class="container" ng-app="ulakbus.crud">
<div class="col-md-6">
<h1>{{ schema.title }}</h1>
<form name="formgenerated" sf-schema="schema" sf-form="form" sf-model="model" ng-submit="onSubmit(formgenerated)"></form>
</div>
</div>
\ No newline at end of file
<div class="starter-template container">
<h1>{{model}} <a href="#/crud/{{model}}/add"><button type="button" class="btn btn-primary">Ekle</button></a></h1>
<div class="row" ng-if="!nobjects[1]">
<div class="col-md-12">
<p class="no-content">Listelenecek içerik yok.</p>
</div>
</div>
<div class="tablescroll" ng-if="nobjects[1]">
<table class="table table-bordered" style="background-color:#fff;">
<thead>
<tr>
<th colspan="2">
<label>
<input type="checkbox" style="zoom:1.5; margin:5px 0 0 8px;">
Hepsini Seç
</label>
</th>
<th ng-repeat="value in nobjects[0]" ng-if="nobjects[0]!='-1'">{{ value }}</th>
<th ng-if="nobjects[0]=='-1'">{{ model }}</th>
<th>action</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="object in nobjects" ng-if="$index>0">
<td width="60">
<label>
<input type="checkbox" style="zoom:1.5; margin:5px 0 0 8px;">
</label>
</td>
<th scope="row" style="text-align:center">{{$index}}</th>
<td ng-repeat="k in object track by $index" ng-if="nobjects[0]=='-1' && $index>0">
<a ng-href="#/crud/{{model}}/{{object[0]}}">{{object[1]}}</a>
</td>
<td ng-repeat="(key,value) in object track by $index" ng-if="nobjects[0]!='-1' && $index>0">
<a ng-href="#/crud/{{model}}/{{object[0]}}" ng-if="$index==1">{{object[key]}}</a>
<span ng-if="$index!=1">{{object[key]}}</span>
</td>
<td>
<a ng-href="#/crud/{{model}}/edit/{{object[0]}}">Edit</a><br>
</td>
</tr>
</tbody>
</table>
</div>
<br/>
<hr/>
<div class="btn-group" ng-if="nobjects[1]">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
İşlemler <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="">İşlem 1</a></li>
<li><a href="">İşlem 2</a></li>
<li><a href="">İşlem 3</a></li>
<li role="separator" class="divider"></li>
<li><a href="">İşlem 4</a></li>
</ul>
</div>
<hr>
</div>
\ No newline at end of file
<div class="starter-template container">
<div class="personnel-info-container">
<div class="personnel-info-left">
<!--<div class="generic-profile-picture">-->
<!--<img src="../../img/sample-profile-pic.jpg" />-->
<!--</div>-->
<div class="info-block">
<div class="info-block-header">
<h1>{{model}}</h1>
</div>
<!-- end of info-block-header -->
<div class="info-block-body" ng-repeat="(key, value) in object">
<dl class="dl-horizontal">
<dt>{{ key }}</dt>
<dd>{{value}}</dd>
</dl>
</div>
<!-- end of info-block-body -->
</div>
<!--<ul>-->
<!--<li ng-repeat="(key, value) in object"><span class="col-md-3">{{ key }}:</span>{{value}}</li>-->
<!--<li>Pozisyon</li>-->
<!--<li><i class="fa fa-phone"></i> (+90) 123 456 7890</li>-->
<!--<li><i class="fa fa-envelope"></i> samplemail@mail.com</li>-->
<!--<li><i class="fa fa-map-marker"></i> Gülbahçe Mah. İzmir Teknoloji Geliştirme Bölgesi A9 Blok 215/A IYTE Campus, URLA/IZMIR</li></li>-->
<!--</ul>-->
</div>
<!-- end of personnel-info-left -->
<div class="personnel-info-right">
<div class="info-block" ng-repeat="(key, value) in listobjects">
<div class="info-block-header">
<h2>{{key}}</h2>
</div>
<!-- end of info-block-header -->
<div class="info-block-body" ng-repeat="(k, v) in value">
<dl class="dl-horizontal">
<dt>{{k}}</dt>
<dd>{{v}}</dd>
</dl>
</div>
<!-- end of info-block-body -->
</div>
<!-- end of info block -->
<!-- end of info block -->
</div>
<!-- personnel-info-left -->
</div>
<!-- end of personnel-info-container -->
</div>
\ No newline at end of file
/**
* Copyright (C) 2015 ZetaOps Inc.
*
* This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details.
*/
'use strict';
var wf = angular.module('ulakbus.wf', ['ui.bootstrap', 'schemaForm', 'formService']);
/**
* CRUDAddEditCtrl is a controller
* which provide a form with form generator.
*/
wf.controller('WFAddEditCtrl', function ($scope, $rootScope, $location, $http, $log, $modal, $timeout, Generator, $routeParams) {
$scope.url = "";
$scope.form_params = {'model': $routeParams.model};
//if ($routeParams.id) {
// $scope.form_params['object_id'] = $routeParams.id;
// $scope.form_params['cmd'] = 'edit';
//}
//else {
// $scope.form_params['cmd'] = 'add';
//}
// get form with generator
if ($routeParams.model) {
Generator.get_form($scope);
}
$scope.onSubmit = function (form) {
$scope.$broadcast('schemaFormValidate');
if (form.$valid) {
Generator.submit($scope)
.success(function(data){
})
.error(function(data){
//$scope.message = data.title;
});
}
};
});
/**
* WorkFlow List Controller
*/
wf.controller('WFListCtrl', function ($scope, $rootScope, Generator, $routeParams) {
$scope.url = "";
$scope.form_params = $routeParams;
if ($routeParams.nobjects){
$scope.nobjects = $routeParams.nobjects;
$scope.model = $routeParams.model;
} else {
// call generator's get_list func
Generator.get_list($scope)
.then(function (res) {
$scope.nobjects = res.data.nobjects;
$scope.model = $routeParams.model;
});
}
});
/**
* WorkFlow Show Controller
*/
wf.controller('WFShowCtrl', function ($scope, $rootScope, Generator, $routeParams) {
$scope.url = "";
$scope.form_params = {"object_id": $routeParams.id, "cmd": "show", "model": $routeParams.model};
// call generator's get_single_itemfunc
Generator.get_single_item($scope).then(function (res) {
$scope.listobjects = {};
$scope.object = res.data.object;
angular.forEach($scope.object, function (value, key) {
if(typeof value == 'object'){
$scope.listobjects[key] = value;
delete $scope.object[key];
}
});
$scope.model = $routeParams.model;
})
});
\ No newline at end of file
/**
* Copyright (C) 2015 ZetaOps Inc.
*
* This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details.
*/
'use strict';
describe('crud controller module', function () {
beforeEach(module('ulakbus'));
beforeEach(module('ulakbus.crud'));
var $controller;
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe('crud add controller', function() {
it('should get form', function() {
var $scope = {};
var controller = $controller('CRUDAddEditCtrl', { $scope: $scope });
expect($scope).not.toEqual(null);
});
});
// todo: chack if needed for these tests
// describe('crud list controller', function() {
// it('should get list', function() {
// var $scope = {};
// var controller = $controller('CRUDListCtrl', { $scope: $scope });
// expect($scope).not.toEqual(null);
// });
// });
// describe('crud show controller', function() {
// it('should get single item', function() {
// var $scope = {};
// var controller = $controller('CRUDShowCtrl', { $scope: $scope });
// expect($scope).not.toEqual(null);
// });
// });
describe('crud controller', function () {
it('should have CRUDAddEditCtrl', inject(function ($controller) {
expect($controller).toBeDefined();
}));
it('should have CRUDListCtrl', inject(function ($controller) {
expect($controller).toBeDefined();
}));
it('should have CRUDShowCtrl', inject(function ($controller) {
expect($controller).toBeDefined();
}));
});
});
\ No newline at end of file
...@@ -22,7 +22,6 @@ var app = angular.module( ...@@ -22,7 +22,6 @@ var app = angular.module(
'ulakbus.crud', 'ulakbus.crud',
'ulakbus.debug', 'ulakbus.debug',
'ulakbus.devSettings', 'ulakbus.devSettings',
'ulakbus.wf',
'ulakbus.version', 'ulakbus.version',
//'schemaForm', //'schemaForm',
'gettext', 'gettext',
......
...@@ -10,7 +10,7 @@ var form_generator = angular.module('formService', ['general']); ...@@ -10,7 +10,7 @@ var form_generator = angular.module('formService', ['general']);
/** /**
* form service's Generator factory service handles all generic form operations * form service's Generator factory service handles all generic form operations
*/ */
form_generator.factory('Generator', function ($http, $q, $timeout, $location, $compile, RESTURL, FormDiff, $rootScope) { form_generator.factory('Generator', function ($http, $q, $timeout, $location, $route, $compile, $log, RESTURL, FormDiff, $rootScope) {
var generator = {}; var generator = {};
generator.makeUrl = function (scope) { generator.makeUrl = function (scope) {
var getparams = scope.form_params.param ? "?" + scope.form_params.param + "=" + scope.form_params.id : ""; var getparams = scope.form_params.param ? "?" + scope.form_params.param + "=" + scope.form_params.id : "";
...@@ -54,6 +54,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -54,6 +54,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
// here change to true because the view retrieves form from api // here change to true because the view retrieves form from api
$rootScope.showSaveButton = true; $rootScope.showSaveButton = true;
$log.debug('scope at after generate', scope);
return scope; return scope;
}; };
/** /**
...@@ -89,7 +90,6 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -89,7 +90,6 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
// generically change _id fields model value // generically change _id fields model value
if ('form_params' in scope) { if ('form_params' in scope) {
debugger;
if (k == scope.form_params.param) { if (k == scope.form_params.param) {
scope.model[k] = scope.form_params.id; scope.model[k] = scope.form_params.id;
scope.form.splice(scope.form.indexOf(k), 1); scope.form.splice(scope.form.indexOf(k), 1);
...@@ -113,7 +113,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -113,7 +113,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
scope.form[scope.form.indexOf(k)] = { scope.form[scope.form.indexOf(k)] = {
type: v.type, type: v.type,
title: v.title, title: v.title,
style: "btn-primary movetobottom hide pull-left", style: "btn-primary movetobottom hide",
onClick: function () { onClick: function () {
delete scope.form_params.cmd; delete scope.form_params.cmd;
delete scope.form_params.flow; delete scope.form_params.flow;
...@@ -255,6 +255,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -255,6 +255,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
} }
}); });
$log.debug('scope at after prepareformitems', scope);
return scope; return scope;
}; };
/** /**
...@@ -278,57 +279,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -278,57 +279,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
$scope.form_params.id = $scope.param_id; $scope.form_params.id = $scope.param_id;
generator.get_wf($scope); generator.get_wf($scope);
}; };
/**
* itemLinksGenerator function used for generic links for list items
* basicly creates add, edit, detail links
* @param scope
* @param itemlist
* @returns links
*/
generator.itemLinksGenerator = function (scope, itemlist) {
angular.forEach(itemlist.objects, function (value, key) {
function makelink(page) {
if (value === '-1' && page !== 'add/') {
return;
}
var link = "#" + scope.url;
if (scope.form_params) {
if (scope.form_params.model) {
link += '/' + scope.form_params.model;
}
}
link += "/" + page;
if (value.key) {
link += value.key;
}
if (scope.form_params) {
if (scope.form_params.param) {
link += "?" + scope.form_params.param + "=" + scope.form_params.id;
}
}
return link;
}
// call add link once
if (!itemlist.addLink) {
itemlist.addLink = makelink("form/");
}
if (value !== '-1') {
value.detailLink = makelink("show/");
value.editLink = makelink("form/");
}
});
};
/**
* gets form
* @param scope
* @returns {*}
*/
generator.get_form = function (scope) { generator.get_form = function (scope) {
return $http return $http
.post(generator.makeUrl(scope), scope.form_params) .post(generator.makeUrl(scope), scope.form_params)
...@@ -345,21 +296,6 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -345,21 +296,6 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
return $http return $http
.get(generator.makeUrl(scope)) .get(generator.makeUrl(scope))
.then(function (res) { .then(function (res) {
//generator.dateformatter(res);
generator.itemLinksGenerator(scope, res.data);
return res;
});
};
/**
* gets single object with object_id
* @param scope
* @returns {*}
*/
generator.get_single_item = function (scope) {
return $http
.post(generator.makeUrl(scope), scope.form_params)
.then(function (res) {
//generator.dateformatter(res);
return res; return res;
}); });
}; };
...@@ -373,8 +309,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -373,8 +309,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
return $http return $http
.post(generator.makeUrl(scope), scope.form_params) .post(generator.makeUrl(scope), scope.form_params)
.then(function (res) { .then(function (res) {
//generator.generate(scope, res.data); return generator.pathDecider(res.data.client_cmd, scope, res.data);
generator.pathDecider(res.data.client_cmd, scope, res.data);
}); });
}; };
generator.isValidEmail = function (email) { generator.isValidEmail = function (email) {
...@@ -439,13 +374,20 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -439,13 +374,20 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
* @param page * @param page
*/ */
function redirectTo(scope, page){ function redirectTo(scope, page){
var pathUrl = scope.form_params.wf; var pathUrl = '/'+scope.form_params.wf;
if (scope.form_params.model) { if (scope.form_params.model) {
pathUrl += '/' + scope.form_params.model + '/' + page; pathUrl += '/' + scope.form_params.model + '/do/' + page;
} else { } else {
pathUrl += '/' + page; pathUrl += '/do/' + page;
} }
$location.path(pathUrl).search(angular.fromJson({pageData: true})); // todo add object url to path
// pathUrl += '/'+scope.form_params.object_id || '';
// if generated path url and the current path is equal route has to be reload
if ($location.path() === pathUrl) {return $route.reload();}
else {$location.path(pathUrl);}
$log.debug('pathDecider scope', scope);
} }
// client_cmd can be in ['list', 'form', 'show', 'reload', 'reset'] // client_cmd can be in ['list', 'form', 'show', 'reload', 'reset']
...@@ -456,22 +398,12 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -456,22 +398,12 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
data['wf'] = $scope.form_params.wf; data['wf'] = $scope.form_params.wf;
data['param'] = $scope.form_params.param; data['param'] = $scope.form_params.param;
data['param_id'] = $scope.form_params.id; data['param_id'] = $scope.form_params.id;
data['pageData'] = true;
generator.setPageData(data); generator.setPageData(data);
if (client_cmd[0] === 'list') {
generator.itemLinksGenerator($scope, data);
}
redirectTo($scope, client_cmd[0]); redirectTo($scope, client_cmd[0]);
} }
dispatchClientCmd(); dispatchClientCmd();
//if (client_cmd.indexOf('form') > -1 && client_cmd.indexOf('list') > -1) {
// // todo: controller will be created and tested
// generator.generate($scope, data);
// generator.itemLinksGenerator($scope, data);
// data[$scope.form_params.param] = $scope.form_params.id;
// redirectTo($scope, 'formwithlist');
//}
}; };
/** /**
...@@ -490,24 +422,12 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c ...@@ -490,24 +422,12 @@ form_generator.factory('Generator', function ($http, $q, $timeout, $location, $c
}); });
var data = { var data = {
"form": $scope.model, "form": $scope.model,
"token": $scope.token "token": $scope.token,
"model": $scope.form_params.model,
"cmd": $scope.form_params.cmd,
"flow": $scope.form_params.flow,
"object_id": $scope.object_id
}; };
if ($scope.form_params.model) {
data["model"] = $scope.form_params.model;
}
if ($scope.form_params.cmd) {
data["cmd"] = $scope.form_params.cmd;
}
if ($scope.form_params.flow) {
data["flow"] = $scope.form_params.flow;
}
// todo: remove object_id ?? why?
if ($scope.object_id) {
//var get_diff = FormDiff.get_diff($scope.model, $scope.initialModel);
data.object_id = $scope.object_id;
//data.form = get_diff;
}
return $http.post(generator.makeUrl($scope), data) return $http.post(generator.makeUrl($scope), data)
.success(function (data) { .success(function (data) {
...@@ -631,8 +551,8 @@ form_generator.directive('addModalForLinkedModel', function ($modal, $route, Gen ...@@ -631,8 +551,8 @@ form_generator.directive('addModalForLinkedModel', function ($modal, $route, Gen
resolve: { resolve: {
items: function () { items: function () {
return Generator.get_form({ return Generator.get_form({
url: 'crud/', url: 'crud',
form_params: {'model': scope.form.model_name, "cmd": "add"} form_params: {'model': scope.form.model_name, "cmd": "form"}
}); });
} }
} }
...@@ -667,8 +587,8 @@ form_generator.directive('editModalForLinkedModel', function ($modal, Generator) ...@@ -667,8 +587,8 @@ form_generator.directive('editModalForLinkedModel', function ($modal, Generator)
resolve: { resolve: {
items: function () { items: function () {
return Generator.get_form({ return Generator.get_form({
url: 'crud/', url: 'crud',
form_params: {'model': scope.form.title, "cmd": "add"} form_params: {'model': scope.form.title, "cmd": "form"}
}); });
} }
} }
......
...@@ -22,7 +22,7 @@ describe('form service module', function () { ...@@ -22,7 +22,7 @@ describe('form service module', function () {
function (Generator) { function (Generator) {
expect(Generator.group).not.toBe(null); expect(Generator.group).not.toBe(null);
var generated_url = Generator.makeUrl({url: 'test', form_params: {}}); var generated_url = Generator.makeUrl({url: 'test', form_params: {}});
expect(generated_url).toEqual("http://api.ulakbus.net/test/"); expect(generated_url).toEqual("//nightly.api.ulakbus.net/test/");
}]) }])
); );
...@@ -197,32 +197,6 @@ describe('form service module', function () { ...@@ -197,32 +197,6 @@ describe('form service module', function () {
}) })
); );
it('should get single item',
inject(function (Generator, $httpBackend, RESTURL) {
$httpBackend.expectPOST(RESTURL.url + 'test/personel?personel_id=123')
.respond(200, {
items: {
"client_cmd": "show_object",
"object": {
"ad": "name",
"soyad": "lastname",
},
"token": "da73993f439549e7855fd82deafbbc99",
"is_login": true
}
});
var cred = {cmd: 'show', model: 'personel', param: 'personel_id', id: '123'};
Generator.get_single_item({url: 'test', form_params: cred})
.then(function (data) {
expect(data.data.items.token).toEqual("da73993f439549e7855fd82deafbbc99");
});
$httpBackend.flush();
})
);
it('should submit form', it('should submit form',
inject(function (Generator, $httpBackend, RESTURL) { inject(function (Generator, $httpBackend, RESTURL) {
...@@ -333,9 +307,8 @@ describe('form service module', function () { ...@@ -333,9 +307,8 @@ describe('form service module', function () {
"token": "da73993f439549e7855fd82deafbbc99", "token": "da73993f439549e7855fd82deafbbc99",
"is_login": true "is_login": true
}); });
console.log(32131);
scope.url = 'test'; //scope.url = 'test';
scope.form_params = { scope.form_params = {
param: 'test', param: 'test',
id:'xyz123', id:'xyz123',
...@@ -361,35 +334,6 @@ describe('form service module', function () { ...@@ -361,35 +334,6 @@ describe('form service module', function () {
ctrl = $controller("CRUDCtrl", {$scope: scope}); ctrl = $controller("CRUDCtrl", {$scope: scope});
})); }));
it('should generate itemlinks of objects in response data',
inject(function (Generator) {
var responseObject = {
"objects": [
"-1",
{
"fields": ["test object"],
"actions": [{"cmd": "delete", "name": "Sil"}, {"wf": "manage_permissions", "name": "Yetkilendir", "mode": "modal"}],
"do_list": true,
"key": "xx10"},
{
"fields": ["test object 2"],
"actions": [{"cmd": "delete", "name": "Sil"}, {"wf": "manage_permissions", "name": "Yetkilendir", "mode": "modal"}],
"do_list": true,
"key": "xx11"}
]
};
scope.url = 'test';
scope.form_params = {
param: 'test',
id:'xyz123',
model:'testModel',
object_id: 'xxx11',
wf:'testModel'};
Generator.itemLinksGenerator(scope, responseObject);
expect(responseObject.objects[1].detailLink).toEqual('#test/testModel/detail/xx10?test=xyz123');
})
);
}); });
var $controller; var $controller;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment