Powtarzanie cykliczne przypomnień w kalendarzu


(Pj) #1

Witam, szukam inspiracji i pomysłów na rozbudowę kalendarza na swojej stronce, a dokładniej chodzi o dodanie zaawansowanych ustawień dla przypomnień kalendarza takich jak np. powtarzaj co poniedziałek, każdego dnia miesiąca, co rok itd...

Pytam ponieważ nie chce wyważać otwartych drzwi, być może ktoś z Was opracowywał podobne algorytmy i wspomoże wiedzą merytoryczną :slight_smile: Zastrzegam, że chodzi mi tylko o logikę.

Przykład:

w bazie kalendarza mam przypomnienie o treści "wyślij deklaracje VAT" i teraz zastanawiam się jak zaprogramować logikę by powtórzyć tę informacje każdego 25 dnia miesiąca.

czy w momencie zaznaczania powtarzaj każdego 25 dnia miesiąca

  1. powielić wpis w tabeli tyle razy na np 2 lata do przodu i później kontrolować by cały czas wyprzedzenie było na 2 lata (marnotrawna metoda)

  2. powielać wpisy na początku miesiąca i tylko na miesiąc w przód (jeśli użytkownik zerknie na dwa miesiące do przodu to nie zobaczy przypomnienia )

  3. opracować niezależne zapytania do bazy w/g dodatkowych flag np day = 25 i jesli flaga jest ustawiona ignorować standardowe zapytanie

Każde rozwiązanie ma swoje zalety i wady, w przypadku dwóch pierwszych wystąpi zapychanie bazy duplikatami przypomnień za to łatwiej będzie zapanować nad statusami wysyłki oraz przeczytania przypomnienia (każdy rekord ma swój status)

w przypadku trzecim bardziej skomplikuje się mechanizm rysowania kalendarza (kilka zapytań więcej - dla każdego z możliwych wyjątków ) i dodatkowo będzie problem ze statusem wysyłki i przeczytania przypomnienia w danym dniu.

W obu przypadkach można to rozwiązać to dodając dodatkową tabele relacyjną i tam trzymać statusy przypomnienia dla danego dnia lub dla pierwszych dwóch opcji referencje do właściwych obiektów, bez kopiowania treści.

Co o tym sądzicie n/t powyższych rozwiązań, a może coś lepszego zaproponujecie?

Na koniec jeszcze link jakby ktoś potrzebował zerknąć o czym mowa w treści http://youbookmarks.com/reminder/


(mario@) #2

Może coś w tym stylu. W bazie tworzysz cztery kolumny(uwzględniam tylko minimum kolumn): dzień, miesiąc, rok, treść gdzie trzy pierwsze to zwykłe int. I tak zakładamy że do wiesza dzień można wpisywać liczby z zakresu 0-31 gdzie 0 oznaczać będzie każdy dzień miesiąca, do wiersza miesiąc wpisujesz liczby z zakresu 0-12 gdzie znowu 0 oznacza każdy miesiąc i tak samo postępujesz z rokiem. Co do zapytań do bazy to będą się one opierać na logice and i or - wybierasz z niej te wpisy, które spełniają konkretną datę bądź, te które w jakiejś części ją spełniają - posiadają 0 przy, którejś wartości. Oczywiście wpisy mogą mieć wiersze ważne, przeczytane itd.

Coś mi to przypomina Twój trzeci wariant - albo się mylę :slight_smile: