import { Component, OnInit, Input, ViewChild } from "@angular/core"; import { InstrumentComponent } from "@app/components/investment-proposals/instrument/instrument.component"; import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { IAngularMyDpOptions, IMyDateModel } from "angular-mydatepicker"; import { formatDate, DatePipe } from "@angular/common"; import { Router } from "@angular/router"; import { FormInvestmentProposalService } from "@app/services/form-investment-proposal.service"; import { CatalogsService } from "@app/services/catalogs.service"; import { InstrumentCalculations } from "@app/services/instrument-calculations.service"; import Swal from "sweetalert2"; import { GeneralInfo } from "@app/models/investment-proposal-form"; import { parse } from "date-fns"; import { MatPaginator } from "@angular/material/paginator"; import { MatSort } from "@angular/material/sort"; import { MatTableDataSource } from "@angular/material/table"; @Component({ selector: "app-certificados", templateUrl: "./certificados.component.html" }) export class CINV implements InstrumentComponent { title: string = "Certificados de inversión"; @Input() data: any; @Input() summary: boolean; @Input() investmentID: string; displayedColumns: string[] = [ "posicion", "plazo", "fecha_pago", "ingreso_bruto", "ingreso_neto", "impuesto" ]; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; @ViewChild(MatSort, { static: true }) sort: MatSort; form: any; general: GeneralInfo; // For daterange daysLabels: any = { su: "Dom", mo: "Lun", tu: "Mar", we: "Mie", th: "Jue", fr: "Vie", sa: "Sab" }; monthsLabels: any = { 1: "Ene", 2: "Feb", 3: "Mar", 4: "Abr", 5: "May", 6: "Jun", 7: "Jul", 8: "Ago", 9: "Sep", 10: "Oct", 11: "Nov", 12: "Dic" }; investmentProposalForm: FormGroup; myDpOptions: IAngularMyDpOptions = { dateRange: false, dateFormat: "dd/mm/yyyy", dayLabels: this.daysLabels, monthLabels: this.monthsLabels }; myDateInit: boolean = true; m_fecha_vencimiento_compra: IMyDateModel; m_fecha_ultima_cupon_compra: IMyDateModel; m_fecha_rendencion: IMyDateModel; m_fecha_liquidacion_compra: IMyDateModel; submitted: boolean = false; instrument_exists: boolean; instrument_work: any = []; financials: any; base_types: any; proyecciones: any; bonosObject: {}; dataSource = new MatTableDataSource(this.proyecciones); dataSource2 = new MatTableDataSource(this.proyecciones); hasProjections: boolean; fecha_vencimiento: any; comision_casa_compra: any; comision_bolsa_compra: any; fecha_siguiente_cupon_compra: any; dias_vencimiento_compra: any; dias_acumulados_compra: any; ytm_vencimiento_comision_porcentaje_compra: any; interes_acumulado_compra: any; interes_acumulado_porcentaje_compra: any; precio_sucio_porcentaje_compra: any; valor_transado_compra: any; monto_pagar: any; fecha_inicio_vigencia: any; comision_casa_venta: any; fecha_siguiente_cupon_venta: any; dias_vencimiento_venta: any; dias_acumulados_venta: any; ytm_vencimiento_comision_porcentaje_venta: any; interes_acumulado_venta: any; interes_acumulado_porcentaje_venta: any; precio_sucio_porcentaje_venta: any; valor_transado_venta: any; monto_recibir: any; dias_tenencia_total: any; ganancia_perdida_capital: any; ingresos_intereses: any; costos_totales: any; ganancia_perdida_total: any; ganancia_perdida_capital_porcentaje: any; intereses_porcentaje: any; neto_antes_impuesto_porcentaje: any; neto_despues_impuesto_porcentaje: any; total_ingresos_recibidos: any; operation_result: boolean = false; operation_results_work: any = []; instrument_work_summary: any = []; ytm_vencimiento_porcentaje_compra: any; ytm_vencimiento_porcentaje_venta: any; comision_bolsa_venta: any; consolidado_proyeccion: any; constructor( private formBuilder: FormBuilder, private router: Router, private formDataService: FormInvestmentProposalService, private catalogService: CatalogsService, private instrumentCalcService: InstrumentCalculations, public datepipe: DatePipe ) { this.instrument_work = this.formDataService.getWork(); this.instrument_exists = this.instrument_work == undefined; this.general = this.formDataService.getGeneralInfo(); if ( this.instrument_work != undefined && this.instrument_work.proyecciones != "" ) { this.hasProjections = true; this.consolidado_proyeccion = this.instrument_work.proyecciones[ this.instrument_work.proyecciones.length - 1 ]; this.operation_results_work = this.instrument_work["resultado_operacion"]; if (this.instrument_work["instrumento"] != undefined) { this.instrument_work = this.instrument_work["instrumento"]; } this.instrument_work_summary = this.instrument_work; this.dataSource2.data = this.instrument_work.proyecciones.slice(0, -1); this.dataSource2.paginator = this.paginator; this.dataSource2.sort = this.sort; } else { this.hasProjections = false; } if ( this.operation_results_work != undefined && this.operation_results_work != "" ) { this.operation_result = true; } this.investmentProposalForm = this.formBuilder.group({ costo_cedeval: [ this.instrument_exists ? "" : this.instrument_work.costo_cedeval, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], costo_transferencia: [ this.instrument_exists ? "" : this.instrument_work.costo_transferencia, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], precio_compra: [ this.instrument_exists ? "" : this.instrument_work.precio_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], valor_nominal_compra: [ this.instrument_exists ? "" : this.instrument_work.valor_nominal_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], precio_vencimiento_compra: [ this.instrument_exists ? "" : this.instrument_work.precio_vencimiento_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], cupon_porcentaje_compra: [ this.instrument_exists ? "" : this.instrument_work.cupon_porcentaje_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], comision_casa_porcentaje_compra: [ this.instrument_exists ? "" : this.instrument_work.comision_casa_porcentaje_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], comision_bolsa_porcentaje_compra: [ this.instrument_exists ? "" : this.instrument_work.comision_bolsa_porcentaje_compra, [ Validators.required, Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/) ] ], precio_venta: [ this.instrument_exists ? "" : this.instrument_work.precio_venta ], valor_nominal_venta: [ this.instrument_exists ? "" : this.instrument_work.valor_nominal_venta ], precio_vencimiento_venta: [ this.instrument_exists ? "" : this.instrument_work.precio_vencimiento_venta ], cupon_porcentaje_venta: [ this.instrument_exists ? "" : this.instrument_work.cupon_porcentaje_venta ], comision_casa_porcentaje_venta: [ this.instrument_exists ? "" : this.instrument_work.comision_casa_porcentaje_venta ], comision_bolsa_porcentaje_venta: [ this.instrument_exists ? "" : this.instrument_work.comision_bolsa_porcentaje_venta ], fecha_ultima_cupon_compra: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_ultima_cupon_compra, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_ultima_cupon_compra } }, Validators.required ], fecha_liquidacion_compra: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_liquidacion_compra, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_liquidacion_compra } }, Validators.required ], fecha_vencimiento_compra: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_vencimiento_compra, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_vencimiento_compra } }, Validators.required ], fecha_ultima_cupon_venta: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_ultima_cupon_venta, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_ultima_cupon_venta } } ], fecha_liquidacion_venta: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_liquidacion_venta, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_liquidacion_venta } } ], fecha_vencimiento_venta: [ this.instrument_exists ? "" : { isRange: false, singleDate: { jsDate: parse( this.instrument_work.fecha_vencimiento_venta, "dd/MM/yyyy", new Date() ), formatted: this.instrument_work.fecha_vencimiento_venta } } ] }); } get f() { return this.investmentProposalForm.controls; } save(form: any): boolean { if (!form.valid) { return false; } this.formDataService.setWork(this.bonosObject); return true; } getCalculations(form: any, saveForm: boolean) { this.submitted = true; if (!form.valid) { return false; } Swal.fire({ allowOutsideClick: false, icon: "info", text: "Espere por favor..." }); Swal.showLoading(); this.instrumentCalcService .bonosCalc( "CINV", // Codigo del instrumento { id_tipo_base: +this.general.base_anual, id_formato_ingreso: +this.general.formato_ingreso, id_periodicidad: +this.general.periodicidad }, { costo_cedeval: +this.f.costo_cedeval.value, costo_transferencia: +this.f.costo_transferencia.value, valor_nominal_compra: +this.f.valor_nominal_compra.value, precio_compra: +this.f.precio_compra.value, precio_vencimiento_compra: +this.f.precio_vencimiento_compra.value, cupon_porcentaje_compra: +this.f.cupon_porcentaje_compra.value, comision_casa_porcentaje_compra: this.f .comision_casa_porcentaje_compra.value, comision_bolsa_porcentaje_compra: this.f .comision_bolsa_porcentaje_compra.value, valor_nominal_venta: +this.f.valor_nominal_venta.value, precio_venta: +this.f.precio_venta.value, precio_vencimiento_venta: +this.f.precio_vencimiento_venta.value, cupon_porcentaje_venta: +this.f.cupon_porcentaje_venta.value, comision_casa_porcentaje_venta: this.f.comision_casa_porcentaje_venta .value, comision_bolsa_porcentaje_venta: this.f .comision_bolsa_porcentaje_venta.value, fecha_vencimiento_compra: this.f.fecha_vencimiento_compra.value .singleDate.formatted, fecha_ultima_cupon_compra: this.f.fecha_ultima_cupon_compra.value .singleDate.formatted, fecha_liquidacion_compra: this.f.fecha_liquidacion_compra.value .singleDate.formatted, fecha_vencimiento_venta: this.f.fecha_vencimiento_venta.value .singleDate.formatted, fecha_ultima_cupon_venta: this.f.fecha_ultima_cupon_venta.value .singleDate.formatted, fecha_liquidacion_venta: this.f.fecha_liquidacion_venta.value .singleDate.formatted } ) .subscribe( ans => { // Instrumento de compra this.comision_casa_compra = ans["result"]["instrumento_compra"]["comision_casa_compra"]; this.comision_bolsa_compra = ans["result"]["instrumento_compra"]["comision_bolsa_compra"]; this.fecha_siguiente_cupon_compra = ans["result"]["instrumento_compra"]["fecha_siguiente_cupon_compra"]; this.dias_vencimiento_compra = ans["result"]["instrumento_compra"]["dias_vencimiento_compra"]; this.dias_acumulados_compra = ans["result"]["instrumento_compra"]["dias_acumulados_compra"]; this.ytm_vencimiento_comision_porcentaje_compra = ans["result"]["instrumento_compra"][ "ytm_vencimiento_comision_porcentaje_compra" ]; this.ytm_vencimiento_porcentaje_compra = ans["result"]["instrumento_compra"][ "ytm_vencimiento_porcentaje_compra" ]; this.interes_acumulado_compra = ans["result"]["instrumento_compra"]["interes_acumulado_compra"]; this.interes_acumulado_porcentaje_compra = ans["result"]["instrumento_compra"][ "interes_acumulado_porcentaje_compra" ]; this.precio_sucio_porcentaje_compra = ans["result"]["instrumento_compra"][ "precio_sucio_porcentaje_compra" ]; this.valor_transado_compra = ans["result"]["instrumento_compra"]["valor_transado_compra"]; this.monto_pagar = ans["result"]["instrumento_compra"]["monto_pagar"]; this.fecha_inicio_vigencia = ans["result"]["instrumento_compra"]["fecha_inicio_vigencia"]; // Instrumento de venta this.comision_casa_venta = ans["result"]["instrumento_venta"]["comision_casa_venta"]; this.comision_bolsa_venta = ans["result"]["instrumento_venta"]["comision_bolsa_venta"]; this.fecha_siguiente_cupon_venta = ans["result"]["instrumento_venta"]["fecha_siguiente_cupon_venta"]; this.dias_vencimiento_venta = ans["result"]["instrumento_venta"]["dias_vencimiento_venta"]; this.dias_acumulados_venta = ans["result"]["instrumento_venta"]["dias_acumulados_venta"]; this.ytm_vencimiento_comision_porcentaje_venta = ans["result"]["instrumento_venta"][ "ytm_vencimiento_comision_porcentaje_venta" ]; this.ytm_vencimiento_porcentaje_venta = ans["result"]["instrumento_venta"][ "ytm_vencimiento_porcentaje_venta" ]; this.interes_acumulado_venta = ans["result"]["instrumento_venta"]["interes_acumulado_venta"]; this.interes_acumulado_porcentaje_venta = ans["result"]["instrumento_venta"][ "interes_acumulado_porcentaje_venta" ]; this.precio_sucio_porcentaje_venta = ans["result"]["instrumento_venta"]["precio_sucio_porcentaje_venta"]; this.valor_transado_venta = ans["result"]["instrumento_venta"]["valor_transado_venta"]; this.monto_recibir = ans["result"]["instrumento_venta"]["monto_recibir"]; // Resultado de la operacion this.dias_tenencia_total = ans["result"]["resultado_operacion"]["dias_tenencia_total"]; this.ganancia_perdida_capital = ans["result"]["resultado_operacion"]["ganancia_perdida_capital"]; this.ingresos_intereses = ans["result"]["resultado_operacion"]["ingresos_intereses"]; this.costos_totales = ans["result"]["resultado_operacion"]["costos_totales"]; this.ganancia_perdida_total = ans["result"]["resultado_operacion"]["ganancia_perdida_total"]; this.ganancia_perdida_capital_porcentaje = ans["result"]["resultado_operacion"][ "ganancia_perdida_capital_porcentaje" ]; this.intereses_porcentaje = ans["result"]["resultado_operacion"]["intereses_porcentaje"]; this.neto_antes_impuesto_porcentaje = ans["result"]["resultado_operacion"][ "neto_antes_impuesto_porcentaje" ]; this.neto_despues_impuesto_porcentaje = ans["result"]["resultado_operacion"][ "neto_despues_impuesto_porcentaje" ]; this.total_ingresos_recibidos = ans["result"]["resultado_operacion"]["total_ingresos_recibidos"]; // Proyecciones this.proyecciones = ans["result"]["proyecciones"]; if (this.proyecciones != undefined && this.proyecciones.length > 0) { let proyecciones_temp = this.proyecciones; this.consolidado_proyeccion = proyecciones_temp[proyecciones_temp.length - 1]; this.proyecciones = ans["result"]["proyecciones"]; } this.operation_result = true; this.dataSource.data = this.proyecciones; this.dataSource2.data = this.proyecciones; this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; // Obj this.bonosObject = { costo_cedeval: this.investmentProposalForm.value.costo_cedeval, costo_transferencia: this.investmentProposalForm.value .costo_transferencia, valor_nominal_compra: this.investmentProposalForm.value .valor_nominal_compra, precio_compra: this.investmentProposalForm.value.precio_compra, precio_vencimiento_compra: this.investmentProposalForm.value .precio_vencimiento_compra, cupon_porcentaje_compra: this.investmentProposalForm.value .cupon_porcentaje_compra, comision_casa_porcentaje_compra: this.investmentProposalForm.value .comision_casa_porcentaje_compra, comision_bolsa_porcentaje_compra: this.investmentProposalForm.value .comision_bolsa_porcentaje_compra, valor_nominal_venta: this.investmentProposalForm.value .valor_nominal_venta, precio_venta: this.investmentProposalForm.value.precio_venta, precio_vencimiento_venta: this.investmentProposalForm.value .precio_vencimiento_venta, cupon_porcentaje_venta: this.investmentProposalForm.value .cupon_porcentaje_venta, comision_casa_porcentaje_venta: this.investmentProposalForm.value .comision_casa_porcentaje_venta, comision_bolsa_porcentaje_venta: this.investmentProposalForm.value .comision_bolsa_porcentaje_venta, fecha_vencimiento_compra: this.f.fecha_vencimiento_compra.value .singleDate.formatted, fecha_ultima_cupon_compra: this.f.fecha_ultima_cupon_compra.value .singleDate.formatted, fecha_liquidacion_compra: this.f.fecha_liquidacion_compra.value .singleDate.formatted, fecha_vencimiento_venta: this.f.fecha_vencimiento_venta.value .singleDate.formatted, fecha_ultima_cupon_venta: this.f.fecha_ultima_cupon_venta.value .singleDate.formatted, fecha_liquidacion_venta: this.f.fecha_liquidacion_venta.value .singleDate.formatted, // Instrumento de compra comision_casa_compra: this.comision_casa_compra, comision_bolsa_compra: this.comision_bolsa_compra, fecha_siguiente_cupon_compra: this.fecha_siguiente_cupon_compra, dias_vencimiento_compra: this.dias_vencimiento_compra, dias_acumulados_compra: this.dias_acumulados_compra, ytm_vencimiento_porcentaje_compra: this .ytm_vencimiento_porcentaje_compra, ytm_vencimiento_comision_porcentaje_compra: this .ytm_vencimiento_comision_porcentaje_compra, interes_acumulado_compra: this.interes_acumulado_compra, interes_acumulado_porcentaje_compra: this .interes_acumulado_porcentaje_compra, precio_sucio_porcentaje_compra: this.precio_sucio_porcentaje_compra, valor_transado_compra: this.valor_transado_compra, monto_pagar: this.monto_pagar, fecha_inicio_vigencia: this.fecha_inicio_vigencia, // Instrumento de venta comision_casa_venta: this.comision_casa_venta, comision_bolsa_venta: this.comision_bolsa_venta, fecha_siguiente_cupon_venta: this.fecha_siguiente_cupon_venta, dias_vencimiento_venta: this.dias_vencimiento_venta, dias_acumulados_venta: this.dias_acumulados_venta, ytm_vencimiento_porcentaje_venta: this .ytm_vencimiento_porcentaje_venta, ytm_vencimiento_comision_porcentaje_venta: this .ytm_vencimiento_comision_porcentaje_venta, interes_acumulado_venta: this.interes_acumulado_venta, interes_acumulado_porcentaje_venta: this .interes_acumulado_porcentaje_venta, precio_sucio_porcentaje_venta: this.precio_sucio_porcentaje_venta, valor_transado_venta: this.valor_transado_venta, // Resultado de la operacion monto_recibir: this.monto_recibir, dias_tenencia_total: this.dias_tenencia_total, ganancia_perdida_capital: this.ganancia_perdida_capital, ingresos_intereses: this.ingresos_intereses, costos_totales: this.costos_totales, ganancia_perdida_total: this.ganancia_perdida_total, ganancia_perdida_capital_porcentaje: this .ganancia_perdida_capital_porcentaje, intereses_porcentaje: this.intereses_porcentaje, neto_antes_impuesto_porcentaje: this.neto_antes_impuesto_porcentaje, neto_despues_impuesto_porcentaje: this .neto_despues_impuesto_porcentaje, total_ingresos_recibidos: this.total_ingresos_recibidos, // Proyecciones proyecciones: this.proyecciones }; this.formDataService.setWork(this.bonosObject); Swal.close(); if (saveForm == true) { if (this.investmentID != undefined) { this.router.navigate(["/investment-proposal/complement-info"], { queryParams: { id: this.investmentID } }); } else { this.router.navigate(["/investment-proposal/complement-info"]); } } }, err => { Swal.fire({ icon: "error", title: "Error en el servidor", text: "No su pudo obtener la informacion" }); return false; } ); } goToPrevious() { this.submitted = true; if (this.investmentID != undefined) { this.router.navigate(["/investment-proposal/general-info"], { queryParams: { id: this.investmentID } }); } else { this.router.navigate(["/investment-proposal/general-info"]); } } goToNext(form: any) { this.getCalculations(form, true); } }