Dzielenie zakresów |
Dzielenie zakresów |
5.06.2018, 06:55:20
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Aplikacja generalnie polega na tym, że raportujemy sobie czas pracy możemy wprowadzać korekty itd.
Mam takich kilka scenariuszy:
Moje pytanie brzmi jak najlepiej będzie te scenariusze obsłużyć używając DateTime ? Macie jakieś pomysły ? Miał może ktoś z was kiedyś podobny problem i jest w stanie podzielić się wiedzą jak w łatwy sposób to można osiągnać? Chodzi mi najbardziej o problem w scenariuszach 2 i 3 wydają mi się najbardziej skomplikowane. Ten post edytował rad11 5.06.2018, 06:56:54 |
|
|
5.06.2018, 07:47:56
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Każde zadanie to obiekt składający się z początku i końca zadania.
gdzie to zapiszesz to nie ma znaczenia. Sytuacja 3: Masz zakres który chcesz wstawić 11-12. Pobierasz sobie wszystkie zakresy które mają część wspólną z nowym zakresem. Sortujesz je wg. czasu rozpoczęcia. I teraz musisz każdy zakres sprawdzić i zmodyfikować odpowiednio start lub koniec. Tutaj może pojawić się problem (chipotetycznie) że jakieś zadanie będzie się w całości zawierało w nowym przedziale a wtedy należałoby je chyba oznaczyć jako usunięte. 2 scenariusz to bierzesz sobię zadanie. Sprawdzasz czy nowe w całości się zawiera. Robisz kopię zadania i w 1-szym obcinasz end_date do wartości start_date nowego, a w drugim odwrotnie. ot i cała filozofia |
|
|
6.06.2018, 10:43:06
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
A czy uważasz że dało by się to zrobić nie używając ifologii ?
Ten post edytował rad11 6.06.2018, 10:43:14 |
|
|
6.06.2018, 10:48:42
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Pytanie czy chcesz pozwalać na dziury w czasie. Jeśli tak, to lepiej zapisuj przy każdym wpisie początek i koniec, dbając przy zapisie o brak zazębień. Jeśli nie, to wystarczy zapisywać długość trwania każdego bloku.
To nie jest skomplikowane. Przy posortowanych blokach łatwo wyłapywać zazębienia. |
|
|
6.06.2018, 10:52:50
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
@SmokAnalog zapisywany jest początek oraz koniec i dziury też mogą być pomiędzy zadaniami bo ktoś mógł mieć tzw. breaka czyli nic robił
|
|
|
6.06.2018, 11:01:30
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Jeżeli zadania nie mogą się nakładać (co wcale nie jest takie oczywiste, bo może czasami mogą?), to nie pozostaje Ci nic innego, jak zadbać o to z poziomu klasy odpowiedzialnej za zapisywanie. Posortuj według rozpoczęcia i sprawdzaj po kolei czy czas zakończenia poprzedniego jest mniejszy lub równy czasowi rozpoczęcia kolejnego.
|
|
|
6.06.2018, 11:06:16
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Zacznij sobie od rozpisania wszystkich warunków a potem będziesz to upraszczał aż znajdziesz optymalny algorytm.
|
|
|
6.06.2018, 12:07:15
Post
#8
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Jak dla mnie robienie czegoś takiego w oparciu o formularze to trochę bez sensu. Skończy się tak, że ktoś wpisze zły zakres, podzieli mu wcześniejszy wpis na dwa, potem zmieni datę/czas, znów coś podzieli i będzie ogólny burdel.
MZ tutaj lepiej o to zadbać na poziomie interfejsu, a sam model tylko musi zabronić zapisywać zazębiające się okresy. Na poziomie interfejsu ogarnąłbym to na podobnej zasadzie jak w google calendar - używając np. jqueryUI szubko uzyskasz przyzwoity efektt. Będzie znacznie wygodniej i unikniesz zarządzanie piekiełkiem podzielonych przypadkowo zadań przez omyłkowe wpisy. |
|
|
6.06.2018, 12:16:08
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Nikt tu nie wspominał jeszcze o implementacji interfejsu użytkownika. Oczywiście, że lepiej zrobić jakieś przesuwajki. Tylko że nawet najfajniejszy interfejs nie wyeliminuje potrzeby porządnej walidacji danych. Praca backendowa będzie taka sama niezależnie czy to jest zwykły formularz czy wypasiony interfejs.
|
|
|
6.06.2018, 12:19:05
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Fomularz już jest i wygląda tak https://ibb.co/nERsSo (mała wycinka formularza) można wprowadzać korektę do pojedynczego periodu, ale można też dodać korektę na inne zadanie o określonym periodzie.
Ten post edytował rad11 6.06.2018, 12:24:27 |
|
|
6.06.2018, 12:39:14
Post
#11
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
SmokAnalog, ale walidacja to jedno, a scenariusze wyżej to co innego. Mi tutaj chodzi o to, że połowa tych problemów nie musi być rozwiązywana, a już na pewno nie powinna być rozwiązywana automatycznie. Np. to że masz prace nad taksiem A dzisiaj od 9 do 17 i dodajesz drugi task nad którym pracowałeś 11-12. Teraz wg scenariusza dzieli się bazowy task na 2 i po środku wstawia task b. Ale co jak użytkownik po zapisaniu zauważy, że taks B miał być z datą wczorajszą? Zmieni na wczorajszą, ale task A zostanie już z dziurą. Itd itp. Takie rzeczy będą zdarzały się nagminnie, bo ludzie się mylą.
MZ w backendzie tak jak pisałem wystarczy dać walidację czy taski na siebie nie nachodzą i jak nachodzą to zwracać wyjątek, a całą "logikę" żeby było dobrze zostawić użytkownikowi, bo to on wie co dokładnie chce zapisać - z dobrym interfejsem po prostu zrobi to co chce. Tj. w interfejsie sam musi ustalić podział tasku, czy tak go "przeciągać" aby nie nachodził na siebie itp. W backendzie wystarczy jedynie sprawdzać czy finalnie nic na siebie nie nachodzi i tyle. Ogólnie uważam, że oparcie tego na formularzach jest słabe i niewygodne z punktu widzenia użyteczności + powoduje sporo problemów pobocznych i osobiście uważam, że są błędne założenia wstępne np. z tym, że system automatycznie dzieli taski. |
|
|
6.06.2018, 12:47:38
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Wszystko zależy od tego w jaki sposób to ma być używane. Jeśli tych zadań ma być dużo, to faktycznie w formularzu będzie można się utopić. Ale jeśli jest tylko kilka na dzień, to takie wpisywanie nie jest takie straszne, szczególnie jak będzie też wizualizacja dnia gdzieś obok formularza. Czasami łatwiej coś wpisać niż bawić się klockami. Zależy jak leży
|
|
|
6.06.2018, 12:57:57
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Tych zadań jest dużo, ale raczej zmiana interfejsu nie wchodzi w grę tylko obsługa na backendzie.
|
|
|
6.06.2018, 13:00:27
Post
#14
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
No też prawda - jak będzie 5 ogarniętych ludzi, mało tasków to z jakąś sensowną wizualizacją obok formularza da się tak pracować. Osobiście też wolę wpisać niż przeciągać, ale wiadomo, że jesteśmy w mniejszości ;-)
//edit - jak jest dużo to raczej czekają cię ciężkie chwile - mz to dzielenie to jest miejsce gdzie będzie sporo kłopotów. Raczej jak ktoś zapomniał, to niech teraz to koryguje ręcznie, bo inaczej skończy się tak jak pisałem wyżej. Daj też tą wizualizację w postaci jakiegoś timelina o której pisał SmokAnalog, gdzie dziury będą innym kolorem bo to kolejne miejsce, gdzie będzie sporo błędów. Ogólnie jednak będzie ciężko jeśli użytkownicy mają to edytować/poprawiać. Łatwo się będzie pogubić jak to nie są pełne godziny tylko czas typu 16:15-16:23 itd. Ten post edytował athabus 6.06.2018, 13:04:41 |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 15:44 |