Boa tarde galera!!!
Estou desenvolvendo um projeto JSF+PRIMEFACES 2.2 e demais linguagens… estou querendo criar um GerarEscala meio inteligente… que pegue o nome dos meus 5 operadores e crie uma escala para o mesmo com um simples clique… eu tenho regras de nógicio para isto ex: Um operador que inicia o seu trabalho no periodo noturno devera ficar o resto da semana no peiodo notuno… Agora a minha grande e eterna duvida é… COMO GERAR UM CALENDARIO DE ESCALA ALTOMATICAMENTE?.. obrigado 
Gerar data altomaticamente para escala
7 Respostas
Voce tem mais detalhes sobre a sua implementacao?
A grosso modo, voce poderia criar um Map de funcionarios.
Pseudocodigo:
Map
class Escala() {
private Map<Date, PeriodoEnum> mapEscala;
}
enum Periodo {
NOTURNO,
DIURNO
}
class Funcionario {
private String nome;
}
class Calendario {
Map<Funcionario, Escala> mapFuncionarios;
void render() {
while ( nextFuncionario ) {
Escala e = mapFuncionarios.get(funcionario);
// impressao de funcionario vc escala
print(funcionario, e);
}
}
}
Detalhes de que tipo você quer? meu diagrama de classes ou oque?
Mais descricao de como sera o seu calendario. Um wireframe?
ta vamos la vou tentar ser o mais claro possivel… eu tenho o meu cadastro de operadores em uma tela e a tela escala certo?.. bem na tela escala oque eu pensei… selecionar o mes atravez de uma função do <p:calendar> do prime faces e depois clicar em um button GERAR! e ser gerada a tabela com os nome dos operadores e sua escala, vou tentar fazer ela nesse estilo editavel
http://quebrandoparadigmas.com/?p=223
pois dai ela jera de uma forma padrao para todo mes uma escala, depois o colaborador responsavel pela escala pode fazer alguns ajustes certo? oque vou ter nessa tabela:
NOME OPERADOR.
DIA.
HORARIO.
E FOLGA.
conseguiu vizualizar?
Considerando o contexto todo, acredito que apenas um map não resolva.
A não ser que seja um Map de escalas.
Explico, o dia será dividido em escalas (período de horas de trabalho). Cada escala precisa ter um Funcionário, hora de entrada e de saída. Além disso, deve haver um indicativo, penso que booleano, funcionario_folga que, quando true, obriga um outro funcionário a ser escalado (este ajuste pode ser manual).
Além disto, a escala pode conter, para a questão das horas de entrada e saída, uma constante (ou enum) do turno (manhã, tarde, noite).
Algo assim
public class Escala{
private Funcionario funcionario;
private Date data;
private String turno;
private boolean funcionarioFolga;
//demais logicas aqui
}
Assim, quando a data for dia 10 e a flag funcionarioFolga estiver true, sabe-se que o funcionario X não estará ali.
Mais ou menos isso…
class Operador {
private String nome;
}
enum Periodo {
NOTURNO,
DIURNO
}
class Escala {
private Operador op;
private java.util.Date dataEscala;
private boolean isFolga;
private Periodo periodo;
}
@ManagedBean
@SessionScoped
class EscalaController {
private List<Escala> escala = new ArrayList<Escala>();
public List<Escala> getEscala() {
if ( this.escala.isEmpty ) {
this.escala = // get data.
}
return this.escala;
}
}
JSF:
<p:dataTable paginator=“true” paginatorPosition=“bottom” rows=“10” var=“tarefa” value="#{escalaController.escala}">
<p:column headerText=“Operador”>
<p:resizable />
<p:cellEditor>
<f:facet name=“output”><h:outputText value="#{escala.op.nome}"/></f:facet>
<f:facet name=“input”><h:inputText value="#{escala.op.nome}"/></f:facet>
</p:cellEditor>
</p:column>
…
</p:dataTable>
Brow … um link muito bom que vai te ajudar muito: