Ejemplo n.º 1
0
        public bool GenerarSimulacion()
        {
            bool   success = true;
            string msgc, msgp;

            int     liResultado;
            string  ltComando;
            string  ltMensaje = "";
            Decimal SumaPrin, SumaSec, oto1, oto2;
            Decimal grp1, grp2, resv_base, resv_adic;
            Decimal dispo_base, dispo_adic;

            this.iFlagCapitulo3b5 = 0;

            // sfv  v4 Capitulo 3B5

            TipoProducto  tipoprod = new TipoProducto(dataConnectionString);
            GrupoProducto grupprod = new GrupoProducto(dataConnectionString);
            Capitulo3b5   cap3b5   = new Capitulo3b5(dataConnectionString);

            string  tip70  = this.tTipoProducto;
            Decimal mont70 = Convert.ToDecimal(this.dMontoAfecta);
            String  per70  = this.tNumeroCliente;

            this.bSubyacenteAsume70 = false;
            if (1 == tipoprod.ObtenerModoAfectacion(this.tTipoProducto, this.tTipoProdSuby, "sbyasume70"))
            {
                tip70  = this.tTipoProdSuby;
                mont70 = Convert.ToDecimal(this.dMontoGarantia);
                this.bSubyacenteAsume70 = true;
                per70 = this.tNumeroPerSuby;
            }
            this.dMontoAfe70  = (double)mont70;
            this.personaAfe70 = per70;
            // .
            liResultado = cap3b5.Obtener(DateTime.Now);
            if (liResultado == 0)
            {
                // margen  70 Limite Global
                if (grupprod.IsTipInGrupo(tip70, "70MAIN"))
                {
                    // If chkMargenAdicional.Value = True Then
                    SumaPrin = mont70;
                    SumaSec  = 0;
                    if (grupprod.IsTipInGrupo(tip70, "70ADIC"))
                    {
                        SumaSec = mont70;
                    }
                    grp1      = Convert.ToDecimal(cap3b5.MontoReserva70Pri) + Convert.ToDecimal(cap3b5.MontoUtiliza70Pri) + SumaPrin;
                    grp2      = Convert.ToDecimal(cap3b5.MontoReserva70Sec) + Convert.ToDecimal(cap3b5.MontoUtiliza70Sec) + SumaSec;
                    oto1      = Convert.ToDecimal(cap3b5.MontoOtorgado70); oto2 = Convert.ToDecimal(cap3b5.MontoOtorgado70Adi);
                    resv_base = Convert.ToDecimal(cap3b5.MontoReservado70); resv_adic = Convert.ToDecimal(cap3b5.MontoReservado70Adi);

                    if (oto1 - grp1 >= 0)
                    {
                        resv_base += mont70;
                        resv_adic += 0;
                        dispo_base = oto1 - grp1;
                        dispo_adic = oto2;
                    }
                    else if (oto1 - (grp1 - grp2) >= 0)
                    {
                        if (oto1 - grp1 < 0)
                        {
                            resv_base += (SumaPrin - SumaSec);
                            resv_adic += SumaSec;
                            dispo_base = 0;
                            dispo_adic = oto2 - (grp1 - oto1);
                        }
                        else
                        {
                            resv_base += (SumaPrin - SumaSec);
                            resv_adic += SumaSec;
                            dispo_base = 0;
                            dispo_adic = oto2 + oto1 - grp1;
                        }
                    }
                    else
                    {
                        resv_base += (SumaPrin - SumaSec);
                        resv_adic += SumaSec;
                        dispo_base = oto1 - grp1;
                        dispo_adic = oto2 + oto1 - grp1;
                    }
                    cap3b5.MontoReserva70Pri   += (double)SumaPrin;
                    cap3b5.MontoReserva70Sec   += (double)SumaSec;
                    cap3b5.MontoReservado70     = (double)resv_base;
                    cap3b5.MontoReservado70Adi  = (double)resv_adic;
                    cap3b5.MontoDisponible70    = (double)dispo_base;
                    cap3b5.MontoDisponible70Adi = (double)dispo_adic;
                    cap3b5.SumaPrin             = (double)SumaPrin;
                    cap3b5.SumaSec = (double)SumaSec;
                    cap3b5.Suma70  = (double)SumaPrin;
                    // Se Afecta margen del 70% del patrimonio efectivo (siempre)
                    this.iFlagCapitulo3b5 += 1;
                    // cap3b5.MontoReservado70 = cap3b5.MontoReservado70 + gSimulacion.dMontoDolares
                    // cap3b5.MontoDisponible70 = cap3b5.MontoOtorgado70 - (cap3b5.MontoUtilizado70 + cap3b5.MontoReservado70)

                    if (cap3b5.SumaSec > 0)
                    {
                    }
                }
                // margen 30 Limite Grupal
                if (grupprod.IsTipInGrupo(tip70, "30PERC"))
                {
                    // If chkAfecta30.Value = True Then
                    // Afecta margen del 30% del patrimonio efectivo
                    // gSimulacion.iFlagCapitulo3b5 = 2
                    this.iFlagCapitulo3b5   += 10;
                    cap3b5.MontoReservado30 += (double)mont70;
                    cap3b5.MontoDisponible30 = cap3b5.MontoOtorgado30 - (cap3b5.MontoUtilizado30 + cap3b5.MontoReservado30);
                    cap3b5.Suma30            = (double)mont70;
                }
                // margen 15 Operaciones Tipo G
                if (grupprod.IsTipInGrupo(tip70, "15PERC"))
                {
                    // If chkAfecta15.Value = True Then
                    // Afecta margen del 15% del patrimonio efectivo
                    this.iFlagCapitulo3b5   += 100;
                    cap3b5.MontoReservado15 += (double)mont70;
                    cap3b5.MontoDisponible15 = cap3b5.MontoOtorgado15 - (cap3b5.MontoUtilizado15 + cap3b5.MontoReservado15);
                    cap3b5.Suma15            = (double)mont70;

                    // sfv
                }
                // Cap 8 1o/11 RAN
                if (grupprod.IsTipInGrupo(tip70, "810RAN"))
                {
                    // If chkAfecta15.Value = True Then
                    // Afecta margen del 37.5% del patrimonio efectivo
                    this.iFlagCapitulo3b5     += 1000;
                    cap3b5.MontoReservadoCap8 += (double)mont70;
                    cap3b5.MontoDisponibleCap8 = cap3b5.MontoOtorgadoCap8 - (cap3b5.MontoUtilizadoCap8 + cap3b5.MontoReservadoCap8);
                    cap3b5.Suma08 = (double)mont70;

                    // sfv
                }
            }
            else if (liResultado == 3)
            {
                ltMensaje = "No existen márgenes del 30% y 70% Aplicables" + "\r" + "Informe al administrador del sistema";
                comments.Add("Capitulo3b5", ltMensaje);
            }
            else
            {
                ltMensaje = "Error al obtener los márgenes del 30% y 70%";
                errlist.AddRange(cap3b5.errlist);
                success = false;
            }
            this.lcapCapitulo3b5 = cap3b5;


            // Limites individuales
            StringBuilder sb = new StringBuilder();

            sb.Append("exec sva_cle_sim_lim_idv_ctz '");
            sb.Append(Global.ConvertirRutNro(this.tNumeroCliente));
            sb.Append("', '");
            sb.Append(Global.ConvertirRutNro(this.tNumeroCasaMatriz));
            sb.Append("', ");
            sb.Append(Convert.ToString(this.iCodigoPais));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.iCodigoCateg));
            sb.Append(", '");
            sb.Append(this.tTipoProducto);
            sb.Append("', ");
            sb.Append(Convert.ToString(this.iCodigoProducto));
            sb.Append(", '");
            sb.Append(Global.ConvertirRutNro(this.tNumeroPerSuby));
            sb.Append("', '");
            sb.Append(this.tTipoProdSuby);
            sb.Append("', ");
            sb.Append(Convert.ToString(this.iCodigoPaisSuby));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.iCodigoCategSuby));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.iCargoCasaMatriz));
            sb.Append(", ");
            sb.Append((this.iEsNotaEstruct ? 1 : 0));
            sb.Append(", ");
            sb.Append((this.iEsOperPuntual ? 1 : 0));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.dMontoAfecta).Replace(",", "."));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.iDiasPlazo));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.sPorcGarantia).Replace(",", "."));
            sb.Append(", ");
            sb.Append(Convert.ToString(this.dMontoGarantia).Replace(",", "."));
            ltComando = sb.ToString();

            msgc = string.Empty; msgp = string.Empty; this.iPlazoMinimo = -1;
            using (DataFinder db = new DataFinder(dataConnectionString))
            {
                DataSet dset = db.GetDataSet(ltComando);
                if (db.errlist.Count == 0)
                {
                    this.lrecLimites = dset.Tables[0];
                    foreach (DataRow row in this.lrecLimites.Rows)
                    {
                        if ((short)row["afe_plz_htd"] == 2)
                        {
                            msgc += "\r\n" + "Plazo Impedido por -> " + row["gls_dscrn_limte_indvd"].ToString();
                            this.iPlazoRestringido = true;
                            if (this.iPlazoMinimo < 0 || this.iPlazoMinimo > (int)row["afe_plz_can"])
                            {
                                this.iPlazoMinimo = 0;
                            }
                        }
                        else if ((short)row["afe_plz_htd"] == 1)
                        {
                            if ((int)row["delta_plazo"] < 0)
                            {
                                msgp += "\r\n" + "Plazo Restringido: Maximo = " + row["afe_plz_can"].ToString() + " días -> " + row["gls_dscrn_limte_indvd"].ToString();
                            }
                            if (this.iPlazoMinimo < 0 || this.iPlazoMinimo > (int)row["afe_plz_can"])
                            {
                                this.iPlazoMinimo = (int)row["afe_plz_can"];
                            }
                        }
                    }
                }
                else
                {
                    errlist.AddRange(db.errlist);
                    success = false;
                }
            }
            this.tPlzRestringido = msgc;
            this.tPlzAcotado     = msgp;
            //this.lrecLimites.Requery();

            cap3b5   = null;
            grupprod = null;
            tipoprod = null;
            PresentaSimulacion();

            return(success);
        }