Advertisement
info1atual

Procedure ATUALIZAR_ESTOQUES

May 30th, 2024
1,147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 4.73 KB | Source Code | 0 0
  1. CREATE DEFINER = `textil` @`%` PROCEDURE `textil_comercialtextil`.`ATUALIZAR_ESTOQUES`(
  2.                             IN `LOJAID` INT
  3.                             )
  4.                             LANGUAGE SQL
  5.                             NOT DETERMINISTIC
  6.                             CONTAINS SQL
  7.                             SQL SECURITY DEFINER
  8.                             COMMENT ''
  9.                             BEGIN
  10.                            
  11.                             DECLARE USAR_ESTOQUE_PECAS int;
  12.  
  13. DECLARE CONTROLE_CORES int;
  14. DECLARE CONTROLE_VOLUMES int;
  15. DECLARE CONTROLE_PESO_CANO int;
  16. DECLARE USAR_ESTOQUE_PECAS int;
  17.  
  18. SELECT
  19.     ativo
  20. into
  21.     CONTROLE_CORES
  22. FROM
  23.     configuracoes
  24. WHERE
  25.     config = 'ControleCores';
  26.  
  27. SELECT
  28.     ativo
  29. into
  30.     CONTROLE_PESO_CANO
  31. FROM
  32.     configuracoes
  33. WHERE
  34.     config = 'ControlePesoCano';
  35.  
  36. SELECT
  37.     ativo
  38. into
  39.     CONTROLE_VOLUMES
  40. FROM
  41.     configuracoes
  42. WHERE
  43.     config = 'ControleVolumes';
  44.  
  45. SELECT
  46.     ativo
  47. INTO
  48.     USAR_ESTOQUE_PECAS
  49. FROM
  50.     configuracoes
  51. where
  52.     config = 'PecasProdutos';
  53.  
  54. UPDATE
  55.     estoques
  56. INNER JOIN (
  57.     SELECT
  58.         p.id,
  59.         p.Codigo,
  60.         p.Cor,
  61.         p.Referencia,
  62.         p.Descricao,
  63.         p.Valor,
  64.         p.Valor30,
  65.         p.Valor60,
  66.         p.ValorCusto,
  67.         p.Unidade,
  68.         Coalesce(pesocano, 0) AS PesoCano,
  69.         p.Grupo,
  70.         g.nome AS GrupoNome,
  71.         LOJAID AS loja_id,
  72.         inv.estoque AS EstoqueAtual,
  73.         pecas.totalpecas AS TotalPecas,
  74.         pecas.estoquepecas AS EstoquePecas,
  75.         IF (CONTROLE_VOLUMES = 1, (SELECT CONSULTAR_ESTOQUE_VOLUMES(p.Codigo, LOJA_ID)), 0) AS VolumesPecas
  76.     FROM
  77.         produtos AS p
  78.        
  79.     -- ------------ init var inv -----------------
  80.    
  81.     LEFT JOIN (
  82.         SELECT codigo, ROUND(Sum(quantidade), 3) AS estoque
  83.         FROM
  84.             (
  85.             SELECT codigo, SUM(Coalesce(if(s.movimento = 'Entrada', s.quantidade, if(s.movimento = 'Saída', s.quantidade * (-1), 0)), 0)) AS quantidade
  86.             FROM
  87.                 submovimentoestoque s
  88.             INNER JOIN movimentoestoque m
  89.             ON m.id = s.movimento_id
  90.             WHERE
  91.                 s.loja_id = LOJAID
  92.                 AND (s.codigobarras IS NULL OR s.codigobarras = '')
  93.             GROUP BY 1
  94.         UNION ALL
  95.             SELECT codigo, SUM(Coalesce(if(s.movimento = 'AjusteEntrada', s.quantidade, if(s.movimento = 'AjusteSaída', s.quantidade * (-1), 0)), 0)) AS quantidade
  96.             FROM
  97.                 submovimentoestoque s
  98.             WHERE
  99.                 s.loja_id = LOJAID
  100.             GROUP BY 1
  101.         UNION ALL
  102.             SELECT sv.codigo, if(CONTROLE_PESO_CANO = 1, SUM(Coalesce(sv.quantidade, 0) * ( -1 )), SUM(Coalesce(sv.quantidadebruta, 0) * ( -1 ))) AS quantidade
  103.             FROM
  104.                 subpedidosvenda sv
  105.             INNER JOIN pedidosvenda pv
  106.             ON pv.pedido_id = sv.pedido AND pv.loja_id = LOJAID
  107.             WHERE
  108.                 sv.loja_id = LOJAID
  109.                 AND sv.status = 0
  110.                 AND pv.status <> 'Cancelado'
  111.                 AND IF(USAR_ESTOQUE_PECAS = 1, (sv.codigobarras IS NULL OR sv.codigobarras = ''), true)
  112.             GROUP BY 1
  113.         UNION ALL
  114.             SELECT sd.codigo, if(CONTROLE_PESO_CANO = 1, SUM(Coalesce(sd.quantidadebruta, 0)), SUM(Coalesce(sd.quantidadebruta, 0))) AS quantidade
  115.             FROM
  116.                 subdevolucoes sd
  117.             INNER JOIN devolucoes d
  118.             ON d.id = sd.numero
  119.             WHERE
  120.                 sd.loja_id = LOJAID
  121.             GROUP BY 1
  122.         UNION ALL
  123.             SELECT spx.produto, SUM(Coalesce(pesoliquido, 0)) AS quantidade
  124.             FROM
  125.                 subpedidoscomprax spx
  126.             INNER JOIN pedidoscomprax px
  127.             ON px.id = spx.pedido
  128.             WHERE
  129.                 px.loja_id = LOJAID
  130.             GROUP BY 1) AS inv
  131.         GROUP BY 1) AS inv
  132.         ON inv.codigo = p.codigo
  133.  
  134.     -- ------------ end var inv -----------------
  135.            
  136.     -- ------------ init var pecas -----------------
  137.    
  138.     LEFT JOIN (
  139.         SELECT
  140.             p.codigo,
  141.             count(*) as totalpecas,
  142.             Round(Coalesce(Sum(IF(USAR_ESTOQUE_PECAS = 1, IF(p.unidade = 'MT', pp.ultimametragem, pp.ultimopeso), 0)), 0), 3) AS estoquepecas
  143.         FROM
  144.             produtospecas pp
  145.         INNER JOIN produtos p
  146.         ON p.codigo = pp.produto
  147.         WHERE
  148.             IF(p.unidade = 'MT',
  149.             pp.ultimametragem,
  150.             pp.ultimopeso) > 0
  151.                 AND pp.loja_id = LOJAID
  152.                 AND pp.deleted_at IS NULL
  153.             GROUP BY 1) as pecas
  154.         ON pecas.codigo = p.codigo
  155.        
  156.     -- ------------ end var pecas -----------------
  157.    
  158.     -- ------------ init var volumes -----------------
  159.        
  160.     -- LEFT JOIN (
  161.         -- SELECT p.codigo,
  162.         -- SELECT CONSULTAR_ESTOQUE_VOLUMES(p.Codigo, LOJA_ID) as volumes
  163.         -- FROM produtos p
  164.         -- GROUP BY 1) AS volumes
  165.         -- ON volumes.codigo = p.codigo
  166.  
  167.     -- ------------ end var volumes -----------------
  168.  
  169.     LEFT JOIN grupos AS g
  170.         ON p.grupo = g.id
  171.     WHERE
  172.         p.deleted_at IS NULL
  173.         AND p.status = 1) AS qry
  174.        
  175.     ON estoques.codigo = qry.Codigo
  176.    
  177.     SET
  178.     estoques.estoque = ROUND(coalesce(qry.EstoqueAtual, 0), 3),
  179.     estoques.estoque_pecas = round(coalesce(qry.EstoquePecas, 0), 3),
  180.     estoques.quantidade_pecas = coalesce(qry.TotalPecas, 0),
  181.     estoques.volumes = coalesce(qry.VolumesPecas, 0),
  182.     estoques.updated_at = CURRENT_TIMESTAMP
  183. WHERE
  184.     estoques.loja_id = LOJAID;
  185. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement