예제 #1
0
파일: IAlg.cs 프로젝트: JEFMendes/AMD
 private bool CamiaoValidoNaoCompleto(EncomendaFrita encomenda, PlanoFrito plano)
 {
     if (plano.CapacidadePaletes == plano.Ocupadas)
     {
         return(false);
     }
     return(CamiaoValido(encomenda, plano));
 }
예제 #2
0
파일: IAlg.cs 프로젝트: JEFMendes/AMD
        private bool isValidPlan(EncomendaFrita encomenda, PlanoFrito plano)
        {
            if (plano.Preco <= 0)
            {
                return(false);
            }
            if (plano.Ocupadas == plano.CapacidadePaletes)
            {
                return(false);
            }

            //Tem espaço para esta encomenda?
            if (plano.CapacidadePaletes - plano.Ocupadas < encomenda.Paletes)
            {
                return(false);
            }
            //Preciso e tenho congelados?
            if (!plano.Congelados && encomenda.Tipo == Tipo.Congelado)
            {
                return(false);
            }
            //Preciso e tenho Scos?
            if (!plano.Secos && encomenda.Tipo == Tipo.Seco)
            {
                return(false);
            }
            //Preciso e tenho frescos?
            if (!plano.Frescos &&
                encomenda.Tipo == Tipo.Frio)
            {
                return(false);
            }
            //Faço entregas para a zona do cliente?
            if (plano.Zona != encomenda.Encomenda.Cliente1.Zona && plano.Zona != encomenda.Encomenda.Cliente1.Opcao_zona_2 && plano.Zona != encomenda.Encomenda.Cliente1.Opcao_zona_3)
            {
                return(false);
            }
            //Camiao com ridelle
            if (!plano.Ridelle && encomenda.Ridelle)
            {
                return(false);
            }
            //Camiao com descarga manual
            if (!plano.EntradaSemAcesso && encomenda.SemAcesso)
            {
                return(false);
            }

            /*
             * if (plano.CapacidadePaletes == 15 && plano.Ocupadas < 12)
             *  return false;
             * if (plano.CapacidadePaletes == 8 && (plano.Ocupadas + encomenda.Paletes) < 6)
             *  return false;*/

            return(true);
        }
예제 #3
0
파일: IAlg.cs 프로젝트: JEFMendes/AMD
        private bool CamiaoValido(EncomendaFrita encomenda, PlanoFrito plano)
        {
            if (plano.CapacidadePaletes == 5 && plano.Ocupadas < 3)
            {
                return(false);
            }
            if (plano.CapacidadePaletes == 11 && plano.Ocupadas < 8)
            {
                return(false);
            }
            if (plano.CapacidadePaletes == 18 && plano.Ocupadas < 12)
            {
                return(false);
            }
            if (plano.CapacidadePaletes == 32 && plano.Ocupadas < 21)
            {
                return(false);
            }

            if (!plano.Congelados &&
                encomenda.Tipo == Tipo.Congelado)
            {
                return(false);
            }
            //Preciso e tenho Scos?
            if (!plano.Secos &&
                encomenda.Tipo == Tipo.Seco)
            {
                return(false);
            }
            //Preciso e tenho frescos?
            if (!plano.Frescos &&
                encomenda.Tipo == Tipo.Frio)
            {
                return(false);
            }
            //Faço entregas para a zona do cliente?
            if (plano.Zona != encomenda.Encomenda.Cliente1.Zona &&
                plano.Zona != encomenda.Encomenda.Cliente1.Opcao_zona_2 &&
                plano.Zona != encomenda.Encomenda.Cliente1.Opcao_zona_3)
            {
                return(false);
            }


            return(true);
        }
예제 #4
0
파일: IAlg.cs 프로젝트: JEFMendes/AMD
 public PlanoFrito(PlanoFrito x)
 {
     this.Ocupadas   = x.Ocupadas;
     this.Encomendas = new List <EncomendaFrita>();
     this.Encomendas.AddRange(x.Encomendas);
     this.PlanoSemanal      = x.PlanoSemanal;
     this.Preco             = x.Preco;
     this.Congelados        = x.Congelados;
     this.Secos             = x.Secos;
     this.Frescos           = x.Frescos;
     this.Zona              = x.Zona;
     this.EntradaSemAcesso  = x.EntradaSemAcesso;
     this.Ridelle           = x.Ridelle;
     this.CapacidadePaletes = x.CapacidadePaletes;
     this.Transportadora    = x.Transportadora;
     this.Estado            = x.Estado;
     this.Peso              = x.Peso;
 }
예제 #5
0
파일: IAlg.cs 프로젝트: JEFMendes/AMD
        private PlanoFrito BestPlanFor(EncomendaFrita encomenda, List <PlanoFrito> plans)
        {
            var        alreadyUsed = plans.Where(x => x.Ocupadas > 0).ToList();
            var        minPrice    = double.MaxValue;
            PlanoFrito plan        = null;

            //Already used
            for (int i = 0; i < alreadyUsed.Count; i++)
            {
                var plano = alreadyUsed[i];
                if (!isValidPlan(encomenda, plano))
                {
                    continue;
                }
                if (minPrice > plano.Preco)
                {
                    minPrice = plano.Preco;
                    plan     = plano;
                }
            }

            if (plan != null)
            {
                return(plan);
            }
            //Pick from rest
            var notalreadyUsed = plans.Where(x => x.Ocupadas == 0).ToList();

            for (int i = 0; i < notalreadyUsed.Count; i++)
            {
                var plano = notalreadyUsed[i];
                if (!isValidPlan(encomenda, plano))
                {
                    continue;
                }
                if (minPrice > plano.Preco)
                {
                    minPrice = plano.Preco;
                    plan     = plano;
                }
            }
            return(plan);
        }