reversing the average cost of a product

0

I'm calculating the average cost of a product using php. I can calculate the average cost without problems, the error occurs when I try to reverse the calculation.

My code returns this:

Novo cuto médio é: 36,56 

O custo médio antigo é: 38,35

Being that correct would be this:

Novo cuto médio é: 36,56 

O custo médio antigo é: 35,24

Can anyone help me find the problem? Here is my code:

    $custo_antigo = 35.24;
    $estoque_antigo = 100;

    $custo_compra = 36.23;
    $estoque_compra = 133;
    $encargos_compra = 1.33;


    // Calcula custo médio do produto
    $total_em_estoque = $estoque_antigo * $custo_antigo;
    $total_do_estoque = $estoque_antigo;

    $total_em_compra = $estoque_compra * ($custo_compra + $encargos_compra);
    $calculo_valor = $total_em_estoque + $total_em_compra;

    $calculo_estoque = $estoque_compra + $total_do_estoque;
    $custo_medio_final = $calculo_valor / $calculo_estoque;

    // Formata numero
    $custo_formatado = number_format($custo_medio_final, 2, ',', '.');

    echo "Novo cuto médio é: $custo_formatado <br><br>";


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    $custo_antigo = 35.81;
    $estoque_antigo = 233;

    $custo_compra = 36.23;
    $estoque_compra = 133;
    $encargos_compra = 1.33;

    // 1º Pega valor do estoque antigo
    $qtd_antiga = $estoque_antigo - $estoque_compra;

    // 2º Total atual
    $total_geral = (($custo_antigo + $encargos_compra) * $estoque_antigo);

    // 3º total da compra 
    $total_compra = ($estoque_compra * $custo_compra);

    // 4º pega custo antigo
    $custo_antigo = ($total_geral - $total_compra) / $qtd_antiga;


    // Formata numero
    $custo_formatado = number_format($custo_antigo, 2, ',', '.');

    echo "O custo médio antigo é: $custo_formatado";
    
asked by anonymous 15.03.2016 / 15:49

1 answer

2

To be able to roll back you need to save $calculo_valor and $calculo_estoque of the first calculation block. For this reason, I will call $valor_antigo_2 and $estoque_antigo_2 to the variables in the second block that refer to them.

To reverse the calculation you need to revert each of the values, and this can be done as follows:

$estoque_antigo = $estoque_antigo_2 - $estoque_compra;

$custo_antigo = ($valor_antigo_2 - ($estoque_compra * ($custo_compra + $encargos_compra))) / 
                ($estoque_antigo_2 - $estoque_compra);

That is, the code starts to work like this:

$custo_antigo = 35.24;
$estoque_antigo = 100;

$custo_compra = 36.23;
$estoque_compra = 133;
$encargos_compra = 1.33;

$total_em_estoque = $estoque_antigo * $custo_antigo; // 3524
$total_do_estoque = $estoque_antigo; // 100

$total_em_compra = $estoque_compra * ($custo_compra + $encargos_compra); // 4995,48
$calculo_valor = $total_em_estoque + $total_em_compra; // 8519,48

$calculo_estoque = $estoque_compra + $total_do_estoque; // 233
$custo_medio_final = $calculo_valor / $calculo_estoque; // 36,56429...

Reverting:

$estoque_antigo_2 = $calculo_estoque; // 233
$valor_antigo_2 = $calculo_valor; // 8519,48

$estoque_antigo = $estoque_antigo_2 - $estoque_compra; // 100

$custo_antigo = ($valor_antigo_2 - ($estoque_compra * ($custo_compra + $encargos_compra))) /
                ($estoque_antigo_2 - $estoque_compra); // 35.24
    
15.03.2016 / 16:58