Ejemplo n.º 1
0
        public VerEncomenda(int idSemanal)
        {
            InitializeComponent();
            var context = new AMDModels();

            PlanoSemanal = context.PlanoSemanals.FirstOrDefault(x => x.NumeroCarga == idSemanal);
        }
Ejemplo n.º 2
0
        // When a button is clicked, we need to check if this is the 1st click or 2nd click
        private void ButtonPressed(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;

            Debug.WriteLine(button.Background);
            string text = (string)button.Content;

            // Clicked NVIDIA model
            if (NVIDIAModels.Contains(text))
            {
                // Currently this model is contained in our wants query
                // This means this is a 2nd click, remove from list and revert button pressed ui
                if (NVIDIAWanted.Contains(text))
                {
                    SecondPress(button);
                    NVIDIAWanted.Remove(text);
                }
                // 1st click
                // Add to wanted list
                else
                {
                    FirstPress(button);
                    NVIDIAWanted.Add(text);
                }
            }
            // Repeat above but this is for AMD
            else if (AMDModels.Contains(text))
            {
                if (AMDWanted.Contains(text))
                {
                    SecondPress(button);
                    AMDWanted.Remove(text);
                }
                else
                {
                    FirstPress(button);
                    AMDWanted.Add(text);
                }
            }
        }
Ejemplo n.º 3
0
        public List <PlanoFrito> Execute()
        {
            deleteDB();
            PlanoCount = 0;
            RecurCount = 0;
            Cache.Clear();
            context = new AMDModels();
            // context.Encomendas.Where( x => x.QtRollCong > 5 && x.Clientes.Distancias. )
            List <Models.PlanoSemanal> plano = context.PlanoSemanals.ToList();

            var plan = plano.Select(x => new PlanoFrito(x)).ToList();
            List <EncomendaFrita> regisotSemanal = new List <EncomendaFrita>();



            var encomendas = context.Encomendas.ToList();

            foreach (var enc in encomendas)
            {
                if (enc.Estado == "Arquivado")
                {
                    continue;
                }


                if (enc.QtRollCong > 0 || enc.QtPalCong > 0)
                {
                    var encoF = new EncomendaFrita();
                    encoF.Encomenda = enc;
                    encoF.Tipo      = Tipo.Congelado;
                    encoF.Semana    = encoF.Semana;
                    encoF.Paletes   = enc.TotalCongelados;
                    encoF.Rolli     = enc.QtRollCong ?? 0;
                    encoF.SemAcesso = enc.Manual ?? false;
                    if (enc.Ridelle != null)
                    {
                        encoF.Ridelle = enc.Ridelle.Value;
                    }
                    if (enc.Manual != null)
                    {
                        encoF.SemAcesso = enc.Manual.Value;
                    }
                    encoF.Cliente = enc.Cliente;
                    regisotSemanal.Add(encoF);
                    encoF.Peso = enc.Peso;
                }
                if (enc.QtRollSec > 0 || enc.QtPalSec > 0)
                {
                    var encoF = new EncomendaFrita();
                    encoF.Encomenda = enc;
                    encoF.Tipo      = Tipo.Seco;
                    encoF.Semana    = encoF.Semana;
                    encoF.Paletes   = enc.TotalSecos;
                    encoF.Rolli     = enc.QtRollSec ?? 0;
                    encoF.SemAcesso = enc.Manual ?? false;
                    if (enc.Ridelle != null)
                    {
                        encoF.Ridelle = enc.Ridelle.Value;
                    }
                    if (enc.Manual != null)
                    {
                        encoF.SemAcesso = enc.Manual.Value;
                    }
                    encoF.Cliente = enc.Cliente;
                    regisotSemanal.Add(encoF);
                    encoF.Peso = enc.Peso;
                }
                if (enc.QtRollFres > 0 || enc.QtPalFres > 0)
                {
                    var encoF = new EncomendaFrita();
                    encoF.Encomenda = enc;
                    encoF.Semana    = encoF.Semana;
                    encoF.Tipo      = Tipo.Frio;
                    encoF.Paletes   = enc.TotalFrios;
                    encoF.Rolli     = enc.QtRollFres ?? 0;
                    encoF.SemAcesso = enc.Manual ?? false;
                    if (enc.Ridelle != null)
                    {
                        encoF.Ridelle = enc.Ridelle.Value;
                    }
                    if (enc.Manual != null)
                    {
                        encoF.SemAcesso = enc.Manual.Value;
                    }
                    encoF.Cliente = enc.Cliente;
                    regisotSemanal.Add(encoF);
                    encoF.Peso = enc.Peso;
                }
            }



            //Algoritmo

            IEnumerable <PlanoFrito> ol = R(regisotSemanal, plan);
            //Recursive(regisotSemanal, plano, out ol);
            //var semana = 0;

            //var preçoMinimo = CalculatePrice(ol);

            // OK Simple s:P
            // Nos queremos os planos que nao têm nada primeiro
            //ver se existe algum que de para por encomendas

            var  master = ol.ToList();
            bool stop   = false;

            do
            {
                bool troca          = false;
                var  emptyPlans     = master.Where(x => x.Encomendas.Count == 0);
                var  withEncomendas = master.Where(x => x.Encomendas.Count > 0);
                foreach (var com in withEncomendas)
                {
                    foreach (var sem in emptyPlans.OrderBy(x => x.CapacidadePaletes))
                    {
                        //temos que ver se o plano é menor que o que temos
                        if (com.CapacidadePaletes <= sem.CapacidadePaletes || com.Ocupadas > sem.CapacidadePaletes)
                        {
                            continue; //Este nao tem espaço
                        }
                        bool valid = true;
                        // temos que verificar se este camiao consegue levar todas as nossas encomendas
                        foreach (var enc in com.Encomendas)
                        {
                            if (!isValidPlan(enc, sem))
                            {
                                //chapeu nao da, next
                                valid = false;
                                break;
                            }
                        }
                        if (!valid)
                        {
                            continue; // Next Pleaze not valid
                        }
                        // Este camiao é mais pequeno e consegue levar as nossas encomendas
                        // Toca a trocar
                        sem.Encomendas.AddRange(com.Encomendas);
                        com.Encomendas.Clear();
                        troca = true;
                        break;
                    }
                    if (troca) // Se tivermos trocado temos que correr de  novo porque isto alterou os camioes
                    {
                        break;
                    }
                }
                stop = !troca; // paramos se nao tiver havido troca
            } while (!stop);

            foreach (var planf in plan)
            {
                foreach (var encomendaF in planf.Encomendas)
                {
                    if (encomendaF.Estado == "Arquivado")
                    {
                        break;
                    }

                    try
                    {
                        // Your code...
                        // Could also be before try if you know the exception occurs in SaveChanges
                        // Aqui ta a encomenda frita
                        var context = new AMDModels();

                        String tipoEnc = "";

                        if ((int)encomendaF.Tipo == 0)
                        {
                            tipoEnc = "Congelados";
                        }

                        if ((int)encomendaF.Tipo == 1)
                        {
                            tipoEnc = "Frescos";
                        }

                        if ((int)encomendaF.Tipo == 2)
                        {
                            tipoEnc = "Secos";
                        }



                        /*
                         * string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["AMD"].ConnectionString;
                         * SqlConnection con = new SqlConnection(connectionString);
                         *
                         * SqlCommand cmd = new SqlCommand("Select Nome from Clientes where Numero == @encomendaF.Cliente", con);
                         *
                         * con.Open();
                         * SqlDataAdapter adapt = new SqlDataAdapter(cmd);
                         * DataSet ds = new DataSet();
                         * adapt.Fill(ds);
                         * string nome = ds.Tables[0].Rows[0]["Item"].ToString();
                         * con.Close();
                         */

                        context.EncomendasFritas.Add(new EncomendasFrita()
                        {
                            Cliente   = encomendaF.Cliente,
                            Paletes   = encomendaF.Paletes,
                            Plano     = planf.PlanoSemanal.NumeroCarga,
                            Encomenda = encomendaF.Encomenda.CodEncomenda,
                            Ridelle   = encomendaF.Ridelle,
                            Rolli     = encomendaF.Rolli,
                            SemAcesso = encomendaF.SemAcesso,
                            Tipo      = tipoEnc,
                            Semana    = SemanaAtual(),
                            Peso      = encomendaF.Peso
                        });
                        context.SaveChanges();
                    }
                    catch (DbEntityValidationException e)
                    {
                        foreach (var eve in e.EntityValidationErrors)
                        {
                            Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                              eve.Entry.Entity.GetType().Name, eve.Entry.State);
                            foreach (var ve in eve.ValidationErrors)
                            {
                                Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                                  ve.PropertyName, ve.ErrorMessage);
                            }
                        }
                        throw;
                    }
                    context.SaveChanges();
                }
            }


            //Este e o novo preço minimo,
            //TODO:: Ou muito me engano ou estas a calcular mal os preços, o que esta certo e que ele de facto faz o que é rpeciso, escolhe os camioes mais pequenos ;)
            var preçoMinimo2 = CalculatePrice(master);

            try
            {
                var re = ol.Where(x => x.Encomendas != null);
                MessageBox.Show("Preço Minimo = " + preçoMinimo2);
                return(ol.Where(x => x.Ocupadas > 0).ToList());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não é possivel efectuar carga");
                return(null);
            }
            //var age = a.First().Transportador;
        }