diff --git a/module/oc_telegram_shop/upload/admin/controller/extension/module/tgshop.php b/module/oc_telegram_shop/upload/admin/controller/extension/module/tgshop.php index b2a9282..d7b3e68 100755 --- a/module/oc_telegram_shop/upload/admin/controller/extension/module/tgshop.php +++ b/module/oc_telegram_shop/upload/admin/controller/extension/module/tgshop.php @@ -266,6 +266,7 @@ TEXT, 'module_tgshop_customer_notification_template' => <<orderCreateService->create($request->json(), [ + $order = $this->orderCreateService->create($request->json(), [ 'ip' => $request->getClientIp(), 'user_agent' => $request->getUserAgent(), ]); - return new JsonResponse([], Response::HTTP_CREATED); + return new JsonResponse([ + 'data' => $order, + ], Response::HTTP_CREATED); } catch (OrderValidationFailedException $exception) { return new JsonResponse([ 'data' => $exception->getErrorBag()->firstOfAll(), diff --git a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/OrderCreateService.php b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/OrderCreateService.php index 554bac9..ffd2e4e 100755 --- a/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/OrderCreateService.php +++ b/module/oc_telegram_shop/upload/oc_telegram_shop/src/Services/OrderCreateService.php @@ -6,6 +6,8 @@ namespace App\Services; use App\Decorators\OcRegistryDecorator; use App\Exceptions\OrderValidationFailedException; +use Cassandra\Date; +use DateTime; use Exception; use Openguru\OpenCartFramework\Config\Settings; use Openguru\OpenCartFramework\Logger\LoggerInterface; @@ -44,7 +46,7 @@ class OrderCreateService $this->validator = $validator; } - public function create(array $data, array $meta = []): void + public function create(array $data, array $meta = []): array { try { $this->validate($data); @@ -178,6 +180,19 @@ class OrderCreateService $orderData['total'] = $cart['total_text'] ?? ''; $this->sendNotifications($orderData, $data['tgData']); + + $dateTimeFormatted = ''; + try { + $dateTimeFormatted = (new DateTime($orderData['date_added']))->format('d.m.Y H:i'); + } catch (Exception $exception) { + $this->logger->logException($exception); + } + + return [ + 'id' => $orderData['order_id'], + 'created_at' => $dateTimeFormatted, + 'total' => $orderData['total'], + ]; } /** @@ -220,7 +235,7 @@ class OrderCreateService if ($chatId && $template) { $message = $this->telegramService->prepareMessage($template, $variables); try { - $this->telegramService->sendMessage($chatId, $message); + $this->telegramService->sendMessage((int) $chatId, $message); } catch (Exception $exception) { $this->logger->error("Telegram sendMessage to owner error. ChatID: $chatId, Message: $message"); $this->logger->logException($exception); @@ -247,10 +262,8 @@ class OrderCreateService return [ 'firstName' => 'required', 'lastName' => 'required', - 'email' => 'required|email', 'phone' => 'required', - 'address' => 'required', - 'comment' => 'required', + 'email' => 'email', ]; } } \ No newline at end of file diff --git a/spa/package-lock.json b/spa/package-lock.json index c27aea3..3cb80e5 100644 --- a/spa/package-lock.json +++ b/spa/package-lock.json @@ -16,6 +16,7 @@ "pinia": "^3.0.3", "swiper": "^11.2.10", "vue": "^3.5.17", + "vue-imask": "^7.6.1", "vue-router": "^4.5.1", "vue-tg": "^0.9.0-beta.10" }, @@ -74,6 +75,18 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.3.tgz", + "integrity": "sha512-LKYxD2CIfocUFNREQ1yk+dW+8OH8CRqmgatBZYXb+XhuObO8wsDpEoCNri5bKld9cnj8xukqZjxSX8p1YiRF8Q==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.43.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", @@ -1410,6 +1423,17 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/core-js-pure": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.0.tgz", + "integrity": "sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -1590,6 +1614,18 @@ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", "license": "MIT" }, + "node_modules/imask": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/imask/-/imask-7.6.1.tgz", + "integrity": "sha512-sJlIFM7eathUEMChTh9Mrfw/IgiWgJqBKq2VNbyXvBZ7ev/IlO6/KQTKlV/Fm+viQMLrFLG/zCuudrLIwgK2dg==", + "license": "MIT", + "dependencies": { + "@babel/runtime-corejs3": "^7.24.4" + }, + "engines": { + "npm": ">=4.0.0" + } + }, "node_modules/is-what": { "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", @@ -2305,6 +2341,45 @@ } } }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-imask": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/vue-imask/-/vue-imask-7.6.1.tgz", + "integrity": "sha512-/5ZVNerI9Dn6gZ/cSCYGiZK4JHdwsEBgHBTRpVwS2U0URxK/Jt5FlQuoL1DhbxC6t4ElcVMWYOvkE2hR8hdt1w==", + "license": "MIT", + "dependencies": { + "imask": "^7.6.1", + "vue-demi": "^0.14.7" + }, + "peerDependencies": { + "vue": ">=2.7" + } + }, "node_modules/vue-router": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", diff --git a/spa/package.json b/spa/package.json index 9ad533c..7cd2e12 100644 --- a/spa/package.json +++ b/spa/package.json @@ -17,6 +17,7 @@ "pinia": "^3.0.3", "swiper": "^11.2.10", "vue": "^3.5.17", + "vue-imask": "^7.6.1", "vue-router": "^4.5.1", "vue-tg": "^0.9.0-beta.10" }, diff --git a/spa/src/components/CartButton.vue b/spa/src/components/CartButton.vue index 84818b9..05b709b 100644 --- a/spa/src/components/CartButton.vue +++ b/spa/src/components/CartButton.vue @@ -24,7 +24,7 @@ const router = useRouter(); const route = useRoute(); const isCartBtnShow = computed(() => { - return route.name !== 'cart' && route.name !== 'checkout'; + return route.name !== 'cart' && route.name !== 'checkout' && route.name !== 'order_created'; }); diff --git a/spa/src/components/Form/TgInput.vue b/spa/src/components/Form/TgInput.vue index f9130a9..8dc21b9 100644 --- a/spa/src/components/Form/TgInput.vue +++ b/spa/src/components/Form/TgInput.vue @@ -3,11 +3,12 @@

{{ error }}

@@ -32,6 +33,11 @@ const props = defineProps({ type: String, default: 'text', }, + + maxlength: { + type: Number, + default: 1000, + } }); const emits = defineEmits(['clearError']); diff --git a/spa/src/components/Form/TgTextarea.vue b/spa/src/components/Form/TgTextarea.vue index 670a76f..71a6161 100644 --- a/spa/src/components/Form/TgTextarea.vue +++ b/spa/src/components/Form/TgTextarea.vue @@ -1,12 +1,13 @@