// ==UserScript== // @name IDEAERP - Dodaj sekcję EMMA z TIM EDI // @namespace http://tampermonkey.net/ // @version 1.0 // @description Dodaje sekcję "EMMA" do menu głównego z funkcjonalnością generowania plików EDI dla TIM. Po kliknięciu otwiera się modal z polem do wprowadzenia numeru zamówienia i wysyłania danych do serwera TIM EDI. Automatyczna konwersja liter na wielkie. // @match https://emma.ideaerp.pl/web* // @icon https://emma.ideaerp.pl/web/image/res.company/1/favicon/ // @downloadURL https://n8n.emma.net.pl/webhook/edi-tim // @updateURL https://n8n.emma.net.pl/webhook/edi-tim // @grant none // ==/UserScript== /* ========================OPIS============================== WERSJA 1.0 - Integracja z TIM EDI + Automatyczne aktualizacje CEL SKRYPTU: - Dodanie sekcji "EMMA" do menu głównego IDEAERP - Integracja z systemem TIM EDI do generowania plików - Umożliwienie wysyłania numerów zamówień do serwera TIM DZIAŁANIE SKRYPTU: 1. Lokalizuje sekcję menu o ID "209" w systemie IDEAERP 2. Tworzy nową sekcję "EMMA" z elementem "Tim Edi" 3. Po kliknięciu otwiera modal z formularzem 4. Umożliwia wprowadzenie numeru zamówienia 5. Wysyła dane do serwera TIM EDI (https://192.168.0.97:5011/tim/edi) 6. Czyści formularz po udanym wysłaniu WYMAGANIA TECHNICZNE: - Dostęp do serwera TIM EDI (192.168.0.97:5011) - Sekcja menu o data-menu-section="209" w IDEAERP - Obsługa fetch API w przeglądarce - Dostęp do serwera aktualizacji (n8n.emma.net.pl/webhook/edi-tim) - Tampermonkey z obsługą automatycznych aktualizacji FUNKCJONALNOŚCI: + Dodawanie sekcji EMMA do menu głównego + Modal z formularzem do wprowadzania numeru zamówienia + Automatyczna konwersja liter na wielkie (w czasie rzeczywistym) + Zabezpieczenie przed wklejaniem małych liter + Walidacja wprowadzonych danych + Wysyłanie POST request do serwera TIM EDI + Obsługa błędów sieciowych + Czyszczenie formularza po wysłaniu + Przycisk zamknięcia modala (X) + Overlay z efektem przyciemnienia tła STRUKTURA MODALA: - Tytuł: "Generuj plik EDI" - Pole tekstowe z placeholder: "Podaj numer zamówienia" - Przycisk "Wyślij" (niebieski) - Przycisk zamknięcia (X w prawym górnym rogu) - Overlay z półprzezroczystym tłem ENDPOINT API: - URL: https://192.168.0.97:5011/tim/edi - Method: POST - Content-Type: application/json - Body: { "Zamówienie": "numer_zamówienia" } OBSŁUGA BŁĘDÓW: - Walidacja pustego pola (alert: "Dodaj zamówienia") - Obsługa błędów sieciowych (alert: "Wystąpił błąd podczas wysyłania danych") - Logowanie błędów do konsoli INTEGRACJA Z IDEAERP: - Wstrzykiwanie sekcji do istniejącego menu - Umieszczenie sekcji EMMA jako pierwszy element w kontenerze - Zachowanie stylów i struktury menu IDEAERP - Obsługa dynamicznego ładowania strony AUTOMATYCZNE AKTUALIZACJE: - Serwer aktualizacji: https://n8n.emma.net.pl/webhook/edi-tim - Tampermonkey automatycznie sprawdza dostępność nowych wersji - Jednoklikowa aktualizacja bez konieczności ręcznego pobierania - Zachowanie ustawień użytkownika podczas aktualizacji - Kompatybilność z systemem n8n do zarządzania wersjami CHANGELOG: v1.0 (2024) - AUTOMATYCZNE AKTUALIZACJE - Dodano @downloadURL i @updateURL wskazujące na n8n.emma.net.pl/webhook/edi-tim - Integracja z systemem n8n do zarządzania wersjami skryptu - Automatyczne sprawdzanie i pobieranie aktualizacji przez Tampermonkey - Dokumentacja procesu aktualizacji w sekcji OPIS - Podwyższenie numeru wersji do 1.0 (stabilna wersja) v0.9 (2024) - AUTOMATYCZNA KONWERSJA LITER - Dodano automatyczną konwersję liter na wielkie w czasie rzeczywistym - Zabezpieczenie przed wklejaniem małych liter - Zachowanie pozycji kursora podczas konwersji - Dodano CSS text-transform: uppercase dla wizualnej spójności v0.8 (2024) - PIERWSZA WERSJA - Dodanie sekcji EMMA do menu głównego - Implementacja modala z formularzem - Integracja z serwerem TIM EDI - Obsługa wysyłania numerów zamówień - Walidacja danych wejściowych - Obsługa błędów sieciowych - Czyszczenie formularza po wysłaniu - Responsywny design modala - Przycisk zamknięcia modala ============================================================ */ (function() { 'use strict'; // ——— Funkcja główna: dodawanie sekcji EMMA do menu ——— function addEmmaSection() { var targetSection = document.querySelector('div.i_secondary_menu__section[data-menu-section="209"]'); if (!targetSection) { setTimeout(addEmmaSection, 500); return; } if (document.querySelector('div.i_secondary_menu__section[data-menu-section="1248"]')) { attachPopupListener(); return; } var newSectionHtml = `
`; var tempDiv = document.createElement('div'); tempDiv.innerHTML = newSectionHtml.trim(); var newSection = tempDiv.firstElementChild; // Wstawiamy sekcję jako pierwszy element w kontenerze var parent = targetSection.parentNode; parent.insertBefore(newSection, parent.firstChild); console.log("Dodano sekcję EMMA z TIM EDI do menu jako pierwszy element."); attachPopupListener(); } // ——— Obsługa kliknięć: podpięcie event listenera do linku TIM EDI ——— function attachPopupListener() { var timEdiLink = document.getElementById('timEdiLink'); if (timEdiLink) { timEdiLink.addEventListener('click', function(e) { e.preventDefault(); showPopup(); }); } } // ——— Tworzenie i wyświetlanie modala z formularzem TIM EDI ——— function showPopup() { var overlay = document.getElementById('edi-popup-overlay'); if (!overlay) { overlay = document.createElement('div'); overlay.id = 'edi-popup-overlay'; Object.assign(overlay.style, { position: 'fixed', top: '0', left: '0', right: '0', bottom: '0', background: 'rgba(0, 0, 0, 0.6)', zIndex: '10000', display: 'flex', alignItems: 'center', justifyContent: 'center' }); var modal = document.createElement('div'); modal.id = 'edi-popup'; Object.assign(modal.style, { background: '#fff', borderRadius: '8px', padding: '20px', width: '320px', boxSizing: 'border-box', boxShadow: '0 2px 10px rgba(0,0,0,0.2)', position: 'relative', fontFamily: 'Arial, sans-serif' }); // ——— Przycisk zamknięcia modala (X w prawym górnym rogu) ——— var closeButton = document.createElement('button'); closeButton.id = 'edi-close'; closeButton.textContent = '×'; Object.assign(closeButton.style, { position: 'absolute', top: '1px', right: '5px', background: 'transparent', border: 'none', fontSize: '22px', cursor: 'pointer', color: '#888' }); closeButton.addEventListener('click', function() { overlay.style.display = 'none'; }); modal.appendChild(closeButton); // ——— Tytuł modala ——— var title = document.createElement('h4'); title.textContent = 'Generuj plik EDI'; Object.assign(title.style, { margin: '20px 0 15px 0', fontSize: '16px', color: '#888' }); modal.appendChild(title); // ——— Pole tekstowe do wprowadzania numeru zamówienia ——— var input = document.createElement('input'); input.type = 'text'; input.id = 'order-number'; input.placeholder = 'Podaj numer zamówienia'; Object.assign(input.style, { width: '100%', padding: '8px', marginBottom: '15px', border: '1px solid #ccc', borderRadius: '4px', fontSize: '14px', textTransform: 'uppercase' // Automatyczna konwersja na wielkie litery }); // ——— Zabezpieczenie: automatyczna konwersja na wielkie litery ——— input.addEventListener('input', function(e) { var cursorPosition = e.target.selectionStart; var originalValue = e.target.value; var upperValue = originalValue.toUpperCase(); // Aktualizujemy wartość tylko jeśli nastąpiła zmiana if (originalValue !== upperValue) { e.target.value = upperValue; // Przywracamy pozycję kursora e.target.setSelectionRange(cursorPosition, cursorPosition); } }); // ——— Dodatkowe zabezpieczenie dla wklejania tekstu ——— input.addEventListener('paste', function(e) { setTimeout(function() { var cursorPosition = input.selectionStart; var originalValue = input.value; var upperValue = originalValue.toUpperCase(); if (originalValue !== upperValue) { input.value = upperValue; input.setSelectionRange(cursorPosition, cursorPosition); } }, 0); }); modal.appendChild(input); // ——— Przycisk wysyłania danych do serwera TIM EDI ——— var button = document.createElement('button'); button.id = 'edi-submit'; button.textContent = 'Wyślij'; Object.assign(button.style, { padding: '10px 20px', fontSize: '14px', background: '#007bff', color: '#fff', border: 'none', borderRadius: '4px', cursor: 'pointer' }); button.addEventListener('click', function() { // ——— Walidacja danych wejściowych ——— var orderNumber = input.value.trim(); if (!orderNumber) { alert("Dodaj zamówienia"); return; } // ——— Wysyłanie danych do serwera TIM EDI ——— fetch('https://192.168.0.97:5011/tim/edi', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ "Zamówienie": orderNumber }) }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { // ——— Obsługa sukcesu: czyszczenie formularza i zamknięcie modala ——— console.log('Sukces:', data); input.value = ""; overlay.style.display = 'none'; }) .catch((error) => { // ——— Obsługa błędów sieciowych ——— console.error('Error:', error); alert("Wystąpił błąd podczas wysyłania danych."); }); }); modal.appendChild(button); overlay.appendChild(modal); document.body.appendChild(overlay); } else { overlay.style.display = 'flex'; } } // ——— Inicjalizacja: uruchomienie po załadowaniu strony ——— window.addEventListener('load', addEmmaSection); })();