Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE DEFINER = `textil` @`%` PROCEDURE `textil_comercialtextil`.`ATUALIZAR_ESTOQUES`(
- IN `LOJAID` INT
- )
- LANGUAGE SQL
- NOT DETERMINISTIC
- CONTAINS SQL
- SQL SECURITY DEFINER
- COMMENT ''
- BEGIN
- DECLARE USAR_ESTOQUE_PECAS int;
- DECLARE CONTROLE_CORES int;
- DECLARE CONTROLE_VOLUMES int;
- DECLARE CONTROLE_PESO_CANO int;
- DECLARE USAR_ESTOQUE_PECAS int;
- SELECT
- ativo
- into
- CONTROLE_CORES
- FROM
- configuracoes
- WHERE
- config = 'ControleCores';
- SELECT
- ativo
- into
- CONTROLE_PESO_CANO
- FROM
- configuracoes
- WHERE
- config = 'ControlePesoCano';
- SELECT
- ativo
- into
- CONTROLE_VOLUMES
- FROM
- configuracoes
- WHERE
- config = 'ControleVolumes';
- SELECT
- ativo
- INTO
- USAR_ESTOQUE_PECAS
- FROM
- configuracoes
- where
- config = 'PecasProdutos';
- UPDATE
- estoques
- INNER JOIN (
- SELECT
- p.id,
- p.Codigo,
- p.Cor,
- p.Referencia,
- p.Descricao,
- p.Valor,
- p.Valor30,
- p.Valor60,
- p.ValorCusto,
- p.Unidade,
- Coalesce(pesocano, 0) AS PesoCano,
- p.Grupo,
- g.nome AS GrupoNome,
- LOJAID AS loja_id,
- inv.estoque AS EstoqueAtual,
- pecas.totalpecas AS TotalPecas,
- pecas.estoquepecas AS EstoquePecas,
- IF (CONTROLE_VOLUMES = 1, (SELECT CONSULTAR_ESTOQUE_VOLUMES(p.Codigo, LOJA_ID)), 0) AS VolumesPecas
- FROM
- produtos AS p
- -- ------------ init var inv -----------------
- LEFT JOIN (
- SELECT codigo, ROUND(Sum(quantidade), 3) AS estoque
- FROM
- (
- SELECT codigo, SUM(Coalesce(if(s.movimento = 'Entrada', s.quantidade, if(s.movimento = 'Saída', s.quantidade * (-1), 0)), 0)) AS quantidade
- FROM
- submovimentoestoque s
- INNER JOIN movimentoestoque m
- ON m.id = s.movimento_id
- WHERE
- s.loja_id = LOJAID
- AND (s.codigobarras IS NULL OR s.codigobarras = '')
- GROUP BY 1
- UNION ALL
- SELECT codigo, SUM(Coalesce(if(s.movimento = 'AjusteEntrada', s.quantidade, if(s.movimento = 'AjusteSaída', s.quantidade * (-1), 0)), 0)) AS quantidade
- FROM
- submovimentoestoque s
- WHERE
- s.loja_id = LOJAID
- GROUP BY 1
- UNION ALL
- SELECT sv.codigo, if(CONTROLE_PESO_CANO = 1, SUM(Coalesce(sv.quantidade, 0) * ( -1 )), SUM(Coalesce(sv.quantidadebruta, 0) * ( -1 ))) AS quantidade
- FROM
- subpedidosvenda sv
- INNER JOIN pedidosvenda pv
- ON pv.pedido_id = sv.pedido AND pv.loja_id = LOJAID
- WHERE
- sv.loja_id = LOJAID
- AND sv.status = 0
- AND pv.status <> 'Cancelado'
- AND IF(USAR_ESTOQUE_PECAS = 1, (sv.codigobarras IS NULL OR sv.codigobarras = ''), true)
- GROUP BY 1
- UNION ALL
- SELECT sd.codigo, if(CONTROLE_PESO_CANO = 1, SUM(Coalesce(sd.quantidadebruta, 0)), SUM(Coalesce(sd.quantidadebruta, 0))) AS quantidade
- FROM
- subdevolucoes sd
- INNER JOIN devolucoes d
- ON d.id = sd.numero
- WHERE
- sd.loja_id = LOJAID
- GROUP BY 1
- UNION ALL
- SELECT spx.produto, SUM(Coalesce(pesoliquido, 0)) AS quantidade
- FROM
- subpedidoscomprax spx
- INNER JOIN pedidoscomprax px
- ON px.id = spx.pedido
- WHERE
- px.loja_id = LOJAID
- GROUP BY 1) AS inv
- GROUP BY 1) AS inv
- ON inv.codigo = p.codigo
- -- ------------ end var inv -----------------
- -- ------------ init var pecas -----------------
- LEFT JOIN (
- SELECT
- p.codigo,
- count(*) as totalpecas,
- Round(Coalesce(Sum(IF(USAR_ESTOQUE_PECAS = 1, IF(p.unidade = 'MT', pp.ultimametragem, pp.ultimopeso), 0)), 0), 3) AS estoquepecas
- FROM
- produtospecas pp
- INNER JOIN produtos p
- ON p.codigo = pp.produto
- WHERE
- IF(p.unidade = 'MT',
- pp.ultimametragem,
- pp.ultimopeso) > 0
- AND pp.loja_id = LOJAID
- AND pp.deleted_at IS NULL
- GROUP BY 1) as pecas
- ON pecas.codigo = p.codigo
- -- ------------ end var pecas -----------------
- -- ------------ init var volumes -----------------
- -- LEFT JOIN (
- -- SELECT p.codigo,
- -- SELECT CONSULTAR_ESTOQUE_VOLUMES(p.Codigo, LOJA_ID) as volumes
- -- FROM produtos p
- -- GROUP BY 1) AS volumes
- -- ON volumes.codigo = p.codigo
- -- ------------ end var volumes -----------------
- LEFT JOIN grupos AS g
- ON p.grupo = g.id
- WHERE
- p.deleted_at IS NULL
- AND p.status = 1) AS qry
- ON estoques.codigo = qry.Codigo
- SET
- estoques.estoque = ROUND(coalesce(qry.EstoqueAtual, 0), 3),
- estoques.estoque_pecas = round(coalesce(qry.EstoquePecas, 0), 3),
- estoques.quantidade_pecas = coalesce(qry.TotalPecas, 0),
- estoques.volumes = coalesce(qry.VolumesPecas, 0),
- estoques.updated_at = CURRENT_TIMESTAMP
- WHERE
- estoques.loja_id = LOJAID;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement