Før endringer av strømforbruket
This commit is contained in:
parent
ee198150c2
commit
f7eeba2037
4 changed files with 223 additions and 10111 deletions
|
|
@ -34,15 +34,13 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
private TextView txtSheetTitle, txtDatePreview, txtUsersPreview;
|
private TextView txtSheetTitle, txtDatePreview, txtUsersPreview;
|
||||||
|
|
||||||
private Calendar dueDate = Calendar.getInstance();
|
private Calendar dueDate = Calendar.getInstance();
|
||||||
private List<User> allUsersFromApi = new ArrayList<>();
|
|
||||||
private List<User> filteredUsers = new ArrayList<>();
|
private List<User> filteredUsers = new ArrayList<>();
|
||||||
private List<User> selectedUsers = new ArrayList<>();
|
private List<User> selectedUsers = new ArrayList<>();
|
||||||
|
private TaskItem taskToEdit = null;
|
||||||
private TaskItem taskToEdit = null; // NYTT: Hold på oppgaven som skal endres
|
|
||||||
|
|
||||||
public interface OnTaskAddedListener {
|
public interface OnTaskAddedListener {
|
||||||
void onTaskAdded(TaskItem task);
|
void onTaskAdded(TaskItem task);
|
||||||
void onTaskUpdated(TaskItem task); // NYTT
|
void onTaskUpdated(TaskItem task);
|
||||||
}
|
}
|
||||||
|
|
||||||
private OnTaskAddedListener listener;
|
private OnTaskAddedListener listener;
|
||||||
|
|
@ -51,7 +49,6 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NYTT: Metode for å sette oppgaven som skal redigeres
|
|
||||||
public void setTaskToEdit(TaskItem task) {
|
public void setTaskToEdit(TaskItem task) {
|
||||||
this.taskToEdit = task;
|
this.taskToEdit = task;
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +73,7 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.bottom_sheet_add_task, container, false);
|
View v = inflater.inflate(R.layout.bottom_sheet_add_task, container, false);
|
||||||
|
|
||||||
txtSheetTitle = v.findViewById(R.id.txt_sheet_title); // Pass på at denne IDen finnes i XML
|
txtSheetTitle = v.findViewById(R.id.txt_sheet_title);
|
||||||
etTitle = v.findViewById(R.id.et_task_title);
|
etTitle = v.findViewById(R.id.et_task_title);
|
||||||
etDesc = v.findViewById(R.id.et_task_desc);
|
etDesc = v.findViewById(R.id.et_task_desc);
|
||||||
btnDate = v.findViewById(R.id.btn_task_date);
|
btnDate = v.findViewById(R.id.btn_task_date);
|
||||||
|
|
@ -107,24 +104,23 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
btnUsers.setOnClickListener(view -> showUserSelectionDialog());
|
btnUsers.setOnClickListener(view -> showUserSelectionDialog());
|
||||||
btnSave.setOnClickListener(view -> saveTask());
|
btnSave.setOnClickListener(view -> saveTask());
|
||||||
|
|
||||||
fetchUsers();
|
fetchAndFilterUsers();
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchUsers() {
|
private void fetchAndFilterUsers() {
|
||||||
RetrofitClient.getApiService().getUsersList().enqueue(new Callback<List<User>>() {
|
RetrofitClient.getApiService().getUsersList().enqueue(new Callback<List<User>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
|
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
|
||||||
if (response.isSuccessful() && response.body() != null) {
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
allUsersFromApi = response.body();
|
// BRUKER HJELPEKLASSEN HER:
|
||||||
filterUsersByHierarchy();
|
filteredUsers = UserFilterHelper.getFilteredUsers(response.body());
|
||||||
|
|
||||||
// Hvis vi redigerer, må vi mappe eksisterende deltakere til selectedUsers listen
|
|
||||||
if (taskToEdit != null) {
|
if (taskToEdit != null) {
|
||||||
selectedUsers.clear();
|
selectedUsers.clear();
|
||||||
Map<String, Boolean> currentAssignees = taskToEdit.getAssigneeStatus();
|
Map<String, Boolean> currentAssignees = taskToEdit.getAssigneeStatus();
|
||||||
for (User u : allUsersFromApi) {
|
for (User u : filteredUsers) {
|
||||||
if (currentAssignees.containsKey(u.getEmail())) {
|
if (currentAssignees.containsKey(u.getEmail())) {
|
||||||
selectedUsers.add(u);
|
selectedUsers.add(u);
|
||||||
}
|
}
|
||||||
|
|
@ -138,46 +134,6 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void filterUsersByHierarchy() {
|
|
||||||
filteredUsers.clear();
|
|
||||||
UserManager me = UserManager.getInstance();
|
|
||||||
List<String> myRoles = new ArrayList<>();
|
|
||||||
User self = null;
|
|
||||||
|
|
||||||
for (User u : allUsersFromApi) {
|
|
||||||
if (u.getEmail().equalsIgnoreCase(me.getUserEmail())) {
|
|
||||||
self = u;
|
|
||||||
for (String r : u.getRoles()) myRoles.add(r.toLowerCase());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (me.isEditorOrAbove()) {
|
|
||||||
filteredUsers.addAll(allUsersFromApi);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (User u : allUsersFromApi) {
|
|
||||||
if (u.getEmail().equalsIgnoreCase(me.getUserEmail())) {
|
|
||||||
if (!filteredUsers.contains(u)) filteredUsers.add(u);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
boolean hasAccess = false;
|
|
||||||
for (String role : u.getRoles()) {
|
|
||||||
String r = role.toLowerCase();
|
|
||||||
if ((r.equals("serviceavdelingen") && myRoles.contains("serviceavdelingen")) ||
|
|
||||||
(r.equals("automasjonsavdelingen") && myRoles.contains("automasjonsavdelingen")) ||
|
|
||||||
(r.equals("prosjektavdelingen") && myRoles.contains("prosjektavdelingen")) ||
|
|
||||||
(r.equals("administrasjonen") && myRoles.contains("administrasjonen")) ||
|
|
||||||
(r.equals("kbs_alle") && myRoles.contains("kbs_alle"))) {
|
|
||||||
hasAccess = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hasAccess && !filteredUsers.contains(u)) filteredUsers.add(u);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showUserSelectionDialog() {
|
private void showUserSelectionDialog() {
|
||||||
if (filteredUsers.isEmpty()) {
|
if (filteredUsers.isEmpty()) {
|
||||||
Toast.makeText(getContext(), "Henter tilgjengelige personer...", Toast.LENGTH_SHORT).show();
|
Toast.makeText(getContext(), "Henter tilgjengelige personer...", Toast.LENGTH_SHORT).show();
|
||||||
|
|
@ -187,7 +143,6 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
boolean[] checked = new boolean[filteredUsers.size()];
|
boolean[] checked = new boolean[filteredUsers.size()];
|
||||||
for (int i = 0; i < filteredUsers.size(); i++) {
|
for (int i = 0; i < filteredUsers.size(); i++) {
|
||||||
names[i] = filteredUsers.get(i).getName();
|
names[i] = filteredUsers.get(i).getName();
|
||||||
// Sjekk om e-posten finnes i de valgte brukernes liste
|
|
||||||
boolean isSelected = false;
|
boolean isSelected = false;
|
||||||
for(User su : selectedUsers) {
|
for(User su : selectedUsers) {
|
||||||
if(su.getEmail().equalsIgnoreCase(filteredUsers.get(i).getEmail())) {
|
if(su.getEmail().equalsIgnoreCase(filteredUsers.get(i).getEmail())) {
|
||||||
|
|
@ -202,13 +157,9 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
.setMultiChoiceItems(names, checked, (dialog, which, isChecked) -> {
|
.setMultiChoiceItems(names, checked, (dialog, which, isChecked) -> {
|
||||||
User user = filteredUsers.get(which);
|
User user = filteredUsers.get(which);
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
boolean alreadyIn = false;
|
selectedUsers.add(user);
|
||||||
for(User su : selectedUsers) if(su.getEmail().equalsIgnoreCase(user.getEmail())) alreadyIn = true;
|
|
||||||
if(!alreadyIn) selectedUsers.add(user);
|
|
||||||
} else {
|
} else {
|
||||||
User toRemove = null;
|
selectedUsers.removeIf(u -> u.getEmail().equalsIgnoreCase(user.getEmail()));
|
||||||
for(User su : selectedUsers) if(su.getEmail().equalsIgnoreCase(user.getEmail())) toRemove = su;
|
|
||||||
if(toRemove != null) selectedUsers.remove(toRemove);
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setPositiveButton("OK", (dialog, which) -> updateUsersPreview())
|
.setPositiveButton("OK", (dialog, which) -> updateUsersPreview())
|
||||||
|
|
@ -234,12 +185,6 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taskToEdit != null) {
|
if (taskToEdit != null) {
|
||||||
// REDIGER MODUS: Oppdater eksisterende objekt
|
|
||||||
// Vi må beholde ID, Creator osv, men oppdatere innhold og deltakere
|
|
||||||
// OBS: Hvis vi fjerner deltakere som allerede hadde gjort oppgaven, forsvinner deres status.
|
|
||||||
// Dette er akseptabel oppførsel for enkelthets skyld.
|
|
||||||
|
|
||||||
// Lag en kopi av gamle statuser for å bevare "Fullført" for de som fortsatt er med
|
|
||||||
Map<String, Boolean> oldStatus = taskToEdit.getAssigneeStatus();
|
Map<String, Boolean> oldStatus = taskToEdit.getAssigneeStatus();
|
||||||
taskToEdit.getAssigneeStatus().clear();
|
taskToEdit.getAssigneeStatus().clear();
|
||||||
|
|
||||||
|
|
@ -255,25 +200,11 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
taskToEdit.setTitle(title);
|
||||||
// Sjekk om tittelen eller beskrivelsen faktisk har endret seg for å sette titlene på nytt
|
taskToEdit.setDescription(etDesc.getText().toString());
|
||||||
// (Vi bruker reflection her eller bare setter verdiene direkte siden de er private i TaskItem)
|
taskToEdit.setDueDate(dueDate.getTimeInMillis());
|
||||||
// Siden jeg ikke endret TaskItem til å ha public settlere, antar jeg at du legger til disse
|
|
||||||
// eller at vi bare lager en ny TaskItem med samme ID.
|
|
||||||
|
|
||||||
// Vi simulerer oppdatering av feltene (Sørg for at TaskItem har disse setterene!)
|
|
||||||
// Hvis du ikke har setttere, legg dem til i TaskItem.java:
|
|
||||||
// public void setTitle(String t) { this.title = t; }
|
|
||||||
// public void setDescription(String d) { this.description = d; }
|
|
||||||
// public void setDueDate(long d) { this.dueDate = d; }
|
|
||||||
|
|
||||||
// Jeg skriver logikken slik at den forventer setttere:
|
|
||||||
updateTaskFields(taskToEdit, title, etDesc.getText().toString(), dueDate.getTimeInMillis());
|
|
||||||
|
|
||||||
if (listener != null) listener.onTaskUpdated(taskToEdit);
|
if (listener != null) listener.onTaskUpdated(taskToEdit);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// NY OPPGAVE MODUS
|
|
||||||
TaskItem newTask = new TaskItem(title, etDesc.getText().toString(), dueDate.getTimeInMillis());
|
TaskItem newTask = new TaskItem(title, etDesc.getText().toString(), dueDate.getTimeInMillis());
|
||||||
if (selectedUsers.isEmpty()) {
|
if (selectedUsers.isEmpty()) {
|
||||||
newTask.addAssignee(UserManager.getInstance().getUserEmail());
|
newTask.addAssignee(UserManager.getInstance().getUserEmail());
|
||||||
|
|
@ -284,13 +215,4 @@ public class AddTaskBottomSheet extends BottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hjelpemetode (forutsetter at du legger til disse tre setterne i TaskItem.java)
|
|
||||||
private void updateTaskFields(TaskItem t, String title, String desc, long date) {
|
|
||||||
// Her kaller vi setterne vi nå legger til i TaskItem
|
|
||||||
// Se punkt 5 nedenfor for oppdatert TaskItem.java
|
|
||||||
t.setTitle(title);
|
|
||||||
t.setDescription(desc);
|
|
||||||
t.setDueDate(date);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -32,7 +32,6 @@ import com.google.gson.JsonElement;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
@ -57,14 +56,10 @@ public class CreateEventFragment extends Fragment {
|
||||||
private String selectedRRule = null;
|
private String selectedRRule = null;
|
||||||
private boolean isCustomRecurrence = false;
|
private boolean isCustomRecurrence = false;
|
||||||
|
|
||||||
// Deltakere
|
// BRUKERLISTER
|
||||||
private List<User> allUsers = new ArrayList<>();
|
|
||||||
private List<User> filteredUsers = new ArrayList<>();
|
private List<User> filteredUsers = new ArrayList<>();
|
||||||
|
|
||||||
// Arrangør-sporing (for å ikke overskrive opprinnelig arrangør ved redigering)
|
|
||||||
private String originalOrganizer = null;
|
private String originalOrganizer = null;
|
||||||
|
|
||||||
// EDIT MODE
|
|
||||||
private CalendarEvent eventToEdit = null;
|
private CalendarEvent eventToEdit = null;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -77,29 +72,26 @@ public class CreateEventFragment extends Fragment {
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
// Initialisering av Views
|
||||||
etTitle = view.findViewById(R.id.et_title);
|
etTitle = view.findViewById(R.id.et_title);
|
||||||
etDesc = view.findViewById(R.id.et_desc);
|
etDesc = view.findViewById(R.id.et_desc);
|
||||||
etLocation = view.findViewById(R.id.et_location);
|
etLocation = view.findViewById(R.id.et_location);
|
||||||
switchAllDay = view.findViewById(R.id.switch_all_day);
|
switchAllDay = view.findViewById(R.id.switch_all_day);
|
||||||
|
|
||||||
spinnerCalendar = view.findViewById(R.id.spinner_calendar);
|
spinnerCalendar = view.findViewById(R.id.spinner_calendar);
|
||||||
spinnerRecurrence = view.findViewById(R.id.spinner_recurrence);
|
spinnerRecurrence = view.findViewById(R.id.spinner_recurrence);
|
||||||
chipGroupReminders = view.findViewById(R.id.chip_group_reminders);
|
chipGroupReminders = view.findViewById(R.id.chip_group_reminders);
|
||||||
|
|
||||||
txtPreview = view.findViewById(R.id.txt_time_preview);
|
txtPreview = view.findViewById(R.id.txt_time_preview);
|
||||||
txtSelectedParticipants = view.findViewById(R.id.txt_selected_participants);
|
txtSelectedParticipants = view.findViewById(R.id.txt_selected_participants);
|
||||||
|
|
||||||
btnStartDate = view.findViewById(R.id.btn_start_date);
|
btnStartDate = view.findViewById(R.id.btn_start_date);
|
||||||
btnStartTime = view.findViewById(R.id.btn_start_time);
|
btnStartTime = view.findViewById(R.id.btn_start_time);
|
||||||
btnEndDate = view.findViewById(R.id.btn_end_date);
|
btnEndDate = view.findViewById(R.id.btn_end_date);
|
||||||
btnEndTime = view.findViewById(R.id.btn_end_time);
|
btnEndTime = view.findViewById(R.id.btn_end_time);
|
||||||
btnSave = view.findViewById(R.id.btn_save_event);
|
btnSave = view.findViewById(R.id.btn_save_event);
|
||||||
btnSelectParticipants = view.findViewById(R.id.btn_select_participants);
|
btnSelectParticipants = view.findViewById(R.id.btn_select_participants);
|
||||||
|
|
||||||
rbAll = view.findViewById(R.id.rb_visibility_all);
|
rbAll = view.findViewById(R.id.rb_visibility_all);
|
||||||
rbSpecific = view.findViewById(R.id.rb_visibility_specific);
|
rbSpecific = view.findViewById(R.id.rb_visibility_specific);
|
||||||
|
|
||||||
// Initialiser tid (neste hele time)
|
// Standardtidspunkt (neste time)
|
||||||
startCal.add(Calendar.HOUR_OF_DAY, 1);
|
startCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||||
startCal.set(Calendar.MINUTE, 0);
|
startCal.set(Calendar.MINUTE, 0);
|
||||||
endCal.setTime(startCal.getTime());
|
endCal.setTime(startCal.getTime());
|
||||||
|
|
@ -109,7 +101,7 @@ public class CreateEventFragment extends Fragment {
|
||||||
setupReminderChips();
|
setupReminderChips();
|
||||||
fetchUsers();
|
fetchUsers();
|
||||||
|
|
||||||
// SJEKK OM VI ER I REDIGERINGS-MODUS
|
// Sjekk om vi redigerer en eksisterende hendelse
|
||||||
if (getArguments() != null && getArguments().containsKey("edit_event")) {
|
if (getArguments() != null && getArguments().containsKey("edit_event")) {
|
||||||
eventToEdit = (CalendarEvent) getArguments().getSerializable("edit_event");
|
eventToEdit = (CalendarEvent) getArguments().getSerializable("edit_event");
|
||||||
prefillForm(eventToEdit);
|
prefillForm(eventToEdit);
|
||||||
|
|
@ -121,16 +113,12 @@ public class CreateEventFragment extends Fragment {
|
||||||
|
|
||||||
// Listeners
|
// Listeners
|
||||||
switchAllDay.setOnCheckedChangeListener((btn, isChecked) -> updateUI());
|
switchAllDay.setOnCheckedChangeListener((btn, isChecked) -> updateUI());
|
||||||
|
|
||||||
btnStartDate.setOnClickListener(v -> pickDate(startCal, true));
|
btnStartDate.setOnClickListener(v -> pickDate(startCal, true));
|
||||||
btnEndDate.setOnClickListener(v -> pickDate(endCal, false));
|
btnEndDate.setOnClickListener(v -> pickDate(endCal, false));
|
||||||
|
|
||||||
btnStartTime.setOnClickListener(v -> pickTime(startCal));
|
btnStartTime.setOnClickListener(v -> pickTime(startCal));
|
||||||
btnEndTime.setOnClickListener(v -> pickTime(endCal));
|
btnEndTime.setOnClickListener(v -> pickTime(endCal));
|
||||||
|
|
||||||
btnSave.setOnClickListener(v -> submitEvent());
|
btnSave.setOnClickListener(v -> submitEvent());
|
||||||
|
|
||||||
// Vis/Skjul deltaker-knapp
|
|
||||||
rbAll.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
rbAll.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
btnSelectParticipants.setVisibility(View.GONE);
|
btnSelectParticipants.setVisibility(View.GONE);
|
||||||
|
|
@ -150,7 +138,6 @@ public class CreateEventFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
if (eventToEdit != null && position == 0 && selectedRRule != null) return;
|
if (eventToEdit != null && position == 0 && selectedRRule != null) return;
|
||||||
|
|
||||||
String selected = parent.getItemAtPosition(position).toString();
|
String selected = parent.getItemAtPosition(position).toString();
|
||||||
if (selected.equals("Egendefinert...")) {
|
if (selected.equals("Egendefinert...")) {
|
||||||
showCustomRecurrenceDialog();
|
showCustomRecurrenceDialog();
|
||||||
|
|
@ -162,15 +149,6 @@ public class CreateEventFragment extends Fragment {
|
||||||
}
|
}
|
||||||
@Override public void onNothingSelected(AdapterView<?> parent) {}
|
@Override public void onNothingSelected(AdapterView<?> parent) {}
|
||||||
});
|
});
|
||||||
|
|
||||||
spinnerCalendar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
|
||||||
@Override
|
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
|
||||||
String calName = (String) parent.getItemAtPosition(position);
|
|
||||||
updateFilteredUsers(calName);
|
|
||||||
}
|
|
||||||
@Override public void onNothingSelected(AdapterView<?> parent) {}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchUsers() {
|
private void fetchUsers() {
|
||||||
|
|
@ -179,11 +157,8 @@ public class CreateEventFragment extends Fragment {
|
||||||
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
|
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
|
||||||
if (!isAdded()) return;
|
if (!isAdded()) return;
|
||||||
if (response.isSuccessful() && response.body() != null) {
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
allUsers = response.body();
|
// BRUKER DEN SENTRALE HJELPEKLASSEN FOR FILTRERING
|
||||||
|
filteredUsers = UserFilterHelper.getFilteredUsers(response.body());
|
||||||
if (spinnerCalendar.getSelectedItem() != null) {
|
|
||||||
updateFilteredUsers(spinnerCalendar.getSelectedItem().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eventToEdit != null) {
|
if (eventToEdit != null) {
|
||||||
parseParticipantsFromDescription(eventToEdit.getDescription());
|
parseParticipantsFromDescription(eventToEdit.getDescription());
|
||||||
|
|
@ -195,42 +170,9 @@ public class CreateEventFragment extends Fragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFilteredUsers(String calendarName) {
|
|
||||||
if (allUsers == null || allUsers.isEmpty()) return;
|
|
||||||
|
|
||||||
filteredUsers.clear();
|
|
||||||
|
|
||||||
String requiredRole = "";
|
|
||||||
|
|
||||||
if (calendarName.equals("Serviceavdelingen")) requiredRole = "serviceavdelingen";
|
|
||||||
else if (calendarName.equals("Automasjonsavdelingen")) requiredRole = "automasjonsavdelingen";
|
|
||||||
else if (calendarName.equals("Prosjektavdelingen")) requiredRole = "prosjektavdelingen";
|
|
||||||
else if (calendarName.equals("Administrasjonen")) requiredRole = "administrasjonen";
|
|
||||||
else if (calendarName.equals("Felles")) requiredRole = "kbs_alle";
|
|
||||||
|
|
||||||
for (User user : allUsers) {
|
|
||||||
List<String> rawRoles = user.getRoles();
|
|
||||||
List<String> roles = new ArrayList<>();
|
|
||||||
for (String r : rawRoles) roles.add(r.toLowerCase());
|
|
||||||
|
|
||||||
boolean hasAccess = false;
|
|
||||||
|
|
||||||
if (roles.contains("administrator")) {
|
|
||||||
hasAccess = true;
|
|
||||||
}
|
|
||||||
else if (!requiredRole.isEmpty() && roles.contains(requiredRole.toLowerCase())) {
|
|
||||||
hasAccess = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasAccess) {
|
|
||||||
filteredUsers.add(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showUserSelectionDialog() {
|
private void showUserSelectionDialog() {
|
||||||
if (filteredUsers.isEmpty()) {
|
if (filteredUsers.isEmpty()) {
|
||||||
Toast.makeText(getContext(), "Ingen personer med riktig tilgang funnet.", Toast.LENGTH_SHORT).show();
|
Toast.makeText(getContext(), "Ingen personer funnet.", Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -255,7 +197,7 @@ public class CreateEventFragment extends Fragment {
|
||||||
private void updateParticipantPreview() {
|
private void updateParticipantPreview() {
|
||||||
StringBuilder sb = new StringBuilder("Valgte: ");
|
StringBuilder sb = new StringBuilder("Valgte: ");
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (User u : allUsers) {
|
for (User u : filteredUsers) {
|
||||||
if (u.isSelected()) {
|
if (u.isSelected()) {
|
||||||
if (count > 0) sb.append(", ");
|
if (count > 0) sb.append(", ");
|
||||||
sb.append(u.getName());
|
sb.append(u.getName());
|
||||||
|
|
@ -274,11 +216,10 @@ public class CreateEventFragment extends Fragment {
|
||||||
if (m.find()) {
|
if (m.find()) {
|
||||||
rbSpecific.setChecked(true);
|
rbSpecific.setChecked(true);
|
||||||
String[] emails = m.group(1).split(",");
|
String[] emails = m.group(1).split(",");
|
||||||
|
|
||||||
for (String email : emails) {
|
for (String email : emails) {
|
||||||
for (int i = 0; i < allUsers.size(); i++) {
|
for (User u : filteredUsers) {
|
||||||
if (allUsers.get(i).getEmail().equalsIgnoreCase(email.trim())) {
|
if (u.getEmail().equalsIgnoreCase(email.trim())) {
|
||||||
allUsers.get(i).setSelected(true);
|
u.setSelected(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -290,19 +231,15 @@ public class CreateEventFragment extends Fragment {
|
||||||
|
|
||||||
private void prefillForm(CalendarEvent event) {
|
private void prefillForm(CalendarEvent event) {
|
||||||
etTitle.setText(event.getTitle());
|
etTitle.setText(event.getTitle());
|
||||||
|
|
||||||
// Hent ut opprinnelig arrangør hvis den finnes
|
|
||||||
if (event.getDescription() != null) {
|
if (event.getDescription() != null) {
|
||||||
Matcher m = Pattern.compile("#arrangor:(.+)").matcher(event.getDescription());
|
Matcher m = Pattern.compile("#arrangor:(.+)").matcher(event.getDescription());
|
||||||
if (m.find()) {
|
if (m.find()) originalOrganizer = m.group(1).trim();
|
||||||
originalOrganizer = m.group(1).trim();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String cleanDesc = event.getDescription()
|
String cleanDesc = event.getDescription()
|
||||||
.replaceAll("#varsel:[\\d,]+", "")
|
.replaceAll("#varsel:[\\d,]+", "")
|
||||||
.replaceAll("#deltakere:[^\\s]+", "")
|
.replaceAll("#deltakere:[^\\s]+", "")
|
||||||
.replaceAll("#arrangor:.+", "") // Fjern også arrangør fra tekstfeltet
|
.replaceAll("#arrangor:.+", "")
|
||||||
.trim();
|
.trim();
|
||||||
etDesc.setText(cleanDesc);
|
etDesc.setText(cleanDesc);
|
||||||
etLocation.setText(event.getLocation());
|
etLocation.setText(event.getLocation());
|
||||||
|
|
@ -310,36 +247,29 @@ public class CreateEventFragment extends Fragment {
|
||||||
ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinnerCalendar.getAdapter();
|
ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinnerCalendar.getAdapter();
|
||||||
if (adapter != null) {
|
if (adapter != null) {
|
||||||
int position = adapter.getPosition(event.getCalendarName());
|
int position = adapter.getPosition(event.getCalendarName());
|
||||||
if (position >= 0) {
|
if (position >= 0) spinnerCalendar.setSelection(position);
|
||||||
spinnerCalendar.setSelection(position);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
spinnerCalendar.setEnabled(false);
|
spinnerCalendar.setEnabled(false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
|
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
|
||||||
SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
|
SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
|
||||||
|
|
||||||
String start = event.getRawDate();
|
String start = event.getRawDate();
|
||||||
if (start != null) {
|
if (start != null) {
|
||||||
if (start.length() == 10) {
|
if (start.length() == 10) {
|
||||||
switchAllDay.setChecked(true);
|
switchAllDay.setChecked(true);
|
||||||
Date d = simpleFormat.parse(start);
|
startCal.setTime(simpleFormat.parse(start));
|
||||||
startCal.setTime(d);
|
|
||||||
|
|
||||||
if (event.getRawEndDate() != null) {
|
if (event.getRawEndDate() != null) {
|
||||||
Date e = simpleFormat.parse(event.getRawEndDate());
|
|
||||||
Calendar c = Calendar.getInstance();
|
Calendar c = Calendar.getInstance();
|
||||||
c.setTime(e);
|
c.setTime(simpleFormat.parse(event.getRawEndDate()));
|
||||||
c.add(Calendar.DAY_OF_MONTH, -1);
|
c.add(Calendar.DAY_OF_MONTH, -1);
|
||||||
endCal.setTime(c.getTime());
|
endCal.setTime(c.getTime());
|
||||||
} else {
|
} else {
|
||||||
endCal.setTime(d);
|
endCal.setTime(startCal.getTime());
|
||||||
}
|
}
|
||||||
} else if (start.contains("T")) {
|
} else if (start.contains("T")) {
|
||||||
if (start.length() > 19) start = start.substring(0, 19);
|
if (start.length() > 19) start = start.substring(0, 19);
|
||||||
startCal.setTime(isoFormat.parse(start));
|
startCal.setTime(isoFormat.parse(start));
|
||||||
|
|
||||||
String end = event.getRawEndDate();
|
String end = event.getRawEndDate();
|
||||||
if (end != null && end.contains("T")) {
|
if (end != null && end.contains("T")) {
|
||||||
if (end.length() > 19) end = end.substring(0, 19);
|
if (end.length() > 19) end = end.substring(0, 19);
|
||||||
|
|
@ -350,130 +280,96 @@ public class CreateEventFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Integer> existingReminders = event.getReminders();
|
List<Integer> existingReminders = event.getReminders();
|
||||||
if (!existingReminders.isEmpty()) {
|
if (!existingReminders.isEmpty()) {
|
||||||
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
||||||
((Chip) chipGroupReminders.getChildAt(i)).setChecked(false);
|
Chip chip = (Chip) chipGroupReminders.getChildAt(i);
|
||||||
}
|
chip.setChecked(existingReminders.contains((Integer) chip.getTag()));
|
||||||
for (int min : existingReminders) {
|
|
||||||
checkChipByMinutes(min);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("KBS_EDIT", "Feil ved prefill", e);
|
Log.e("KBS_EDIT", "Feil ved prefill", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkChipByMinutes(int minutes) {
|
private void setupCalendarSpinner() {
|
||||||
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
List<String> calendars = UserManager.getInstance().getWriteableCalendars();
|
||||||
Chip chip = (Chip) chipGroupReminders.getChildAt(i);
|
if (calendars.isEmpty()) {
|
||||||
if ((int)chip.getTag() == minutes) {
|
calendars = new ArrayList<>();
|
||||||
chip.setChecked(true);
|
calendars.add("Felles");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, calendars) {
|
||||||
|
@NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||||
|
TextView view = (TextView) super.getView(position, convertView, parent);
|
||||||
|
view.setBackgroundColor(Color.parseColor(getCalendarColor(getItem(position))));
|
||||||
|
view.setTextColor(Color.WHITE);
|
||||||
|
view.setTypeface(null, Typeface.BOLD);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
@Override public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
|
TextView view = (TextView) super.getDropDownView(position, convertView, parent);
|
||||||
|
view.setTextColor(Color.parseColor(getCalendarColor(getItem(position))));
|
||||||
|
view.setTypeface(null, Typeface.BOLD);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
spinnerCalendar.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getCalendarColor(String name) {
|
private String getCalendarColor(String name) {
|
||||||
|
if (name == null) return "#888888";
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "Felles": return "#0069B3";
|
case "Felles": return "#0069B3"; // KBS Blå
|
||||||
|
case "AMU/HMS/Miljø": return "#2E7D32"; // Mørk grønn (Miljø-profil)
|
||||||
case "Administrasjonen": return "#607D8B";
|
case "Administrasjonen": return "#607D8B";
|
||||||
case "Serviceavdelingen": return "#E65100";
|
case "Serviceavdelingen": return "#E65100";
|
||||||
case "Automasjonsavdelingen": return "#2E7D32";
|
case "Automasjonsavdelingen": return "#2E7D32"; // Merk: Denne er lik Miljø nå, du kan bytte til f.eks #1B5E20 hvis ønskelig
|
||||||
case "Prosjektavdelingen": return "#7B1FA2";
|
case "Prosjektavdelingen": return "#7B1FA2";
|
||||||
default: return "#888888";
|
default: return "#888888";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupCalendarSpinner() {
|
|
||||||
List<String> calendars = UserManager.getInstance().getWriteableCalendars();
|
|
||||||
if (calendars.isEmpty()) calendars.add("Felles");
|
|
||||||
|
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, calendars) {
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
|
||||||
TextView view = (TextView) super.getView(position, convertView, parent);
|
|
||||||
String calName = getItem(position);
|
|
||||||
String colorHex = getCalendarColor(calName);
|
|
||||||
view.setBackgroundColor(Color.parseColor(colorHex));
|
|
||||||
view.setTextColor(Color.WHITE);
|
|
||||||
view.setTypeface(null, Typeface.BOLD);
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
|
||||||
TextView view = (TextView) super.getDropDownView(position, convertView, parent);
|
|
||||||
String calName = getItem(position);
|
|
||||||
String colorHex = getCalendarColor(calName);
|
|
||||||
view.setBackgroundColor(Color.WHITE);
|
|
||||||
view.setTextColor(Color.parseColor(colorHex));
|
|
||||||
view.setTypeface(null, Typeface.BOLD);
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
||||||
spinnerCalendar.setAdapter(adapter);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupReminderChips() {
|
private void setupReminderChips() {
|
||||||
addChip("Ved start", 0);
|
chipGroupReminders.removeAllViews();
|
||||||
addChip("5 min", 5);
|
addReminderChip("Ved start", 0);
|
||||||
addChip("10 min", 10);
|
addReminderChip("5 min", 5);
|
||||||
addChip("15 min", 15);
|
addReminderChip("10 min", 10);
|
||||||
addChip("30 min", 30);
|
addReminderChip("15 min", 15);
|
||||||
addChip("1 time", 60);
|
addReminderChip("30 min", 30);
|
||||||
addChip("2 timer", 120);
|
addReminderChip("1 t", 60);
|
||||||
addChip("1 dag", 1440);
|
addReminderChip("2 t", 120);
|
||||||
addChip("2 dager", 2880);
|
addReminderChip("1 d", 1440);
|
||||||
addChip("1 uke", 10080);
|
addReminderChip("2 d", 2880);
|
||||||
|
addReminderChip("1 u", 10080);
|
||||||
|
|
||||||
if (eventToEdit == null) checkChipByMinutes(15);
|
if (eventToEdit == null) {
|
||||||
|
for (int i=0; i<chipGroupReminders.getChildCount(); i++) {
|
||||||
|
Chip c = (Chip) chipGroupReminders.getChildAt(i);
|
||||||
|
if ((int)c.getTag() == 15) c.setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addChip(String text, int minutes) {
|
private void addReminderChip(String text, int minutes) {
|
||||||
Chip chip = new Chip(getContext());
|
Chip chip = new Chip(getContext());
|
||||||
chip.setText(text);
|
chip.setText(text);
|
||||||
chip.setTag(minutes);
|
chip.setTag(minutes);
|
||||||
chip.setCheckable(true);
|
chip.setCheckable(true);
|
||||||
chip.setClickable(true);
|
|
||||||
chipGroupReminders.addView(chip);
|
chipGroupReminders.addView(chip);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Integer> getSelectedReminders() {
|
|
||||||
List<Integer> selected = new ArrayList<>();
|
|
||||||
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
|
||||||
Chip chip = (Chip) chipGroupReminders.getChildAt(i);
|
|
||||||
if (chip.isChecked()) {
|
|
||||||
selected.add((Integer) chip.getTag());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return selected;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateRecurrenceSpinner() {
|
private void updateRecurrenceSpinner() {
|
||||||
String dayName = new SimpleDateFormat("EEEE", new Locale("no")).format(startCal.getTime());
|
String dayName = new SimpleDateFormat("EEEE", new Locale("no")).format(startCal.getTime());
|
||||||
int dayOfMonth = startCal.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = startCal.get(Calendar.DAY_OF_MONTH);
|
||||||
String monthName = new SimpleDateFormat("MMMM", new Locale("no")).format(startCal.getTime());
|
String monthName = new SimpleDateFormat("MMMM", new Locale("no")).format(startCal.getTime());
|
||||||
|
|
||||||
int weekNo = (startCal.get(Calendar.DAY_OF_MONTH) - 1) / 7 + 1;
|
int weekNo = (startCal.get(Calendar.DAY_OF_MONTH) - 1) / 7 + 1;
|
||||||
String nthDayString = "månedlig den " + weekNo + ". " + dayName + "en";
|
|
||||||
|
|
||||||
List<String> options = new ArrayList<>();
|
List<String> options = new ArrayList<>();
|
||||||
options.add("Ikke gjenta");
|
options.add("Ikke gjenta"); options.add("Daglig"); options.add("Ukentlig på " + dayName);
|
||||||
options.add("Daglig");
|
options.add("Månedlig den " + dayOfMonth + "."); options.add("Månedlig den " + weekNo + ". " + dayName + "en");
|
||||||
options.add("Ukentlig på " + dayName);
|
options.add("Årlig den " + dayOfMonth + ". " + monthName); options.add("Hver ukedag (man-fre)"); options.add("Egendefinert...");
|
||||||
options.add("Månedlig den " + dayOfMonth + ".");
|
spinnerRecurrence.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, options));
|
||||||
options.add(capitalize(nthDayString));
|
|
||||||
options.add("Årlig den " + dayOfMonth + ". " + monthName);
|
|
||||||
options.add("Hver ukedag (man-fre)");
|
|
||||||
options.add("Egendefinert...");
|
|
||||||
|
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, options);
|
|
||||||
spinnerRecurrence.setAdapter(adapter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateStandardRRule(int position) {
|
private void generateStandardRRule(int position) {
|
||||||
|
|
@ -481,112 +377,59 @@ public class CreateEventFragment extends Fragment {
|
||||||
case 1: selectedRRule = "RRULE:FREQ=DAILY"; break;
|
case 1: selectedRRule = "RRULE:FREQ=DAILY"; break;
|
||||||
case 2: selectedRRule = "RRULE:FREQ=WEEKLY"; break;
|
case 2: selectedRRule = "RRULE:FREQ=WEEKLY"; break;
|
||||||
case 3: selectedRRule = "RRULE:FREQ=MONTHLY"; break;
|
case 3: selectedRRule = "RRULE:FREQ=MONTHLY"; break;
|
||||||
case 4:
|
case 4: selectedRRule = "RRULE:FREQ=MONTHLY;BYDAY=" + ((startCal.get(Calendar.DAY_OF_MONTH)-1)/7+1) + getDayCode(startCal.get(Calendar.DAY_OF_WEEK)); break;
|
||||||
int weekNo = (startCal.get(Calendar.DAY_OF_MONTH) - 1) / 7 + 1;
|
|
||||||
String dayCode = getDayCode(startCal.get(Calendar.DAY_OF_WEEK));
|
|
||||||
selectedRRule = "RRULE:FREQ=MONTHLY;BYDAY=" + weekNo + dayCode;
|
|
||||||
break;
|
|
||||||
case 5: selectedRRule = "RRULE:FREQ=YEARLY"; break;
|
case 5: selectedRRule = "RRULE:FREQ=YEARLY"; break;
|
||||||
case 6: selectedRRule = "RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"; break;
|
case 6: selectedRRule = "RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"; break;
|
||||||
default: selectedRRule = null;
|
default: selectedRRule = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getDayCode(int calendarDay) {
|
||||||
|
switch (calendarDay) {
|
||||||
|
case Calendar.MONDAY: return "MO"; case Calendar.TUESDAY: return "TU"; case Calendar.WEDNESDAY: return "WE";
|
||||||
|
case Calendar.THURSDAY: return "TH"; case Calendar.FRIDAY: return "FR"; case Calendar.SATURDAY: return "SA";
|
||||||
|
case Calendar.SUNDAY: return "SU"; default: return "MO";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void showCustomRecurrenceDialog() {
|
private void showCustomRecurrenceDialog() {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||||
View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_custom_recurrence, null);
|
View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_custom_recurrence, null);
|
||||||
|
EditText etInterval = view.findViewById(R.id.et_interval), etCount = view.findViewById(R.id.et_count);
|
||||||
EditText etInterval = view.findViewById(R.id.et_interval);
|
|
||||||
Spinner spinnerFreq = view.findViewById(R.id.spinner_freq);
|
Spinner spinnerFreq = view.findViewById(R.id.spinner_freq);
|
||||||
View layoutWeekdays = view.findViewById(R.id.layout_weekdays);
|
View layoutWeekdays = view.findViewById(R.id.layout_weekdays);
|
||||||
|
ToggleButton[] toggles = {view.findViewById(R.id.tg_mon), view.findViewById(R.id.tg_tue), view.findViewById(R.id.tg_wed), view.findViewById(R.id.tg_thu), view.findViewById(R.id.tg_fri), view.findViewById(R.id.tg_sat), view.findViewById(R.id.tg_sun)};
|
||||||
ToggleButton[] toggles = {
|
|
||||||
view.findViewById(R.id.tg_mon), view.findViewById(R.id.tg_tue),
|
|
||||||
view.findViewById(R.id.tg_wed), view.findViewById(R.id.tg_thu),
|
|
||||||
view.findViewById(R.id.tg_fri), view.findViewById(R.id.tg_sat),
|
|
||||||
view.findViewById(R.id.tg_sun)
|
|
||||||
};
|
|
||||||
String[] labels = {"M", "T", "O", "T", "F", "L", "S"};
|
String[] labels = {"M", "T", "O", "T", "F", "L", "S"};
|
||||||
for(int i=0; i<7; i++) { toggles[i].setText(labels[i]); toggles[i].setTextOn(labels[i]); toggles[i].setTextOff(labels[i]); }
|
for(int i=0; i<7; i++) { toggles[i].setText(labels[i]); toggles[i].setTextOn(labels[i]); toggles[i].setTextOff(labels[i]); }
|
||||||
|
RadioGroup rgEnd = view.findViewById(R.id.rg_end); Button btnEndDatePicker = view.findViewById(R.id.btn_end_date_picker);
|
||||||
RadioGroup rgEnd = view.findViewById(R.id.rg_end);
|
Calendar customEndCal = Calendar.getInstance(); customEndCal.add(Calendar.MONTH, 1);
|
||||||
Button btnEndDatePicker = view.findViewById(R.id.btn_end_date_picker);
|
btnEndDatePicker.setText(new SimpleDateFormat("d. MMM yyyy", Locale.getDefault()).format(customEndCal.getTime()));
|
||||||
EditText etCount = view.findViewById(R.id.et_count);
|
|
||||||
Calendar customEndCal = Calendar.getInstance();
|
|
||||||
customEndCal.add(Calendar.MONTH, 1);
|
|
||||||
|
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("d. MMM yyyy", Locale.getDefault());
|
|
||||||
btnEndDatePicker.setText(sdf.format(customEndCal.getTime()));
|
|
||||||
|
|
||||||
btnEndDatePicker.setOnClickListener(v -> {
|
btnEndDatePicker.setOnClickListener(v -> {
|
||||||
rgEnd.check(R.id.rb_date);
|
rgEnd.check(R.id.rb_date);
|
||||||
new DatePickerDialog(getContext(), (p, y, m, d) -> {
|
new DatePickerDialog(getContext(), (p, y, m, d) -> { customEndCal.set(y, m, d); btnEndDatePicker.setText(new SimpleDateFormat("d. MMM yyyy", Locale.getDefault()).format(customEndCal.getTime())); }, customEndCal.get(Calendar.YEAR), customEndCal.get(Calendar.MONTH), customEndCal.get(Calendar.DAY_OF_MONTH)).show();
|
||||||
customEndCal.set(y, m, d);
|
|
||||||
btnEndDatePicker.setText(sdf.format(customEndCal.getTime()));
|
|
||||||
}, customEndCal.get(Calendar.YEAR), customEndCal.get(Calendar.MONTH), customEndCal.get(Calendar.DAY_OF_MONTH)).show();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
spinnerFreq.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
spinnerFreq.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
@Override
|
@Override public void onItemSelected(AdapterView<?> p, View v, int pos, long id) { layoutWeekdays.setVisibility(pos == 1 ? View.VISIBLE : View.GONE); }
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
@Override public void onNothingSelected(AdapterView<?> p) {}
|
||||||
layoutWeekdays.setVisibility(position == 1 ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
@Override public void onNothingSelected(AdapterView<?> parent) {}
|
|
||||||
});
|
});
|
||||||
|
builder.setView(view); AlertDialog dialog = builder.create();
|
||||||
builder.setView(view);
|
view.findViewById(R.id.btn_cancel).setOnClickListener(v -> { dialog.dismiss(); spinnerRecurrence.setSelection(0); });
|
||||||
AlertDialog dialog = builder.create();
|
|
||||||
|
|
||||||
view.findViewById(R.id.btn_cancel).setOnClickListener(v -> {
|
|
||||||
dialog.dismiss();
|
|
||||||
spinnerRecurrence.setSelection(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
view.findViewById(R.id.btn_done).setOnClickListener(v -> {
|
view.findViewById(R.id.btn_done).setOnClickListener(v -> {
|
||||||
StringBuilder rrule = new StringBuilder("RRULE:");
|
StringBuilder rrule = new StringBuilder("RRULE:FREQ=");
|
||||||
int freqPos = spinnerFreq.getSelectedItemPosition();
|
rrule.append(new String[]{"DAILY", "WEEKLY", "MONTHLY", "YEARLY"}[spinnerFreq.getSelectedItemPosition()]);
|
||||||
String freq = "";
|
if (!etInterval.getText().toString().isEmpty() && !etInterval.getText().toString().equals("1")) rrule.append(";INTERVAL=").append(etInterval.getText().toString());
|
||||||
switch (freqPos) {
|
if (spinnerFreq.getSelectedItemPosition() == 1) {
|
||||||
case 0: freq = "DAILY"; break;
|
List<String> days = new ArrayList<>(); String[] codes = {"MO", "TU", "WE", "TH", "FR", "SA", "SU"};
|
||||||
case 1: freq = "WEEKLY"; break;
|
for (int i=0; i<7; i++) if (toggles[i].isChecked()) days.add(codes[i]);
|
||||||
case 2: freq = "MONTHLY"; break;
|
if (!days.isEmpty()) rrule.append(";BYDAY=").append(String.join(",", days));
|
||||||
case 3: freq = "YEARLY"; break;
|
|
||||||
}
|
}
|
||||||
rrule.append("FREQ=").append(freq);
|
if (rgEnd.getCheckedRadioButtonId() == R.id.rb_date) {
|
||||||
|
customEndCal.set(Calendar.HOUR_OF_DAY, 23); customEndCal.set(Calendar.MINUTE, 59);
|
||||||
String interval = etInterval.getText().toString();
|
SimpleDateFormat utc = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.US); utc.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
|
||||||
if (!interval.isEmpty() && !interval.equals("1")) {
|
|
||||||
rrule.append(";INTERVAL=").append(interval);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (freq.equals("WEEKLY")) {
|
|
||||||
List<String> days = new ArrayList<>();
|
|
||||||
String[] codes = {"MO", "TU", "WE", "TH", "FR", "SA", "SU"};
|
|
||||||
for (int i=0; i<7; i++) {
|
|
||||||
if (toggles[i].isChecked()) days.add(codes[i]);
|
|
||||||
}
|
|
||||||
if (!days.isEmpty()) {
|
|
||||||
rrule.append(";BYDAY=").append(String.join(",", days));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int checkedId = rgEnd.getCheckedRadioButtonId();
|
|
||||||
if (checkedId == R.id.rb_date) {
|
|
||||||
customEndCal.set(Calendar.HOUR_OF_DAY, 23);
|
|
||||||
customEndCal.set(Calendar.MINUTE, 59);
|
|
||||||
customEndCal.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
|
|
||||||
SimpleDateFormat utc = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.US);
|
|
||||||
utc.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
|
|
||||||
rrule.append(";UNTIL=").append(utc.format(customEndCal.getTime()));
|
rrule.append(";UNTIL=").append(utc.format(customEndCal.getTime()));
|
||||||
} else if (checkedId == R.id.rb_count) {
|
} else if (rgEnd.getCheckedRadioButtonId() == R.id.rb_count) rrule.append(";COUNT=").append(etCount.getText().toString());
|
||||||
rrule.append(";COUNT=").append(etCount.getText().toString());
|
selectedRRule = rrule.toString(); isCustomRecurrence = true; dialog.dismiss();
|
||||||
}
|
|
||||||
|
|
||||||
selectedRRule = rrule.toString();
|
|
||||||
isCustomRecurrence = true;
|
|
||||||
dialog.dismiss();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -594,12 +437,8 @@ public class CreateEventFragment extends Fragment {
|
||||||
new DatePickerDialog(getContext(), (view, y, m, d) -> {
|
new DatePickerDialog(getContext(), (view, y, m, d) -> {
|
||||||
cal.set(y, m, d);
|
cal.set(y, m, d);
|
||||||
if (isStart) {
|
if (isStart) {
|
||||||
if (endCal.before(startCal)) {
|
if (endCal.before(startCal)) { endCal.setTime(startCal.getTime()); if (!switchAllDay.isChecked()) endCal.add(Calendar.HOUR_OF_DAY, 1); }
|
||||||
endCal.setTime(startCal.getTime());
|
updateRecurrenceSpinner(); if (!isCustomRecurrence) spinnerRecurrence.setSelection(0);
|
||||||
if (!switchAllDay.isChecked()) endCal.add(Calendar.HOUR_OF_DAY, 1);
|
|
||||||
}
|
|
||||||
updateRecurrenceSpinner();
|
|
||||||
if (!isCustomRecurrence) spinnerRecurrence.setSelection(0);
|
|
||||||
}
|
}
|
||||||
updateUI();
|
updateUI();
|
||||||
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)).show();
|
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)).show();
|
||||||
|
|
@ -607,165 +446,57 @@ public class CreateEventFragment extends Fragment {
|
||||||
|
|
||||||
private void pickTime(Calendar cal) {
|
private void pickTime(Calendar cal) {
|
||||||
new TimePickerDialog(getContext(), (view, h, m) -> {
|
new TimePickerDialog(getContext(), (view, h, m) -> {
|
||||||
cal.set(Calendar.HOUR_OF_DAY, h);
|
cal.set(Calendar.HOUR_OF_DAY, h); cal.set(Calendar.MINUTE, m);
|
||||||
cal.set(Calendar.MINUTE, m);
|
if (cal == startCal && endCal.before(startCal)) { endCal.setTime(startCal.getTime()); endCal.add(Calendar.HOUR_OF_DAY, 1); }
|
||||||
if (cal == startCal && endCal.before(startCal)) {
|
|
||||||
endCal.setTime(startCal.getTime());
|
|
||||||
endCal.add(Calendar.HOUR_OF_DAY, 1);
|
|
||||||
}
|
|
||||||
updateUI();
|
updateUI();
|
||||||
}, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show();
|
}, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUI() {
|
private void updateUI() {
|
||||||
boolean isAllDay = switchAllDay.isChecked();
|
boolean isAllDay = switchAllDay.isChecked();
|
||||||
|
|
||||||
btnStartTime.setVisibility(isAllDay ? View.GONE : View.VISIBLE);
|
btnStartTime.setVisibility(isAllDay ? View.GONE : View.VISIBLE);
|
||||||
btnEndTime.setVisibility(isAllDay ? View.GONE : View.VISIBLE);
|
btnEndTime.setVisibility(isAllDay ? View.GONE : View.VISIBLE);
|
||||||
|
SimpleDateFormat dFmt = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()), tFmt = new SimpleDateFormat("HH:mm", Locale.getDefault());
|
||||||
SimpleDateFormat dateFmt = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
|
btnStartDate.setText(dFmt.format(startCal.getTime())); btnEndDate.setText(dFmt.format(endCal.getTime()));
|
||||||
SimpleDateFormat timeFmt = new SimpleDateFormat("HH:mm", Locale.getDefault());
|
btnStartTime.setText(tFmt.format(startCal.getTime())); btnEndTime.setText(tFmt.format(endCal.getTime()));
|
||||||
|
String p = dFmt.format(startCal.getTime()) + (isAllDay ? "" : " " + tFmt.format(startCal.getTime())) + " - ";
|
||||||
btnStartDate.setText(dateFmt.format(startCal.getTime()));
|
if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.DAY_OF_YEAR) == endCal.get(Calendar.DAY_OF_YEAR)) {
|
||||||
btnEndDate.setText(dateFmt.format(endCal.getTime()));
|
p += (isAllDay ? "(Samme dag)" : tFmt.format(endCal.getTime()));
|
||||||
btnStartTime.setText(timeFmt.format(startCal.getTime()));
|
} else p += dFmt.format(endCal.getTime()) + (isAllDay ? "" : " " + tFmt.format(endCal.getTime()));
|
||||||
btnEndTime.setText(timeFmt.format(endCal.getTime()));
|
txtPreview.setText(p);
|
||||||
|
|
||||||
String preview = dateFmt.format(startCal.getTime());
|
|
||||||
if (!isAllDay) preview += " " + timeFmt.format(startCal.getTime());
|
|
||||||
preview += " - ";
|
|
||||||
|
|
||||||
if (isSameDay(startCal, endCal)) {
|
|
||||||
if (isAllDay) preview += " (Samme dag)";
|
|
||||||
else preview += timeFmt.format(endCal.getTime());
|
|
||||||
} else {
|
|
||||||
preview += dateFmt.format(endCal.getTime());
|
|
||||||
if (!isAllDay) preview += " " + timeFmt.format(endCal.getTime());
|
|
||||||
}
|
|
||||||
txtPreview.setText(preview);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isSameDay(Calendar c1, Calendar c2) {
|
|
||||||
return c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR) &&
|
|
||||||
c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String capitalize(String s) {
|
|
||||||
if (s == null || s.isEmpty()) return s;
|
|
||||||
return s.substring(0, 1).toUpperCase() + s.substring(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getDayCode(int calendarDay) {
|
|
||||||
switch (calendarDay) {
|
|
||||||
case Calendar.MONDAY: return "MO";
|
|
||||||
case Calendar.TUESDAY: return "TU";
|
|
||||||
case Calendar.WEDNESDAY: return "WE";
|
|
||||||
case Calendar.THURSDAY: return "TH";
|
|
||||||
case Calendar.FRIDAY: return "FR";
|
|
||||||
case Calendar.SATURDAY: return "SA";
|
|
||||||
case Calendar.SUNDAY: return "SU";
|
|
||||||
default: return "MO";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getCalendarSlug() {
|
|
||||||
if (spinnerCalendar.getSelectedItem() != null) {
|
|
||||||
return spinnerCalendar.getSelectedItem().toString();
|
|
||||||
}
|
|
||||||
return "Felles";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void submitEvent() {
|
private void submitEvent() {
|
||||||
String title = etTitle.getText().toString().trim();
|
String title = etTitle.getText().toString().trim();
|
||||||
if (title.isEmpty()) {
|
if (title.isEmpty()) { etTitle.setError("Mangler tittel"); return; }
|
||||||
etTitle.setError("Mangler tittel");
|
SimpleDateFormat sdf = new SimpleDateFormat(switchAllDay.isChecked() ? "yyyy-MM-dd" : "yyyy-MM-dd'T'HH:mm", Locale.getDefault());
|
||||||
return;
|
List<Integer> reminders = new ArrayList<>();
|
||||||
|
for (int i=0; i<chipGroupReminders.getChildCount(); i++) {
|
||||||
|
Chip c = (Chip) chipGroupReminders.getChildAt(i);
|
||||||
|
if (c.isChecked()) reminders.add((Integer) c.getTag());
|
||||||
}
|
}
|
||||||
|
String desc = etDesc.getText().toString();
|
||||||
boolean isAllDay = switchAllDay.isChecked();
|
if (rbSpecific.isChecked()) {
|
||||||
String format = isAllDay ? "yyyy-MM-dd" : "yyyy-MM-dd'T'HH:mm";
|
StringBuilder sb = new StringBuilder(); boolean first = true;
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
|
for (User u : filteredUsers) if (u.isSelected()) { if (!first) sb.append(","); sb.append(u.getEmail()); first = false; }
|
||||||
|
if (sb.length() > 0) desc += "\n\n#deltakere:" + sb.toString();
|
||||||
String startTimeStr = sdf.format(startCal.getTime());
|
|
||||||
String endTimeStr = sdf.format(endCal.getTime());
|
|
||||||
String location = etLocation.getText().toString();
|
|
||||||
String description = etDesc.getText().toString();
|
|
||||||
List<Integer> reminders = getSelectedReminders();
|
|
||||||
|
|
||||||
if (rbSpecific.isChecked() && allUsers != null) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
boolean first = true;
|
|
||||||
for (User u : allUsers) {
|
|
||||||
if (u.isSelected()) {
|
|
||||||
if (!first) sb.append(",");
|
|
||||||
sb.append(u.getEmail());
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (sb.length() > 0) {
|
|
||||||
description += "\n\n#deltakere:" + sb.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
desc += "\n#arrangor:" + (originalOrganizer != null ? originalOrganizer : UserManager.getInstance().getUserDisplayName());
|
||||||
|
|
||||||
// NYTT: Legg til arrangør
|
String calSlug = spinnerCalendar.getSelectedItem() != null ? spinnerCalendar.getSelectedItem().toString() : "Felles";
|
||||||
String organizerTag;
|
|
||||||
if (originalOrganizer != null) {
|
|
||||||
organizerTag = originalOrganizer; // Behold opprinnelig ved redigering
|
|
||||||
} else {
|
|
||||||
organizerTag = UserManager.getInstance().getUserDisplayName(); // Ny hendelse
|
|
||||||
}
|
|
||||||
description += "\n#arrangor:" + organizerTag;
|
|
||||||
|
|
||||||
CreateEventRequest req = new CreateEventRequest(
|
CreateEventRequest req = new CreateEventRequest(title, desc, etLocation.getText().toString(), sdf.format(startCal.getTime()), sdf.format(endCal.getTime()), calSlug, reminders, switchAllDay.isChecked(), selectedRRule);
|
||||||
title, description, location, startTimeStr, endTimeStr,
|
if (eventToEdit != null) req.id = eventToEdit.getId();
|
||||||
getCalendarSlug(), reminders, isAllDay, selectedRRule
|
|
||||||
);
|
|
||||||
|
|
||||||
if (eventToEdit != null) {
|
|
||||||
req.id = eventToEdit.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
Toast.makeText(getContext(), eventToEdit != null ? "Oppdaterer..." : "Oppretter...", Toast.LENGTH_SHORT).show();
|
|
||||||
|
|
||||||
final Context appContext = requireContext().getApplicationContext();
|
|
||||||
|
|
||||||
Call<JsonElement> call;
|
|
||||||
if (eventToEdit != null) {
|
|
||||||
call = RetrofitClient.getApiService().updateCalendarEvent(req);
|
|
||||||
} else {
|
|
||||||
call = RetrofitClient.getApiService().createCalendarEvent(req);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Call<JsonElement> call = (eventToEdit != null) ? RetrofitClient.getApiService().updateCalendarEvent(req) : RetrofitClient.getApiService().createCalendarEvent(req);
|
||||||
call.enqueue(new Callback<JsonElement>() {
|
call.enqueue(new Callback<JsonElement>() {
|
||||||
@Override
|
@Override public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
|
||||||
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
|
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
Toast.makeText(getContext(), eventToEdit != null ? "Hendelse oppdatert!" : "Hendelse opprettet!", Toast.LENGTH_LONG).show();
|
Toast.makeText(getContext(), "Lagret!", Toast.LENGTH_LONG).show();
|
||||||
fetchCalendarAndSchedule(appContext);
|
|
||||||
Navigation.findNavController(getView()).navigateUp();
|
Navigation.findNavController(getView()).navigateUp();
|
||||||
} else {
|
|
||||||
Toast.makeText(getContext(), "Feil (" + response.code() + ")", Toast.LENGTH_LONG).show();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Override public void onFailure(Call<JsonElement> call, Throwable t) { Toast.makeText(getContext(), "Feil!", Toast.LENGTH_SHORT).show(); }
|
||||||
@Override
|
|
||||||
public void onFailure(Call<JsonElement> call, Throwable t) {
|
|
||||||
Toast.makeText(getContext(), "Nettverksfeil", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchCalendarAndSchedule(Context context) {
|
|
||||||
new Thread(() -> {
|
|
||||||
try {
|
|
||||||
if (context == null) return;
|
|
||||||
Response<List<CalendarEvent>> response = RetrofitClient.getApiService().getCalendarEvents().execute();
|
|
||||||
if (response.isSuccessful() && response.body() != null) {
|
|
||||||
AlarmScheduler.scheduleAlarmsForEvents(context, response.body());
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("CreateEvent", "Kunne ikke oppdatere alarmer", e);
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
80
app/src/main/java/com/kbs/kbsintranett/UserFilterHelper.java
Normal file
80
app/src/main/java/com/kbs/kbsintranett/UserFilterHelper.java
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
package com.kbs.kbsintranett;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserFilterHelper {
|
||||||
|
|
||||||
|
private static final List<Integer> EXCLUDED_IDS = Arrays.asList(50, 51); // felles@kbs.no og kbs@kbs.no
|
||||||
|
private static final String REQUIRED_DOMAIN = "@kbs.no";
|
||||||
|
|
||||||
|
public static List<User> getFilteredUsers(List<User> allUsers) {
|
||||||
|
if (allUsers == null) return new ArrayList<>();
|
||||||
|
|
||||||
|
UserManager me = UserManager.getInstance();
|
||||||
|
String myEmail = me.getUserEmail();
|
||||||
|
|
||||||
|
List<User> sanitizedList = new ArrayList<>();
|
||||||
|
for (User u : allUsers) {
|
||||||
|
String email = u.getEmail() != null ? u.getEmail().toLowerCase() : "";
|
||||||
|
if (!email.endsWith(REQUIRED_DOMAIN)) continue;
|
||||||
|
if (EXCLUDED_IDS.contains(u.getId())) continue;
|
||||||
|
if (u.getRoles() == null || u.getRoles().isEmpty()) continue;
|
||||||
|
|
||||||
|
sanitizedList.add(u);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (me.isEditorOrAbove()) {
|
||||||
|
return sanitizedList;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<User> finalResult = new ArrayList<>();
|
||||||
|
List<String> myRoles = getRolesForEmail(sanitizedList, myEmail);
|
||||||
|
|
||||||
|
// NY ROLLE LAGT TIL I LISTEN: amuhmsmiljogruppa
|
||||||
|
List<String> deptRoles = Arrays.asList(
|
||||||
|
"serviceavdelingen",
|
||||||
|
"automasjonsavdelingen",
|
||||||
|
"prosjektavdelingen",
|
||||||
|
"administrasjonen",
|
||||||
|
"kbs_alle",
|
||||||
|
"amuhmsmiljogruppa"
|
||||||
|
);
|
||||||
|
|
||||||
|
for (User u : sanitizedList) {
|
||||||
|
if (u.getEmail().equalsIgnoreCase(myEmail)) {
|
||||||
|
finalResult.add(u);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean sharesDepartment = false;
|
||||||
|
for (String role : u.getRoles()) {
|
||||||
|
String r = role.toLowerCase();
|
||||||
|
if (deptRoles.contains(r) && myRoles.contains(r)) {
|
||||||
|
sharesDepartment = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sharesDepartment) {
|
||||||
|
finalResult.add(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<String> getRolesForEmail(List<User> users, String email) {
|
||||||
|
List<String> roles = new ArrayList<>();
|
||||||
|
for (User u : users) {
|
||||||
|
if (u.getEmail().equalsIgnoreCase(email)) {
|
||||||
|
if (u.getRoles() != null) {
|
||||||
|
for (String r : u.getRoles()) roles.add(r.toLowerCase());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
}
|
||||||
9621
hele_prosjektet.txt
9621
hele_prosjektet.txt
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue