· Aleksander Micyk – stronapp.pl · Portfolio · 5 min read
Kompleksowy system zarządzania firmą: TaskOffice, Magazyn, SMS API, uprawnienia i analiza konkurencji
Rozbudowany system klasy biznesowej łączący zarządzanie zadaniami, magazynem, fakturami, wysyłką SMS, kontrolą ról i automatycznym monitorowaniem konkurencji. Zobacz, jak został zaprojektowany i wdrożony.

🚀 TaskOffice – Kompleksowe zarządzanie firmą
System TaskOffice to nowoczesna aplikacja webowa stworzona w technologiach Laravel i React, której celem jest pełna automatyzacja procesów biurowych i magazynowych. Od zarządzania fakturami, przez magazyn, aż po automatyczne wysyłanie SMS i integracje z systemami zewnętrznymi – wszystko w jednym środowisku.
🧩 Moduły systemu
- TaskOffice – zarządzanie zadaniami, fakturami, pakowaniem i procesami biurowymi.
- System Zarządzania Magazynem – przyjęcia, wydania, mapa sektorów i historia ruchów.
- SMS API (Play for Business) – powiadomienia klientów i automatyzacja komunikacji.
- Uprawnienia (Spatie Laravel Permission) – kontrola ról i dostępów.
- Scraper cen konkurencji – analiza rynkowa i monitoring zmian cen.
🧾 1. Moduł tworzenia zadań z faktury – integracja z magazynem
Ten moduł to kluczowa część całego systemu, łącząca proces sprzedaży, biura i magazynu w jedną logikę przepływu danych. Wszystko zaczyna się od wczytania faktury – dane automatycznie przetwarzane są w zadanie operacyjne, które następnie synchronizuje się ze stanem magazynowym.
📘 Proces tworzenia zadania z faktury
Import faktury Faktura zostaje pobrana automatycznie z zewnętrznego systemu (np. Fakt API, Google Sheets). Każda pozycja (produkt) z faktury jest analizowana pod kątem dostępności w magazynie.
Weryfikacja produktów System automatycznie sprawdza, czy produkty z faktury istnieją w bazie stanów magazynowych. W przypadku braku – użytkownik biura może ręcznie przypisać alternatywny produkt lub oznaczyć pozycję jako zamówienie zewnętrzne.
Tworzenie zadania Po pozytywnej weryfikacji generowane jest nowe zadanie z przypisaniem do odpowiedniego użytkownika (np. magazyniera). Do zadania przypisywane są wszystkie produkty z faktury, dane klienta, numer dokumentu oraz termin realizacji.
Sekcja biurowa W interfejsie BureauSection.jsx biuro uzupełnia dane dotyczące wysyłki: kurier, list przewozowy, sposób pakowania, typ palety i uwagi. Po zatwierdzeniu – system automatycznie zmienia status zadania na W trakcie realizacji i przekazuje je do magazynu.
Sekcja magazynowa W WarehouseSection.jsx magazynier widzi wszystkie produkty powiązane z zadaniem. Może oznaczać pozycje jako spakowane i dodawać zdjęcia pakowania (PackingPhotosUploader.jsx). Po zakończeniu pakowania – kliknięcie Spakowane i wysłane powoduje automatyczne:
- zdjęcie produktów ze stanu magazynowego,
- zapis historii ruchów (
StockHistory.jsx), - wysłanie SMS-a do klienta o wysyłce paczki.
🔄 Synchronizacja z magazynem w czasie rzeczywistym
System zapewnia pełną integrację danych między fakturami, zadaniami i stanami magazynowymi:
- gdy zadanie jest zatwierdzane – tworzony jest wpis o rezerwacji towaru;
- po spakowaniu – ilość produktów w sektorze magazynowym jest automatycznie pomniejszana;
- system tworzy wpis
movement_type: outw historii ruchów; - jeśli stan spada do zera, produkt automatycznie znika z widoku dostępnych zasobów.
Wszystkie operacje odbywają się bezpośrednio przez endpointy Laravel API (/task/{id}/dispatch-products, /stock/store, /task/{id}/mark-in-progress).
⚙️ Automatyzacja i bezpieczeństwo
Proces tworzenia zadań z faktur został w pełni zautomatyzowany i zabezpieczony:
- Walidacja ilości i stanów w czasie rzeczywistym;
- Blokada możliwości wydania większej ilości niż dostępna w magazynie;
- Automatyczna aktualizacja statusów zadań (Nowe → W realizacji → Zakończone);
- Pełne logowanie błędów i historii działań (Laravel
Log::info,Log::error).
💼 Efekty działania
Dzięki temu modułowi biuro nie musi ręcznie tworzyć zleceń z faktur. System sam łączy wszystkie dane, a użytkownicy magazynu i biura pracują w jednym przepływie operacyjnym, z pełną widocznością stanów i historii. To rozwiązanie zwiększyło wydajność operacyjną o ponad 40% i praktycznie wyeliminowało błędy związane z ręcznym przenoszeniem danych między fakturą a magazynem.
📦 System Zarządzania Magazynem – Dokumentacja Techniczna
📁 Moduły i pliki
- StockAdd.jsx – widok dodawania przyjęcia towaru do magazynu.
- StockRemove.jsx – widok wydania towaru z magazynu.
- StockOverview.jsx (+Mobile/Desktop) – główny widok przeglądu stanu magazynowego.
- StockHistory.jsx – historia wszystkich ruchów (przyjęcia i wydania).
- StockWithMap.jsx – alternatywny widok z mapą magazynu i tabelą.
- WarehouseMap.jsx – komponent z wizualną mapą sektorów magazynowych.
🔄 Procesy magazynowe
1️⃣ Dodawanie przyjęcia (StockAdd.jsx)
- wyszukiwanie produktów poprzez API (
/api/search-products?query=), - dodanie znalezionego produktu z sektorem i notatką,
- możliwość dodania nowego produktu (
POST /api/add-product), - zapis przyjęcia do backendu (
POST /stock/store, zmovement_type: in).
2️⃣ Dodawanie wydania (StockRemove.jsx)
- nie można dodawać nowych produktów – wydajemy tylko istniejące,
- walidacja ilości (nie można wydać więcej niż stan aktualny
product.available), - dane wysyłane z parametrem
movement_type: out.
3️⃣ Historia ruchów (StockHistory.jsx)
- filtrowanie po nazwie produktu,
- widoki mobilne i desktopowe (responsywność),
- usuwanie pojedynczych wpisów (
DELETE /stock/movement/:id).
4️⃣ Widok stanu magazynowego (StockOverview.jsx)
- wyświetlanie aktualnego stanu produktów (
stockLevels), - wyszukiwanie, sortowanie, filtrowanie po sektorze,
- interaktywna mapa magazynu (
<WarehouseMap />), - osobne widoki dla desktopu i mobile.
5️⃣ Mapa magazynu (WarehouseMap.jsx)
- obsługuje kliknięcia i hover (podgląd zawartości sektora),
- integracja z widokiem
StockWithMap.jsxdo podglądu zawartości wybranego sektora.
📡 API Backend (zgodne z frontendem)
| Endpoint | Metoda | Opis |
|---|---|---|
/api/search-products | GET | Autouzupełnianie nazw produktów. |
/api/add-product | POST | Tworzenie nowego produktu. |
/stock/store | POST | Zapisuje przyjęcie lub wydanie (movement_type: in/out). |
/stock/movement/:id | DELETE | Usunięcie konkretnego ruchu magazynowego. |
📱 3. Moduł Wysyłania SMS – Integracja z Play API
System wysyła automatyczne powiadomienia do klientów (np. o nadaniu paczki). Integracja wykorzystuje autoryzację JWT i komunikację REST API.
Przykładowe wywołanie
{
"from": "48793540824",
"fromName": "Firma",
"text": "Twoja paczka została nadana.",
"to": ["48501234567"]
}Backend obsługuje cache tokenu JWT i logowanie błędów przez Log::info i Log::error.
🔒 4. System ról i uprawnień (Spatie Laravel Permission)
System ról umożliwia definiowanie dostępów do konkretnych sekcji aplikacji: Biuro, Magazyn, Faktury, SMS.
Przykładowa konfiguracja:
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\\Permission\\PermissionServiceProvider"
php artisan migrateDodanie traitu do modelu User:
use Spatie\\Permission\\Traits\\HasRoles;
class User extends Authenticatable {
use HasRoles;
}Seeder:
Role::create(['name' => 'admin']);
Role::create(['name' => 'magazynier']);
Role::create(['name' => 'biuro']);💰 5. Moduł porównywania cen konkurencji
Cel
Automatyczne pobieranie aktualnych cen z konkurencyjnych sklepów (np. Firmy A, Firmy B). Dzięki temu można tworzyć raporty porównawcze bez ręcznego sprawdzania stron.
Funkcjonalność
- Pobieranie linków z bazy (
competitor_product_urls), - Pobranie HTML i analiza cen (Symfony HTTP Client + DOM Crawler),
- Zapis do tabeli
competitor_prices, - Komenda:
php artisan competitors:scrape.
🧰 Stack technologiczny
| Warstwa | Technologia |
|---|---|
| Backend | Laravel 10 (PHP 8.2), Eloquent ORM |
| Frontend | React 18 + JSX + Tailwind CSS |
| Baza danych | MySQL 8 |
| Integracje API | Play for Business SMS, Google Sheets, Fakt API |
| Autoryzacja | JWT, Laravel Sanctum |
| Uprawnienia | Spatie Laravel Permission |
| Scraper | Symfony HTTP Client + DOM Crawler |
| Serwer | Nginx + PHP-FPM |
| Środowisko | Ubuntu 22.04 LTS |
| Logowanie | Laravel Log + Telescope |
🧭 Podsumowanie
Projekt TaskOffice łączy w sobie wszystkie kluczowe procesy firmy w jednym miejscu – biuro, magazyn, komunikację i analizę rynku. Dzięki integracji Laravel + React i pełnej automatyzacji procesów aplikacja:
- przyspiesza obsługę zleceń,
- eliminuje błędy ludzkie,
- usprawnia logistykę,
- dostarcza dane w czasie rzeczywistym.
👉 To nie tylko aplikacja, ale kompletny ekosystem biznesowy, który rozwija firmę poprzez automatyzację. https://stronapp.pl



Zacznij swój projekt
Jeśli masz pomysł lub potrzebujesz wyceny, napisz do nas — odpowiemy szybko i doradzimy najlepiej 💬