Ir para conteúdo
Fórum Script Brasil
  • 0

Revezamentos


Amanda Makino

Pergunta

Caros, a situação é a seguinte...

Estou implementando um programa de Cadastro de Revezamentos

Esses revezamentos são utilizados por aqueles funcionários que não fazem somente um horário todos os dias (como é de costume)...

Eles fazem revezamentos, por exemplo: na segunda e na terça... fazem o horário da manhã...

na quarta e na quinta.. trabalham à noite... sábado folgam... domingo trabalham no horário da tarde... e assim vai...

Bem, andei olhando alguns sistemas de ponto pra ter uma idéia de como fazer esse cadastro...

E vi um que achei bem interessante... só que é desktop...

O que ele faz:

- Na tela de cadastro... um "calendário" é preenchido automaticamente de acordo com a data atual:

dataatualmm5.jpg

- Esse calendário é preenchido de acordo com o que foi preenchido na escala (seqüência de horários).

Vejam só:

preenchidokr0.jpg

- Na consulta, o programa exibe um calendário de acordo com a data atual e

calcula quais são os horários respectivos para cada dia.. preenchendo-o.

Então se eu cadastrei hoje esse revezamento...

com a primeira coluna do calendário da seguinte forma:

1 2 3 4 1 2 3 4

Se eu for consultá-lo na sexta, essa primeira coluna estará:

4 1 2 3 4 1 2 3

O meu grande problema é esse... como preencher esse calendário automaticamente de acordo com a data atual nessa consulta?

Sendo que:

- não gravo um horário pra cada dia do ano...

- gravo a escala (seqüencia de horários) e

- gravo a data de criação do revezamento

Alguma luz?! Já pensei tanto numa solução... mas não consigo encontrar nenhuma! ><

Vlw, pessoal..

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Se eu entendi, você quer uma função que calcule isso:

(pra simplificar, estou supondo que os dias sejam números)

int horario(int dia, int sequencia[], int diaCriacao) {
    return sequencia[(dia - diaCriacao) % sequencia.length]
}
Exemplos:
sequencia = { 1, 2, 3 }
horario(2, sequencia, 2) => 1
horario(3, sequencia, 2) => 2
horario(4, sequencia, 2) => 3
horario(5, sequencia, 2) => 1

Agora você só precisa atribuir um número para cada dia (o que deve ser fácil se você converter a data pra Unix time).

Link para o comentário
Compartilhar em outros sites

  • 0

iSoron,

nossa... muito obrigada pela resposta!

Vou tentar implementar sua sugestão!

Tenho quase certeza que irá dar certo...

Depois eu volto para confirmar isto..

Vlw, obrigada mesmo!!

você é um gênio! :D

Estava ficando louca aqui sem uma solução..rsrs

^^

Editado por Amanda Makino
Link para o comentário
Compartilhar em outros sites

  • 0

Ahhh sim... q simples.. ^^

rsrsrs

Vlw...

Mas desse modo não funcionou... =/

Pra testar eu cadastrei um revezamento e logo depois o consultei...

O calendário da tela de consulta deveria estar do mesmo jeito que o da tela de cadastro, afinal, criei e consultei no mesmo dia...

Mas não é o que acontece... =/

Quando consulto e mando calcular os horários e jogar no calendário certinho...

Fica tudo embaralhado...

Método:

public Long CalcularHorario(Date dataItem, String[] sequencia, Date dataCriacao) {
        
        Long utDataItem = dataItem.getTime();
        Long utDataCriacao = dataCriacao.getTime();
        
        return Long.parseLong(sequencia[(int) (utDataItem - utDataCriacao) % sequencia.length]);
    }

Prints no endereço:

http://novo.xpg.com.br/site/index.php?uid=1104717867551502

Passos para visualizá-los:

- clique no "+" de Fotos

- abra o álbum Aplicação

- clique na primeira foto ("Cadastrando").

- depois é só indo pra frente...

Editado por Amanda Makino
Link para o comentário
Compartilhar em outros sites

  • 0

Ahhhh!! Deu certo!!!! \o/

Finalmente!

O problema é que a função estava passando a diferença em milisegundos para o cálculo do mod (%).

E o que deveria passar era a diferença em dias, então fiz o seguinte:

public Long CalcularHorario(Date dataItem, String[] sequencia, Date dataCriacao) {
        
        Long diferencaEmMiliSegundos = dataItem.getTime() - dataCriacao.getTime();
        Long diferencaEmDias = diferencaEmMiliSegundos/(1000L*60L*60L*24L);

        return Long.parseLong(sequencia[(int) (diferencaEmDias % sequencia.length)]);
    }

E funcionou!

Nem acredito!! hehe!!

Obrigada, Isoron!!! ;)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...