Programa para Imobiliária (Preciso de ajuda com códigos)
04/08/2004
0
Paz saúde e alegria a todos.
Gostaria de solicitar por favor que me ajudem com um programa de imobiliária que estou fazendo.
Eu gostaria de complementar o código dele facilitando a pesquisa dos clientes que estão com os aluguéis atrazados.
Mas estou tendo problemas com a geração das datas de vencimento automaticamente.
A rotina que imaginei é a seguinte:
- No cadastro será escolhido o dia do vencimento do aluguel e também o período em que será feito o contrato em meses, por exemplo, 12 meses.
- O programa gera as datas subsequentes sozinho. No caso do cliente que fechou um contrato no dia 1/1/2004, o seu vencimento será gerado automaticamente até dia 1/12/2004.
- O programa terá uma tela de pesquisa onde coloco a data do dia e são filtrados os aluguéis que vencem naquele dia e mês apenas. (isso é simples).
- O programa terá um tela onde seleciono o imóvel pelo código e dou baixa no mês que ele pagou sendo assim não aparecerá mais na pesquisa os meses já pagos e passados.
- O programa mostra os clientes que estão em atrazo na pesquisa com uma cor vermelha e os outros na mesma cor padrão.
O sistema se parece com um sistema de carnês. Mas no lugar de nomes e cpf de clientes as pesquisas serão feitas com endereços de imóveis ou nome de locadores e/ou locatários.
Gostaria de ajuda com isso se possível eu tenho certeza que tem alguém aí que já fez algo assim ou algum sistema de carnês que pode me ajudar.
Desde já agradeço pela ajuda e atenção
Vinícius :( :?:
Midialab
Posts
05/08/2004
Lucas Silva
O que que você já fez do programa, e qual a sua dúvida?
05/08/2004
Dpinho
///
vMes:=StrToDate(Datent.Text); //busca o mes da data
DecodeDate(vMes, vAno, vNMes, vDia);
vNuMes:= (12 - vNMes);
for I:= 1 to vNuMes do // vNuMes é o numero de prestações escolhidas
Begin
clau:= Diapag.Text +´/´+IntToStr(VNMes+I)+´/´+IntToStr(vAno); // Diapag.Text é o dia escolhido para pagamento
TBMensa.Open;
TBMensa.Insert;
TBMensaNumero.Value := DBmatricula.Text + ´/´ + inttostr(I);
TBMensaAluno.Value := DBaluno.Text;
TBMensaDtlan.Value := vMes;
TBMensaDtvenc.Value := strtodate(clau);
TBMensaValor.Value := strtocurr(Edit1.Text);
TBMensa.Post;
end;
********
06/08/2004
Midialab
Vou tentar aqui agora daqui a pouco te falo o que foi que deu.
Acho que é isso aí mesmo, vamos ver aqui.
Desde já obrigado pela ajuda.
06/08/2004
Midialab
Eu vou postar na sequências as duas telas que já fiz e aí vcs vão ter uma idéia do que estou falando.
Veja aí a tela em que eu cadastro os dados do imóvel incluindo as informações sobre juros e multa, etc:
[img:84393cbb01]http://www.midialabsystem.com.br/programa1.JPG[/img:84393cbb01]
Veja agora a tela em que eu busco as informações para fazer o recebimento do Aluguel eu já tenho ali os dados que cadastrei antes e vou apenas fazer o cálculo e dar baixa no mês:
[img:84393cbb01]http://www.midialabsystem.com.br/programa2.JPG[/img:84393cbb01]
06/08/2004
Midialab
No caso aí eu vi que no código eu preciso dizer quantas prestações vão ser pagas, no programa em vez disso eu digo quando vai ser a data da última prestação.
No Período de Locação eu tenho dois campos um para a data de início e outra para a data de término.
Como eu poderia implementar o código que você postou pra buscar essa data em vez de pegar o número de meses?
06/08/2004
Dpinho
Existe uma função acho que aqui mesmo no clube do delphi que retornar a diferença de duas datas em mês, ou no site activedelphi.com.br voce pode encontrar
use esta rotina
//////
Procedure EntreDatas(DataFinal,DataInicial : TDate ; var Anos,Meses,Dias : Integer) ;
//
// Retorna a diferença em Dias,Meses e Anos entre 2 datas
//
Function Calcula(Periodo : Integer) : Integer ;
var
intCont : Integer ;
begin
intCont := 0 ;
Repeat
Inc(intCont) ;
DataFinal := IncMonth(DataFinal,Periodo * -1) ;
Until DataFinal < DataInicial ;
DataFinal := IncMonth(DataFinal,Periodo) ;
Inc(intCont,-1) ;
Result := intCont ;
End ;
begin
if DataFinal <= DataInicial then
begin
Anos := 0 ;
Meses := 0 ;
Dias := 0 ;
exit ;
end;
Anos := Calcula(12) ;
Meses := Calcula(1) ;
Dias := Round(DataFinal - DataInicial) ;
end;
07/08/2004
Midialab
Obrigado pela ajuda que você está prestando.
Vou testar aqui e depois posto pra vc saber como está indo!
20/10/2004
Midialab
Se puder me dá uma ajuda!
Eu testei o código abaixo e ele tem um problema.
O que eu preciso é que ele verifique se o período é < (menor que) 30 dias e então gere uma parcela única no dia escolhido como dia do vencimento [b:520430071f](DiaVencimento.Value). [/b:520430071f]E se o período for >(maior que) 30 dias então ele gera as parcelas mensais.
/////veja o trecho abaixo:
/////a tabela onde cadastro os imóveis se chama TableImoveis
//// a tabela onde gravo as parcelas se chama TableReceber
[b:520430071f]VAR[/b:520430071f]
NMESES, NCONTADOR: [b:520430071f]INTEGER[/b:520430071f];
nAno, nMes, nDia: word;
[b:520430071f]BEGIN[/b:520430071f]
[b:520430071f]IF[/b:520430071f] TABLEIMOVEISGERADO.VALUE = [b:520430071f]FALSE[/b:520430071f] [b:520430071f]THEN[/b:520430071f]
[b:520430071f]BEGIN[/b:520430071f]
NMESES := TRUNC((TableImoveisPeriodofINAL.VALUE - TABLEIMOVEISPERIODOINICIO.VALUE)/30); [color=red:520430071f][i:520430071f]{periodofinal é o edit q pega o fim do contrato}[/i:520430071f] [i:520430071f]{periodoinicio é o edit q pega o inicio do contrato}[/i:520430071f] [i:520430071f]{depois de calcular a quantidade de dias ele divide por trinta para ter em meses}[/i:520430071f][/color:520430071f]
[b:520430071f]FOR[/b:520430071f] NCONTADOR := 1 [b:520430071f]TO[/b:520430071f] NMESES [b:520430071f]DO[/b:520430071f]
BEGIN
TABLERECEBER.APPEND; [color=red:520430071f][i:520430071f]{tablereceber é a tabela q grava as parcelas}[/i:520430071f][/color:520430071f]
TableReceberCodigoImovel.VALUE := TableImoveisCodigoImovel.VALUE; [color=red:520430071f][i:520430071f]{tableimoveis é onde cadastramos os imóveis}[/i:520430071f][/color:520430071f]
DecodeDate(TableImoveisPeriodoInicio.VALUE + (NCONTADOR*30),nAno,nMes,nDia); [color=red:520430071f][i:520430071f]{onde a data é dividida e gravada nas variáveis, nAno grava o ano, nMes grava o mes e nDia grava o dia}[/i:520430071f][/color:520430071f]
[b:520430071f]IF[/b:520430071f] ((TableImoveisDiaVencimento.value = 30) [b:520430071f]OR [/b:520430071f](TableImoveisDiaVencimento.value = 31)) [b:520430071f]AND[/b:520430071f] (nMes = 2) [b:520430071f]THEN[/b:520430071f] [color=red:520430071f][i:520430071f]{aqui é feio um teste para ver se o dia de vencimento do mes 2 (fevereiro) é igual a 30 ou 31, se for, será gravada a parcela no dia 28}[/i:520430071f][/color:520430071f]
TableReceberDataVencimento.VALUE := EncodeDate(nAno, nMes, 28)
[b:520430071f]ELSE[/b:520430071f]
TableReceberDataVencimento.VALUE := EncodeDate(nAno, nMes, TableIMoveisDiaVencimento.Value);
TableReceberValorAluguel.Value:= TableImoveisValorAluguel.Value;
TableReceberNumParcela.Value := nContador;
TableReceberDataInicialMes.Value := TableImoveisPeriodoInicio.vALUE;
TableReceberDataFinalMes.Value := TableImoveisPeriodoFinal.value;
TableReceberValorCondominio.Value := TableImoveisValorCondominio.value;
TableReceberHonorarios.Value:= TableImoveisHonorarios.value;
TableReceberCodEvento.Value:= 1;
TableReceberNomeLocatario.Value:= TableImoveisVerLocatario.Value;
TABLERECEBER.POST;
[b:520430071f]END;[/b:520430071f]
TABLEIMOVEIS.EDIT;
TABLEIMOVEISGERADO.VALUE := TRUE;
TABLEIMOVEIS.POST;
DBISAVECHANGES(TABLEImoveis.Handle);
[b:520430071f]END;[/b:520430071f]
21/10/2004
Horus
Me desculpe, por não estar aqui para ajudar e sim para perguntar.
Mas, aprendi que devemos compartilhar informações acima de tudo, afinal este é o intuito do fórum.
Entrei no seu tópico pensando que poderia ajudar de alguma forma e quem sabe mais na frente não possa...
Mas, as minhas perguntas são as seguintes:
O que faz o DECODEDATE? E porque você usou o TRUNC com aqueles edits?
Desde já agradeço se você poder ajudar.
21/10/2004
Midialab
Já o [b:d0a41a3b28]TRUNC[/b:d0a41a3b28] é usado por que a variável NMESES que grava o número de MESES do período é do tipo inteiro, e para que não sejam gravadas casas decimais na divisão por 30 que vc pode ver lá na linha:
[b:d0a41a3b28][i:d0a41a3b28]´NMESES := TRUNC((TableImoveisPeriodofINAL.VALUE - TABLEIMOVEISPERIODOINICIO.VALUE)/30);´[/i:d0a41a3b28][/b:d0a41a3b28], então é utilizado o TRUNC que destrói qualquer casa decimal que existir.
26/10/2004
Midialab
Por favor amigos me ajudem com esse código aí em cima estou precisando muito.
Clique aqui para fazer login e interagir na Comunidade :)