Fração de horas ( estacionamento )

11/04/2019

0

Estou criando um sistema e travei no calculo do tempo que o cliente ficou no estabelecimento.
tenho um tabela de preço por hora que tem
1hr = 20,00
2hr = 25,00
3hr = 30,00
noite = 40,00

eu quero que verifique a entrada bata com a saida e verificar se o valor é correspondente a 1hr, 2 ou 3 horas.
estou usando esse código, ele busca a hora certinha, o valor, mas na hora de jogar o resultado ele pula para o fim.

var
TempoTotal,
dHoraIni,
dHoraFim : TTime;

PrecoUma_Hora
PrecoDuas_Hora : Double;

begin
//Hora Inicial
dHoraIni := StrToTime(Fmenu.labHora.Text);
//Hora Final
dHoraFim := now;
//Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
TempoTotal := dHoraFim - dHoraIni;

//Encontrar Valor que irá pagar pelo tempo que ficou
PrecoUma_Hora := Modelconexao.tb_precoUMA_HORA.AsCurrency;
PrecoDuas_Hora := Modelconexao.tb_precoDUAS_HORA.AsCurrency;
//Se o tempo total for menor igual a 1hr ele me dá o preço de 1hr
if (TempoTotal <= StrToTime('01:00:00')) then
begin
lblPrecoHora.Text := PrecoUma_Hora;
end
else
begin
//Se não for menor ou igual me deixa o campo com está
lblPrecoHora.Text := '0,00';

begin
//Se o tempo total for maior a 1hr e menor que 2hr, me dá o preço de 2hr
if (TempoTotal > StrToTime('01:00:00')) and (TempoTotal <= StrToTime('02:00:00')) then
begin
lblPrecoHora.Text := PrecoDuas_Hora
end
else
begin
lblPrecoHora.Text := '0,00';

end;
end;
end;
end;

Tem alguém possa me ajudar?!
Gilson

Gilson

Responder

Posts

12/04/2019

Emerson Nascimento

Veja se assim funciona:
var
	TempoTotal, 
	dHoraIni,
	dHoraFim : TTime;
	PrecoUma_Hora,
	PrecoDuas_Hora,
	PrecoTres_Hora : Double;
begin
	//Hora Inicial
	dHoraIni := StrToTime(Fmenu.labHora.Text);
	//Hora Final
	dHoraFim := now;
	//Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
	TempoTotal := dHoraFim - dHoraIni;

	// inicialmente, atribui zero para o valor cobrado
	lblPrecoHora.Text := '0,00';

	//Encontrar Valor que irá pagar pelo tempo que ficou
	PrecoUma_Hora := Modelconexao.tb_precoUMA_HORA.AsCurrency;
	PrecoDuas_Hora := Modelconexao.tb_precoDUAS_HORA.AsCurrency;
	PrecoTres_Hora := Modelconexao.tb_precoTRES_HORA.AsCurrency;

	if (TempoTotal <= StrToTime('01:00:00')) then
		//Se o tempo total for menor ou igual a 1hr ele me dá o preço de 1hr
		lblPrecoHora.Text := PrecoUma_Hora
	else
	if (TempoTotal <= StrToTime('02:00:00')) then
		//Se o tempo total for maior que 1hr e menor que 2hr, me dá o preço de 2hr
		lblPrecoHora.Text := PrecoDuas_Hora
	else
	if (TempoTotal <= StrToTime('03:00:00')) then
		//Se o tempo total for maior que 2hr e menor que 3hr, me dá o preço de 3hr
		lblPrecoHora.Text := PrecoTres_Hora;

end;
Responder

12/04/2019

Gilson

Veja se assim funciona:
var
	TempoTotal, 
	dHoraIni,
	dHoraFim : TTime;
	PrecoUma_Hora,
	PrecoDuas_Hora,
	PrecoTres_Hora : Double;
begin
	//Hora Inicial
	dHoraIni := StrToTime(Fmenu.labHora.Text);
	//Hora Final
	dHoraFim := now;
	//Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
	TempoTotal := dHoraFim - dHoraIni;

	// inicialmente, atribui zero para o valor cobrado
	lblPrecoHora.Text := '0,00';

	//Encontrar Valor que irá pagar pelo tempo que ficou
	PrecoUma_Hora := Modelconexao.tb_precoUMA_HORA.AsCurrency;
	PrecoDuas_Hora := Modelconexao.tb_precoDUAS_HORA.AsCurrency;
	PrecoTres_Hora := Modelconexao.tb_precoTRES_HORA.AsCurrency;

	if (TempoTotal <= StrToTime('01:00:00')) then
		//Se o tempo total for menor ou igual a 1hr ele me dá o preço de 1hr
		lblPrecoHora.Text := PrecoUma_Hora
	else
	if (TempoTotal <= StrToTime('02:00:00')) then
		//Se o tempo total for maior que 1hr e menor que 2hr, me dá o preço de 2hr
		lblPrecoHora.Text := PrecoDuas_Hora
	else
	if (TempoTotal <= StrToTime('03:00:00')) then
		//Se o tempo total for maior que 2hr e menor que 3hr, me dá o preço de 3hr
		lblPrecoHora.Text := PrecoTres_Hora;

end;


Vou testar agora, mano sei que não tem nada ver com esse post, mas você entende de enviar anexo pelo delphi 10.3, porque tenho todo código, adicionei os componentes, habilitei o gmail, mas quando ele roda, tenta conectar e vai direto pra disconnect.

Se souber me ajuda!
segue meu whats 79 99108-2648 Email gilson.oliver13@gmail.com
Responder

13/04/2019

Gilson

Veja se assim funciona:
var
	TempoTotal, 
	dHoraIni,
	dHoraFim : TTime;
	PrecoUma_Hora,
	PrecoDuas_Hora,
	PrecoTres_Hora : Double;
begin
	//Hora Inicial
	dHoraIni := StrToTime(Fmenu.labHora.Text);
	//Hora Final
	dHoraFim := now;
	//Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
	TempoTotal := dHoraFim - dHoraIni;

	// inicialmente, atribui zero para o valor cobrado
	lblPrecoHora.Text := '0,00';

	//Encontrar Valor que irá pagar pelo tempo que ficou
	PrecoUma_Hora := Modelconexao.tb_precoUMA_HORA.AsCurrency;
	PrecoDuas_Hora := Modelconexao.tb_precoDUAS_HORA.AsCurrency;
	PrecoTres_Hora := Modelconexao.tb_precoTRES_HORA.AsCurrency;

	if (TempoTotal <= StrToTime('01:00:00')) then
		//Se o tempo total for menor ou igual a 1hr ele me dá o preço de 1hr
		lblPrecoHora.Text := PrecoUma_Hora
	else
	if (TempoTotal <= StrToTime('02:00:00')) then
		//Se o tempo total for maior que 1hr e menor que 2hr, me dá o preço de 2hr
		lblPrecoHora.Text := PrecoDuas_Hora
	else
	if (TempoTotal <= StrToTime('03:00:00')) then
		//Se o tempo total for maior que 2hr e menor que 3hr, me dá o preço de 3hr
		lblPrecoHora.Text := PrecoTres_Hora;

end;


Boa tarde, cara não pegou!
Responder

15/04/2019

Emerson Nascimento

Fiz assim e funcionou:
var
    TempoTotal,
    dHoraIni,
    dHoraFim : TTime;
    PrecoUma_Hora,
    PrecoDuas_Hora,
    PrecoTres_Hora : Double;
begin
    //Hora Inicial
    dHoraIni := StrToTime(Edit1.Text);
    //Hora Final
    dHoraFim := Time;
    //Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
    TempoTotal := dHoraFim - dHoraIni;

    // inicialmente, atribui zero para o valor cobrado
    lblPrecoHora.Caption := '0,00';

    //Encontrar Valor que irá pagar pelo tempo que ficou
    PrecoUma_Hora := 20;//Modelconexao.tb_precoUMA_HORA.AsCurrency;
    PrecoDuas_Hora := 25;//Modelconexao.tb_precoDUAS_HORA.AsCurrency;
    PrecoTres_Hora := 30;//Modelconexao.tb_precoTRES_HORA.AsCurrency;

    if (TempoTotal > StrToTime('02:00:00')) then
        //Se o tempo total for maior que 2hr e menor que 3hr, me dá o preço de 3hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoTres_Hora)
    else
    if (TempoTotal > StrToTime('01:00:00')) then
        //Se o tempo total for maior que 1hr e menor que 2hr, me dá o preço de 2hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoDuas_Hora)
    else
        //Se o tempo total for menor ou igual a 1hr ele me dá o preço de 1hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoUma_Hora);

end;


Responder

16/04/2019

Gilson

Fiz assim e funcionou:
var
    TempoTotal,
    dHoraIni,
    dHoraFim : TTime;
    PrecoUma_Hora,
    PrecoDuas_Hora,
    PrecoTres_Hora : Double;
begin
    //Hora Inicial
    dHoraIni := StrToTime(Edit1.Text);
    //Hora Final
    dHoraFim := Time;
    //Tempo total que ficou no estabelecimento, Hora Inicial - menos Hora Final
    TempoTotal := dHoraFim - dHoraIni;

    // inicialmente, atribui zero para o valor cobrado
    lblPrecoHora.Caption := '0,00';

    //Encontrar Valor que irá pagar pelo tempo que ficou
    PrecoUma_Hora := 20;//Modelconexao.tb_precoUMA_HORA.AsCurrency;
    PrecoDuas_Hora := 25;//Modelconexao.tb_precoDUAS_HORA.AsCurrency;
    PrecoTres_Hora := 30;//Modelconexao.tb_precoTRES_HORA.AsCurrency;

    if (TempoTotal > StrToTime('02:00:00')) then
        //Se o tempo total for maior que 2hr e menor que 3hr, me dá o preço de 3hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoTres_Hora)
    else
    if (TempoTotal > StrToTime('01:00:00')) then
        //Se o tempo total for maior que 1hr e menor que 2hr, me dá o preço de 2hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoDuas_Hora)
    else
        //Se o tempo total for menor ou igual a 1hr ele me dá o preço de 1hr
        lblPrecoHora.Caption := FormatFloat(',#0.00',PrecoUma_Hora);

end;




O mano obrigado por me responder, mas dessa formar ai não pega, mas te tanto pesquisar acabei achando uma solução, diminuir hora inicial com hora final, depois usei decodeTime pra quebrar a hora e depois transformei em minutos, ai funcionou o > e <, não entendo o porquê mas ele só pegou quando tranaformei tudo em minutos e deixei como número inteiro, em time ele não pega!

Mas obrigado novamente, sim ainda estou com aquela dúvida sobre enviar anexo pdf pelo e-mail, já usei vários códigos e nenhum pegou!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar