public VerEncomenda(int idSemanal) { InitializeComponent(); var context = new AMDModels(); PlanoSemanal = context.PlanoSemanals.FirstOrDefault(x => x.NumeroCarga == idSemanal); }
// 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); } } }
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; }