м. Вільнянськ вул. Соборна 39


м. Вільнянськ вул. Соборна 39


+380508534393

+380677184142

from pathlib import Path html = r''' Планування монтажів — ВІКОНДА
Завантаження програми…
Перевіряємо підключення та обліковий запис.
''' rules = r'''rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { /* ВАЖЛИВО: Замініть manager@example.com на справжню електронну пошту менеджера. Цей email повинен збігатися з ADMIN_EMAILS у HTML-файлі. */ function signedIn() { return request.auth != null; } function isAdmin() { return signedIn() && request.auth.token.email != null && request.auth.token.email.lower() == "manager@example.com"; } function ownUserDoc(userId) { return signedIn() && request.auth.uid == userId; } function currentProfile() { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data; } function isActiveCrew() { return signedIn() && currentProfile().role == "crew" && currentProfile().active == true; } match /users/{userId} { allow read: if isAdmin() || ownUserDoc(userId); allow create: if ownUserDoc(userId) && request.resource.data.email == request.auth.token.email && ( ( request.auth.token.email.lower() == "manager@example.com" && request.resource.data.role == "admin" && request.resource.data.active == true ) || ( request.resource.data.role == "crew" && request.resource.data.active == false ) ); allow update: if isAdmin() || ( ownUserDoc(userId) && request.resource.data.diff(resource.data).affectedKeys() .hasOnly(["crewName", "phone", "updatedAt"]) ); allow delete: if isAdmin(); } match /jobs/{jobId} { allow read: if isAdmin() || ( isActiveCrew() && resource.data.crewId == request.auth.uid ); allow create, delete: if isAdmin(); allow update: if isAdmin() || ( isActiveCrew() && resource.data.crewId == request.auth.uid && request.resource.data.crewId == request.auth.uid && request.resource.data.diff(resource.data).affectedKeys() .hasOnly(["status", "crewReport", "updatedAt"]) ); } } } ''' guide = r'''НАЛАШТУВАННЯ ОНЛАЙН-ПРОГРАМИ ПЛАНУВАННЯ МОНТАЖІВ 1. Відкрийте https://console.firebase.google.com та створіть новий проєкт. 2. Додайте Web App: Project settings → General → Your apps → Web. 3. Скопіюйте конфігурацію Firebase та вставте її у HTML-файлі в блок: const FIREBASE_CONFIG = { ... }; 4. У HTML-файлі змініть: const ADMIN_EMAILS = ["manager@example.com"]; на справжню електронну пошту менеджера. 5. Firebase Authentication: Build → Authentication → Sign-in method → Email/Password → Enable. 6. Cloud Firestore: Build → Firestore Database → Create database. 7. Відкрийте вкладку Rules у Firestore. Скопіюйте туди вміст файлу firestore.rules. У правилах також замініть manager@example.com на email менеджера. Натисніть Publish. 8. Опублікуйте HTML-файл через Firebase Hosting або інший HTTPS-хостинг. Для роботи на телефоні та комп’ютері файл повинен відкриватися через одну інтернет-адресу, наприклад: https://your-project.web.app 9. Менеджер: - реєструється через email, указаний у ADMIN_EMAILS; - входить до програми; - бачить усі монтажі; - у розділі «Користувачі» активує нові бригади. 10. Монтажна бригада: - відкриває ту саму адресу програми; - натискає «Реєстрація бригади»; - вводить назву, телефон, email і пароль; - після активації менеджером бачить тільки свої монтажі; - може змінювати статус і залишати звіт. ВАЖЛИВО: Email менеджера у HTML-файлі та у firestore.rules повинен бути однаковим. ''' out_html = Path("/mnt/data/programa_planuvannya_montazhiv_online.html") out_txt = Path("/mnt/data/programa_planuvannya_montazhiv_online_kod.txt") out_rules = Path("/mnt/data/firestore.rules") out_guide = Path("/mnt/data/instruktsiya_firebase_planuvannya_montazhiv.txt") out_html.write_text(html, encoding="utf-8") out_txt.write_text(html, encoding="utf-8") out_rules.write_text(rules, encoding="utf-8") out_guide.write_text(guide, encoding="utf-8") print(f"HTML: {out_html} ({out_html.stat().st_size:,} bytes)") print(f"Код TXT: {out_txt} ({out_txt.stat().st_size:,} bytes)") print(f"Rules: {out_rules} ({out_rules.stat().st_size:,} bytes)") print(f"Guide: {out_guide} ({out_guide.stat().st_size:,} bytes)")