private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         int      index      = dgvProducto.SelectedRows[0].Index;
         int      idProducto = int.Parse(dgvProducto.Rows[index].Cells[0].Value.ToString());
         Producto prod       = Producto.GetProductoById(idProducto);
         int      numMeses   = int.Parse(tbMeses.Text);
         if (bPersecución.Checked)
         {
             EstrategiaPersecucion persecucion = new EstrategiaPersecucion(prod, numMeses);
             List <Fila>           resultado   = persecucion.getPlanAgregado();
             int numPeriodo = int.Parse(tbMeses.Text);
             rellenarPlaneacion(resultado, numPeriodo);
             lTotal.Text = "Total: " + Math.Round(persecucion.CostoTotal, 2);
         }
         else if (bFuerzasNiveladas.Checked)
         {
             FuerzaNivelada fn        = new FuerzaNivelada(numMeses, prod, Empresa.GetEmpresa());
             List <Fila>    resultado = fn.getPlanAgregado();
             rellenarPlaneacion(resultado, numMeses);
             lTotal.Text = "Total: " + Math.Round(fn.CostoTotal, 2);
         }
         else if (bOutsourcing.Checked)
         {
             Outsourcing os        = new Outsourcing(prod, numMeses);
             List <Fila> resultado = os.getPlanAgregado();
             rellenarPlaneacion(resultado, numMeses);
             lTotal.Text = "Total: " + Math.Round(os.CostoTotal, 2);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            List <double> demanda     = new List <double>();
            List <double> diasHabiles = new List <double>();
            Producto      producto    = new Producto();
            Empresa       empresa     = new Empresa();
            int           numPeriodos = dtg_semanas.Rows[0].Cells.Count;

            for (int j = 0; j < numPeriodos; j++)
            {
                if (j == 0)
                {
                    //se evita que entre en los campos de Demada y Dias Laborados
                }
                else
                {
                    try
                    {
                        string sdemanda     = dtg_semanas.Rows[0].Cells[j].Value.ToString();
                        string sdiasHabiles = dtg_semanas.Rows[1].Cells[j].Value.ToString();
                        demanda.Add(double.Parse(sdemanda));
                        diasHabiles.Add(double.Parse(sdiasHabiles));
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        dtg_semanas.Rows.Clear();
                        dtg_semanas.Columns.Clear();

                        return;
                    }
                }
            }
            producto.CostoUnitario       = double.Parse(tbCostoDeProducción.Text);
            producto.CostoMantenimiento  = double.Parse(tbMantenimiento.Text);
            empresa.CostoContratacion    = double.Parse(tbCostoContratación.Text);
            producto.InventarioInicial   = double.Parse(tbInventarioInicial.Text);
            empresa.CostoSubContratacion = double.Parse(tbCostoDeSubContratación.Text);
            empresa.CostoDespido         = double.Parse(tbCostoDeDespido.Text);
            producto.HorasRequeridas     = double.Parse(tbHorasRequeridas.Text);
            producto.StockSeguridad      = double.Parse(tbStockSeguridad.Text);
            producto.CostoFaltante       = double.Parse(tbCostoFaltante.Text);
            producto.CostoHrs            = double.Parse(tbCostoHorasNormal.Text);
            producto.CostoHrsExtras      = double.Parse(tbCostoHorasExtras.Text);
            empresa.FuerzaLaboral        = double.Parse(tbFuerzaLaboral.Text);
            numPeriodos--;
            if (bPersecución.Checked)
            {
                EstrategiaPersecucion ep = new EstrategiaPersecucion(producto, numPeriodos);
                ep.E = empresa;
                List <Fila> resultado = ep.getPlanAgregadoSinBD(producto, diasHabiles, demanda, empresa);
                rellenarPlaneacion(resultado, numPeriodos);
                lTotal.Text = "Total: " + Math.Round(ep.CostoTotal, 2);
            }
            else if (bFuerzasNiveladas.Checked)
            {
                FuerzaNivelada fn        = new FuerzaNivelada(numPeriodos, producto, demanda.ToArray(), diasHabiles.ToArray(), empresa);
                List <Fila>    resultado = fn.getPlanAgregado();
                rellenarPlaneacion(resultado, numPeriodos);
                lTotal.Text = "Total: " + Math.Round(fn.CostoTotal, 2);
            }
            else if (bOutsourcing.Checked)
            {
                Outsourcing os        = new Outsourcing(demanda.ToArray(), diasHabiles.ToArray(), producto, numPeriodos, empresa);
                List <Fila> resultado = os.getPlanAgregado();
                rellenarPlaneacion(resultado, numPeriodos);
                lTotal.Text = "Total: " + Math.Round(os.CostoTotal, 2);
            }
        }