Você está na página 1de 2

List<ListaSlotsStruct> todosSlots = [];

DateTime agora = dataInicio;

for (HorarioRecord horario in horariosData) {


// Extrair dados do horário a partir de HorarioRecord
int jornadaInicioMinutos =
horario.jornadaHoraInicio * 60 + horario.jornadaMinutoInicio;
int jornadaTerminoMinutos =
horario.jornadaHoraTermino * 60 + horario.jornadaMinutoTermino;
int intervaloInicioMinutos =
horario.intervaloHoraInicial * 60 + horario.intervaloMinutoInicial;
int intervaloFimMinutos =
intervaloInicioMinutos + horario.intervaloTotalMinutos;

// Iterar pelos dias da semana


for (int dia = 1; dia <= 7; dia++) {
DateTime dataAtual = agora.add(Duration(days: dia - agora.weekday));

// Verificar se o dia da semana é permitido


bool diaPermitido = horarioDetalhes.any(
(detalhe) =>
detalhe.userProvider == userProvider &&
detalhe.horario == horarioDetalhes[0].horario &&
detalhe.diaSemana == dataAtual.weekday,
);

if (diaPermitido) {
// Gerar slots dentro do intervalo de trabalho
DateTime inicioJornada = DateTime(
dataAtual.year,
dataAtual.month,
dataAtual.day,
horario.jornadaHoraInicio,
horario.jornadaMinutoInicio,
);
DateTime fimJornada = DateTime(
dataAtual.year,
dataAtual.month,
dataAtual.day,
horario.jornadaHoraTermino,
horario.jornadaMinutoTermino,
);

DateTime slotAtual = inicioJornada;


while (slotAtual.isBefore(fimJornada)) {
// Verificar se o slot está reservado
bool reservado =
slotsReservados != null && slotsReservados.contains(slotAtual);

// Criar objeto ListaSlotsStruct


ListaSlotsStruct slot = ListaSlotsStruct(
date: slotAtual,
isReserved: reservado,
);

// Adicionar à lista todosSlots


todosSlots.add(slot);

// Avançar para o próximo slot


slotAtual = slotAtual.add(Duration(minutes: horario.slotDuracao));

// Verificar se o slot está dentro do intervalo de trabalho


if (slotAtual.hour * 60 + slotAtual.minute >=
intervaloInicioMinutos &&
slotAtual.hour * 60 + slotAtual.minute < intervaloFimMinutos) {
slotAtual =
slotAtual.add(Duration(minutes: horario.intervaloTotalMinutos));
}
}
}
}
}

return todosSlots;

Você também pode gostar