Compare commits
40 Commits
dev
...
tennant/on
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f191b27f9 | |||
| 3401c934b2 | |||
| 6efe8439c7 | |||
| 506f8a5176 | |||
| 03bb7709c4 | |||
| c90a393081 | |||
| a4a8a3ef8f | |||
| f5f4cb4e87 | |||
| d33b435ba5 | |||
| 969e99b3ae | |||
| 3e3b3bfac0 | |||
| f4de2ff5b2 | |||
| fcb8386735 | |||
| 6d077647ba | |||
| 14c81fec1b | |||
| 9a14b8fbbd | |||
| c665222837 | |||
| d61a5d459d | |||
| 8395c7f24d | |||
| 79d402e210 | |||
| b0702b7e15 | |||
| dc5134a6ec | |||
| 801d25b218 | |||
| f6e8716218 | |||
| 8d2250d247 | |||
| 22ef5619f3 | |||
| cdc17a13e2 | |||
| ee9f2ba538 | |||
| 0170a2eabb | |||
| 1e67d27a90 | |||
| 1241e1f7e8 | |||
| 4659c1049d | |||
| 49be167029 | |||
| 164187f47b | |||
| 5aad43f2e3 | |||
| eb1e4df63f | |||
| 131eb1a7ee | |||
| 486129a92f | |||
| 6bc784519f | |||
| b9b5f8ec9c |
48
AGENTS.md
48
AGENTS.md
@@ -8,18 +8,22 @@
|
|||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
This project uses a domain-oriented structure under `app/Domains`.
|
This project uses a domain-oriented structure grouped by business area under
|
||||||
|
`app/Domains`. Cross-cutting modules live under `app/Shared`.
|
||||||
|
|
||||||
Each domain must live in:
|
Business domains must live in:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
app/Domains/<DomainName>/
|
app/Domains/<Area>/<DomainName>/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The current areas are `Core`, `Commerce`, and `Ticketing`. Cross-cutting
|
||||||
|
modules live in `app/Shared/<ModuleName>/`.
|
||||||
|
|
||||||
Supported folders inside each domain:
|
Supported folders inside each domain:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
app/Domains/<DomainName>/
|
app/Domains/<Area>/<DomainName>/
|
||||||
├── Models/
|
├── Models/
|
||||||
├── Controllers/
|
├── Controllers/
|
||||||
├── Requests/
|
├── Requests/
|
||||||
@@ -34,22 +38,28 @@ app/Domains/<DomainName>/
|
|||||||
|
|
||||||
- Root API routes live in `routes/api.php`.
|
- Root API routes live in `routes/api.php`.
|
||||||
- `routes/api.php` should act as an aggregator only.
|
- `routes/api.php` should act as an aggregator only.
|
||||||
- Each domain defines its own routes in `app/Domains/<DomainName>/routes/api.php`.
|
- Each business domain defines its own routes in
|
||||||
|
`app/Domains/<Area>/<DomainName>/routes/api.php`.
|
||||||
|
- Shared modules that expose routes define them in
|
||||||
|
`app/Shared/<ModuleName>/routes/api.php`.
|
||||||
|
|
||||||
## Namespaces
|
## Namespaces
|
||||||
|
|
||||||
Use this namespace pattern:
|
Use this namespace pattern:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
App\Domains\<DomainName>\Models
|
App\Domains\<Area>\<DomainName>\Models
|
||||||
App\Domains\<DomainName>\Controllers
|
App\Domains\<Area>\<DomainName>\Controllers
|
||||||
App\Domains\<DomainName>\Requests
|
App\Domains\<Area>\<DomainName>\Requests
|
||||||
App\Domains\<DomainName>\Resources
|
App\Domains\<Area>\<DomainName>\Resources
|
||||||
App\Domains\<DomainName>\Services
|
App\Domains\<Area>\<DomainName>\Services
|
||||||
App\Domains\<DomainName>\Policies
|
App\Domains\<Area>\<DomainName>\Policies
|
||||||
App\Domains\<DomainName>\Exceptions
|
App\Domains\<Area>\<DomainName>\Exceptions
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For cross-cutting modules, use `App\Shared\<ModuleName>\...`. Reusable enums
|
||||||
|
and rules live directly under `App\Shared`.
|
||||||
|
|
||||||
## Responsibilities
|
## Responsibilities
|
||||||
|
|
||||||
- `Models/`: Eloquent models and model relationships.
|
- `Models/`: Eloquent models and model relationships.
|
||||||
@@ -80,13 +90,19 @@ App\Domains\<DomainName>\Exceptions
|
|||||||
- Namespace, folder, and class names must stay aligned.
|
- Namespace, folder, and class names must stay aligned.
|
||||||
- Route files should be named `api.php`.
|
- Route files should be named `api.php`.
|
||||||
|
|
||||||
## Current Domains
|
## Current Areas and Modules
|
||||||
|
|
||||||
- `Tenant`
|
- `Core`: `Administrator`, `Auth`, `Authorization`, `Bootstrap`, `Client`,
|
||||||
- `Product`
|
`Menu`, `Staff`, `Tenant`.
|
||||||
|
- `Commerce`: `Cart`, `Catalog`, `Purchase`, `Sale`.
|
||||||
|
- `Ticketing`: `Desfile`, `Event`, `FiestaFutbolInfantil`, `Ticket`.
|
||||||
|
- `Shared`: `Attachable`, `Forms`, `Integration`, `Logging`, `MailTest`,
|
||||||
|
`Notification`, `StorageTest`, plus shared enums and rules.
|
||||||
|
|
||||||
## Notes For Future Changes
|
## Notes For Future Changes
|
||||||
|
|
||||||
- New features should be added inside the corresponding domain first.
|
- New features should be added inside the corresponding domain first.
|
||||||
- If a concern does not belong to an existing domain, create a new domain under `app/Domains`.
|
- Add new business features to the appropriate area under `app/Domains`.
|
||||||
|
- Keep generic reusable code in `app/Shared`; do not use it as a catch-all for
|
||||||
|
business features.
|
||||||
- Avoid placing new business code in `app/Http/Controllers` or `app/Models`.
|
- Avoid placing new business code in `app/Http/Controllers` or `app/Models`.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"_postman_id": "76fd6fd2-53b9-4d92-8e02-1ddcc6207fa2",
|
"_postman_id": "76fd6fd2-53b9-4d92-8e02-1ddcc6207fa2",
|
||||||
"name": "ShopIt API — Complete",
|
"name": "ShopIt API — Complete",
|
||||||
"description": "Colección canónica generada desde las rutas reales de Laravel. Incluye 137 operaciones HTTP, presets de configuración para cada integración, ejemplos de payload, filtros, archivos y tokens separados para Storefront, Admin App y Scanner.\n\nUso rápido:\n1. Ajustá `base_url` y las credenciales.\n2. Ejecutá el Login de la aplicación correspondiente; el token se guarda automáticamente.\n3. Ajustá los IDs y códigos de las variables de colección.\n\nRegeneración: `php postman/generate-shopit-collection.php`.",
|
"description": "Colección canónica generada desde las rutas reales de Laravel. Incluye 136 operaciones HTTP, presets de configuración para cada integración, ejemplos de payload, filtros, archivos y tokens separados para Storefront, Admin App y Scanner.\n\nUso rápido:\n1. Ajustá `base_url` y las credenciales.\n2. Ejecutá el Login de la aplicación correspondiente; el token se guarda automáticamente.\n3. Ajustá los IDs y códigos de las variables de colección.\n\nRegeneración: `php postman/generate-shopit-collection.php`.",
|
||||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
||||||
},
|
},
|
||||||
"item": [
|
"item": [
|
||||||
@@ -678,57 +678,6 @@
|
|||||||
},
|
},
|
||||||
"response": []
|
"response": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Create Catalog",
|
|
||||||
"request": {
|
|
||||||
"method": "POST",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Content-Type",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Ruta Laravel: `POST /api/tenants/{tenant:codigo}/catalog-items`\n\nControlador: `App\\Domains\\Catalog\\Controllers\\CatalogController@store`",
|
|
||||||
"url": {
|
|
||||||
"raw": "{{base_url}}/api/tenants/{{tenant_code}}/catalog-items?q=demo&page=1",
|
|
||||||
"host": [
|
|
||||||
"{{base_url}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"tenants",
|
|
||||||
"{{tenant_code}}",
|
|
||||||
"catalog-items"
|
|
||||||
],
|
|
||||||
"query": [
|
|
||||||
{
|
|
||||||
"key": "q",
|
|
||||||
"value": "demo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "page",
|
|
||||||
"value": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": "{\n \"type\": \"standard\",\n \"category_id\": {{category_id}},\n \"slug\": \"producto-demo\",\n \"nombre\": \"Producto Demo\",\n \"descripcion\": \"Producto creado desde Postman\",\n \"precio\": 10000,\n \"inventory_policy\": \"tracked\",\n \"inventory_subject\": \"product\",\n \"max_units_per_user\": 5,\n \"has_tickets\": false,\n \"real_stock\": 100,\n \"images\": [\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\"\n ]\n}",
|
|
||||||
"options": {
|
|
||||||
"raw": {
|
|
||||||
"language": "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Get Catalog",
|
"name": "Get Catalog",
|
||||||
"request": {
|
"request": {
|
||||||
@@ -1907,7 +1856,7 @@
|
|||||||
"description": "Consulta, configura o desvincula cualquier integración usando `{{integration_code}}`.",
|
"description": "Consulta, configura o desvincula cualquier integración usando `{{integration_code}}`.",
|
||||||
"item": [
|
"item": [
|
||||||
{
|
{
|
||||||
"name": "List Website Type Integration",
|
"name": "List Admin Website Type Integration",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -1917,16 +1866,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `GET /api/website-types/{websiteType:codigo}/integrations`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@index`\n\nRequiere autenticación Sanctum.",
|
"description": "Ruta Laravel: `GET /api/admin-website-types/{adminWebsiteType:codigo}/integrations`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@index`\n\nRequiere autenticación Sanctum.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations"
|
"integrations"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1944,7 +1893,7 @@
|
|||||||
"response": []
|
"response": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Get Website Type Integration",
|
"name": "Get Admin Website Type Integration",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -1954,16 +1903,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `GET /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@show`\n\nRequiere autenticación Sanctum.",
|
"description": "Ruta Laravel: `GET /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@show`\n\nRequiere autenticación Sanctum.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/{{integration_code}}",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/{{integration_code}}",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"{{integration_code}}"
|
"{{integration_code}}"
|
||||||
]
|
]
|
||||||
@@ -1997,16 +1946,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `PUT /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.",
|
"description": "Ruta Laravel: `PUT /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/{{integration_code}}",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/{{integration_code}}",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"{{integration_code}}"
|
"{{integration_code}}"
|
||||||
]
|
]
|
||||||
@@ -2034,7 +1983,7 @@
|
|||||||
"response": []
|
"response": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Delete Website Type Integration",
|
"name": "Delete Admin Website Type Integration",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "DELETE",
|
"method": "DELETE",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -2044,16 +1993,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `DELETE /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@destroy`\n\nRequiere autenticación Sanctum.",
|
"description": "Ruta Laravel: `DELETE /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@destroy`\n\nRequiere autenticación Sanctum.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/{{integration_code}}",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/{{integration_code}}",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"{{integration_code}}"
|
"{{integration_code}}"
|
||||||
]
|
]
|
||||||
@@ -2093,16 +2042,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `PUT /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `email`. Configura el transporte SMTP usado para el envío de correos.",
|
"description": "Ruta Laravel: `PUT /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `email`. Configura el transporte SMTP usado para el envío de correos.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/email",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/email",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"email"
|
"email"
|
||||||
]
|
]
|
||||||
@@ -2151,16 +2100,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `PUT /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `telepagos`. Configura las credenciales productivas de Telepagos.",
|
"description": "Ruta Laravel: `PUT /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `telepagos`. Configura las credenciales productivas de Telepagos.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/telepagos",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/telepagos",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"telepagos"
|
"telepagos"
|
||||||
]
|
]
|
||||||
@@ -2209,16 +2158,16 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Ruta Laravel: `PUT /api/website-types/{websiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\WebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `telepagos_homo`. Configura las credenciales del entorno de homologación de Telepagos.",
|
"description": "Ruta Laravel: `PUT /api/admin-website-types/{adminWebsiteType:codigo}/integrations/{integration_code}`\n\nControlador: `App\\Domains\\Integration\\Controllers\\AdminWebsiteTypeIntegrationController@store`\n\nRequiere autenticación Sanctum.\n\nPreset: `telepagos_homo`. Configura las credenciales del entorno de homologación de Telepagos.",
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/api/website-types/{{website_type_code}}/integrations/telepagos_homo",
|
"raw": "{{base_url}}/api/admin-website-types/{{admin_website_type_code}}/integrations/telepagos_homo",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"api",
|
"api",
|
||||||
"website-types",
|
"admin-website-types",
|
||||||
"{{website_type_code}}",
|
"{{admin_website_type_code}}",
|
||||||
"integrations",
|
"integrations",
|
||||||
"telepagos_homo"
|
"telepagos_homo"
|
||||||
]
|
]
|
||||||
@@ -2521,45 +2470,6 @@
|
|||||||
},
|
},
|
||||||
"response": []
|
"response": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Create Tenant",
|
|
||||||
"request": {
|
|
||||||
"method": "POST",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Content-Type",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Ruta Laravel: `POST /api/tenants`\n\nControlador: `App\\Domains\\Tenant\\Controllers\\TenantController@store`",
|
|
||||||
"url": {
|
|
||||||
"raw": "{{base_url}}/api/tenants",
|
|
||||||
"host": [
|
|
||||||
"{{base_url}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"tenants"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": "{\n \"client_id\": {{client_id}},\n \"codigo\": \"{{tenant_code}}\",\n \"nombre\": \"Tenant Demo\",\n \"dominio\": \"{{tenant_domain}}\",\n \"site_title\": \"ShopIt Demo\",\n \"primary_color\": \"#111827\",\n \"secondary_color\": \"#2563EB\",\n \"danger_color\": \"#DC2626\",\n \"success_color\": \"#16A34A\",\n \"header_bg_color\": \"#FFFFFF\",\n \"footer_bg_color\": \"#111827\",\n \"header_logo\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\",\n \"footer_logo\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==\",\n \"search_product_layout\": \"column_with_image\",\n \"search_group_layout\": \"paginated\",\n \"search_items_per_page\": 12,\n \"display_categories\": true,\n \"display_seach_bar\": true,\n \"display_cart\": true,\n \"cart_editing_policy\": \"full\",\n \"website_type_code\": \"shopit\"\n}",
|
|
||||||
"options": {
|
|
||||||
"raw": {
|
|
||||||
"language": "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Get Tenant",
|
"name": "Get Tenant",
|
||||||
"request": {
|
"request": {
|
||||||
@@ -2586,86 +2496,6 @@
|
|||||||
},
|
},
|
||||||
"response": []
|
"response": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Update Tenant (PUT)",
|
|
||||||
"request": {
|
|
||||||
"method": "PUT",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Content-Type",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Ruta Laravel: `PUT /api/tenants/{tenant}`\n\nControlador: `App\\Domains\\Tenant\\Controllers\\TenantController@update`",
|
|
||||||
"url": {
|
|
||||||
"raw": "{{base_url}}/api/tenants/{{tenant_id}}",
|
|
||||||
"host": [
|
|
||||||
"{{base_url}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"tenants",
|
|
||||||
"{{tenant_id}}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": "{\n \"nombre\": \"Tenant Demo Actualizado\",\n \"site_title\": \"ShopIt Demo\",\n \"primary_color\": \"#111827\",\n \"cart_editing_policy\": \"full\"\n}",
|
|
||||||
"options": {
|
|
||||||
"raw": {
|
|
||||||
"language": "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Update Tenant (PATCH)",
|
|
||||||
"request": {
|
|
||||||
"method": "PATCH",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "Content-Type",
|
|
||||||
"value": "application/json",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Ruta Laravel: `PATCH /api/tenants/{tenant}`\n\nControlador: `App\\Domains\\Tenant\\Controllers\\TenantController@update`",
|
|
||||||
"url": {
|
|
||||||
"raw": "{{base_url}}/api/tenants/{{tenant_id}}",
|
|
||||||
"host": [
|
|
||||||
"{{base_url}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"tenants",
|
|
||||||
"{{tenant_id}}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"mode": "raw",
|
|
||||||
"raw": "{\n \"nombre\": \"Tenant Demo Actualizado\",\n \"site_title\": \"ShopIt Demo\",\n \"primary_color\": \"#111827\",\n \"cart_editing_policy\": \"full\"\n}",
|
|
||||||
"options": {
|
|
||||||
"raw": {
|
|
||||||
"language": "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Delete Tenant",
|
"name": "Delete Tenant",
|
||||||
"request": {
|
"request": {
|
||||||
@@ -6268,7 +6098,7 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "website_type_code",
|
"key": "storefront_website_type_code",
|
||||||
"value": "shopit",
|
"value": "shopit",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -6381,6 +6211,10 @@
|
|||||||
"key": "s3_path",
|
"key": "s3_path",
|
||||||
"value": "postman/test-file.png",
|
"value": "postman/test-file.png",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "admin_website_type_code",
|
||||||
|
"value": "shopit"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,145 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\CatalogItemType;
|
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
|
||||||
use App\Domains\Catalog\Enums\InventorySubject;
|
|
||||||
use App\Domains\Shared\Rules\ImageOrBase64Rule;
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
|
||||||
use Illuminate\Validation\Rule;
|
|
||||||
|
|
||||||
class StoreCatalogItemRequest extends FormRequest
|
|
||||||
{
|
|
||||||
public function authorize(): bool
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return array<string, mixed> */
|
|
||||||
public function rules(): array
|
|
||||||
{
|
|
||||||
$tenantCode = $this->route('tenant')?->codigo;
|
|
||||||
$type = $this->input('type', CatalogItemType::Standard->value);
|
|
||||||
$isBundle = $type === CatalogItemType::Bundle->value;
|
|
||||||
|
|
||||||
return [
|
|
||||||
'tenant_code' => ['prohibited'],
|
|
||||||
'type' => ['sometimes', Rule::enum(CatalogItemType::class)],
|
|
||||||
'category_id' => [
|
|
||||||
'sometimes',
|
|
||||||
'nullable',
|
|
||||||
'integer',
|
|
||||||
Rule::exists('categorias', 'id')->where(
|
|
||||||
fn ($query) => $query->where('tenant_code', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'brand_id' => [
|
|
||||||
'sometimes',
|
|
||||||
'nullable',
|
|
||||||
'integer',
|
|
||||||
Rule::exists('brands', 'id')->where(
|
|
||||||
fn ($query) => $query->where('tenant_codigo', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'slug' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
'max:255',
|
|
||||||
Rule::unique('catalog_items', 'slug')->where(
|
|
||||||
fn ($query) => $query->where('tenant_code', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'nombre' => ['required', 'string', 'max:255'],
|
|
||||||
'group_order' => ['sometimes', 'integer', 'min:0'],
|
|
||||||
'descripcion' => ['sometimes', 'nullable', 'string'],
|
|
||||||
'precio' => ['required', 'numeric', 'min:0'],
|
|
||||||
'inventory_policy' => [Rule::prohibitedIf($isBundle), 'sometimes', Rule::enum(InventoryPolicy::class)],
|
|
||||||
'inventory_subject' => ['sometimes', Rule::enum(InventorySubject::class)],
|
|
||||||
'max_units_per_user' => ['sometimes', 'nullable', 'integer', 'min:1'],
|
|
||||||
'has_tickets' => [Rule::prohibitedIf($isBundle), 'sometimes', 'boolean'],
|
|
||||||
'real_stock' => [Rule::prohibitedIf($isBundle), 'sometimes', 'integer', 'min:0'],
|
|
||||||
'inventory_id' => ['prohibited'],
|
|
||||||
'reserved_stock' => ['prohibited'],
|
|
||||||
'sold_units' => ['prohibited'],
|
|
||||||
'attribute_codes' => [Rule::prohibitedIf($isBundle), 'sometimes', 'array'],
|
|
||||||
'attribute_codes.*' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
'distinct',
|
|
||||||
Rule::exists('attribute', 'codigo')->where(
|
|
||||||
fn ($query) => $query->where('tenant_codigo', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'multi_select_attribute_codes' => [Rule::prohibitedIf($isBundle), 'sometimes', 'array'],
|
|
||||||
'multi_select_attribute_codes.*' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
'distinct',
|
|
||||||
Rule::exists('attribute', 'codigo')->where(
|
|
||||||
fn ($query) => $query->where('tenant_codigo', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'hidden_attribute_codes' => [Rule::prohibitedIf($isBundle), 'sometimes', 'array'],
|
|
||||||
'hidden_attribute_codes.*' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
'distinct',
|
|
||||||
Rule::exists('attribute', 'codigo')->where(
|
|
||||||
fn ($query) => $query->where('tenant_codigo', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'images' => ['sometimes', 'array'],
|
|
||||||
'images.*' => ['required', new ImageOrBase64Rule],
|
|
||||||
'variants' => [Rule::prohibitedIf($isBundle), 'sometimes', 'array'],
|
|
||||||
'variants.*.real_stock' => ['sometimes', 'integer', 'min:0'],
|
|
||||||
'variants.*.descripcion' => ['sometimes', 'nullable', 'string'],
|
|
||||||
'variants.*.precio' => ['sometimes', 'nullable', 'numeric', 'min:0', 'max:99999999.99'],
|
|
||||||
'variants.*.event_date_id' => [
|
|
||||||
'sometimes',
|
|
||||||
'nullable',
|
|
||||||
'integer',
|
|
||||||
Rule::exists('event_dates', 'id')->where(
|
|
||||||
fn ($query) => $query->where('tenant_code', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'variants.*.event_date_ids' => ['sometimes', 'array', 'min:1'],
|
|
||||||
'variants.*.event_date_ids.*' => [
|
|
||||||
'required',
|
|
||||||
'integer',
|
|
||||||
'distinct',
|
|
||||||
Rule::exists('event_dates', 'id')->where(
|
|
||||||
fn ($query) => $query->where('tenant_code', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'variants.*.inventory_id' => ['prohibited'],
|
|
||||||
'variants.*.reserved_stock' => ['prohibited'],
|
|
||||||
'variants.*.sold_units' => ['prohibited'],
|
|
||||||
'variants.*.values' => ['sometimes', 'array'],
|
|
||||||
'variants.*.values.*' => ['nullable'],
|
|
||||||
'variants.*.values.*.*' => ['required', 'string'],
|
|
||||||
'variants.*.images' => ['sometimes', 'array'],
|
|
||||||
'variants.*.images.*' => ['required', new ImageOrBase64Rule],
|
|
||||||
'components' => [
|
|
||||||
Rule::requiredIf($isBundle),
|
|
||||||
Rule::prohibitedIf(! $isBundle),
|
|
||||||
'array',
|
|
||||||
'min:1',
|
|
||||||
],
|
|
||||||
'components.*.catalog_item_id' => [
|
|
||||||
'required',
|
|
||||||
'integer',
|
|
||||||
Rule::exists('catalog_items', 'id')->where(
|
|
||||||
fn ($query) => $query->where('tenant_code', $tenantCode)
|
|
||||||
),
|
|
||||||
],
|
|
||||||
'components.*.variant_id' => [
|
|
||||||
'sometimes',
|
|
||||||
'nullable',
|
|
||||||
'integer',
|
|
||||||
Rule::exists('variantes', 'id'),
|
|
||||||
],
|
|
||||||
'components.*.quantity' => ['required', 'integer', 'min:1'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
|
||||||
|
|
||||||
/** @mixin CatalogItem */
|
|
||||||
class CatalogItemResource extends JsonResource
|
|
||||||
{
|
|
||||||
/** @return array<string, mixed> */
|
|
||||||
public function toArray(Request $request): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'id' => $this->id,
|
|
||||||
'type' => $this->type->value,
|
|
||||||
'category_id' => $this->category_id,
|
|
||||||
'brand_id' => $this->brand_id,
|
|
||||||
'slug' => $this->slug,
|
|
||||||
'nombre' => $this->nombre,
|
|
||||||
'descripcion' => $this->descripcion,
|
|
||||||
'precio' => $this->precio,
|
|
||||||
'inventory_policy' => $this->inventory_policy?->value,
|
|
||||||
'inventory_subject' => $this->inventory_subject->value,
|
|
||||||
'max_units_per_user' => $this->max_units_per_user,
|
|
||||||
'has_tickets' => $this->has_tickets,
|
|
||||||
'real_stock' => $this->whenLoaded('inventory', fn () => $this->inventory?->real_stock),
|
|
||||||
'images' => $this->whenLoaded('attachments', fn () => $this->attachments
|
|
||||||
->map(fn ($attachment) => $attachment->getTemporaryUrl(1440))
|
|
||||||
->values()),
|
|
||||||
'variants' => $this->whenLoaded('variants', fn () => $this->variants
|
|
||||||
->map(fn ($variant) => [
|
|
||||||
'id' => $variant->id,
|
|
||||||
'event_date_id' => $variant->event_date_id,
|
|
||||||
'event_date' => $variant->eventDate?->date?->format('Y-m-d'),
|
|
||||||
'event_date_ids' => $variant->selectedEventDates()->pluck('id')->values(),
|
|
||||||
'event_dates' => $variant->selectedEventDates()->map(fn ($eventDate): string => $eventDate->date->format('Y-m-d'))->values(),
|
|
||||||
'descripcion' => $variant->getDescription(),
|
|
||||||
'precio' => number_format($variant->getPrice(), 2, '.', ''),
|
|
||||||
'real_stock' => $variant->inventory?->real_stock,
|
|
||||||
'values' => $variant->selectorOptions($this->itemAttributes),
|
|
||||||
'images' => $variant->attachments
|
|
||||||
->map(fn ($attachment) => $attachment->getTemporaryUrl(1440))
|
|
||||||
->values(),
|
|
||||||
])
|
|
||||||
->values()),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Controllers;
|
namespace App\Domains\Commerce\Cart\Controllers;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Cart\Requests\AddCartItemRequest;
|
use App\Domains\Commerce\Cart\Requests\AddCartItemRequest;
|
||||||
use App\Domains\Cart\Requests\UpdateCartItemQuantityRequest;
|
use App\Domains\Commerce\Cart\Requests\UpdateCartItemQuantityRequest;
|
||||||
use App\Domains\Cart\Resources\CartResource;
|
use App\Domains\Commerce\Cart\Resources\CartResource;
|
||||||
use App\Domains\Cart\Services\CartService;
|
use App\Domains\Commerce\Cart\Services\CartService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Models;
|
namespace App\Domains\Commerce\Cart\Models;
|
||||||
|
|
||||||
use App\Domains\Auth\Models\User;
|
use App\Domains\Core\Auth\Models\User;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogInventoryService;
|
use App\Domains\Commerce\Catalog\Services\CatalogInventoryService;
|
||||||
use App\Domains\Catalog\Services\StockReservationService;
|
use App\Domains\Commerce\Catalog\Services\StockReservationService;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
use App\Domains\Commerce\Purchase\Services\UserPurchaseLimitService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -375,7 +375,7 @@ class Cart extends Model
|
|||||||
): CatalogItem|Variant {
|
): CatalogItem|Variant {
|
||||||
$catalogItemQuery = CatalogItem::query()
|
$catalogItemQuery = CatalogItem::query()
|
||||||
->whereKey($catalogItemId)
|
->whereKey($catalogItemId)
|
||||||
->where('tenant_code', $this->tenant_codigo);
|
->forTenantCatalog($this->tenant()->firstOrFail());
|
||||||
|
|
||||||
if ($lockForUpdate) {
|
if ($lockForUpdate) {
|
||||||
$catalogItemQuery->lockForUpdate();
|
$catalogItemQuery->lockForUpdate();
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Models;
|
namespace App\Domains\Commerce\Cart\Models;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Requests;
|
namespace App\Domains\Commerce\Cart\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Requests;
|
namespace App\Domains\Commerce\Cart\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Resources;
|
namespace App\Domains\Commerce\Cart\Resources;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Resources;
|
namespace App\Domains\Commerce\Cart\Resources;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Services;
|
namespace App\Domains\Commerce\Cart\Services;
|
||||||
|
|
||||||
use App\Domains\Auth\Models\User;
|
use App\Domains\Core\Auth\Models\User;
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Catalog\Exceptions\StockReservationExpiredException;
|
use App\Domains\Commerce\Catalog\Exceptions\StockReservationExpiredException;
|
||||||
use App\Domains\Catalog\Services\ExpireStockReservationsService;
|
use App\Domains\Commerce\Catalog\Services\ExpireStockReservationsService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Services;
|
namespace App\Domains\Commerce\Cart\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogInventoryService;
|
use App\Domains\Commerce\Catalog\Services\CatalogInventoryService;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
class CartVariantReplacementService
|
class CartVariantReplacementService
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Services;
|
namespace App\Domains\Commerce\Cart\Services;
|
||||||
|
|
||||||
use App\Domains\Auth\Models\User;
|
use App\Domains\Core\Auth\Models\User;
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class GuestCartMergeService
|
class GuestCartMergeService
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Cart\Services;
|
namespace App\Domains\Commerce\Cart\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Catalog\Services\StockReservationService;
|
use App\Domains\Commerce\Catalog\Services\StockReservationService;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Domains\Cart\Controllers\CartController;
|
use App\Domains\Commerce\Cart\Controllers\CartController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('tenants/{tenant:codigo}')
|
Route::prefix('tenants/{tenant:codigo}')
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Controllers\AdminApp;
|
namespace App\Domains\Commerce\Catalog\Controllers\AdminApp;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Catalog\Requests\AdminApp\UpsertOnTicketFeaturedGroupRequest;
|
use App\Domains\Commerce\Catalog\Requests\AdminApp\UpsertOnTicketFeaturedGroupRequest;
|
||||||
use App\Domains\Catalog\Resources\AdminApp\OnTicketFeaturedGroupResource;
|
use App\Domains\Commerce\Catalog\Resources\AdminApp\OnTicketFeaturedGroupResource;
|
||||||
use App\Domains\Catalog\Services\OnTicketFeaturedGroupService;
|
use App\Domains\Commerce\Catalog\Services\OnTicketFeaturedGroupService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -58,7 +58,7 @@ class OnTicketFeaturedGroupController extends Controller
|
|||||||
{
|
{
|
||||||
$tenant = $request->user()->tenant()->firstOrFail();
|
$tenant = $request->user()->tenant()->firstOrFail();
|
||||||
|
|
||||||
abort_unless($tenant->website_type_code === 'onticket', 404);
|
abort_unless(in_array($tenant->storefront_website_type_code, ['onticket', 'onticket_multi_event'], true), 404);
|
||||||
|
|
||||||
return $tenant;
|
return $tenant;
|
||||||
}
|
}
|
||||||
@@ -1,27 +1,25 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Controllers;
|
namespace App\Domains\Commerce\Catalog\Controllers;
|
||||||
|
|
||||||
use App\Domains\Cart\Services\CartService;
|
use App\Domains\Commerce\Cart\Services\CartService;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Category;
|
use App\Domains\Commerce\Catalog\Models\Category;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Catalog\Requests\CatalogItemDetailRequest;
|
use App\Domains\Commerce\Catalog\Requests\CatalogItemDetailRequest;
|
||||||
use App\Domains\Catalog\Requests\CatalogVariantOptionsRequest;
|
use App\Domains\Commerce\Catalog\Requests\CatalogVariantOptionsRequest;
|
||||||
use App\Domains\Catalog\Requests\CategoryPageRequest;
|
use App\Domains\Commerce\Catalog\Requests\CategoryPageRequest;
|
||||||
use App\Domains\Catalog\Requests\FeaturedGroupPageRequest;
|
use App\Domains\Commerce\Catalog\Requests\FeaturedGroupPageRequest;
|
||||||
use App\Domains\Catalog\Requests\SearchCatalogItemsRequest;
|
use App\Domains\Commerce\Catalog\Requests\SearchCatalogItemsRequest;
|
||||||
use App\Domains\Catalog\Requests\StoreCatalogItemRequest;
|
use App\Domains\Commerce\Catalog\Resources\CatalogFeaturedGroupResource;
|
||||||
use App\Domains\Catalog\Resources\CatalogFeaturedGroupResource;
|
use App\Domains\Commerce\Catalog\Resources\CatalogItemDetailResource;
|
||||||
use App\Domains\Catalog\Resources\CatalogItemDetailResource;
|
use App\Domains\Commerce\Catalog\Resources\CatalogSearchItemResource;
|
||||||
use App\Domains\Catalog\Resources\CatalogItemResource;
|
use App\Domains\Commerce\Catalog\Resources\CatalogVariantOptionsResource;
|
||||||
use App\Domains\Catalog\Resources\CatalogSearchItemResource;
|
use App\Domains\Commerce\Catalog\Services\CatalogItemAllowanceService;
|
||||||
use App\Domains\Catalog\Resources\CatalogVariantOptionsResource;
|
use App\Domains\Commerce\Catalog\Services\CatalogService;
|
||||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
use App\Domains\Commerce\Catalog\Services\FeaturedGroupService;
|
||||||
use App\Domains\Catalog\Services\CatalogService;
|
use App\Domains\Commerce\Catalog\Services\VariantSelectionService;
|
||||||
use App\Domains\Catalog\Services\FeaturedGroupService;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Domains\Catalog\Services\VariantSelectionService;
|
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -40,7 +38,7 @@ class CatalogController extends Controller
|
|||||||
return response()->json($featuredGroups->map(
|
return response()->json($featuredGroups->map(
|
||||||
fn (FeaturedGroup $featuredGroup): array => (new CatalogFeaturedGroupResource(
|
fn (FeaturedGroup $featuredGroup): array => (new CatalogFeaturedGroupResource(
|
||||||
$featuredGroup,
|
$featuredGroup,
|
||||||
$featuredGroupService->itemsResponse($featuredGroup, 1, $this->userId($request)),
|
$featuredGroupService->itemsResponse($featuredGroup, $tenant, 1, $this->userId($request)),
|
||||||
))->resolve()
|
))->resolve()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -102,6 +100,7 @@ class CatalogController extends Controller
|
|||||||
|
|
||||||
return response()->json($featuredGroupService->itemsResponse(
|
return response()->json($featuredGroupService->itemsResponse(
|
||||||
$featuredGroup,
|
$featuredGroup,
|
||||||
|
$tenant,
|
||||||
$page,
|
$page,
|
||||||
$this->userId($request),
|
$this->userId($request),
|
||||||
));
|
));
|
||||||
@@ -114,7 +113,8 @@ class CatalogController extends Controller
|
|||||||
CatalogService $catalogService,
|
CatalogService $catalogService,
|
||||||
CatalogItemAllowanceService $allowances,
|
CatalogItemAllowanceService $allowances,
|
||||||
): CatalogItemDetailResource {
|
): CatalogItemDetailResource {
|
||||||
abort_unless($catalogItem->tenant_code === $tenant->codigo, 404);
|
abort_unless($catalogItem->tenant_code === $tenant->codigo
|
||||||
|
&& ($tenant->active_event_id === null || $catalogItem->event_id === $tenant->active_event_id), 404);
|
||||||
|
|
||||||
$variantId = $request->validated('variant_id');
|
$variantId = $request->validated('variant_id');
|
||||||
|
|
||||||
@@ -134,7 +134,8 @@ class CatalogController extends Controller
|
|||||||
VariantSelectionService $variantSelectionService,
|
VariantSelectionService $variantSelectionService,
|
||||||
CartService $cartService,
|
CartService $cartService,
|
||||||
): CatalogVariantOptionsResource {
|
): CatalogVariantOptionsResource {
|
||||||
abort_unless($catalogItem->tenant_code === $tenant->codigo, 404);
|
abort_unless($catalogItem->tenant_code === $tenant->codigo
|
||||||
|
&& ($tenant->active_event_id === null || $catalogItem->event_id === $tenant->active_event_id), 404);
|
||||||
|
|
||||||
$includedVariantId = null;
|
$includedVariantId = null;
|
||||||
$cartItemId = $request->validated('cart_item_id');
|
$cartItemId = $request->validated('cart_item_id');
|
||||||
@@ -163,21 +164,6 @@ class CatalogController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(
|
|
||||||
StoreCatalogItemRequest $request,
|
|
||||||
Tenant $tenant,
|
|
||||||
CatalogService $catalogService,
|
|
||||||
): JsonResponse {
|
|
||||||
$catalogItem = $catalogService->create([
|
|
||||||
...$request->validated(),
|
|
||||||
'tenant_code' => $tenant->codigo,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return CatalogItemResource::make($catalogItem)
|
|
||||||
->response()
|
|
||||||
->setStatusCode(201);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function userId(Request $request): ?int
|
private function userId(Request $request): ?int
|
||||||
{
|
{
|
||||||
$userId = $request->user()?->getAuthIdentifier() ?? Auth::guard('sanctum')->id();
|
$userId = $request->user()?->getAuthIdentifier() ?? Auth::guard('sanctum')->id();
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum CatalogItemType: string
|
enum CatalogItemType: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum FeaturedGroupSource: string
|
enum FeaturedGroupSource: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum GroupLayout: string
|
enum GroupLayout: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum InventoryPolicy: string
|
enum InventoryPolicy: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum InventorySubject: string
|
enum InventorySubject: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Enums;
|
namespace App\Domains\Commerce\Catalog\Enums;
|
||||||
|
|
||||||
enum ProductLayout: string
|
enum ProductLayout: string
|
||||||
{
|
{
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Exceptions;
|
namespace App\Domains\Commerce\Catalog\Exceptions;
|
||||||
|
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Event\Models\EventDate;
|
use App\Domains\Ticketing\Event\Models\EventDate;
|
||||||
use App\Domains\Shared\Enums\FieldType;
|
use App\Shared\Enums\FieldType;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Ticket\Models\ValidityTime;
|
use App\Domains\Ticketing\Ticket\Models\ValidityTime;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,14 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Attachable\Models\Attachment;
|
use App\Shared\Attachable\Models\Attachment;
|
||||||
use App\Domains\Catalog\Enums\CatalogItemType;
|
use App\Domains\Commerce\Catalog\Enums\CatalogItemType;
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Enums\InventorySubject;
|
use App\Domains\Commerce\Catalog\Enums\InventorySubject;
|
||||||
use App\Domains\Catalog\Services\CatalogInventoryService;
|
use App\Domains\Commerce\Catalog\Services\CatalogInventoryService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Domains\Ticket\Models\Ticket;
|
use App\Domains\Ticketing\Event\Models\Event;
|
||||||
|
use App\Domains\Ticketing\Ticket\Models\Ticket;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -30,6 +31,7 @@ use Illuminate\Support\Collection;
|
|||||||
'group_order',
|
'group_order',
|
||||||
'descripcion',
|
'descripcion',
|
||||||
'precio',
|
'precio',
|
||||||
|
'sales_end_at',
|
||||||
'inventory_policy',
|
'inventory_policy',
|
||||||
'inventory_subject',
|
'inventory_subject',
|
||||||
'max_units_per_user',
|
'max_units_per_user',
|
||||||
@@ -51,15 +53,30 @@ class CatalogItem extends Model
|
|||||||
'group_order' => 0,
|
'group_order' => 0,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected static function booted(): void
|
||||||
|
{
|
||||||
|
static::creating(function (CatalogItem $item): void {
|
||||||
|
if ($item->event_id !== null || $item->tenant_code === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$item->event_id = Tenant::query()
|
||||||
|
->where('codigo', $item->tenant_code)
|
||||||
|
->value('active_event_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected function casts(): array
|
protected function casts(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
'event_id' => 'integer',
|
||||||
'category_id' => 'integer',
|
'category_id' => 'integer',
|
||||||
'brand_id' => 'integer',
|
'brand_id' => 'integer',
|
||||||
'inventory_id' => 'integer',
|
'inventory_id' => 'integer',
|
||||||
'type' => CatalogItemType::class,
|
'type' => CatalogItemType::class,
|
||||||
'group_order' => 'integer',
|
'group_order' => 'integer',
|
||||||
'precio' => 'decimal:2',
|
'precio' => 'decimal:2',
|
||||||
|
'sales_end_at' => 'datetime',
|
||||||
'inventory_policy' => InventoryPolicy::class,
|
'inventory_policy' => InventoryPolicy::class,
|
||||||
'inventory_subject' => InventorySubject::class,
|
'inventory_subject' => InventorySubject::class,
|
||||||
'max_units_per_user' => 'integer',
|
'max_units_per_user' => 'integer',
|
||||||
@@ -73,6 +90,21 @@ class CatalogItem extends Model
|
|||||||
return $this->belongsTo(Tenant::class, 'tenant_code', 'codigo');
|
return $this->belongsTo(Tenant::class, 'tenant_code', 'codigo');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return BelongsTo<Event, $this> */
|
||||||
|
public function event(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Event::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param Builder<CatalogItem> $query */
|
||||||
|
public function scopeForTenantCatalog(Builder $query, Tenant $tenant): Builder
|
||||||
|
{
|
||||||
|
return $query
|
||||||
|
->where('catalog_items.tenant_code', $tenant->codigo)
|
||||||
|
->when($tenant->active_event_id !== null, fn (Builder $query): Builder => $query
|
||||||
|
->where('catalog_items.event_id', $tenant->active_event_id));
|
||||||
|
}
|
||||||
|
|
||||||
/** @return BelongsTo<Category, $this> */
|
/** @return BelongsTo<Category, $this> */
|
||||||
public function category(): BelongsTo
|
public function category(): BelongsTo
|
||||||
{
|
{
|
||||||
@@ -161,6 +193,10 @@ class CatalogItem extends Model
|
|||||||
|
|
||||||
public function isAvailable(): bool
|
public function isAvailable(): bool
|
||||||
{
|
{
|
||||||
|
if (! $this->isSaleOpen()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->type === CatalogItemType::Bundle) {
|
if ($this->type === CatalogItemType::Bundle) {
|
||||||
$availableStock = $this->availableStock();
|
$availableStock = $this->availableStock();
|
||||||
|
|
||||||
@@ -178,6 +214,9 @@ class CatalogItem extends Model
|
|||||||
public function scopeWhereAvailable(Builder $query): Builder
|
public function scopeWhereAvailable(Builder $query): Builder
|
||||||
{
|
{
|
||||||
return $query->where(function (Builder $query): void {
|
return $query->where(function (Builder $query): void {
|
||||||
|
$query->whereNull('catalog_items.sales_end_at')
|
||||||
|
->orWhere('catalog_items.sales_end_at', '>', now());
|
||||||
|
})->where(function (Builder $query): void {
|
||||||
$query
|
$query
|
||||||
->where(function (Builder $unlimitedQuery): void {
|
->where(function (Builder $unlimitedQuery): void {
|
||||||
$unlimitedQuery
|
$unlimitedQuery
|
||||||
@@ -217,10 +256,16 @@ class CatalogItem extends Model
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isSaleOpen(): bool
|
||||||
|
{
|
||||||
|
return $this->sales_end_at === null || now()->lt($this->sales_end_at);
|
||||||
|
}
|
||||||
|
|
||||||
/** @return Collection<int, Variant> */
|
/** @return Collection<int, Variant> */
|
||||||
public function visibleVariants(?int $includedVariantId = null): Collection
|
public function visibleVariants(?int $includedVariantId = null): Collection
|
||||||
{
|
{
|
||||||
return $this->variants
|
return $this->variants
|
||||||
|
->each(fn (Variant $variant) => $variant->setRelation('catalogItem', $this))
|
||||||
->filter(fn (Variant $variant): bool => $variant->hasOnlyActiveEventDates()
|
->filter(fn (Variant $variant): bool => $variant->hasOnlyActiveEventDates()
|
||||||
&& (($includedVariantId !== null && $variant->id === $includedVariantId)
|
&& (($includedVariantId !== null && $variant->id === $includedVariantId)
|
||||||
|| ($variant->isSellable() && (
|
|| ($variant->isSellable() && (
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Auth\Models\User;
|
use App\Domains\Core\Auth\Models\User;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\FeaturedGroupSource;
|
use App\Domains\Commerce\Catalog\Enums\FeaturedGroupSource;
|
||||||
use App\Domains\Catalog\Enums\GroupLayout;
|
use App\Domains\Commerce\Catalog\Enums\GroupLayout;
|
||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Commerce\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use App\Domains\Attachable\Models\Attachment;
|
use App\Shared\Attachable\Models\Attachment;
|
||||||
use App\Domains\Event\Models\EventDate;
|
use App\Domains\Ticketing\Event\Models\EventDate;
|
||||||
use App\Domains\Ticket\Models\Ticket;
|
use App\Domains\Ticketing\Ticket\Models\Ticket;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -96,6 +96,7 @@ class Variant extends Model
|
|||||||
{
|
{
|
||||||
return $this->sales_disabled_at === null
|
return $this->sales_disabled_at === null
|
||||||
&& $this->replaced_by_variant_id === null
|
&& $this->replaced_by_variant_id === null
|
||||||
|
&& $this->catalogItem->isSaleOpen()
|
||||||
&& $this->hasOnlyActiveEventDates();
|
&& $this->hasOnlyActiveEventDates();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Models;
|
namespace App\Domains\Commerce\Catalog\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests\AdminApp;
|
namespace App\Domains\Commerce\Catalog\Requests\AdminApp;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
namespace App\Domains\Commerce\Catalog\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
namespace App\Domains\Commerce\Catalog\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
namespace App\Domains\Commerce\Catalog\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
namespace App\Domains\Commerce\Catalog\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Requests;
|
namespace App\Domains\Commerce\Catalog\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources\AdminApp;
|
namespace App\Domains\Commerce\Catalog\Resources\AdminApp;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Commerce\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
namespace App\Domains\Commerce\Catalog\Resources;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
namespace App\Domains\Commerce\Catalog\Resources;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Commerce\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
use App\Domains\Commerce\Catalog\Services\CatalogItemAllowanceService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
namespace App\Domains\Commerce\Catalog\Resources;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\ItemAttribute;
|
use App\Domains\Commerce\Catalog\Models\ItemAttribute;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
use App\Domains\Commerce\Catalog\Services\CatalogItemAllowanceService;
|
||||||
use App\Domains\Shared\Enums\FieldType;
|
use App\Domains\Ticketing\Ticket\Resources\ValidityTimeResource;
|
||||||
use App\Domains\Ticket\Resources\ValidityTimeResource;
|
use App\Shared\Enums\FieldType;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@@ -140,7 +140,7 @@ class CatalogItemDetailResource extends JsonResource
|
|||||||
'validity_time_id' => $option->validity_time_id,
|
'validity_time_id' => $option->validity_time_id,
|
||||||
'validity_time' => $option->validityTime === null
|
'validity_time' => $option->validityTime === null
|
||||||
? null
|
? null
|
||||||
: ValidityTimeResource::make($option->validityTime),
|
: ValidityTimeResource::make($option->validityTime, $this->tenant->timezone),
|
||||||
'metadata' => $option->metadata,
|
'metadata' => $option->metadata,
|
||||||
])
|
])
|
||||||
->values();
|
->values();
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
namespace App\Domains\Commerce\Catalog\Resources;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
use App\Domains\Commerce\Catalog\Services\CatalogItemAllowanceService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Resources;
|
namespace App\Domains\Commerce\Catalog\Resources;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\CatalogItemType;
|
use App\Domains\Commerce\Catalog\Enums\CatalogItemType;
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Models\BundleComponent;
|
use App\Domains\Commerce\Catalog\Models\BundleComponent;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class CatalogInventoryService
|
class CatalogInventoryService
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
use App\Domains\Commerce\Purchase\Services\UserPurchaseLimitService;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
class CatalogItemAllowanceService
|
class CatalogItemAllowanceService
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Attachable\Models\Attachment;
|
use App\Shared\Attachable\Models\Attachment;
|
||||||
use App\Domains\Attachable\Services\AttachmentService;
|
use App\Shared\Attachable\Services\AttachmentService;
|
||||||
use App\Domains\Catalog\Enums\CatalogItemType;
|
use App\Domains\Commerce\Catalog\Enums\CatalogItemType;
|
||||||
use App\Domains\Catalog\Models\Attribute;
|
use App\Domains\Commerce\Catalog\Models\Attribute;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Category;
|
use App\Domains\Commerce\Catalog\Models\Category;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\ItemAttribute;
|
use App\Domains\Commerce\Catalog\Models\ItemAttribute;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Event\Models\EventDate;
|
use App\Domains\Ticketing\Event\Models\EventDate;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -238,7 +238,7 @@ class CatalogService
|
|||||||
$startsWithPattern = "{$normalizedTerm}%";
|
$startsWithPattern = "{$normalizedTerm}%";
|
||||||
|
|
||||||
$paginator = CatalogItem::query()
|
$paginator = CatalogItem::query()
|
||||||
->where('tenant_code', $tenant->codigo)
|
->forTenantCatalog($tenant)
|
||||||
->whereAvailable()
|
->whereAvailable()
|
||||||
->where(function (Builder $query) use ($containsPattern): void {
|
->where(function (Builder $query) use ($containsPattern): void {
|
||||||
$query
|
$query
|
||||||
@@ -287,7 +287,7 @@ class CatalogService
|
|||||||
int $page,
|
int $page,
|
||||||
): LengthAwarePaginator {
|
): LengthAwarePaginator {
|
||||||
return CatalogItem::query()
|
return CatalogItem::query()
|
||||||
->where('tenant_code', $tenant->codigo)
|
->forTenantCatalog($tenant)
|
||||||
->where('category_id', $category->id)
|
->where('category_id', $category->id)
|
||||||
->whereAvailable()
|
->whereAvailable()
|
||||||
->with([
|
->with([
|
||||||
@@ -369,6 +369,8 @@ class CatalogService
|
|||||||
$componentItem = CatalogItem::query()
|
$componentItem = CatalogItem::query()
|
||||||
->whereKey($catalogItemId)
|
->whereKey($catalogItemId)
|
||||||
->where('tenant_code', $bundle->tenant_code)
|
->where('tenant_code', $bundle->tenant_code)
|
||||||
|
->when($bundle->event_id !== null, fn (Builder $query): Builder => $query
|
||||||
|
->where('event_id', $bundle->event_id))
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if ($componentItem === null) {
|
if ($componentItem === null) {
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\Checkout\ReleaseCheckoutService;
|
use App\Domains\Commerce\Purchase\Services\Checkout\ReleaseCheckoutService;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\FeaturedGroupSource;
|
use App\Domains\Commerce\Catalog\Enums\FeaturedGroupSource;
|
||||||
use App\Domains\Catalog\Enums\GroupLayout;
|
use App\Domains\Commerce\Catalog\Enums\GroupLayout;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Catalog\Resources\CatalogFeaturedItemResource;
|
use App\Domains\Commerce\Catalog\Resources\CatalogFeaturedItemResource;
|
||||||
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
|
|
||||||
@@ -19,10 +20,10 @@ class FeaturedGroupService
|
|||||||
private readonly CatalogItemAllowanceService $allowances,
|
private readonly CatalogItemAllowanceService $allowances,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function itemsResponse(FeaturedGroup $featuredGroup, int $page, ?int $userId = null): array
|
public function itemsResponse(FeaturedGroup $featuredGroup, Tenant $tenant, int $page, ?int $userId = null): array
|
||||||
{
|
{
|
||||||
if ($featuredGroup->group_layout !== GroupLayout::Paginated) {
|
if ($featuredGroup->group_layout !== GroupLayout::Paginated) {
|
||||||
$query = $this->itemsQuery($featuredGroup);
|
$query = $this->itemsQuery($featuredGroup, $tenant);
|
||||||
|
|
||||||
if ($featuredGroup->group_layout === GroupLayout::Single) {
|
if ($featuredGroup->group_layout === GroupLayout::Single) {
|
||||||
$query->limit(1);
|
$query->limit(1);
|
||||||
@@ -35,7 +36,7 @@ class FeaturedGroupService
|
|||||||
return CatalogFeaturedItemResource::collection($items)->resolve();
|
return CatalogFeaturedItemResource::collection($items)->resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
$paginator = $this->paginateItems($featuredGroup, $page);
|
$paginator = $this->paginateItems($featuredGroup, $tenant, $page);
|
||||||
$this->attachGroup($paginator->getCollection(), $featuredGroup);
|
$this->attachGroup($paginator->getCollection(), $featuredGroup);
|
||||||
$this->allowances->attach($paginator->getCollection(), $userId);
|
$this->allowances->attach($paginator->getCollection(), $userId);
|
||||||
|
|
||||||
@@ -45,10 +46,10 @@ class FeaturedGroupService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @return Builder<CatalogItem> */
|
/** @return Builder<CatalogItem> */
|
||||||
private function itemsQuery(FeaturedGroup $featuredGroup): Builder
|
private function itemsQuery(FeaturedGroup $featuredGroup, Tenant $tenant): Builder
|
||||||
{
|
{
|
||||||
$query = CatalogItem::query()
|
$query = CatalogItem::query()
|
||||||
->where('catalog_items.tenant_code', $featuredGroup->tenant_code)
|
->forTenantCatalog($tenant)
|
||||||
->whereAvailable()
|
->whereAvailable()
|
||||||
->where(function (Builder $query): void {
|
->where(function (Builder $query): void {
|
||||||
$query
|
$query
|
||||||
@@ -90,9 +91,10 @@ class FeaturedGroupService
|
|||||||
|
|
||||||
private function paginateItems(
|
private function paginateItems(
|
||||||
FeaturedGroup $featuredGroup,
|
FeaturedGroup $featuredGroup,
|
||||||
|
Tenant $tenant,
|
||||||
int $page,
|
int $page,
|
||||||
): LengthAwarePaginator {
|
): LengthAwarePaginator {
|
||||||
$paginator = $this->itemsQuery($featuredGroup)->paginate(
|
$paginator = $this->itemsQuery($featuredGroup, $tenant)->paginate(
|
||||||
perPage: self::ITEMS_PER_PAGE,
|
perPage: self::ITEMS_PER_PAGE,
|
||||||
pageName: 'page',
|
pageName: 'page',
|
||||||
page: $page,
|
page: $page,
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\FeaturedGroupSource;
|
use App\Domains\Commerce\Catalog\Enums\FeaturedGroupSource;
|
||||||
use App\Domains\Catalog\Enums\GroupLayout;
|
use App\Domains\Commerce\Catalog\Enums\GroupLayout;
|
||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Commerce\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Catalog\Models\Category;
|
use App\Domains\Commerce\Catalog\Models\Category;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Commerce\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Exceptions\StockReservationExpiredException;
|
use App\Domains\Commerce\Catalog\Exceptions\StockReservationExpiredException;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Catalog\Models\StockReservationLine;
|
use App\Domains\Commerce\Catalog\Models\StockReservationLine;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\BundleComponent;
|
use App\Domains\Commerce\Catalog\Models\BundleComponent;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Catalog\Models\StockReservationLine;
|
use App\Domains\Commerce\Catalog\Models\StockReservationLine;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Event\Models\EventDate;
|
use App\Domains\Ticketing\Event\Models\EventDate;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
class VariantReplacementService
|
class VariantReplacementService
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Catalog\Services;
|
namespace App\Domains\Commerce\Catalog\Services;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\InventoryPolicy;
|
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\ItemAttribute;
|
use App\Domains\Commerce\Catalog\Models\ItemAttribute;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
class VariantSelectionService
|
class VariantSelectionService
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Domains\Catalog\Controllers\AdminApp\OnTicketFeaturedGroupController;
|
use App\Domains\Commerce\Catalog\Controllers\AdminApp\OnTicketFeaturedGroupController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('v1/adminapp/tenant')
|
Route::prefix('v1/adminapp/tenant')
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Domains\Catalog\Controllers\CatalogController;
|
use App\Domains\Commerce\Catalog\Controllers\CatalogController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
||||||
@@ -13,7 +13,6 @@ Route::prefix('tenants/{tenant:codigo}')->group(function (): void {
|
|||||||
->name('categories.show');
|
->name('categories.show');
|
||||||
Route::get('catalog-items/{catalogItem}', [CatalogController::class, 'show']);
|
Route::get('catalog-items/{catalogItem}', [CatalogController::class, 'show']);
|
||||||
Route::post('catalog-items/{catalogItem}/variant-options', [CatalogController::class, 'variantOptions']);
|
Route::post('catalog-items/{catalogItem}/variant-options', [CatalogController::class, 'variantOptions']);
|
||||||
Route::post('catalog-items', [CatalogController::class, 'store']);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
require __DIR__.'/adminapp.php';
|
require __DIR__.'/adminapp.php';
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Controllers;
|
namespace App\Domains\Commerce\Purchase\Controllers;
|
||||||
|
|
||||||
use App\Domains\Integration\Services\TelepagosIntegrationService;
|
use App\Shared\Integration\Services\TelepagosIntegrationService;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Requests\PaymentIntentRequest;
|
use App\Domains\Commerce\Purchase\Requests\PaymentIntentRequest;
|
||||||
use App\Domains\Purchase\Requests\StartCheckoutRequest;
|
use App\Domains\Commerce\Purchase\Requests\StartCheckoutRequest;
|
||||||
use App\Domains\Purchase\Requests\UpdatePurchaseCustomerRequest;
|
use App\Domains\Commerce\Purchase\Requests\UpdatePurchaseCustomerRequest;
|
||||||
use App\Domains\Purchase\Resources\PurchaseResource;
|
use App\Domains\Commerce\Purchase\Resources\PurchaseResource;
|
||||||
use App\Domains\Purchase\Services\Checkout\PurchaseResponseLoader;
|
use App\Domains\Commerce\Purchase\Services\Checkout\PurchaseResponseLoader;
|
||||||
use App\Domains\Purchase\Services\CheckoutService;
|
use App\Domains\Commerce\Purchase\Services\CheckoutService;
|
||||||
use App\Domains\Purchase\Services\PurchaseStateGuard;
|
use App\Domains\Commerce\Purchase\Services\PurchaseStateGuard;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Events;
|
namespace App\Domains\Commerce\Purchase\Events;
|
||||||
|
|
||||||
use Illuminate\Foundation\Events\Dispatchable;
|
use Illuminate\Foundation\Events\Dispatchable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Exceptions;
|
namespace App\Domains\Commerce\Purchase\Exceptions;
|
||||||
|
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Exceptions;
|
namespace App\Domains\Commerce\Purchase\Exceptions;
|
||||||
|
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Exceptions;
|
namespace App\Domains\Commerce\Purchase\Exceptions;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
class PurchaseLimitExceededException extends ValidationException
|
class PurchaseLimitExceededException extends ValidationException
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Models;
|
namespace App\Domains\Commerce\Purchase\Models;
|
||||||
|
|
||||||
use App\Domains\Auth\Models\User;
|
use App\Domains\Core\Auth\Models\User;
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Logging\Models\Concerns\LogsValueChanges;
|
use App\Shared\Logging\Models\Concerns\LogsValueChanges;
|
||||||
use App\Domains\Purchase\Events\PurchasePaid;
|
use App\Domains\Commerce\Purchase\Events\PurchasePaid;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Domains\Ticket\Models\Ticket;
|
use App\Domains\Ticketing\Ticket\Models\Ticket;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Models;
|
namespace App\Domains\Commerce\Purchase\Models;
|
||||||
|
|
||||||
use App\Domains\Attachable\Models\Attachment;
|
use App\Shared\Attachable\Models\Attachment;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Ticket\Models\Ticket;
|
use App\Domains\Ticketing\Ticket\Models\Ticket;
|
||||||
use App\Domains\Ticket\Models\TicketRefund;
|
use App\Domains\Ticketing\Ticket\Models\TicketRefund;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Models;
|
namespace App\Domains\Commerce\Purchase\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Models;
|
namespace App\Domains\Commerce\Purchase\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Models;
|
namespace App\Domains\Commerce\Purchase\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Requests;
|
namespace App\Domains\Commerce\Purchase\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Requests;
|
namespace App\Domains\Commerce\Purchase\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Requests;
|
namespace App\Domains\Commerce\Purchase\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Resources;
|
namespace App\Domains\Commerce\Purchase\Resources;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\PurchaseItem;
|
use App\Domains\Commerce\Purchase\Models\PurchaseItem;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\StorefrontWebsiteType;
|
||||||
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -14,7 +15,11 @@ class PurchaseItemResource extends JsonResource
|
|||||||
public function toArray(Request $request): array
|
public function toArray(Request $request): array
|
||||||
{
|
{
|
||||||
$tenant = $request->route('tenant');
|
$tenant = $request->route('tenant');
|
||||||
$displayImage = ! $tenant instanceof Tenant || $tenant->display_cart_item_images;
|
$usesEventSummary = $tenant instanceof Tenant
|
||||||
|
&& $tenant->storefrontWebsiteType?->checkout_summary_type
|
||||||
|
=== StorefrontWebsiteType::CHECKOUT_SUMMARY_EVENT;
|
||||||
|
$displayImage = ! $tenant instanceof Tenant
|
||||||
|
|| (! $usesEventSummary && $tenant->display_cart_item_images);
|
||||||
|
|
||||||
$imageUrl = $displayImage
|
$imageUrl = $displayImage
|
||||||
? $this->imageAttachment?->getTemporaryUrl(1440)
|
? $this->imageAttachment?->getTemporaryUrl(1440)
|
||||||
@@ -31,7 +36,7 @@ class PurchaseItemResource extends JsonResource
|
|||||||
'nombre' => $this->item_nombre,
|
'nombre' => $this->item_nombre,
|
||||||
'descripcion' => $this->descripcion,
|
'descripcion' => $this->descripcion,
|
||||||
'slug' => $this->slug,
|
'slug' => $this->slug,
|
||||||
'imagen' => $imageUrl,
|
'imagen' => $this->when(! $usesEventSummary, $imageUrl),
|
||||||
'attributes' => $this->variant_attributes ?? [],
|
'attributes' => $this->variant_attributes ?? [],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Resources;
|
namespace App\Domains\Commerce\Purchase\Resources;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Models\PurchaseItem;
|
use App\Domains\Commerce\Purchase\Models\PurchaseItem;
|
||||||
use App\Domains\Purchase\Models\TelepagosPaymentCandidate;
|
use App\Domains\Commerce\Purchase\Models\TelepagosPaymentCandidate;
|
||||||
|
use App\Domains\Core\Tenant\Models\StorefrontWebsiteType;
|
||||||
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
|
use App\Domains\Ticketing\Event\Models\Event;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
@@ -27,6 +30,18 @@ class PurchaseResource extends JsonResource
|
|||||||
? (int) $this->resource->getAttribute('tickets_count')
|
? (int) $this->resource->getAttribute('tickets_count')
|
||||||
: null;
|
: null;
|
||||||
$paymentVerification = $this->resolvePaymentVerification();
|
$paymentVerification = $this->resolvePaymentVerification();
|
||||||
|
$tenant = $request->route('tenant');
|
||||||
|
$usesEventSummary = $tenant instanceof Tenant
|
||||||
|
&& $tenant->storefrontWebsiteType?->checkout_summary_type
|
||||||
|
=== StorefrontWebsiteType::CHECKOUT_SUMMARY_EVENT;
|
||||||
|
/** @var Event|null $checkoutEvent */
|
||||||
|
$checkoutEvent = $usesEventSummary
|
||||||
|
? $items
|
||||||
|
->map(fn (PurchaseItem $item) => $item->sourceCatalogItem?->event)
|
||||||
|
->filter()
|
||||||
|
->unique('id')
|
||||||
|
->first()
|
||||||
|
: null;
|
||||||
|
|
||||||
$subtotal = $items->isNotEmpty()
|
$subtotal = $items->isNotEmpty()
|
||||||
? $items->reduce(
|
? $items->reduce(
|
||||||
@@ -64,6 +79,13 @@ class PurchaseResource extends JsonResource
|
|||||||
'email' => $this->email,
|
'email' => $this->email,
|
||||||
'items_source' => $items->isNotEmpty() ? 'purchase' : null,
|
'items_source' => $items->isNotEmpty() ? 'purchase' : null,
|
||||||
'items' => PurchaseItemResource::collection($items),
|
'items' => PurchaseItemResource::collection($items),
|
||||||
|
'event' => $this->when($usesEventSummary, fn () => $checkoutEvent === null
|
||||||
|
? null
|
||||||
|
: [
|
||||||
|
'id' => $checkoutEvent->id,
|
||||||
|
'title' => $checkoutEvent->title,
|
||||||
|
'image' => $checkoutEvent->attachment?->getTemporaryUrl(1440),
|
||||||
|
]),
|
||||||
'tickets_count' => $this->when($ticketsCount !== null, $ticketsCount),
|
'tickets_count' => $this->when($ticketsCount !== null, $ticketsCount),
|
||||||
'has_generated_tickets' => $this->when($ticketsCount !== null, $ticketsCount > 0),
|
'has_generated_tickets' => $this->when($ticketsCount !== null, $ticketsCount > 0),
|
||||||
'payment_verification' => $this->when($paymentVerification !== null, $paymentVerification),
|
'payment_verification' => $this->when($paymentVerification !== null, $paymentVerification),
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Commerce\Catalog\Models\Inventory;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ class CatalogSelectionResolver
|
|||||||
/** @var CatalogItem|null $catalogItem */
|
/** @var CatalogItem|null $catalogItem */
|
||||||
$catalogItem = CatalogItem::query()
|
$catalogItem = CatalogItem::query()
|
||||||
->whereKey($catalogItemId)
|
->whereKey($catalogItemId)
|
||||||
->where('tenant_code', $tenant->codigo)
|
->forTenantCatalog($tenant)
|
||||||
->lockForUpdate()
|
->lockForUpdate()
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
@@ -28,6 +28,12 @@ class CatalogSelectionResolver
|
|||||||
throw new NotFoundHttpException('Catalog item not found for tenant.');
|
throw new NotFoundHttpException('Catalog item not found for tenant.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (! $catalogItem->isSaleOpen()) {
|
||||||
|
throw ValidationException::withMessages([
|
||||||
|
"{$fieldPrefix}.catalog_item_id" => ['La venta de este producto finalizó.'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
if ($catalogItem->isBundle()) {
|
if ($catalogItem->isBundle()) {
|
||||||
if ($variantId !== null) {
|
if ($variantId !== null) {
|
||||||
throw ValidationException::withMessages([
|
throw ValidationException::withMessages([
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Services\StockReservationService;
|
use App\Domains\Commerce\Catalog\Services\StockReservationService;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\PurchaseStateGuard;
|
use App\Domains\Commerce\Purchase\Services\PurchaseStateGuard;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\PurchaseStateGuard;
|
use App\Domains\Commerce\Purchase\Services\PurchaseStateGuard;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Catalog\Enums\InventorySubject;
|
use App\Domains\Commerce\Catalog\Enums\InventorySubject;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
|
|
||||||
class InsufficientStockMessageBuilder
|
class InsufficientStockMessageBuilder
|
||||||
{
|
{
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Attachable\Models\Attachment;
|
use App\Shared\Attachable\Models\Attachment;
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
class PurchaseItemSnapshotFactory
|
class PurchaseItemSnapshotFactory
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
|
use App\Domains\Core\Tenant\Models\StorefrontWebsiteType;
|
||||||
|
|
||||||
|
class PurchaseResponseLoader
|
||||||
|
{
|
||||||
|
public function load(Purchase $purchase): Purchase
|
||||||
|
{
|
||||||
|
$purchase->loadMissing('tenant.storefrontWebsiteType');
|
||||||
|
$usesEventSummary = $purchase->tenant?->storefrontWebsiteType?->checkout_summary_type
|
||||||
|
=== StorefrontWebsiteType::CHECKOUT_SUMMARY_EVENT;
|
||||||
|
$relations = [
|
||||||
|
'tenant',
|
||||||
|
'items.sourceCatalogItem.event.attachment',
|
||||||
|
'stockReservation',
|
||||||
|
];
|
||||||
|
|
||||||
|
if (! $usesEventSummary) {
|
||||||
|
$relations[] = 'items.imageAttachment';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
$purchase->status === Purchase::STATUS_IN_REVIEW
|
||||||
|
&& $purchase->payment_method === 'transfer'
|
||||||
|
) {
|
||||||
|
$relations[] = 'telepagosPaymentCandidates.payment';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $purchase->load($relations);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Catalog\Services\StockReservationService;
|
use App\Domains\Commerce\Catalog\Services\StockReservationService;
|
||||||
use App\Domains\Purchase\Exceptions\PurchaseExpiredException;
|
use App\Domains\Commerce\Purchase\Exceptions\PurchaseExpiredException;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
|
|
||||||
class SourceCartService
|
class SourceCartService
|
||||||
{
|
{
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services\Checkout;
|
namespace App\Domains\Commerce\Purchase\Services\Checkout;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Cart\Services\CartVariantReplacementService;
|
use App\Domains\Commerce\Cart\Services\CartVariantReplacementService;
|
||||||
use App\Domains\Catalog\Exceptions\StockReservationExpiredException;
|
use App\Domains\Commerce\Catalog\Exceptions\StockReservationExpiredException;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Catalog\Models\Variant;
|
use App\Domains\Commerce\Catalog\Models\Variant;
|
||||||
use App\Domains\Catalog\Services\CatalogInventoryService;
|
use App\Domains\Commerce\Catalog\Services\CatalogInventoryService;
|
||||||
use App\Domains\Catalog\Services\StockReservationService;
|
use App\Domains\Commerce\Catalog\Services\StockReservationService;
|
||||||
use App\Domains\Purchase\Exceptions\InsufficientStockException;
|
use App\Domains\Commerce\Purchase\Exceptions\InsufficientStockException;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
use App\Domains\Commerce\Purchase\Services\UserPurchaseLimitService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -359,6 +359,13 @@ class StartCheckoutService
|
|||||||
'cart_id' => __('api.purchase.catalog_item_wrong_tenant'),
|
'cart_id' => __('api.purchase.catalog_item_wrong_tenant'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($tenant->active_event_id !== null
|
||||||
|
&& $item->catalogItem->event_id !== $tenant->active_event_id) {
|
||||||
|
throw ValidationException::withMessages([
|
||||||
|
'cart_id' => __('api.purchase.catalog_item_missing'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Services\Checkout\CompleteCheckoutService;
|
use App\Domains\Commerce\Purchase\Services\Checkout\CompleteCheckoutService;
|
||||||
use App\Domains\Purchase\Services\Checkout\EditCheckoutService;
|
use App\Domains\Commerce\Purchase\Services\Checkout\EditCheckoutService;
|
||||||
use App\Domains\Purchase\Services\Checkout\ReleaseCheckoutService;
|
use App\Domains\Commerce\Purchase\Services\Checkout\ReleaseCheckoutService;
|
||||||
use App\Domains\Purchase\Services\Checkout\StartCheckoutService;
|
use App\Domains\Commerce\Purchase\Services\Checkout\StartCheckoutService;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Measures likely DNI typing errors using the optimal-string-alignment
|
* Measures likely DNI typing errors using the optimal-string-alignment
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Core\Tenant\Models\Tenant;
|
||||||
use App\Domains\Ticket\Models\TicketRefund;
|
use App\Domains\Ticketing\Ticket\Models\TicketRefund;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
class PurchaseRefundSummaryService
|
class PurchaseRefundSummaryService
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\Cart;
|
use App\Domains\Commerce\Cart\Models\Cart;
|
||||||
use App\Domains\Catalog\Models\StockReservation;
|
use App\Domains\Commerce\Catalog\Models\StockReservation;
|
||||||
use App\Domains\Purchase\Exceptions\PurchaseExpiredException;
|
use App\Domains\Commerce\Purchase\Exceptions\PurchaseExpiredException;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
class PurchaseStateGuard
|
class PurchaseStateGuard
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Database\Query\Builder;
|
use Illuminate\Database\Query\Builder;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Purchase\Services;
|
namespace App\Domains\Commerce\Purchase\Services;
|
||||||
|
|
||||||
use App\Domains\Cart\Models\CartItem;
|
use App\Domains\Commerce\Cart\Models\CartItem;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Commerce\Catalog\Models\CatalogItem;
|
||||||
use App\Domains\Purchase\Exceptions\PurchaseLimitExceededException;
|
use App\Domains\Commerce\Purchase\Exceptions\PurchaseLimitExceededException;
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use App\Domains\Purchase\Models\PurchaseItem;
|
use App\Domains\Commerce\Purchase\Models\PurchaseItem;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Domains\Purchase\Controllers\PurchaseController;
|
use App\Domains\Commerce\Purchase\Controllers\PurchaseController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('tenants/{tenant:codigo}')->middleware('auth:sanctum')->group(function (): void {
|
Route::prefix('tenants/{tenant:codigo}')->middleware('auth:sanctum')->group(function (): void {
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Sale\Controllers\AdminApp;
|
namespace App\Domains\Commerce\Sale\Controllers\AdminApp;
|
||||||
|
|
||||||
use App\Domains\Sale\Requests\AdminAppSaleIndexRequest;
|
use App\Domains\Commerce\Sale\Requests\AdminAppSaleIndexRequest;
|
||||||
use App\Domains\Sale\Requests\AdminAppSaleModificationIndexRequest;
|
use App\Domains\Commerce\Sale\Requests\AdminAppSaleModificationIndexRequest;
|
||||||
use App\Domains\Sale\Requests\AdminAppSaleModificationPdfRequest;
|
use App\Domains\Commerce\Sale\Requests\AdminAppSaleModificationPdfRequest;
|
||||||
use App\Domains\Sale\Requests\AdminAppSalePdfRequest;
|
use App\Domains\Commerce\Sale\Requests\AdminAppSalePdfRequest;
|
||||||
use App\Domains\Sale\Resources\AdminApp\SaleDetailResource;
|
use App\Domains\Commerce\Sale\Resources\AdminApp\SaleDetailResource;
|
||||||
use App\Domains\Sale\Resources\AdminApp\SaleModificationResource;
|
use App\Domains\Commerce\Sale\Resources\AdminApp\SaleModificationResource;
|
||||||
use App\Domains\Sale\Resources\AdminApp\SaleResource;
|
use App\Domains\Commerce\Sale\Resources\AdminApp\SaleResource;
|
||||||
use App\Domains\Sale\Resources\AdminApp\SaleTicketResource;
|
use App\Domains\Commerce\Sale\Resources\AdminApp\SaleTicketResource;
|
||||||
use App\Domains\Sale\Services\AdminAppSaleExcelService;
|
use App\Domains\Commerce\Sale\Services\AdminAppSaleExcelService;
|
||||||
use App\Domains\Sale\Services\AdminAppSalePdfService;
|
use App\Domains\Commerce\Sale\Services\AdminAppSalePdfService;
|
||||||
use App\Domains\Sale\Services\AdminAppSaleService;
|
use App\Domains\Commerce\Sale\Services\AdminAppSaleService;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Sale\Requests;
|
namespace App\Domains\Commerce\Sale\Requests;
|
||||||
|
|
||||||
use App\Domains\Purchase\Models\Purchase;
|
use App\Domains\Commerce\Purchase\Models\Purchase;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Sale\Requests;
|
namespace App\Domains\Commerce\Sale\Requests;
|
||||||
|
|
||||||
class AdminAppSaleModificationIndexRequest extends AdminAppSaleIndexRequest
|
class AdminAppSaleModificationIndexRequest extends AdminAppSaleIndexRequest
|
||||||
{
|
{
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Domains\Sale\Requests;
|
namespace App\Domains\Commerce\Sale\Requests;
|
||||||
|
|
||||||
use App\Domains\Shared\Rules\ValidTimezone;
|
use App\Shared\Rules\ValidTimezone;
|
||||||
|
|
||||||
class AdminAppSaleModificationPdfRequest extends AdminAppSaleModificationIndexRequest
|
class AdminAppSaleModificationPdfRequest extends AdminAppSaleModificationIndexRequest
|
||||||
{
|
{
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user