Narzędzia użytkownika

Narzędzia witryny


instalacja_i_konfiguracja

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 

UWAGA: Repozytorium nie posiada biblioteki Smarty. Należy ją dodatkowo zainstalować.

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)

Ponieważ MySQL jest domyślną bazą dla LMS'u, konfiguracja ogranicza się do podania w sekcji [database] pliku /etc/lms/lms.ini hasła i użytkownika:

type     = mysql
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.

instalacja_i_konfiguracja.txt · ostatnio zmienione: 2012/12/04 00:00 (edycja zewnętrzna)