wyciąganie komputerów klientów którym kończy się abonament
Witam!
Stanąłem za potrzeba zrobienia przypominaczki kiedy sie koncza ludziom abonamenty, jednak pewna sprawa mnie pokonała.
Zrobiłem coś takiego, wprawdzie na razie jest to tylko zapytanie SQL, ale będzie dorobione do jakiego skryptu który wysyłać ma maila (mam w planach przerobienie jakiego remainder albo sendinvoice)
SELECT nodes.name, customers.lastname, customers.name, assignments.dateto FROM customers JOIN assignments ON assignments.customerid=customers.id JOIN nodeassignments ON nodeassignments.assignmentid=assignments.id JOIN nodes ON nodes.id=nodeassignments.nodeid WHERE assignments.dateto < 1220362130;
Zapytanie wypluwa komputery w którym zakończył się abonament, problem jest taki ze wypluwa również te które maja "taryfy przeterminowane", a chciałbym aby już nie wypisywało jak jest przypisana do komputera nowa taryfa na obecny okres. Niestety to już mnie troszkę przerasta.
Może ktoś pomoże?
W dniu 5 września 2008 14:44 użytkownik Waldemar Dymkiewicz waldemar.dymkiewicz@easy-com.pl napisał:
Witam!
Stanąłem za potrzeba zrobienia przypominaczki kiedy sie koncza ludziom abonamenty, jednak pewna sprawa mnie pokonała.
To jest moja wersja przypominaczki ( 2 tygodnie przed konce abonamentu bedzie krzyczał codziennie dopoki nie wklepiesz mu przedłuzenia )
#!/bin/bash #zmienne sa w lms.ini ze spacja na poczatku user=`grep "^ user" /etc/lms/lms.ini | grep -v ';' | grep '=' | awk {'print $3'}` pass=`grep "^ password" /etc/lms/lms.ini | grep -v ';' | grep '=' | awk {'print $3'}` database=`grep "^ database" /etc/lms/lms.ini | grep -v ';' | grep '=' | awk {'print $3'}` query="mysql -u $user -p$pass -D $database -e" mailto="twojadresemail@asd" #mailto_cmd='cat /srv/users/internet/notfiy.msg | /usr/bin/mail -e -s Informacja jakisadresemail@com" '
NOW=`mysql --skip-column-names --silent --raw --disable-pager -u root -ptwojehaslo -e 'SELECT UNIX_TIMESTAMP()'` let "TWO_WEEKS_PLUS = $NOW + 1260000" for i in `mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT customerid FROM assignments where ( dateto < $TWO_WEEKS_PLUS and dateto > $NOW and datefrom < $NOW ) " `
do lastname=`mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT lastname from customers where id=$i"` phone=`mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT phone1 from customers where id=$i"` email=`mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT email from customers where id=$i"` unix_date_of_cutoff=`mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT dateto from assignments where customerid=$i "` fromunix_date_of_cutoff=`mysql --skip-column-names --silent --raw --disable-pager -u root -ptwojehaslo -e "SELECT FROM_UNIXTIME( $unix_date_of_cutoff ,'%d-%m-%Y')"`
customerid_w_future_assignments=`mysql --skip-column-names -u root -ptwojehaslo -D lmsalarm -e "SELECT customerid from assignments where datefrom > $NOW and customerid=$i "`
if [ -z $customerid_w_future_assignments ] then echo "Klient $lastname ($i) o danych : telefon $phone , email $email - zostanie niedlugo odciety ( $fromunix_date_of_cutoff ) -> https://beta.cebit.com.pl/lms/?m=customerinfo&id=$i " | mail -s "[lms] informacja o kliencie $lastname" $mailto fi
done
TRzeba było pogrzebac w kodzie C do demona. Tam jest duzo takich zapytan
pozdr.
Witam Szanownych Grupowiczów
mam zainstalowanego lmsa, chciałbym jednak ustawić sobie automatycznie blokowanie userów gdy ich saldo jest ujemne, tzn. jeśli na początku miesiąca user bedzie miał ujemne saldo to będzie mu sie pokazywał komunikat o blokadzie neta za 7 dni, przez te pierwsze 7 dni musiałby tylko od czasu do czasu kliknąć w komunikat, po siedmiu dniach blokowałby sie automatycznie net, oprócz kilku stron bankowych...
czy jest to do zrobienia? jeśli tak i byłby ktoś chętny to proszę o wiadomość na prv by nie zaśmiecać listy, za wszystko oczywiście zapłacę.
Z poważaniem Marko
!DSPAM:48c1564e321751590977493!
TRzeba było pogrzebac w kodzie C do demona. Tam jest duzo takich zapytan
<<ciach>>
Pozwolilem sobie pogrzebac w Twoim kodzie. Dokonalem takich oto zmian: - dostosowalem do aktualnej wersji CVS - porządek w zapytaniach by nie były z root - timestamp z konsoli (polecenie date zamiast zapytania sql) - zmienilem okres (linia 10 - każdy może wstawic co chce) - wysyla tylko jedna wiadomosc dotyczaca klienta mawet, jeżeli konczy mu się wiecej taryf w zadanym okresie - sprawdza nie czy nie ma dalej taryf (u mnie umowa sa na czas nieokreslony - tylko warunki po okresie promocyjnym się zmieniaja) tylko czy ostatni dokument nie ma w nazwie "Wypowiedzenie"
I oto co wyszlo:
#!/bin/bash user=`grep "^ user" /etc/lms/lms.ini | grep -v ';' | grep '=' | awk {'print $3'}`; pass=`grep "^ password" /etc/lms/lms.ini | grep -v ';' | grep '=' | awk {'print $3'}`; database=`grep "^ database" /etc/lms/lms.ini | grep -v ';' | grep '='| awk {'print $3'}`;
query_skip="mysql --skip-column-names -u $user -p$pass -D $database -e" mailto="sarenka@mojasiec.com"
NOW=`date +"%s"` FUTURE=`date --date="1 month" +"%s"` for i in `$query_skip "SELECT DISTINCT customerid FROM assignments where ( dateto < $FUTURE and dateto > $NOW and datefrom < $NOW ) " ` do lastname=`$query_skip "SELECT lastname from customers where id=$i"` #echo $lastname $i name=`$query_skip "SELECT name from customers where id=$i"` phone=`$query_skip "SELECT phone from customercontacts where customerid=$i"` #echo $phone email=`$query_skip "SELECT email from customers where id=$i"` unix_date_of_cutoff=`$query_skip "SELECT dateto from assignments where customerid=$i and dateto > $NOW ORDER BY dateto ASC LIMIT 1"` tariffid=`$query_skip "SELECT tariffid FROM assignments where customerid=$i and dateto > $NOW ORDER BY dateto ASC LIMIT 1"` #echo $tariffid tariff=`$query_skip "SELECT name FROM tariffs WHERE id = $tariffid"` #echo $tariff fromunix_date_of_cutoff=`date --date="1970-01-01 $unix_date_of_cutoff sec GMT" +"%Y/%m/%d"` #echo $fromunix_date_of_cutoff document=`$query_skip "SELECT id FROM documents WHERE customerid=$i and type < 0 ORDER BY cdate DESC LIMIT 1"` docname=`$query_skip "SELECT title FROM documentcontents WHERE docid = $document"` #echo $docname if [[ ${docname} == *Wypowiedzenie* ]] then #echo "Wypowiedzenie" else #echo "Mail" echo "Dnia $fromunix_date_of_cutoff konczy sie taryfa klientowi: $lastname $name ($i) telefon $phone email $email ostatni dokument: $docname link: <strona z lms>/?m=customerinfo&id=$i " | mail -s "[LMS-EndTariff] Konczaca sie taryfa: $lastname $name" $mailto fi Done
Wojciech Ziniewicz pisze:
W dniu 5 września 2008 14:44 użytkownik Waldemar Dymkiewicz waldemar.dymkiewicz@easy-com.pl napisał:
Witam!
Stanąłem za potrzeba zrobienia przypominaczki kiedy sie koncza ludziom abonamenty, jednak pewna sprawa mnie pokonała.
To jest moja wersja przypominaczki ( 2 tygodnie przed konce abonamentu bedzie krzyczał codziennie dopoki nie wklepiesz mu przedłuzenia )
[ciach]
TRzeba było pogrzebac w kodzie C do demona. Tam jest duzo takich zapytan
Lenistwo ludzkie (moja na pewno) nie zna granic, podobnie jak głupota, ale o tym kiedy indziej :)
W załączniku wrzucam przypominaczkę przystosowana do współpracy z baza danych postgres (zapytania sql powinny bez niczego zadziałać na mysql-u, nie testowałem bo ni mam bazy LMS na mysql-u pod reka). Po mojej myśli czyli wyciągające komputery klienta przypisane do zobowiązań.
Można ale z tymi stronami bankowymi to już sprawa mnie przerasta, jeżeli ktoś ci pomoże chętnie się z tobą złożę na takie rozwiązanie. Mi by raczej chodziło o takie rozwiązanie żeby przypomnienie było 10 każdego miesiąca, ale to będzie kwestia cron'a. Powiedz mi tylko czy masz squid'a jeżeli idziesz na to? Pozdrawiam Marek Jasiński
---------------------------------------------------- Krwawe walki na ringu, już wkrótce w Dąbrowie Górwniczej. Nie możesz tego przegabić! Zobacz więcej: http://klik.wp.pl/?adr=http%3A%2F%2Fcorto.www.wp.pl%2Fas%2F10270243.html&...
!DSPAM:48c16da310401703090906!
tak mam squida i w sumie nie zależy mi tak bardzo na tych stronkach banków, najważniejsze to żeby przez 7 pierwszych dni od początku miesiąca użytkownikowi przeszkadzały komunikaty a ósmego dnia wyłączyło go.
Marek
!DSPAM:48c174f515561913455709!
Marek pisze:
tak mam squida i w sumie nie zależy mi tak bardzo na tych stronkach banków, najważniejsze to żeby przez 7 pierwszych dni od początku miesiąca użytkownikowi przeszkadzały komunikaty a ósmego dnia wyłączyło go.
Marek
Cron i dwa zapytania do bazy ;)
!DSPAM:48c1792919811336712104!
faktycznie, teoretycznie sprawa powinna nie byc trudna, zapytania do bazy wrzucić do crona i powinno chodzić, tylko ja jestem raczkujący jeśli chodzi o pisanie takich skryptów ale szybko się uczę i cholernie mnie to interesuje,
mam prośbę, mógłby ktoś pokazać mi mniej więcej jak podłączyć się do bazy i wylistować np. użytkowników z ujemnym saldem ? może przykład właśnie takiego skryptu ?
Pozdrawiam Marek
tak mam squida i w sumie nie zależy mi tak bardzo na tych stronkach banków, najważniejsze to żeby przez 7 pierwszych dni od początku miesiąca użytkownikowi przeszkadzały komunikaty a ósmego dnia wyłączyło go.
Marek
Cron i dwa zapytania do bazy ;)
!DSPAM:48c4c780177181327519691!
Marek pisze:
faktycznie, teoretycznie sprawa powinna nie byc trudna, zapytania do bazy wrzucić do crona i powinno chodzić, tylko ja jestem raczkujący jeśli chodzi o pisanie takich skryptów ale szybko się uczę i cholernie mnie to interesuje,
mam prośbę, mógłby ktoś pokazać mi mniej więcej jak podłączyć się do bazy i wylistować np. użytkowników z ujemnym saldem ? może przykład właśnie takiego skryptu ?
Pozdrawiam Marek
Przejrzyj skrypty perlowe w lms/bin - tam masz łączenie się do bazy, sporo kwerend. Potem przejrzyj sobie strukturę bazy danych w dokumentacji LMS i stworzysz odpowiednie zapytanie.
pozdrawiam, Dawid Widyna
!DSPAM:48c4e6eb87971336712104!
Dawid Widyna pisze:
Przejrzyj skrypty perlowe w lms/bin - tam masz łączenie się do bazy, sporo kwerend. Potem przejrzyj sobie strukturę bazy danych w dokumentacji LMS i stworzysz odpowiednie zapytanie.
pozdrawiam, Dawid Widyna
Można nawet to zrobić w sposób prosty i rzeźnicki ;)
echo "SELECT customers.id AS id, UPPER(lastname) AS lastname, name, SUM(cash.value) AS balance FROM customers LEFT JOIN cash ON customers.id = cash.customerid WHERE deleted = 0 GROUP BY customers.id, lastname, name HAVING SUM(cash.value) < 0 ORDER BY lastname, name" | mysql -u user -phaslo baza
!DSPAM:48c4f24b96781310814384!
Przemysław Kudyba pisze:
Dawid Widyna pisze:
Przejrzyj skrypty perlowe w lms/bin - tam masz łączenie się do bazy, sporo kwerend. Potem przejrzyj sobie strukturę bazy danych w dokumentacji LMS i stworzysz odpowiednie zapytanie.
pozdrawiam, Dawid Widyna
Można nawet to zrobić w sposób prosty i rzeźnicki ;)
echo "SELECT customers.id AS id, UPPER(lastname) AS lastname, name, SUM(cash.value) AS balance FROM customers LEFT JOIN cash ON customers.id = cash.customerid WHERE deleted = 0 GROUP BY customers.id, lastname, name HAVING SUM(cash.value) < 0 ORDER BY lastname, name" | mysql -u user -phaslo baza
Dobre :)
pozdrawiam, Dawid W
!DSPAM:48c4f9e4102909813612796!
Można ale z tymi stronami bankowymi to już sprawa mnie przerasta, jeżeli ktoś ci pomoże chętnie się z tobą złożę na takie rozwiązanie. Mi by raczej chodziło o takie rozwiązanie żeby przypomnienie było 10 każdego miesiąca, ale to będzie kwestia cron'a. Powiedz mi tylko czy masz squid'a jeżeli idziesz na to?
Bez squida i z bankami się da (zreszta ze squidem i bankami tez) :) Nawet chyba pokazywalem na grupie mój zestaw skrypt + winietka.
Pozdrawiam Sarenka
!DSPAM:48c183b228311590977493!
Dokladnie. Jezeli chce z automata zeby mu zliczalo w lms (cutoff.so lub lms-cutoff) trzeba skompilowac tak zeby wyciagalo z mysql zapytania %now i %B. Np. Dzis mamy %now Twoje saldo wznosi %B za 7 dni (nie wiem jak zrobic zeby odliczalo kazdy dzien) internet zostanie odlaczony. I do cron dodac kiedy i co ile ma sie skrypt uruchamiac. Jak sie myle to niech ktos mnie wysmieje :)
---------------------------------------------------- Krwawe walki na ringu, już wkrótce w Dąbrowie Górwniczej. Nie możesz tego przegabić! Zobacz więcej: http://klik.wp.pl/?adr=http%3A%2F%2Fcorto.www.wp.pl%2Fas%2F10270243.html&...
!DSPAM:48c1845630084380352099!
gotowe z ip banków:)
#!/bin/sh /usr/sbin/iptables -t nat -A PREROUTING -d 193.201.34.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.193.181.0/24 -j ACCEPT /usr/sbin/iptables -A FORWARD -d 83.142.172.0/22 -j ACCEPT /usr/sbin/iptables -A FORWARD -d 10.20.2.1/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.201.34.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.193.181.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.41.230.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 62.29.254.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.111.166.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 217.153.57.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.201.167.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.108.177.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 195.187.142.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 195.136.192.0/18 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.41.231.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.201.34.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.0.242.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 192.193.0.0/16 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 195.35.80.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 193.109.225.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 217.153.60.0/24 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 195.216.96.0/19 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -d 195.216.102.0/24 -j ACCEPT
/usr/sbin/iptables -t nat -A PREROUTING -s 85.x.200.108 -p tcp --dport 80 -j REDIRECT --to-port 888 /usr/sbin/iptables -t nat -A PREROUTING -s 85.x.200.108 -p tcp --dport 1:65353 -j DROP
Kwaq
!DSPAM:48c19c6945726491211187!
super, cieszę sie że da sie to zrobić, pytanie teraz tylko kto się tego podejmie?
zainteresowanych proszę pisać na prv.
Dzięki Pozdrawiam Marek
!DSPAM:48c242da149261310814384!
uczestnicy (8)
-
Dawid Widyna
-
Marek
-
Marek Jasiński
-
Mirek Kwak
-
Przemysław Kudyba
-
Sarenka
-
Waldemar Dymkiewicz
-
Wojciech Ziniewicz