import { MaestroModel , MaestroTipoModel , MovimientoModel , Movimiento } from './datos.model' ; import { Injectable } from '@angular/core' ; /**
 * Programación reactiva con observables
 */ import { Observable } from 'rxjs/Observable' ; import { Subject } from 'rxjs/Subject' ; @ Injectable ( ) export class DatosService { private tipos : MaestroModel [ ] = [ { id : 1 , text : 'Ingreso' } , { id : 2 , text : 'Gasto' } ] ; private categoriasTipos : MaestroTipoModel [ ] = [ { id : 1 , text : 'Nómina' , type : 1 } , { id : 2 , text : 'Ventas' , type : 1 } , { id : 3 , text : 'Intereses' , type : 1 } , { id : 4 , text : 'Hipoteca' , type : 2 } , { id : 5 , text : 'Compras' , type : 2 } , { id : 6 , text : 'Domicialiaciones' , type : 2 } , { id : 7 , text : 'Impuestos' , type : 2 } ] ; private movimientos : MovimientoModel [ ] = [ ] ; private movimientos$ : Subject < MovimientoModel [ ] > = new Subject < MovimientoModel [ ] > ( ) ; constructor ( ) { } getNuevoMovimiento ( ) { return new Movimiento ( new Date ( Date . now ( ) ) , 0 , this . getTipoBase ( ) , this . getCategoriaBase ( this . getTipoBase ( ) ) ) ; } getTipos ( ) { return this . tipos ; } getCategoriasPorTipo ( tipo ) { return this . categoriasTipos . 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 ( ) ; } private getTipoBase = ( ) => this . tipos [ 0 ] . id ; getCategoriaBase = ( tipoId ) => this . getCategoriasPorTipo ( tipoId ) [ 0 ] . id ; }