Commit d136b928 authored by Evren Kutar's avatar Evren Kutar

crud views edit according to new structure of api

parent 012529d5
......@@ -10,29 +10,25 @@ app.config(['$routeProvider', function ($routeProvider, $route) {
templateUrl: 'components/dashboard/dashboard.html',
controller: 'DashCtrl'
})
.when('/crud/:model/:id', {
.when('/crud/add/:model/:param/:id', {
templateUrl: 'components/crud/templates/add.html',
controller: 'CRUDAddEditCtrl',
reloadOnSearch: true
controller: 'CRUDAddEditCtrl'
})
//.when('/crud/:model/edit/:id', {
// templateUrl: 'components/crud/templates/add.html',
// controller: 'CRUDAddEditCtrl'
//})
.when('/crud/:model', {
templateUrl: 'components/crud/templates/list.html',
controller: 'CRUDListCtrl',
reloadOnSearch: true
.when('/crud/edit/:model/:param/:id/:key', {
templateUrl: 'components/crud/templates/add.html',
controller: 'CRUDAddEditCtrl'
})
.when('/crud/:model/:param/:id', {
templateUrl: 'components/crud/templates/list.html',
controller: 'CRUDListCtrl'
})
.when('/crud/detail/:model/:param/:id/:key', {
templateUrl: 'components/crud/templates/show.html',
controller: 'CRUDShowCtrl',
reloadOnSearch: true
controller: 'CRUDShowCtrl'
})
.when('/:model/', {
templateUrl: 'components/wf/templates/add.html',
controller: 'WFAddEditCtrl',
reloadOnSearch: true
controller: 'WFAddEditCtrl'
})
.otherwise({redirectTo: '/dashboard'});
}])
......
......@@ -17,10 +17,10 @@ var crud = angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formSe
*/
crud.controller('CRUDAddEditCtrl', function ($scope, $rootScope, $location, $http, $log, $modal, $timeout, Generator, $routeParams) {
$scope.url = 'crud';
$scope.form_params = {'model': $routeParams.model};
if ($routeParams.id) {
$scope.form_params['object_id'] = $routeParams.id;
$scope.url = 'crud/';
$scope.form_params = {'model': $routeParams.model, param: $routeParams.param, id: $routeParams.id};
if ($routeParams.key) {
$scope.form_params['key'] = $routeParams.key;
$scope.form_params['cmd'] = 'edit';
}
else {
......@@ -37,10 +37,10 @@ crud.controller('CRUDAddEditCtrl', function ($scope, $rootScope, $location, $htt
if (form.$valid) {
Generator.submit($scope)
.success(function(data){
$location.path('/crud/'+$scope.form_params.model).search(data);
.success(function (data) {
$location.path('/crud/' + $scope.form_params.model).search(data);
})
.error(function(data){
.error(function (data) {
$scope.message = data.title;
});
}
......@@ -56,7 +56,7 @@ crud.controller('CRUDListCtrl', function ($scope, $rootScope, Generator, $routeP
$scope.url = 'crud/';
$scope.form_params = $routeParams;
if ($routeParams.nobjects){
if ($routeParams.nobjects) {
$scope.nobjects = $routeParams.nobjects;
$scope.model = $routeParams.model;
} else {
......@@ -72,16 +72,26 @@ crud.controller('CRUDListCtrl', function ($scope, $rootScope, Generator, $routeP
/**
* CRUD Show Controller
*/
crud.controller('CRUDShowCtrl', function ($scope, $rootScope, Generator, $routeParams) {
crud.controller('CRUDShowCtrl', function ($scope, $rootScope, $location, Generator, $routeParams) {
$scope.url = 'crud/';
$scope.form_params = {"object_id": $routeParams.id, "cmd": "show", "model": $routeParams.model};
// call generator's get_single_itemfunc
$scope.form_params = {
"object_id": $routeParams.id,
"cmd": "show",
param: $routeParams.param,
"model": $routeParams.model
};
// call generator's get_single_item func
Generator.get_single_item($scope).then(function (res) {
console.log(res.data.nobjects);
// if no data to show redirect to add/edit view
if (res.data.nobjects[0] === "-1") {
$location.path('crud/' + $scope.form_params.model + '/' + $scope.form_params.param + '/' + $scope.form_params.object_id + '/edit');
}
$scope.listobjects = {};
$scope.object = res.data.object;
angular.forEach($scope.object, function (value, key) {
if(typeof value == 'object'){
if (typeof value == 'object') {
$scope.listobjects[key] = value;
delete $scope.object[key];
}
......
<h1>{{ schema.title }}</h1>
<form id="formgenerated" name="formgenerated" sf-schema="schema" sf-form="form" sf-model="model"></form>
<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 }}
......
<div class="starter-template">
<h1>{{model}} <a href="#/crud/{{model}}/add"><button type="button" class="btn btn-primary">Ekle</button></a></h1>
<h1>{{model}}
<a href="#/crud/add/{{model}}/{{form_params.param}}/{{form_params.id}}">
<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>
......@@ -29,15 +33,16 @@
</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>
<a ng-href="#/crud/edit/{{model}}/{{form_params.param}}/{{form_params.id}}{{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>
<a ng-href="#/crud/edit/{{model}}/{{form_params.param}}/{{form_params.id}}{{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>
<a ng-href="#/crud/edit/{{model}}/{{form_params.param}}/{{form_params.id}}{{object[0]}}">Edit</a>
<br>
</td>
</tr>
</tbody>
......
......@@ -43,7 +43,6 @@ app.directive('headerNotification', function ($http, $rootScope, $interval, REST
$scope.notifications[value.type].push(value);
});
$rootScope.$broadcast("notifications", $scope.notifications);
console.log($scope.notifications);
});
}, 5000);
}
......
......@@ -24,7 +24,10 @@
</a>
<ul class="nav nav-second-level" ng-class="{hidden: $root.collapsed}">
<li ng-repeat="v in item">
<a ng-href="#{{v.url}}{{$root.selectedUser.key}}"
<a ng-if="key == 'other'" ng-href="#{{v.url}}/{{$root.selectedUser.key}}"
ng-click="breadcrumb([key, v.text], $event)">{{v.text}}</a>
<a ng-if="key == 'ogrenci' || key == 'personel'"
ng-href="#{{v.url}}{{v.param}}/{{$root.selectedUser.key}}"
ng-click="breadcrumb([key, v.text], $event)">{{v.text}}</a>
</li>
</ul>
......
......@@ -9,16 +9,8 @@ var form_generator = angular.module('formService', ['general']);
form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, FormDiff, $rootScope) {
var generator = {};
generator.makePostUrl = function (scope) {
return RESTURL.url + scope.url;
};
generator.makeGetUrl = function (scope) {
if (scope.form_params.cmd === "list") {
var getparams = "";
}
if (scope.form_params.cmd === "show") {
var getparams = "?" + scope.form_params.param + "=" + scope.form_params.object_id;
}
generator.makeUrl = function (scope) {
var getparams = "?" + scope.form_params.param + "=" + scope.form_params.id;
return RESTURL.url + scope.url + scope.form_params.model + getparams;
};
generator.generate = function (scope, data) {
......@@ -59,52 +51,60 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
/**
* prepareforms checks input types and convert if necessary
*/
angular.forEach(scope.schema.properties, function (k, v) {
angular.forEach(scope.schema.properties, function (v, k) {
// check if type is date and if type date found change it to string
if (k.type === 'submit' || k.type === 'button') {
if (v.type === 'submit' || v.type === 'button') {
//k.type = 'button';
angular.forEach(scope.form, function (value, key) {
if (value === v) {
k.type = 'button';
scope.form[key] = {type: k.type, title: k.title, onClick: function(){scope.model[v]=1;generator.submit(scope);}};
v.type = 'button';
scope.form[key] = {type: v.type, title: v.title, onClick: function(){scope.model[v]=1;generator.submit(scope);}};
}
});
}
if (k.type === 'date') {
k.type = 'string';
scope.model[v] = generator.dateformatter(scope.model[v]);
if (v.type === 'date') {
v.type = 'string';
scope.model[k] = generator.dateformatter(scope.model[k]);
$timeout(function () {
jQuery('#' + v).datepicker({
jQuery('#' + k).datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "dd.mm.yy",
onSelect: function (date) {
scope.model[v] = date;
scope.model[k] = date;
}
});
});
}
if (k.type === 'int' || k.type === 'float') {
k.type = 'number';
if (v.type === 'int' || v.type === 'float') {
v.type = 'number';
}
if (v.type === 'text_general') {
v.type = 'string';
v["x-schema-form"] = {
"type": "textarea",
//"placeholder": ""
}
}
// if type is model use foreignKey.html template to show them
if (k.type === 'model') {
if (v.type === 'model') {
var formitem = scope.form[scope.form.indexOf(v)];
var modelscope = {"url": scope.url, "form_params": {model: k.model_name}};
var formitem = scope.form[scope.form.indexOf(k)];
var modelscope = {"url": scope.url, "form_params": {model: v.model_name, param: scope.form_params.param, id: scope.form_params.id}};
formitem = {
type: "template",
templateUrl: "shared/templates/foreignKey.html",
title: k.title,
name: k.model_name,
model_name: k.model_name,
title: v.title,
name: v.model_name,
model_name: v.model_name,
titleMap: generator.get_list(modelscope).then(function (res) {
formitem.titleMap = [];
angular.forEach(res.data.nobjects, function (item) {
......@@ -117,17 +117,17 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
});
}),
onSelect: function (item) {
scope.model[v] = item.value;
scope.model[k] = item.value;
},
onDropdownSelect: function(item, inputname) {
scope.model[v] = item.value;
scope.model[k] = item.value;
jQuery('input[name=' + inputname + ']').val(item.name);
}
};
// get model objects from db and add to select list
scope.form[scope.form.indexOf(v)] = formitem;
scope.form[scope.form.indexOf(k)] = formitem;
//scope.$broadcast('schemaFormRedraw');
// todo: make lines below work properly
......@@ -136,50 +136,57 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
//}
}
if (k.type === 'ListNode' || k.type === 'Node') {
if (v.type === 'ListNode' || v.type === 'Node') {
scope[k.type] = scope[k.type] || {};
scope[v.type] = scope[v.type] || {};
scope[k.type][v] = {
title: k.title,
scope[v.type][k] = {
title: v.title,
form: [],
schema: {
properties: {},
required: [],
title: k.title,
title: v.title,
type: "object",
formType: k.type,
model_name: v
formType: v.type,
model_name: k
},
url: scope.url
};
if (scope.model[v] === null) {
scope[k.type][v].model = k.type === 'Node' ? {} : [];
if (scope.model[k] === null) {
scope[v.type][k].model = v.type === 'Node' ? {} : [];
} else {
scope[k.type][v].model = scope.model[v];
scope[v.type][k].model = scope.model[k];
}
angular.forEach(k.schema, function (item) {
scope[k.type][v].schema.properties[item.name] = item;
angular.forEach(v.schema, function (item) {
scope[v.type][k].schema.properties[item.name] = item;
// prepare required fields
if (item.required === true && item.name !== 'idx') {
scope[k.type][v].schema.required.push(item.name);
scope[v.type][k].schema.required.push(item.name);
}
// idx field must be hidden
if (item.name === 'idx') {
scope[k.type][v].form.push({type: 'string', key: item.name, htmlClass: 'hidden'});
scope[v.type][k].form.push({type: 'string', key: item.name, htmlClass: 'hidden'});
} else {
scope[k.type][v].form.push(item.name);
scope[v.type][k].form.push(item.name);
}
});
// lengthModels is length of the listnode models. if greater than 0 show records on template
scope[k.type][v]['lengthModels'] = scope.model[v] ? 1 : 0;
scope[v.type][k]['lengthModels'] = scope.model[k] ? 1 : 0;
}
// generically change _id fields model value
if (k === scope.form_params.param + '_id') {
scope.model[k] = scope.form_params.id;
scope.form.splice(scope.form.indexOf(k), 1);
}
});
......@@ -188,22 +195,23 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
};
generator.dateformatter = function (formObject) {
var ndate = new Date(formObject);
if (ndate === 'Invalid Date') {
if (ndate == 'Invalid Date') {
return '';
} else {
var newdatearray = [ndate.getDate(), ndate.getMonth(), ndate.getFullYear()];
return newdatearray.join('.');
}
var newdatearray = [ndate.getDate(), ndate.getMonth(), ndate.getFullYear()];
return newdatearray.join('.');
};
generator.get_form = function (scope) {
return $http
.post(generator.makePostUrl(scope), scope.form_params)
.post(generator.makeUrl(scope), scope.form_params)
.then(function (res) {
return generator.generate(scope, res.data);
});
};
generator.get_list = function (scope) {
return $http
.get(generator.makeGetUrl(scope))
.get(generator.makeUrl(scope))
.then(function (res) {
//generator.dateformatter(res);
return res;
......@@ -211,7 +219,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
};
generator.get_single_item = function (scope) {
return $http
.get(generator.makeGetUrl(scope))
.get(generator.makeUrl(scope))
.then(function (res) {
//generator.dateformatter(res);
return res;
......@@ -275,7 +283,7 @@ form_generator.factory('Generator', function ($http, $q, $timeout, RESTURL, Form
//data.form = get_diff;
}
return $http.post(generator.makePostUrl($scope), data)
return $http.post(generator.makeUrl($scope), data)
.success(function (data) {
// if return data consists forms key then trogger redraw the form with updated data
if (data.forms) {
......
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