diff --git a/08-directivas/tpl-fila-movimiento.html b/08-directivas/tpl-fila-movimiento.html
new file mode 100644
index 0000000..4dd5e38
--- /dev/null
+++ b/08-directivas/tpl-fila-movimiento.html
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/08-directivas/tpl-menu-navegacion.html b/08-directivas/tpl-menu-navegacion.html
new file mode 100644
index 0000000..481b476
--- /dev/null
+++ b/08-directivas/tpl-menu-navegacion.html
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/08-directivas/tpl-valoracion.html b/08-directivas/tpl-valoracion.html
new file mode 100644
index 0000000..8b3612d
--- /dev/null
+++ b/08-directivas/tpl-valoracion.html
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/08-directivas/valoracion.js b/08-directivas/valoracion.js
new file mode 100644
index 0000000..1efbf99
--- /dev/null
+++ b/08-directivas/valoracion.js
@@ -0,0 +1,48 @@
+(function () {
+ angular.module('abValoracion', [])
+ .directive('abValoracion', valoracion);
+
+ function valoracion() {
+ return {
+ restrict: 'AE',
+ templateUrl: './tpl-valoracion.html',
+ scope: {
+ valor: '=',
+ max: '@',
+ soloLectura: '@'
+ },
+ bindToController: true,
+ controllerAs: "valoracion",
+ controller: valoracionCtrl
+ }
+ }
+
+ function valoracionCtrl() {
+ var vm = this;
+ /** responde al click en una estrella */
+ vm.marcar = function (indice) {
+ if (vm.soloLectura && vm.soloLectura === 'true') {
+ return;
+ }
+ vm.valor = indice + 1;
+ actualizar();
+ };
+
+ /** para empezar iniciamos los datos según lo recibido en el scope */
+ actualizar();
+
+ /** actualiza los datos para repintar la vista */
+ function actualizar() {
+ if (!vm.valor) vm.valor = 1;
+ vm.estrellas = [];
+ for (var i = 0; i < vm.max; i++) {
+ var estrella = {
+ marcada: (i < vm.valor)
+ };
+ vm.estrellas.push(estrella);
+ }
+ };
+ }
+
+
+}());
\ No newline at end of file
diff --git a/09-nodejs-y-la-web/4-control-caja/client/menuCtrl.js b/09-nodejs-y-la-web/4-control-caja/client/menuCtrl.js
deleted file mode 100644
index 9607956..0000000
--- a/09-nodejs-y-la-web/4-control-caja/client/menuCtrl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function () {
- var menuCtrl = function ($state) {
- this.isActive = function (estado) {
- return $state.is(estado);
- }
- }
- angular.module('controlCajaApp').controller('MenuCtrl',menuCtrl);
-}());
\ No newline at end of file
diff --git a/09-organizacion/app/app.js b/09-organizacion/app/app.js
new file mode 100644
index 0000000..4c2ecc3
--- /dev/null
+++ b/09-organizacion/app/app.js
@@ -0,0 +1,3 @@
+angular.module('cashFlow', ['ui.router', 'abFiltros' , 'abComponentes', 'abDirectivas', 'abValoracion']);
+
+
diff --git a/09-organizacion/app/common/directivas.js b/09-organizacion/app/common/directivas.js
new file mode 100644
index 0000000..00be044
--- /dev/null
+++ b/09-organizacion/app/common/directivas.js
@@ -0,0 +1,54 @@
+(function () {
+
+ //cambios en las rutas relativas de las plantillas
+
+ angular.module('abDirectivas', [])
+ .directive('abSeleccionado', seleccionado)
+ .directive('input', seleccionado)
+ .directive('abPlugin', plugin);
+
+
+ function seleccionado() {
+ return {
+ link: function (scope, element, attrs) {
+ element.bind('mouseenter', function () {
+ element.css('background-color', 'yellow');
+ });
+ element.bind('mouseleave', function () {
+ element.css('background-color', 'white');
+ });
+ }
+ };
+ }
+
+ function plugin() {
+ return {
+ link: function (scope, element, attrs) {
+
+
+ var init = scope.$eval(attrs.ngModel);
+ var min = scope.$eval(attrs.abPlugInMin);
+ var max = scope.$eval(attrs.abPlugInMax);
+
+ element.pluginInitMethod({
+ value: init,
+ min: min,
+ max: max,
+ tooltip: 'hide'
+ });
+
+ scope.$watch(attrs.ngModel, function (valor) {
+ element.pluginMethod('setValue', valor);
+ });
+
+ element.on('plugin_event', function (evento) {
+ scope.$apply(function () {
+ scope[attrs.ngModel] = evento.value;
+ });
+ });
+ }
+ }
+ }
+
+
+}());
\ No newline at end of file
diff --git a/21-organizacion/client/filtros/filtros.js b/09-organizacion/app/common/filtros.js
similarity index 99%
rename from 21-organizacion/client/filtros/filtros.js
rename to 09-organizacion/app/common/filtros.js
index 6398464..36a85ea 100644
--- a/21-organizacion/client/filtros/filtros.js
+++ b/09-organizacion/app/common/filtros.js
@@ -1,5 +1,11 @@
(function () {
+ angular.module('abFiltros', [])
+ .filter('abLimpiarCadena', limpiarCadena)
+ .filter('abRecortar', recortar)
+ .filter('abRellenarVacios', rellenarVacios)
+ .filter('abGranImporte', granImporte);
+
function limpiarCadena() {
var funcionFiltro = function (cadena) {
if (cadena) {
@@ -62,10 +68,4 @@
};
return funcionFiltro;
}
-
- angular.module('abFiltros', [])
- .filter('abLimpiarCadena', limpiarCadena)
- .filter('abRecortar', recortar)
- .filter('abRellenarVacios', rellenarVacios)
- .filter('abGranImporte', granImporte);
-}());
+}());
\ No newline at end of file
diff --git a/09-organizacion/app/common/maestrosService.js b/09-organizacion/app/common/maestrosService.js
new file mode 100644
index 0000000..6f36732
--- /dev/null
+++ b/09-organizacion/app/common/maestrosService.js
@@ -0,0 +1,10 @@
+(function () {
+ angular.module('cashFlow').service('maestrosService', maestrosService);
+
+ function maestrosService() {
+ this.categorias = {
+ categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
+ categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
+ };
+ }
+}());
diff --git a/09-organizacion/app/common/movimientosFactory.js b/09-organizacion/app/common/movimientosFactory.js
new file mode 100644
index 0000000..bf394e0
--- /dev/null
+++ b/09-organizacion/app/common/movimientosFactory.js
@@ -0,0 +1,38 @@
+(function () {
+ angular.module('cashFlow').factory('movimientosFactory', movimientosFactory);
+
+ function movimientosFactory() {
+
+ var movimientos = [];
+ var total = {
+ ingresos: 0,
+ gastos: 0
+ };
+ var result = {};
+
+ result.getMovimientos = function () {
+ return movimientos;
+ };
+
+ result.getTotal = function () {
+ return total;
+ };
+
+ result.postMovimiento = function (movimiento) {
+ movimientos.push(movimiento);
+ total.ingresos += movimiento.esIngreso * movimiento.importe;
+ total.gastos += movimiento.esGasto * movimiento.importe;
+ };
+
+ result.balance = function () {
+ return total.ingresos - total.gastos
+ }
+
+ result.tipo = function (movimiento) {
+ return movimiento.esIngreso && 'Ingreso' || 'Gasto'
+ }
+
+ return result;
+ };
+
+}());
diff --git a/09-organizacion/app/common/states.js b/09-organizacion/app/common/states.js
new file mode 100644
index 0000000..5bf8905
--- /dev/null
+++ b/09-organizacion/app/common/states.js
@@ -0,0 +1,22 @@
+//cambios en las rutas relativas de las vistas
+angular.module('cashFlow').config(function ($stateProvider) {
+ $stateProvider
+ .state('total', {
+ url: '/',
+ controller: 'CajaCtrl as caja',
+ templateUrl: './app/states/total.html'
+ })
+ .state('nuevo', {
+ url: '/nuevo',
+ controller: 'CajaCtrl as caja',
+ templateUrl: './app/states/nuevo.html'
+ })
+ .state('lista', {
+ url: '/lista',
+ controller: 'CajaCtrl as caja',
+ templateUrl: './app/states/lista.html'
+ }).state('not-found', {
+ url: '*path',
+ templateUrl: './app/states/not-found.html'
+ });
+});
\ No newline at end of file
diff --git a/09-organizacion/app/components/componentes.js b/09-organizacion/app/components/componentes.js
new file mode 100644
index 0000000..f637b0c
--- /dev/null
+++ b/09-organizacion/app/components/componentes.js
@@ -0,0 +1,48 @@
+(function () {
+ //cambios en las rutas relativas de las vistas
+
+ angular.module('abComponentes', [])
+ .directive('abPiePagina', piePagina)
+ .directive('abContenido', contenido)
+ .directive('abCabecera', cabecera)
+ .directive('abMenuNavegacion', menuNavegacion)
+ .directive('abFilaMovimiento', filaMovimiento);
+
+ function piePagina() {
+ return {
+ template: '
'
+ };
+ };
+
+ function cabecera() {
+ return {
+ transclude: true,
+ templateUrl: './app/components/tpl-cabecera.html'
+ };
+ };
+
+ function menuNavegacion() {
+ return {
+ templateUrl: './app/components/tpl-menu-navegacion.html',
+ controller: "MenuCtrl as menu"
+ };
+ }
+
+ function filaMovimiento() {
+ return {
+ restrict: 'A',
+ templateUrl: './app/components/tpl-fila-movimiento.html',
+ scope: {
+ movimientoplantilla: "=movimientodirectiva"
+ }
+ };
+ }
+
+
+}());
\ No newline at end of file
diff --git a/09-organizacion/app/components/menuCtrl.js b/09-organizacion/app/components/menuCtrl.js
new file mode 100644
index 0000000..4f7f90e
--- /dev/null
+++ b/09-organizacion/app/components/menuCtrl.js
@@ -0,0 +1,10 @@
+(function () {
+ angular.module('cashFlow').controller('MenuCtrl', menuCtrl);
+
+ function menuCtrl($state) {
+ this.isActive = function (estado) {
+ return $state.is(estado);
+ }
+ }
+
+}());
diff --git a/09-organizacion/app/components/tpl-cabecera.html b/09-organizacion/app/components/tpl-cabecera.html
new file mode 100644
index 0000000..a86e6a1
--- /dev/null
+++ b/09-organizacion/app/components/tpl-cabecera.html
@@ -0,0 +1,6 @@
+
+
Cash Flow
+
diff --git a/09-organizacion/app/components/tpl-fila-movimiento.html b/09-organizacion/app/components/tpl-fila-movimiento.html
new file mode 100644
index 0000000..4dd5e38
--- /dev/null
+++ b/09-organizacion/app/components/tpl-fila-movimiento.html
@@ -0,0 +1,10 @@
+
{{movimientoplantilla.fecha | date}} |
+
{{movimientoplantilla.tipo}} |
+
{{movimientoplantilla.categoria}} |
+
+ {{movimientoplantilla.importe | number:2}} €
+ |
+
+
+
+ |
\ No newline at end of file
diff --git a/09-organizacion/app/components/tpl-menu-navegacion.html b/09-organizacion/app/components/tpl-menu-navegacion.html
new file mode 100644
index 0000000..481b476
--- /dev/null
+++ b/09-organizacion/app/components/tpl-menu-navegacion.html
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/09-organizacion/app/components/valoracion/tpl-valoracion.html b/09-organizacion/app/components/valoracion/tpl-valoracion.html
new file mode 100644
index 0000000..8b3612d
--- /dev/null
+++ b/09-organizacion/app/components/valoracion/tpl-valoracion.html
@@ -0,0 +1,8 @@
+
+
+ *
+
+
\ No newline at end of file
diff --git a/09-organizacion/app/components/valoracion/valoracion.js b/09-organizacion/app/components/valoracion/valoracion.js
new file mode 100644
index 0000000..044c8fa
--- /dev/null
+++ b/09-organizacion/app/components/valoracion/valoracion.js
@@ -0,0 +1,48 @@
+(function () {
+ angular.module('abValoracion', [])
+ .directive('abValoracion', valoracion);
+
+ function valoracion() {
+ return {
+ restrict: 'AE',
+ templateUrl: './app/components/valoracion/tpl-valoracion.html',
+ scope: {
+ valor: '=',
+ max: '@',
+ soloLectura: '@'
+ },
+ bindToController: true,
+ controllerAs: "valoracion",
+ controller: valoracionCtrl
+ }
+ }
+
+ function valoracionCtrl() {
+ var vm = this;
+ /** responde al click en una estrella */
+ vm.marcar = function (indice) {
+ if (vm.soloLectura && vm.soloLectura === 'true') {
+ return;
+ }
+ vm.valor = indice + 1;
+ actualizar();
+ };
+
+ /** para empezar iniciamos los datos según lo recibido en el scope */
+ actualizar();
+
+ /** actualiza los datos para repintar la vista */
+ function actualizar() {
+ if (!vm.valor) vm.valor = 1;
+ vm.estrellas = [];
+ for (var i = 0; i < vm.max; i++) {
+ var estrella = {
+ marcada: (i < vm.valor)
+ };
+ vm.estrellas.push(estrella);
+ }
+ };
+ }
+
+
+}());
\ No newline at end of file
diff --git a/09-organizacion/app/states/cajaCtrl.js b/09-organizacion/app/states/cajaCtrl.js
new file mode 100644
index 0000000..b8877e4
--- /dev/null
+++ b/09-organizacion/app/states/cajaCtrl.js
@@ -0,0 +1,25 @@
+(function () {
+ var cajaCtrl = function (movimientosFactory, maestrosService) {
+ var vm = this;
+
+ vm.titulo = "Controla tu Cash Flow";
+ vm.maestros = maestrosService.categorias;
+ vm.nuevoMovimiento = {
+ esIngreso: 1,
+ esGasto: 0,
+ importe: 0,
+ fecha: new Date()
+ };
+ vm.movimientos = movimientosFactory.getMovimientos();
+ vm.total = movimientosFactory.getTotal();
+
+ vm.guardarMovimiento = function () {
+ var auxCopyMov = angular.copy(vm.nuevoMovimiento);
+ movimientosFactory.postMovimiento(auxCopyMov);
+ vm.nuevoMovimiento.importe = 0;
+ }
+ vm.balance = movimientosFactory.balance;
+ vm.tipo = movimientosFactory.tipo;
+ }
+ angular.module('cashFlow').controller('CajaCtrl', cajaCtrl);
+}());
diff --git a/09-organizacion/app/states/lista.html b/09-organizacion/app/states/lista.html
new file mode 100644
index 0000000..4292e42
--- /dev/null
+++ b/09-organizacion/app/states/lista.html
@@ -0,0 +1,31 @@
+
diff --git a/09-organizacion/app/states/not-found.html b/09-organizacion/app/states/not-found.html
new file mode 100644
index 0000000..0eddd6f
--- /dev/null
+++ b/09-organizacion/app/states/not-found.html
@@ -0,0 +1,3 @@
+
+ No se ha encontrado lo que buscabas
+
diff --git a/09-organizacion/app/states/nuevo.html b/09-organizacion/app/states/nuevo.html
new file mode 100644
index 0000000..ea1d6ed
--- /dev/null
+++ b/09-organizacion/app/states/nuevo.html
@@ -0,0 +1,69 @@
+
+ Introduce tus movimientos
+
+
diff --git a/09-organizacion/app/states/total.html b/09-organizacion/app/states/total.html
new file mode 100644
index 0000000..5941c88
--- /dev/null
+++ b/09-organizacion/app/states/total.html
@@ -0,0 +1,34 @@
+
+ Comprueba de dónde viene y a dónde va tu dinero.
+
+
+
+
+
+ {{ caja.total.ingresos | number:2 }} €
+
+
+ Total ingresos
+ Acumulado
+
+
+
+
+ {{ caja.total.gastos | number:2 }} €
+
+
+ Total gastos
+ Acumulado
+
+
+
+
+ {{ caja.balance() | number:2 }} €
+
+
+ Balance
+ Ingresos-Gastos
+
+
+
+
diff --git a/09-organizacion/index.html b/09-organizacion/index.html
new file mode 100644
index 0000000..16a6c9b
--- /dev/null
+++ b/09-organizacion/index.html
@@ -0,0 +1,40 @@
+
+
+
+
Control de Caja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/07-hola-mundo-nodejs/1-mi-script.js b/107-hola-mundo-nodejs/1-mi-script.js
similarity index 100%
rename from 07-hola-mundo-nodejs/1-mi-script.js
rename to 107-hola-mundo-nodejs/1-mi-script.js
diff --git a/07-hola-mundo-nodejs/2-javascript-normal-2.js b/107-hola-mundo-nodejs/2-javascript-normal-2.js
similarity index 100%
rename from 07-hola-mundo-nodejs/2-javascript-normal-2.js
rename to 107-hola-mundo-nodejs/2-javascript-normal-2.js
diff --git a/07-hola-mundo-nodejs/3-patrones.js b/107-hola-mundo-nodejs/3-patrones.js
similarity index 100%
rename from 07-hola-mundo-nodejs/3-patrones.js
rename to 107-hola-mundo-nodejs/3-patrones.js
diff --git a/07-hola-mundo-nodejs/4-el-proceso.js b/107-hola-mundo-nodejs/4-el-proceso.js
similarity index 100%
rename from 07-hola-mundo-nodejs/4-el-proceso.js
rename to 107-hola-mundo-nodejs/4-el-proceso.js
diff --git a/07-hola-mundo-nodejs/hola-mundo.md b/107-hola-mundo-nodejs/hola-mundo.md
similarity index 100%
rename from 07-hola-mundo-nodejs/hola-mundo.md
rename to 107-hola-mundo-nodejs/hola-mundo.md
diff --git a/08-nodejs-y-la-consola/1-consola-argumentos.js b/108-nodejs-y-la-consola/1-consola-argumentos.js
similarity index 100%
rename from 08-nodejs-y-la-consola/1-consola-argumentos.js
rename to 108-nodejs-y-la-consola/1-consola-argumentos.js
diff --git a/08-nodejs-y-la-consola/2-trabajo-consola-asincrona.js b/108-nodejs-y-la-consola/2-trabajo-consola-asincrona.js
similarity index 100%
rename from 08-nodejs-y-la-consola/2-trabajo-consola-asincrona.js
rename to 108-nodejs-y-la-consola/2-trabajo-consola-asincrona.js
diff --git a/08-nodejs-y-la-consola/3-consola-con-callbacks.js b/108-nodejs-y-la-consola/3-consola-con-callbacks.js
similarity index 100%
rename from 08-nodejs-y-la-consola/3-consola-con-callbacks.js
rename to 108-nodejs-y-la-consola/3-consola-con-callbacks.js
diff --git a/08-nodejs-y-la-consola/consola.md b/108-nodejs-y-la-consola/consola.md
similarity index 100%
rename from 08-nodejs-y-la-consola/consola.md
rename to 108-nodejs-y-la-consola/consola.md
diff --git a/09-nodejs-y-la-web/1-http.js b/109-nodejs-y-la-web/1-http.js
similarity index 100%
rename from 09-nodejs-y-la-web/1-http.js
rename to 109-nodejs-y-la-web/1-http.js
diff --git a/09-nodejs-y-la-web/2-web.js b/109-nodejs-y-la-web/2-web.js
similarity index 100%
rename from 09-nodejs-y-la-web/2-web.js
rename to 109-nodejs-y-la-web/2-web.js
diff --git a/09-nodejs-y-la-web/3-static.js b/109-nodejs-y-la-web/3-static.js
similarity index 100%
rename from 09-nodejs-y-la-web/3-static.js
rename to 109-nodejs-y-la-web/3-static.js
diff --git a/09-nodejs-y-la-web/4-control-caja/client/app.js b/109-nodejs-y-la-web/4-control-caja/client/app.js
similarity index 90%
rename from 09-nodejs-y-la-web/4-control-caja/client/app.js
rename to 109-nodejs-y-la-web/4-control-caja/client/app.js
index a29ee36..ba92109 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/app.js
+++ b/109-nodejs-y-la-web/4-control-caja/client/app.js
@@ -1,26 +1,26 @@
-// tenemos que cambiar la dependencia hacia el nuevo módulo
-angular.module('controlCajaApp', ['ui.router']);
-
-// las rutas ahora se maneja con el concepto de estado
-angular.module('controlCajaApp').config(function ($stateProvider,$locationProvider) {
- $stateProvider
- .state('total', {
- url: '/',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- })
- .state('nuevo', {
- url: '/nuevo',
- controller: 'CajaCtrl as caja',
- templateUrl: 'nuevo.html'
- })
- .state('lista', {
- url: '/lista',
- controller: 'CajaCtrl as caja',
- templateUrl: 'lista.html'
- }).state('not-found', {
- url: '*path',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- });
-});
\ No newline at end of file
+// tenemos que cambiar la dependencia hacia el nuevo módulo
+angular.module('controlCajaApp', ['ui.router']);
+
+// las rutas ahora se maneja con el concepto de estado
+angular.module('controlCajaApp').config(function ($stateProvider,$locationProvider) {
+ $stateProvider
+ .state('total', {
+ url: '/',
+ controller: 'CajaCtrl as caja',
+ templateUrl: 'total.html'
+ })
+ .state('nuevo', {
+ url: '/nuevo',
+ controller: 'CajaCtrl as caja',
+ templateUrl: 'nuevo.html'
+ })
+ .state('lista', {
+ url: '/lista',
+ controller: 'CajaCtrl as caja',
+ templateUrl: 'lista.html'
+ }).state('not-found', {
+ url: '*path',
+ controller: 'CajaCtrl as caja',
+ templateUrl: 'total.html'
+ });
+});
diff --git a/09-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js b/109-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js
similarity index 96%
rename from 09-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js
rename to 109-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js
index 3dfd43d..ed2ad4d 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js
+++ b/109-nodejs-y-la-web/4-control-caja/client/cajaCtrl.js
@@ -1,40 +1,40 @@
-(function () {
- // El controlador ahora tiene una dependencia de la factoría
- var cajaCtrl = function (movimientosFactory) {
- var vm = this;
-
- vm.titulo = "Controla tu Cash Flow";
- vm.maestros = {
- categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
- categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
- };
- vm.nuevoMovimiento = {
- esIngreso: 1,
- esGasto: 0,
- importe: 0,
- fecha: new Date()
- };
- // La parte de datos que debe compartir la delega sobre la factoría
- vm.movimientos = movimientosFactory.getMovimientos();
- vm.total = movimientosFactory.getTotal();
-
- vm.guardarMovimiento = function () {
- if(vm.nuevoMovimiento.esIngreso){
- vm.total.ingresos += vm.nuevoMovimiento.importe;
- }else{
- vm.total.gastos += vm.nuevoMovimiento.importe;
- }
- var auxCopyMov = angular.copy(vm.nuevoMovimiento);
- auxCopyMov.tipo = vm.tipo(auxCopyMov);
- vm.movimientos.push(auxCopyMov);
- vm.nuevoMovimiento.importe = 0;
- }
- vm.balance = function () {
- return vm.total.ingresos - vm.total.gastos
- }
- vm.tipo = function (movimiento) {
- return movimiento.esIngreso && 'Ingreso' || 'Gasto'
- }
- }
- angular.module('controlCajaApp').controller('CajaCtrl', cajaCtrl);
-}());
\ No newline at end of file
+(function () {
+ // El controlador ahora tiene una dependencia de la factoría
+ var cajaCtrl = function (movimientosFactory) {
+ var vm = this;
+
+ vm.titulo = "Controla tu Cash Flow";
+ vm.maestros = {
+ categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
+ categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
+ };
+ vm.nuevoMovimiento = {
+ esIngreso: 1,
+ esGasto: 0,
+ importe: 0,
+ fecha: new Date()
+ };
+ // La parte de datos que debe compartir la delega sobre la factoría
+ vm.movimientos = movimientosFactory.getMovimientos();
+ vm.total = movimientosFactory.getTotal();
+
+ vm.guardarMovimiento = function () {
+ if(vm.nuevoMovimiento.esIngreso){
+ vm.total.ingresos += vm.nuevoMovimiento.importe;
+ }else{
+ vm.total.gastos += vm.nuevoMovimiento.importe;
+ }
+ var auxCopyMov = angular.copy(vm.nuevoMovimiento);
+ auxCopyMov.tipo = vm.tipo(auxCopyMov);
+ vm.movimientos.push(auxCopyMov);
+ vm.nuevoMovimiento.importe = 0;
+ }
+ vm.balance = function () {
+ return vm.total.ingresos - vm.total.gastos
+ }
+ vm.tipo = function (movimiento) {
+ return movimiento.esIngreso && 'Ingreso' || 'Gasto'
+ }
+ }
+ angular.module('controlCajaApp').controller('CajaCtrl', cajaCtrl);
+}());
diff --git a/09-nodejs-y-la-web/4-control-caja/client/index.html b/109-nodejs-y-la-web/4-control-caja/client/index.html
similarity index 97%
rename from 09-nodejs-y-la-web/4-control-caja/client/index.html
rename to 109-nodejs-y-la-web/4-control-caja/client/index.html
index a2c23fd..1b27f3b 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/index.html
+++ b/109-nodejs-y-la-web/4-control-caja/client/index.html
@@ -1,48 +1,48 @@
-
-
-
Control de Caja
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
Control de Caja
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/14-rest-in-peace/client/lista.html b/109-nodejs-y-la-web/4-control-caja/client/lista.html
similarity index 100%
rename from 14-rest-in-peace/client/lista.html
rename to 109-nodejs-y-la-web/4-control-caja/client/lista.html
diff --git a/14-rest-in-peace/client/menuCtrl.js b/109-nodejs-y-la-web/4-control-caja/client/menuCtrl.js
similarity index 100%
rename from 14-rest-in-peace/client/menuCtrl.js
rename to 109-nodejs-y-la-web/4-control-caja/client/menuCtrl.js
diff --git a/09-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js b/109-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js
similarity index 96%
rename from 09-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js
rename to 109-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js
index 4f742b1..e92fe48 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js
+++ b/109-nodejs-y-la-web/4-control-caja/client/movimientosFactory.js
@@ -1,34 +1,34 @@
-(function () {
- // Las factorías, y los servicios, son funciones estándar
- // Una gran diferencia con los controladores es que son singleton
- // Eso los convierte en un buen lugar para compartir datos
- var movimientosFactory = function () {
- // el array de movimientos y el total lo mantiene la factoría
- // de esta forma sobrevive a las recargas de controladores
- var movimientos = [];
- var total = {
- ingresos: 0,
- gastos: 0
- };
-
-
- var factory = {};
- factory.getMovimientos = function () {
- return movimientos;
- };
- factory.getTotal = function () {
- return total;
- };
- factory.postMovimiento = function (movimiento) {
- movimientos.push(movimiento);
- total.ingresos += movimiento.esIngreso * movimiento.importe;
- total.gastos += movimiento.esGasto * movimiento.importe;
- };
- // las factorias siempre devuelven objetos
- // Estos objetos pueden contener funciones de lógica reutilizables
- return factory;
- };
-
- angular.module('controlCajaApp').factory('movimientosFactory', movimientosFactory);
-}());
-
+(function () {
+ // Las factorías, y los servicios, son funciones estándar
+ // Una gran diferencia con los controladores es que son singleton
+ // Eso los convierte en un buen lugar para compartir datos
+ var movimientosFactory = function () {
+ // el array de movimientos y el total lo mantiene la factoría
+ // de esta forma sobrevive a las recargas de controladores
+ var movimientos = [];
+ var total = {
+ ingresos: 0,
+ gastos: 0
+ };
+
+
+ var factory = {};
+ factory.getMovimientos = function () {
+ return movimientos;
+ };
+ factory.getTotal = function () {
+ return total;
+ };
+ factory.postMovimiento = function (movimiento) {
+ movimientos.push(movimiento);
+ total.ingresos += movimiento.esIngreso * movimiento.importe;
+ total.gastos += movimiento.esGasto * movimiento.importe;
+ };
+ // las factorias siempre devuelven objetos
+ // Estos objetos pueden contener funciones de lógica reutilizables
+ return factory;
+ };
+
+ angular.module('controlCajaApp').factory('movimientosFactory', movimientosFactory);
+}());
+
diff --git a/14-rest-in-peace/client/not-found.html b/109-nodejs-y-la-web/4-control-caja/client/not-found.html
similarity index 100%
rename from 14-rest-in-peace/client/not-found.html
rename to 109-nodejs-y-la-web/4-control-caja/client/not-found.html
diff --git a/14-rest-in-peace/client/nuevo.html b/109-nodejs-y-la-web/4-control-caja/client/nuevo.html
similarity index 100%
rename from 14-rest-in-peace/client/nuevo.html
rename to 109-nodejs-y-la-web/4-control-caja/client/nuevo.html
diff --git a/06a-ui-una-ruta-mejor/total.html b/109-nodejs-y-la-web/4-control-caja/client/total.html
similarity index 100%
rename from 06a-ui-una-ruta-mejor/total.html
rename to 109-nodejs-y-la-web/4-control-caja/client/total.html
diff --git a/09-nodejs-y-la-web/4-control-caja/server.js b/109-nodejs-y-la-web/4-control-caja/server.js
similarity index 100%
rename from 09-nodejs-y-la-web/4-control-caja/server.js
rename to 109-nodejs-y-la-web/4-control-caja/server.js
diff --git a/09-nodejs-y-la-web/static/blog.html b/109-nodejs-y-la-web/static/blog.html
similarity index 100%
rename from 09-nodejs-y-la-web/static/blog.html
rename to 109-nodejs-y-la-web/static/blog.html
diff --git a/09-nodejs-y-la-web/static/estilo.css b/109-nodejs-y-la-web/static/estilo.css
similarity index 100%
rename from 09-nodejs-y-la-web/static/estilo.css
rename to 109-nodejs-y-la-web/static/estilo.css
diff --git a/09-nodejs-y-la-web/static/simple.html b/109-nodejs-y-la-web/static/simple.html
similarity index 100%
rename from 09-nodejs-y-la-web/static/simple.html
rename to 109-nodejs-y-la-web/static/simple.html
diff --git a/09-nodejs-y-la-web/web.md b/109-nodejs-y-la-web/web.md
similarity index 100%
rename from 09-nodejs-y-la-web/web.md
rename to 109-nodejs-y-la-web/web.md
diff --git a/10-nodejs-promesas-y-modulos/1-modulos-propios/1-app.js b/110-nodejs-promesas-y-modulos/1-modulos-propios/1-app.js
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/1-modulos-propios/1-app.js
rename to 110-nodejs-promesas-y-modulos/1-modulos-propios/1-app.js
diff --git a/10-nodejs-promesas-y-modulos/1-modulos-propios/cuenta.js b/110-nodejs-promesas-y-modulos/1-modulos-propios/cuenta.js
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/1-modulos-propios/cuenta.js
rename to 110-nodejs-promesas-y-modulos/1-modulos-propios/cuenta.js
diff --git a/10-nodejs-promesas-y-modulos/1-modulos-propios/mates.js b/110-nodejs-promesas-y-modulos/1-modulos-propios/mates.js
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/1-modulos-propios/mates.js
rename to 110-nodejs-promesas-y-modulos/1-modulos-propios/mates.js
diff --git a/10-nodejs-promesas-y-modulos/2-operaciones-lentas/2-1-callback.js b/110-nodejs-promesas-y-modulos/2-operaciones-lentas/2-1-callback.js
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/2-operaciones-lentas/2-1-callback.js
rename to 110-nodejs-promesas-y-modulos/2-operaciones-lentas/2-1-callback.js
diff --git a/10-nodejs-promesas-y-modulos/2-operaciones-lentas/2-2-promesas.js b/110-nodejs-promesas-y-modulos/2-operaciones-lentas/2-2-promesas.js
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/2-operaciones-lentas/2-2-promesas.js
rename to 110-nodejs-promesas-y-modulos/2-operaciones-lentas/2-2-promesas.js
diff --git a/10-nodejs-promesas-y-modulos/2-operaciones-lentas/package.json b/110-nodejs-promesas-y-modulos/2-operaciones-lentas/package.json
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/2-operaciones-lentas/package.json
rename to 110-nodejs-promesas-y-modulos/2-operaciones-lentas/package.json
diff --git a/10-nodejs-promesas-y-modulos/pro.md b/110-nodejs-promesas-y-modulos/pro.md
similarity index 100%
rename from 10-nodejs-promesas-y-modulos/pro.md
rename to 110-nodejs-promesas-y-modulos/pro.md
diff --git a/11-express/1-hola-express.js b/111-express/1-hola-express.js
similarity index 100%
rename from 11-express/1-hola-express.js
rename to 111-express/1-hola-express.js
diff --git a/11-express/2-middleware.js b/111-express/2-middleware.js
similarity index 100%
rename from 11-express/2-middleware.js
rename to 111-express/2-middleware.js
diff --git a/11-express/express.md b/111-express/express.md
similarity index 100%
rename from 11-express/express.md
rename to 111-express/express.md
diff --git a/11-express/package.json b/111-express/package.json
similarity index 100%
rename from 11-express/package.json
rename to 111-express/package.json
diff --git a/11-express/static/simple.html b/111-express/static/simple.html
similarity index 100%
rename from 11-express/static/simple.html
rename to 111-express/static/simple.html
diff --git a/12-rutas-con-express/1-rutas.js b/112-rutas-con-express/1-rutas.js
similarity index 100%
rename from 12-rutas-con-express/1-rutas.js
rename to 112-rutas-con-express/1-rutas.js
diff --git a/12-rutas-con-express/2-parametros/matematicas.js b/112-rutas-con-express/2-parametros/matematicas.js
similarity index 100%
rename from 12-rutas-con-express/2-parametros/matematicas.js
rename to 112-rutas-con-express/2-parametros/matematicas.js
diff --git a/12-rutas-con-express/2-parametros/parametros.js b/112-rutas-con-express/2-parametros/parametros.js
similarity index 100%
rename from 12-rutas-con-express/2-parametros/parametros.js
rename to 112-rutas-con-express/2-parametros/parametros.js
diff --git a/12-rutas-con-express/package.json b/112-rutas-con-express/package.json
similarity index 100%
rename from 12-rutas-con-express/package.json
rename to 112-rutas-con-express/package.json
diff --git a/12-rutas-con-express/rutas.md b/112-rutas-con-express/rutas.md
similarity index 100%
rename from 12-rutas-con-express/rutas.md
rename to 112-rutas-con-express/rutas.md
diff --git a/13-api-restfull-con-express/1-rest-crud.js b/113-api-restfull-con-express/1-rest-crud.js
similarity index 100%
rename from 13-api-restfull-con-express/1-rest-crud.js
rename to 113-api-restfull-con-express/1-rest-crud.js
diff --git a/13-api-restfull-con-express/API-REST.md b/113-api-restfull-con-express/API-REST.md
similarity index 100%
rename from 13-api-restfull-con-express/API-REST.md
rename to 113-api-restfull-con-express/API-REST.md
diff --git a/13-api-restfull-con-express/package.json b/113-api-restfull-con-express/package.json
similarity index 100%
rename from 13-api-restfull-con-express/package.json
rename to 113-api-restfull-con-express/package.json
diff --git a/14-rest-in-peace/client/app.js b/114-rest-in-peace/client/app.js
similarity index 100%
rename from 14-rest-in-peace/client/app.js
rename to 114-rest-in-peace/client/app.js
diff --git a/14-rest-in-peace/client/cajaCtrl.js b/114-rest-in-peace/client/cajaCtrl.js
similarity index 100%
rename from 14-rest-in-peace/client/cajaCtrl.js
rename to 114-rest-in-peace/client/cajaCtrl.js
diff --git a/14-rest-in-peace/client/index.html b/114-rest-in-peace/client/index.html
similarity index 100%
rename from 14-rest-in-peace/client/index.html
rename to 114-rest-in-peace/client/index.html
diff --git a/15-rest-assured/client/lista.html b/114-rest-in-peace/client/lista.html
similarity index 100%
rename from 15-rest-assured/client/lista.html
rename to 114-rest-in-peace/client/lista.html
diff --git a/15-rest-assured/client/menuCtrl.js b/114-rest-in-peace/client/menuCtrl.js
similarity index 100%
rename from 15-rest-assured/client/menuCtrl.js
rename to 114-rest-in-peace/client/menuCtrl.js
diff --git a/14-rest-in-peace/client/movimientosFactory.js b/114-rest-in-peace/client/movimientosFactory.js
similarity index 100%
rename from 14-rest-in-peace/client/movimientosFactory.js
rename to 114-rest-in-peace/client/movimientosFactory.js
diff --git a/15-rest-assured/client/not-found.html b/114-rest-in-peace/client/not-found.html
similarity index 100%
rename from 15-rest-assured/client/not-found.html
rename to 114-rest-in-peace/client/not-found.html
diff --git a/15-rest-assured/client/nuevo.html b/114-rest-in-peace/client/nuevo.html
similarity index 100%
rename from 15-rest-assured/client/nuevo.html
rename to 114-rest-in-peace/client/nuevo.html
diff --git a/14-rest-in-peace/client/total.html b/114-rest-in-peace/client/total.html
similarity index 100%
rename from 14-rest-in-peace/client/total.html
rename to 114-rest-in-peace/client/total.html
diff --git a/14-rest-in-peace/package.json b/114-rest-in-peace/package.json
similarity index 100%
rename from 14-rest-in-peace/package.json
rename to 114-rest-in-peace/package.json
diff --git a/14-rest-in-peace/server.js b/114-rest-in-peace/server.js
similarity index 100%
rename from 14-rest-in-peace/server.js
rename to 114-rest-in-peace/server.js
diff --git a/15-rest-assured/client/app.js b/115-rest-assured/client/app.js
similarity index 100%
rename from 15-rest-assured/client/app.js
rename to 115-rest-assured/client/app.js
diff --git a/15-rest-assured/client/appSecurity.js b/115-rest-assured/client/appSecurity.js
similarity index 100%
rename from 15-rest-assured/client/appSecurity.js
rename to 115-rest-assured/client/appSecurity.js
diff --git a/15-rest-assured/client/cajaCtrl.js b/115-rest-assured/client/cajaCtrl.js
similarity index 100%
rename from 15-rest-assured/client/cajaCtrl.js
rename to 115-rest-assured/client/cajaCtrl.js
diff --git a/15-rest-assured/client/index.html b/115-rest-assured/client/index.html
similarity index 100%
rename from 15-rest-assured/client/index.html
rename to 115-rest-assured/client/index.html
diff --git a/16-rest-sources/client/lista.html b/115-rest-assured/client/lista.html
similarity index 100%
rename from 16-rest-sources/client/lista.html
rename to 115-rest-assured/client/lista.html
diff --git a/15-rest-assured/client/maestrosFactory.js b/115-rest-assured/client/maestrosFactory.js
similarity index 100%
rename from 15-rest-assured/client/maestrosFactory.js
rename to 115-rest-assured/client/maestrosFactory.js
diff --git a/16-rest-sources/client/menuCtrl.js b/115-rest-assured/client/menuCtrl.js
similarity index 100%
rename from 16-rest-sources/client/menuCtrl.js
rename to 115-rest-assured/client/menuCtrl.js
diff --git a/15-rest-assured/client/movimientosFactory.js b/115-rest-assured/client/movimientosFactory.js
similarity index 100%
rename from 15-rest-assured/client/movimientosFactory.js
rename to 115-rest-assured/client/movimientosFactory.js
diff --git a/16-rest-sources/client/not-found.html b/115-rest-assured/client/not-found.html
similarity index 100%
rename from 16-rest-sources/client/not-found.html
rename to 115-rest-assured/client/not-found.html
diff --git a/16-rest-sources/client/nuevo.html b/115-rest-assured/client/nuevo.html
similarity index 100%
rename from 16-rest-sources/client/nuevo.html
rename to 115-rest-assured/client/nuevo.html
diff --git a/15-rest-assured/client/registro.html b/115-rest-assured/client/registro.html
similarity index 100%
rename from 15-rest-assured/client/registro.html
rename to 115-rest-assured/client/registro.html
diff --git a/15-rest-assured/client/registroCtrl.js b/115-rest-assured/client/registroCtrl.js
similarity index 100%
rename from 15-rest-assured/client/registroCtrl.js
rename to 115-rest-assured/client/registroCtrl.js
diff --git a/15-rest-assured/client/total.html b/115-rest-assured/client/total.html
similarity index 100%
rename from 15-rest-assured/client/total.html
rename to 115-rest-assured/client/total.html
diff --git a/15-rest-assured/package.json b/115-rest-assured/package.json
similarity index 100%
rename from 15-rest-assured/package.json
rename to 115-rest-assured/package.json
diff --git a/15-rest-assured/server.js b/115-rest-assured/server.js
similarity index 100%
rename from 15-rest-assured/server.js
rename to 115-rest-assured/server.js
diff --git a/16-rest-sources/client/app.js b/116-rest-sources/client/app.js
similarity index 100%
rename from 16-rest-sources/client/app.js
rename to 116-rest-sources/client/app.js
diff --git a/16-rest-sources/client/appSecurity.js b/116-rest-sources/client/appSecurity.js
similarity index 100%
rename from 16-rest-sources/client/appSecurity.js
rename to 116-rest-sources/client/appSecurity.js
diff --git a/16-rest-sources/client/cajaCtrl.js b/116-rest-sources/client/cajaCtrl.js
similarity index 100%
rename from 16-rest-sources/client/cajaCtrl.js
rename to 116-rest-sources/client/cajaCtrl.js
diff --git a/16-rest-sources/client/index.html b/116-rest-sources/client/index.html
similarity index 100%
rename from 16-rest-sources/client/index.html
rename to 116-rest-sources/client/index.html
diff --git a/09-nodejs-y-la-web/4-control-caja/client/lista.html b/116-rest-sources/client/lista.html
similarity index 97%
rename from 09-nodejs-y-la-web/4-control-caja/client/lista.html
rename to 116-rest-sources/client/lista.html
index c5bb9ed..4380998 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/lista.html
+++ b/116-rest-sources/client/lista.html
@@ -1,26 +1,26 @@
-
\ No newline at end of file
+
diff --git a/16-rest-sources/client/maestrosFactory.js b/116-rest-sources/client/maestrosFactory.js
similarity index 100%
rename from 16-rest-sources/client/maestrosFactory.js
rename to 116-rest-sources/client/maestrosFactory.js
diff --git a/17-rest-advance/client/menuCtrl.js b/116-rest-sources/client/menuCtrl.js
similarity index 100%
rename from 17-rest-advance/client/menuCtrl.js
rename to 116-rest-sources/client/menuCtrl.js
diff --git a/16-rest-sources/client/movimientosFactory.js b/116-rest-sources/client/movimientosFactory.js
similarity index 100%
rename from 16-rest-sources/client/movimientosFactory.js
rename to 116-rest-sources/client/movimientosFactory.js
diff --git a/17-rest-advance/client/not-found.html b/116-rest-sources/client/not-found.html
similarity index 100%
rename from 17-rest-advance/client/not-found.html
rename to 116-rest-sources/client/not-found.html
diff --git a/17-rest-advance/client/nuevo.html b/116-rest-sources/client/nuevo.html
similarity index 100%
rename from 17-rest-advance/client/nuevo.html
rename to 116-rest-sources/client/nuevo.html
diff --git a/16-rest-sources/client/registro.html b/116-rest-sources/client/registro.html
similarity index 100%
rename from 16-rest-sources/client/registro.html
rename to 116-rest-sources/client/registro.html
diff --git a/16-rest-sources/client/registroCtrl.js b/116-rest-sources/client/registroCtrl.js
similarity index 100%
rename from 16-rest-sources/client/registroCtrl.js
rename to 116-rest-sources/client/registroCtrl.js
diff --git a/16-rest-sources/client/total.html b/116-rest-sources/client/total.html
similarity index 100%
rename from 16-rest-sources/client/total.html
rename to 116-rest-sources/client/total.html
diff --git a/16-rest-sources/package.json b/116-rest-sources/package.json
similarity index 100%
rename from 16-rest-sources/package.json
rename to 116-rest-sources/package.json
diff --git a/16-rest-sources/server.js b/116-rest-sources/server.js
similarity index 100%
rename from 16-rest-sources/server.js
rename to 116-rest-sources/server.js
diff --git a/17-rest-advance/client/app.js b/117-rest-advance/client/app.js
similarity index 100%
rename from 17-rest-advance/client/app.js
rename to 117-rest-advance/client/app.js
diff --git a/17-rest-advance/client/appHttpLog.js b/117-rest-advance/client/appHttpLog.js
similarity index 100%
rename from 17-rest-advance/client/appHttpLog.js
rename to 117-rest-advance/client/appHttpLog.js
diff --git a/17-rest-advance/client/appSecurity.js b/117-rest-advance/client/appSecurity.js
similarity index 100%
rename from 17-rest-advance/client/appSecurity.js
rename to 117-rest-advance/client/appSecurity.js
diff --git a/17-rest-advance/client/cajaCtrl.js b/117-rest-advance/client/cajaCtrl.js
similarity index 100%
rename from 17-rest-advance/client/cajaCtrl.js
rename to 117-rest-advance/client/cajaCtrl.js
diff --git a/17-rest-advance/client/index.html b/117-rest-advance/client/index.html
similarity index 100%
rename from 17-rest-advance/client/index.html
rename to 117-rest-advance/client/index.html
diff --git a/17-rest-advance/client/lista.html b/117-rest-advance/client/lista.html
similarity index 100%
rename from 17-rest-advance/client/lista.html
rename to 117-rest-advance/client/lista.html
diff --git a/17-rest-advance/client/maestrosFactory.js b/117-rest-advance/client/maestrosFactory.js
similarity index 100%
rename from 17-rest-advance/client/maestrosFactory.js
rename to 117-rest-advance/client/maestrosFactory.js
diff --git a/18-servicios/client/menuCtrl.js b/117-rest-advance/client/menuCtrl.js
similarity index 100%
rename from 18-servicios/client/menuCtrl.js
rename to 117-rest-advance/client/menuCtrl.js
diff --git a/17-rest-advance/client/movimiento.html b/117-rest-advance/client/movimiento.html
similarity index 100%
rename from 17-rest-advance/client/movimiento.html
rename to 117-rest-advance/client/movimiento.html
diff --git a/17-rest-advance/client/movimientoCtrl.js b/117-rest-advance/client/movimientoCtrl.js
similarity index 100%
rename from 17-rest-advance/client/movimientoCtrl.js
rename to 117-rest-advance/client/movimientoCtrl.js
diff --git a/17-rest-advance/client/movimientosFactory.js b/117-rest-advance/client/movimientosFactory.js
similarity index 100%
rename from 17-rest-advance/client/movimientosFactory.js
rename to 117-rest-advance/client/movimientosFactory.js
diff --git a/18-servicios/client/not-found.html b/117-rest-advance/client/not-found.html
similarity index 100%
rename from 18-servicios/client/not-found.html
rename to 117-rest-advance/client/not-found.html
diff --git a/18-servicios/client/nuevo.html b/117-rest-advance/client/nuevo.html
similarity index 100%
rename from 18-servicios/client/nuevo.html
rename to 117-rest-advance/client/nuevo.html
diff --git a/17-rest-advance/client/registro.html b/117-rest-advance/client/registro.html
similarity index 100%
rename from 17-rest-advance/client/registro.html
rename to 117-rest-advance/client/registro.html
diff --git a/17-rest-advance/client/registroCtrl.js b/117-rest-advance/client/registroCtrl.js
similarity index 100%
rename from 17-rest-advance/client/registroCtrl.js
rename to 117-rest-advance/client/registroCtrl.js
diff --git a/17-rest-advance/client/total.html b/117-rest-advance/client/total.html
similarity index 100%
rename from 17-rest-advance/client/total.html
rename to 117-rest-advance/client/total.html
diff --git a/17-rest-advance/package.json b/117-rest-advance/package.json
similarity index 100%
rename from 17-rest-advance/package.json
rename to 117-rest-advance/package.json
diff --git a/17-rest-advance/server.js b/117-rest-advance/server.js
similarity index 100%
rename from 17-rest-advance/server.js
rename to 117-rest-advance/server.js
diff --git a/18-servicios/client/app.js b/118-servicios/client/app.js
similarity index 100%
rename from 18-servicios/client/app.js
rename to 118-servicios/client/app.js
diff --git a/18-servicios/client/appHttpLog.js b/118-servicios/client/appHttpLog.js
similarity index 100%
rename from 18-servicios/client/appHttpLog.js
rename to 118-servicios/client/appHttpLog.js
diff --git a/18-servicios/client/appSecurity.js b/118-servicios/client/appSecurity.js
similarity index 100%
rename from 18-servicios/client/appSecurity.js
rename to 118-servicios/client/appSecurity.js
diff --git a/18-servicios/client/cajaCtrl.js b/118-servicios/client/cajaCtrl.js
similarity index 100%
rename from 18-servicios/client/cajaCtrl.js
rename to 118-servicios/client/cajaCtrl.js
diff --git a/18-servicios/client/index.html b/118-servicios/client/index.html
similarity index 100%
rename from 18-servicios/client/index.html
rename to 118-servicios/client/index.html
diff --git a/18-servicios/client/lista.html b/118-servicios/client/lista.html
similarity index 100%
rename from 18-servicios/client/lista.html
rename to 118-servicios/client/lista.html
diff --git a/18-servicios/client/maestrosFactory.js b/118-servicios/client/maestrosFactory.js
similarity index 100%
rename from 18-servicios/client/maestrosFactory.js
rename to 118-servicios/client/maestrosFactory.js
diff --git a/19-angular-con-filtro/client/menuCtrl.js b/118-servicios/client/menuCtrl.js
similarity index 100%
rename from 19-angular-con-filtro/client/menuCtrl.js
rename to 118-servicios/client/menuCtrl.js
diff --git a/18-servicios/client/movimiento.html b/118-servicios/client/movimiento.html
similarity index 100%
rename from 18-servicios/client/movimiento.html
rename to 118-servicios/client/movimiento.html
diff --git a/18-servicios/client/movimientoCtrl.js b/118-servicios/client/movimientoCtrl.js
similarity index 100%
rename from 18-servicios/client/movimientoCtrl.js
rename to 118-servicios/client/movimientoCtrl.js
diff --git a/18-servicios/client/movimientosFactory.js b/118-servicios/client/movimientosFactory.js
similarity index 100%
rename from 18-servicios/client/movimientosFactory.js
rename to 118-servicios/client/movimientosFactory.js
diff --git a/19-angular-con-filtro/client/not-found.html b/118-servicios/client/not-found.html
similarity index 100%
rename from 19-angular-con-filtro/client/not-found.html
rename to 118-servicios/client/not-found.html
diff --git a/09-nodejs-y-la-web/4-control-caja/client/nuevo.html b/118-servicios/client/nuevo.html
similarity index 98%
rename from 09-nodejs-y-la-web/4-control-caja/client/nuevo.html
rename to 118-servicios/client/nuevo.html
index 17bd239..4dd8ad9 100644
--- a/09-nodejs-y-la-web/4-control-caja/client/nuevo.html
+++ b/118-servicios/client/nuevo.html
@@ -1,53 +1,53 @@
-
-
- {{caja.movimientos}}
-
\ No newline at end of file
+
+
+ {{caja.movimientos}}
+
diff --git a/18-servicios/client/registro.html b/118-servicios/client/registro.html
similarity index 100%
rename from 18-servicios/client/registro.html
rename to 118-servicios/client/registro.html
diff --git a/18-servicios/client/registroCtrl.js b/118-servicios/client/registroCtrl.js
similarity index 100%
rename from 18-servicios/client/registroCtrl.js
rename to 118-servicios/client/registroCtrl.js
diff --git a/18-servicios/client/total.html b/118-servicios/client/total.html
similarity index 100%
rename from 18-servicios/client/total.html
rename to 118-servicios/client/total.html
diff --git a/18-servicios/package.json b/118-servicios/package.json
similarity index 100%
rename from 18-servicios/package.json
rename to 118-servicios/package.json
diff --git a/18-servicios/server.js b/118-servicios/server.js
similarity index 100%
rename from 18-servicios/server.js
rename to 118-servicios/server.js
diff --git a/19-angular-con-filtro/client/app.js b/19-angular-con-filtro/client/app.js
deleted file mode 100644
index d43daf8..0000000
--- a/19-angular-con-filtro/client/app.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Incluimos referencia a un módulo propio, con un prefijo propio
-angular.module('controlCajaApp', ['ui.router','ngCookies', 'ngResource', 'abFiltros']);
-
-angular.module('controlCajaApp').config(function ($stateProvider,$locationProvider) {
- $stateProvider
- .state('total', {
- url: '/',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- })
- .state('nuevo', {
- url: '/nuevo',
- controller: 'CajaCtrl as caja',
- templateUrl: 'nuevo.html'
- })
- .state('lista', {
- url: '/lista',
- controller: 'CajaCtrl as caja',
- templateUrl: 'lista.html'
- })
- .state('movimiento', {
- url: '/movimiento/:id', // declaracion de parametros en rutas
- controller: 'MovimientoCtrl as vm',
- templateUrl: 'movimiento.html'
- })
- .state('registro', {
- url: '/registro',
- controller: 'RegistroCtrl as registro',
- templateUrl: 'registro.html'
- })
- .state('not-found', {
- url: '*path',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- });
-});
diff --git a/19-angular-con-filtro/client/appHttpLog.js b/19-angular-con-filtro/client/appHttpLog.js
deleted file mode 100644
index ec065c4..0000000
--- a/19-angular-con-filtro/client/appHttpLog.js
+++ /dev/null
@@ -1,23 +0,0 @@
-(function () {
-
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraLog);
- }
-
- // Esta función se especializa en escribir en la consola
- // información sobre llamadas http
- function funcionInterceptoraLog($log) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- $log.info('request:' + request.url);
- return request ;
- };
- interceptor.responseError = function (response) {
- $log.error("excepción: " + response.status + " de :" + response.config.url);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/19-angular-con-filtro/client/appSecurity.js b/19-angular-con-filtro/client/appSecurity.js
deleted file mode 100644
index 5948427..0000000
--- a/19-angular-con-filtro/client/appSecurity.js
+++ /dev/null
@@ -1,29 +0,0 @@
-(function () {
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraSeguridad);
- }
-
- function funcionInterceptoraSeguridad($q, $injector, $cookieStore, $rootScope) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- request.headers["sessionId"] = $cookieStore.get("sessionId");
- return request || $q.when(request);
- };
- interceptor.responseError = function (response) {
- var state = $injector.get('$state');
- if (response.status === 401) {
- $rootScope.mensaje = "No hay derecho!!!";
- state.go('registro');
- } else if (response.status === 419) {
- $rootScope.mensaje = "Estoy caduco!!!";
- $cookieStore.remove("sessionId")
- state.go('registro');
- };
- return $q.reject(response);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/19-angular-con-filtro/client/cajaCtrl.js b/19-angular-con-filtro/client/cajaCtrl.js
deleted file mode 100644
index 7093eee..0000000
--- a/19-angular-con-filtro/client/cajaCtrl.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function () {
- var cajaCtrl = function (maestrosFactory, movimientosFactory) {
- var vm = this;
-
- vm.titulo = "Controla tu Cash Flow";
-
- vm.maestros = maestrosFactory.get();
-
- vm.nuevoMovimiento = new movimientosFactory.movimientos();
- vm.nuevoMovimiento.esIngreso =1;
- vm.nuevoMovimiento.fecha = new Date();
-
- vm.movimientos = movimientosFactory.movimientos.query();
-
- vm.total = movimientosFactory.total.get();
-
- vm.guardarMovimiento = function () {
- vm.nuevoMovimiento.tipo = vm.tipo(vm.nuevoMovimiento);
- vm.nuevoMovimiento.$save()
- .then(function(postedData){
- vm.movimientos = movimientosFactory.movimientos.query();
- vm.total = movimientosFactory.total.get();
- vm.nuevoMovimiento.importe = 0;
- });
- }
- vm.balance = function () {
- return vm.total.ingresos - vm.total.gastos
- }
- vm.tipo = function (movimiento) {
- return movimiento.esIngreso && 'Ingreso' || 'Gasto'
- }
- }
- angular.module('controlCajaApp').controller('CajaCtrl', cajaCtrl);
-}());
diff --git a/19-angular-con-filtro/client/index.html b/19-angular-con-filtro/client/index.html
deleted file mode 100644
index 5aec25c..0000000
--- a/19-angular-con-filtro/client/index.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
Control de Caja
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/19-angular-con-filtro/client/lista.html b/19-angular-con-filtro/client/lista.html
deleted file mode 100644
index 15bbb3f..0000000
--- a/19-angular-con-filtro/client/lista.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
diff --git a/19-angular-con-filtro/client/maestrosFactory.js b/19-angular-con-filtro/client/maestrosFactory.js
deleted file mode 100644
index 9a9b37d..0000000
--- a/19-angular-con-filtro/client/maestrosFactory.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function () {
- var maestrosFactory = function ($resource) {
- // Los resursos son totalmente configurables
- // Una de sus utilidades de 'fábrica' de una caché simple pero potente
- return $resource("/api/pub/maestros/",{},{get: {cache: true}});
- };
-
- angular.module('controlCajaApp').factory('maestrosFactory', maestrosFactory);
-}());
diff --git a/19-angular-con-filtro/client/movimiento.html b/19-angular-con-filtro/client/movimiento.html
deleted file mode 100644
index 05baa0c..0000000
--- a/19-angular-con-filtro/client/movimiento.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
diff --git a/19-angular-con-filtro/client/movimientoCtrl.js b/19-angular-con-filtro/client/movimientoCtrl.js
deleted file mode 100644
index 2feb935..0000000
--- a/19-angular-con-filtro/client/movimientoCtrl.js
+++ /dev/null
@@ -1,10 +0,0 @@
-(function () {
- // $stateParams es el servicio de ui-router para acceder a los parámetros de la ruta
- var movimientoCtrl = function ($stateParams, movimientosFactory) {
- var vm = this;
- // El acceso es por nombre de parámetro
- var movId = $stateParams.id;
- vm.movimiento = movimientosFactory.movimientos.get({id:movId});
- }
- angular.module('controlCajaApp').controller('MovimientoCtrl', movimientoCtrl);
-}());
diff --git a/19-angular-con-filtro/client/movimientosFactory.js b/19-angular-con-filtro/client/movimientosFactory.js
deleted file mode 100644
index 26a5053..0000000
--- a/19-angular-con-filtro/client/movimientosFactory.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function () {
-
- var movimientosFactory = function ($resource) {
-
- var factory = {};
-
- // $resource("/api/priv/movimientos/");
- // El uso de parametros en los recursos debe especificarse
- // Indicando el nombre local y el remoto
- // En la url va el nombre remoto
- // En el objeto se repute ese nombre como clave y se dice que propiedad será la que lo lleve
- // La propiedad empieza por @
- factory.movimientos = $resource("/api/priv/movimientos/:id", {
- id: "@id"
- })
-
-
-
- factory.total = $resource("/api/priv/total/");
-
- return factory;
- };
-
- angular.module('controlCajaApp').factory('movimientosFactory', movimientosFactory);
-}());
diff --git a/19-angular-con-filtro/client/nuevo.html b/19-angular-con-filtro/client/nuevo.html
deleted file mode 100644
index b970d92..0000000
--- a/19-angular-con-filtro/client/nuevo.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
diff --git a/19-angular-con-filtro/client/registro.html b/19-angular-con-filtro/client/registro.html
deleted file mode 100644
index 6d32793..0000000
--- a/19-angular-con-filtro/client/registro.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/19-angular-con-filtro/client/registroCtrl.js b/19-angular-con-filtro/client/registroCtrl.js
deleted file mode 100644
index 7344f28..0000000
--- a/19-angular-con-filtro/client/registroCtrl.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function () {
- var registroCtrl = function ($rootScope, $state, $http, $cookieStore) {
- var urlBase = "http://localhost:3000/api/";
- var vm = this;
- vm.usuario = {};
- vm.entrar = function () {
- $http.post(urlBase + 'sesiones/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién entrado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- vm.registrar = function () {
- $http.post(urlBase + 'usuarios/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién creado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- }
- angular.module('controlCajaApp').controller('RegistroCtrl', registroCtrl);
-}());
diff --git a/19-angular-con-filtro/package.json b/19-angular-con-filtro/package.json
deleted file mode 100644
index 6028a5d..0000000
--- a/19-angular-con-filtro/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "ControlCashFlow",
- "version": "0.0.0",
- "description": "Controla tu flujo de caja",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "Alberto Basalo",
- "license": "BSD-2-Clause",
- "dependencies": {
- "express": "~4.12.1",
- "body-parser": "~1.0.2"
- }
-}
diff --git a/19-angular-con-filtro/server.js b/19-angular-con-filtro/server.js
deleted file mode 100644
index 8d3fc97..0000000
--- a/19-angular-con-filtro/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-var express = require('express');
-var bodyParser = require('body-parser');
-
-var app = express();
-app.use(bodyParser());
-app.use(express.static(__dirname + '/client'));
-
-app.use(function (peticion, respuesta, siguiente) {
- console.log("recibida petición: " + peticion.url);
- if (peticion.body && Object.keys(peticion.body).length>0) {
- console.log("body: " + JSON.stringify(peticion.body));
- }
- siguiente();
- });
-
-console.log('ready');
-
-var maxId = 0;
-var movimientos = [];
-var totales = [];
-
-var usuarios = [];
-var sesiones = [];
-
-
-app.use('/api/priv/', function (req, res, next) {
- var sessionId = req.get('sessionId');
- var sesion = getSesion(sessionId);
- if (sesion) {
- if (esSesionValida(sesion)) {
- sesion.timeStamp = new Date();
- req.usuario = sesion.email;
- next();
- } else {
- console.log('Sesión caducada:' + JSON.stringify(sesion));
- res.status(419).send('Sesión caducada');
- }
- } else {
- res.status(401).send('Credencial inválida');
- }
-
-});
-
-
-
-
-
-// API - REST
-// SECURITY
-app.route('/api/usuarios')
- .get(function (req, res, next) {
- // Esto devuelve la lista completa de usuarios y contraseñas
- // PELIGRO: Usar sólo a modo de debug mientras desarrollamos
- res.json(usuarios);
- })
- .post(function (req, res, next) {
- var usuario = req.body;
- if (existeUsuario(usuario)) {
- console.log('email ya registrado:' + usuario.email);
- res.status(409).send('email ' + usuario.email + ' ya registrado');
- } else {
- console.log('registrado:' + usuario.email);
- usuarios.push(usuario);
- res.json(newSession(usuario.email));
- }
- });
-
-// Gestión de sesiones: listado y login
-app.route('/api/sesiones')
- .get(function (req, res, next) {
- // Esto devuelve la lista completa de sesiones
- // PELIGRO: Usar sólo a modo de debug mientras desarrollamos
- res.json(sesiones);
- })
- .post(function (req, res, next) {
- var usuario = req.body;
- if (esUsuarioValido(usuario)) {
- console.log('aceptado:' + usuario.email);
- res.json(newSession(usuario.email));
- } else {
- console.log('Credencial inválida:' + usuario.email);
- res.status(401).send('Credencial inválida');
- }
- });
-
-function existeUsuario(usuario) {
- return usuarios.some(function (u) {
- return u.email == usuario.email;
- });
-}
-
-function esUsuarioValido(usuario) {
- return usuarios.filter(function (u) {
- return u.email == usuario.email && u.password == usuario.password;
- })[0];
-}
-
-function getSesion(sessionId) {
- return sesiones.filter(function (s) {
- return s.sessionId == sessionId;
- })[0]
-}
-
-function esSesionValida(sesion) {
- return (new Date() - sesion.timeStamp) < 20 * 60 * 1000;
-}
-
-function newSession(email) {
- var sessionId = Math.random() * (88888) + 11111;
- var timeStamp = new Date();
- sesiones.push({
- sessionId: sessionId,
- email: email,
- timeStamp: timeStamp
- });
- return sessionId;
-}
-
-
-// BUSINESS
-app.get('/api/pub/maestros', function (req, res, next) {
- var maestros = {
- categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
- categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
- };
- res.json(maestros);
-});
-
-app.route('/api/priv/movimientos')
- .get(function (req, res, next) {
- var movimientosUsuario = movimientos.filter(function (m) {
- return m.usuario = req.usuario;
- });
- res.json(movimientosUsuario);
- })
- .post(function (req, res, next) {
- var movimiento = req.body;
- movimiento.usuario = req.usuario;
- maxId++;
- movimiento.id = maxId;
- movimientos.push(movimiento);
- var totalUsuario = getTotalUsuario(req.usuario);
- if (movimiento.tipo == 'Ingreso')
- totalUsuario.ingresos += movimiento.importe;
- else
- totalUsuario.gastos += movimiento.importe;
- res.status(200).send();
- });
-
-app.get('/api/priv/movimientos/:id', function (req, res, next) {
- var movId = req.params.id;
- movimientoBuscado = getMovimientoById(movId, req.usuario);
- res.json(movimientoBuscado);
-});
-
-function getMovimientoById(id,usuario) {
- var movimientoBuscado = movimientos.filter(function (movimiento) {
- return movimiento.id == id && movimiento.usuario == usuario;
- })[0];
- return movimientoBuscado;
-}
-
-app.get('/api/priv/total', function (req, res, next) {
- var totalUsuario = getTotalUsuario(req.usuario);
- res.json(totalUsuario);
-});
-
-function getTotalUsuario(usuario) {
- if(usuario===undefined) return {};
- var totalUsuario = totales.filter(function (t) {
- return t.usuario == usuario;
- })[0];
- if (totalUsuario===undefined) {
- totalUsuario = {
- usuario : usuario,
- ingresos: 0,
- gastos: 0
- };
- totales.push(totalUsuario);
- }
- return totalUsuario;
-}
-
-
-console.log('steady');
-app.listen(3000);
-console.log('go');
diff --git a/20-directivas/client/app.js b/20-directivas/client/app.js
deleted file mode 100644
index 47500cb..0000000
--- a/20-directivas/client/app.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Incluimos referencia al módulo de directivas
-angular.module('controlCajaApp', ['ui.router','ngCookies', 'ngResource', 'abFiltros','abDirectivas']);
-
-angular.module('controlCajaApp').config(function ($stateProvider,$locationProvider) {
- $stateProvider
- .state('total', {
- url: '/',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- })
- .state('nuevo', {
- url: '/nuevo',
- controller: 'CajaCtrl as caja',
- templateUrl: 'nuevo.html'
- })
- .state('lista', {
- url: '/lista',
- controller: 'CajaCtrl as caja',
- templateUrl: 'lista.html'
- })
- .state('movimiento', {
- url: '/movimiento/:id', // declaracion de parametros en rutas
- controller: 'MovimientoCtrl as vm',
- templateUrl: 'movimiento.html'
- })
- .state('registro', {
- url: '/registro',
- controller: 'RegistroCtrl as registro',
- templateUrl: 'registro.html'
- })
- .state('not-found', {
- url: '*path',
- controller: 'CajaCtrl as caja',
- templateUrl: 'total.html'
- });
-});
diff --git a/20-directivas/client/appHttpLog.js b/20-directivas/client/appHttpLog.js
deleted file mode 100644
index ec065c4..0000000
--- a/20-directivas/client/appHttpLog.js
+++ /dev/null
@@ -1,23 +0,0 @@
-(function () {
-
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraLog);
- }
-
- // Esta función se especializa en escribir en la consola
- // información sobre llamadas http
- function funcionInterceptoraLog($log) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- $log.info('request:' + request.url);
- return request ;
- };
- interceptor.responseError = function (response) {
- $log.error("excepción: " + response.status + " de :" + response.config.url);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/20-directivas/client/appSecurity.js b/20-directivas/client/appSecurity.js
deleted file mode 100644
index 5948427..0000000
--- a/20-directivas/client/appSecurity.js
+++ /dev/null
@@ -1,29 +0,0 @@
-(function () {
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraSeguridad);
- }
-
- function funcionInterceptoraSeguridad($q, $injector, $cookieStore, $rootScope) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- request.headers["sessionId"] = $cookieStore.get("sessionId");
- return request || $q.when(request);
- };
- interceptor.responseError = function (response) {
- var state = $injector.get('$state');
- if (response.status === 401) {
- $rootScope.mensaje = "No hay derecho!!!";
- state.go('registro');
- } else if (response.status === 419) {
- $rootScope.mensaje = "Estoy caduco!!!";
- $cookieStore.remove("sessionId")
- state.go('registro');
- };
- return $q.reject(response);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/20-directivas/client/cajaCtrl.js b/20-directivas/client/cajaCtrl.js
deleted file mode 100644
index 7093eee..0000000
--- a/20-directivas/client/cajaCtrl.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function () {
- var cajaCtrl = function (maestrosFactory, movimientosFactory) {
- var vm = this;
-
- vm.titulo = "Controla tu Cash Flow";
-
- vm.maestros = maestrosFactory.get();
-
- vm.nuevoMovimiento = new movimientosFactory.movimientos();
- vm.nuevoMovimiento.esIngreso =1;
- vm.nuevoMovimiento.fecha = new Date();
-
- vm.movimientos = movimientosFactory.movimientos.query();
-
- vm.total = movimientosFactory.total.get();
-
- vm.guardarMovimiento = function () {
- vm.nuevoMovimiento.tipo = vm.tipo(vm.nuevoMovimiento);
- vm.nuevoMovimiento.$save()
- .then(function(postedData){
- vm.movimientos = movimientosFactory.movimientos.query();
- vm.total = movimientosFactory.total.get();
- vm.nuevoMovimiento.importe = 0;
- });
- }
- vm.balance = function () {
- return vm.total.ingresos - vm.total.gastos
- }
- vm.tipo = function (movimiento) {
- return movimiento.esIngreso && 'Ingreso' || 'Gasto'
- }
- }
- angular.module('controlCajaApp').controller('CajaCtrl', cajaCtrl);
-}());
diff --git a/20-directivas/client/directivas.js b/20-directivas/client/directivas.js
deleted file mode 100644
index 1f59981..0000000
--- a/20-directivas/client/directivas.js
+++ /dev/null
@@ -1,89 +0,0 @@
-(function () {
- // El uso más simple es crear directivas para usar como código reutilizable
- function piePagina() {
- return {
- restrict: 'AE',
- replace: 'true',
- template: '
'
- };
- };
-
- // Dos mejoras, sacar el html a un fichero externo (tpl-directiva)
- // Usar Transclude para reutilizar el contenido del usuario y hacer la vista más dinámica
- function cabecera() {
- return {
- restrict: 'EA',
- replace: 'true',
- transclude: true,
- templateUrl: '/tpl-cabecera.html'
- };
- };
-
- // En este caso el cambio más siginificatico es el scope
- // Funciona como un API para la directiva y recibe la info vía atributos
- // Por otro lado en este caso hemos tenido que restringir el uso de la directiva
- // Los elementos tr dentro de un table requieren definirse explícitamente
- function filaMovimiento() {
- return {
- restrict: 'A',
- templateUrl: '/tpl-fila-movimiento.html',
- scope: {
- movimientoplantilla: "=movimientodirectiva"
- }
- };
- }
-
- // Otro uso de las directivas es extender la funionalidad del DOM sin importar los datos
- // Este es el lugar donde manipular el DOM y jamás en los controladores
- function seleccionado() {
- return {
- link: function ($scope, element, attrs) {
- element.bind('mouseenter', function () {
- element.css('background-color', 'lightyellow');
- });
- element.bind('mouseleave', function () {
- element.css('background-color', 'white');
- });
- }
- };
- }
-
- // Ejemplo no funcional de cómo extender un plugin hecho a medida
- function plugin() {
- return {
- link: function (scope, element, attrs) {
-
- // Obtención de parámetros vía atributos
- var init = scope.$eval(attrs.ngModel);
- var min = scope.$eval(attrs.abSliderMin);
- var max = scope.$eval(attrs.abSliderMax);
- // Configuración básica
- $(element).plugin({
- value: init,
- min: min,
- max: max,
- tooltip: 'hide'
- });
-
- // Actualizar la vista cuando cambia el modelo
- scope.$watch(attrs.ngModel, function (valor) {
- $(element).plugin('setValue', valor);
- });
-
- // Actualizar el modelo cuando cambia la vista
- $(element).plugin().on('slide', function (evento) {
- scope.$apply(function () {
- scope[attrs.ngModel] = evento.value;
- });
- });
- }
- }
- }
-
- angular.module('abDirectivas', [])
- .directive('abPiePagina', piePagina)
- .directive('abCabecera', cabecera)
- .directive('abFilaMovimiento', filaMovimiento)
- .directive('abSeleccionado', seleccionado)
- .directive('abPlugin', plugin);
-}());
diff --git a/20-directivas/client/lista.html b/20-directivas/client/lista.html
deleted file mode 100644
index a030493..0000000
--- a/20-directivas/client/lista.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
diff --git a/20-directivas/client/maestrosFactory.js b/20-directivas/client/maestrosFactory.js
deleted file mode 100644
index 9a9b37d..0000000
--- a/20-directivas/client/maestrosFactory.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function () {
- var maestrosFactory = function ($resource) {
- // Los resursos son totalmente configurables
- // Una de sus utilidades de 'fábrica' de una caché simple pero potente
- return $resource("/api/pub/maestros/",{},{get: {cache: true}});
- };
-
- angular.module('controlCajaApp').factory('maestrosFactory', maestrosFactory);
-}());
diff --git a/20-directivas/client/menuCtrl.js b/20-directivas/client/menuCtrl.js
deleted file mode 100644
index 14ddc17..0000000
--- a/20-directivas/client/menuCtrl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function () {
- var menuCtrl = function ($state) {
- this.isActive = function (estado) {
- return $state.is(estado);
- }
- }
- angular.module('controlCajaApp').controller('MenuCtrl',menuCtrl);
-}());
diff --git a/20-directivas/client/movimiento.html b/20-directivas/client/movimiento.html
deleted file mode 100644
index dec2ee1..0000000
--- a/20-directivas/client/movimiento.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
diff --git a/20-directivas/client/movimientoCtrl.js b/20-directivas/client/movimientoCtrl.js
deleted file mode 100644
index 2feb935..0000000
--- a/20-directivas/client/movimientoCtrl.js
+++ /dev/null
@@ -1,10 +0,0 @@
-(function () {
- // $stateParams es el servicio de ui-router para acceder a los parámetros de la ruta
- var movimientoCtrl = function ($stateParams, movimientosFactory) {
- var vm = this;
- // El acceso es por nombre de parámetro
- var movId = $stateParams.id;
- vm.movimiento = movimientosFactory.movimientos.get({id:movId});
- }
- angular.module('controlCajaApp').controller('MovimientoCtrl', movimientoCtrl);
-}());
diff --git a/20-directivas/client/movimientosFactory.js b/20-directivas/client/movimientosFactory.js
deleted file mode 100644
index 26a5053..0000000
--- a/20-directivas/client/movimientosFactory.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function () {
-
- var movimientosFactory = function ($resource) {
-
- var factory = {};
-
- // $resource("/api/priv/movimientos/");
- // El uso de parametros en los recursos debe especificarse
- // Indicando el nombre local y el remoto
- // En la url va el nombre remoto
- // En el objeto se repute ese nombre como clave y se dice que propiedad será la que lo lleve
- // La propiedad empieza por @
- factory.movimientos = $resource("/api/priv/movimientos/:id", {
- id: "@id"
- })
-
-
-
- factory.total = $resource("/api/priv/total/");
-
- return factory;
- };
-
- angular.module('controlCajaApp').factory('movimientosFactory', movimientosFactory);
-}());
diff --git a/20-directivas/client/not-found.html b/20-directivas/client/not-found.html
deleted file mode 100644
index 85210c2..0000000
--- a/20-directivas/client/not-found.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- No se ha encontrado lo que buscabas
-
diff --git a/20-directivas/client/nuevo.html b/20-directivas/client/nuevo.html
deleted file mode 100644
index 4421563..0000000
--- a/20-directivas/client/nuevo.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
- Introduce tus movimientos.
-
-
diff --git a/20-directivas/client/registro.html b/20-directivas/client/registro.html
deleted file mode 100644
index 6d32793..0000000
--- a/20-directivas/client/registro.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/20-directivas/client/registroCtrl.js b/20-directivas/client/registroCtrl.js
deleted file mode 100644
index 7344f28..0000000
--- a/20-directivas/client/registroCtrl.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function () {
- var registroCtrl = function ($rootScope, $state, $http, $cookieStore) {
- var urlBase = "http://localhost:3000/api/";
- var vm = this;
- vm.usuario = {};
- vm.entrar = function () {
- $http.post(urlBase + 'sesiones/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién entrado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- vm.registrar = function () {
- $http.post(urlBase + 'usuarios/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién creado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- }
- angular.module('controlCajaApp').controller('RegistroCtrl', registroCtrl);
-}());
diff --git a/20-directivas/client/tpl-cabecera.html b/20-directivas/client/tpl-cabecera.html
deleted file mode 100644
index 5245a7b..0000000
--- a/20-directivas/client/tpl-cabecera.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/20-directivas/client/tpl-fila-movimiento.html b/20-directivas/client/tpl-fila-movimiento.html
deleted file mode 100644
index 2c3f4c0..0000000
--- a/20-directivas/client/tpl-fila-movimiento.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
- {{movimientoplantilla.id }} |
- {{movimientoplantilla.fecha | date}} |
- {{movimientoplantilla.tipo}} |
- {{movimientoplantilla.categoria}} |
-
- {{movimientoplantilla.importe | number:2}} €
- |
- |
-
diff --git a/20-directivas/client/tpl-valoracion.html b/20-directivas/client/tpl-valoracion.html
deleted file mode 100644
index 63a8bcd..0000000
--- a/20-directivas/client/tpl-valoracion.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- *
-
-
-
diff --git a/20-directivas/client/valoracion.js b/20-directivas/client/valoracion.js
deleted file mode 100644
index d055fd8..0000000
--- a/20-directivas/client/valoracion.js
+++ /dev/null
@@ -1,38 +0,0 @@
-(function () {
- var valoracion = function () {
- return {
- restrict: 'AE',
- templateUrl: '/tpl-valoracion.html',
- scope: {
- valor: '=',
- max: '@',
- soloLectura: '@'
- },
- link: function (scope, elem, attrs) {
- function actualizar() {
- if(!scope.valor)scope.valor=1;
- scope.estrellas = [];
- for (var i = 0; i < scope.max; i++) {
- var estrella = {
- marcada: (i < scope.valor)
- };
- scope.estrellas.push(estrella);
- }
- };
-
- scope.marcar = function (indice) {
- if (scope.soloLectura && scope.soloLectura === 'true') {
- return;
- }
- scope.valor = indice + 1;
- actualizar();
- };
- actualizar();
- }
- }
- }
-
- angular.module('abDirectivas')
- .directive('abValoracion', valoracion);
-
-}());
diff --git a/20-directivas/directivas.md b/20-directivas/directivas.md
deleted file mode 100644
index a0e9318..0000000
--- a/20-directivas/directivas.md
+++ /dev/null
@@ -1,46 +0,0 @@
-Directivas
-==========
-
-- Se usan de forma **declarativa** en el HTML
-- Su función es extender y enriquecer el HTML encapsulando el **acceso al DOM**
-- Se definen como **objetos JS** con propiedades específicas
-
-Propiedades
------------
-
-### Restrict
-Sirve para determinar dónde se puede aplicar la directiva
-
-Valores posibles:
-
- - **A** – Attribute `
`
- - **E** – Element `
`
- - **C** – Class ` `
- - **M** – Comment ` `
-
-### Replace
-Indica si el elemento al que se aplica debe ser sustituído por el resultado de la ejecución
-
-### Transclude
-Indica si el elemento al que se aplicaca incluirá el resultado de la ejecución de la directiva en su interior
-
-### Template y template URL
-Cadena de texto o enlace a fichero que contine el HTML que va a devolver la directiva
-
-### Scope
-Intercambio de datos con el elemento que declara la directiva.
-Valores posibles:
-
- - **@** Interpolating, para enlazar un texto dentro de la directiva. ` scope: { soloLectura: '@' } `
- - **=** Data bind, un objeto para doble-enlace que la directiva pueda cambiar ` scope: { valor: '=alias' } `
- - **&** Expression `scope: { onEvaluado: '&' } `
-
-
-### Link
-Una función que enlazará la directiva con el scope
-
-### Compile
-Una función que podrá manipular el DOM creando una función link
-
-### Controller
-Una función que actuará como contrlador para esta directiva
diff --git a/20-directivas/package.json b/20-directivas/package.json
deleted file mode 100644
index 6028a5d..0000000
--- a/20-directivas/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "ControlCashFlow",
- "version": "0.0.0",
- "description": "Controla tu flujo de caja",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "Alberto Basalo",
- "license": "BSD-2-Clause",
- "dependencies": {
- "express": "~4.12.1",
- "body-parser": "~1.0.2"
- }
-}
diff --git a/20-directivas/recursos.md b/20-directivas/recursos.md
deleted file mode 100644
index 42fe6d5..0000000
--- a/20-directivas/recursos.md
+++ /dev/null
@@ -1,7 +0,0 @@
-https://angular-ui.github.io/
-http://ngmodules.org/c
-http://angular-js.in/
-http://www.directiv.es/
-
-http://www.tamas.io/node-jsexpress-cors-implementation/
-http://stackoverflow.com/questions/23823010/how-to-enable-cors-in-angularjs
\ No newline at end of file
diff --git a/20-directivas/server.js b/20-directivas/server.js
deleted file mode 100644
index 8d3fc97..0000000
--- a/20-directivas/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-var express = require('express');
-var bodyParser = require('body-parser');
-
-var app = express();
-app.use(bodyParser());
-app.use(express.static(__dirname + '/client'));
-
-app.use(function (peticion, respuesta, siguiente) {
- console.log("recibida petición: " + peticion.url);
- if (peticion.body && Object.keys(peticion.body).length>0) {
- console.log("body: " + JSON.stringify(peticion.body));
- }
- siguiente();
- });
-
-console.log('ready');
-
-var maxId = 0;
-var movimientos = [];
-var totales = [];
-
-var usuarios = [];
-var sesiones = [];
-
-
-app.use('/api/priv/', function (req, res, next) {
- var sessionId = req.get('sessionId');
- var sesion = getSesion(sessionId);
- if (sesion) {
- if (esSesionValida(sesion)) {
- sesion.timeStamp = new Date();
- req.usuario = sesion.email;
- next();
- } else {
- console.log('Sesión caducada:' + JSON.stringify(sesion));
- res.status(419).send('Sesión caducada');
- }
- } else {
- res.status(401).send('Credencial inválida');
- }
-
-});
-
-
-
-
-
-// API - REST
-// SECURITY
-app.route('/api/usuarios')
- .get(function (req, res, next) {
- // Esto devuelve la lista completa de usuarios y contraseñas
- // PELIGRO: Usar sólo a modo de debug mientras desarrollamos
- res.json(usuarios);
- })
- .post(function (req, res, next) {
- var usuario = req.body;
- if (existeUsuario(usuario)) {
- console.log('email ya registrado:' + usuario.email);
- res.status(409).send('email ' + usuario.email + ' ya registrado');
- } else {
- console.log('registrado:' + usuario.email);
- usuarios.push(usuario);
- res.json(newSession(usuario.email));
- }
- });
-
-// Gestión de sesiones: listado y login
-app.route('/api/sesiones')
- .get(function (req, res, next) {
- // Esto devuelve la lista completa de sesiones
- // PELIGRO: Usar sólo a modo de debug mientras desarrollamos
- res.json(sesiones);
- })
- .post(function (req, res, next) {
- var usuario = req.body;
- if (esUsuarioValido(usuario)) {
- console.log('aceptado:' + usuario.email);
- res.json(newSession(usuario.email));
- } else {
- console.log('Credencial inválida:' + usuario.email);
- res.status(401).send('Credencial inválida');
- }
- });
-
-function existeUsuario(usuario) {
- return usuarios.some(function (u) {
- return u.email == usuario.email;
- });
-}
-
-function esUsuarioValido(usuario) {
- return usuarios.filter(function (u) {
- return u.email == usuario.email && u.password == usuario.password;
- })[0];
-}
-
-function getSesion(sessionId) {
- return sesiones.filter(function (s) {
- return s.sessionId == sessionId;
- })[0]
-}
-
-function esSesionValida(sesion) {
- return (new Date() - sesion.timeStamp) < 20 * 60 * 1000;
-}
-
-function newSession(email) {
- var sessionId = Math.random() * (88888) + 11111;
- var timeStamp = new Date();
- sesiones.push({
- sessionId: sessionId,
- email: email,
- timeStamp: timeStamp
- });
- return sessionId;
-}
-
-
-// BUSINESS
-app.get('/api/pub/maestros', function (req, res, next) {
- var maestros = {
- categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
- categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
- };
- res.json(maestros);
-});
-
-app.route('/api/priv/movimientos')
- .get(function (req, res, next) {
- var movimientosUsuario = movimientos.filter(function (m) {
- return m.usuario = req.usuario;
- });
- res.json(movimientosUsuario);
- })
- .post(function (req, res, next) {
- var movimiento = req.body;
- movimiento.usuario = req.usuario;
- maxId++;
- movimiento.id = maxId;
- movimientos.push(movimiento);
- var totalUsuario = getTotalUsuario(req.usuario);
- if (movimiento.tipo == 'Ingreso')
- totalUsuario.ingresos += movimiento.importe;
- else
- totalUsuario.gastos += movimiento.importe;
- res.status(200).send();
- });
-
-app.get('/api/priv/movimientos/:id', function (req, res, next) {
- var movId = req.params.id;
- movimientoBuscado = getMovimientoById(movId, req.usuario);
- res.json(movimientoBuscado);
-});
-
-function getMovimientoById(id,usuario) {
- var movimientoBuscado = movimientos.filter(function (movimiento) {
- return movimiento.id == id && movimiento.usuario == usuario;
- })[0];
- return movimientoBuscado;
-}
-
-app.get('/api/priv/total', function (req, res, next) {
- var totalUsuario = getTotalUsuario(req.usuario);
- res.json(totalUsuario);
-});
-
-function getTotalUsuario(usuario) {
- if(usuario===undefined) return {};
- var totalUsuario = totales.filter(function (t) {
- return t.usuario == usuario;
- })[0];
- if (totalUsuario===undefined) {
- totalUsuario = {
- usuario : usuario,
- ingresos: 0,
- gastos: 0
- };
- totales.push(totalUsuario);
- }
- return totalUsuario;
-}
-
-
-console.log('steady');
-app.listen(3000);
-console.log('go');
diff --git a/21-organizacion/client/_comun/app.js b/21-organizacion/client/_comun/app.js
deleted file mode 100644
index 5dd729d..0000000
--- a/21-organizacion/client/_comun/app.js
+++ /dev/null
@@ -1,2 +0,0 @@
-angular.module('controlCajaApp', ['ui.router','ngCookies', 'ngResource', 'abFiltros','abDirectivas']);
-
diff --git a/21-organizacion/client/_comun/appHttpLog.js b/21-organizacion/client/_comun/appHttpLog.js
deleted file mode 100644
index 0357f95..0000000
--- a/21-organizacion/client/_comun/appHttpLog.js
+++ /dev/null
@@ -1,21 +0,0 @@
-(function () {
-
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraLog);
- }
-
- function funcionInterceptoraLog($log) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- $log.info('request:' + request.url);
- return request ;
- };
- interceptor.responseError = function (response) {
- $log.error("excepción: " + response.status + " de :" + response.config.url);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/21-organizacion/client/_comun/appSecurity.js b/21-organizacion/client/_comun/appSecurity.js
deleted file mode 100644
index 5948427..0000000
--- a/21-organizacion/client/_comun/appSecurity.js
+++ /dev/null
@@ -1,29 +0,0 @@
-(function () {
- function configuradorInterceptores($httpProvider) {
- $httpProvider.interceptors.push(funcionInterceptoraSeguridad);
- }
-
- function funcionInterceptoraSeguridad($q, $injector, $cookieStore, $rootScope) {
-
- var interceptor = {};
- interceptor.request = function (request) {
- request.headers["sessionId"] = $cookieStore.get("sessionId");
- return request || $q.when(request);
- };
- interceptor.responseError = function (response) {
- var state = $injector.get('$state');
- if (response.status === 401) {
- $rootScope.mensaje = "No hay derecho!!!";
- state.go('registro');
- } else if (response.status === 419) {
- $rootScope.mensaje = "Estoy caduco!!!";
- $cookieStore.remove("sessionId")
- state.go('registro');
- };
- return $q.reject(response);
- }
- return interceptor;
- }
-
- angular.module('controlCajaApp').config(configuradorInterceptores);
-}());
diff --git a/21-organizacion/client/_comun/menuCtrl.js b/21-organizacion/client/_comun/menuCtrl.js
deleted file mode 100644
index 14ddc17..0000000
--- a/21-organizacion/client/_comun/menuCtrl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function () {
- var menuCtrl = function ($state) {
- this.isActive = function (estado) {
- return $state.is(estado);
- }
- }
- angular.module('controlCajaApp').controller('MenuCtrl',menuCtrl);
-}());
diff --git a/21-organizacion/client/_comun/not-found.html b/21-organizacion/client/_comun/not-found.html
deleted file mode 100644
index 85210c2..0000000
--- a/21-organizacion/client/_comun/not-found.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- No se ha encontrado lo que buscabas
-
diff --git a/21-organizacion/client/_comun/states.js b/21-organizacion/client/_comun/states.js
deleted file mode 100644
index 9c04ab9..0000000
--- a/21-organizacion/client/_comun/states.js
+++ /dev/null
@@ -1,32 +0,0 @@
-angular.module('controlCajaApp').config(function ($stateProvider) {
- $stateProvider
- .state('total', {
- url: '/',
- controller: 'CajaCtrl as caja',
- templateUrl: 'controlcaja/total.html'
- })
- .state('nuevo', {
- url: '/nuevo',
- controller: 'CajaCtrl as caja',
- templateUrl: 'controlcaja/nuevo.html'
- })
- .state('lista', {
- url: '/lista',
- controller: 'CajaCtrl as caja',
- templateUrl: 'controlcaja/lista.html'
- })
- .state('movimiento', {
- url: '/movimiento/:id',
- controller: 'MovimientoCtrl as vm',
- templateUrl: 'movimiento/movimiento.html'
- })
- .state('registro', {
- url: '/registro',
- controller: 'RegistroCtrl as registro',
- templateUrl: 'registro/registro.html'
- })
- .state('not-found', {
- url: '*path',
- templateUrl: '_comun/not-found.html'
- });
-});
diff --git a/21-organizacion/client/controlcaja/cajaCtrl.js b/21-organizacion/client/controlcaja/cajaCtrl.js
deleted file mode 100644
index 60ab90e..0000000
--- a/21-organizacion/client/controlcaja/cajaCtrl.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function () {
- var cajaCtrl = function (maestrosFactory, movimientosFactory) {
- var vm = this;
-
- vm.titulo = "Controla tu Cash Flow";
-
- vm.maestros = maestrosFactory.get();
-
- vm.nuevoMovimiento = new movimientosFactory.movimientos();
- vm.nuevoMovimiento.esIngreso = 1;
- vm.nuevoMovimiento.fecha = new Date();
-
- vm.movimientos = movimientosFactory.movimientos.query();
-
- vm.total = movimientosFactory.total.get();
-
- vm.guardarMovimiento = function () {
- vm.nuevoMovimiento.tipo = vm.tipo(vm.nuevoMovimiento);
- vm.nuevoMovimiento.$save()
- .then(function (postedData) {
- vm.movimientos = movimientosFactory.movimientos.query();
- vm.total = movimientosFactory.total.get();
- vm.nuevoMovimiento.importe = 0;
- });
- }
- vm.balance = function () {
- return vm.total.ingresos - vm.total.gastos
- }
- vm.tipo = function (movimiento) {
- return movimiento.esIngreso && 'Ingreso' || 'Gasto'
- }
- }
- angular.module('controlCajaApp').controller('CajaCtrl', cajaCtrl);
-}());
diff --git a/21-organizacion/client/controlcaja/lista.html b/21-organizacion/client/controlcaja/lista.html
deleted file mode 100644
index b79a6b7..0000000
--- a/21-organizacion/client/controlcaja/lista.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
diff --git a/21-organizacion/client/controlcaja/nuevo.html b/21-organizacion/client/controlcaja/nuevo.html
deleted file mode 100644
index 2b3df9a..0000000
--- a/21-organizacion/client/controlcaja/nuevo.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
- Introduce tus movimientos.
-
-
diff --git a/21-organizacion/client/controlcaja/total.html b/21-organizacion/client/controlcaja/total.html
deleted file mode 100644
index 3f8af9e..0000000
--- a/21-organizacion/client/controlcaja/total.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
- Comprueba de dónde viene y a dónde va tu dinero.
-
-
-
-
-
- {{ caja.total.ingresos | number:2 }} €
-
-
- Total ingresos
- Acumulado
-
-
-
-
- {{ caja.total.gastos | number:2 }} €
-
-
- Total gastos
- Acumulado
-
-
-
-
- {{ caja.balance() | number:2 }} €
-
-
- Balance
- Ingresos-Gastos
-
-
-
-
diff --git a/21-organizacion/client/data/maestrosFactory.js b/21-organizacion/client/data/maestrosFactory.js
deleted file mode 100644
index 2ba429d..0000000
--- a/21-organizacion/client/data/maestrosFactory.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function () {
- var maestrosFactory = function ($resource) {
- return $resource("/api/pub/maestros/",{},{get: {cache: true}});
- };
-
- angular.module('controlCajaApp').factory('maestrosFactory', maestrosFactory);
-}());
diff --git a/21-organizacion/client/data/movimientosFactory.js b/21-organizacion/client/data/movimientosFactory.js
deleted file mode 100644
index 995a40e..0000000
--- a/21-organizacion/client/data/movimientosFactory.js
+++ /dev/null
@@ -1,15 +0,0 @@
-(function () {
-
- var movimientosFactory = function ($resource) {
-
- var factory = {};
- factory.movimientos = $resource("/api/priv/movimientos/:id", {
- id: "@id"
- })
- factory.total = $resource("/api/priv/total/");
-
- return factory;
- };
-
- angular.module('controlCajaApp').factory('movimientosFactory', movimientosFactory);
-}());
diff --git a/21-organizacion/client/directivas/directivas.js b/21-organizacion/client/directivas/directivas.js
deleted file mode 100644
index 42c3c01..0000000
--- a/21-organizacion/client/directivas/directivas.js
+++ /dev/null
@@ -1,74 +0,0 @@
-(function () {
- function piePagina() {
- return {
- restrict: 'AE',
- replace: 'true',
- template: '
'
- };
- };
-
- function cabecera() {
- return {
- restrict: 'AE',
- replace: 'true',
- transclude: true,
- templateUrl: '/directivas/tpl-cabecera.html'
- };
- };
-
- function filaMovimiento() {
- return {
- restrict: 'A',
- templateUrl: '/directivas/tpl-fila-movimiento.html',
- scope: {
- movimientoplantilla: "=movimientodirectiva"
- }
- };
- }
-
- function seleccionado() {
- return {
- link: function ($scope, element, attrs) {
- element.bind('mouseenter', function () {
- element.css('background-color', 'lightyellow');
- });
- element.bind('mouseleave', function () {
- element.css('background-color', 'white');
- });
- }
- };
- }
-
- function plugin() {
- return {
- link: function (scope, element, attrs) {
- var init = scope.$eval(attrs.ngModel);
- var min = scope.$eval(attrs.abSliderMin);
- var max = scope.$eval(attrs.abSliderMax);
- $(element).plugin({
- value: init,
- min: min,
- max: max,
- tooltip: 'hide'
- });
-
- scope.$watch(attrs.ngModel, function (valor) {
- $(element).plugin('setValue', valor);
- });
-
- $(element).plugin().on('slide', function (evento) {
- scope.$apply(function () {
- scope[attrs.ngModel] = evento.value;
- });
- });
- }
- }
- }
-
- angular.module('abDirectivas', [])
- .directive('abPiePagina', piePagina)
- .directive('abCabecera', cabecera)
- .directive('abFilaMovimiento', filaMovimiento)
- .directive('abSeleccionado', seleccionado)
- .directive('abPlugin', plugin);
-}());
diff --git a/21-organizacion/client/directivas/tpl-cabecera.html b/21-organizacion/client/directivas/tpl-cabecera.html
deleted file mode 100644
index 5245a7b..0000000
--- a/21-organizacion/client/directivas/tpl-cabecera.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/21-organizacion/client/directivas/tpl-fila-movimiento.html b/21-organizacion/client/directivas/tpl-fila-movimiento.html
deleted file mode 100644
index 2c3f4c0..0000000
--- a/21-organizacion/client/directivas/tpl-fila-movimiento.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
- {{movimientoplantilla.id }} |
- {{movimientoplantilla.fecha | date}} |
- {{movimientoplantilla.tipo}} |
- {{movimientoplantilla.categoria}} |
-
- {{movimientoplantilla.importe | number:2}} €
- |
- |
-
diff --git a/21-organizacion/client/directivas/valoracion/tpl-valoracion.html b/21-organizacion/client/directivas/valoracion/tpl-valoracion.html
deleted file mode 100644
index 63a8bcd..0000000
--- a/21-organizacion/client/directivas/valoracion/tpl-valoracion.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- *
-
-
-
diff --git a/21-organizacion/client/directivas/valoracion/valoracion.js b/21-organizacion/client/directivas/valoracion/valoracion.js
deleted file mode 100644
index d4ad49d..0000000
--- a/21-organizacion/client/directivas/valoracion/valoracion.js
+++ /dev/null
@@ -1,38 +0,0 @@
-(function () {
- var valoracion = function () {
- return {
- restrict: 'AE',
- templateUrl: '/directivas/valoracion/tpl-valoracion.html',
- scope: {
- valor: '=',
- max: '@',
- soloLectura: '@'
- },
- link: function (scope, elem, attrs) {
- function actualizar() {
- if(!scope.valor)scope.valor=1;
- scope.estrellas = [];
- for (var i = 0; i < scope.max; i++) {
- var estrella = {
- marcada: (i < scope.valor)
- };
- scope.estrellas.push(estrella);
- }
- };
-
- scope.marcar = function (indice) {
- if (scope.soloLectura && scope.soloLectura === 'true') {
- return;
- }
- scope.valor = indice + 1;
- actualizar();
- };
- actualizar();
- }
- }
- }
-
- angular.module('abDirectivas')
- .directive('abValoracion', valoracion);
-
-}());
diff --git a/21-organizacion/client/movimiento/movimiento.html b/21-organizacion/client/movimiento/movimiento.html
deleted file mode 100644
index dec2ee1..0000000
--- a/21-organizacion/client/movimiento/movimiento.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
diff --git a/21-organizacion/client/movimiento/movimientoCtrl.js b/21-organizacion/client/movimiento/movimientoCtrl.js
deleted file mode 100644
index 0d966da..0000000
--- a/21-organizacion/client/movimiento/movimientoCtrl.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function () {
- var movimientoCtrl = function ($stateParams, movimientosFactory) {
- var vm = this;
- var movId = $stateParams.id;
- vm.movimiento = movimientosFactory.movimientos.get({id:movId});
- }
- angular.module('controlCajaApp').controller('MovimientoCtrl', movimientoCtrl);
-}());
diff --git a/21-organizacion/client/registro/registro.html b/21-organizacion/client/registro/registro.html
deleted file mode 100644
index a224951..0000000
--- a/21-organizacion/client/registro/registro.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/21-organizacion/client/registro/registroCtrl.js b/21-organizacion/client/registro/registroCtrl.js
deleted file mode 100644
index 7344f28..0000000
--- a/21-organizacion/client/registro/registroCtrl.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function () {
- var registroCtrl = function ($rootScope, $state, $http, $cookieStore) {
- var urlBase = "http://localhost:3000/api/";
- var vm = this;
- vm.usuario = {};
- vm.entrar = function () {
- $http.post(urlBase + 'sesiones/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién entrado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- vm.registrar = function () {
- $http.post(urlBase + 'usuarios/', vm.usuario)
- .success(function (data) {
- $rootScope.nombre = vm.usuario.email;
- $rootScope.mensaje = 'recién creado';
- $cookieStore.put("sessionId", data);
- $state.go("total");
- });
- }
- }
- angular.module('controlCajaApp').controller('RegistroCtrl', registroCtrl);
-}());
diff --git a/21-organizacion/server/api/maestrosAPI.js b/21-organizacion/server/api/maestrosAPI.js
deleted file mode 100644
index e61200e..0000000
--- a/21-organizacion/server/api/maestrosAPI.js
+++ /dev/null
@@ -1,10 +0,0 @@
-"use strict";
-module.exports.routeMaestros = function (app) {
- app.get('/api/pub/maestros', function (req, res, next) {
- var maestros = {
- categoriasIngresos: ['Nómina', 'Ventas', 'Intereses Depósitos'],
- categoriasGastos: ['Hipotéca', 'Compras', 'Impuestos']
- };
- res.json(maestros);
- });
-}
diff --git a/21-organizacion/server/api/movimientosAPI.js b/21-organizacion/server/api/movimientosAPI.js
deleted file mode 100644
index 30e1b20..0000000
--- a/21-organizacion/server/api/movimientosAPI.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-var movimientosData = require('../data/movimientosData.js');
-
-module.exports.routeMovimientos = function (app) {
-
- app.route('/api/priv/movimientos')
- .get(function (req, res, next) {
- res.json(movimientosData.getMovimientos(req.usuario));
- })
- .post(function (req, res, next) {
- var movimiento = req.body;
- movimiento.usuario = req.usuario;
- movimientosData.postMovimiento(movimiento);
- res.status(200).send();
- });
-
- app.get('/api/priv/movimientos/:id', function (req, res, next) {
- res.json(movimientosData.getMovimiento(req.params.id, req.usuario));
- });
-
- app.get('/api/priv/total', function (req, res, next) {
- res.json(movimientosData.getTotalUsuario(req.usuario));
- });
-
-
-}
diff --git a/21-organizacion/server/api/seguridadAPI.js b/21-organizacion/server/api/seguridadAPI.js
deleted file mode 100644
index e6b8b93..0000000
--- a/21-organizacion/server/api/seguridadAPI.js
+++ /dev/null
@@ -1,45 +0,0 @@
-"use strict";
-var seguridadData = require('../data/seguridadData.js');
-
-module.exports.seguridad = function (app) {
-
- app.use('/api/priv/', function (req, res, next) {
- var sessionId = req.get('sessionId');
- var sesion = seguridadData.getSesion(sessionId);
- if (sesion) {
- if (sesion.timeStamp) {
- req.usuario = sesion.email;
- next();
- } else {
- res.status(419).send('Sesión caducada');
- }
- } else {
- res.status(401).send('Credencial inválida');
- }
- });
-
- // API - REST
- // SECURITY
- app.route('/api/usuarios')
- .post(function (req, res, next) {
- var usuario = req.body;
- var sesion = seguridadData.postUsuario(usuario);
- if (sesion) {
- res.json(sesion);
- } else {
- res.status(409).send('email ' + usuario.email + ' ya registrado');
- }
- });
-
- // Gestión de sesiones: listado y login
- app.route('/api/sesiones')
- .post(function (req, res, next) {
- var usuario = req.body;
- var sesion = seguridadData.postSesion(usuario);
- if (sesion) {
- res.json(sesion);
- } else {
- res.status(401).send('Credencial inválida');
- }
- });
-}
diff --git a/21-organizacion/server/cash-flow.js b/21-organizacion/server/cash-flow.js
deleted file mode 100644
index f694ed6..0000000
--- a/21-organizacion/server/cash-flow.js
+++ /dev/null
@@ -1,12 +0,0 @@
-"use strict";
-var settings = require("./settings.js");
-var app = require('./express.js').configApp();
-console.log('ready... settings ok', settings);
-
-require('./api/seguridadAPI.js').seguridad(app);
-require('./api/maestrosAPI.js').routeMaestros(app);
-require('./api/movimientosAPI.js').routeMovimientos(app);
-console.log('steady... routes OK');
-
-app.listen(settings.port);
-console.log('go... listening on port: ' + settings.port);
diff --git a/21-organizacion/server/data/movimientosData.js b/21-organizacion/server/data/movimientosData.js
deleted file mode 100644
index c4c1ea5..0000000
--- a/21-organizacion/server/data/movimientosData.js
+++ /dev/null
@@ -1,58 +0,0 @@
-"use strict";
-var maxId = 0;
-var movimientos = [];
-var totales = [];
-
-module.exports.getMovimientos = function (usuario) {
- var movimientosUsuario = movimientos.filter(function (m) {
- return m.usuario = usuario;
- });
- return movimientosUsuario;
-}
-
-module.exports.getMovimiento = function (movId, usuario) {
- var movimientoBuscado = movimientos.filter(function (movimiento) {
- return movimiento.id == movId && movimiento.usuario == usuario;
- })[0];
- return movimientoBuscado;
-}
-
-module.exports.getTotalUsuario = function (usuario) {
- var totalUsuario = getTotalUsuario(usuario);
- return totalUsuario;
-}
-
-module.exports.postMovimiento = function (movimiento) {
- maxId++;
- movimiento.id = maxId;
- movimientos.push(movimiento);
- var totalUsuario = getTotalUsuario(movimiento.usuario);
- if (movimiento.tipo == 'Ingreso')
- totalUsuario.ingresos += movimiento.importe;
- else
- totalUsuario.gastos += movimiento.importe;
- return getMovimientosUsuario(movimiento.usuario);
-}
-
-function getMovimientosUsuario(usuario) {
- var movimientosUsuario = movimientos.filter(function (m) {
- return m.usuario = usuario;
- });
- return movimientosUsuario;
-}
-
-function getTotalUsuario(usuario) {
- if (usuario === undefined) return {};
- var totalUsuario = totales.filter(function (t) {
- return t.usuario == usuario;
- })[0];
- if (totalUsuario === undefined) {
- totalUsuario = {
- usuario: usuario,
- ingresos: 0,
- gastos: 0
- };
- totales.push(totalUsuario);
- }
- return totalUsuario;
-}
diff --git a/21-organizacion/server/data/seguridadData.js b/21-organizacion/server/data/seguridadData.js
deleted file mode 100644
index 3302dc8..0000000
--- a/21-organizacion/server/data/seguridadData.js
+++ /dev/null
@@ -1,75 +0,0 @@
-"use strict";
-var usuarios = [];
-var sesiones = [];
-
-module.exports.postUsuario = function (usuario) {
- if (existeUsuario(usuario)) {
- console.log('email ya registrado:' + usuario.email);
- return null;
- } else {
- console.log('registrado:' + usuario.email);
- usuarios.push(usuario);
- return newSession(usuario.email);
- }
-}
-
-module.exports.postSesion = function (usuario) {
- if (esUsuarioValido(usuario)) {
- console.log('aceptado:' + usuario.email);
- return newSession(usuario.email);
- } else {
- console.log('Credencial inválida:' + usuario.email);
- return null;
- }
-}
-
-module.exports.getSesion = function (sessionId) {
- var sesion = getSesion(sessionId);
- if (sesion) {
- if (esSesionValida(sesion)) {
- sesion.timeStamp = new Date();
- return sesion;
- } else {
- console.log('Sesión caducada:' + JSON.stringify(sesion));
- sesion.timeStamp = null;
- return sesion;
- }
- } else {
- console.log('Credencial inválida:' + sessionId);
- return null;
- }
-}
-
-
-function existeUsuario(usuario) {
- return usuarios.some(function (u) {
- return u.email == usuario.email;
- });
-}
-
-function esUsuarioValido(usuario) {
- return usuarios.filter(function (u) {
- return u.email == usuario.email && u.password == usuario.password;
- })[0];
-}
-
-function getSesion(sessionId) {
- return sesiones.filter(function (s) {
- return s.sessionId == sessionId;
- })[0]
-}
-
-function esSesionValida(sesion) {
- return (new Date() - sesion.timeStamp) < 20 * 60 * 1000;
-}
-
-function newSession(email) {
- var sessionId = Math.random() * (88888) + 11111;
- var timeStamp = new Date();
- sesiones.push({
- sessionId: sessionId,
- email: email,
- timeStamp: timeStamp
- });
- return sessionId;
-}
diff --git a/21-organizacion/server/express.js b/21-organizacion/server/express.js
deleted file mode 100644
index 67bc83e..0000000
--- a/21-organizacion/server/express.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-module.exports.configApp = function () {
-
- var express = require('express');
- var bodyParser = require('body-parser');
-
- var app = express();
-
- app.use(bodyParser.urlencoded({
- extended: true
- }));
- app.use(bodyParser.json());
- app.use(express.static(__dirname + './../client'));
- console.log("bodyParser y servidor de ficheros estáticos en uso");
-
- app.use(function (peticion, respuesta, siguiente) {
- console.log("recibida petición: " + peticion.url);
- if (peticion.body && Object.keys(peticion.body).length > 0) {
- console.log("body: " + JSON.stringify(peticion.body));
- }
- siguiente();
- });
-
- return app;
-
-}
diff --git a/21-organizacion/server/package.json b/21-organizacion/server/package.json
deleted file mode 100644
index ce9450d..0000000
--- a/21-organizacion/server/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "CashFlow",
- "version": "1.0.0",
- "description": "Ejemplo para formacioón MEANJS",
- "main": "cash-flow.js",
- "author": "info@agorabinaria.com",
- "license": "ISC",
- "dependencies": {
- "body-parser": "^1.12.0",
- "express": "^4.12.2"
- }
-}
diff --git a/21-organizacion/server/settings.js b/21-organizacion/server/settings.js
deleted file mode 100644
index 5f67389..0000000
--- a/21-organizacion/server/settings.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- port: 3000,
- mongoUrl: "mongodb://localhost:27017/cash-flow",
- log: "debug"
- };