empacotar produtos
Boa tarde pessoal!
Estou desenvolvendo um sistema em php onde tenho vários produtos com pesos, quantidades e dimensões variadas.
Preciso empacotar todos os produtos no menor número de caixas possíveis, sendo que:
- o comprimento máximo da caixa é de 105 cm;
- a largura máxima da caixa é de 105 cm;
- a altura máxima da caixa é de 105 cm;
- o diâmetro máximo da caixa é de 91 cm;
- o peso máximo suportado pela caixa é de 30 kg.
Até o momento, tenho o seguinte código:
$_SESSION['carrinho'] = array();
$totalProdutos = count($_SESSION['produtos']);
for ($p = 0; $p < $totalProdutos; $p++)
{
$idProduto = $_SESSION['produtos'][$p];
$quantidade = $_SESSION['quantidades'][$p];
for ($i = 0; $i < $quantidade; $i++)
{
array_push($_SESSION['carrinho'], $idProduto);
}
}
echo '<br /><br />';
print_r($_SESSION['carrinho']);
// limpa as variáveis de sessão
unset($_SESSION['pesos']);
unset($_SESSION['comprimentos']);
unset($_SESSION['larguras']);
unset($_SESSION['alturas']);
unset($_SESSION['diametros']);
unset($_SESSION['empacotados']);
$_SESSION['pesos'] = array();
$_SESSION['comprimentos'] = array();
$_SESSION['larguras'] = array();
$_SESSION['alturas'] = array();
$_SESSION['diametros'] = array();
$_SESSION['empacotados'] = array();
$pesosTotais = array();
$comprimentosTotais = array();
$largurasTotais = array();
$alturasTotais = array();
$diametrosTotais = array();
// todos os produtos do carrinho possuem frete grátis?
$produtosFreteGratis = 1;
// medidas do produto
$pacotes = 1;
$totalComprimento = 0;
$totalLargura = 0;
$totalAltura = 0;
$totalDiametro = 0;
$totalPeso = 0;
//$totalProdutos = count($_SESSION['produtos']);
$totalProdutos = count($_SESSION['carrinho']);
echo 'total de produtos = ' . $totalProdutos . '<br />';
if ($totalProdutos > 0){
for ($i = 0; $i < $totalProdutos; $i++)
{
$sqlProduto = "SELECT * FROM produtos WHERE idProduto = " . $_SESSION['carrinho'][$i];
echo 'sqlProduto = ' . $sqlProduto . '<br />';
$resProduto = mysql_query($sqlProduto) or die("Erro: " . mysql_error());
$existeProduto = mysql_num_rows($resProduto);
if ($existeProduto > 0)
{
while ($lnProduto = mysql_fetch_assoc($resProduto))
{
$freteGratis = $lnProduto['freteGratis'];
$peso = $lnProduto['peso'];
array_push($_SESSION['pesos'], $peso);
$comprimento = $lnProduto['comprimento'];
array_push($_SESSION['comprimentos'], $comprimento);
$largura = $lnProduto['largura'];
array_push($_SESSION['larguras'], $largura);
$altura = $lnProduto['altura'];
array_push($_SESSION['alturas'], $altura);
$diametro = $lnProduto['diametro'];
array_push($_SESSION['diametros'], $comprimento);
array_push($_SESSION['empacotados'], 0);
}
// liberar a memória
mysql_free_result($resProduto);
if ($freteGratis == 0)
$produtosFreteGratis = 0;
}
}
}
print_r($_SESSION['empacotados']);
$enviaTransportadora = 0;// verificar o comprimento, a largura, a altura , o diâmetro e o peso de cada produto. Se uma das medidas de um produto ultrapassar o máximo permitido, enviar por transportadora
for ($i = 0; $i < $totalProdutos; $i++)
{
echo 'comprimento: ' . $_SESSION['comprimentos'][$i] . '<br />';
if ((isset($_SESSION['comprimentos'][$i])) && ($_SESSION['comprimentos'][$i] > 105))
{
$enviaTransportadora = 1;
$i = $totalProdutos;
}
echo 'largura: ' . $_SESSION['larguras'][$i] . '<br />';
if ((isset($_SESSION['larguras'][$i])) && ($_SESSION['larguras'][$i] > 105))
{
$enviaTransportadora = 1;
$i = $totalProdutos;
}
echo 'altura: ' . $_SESSION['alturas'][$i] . '<br />';
if ((isset($_SESSION['alturas'][$i])) && ($_SESSION['alturas'][$i] > 105))
{
$enviaTransportadora = 1;
$i = $totalProdutos;
}
echo 'diametro: ' . $_SESSION['diametros'][$i] . '<br />';
if ((isset($_SESSION['diametros'][$i])) && ($_SESSION['diametros'][$i] > 91))
{
$enviaTransportadora = 1;
$i = $totalProdutos;
}
echo 'peso: ' . $_SESSION['pesos'][$i] . '<br />';
if ((isset($_SESSION['pesos'][$i])) && ($_SESSION['pesos'][$i] > 30))
{
$enviaTransportadora = 1;
$i = $totalProdutos;
}
}
echo '<br />enviaTransportadora = ' . $enviaTransportadora;
if ($enviaTransportadora == 0){
//$qtds = array_count_values($_SESSION['carrinho']);
//print_r($qtds);
for ($i = 0; $i < $totalProdutos; $i++)
{
$produtoEmpacotado = 0;
/*$totalPE = count($_SESSION['empacotados']);
echo 'totalPE = ' . $totalPE . '<br />';
for ($j = 0; $j < $totalPE; $j++)
{
if ($_SESSION['empacotados'][$j] == $_SESSION['carrinho'][$i])
{
/*$qtd1 = array_count_values($_SESSION['empacotados']);
$qtd2 = array_count_values($_SESSION['carrinho']);
print_r($qtd1);
print_r($qtd2);*/
/* $totalEmpacotados = count($_SESSION['empacotados']);
$totalCarrinho = count($_SESSION['carrinho']);
if ($totalEmpacotados == $totalCarrinho)
{
$produtoEmpacotado = 1;
$j = $totalPE;
}
}
}
echo '<br />produtoEmpacotado = ' . $produtoEmpacotado;*/
if ($_SESSION['empacotados'][$i] == 1)
$produtoEmpacotado = 1;
if ($produtoEmpacotado == 0) // produto será empacotado
{
$totalComprimento += $_SESSION['comprimentos'][$i];
echo '<br />totalComprimento = ' . $totalComprimento;
if ($totalComprimento < 105)
{
$totalLargura += $_SESSION['larguras'][$i];
echo '<br />totalLargura = ' . $totalLargura;
if ($totalLargura < 105)
{
$totalAltura += $_SESSION['alturas'][$i];
echo '<br />totalAltura = ' . $totalAltura;
if ($totalAltura < 105)
{
$totalDiametro += $_SESSION['diametros'][$i];
echo '<br />totalDiametro = ' . $totalDiametro;
if ($totalDiametro < 91)
{
$totalPeso += $_SESSION['pesos'][$i];
echo '<br />totalPeso = ' . $totalPeso;
if ($totalPeso < 30)
{
//array_push($_SESSION['empacotados'], $_SESSION['carrinho'][$i]);
//print_r($_SESSION['empacotados']);
$_SESSION['empacotados'][$i] = 1;
}
else
{
$totalComprimento -= $_SESSION['comprimentos'][$i];
$totalLargura -= $_SESSION['larguras'][$i];
$totalAltura -= $_SESSION['alturas'][$i];
$totalDiametro -= $_SESSION['diametros'][$i];
$totalPeso -= $_SESSION['pesos'][$i];
$pesosTotais[] = $totalPeso;
$diametrosTotais[] = $totalDiametro;
$alturasTotais[] = $totalAltura;
$largurasTotais[] = $totalLargura;
$comprimentosTotais[] = $totalComprimento;
$totalPeso = $_SESSION['pesos'][$i];
$totalDiametro = $_SESSION['diametros'][$i];
$totalAltura = $_SESSION['alturas'][$i];
$totalLargura = $_SESSION['larguras'][$i];
$totalComprimento = $_SESSION['comprimentos'][$i];
$pacotes++;
}
}
else
{
$totalComprimento -= $_SESSION['comprimentos'][$i];
$totalLargura -= $_SESSION['larguras'][$i];
$totalAltura -= $_SESSION['alturas'][$i];
$totalDiametro -= $_SESSION['diametros'][$i];
$pesosTotais[] = $totalPeso;
$diametrosTotais[] = $totalDiametro;
$alturasTotais[] = $totalAltura;
$largurasTotais[] = $totalLargura;
$comprimentosTotais[] = $totalComprimento;
$totalPeso = $_SESSION['pesos'][$i];
$totalDiametro = $_SESSION['diametros'][$i];
$totalAltura = $_SESSION['alturas'][$i];
$totalLargura = $_SESSION['larguras'][$i];
$totalComprimento = $_SESSION['comprimentos'][$i];
$pacotes++;
}
}
else
{
$totalComprimento -= $_SESSION['comprimentos'][$i];
$totalLargura -= $_SESSION['larguras'][$i];
$totalAltura -= $_SESSION['alturas'][$i];
$pesosTotais[] = $totalPeso;
$diametrosTotais[] = $totalDiametro;
$alturasTotais[] = $totalAltura;
$largurasTotais[] = $totalLargura;
$comprimentosTotais[] = $totalComprimento;
$totalPeso = $_SESSION['pesos'][$i];
$totalDiametro = $_SESSION['diametros'][$i];
$totalAltura = $_SESSION['alturas'][$i];
$totalLargura = $_SESSION['larguras'][$i];
$totalComprimento = $_SESSION['comprimentos'][$i];
$pacotes++;
}
}
else
{
$totalComprimento -= $_SESSION['comprimentos'][$i];
$totalLargura -= $_SESSION['larguras'][$i];
$pesosTotais[] = $totalPeso;
$diametrosTotais[] = $totalDiametro;
$alturasTotais[] = $totalAltura;
$largurasTotais[] = $totalLargura;
$comprimentosTotais[] = $totalComprimento;
$totalPeso = $_SESSION['pesos'][$i];
$totalDiametro = $_SESSION['diametros'][$i];
$totalAltura = $_SESSION['alturas'][$i];
$totalLargura = $_SESSION['larguras'][$i];
$totalComprimento = $_SESSION['comprimentos'][$i];
$pacotes++;
}
}
else
{
$totalComprimento -= $_SESSION['comprimentos'][$i];
$pesosTotais[] = $totalPeso;
$diametrosTotais[] = $totalDiametro;
$alturasTotais[] = $totalAltura;
$largurasTotais[] = $totalLargura;
$comprimentosTotais[] = $totalComprimento;
$totalPeso = $_SESSION['pesos'][$i];
$totalDiametro = $_SESSION['diametros'][$i];
$totalAltura = $_SESSION['alturas'][$i];
$totalLargura = $_SESSION['larguras'][$i];
$totalComprimento = $_SESSION['comprimentos'][$i];
$pacotes++;
}
}
}
}
Mas, para o exemplo que testei, ficou faltando empacotar certos produtos. Alguém poderia me ajudar? Obrigado.
Discussão (1)
Carregando comentários...