PROMOCJA 🚀 Strona już od 249 zł/mies.

· 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.

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

  1. TaskOffice – zarządzanie zadaniami, fakturami, pakowaniem i procesami biurowymi.
  2. System Zarządzania Magazynem – przyjęcia, wydania, mapa sektorów i historia ruchów.
  3. SMS API (Play for Business) – powiadomienia klientów i automatyzacja komunikacji.
  4. Uprawnienia (Spatie Laravel Permission) – kontrola ról i dostępów.
  5. 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: out w 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, z movement_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.jsx do podglądu zawartości wybranego sektora.

📡 API Backend (zgodne z frontendem)

EndpointMetodaOpis
/api/search-productsGETAutouzupełnianie nazw produktów.
/api/add-productPOSTTworzenie nowego produktu.
/stock/storePOSTZapisuje przyjęcie lub wydanie (movement_type: in/out).
/stock/movement/:idDELETEUsunię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 migrate

Dodanie 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

WarstwaTechnologia
BackendLaravel 10 (PHP 8.2), Eloquent ORM
FrontendReact 18 + JSX + Tailwind CSS
Baza danychMySQL 8
Integracje APIPlay for Business SMS, Google Sheets, Fakt API
AutoryzacjaJWT, Laravel Sanctum
UprawnieniaSpatie Laravel Permission
ScraperSymfony HTTP Client + DOM Crawler
SerwerNginx + PHP-FPM
ŚrodowiskoUbuntu 22.04 LTS
LogowanieLaravel 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

Wróć do bloga
🚀
🚀

Zacznij swój projekt

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

📞