Initial commit

This commit is contained in:
Reynaldo Reyes
2016-02-29 00:49:18 -04:30
commit 90d22e3405
67 changed files with 4025 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
body {
padding-top: 70px;
padding-bottom: 30px;
}
.box {
margin-bottom: 20px;
background-color: #fff;
border: 1px solid transparent;
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.box > h3 {
color: #333;
border-color: #ddd;
border-bottom: 1px solid transparent;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
background-repeat: repeat-x;
display: block;
font-size: 16px;
padding: 10px 15px;
margin-top: 0;
margin-bottom: 0;
}
.box-padding {
padding: 15px;
}
.box-padding > h3 {
margin: -15px;
margin-bottom: 15px;
}
.box-grey {
border-color: #ddd;
}
.box-grey > h3 {
background-color: #f5f5f5;
background-image: -webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);
background-image: linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);
}
.box-blue {
border-color: #bce8f1;
}
.box-blue > h3 {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
background-image: -webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);
background-image: linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);
}
.box-yellow {
border-color: #faebcc;
}
.box-yellow > h3 {
//color: #8a6d3b;
//background-color: #fcf8e3;
//border-color: #faebcc;
//background-image: -webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);
//background-image: linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);
}

149
app/css/nested.css Normal file
View File

@@ -0,0 +1,149 @@
/***************************** Required styles *****************************/
/**
* For the correct positioning of the placeholder element, the dnd-list and
* it's children must have position: relative
*/
.nestedDemo ul[dnd-list],
.nestedDemo ul[dnd-list] > li {
position: relative;
}
/***************************** Dropzone Styling *****************************/
/**
* The dnd-list should always have a min-height,
* otherwise you can't drop to it once it's empty
*/
.nestedDemo .dropzone ul[dnd-list] {
min-height: 42px;
margin: 0px;
padding-left: 0px;
}
/**
* The dnd-lists's child elements currently MUST have
* position: relative. Otherwise we can not determine
* whether the mouse pointer is in the upper or lower
* half of the element we are dragging over. In other
* browsers we can use event.offsetY for this.
*/
.nestedDemo .dropzone li {
background-color: #fff;
border: 1px solid #ddd;
display: block;
padding: 0px;
}
/**
* Reduce opacity of elements during the drag operation. This allows the user
* to see where he is dropping his element, even if the element is huge. The
* .dndDragging class is automatically set during the drag operation.
*/
.nestedDemo .dropzone .dndDragging {
opacity: 0.7;
}
/**
* The dndDraggingSource class will be applied to the source element of a drag
* operation. It makes sense to hide it to give the user the feeling that he's
* actually moving it. Note that the source element has also .dndDragging class.
*/
.nestedDemo .dropzone .dndDraggingSource {
display: none;
}
/**
* An element with .dndPlaceholder class will be added as child of the dnd-list
* while the user is dragging over it.
*/
.nestedDemo .dropzone .dndPlaceholder {
background-color: #ddd;
min-height: 42px;
display: block;
position: relative;
}
/***************************** Element Selection *****************************/
.nestedDemo .dropzone .selected .item {
color: #3c763d;
background-color: #dff0d8;
}
.nestedDemo .dropzone .selected .box {
border-color: #d6e9c6;
}
.nestedDemo .dropzone .selected .box > h3 {
color: #3c763d;
background-color: #dff0d8;
background-image: linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);
border-color: #d6e9c6;
}
/***************************** Element type specific styles *****************************/
.nestedDemo .dropzone .item {
padding: 10px 15px;
}
.nestedDemo .dropzone .container-element {
margin: 10px;
}
.nestedDemo .dropzone .container-element .column {
float: left;
width: 16.666%;
}
.nestedDemo .dropzone .container-element .columnQuestions {
float: left;
width: 100%;
}
/***************************** Toolbox *****************************/
.nestedDemo .toolbox ul {
list-style: none;
padding-left: 0px;
cursor: move;
}
.nestedDemo .toolbox button {
margin: 5px;
//width: 123px;
opacity: 1.0;
}
.nestedDemo .toolbox .dndDragging {
opacity: 0.5;
}
.nestedDemo .toolbox .dndDraggingSource {
opacity: 1.0;
}
/***************************** Trashcan *****************************/
.nestedDemo .trashcan ul {
list-style: none;
padding-left: 0px;
}
.nestedDemo .trashcan img {
width: 100%;
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
filter: grayscale(100%);
}
.nestedDemo .trashcan .dndDragover img {
width: 100%;
-webkit-filter: none;
-moz-filter: none;
filter: none;
}
.nestedDemo .trashcan .dndPlaceholder {
display: none;
}

View File

@@ -0,0 +1,59 @@
html, body {
height: 100%;
margin: 0px;
padding: 0px
}
.pac-controls {
margin-top: 16px;
border: 1px solid transparent;
border-radius: 2px 0 0 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
height: 32px !important;
outline: none;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
#pac-input {
background-color: #fff;
padding: 0 11px 0 13px;
width: 400px;
font-family: 'Open Sans', sans-serif;
font-size: 15px;
font-weight: 300;
text-overflow: ellipsis;
}
#pac-input:focus {
border-color: #4d90fe;
margin-left: -1px;
padding-left: 14px; /* Regular padding-left + 1. */
width: 401px;
}
.pac-container {
font-family: 'Open Sans', sans-serif;
}
#type-selector {
color: #fff;
background-color: #4d90fe;
padding: 5px 11px 0px 11px;
}
#type-selector label {
font-family: 'Open Sans', sans-serif;
font-size: 13px;
font-weight: 300;
}
.angular-google-map-container {
width: 100%;
height: 600px;
}
/* fix for Twitter Bootstrap handling of responsive images */
.angular-google-map img {
max-width: inherit;
}

130
app/css/style.css Normal file
View File

@@ -0,0 +1,130 @@
/*
* Estilos para el modulo de notas marginales.
*/
/* El contenido se desplaza hacia abajo porque usamos una barra de navegación fija de 50px */
body {
padding-top: 85px;
}
/*
* Barra de navegación superior
* Se elimina el borde por defecto de 1px.
*/
.navbar-fixed-top {
border: 0;
}
.navbar-fixed-top-special {
position: fixed;
z-index: 30;
}
/*
* Sidebar
*/
/* Hide for mobile, show later */
.sidebar {
display: none;
}
@media (min-width: 768px) {
.sidebar {
position: fixed;
top: 85px;
bottom: 0;
left: 0;
z-index: 1000;
display: block;
padding: 20px;
overflow-x: hidden;
overflow-y: auto; /* Si el contenido es mayor al visor, se hace scroll */
background-color: #f5f5f5;
border-right: 1px solid #ccc;
}
}
/* Navegación del sidebar */
.nav-sidebar {
margin-right: -21px; /* 20px padding + 1px border */
margin-bottom: 20px;
margin-left: -20px;
}
.nav-sidebar > li > a {
padding-right: 20px;
padding-left: 20px;
color: #000;
}
.nav-sidebar > .active > a,
.nav-sidebar > .active > a:hover,
.nav-sidebar > .active > a:focus {
font-style: italic;
color: #FFF;
background-color: #808080;
}
/*
* Contenido principal.
*/
.main { padding: 20px; }
@media (min-width: 768px) {
.main {
padding-right: 40px;
padding-left: 40px;
}
}
.main .page-header { margin-top: 0; }
/* Barra superior */
.navbar { min-height: 85px; }
.navbar-inverse { background-color: #CCC; }
.navbar-inverse .navbar-brand { color: #808080; }
.navbar-inverse .navbar-nav > li > a { color: #808080; }
/* Estilos para errores de validación */
small.error { color: red; }
input.ng-dirty.ng-valid { border:1px solid Green; }
input.ng-dirty.ng-invalid { border:1px solid Red; }
.research tr.accordion td { background:transparent url(row_bkg.png) repeat-x scroll center left; cursor:pointer; }
.research .accordion img.arrow { background:transparent url(../img/arrows.png) no-repeat scroll 0px -16px; width:16px; height:16px; display:block;}
.research .accordion img.up { background:transparent url(../img/arrows.png) no-repeat scroll 0px -16px; width:16px; height:16px; display:block; background-position:0px 0px;}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
svg .state {
stroke-width: 2;
stroke: #fff;
-webkit-transition: stroke 0.5s, stroke-width 0.5s;
-o-transition: stroke 0.5s, stroke-width 0.5s;
transition: stroke 0.5s, stroke-width 0.5s;
}
svg .state:hover , .state.active {
cursor: pointer;
stroke-width: 4;
stroke: #000;
}
.regionlist {
-webkit-column-count: 5; /* Chrome, Safari, Opera */
-moz-column-count: 5; /* Firefox */
column-count: 5;
}
.regionlist > div {
display: inline-block;
width: 100%;
border-bottom: 1px solid grey;
}
.regionlist > div > div {
display: inline-block;
width: 48%;
}

BIN
app/img/logo_ciencias.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
app/img/logo_ucv.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

109
app/index.html Normal file
View File

@@ -0,0 +1,109 @@
<html lang="en" ng-app="app">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="favicon.ico">
<title>Modulo de Administración de Asistencia</title>
<!-- Bootstrap CSS -->
<!-- ======================-->
<link href="bower_components/bootstrap/dist/css/bootstrap.css" rel="stylesheet">
<link href="bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" >
<link href="css/nested.css" type="text/css" rel="stylesheet" />
<link href="css/demo-framework.css" type="text/css" rel="stylesheet"/>
<link href="css/search-box-example.css" type="text/css" rel="stylesheet" >
<link href="bower_components/angular-chart.js/dist/angular-chart.css" rel="stylesheet">
<!-- Custom styles for this template -->
<!-- ====================================-->
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<div ui-view name="navbar"></div>
<div class="container-fluid">
<div class="row">
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" ui-view name="content"></div>
<div ui-view name="sidebar"></div>
</div>
</div>
<!-- Thirdpary JavaScript and modules. -->
<!-- ================================================== -->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/angular-base64/angular-base64.js"></script>
<script src="bower_components/jquery/dist/jquery.min.js"></script>
<script src="bower_components/ng-scrollbar/dist/ng-scrollbar.min.js"></script>
<link rel="stylesheet" href="bower_components/ng-scrollbar/dist/ng-scrollbar.min.css" >
<script src="bower_components/ng-scrollable/min/ng-scrollable.min.js"></script>
<link rel="stylesheet" href="bower_components/ng-scrollable/min/ng-scrollable.min.css" >
<script src="bower_components/lodash/lodash.min.js" type="text/javascript"></script>
<script src="bower_components/angular-simple-logger/dist/index.js"></script>
<script src="bower_components/angular-google-maps/dist/angular-google-maps.js"></script>
<script src="bower_components/crypto-js/crypto-js.js"></script>
<script src="bower_components/crypto-js/md5.js"></script>
<script src="bower_components/crypto-js/sha1.js"></script>
<script src="bower_components/crypto-js/sha256.js"></script>
<script src="bower_components/crypto-js/sha512.js"></script>
<script src="bower_components/crypto-js/enc-base64.js"></script>
<script src="bower_components/base64/base64.js"></script>
<!-- Application Javascript -->
<!-- ====================================================-->
<script src="js/app.js"></script>
<script src="js/course/course.module.js"></script>
<script src="js/course/course.controllers.js"></script>
<script src="js/course/course.services.js"></script>
<script src="js/login/login.module.js"></script>
<script src="js/login/login.controllers.js"></script>
<script src="js/login/login.services.js"></script>
<script src="js/professor/professor.module.js"></script>
<script src="js/professor/professor.controllers.js"></script>
<script src="js/professor/professor.services.js"></script>
<script src="js/report/report.module.js"></script>
<script src="js/report/report.controllers.js"></script>
<script src="js/report/report.services.js"></script>
<script src="js/section/section.module.js"></script>
<script src="js/section/section.controllers.js"></script>
<script src="js/section/section.services.js"></script>
<script src="js/sidebar/sidebar.controllers.js"></script>
<script src="js/student/student.module.js"></script>
<script src="js/student/student.controllers.js"></script>
<script src="js/student/student.services.js"></script>
<!-- Angular ui.bootstrap's Javascript instead of Bootstrap Javascript -->
<!-- ==================================================== -->
<script src="bower_components/angular-bootstrap/ui-bootstrap.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script src="bower_components/Chart.js/Chart.min.js"></script>
<script src="bower_components/angular-chart.js/dist/angular-chart.js"></script>
<script>
var loadFile = function(event) {
var output = document.getElementById('output');
output.src = URL.createObjectURL(event.target.files[0]);
};
</script>
</body>
</html>

37
app/js/app.js Normal file
View File

@@ -0,0 +1,37 @@
(function (){
'user strict';
angular.module('app', [
'app.course',
'app.login',
'app.professor',
'app.reports',
'app.section',
'app.student',
'ngResource',
'ui.router'
])
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('login', {
url: '/login',
views: {
content: {
templateUrl: 'login.html',
controller: 'loginCtrl',
controllerAs: 'vm'
}
}
})
})
.run(function ($rootScope) {
$rootScope.domainUrl = 'Localhost:3000';
});
})();

View File

@@ -0,0 +1,176 @@
(function(){
'use strict';
angular
.module('app.course')
.controller('listarMateriaCtrl',listarMateriaCtrl)
.controller('crearMateriaCtrl', crearMateriaCtrl)
listarMateriaCtrl.$inject =
['$scope', '$rootScope', '$location', 'courses', '$modal'];
function listarMateriaCtrl($scope, $rootScope, $location, courses, $modal) {
var vm = this;
$rootScope.table = false;
var materiaArreglo = [];
courses.query(
function(data){
vm.materia = data;
angular.forEach(vm.materia, function (value){
materiaArreglo.push({
Codigo:value.Codigo,
Nombre:value.Nombre,
Creditos:value.Creditos,
Descripcion:value.Descripcion
});
});
$rootScope.table = true;
vm.listaMateria = materiaArreglo;
},
function(data){
console.log("Error al obtener los datos.");
});
vm.eliminarMateriaModal = function (index) {
$rootScope.index = index;
$rootScope.botonOk = true;
$rootScope.otroBotonOk = false;
$rootScope.botonCancelar = true;
$rootScope.rsplice = false;
$rootScope.loading = false;
$rootScope.mensaje = "¿Seguro que desea eliminar la materia?";
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: '/partials/course/modal/delete_course_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return "";
}
}
});
};
vm.eliminarMateria = function (index) {
$rootScope.loadingListarForm = true;
$rootScope.botonOk = false;
$rootScope.otroBotonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarMateria';
$rootScope.rsplice = true;
courses.delete({ id: vm.materia[index]._id },
function() {
$rootScope.loadingListarForm = false;
$rootScope.mensaje = "Materia eliminada";
},
function() {
$rootScope.loadingListarForm = false;
$rootScope.mensaje = "Error eliminado materia";
});
};
vm.eliminarMateriaSplice = function(index, rsplice) {
if(rsplice){
vm.listaMateria.splice(index, 1);
$rootScope.rsplice = false;
}
};
vm.modificarMateria = function (index) {
$location.url('modificarMateria');
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
crearMateriaCtrl.$inject =
['$scope','$rootScope', '$modal', '$location', 'courses'];
function crearMateriaCtrl($scope, $rootScope, $modal, $location, courses) {
var vm = this;
vm.submitted = false;
vm.mayorque = false;
$rootScope.mensaje = "";
vm.submit = function() {
if (vm.data_input_form.$valid){
vm.course = {
"Codigo": vm.materia.Codigo,
"Nombre": vm.materia.Nombre,
"Creditos": vm.materia.Creditos,
"Descripcion" : vm.materia.Description,
};
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl:
'/partials/course/modal/create_course_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
courses.save(vm.course,
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarMateria';
$rootScope.mensaje =
"Materia " + vm.materia.Nombre + " creada";
},
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarMateria';
$rootScope.mensaje =
"Error creando la materia " + vm.materia.Nombre;
});
}else{
vm.submitted = true;
}
}
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
})();

View File

@@ -0,0 +1,57 @@
(function(){
'use strict';
angular
.module("app.course", ['ui.router', 'ui.bootstrap'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/listarMaterias');
$stateProvider
.state('listarMateria', {
url: '/listarMateria',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/course/list_course.html',
controller: 'listarMateriaCtrl',
controllerAs: "vm"
}
}
})
.state('crearMateria', {
url: '/crearMateria',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/course/create_course.html',
controller: 'crearMateriaCtrl',
controllerAs: "vm"
}
}
})
};
})();

View File

@@ -0,0 +1,13 @@
(function(){
'use strict';
angular
.module('app.course')
.factory('courses', courses)
.value('id',{});
courses.$inject = ['$resource','$rootScope'];
function courses($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/courses/:id', null);
};
})();

View File

@@ -0,0 +1,175 @@
(function(){
'use strict';
angular
.module('app.login')
.controller('loginCtrl', loginCtrl)
.controller('ModalInstanceLoginCtrl', ModalInstanceLoginCtrl)
.constant('datepickerPopupConfig', {
datepickerPopup: 'yyyy-MM-dd',
html5Types: {
date: 'yyyy-MM-dd',
'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
'month': 'yyyy-MM'
},
currentText: 'Hoy',
clearText: 'Limpiar',
closeText: 'Cerrar',
closeOnDateSelection: true,
appendToBody: false,
showButtonBar: true
});
ModalInstanceLoginCtrl.$inject = ['$scope', '$modalInstance', 'items', '$location'];
function ModalInstanceLoginCtrl($scope, $modalInstance, items, $location){
$scope.items = items;
$scope.okLogin = function (actOk, urlLo) {
//$modalInstance.close($scope.selected.item);
if(actOk){
$location.url(urlLo);
$modalInstance.dismiss('cancel');
}
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
};
loginCtrl.$inject = ['$rootScope', '$location', 'Login', 'Rol','GetRol', 'hash', '$http', 'user', '$modal'];
function loginCtrl($rootScope, $location, Login, Rol, GetRol, hash, $http, user, $modal){
var vm = this;
//$http.get("http://cesar:12316/api/Rol")
//.success(function(response) {$rootScope.namesw = response.Data;});
vm.user = user;
vm.submitted = false;
vm.mayorque = false;
$rootScope.items = "";
$rootScope.mensaje = "";
vm.submit = function() {
//var verificar = false;
if (vm.data_input_form.$valid){
// se implementa todo lo necesario antes de pasar a la siguiente página.
vm.pkg = {
"Nickname": vm.user.Nickname,
"Password": $rootScope.password
};
//$rootScope.mostrar = false;
$rootScope.loadingLogin = true;
$rootScope.mensaje = "";
$rootScope.bcancel = false;
$modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'myModalContentLogin.html',
controller: 'ModalInstanceLoginCtrl',
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
Login.save(vm.pkg,
function(data){
//$rootScope.mostrar = true;
$rootScope.loadingLogin = false;
//verificar = data.Data._value;
if(data.Data._value != null){
//$rootScope.bok = true;
$rootScope.actOk = true;
$rootScope.urlLo = 'mapasReportes';
$rootScope.bcancel = false;
}else{
$rootScope.bcancel = true;
$rootScope.mensaje = data.Data._error;
}
},
function(data){
verificar = data.Data;
if(verificar){
alert("no existe el usuario");
}
})
GetRol.get({id:vm.user.Nickname}, function(data){
$rootScope.role = data.Data;
}
);
//$location.url('/preview/');
}else{
vm.submitted = true;
}
}
vm.onSelectChange = function () {
if(vm.genero == "Masculino"){
$rootScope.Gender = "M";
//alert("hola " + vm.valorRol.Name);
}
if(vm.genero == "Femenino"){
$rootScope.Gender = "F";
}
};
//$rootScope.password="s3cret";
$rootScope.getHash = function(message) {
var hashResult = hash(message);
$rootScope.password = hashResult;
return hashResult;
};
vm.generos = ['', 'Masculino', 'Femenino'];
vm.genero = vm.generos[0];
Rol.get(
function(data){
$rootScope.rol = data.Data;
}
);
vm.toggleMin = function() {
vm.maxDate = vm.maxDate ? null : new Date();
};
vm.toggleMin();
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
$rootScope.open2 = function($eventt) {
$eventt.preventDefault();
$eventt.stopPropagation();
$rootScope.openedd = true;
};
$rootScope.dateOptions = {
formatYear: 'yy',
startingDay: 1
};
return vm;
};
})();

View File

@@ -0,0 +1,34 @@
(function(){
'use strict';
angular
.module("app.login", ['ui.router', 'ui.bootstrap'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('root', {
url: '',
views: {
content: {
templateUrl: 'login.html',
controller: 'LoginCtrl',
controllerAs: 'vm'
}
}
})
};
})();

View File

@@ -0,0 +1,56 @@
(function(){
'use strict';
angular
.module('app.login')
.factory('Login', Login)
.factory('Rol', Rol)
.factory('GetRol', GetRol)
.factory('hash', hash)
.value('algoritmo','SHA-1')
.value('user',{})
.value('id',{})
Login.$inject = ['$resource','$rootScope'];
function Login($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/api/VerifyUser');
};
Rol.$inject = ['$resource','$rootScope'];
function Rol($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/api/Rol');
};
GetRol.$inject = ['$resource','$rootScope'];
function GetRol($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/api/User/:id');
};
hash.$inject = ['algoritmo'];
function hash(algoritmo){
var hashFunction;
if (algoritmo==="MD5") {
hashFunction=CryptoJS.MD5;
} else if (algoritmo==="SHA-1") {
hashFunction=CryptoJS.SHA1;
} else if (algoritmo==="SHA-2-256") {
hashFunction=CryptoJS.SHA256;
} else if (algoritmo==="SHA-2-512") {
hashFunction=CryptoJS.SHA512;
} else {
throw Error("El tipo de algoritmo no es válido:"+algoritmo);
}
var hash=function(message) {
var objHashResult=hashFunction(message);
var strHashResult=objHashResult.toString(CryptoJS.enc.Base64);
return strHashResult;
}
return hash;
};
})();

View File

@@ -0,0 +1,256 @@
(function(){
'use strict';
angular
.module('app.professor')
.controller('listarProfesorCtrl', listarProfesorCtrl)
.controller('crearProfesorCtrl', crearProfesorCtrl)
.controller('actualizarProfesorCtrl', actualizarProfesorCtrl)
listarProfesorCtrl.$inject =
[ '$scope', '$rootScope', '$location', 'professors', '$modal', 'profesorSeleccionado' ];
function listarProfesorCtrl( $scope, $rootScope, $location, professors, $modal, profesorSeleccionado ){
var vm = this;
vm.lista = true;
$rootScope.actOk = false;
$rootScope.loading = true;
$rootScope.table = false;
var profesorArray = [];
professors.query(
function(data){
vm.profesor = data;
angular.forEach(vm.profesor, function (value){
profesorArray.push({
Cedula:value.id,
Nombre:value.name,
Apellido:value.lastname,
Telefono:value.number,
Correo: value.email
});
});
$rootScope.loading = false;
$rootScope.table = true;
vm.listaProfesor = profesorArray;
},
function(){
console.log("Error al obtener los datos.");
});
vm.eliminarProfesorModal = function (index) {
$rootScope.index = index;
$rootScope.botonOK = true;
$rootScope.botonCancelar = true;
$rootScope.acceptButton = false;
$rootScope.rsplice = false;
$rootScope.mensaje = "¿Seguro que desea eliminar el Profesor?";
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/professor/modal/list_professor_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return "";
}
}
});
};
vm.eliminarProfesor = function (index) {
$rootScope.botonOK = false;
$rootScope.acceptButton = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarProfesor';
professors.delete({id: vm.profesor[index]._id},
function () {
$rootScope.rsplice = true;
$rootScope.mensaje =
"Profesor " + vm.profesor[index].name + " eliminado";
},
function () {
$rootScope.listarProfesorsLoading = false;
$rootScope.mensaje =
"Error eliminando al Profesor " + vm.profesor[index].name;
});
};
vm.removeProfesorSplice = function(index, rsplice) {
if(rsplice){
vm.listaProfesor.splice(index, 1);
$rootScope.rsplice = false;
}
};
vm.modificarProfesor = function (index) {
profesorSeleccionado._id = vm.profesor[index]._id;
profesorSeleccionado.Cedula = vm.profesor[index].id;
profesorSeleccionado.Nombre = vm.profesor[index].name;
profesorSeleccionado.Apellido= vm.profesor[index].lastname;
profesorSeleccionado.Telefono = vm.profesor[index].number;
profesorSeleccionado.Correo= vm.profesor[index].email;
$location.url('actualizarProfesor');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
return vm;
};
crearProfesorCtrl.$inject =
['$scope','$rootScope', '$location', 'professors', '$modal'];
function crearProfesorCtrl($scope, $rootScope, $location, professors, $modal){
var vm = this;
$rootScope.mensaje = "";
vm.submit = function() {
if (vm.data_input_form.$valid){
var professor = {
"id": vm.profesor.Cedula,
"name": vm.profesor.Nombre,
"lastname": vm.profesor.Apellido,
"email": vm.profesor.Correo,
"number": vm.profesor.Telefono,
};
$rootScope.botonOk = false;
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/professor/modal/create_professor_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
professors.save(professor,
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarProfesor';
$rootScope.mensaje =
"Profesor " + vm.profesor.Apellido + ", " + vm.profesor.Nombre + " agregado";
},
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarProfesor';
$rootScope.mensaje =
"Error al agregar al profesor " + vm.profesor.Apellido + ", " + vm.profesor.Nombre;
});
}else{
vm.submitted = true;
}
}
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
actualizarProfesorCtrl.$inject =
['$scope','$rootScope', '$location', 'professors', '$modal', 'profesorSeleccionado' ];
function actualizarProfesorCtrl ( $scope, $rootScope, $location, professors, $modal, profesorSeleccionado ){
var vm = this;
vm.profesor = profesorSeleccionado;
$rootScope.mensaje = "";
$rootScope.actOk = false;
vm.submit = function() {
var professor = {
"_id": vm.profesor._id,
"id": vm.profesor.Cedula,
"name": vm.profesor.Nombre,
"lastname": vm.profesor.Apellido,
"email": vm.profesor.Correo,
"number": vm.profesor.Telefono,
};
$rootScope.botonOk = false;
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/professor/modal/update_professor_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
professors.update(professor,
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarProfesor';
$rootScope.mensaje =
"Profesor " + vm.profesor.Apellido + ", " + vm.profesor.Nombre + " actualizado";
},
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarProfesor';
$rootScope.mensaje =
"Error al modificar al profesor " + vm.profesor.Apellido + ", " + vm.profesor.Nombre;
});
}
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
})();

View File

@@ -0,0 +1,75 @@
(function(){
'use strict';
angular
.module("app.professor", ['ui.router', 'ui.bootstrap'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/listarProfesor');
$stateProvider
.state('listarProfesor', {
url: '/listarProfesor',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/professor/list_professor.html',
controller: 'listarProfesorCtrl',
controllerAs: 'vm'
}
}
})
.state('crearProfesor', {
url: '/crearProfesor',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/professor/create_professor.html',
controller: 'crearProfesorCtrl',
controllerAs: 'vm'
}
}
})
.state('actualizarProfesor', {
url: '/actualizarProfesor',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/professor/update_professor.html',
controller: 'actualizarProfesorCtrl',
controllerAs: 'vm'
}
}
})
};
})();

View File

@@ -0,0 +1,16 @@
(function(){
'use strict';
angular
.module('app.professor')
.factory('professors', professors)
.value('profesorSeleccionado',{});
professors.$inject = ['$resource','$rootScope'];
function professors($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/professors/:id', null,
{
'update': {method:'PUT'}
});
};
})();

View File

@@ -0,0 +1,105 @@
(function(){
'use strict';
angular
.module('app.reports')
.controller('poblacionNacimientoCtrl', poblacionNacimientoCtrl)
.controller('poblacionActivaCtrl', poblacionActivaCtrl)
.controller('hombresEdadCtrl', hombresEdadCtrl)
.controller('mujeresEdadCtrl', mujeresEdadCtrl)
.controller('comidasDiaCtrl', comidasDiaCtrl)
.controller('nivelEducacionCtrl', nivelEducacionCtrl)
.controller('serviciosHogaresCtrl', serviciosHogaresCtrl)
.controller('ingresosAnualesCtrl', ingresosAnualesCtrl)
poblacionNacimientoCtrl.$inject = ['$rootScope', 'ReportJson'];
function poblacionNacimientoCtrl($rootScope, ReportJson){
$rootScope.labelPoblacionNacimiento = ['Extranjeros', 'Residentes'];
ReportJson.get({id:$rootScope.elementId}, function(data) {
$rootScope.dataPoblacionNacimiento = data.Data[0].dataPoblacionNacimiento;
});
};
poblacionActivaCtrl.$inject = ['$rootScope', 'ReportJson'];
function poblacionActivaCtrl($rootScope, ReportJson){
$rootScope.labelsPoblacionActiva = ['Hombres', 'Mujeres'];
$rootScope.seriesPoblacionActiva = ['Economicamente Pasivos', 'Economicamente Activos'];
$rootScope.dataPoblacionActiva = [];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataPoblacionActiva = data.Data[0].dataPoblacionActiva;
});
};
hombresEdadCtrl.$inject = ['$rootScope', 'ReportJson'];
function hombresEdadCtrl($rootScope, ReportJson){
$rootScope.labelsHombresEdad = ['0-6', '7-12','13-18', '19-25','26-44', '45-60','61-99', '80-84', '90+'];
$rootScope.seriesHombresEdad = ['Hombres por Generacion'];
$rootScope.dataHombresEdad = [];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataHombresEdad = data.Data[0].dataHombresEdad;
});
};
mujeresEdadCtrl.$inject = ['$rootScope', 'ReportJson'];
function mujeresEdadCtrl($rootScope, ReportJson){
$rootScope.labelsMujeresEdad = ['0-6', '7-12','13-18', '19-25','26-44', '45-60','61-99', '80-84', '90+'];
$rootScope.seriesMujeresEdad = ['Mujeres por Generacion'];
$rootScope.dataMujeresEdad = [];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataMujeresEdad = data.Data[0].dataMujeresEdad;
});
};
comidasDiaCtrl.$inject = ['$rootScope', 'ReportJson'];
function comidasDiaCtrl($rootScope, ReportJson){
$rootScope.labelsComidasDia = ['Desayuno', 'Almuerzo', 'Cena'];
$rootScope.dataComidasDia = [];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataComidasDia = [data.Data[0].dataComidasDia];
});
};
nivelEducacionCtrl.$inject = ['$rootScope', 'ReportJson'];
function nivelEducacionCtrl($rootScope, ReportJson){
$rootScope.labelsNivelEducacion = ['Nivel de Educacion Superior', 'Nivel de Educacion Media'];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataNivelEducacion = data.Data[0].dataNivelEducacion;
});
};
serviciosHogaresCtrl.$inject = ['$rootScope', 'ReportJson'];
function serviciosHogaresCtrl($rootScope, ReportJson){
$rootScope.labelsServiciosHogares = ['Agua', 'Gas', 'Electricidad' , 'Linea Telefonica'];
$rootScope.dataServiciosHogares = [];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataServiciosHogares = [data.Data[0].dataServiciosHogares];
});
};
ingresosAnualesCtrl.$inject = ['$rootScope', 'ReportJson'];
function ingresosAnualesCtrl($rootScope, ReportJson){
$rootScope.labelsIngresosAnuales = ['Menos de 10.000', 'De 11.000 a 20.000', 'De 21.000 a 35.000' , 'De 35.000 a 50.000'];
ReportJson.get({id:$rootScope.elementId},function(data) {
$rootScope.dataIngresosAnuales = data.Data[0].dataIngresosAnuales;
});
};
})();

View File

@@ -0,0 +1,81 @@
(function(){
'use strict';
angular
.module("app.reports", ['ui.router', 'ui.bootstrap', 'chart.js'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/reportes');
$stateProvider
.state('poblacionNacimiento', {
url: '/reportes',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/reportes/reportes.html',
controller: 'poblacionNacimientoCtrl',
controllerAs: 'vm'
}
}
})
.state('poblacionActiva', {
url: '/poblacionActivaCtrl',
templateUrl: 'partials/reportes/reportes.html',
controller: 'poblacionActivaCtrl',
controllerAs: 'vm'
})
.state('hombresEdad', {
url: '/hombresEdad',
templateUrl: 'partials/reportes/reportes.html',
controller: 'hombresEdadCtrl',
controllerAs: 'vm'
})
.state('mujeresEdad', {
url: '/mujeresEdad',
templateUrl: 'partials/reportes/reportes.html',
controller: 'mujeresEdadCtrl',
controllerAs: 'vm'
})
.state('comidasDia', {
url: '/comidasDia',
templateUrl: 'partials/reportes/reportes.html',
controller: 'comidasDiaCtrl',
controllerAs: 'vm'
})
.state('nivelEducacion', {
url: '/nivelEducacion',
templateUrl: 'partials/reportes/reportes.html',
controller: 'nivelEducacionCtrl',
controllerAs: 'vm'
})
.state('serviciosHogares', {
url: '/serviciosHogares',
templateUrl: 'partials/reportes/reportes.html',
controller: 'serviciosHogaresCtrl',
controllerAs: 'vm'
})
.state('ingresosAnuales', {
url: '/ingresosAnuales',
templateUrl: 'partials/reportes/reportes.html',
controller: 'ingresosAnualesCtrl',
controllerAs: 'vm'
})
};
})();

View File

@@ -0,0 +1,16 @@
(function(){
'use strict';
angular
.module('app.reports')
.factory('ReportJson', ReportJson)
.value('id',{})
ReportJson.$inject = ['$resource','$rootScope'];
function ReportJson($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/api/reports/:id');
//var json="data/data.json";
//return $resource(json);
};
})();

View File

@@ -0,0 +1,298 @@
(function(){
'use strict';
angular
.module('app.section')
.controller('listarMatriculaCtrl', listarMatriculaCtrl)
.controller('crearMatriculaCtrl', crearMatriculaCtrl)
.controller('actualizarMatriculaCtrl', actualizarMatriculaCtrl)
listarMatriculaCtrl.$inject = [ '$scope', '$rootScope', '$location', 'sections', '$modal', 'matriculaSeleccionada'];
function listarMatriculaCtrl ( $scope, $rootScope, $location, sections, $modal, matriculaSeleccionada ){
var vm = this;
vm.lista = true;
$rootScope.actOk = false;
$rootScope.loading = true;
$rootScope.table = false;
vm.submit = function() {
}
var matriculaArray = [];
sections.query(
function(successResult){
vm.matricula = successResult;
angular.forEach(vm.matricula, function (value){
matriculaArray.push({
Nombre:value.Nombre,
Codigo:value.Codigo,
Materia:value.Materia,
Semestre:value.Semestre,
Estudiantes: value.Estudiantes
});
});
$rootScope.loading = false;
$rootScope.table = true;
vm.listaMatricula = matriculaArray;
},
function(data){
console.log("Error al obtener los datos.");
});
/**************************Eliminar Matricula**************************/
/* En este proceso, primero se llama a un Modal el cual se cerciora que
el usuario se asegure de eliminar la matricula escogida, el usuario al
confirmar su decision llama automaticamente a la funcion que hara la
llamada a servicio que borrara la matricula de la base de datos.
*/
vm.eliminarMatriculaModal = function (index) {
$rootScope.index = index;
$rootScope.botonOk = true;
$rootScope.otroBotonOk = false;
$rootScope.botonCancelar = true;
$rootScope.rsplice = false;
$rootScope.eliminarLoading = false;
$rootScope.mensaje = "¿Seguro que desea eliminar la matricula?";
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/matricula/modal/eliminar_matricula_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return "";
}
}
});
};
vm.eliminarMatricula= function (index) {
$rootScope.botonOk = false;
$rootScope.otroBotonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarMatricula';
$rootScope.eliminarLoading = true;
var name = vm.matricula[index].Nombre;
sections.delete({ id: vm.matricula[index]._id },
function (successResult) {
$rootScope.eliminarLoading = false;
$rootScope.rsplice = true;
$rootScope.mensaje = "Sección " + name + " eliminada.";
},
function (errorResult) {
$rootScope.eliminarLoading = false;
$rootScope.mensaje = "Error al eliminar la sección " + name;
console.log('Could not delete from server');
});
};
vm.eliminarMatriculaSplice = function (index, rsplice) {
if(rsplice){
vm.listaMatricula.splice(index, 1);
$rootScope.rsplice = false;
}
};
/*************************Fin de Eliminar Matricula********************/
vm.modificarMatricula = function (index) {
matriculaSeleccionada.Nombre = vm.matricula[index].Nombre;
matriculaSeleccionada.Codigo = vm.matricula[index].Codigo;
matriculaSeleccionada.Materia = vm.matricula[index].Materia;
matriculaSeleccionada.Semestre = vm.matricula[index].Semestre;
matriculaSeleccionada.Estudiantes= vm.matricula[index].Estudiantes;
$location.url('actualizarMatricula');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
return vm;
};
crearMatriculaCtrl.$inject =
['$scope','$rootScope', '$location', 'sections', '$modal', 'courses'];
function crearMatriculaCtrl($scope, $rootScope, $location, sections, $modal, courses){
var vm = this;
vm.submitted = false;
$rootScope.mensaje = "";
courses.query(
function (successResult) {
vm.materias = successResult;
},
function () {
vm.materias = null;
});
vm.submit = function() {
if (vm.data_input_form.$valid){
vm.section = {
"section": vm.matricula.Nombre,
"code": vm.valorMateria.Codigo,
"course": vm.valorMateria.Nombre,
"semester": vm.matricula.Semestre,
"students": vm.matricula.Estudiantes,
};
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/matricula/modal/crear_matricula_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
sections.save(vm.section,
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarMatricula';
$rootScope.mensaje = "Sección " + vm.matricula.Nombre + " creada";
},
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarMatricula';
$rootScope.mensaje = "Error creando la seccion " + vm.matricula.Nombre;
});
}else{
vm.submitted = true;
}
};
vm.cargarEstudiantes = function () {
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
actualizarMatriculaCtrl.$inject = ['$scope', '$rootScope', '$location', 'sections', '$modal', 'matriculaSeleccionada'];
function actualizarMatriculaCtrl($scope, $rootScope, $location, sections, $modal, matriculaSeleccionada){
var vm = this;
vm.lista = true;
$rootScope.loading = true;
$rootScope.table = false;
vm.matricula = matriculaSeleccionada;
vm.listaEstudiantes = vm.matricula.Estudiantes;
vm.actualizarMatricula = function() {
sections.update(section,
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarMatricula';
$rootScope.mensaje = "Sección actualizada";
},
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarMatricula';
$rootScope.mensaje = "Error al actualizar la Sección ";
});
}
vm.retirarEstudianteModal = function (index) {
$rootScope.index = index;
$rootScope.botonOk = true;
$rootScope.otroBotonOk = false;
$rootScope.botonCancelar = true;
$rootScope.rsplice = false;
$rootScope.eliminarLoading = false;
$rootScope.mensaje = "¿Desea retirar este estudiante de la Sección?";
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/matricula/modal/actualizar_matricula_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return "";
}
}
});
};
vm.retirarEstudiante = function (index) {
$rootScope.botonOk = false;
$rootScope.otroBotonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'actualizarMatricula';
};
vm.retirarEstudianteSplice = function(index, rsplice) {
if(rsplice){
vm.listaEstudiantes.splice(index, 1);
$rootScope.rsplice = false;
var section = {
'section': vm.matricula.Nombre,
'code': vm.matricula.Codigo,
'course': vm.matricula.Seccion,
'semester': vm.matricula.Semestre,
'students': vm.listaEstudiantes
};
}
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
return vm;
};
})();

View File

@@ -0,0 +1,79 @@
(function(){
'use strict';
angular
.module("app.section", ['ui.router', 'ui.bootstrap'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/listarMatricula');
$stateProvider
.state('listarMatricula', {
url: '/listarMatricula',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/section/list_section.html',
controller: 'listarMatriculaCtrl',
controllerAs: 'vm'
}
}
})
.state('crearMatricula', {
url: '/crearMatricula',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/section/create_section.html',
controller: 'crearMatriculaCtrl',
controllerAs: 'vm'
}
}
})
.state('actualizarMatricula', {
url: '/actualizarMatricula',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/section/update_section.html',
controller: 'actualizarMatriculaCtrl',
controllerAs: 'vm'
}
}
})
};
})();

View File

@@ -0,0 +1,23 @@
(function(){
'use strict';
angular
.module('app.section')
.factory('sections', sections)
.factory('courses', courses)
.value('matriculaSeleccionada',{});
sections.$inject = ['$resource','$rootScope'];
function sections($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/sections/:id', null,
{
'update': {method:'PUT'}
});
};
courses.$inject = ['$resource','$rootScope'];
function courses($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/courses');
};
})();

View File

@@ -0,0 +1,97 @@
(function(){
'use strict';
angular
.module('app')
.controller('sidebarCtrl', ['$scope',
function($scope) {
var that = this;
$scope.showChilds = function(item){
item.active = !item.active;};
$scope.items = [
{
text: 'Modulo de Administración',
subItems: [
{
state: 'listarProfesor',
text: 'Listar Profesores'
},
{
state: 'crearProfesor',
text: 'Agregar Profesores'
}
]
},
{
text: 'Modulo de Materias',
subItems: [
{
state: 'listarMateria',
text: 'Listar Materias'
},
{
state: 'crearMateria',
text: 'Agregar Materia'
}
]
},
{
text: 'Modulo de Estudiantes',
subItems: [
{
state: 'listarEstudiante',
text: 'Listar Estudiantes'
},
{
state: 'crearEstudiante',
text: 'Agregar Estudiantes'
}
]
},
{
text: 'Modulo de Matriculas',
subItems: [
{
state: 'listarMatricula',
text: 'Listar Matricula'
},
{
state: 'crearMatricula',
text: 'Crear Matricula'
}
]
},
{
text: 'Modulo de Reportes',
subItems: [
{
state: 'reportesAlumno',
text: 'Reportes por Alumno'
},
{
state: 'reportesClase',
text: 'Reportes por Clase'
},
{
state: 'reportesSeccion',
text: 'Reportes por Seccion'
},
{
state: 'reportesMateria',
text: 'Reportes por Materia'
}
]
}
];
}])
})();

View File

@@ -0,0 +1,258 @@
(function(){
'use strict';
angular
.module('app.student')
.controller('listarEstudianteCtrl', listarEstudianteCtrl)
.controller('crearEstudianteCtrl', crearEstudianteCtrl)
.controller('actualizarEstudianteCtrl', actualizarEstudianteCtrl)
listarEstudianteCtrl.$inject = [ '$scope', '$rootScope', '$location', 'students', '$modal', 'estudianteSeleccionado' ];
function listarEstudianteCtrl( $scope, $rootScope, $location, students, $modal, estudianteSeleccionado ){
var vm = this;
vm.lista = true;
$rootScope.actOk = false;
$rootScope.loading = true;
$rootScope.table = false;
var estudiantesArray = [];
students.query(
function(data){
vm.estudiantes = data;
angular.forEach(vm.estudiantes, function (value){
estudiantesArray.push({
Cedula:value.id,
Nombre:value.name,
Apellido:value.lastname,
Telefono:value.number,
Correo: value.email
});
});
$rootScope.loading = false;
$rootScope.table = true;
vm.listaEstudiantes = estudiantesArray;
},
function(){
console.log("Error al obtener los datos.");
});
vm.eliminarEstudianteModal = function (index) {
$rootScope.index = index;
$rootScope.botonOK = true;
$rootScope.botonCancelar = true;
$rootScope.acceptButton = false;
$rootScope.rsplice = false;
$rootScope.listarEstudiantesLoading = true;
$rootScope.mensaje = "¿Seguro que desea eliminar el Estudiante?";
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/students/modal/list_students_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return "";
}
}
});
};
vm.eliminarEstudiante = function (index) {
$rootScope.botonOK = false;
$rootScope.acceptButton = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarEstudiante';
$rootScope.listarEstudiantesLoading = true;
students.delete({id: vm.estudiantes[index]._id},
function (successResult) {
$rootScope.listarEstudiantesLoading = false;
$rootScope.rsplice = true;
$rootScope.mensaje = "Usuario " + vm.estudiantes[index].name + " eliminado";
},
function (errorResult) {
$rootScope.listarEstudiantesLoading = false;
$rootScope.mensaje = "Error eliminando al Usuario " + vm.estudiantes[index].name;
});
};
vm.removeEstudianteSplice = function(index, rsplice) {
if(rsplice){
vm.listaEstudiantes.splice(index, 1);
$rootScope.rsplice = false;
}
};
vm.modificarEstudiante = function (index) {
estudianteSeleccionado._id = vm.estudiantes[index]._id;
estudianteSeleccionado.Cedula = vm.estudiantes[index].id;
estudianteSeleccionado.Nombre = vm.estudiantes[index].name;
estudianteSeleccionado.Apellido= vm.estudiantes[index].lastname;
estudianteSeleccionado.Telefono = vm.estudiantes[index].number;
estudianteSeleccionado.Correo= vm.estudiantes[index].email;
$location.url('actualizarEstudiante');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
return vm;
};
crearEstudianteCtrl.$inject = ['$scope','$rootScope', '$location', 'students', '$modal'];
function crearEstudianteCtrl($scope, $rootScope, $location, students, $modal){
var vm = this;
$rootScope.mensaje = "";
$rootScope.actOk = false;
vm.submit = function() {
if (vm.data_input_form.$valid){
var person = {
"id": vm.estudiante.Cedula,
"name": vm.estudiante.Nombre,
"lastname": vm.estudiante.Apellido,
"email": vm.estudiante.Correo,
"number": vm.estudiante.Telefono,
};
$rootScope.crearEstudianteLoading = true;
$rootScope.botonOk = false;
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/students/modal/create_students_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
students.save(person,
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarEstudiante';
$rootScope.mensaje = "Estudiante " + vm.estudiante.Apellido + ", " + vm.estudiante.Nombre + " agregado";
$rootScope.crearEstudianteLoading = false;
},
function(){
$rootScope.botonOk = true;
$rootScope.urlLo = 'listarEstudiante';
$rootScope.mensaje = "Error al agregar al estudiante " + vm.estudiante.Apellido + ", " + vm.estudiante.Nombre;
$rootScope.crearEstudianteLoading = false;
});
}else{
vm.submitted = true;
}
}
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
actualizarEstudianteCtrl.$inject = [ '$scope','$rootScope', '$location', 'students', '$modal', 'estudianteSeleccionado' ];
function actualizarEstudianteCtrl ( $scope, $rootScope, $location, students, $modal, estudianteSeleccionado ){
var vm = this;
vm.estudiante = estudianteSeleccionado;
$rootScope.mensaje = "";
$rootScope.actOk = false;
vm.submit = function() {
var student = {
"_id": vm.estudiante._id,
"id": vm.estudiante.Cedula,
"name": vm.estudiante.Nombre,
"lastname": vm.estudiante.Apellido,
"email": vm.estudiante.Correo,
"number": vm.estudiante.Telefono,
};
$rootScope.botonOk = false;
$rootScope.modificarEstudianteLoading = true;
$scope.modalInstance = $modal.open({
animation: $rootScope.animationsEnabled,
templateUrl: 'partials/students/modal/update_students_modal.html',
scope: $scope,
size: 'sm',
resolve: {
items: function () {
return $rootScope.items;
}
}
});
students.update(student,
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarEstudiante';
$rootScope.mensaje = "Estudiante " + vm.estudiante.Apellido + ", " + vm.estudiante.Nombre + " actualizado";
},
function(){
$rootScope.botonOk = true;
$rootScope.botonCancelar = false;
$rootScope.urlLo = 'listarEstudiante';
$rootScope.mensaje = "Error al modificar al estudiante " + vm.estudiante.Apellido + ", " + vm.estudiante.Nombre;
});
}
$scope.ok = function (urlLo) {
$location.url(urlLo);
$scope.modalInstance.dismiss('cancel');
};
$scope.cancel = function () {
$scope.modalInstance.dismiss('cancel');
};
$rootScope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$rootScope.opened = true;
};
return vm;
};
})();

View File

@@ -0,0 +1,75 @@
(function(){
'use strict';
angular
.module("app.student", ['ui.router', 'ui.bootstrap'])
.run(addStateToScope)
.config(getRoutes);
addStateToScope.$inject = ['$rootScope', '$state', '$stateParams'];
function addStateToScope($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
};
getRoutes.$inject = ['$stateProvider', '$urlRouterProvider'];
function getRoutes($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/listarEstudiante');
$stateProvider
.state('listarEstudiante', {
url: '/listarEstudiante',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/students/list_students.html',
controller: 'listarEstudianteCtrl',
controllerAs: 'vm'
}
}
})
.state('crearEstudiante', {
url: '/crearEstudiante',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/students/create_students.html',
controller: 'crearEstudianteCtrl',
controllerAs: 'vm'
}
}
})
.state('actualizarEstudiante', {
url: '/actualizarEstudiante',
views: {
sidebar: {
templateUrl: 'partials/sidebar.html',
controller: 'sidebarCtrl'
},
navbar: {
templateUrl: 'partials/navbar.html'
},
content: {
templateUrl: 'partials/students/update_students.html',
controller: 'actualizarEstudianteCtrl',
controllerAs: 'vm'
}
}
})
};
})();

View File

@@ -0,0 +1,16 @@
(function(){
'use strict';
angular
.module('app.student')
.factory('students', students)
.value('estudianteSeleccionado',{});
students.$inject = ['$resource','$rootScope'];
function students($resource, $rootScope){
return $resource('http://'+$rootScope.domainUrl+'/students/:id', null,
{
'update': {method:'PUT'}
});
};
})();

65
app/login.html Normal file
View File

@@ -0,0 +1,65 @@
<form name="vm.data_input_form" role="form" novalidate ng-submit="vm.submit()">
<div class="row clearfix">
<div class="col-md-10 column well">
<h4 style="text-align: center">Ingrese sus Datos</h4>
<div class="row" >
<div class="col-md-4 column">
</div>
<div class="col-md-4 column">
<label for="nickname">Nombre de Usuario</label>
<input type="text" class="form-control" id="nickname" name="nickname" ng-model="vm.user.Nickname" required/>
<div class="error" ng-show="vm.submitted && vm.data_input_form.nickname.$invalid">
<small class="error" ng-show="vm.data_input_form.nickname.$error.required">
{{'TAG_NICK_NAME_ERROR'}}
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
<div class="row">
<div class="col-md-4 column">
</div>
<div class="col-md-4 column">
<label for="password">Contraseña</label>
<input type="password" class="form-control" id="password" name="password" ng-model="vm.user.Password" maxlength="8" required/>
<div ng-show=false> {{ vm.password = vm.user.Password }}</div>
<div class="error" ng-show="vm.submitted && vm.data_input_form.password.$invalid">
<small class="error" ng-show="vm.data_input_form.password.$error.required">
{{'TAG_PASSWORD_ERROR'}}
</small>
</div>
<div ng-show=false>{{getHash(vm.password)}}</div>
</div>
</div>
</div> <!-- end column -->
</div> <!-- end row -->
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" id="submit" class="btn-primary btn" >Ingresar</button>
</span>
</p>
</div>
</div>
</div> <!-- end row -->
<script type="text/ng-template" id="myModalContentLogin.html">
<div class="modal-header">
<h3 class="modal-title">Censys</h3>
</div>
<div style="text-align: center" class="modal-body">
<div ng-show="loadingLogin" style="text-align: center" class="loading"><img src="img/login-loading.gif"></div>
{{ mensaje }}
<div ng-show=false> {{ index }}</div>
</div>
<div class="modal-footer">
<div ng-show=false > {{ okLogin(actOk, urlLo) }}</div>
<button class="btn btn-warning" ng-show="bcancel" type="button" ng-click="cancel()">Cancel</button>
</div>
</script>
</form>

View File

@@ -0,0 +1,82 @@
<div>
<form name="vm.data_input_form" role="form" novalidate
ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Datos de la Materia</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-6 column">
<label for="Codigo">Código de la Materia</label>
<input type="numeric" class="form-control"
name="Codigo" ng-model="vm.materia.Codigo"
ng-pattern="/\d{4}/" maxlength="4" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Codigo.$invalid">
<small class="error"
ng-show="vm.data_input_form.Codigo.$error.required">
El Código de la Materia es Obligatorio.
</small>
</div>
</div>
<div class="col-md-6 column">
<label for="Nombre">Nombre de la Materia</label>
<input type="text" class="form-control"
name="Nombre" ng-model="vm.materia.Nombre" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Nombre.$invalid">
<small class="error"
ng-show="vm.data_input_form.Nombre.$error.required">
El Nombre de la Materia es Obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br>
<br></div></div>
<div class="row">
<div class="col-md-6 column">
<label for="Creditos">Cantidad de Creditos</label>
<input type="numeric" class="form-control"
name="Creditos" ng-model="vm.materia.Creditos"
maxlength="1" placeholder="5" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Creditos.$invalid">
<small class="error"
ng-show="vm.data_input_form.Creditos.$error.required">
La Cantidad de Creditos es Obligatoria.
</small>
</div>
</div>
<div class="col-md-6 column">
<label for="Description">Descripción</label>
<input type="text" class="form-control"
name="Description" ng-model="vm.materia.Description"
required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Description.$invalid">
<small class="error"
ng-show="vm.data_input_form.Description.$error.required">
Por favor, inserte una breve descripción.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">
Crear Materia</button>
</span>
</p>
</div>
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,70 @@
<div class="row clearfix">
<h4>Lista de Materias</h4>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div>
</div>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th width="10%">
<a href="" ng-click="sortType = 'Codigo';
sortReverse = !sortReverse">
Código
<span ng-show="sortType == 'Codigo' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Codigo' &&
sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Nombre';
sortReverse = !sortReverse">
Nombre
<span ng-show="sortType == 'Nombre' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Nombre' &&
sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="10%">
<a href=""
ng-click="sortType = 'Creditos';
sortReverse = !sortReverse">
Creditos
<span ng-show="sortType == 'Creditos' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Creditos' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="50%" style="text-align: center">
<a href="">
Descripción
</a>
</th>
<th width="10%" style="text-align: center">
<a>Eliminar</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="materia in vm.listaMateria | orderBy:sortType:sortReverse | filter:searchUser">
<td style="vertical-align:middle">{{ materia.Codigo }}</td>
<td style="vertical-align:middle">{{ materia.Nombre }}</td>
<td style="vertical-align:middle">{{ materia.Creditos }}</td>
<td style="vertical-align:middle">{{ materia.Descripcion }}</td>
<td style="text-align: center">
<span
title="Click aqui para Eliminar la Materia"
class="glyphicon glyphicon-remove"
aria-hidden="true"
ng-click="vm.eliminarMateriaModal($index)"
style="cursor:pointer"></span>
</td>
</tr>
</tbody>
</table>
</div>
<div ng-show=false > {{ vm.eliminarMateriaSplice(index, rsplice) }}</div>
</div>

View File

@@ -0,0 +1,10 @@
<div class="modal-header">
<h3 class="modal-title">Crear Materia</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">OK</button>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal-header">
<h3 class="modal-title">Eliminar Materia</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="vm.eliminarMateria(index)">OK</button>
<button class="btn btn-primary" ng-show="otroBotonOk" type="button"
ng-click="ok(urlLo)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancel</button>
</div>

View File

@@ -0,0 +1,12 @@
<div class="modal-header">
<h3 class="modal-title">Modificar Materia</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancel</button>
</div>

View File

@@ -0,0 +1,72 @@
<div>
<form name="vm.data_input_form" role="form" novalidate
ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Datos de la Materia</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-6 column">
<label for="Codigo">Código de la Materia</label>
<input type="numeric" class="form-control"
name="Codigo" ng-model="vm.materia.Codigo"
readonly="readonly"/>
</div>
<div class="col-md-6 column">
<label for="Nombre">Nombre de la Materia</label>
<input type="text" class="form-control"
name="Nombre" ng-model="vm.materia.Nombre" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Nombre.$invalid">
<small class="error"
ng-show="vm.data_input_form.Nombre.$error.required">
El Nombre de la Materia es Obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
<div class="row">
<div class="col-md-6 column">
<label for="Creditos">Cantidad de Creditos</label>
<input type="numeric" class="form-control"
name="Creditos" ng-model="vm.materia.Creditos" maxlength="1" placeholder="5" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Creditos.$invalid">
<small class="error"
ng-show="vm.data_input_form.Creditos.$error.required">
La Cantidad de Creditos es Obligatoria.
</small>
</div>
</div>
<div class="col-md-6 column">
<label for="Semestre">Semestre</label>
<input type="text" class="form-control"
name="Semestre" ng-model="vm.materia.Semestre"
required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.Semestre.$invalid">
<small class="error"
ng-show="vm.data_input_form.Semestre.$error.required">
El Semestre es Obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">Modificar Materia</button>
</span>
</p>
</div>
</div>
</div>
</form>
</div>

22
app/partials/navbar.html Normal file
View File

@@ -0,0 +1,22 @@
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#/listarMateria"><img alt="ucv" src="img/logo_ucv.jpg" class="img-circle" width="60" height="60"></a>
<a class="navbar-brand" href="#/listarMateria"><img alt="ciencias" src="img/logo_ciencias.jpg" class="img-rounded" width="60" height="60"></a>
<a class="navbar-brand" href="#/listarMateria"><img alt="computacion" src="img/logo_computacion.jpg" lass="img-thumbnail" width="270" height="60"></a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<div class="container-fluid ">
<a href="#login" class="btn-warning btn" style=" margin: 10px">Salir</a>
</div>
</ul>
</div>
</div>
</nav>

View File

@@ -0,0 +1,95 @@
<div>
<form name="vm.data_input_form" role="form" novalidate
ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Datos del Profesor</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-4 column">
<label for="cedula">Numero de Cédula</label>
<input type="numeric" class="form-control"
name="cedula" ng-model="vm.profesor.Cedula"
placeholder="12345678" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.cedula.$invalid">
<small class="error"
ng-show="vm.data_input_form.cedula.$error.required">
El Número de Cédula del Profesor es Obligatorio.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="nombre">Nombre</label>
<input type="text" class="form-control"
name="nombre" ng-model="vm.profesor.Nombre"
required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.nombre.$invalid">
<small class="error"
ng-show="vm.data_input_form.nombre.$error.required">
El Nombre del Profesor es Obligatorio.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="apellido">Apellido</label>
<input type="text" class="form-control"
name="apellido" ng-model="vm.profesor.Apellido" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.apellido.$invalid">
<small class="error"
ng-show="vm.data_input_form.apellido.$error.required">
El Apellido del Profesor es obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
<div class="row">
<div class="col-md-4 column">
<label for="correo">Dirección de Correo</label>
<input type="correo" class="form-control"
name="correo" ng-model="vm.profesor.Correo"
ng-pattern="/^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/" placeholder="me@example.com" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.correo.$invalid">
<small class="error"
ng-show="vm.data_input_form.correo.$error.required">
El Correo del Profesor es obligatorio.
</small>
<small class="error"
ng-show="vm.data_input_form.correo.$error.pattern">
El Formato del Correo del Profesor es incorrecto.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="telefono">Número de Teléfono</label>
<input type="telefono" class="form-control"
name="telefono" ng-model="vm.profesor.Telefono"
ng-pattern="/\d{4}-\d{3}-\d{4}/" maxlength="13"
placeholder="0424-123-9876"/>
<small class="error"
ng-show="vm.data_input_form.telefono.$error.pattern">
El Formato del Número de Teléfono es incorrecto.
</small>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">Agregar Profesor</button>
</span>
</p>
</div>
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,53 @@
<div class="row clearfix">
<h4>Listado de Profesores</h4>
<br>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th width="20%">
<a href="" ng-click="sortType = 'Cedula'; sortReverse = !sortReverse">
Cedula
<span ng-show="sortType == 'Cedula' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Cedula' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Nombre'; sortReverse = !sortReverse">
Nombre
<span ng-show="sortType == 'Nombre' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Nombre' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Apellido'; sortReverse = !sortReverse">
Apellido
<span ng-show="sortType == 'Apellido' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Apellido' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%" style="text-align: center">
<a>Modificar</a>
</th>
<th width="20%" style="text-align: center">
<a>Borrar</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="profesor in vm.listaProfesor">
<td style="vertical-align:middle">{{ profesor.Cedula }}</td>
<td style="vertical-align:middle">{{ profesor.Nombre }}</td>
<td style="vertical-align:middle">{{ profesor.Apellido }}</td>
<td style="text-align: center">
<span title="Click aqui para Modificar un Profesor" class="glyphicon glyphicon-edit" aria-hidden="true" ng-click="vm.modificarProfesor($index)" style="cursor:pointer"></span>
</td>
<td style="text-align: center">
<span title="Click aqui para Eliminar un Profesor" class="glyphicon glyphicon-remove" aria-hidden="true" ng-click="vm.eliminarProfesorModal($index)" style="cursor:pointer"></span>
</td>
</tr>
</tbody>
</table>
</div>
<div ng-show=false > {{ vm.removeProfesorSplice(index, rsplice) }}</div>
</div>

View File

@@ -0,0 +1,10 @@
<div class="modal-header">
<h3 class="modal-title">Crear Profesor</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">OK</button>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal-header">
<h3 class="modal-title">Eliminar Profesor</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="acceptButton" type="button"
ng-click="ok(urlLo)">Aceptar</button>
<button class="btn btn-primary" ng-show="botonOK" type="button"
ng-click="vm.eliminarProfesor(index)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancel</button>
</div>

View File

@@ -0,0 +1,12 @@
<div class="modal-header">
<h3 class="modal-title">Modificar Profesor</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancel</button>
</div>

View File

@@ -0,0 +1,62 @@
<div class="row clearfix">
<div class="col-md-12 column">
<div class="col-md-4 column"></div>
</div>
</div>
<form name="vm.data_input_form" role="form" novalidate ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Modificar Profesor</h4></br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-4 column">
<label for="cedula">Cedula</label>
<input type="numeric" class="form-control" name="cedula" readonly="readonly" ng-model="vm.profesor.Cedula"/>
</div>
<div class="col-md-4 column">
<label for="nombre">Nombre</label>
<input type="text" class="form-control" name="nombre" readonly="readonly" ng-model="vm.profesor.Nombre"/>
</div>
<div class="col-md-4 column">
<label for="apellido">Apellido</label>
<input type="text" class="form-control" name="apellido" readonly="readonly" ng-model="vm.profesor.Apellido"/>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br>
</div></div>
<div class="row">
<div class="col-md-4 column">
<label for="email">Dirección de Correo Electronico</label>
<input type="email" class="form-control" name="email"
ng-model="vm.profesor.Correo"
ng-pattern="/^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/" placeholder="me@example.com"/>
<small class="error"
ng-show="vm.data_input_form.correo.$error.pattern">
El formato del Correo del Profesor es incorrecto.
</small>
</div>
<div class="col-md-4 column">
<label for="telefono">Número de Teléfono</label>
<input type="phone" class="form-control"
name="telefono" ng-model="vm.profesor.Telefono"
ng-pattern="/\d{4}-\d{3}-\d{4}/" maxlength="13"
placeholder="0212-574-1234"/>
<small class="error" ng-show="vm.data_input_form.telefono.$error.pattern">
El formato del Teléfono debe ser: 0212-789-5551.
</small>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">Modificar Profesor</button>
</span>
</p>
</div>
</div>
</div>
</form>

View File

@@ -0,0 +1,116 @@
<section>
<div class="page-header">
<h1>Reportes</h1>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 ng-scope"
ng-controller="poblacionNacimientoCtrl">
<div class="panel panel-default">
<div class="panel-heading">Reporte Alumno
</div>
<div class="panel-body">
<div class="chart-container">
<canvas class="chart chart-pie"
chart-data="dataPoblacionNacimiento"
chart-labels="labelPoblacionNacimiento"></canvas>
<chart-legend>
<ul class="line-legend">
<li><span style="background-color:rgba(151,187,205,1)"></span>{{'TAG_FOREIGN' }} </li>
<li><span style="background-color:rgba(220,220,220,1)"></span>{{'TAG_RESIDENT' }} </li>
</ul>
</chart-legend>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-sm-12 code">
<div class="ng-isolate-scope">
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 code">
<div class="ng-isolate-scope">
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 ng-scope"
ng-controller="poblacionActivaCtrl">
<div class="panel panel-default">
<div class="panel-heading">Reporte por Clase
</div>
<div class="panel-body">
<div class="chart-container">
<canvas class="chart chart-bar"
chart-data="dataPoblacionActiva"
chart-labels="labelsPoblacionActiva"
chart-series="seriesPoblacionActiva"></canvas>
<chart-legend>
<ul class="line-legend">
<li><span style="background-color:rgba(151,187,205,1)"></span>{{'TAG_ECONOMIC_PASSIVE' }} </li>
<li><span style="background-color:rgba(220,220,220,1)"></span>{{'TAG_ECONOMIC_ACTIVE' }} </li>
</ul>
</chart-legend>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-sm-12 code">
<div class="ng-isolate-scope">
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 ng-scope"
ng-controller="hombresEdadCtrl">
<div class="panel panel-default">
<div class="panel-heading">Reporte por Sección
</div>
<div class="panel-body">
<div class="chart-container">
<canvas class="chart chart-bar"
chart-data="dataHombresEdad"
chart-labels="labelsHombresEdad"
chart-series="seriesHombresEdad"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 code">
<div class="ng-isolate-scope">
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 ng-scope"
ng-controller="mujeresEdadCtrl">
<div class="panel panel-default">
<div class="panel-heading">Reporte por Materia
</div>
<div class="panel-body">
<div class="chart-container">
<canvas class="chart chart-bar"
chart-data="dataMujeresEdad"
chart-labels="labelsMujeresEdad"
chart-series="seriesMujeresEdad"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-sm-12 code">
<div class="ng-isolate-scope">
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,80 @@
<div>
<form name="vm.data_input_form" role="form" novalidate
ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Nueva Matricula</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-4 column">
<label>Nombre de la Materia</label>
<select
class="form-control"
ng-model="vm.valorMateria"
ng-options="materia.Nombre for materia in vm.materias"
>
<option value="">{{materia.Nombre}}</option>
</select>
</div>
<div class="col-md-4 column">
<label for="codigo">Codigo de la Materia</label>
<input type="text" class="form-control"
name="codigo" readonly="readonly"
ng-model="vm.valorMateria.Codigo"/>
</div>
<div class="col-md-4 column">
<label for="semestre">Semestre</label>
<input type="text" class="form-control"
name="semestre"
ng-model="vm.matricula.Semestre" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.semestre.$invalid">
<small class="error"
ng-show="vm.data_input_form.semestre.$error.required">
El Semestre es obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br></div></div>
<div class="row">
<div class="col-md-4 column">
<label for="seccion">Sección</label>
<input type="text" class="form-control"
name="seccion" ng-model="vm.matricula.Nombre"
required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.seccion.$invalid">
<small class="error"
ng-show="vm.data_input_form.seccion.$error.required">
La sección es obligatoria.
</small>
</div>
</div>
<div class="col-md-4 column"><br>
<span class="input-group-btn">
<button type="button"class="btn-warning btn"
ng-click="vm.cargarEstudiantes()">
Cargar Estudiantes
</button>
</span>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br>
<br></div></div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">Crear Matricula</button>
</span>
</p>
</div>
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,69 @@
<div class="row clearfix">
<h4>Listado de Secciones</h4></br>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th width="20%">
<a href="" ng-click="sortType = 'Nombre';
sortReverse = !sortReverse">
Sección
<span ng-show="sortType == 'Nombre' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Nombre' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href=""
ng-click="sortType = 'Materia'; sortReverse = !sortReverse">
Nombre de la Materia
<span ng-show="sortType == 'Materia' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Materia' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Codigo'; sortReverse = !sortReverse">
Codigo de la Materia
<span ng-show="sortType == 'Codigo' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Codigo' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Semestre'; sortReverse = !sortReverse">
Semestre
<span ng-show="sortType == 'Semestre' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Semestre' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="10%" style="text-align: center">
<a>Modificar</a>
</th>
<th width="10%" style="text-align: center">
<a>Borrar</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="matricula in vm.listaMatricula | orderBy:sortType:sortReverse | filter:searchUser">
<td style="vertical-align:middle">{{ matricula.Nombre }}</td>
<td style="vertical-align:middle">{{ matricula.Materia }}</td>
<td style="vertical-align:middle">{{ matricula.Codigo }}</td>
<td style="vertical-align:middle">{{ matricula.Semestre }}</td>
<td style="text-align: center">
<span title="Click aqui para Modificar la Matricula"
class="glyphicon glyphicon-edit" aria-hidden="true"
ng-click="vm.modificarMatricula($index)"
style="cursor:pointer"></span>
</td>
<td style="text-align: center">
<span title="Click aqui para Eliminar la Matricula"
class="glyphicon glyphicon-remove" aria-hidden="true"
ng-click="vm.eliminarMatriculaModal($index)"
style="cursor:pointer"></span>
</td>
</tr>
</tbody>
</table>
</div>
<div ng-show=false > {{ vm.eliminarMatriculaSplice(index, rsplice) }}</div>
</div>

View File

@@ -0,0 +1,12 @@
<div class="modal-header">
<h3 class="modal-title">Crear Sección</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">Aceptar</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancelar</button>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal-header">
<h3 class="modal-title">Eliminar Sección</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="vm.eliminarMatricula(index)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancelar</button>
<button class="btn btn-primary" ng-show="otroBotonOk" type="button"
ng-click="ok(urlLo)">Aceptar</button>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal-header">
<h3 class="modal-title">Retirar Estudiante</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="vm.retirarEstudiante(index)">OK</button>
<button class="btn btn-primary" ng-show="otroBotonOk" type="button"
ng-click="ok(urlLo)">Aceptar</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancelar</button>
</div>

View File

@@ -0,0 +1,54 @@
<div class="row clearfix">
<h4>Estudiantes Inscritos en {{ vm.matricula.Nombre }} - Seccion {{ vm.matricula.Seccion }} - Semestre {{ vm.matricula.Semestre }}</h4>
<br>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th width="20%">
<a href="" ng-click="sortType = 'Cedula'; sortReverse = !sortReverse">
Cedula
<span ng-show="sortType == 'Cedula' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Cedula' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Nombre'; sortReverse = !sortReverse">
Nombre
<span ng-show="sortType == 'Nombre' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Nombre' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Apellido'; sortReverse = !sortReverse">
Apellido
<span ng-show="sortType == 'Apellido' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Apellido' && sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%" style="text-align: center">
<a>Retirar</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="estudiante in vm.listaEstudiantes | orderBy:sortType:sortReverse | filter:searchUser">
<td style="vertical-align:middle">{{ estudiante.Cedula }}</td>
<td style="vertical-align:middle">{{ estudiante.Nombre }}</td>
<td style="vertical-align:middle">{{ estudiante.Apellido }}</td>
<td style="text-align: center">
<span title="Click aqui para Eliminar un Estudiante"
class="glyphicon glyphicon-remove" aria-hidden="true"
ng-click="vm.retirarEstudianteModal($index)"
style="cursor:pointer;"></span>
</td>
</tr>
</tbody>
</table>
</div>
<button type="button" class="btn-primary btn" ng-click="vm.actualizarMatricula()">Guardar Cambios</button>
<div ng-show = false> {{ vm.retirarEstudianteSplice(index, rsplice) }}</div>
<div class="container-fluid ">
<a href="#listarMatricula" class="btn-warning btn" style=" margin: 10px">Regresar</a>
</div>
</div>

21
app/partials/sidebar.html Normal file
View File

@@ -0,0 +1,21 @@
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<div class="container-fluid">
<div class="row">
<div class="col-sm-3 col-md-2 sidebar" data-ng-controller="sidebarCtrl as vm">
<ul class="nav nav-sidebar">
<li ng-repeat="item in items" ng-click="showChilds(item)">
<a>{{item.text}}</a>
<ul class="nav nav-sidebar text-center">
<li ng-repeat="subItem in item.subItems" ng-show="item.active" >
<a data-ui-sref="{{ subItem.state ? subItem.state : false }}">{{subItem.text}}
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</ul>
</div>

View File

@@ -0,0 +1,93 @@
<div>
<form name="vm.data_input_form" role="form" novalidate
ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Datos del Nuevo Alumno</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-4 column">
<label for="cedula">Numero de Cedula</label>
<input type="numeric" class="form-control"
name="cedula" ng-model="vm.estudiante.Cedula" placeholder="12345678" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.cedula.$invalid">
<small class="error"
ng-show="vm.data_input_form.cedula.$error.required">
El Numero de Cedula del Alumno es obligatorio.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="nombre">Nombre</label>
<input type="text" class="form-control" name="nombre"
ng-model="vm.estudiante.Nombre" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.nombre.$invalid">
<small class="error" ng-show="vm.data_input_form.nombre.$error.required">
El Nombre del Alumno es obligatorio.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="apellido">Apellido</label>
<input type="text" class="form-control"
name="apellido" ng-model="vm.estudiante.Apellido"
required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.apellido.$invalid">
<small class="error" ng-show="vm.data_input_form.apellido.$error.required">
El Apellido del Alumno es obligatorio.
</small>
</div>
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column">
<br><br></div></div>
<div class="row">
<div class="col-md-4 column">
<label for="correo">Direccion de Correo</label>
<input type="correo" class="form-control"
name="correo" ng-model="vm.estudiante.Correo"
ng-pattern="/^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/" placeholder="me@example.com" required/>
<div class="error" ng-show="vm.submitted &&
vm.data_input_form.correo.$invalid">
<small class="error"
ng-show="vm.data_input_form.correo.$error.required">
El Correo del Alumno es obligatorio.
</small>
<small class="error"
ng-show="vm.data_input_form.correo.$error.pattern">
El formato del Correo del Alumno es incorrecto.
</small>
</div>
</div>
<div class="col-md-4 column">
<label for="telefono">Numero de Telefono</label>
<input type="telefono" class="form-control"
name="telefono" ng-model="vm.estudiante.Telefono"
ng-pattern="/\d{4}-\d{3}-\d{4}/" maxlength="13"
placeholder="0424-123-9876"/>
<small class="error"
ng-show="vm.data_input_form.telefono.$error.pattern">
El Formato del Numero de Telefono es incorrecto.
</small>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">
Agregar Alumno</button>
</span>
</p>
</div>
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,67 @@
<div class="row clearfix">
<h4>Listado de Estudiantes</h4>
<br>
<div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th width="20%">
<a href="" ng-click="sortType = 'Cedula';
sortReverse = !sortReverse">
Cedula
<span ng-show="sortType == 'Cedula' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Cedula' &&
sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Nombre';
sortReverse = !sortReverse">
Nombre
<span ng-show="sortType == 'Nombre' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Nombre' &&
sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%">
<a href="" ng-click="sortType = 'Apellido';
sortReverse = !sortReverse">
Apellido
<span ng-show="sortType == 'Apellido' &&
!sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'Apellido' &&
sortReverse" class="fa fa-caret-up"></span>
</a>
</th>
<th width="20%" style="text-align: center">
<a>Modificar</a>
</th>
<th width="20%" style="text-align: center">
<a>Borrar</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="estudiante in vm.listaEstudiantes">
<td style="vertical-align:middle">{{ estudiante.Cedula }}</td>
<td style="vertical-align:middle">{{ estudiante.Nombre }}</td>
<td style="vertical-align:middle">{{ estudiante.Apellido }}</td>
<td style="text-align: center">
<span title="Click aqui para Modificar un Estudiante" class="glyphicon glyphicon-edit" aria-hidden="true"
ng-click="vm.modificarEstudiante($index)"
style="cursor:pointer"></span>
</td>
<td style="text-align: center">
<span title="Click aqui para Eliminar un Estudiante"
class="glyphicon glyphicon-remove" aria-hidden="true"
ng-click="vm.eliminarEstudianteModal($index)"
style="cursor:pointer"></span>
</td>
</tr>
</tbody>
</table>
</div>
<div ng-show=false > {{vm.removeEstudianteSplice(index, rsplice)}}</div>
</div>

View File

@@ -0,0 +1,9 @@
<div class="modal-header">
<h3 class="modal-title">Crear Estudiante</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button" ng-click="ok(urlLo)">Aceptar</button>
</div>

View File

@@ -0,0 +1,14 @@
<div class="modal-header">
<h3 class="modal-title">Eliminar Estudiante</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="acceptButton" type="button"
ng-click="ok(urlLo)">Aceptar</button>
<button class="btn btn-primary" ng-show="botonOK" type="button"
ng-click="vm.eliminarEstudiante(index)">OK</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancelar</button>
</div>

View File

@@ -0,0 +1,12 @@
<div class="modal-header">
<h3 class="modal-title">Modificar Estudiante</h3>
</div>
<div style="text-align: center" class="modal-body">
{{ mensaje }}
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-show="botonOk" type="button"
ng-click="ok(urlLo)">Aceptar</button>
<button class="btn btn-warning" ng-show="botonCancelar" type="button"
ng-click="cancel()">Cancelar</button>
</div>

View File

@@ -0,0 +1,69 @@
<div class="row clearfix">
<div class="col-md-12 column">
</div>
</div>
<form name="vm.data_input_form" role="form" novalidate ng-submit="vm.submit()">
<div class="row clearfix">
<h4>Modificar Estudiante</h4>
<br>
<div class="col-md-12 column well">
<div class="row">
<div class="col-md-4 column">
<label for="cedula">Cedula</label>
<input type="nmumeric" class="form-control"
name="cedula" readonly="readonly"
ng-model="vm.estudiante.Cedula" />
</div>
<div class="col-md-4 column">
<label for="nombre">Nombre</label>
<input type="text" class="form-control"
name="nombre" readonly="readonly"
ng-model="vm.estudiante.Nombre" />
</div>
<div class="col-md-4 column">
<label for="apellido">Apellido</label>
<input type="text" class="form-control"
name="apellido" readonly="readonly"
ng-model="vm.estudiante.Apellido" />
</div>
</div>
<div class="row clearfix"><div class="col-md-12 column"><br><br>
</div></div>
<div class="row">
<div class="col-md-4 column">
<label for="email">Direccion de Correo Electronico</label>
<input type="email" class="form-control"
name="email" ng-model="vm.estudiante.Correo"
ng-pattern="/^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/" placeholder="me@example.com"/>
<small class="error"
ng-show="vm.data_input_form.correo.$error.pattern">
El formato del Correo del Alumno es incorrecto.
</small>
</div>
<div class="col-md-4 column">
<label for="telefono">Numero de Telefono</label>
<input type="phone" class="form-control"
name="telefono" ng-model="vm.estudiante.Telefono"
ng-pattern="/\d{4}-\d{3}-\d{4}/" maxlength="13"
placeholder="0212-574-1234"/>
<small class="error"
ng-show="vm.data_input_form.telefono.$error.pattern">
El formato del Teléfono debe ser: 0212-789-5551.
</small>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-2 column">
<div class="form-group">
<label>&nbsp;</label>
<p class="input-group">
<span class="input-group-btn">
<button type="submit" class="btn-primary btn">Modificar Estudiante</button>
</span>
</p>
</div>
</div>
</div>
</form>

188
app/server.js Normal file
View File

@@ -0,0 +1,188 @@
var express = require('express');
var app = express();
var mongojs = require('mongojs');
var db = mongojs('AttendanceDB',
['Courses', 'Professors', 'Sections', 'Students']);
var bodyParser = require('body-parser');
app.use(express.static(__dirname));
app.use(bodyParser.json());
app.get('/students', function(req, res){
console.log('Received get all request');
db.Students.find(function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/students/:id', function(req, res){
console.log('Received get request');
db.Students.findOne(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.post('/students', function(req, res){
console.log('Received add request');
console.log(req.body);
db.Students.insert(req.body, function(docs){
console.log(docs);
res.json(docs);
})
});
app.delete('/students/:id', function(req, res){
console.log("Received delete request...");
db.Students.remove(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
});
});
app.put('/students', function(req, res){
console.log("Received update request");
console.log(req.body);
db.Students.findAndModify({query:
{"_id": new mongojs.ObjectId(req.body._id)},
update: {$set: {email: req.body.email, number: req.body.number}}
}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/courses', function(req, res){
console.log('Received get all request');
db.Courses.find(function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/courses/:id', function(req, res){
console.log('Received get request');
db.Courses.findOne(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.post('/courses', function(req, res){
console.log('Received add request');
console.log(req.body);
db.Courses.insert(req.body, function(docs){
console.log(docs);
res.json(docs);
})
});
app.delete('courses/:id', function(req, res){
console.log("Received delete request...");
db.Courses.remove(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
});
});
app.get('/sections', function(req, res){
console.log('Received get all request');
db.Sections.find(function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/sections/:id', function(req, res){
console.log('Received get request');
db.Sections.findOne(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.post('/sections', function(req, res){
console.log('Received add request');
console.log(req.body);
db.Sections.insert(req.body, function(docs){
console.log(docs);
res.json(docs);
})
});
app.delete('/sections/:id', function(req, res){
console.log("Received delete request...");
db.Sections.remove(
{_id: new mongojs.ObjectId(req.params.id)}, function(err, docs){
console.log(docs);
res.json(docs);
});
});
app.put('/sections', function(req, res){
console.log("Received update request");
console.log(req.body);
db.Sections.findAndModify({query:
{"_id": new mongojs.ObjectId(req.body._id)},
update: {$set: {students: req.body.students}}
}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/professors', function(req, res){
console.log('Received get all request');
db.Professors.find(function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.get('/professors/:id', function(req, res){
console.log('Received get request');
db.Professors.findOne({_id: new mongojs.ObjectId(req.params.id)},
function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.post('/professors', function(req, res){
console.log('Received add request');
console.log(req.body);
db.Professors.insert(req.body, function(docs){
console.log(docs);
res.json(docs);
})
});
app.delete('/professors/:id', function(req, res){
console.log("Received delete request...");
db.Professors.remove({_id: new mongojs.ObjectId(req.params.id)},
function(err, docs){
console.log(docs);
res.json(docs);
});
});
app.put('/professors', function(req, res){
console.log("Received update request");
console.log(req.body);
db.Professors.findAndModify({query:
{"_id": new mongojs.ObjectId(req.body._id)},
update: {$set: {email: req.body.email, number: req.body.number}}
}, function(err, docs){
console.log(docs);
res.json(docs);
})
});
app.listen(3000);
console.log("server running on port 3000");