Spis treści
2.1. Wstęp
LMS składa się z kilku modułów, podstawowym modułem jest LMS-UI (interfejs użytkownika). Jest on w całości napisany w PHP i do pracy wymaga bazy danych (właściwie to każdy moduł wymaga bazy danych). To właśnie w LMS-UI wykonujemy wszystkie czynności, reszta modułów ma tylko za zadanie zautomatyzować pracę LMS.
LMS to także zestaw skryptów w języku Perl, i to właśnie te skrypty wymagają abyś posiadał interpreter tego języka. Jeśli będziesz chciał używać tych skryptów, musisz mieć Perl'a. Skrypty pozwalają m.in. na comiesięczne naliczanie opłat abonamentowych bądź wysyłanie upomnień. Największy z nich - LMS-MGC jest skryptem, ale na tyle uniwersalnym że potrafi wygenerować praktycznie dowolny plik konfiguracyjny i zrestartować usługę na twoim serwerze.
Jest jeszcze LMS Daemon, napisany w języku C. Jest on przeznaczony (a właściwie jego wtyczki) do generowania plików konfiguracyjnych i restartowania usług. Można go stosować jako zamiennik lub uzupełnienie skryptów perlowych. Odpowiada on za to, aby to co zostało zmienione w LMS-UI zostało zmienione także w rzeczywistości.
2.2. Wymagania
2.2.1. Serwer WWW
Ponieważ LMS-UI jest napisane w PHP, niezbędny jest serwer WWW z interpreterem tego języka. Preferowanym serwerem jest Apache (www.apache.org).
2.2.2. Interpreter PHP
Interpreter powinien być w wersji 5.2.x lub nowszej. PHP można ściągnąć ze strony www.php.net. W szczególności wymagane są następujące moduły (sprawdź „extension” w php.ini lub wyjście funkcji phpinfo()):
- pcre, posix,
- zlib (dla kompresowanych backupów),
- gd i/lub ming (tylko dla mapy sieci),
- mysql, mysqli lub pgsql (dla bazy danych),
- iconv, mbstring
- PEAR::Mail (wymaga PEAR::Net_SMTP i PEAR::Net_Socket) do mailingu.
2.2.3. Serwer baz danych
LMS nie będzie działał prawidłowo na wersjach MySQL starszych od 5.0.
LMS współpracuje także z PostgreSQL w wersji 8.2.x lub nowszych.
2.2.4. Biblioteka Smarty
LMS-UI do pracy wymaga jeszcze biblioteki Smarty (http://www.smarty.net) w wersji 3.0 lub wyższej.
2.2.5. Perl
O ile dla LMS-UI wystarczy to co powyżej, to żeby mieć działający LMS-MGC i resztę skryptów potrzebujemy także Perla i moduły do niego, które można pobrać z www.cpan.org, czyli:
- perl właściwy i jego podstawowe moduły (POSIX, GetOpt::Long),
- Config::IniFiles,
- DBI,
- DBD-mysql (Jeśli masz zamiar używać mysql'a),
- DBD-Pg (Jeśli masz zamiar używać postgres'a),
2.2.6. Kompilator języka C
Jeśli chcesz uruchomić LMS Daemon będziesz potrzebował działający kompilator języka C, gdyż jest on dostarczany wyłącznie w postaci kodu źródłowego.
2.2.7. Przeglądarka www
LMS posiada webowy interfejs, dlatego wymagana jest przeglądarka, która obsługuje javascript i ma włączone cookies. Z naszego doświadczenia wynika, że najlepszym wyborem będzie Mozilla Firefox lub Google Chrome
2.2.8. Program Git
Aktualnie najnowsze wersje LMS znajdują się w repozytorium GIT. Aby z nich skorzystać należy zainstalować program Git dostępny na stronie http://git-scm.com/.
2.3. Instalacja LMS
2.3.1 Instalacja wersji stable
LMS w postaci archiwum tar.gz można pobrać ze strony domowej projektu (www.lms.org.pl), a następnie rozpakować i umieścić w wybranym katalogu (np. /var/www/lms ) dostępnym dla serwera www:
$ cd /var/www $ wget http://www.lms.org.pl/download/stable/lms-x.x.x.tar.gz $ tar zxf lms-x.x.x.tar.gz
Biblioteka Smarty zawarta jest w paczce z LMSem. Natomiast gdy używasz wersji systemu pobranej wprost z GIT musisz sam zadbać o jej instalację. Najprościej skorzystać ze skryptu /devel/smarty_install.sh, który pobierze bibliotekę Smarty z Internetu i skopiuje zawartość katalogu /lib z pobranej paczki do katalogu /lib/Smarty.
Położenie wszystkich katalogów możesz zmienić w sekcji [directories] pliku lms.ini.
Pliki z konfiguracją (sample/lms.ini i sample/lms-mgc.ini) umieść w katalogu /etc/lms.
Skrypty wykonywalne z katalogu bin najlepiej przenieść do katalogu /usr/sbin.
Serwer www musi mieć prawo odczytu pliku lms.ini oraz prawa odczytu i zapisu do katalogu backup. Stanowi to potencjalne obniżenie poziomu bezpieczeństwa systemu.
Bezwzględnie LMS wymaga wyłączenia opcji PHP register_globals.
Począwszy od wersji 1.6 przechowywanie konfiguracji interfejsu użytkownika w lms.ini jest przestarzałe. Jedynymi koniecznymi sekcjami w tym pliku są [database] i [directories] oraz konfiguracja skryptów perlowych. Ustawienia LMS-UI przechowywane są w bazie danych i mogą być modyfikowane przez interfejs użytkownika, mają także wyższy priorytet od tych zawartych w lms.ini.
Zalecane zmiany w php.ini (lub httpd.conf dla wirtualki LMSa):
mbstring.func_overload = 7 register_globals = off max_execution_time = 60 ; co najmniej memory_limit = 32M ; co najmniej
Przed pierwszym uruchomieniem LMSa wymagane jest ustawienie opcji konfiguracyjnych bazy danych i katalogów w pliku lms.ini. Następnie po uruchomieniu LMS-UI zakładamy konto użytkownika uprzywilejowanego (zaznaczając wszystkie uprawnienia). Po czym możemy przystąpić do konfiguracji podstawowej systemu. W menu Konfiguracja → Interfejs użytkownika ustawiamy podstawowe opcje odnoszące się do LMS-UI. Następnie wymagane jest zdefiniowanie przynajmniej jednej firmy (oddziału) oraz wskazane jest zdefiniowanie stawek podatkowych, planów numeracyjnych, województw oraz hostów.
2.3.2 Instalacja wersji Git
Aktualna wersja LMS znajduje się w Repozytorium GIT pod adresem https://github.com/lmsgit/lms/. Najnowszą wersję należy pobrać poleceniem:
git clone git://github.com/lmsgit/lms.git lms
Pobieramy, instalujemy i uruchamiamy composer.
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer composer install
2.4. Lokalizacja
Domyślnym językiem interfejsu użytkownika jest angielski, a znaki są kodowane w UTF-8. Aby znaki narodowe innych języków były poprawnie wyświetlane należy mieć w systemie odpowiednie locale. Np. dla języka polskiego będzie to komenda:
# localedef -v -c -i pl_PL -f UTF-8 /usr/share/locale/pl_PL.UTF-8
Jeśli w interfejsie użytkownika znaki narodowe w dalszym ciągu nie będą wyświetlane poprawnie możliwe, że trzeba będzie dodać do pliku konfiguracyjnego serwera www (httpd.conf) wpis:
AddDefaultCharset Off
oraz w konfiguracji PHP (php.ini) zakomentować wpis:
;default_charset = "iso-8859-1"
Informacje na temat konfiguracji kodowania bazy danych w dalszej części rozdziału.
2.5. Instalacja serwera baz danych
2.5.1. MySQL
2.5.1.1. Wstęp
Ta bardzo popularna baza jest dostępna z większością dystrybucji Linuksa. Jeżeli jednak będziesz musiał ją zainstalować samodzielnie, zacznij od ściągnięcia źródeł z www.mysql.com.
2.5.1.2. Instalacja serwera MySQL
Po rozpakowaniu, wejdź do katalogu z naszym MySQL i wydaj kolejno polecenia:
$ ./configure --prefix=/usr/local/mysql $ make $ make install $ /usr/local/mysql/bin/mysql_install_db $ chown mysql -R /usr/local/mysql/var $ /usr/local/mysql/bin/safe_mysqld & $ /usr/local/mysql/bin/mysqladmin -u root password nowe_hasło
2.5.1.3. Utworzenie bazy danych
Konieczne to jest jeżeli uruchamiasz LMS po raz PIERWSZY. Tak więc, wejdź do katalogu w którym masz LMS'a i uruchom shell mysql'a:
mysql -u[tutaj wpisz użytkownika z pełnym dostępem do bazy] -p Enter password:[podaj hasło] mysql> CREATE DATABASE lms CHARACTER SET utf8 COLLATE utf8_polish_ci; mysql> GRANT USAGE ON lms.* TO lms@localhost; mysql> GRANT ALL ON lms.* TO lms@localhost IDENTIFIED BY 'twoje_hasło'; mysql> flush privileges; mysql> use lms; mysql> source doc/lms.mysql;
2.5.1.4. Konfiguracja LMS (lms.ini)
Do pliku /etc/lms/lms.ini dodajemy:
[database] type = mysql host = localhost database = lms user = lms password = hasło_z_pkt.3
W PHP dostępne są dwa rozszerzenia do obsługi bazy MySQL (mysql i mysqli). LMS obsługuje oba, możesz wybrać, ktego chcesz użyć ustawiając odpowiednio opcję type w sekcji [database].
Po takim zabiegu, o ile LMS'owi uda się nawiązać połączenie do bazy danych, można już bez problemu dostać się do systemu. Jeżeli jednak w bazie danych nie ma żadnego konta użytkownika, jedyną rzeczą jaką zobaczysz będzie formularz dodania użytkownika. Jeżeli podasz prawidłowe dane użytkownika, LMS przeniesie Cię na stronę logowania gdzie od razu będziesz mógł użyć nowo utworzonego konta.
Zatrzymaj się tutaj i dodaj coś do crona, tak dla świętego spokoju:
12 4 3,10,17,21,28 * * /usr/bin/mysqldump -u lms --password=Twoje-super-tajne-hasło \ --add-drop-table --add-locks lms > backups/lms-auto-"$(date +%s)".sql
Spowoduje to wykonywanie o 4:12 rano, każdego 3, 10, 17, 21 i 28 dnia miesiąca automagicznie zrzutu danych z mysqla.
2.5.2. PostgreSQL
2.5.2.1. Wstęp
LMS jest testowany na PostgreSQL 8.2.x i nowszych, możesz mieć problemy korzystając ze starszych wersji. Jeżeli nie masz zainstalowanego serwera PostgreSQL, możesz np. własnoręcznie skompilować go ze źródeł dostępnych na stronie www.postgresql.org.
2.5.2.2. Instalacja
Jest to wersja skrócona instalacji, więcej informacji znajdziesz w dokumentacji postgresa. Po ściągnięciu i rozpakowaniu wejdź do katalogu głównego i wpisz kolejno poniższe polecenia.
$ ./configure --enable-locale $ gmake $ su $ gmake install $ adduser postgres $ mkdir /usr/local/pgsql/data $ chown postgres /usr/local/pgsql/data $ su - postgres $ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data --locale=pl_PL.UTF-8 $ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
Dotyczy wersji ⇐ 9.1.x: Wymagane jest dodanie wpisu w postgresql.conf: custom_variable_classes = 'lms'
2.5.2.3. Utworzenie bazy danych
Mając uruchomiony serwer możesz przystąpić do tworzenia bazy o nazwie 'lms', której właścicielem będzie użytkownik z loginem 'lms'.
$ /usr/local/pgsql/bin/createuser -DPRS lms $ /usr/local/pgsql/bin/createdb -E UNICODE -O lms lms $ /usr/local/pgsql/bin/psql -d lms -U lms -f /lms/doc/lms.pgsql
2.5.2.4. Konfiguracja LMS (lms.ini)
Dla systemu LMS domyślnym serwerem baz danych jest MySQL, dlatego w sekcji [database] pliku /etc/lms/lms.ini należy ustawić następujące opcje:
type = postgres user = lms password = hasło_podane_przy_tworzeniu_użytkownika_lms
Hasło jest wymagane w zależności od konfiguracji autentykacji użytkowników postgresa w /usr/local/pgsql/data/pg_hba.conf. Domyślnie hasło nie jest wymagane.
Po takim zabiegu, o ile LMS'owi uda się nawiązać połączenie do bazy danych, można już bez problemu dostać się do systemu. Jeżeli jednak w bazie danych nie ma żadnego konta użytkownika, jedyną rzeczą jaką zobaczysz będzie formularz dodania użytkownika.
Zatrzymaj się tutaj i dodaj coś do crona, tak dla świętego spokoju:
12 4 3,10,17,21,28 * * /usr/bin/pg_dump -U lms --clean \ --file=backups/lms-auto-"$(date +%s)".sql
2.6. Konfiguracja podstawowa
Głównym plikiem konfiguracyjnym LMS jest lms.ini, który należy umieścić w katalogu /etc/lms lub w katalogu głównym LMS'a. Zawiera on zmienne konfiguracyjne LMS-UI oraz wszystkich skryptów wykonywalnych z wyjątkiem LMS-MGC.
Pamiętaj o usunięciu średników na początku linii z ustawianym parametrem konfiguracyjnym.
2.6.1. Sekcja [database] - ustawienia bazy danych
Nazwa | Opis |
---|---|
type | Typ drivera bazy danych. Aktualnie w 100% supportowany jest 'mysql', 'mysqli' oraz 'postgres'. Domyślnie: mysql Przykład: type = mysql |
host | Host gdzie zainstalowana jest baza danych. Najczęściej, localhost, ale można tutaj wstawić cokolwiek (ip, domena, ścieżka do gniazda w formacie '/path/to/socket'). Domyślnie: localhost Przykład: host = localhost |
user | Użytkownik do bazy danych. W wielu wypadkach (jeżeli postępowałeś zgodnie ze wskazówkami w dokumentacji) będzie to 'lms'. Jeżeli chcesz używać konta uprzywilejowanego, prawdopodobnie wpiszesz 'root' (MySQL na większości *nixów), 'mysql' (na PLD) bądź 'postgres' (PostgreSQL). Domyślnie: mysql Przykład: user = lms |
password | Hasło do bazy danych. Domyślnie puste. Przykład: password = password |
database | Nazwa bazy danych, Domyślnie lms. Przykład: database = lms |
2.6.2. Sekcja [directories] - ustawienia katalogów
Nazwa | Opis |
---|---|
sys_dir | Katalog systemowy. Jest to miejsce gdzie jest cała zawartość UI LMS'a, czyli index.php, grafiki, szablony i reszta. Domyślnie, index.php stara się sam odnaleźć w filesystemie używając getcwd(), ale lepiej by było gdyby mu powiedzieć gdzie jest. Przykład: sys_dir = /var/www/htdocs/lms/ |
modules_dir | Katalog z „modułami” LMS'a. Czyli zawartość katalogu modules. Domyślnie: podkatalog 'modules' w 'sys_dir'. Przykład: modules_dir = /usr/share/lms/modules/ |
lib_dir | Katalog z „bibliotekami” LMS'a. Czyli zawartość katalogu lib. Domyślnie: podkatalog 'lib' w 'sys_dir'. Przykład: lib_dir = /usr/share/lms/lib/ |
backup_dir | Katalog z kopiami zapasowymi bazy danych - miejsce gdzie LMS zapisuje zrzuty z bazy. Jeśli katalog z kopiami zapasowymi będzie osiągalny z poziomu WWW, to każdy bez autoryzacji będzie miał do nich dostęp. Domyślnie: podkatalog 'backups' Przykład: backup_dir = /var/backup/lms/ |
doc_dir | Katalog na archiwum dokumentów - miejsce gdzie LMS zapisuje pobrane pliki. Jeśli ten katalog będzie osiągalny z poziomu WWW, to każdy bez autoryzacji będzie miał do nich dostęp. Domyślnie: podkatalog 'documents'. Przykład: doc_dir = /usr/share/documents/ |
smarty_compile_dir | Katalog kompilacji Smarty-ego. Miejsce gdzie Smarty kompiluje szablony. Domyślnie: podkatalog 'templates_c' w katalogu 'sys_dir'. Przykład: smarty_compile_dir = /var/smarty/compile/lms |
smarty_templates_dir | Katalog z szablonami którymi Smarty-ego. Domyślnie: podkatalog 'templates' z 'sys_dir'. Przykład: smarty_templates_dir = /usr/share/lms/templates |
2.6.3. Sekcja [finances] - konfiguracja finansów
Sekcja ta zawiera opcje dotyczące naliczania opłat, a także dane do druków przelewu, których opis znajdziesz w rozdziale o fakturach.
Nazwa | Opis |
---|---|
suspension_percentage (opcjonalny) | Wartość procentowa obciążenia generowana dla obciążeń zawieszonych. Domyślnie: '0' Przykład: suspension_percentage = 50 |
2.7. Prawa dostępu
2.7.1. Idea
LMS ma możliwość zdefiniowania do 256 reguł dostępu do systemu. Każda z nich może zabraniać, bądź pozwalać na dostęp do konkretnych modułów. Każdemu użytkownikowi można przydzielić dowolną kombinację reguł dostępu.
Domyślnie zdefiniowana jest następująca lista reguł dostępu:
- pełen dostęp
- odczyt wszystkich danych (z wyjątkiem Helpdesku)
- podłączanie i odłączanie komputerów
- zarządzanie finansami
- przeładowywanie konfiguracji
- zarządzanie klientami
- zarządzanie komputerami
- dostęp do statystyk
- dostęp do korespondencji seryjnej
- zarządzanie Helpdeskiem (RT)
- obsługa Helpdesku (RT)
- zarządzanie hostingiem
- konfiguracja interfejsu użytkownika
- zarządzanie sieciami i urządzeniami sieciowymi
- zarządzanie terminarzem
- zarządzanie i konfiguracja demona
- operacje kasowe
- zarządzanie grupami klientów
- zarządzanie grupami komputerów
- przypisywanie klientów do grup
- przypisywanie komputerów do grup
- zarządzanie kontami voip
- zarządzanie Userpanelem
- brak dostępu do modyfikacji i zakładania kont użytkowników
- brak dostępu
Niektóre z nich zezwalają na dostęp do modułów oraz dwie zabraniają. Moduły do których użytkownik ma zawsze dostęp to: welcome, copyrights, logout, chpasswd (przy czym chpasswd umożliwia tylko zmianę własnego hasła), dostęp do reszty jest zdefiniowany regułami.
Jeśli nie ustawimy użytkownikowi żadnej reguły dostępu, to LMS domyślnie przydzieli mu regułkę 0, czyli pełen dostęp.
2.7.2. Jak to działa?
Decyzja czy użytkownik ma prawo dostępu do modułu czy nie przebiega następująco:
- najpierw sprawdzana jest lista modułów, do których zawsze ma się dostęp,
- potem następuje sprawdzenie czy moduł pasuje do reguł w poszczególnych poziomach, do których użytkownik ma dostęp,
- na końcu podejmowana jest decyzja czy użytkownik ma uprawnienia by do modułu się dobrać. Jeżeli moduł się załapał na którykolwiek poziom, który zabrania dostępu, dostęp zostanie zabroniony nawet jeżeli użytkownik ma ustawiony poziom, który pozwala na dostęp do modułu (np. ktoś ma pełny dostęp oraz brak dostępu do modułu dodawania komputerów, nie będzie on mógł się odwołać do tego modułu). Jeżeli moduł pasuje do poziomu, który pozwala na dostęp do danego modułu LMS zezwala na dalszą pracę. Jeżeli natomiast moduł się nie „załapał” na żaden poziom również zostanie mu wyświetlony komunikat o braku dostępu.
2.7.3. Reguły dostępu definiowane przez użytkownika
Zaawansowani użytkownicy mają możliwość zdefiniowania dodatkowych dowolnych reguł dostępu lub przedefiniowania istniejących. W tym celu należy utworzyć skrypt PHP na wzór lib/accesstable.php. Lokalizację pliku podajemy w opcji custom_accesstable sekcji [phpui]. W ten sposób można zdefiniować własne reguły zezwalające lub zabraniające dostępu do dowolnych modułów. Moduł to nazwa pliku PHP z katalogu modules, którą w regułach dostępu podajemy bez rozszerzenia. Dla przykładu, można zdefiniować uprawnienie do odczytu faktur (np. na potrzeby skryptu lms-sendinvoices) w następujący sposób:
<?php $access['table'][100]['name'] = 'odczyt faktur'; $access['table'][100]['allow_reg'] = '^invoice$'; ?>
2.8. Upgrade
Uaktualnienie LMS'a przebiega w kilku etapach. Zacznij od sprawdzenia wymagań systemu, gdyż mogły ulec zmianie. Jeśli korzystasz z bazy MySQL powinieneś także zweryfikować uprawnienia użytkownika, one też ulegały zmianie w przeszłości.
Najpierw utwórz katalog z plikami nowej wersji (nie zaleca się nadpisywania starych plików nowymi) oraz usuń zawartość katalogu templates_c.
Następnie, jeśli nie masz jeszcze w systemie locali pl_PL.UTF-8, należy je utworzyć komendą:
# localedef -v -c -i pl_PL -f UTF-8 /usr/share/locale/pl_PL.UTF-8
Jeśli w interfejsie użytkownika znaki narodowe nie będą wyświetlane poprawnie możliwe, że trzeba będzie w pliku konfiguracyjnym serwera www (httpd.conf) ustawić:
AddDefaultCharset Off
oraz w konfiguracji PHP (php.ini) wyłączyć/zakomentować domyślne kodowanie:
;default_charset = "iso-8859-1"
Kolejnym krokiem jest dokonanie zmian w bazie. Od wersji 1.3.1 wprowadzono automatyczną procedurę aktualizacji struktury bazy danych. Następuje ona za każdym razem podczas uruchomienia LMS-UI (jeszcze przed zalogowaniem do systemu).
Ostatni etap - konwersja danych do unicodu. Począwszy od wersji 1.5.4 zaleca się przechowywanie danych zakodowanych w utf-8 (UNICODE), poniżej zostanie przedstawiony przykład migracji z kodowania ISO-8859-2 do UNICODE na bazie danych PostgreSQL.
Zaczynamy od utworzenia backupu danych w LMSie. Następnie przechodzimy do katalogu z backupami i wykonujemy konwersję pliku backupu.
# iconv --from-code=ISO-8859-2 --to-code=UTF-8 < plik_backupu > nowy_plik
Po czym zmieniamy nazwę nowo powstałego pliku na lms-xxxxxxx.sql, aby plik ten był widoczny z poziomu LMS-UI. Teraz należy utworzyć bazę danych z kodowaniem UNICODE (opis w dziale Instalacja). Po czym uruchamiamy LMS-UI i odtwarzamy dane z przekonwertowanego backupu.
Jeżeli używasz wersji pobranej z CVSu musisz dodatkowo zadbać o instalację biblioteki Smarty. Do katalogu /lib/Smarty wgraj zawartość katalogu /lib z paczki Smarty. Czynność (wraz z pobraniem biblioteki Smarty) automatycznie wykonuje skrypt /devel/smarty_install.sh.
2.8.1. Zmiany w konfiguracji
Poniżej znajduje się lista zmian (oraz numer wersji), które zrywają zgodność z wcześniejszymi wydaniami. Zmiany najcześćiej dotyczą usunięcia jakiejś opcji/funkcji, zmiany nazwy opcji konfiguracyjnej, zachowania.
Wersja 1.11.8
- opcje smtp_* i debug_email przeniesiono z sekcji [phpui] do sekcji [mail]
- lms-notify: opcję mailtemplate zastąpiono opcją debtors_template, opcję mailsubject zastąpiono opcją debtors_subject, usunięto parametr –template-file (-D)
- lms-notify-sms: opcję smstemplate zastąpiono opcją debtors_template, usunięto parametr –template-file (-D)|
2.9. Dokumenty
LMS umożliwia generowanie oraz przechowywanie przeróżnych dokumentów tj. faktur, dowodów wpłat oraz dokumentów nie-finansowych np. umów, protokołów. Dokumenty mogą być numerowane wg wzorców (planów) numeracyjnych zdefiniowanych przy pomocy menu Konfiguracja - Plany numeracyjne.
2.9.1. Sposób wyliczania podatku VAT
Poniżej przedstawiono sposób w jaki wyliczany jest podatek w LMS. Wartości wszystkich działań są zaokrąglane do dwóch miejsc po przecinku.
W bazie LMS cena jednostkowa pozycji fakturowej jest przechowywana jako wartość brutto (z podatkiem).
- wartość podatku = (stawka podatku / 100) + 1
Przykład: stawka podatku VAT to 22% wartość podatku = (22 / 100) + 1 = 1,22
- cena jednostkowa netto = cena jednostkowa brutto / wartość podatku
Przykład: cena brutto metra kabla wynosi 2,56 zł, a stawka podatku VAT to 22% cena jednostkowa netto = 2,56 zł / 1,22 = 2,10 zł
- sumaryczna cena brutto = cena jednostkowa brutto * ilość sztuk
Przykład: cena brutto metra kabla wynosi 2,56 zł, ilość metrów 1366, a stawka podatku VAT to 22% cena sumaryczna brutto = 2,56 zł * 1366 m = 3496,96 zł
- cena sumaryczna netto = cena sumaryczna brutto / wartość podatku
Przykład: cena brutto metra kabla wynosi 2,56 zł, ilość metrów 1366, a stawka podatku VAT to 22% cena sumaryczna netto = (2,56 zł * 1366 m = 3496,96 zł) / 1,22 = 2866,36 zł
2.9.2. Faktury
LMS umożliwia wystawianie faktur automatycznie i ręcznie. Ręczne wystawienie faktury jest możliwe z menu 'Nowa faktura' w panelu 'Finanse'. Automatyczne wystawianie faktur wymaga włączenia tej opcji podczas przypisywania taryf użytkownikom. W takim wypadku zapisem faktur do bazy zajmuje się skrypt lms-payments lub demon lmsd.
Do poprawnego działania i tworzenia wydruków wymagane jest ustawienie podstawowych parametrów faktury takich jak nagłówek, stopka, domyślny wystawca, miejsce wystawienia oraz konto bankowe w definicji firmy. Ponadto mamy do dyspozycji opcje sekcji invoices.
Wygenerowane faktury można obejrzeć w dwojaki sposób: albo poprzez ikonkę drukarki na wykazie bilansu finansowego (ogólnego bądź pojedynczego użytkownika), albo poprzez 'Lista faktur' z menu 'Finanse'. W przypadku listy faktur, możliwe jest także filtrowanie faktur do wydruku.
2.9.2.1. HTML
Przy domyślnych ustawieniach faktury wyświetlane są w formacie html wg domyślnego szablonu.
Wynikowy dokument HTML zawiera oryginały i kopie, które są oddzielone znacznikami podziału strony poprzez CSS. Tak więc każda nowoczesna przeglądarka zgodna z CSS powinna bezproblemowo drukować faktury ładnie podzielone na strony. Funkcja ta była testowana na przeglądarkach Microsoft Internet Explorer 6.0, Opera 7.02 oraz Mozilla 1.3.
Praktycznie każda przeglądarka internetowa ma możliwość konfiguracji wydruku, gdzie można wyłączyć funkcje takie jak drukowanie stopki i nagłówka, czy też adresu na wydruku.
2.9.2.2. PDF
Możliwe jest także tworzenie faktur jako pliki pdf. Przypisanie opcji type z sekcji invoices wartości 'pdf' spowoduje, że faktury zamiast w html'u będą tworzone jako pliki „portable data format”. Opcja template_file spełnia podobną rolę jak dla faktur html'owych, z tym, że posiada predefiniowane wartości: 'standard' - faktura podstawowa (odpowiednik invoice.html) i 'FT-0100' - faktura przystosowana do drukowania na drukach FT-0100 zawierających druk polecenia przelewu. W opcji template_file można także wstawić nazwę pliku php, jednak ta możliwość jest przeznaczona dla zaawansowanych użytkowników, gdyż wymaga utworzenia pliku php, a nie tak jak w przypadku faktur html'owych szablonu Smarty.
2.9.2.3. Korekty
Faktury korygujące korzystają z ustawień dotyczących pozostałych faktur z sekcji invoices. Domyślny szablon faktury uwzględnia faktury korygujące. Jednak udostępniono opcję pozwalającą na zdefiniowanie osobnego szablonu dla korekt (pozostałe opcje są wspólne dla faktur i dla korekt): cnote_template_file.
2.9.2.4. Automatyczne generowanie numeru konta bankowego
LMS umożliwia automatyczne generowanie numeru konta bankowego w standardzie IBAN zawierającego ID klienta. Funkcja ta może być używana do masowej identyfikacji płatności która jako usługa znajduje się w ofercie większości banków. Aby masowa identyfikacja była możliwa, należy podpisać umowę z bankiem z której potrzebne nam będą:
- Numer rozliczeniowy banku
zawsze stały dla każdego banku, złożony z 8 cyfr
- Identyfikator rachunku
identyfikator naszego wirtualnego rachunku, złożony z 4 cyfr
Gdy mamy potrzebne dane, definiujemy konto bankowe w konfiguracji firmy (oddziału). System sam rozpozna (na podstawie długości), czy wprowadzono cały numer rachunku firmy czy prefiks do płatności masowych. Prefix powinien składać się z 8 do 20 cyfr bez spacji i innych znaków.
Od tej pory jeśli używamy faktur PDF z szablonem FT-0100, lub drukujemy bloczki przelewu/wpłaty z menu Finanse → Wydruki → Faktury → Drukuj polecenia przelewu/wpłaty, każdy wydruk będzie zawierał unikalny numer konta z zawartym ID naszego klienta. ID klienta zostanie dodane na końcu, oraz poprzedzone odpowiednia ilością zer. Suma kontrolna będzie wyliczana automatycznie. Więcej o IBAN w Wikipedii.
2.9.3. Polecenia przelewu/wpłaty
Dane do druków polecenia przelewu brane są z danych firmy do której przypisany jest dany klient. Tytuł płatności można ustawić przy użyciu opcji 'pay_title' w sekcji finances. Dotyczy to zarówno wydruków poleceń przelewu dostępnych w Finanse → Wydruki jak i wydruków faktur typu FT-0100.
2.9.4. Dokumenty kasowe (KP/KW)
Dokumenty kasowe, ze względu na swoją specyfikę, posiadają podobne opcje konfiguracyjne jak faktury.
2.9.4.1. HTML
Przy domyślnych ustawieniach dokumenty kasowe wyświetlane są w formacie html wg domyślnego szablonu. Dla dowodów wpłaty oraz wypłaty przewidziano wspólny szablon wydruku. Więcej informacji w opisie opcji sekcji receipts.
2.9.4.2. PDF
Możliwe jest także tworzenie dokumentów kasowych jako plików pdf. Przypisanie opcji type z sekcji receipts wartości 'pdf' spowoduje, że dowody zamiast w html'u będą tworzone jako pliki „portable data format”. Opcja template_file spełnia podobną rolę jak dla wydruków html'owych z tym, że posiada predefiniowaną wartość: 'standard' - wydruk podstawowy (odpowiednik receipt.html). W opcji template_file można także wstawić nazwę pliku php, jednak ta możliwość jest przeznaczona dla zaawansowanych użytkowników, gdyż wymaga utworzenia pliku php, a nie tak jak w przypadku html'a szablonu Smarty.
2.9.5. Noty obciążeniowe
2.9.5.1. HTML
Przy domyślnych ustawieniach noty wyświetlane są w formacie html wg domyślnego szablonu. W sekcji notes znajduje się opis wszystkich opcji konfiguracyjnych.
2.9.6. Dokumenty pozostałe
Oprócz dokumentów finansowych w LMSie można przechowywać dokumenty takie jak umowy, protokoły, aneksy i inne. Każemu klientowi można przypisać dowolną liczbę dokumentów na zakładce 'Dokumenty klienta' w panelu 'Informacje o kliencie' lub poprzez menu 'Dokumenty'. Pliki z dokumentami przechowywane są poza bazą danych (o czym należy pamiętać robiąc backupy) w katalogu określonym zmienną 'doc_dir' w sekcji directories pliku konfiguracyjnego.
Dokumenty mogą być importowane do systemu jako gotowe pliki, ale także tworzone według szablonów przy użyciu zdefiniowanych kreatorów. Tutaj system daje duże możliwości konfiguracji. W katalogu documents/templates/default znajduje się domyślny kreator dokumentu (szablon i silnik). Użytkownik może utworzyć dowolną liczbę własnych kreatorów dokumentów, które należy umieścić w katalogu documents/templates/.
Każdy kreator powinien zawierać plik info.php o określonej strukturze:
- info.php
<?php $engine = array( 'name' => 'default', // nazwa (katalogu) kreatora, małe litery i cyfry 'engine' => 'default', // katalog z silnikiem (engine.php) // można używać silników z innych kreatorów 'template' => 'template.html', // plik szablonu (w katalogu 'name') 'title' => trans('Default document'), // opis, który będzie wyświetlany w LMS-UI 'content_type' => 'text/html', // typ pliku wynikowego 'output' => 'default.html', // nazwa pliku wynikowego 'plugin' => 'plugin', // nazwa pliku pluginu (w katalogu 'name') 'post-action' => 'post-action', // plik PHP wykonywany po dodaniu dokumentu (w transakcji) ); ?>
Plik info.php opisuje kreatora i jest jedynym wymaganym plikiem. Do utworzenia dokumentu potrzebny jest silnik (plik o nazwie engine.php). Można utworzyć własny silnik lub skorzystać z innego, ustawiając zmienną 'engine' na nazwę kreatora, którego silnik chcemy wykorzystać. Nie ma zatem wymogu tworzenia własnego silnika dla każdego nowego kreatora, wystarczy utworzyć szablon 'template' i plik info.php.
Zmienna plugin określa nazwę pliku php odpowiedzialnego za wyświetlenie dodatkowych pól w formularzu tworzenia nowego dokumentu. Plugin może ponadto zawierać obsługę błędów dla tych pól. Po dodaniu dokumentu wykonywany jest skrypt PHP określony w zmiennej post-action. Prosty przykład pluginu i post-akcji przedstawiono w przykładowym domyślnym dokumencie.