@fleetbase/storefront-engine 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/.php-cs-fixer.php +29 -0
  2. package/LICENSE.md +16 -4
  3. package/README.md +106 -13
  4. package/app/adapters/addon-category.js +1 -1
  5. package/app/adapters/gateway.js +1 -1
  6. package/app/adapters/network.js +1 -1
  7. package/app/adapters/notification-channel.js +1 -1
  8. package/app/adapters/product-addon-category.js +1 -1
  9. package/app/adapters/product-addon.js +1 -1
  10. package/app/adapters/product-hour.js +1 -1
  11. package/app/adapters/product-store-location.js +1 -1
  12. package/app/adapters/product-variant-option.js +1 -1
  13. package/app/adapters/product-variant.js +1 -1
  14. package/app/adapters/product.js +1 -1
  15. package/app/adapters/store-hour.js +1 -1
  16. package/app/adapters/store-location.js +1 -1
  17. package/app/adapters/store.js +1 -1
  18. package/app/adapters/storefront.js +1 -1
  19. package/app/components/file-record.js +1 -1
  20. package/app/components/modals/add-store-hours.js +1 -1
  21. package/app/components/modals/add-store-to-category.js +1 -1
  22. package/app/components/modals/add-stores-to-network.js +1 -1
  23. package/app/components/modals/assign-driver.js +1 -1
  24. package/app/components/modals/create-first-store.js +1 -1
  25. package/app/components/modals/create-gateway.js +1 -1
  26. package/app/components/modals/create-network-category.js +1 -1
  27. package/app/components/modals/create-network.js +1 -1
  28. package/app/components/modals/create-new-variant.js +1 -1
  29. package/app/components/modals/create-notification-channel.js +1 -1
  30. package/app/components/modals/create-product-category.js +1 -1
  31. package/app/components/modals/create-store.js +1 -1
  32. package/app/components/modals/edit-network.js +1 -1
  33. package/app/components/modals/import-products.js +1 -1
  34. package/app/components/modals/incoming-order.js +1 -1
  35. package/app/components/modals/manage-addons.js +1 -1
  36. package/app/components/modals/order-ready-assign-driver.js +1 -1
  37. package/app/components/modals/select-addon-category.js +1 -1
  38. package/app/components/modals/share-network.js +1 -1
  39. package/app/components/modals/store-details.js +1 -1
  40. package/app/components/modals/store-form.js +1 -1
  41. package/app/components/modals/store-location-form.js +1 -1
  42. package/app/components/network-category-picker.js +1 -1
  43. package/app/components/order-card.js +1 -1
  44. package/app/components/schedule-manager.js +1 -1
  45. package/app/components/settings-container.js +1 -1
  46. package/app/components/store-selector.js +1 -1
  47. package/app/components/widget/customers.js +1 -1
  48. package/app/components/widget/orders.js +1 -1
  49. package/app/components/widget/storefront-metrics.js +1 -1
  50. package/app/controllers/application.js +1 -1
  51. package/app/controllers/customers/index.js +1 -1
  52. package/app/controllers/home.js +1 -1
  53. package/app/controllers/networks/index/network/customers.js +1 -1
  54. package/app/controllers/networks/index/network/index.js +1 -1
  55. package/app/controllers/networks/index/network/orders.js +1 -1
  56. package/app/controllers/networks/index/network/stores.js +1 -1
  57. package/app/controllers/networks/index/network.js +1 -1
  58. package/app/controllers/networks/index.js +1 -1
  59. package/app/controllers/orders/index.js +1 -1
  60. package/app/controllers/products/index/category/edit.js +1 -1
  61. package/app/controllers/products/index/category/new.js +1 -1
  62. package/app/controllers/products/index/category.js +1 -1
  63. package/app/controllers/products/index/index/edit.js +1 -1
  64. package/app/controllers/products/index/index.js +1 -1
  65. package/app/controllers/products/index.js +1 -1
  66. package/app/controllers/settings/api.js +1 -1
  67. package/app/controllers/settings/gateways.js +1 -1
  68. package/app/controllers/settings/index.js +1 -1
  69. package/app/controllers/settings/locations.js +1 -1
  70. package/app/controllers/settings/notifications.js +1 -1
  71. package/app/helpers/get-tip-amount.js +1 -1
  72. package/app/models/addon-category.js +1 -1
  73. package/app/models/gateway.js +1 -1
  74. package/app/models/network.js +1 -1
  75. package/app/models/notification-channel.js +1 -1
  76. package/app/models/product-addon-category.js +1 -1
  77. package/app/models/product-addon.js +1 -1
  78. package/app/models/product-hour.js +1 -1
  79. package/app/models/product-store-location.js +1 -1
  80. package/app/models/product-variant-option.js +1 -1
  81. package/app/models/product-variant.js +1 -1
  82. package/app/models/product.js +1 -1
  83. package/app/models/store-hour.js +1 -1
  84. package/app/models/store-location.js +1 -1
  85. package/app/models/store.js +1 -1
  86. package/app/routes/application.js +1 -1
  87. package/app/routes/customers/index/edit.js +1 -1
  88. package/app/routes/customers/index.js +1 -1
  89. package/app/routes/home.js +1 -1
  90. package/app/routes/networks/index/network/customers.js +1 -1
  91. package/app/routes/networks/index/network/index.js +1 -1
  92. package/app/routes/networks/index/network/orders.js +1 -1
  93. package/app/routes/networks/index/network/stores.js +1 -1
  94. package/app/routes/networks/index/network.js +1 -1
  95. package/app/routes/networks/index.js +1 -1
  96. package/app/routes/orders/index/edit.js +1 -1
  97. package/app/routes/orders/index/new.js +1 -1
  98. package/app/routes/orders/index/view.js +1 -1
  99. package/app/routes/orders/index.js +1 -1
  100. package/app/routes/products/index/category/edit.js +1 -1
  101. package/app/routes/products/index/category/new.js +1 -1
  102. package/app/routes/products/index/category.js +1 -1
  103. package/app/routes/products/index/index/edit.js +1 -1
  104. package/app/routes/products/index/index.js +1 -1
  105. package/app/routes/products/index.js +1 -1
  106. package/app/routes/settings/api.js +1 -1
  107. package/app/routes/settings/gateways.js +1 -1
  108. package/app/routes/settings/index.js +1 -1
  109. package/app/routes/settings/locations.js +1 -1
  110. package/app/routes/settings/notifications.js +1 -1
  111. package/app/serializers/addon-category.js +1 -1
  112. package/app/serializers/network.js +1 -1
  113. package/app/serializers/notification-channel.js +1 -1
  114. package/app/serializers/product-addon-category.js +1 -1
  115. package/app/serializers/product-variant.js +1 -1
  116. package/app/serializers/product.js +1 -1
  117. package/app/serializers/store-location.js +1 -1
  118. package/app/serializers/store.js +1 -1
  119. package/app/services/storefront.js +1 -1
  120. package/app/templates/customers/index/edit.js +1 -1
  121. package/app/templates/customers/index.js +1 -1
  122. package/app/templates/home.js +1 -1
  123. package/app/templates/networks/index/network/customers.js +1 -1
  124. package/app/templates/networks/index/network/index.js +1 -1
  125. package/app/templates/networks/index/network/orders.js +1 -1
  126. package/app/templates/networks/index/network/stores.js +1 -1
  127. package/app/templates/networks/index/network.js +1 -1
  128. package/app/templates/networks/index.js +1 -1
  129. package/app/templates/orders/index/edit.js +1 -1
  130. package/app/templates/orders/index/new.js +1 -1
  131. package/app/templates/orders/index/view.js +1 -1
  132. package/app/templates/orders/index.js +1 -1
  133. package/app/templates/products/index/category/edit.js +1 -1
  134. package/app/templates/products/index/category/new.js +1 -1
  135. package/app/templates/products/index/category.js +1 -1
  136. package/app/templates/products/index/index/edit.js +1 -1
  137. package/app/templates/products/index/index.js +1 -1
  138. package/app/templates/products/index.js +1 -1
  139. package/app/templates/settings/api.js +1 -1
  140. package/app/templates/settings/gateways.js +1 -1
  141. package/app/templates/settings/index.js +1 -1
  142. package/app/templates/settings/locations.js +1 -1
  143. package/app/templates/settings/notifications.js +1 -1
  144. package/app/templates/settings.js +1 -1
  145. package/app/utils/create-shareable-link.js +1 -1
  146. package/app/utils/get-gateway-schemas.js +1 -1
  147. package/app/utils/get-notification-schemas.js +1 -1
  148. package/composer.json +88 -0
  149. package/extension.json +10 -0
  150. package/package.json +6 -6
  151. package/phpstan.neon.dist +8 -0
  152. package/phpunit.xml.dist +16 -0
  153. package/server/.gitattributes +14 -0
  154. package/server/README.md +40 -0
  155. package/server/config/api.php +101 -0
  156. package/server/config/database.connections.php +57 -0
  157. package/server/config/storefront.php +19 -0
  158. package/server/config/twilio-notification-channel.php +36 -0
  159. package/server/migrations/2023_05_03_025307_create_carts_table.php +44 -0
  160. package/server/migrations/2023_05_03_025307_create_checkouts_table.php +51 -0
  161. package/server/migrations/2023_05_03_025307_create_gateways_table.php +48 -0
  162. package/server/migrations/2023_05_03_025307_create_network_stores_table.php +36 -0
  163. package/server/migrations/2023_05_03_025307_create_networks_table.php +56 -0
  164. package/server/migrations/2023_05_03_025307_create_notification_channels_table.php +43 -0
  165. package/server/migrations/2023_05_03_025307_create_payment_methods_table.php +44 -0
  166. package/server/migrations/2023_05_03_025307_create_product_addon_categories_table.php +38 -0
  167. package/server/migrations/2023_05_03_025307_create_product_addons_table.php +43 -0
  168. package/server/migrations/2023_05_03_025307_create_product_hours_table.php +37 -0
  169. package/server/migrations/2023_05_03_025307_create_product_store_locations_table.php +34 -0
  170. package/server/migrations/2023_05_03_025307_create_product_variant_options_table.php +40 -0
  171. package/server/migrations/2023_05_03_025307_create_product_variants_table.php +44 -0
  172. package/server/migrations/2023_05_03_025307_create_products_table.php +59 -0
  173. package/server/migrations/2023_05_03_025307_create_reviews_table.php +41 -0
  174. package/server/migrations/2023_05_03_025307_create_store_hours_table.php +37 -0
  175. package/server/migrations/2023_05_03_025307_create_store_locations_table.php +38 -0
  176. package/server/migrations/2023_05_03_025307_create_stores_table.php +57 -0
  177. package/server/migrations/2023_05_03_025307_create_votes_table.php +39 -0
  178. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_carts_table.php +40 -0
  179. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_checkouts_table.php +48 -0
  180. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_gateways_table.php +40 -0
  181. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_network_stores_table.php +40 -0
  182. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_networks_table.php +42 -0
  183. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_notification_channels_table.php +40 -0
  184. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_payment_methods_table.php +40 -0
  185. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addon_categories_table.php +38 -0
  186. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_addons_table.php +38 -0
  187. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_hours_table.php +32 -0
  188. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_store_locations_table.php +34 -0
  189. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variant_options_table.php +32 -0
  190. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_product_variants_table.php +32 -0
  191. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_products_table.php +44 -0
  192. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_reviews_table.php +38 -0
  193. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_hours_table.php +32 -0
  194. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_store_locations_table.php +40 -0
  195. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_stores_table.php +42 -0
  196. package/server/migrations/2023_05_03_025310_add_foreign_keys_to_votes_table.php +38 -0
  197. package/server/src/Auth/Schemas/Storefront.php +95 -0
  198. package/server/src/Console/Commands/NotifyStorefrontOrderNearby.php +86 -0
  199. package/server/src/Expansions/EntityExpansion.php +44 -0
  200. package/server/src/Http/Controllers/ActionController.php +119 -0
  201. package/server/src/Http/Controllers/AddonCategoryController.php +13 -0
  202. package/server/src/Http/Controllers/CustomerController.php +13 -0
  203. package/server/src/Http/Controllers/GatewayController.php +13 -0
  204. package/server/src/Http/Controllers/MetricsController.php +71 -0
  205. package/server/src/Http/Controllers/NetworkController.php +170 -0
  206. package/server/src/Http/Controllers/NotificationChannelController.php +13 -0
  207. package/server/src/Http/Controllers/OrderController.php +154 -0
  208. package/server/src/Http/Controllers/ProductAddonCategoryController.php +14 -0
  209. package/server/src/Http/Controllers/ProductAddonController.php +14 -0
  210. package/server/src/Http/Controllers/ProductController.php +123 -0
  211. package/server/src/Http/Controllers/ProductHourController.php +13 -0
  212. package/server/src/Http/Controllers/ProductVariantController.php +13 -0
  213. package/server/src/Http/Controllers/ProductVariantOptionController.php +13 -0
  214. package/server/src/Http/Controllers/ReviewController.php +13 -0
  215. package/server/src/Http/Controllers/StoreController.php +26 -0
  216. package/server/src/Http/Controllers/StoreHourController.php +13 -0
  217. package/server/src/Http/Controllers/StoreLocationController.php +13 -0
  218. package/server/src/Http/Controllers/StorefrontController.php +15 -0
  219. package/server/src/Http/Controllers/VoteController.php +13 -0
  220. package/server/src/Http/Controllers/v1/CartController.php +161 -0
  221. package/server/src/Http/Controllers/v1/CategoryController.php +138 -0
  222. package/server/src/Http/Controllers/v1/CheckoutController.php +957 -0
  223. package/server/src/Http/Controllers/v1/CustomerController.php +482 -0
  224. package/server/src/Http/Controllers/v1/GatewayControllerController.php +11 -0
  225. package/server/src/Http/Controllers/v1/NetworkController.php +281 -0
  226. package/server/src/Http/Controllers/v1/PaymentMethodController.php +11 -0
  227. package/server/src/Http/Controllers/v1/ProductController.php +94 -0
  228. package/server/src/Http/Controllers/v1/ReviewController.php +270 -0
  229. package/server/src/Http/Controllers/v1/ServiceQuoteController.php +402 -0
  230. package/server/src/Http/Controllers/v1/StoreController.php +176 -0
  231. package/server/src/Http/Filter/AddonCategoryFilter.php +19 -0
  232. package/server/src/Http/Filter/CustomerFilter.php +18 -0
  233. package/server/src/Http/Filter/GatewayFilter.php +13 -0
  234. package/server/src/Http/Filter/NetworkFilter.php +18 -0
  235. package/server/src/Http/Filter/NotificationChannelFilter.php +13 -0
  236. package/server/src/Http/Filter/OrderFilter.php +46 -0
  237. package/server/src/Http/Filter/ProductFilter.php +28 -0
  238. package/server/src/Http/Filter/StoreFilter.php +42 -0
  239. package/server/src/Http/Filter/StoreLocationFilter.php +23 -0
  240. package/server/src/Http/Middleware/SetStorefrontSession.php +130 -0
  241. package/server/src/Http/Requests/AddStoreToNetworkCategory.php +45 -0
  242. package/server/src/Http/Requests/CaptureOrderRequest.php +30 -0
  243. package/server/src/Http/Requests/CreateCustomerRequest.php +44 -0
  244. package/server/src/Http/Requests/CreateReviewRequest.php +34 -0
  245. package/server/src/Http/Requests/GetServiceQuoteFromCart.php +40 -0
  246. package/server/src/Http/Requests/InitializeCheckoutRequest.php +38 -0
  247. package/server/src/Http/Requests/NetworkActionRequest.php +43 -0
  248. package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +31 -0
  249. package/server/src/Http/Resources/Cart.php +31 -0
  250. package/server/src/Http/Resources/Category.php +48 -0
  251. package/server/src/Http/Resources/Customer.php +36 -0
  252. package/server/src/Http/Resources/Gateway.php +32 -0
  253. package/server/src/Http/Resources/Media.php +29 -0
  254. package/server/src/Http/Resources/Network.php +48 -0
  255. package/server/src/Http/Resources/Product.php +209 -0
  256. package/server/src/Http/Resources/Review.php +45 -0
  257. package/server/src/Http/Resources/ReviewCustomer.php +60 -0
  258. package/server/src/Http/Resources/Store.php +76 -0
  259. package/server/src/Http/Resources/StoreHour.php +29 -0
  260. package/server/src/Http/Resources/StoreLocation.php +33 -0
  261. package/server/src/Imports/ProductsImport.php +20 -0
  262. package/server/src/Jobs/DownloadProductImageUrl.php +60 -0
  263. package/server/src/Listeners/HandleOrderCompleted.php +31 -0
  264. package/server/src/Listeners/HandleOrderDispatched.php +34 -0
  265. package/server/src/Listeners/HandleOrderDriverAssigned.php +37 -0
  266. package/server/src/Listeners/HandleOrderStarted.php +27 -0
  267. package/server/src/Mail/StorefrontNetworkInvite.php +48 -0
  268. package/server/src/Models/AddonCategory.php +30 -0
  269. package/server/src/Models/Cart.php +691 -0
  270. package/server/src/Models/Checkout.php +166 -0
  271. package/server/src/Models/Customer.php +88 -0
  272. package/server/src/Models/Gateway.php +165 -0
  273. package/server/src/Models/Network.php +300 -0
  274. package/server/src/Models/NetworkStore.php +86 -0
  275. package/server/src/Models/NotificationChannel.php +147 -0
  276. package/server/src/Models/PaymentMethod.php +99 -0
  277. package/server/src/Models/Product.php +315 -0
  278. package/server/src/Models/ProductAddon.php +128 -0
  279. package/server/src/Models/ProductAddonCategory.php +90 -0
  280. package/server/src/Models/ProductHour.php +59 -0
  281. package/server/src/Models/ProductStoreLocation.php +77 -0
  282. package/server/src/Models/ProductVariant.php +125 -0
  283. package/server/src/Models/ProductVariantOption.php +86 -0
  284. package/server/src/Models/Review.php +127 -0
  285. package/server/src/Models/Store.php +478 -0
  286. package/server/src/Models/StoreHour.php +59 -0
  287. package/server/src/Models/StoreLocation.php +126 -0
  288. package/server/src/Models/StorefrontModel.php +22 -0
  289. package/server/src/Models/Vote.php +84 -0
  290. package/server/src/Notifications/StorefrontOrderCanceled.php +196 -0
  291. package/server/src/Notifications/StorefrontOrderCompleted.php +201 -0
  292. package/server/src/Notifications/StorefrontOrderCreated.php +157 -0
  293. package/server/src/Notifications/StorefrontOrderDriverAssigned.php +200 -0
  294. package/server/src/Notifications/StorefrontOrderEnroute.php +199 -0
  295. package/server/src/Notifications/StorefrontOrderNearby.php +201 -0
  296. package/server/src/Notifications/StorefrontOrderPreparing.php +202 -0
  297. package/server/src/Notifications/StorefrontOrderReadyForPickup.php +202 -0
  298. package/server/src/Observers/NetworkObserver.php +40 -0
  299. package/server/src/Observers/ProductObserver.php +118 -0
  300. package/server/src/Providers/EventServiceProvider.php +23 -0
  301. package/server/src/Providers/StorefrontServiceProvider.php +103 -0
  302. package/server/src/Support/Metrics.php +193 -0
  303. package/server/src/Support/OrderConfig.php +13 -0
  304. package/server/src/Support/QPay.php +208 -0
  305. package/server/src/Support/Storefront.php +201 -0
  306. package/server/src/routes.php +180 -0
  307. package/server/tests/Feature.php +5 -0
@@ -0,0 +1,32 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ return new class extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::connection(config('storefront.connection.db'))->table('product_hours', function (Blueprint $table) {
17
+ $table->foreign(['product_uuid'])->references(['uuid'])->on('products')->onUpdate('NO ACTION')->onDelete('NO ACTION');
18
+ });
19
+ }
20
+
21
+ /**
22
+ * Reverse the migrations.
23
+ *
24
+ * @return void
25
+ */
26
+ public function down()
27
+ {
28
+ Schema::connection(config('storefront.connection.db'))->table('product_hours', function (Blueprint $table) {
29
+ $table->dropForeign('product_hours_product_uuid_foreign');
30
+ });
31
+ }
32
+ };
@@ -0,0 +1,34 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ return new class extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::connection(config('storefront.connection.db'))->table('product_store_locations', function (Blueprint $table) {
17
+ $table->foreign(['product_uuid'])->references(['uuid'])->on('products')->onUpdate('NO ACTION')->onDelete('NO ACTION');
18
+ $table->foreign(['store_location_uuid'])->references(['uuid'])->on('store_locations')->onUpdate('NO ACTION')->onDelete('NO ACTION');
19
+ });
20
+ }
21
+
22
+ /**
23
+ * Reverse the migrations.
24
+ *
25
+ * @return void
26
+ */
27
+ public function down()
28
+ {
29
+ Schema::connection(config('storefront.connection.db'))->table('product_store_locations', function (Blueprint $table) {
30
+ $table->dropForeign('product_store_locations_product_uuid_foreign');
31
+ $table->dropForeign('product_store_locations_store_location_uuid_foreign');
32
+ });
33
+ }
34
+ };
@@ -0,0 +1,32 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ return new class extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::connection(config('storefront.connection.db'))->table('product_variant_options', function (Blueprint $table) {
17
+ $table->foreign(['product_variant_uuid'])->references(['uuid'])->on('product_variants')->onUpdate('NO ACTION')->onDelete('NO ACTION');
18
+ });
19
+ }
20
+
21
+ /**
22
+ * Reverse the migrations.
23
+ *
24
+ * @return void
25
+ */
26
+ public function down()
27
+ {
28
+ Schema::connection(config('storefront.connection.db'))->table('product_variant_options', function (Blueprint $table) {
29
+ $table->dropForeign('product_variant_options_product_variant_uuid_foreign');
30
+ });
31
+ }
32
+ };
@@ -0,0 +1,32 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ return new class extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::connection(config('storefront.connection.db'))->table('product_variants', function (Blueprint $table) {
17
+ $table->foreign(['product_uuid'])->references(['uuid'])->on('products')->onUpdate('NO ACTION')->onDelete('NO ACTION');
18
+ });
19
+ }
20
+
21
+ /**
22
+ * Reverse the migrations.
23
+ *
24
+ * @return void
25
+ */
26
+ public function down()
27
+ {
28
+ Schema::connection(config('storefront.connection.db'))->table('product_variants', function (Blueprint $table) {
29
+ $table->dropForeign('product_variants_product_uuid_foreign');
30
+ });
31
+ }
32
+ };
@@ -0,0 +1,44 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Database\Query\Expression;
6
+ use Illuminate\Support\Facades\Schema;
7
+ use Fleetbase\Support\Utils;
8
+
9
+ return new class extends Migration
10
+ {
11
+ /**
12
+ * Run the migrations.
13
+ *
14
+ * @return void
15
+ */
16
+ public function up()
17
+ {
18
+ $databaseName = Utils::getFleetbaseDatabaseName();
19
+
20
+ Schema::connection(config('storefront.connection.db'))->table('products', function (Blueprint $table) use ($databaseName) {
21
+ $table->foreign(['category_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.categories'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
22
+ $table->foreign(['company_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.companies'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
23
+ $table->foreign(['created_by_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.users'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
24
+ $table->foreign(['primary_image_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.files'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
25
+ $table->foreign(['store_uuid'])->references(['uuid'])->on('stores')->onUpdate('NO ACTION')->onDelete('NO ACTION');
26
+ });
27
+ }
28
+
29
+ /**
30
+ * Reverse the migrations.
31
+ *
32
+ * @return void
33
+ */
34
+ public function down()
35
+ {
36
+ Schema::connection(config('storefront.connection.db'))->table('products', function (Blueprint $table) {
37
+ $table->dropForeign('products_category_uuid_foreign');
38
+ $table->dropForeign('products_company_uuid_foreign');
39
+ $table->dropForeign('products_created_by_uuid_foreign');
40
+ $table->dropForeign('products_primary_image_uuid_foreign');
41
+ $table->dropForeign('products_store_uuid_foreign');
42
+ });
43
+ }
44
+ };
@@ -0,0 +1,38 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Database\Query\Expression;
6
+ use Illuminate\Support\Facades\Schema;
7
+ use Fleetbase\Support\Utils;
8
+
9
+ return new class extends Migration
10
+ {
11
+ /**
12
+ * Run the migrations.
13
+ *
14
+ * @return void
15
+ */
16
+ public function up()
17
+ {
18
+ $databaseName = Utils::getFleetbaseDatabaseName();
19
+
20
+ Schema::connection(config('storefront.connection.db'))->table('reviews', function (Blueprint $table) use ($databaseName) {
21
+ $table->foreign(['created_by_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.users'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
22
+ $table->foreign(['customer_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.contacts'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Reverse the migrations.
28
+ *
29
+ * @return void
30
+ */
31
+ public function down()
32
+ {
33
+ Schema::connection(config('storefront.connection.db'))->table('reviews', function (Blueprint $table) {
34
+ $table->dropForeign('reviews_created_by_uuid_foreign');
35
+ $table->dropForeign('reviews_customer_uuid_foreign');
36
+ });
37
+ }
38
+ };
@@ -0,0 +1,32 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Support\Facades\Schema;
6
+
7
+ return new class extends Migration
8
+ {
9
+ /**
10
+ * Run the migrations.
11
+ *
12
+ * @return void
13
+ */
14
+ public function up()
15
+ {
16
+ Schema::connection(config('storefront.connection.db'))->table('store_hours', function (Blueprint $table) {
17
+ $table->foreign(['store_location_uuid'])->references(['uuid'])->on('store_locations')->onUpdate('NO ACTION')->onDelete('NO ACTION');
18
+ });
19
+ }
20
+
21
+ /**
22
+ * Reverse the migrations.
23
+ *
24
+ * @return void
25
+ */
26
+ public function down()
27
+ {
28
+ Schema::connection(config('storefront.connection.db'))->table('store_hours', function (Blueprint $table) {
29
+ $table->dropForeign('store_hours_store_location_uuid_foreign');
30
+ });
31
+ }
32
+ };
@@ -0,0 +1,40 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Database\Query\Expression;
6
+ use Illuminate\Support\Facades\Schema;
7
+ use Fleetbase\Support\Utils;
8
+
9
+ return new class extends Migration
10
+ {
11
+ /**
12
+ * Run the migrations.
13
+ *
14
+ * @return void
15
+ */
16
+ public function up()
17
+ {
18
+ $databaseName = Utils::getFleetbaseDatabaseName();
19
+
20
+ Schema::connection(config('storefront.connection.db'))->table('store_locations', function (Blueprint $table) use ($databaseName) {
21
+ $table->foreign(['created_by_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.users'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
22
+ $table->foreign(['place_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.places'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
23
+ $table->foreign(['store_uuid'])->references(['uuid'])->on('stores')->onUpdate('NO ACTION')->onDelete('NO ACTION');
24
+ });
25
+ }
26
+
27
+ /**
28
+ * Reverse the migrations.
29
+ *
30
+ * @return void
31
+ */
32
+ public function down()
33
+ {
34
+ Schema::connection(config('storefront.connection.db'))->table('store_locations', function (Blueprint $table) {
35
+ $table->dropForeign('store_locations_created_by_uuid_foreign');
36
+ $table->dropForeign('store_locations_place_uuid_foreign');
37
+ $table->dropForeign('store_locations_store_uuid_foreign');
38
+ });
39
+ }
40
+ };
@@ -0,0 +1,42 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Database\Query\Expression;
6
+ use Illuminate\Support\Facades\Schema;
7
+ use Fleetbase\Support\Utils;
8
+
9
+ return new class extends Migration
10
+ {
11
+ /**
12
+ * Run the migrations.
13
+ *
14
+ * @return void
15
+ */
16
+ public function up()
17
+ {
18
+ $databaseName = Utils::getFleetbaseDatabaseName();
19
+
20
+ Schema::connection(config('storefront.connection.db'))->table('stores', function (Blueprint $table) use ($databaseName) {
21
+ $table->foreign(['backdrop_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.files'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
22
+ $table->foreign(['company_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.companies'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
23
+ $table->foreign(['created_by_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.users'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
24
+ $table->foreign(['logo_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.files'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
25
+ });
26
+ }
27
+
28
+ /**
29
+ * Reverse the migrations.
30
+ *
31
+ * @return void
32
+ */
33
+ public function down()
34
+ {
35
+ Schema::connection(config('storefront.connection.db'))->table('stores', function (Blueprint $table) {
36
+ $table->dropForeign('stores_backdrop_uuid_foreign');
37
+ $table->dropForeign('stores_company_uuid_foreign');
38
+ $table->dropForeign('stores_created_by_uuid_foreign');
39
+ $table->dropForeign('stores_logo_uuid_foreign');
40
+ });
41
+ }
42
+ };
@@ -0,0 +1,38 @@
1
+ <?php
2
+
3
+ use Illuminate\Database\Migrations\Migration;
4
+ use Illuminate\Database\Schema\Blueprint;
5
+ use Illuminate\Database\Query\Expression;
6
+ use Illuminate\Support\Facades\Schema;
7
+ use Fleetbase\Support\Utils;
8
+
9
+ return new class extends Migration
10
+ {
11
+ /**
12
+ * Run the migrations.
13
+ *
14
+ * @return void
15
+ */
16
+ public function up()
17
+ {
18
+ $databaseName = Utils::getFleetbaseDatabaseName();
19
+
20
+ Schema::connection(config('storefront.connection.db'))->table('votes', function (Blueprint $table) use ($databaseName) {
21
+ $table->foreign(['created_by_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.users'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
22
+ $table->foreign(['customer_uuid'])->references(['uuid'])->on(new Expression($databaseName . '.contacts'))->onUpdate('NO ACTION')->onDelete('NO ACTION');
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Reverse the migrations.
28
+ *
29
+ * @return void
30
+ */
31
+ public function down()
32
+ {
33
+ Schema::connection(config('storefront.connection.db'))->table('votes', function (Blueprint $table) {
34
+ $table->dropForeign('votes_created_by_uuid_foreign');
35
+ $table->dropForeign('votes_customer_uuid_foreign');
36
+ });
37
+ }
38
+ };
@@ -0,0 +1,95 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Auth\Schemas;
4
+
5
+ class Storefront
6
+ {
7
+ /**
8
+ * The permission schema Name.
9
+ *
10
+ * @var string
11
+ */
12
+ public string $name = 'storefront';
13
+
14
+ /**
15
+ * The permission schema Polict Name.
16
+ *
17
+ * @var string
18
+ */
19
+ public string $policyName = 'Storefront';
20
+
21
+ /**
22
+ * Guards these permissions should apply to.
23
+ *
24
+ * @var array
25
+ */
26
+ public array $guards = ['web', 'api'];
27
+
28
+ /**
29
+ * The permission schema resources.
30
+ *
31
+ * @var array
32
+ */
33
+ public array $resources = [
34
+ [
35
+ 'name' => 'order',
36
+ 'actions' => ['accept', 'mark-as-ready', 'mark-as-completed', 'reject']
37
+ ],
38
+ [
39
+ 'name' => 'product',
40
+ 'actions' => ['import']
41
+ ],
42
+ [
43
+ 'name' => 'product-addon',
44
+ 'actions' => []
45
+ ],
46
+ [
47
+ 'name' => 'product-addon-category',
48
+ 'actions' => []
49
+ ],
50
+ [
51
+ 'name' => 'product-hour',
52
+ 'actions' => []
53
+ ],
54
+ [
55
+ 'name' => 'product-store-location',
56
+ 'actions' => []
57
+ ],
58
+ [
59
+ 'name' => 'product-variant',
60
+ 'actions' => []
61
+ ],
62
+ [
63
+ 'name' => 'product-variant-option',
64
+ 'actions' => []
65
+ ],
66
+ [
67
+ 'name' => 'gateway',
68
+ 'actions' => []
69
+ ],
70
+ [
71
+ 'name' => 'notification-channel',
72
+ 'actions' => []
73
+ ],
74
+ [
75
+ 'name' => 'network',
76
+ 'actions' => []
77
+ ],
78
+ [
79
+ 'name' => 'network-store',
80
+ 'actions' => []
81
+ ],
82
+ [
83
+ 'name' => 'store',
84
+ 'actions' => []
85
+ ],
86
+ [
87
+ 'name' => 'store-location',
88
+ 'actions' => []
89
+ ],
90
+ [
91
+ 'name' => 'store-hour',
92
+ 'actions' => []
93
+ ]
94
+ ];
95
+ }
@@ -0,0 +1,86 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Console\Commands;
4
+
5
+ use Fleetbase\FleetOps\Models\Order;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\Storefront\Notifications\StorefrontOrderNearby;
8
+ use Illuminate\Console\Command;
9
+
10
+ class NotifyStorefrontOrderNearby extends Command
11
+ {
12
+ /**
13
+ * The name and signature of the console command.
14
+ *
15
+ * @var string
16
+ */
17
+ protected $signature = 'storefront:notify-order-nearby';
18
+
19
+ /**
20
+ * The console command description.
21
+ *
22
+ * @var string
23
+ */
24
+ protected $description = 'Notifies customer when their order is nearby/ reaching';
25
+
26
+ /**
27
+ * Execute the console command.
28
+ *
29
+ * @return int
30
+ */
31
+ public function handle()
32
+ {
33
+ // Get storefront orders that are enroute
34
+ $orders = $this->getActiveStorefrontOrders();
35
+
36
+ // Notify and update
37
+ $this->alert('Found (' . $orders->count() . ') Storefront Orders which are Enroute.');
38
+
39
+ // Iterate each order
40
+ $orders->each(
41
+ function ($order) {
42
+ $origin = $order->payload->getPickupOrFirstWaypoint();
43
+ $destination = $order->payload->getDropoffOrLastWaypoint();
44
+ $matrix = Utils::getDrivingDistanceAndTime($origin, $destination);
45
+ $distance = $matrix->distance;
46
+ $time = $matrix->time;
47
+
48
+ if (!$distance || !$time) {
49
+ return;
50
+ }
51
+
52
+ $this->line('Order ' . $order->public_id . ' is ' . Utils::formatSeconds($time) . ' from being delivered');
53
+ $this->line('Order ' . $order->public_id . ' distance is ' . Utils::formatMeters($distance) . ' away');
54
+
55
+ if (round($distance) < 1500 && $order->missingMeta('storefront_order_nearby')) {
56
+ $this->line('Order ' . $order->public_id . ' is nearby');
57
+ $order->customer->notify(new StorefrontOrderNearby($order, $distance, $time));
58
+ $order->updateMeta('storefront_order_nearby', true);
59
+ }
60
+ }
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Fetches active storefront orders based on certain criteria.
66
+ *
67
+ * @return \Illuminate\Database\Eloquent\Collection
68
+ */
69
+ public function getActiveStorefrontOrders(): \Illuminate\Database\Eloquent\Collection
70
+ {
71
+ return Order::where(
72
+ [
73
+ 'status' => 'driver_enroute',
74
+ 'type' => 'storefront',
75
+ 'dispatched' => true
76
+ ]
77
+ )->with(
78
+ [
79
+ 'payload',
80
+ 'customer'
81
+ ]
82
+ )
83
+ ->withoutGlobalScopes()
84
+ ->get();
85
+ }
86
+ }
@@ -0,0 +1,44 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\Storefront\Expansions;
4
+
5
+ use Fleetbase\Build\Expansion;
6
+
7
+ class EntityExpansion implements Expansion
8
+ {
9
+ /**
10
+ * Get the target class to expand.
11
+ *
12
+ * @return string|Class
13
+ */
14
+ public static function target()
15
+ {
16
+ return \Fleetbase\FleetOps\Models\Entity::class;
17
+ }
18
+
19
+ /**
20
+ * Create a new Entity from a Storefront Product
21
+ *
22
+ * @return \Fleetbase\FleetOps\Models\Entity
23
+ */
24
+ public function fromStorefrontProduct()
25
+ {
26
+ return static function (\Fleetbase\Storefront\Models\Product $product) {
27
+ return new static([
28
+ 'company_uuid' => session('company'),
29
+ 'photo_uuid' => $product->primary_image_uuid,
30
+ 'internal_id' => $product->public_id,
31
+ 'name' => $product->name,
32
+ 'description' => $product->description,
33
+ 'currency' => $product->currency,
34
+ 'sku' => $product->sku,
35
+ 'price' => $product->price,
36
+ 'sale_price' => $product->sale_price,
37
+ 'meta' => [
38
+ 'product_id' => $product->public_id,
39
+ 'image_url' => $product->primary_image_url,
40
+ ]
41
+ ]);
42
+ };
43
+ }
44
+ }