コード例 #1
0
        private void AnalisisCapitalAseguradora()
        {
            double capital         = 0;
            int    autosAsegurados = 0;
            double mensualidades   = 0;
            double prima           = Convert.ToDouble(tbPrima.Text);
            string idaseguradora;
            int    idase      = 1;
            int    choquesMes = 0;
            double costoMes   = 0;

            if (!cbAnalisisElemento.Items.Contains(cbAnalisisElemento.Text))
            {
                MessageBox.Show("Seleccione una aseguradora");
                return;
            }

            idaseguradora = Comun.idCombo(cbAnalisisElemento.SelectedItem.ToString());
            idase         = Convert.ToInt32(idaseguradora.Substring(1));

            // Conteo de automoviles asegurados y suma de ingresos mensuales por sus primas
            for (int i = 0; i < Comun.baseDatos.Tables["automoviles"].Rows.Count; i++)
            {
                if (idaseguradora == Comun.baseDatos.Tables["automoviles"].Rows[i][4].ToString())
                {
                    mensualidades += prima * Convert.ToInt32(Comun.baseDatos.Tables["automoviles"].Rows[i][3]);
                    autosAsegurados++;
                }
            }

            DateTime fechaini = ObtenerFecha(tbFechaIni.Text);
            DateTime fechafin = ObtenerFecha(tbFechaFin.Text);

            List <infocapital> infoCapital = new List <infocapital>();

            choquesMes = 0;
            DateTime fecha = new DateTime(fechaini.Year, fechaini.Month, 1);
            DateTime ultimaFechaGuardada = fecha;
            Random   aleatorio           = new Random();

            for (int i = 0; i < Comun.baseDatos.Tables["choques"].Rows.Count; i++)
            {
                // Solo autos con esta aseguradora
                DataRow  fila        = Comun.baseDatos.Tables["choques"].Rows[i];
                DateTime fechachoque = ObtenerFecha(fila["fecha"].ToString());

                if (fechachoque.CompareTo(fechafin) > 0)
                {
                    // Informe de mes finalizado
                    capital += mensualidades - costoMes;
                    infoCapital.Add(new infocapital(fecha.ToString("MMMyyyy"), choquesMes, costoMes, capital));
                    ultimaFechaGuardada = fecha;
                    costoMes            = 0;
                    choquesMes          = 0;
                    break;
                }

                if (numAseguradora(fila["idajustadorx"].ToString()) != idase)
                {
                    continue;
                }

                if (fechachoque.CompareTo(fechaini) < 0)
                {
                    continue;
                }

                // Busqueda por Mes
                if (fechachoque.CompareTo(fecha) >= 0)
                {
                    if (fechachoque.CompareTo(fecha.AddMonths(1)) < 0)
                    {
                        choquesMes++;
                        int idauto = Convert.ToInt32(fila["idautomovilx"].ToString().Substring(1)) - 1;
                        costoMes += 15000 + Convert.ToDouble(fila["intensidad"].ToString()) * Convert.ToInt32(Comun.baseDatos.Tables["automoviles"].Rows[idauto][3]); //aleatorio.Next(Convert.ToInt32(mensualidades * 0.1 / 40), Convert.ToInt32(mensualidades * 0.5));
                    }
                    else
                    {
                        // Informe de mes finalizado
                        capital += mensualidades - costoMes;
                        infoCapital.Add(new infocapital(fecha.ToString("MMMyyyy"), choquesMes, costoMes, capital));
                        ultimaFechaGuardada = fecha;
                        costoMes            = 0;
                        choquesMes          = 0;
                        fecha = fecha.AddMonths(1);
                        i--;    // Busca la fecha adecuada para este registro
                        continue;
                    }
                }
            }

            // Ultimos meses sin actividad
            ultimaFechaGuardada = ultimaFechaGuardada.AddMonths(1);
            while (ultimaFechaGuardada.CompareTo(fechafin) <= 0)
            {
                // Ultimo mes sin choques hasta la fecha fin indicada por el usuario
                capital += mensualidades;
                infoCapital.Add(new infocapital(ultimaFechaGuardada.ToString("MMMyyyy"), 0, 0, capital));
                ultimaFechaGuardada = ultimaFechaGuardada.AddMonths(1);
            }

            if (ultimaFechaGuardada.Month == fechafin.Month && ultimaFechaGuardada.Year == fechafin.Year)
            {
                capital += mensualidades;
                infoCapital.Add(new infocapital(ultimaFechaGuardada.ToString("MMMyyyy"), 0, 0, capital));
            }
            // Fin de no actividad en los ultimos meses

            chart.Series.Clear();
            chart.DataBindTable(infoCapital, "mes");
            chart.ChartAreas[0].AxisY.LabelStyle.Format = "{0:0,}K";
            chart.ChartAreas[0].AxisX.Minimum           = 1;
            chart.ChartAreas[0].AxisX.Maximum           = infoCapital.Count;
            chart.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            //chart.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            chart.Series[2].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            string ruta = Application.StartupPath + "\\grafico.bmp";

            if (System.IO.File.Exists(ruta))
            {
                System.IO.File.Delete(ruta);
            }
            chart.SaveImage(ruta, System.Drawing.Imaging.ImageFormat.Bmp);

            DataTable dt = infoTabla(cbAnalisisElemento.SelectedItem.ToString(), infoCapital);

            (new frmVisualizadorTabla(cbAnalisisElemento.SelectedItem.ToString(), dt)).Show();

            // +++++++++++++++++++++++++++++++++++++++++++++    Crear Informe
            RichTextBox rtb     = new RichTextBox();
            DateTime    fechaId = DateTime.Now;

            rtb.AppendText("Informe Mensual de " + cbAnalisisTipo.Text + " " + cbAnalisisElemento.Text + "\n\n");
            rtb.AppendText("    Tomado el " + fechaId.ToLongDateString() + "    " + fechaId.ToLongTimeString() + "\n\n");

            rtb.AppendText("    Periodo del " + tbFechaIni.Text + " al " + tbFechaFin.Text + "\n\n\n");

            rtb.AppendText("    Factor de cobro mensual por el precio de cada automovil asegurado: " + tbPrima.Text + "\n\n    Ingreso Mensual: " + mensualidades.ToString("N2") + "    Automoviles asegurados: " + autosAsegurados + "\n\n\n");

            Bitmap grafico = new Bitmap(ruta);

            Clipboard.SetDataObject(grafico);
            DataFormats.Format graficoConFormato = DataFormats.GetFormat(DataFormats.Bitmap);
            rtb.Paste(graficoConFormato);
            Clipboard.Clear();
            grafico.Dispose();
            System.IO.File.Delete(ruta);

            dgv.Columns.Clear();
            dgv.DataSource = dt;
            rtb.Font       = new Font("Consolas", 9.0f, FontStyle.Regular);
            rtb.AppendText("\n\n" + TablaTextoConDGV(dgv, 0) + "\n\n");

            (new frmInforme(fechaId, rtb.Rtf)).Show();
        }
コード例 #2
0
        private void AnalisisChoques(string mensaje, int ubicacion, string tablaNombre, string campoNombre)
        {
            int    choquesMes   = 0;
            double costoMes     = 0;
            int    meses        = 0;
            double costoTotal   = 0;
            int    choquesTotal = 0;

            if (!cbAnalisisElemento.Items.Contains(cbAnalisisElemento.Text))
            {
                MessageBox.Show("Seleccione " + mensaje);
                return;
            }

            string estado = cbAnalisisElemento.SelectedItem.ToString();

            if (tablaNombre == "pilotos" || tablaNombre == "ajustadores")
            {
                estado = Comun.idCombo(estado);
            }

            DateTime fechaini = ObtenerFecha(tbFechaIni.Text);
            DateTime fechafin = ObtenerFecha(tbFechaFin.Text);

            List <infochoque> infoChoque = new List <infochoque>();

            choquesMes = 0;
            DateTime fecha = new DateTime(fechaini.Year, fechaini.Month, 1);
            DateTime ultimaFechaGuardada = fecha;

            for (int i = 0; i < Comun.baseDatos.Tables["choques"].Rows.Count; i++)
            {
                // Solo autos con esta aseguradora
                DataRow  fila        = Comun.baseDatos.Tables["choques"].Rows[i];
                DateTime fechachoque = ObtenerFecha(fila["fecha"].ToString());

                if (fechachoque.CompareTo(fechafin) > 0)
                {
                    // Informe de mes finalizado
                    infoChoque.Add(new infochoque(fecha.ToString("MMMyyyy"), choquesMes, costoMes));

                    meses++;
                    choquesTotal += choquesMes;
                    costoTotal   += costoMes;

                    ultimaFechaGuardada = fecha;
                    costoMes            = 0;
                    choquesMes          = 0;
                    break;
                }

                if (fechachoque.CompareTo(fechaini) < 0)
                {
                    continue;
                }

                //  if (baseDatos.Tables["lugares"].Rows[numAseguradora(fila["idlugar"].ToString())][2].ToString() != estado)

                if (tablaNombre == "pilotos" || tablaNombre == "ajustadores")
                {
                    if (fila[campoNombre].ToString() != estado)
                    {
                        continue;
                    }
                }
                else if (Comun.baseDatos.Tables[tablaNombre].Rows[numAseguradora(fila[campoNombre].ToString())][ubicacion].ToString() != estado)
                {
                    continue;
                }

                // Busqueda por Mes
                if (fechachoque.CompareTo(fecha) >= 0)
                {
                    if (fechachoque.CompareTo(fecha.AddMonths(1)) < 0)
                    {
                        choquesMes++;
                        int idauto = Convert.ToInt32(fila["idautomovilx"].ToString().Substring(1)) - 1;
                        costoMes += 15000 + Convert.ToDouble(fila["intensidad"].ToString()) * Convert.ToInt32(Comun.baseDatos.Tables["automoviles"].Rows[idauto][3]); //aleatorio.Next(Convert.ToInt32(mensualidades * 0.1 / 40), Convert.ToInt32(mensualidades * 0.5));
                    }
                    else
                    {
                        // Informe de mes finalizado
                        infoChoque.Add(new infochoque(fecha.ToString("MMMyyyy"), choquesMes, costoMes));

                        meses++;
                        choquesTotal += choquesMes;
                        costoTotal   += costoMes;

                        ultimaFechaGuardada = fecha;
                        costoMes            = 0;
                        choquesMes          = 0;
                        fecha = fecha.AddMonths(1);
                        i--;    // Busca la fecha adecuada para este registro
                        continue;
                    }
                }
            }

            // Ultimos meses sin actividad
            ultimaFechaGuardada = ultimaFechaGuardada.AddMonths(1);
            while (ultimaFechaGuardada.CompareTo(fechafin) <= 0)
            {
                // Ultimo mes sin choques hasta la fecha fin indicada por el usuario
                infoChoque.Add(new infochoque(ultimaFechaGuardada.ToString("MMMyyyy"), 0, 0));

                meses++;

                ultimaFechaGuardada = ultimaFechaGuardada.AddMonths(1);
            }

            if (ultimaFechaGuardada.Month == fechafin.Month && ultimaFechaGuardada.Year == fechafin.Year)
            {
                infoChoque.Add(new infochoque(ultimaFechaGuardada.ToString("MMMyyyy"), 0, 0));

                meses++;
            }
            // Fin de no actividad en los ultimos meses

            chart.Series.Clear();
            chart.DataBindTable(infoChoque, "mes");
            chart.ChartAreas[0].AxisY.LabelStyle.Format = "{0:0,}K";
            chart.ChartAreas[0].AxisX.Minimum           = 1;
            chart.ChartAreas[0].AxisX.Maximum           = infoChoque.Count;
            chart.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            //chart.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

            //string ruta = Application.StartupPath + "\\grafico_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".bmp";
            string ruta = Application.StartupPath + "\\grafico.bmp";

            if (System.IO.File.Exists(ruta))
            {
                System.IO.File.Delete(ruta);
            }
            chart.SaveImage(ruta, System.Drawing.Imaging.ImageFormat.Bmp);

            DataTable dt = infoTabla(cbAnalisisElemento.SelectedItem.ToString(), infoChoque);

            (new frmVisualizadorTabla(cbAnalisisElemento.SelectedItem.ToString(), dt)).Show();

            // +++++++++++++++++++++++++++++++++++++++++++++    Crear Informe
            RichTextBox rtb     = new RichTextBox();
            DateTime    fechaId = DateTime.Now;

            rtb.AppendText("Informe Mensual de " + cbAnalisisTipo.Text + " " + cbAnalisisElemento.Text + "\n\n");
            rtb.AppendText("    Tomado el " + fechaId.ToLongDateString() + "    " + fechaId.ToLongTimeString() + "\n\n");
            rtb.AppendText("    Periodo del " + tbFechaIni.Text + " al " + tbFechaFin.Text + "\n\n\n");
            rtb.AppendText("    Meses: " + meses + "    Choques: " + choquesTotal + "    Promedio mensual: " + (choquesTotal / (1.0 + meses)).ToString("N2") + "\n");
            rtb.AppendText("    Costo Total: " + costoTotal.ToString("N2") + "    Promedio mensual: " + (costoTotal / (meses)).ToString("N2") + "\n\n\n");

            Bitmap grafico = new Bitmap(ruta);

            Clipboard.SetDataObject(grafico);
            DataFormats.Format graficoConFormato = DataFormats.GetFormat(DataFormats.Bitmap);
            rtb.Paste(graficoConFormato);
            Clipboard.Clear();
            grafico.Dispose();
            System.IO.File.Delete(ruta);

            dgv.Columns.Clear();
            dgv.DataSource = dt;
            rtb.Font       = new Font("Consolas", 9.0f, FontStyle.Regular);
            rtb.AppendText("\n\n" + TablaTextoConDGV(dgv, 0) + "\n\n");

            (new frmInforme(fechaId, rtb.Rtf)).Show();
        }