Jump to content
Fivewin Brasil

Calcular quantos minutos o item foi lançado na comanda/pedido


marcioe

Recommended Posts

Olá a Todos, 

Tenho uma tabela MYSQL que tem os itens de uma comanda ( Sistema de Restaurante / Bares)
Dai preciso saber o tempo que o item já está lançado.

Lembrando que tem que levar em conta a data e hora de lançamento, porque as vezes Vira a noite, tipo a pessoa chega as 23:50,    Dai faz o pedido
Dai vira o dia e já são por exemplo 00:00:23 
O campos para se levar em conta são
    `DATA_LANCAMENTO`     `HORA_LANCAMENTO`  


Preciso saber em minutos quanto tempo tem 

Segue as estrutura da tabela
 

CREATE TABLE `comandas_atendimento` (
	`ID` INT(11) NOT NULL AUTO_INCREMENT,
	`ID_COMANDA` INT(11) NULL DEFAULT NULL,
	`CODIGO_PRODUTO` INT(11) NULL DEFAULT NULL,
	`CONJUGADO` INT(11) NULL DEFAULT NULL,
	`QUANTIDADE` DECIMAL(18,3) NULL DEFAULT '1.000',
	`DATA_LANCAMENTO` DATE NULL DEFAULT '0000-00-00',
	`HORA_LANCAMENTO` CHAR(10) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`CODIGO_USUARIO` INT(6) NOT NULL,
	`VALOR_UNITARIO` DECIMAL(18,3) NOT NULL DEFAULT '0.000',
	`DESCRICAO` CHAR(50) NOT NULL DEFAULT '\'\'' COLLATE 'utf8_general_ci',
	`IMPRESSO_COZINHA` CHAR(1) NULL DEFAULT 'N' COMMENT 'S=Sim, N=Não  Impresso Na Cozinha' COLLATE 'utf8_general_ci',
	`PREPARADO` CHAR(1) NOT NULL DEFAULT 'N' COMMENT 'Se o prato já está Preparado' COLLATE 'utf8_general_ci',
	`OBSERVACAO` CHAR(100) NULL DEFAULT '' COMMENT 'Observacao no Lancamento do Item' COLLATE 'utf8_general_ci',
	`TAMANHO` CHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`VALOR_SERVICO` DECIMAL(18,2) NULL DEFAULT '0.00' COMMENT 'Valor Total do Servico',
	`BORDA_ACOMPANHAMENTO` CHAR(200) NULL DEFAULT '' COMMENT 'Em Caso de Pizzaria Opcao de Borda, ou Acompanhamento' COLLATE 'utf8_general_ci',
	`DATA_INICIO_PRODUCAO` DATE NULL DEFAULT '0000-00-00',
	`HORA_INICIO_PRODUCAO` TIME NULL DEFAULT '00:00:00' COMMENT 'Hora de Inicio de producao',
	`DATA_FINAL_PRODUCAO` DATE NULL DEFAULT '0000-00-00',
	`HORA_FINAL_PRODUCAO` TIME NULL DEFAULT '00:00:00' COMMENT 'Hora de Inicio de producao',
	`LIBERADO_PRODUZIR` CHAR(1) NULL DEFAULT 'N' COMMENT 'Se Esta Liberado na Cozinha para Produzir' COLLATE 'utf8_general_ci',
	`REEMISSAO` CHAR(1) NULL DEFAULT 'N' COMMENT 'Se o Item Foi Reimpressao' COLLATE 'utf8_general_ci',
	`CODIGO_FORMA` INT(6) NULL DEFAULT '0' COMMENT 'Codigo da Forma de Abatimento',
	`ID_ABATIMENTO_ACRESCIMO` INT(11) NULL DEFAULT '0' COMMENT 'Numero do Id de Abatimento',
	`SETOR_ATENDIMENTO` CHAR(20) NULL DEFAULT '' COMMENT 'Nome do Setor Exemplo (Bar, Pista, varanda)' COLLATE 'utf8_general_ci',
	`STATUS_ITEM` CHAR(1) NULL DEFAULT 'A' COMMENT 'A=Ativo  E=Excluido' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`ID`) USING BTREE,
	INDEX `IDX_COMANDA` (`ID_COMANDA`) USING BTREE
)
COMMENT='Tabela de comandas_atendimento de Registro do Sistema'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

Agradeço a Todos

Link to comment
Share on other sites

26 minutos atrás, marcioe disse:

Olá a Todos, 

Tenho uma tabela MYSQL que tem os itens de uma comanda ( Sistema de Restaurante / Bares)
Dai preciso saber o tempo que o item já está lançado.

Lembrando que tem que levar em conta a data e hora de lançamento, porque as vezes Vira a noite, tipo a pessoa chega as 23:50,    Dai faz o pedido
Dai vira o dia e já são por exemplo 00:00:23 
O campos para se levar em conta são
    `DATA_LANCAMENTO`     `HORA_LANCAMENTO`  


Preciso saber em minutos quanto tempo tem 

Segue as estrutura da tabela
 

CREATE TABLE `comandas_atendimento` (
	`ID` INT(11) NOT NULL AUTO_INCREMENT,
	`ID_COMANDA` INT(11) NULL DEFAULT NULL,
	`CODIGO_PRODUTO` INT(11) NULL DEFAULT NULL,
	`CONJUGADO` INT(11) NULL DEFAULT NULL,
	`QUANTIDADE` DECIMAL(18,3) NULL DEFAULT '1.000',
	`DATA_LANCAMENTO` DATE NULL DEFAULT '0000-00-00',
	`HORA_LANCAMENTO` CHAR(10) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`CODIGO_USUARIO` INT(6) NOT NULL,
	`VALOR_UNITARIO` DECIMAL(18,3) NOT NULL DEFAULT '0.000',
	`DESCRICAO` CHAR(50) NOT NULL DEFAULT '\'\'' COLLATE 'utf8_general_ci',
	`IMPRESSO_COZINHA` CHAR(1) NULL DEFAULT 'N' COMMENT 'S=Sim, N=Não  Impresso Na Cozinha' COLLATE 'utf8_general_ci',
	`PREPARADO` CHAR(1) NOT NULL DEFAULT 'N' COMMENT 'Se o prato já está Preparado' COLLATE 'utf8_general_ci',
	`OBSERVACAO` CHAR(100) NULL DEFAULT '' COMMENT 'Observacao no Lancamento do Item' COLLATE 'utf8_general_ci',
	`TAMANHO` CHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`VALOR_SERVICO` DECIMAL(18,2) NULL DEFAULT '0.00' COMMENT 'Valor Total do Servico',
	`BORDA_ACOMPANHAMENTO` CHAR(200) NULL DEFAULT '' COMMENT 'Em Caso de Pizzaria Opcao de Borda, ou Acompanhamento' COLLATE 'utf8_general_ci',
	`DATA_INICIO_PRODUCAO` DATE NULL DEFAULT '0000-00-00',
	`HORA_INICIO_PRODUCAO` TIME NULL DEFAULT '00:00:00' COMMENT 'Hora de Inicio de producao',
	`DATA_FINAL_PRODUCAO` DATE NULL DEFAULT '0000-00-00',
	`HORA_FINAL_PRODUCAO` TIME NULL DEFAULT '00:00:00' COMMENT 'Hora de Inicio de producao',
	`LIBERADO_PRODUZIR` CHAR(1) NULL DEFAULT 'N' COMMENT 'Se Esta Liberado na Cozinha para Produzir' COLLATE 'utf8_general_ci',
	`REEMISSAO` CHAR(1) NULL DEFAULT 'N' COMMENT 'Se o Item Foi Reimpressao' COLLATE 'utf8_general_ci',
	`CODIGO_FORMA` INT(6) NULL DEFAULT '0' COMMENT 'Codigo da Forma de Abatimento',
	`ID_ABATIMENTO_ACRESCIMO` INT(11) NULL DEFAULT '0' COMMENT 'Numero do Id de Abatimento',
	`SETOR_ATENDIMENTO` CHAR(20) NULL DEFAULT '' COMMENT 'Nome do Setor Exemplo (Bar, Pista, varanda)' COLLATE 'utf8_general_ci',
	`STATUS_ITEM` CHAR(1) NULL DEFAULT 'A' COMMENT 'A=Ativo  E=Excluido' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`ID`) USING BTREE,
	INDEX `IDX_COMANDA` (`ID_COMANDA`) USING BTREE
)
COMMENT='Tabela de comandas_atendimento de Registro do Sistema'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

Agradeço a Todos

Olá Marcio,
SELECT TIMEDIFF('2024-01-25 00:05:00','2024-01-24 23:58:00');

Isso deve solucionar o que você precisa
 

Link to comment
Share on other sites

Elaptime já controla virada de dia, segue um exemplo simples pra fazer o que vc precisa (o exemplo abaixo só não vai funcionar se a pessoa ficar mais de 24 horas na mesa, se ficar até 23h 59m na mesa da certo)

 

cHor1 := "23:50:00"
cHor2 := "00:10:00"
 
cDif := ElapTime(cHor1, cHor2)
? cDif  // vai retornar 00:20:00
 
? TimeToMin(cDif)
 
Static Function TimeToMin(cTime)
Local nHor := Val(SubStr(cTime, 01, 02))
Local nMin := Val(SubStr(cTime, 04, 02))
Local nSeg := Val(SubStr(cTime, 07, 02))
Return (nHor * 60) + nMin + (nSeg / 60)
Link to comment
Share on other sites

SELECT
    data_lancamento,
    hora_lancamento,
    NOW() AS data_hora_atual,
    EXTRACT(EPOCH FROM (NOW()::timestamp - (data_lancamento + hora_lancamento::interval)))/60 AS diferenca_em_minutos
FROM
    comandas_atendimento where id = numedo_do_id ;

Lembrando que  os campos data_lancamento é DATE como o seu e o campo hora_lancamento neste exemplo acima eu crio sempre como character(08) e é gravado a time(), ou seja 09:42:25

Este exemplo acima é a comparação entre uma data e hora gravada na base e a data e hora atual do sistema operacional windows em minutos a resposta.

SELECT
    data_inicial_1,
    hora_inicial_1,
    data_inicial_2,
    hora_inicial_2,
    EXTRACT(EPOCH FROM (data_inicial_2 + hora_inicial_2::interval) - (data_inicial_1 + hora_inicial_1::interval))/60 AS diferenca_em_minutos
FROM
    sua_tabela where id = seu_numero_de_id;

Já este exemplo é a comparação entre datas e horas gravadas na base de dados em minutos a resposta.

Os dois SELECT foram e são testados no POSTGRESQL.

Link to comment
Share on other sites

Já no MYSQL, acredito que pode ser feito assim para os campos gravados na base.

SELECT
    data_inicial_1,
    hora_inicial_1,
    data_inicial_2,
    hora_inicial_2,
    TIMESTAMPDIFF(MINUTE, CONCAT(data_inicial_1, ' ', hora_inicial_1), CONCAT(data_inicial_2, ' ', hora_inicial_2)) AS diferenca_em_minutos
FROM
    sua_tabela where id = seu_id;

Já em comparação a data e hora gravada na base com a data e hora do sistema operacional windows, acredito que possa ser assim.
 

SELECT
    data_inicial_1,
    hora_inicial_1,
    NOW() AS data_hora_atual,
    TIMESTAMPDIFF(MINUTE, CONCAT(data_inicial_1, ' ', hora_inicial_1), NOW()) AS diferenca_em_minutos
FROM
    sua_tabela where id = seu_id;

 

Link to comment
Share on other sites

Não é uma boa prática você colocar esse tipo de função para o SQL resolver, sugiro deixar função de cálculo para o seu programa fazer e o SQL fazer o que lhe cabe que é gerenciar dados.

Quando você precisa escalar a aplicação fica sempre mais fácil escalar o servidor onde está a aplicação do que o servidor onde está o banco de dados.

Então fica essa sugestão mas é claro, existem exceções e esse pode ser o seu caso.

18 horas atrás, marcioe disse:

obrigado amigo por responder, mas queria fazer isso direto no banco com um select   

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...