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";
import { CSVRecord } from "@app/models/csv-data";
import * as XLSX from "xlsx";

@Component({
  selector: "app-titulos",
  templateUrl: "./titulos.component.html"
})
export class TIT implements InstrumentComponent {
  title: string = "Titularización";
  @Input() data: any;
  @Input() summary: boolean;
  @Input() investmentID: string;

  displayedColumns: string[] = [
    "posicion",
    "plazo",
    "fecha_pago",
    "cuota",
    "amortizacion_porcentaje",
    "amortizacion_capital",
    "ingreso_bruto",
    "ingreso_neto",
    "renta",
    "saldo"
  ];

  @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;
  m_fecha_emision: IMyDateModel;

  submitted: boolean = false;
  instrument_exists: boolean;
  instrument_work: any = [];
  financials: any;
  base_types: any;

  proyecciones: any;

  titulosObject: {};
  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;
  percentages: any;
  amortizaciones: string[];
  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;
  ejecuciones = [
    { codigo: 1, nombre: "Completa" },
    { codigo: 0, nombre: "Parcial" }
  ];
  tipoEjecucion: number = 0;
  precio_compra: any;
  precio_venta: 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 != ""
    ) {
      if (
        this.instrument_work["valor_nominal_venta"] != undefined &&
        +this.instrument_work["valor_nominal_venta"] > 0
      ) {
        this.tipoEjecucion = 1;
      }
      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.instrument_exists) {
      this.amortizaciones = this.instrument_work.amortizacion_porcentajes;
    }
    if (
      this.operation_results_work != undefined &&
      this.operation_results_work != ""
    ) {
      this.operation_result = true;
    }

    this.investmentProposalForm = this.formBuilder.group({
      ejecucion: [this.instrument_exists ? "" : this.tipoEjecucion],

      renta_porcentaje: [
        this.instrument_exists ? "" : this.instrument_work.renta_porcentaje,
        [
          Validators.required,
          Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
        ]
      ],
      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
              }
            }
      ],
      fecha_emision: [
        this.instrument_exists
          ? ""
          : {
              isRange: false,
              singleDate: {
                jsDate: parse(
                  this.instrument_work.fecha_emision,
                  "dd/MM/yyyy",
                  new Date()
                ),
                formatted: this.instrument_work.fecha_emision
              }
            },
        Validators.required
      ]
    });
  }

  public records: any[] = [];
  @ViewChild("csvReader", null) csvReader: any;

  uploadListener($event: any): void {
    /* wire up file reader */
    const target: DataTransfer = $event.target;
    if (target.files.length !== 1) {
      throw new Error("Cannot use multiple files");
    }
    const reader: FileReader = new FileReader();
    reader.readAsBinaryString(target.files[0]);
    reader.onload = (e: any) => {
      /* create workbook */
      const binarystr: string = e.target.result;
      const wb: XLSX.WorkBook = XLSX.read(binarystr, { type: "binary" });

      /* selected the first sheet */
      const wsname: string = wb.SheetNames[0];
      const ws: XLSX.WorkSheet = wb.Sheets[wsname];

      /* save data */
      const data = XLSX.utils.sheet_to_json(ws, { header: 1 }); // to get 2d array pass 2nd parameter as object {header: 1}
      const data2 = data.toString().split(",");
      data2.shift();
      this.amortizaciones = data2;
    };
  }

  get f() {
    return this.investmentProposalForm.controls;
  }

  save(form: any): boolean {
    if (!form.valid) {
      return false;
    }

    this.formDataService.setWork(this.titulosObject);
    return true;
  }

  getCalculations(form: any, saveForm: boolean) {
    this.submitted = true;

    if (!form.valid) {
      return false;
    }
    if (this.amortizaciones == undefined && this.proyecciones == undefined) {
      Swal.fire({
        icon: "error",
        title: "Error de validación",
        text: "Debe ingresar un archivo con los porcentajes de amortización"
      });
      return false;
    }

    Swal.fire({
      allowOutsideClick: false,
      icon: "info",
      text: "Espere por favor..."
    });
    Swal.showLoading();
    this.instrumentCalcService
      .titularizacionCalc(
        "TIT", // Codigo del instrumento
        {
          id_tipo_base: +this.general.base_anual,
          id_formato_ingreso: +this.general.formato_ingreso,
          id_periodicidad: +this.general.periodicidad
        },
        {
          completo: this.tipoEjecucion,
          renta_porcentaje: +this.f.renta_porcentaje.value,
          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,

          fecha_vencimiento_compra:
            this.f.fecha_vencimiento_compra.value == ""
              ? ""
              : this.f.fecha_vencimiento_compra.value.singleDate.formatted,
          fecha_ultima_cupon_compra:
            this.f.fecha_ultima_cupon_compra.value == ""
              ? ""
              : this.f.fecha_ultima_cupon_compra.value.singleDate.formatted,
          fecha_liquidacion_compra:
            this.f.fecha_liquidacion_compra.value == ""
              ? ""
              : this.f.fecha_liquidacion_compra.value.singleDate.formatted,

          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_venta:
            this.f.fecha_vencimiento_venta.value == ""
              ? ""
              : this.f.fecha_vencimiento_venta.value.singleDate.formatted,
          fecha_ultima_cupon_venta:
            this.f.fecha_ultima_cupon_venta.value == ""
              ? ""
              : this.f.fecha_ultima_cupon_venta.value.singleDate.formatted,
          fecha_liquidacion_venta:
            this.f.fecha_liquidacion_venta.value == ""
              ? ""
              : this.f.fecha_liquidacion_venta.value.singleDate.formatted,
          fecha_emision: this.f.fecha_emision.value.singleDate.formatted,
          amortizacion_porcentajes: this.amortizaciones
        }
      )
      .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"];

          if (this.tipoEjecucion == 1) {
            // 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.operation_result = true;
            this.operation_results_work = ans["result"]["resultado_operacion"];
          }

          // Proyecciones
          this.proyecciones = ans["result"]["proyecciones"];
          if (this.proyecciones != undefined && this.proyecciones.length > 0) {
            this.hasProjections = true;
            let proyecciones_temp = this.proyecciones;
            this.consolidado_proyeccion =
              proyecciones_temp[proyecciones_temp.length - 1];
            this.proyecciones = ans["result"]["proyecciones"];
          }

          this.dataSource.data = this.proyecciones.slice(0, -1);
          this.dataSource2.data = this.proyecciones.slice(0, -1);

          this.dataSource.paginator = this.paginator;
          this.dataSource.sort = this.sort;

          // Obj
          this.titulosObject = {
            completo: this.tipoEjecucion,
            cancelado: this.tipoEjecucion,
            renta_porcentaje: this.investmentProposalForm.value
              .renta_porcentaje,
            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,

            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_emision: this.f.fecha_emision.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,

            // 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,

            amortizacion_porcentajes: this.amortizaciones,-**/
            // Proyecciones
            proyecciones: this.proyecciones
          };

          if (this.tipoEjecucion == 1) {
            this.titulosObject[
              "valor_nominal_venta"
            ] = this.investmentProposalForm.value.valor_nominal_venta;
            this.titulosObject[
              "precio_venta"
            ] = this.investmentProposalForm.value.precio_venta;
            this.titulosObject[
              "precio_vencimiento_venta"
            ] = this.investmentProposalForm.value.precio_vencimiento_venta;
            this.titulosObject[
              "cupon_porcentaje_venta"
            ] = this.investmentProposalForm.value.cupon_porcentaje_venta;
            this.titulosObject[
              "comision_casa_porcentaje_venta"
            ] = this.investmentProposalForm.value.comision_casa_porcentaje_venta;
            this.titulosObject[
              "comision_bolsa_porcentaje_venta"
            ] = this.investmentProposalForm.value.comision_bolsa_porcentaje_venta;
            this.titulosObject[
              "fecha_vencimiento_venta"
            ] = this.f.fecha_vencimiento_venta.value.singleDate.formatted;
            this.titulosObject[
              "fecha_ultima_cupon_venta"
            ] = this.f.fecha_ultima_cupon_venta.value.singleDate.formatted;
            this.titulosObject[
              "fecha_liquidacion_venta"
            ] = this.f.fecha_liquidacion_venta.value.singleDate.formatted;

            // Instrumento de venta

            this.titulosObject[
              "comision_casa_venta"
            ] = this.comision_casa_venta;
            this.titulosObject[
              "comision_bolsa_venta"
            ] = this.comision_bolsa_venta;

            this.titulosObject[
              "fecha_siguiente_cupon_venta"
            ] = this.fecha_siguiente_cupon_venta;
            this.titulosObject[
              "dias_vencimiento_venta"
            ] = this.dias_vencimiento_venta;
            this.titulosObject[
              "dias_acumulados_venta"
            ] = this.dias_acumulados_venta;
            this.titulosObject[
              "ytm_vencimiento_porcentaje_venta"
            ] = this.ytm_vencimiento_porcentaje_venta;
            this.titulosObject[
              "ytm_vencimiento_comision_porcentaje_venta"
            ] = this.ytm_vencimiento_comision_porcentaje_venta;

            this.titulosObject[
              "interes_acumulado_venta"
            ] = this.interes_acumulado_venta;
            this.titulosObject[
              "interes_acumulado_porcentaje_venta"
            ] = this.interes_acumulado_porcentaje_venta;
            this.titulosObject[
              "precio_sucio_porcentaje_venta"
            ] = this.precio_sucio_porcentaje_venta;
            this.titulosObject[
              "valor_transado_venta"
            ] = this.valor_transado_venta;

            this.titulosObject["monto_recibir"] = this.monto_recibir;
          }

          this.formDataService.setWork(this.titulosObject);
          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);
  }

  toggle_ejecucion(input: any) {
    this.tipoEjecucion = +input;
    this.setValidators();
  }

  setValidators() {
    const precio_venta = this.investmentProposalForm.get("precio_venta");

    const valor_nominal_venta = this.investmentProposalForm.get(
      "valor_nominal_venta"
    );
    const precio_vencimiento_venta = this.investmentProposalForm.get(
      "precio_vencimiento_venta"
    );
    const cupon_porcentaje_venta = this.investmentProposalForm.get(
      "cupon_porcentaje_venta"
    );
    const comision_casa_porcentaje_venta = this.investmentProposalForm.get(
      "comision_casa_porcentaje_venta"
    );
    const comision_bolsa_porcentaje_venta = this.investmentProposalForm.get(
      "comision_bolsa_porcentaje_venta"
    );
    const fecha_ultima_cupon_venta = this.investmentProposalForm.get(
      "fecha_ultima_cupon_venta"
    );
    const fecha_liquidacion_venta = this.investmentProposalForm.get(
      "fecha_liquidacion_venta"
    );
    const fecha_vencimiento_venta = this.investmentProposalForm.get(
      "fecha_vencimiento_venta"
    );

    if (this.tipoEjecucion == 1) {
      precio_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);

      valor_nominal_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);
      precio_vencimiento_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);
      cupon_porcentaje_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);
      comision_casa_porcentaje_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);
      comision_bolsa_porcentaje_venta.setValidators([
        Validators.required,
        Validators.pattern(/^[+]?([0-9]+(?:[\.][0-9]*)?|\.[0-9]+)$/)
      ]);
      fecha_ultima_cupon_venta.setValidators([Validators.required]);
      fecha_liquidacion_venta.setValidators([Validators.required]);
      fecha_vencimiento_venta.setValidators([Validators.required]);
    } else {
      precio_venta.setValidators(null);

      valor_nominal_venta.setValidators(null);
      precio_vencimiento_venta.setValidators(null);
      cupon_porcentaje_venta.setValidators(null);
      comision_casa_porcentaje_venta.setValidators(null);
      comision_bolsa_porcentaje_venta.setValidators(null);
      fecha_ultima_cupon_venta.setValidators(null);
      fecha_liquidacion_venta.setValidators(null);
      fecha_vencimiento_venta.setValidators(null);
    }
    precio_venta.updateValueAndValidity();

    valor_nominal_venta.updateValueAndValidity();
    precio_vencimiento_venta.updateValueAndValidity();
    cupon_porcentaje_venta.updateValueAndValidity();
    comision_casa_porcentaje_venta.updateValueAndValidity();
    comision_bolsa_porcentaje_venta.updateValueAndValidity();
    fecha_ultima_cupon_venta.updateValueAndValidity();
    fecha_liquidacion_venta.updateValueAndValidity();
    fecha_vencimiento_venta.updateValueAndValidity();
  }
}
