import { MaestroModel , MaestroTipoModel , MovimientoModel , Movimiento } from './datos.model' ; import { Injectable } from '@angular/core' ; import { Http } from '@angular/http' ; import 'rxjs/add/operator/map' ; import 'rxjs/add/operator/catch' ; import { HttpToolsService } from './../shared/http-tools.service' ; /**
 * Programación reactiva con observables
 */ import { Observable } from 'rxjs/Observable' ; import { Subject } from 'rxjs/Subject' ; @ Injectable ( ) export class DatosService { private urlBase : string = 'http://localhost:3030/api' ; private categorias : MaestroTipoModel [ ] = [ ] ; private movimientos : MovimientoModel [ ] = [ ] ; private movimientos$ : Subject < MovimientoModel [ ] > = new Subject < MovimientoModel [ ] > ( ) ; constructor ( private http , private httpToolsService ) { } getNuevoMovimiento ( ) { return new Movimiento ( new Date ( Date . now ( ) ) , 0 , 1 , 1 ) ; } getTipos ( ) { return this . http . get ( `${ this . urlBase }/pub/maestros/tipos` ) . map ( this . httpToolsService . obtenerDatos ) ; } getCategorias ( ) { return this . http . get ( `${ this . urlBase }/pub/maestros/categorias` ) . map ( this . httpToolsService . obtenerDatos ) . map ( categorias => this . categorias = categorias ) ; } getCategoriasPorTipo ( tipo ) { return this . categorias . filter ( c => c . type === tipo ) ; } postMovimiento ( movimiento ) { let movimientoClone = Object . assign ( { } , movimiento ) ; this . movimientos . push ( movimientoClone ) ; this . movimientos$ . next ( this . movimientos ) ; } getMovimientos$ ( ) { return this . movimientos$ . asObservable ( ) ; } getCategoriaBase = ( tipoId ) => this . getCategoriasPorTipo ( tipoId ) [ 0 ] . id ; }