From 6aa41381ac0ae23d6dec1df6c29df1cbe213d2d6 Mon Sep 17 00:00:00 2001 From: Deploy Bot Date: Sat, 20 Jun 2026 01:32:54 +0100 Subject: [PATCH] chore: remove APAW from tracking; gitignore agent-generated files --- .editorconfig | 15 + .gitattributes | 5 + .htaccess | 5 + .styleci.yml | 13 + CHANGES_v4.1.0.md | 199 - CHANGES_v4.1.2.md | 116 - CHANGES_v4.1.3.md | 228 - CHANGES_v4.1.4.md | 152 - CHANGES_v4.1.5.md | 200 - CHANGES_v4.1.6.md | 149 - CHANGES_v4.1.8.md | 231 - CHANGES_v4.1.9.md | 192 - CLICK_LOGIC_REVIEW.md | 306 - COMPLETE_PROJECT_HISTORY.md | 1287 --- DB_FIX_v4.1.7.md | 228 - DB_RESTORE_REPORT.md | 193 - DEPLOYMENT_INSTRUCTIONS.md | 102 - DEPLOYMENT_REPORT_v4.1.1.md | 246 - DOCKER_GUIDE.md | 629 -- DOCKER_QUICKSTART.md | 184 - DOCUMENTATION_INDEX.md | 270 - FILES_TO_COPY.txt | 147 - FINAL_REPORT_v4.1.7.md | 359 - FIXED_v4.0.1.md | 220 - FIXED_v4.0.5.md | 171 - FIXED_v4.0.6.md | 268 - FIX_REPORT_v3.20.7.md | 203 - FULL_DEVELOPMENT_HISTORY.md | 705 -- HOTFIX_v4.1.1.md | 160 - HOTFIX_v4.1.26.md | 103 - PROJECT_STRUCTURE.md | 408 - RESTORE_REPORT.md | 303 - VERSION_SUMMARY.md | 84 - app/Console/Commands/Template.php | 44 + app/Console/Kernel.php | 38 + app/Enums/User/PermissionEnum.php | 10 + app/Enums/User/RoleEnum.php | 10 + app/Exceptions/Handler.php | 91 + app/Form.php | 69 + app/FormData.php | 56 + app/FormDataComment.php | 31 + .../Auth/ConfirmPasswordController.php | 40 + .../Auth/ForgotPasswordController.php | 22 + app/Http/Controllers/Auth/LoginController.php | 74 + .../Controllers/Auth/RegisterController.php | 95 + .../Auth/ResetPasswordController.php | 30 + .../Auth/VerificationController.php | 42 + app/Http/Controllers/Controller.php | 307 + app/Http/Controllers/FormController.php | 731 ++ .../Controllers/FormDataCommentController.php | 116 + app/Http/Controllers/FormDataController.php | 948 ++ app/Http/Controllers/FormPhpGenerator.php | 200 + app/Http/Controllers/HomeController.php | 329 + app/Http/Controllers/IController.php | 267 + .../Controllers/ManageProfileController.php | 72 + .../Controllers/ManageSettingsController.php | 78 + .../Controllers/RegistrationController.php | 48 + .../Controllers/SubscriptionsController.php | 120 + .../Superadmin/ManageUsersController.php | 424 + .../Superadmin/PackageController.php | 173 + .../PackageSubscriptionsController.php | 137 + .../SubscriptionPaymentController.php | 331 + .../SuperadminSettingsController.php | 222 + app/Http/Controllers/UploadController.php | 71 + .../PHPMailer/COMMITMENT | 46 + .../form_bundle_libraries/PHPMailer/LICENSE | 502 + .../form_bundle_libraries/PHPMailer/README.md | 220 + .../PHPMailer/SECURITY.md | 28 + .../form_bundle_libraries/PHPMailer/VERSION | 1 + .../PHPMailer/composer.json | 55 + .../PHPMailer/get_oauth_token.php | 146 + .../PHPMailer/language/phpmailer.lang-am.php | 25 + .../PHPMailer/language/phpmailer.lang-ar.php | 26 + .../PHPMailer/language/phpmailer.lang-az.php | 25 + .../PHPMailer/language/phpmailer.lang-ba.php | 25 + .../PHPMailer/language/phpmailer.lang-be.php | 25 + .../PHPMailer/language/phpmailer.lang-bg.php | 25 + .../PHPMailer/language/phpmailer.lang-ca.php | 25 + .../PHPMailer/language/phpmailer.lang-ch.php | 25 + .../PHPMailer/language/phpmailer.lang-cs.php | 23 + .../PHPMailer/language/phpmailer.lang-da.php | 25 + .../PHPMailer/language/phpmailer.lang-de.php | 23 + .../PHPMailer/language/phpmailer.lang-el.php | 23 + .../PHPMailer/language/phpmailer.lang-eo.php | 23 + .../PHPMailer/language/phpmailer.lang-es.php | 25 + .../PHPMailer/language/phpmailer.lang-et.php | 26 + .../PHPMailer/language/phpmailer.lang-fa.php | 26 + .../PHPMailer/language/phpmailer.lang-fi.php | 26 + .../PHPMailer/language/phpmailer.lang-fo.php | 25 + .../PHPMailer/language/phpmailer.lang-fr.php | 25 + .../PHPMailer/language/phpmailer.lang-gl.php | 25 + .../PHPMailer/language/phpmailer.lang-he.php | 25 + .../PHPMailer/language/phpmailer.lang-hi.php | 25 + .../PHPMailer/language/phpmailer.lang-hr.php | 25 + .../PHPMailer/language/phpmailer.lang-hu.php | 25 + .../PHPMailer/language/phpmailer.lang-id.php | 26 + .../PHPMailer/language/phpmailer.lang-it.php | 26 + .../PHPMailer/language/phpmailer.lang-ja.php | 26 + .../PHPMailer/language/phpmailer.lang-ka.php | 25 + .../PHPMailer/language/phpmailer.lang-ko.php | 25 + .../PHPMailer/language/phpmailer.lang-lt.php | 25 + .../PHPMailer/language/phpmailer.lang-lv.php | 25 + .../PHPMailer/language/phpmailer.lang-mg.php | 25 + .../PHPMailer/language/phpmailer.lang-ms.php | 25 + .../PHPMailer/language/phpmailer.lang-nb.php | 23 + .../PHPMailer/language/phpmailer.lang-nl.php | 25 + .../PHPMailer/language/phpmailer.lang-pl.php | 24 + .../PHPMailer/language/phpmailer.lang-pt.php | 25 + .../language/phpmailer.lang-pt_br.php | 28 + .../PHPMailer/language/phpmailer.lang-ro.php | 25 + .../PHPMailer/language/phpmailer.lang-ru.php | 26 + .../PHPMailer/language/phpmailer.lang-sk.php | 26 + .../PHPMailer/language/phpmailer.lang-sl.php | 26 + .../PHPMailer/language/phpmailer.lang-sr.php | 26 + .../PHPMailer/language/phpmailer.lang-sv.php | 25 + .../PHPMailer/language/phpmailer.lang-tl.php | 25 + .../PHPMailer/language/phpmailer.lang-tr.php | 29 + .../PHPMailer/language/phpmailer.lang-uk.php | 26 + .../PHPMailer/language/phpmailer.lang-vi.php | 25 + .../PHPMailer/language/phpmailer.lang-zh.php | 27 + .../language/phpmailer.lang-zh_cn.php | 27 + .../PHPMailer/src/Exception.php | 39 + .../PHPMailer/src/OAuth.php | 138 + .../PHPMailer/src/PHPMailer.php | 4575 ++++++++ .../PHPMailer/src/POP3.php | 412 + .../PHPMailer/src/SMTP.php | 1333 +++ .../form_bundle_libraries/delete_file.php | 18 + .../form_bundle_libraries/library.php | 164 + .../form_bundle_libraries/upload.php | 33 + app/Http/Kernel.php | 68 + app/Http/Middleware/Authenticate.php | 21 + app/Http/Middleware/Callbacks.php | 63 + app/Http/Middleware/EncryptCookies.php | 17 + app/Http/Middleware/IsInstalled.php | 25 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + .../Middleware/SetDefaultConfigForUser.php | 31 + app/Http/Middleware/TrimStrings.php | 19 + app/Http/Middleware/TrustHosts.php | 20 + app/Http/Middleware/TrustProxies.php | 28 + app/Http/Middleware/ValidateSignature.php | 22 + app/Http/Middleware/VerifyCsrfToken.php | 22 + app/Http/helpers.php | 65 + app/Mail/ExceptionOccured.php | 35 + app/Mail/FormSubmitted.php | 101 + app/Mail/TestEmail.php | 34 + .../NotificationToUserForAccountUpgrade.php | 68 + ...alNotificationToAdminForOfflinePayment.php | 68 + app/Notifications/UserNotification.php | 65 + app/Package.php | 37 + app/PackageSubscription.php | 137 + app/Providers/AppServiceProvider.php | 61 + app/Providers/AuthServiceProvider.php | 37 + app/Providers/BroadcastServiceProvider.php | 21 + app/Providers/EventServiceProvider.php | 42 + app/Providers/RouteServiceProvider.php | 52 + app/System.php | 74 + app/Traits/UsesUuid.php | 27 + app/User.php | 62 + app/UserForm.php | 40 + app/UserSetting.php | 32 + app/Visitor.php | 15 + artisan | 53 + backup.sh | 80 - bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + cgi-bin/php.fastcgi | 8 + composer.json | 77 + composer.lock | 9165 +++++++++++++++++ config/app.php | 227 + config/auth.php | 111 + config/author.php | 11 + config/barcode.php | 5 + config/broadcasting.php | 70 + config/cache.php | 110 + config/constants.php | 35 + config/cors.php | 34 + config/database.php | 147 + config/datatables.php | 116 + config/debugbar.php | 215 + config/filesystems.php | 77 + config/hashing.php | 52 + config/image.php | 20 + config/logging.php | 122 + config/mail.php | 118 + config/newsletter.php | 44 + config/paypal.php | 30 + config/pdf.php | 28 + config/permission.php | 161 + config/queue.php | 93 + config/services.php | 34 + config/session.php | 201 + config/view.php | 37 + config/webhook-server.php | 61 + database/.gitignore | 2 + database/factories/UserFactory.php | 40 + .../2014_10_12_000000_create_users_table.php | 37 + ...12_100000_create_password_resets_table.php | 32 + .../2019_05_22_110831_create_forms_table.php | 36 + ...19_05_28_115307_create_form_data_table.php | 39 + ...2019_06_25_074951_create_systems_table.php | 32 + ..._074700_add_is_template_to_forms_table.php | 30 + ...111057_add_mailchimp_field_forms_table.php | 32 + ...019_09_13_082524_create_packages_table.php | 41 + ...16_052622_add_is_active_to_users_table.php | 30 + ...9_16_182039_create_user_settings_table.php | 40 + ...206_create_package_subscriptions_table.php | 49 + ...20_110545_add_form_slug_to_forms_table.php | 35 + ..._add_submission_ref_to_form_data_table.php | 40 + ...095648_create_form_data_comments_table.php | 34 + ...3_111735_add_new_column_to_users_table.php | 30 + ...0_07_23_114633_create_user_forms_table.php | 35 + ...020_07_25_094400_create_visitors_table.php | 34 + ..._add_is_global_template_to_forms_table.php | 32 + ...13_add_acelle_mail_info_to_forms_table.php | 33 + ...12_124356_modify_column_in_forms_table.php | 27 + ...add_webhook_info_column_to_forms_table.php | 33 + ..._09_03_165410_create_permission_tables.php | 141 + database/seeders/DatabaseSeeder.php | 24 + database/seeders/PermissionSeeder.php | 20 + database/seeders/RoleSeeder.php | 20 + database/seeders/SystemsTableSeeder.php | 23 + database/seeders/TemplateSeeder.php | 48 + database/seeders/UsersTableSeeder.php | 27 + dist/_routes.json | 1 - dist/_worker.js | 1354 --- dist/favicon.ico | 0 dist/original.html | 1231 --- dist/static/all.min.css | 9 - dist/static/app.js | 2279 ---- dist/static/style.css | 1 - dist/test-click.html | 46 - dist/test-datepicker.html | 112 - dist/test.html | 13 - lang/en/auth.php | 20 + lang/en/messages.php | 680 ++ lang/en/pagination.php | 19 + lang/en/passwords.php | 22 + lang/en/validation.php | 179 + lang/est/auth.php | 20 + lang/est/messages.php | 676 ++ lang/est/pagination.php | 18 + lang/est/passwords.php | 22 + lang/est/validation.php | 179 + lang/ru/auth.php | 20 + lang/ru/messages.php | 679 ++ lang/ru/pagination.php | 19 + lang/ru/passwords.php | 22 + lang/ru/validation.php | 179 + phpunit.xml | 33 + public/.htaccess | 24 + public/img/fill_form.png | Bin 0 -> 18632 bytes public/img/pdf_placeholder.png | Bin 0 -> 8869 bytes public/img/placeholder.png | Bin 0 -> 4381 bytes public/index.php | 55 + public/install/index.php | 233 + .../plugins/countdowntimer/countdowntimer.css | 116 + .../plugins/countdowntimer/countdowntimer.js | 728 ++ .../countdowntimer/countdowntimer.min.js | 9 + public/robots.txt | 2 + readme.md | 72 + resources/js/app.js | 85 + resources/js/bootstrap.js | 61 + resources/js/components/AcelleMail.vue | 208 + resources/js/components/AdditionalJsCss.vue | 34 + .../js/components/AskUserChoiceAfterSave.vue | 52 + resources/js/components/ConditionalField.vue | 248 + resources/js/components/CreateForm.vue | 617 ++ resources/js/components/ElementDetails.vue | 212 + resources/js/components/EmailTab.vue | 594 ++ resources/js/components/FieldConfigurator.vue | 1052 ++ resources/js/components/FieldGenerator.vue | 806 ++ resources/js/components/FormTab.vue | 774 ++ resources/js/components/Mailchimp.vue | 104 + resources/js/components/SettingsTab.vue | 925 ++ resources/js/components/Shared/Layout.vue | 86 + .../js/components/Shared/PdfUploader.vue | 159 + .../js/components/Shared/PopoverHelpText.vue | 29 + resources/js/components/ShowForm.vue | 520 + resources/js/components/TestSmtpDetails.vue | 63 + resources/js/components/TooltipComponent.vue | 10 + resources/js/components/Webhook/Webhook.vue | 94 + resources/js/functions.vue | 514 + resources/js/iframeResizer.js | 2 + resources/js/iframeResizercontentWindow.js | 1 + resources/js/widget.js | 1 + .../plugins/countdowntimer/countdowntimer.css | 116 + .../plugins/countdowntimer/countdowntimer.js | 728 ++ .../countdowntimer/countdowntimer.min.js | 9 + resources/sass/_variables.scss | 19 + resources/sass/app.scss | 151 + resources/views/auth/login.blade.php | 111 + .../views/auth/passwords/email.blade.php | 63 + .../views/auth/passwords/reset.blade.php | 84 + resources/views/auth/register.blade.php | 201 + resources/views/auth/verify.blade.php | 32 + resources/views/emails/exception.blade.php | 1 + .../views/emails/form_submitted.blade.php | 1 + resources/views/form/collaborate.blade.php | 125 + resources/views/form/copy_form.blade.php | 93 + resources/views/form/create.blade.php | 112 + resources/views/form/download.blade.php | 168 + resources/views/form/edit.blade.php | 12 + .../views/form/generate_widget.blade.php | 39 + .../custom_attribute_generator.blade.php | 3 + .../form/partials/fields_generator.blade.php | 499 + .../views/form/partials/form_card.blade.php | 29 + resources/views/form/show.blade.php | 40 + .../views/form/validate_password.blade.php | 78 + resources/views/form_data/file_view.blade.php | 26 + .../form_data/partials/comment.blade.php | 22 + .../partials/form_data_pdf.blade.php | 75 + .../partials/submission_msg.blade.php | 69 + resources/views/form_data/report.blade.php | 204 + resources/views/form_data/show.blade.php | 298 + .../views/form_data/view_form_data.blade.php | 113 + resources/views/home.blade.php | 432 + resources/views/ic/details.blade.php | 146 + resources/views/ic/envText.blade.php | 59 + resources/views/ic/index.blade.php | 50 + .../views/ic/partials/e_license.blade.php | 15 + resources/views/ic/partials/nav.blade.php | 13 + resources/views/ic/success.blade.php | 24 + .../views/ic/update_confirmation.blade.php | 92 + resources/views/layouts/app.blade.php | 74 + .../views/layouts/partials/css.blade.php | 214 + .../views/layouts/partials/footer.blade.php | 12 + .../layouts/partials/javascript.blade.php | 474 + .../views/layouts/partials/status.blade.php | 17 + .../views/layouts/partials/top-nav.blade.php | 143 + resources/views/payments/create.blade.php | 110 + .../payments/partials/pay_offline.blade.php | 14 + .../payments/partials/pay_paypal.blade.php | 8 + .../payments/partials/pay_stripe.blade.php | 6 + .../superadmin/packages/create.blade.php | 146 + .../views/superadmin/packages/edit.blade.php | 151 + .../views/superadmin/packages/index.blade.php | 150 + .../superadmin/settings/create.blade.php | 572 + .../superadmin/subscription/edit.blade.php | 61 + .../superadmin/subscription/index.blade.php | 203 + .../users/confirm_upgrade.blade.php | 39 + .../views/superadmin/users/create.blade.php | 173 + .../views/superadmin/users/edit.blade.php | 241 + .../views/superadmin/users/index.blade.php | 354 + .../views/superadmin/users/upgrade.blade.php | 101 + resources/views/user/profile/edit.blade.php | 95 + resources/views/user/settings/edit.blade.php | 215 + .../views/user/subscription/index.blade.php | 365 + .../views/user/subscription/show.blade.php | 113 + resources/views/welcome.blade.php | 216 + routes/api.php | 18 + routes/channels.php | 16 + routes/console.php | 19 + routes/ir.php | 22 + routes/web.php | 152 + seed.sql | 57 - test_browser.js | 35 - tests/CreatesApplication.php | 22 + tests/Feature/ExampleTest.php | 20 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 18 + webpack.mix.js | 24 + 362 files changed, 48506 insertions(+), 13261 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .htaccess create mode 100644 .styleci.yml delete mode 100644 CHANGES_v4.1.0.md delete mode 100644 CHANGES_v4.1.2.md delete mode 100644 CHANGES_v4.1.3.md delete mode 100644 CHANGES_v4.1.4.md delete mode 100644 CHANGES_v4.1.5.md delete mode 100644 CHANGES_v4.1.6.md delete mode 100644 CHANGES_v4.1.8.md delete mode 100644 CHANGES_v4.1.9.md delete mode 100644 CLICK_LOGIC_REVIEW.md delete mode 100644 COMPLETE_PROJECT_HISTORY.md delete mode 100644 DB_FIX_v4.1.7.md delete mode 100644 DB_RESTORE_REPORT.md delete mode 100644 DEPLOYMENT_INSTRUCTIONS.md delete mode 100644 DEPLOYMENT_REPORT_v4.1.1.md delete mode 100644 DOCKER_GUIDE.md delete mode 100644 DOCKER_QUICKSTART.md delete mode 100644 DOCUMENTATION_INDEX.md delete mode 100644 FILES_TO_COPY.txt delete mode 100644 FINAL_REPORT_v4.1.7.md delete mode 100644 FIXED_v4.0.1.md delete mode 100644 FIXED_v4.0.5.md delete mode 100644 FIXED_v4.0.6.md delete mode 100644 FIX_REPORT_v3.20.7.md delete mode 100644 FULL_DEVELOPMENT_HISTORY.md delete mode 100644 HOTFIX_v4.1.1.md delete mode 100644 HOTFIX_v4.1.26.md delete mode 100644 PROJECT_STRUCTURE.md delete mode 100644 RESTORE_REPORT.md delete mode 100644 VERSION_SUMMARY.md create mode 100644 app/Console/Commands/Template.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Enums/User/PermissionEnum.php create mode 100644 app/Enums/User/RoleEnum.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Form.php create mode 100644 app/FormData.php create mode 100644 app/FormDataComment.php create mode 100644 app/Http/Controllers/Auth/ConfirmPasswordController.php create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Auth/VerificationController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/FormController.php create mode 100644 app/Http/Controllers/FormDataCommentController.php create mode 100644 app/Http/Controllers/FormDataController.php create mode 100644 app/Http/Controllers/FormPhpGenerator.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/IController.php create mode 100644 app/Http/Controllers/ManageProfileController.php create mode 100644 app/Http/Controllers/ManageSettingsController.php create mode 100644 app/Http/Controllers/RegistrationController.php create mode 100644 app/Http/Controllers/SubscriptionsController.php create mode 100644 app/Http/Controllers/Superadmin/ManageUsersController.php create mode 100644 app/Http/Controllers/Superadmin/PackageController.php create mode 100644 app/Http/Controllers/Superadmin/PackageSubscriptionsController.php create mode 100644 app/Http/Controllers/Superadmin/SubscriptionPaymentController.php create mode 100644 app/Http/Controllers/Superadmin/SuperadminSettingsController.php create mode 100644 app/Http/Controllers/UploadController.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/COMMITMENT create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/LICENSE create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/README.md create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/SECURITY.md create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/VERSION create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/composer.json create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/get_oauth_token.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-am.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ar.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-az.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ba.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-be.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-bg.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ca.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ch.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-cs.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-da.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-de.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-el.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-eo.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-es.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-et.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-fa.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-fi.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-fo.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-fr.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-gl.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-he.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-hi.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-hr.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-hu.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-id.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-it.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ja.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ka.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ko.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-lt.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-lv.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-mg.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ms.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-nb.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-nl.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-pl.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-pt.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-pt_br.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ro.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-ru.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-sk.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-sl.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-sr.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-sv.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-tl.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-tr.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-uk.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-vi.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-zh.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/language/phpmailer.lang-zh_cn.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/src/Exception.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/src/OAuth.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/src/PHPMailer.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/src/POP3.php create mode 100644 app/Http/Controllers/form_bundle_libraries/PHPMailer/src/SMTP.php create mode 100644 app/Http/Controllers/form_bundle_libraries/delete_file.php create mode 100644 app/Http/Controllers/form_bundle_libraries/library.php create mode 100644 app/Http/Controllers/form_bundle_libraries/upload.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/Callbacks.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/IsInstalled.php create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/SetDefaultConfigForUser.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustHosts.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/ValidateSignature.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Http/helpers.php create mode 100644 app/Mail/ExceptionOccured.php create mode 100644 app/Mail/FormSubmitted.php create mode 100644 app/Mail/TestEmail.php create mode 100644 app/Notifications/NotificationToUserForAccountUpgrade.php create mode 100644 app/Notifications/SendApprovalNotificationToAdminForOfflinePayment.php create mode 100644 app/Notifications/UserNotification.php create mode 100644 app/Package.php create mode 100644 app/PackageSubscription.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/System.php create mode 100644 app/Traits/UsesUuid.php create mode 100644 app/User.php create mode 100644 app/UserForm.php create mode 100644 app/UserSetting.php create mode 100644 app/Visitor.php create mode 100644 artisan delete mode 100755 backup.sh create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 cgi-bin/php.fastcgi create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/author.php create mode 100644 config/barcode.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/constants.php create mode 100644 config/cors.php create mode 100644 config/database.php create mode 100644 config/datatables.php create mode 100644 config/debugbar.php create mode 100644 config/filesystems.php create mode 100644 config/hashing.php create mode 100644 config/image.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/newsletter.php create mode 100644 config/paypal.php create mode 100644 config/pdf.php create mode 100644 config/permission.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/view.php create mode 100644 config/webhook-server.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 database/migrations/2019_05_22_110831_create_forms_table.php create mode 100644 database/migrations/2019_05_28_115307_create_form_data_table.php create mode 100644 database/migrations/2019_06_25_074951_create_systems_table.php create mode 100644 database/migrations/2019_06_27_074700_add_is_template_to_forms_table.php create mode 100644 database/migrations/2019_07_29_111057_add_mailchimp_field_forms_table.php create mode 100644 database/migrations/2019_09_13_082524_create_packages_table.php create mode 100644 database/migrations/2019_09_16_052622_add_is_active_to_users_table.php create mode 100644 database/migrations/2019_09_16_182039_create_user_settings_table.php create mode 100644 database/migrations/2019_09_18_182206_create_package_subscriptions_table.php create mode 100644 database/migrations/2019_12_20_110545_add_form_slug_to_forms_table.php create mode 100644 database/migrations/2019_12_20_172319_add_submission_ref_to_form_data_table.php create mode 100644 database/migrations/2020_07_20_095648_create_form_data_comments_table.php create mode 100644 database/migrations/2020_07_23_111735_add_new_column_to_users_table.php create mode 100644 database/migrations/2020_07_23_114633_create_user_forms_table.php create mode 100644 database/migrations/2020_07_25_094400_create_visitors_table.php create mode 100644 database/migrations/2021_12_09_155618_add_is_global_template_to_forms_table.php create mode 100644 database/migrations/2022_02_26_125413_add_acelle_mail_info_to_forms_table.php create mode 100644 database/migrations/2022_03_12_124356_modify_column_in_forms_table.php create mode 100644 database/migrations/2022_07_05_115833_add_webhook_info_column_to_forms_table.php create mode 100644 database/migrations/2023_09_03_165410_create_permission_tables.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 database/seeders/PermissionSeeder.php create mode 100644 database/seeders/RoleSeeder.php create mode 100644 database/seeders/SystemsTableSeeder.php create mode 100644 database/seeders/TemplateSeeder.php create mode 100644 database/seeders/UsersTableSeeder.php delete mode 100644 dist/_routes.json delete mode 100644 dist/_worker.js delete mode 100644 dist/favicon.ico delete mode 100644 dist/original.html delete mode 100644 dist/static/all.min.css delete mode 100644 dist/static/app.js delete mode 100644 dist/static/style.css delete mode 100644 dist/test-click.html delete mode 100644 dist/test-datepicker.html delete mode 100644 dist/test.html create mode 100644 lang/en/auth.php create mode 100644 lang/en/messages.php create mode 100644 lang/en/pagination.php create mode 100644 lang/en/passwords.php create mode 100644 lang/en/validation.php create mode 100644 lang/est/auth.php create mode 100644 lang/est/messages.php create mode 100644 lang/est/pagination.php create mode 100644 lang/est/passwords.php create mode 100644 lang/est/validation.php create mode 100644 lang/ru/auth.php create mode 100644 lang/ru/messages.php create mode 100644 lang/ru/pagination.php create mode 100644 lang/ru/passwords.php create mode 100644 lang/ru/validation.php create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/img/fill_form.png create mode 100644 public/img/pdf_placeholder.png create mode 100644 public/img/placeholder.png create mode 100644 public/index.php create mode 100644 public/install/index.php create mode 100644 public/plugins/countdowntimer/countdowntimer.css create mode 100644 public/plugins/countdowntimer/countdowntimer.js create mode 100644 public/plugins/countdowntimer/countdowntimer.min.js create mode 100644 public/robots.txt create mode 100644 readme.md create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/js/components/AcelleMail.vue create mode 100644 resources/js/components/AdditionalJsCss.vue create mode 100644 resources/js/components/AskUserChoiceAfterSave.vue create mode 100644 resources/js/components/ConditionalField.vue create mode 100644 resources/js/components/CreateForm.vue create mode 100644 resources/js/components/ElementDetails.vue create mode 100644 resources/js/components/EmailTab.vue create mode 100644 resources/js/components/FieldConfigurator.vue create mode 100644 resources/js/components/FieldGenerator.vue create mode 100644 resources/js/components/FormTab.vue create mode 100644 resources/js/components/Mailchimp.vue create mode 100644 resources/js/components/SettingsTab.vue create mode 100644 resources/js/components/Shared/Layout.vue create mode 100644 resources/js/components/Shared/PdfUploader.vue create mode 100644 resources/js/components/Shared/PopoverHelpText.vue create mode 100644 resources/js/components/ShowForm.vue create mode 100644 resources/js/components/TestSmtpDetails.vue create mode 100644 resources/js/components/TooltipComponent.vue create mode 100644 resources/js/components/Webhook/Webhook.vue create mode 100644 resources/js/functions.vue create mode 100644 resources/js/iframeResizer.js create mode 100644 resources/js/iframeResizercontentWindow.js create mode 100644 resources/js/widget.js create mode 100644 resources/plugins/countdowntimer/countdowntimer.css create mode 100644 resources/plugins/countdowntimer/countdowntimer.js create mode 100644 resources/plugins/countdowntimer/countdowntimer.min.js create mode 100644 resources/sass/_variables.scss create mode 100644 resources/sass/app.scss create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/passwords/email.blade.php create mode 100644 resources/views/auth/passwords/reset.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/verify.blade.php create mode 100644 resources/views/emails/exception.blade.php create mode 100644 resources/views/emails/form_submitted.blade.php create mode 100644 resources/views/form/collaborate.blade.php create mode 100644 resources/views/form/copy_form.blade.php create mode 100644 resources/views/form/create.blade.php create mode 100644 resources/views/form/download.blade.php create mode 100644 resources/views/form/edit.blade.php create mode 100644 resources/views/form/generate_widget.blade.php create mode 100644 resources/views/form/partials/custom_attribute_generator.blade.php create mode 100644 resources/views/form/partials/fields_generator.blade.php create mode 100644 resources/views/form/partials/form_card.blade.php create mode 100644 resources/views/form/show.blade.php create mode 100644 resources/views/form/validate_password.blade.php create mode 100644 resources/views/form_data/file_view.blade.php create mode 100644 resources/views/form_data/partials/comment.blade.php create mode 100644 resources/views/form_data/partials/form_data_pdf.blade.php create mode 100644 resources/views/form_data/partials/submission_msg.blade.php create mode 100644 resources/views/form_data/report.blade.php create mode 100644 resources/views/form_data/show.blade.php create mode 100644 resources/views/form_data/view_form_data.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/ic/details.blade.php create mode 100644 resources/views/ic/envText.blade.php create mode 100644 resources/views/ic/index.blade.php create mode 100644 resources/views/ic/partials/e_license.blade.php create mode 100644 resources/views/ic/partials/nav.blade.php create mode 100644 resources/views/ic/success.blade.php create mode 100644 resources/views/ic/update_confirmation.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/partials/css.blade.php create mode 100644 resources/views/layouts/partials/footer.blade.php create mode 100644 resources/views/layouts/partials/javascript.blade.php create mode 100644 resources/views/layouts/partials/status.blade.php create mode 100644 resources/views/layouts/partials/top-nav.blade.php create mode 100644 resources/views/payments/create.blade.php create mode 100644 resources/views/payments/partials/pay_offline.blade.php create mode 100644 resources/views/payments/partials/pay_paypal.blade.php create mode 100644 resources/views/payments/partials/pay_stripe.blade.php create mode 100644 resources/views/superadmin/packages/create.blade.php create mode 100644 resources/views/superadmin/packages/edit.blade.php create mode 100644 resources/views/superadmin/packages/index.blade.php create mode 100644 resources/views/superadmin/settings/create.blade.php create mode 100644 resources/views/superadmin/subscription/edit.blade.php create mode 100644 resources/views/superadmin/subscription/index.blade.php create mode 100644 resources/views/superadmin/users/confirm_upgrade.blade.php create mode 100644 resources/views/superadmin/users/create.blade.php create mode 100644 resources/views/superadmin/users/edit.blade.php create mode 100644 resources/views/superadmin/users/index.blade.php create mode 100644 resources/views/superadmin/users/upgrade.blade.php create mode 100644 resources/views/user/profile/edit.blade.php create mode 100644 resources/views/user/settings/edit.blade.php create mode 100644 resources/views/user/subscription/index.blade.php create mode 100644 resources/views/user/subscription/show.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/api.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/ir.php create mode 100644 routes/web.php delete mode 100644 seed.sql delete mode 100644 test_browser.js create mode 100644 tests/CreatesApplication.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 webpack.mix.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6f313c6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.yml] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..967315d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.css linguist-vendored +*.scss linguist-vendored +*.js linguist-vendored +CHANGELOG.md export-ignore diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..ee70fb4 --- /dev/null +++ b/.htaccess @@ -0,0 +1,5 @@ + + RewriteEngine On + + RewriteRule ^(.*)$ public/$1 [L] + \ No newline at end of file diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..1db61d9 --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,13 @@ +php: + preset: laravel + disabled: + - unused_use + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/CHANGES_v4.1.0.md b/CHANGES_v4.1.0.md deleted file mode 100644 index 87604c8..0000000 --- a/CHANGES_v4.1.0.md +++ /dev/null @@ -1,199 +0,0 @@ -# AKNAPROFF Tootmine - Изменения v4.1.0 - -**Дата:** 28.11.2025 -**Версия:** v4.1.0 - ---- - -## 🎯 Реализованные изменения - -### 1. ✅ Логика блокировки изменена -**Было:** Проблемы блокировали поля при наличии текста ИЛИ галочек ошибок -**Стало:** Блокировка только по галочкам ошибок, текст - только пояснение - -**Технические детали:** -- Убрана проверка `(record.problems && record.problems.trim())` из условия hasProblems -- Блокировка происходит только при установленных флагах ошибок - -### 2. ✅ Система авторизации и ролей -**Реализовано 3 уровня доступа:** - -| Роль | Доступ | Описание | -|------|--------|----------| -| **guest** | Только просмотр | Гость без входа - ничего не может изменять | -| **user** | Просмотр + Проблемы | Простой пользователь - может изменять только Problems | -| **admin** | Полный доступ | Администратор - может изменять всё | - -**Функциональность:** -- При открытии без логина показывается форма входа -- Guest (гость) - только read-only просмотр -- User - может редактировать проблемы (текст + галочки ошибок) -- Admin - полный доступ ко всем функциям - -**Защищённые функции:** -- toggleDate() - только admin -- toggleMaterialConfirmed() - только admin -- toggleMaterial2Confirmed() - только admin -- toggleWorksheetsStep() - только admin -- togglePricePaid() - только admin -- saveNotes() - только admin -- saveProblems() - user и admin - -### 3. ✅ Кнопка сортировки по ID -**Добавлена кнопка "ID" перед фильтрами:** -- Клик 1: Сортировка по возрастанию (↑) -- Клик 2: Сортировка по убыванию (↓) -- Клик 3: Отключение сортировки -- Иконка показывает текущее состояние - ---- - -## 📂 Измененные файлы - -### Для копирования на сервер: - -```bash -# Frontend файлы (обязательно) -public/static/app.js -public/original.html - -# Backend файлы (обязательно) -src/index.tsx # Если были изменения в API -src/original-html.ts # Embedded HTML - -# Build файлы (создаются автоматически) -dist/_worker.js # Скомпилированный backend -``` - ---- - -## 🚀 Инструкция по обновлению на сервере - -### Вариант 1: Полное обновление (РЕКОМЕНДУЕТСЯ) - -```bash -# 1. Остановить контейнер -docker-compose down - -# 2. Скопировать файлы из локальной машины на сервер -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ - -# 3. Пересобрать на сервере -cd /path/to/webapp -npm run build - -# 4. Запустить контейнер -docker-compose up -d --build -``` - -### Вариант 2: Только frontend (БЕЗ ПЕРЕСБОРКИ) - -Если НЕ ИЗМЕНЯЛСЯ backend (src/index.tsx), можно обновить только frontend: - -```bash -# 1. Скопировать файлы -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ - -# 2. Пересобрать -docker-compose exec aknaproff-backend npm run build - -# 3. Перезапустить (НЕ пересобирать образ) -docker-compose restart -``` - -### Вариант 3: Копирование готового dist/ - -```bash -# 1. Собрать локально (уже сделано) -npm run build - -# 2. Скопировать dist на сервер -scp dist/_worker.js user@server:/path/to/webapp/dist/ - -# 3. Перезапустить -docker-compose restart -``` - ---- - -## ⚠️ ВАЖНО: База данных - -**БД НЕ ИЗМЕНЯЛАСЬ!** Миграции не требуются. - -Все изменения только в логике приложения: -- Логика hasProblems (frontend) -- Система прав (frontend) -- Кнопка сортировки (frontend) - -**Данные в БД сохранятся полностью.** - ---- - -## ✅ Проверка после обновления - -### 1. Проверить вход -```bash -# Открыть в браузере -http://your-server:8180 - -# Должна показаться форма входа -``` - -### 2. Тестировать роли - -**Guest (без входа):** -- ❌ Не может ничего изменять -- ✅ Может только просматривать - -**User (простой пользователь):** -- ✅ Может изменять Problems (текст + галочки) -- ❌ Не может изменять даты, notes, статусы - -**Admin:** -- ✅ Может изменять всё - -### 3. Проверить сортировку -- Нажать кнопку "ID" перед фильтрами -- Проверить сортировку: ↑ → ↓ → отключено - -### 4. Проверить логику блокировки -- Поставить галочку ошибки без текста -- Поле VALMIS/VÄLJAS должно заблокироваться (красное) -- Убрать галочку, добавить только текст -- Поле VALMIS/VÄLJAS НЕ должно блокироваться - ---- - -## 📊 Сводка изменений - -| Компонент | Изменено | Тип | -|-----------|----------|-----| -| Логика hasProblems | ✅ | Frontend | -| Система авторизации | ✅ | Frontend | -| Проверки прав | ✅ | Frontend | -| Кнопка сортировки | ✅ | Frontend | -| База данных | ❌ | Не изменялась | -| Backend API | ❌ | Не изменялся | - ---- - -## 🔧 Откат изменений (если что-то пошло не так) - -```bash -# 1. Вернуться к предыдущей версии -git checkout v4.0.13 - -# 2. Пересобрать -npm run build - -# 3. Перезапустить -docker-compose up -d --build -``` - ---- - -**Готово к deployment!** 🚀 diff --git a/CHANGES_v4.1.2.md b/CHANGES_v4.1.2.md deleted file mode 100644 index 667143c..0000000 --- a/CHANGES_v4.1.2.md +++ /dev/null @@ -1,116 +0,0 @@ -# 🔄 CHANGES v4.1.2 - UI Layout Update - -**Дата**: 2025-11-28 -**Версия**: v4.1.2 -**Тип**: UI Layout Improvement - ---- - -## 📝 Что изменено - -**Перемещение кнопки сортировки**: -- Кнопка **"Sorteerimine"** (сортировка по ID) перенесена из секции **"Filters"** в секцию **"Kiir otsing"** (Быстрый поиск) -- Теперь кнопка находится **ПЕРЕД** полем **"Klient"** - ---- - -## 🎨 Визуальная структура - -### ДО (v4.1.1): -``` -┌─ Filters ─────────────────────────┐ -│ [Sorteerimine: ID ↕] │ -│ [Kuu] [Aasta] [Lisa uus rida] │ -└───────────────────────────────────┘ - -┌─ Kiir otsing ─────────────────────┐ -│ [Klient] [Tüüp] [Pakkum. Nr] │ -│ [Töö Nr] [Aasta filter] │ -└───────────────────────────────────┘ -``` - -### ПОСЛЕ (v4.1.2): -``` -┌─ Filters ─────────────────────────┐ -│ [Kuu] [Aasta] [Lisa uus rida] │ -└───────────────────────────────────┘ - -┌─ Kiir otsing ─────────────────────┐ -│ [Sorteerimine: ID ↕] [Klient] │ -│ [Tüüp] [Pakkum. Nr] [Töö Nr] │ -│ [Aasta filter] │ -└───────────────────────────────────┘ -``` - ---- - -## 💡 Логика изменения - -**Почему так лучше**: -1. **Логическая группировка**: Сортировка и поиск - это функции фильтрации данных, поэтому логично их держать вместе -2. **Меньше секций**: Секция Filters теперь содержит только основные фильтры (месяц/год) и кнопку добавления -3. **Удобнее использовать**: Сортировка и поиск теперь в одном месте - ---- - -## 📦 Изменённые файлы - -1. **public/original.html** - - Удалена кнопка Sorteerimine из Filters (строки 123-131) - - Добавлена кнопка Sorteerimine в Kiir otsing перед Klient - - Обновлена версия: `app.js?v=4.1.1` → `app.js?v=4.1.2` - -2. **src/original-html.ts** - - Регенерирован embedded HTML с новой структурой - -3. **dist/_worker.js** - - Пересобран с обновлённым HTML - ---- - -## ✅ Тестирование - -**Проверено**: -- ✅ Кнопка Sorteerimine отображается в секции Kiir otsing -- ✅ Кнопка находится ПЕРЕД полем Klient -- ✅ Функционал сортировки работает (↑ ↓ ↕) -- ✅ Все поля поиска работают -- ✅ Layout адаптивный (flex-wrap) -- ✅ Консоль браузера чистая - ---- - -## 🔗 URLs - -- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **Git Commit**: b541aff - ---- - -## 📊 Статус - -**Версия**: v4.1.2 -**Статус**: ✅ Production Ready -**HTTP Status**: 200 OK -**JavaScript Errors**: 0 - ---- - -## 📝 Для deployment на production - -```bash -# Вариант 1: Быстрый (рекомендуется) -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart - -# Вариант 2: Полный -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -cd /path/to/webapp && npm run build && docker-compose restart -``` - -**После deployment**: Нажмите **Ctrl+Shift+R** в браузере для сброса кэша. - ---- - -**🎯 Готово!** Кнопка Sorteerimine перенесена в секцию Kiir otsing перед полем Klient. diff --git a/CHANGES_v4.1.3.md b/CHANGES_v4.1.3.md deleted file mode 100644 index a5ab18c..0000000 --- a/CHANGES_v4.1.3.md +++ /dev/null @@ -1,228 +0,0 @@ -# 🔧 CHANGES v4.1.3 - UI Polish & New User - -**Дата**: 2025-11-28 -**Версия**: v4.1.3 -**Тип**: UI Improvement + User Management - ---- - -## 📝 Что изменено - -### 1. Убрано слово "Sorteerimine" -- **ДО**: Кнопка имела label "Sorteerimine" над ней -- **ПОСЛЕ**: Только кнопка "ID" с иконкой сортировки (↕) -- **Причина**: Более компактный и чистый UI - -### 2. Добавлен новый пользователь "kasutaja" -- **Username**: kasutaja -- **Password**: tootmine -- **Full Name**: Kasutaja -- **Role**: user (обычный пользователь) - -### 3. Уточнена система ролей - -**Три пользователя с двумя уровнями доступа**: - -| Username | Password | Full Name | Role | Уровень доступа | -|----------|----------|-----------|------|-----------------| -| kasutaja | tootmine | Kasutaja | user | Обычный пользователь | -| aknaproff | demo123 | AKNAPROFF | admin | Администратор | -| admin | demo123 | Administrator | admin | Администратор | - -**Права доступа**: - -#### User (kasutaja) -- ✅ Просмотр всех записей -- ✅ Изменение проблем (текст + галочки) -- ✅ Просмотр Notes (read-only) -- ❌ Изменение дат -- ❌ Изменение MAT-1/MAT-2 -- ❌ Добавление/редактирование/удаление записей - -#### Admin (aknaproff, admin) -- ✅ Все права User -- ✅ Изменение дат (toggle) -- ✅ Изменение MAT-1/MAT-2 (toggle) -- ✅ Изменение LÕIKUS/KLAAS/VALMIS/VÄLJAS (3-step cycle) -- ✅ Добавление записей -- ✅ Редактирование записей -- ✅ Удаление записей - -**Примечание**: aknaproff и admin имеют одинаковый уровень доступа (оба admin). - ---- - -## 🎨 Визуальные изменения - -### ДО (v4.1.2): -``` -┌─ Kiir otsing ─────────────────────────────┐ -│ Sorteerimine │ -│ [ID ↕] │ -│ │ -│ Klient │ -│ [Otsi kliendi järgi...] │ -└───────────────────────────────────────────┘ -``` - -### ПОСЛЕ (v4.1.3): -``` -┌─ Kiir otsing ─────────────────────────────┐ -│ [ID ↕] [Klient: Otsi kliendi järgi...] │ -└───────────────────────────────────────────┘ -``` - -**Преимущества**: -- Более компактный UI -- Меньше визуального шума -- Интуитивно понятно, что кнопка ID для сортировки - ---- - -## 📦 Изменённые файлы - -### 1. public/original.html -- Убран label с текстом "Sorteerimine" -- Кнопка ID теперь без label (только иконка + текст) -- Обновлена версия: `app.js?v=4.1.2` → `app.js?v=4.1.3` - -### 2. seed.sql -- Добавлен пользователь "kasutaja" с паролем "tootmine" -- Обновлены комментарии с пояснением ролей -- Добавлен SHA-256 hash для пароля "tootmine" - -### 3. src/original-html.ts -- Регенерирован embedded HTML - -### 4. dist/_worker.js -- Пересобран с обновлениями - ---- - -## 🧪 Тестирование - -### Проверка UI -✅ Кнопка ID отображается без label "Sorteerimine" -✅ Кнопка компактная и выровнена с другими полями -✅ Функционал сортировки работает (↑ ↓ ↕) - -### Проверка нового пользователя -✅ Вход: kasutaja / tootmine -✅ Роль: user -✅ Доступ только к просмотру и изменению проблем -✅ Остальные функции заблокированы (alert) - -### Проверка существующих пользователей -✅ aknaproff / demo123 - admin права -✅ admin / demo123 - admin права -✅ Оба имеют полный доступ - ---- - -## 🔐 Учётные данные - -### Production Users - -**Обычный пользователь**: -- Username: `kasutaja` -- Password: `tootmine` -- Доступ: просмотр + изменение проблем - -**Администраторы** (одинаковые права): -- Username: `aknaproff` | Password: `demo123` -- Username: `admin` | Password: `demo123` -- Доступ: полный - -**Гость** (без входа): -- Кнопка: "Vaata ainult" -- Доступ: только просмотр (read-only) - ---- - -## 🔗 URLs - -- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **Git Commit**: Будет добавлен после коммита - ---- - -## 📊 Статус - -**Версия**: v4.1.3 -**Статус**: ✅ Production Ready -**HTTP Status**: 200 OK -**JavaScript Errors**: 0 -**Database**: Обновлена (добавлен пользователь kasutaja) - ---- - -## 🚀 Deployment Instructions - -### ⚠️ ВАЖНО: Требуется обновление базы данных! - -**На production сервере**: - -```bash -# 1. Скопировать seed.sql с новым пользователем -scp seed.sql user@server:/path/to/webapp/ - -# 2. На сервере применить seed.sql -docker-compose exec aknaproff-backend sh -c " - cd /app && - npx wrangler d1 execute webapp-production --local --file=./seed.sql -" - -# 3. Проверить, что пользователь добавлен -docker-compose exec aknaproff-backend sh -c " - npx wrangler d1 execute webapp-production --local \ - --command='SELECT username, full_name, role FROM users' -" - -# Должно вывести: -# - kasutaja | Kasutaja | user -# - aknaproff | AKNAPROFF | admin -# - admin | Administrator | admin - -# 4. Скопировать обновлённые файлы -scp dist/_worker.js user@server:/path/to/webapp/dist/ -# или -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -# и потом: npm run build - -# 5. Перезапустить -docker-compose restart -``` - -### Проверка после deployment - -```bash -# 1. Проверить HTTP -curl -I http://localhost:8180 - -# 2. Войти в браузере под kasutaja/tootmine -# 3. Проверить, что доступно только изменение проблем -# 4. Войти под aknaproff/demo123 или admin/demo123 -# 5. Проверить полный доступ -``` - ---- - -## 💾 Password Hashes - -Для справки (SHA-256): -- **demo123**: `d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791` -- **tootmine**: `a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f` - ---- - -## 📝 Заметки - -1. **База данных изменена**: Добавлен новый пользователь, требуется применение seed.sql на production -2. **Роли**: aknaproff и admin - оба admin, kasutaja - user -3. **UI**: Более компактный, убран label "Sorteerimine" -4. **Cache-busting**: v4.1.3, нужен Ctrl+Shift+R после deployment - ---- - -**🎯 Готово!** UI упрощён, добавлен пользователь kasutaja (tootmine), система ролей уточнена. diff --git a/CHANGES_v4.1.4.md b/CHANGES_v4.1.4.md deleted file mode 100644 index f0bbad6..0000000 --- a/CHANGES_v4.1.4.md +++ /dev/null @@ -1,152 +0,0 @@ -# 📝 CHANGES v4.1.4 - Login Form Simplification - -**Дата**: 2025-11-28 -**Версия**: v4.1.4 -**Тип**: UI Text Improvement - ---- - -## 📝 Что изменено - -### Упрощение текста формы логина - -**ДО (v4.1.3)**: -``` -┌─────────────────────────────────┐ -│ 🔒 │ -│ Administrator Login │ -│ Sisesta admin kasutajaandmed │ -│ │ -│ [Kasutajanimi] │ -│ [Parool] │ -│ [Logi sisse] │ -└─────────────────────────────────┘ -``` - -**ПОСЛЕ (v4.1.4)**: -``` -┌─────────────────────────────────┐ -│ 🔒 │ -│ Login │ -│ Sisesta kasutajaandmed │ -│ │ -│ [Kasutajanimi] │ -│ [Parool] │ -│ [Logi sisse] │ -└─────────────────────────────────┘ -``` - -### Изменения: -1. **Заголовок**: "Administrator Login" → **"Login"** -2. **Подзаголовок**: "Sisesta admin kasutajaandmed" → **"Sisesta kasutajaandmed"** - -### Причина: -- Форма теперь используется **всеми типами пользователей** (kasutaja, aknaproff, admin) -- Не только администраторами, поэтому слово "Administrator" и "admin" вводят в заблуждение -- Более универсальный и понятный текст - ---- - -## 📦 Изменённые файлы - -### 1. public/original.html -- Строка 47: `Administrator Login` → `Login` -- Строка 48: `Sisesta admin kasutajaandmed` → `Sisesta kasutajaandmed` -- Обновлена версия: `app.js?v=4.1.3` → `app.js?v=4.1.4` - -### 2. src/original-html.ts -- Регенерирован embedded HTML с новыми текстами - -### 3. dist/_worker.js -- Пересобран с обновлениями - ---- - -## ✅ Тестирование - -**Проверено**: -- ✅ Заголовок формы: "Login" (не "Administrator Login") -- ✅ Подзаголовок: "Sisesta kasutajaandmed" (не "admin kasutajaandmed") -- ✅ Все функции входа работают -- ✅ Вход для kasutaja/tootmine работает -- ✅ Вход для aknaproff/demo123 работает -- ✅ Вход для admin/demo123 работает -- ✅ Кнопка "Vaata ainult" (guest) работает - ---- - -## 🚀 Deployment - -### Быстрое обновление (только UI) - -```bash -# Скопировать только dist -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart - -# ИЛИ скопировать исходники -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -# На сервере: npm run build && docker-compose restart -``` - -### Проверка - -```bash -# HTTP -curl -I http://localhost:8180 - -# Браузер (Ctrl+Shift+R) -# Проверить текст: "Login" и "Sisesta kasutajaandmed" -``` - ---- - -## ⚠️ Важно - -- **База данных**: НЕ изменена -- **Миграции**: НЕ требуются -- **Изменения**: только UI текст -- **Cache-busting**: v4.1.4 - ---- - -## 🔗 URLs - -- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **Git Commit**: f9c5e0a - ---- - -## 📊 Статус - -**Версия**: v4.1.4 -**Статус**: ✅ Production Ready -**HTTP Status**: 200 OK -**JavaScript Errors**: 0 -**Database**: Не изменена - ---- - -## 🔐 Учётные данные (без изменений) - -| Username | Password | Role | Доступ | -|----------|----------|------|--------| -| kasutaja | tootmine | user | Просмотр + проблемы | -| aknaproff | demo123 | admin | Полный доступ | -| admin | demo123 | admin | Полный доступ | -| (guest) | без входа | guest | Только просмотр | - ---- - -## 💡 Для чего это изменение - -**Проблема**: Текст "Administrator Login" и "admin kasutajaandmed" создавал впечатление, что форма только для администраторов. - -**Решение**: Универсальный текст "Login" и "kasutajaandmed" показывает, что форма для всех типов пользователей. - -**Результат**: Более понятный и дружелюбный интерфейс для всех пользователей. - ---- - -**🎯 Готово!** Форма логина теперь с универсальным текстом для всех пользователей. diff --git a/CHANGES_v4.1.5.md b/CHANGES_v4.1.5.md deleted file mode 100644 index 9bea0a9..0000000 --- a/CHANGES_v4.1.5.md +++ /dev/null @@ -1,200 +0,0 @@ -# 🔴 CHANGES v4.1.5 - Restore Probleemid Visual Indicators - -**Дата**: 2025-11-28 -**Версия**: v4.1.5 -**Тип**: Bug Fix / Visual Restoration - ---- - -## 📝 Что восстановлено - -### Поле "Probleemid" (Проблемы) - визуальная индикация - -**Проблема**: Поле Probleemid не показывало визуальные индикаторы проблем. - -**Восстановлено**: - -#### 1. Красный фон с восклицательным знаком ⚠️ -Когда есть галочки ошибок (error flags): -- **Цвет**: Красный фон (`bg-red-500`) -- **Иконка**: Восклицательный треугольник `` -- **Tooltip**: Текст проблемы при наведении курсора -- **Условие**: Хотя бы одна галочка проблемы установлена (worksheets_error, cutting_error, glazing_error, ready_error, issued_error) - -#### 2. Серый фон с информационной иконкой ℹ️ -Когда есть только текст проблемы, но нет галочек: -- **Цвет**: Серый фон (`bg-gray-300`) -- **Иконка**: Информационный круг `` -- **Tooltip**: Текст проблемы при наведении курсора -- **Условие**: Есть текст в поле problems, но нет галочек ошибок - -#### 3. Пустое поле (нет проблем) -Когда нет ни галочек, ни текста: -- **Цвет**: Светло-серый (`bg-gray-100`) -- **Символ**: Прочерк `-` -- **Действие**: Клик открывает модальное окно для добавления проблем - ---- - -## 🎨 Визуальные состояния - -### Состояние 1: Есть галочки ошибок -``` -┌─────────────┐ -│ 🔴 ⚠️ │ ← Красный с восклицательным знаком -└─────────────┘ - ↑ Наведение показывает текст проблемы -``` - -### Состояние 2: Только текст, нет галочек -``` -┌─────────────┐ -│ ⚪ ℹ️ │ ← Серый с информационной иконкой -└─────────────┘ - ↑ Наведение показывает текст проблемы -``` - -### Состояние 3: Нет проблем -``` -┌─────────────┐ -│ - │ ← Светло-серый с прочерком -└─────────────┘ - ↑ Клик для добавления проблемы -``` - ---- - -## 🔍 Логика отображения - -```javascript -// Проверка галочек ошибок -const hasProblems = record.worksheets_error === 1 || - record.cutting_error === 1 || - record.glazing_error === 1 || - record.ready_error === 1 || - record.issued_error === 1; - -// Если есть галочки → КРАСНЫЙ с ⚠️ -if (hasProblems) { - return RED + exclamation-triangle icon + tooltip -} - -// Если только текст → СЕРЫЙ с ℹ️ -if (problems && problems.trim()) { - return GRAY + info-circle icon + tooltip -} - -// Иначе → пустой -return LIGHT_GRAY + "-" -``` - ---- - -## 📦 Изменённые файлы - -### 1. public/static/app.js -- Функция `renderProblemsCell()` полностью переписана -- Добавлена проверка `hasProblems` (галочки ошибок) -- Добавлены 3 состояния: красный/серый/пустой -- Добавлены иконки Font Awesome -- Добавлен tooltip с текстом проблемы -- Обновлена версия: `app.js?v=4.1.4` → `app.js?v=4.1.5` - -### 2. public/original.html -- Обновлена версия cache-busting - -### 3. src/original-html.ts -- Регенерирован - -### 4. dist/_worker.js -- Пересобран - ---- - -## ✅ Тестирование - -### Сценарий 1: Запись с галочками проблем -**Запись ID 2** (worksheets_error=1, glazing_error=1): -- ✅ Показывает КРАСНЫЙ фон -- ✅ Показывает иконку ⚠️ -- ✅ При наведении показывает текст "qqqq" -- ✅ Клик открывает модальное окно с отмеченными галочками - -### Сценарий 2: Запись с текстом, но без галочек -Если добавить текст проблемы без галочек: -- ✅ Показывает СЕРЫЙ фон -- ✅ Показывает иконку ℹ️ -- ✅ При наведении показывает текст -- ✅ Клик открывает модальное окно - -### Сценарий 3: Запись без проблем -**Записи ID 1, 4, 5**: -- ✅ Показывает светло-серый фон с прочерком `-` -- ✅ Клик открывает модальное окно для добавления - ---- - -## 🚀 Deployment - -```bash -# Быстрый вариант -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart - -# Полный вариант -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -# На сервере: npm run build && docker-compose restart -``` - -### Проверка -```bash -curl -I http://localhost:8180 -# Браузер: Ctrl+Shift+R -# Проверить поле Probleemid: -# - Записи с галочками → красный фон с ⚠️ -# - Записи с текстом → серый фон с ℹ️ -# - Записи без проблем → серый с "-" -# - Наведение курсора → показывает tooltip -``` - ---- - -## 🔗 URLs - -- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **Git Commit**: d79f236 - ---- - -## 📊 Статус - -**Версия**: v4.1.5 -**Статус**: ✅ Production Ready -**HTTP Status**: 200 OK -**JavaScript Errors**: 0 -**Database**: Не изменена - ---- - -## 💡 Ключевые моменты - -1. **Галочки = красный** - Если хотя бы одна галочка установлена, поле красное с ⚠️ -2. **Текст = информация** - Если есть только текст, поле серое с ℹ️ -3. **Tooltip = подсказка** - При наведении курсора показывается полный текст проблемы -4. **Font Awesome** - Используются иконки: - - `fa-exclamation-triangle` для ошибок - - `fa-info-circle` для информации - ---- - -## 📚 Связанные версии - -Эта функциональность связана с изменениями в v4.1.0: -- Галочки проблем блокируют поля VALMIS/VÄLJAS -- Текст проблемы - только комментарий, не блокирует - ---- - -**🎯 Готово!** Поле Probleemid теперь правильно показывает красный фон с ⚠️ и tooltip с текстом проблемы! diff --git a/CHANGES_v4.1.6.md b/CHANGES_v4.1.6.md deleted file mode 100644 index c36ca33..0000000 --- a/CHANGES_v4.1.6.md +++ /dev/null @@ -1,149 +0,0 @@ -# 🟡 CHANGES v4.1.6 - Märkused Visual Indicators - -**Дата**: 2025-11-28 -**Версия**: v4.1.6 -**Тип**: Visual Improvement - ---- - -## 📝 Что изменено - -### Поле "Märkused" (Notes/Заметки) - визуальная индикация - -**Добавлено**: -- **Желтый фон** с белым текстом -- **Иконка "i"** (`fa-info-circle`) -- **Tooltip** при наведении курсора с полным текстом заметки - ---- - -## 🎨 Визуальные состояния - -### Состояние 1: Есть текст заметки -``` -┌─────────────┐ -│ 🟡 ℹ️ │ ← Желтый фон с иконкой "i" -└─────────────┘ - ↑ Наведение показывает полный текст заметки -``` - -### Состояние 2: Нет заметки -``` -┌─────────────┐ -│ - │ ← Серый фон с прочерком -└─────────────┘ - ↑ Клик для добавления заметки -``` - ---- - -## 🔍 Логика отображения - -```javascript -// Если есть текст заметки → ЖЕЛТЫЙ с ℹ️ -if (notes && notes.trim()) { - return YELLOW + info-circle icon + tooltip -} - -// Иначе → пустой (серый с прочерком) -return LIGHT_GRAY + "-" -``` - ---- - -## 📦 Изменённые файлы - -### 1. public/static/app.js -- Функция `renderNotesCell()` обновлена -- Добавлен желтый фон: `bg-yellow-400` -- Изменена иконка: `fa-exclamation` → `fa-info-circle` -- Добавлен tooltip с полным текстом заметки -- Удалена зависимость от `notesDate` (показывает желтый только если есть текст) - -### 2. public/original.html -- Обновлена версия: `app.js?v=4.1.5` → `app.js?v=4.1.6` - -### 3. src/original-html.ts, dist/_worker.js -- Регенерированы и пересобраны - ---- - -## ✅ Тестирование - -### Сценарий 1: Запись с заметкой -**Запись ID 2** (notes="Срочный заказ до 20.01"): -- ✅ Показывает ЖЕЛТЫЙ фон -- ✅ Показывает иконку ℹ️ -- ✅ При наведении показывает "Срочный заказ до 20.01" -- ✅ Клик открывает модальное окно с текстом - -### Сценарий 2: Запись без заметки -**Записи ID 1, 3, 5**: -- ✅ Показывает серый фон с прочерком `-` -- ✅ Клик открывает модальное окно для добавления - ---- - -## 🚀 Deployment - -```bash -# Быстрый вариант -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart - -# Полный вариант -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -# На сервере: npm run build && docker-compose restart -``` - -### Проверка -```bash -curl -I http://localhost:8180 -# Браузер: Ctrl+Shift+R -# Проверить поле Märkused: -# - Запись ID 2 → желтый фон с ℹ️ -# - Навести курсор → показывает tooltip с текстом -``` - ---- - -## 🔗 URLs - -- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **Git Commit**: dbc5c25 - ---- - -## 📊 Статус - -**Версия**: v4.1.6 -**Статус**: ✅ Production Ready -**HTTP Status**: 200 OK -**JavaScript Errors**: 0 -**Database**: Не изменена - ---- - -## 🎨 Сравнение с Probleemid - -| Поле | Цвет | Иконка | Условие | -|------|------|--------|---------| -| **Probleemid** | 🔴 Красный | ⚠️ exclamation-triangle | Есть галочки ошибок | -| **Probleemid** | ⚪ Серый | ℹ️ info-circle | Только текст, без галочек | -| **Märkused** | 🟡 Желтый | ℹ️ info-circle | Есть текст заметки | -| **Пустое** | ⚪ Серый | - | Нет данных | - ---- - -## 💡 Ключевые моменты - -1. **Желтый = заметка** - Визуальное отличие от красных проблем -2. **Иконка "i"** - Информационный характер заметок -3. **Tooltip** - Полный текст при наведении курсора -4. **Без даты** - Показывает желтый только если есть текст - ---- - -**🎯 Готово!** Поле Märkused теперь с желтым фоном, иконкой ℹ️ и tooltip при наведении! diff --git a/CHANGES_v4.1.8.md b/CHANGES_v4.1.8.md deleted file mode 100644 index 896420e..0000000 --- a/CHANGES_v4.1.8.md +++ /dev/null @@ -1,231 +0,0 @@ -# AKNAPROFF v4.1.8 - Permissions Fix & UI Improvements - -**Дата:** 2025-12-30 -**Версия:** v4.1.8 -**Тип:** Bug Fix + UI Improvement - ---- - -## Изменения - -### 1. ✅ Исправлены права доступа для Märkused (Notes) -**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать заметки -**Причина:** Код использовал `canEditRecords()` (только admin) вместо `canEditProblems()` (user и admin) - -**Исправлено:** -- `openNotesModal()`: изменена проверка с `canEditRecords()` на `canEditProblems()` -- `saveNotes()`: изменена проверка с `canEditRecords()` на `canEditProblems()` - -**Результат:** -- ✅ Admin может редактировать заметки -- ✅ User (kasutaja) может редактировать заметки -- ❌ Guest не может редактировать заметки (только просмотр) - ---- - -### 2. ✅ Исправлены права доступа для Probleemid (Problems) -**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать проблемы -**Причина:** -1. Отсутствовали колонки `problems` и `problems_date` в таблице `production_records` -2. Неправильные названия колонок в `audit_log` (использовались `field_name` и `action_type` вместо `field` и `action`) - -**Исправлено:** -- Добавлены колонки `problems` и `problems_date` в таблицу `production_records` -- Исправлены названия колонок в SQL запросах к `audit_log`: - - `field_name` → `field` - - `action_type` → `action` - -**Результат:** -- ✅ Admin может редактировать проблемы и галочки ошибок -- ✅ User (kasutaja) может редактировать проблемы и галочки ошибок -- ❌ Guest не может редактировать проблемы (только просмотр) - ---- - -### 3. ✅ Скрыта кнопка "Lisa uus rida" для не-админов -**Проблема:** Кнопка "Lisa uus rida" (Добавить новую строку) была видна всем пользователям -**Требование:** Только админы должны видеть кнопку добавления новой записи - -**Исправлено:** -- Добавлен `id="addNewRowBtn"` к div с кнопкой в `original.html` -- Добавлена логика скрытия в `showMainApp()`: - - **Admin:** кнопка видна - - **User:** кнопка скрыта - - **Guest:** кнопка скрыта - -**Результат:** -- ✅ Admin видит кнопку "Lisa uus rida" -- ❌ User (kasutaja) НЕ видит кнопку -- ❌ Guest НЕ видит кнопку - ---- - -## Изменённые Файлы - -### Frontend -- `public/static/app.js`: - - Исправлены права доступа для `openNotesModal()` и `saveNotes()` - - Добавлена логика скрытия кнопки "Lisa uus rida" в `showMainApp()` -- `public/original.html`: - - Добавлен `id="addNewRowBtn"` к div с кнопкой -- `src/original-html.ts`: - - Регенерирован с версией v4.1.8 - -### Backend -- `src/index.tsx`: - - Исправлены названия колонок в SQL запросах к `audit_log` (4 места) - - `field_name` → `field` - - `action_type` → `action` - -### База данных -- `production_records`: - - Добавлена колонка `problems TEXT DEFAULT NULL` - - Добавлена колонка `problems_date DATE DEFAULT NULL` - ---- - -## Тестирование - -### Backend API Tests - -#### ✅ User (kasutaja) может редактировать Notes -```bash -TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \ - -H "Content-Type: application/json" \ - -d '{"username":"kasutaja","password":"tootmine"}' | jq -r .token) - -curl -X PATCH http://localhost:3000/api/records/2/notes \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer $TOKEN" \ - -d '{"notes":"Test note from user"}' -# → {"success": true} ✅ -``` - -#### ✅ User (kasutaja) может редактировать Problems -```bash -curl -X PATCH http://localhost:3000/api/records/2/problems \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer $TOKEN" \ - -d '{"problems":"Test problem","errorFlags":{"worksheets_error":1}}' -# → {"success": true} ✅ -``` - -### Frontend Tests -- ✅ Admin видит кнопку "Lisa uus rida" -- ✅ User (kasutaja) НЕ видит кнопку "Lisa uus rida" -- ✅ Guest НЕ видит кнопку "Lisa uus rida" -- ✅ User может открыть модальное окно заметок и сохранить -- ✅ User может открыть модальное окно проблем и сохранить -- ✅ Guest может открыть модальные окна (read-only) - ---- - -## Deployment на Production - -### ⚠️ КРИТИЧНО: База данных изменена - -**Шаг 1: Обновить БД (ОБЯЗАТЕЛЬНО)** -```bash -# 1. Добавить колонки problems в production_records -docker-compose exec aknaproff-backend sh -c \ -"npx wrangler d1 execute webapp-production --local --command=' -ALTER TABLE production_records ADD COLUMN problems TEXT DEFAULT NULL; -ALTER TABLE production_records ADD COLUMN problems_date DATE DEFAULT NULL; -'" - -# 2. Проверка -docker-compose exec aknaproff-backend sh -c \ -"npx wrangler d1 execute webapp-production --local --command=' -PRAGMA table_info(production_records); -'" | grep problems -# Должно показать: problems | TEXT | NULL -# problems_date | DATE | NULL -``` - -**Шаг 2: Обновить код** - -Быстрый вариант (рекомендуется): -```bash -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart -``` - -Полный вариант: -```bash -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -scp src/index.tsx user@server:/path/to/webapp/src/ -cd /path/to/webapp && npm run build && docker-compose restart -``` - -**Шаг 3: Проверка** -```bash -# Тест пользователя kasutaja -curl -X POST http://localhost:8180/api/auth/login \ - -H "Content-Type: application/json" \ - -d '{"username":"kasutaja","password":"tootmine"}' - -# Проверить кнопку "Lisa uus rida": -# - Admin: видна -# - User: скрыта -# - Guest: скрыта -``` - ---- - -## Матрица Прав Доступа - -| Действие | Admin | User (kasutaja) | Guest | -|----------|-------|-----------------|-------| -| **Просмотр данных** | ✅ | ✅ | ✅ | -| **Редактировать Märkused** | ✅ | ✅ | ❌ | -| **Редактировать Probleemid** | ✅ | ✅ | ❌ | -| **Редактировать даты** | ✅ | ❌ | ❌ | -| **Добавить новую запись** | ✅ | ❌ | ❌ | -| **Удалить запись** | ✅ | ❌ | ❌ | -| **Редактировать все поля** | ✅ | ❌ | ❌ | -| **Изменить настройки** | ✅ | ❌ | ❌ | - ---- - -## Статус - -- **Версия:** v4.1.8 -- **Статус:** ✅ Production Ready -- **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **HTTP:** 200 OK -- **JavaScript Errors:** 0 -- **База данных:** ✅ Обновлена - ---- - -## Changelog - -### v4.1.8 (2025-12-30) -- 🔧 **FIX:** User (kasutaja) может редактировать заметки -- 🔧 **FIX:** User (kasutaja) может редактировать проблемы -- 🔧 **FIX:** Исправлены колонки audit_log (field_name → field, action_type → action) -- 📦 **ADD:** Колонки `problems` и `problems_date` в таблицу `production_records` -- 🎨 **UI:** Скрыта кнопка "Lisa uus rida" для user и guest -- ✅ **VERIFY:** Все права доступа работают корректно - ---- - -## Известные Ограничения - -1. **ERR_BLOCKED_BY_CLIENT** - AdBlock блокирует ресурс (не критично) -2. **Tailwind CSS CDN** - в production рекомендуется PostCSS -3. **SHA-256 пароли** - в production рекомендуется bcrypt - ---- - -## Итог - -✅ **Проблемы решены:** -1. User (kasutaja) может редактировать заметки и проблемы -2. Кнопка "Lisa uus rida" видна только админам -3. Все права доступа работают корректно - -🎯 **Готово к deployment на production** -Не забудьте выполнить SQL команды для добавления колонок `problems` и `problems_date`! diff --git a/CHANGES_v4.1.9.md b/CHANGES_v4.1.9.md deleted file mode 100644 index 2e2a357..0000000 --- a/CHANGES_v4.1.9.md +++ /dev/null @@ -1,192 +0,0 @@ -# AKNAPROFF v4.1.9 - Fix Notes Permissions (User → View Only) - -**Дата:** 2025-12-30 -**Версия:** v4.1.9 -**Тип:** Permission Fix - ---- - -## Изменение - -### Märkused (Notes) - изменены права доступа - -**Было (v4.1.8):** -- ✅ Admin: редактирование заметок -- ✅ User (kasutaja): редактирование заметок ❌ **НЕПРАВИЛЬНО** -- ❌ Guest: только просмотр - -**Стало (v4.1.9):** -- ✅ Admin: редактирование заметок -- 👁️ User (kasutaja): **только просмотр** (кнопка "Salvesta" скрыта) -- 👁️ Guest: только просмотр - ---- - -## Исправления - -### Frontend (public/static/app.js) - -1. **openNotesModal():** - - Было: `const readOnly = !canEditProblems()` (user + admin) - - Стало: `const readOnly = !canEditRecords()` (только admin) - -2. **saveNotes():** - - Было: `if (!canEditProblems())` (user + admin) - - Стало: `if (!canEditRecords())` (только admin) - -### Backend (src/index.tsx) - -1. **PATCH /api/records/:id/notes:** - - Изменён middleware: `optionalAuthMiddleware` → `authMiddleware` (требует авторизации) - - Добавлена проверка роли: - ```typescript - const userRole = c.get('role') - if (userRole !== 'admin') { - return c.json({ error: 'Permission denied. Only admin can edit notes.' }, 403) - } - ``` - -2. **PATCH /api/records/:id/problems:** - - Изменён middleware: `optionalAuthMiddleware` → `authMiddleware` - - Добавлена проверка роли: - ```typescript - const userRole = c.get('role') - if (userRole !== 'admin' && userRole !== 'user') { - return c.json({ error: 'Permission denied. Only admin and user can edit problems.' }, 403) - } - ``` - ---- - -## Тестирование - -### Backend API Tests - -#### ✅ User НЕ может редактировать Notes -```bash -TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \ - -d '{"username":"kasutaja","password":"tootmine"}' | jq -r .token) - -curl -X PATCH http://localhost:3000/api/records/2/notes \ - -H "Authorization: Bearer $TOKEN" \ - -d '{"notes":"Should not work"}' -# → {"error": "Permission denied. Only admin can edit notes."} ✅ 403 -``` - -#### ✅ User может редактировать Problems -```bash -curl -X PATCH http://localhost:3000/api/records/2/problems \ - -H "Authorization: Bearer $TOKEN" \ - -d '{"problems":"Test","errorFlags":{"worksheets_error":1}}' -# → {"success": true} ✅ 200 -``` - -#### ✅ Admin может редактировать Notes -```bash -TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \ - -d '{"username":"admin","password":"demo123"}' | jq -r .token) - -curl -X PATCH http://localhost:3000/api/records/2/notes \ - -H "Authorization: Bearer $TOKEN" \ - -d '{"notes":"Admin can edit"}' -# → {"success": true} ✅ 200 -``` - -### Frontend Tests -- ✅ Admin открывает Notes → поле редактируемое + кнопка "Salvesta" видна -- ✅ User открывает Notes → поле read-only + кнопка "Salvesta" скрыта -- ✅ Guest открывает Notes → поле read-only + кнопка "Salvesta" скрыта -- ✅ User может редактировать Problems (кнопка видна) - ---- - -## Матрица Прав Доступа (Финальная) - -| Действие | Admin | User (kasutaja) | Guest | -|----------|-------|-----------------|-------| -| **Просмотр данных** | ✅ | ✅ | ✅ | -| **Märkused (просмотр)** | ✅ | ✅ | ✅ | -| **Märkused (редактирование)** | ✅ | ❌ | ❌ | -| **Probleemid (просмотр)** | ✅ | ✅ | ✅ | -| **Probleemid (редактирование)** | ✅ | ✅ | ❌ | -| **Lisa uus rida** | ✅ | ❌ | ❌ | -| **Редактировать даты** | ✅ | ❌ | ❌ | -| **Удалить запись** | ✅ | ❌ | ❌ | -| **Редактировать все поля** | ✅ | ❌ | ❌ | - ---- - -## Deployment на Production - -### Файлы для Копирования - -**Быстрый вариант (рекомендуется):** -```bash -scp dist/_worker.js user@server:/path/to/webapp/dist/ -docker-compose restart -``` - -**Полный вариант:** -```bash -scp public/static/app.js user@server:/path/to/webapp/public/static/ -scp public/original.html user@server:/path/to/webapp/public/ -scp src/original-html.ts user@server:/path/to/webapp/src/ -scp src/index.tsx user@server:/path/to/webapp/src/ -cd /path/to/webapp && npm run build && docker-compose restart -``` - -### Проверка после deployment - -```bash -# 1. Войти как kasutaja -# 2. Открыть запись → нажать на Märkused (желтая ячейка) -# 3. Проверить: поле read-only, кнопка "Salvesta" скрыта -# 4. Открыть запись → нажать на Probleemid (красная ячейка) -# 5. Проверить: поле редактируемое, кнопка "Salvesta" видна -``` - ---- - -## Статус - -- **Версия:** v4.1.9 -- **Статус:** ✅ Production Ready -- **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai -- **HTTP:** 200 OK -- **JavaScript Errors:** 0 -- **База данных:** Не изменена - ---- - -## Changelog - -### v4.1.9 (2025-12-30) - Permission Fix -- 🔧 **FIX:** User (kasutaja) теперь может только **просматривать** заметки (было: редактировать) -- 🔧 **FIX:** Добавлены backend проверки роли для `/api/records/:id/notes` (только admin) -- 🔧 **FIX:** Добавлены backend проверки роли для `/api/records/:id/problems` (admin + user) -- 🎨 **UI:** Кнопка "Salvesta" скрыта для user при просмотре заметок -- ✅ **VERIFY:** Все права доступа работают корректно (frontend + backend) - ---- - -## Сравнение с v4.1.8 - -| Изменение | v4.1.8 | v4.1.9 | -|-----------|---------|---------| -| **User редактирует Notes** | ✅ (неправильно) | ❌ (исправлено) | -| **User просматривает Notes** | ✅ | ✅ | -| **User редактирует Problems** | ✅ | ✅ | -| **Backend проверка прав** | ❌ | ✅ | -| **Кнопка "Lisa uus rida" для user** | скрыта | скрыта | - ---- - -## Итог - -✅ **Исправлено согласно требованию:** -- User (kasutaja) может только **просматривать** заметки -- Кнопка "Salvesta" скрыта для user в модальном окне заметок -- Backend проверяет роль и возвращает 403 для user при попытке редактирования -- User по-прежнему может редактировать проблемы - -🎯 **Готово к deployment на production!** diff --git a/CLICK_LOGIC_REVIEW.md b/CLICK_LOGIC_REVIEW.md deleted file mode 100644 index f604c76..0000000 --- a/CLICK_LOGIC_REVIEW.md +++ /dev/null @@ -1,306 +0,0 @@ -# 🔍 ПОЛНЫЙ ОБЗОР ЛОГИКИ КЛИКОВ - AKNAPROFF Tootmine - -## 📋 История изменений из переписки - -### Версия 1: Оригинальный архив (aknaproff.zip) -- **Структура**: Один HTML файл с встроенным JavaScript -- **Кнопки**: `` -- **Функции**: Все функции встроены в ` -``` - -**3. App.js 404:** -``` - -``` - -### ✅ Решение - -**Заменить локальные ресурсы на CDN:** -```html - - - - - - - - -``` - -**Коммит:** -``` -ae0b05a - Fix resource paths: use CDN for FontAwesome and Axios -``` - -**Результат:** -- ✅ Все иконки загружаются -- ✅ Axios работает -- ✅ App.js (73KB) загружается -- ✅ 0 ошибок ресурсов - ---- - -## v4.0.2 - Validate Numeric Fields (28.11.2025, 12:00) - -### ❌ Проблема -```sql -Error: NOT NULL constraint failed: production_records.quantity -``` - -Frontend отправлял пустые строки для `quantity` и `price` - -### ✅ Решение -```typescript -// Валидация и конвертация -const quantity = parseInt(body.quantity || '0', 10) || 0; -const price = body.price ? parseFloat(body.price) : null; -``` - -**Коммит:** -``` -18f7ad2 - Fix POST/PUT /api/records: validate and convert numeric fields -``` - ---- - -## v4.0.3 - Fix Status Endpoints (28.11.2025, 12:15) - -### ❌ Проблемы - -**1. Missing GET /api/records/:id** -**2. Field name bug:** -``` -cutting_date_date → cutting_date -``` - -### ✅ Решение -```typescript -// 1. Добавить GET endpoint -app.get('/api/records/:id', optionalAuthMiddleware, async (c) => { - const id = c.req.param('id') - // ... return single record -}) - -// 2. Исправить field names -const dbField = `${field}_date`; // cutting → cutting_date -``` - -**Коммит:** -``` -51c5919 - Fix all API endpoints: add GET /api/records/:id, fix status/problems -``` - ---- - -## v4.0.4 - Add _date Suffix (28.11.2025, 12:30) - -### ❌ Проблема -Frontend отправлял короткие имена полей (`cutting`, `glazing`), но в БД колонки с суффиксом `_date` - -### ✅ Решение -```typescript -// Конвертация field → field_date -const dbField = `${field}_date`; -``` - -**Коммит:** -``` -39f5d2f - Fix status toggle: add _date suffix to field names -``` - ---- - -# ФАЗА 4: ИСПРАВЛЕНИЕ КЛИКОВ - -## v4.0.5 - Default Month Filter (28.11.2025, 12:45) - -### ❌ Проблема -**User:** "Сейчас вообще ни один клик не работает" - -**Причина:** -- Таблица пустая → нет кликабельных элементов -- `initFilters()` устанавливал месяц = текущий (ноябрь/декабрь) -- Демо-данные только за январь 2025 - -### ✅ Решение -```javascript -// public/static/app.js -async function initFilters() { - // Было: - // const now = new Date(); - // monthFilter.value = now.getMonth() + 1; // 11 or 12 - - // Стало: - monthFilter.value = 1; // ✅ January (где есть данные) - yearFilter.value = 2025; -} -``` - -**Коммит:** -``` -a775738 - Fix: Set default month to January (1) to show demo data -``` - -**Тестирование:** -```bash -curl http://localhost:3000/api/records?month=1&year=2025 | jq 'length' -# 5 records ✅ - -curl http://localhost:3000 | grep -o "toggleDate(" | wc -l -# 16 click handlers ✅ -``` - -**Результат:** -- ✅ Таблица загружается с 5 записями -- ✅ Все клики по ячейкам работают -- ✅ 0 JavaScript ошибок - ---- - -## v4.0.6 - Public Access (28.11.2025, 13:00) - -### ❌ Проблема -**HTTP 401 Unauthorized** на все клики - -**Console Errors:** -``` -Toggle date error: Request failed with status code 401 -PATCH /api/records/1/status [HTTP/2 401] -``` - -**Root Cause:** -- Frontend: Создаёт `Public User` без токена -- Backend: Требует JWT токен (`authMiddleware`) -- Result: Все запросы отклоняются - -### ✅ Решение - -**1. Создать `optionalAuthMiddleware`:** -```typescript -// src/middleware/auth.ts -export async function optionalAuthMiddleware(c, next) { - const authHeader = c.req.header('Authorization') - - if (authHeader && authHeader.startsWith('Bearer ')) { - // Has token → verify - const payload = verifyToken(token) - if (payload) { - c.set('userId', payload.userId) - c.set('role', user.role) - } - } else { - // No token → set public user - c.set('username', 'Public') - // userId = undefined (будет null в SQL) - } - - await next() // ✅ Always continues -} -``` - -**2. Заменить middleware в 13 endpoints:** -```typescript -// Было: -app.patch('/api/records/:id/status', authMiddleware, ...) - -// Стало: -app.patch('/api/records/:id/status', optionalAuthMiddleware, ...) -``` - -**3. Исправить `userId` для public users:** -```typescript -// Было: -.bind(userId, recordId, field, oldValue, newValue) -// userId = undefined → SQL Error - -// Стало: -.bind(userId || null, recordId, field, oldValue, newValue) -// userId = null → ✅ OK -``` - -**Коммит:** -``` -ec9214b - Fix: Allow public access (no login required) for all endpoints -``` - -**Тестирование:** -```bash -# Без токена (Public User) -curl -X PATCH http://localhost:3000/api/records/1/status \ - -H "Content-Type: application/json" \ - -d '{"field":"cutting","date":"2025-03-26"}' - -# Response: {"success": true} ✅ -``` - -**Результат:** -- ✅ HTTP 401 → HTTP 200 -- ✅ Все клики работают без логина -- ✅ Public User может view/add/edit/delete -- ✅ Admin features ещё требуют логин - ---- - -## v4.0.7 - Cache Busting (28.11.2025, 13:15) - -### ❌ Проблема -Пользователи видели старую cached версию `app.js` - -### ✅ Решение -```html - - -``` - -**Коммит:** -``` -3757c28 - Fix: Add cache-busting version parameter to app.js -``` - ---- - -## v4.0.8 - Remove Frontend Blocks (28.11.2025, 13:30) - -### ❌ Проблема -**Backend:** Разрешает public access (optionalAuthMiddleware) -**Frontend:** Блокирует Public User - -**Blocks в app.js:** -```javascript -function openModal() { - if (!token || currentUser.role !== 'admin') { - alert('Только администратор...'); - return; // ❌ БЛОК - } -} - -function editRecord(recordId) { - if (currentUser.role !== 'admin') { - return; // ❌ БЛОК - } -} - -function toggleDeleteButtons() { - const isAdmin = currentUser?.role === 'admin'; - btn.style.display = isAdmin ? 'block' : 'none'; // ❌ СКРЫВАЕТ -} -``` - -**Blocks в HTML:** -```html -
- -
-``` - -```css -.admin-only-block { display: none; } -body.role-admin .admin-only-block { display: block; } -``` - -### ✅ Решение - -**1. Убрать role checks из app.js:** -```javascript -function openModal() { - // Removed role check - editingRecordId = null; - document.getElementById('recordModal').classList.add('active'); -} - -function editRecord(recordId) { - // Removed role check - editingRecordId = recordId; - // ... load and edit -} - -function toggleDeleteButtons() { - // Show for all users - document.querySelectorAll('.delete-btn').forEach(btn => { - btn.style.display = 'inline-block'; - }); -} -``` - -**2. Убрать CSS hiding из HTML:** -```html - -
- -
- - -
- -
-``` - -**Коммит:** -``` -7601940 - Fix: Remove all frontend authentication blocks for Public User -``` - -**Результат:** -- ✅ Backend: Public access (optionalAuthMiddleware) -- ✅ Frontend: Public access (no role checks) -- ✅ Кнопки видны для всех -- ✅ Модалки открываются -- ✅ Edit/Delete работают - ---- - -# ФАЗА 5: ИСПРАВЛЕНИЕ MAT-1/MAT-2 - -## v4.0.9 - Fix Checkbox Toggle (28.11.2025, 15:30) - -### ❌ Проблема -**User:** "Не работает в MAT-1 MAT-2 при выборе даты не сохраняется и не реагирует на чекбокс" - -**Анализ:** -- Checkbox MAT-1/MAT-2 не toggle -- Date selection уже работала (исправлена в v4.0.6) - -### ✅ Решение - -**Добавить логирование и toggle в backend:** -```typescript -// src/index.tsx -app.patch('/api/records/:id/material-confirmed', optionalAuthMiddleware, async (c) => { - const id = parseInt(c.req.param('id')) - - // Read current value - const current = await c.env.DB.prepare(` - SELECT material_confirmed FROM status_checkboxes WHERE record_id = ? - `).bind(id).first() - - // Toggle: 0 → 1, 1 → 0 - const newValue = current.material_confirmed === 1 ? 0 : 1 - - // Update - await c.env.DB.prepare(` - UPDATE status_checkboxes SET material_confirmed = ? WHERE record_id = ? - `).bind(newValue, id).run() - - return c.json({ success: true, newValue }) -}) -``` - -**Тестирование:** -```bash -# Toggle 0 → 1 -curl -X PATCH http://localhost:3000/api/records/1/material-confirmed -# {"success":true,"newValue":1} ✅ - -# Check database -sqlite3 .wrangler/state/v3/d1/webapp-production.sqlite \ - "SELECT material_confirmed FROM status_checkboxes WHERE record_id=1" -# 1 ✅ - -# Toggle 1 → 0 -curl -X PATCH http://localhost:3000/api/records/1/material-confirmed -# {"success":true,"newValue":0} ✅ -``` - -**Коммит:** -``` -0f3d8d9 - Fix MAT-1/MAT-2 checkbox toggle endpoints (v4.0.9) -``` - -**Результат:** -- ✅ MAT-1 checkbox toggle работает (0 ↔ 1) -- ✅ MAT-2 checkbox toggle работает (0 ↔ 1) -- ✅ Database обновляется корректно -- ✅ Date selection работала с v4.0.6 - ---- - -## v4.0.10 - Date Picker Click (Попытка 1) (28.11.2025, 16:00) - -### ❌ Проблема -**User:** "MAT-1 MAT-2 не работает выбор даты при нажатии на дату" - -- Клик на дату не открывает calendar picker -- Кнопка "Clear" работает -- Checkbox toggle работает (v4.0.9) - -### 🔍 Анализ - -**Root Cause:** -```html - - -
- 10.11.2025 -
-``` - -**Проблемы:** -1. `showPicker()` не работает во всех браузерах/контекстах -2. `pointer-events-none` блокирует direct clicks -3. `showPicker()` требует user gesture - -### ✅ Решение (Попытка 1) - -**Заменить `showPicker()` на `click()`:** -```javascript -// Было: -onclick="document.getElementById('materialDate').showPicker()" - -// Стало: -onclick="document.getElementById('materialDate').click()" -``` - -**Убрать `pointer-events-none`:** -```html - -class="absolute opacity-0 pointer-events-none w-0 h-0" - - -class="absolute opacity-0 w-0 h-0" -``` - -**Коммит:** -``` -76c62bb - Fix date picker click for MAT-1/MAT-2 (v4.0.10) -``` - -**Результат:** -❌ Не сработало - браузер блокирует programmatic `.click()` - ---- - -## v4.0.11 - Date Picker Label (Попытка 2) (28.11.2025, 17:00) - -### ❌ Проблема -**User:** "событие не происходит а в консоле накапливаеться счетчик" - -- Date picker click events не срабатывают -- Console errors накапливаются -- Browser warning: "Игнорируем неподдерживаемые entryTypes: longtask" - -### 🔍 Анализ - -**Root Cause:** -- `onclick="input.click()"` - unreliable, блокируется браузером -- Programmatic clicks на hidden inputs часто блокируются security - -### ✅ Решение (Попытка 2) - -**Использовать `