Array
(
)

Programa para Imobiliária (Preciso de ajuda com códigos)

Midialab
   - 04 ago 2004

Caros amigos,
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 :( :?:


Lucas Silva
   - 05 ago 2004

Vinícius,
O que que você já fez do programa, e qual a sua dúvida?


Dpinho
   - 05 ago 2004

Esta rotina gera os lançamentos de mensalidades
///
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;
********


Midialab
   - 06 ago 2004

Oi Dpinho,

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.


Midialab
   - 06 ago 2004

Fala Lucas!

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]


Midialab
   - 06 ago 2004

DPinho!

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?


Dpinho
   - 06 ago 2004

Voce poderia implementar uma função que leia a diferença da data inicial co contrato e a data final e retornasse a quantidade de mês no periodo, a variavel vNuMes receberia este valor calculando as prestações, na tela acima existe informações repetidas como mês inicial e Mês final, depois vem o mesmo periodo em data inicial e data final, veja se tem mesmo necessidade de repetir informação
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;


Midialab
   - 07 ago 2004

DPinho!

Obrigado pela ajuda que você está prestando.
Vou testar aqui e depois posto pra vc saber como está indo!


Midialab
   - 20 out 2004

DPinho! Estou precisando de uma força aí!
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 (DiaVencimento.Value). 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

VAR
NMESES, NCONTADOR: INTEGER;
nAno, nMes, nDia: word;
BEGIN
IF TABLEIMOVEISGERADO.VALUE = FALSE THEN
BEGIN
NMESES := TRUNC((TableImoveisPeriodofINAL.VALUE - TABLEIMOVEISPERIODOINICIO.VALUE)/30); {periodofinal é o edit q pega o fim do contrato} {periodoinicio é o edit q pega o inicio do contrato} {depois de calcular a quantidade de dias ele divide por trinta para ter em meses}
FOR NCONTADOR := 1 TO NMESES DO
BEGIN
TABLERECEBER.APPEND; {tablereceber é a tabela q grava as parcelas}
TableReceberCodigoImovel.VALUE := TableImoveisCodigoImovel.VALUE; {tableimoveis é onde cadastramos os imóveis}
DecodeDate(TableImoveisPeriodoInicio.VALUE + (NCONTADOR*30),nAno,nMes,nDia); {onde a data é dividida e gravada nas variáveis, nAno grava o ano, nMes grava o mes e nDia grava o dia}
IF ((TableImoveisDiaVencimento.value = 30) OR (TableImoveisDiaVencimento.value = 31)) AND (nMes = 2) THEN {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}
TableReceberDataVencimento.VALUE := EncodeDate(nAno, nMes, 28)
ELSE
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;
END;
TABLEIMOVEIS.EDIT;
TABLEIMOVEISGERADO.VALUE := TRUE;
TABLEIMOVEIS.POST;
DBISAVECHANGES(TABLEImoveis.Handle);
END;


Horus
   - 21 out 2004

Oi.
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.


Midialab
   - 21 out 2004

DECODEDATE separa os dados e grava os valores nas variáveis que eu declarei no início lá. O mês ele grava em nMes, o ano em nAno e o dia em nDia que é para gerar as parcelas mensais.
Já o TRUNC é 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:
´NMESES := TRUNC((TableImoveisPeriodofINAL.VALUE - TABLEIMOVEISPERIODOINICIO.VALUE)/30);´, então é utilizado o TRUNC que destrói qualquer casa decimal que existir.


Midialab
   - 26 out 2004

Onde estão meus caros amigos feras em Delphi?
Por favor amigos me ajudem com esse código aí em cima estou precisando muito.