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 [ ] = [ ] ; 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 ) { /**
         * primero preparación de datos para su envío
         * después suscripción y operaciones sobre la respuesta
         */ let body = JSON . stringify ( movimiento ) ; let options = this . httpToolsService . configurarCabeceras ( ) ; if ( movimiento . _id && movimiento . _id !== '_' ) { return this . http . put ( `${ this . urlBase }/priv/movimientos/${ movimiento . _id }` , body , options ) . catch ( this . httpToolsService . tratarErrores ) ; } else { return this . http . post ( `${ this . urlBase }/priv/movimientos` , body , options ) . catch ( this . httpToolsService . tratarErrores ) ; } } getMovimientos$ ( ) { let options = this . httpToolsService . configurarCabeceras ( ) ; return this . http . get ( `${ this . urlBase }/priv/movimientos` , options ) . map ( this . httpToolsService . obtenerDatos ) . catch ( this . httpToolsService . tratarErrores ) ; } getMovimientoPor_Id$ ( _id ) { let options = this . httpToolsService . configurarCabeceras ( ) ; return this . http . get ( `${ this . urlBase }/priv/movimientos/${ _id }` , options ) . map ( this . httpToolsService . obtenerDatos ) . catch ( this . httpToolsService . tratarErrores ) ; } getCategoriaBase = ( tipoId ) => this . getCategoriasPorTipo ( tipoId ) [ 0 ] . id ; }